yuanyuan hai 1 ano
pai
achega
478c341fc2
Modificáronse 74 ficheiros con 6003 adicións e 339 borrados
  1. 3 2
      src/config.json
  2. 2 0
      src/go.mod
  3. 4 0
      src/go.sum
  4. 15 0
      src/jfw/config/config.go
  5. 26 5
      src/jfw/filter/anonymousUser.go
  6. 2 1
      src/jfw/filter/filter.go
  7. 2 2
      src/jfw/front/classificationTag.go
  8. 55 10
      src/jfw/front/dataExport.go
  9. 18 0
      src/jfw/front/login.go
  10. 9 0
      src/jfw/front/wx_dataExport.go
  11. 9 0
      src/jfw/modules/app/src/app/front/dataExport.go
  12. 3 3
      src/jfw/modules/app/src/app/front/ws_dataExport.go
  13. 20 2
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js
  14. 9 1
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js
  15. 3 3
      src/jfw/modules/app/src/web/staticres/jyapp/dataExport/css/dataExport.css
  16. 7 1
      src/jfw/modules/app/src/web/templates/big-member/page_ent_portrait.html
  17. 3 0
      src/jfw/modules/app/src/web/templates/big-member/page_unit_portrayal.html
  18. 345 41
      src/jfw/modules/app/src/web/templates/dataExport/dataExport.html
  19. 8 4
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html
  20. 8 3
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerInput.html
  21. 8 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html
  22. 8 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html
  23. 3 0
      src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html
  24. 48 46
      src/jfw/modules/subscribepay/src/dataexport.json
  25. 1 1
      src/jfw/modules/subscribepay/src/entity/dataExportPackStruct.go
  26. 5 2
      src/jfw/modules/subscribepay/src/entity/dataexport.go
  27. 32 27
      src/jfw/modules/subscribepay/src/entity/order.go
  28. 25 27
      src/jfw/modules/subscribepay/src/entity/subscribeVip.go
  29. 3 3
      src/jfw/modules/subscribepay/src/go.mod
  30. 4 4
      src/jfw/modules/subscribepay/src/go.sum
  31. 121 0
      src/jfw/modules/subscribepay/src/pay/derivedCondition.go
  32. 160 7
      src/jfw/modules/subscribepay/src/pay/util.go
  33. 1 1
      src/jfw/modules/subscribepay/src/service/dataExportPay.go
  34. 105 2
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  35. 124 44
      src/jfw/modules/subscribepay/src/util/dataExportExcel.go
  36. 9 1
      src/web/staticres/big-member/js/unit_portrayal.js
  37. 19 1
      src/web/staticres/common-module/collection/js/ent_portrait.js
  38. 13 3
      src/web/staticres/common-module/collection/js/index-wx.js
  39. 13 3
      src/web/staticres/common-module/collection/js/index.js
  40. 114 0
      src/web/staticres/common-module/dataExport/components/popup-data-export.js
  41. 81 0
      src/web/staticres/common-module/dataExport/css/association.css
  42. 136 0
      src/web/staticres/common-module/dataExport/css/dataExportAppend.css
  43. 105 0
      src/web/staticres/common-module/dataExport/css/popup-data-export.css
  44. BIN=BIN
      src/web/staticres/common-module/dataExport/image/help.png
  45. BIN=BIN
      src/web/staticres/common-module/dataExport/image/right_corner.png
  46. 86 0
      src/web/staticres/common-module/dataExport/js/association.js
  47. 2429 0
      src/web/staticres/common-module/js/mapJSON.js
  48. 67 0
      src/web/staticres/css/dev2/newBidSearch.css
  49. 248 1
      src/web/staticres/dataExport/css/conditions.css
  50. 17 0
      src/web/staticres/dataExport/css/previewData.css
  51. 6 0
      src/web/staticres/dataExport/js/conditions_order.js
  52. 3 1
      src/web/staticres/dataExport/js/delbox.js
  53. 123 0
      src/web/staticres/frontRouter/pc/collection/css/index-pc.css
  54. 94 29
      src/web/staticres/frontRouter/pc/collection/js/index-pc.js
  55. BIN=BIN
      src/web/staticres/images/dataExport/choose_right.png
  56. BIN=BIN
      src/web/staticres/images/dataExport/close.png
  57. BIN=BIN
      src/web/staticres/images/dataExport/qr.png
  58. BIN=BIN
      src/web/staticres/images/right_corner.png
  59. 42 1
      src/web/staticres/js/biddingSearch.js
  60. 9 1
      src/web/staticres/js/ent-search-index-pc.js
  61. 1 0
      src/web/staticres/js/login.js
  62. 3 3
      src/web/staticres/wx_dataExport/css/dataExport.css
  63. 3 0
      src/web/templates/big-member/wx/page_unit_portrayal.html
  64. 23 0
      src/web/templates/frontRouter/pc/collection/sess/index.html
  65. 7 1
      src/web/templates/frontRouter/wx/collection/sess/ent_portrait.html
  66. 3 0
      src/web/templates/frontRouter/wx/collection/sess/index.html
  67. 752 21
      src/web/templates/pc/dataExport_sieve.html
  68. 1 1
      src/web/templates/pc/entsearchindex.html
  69. 40 0
      src/web/templates/pc/supsearch.html
  70. 323 22
      src/web/templates/weixin/dataExport/dataExport.html
  71. 8 1
      src/web/templates/weixin/dataExport/dataExport_buyerEdit.html
  72. 8 1
      src/web/templates/weixin/dataExport/dataExport_buyerInput.html
  73. 9 2
      src/web/templates/weixin/dataExport/dataExport_winnerEdit.html
  74. 9 2
      src/web/templates/weixin/dataExport/dataExport_winnerInput.html

+ 3 - 2
src/config.json

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

+ 2 - 0
src/go.mod

@@ -8,6 +8,7 @@ require (
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v1.0.4-0.20231109032304-2da6db20132a
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
+	github.com/ClickHouse/clickhouse-go v1.5.4
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/bwmarrin/snowflake v0.3.0
 	github.com/fsnotify/fsnotify v1.6.0
@@ -31,6 +32,7 @@ require (
 	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/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // 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

+ 4 - 0
src/go.sum

@@ -74,6 +74,7 @@ github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I
 github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
+github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
 github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
 github.com/ClickHouse/clickhouse-go/v2 v2.2.0/go.mod h1:8f2XZUi7XoeU+uPIytSi1cvx8fmJxi7vIgqpvYTF1+o=
 github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
@@ -119,6 +120,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
 github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
+github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk=
 github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
 github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw=
 github.com/bos-hieu/mongostore v0.0.2/go.mod h1:8AbbVmDEb0yqJsBrWxZIAZOxIfv/tsP8CDtdHduZHGg=
@@ -140,6 +142,7 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn
 github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
 github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
@@ -669,6 +672,7 @@ github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNc
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4 v2.5.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
 github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=

+ 15 - 0
src/jfw/config/config.go

@@ -6,7 +6,9 @@ import (
 	"app.yhyue.com/moapp/jybase/mail"
 	"app.yhyue.com/moapp/jypkg/middleground"
 	"app.yhyue.com/moapp/jypkg/public"
+	"database/sql"
 	"fmt"
+	_ "github.com/ClickHouse/clickhouse-go"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
@@ -30,6 +32,7 @@ var (
 	HotBuyerConfig       HotConfig
 	IpList               *ipmatch.WhiteIp
 	IpInitLock           sync.RWMutex //锁
+	ClickhouseDb         *sql.DB
 )
 
 type HotConfig struct {
@@ -47,6 +50,7 @@ func init() {
 	g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.yaml")
 	util.ReadConfig(&Sysconfig)
 	IpInit()
+	//ClickhouseInit()
 	//log.Println("sysconfig:", Sysconfig)
 	WeixinConfig, _ = Sysconfig["wxJianyu"].(map[string]interface{})
 	Wxoauth = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=` + util.ObjToString(WeixinConfig["appid"]) + `&redirect_uri=%s&response_type=code&scope=snsapi_base&state=%s#wechat_redirect`
@@ -198,3 +202,14 @@ func convertToPinyin(word string) string {
 	}
 	return pinyinStr
 }
+
+func ClickhouseInit() *sql.DB {
+
+	// 创建ClickHouse连接
+	connect, err := sql.Open("clickhouse", util.InterfaceToStr(Seoconfig["clickhouseUrl"]))
+	if err != nil {
+		fmt.Println("连接失败:", err)
+		return nil
+	}
+	return connect
+}

+ 26 - 5
src/jfw/filter/anonymousUser.go

@@ -15,6 +15,7 @@ import (
 	"fmt"
 	"github.com/bwmarrin/snowflake"
 	"io/ioutil"
+	"jy/src/jfw/config"
 	"log"
 	"net/http"
 	"strings"
@@ -30,7 +31,7 @@ type AnonymousAuth struct {
 }
 
 var (
-	node, _ = snowflake.NewNode(1)
+	Node *snowflake.Node
 )
 
 func initPrivatePublicKey() {
@@ -105,12 +106,14 @@ func (sk *AnonymousAuth) Do() {
 			if sk.R.Method != "GET" || !strings.Contains(accept, "text/html") { //避免多请求
 				return
 			}
-			guestUID := node.Generate()
+			guestUID := Node.Generate()
 			cookie := &http.Cookie{
 				Name:     "JYGuestUID",
 				Value:    util.InterfaceToStr(guestUID),
 				Path:     "/",
 				HttpOnly: true,
+				Domain:   util.ObjToString(config.Sysconfig["cookiedomain"]),
+				Expires:  time.Now().AddDate(10, 0, 0),
 			}
 			http.SetCookie(sk.W, cookie)
 			//未登录用户增加匿名身份信息
@@ -130,6 +133,15 @@ func (sk *AnonymousAuth) Do() {
 				"creation_time": time.Now().Unix(),
 			}
 			public.BaseMysql.Insert("anonymous_identity", data)
+			//stmt, err := config.ClickhouseDb.Prepare("INSERT INTO anonymous_identity (ip, client, os, browse, url, guestUID, mdescribe, refer, method, creation_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
+			//if err != nil {
+			//	return
+			//}
+			//defer stmt.Close()
+			//_, err = stmt.Exec(util.GetIp(sk.R), agent, util.GetOS(agent), util.GetBrowse(agent), sk.R.RequestURI, util.InterfaceToStr(guestUID), str, sk.R.Referer(), sk.R.Method, time.Now().Unix())
+			//if err != nil {
+			//	return
+			//}
 			return
 		}
 
@@ -140,17 +152,14 @@ func (sk *AnonymousAuth) Do() {
 		}
 		eid, err := sk.R.Cookie("eid")
 		if err != nil {
-			//log.Println("匿名用户获取eid失败", err.Error())
 			return
 		}
 		if fid.Value != "" && eid.Value != "" {
 			eData, err1 := Decryption(eid.Value)
 			if err1 != nil {
-				//log.Printf("匿名用户eid:%s,fid:%s 解密失败err:%s", eid.Value, fid.Value, err1.Error())
 				return
 			}
 			if fid.Value != eData {
-				//log.Printf("匿名用户身份验证不通过,eid:%s,fid:%s,eData:%s", eid.Value, fid.Value, eData)
 				return
 			}
 			trustedId := encrypt.SE.EncodeString(fid.Value + "***" + jyGuestUID.Value)
@@ -159,10 +168,22 @@ func (sk *AnonymousAuth) Do() {
 				Value:    trustedId,
 				Path:     "/",
 				HttpOnly: true,
+				Domain:   util.ObjToString(config.Sysconfig["cookiedomain"]),
+				Expires:  time.Now().AddDate(10, 0, 0),
 			}
 			http.SetCookie(sk.W, cookie)
 			public.BaseMysql.Update("anonymous_identity", map[string]interface{}{"guestUID": jyGuestUID.Value},
 				map[string]interface{}{"fid": fid.Value, "trustedId": trustedId})
+			//stmt, err := config.ClickhouseDb.Prepare("UPDATE anonymous_identity SET fid = ? and trustedId = ? WHERE guestUID = ?")
+			//if err != nil {
+			//	fmt.Println("Failed to prepare statement:", err)
+			//	return
+			//}
+			//defer stmt.Close()
+			//_, err = stmt.Exec(fid.Value, trustedId, jyGuestUID.Value)
+			//if err != nil {
+			//	return
+			//}
 		} else {
 			log.Println("无身份验证信息")
 		}

+ 2 - 1
src/jfw/filter/filter.go

@@ -2,6 +2,7 @@ package filter
 
 import (
 	"crypto/rsa"
+	"github.com/bwmarrin/snowflake"
 	. "jy/src/jfw/config"
 	"jy/src/jfw/jyutil"
 	"net/http"
@@ -27,7 +28,7 @@ var (
 func init() {
 	xweb.AddFilter(&Filter{})
 	go initPrivatePublicKey()
-
+	Node, _ = snowflake.NewNode(util.Int64All(Seoconfig["node"]))
 	//日志过滤 路由集合
 	go fs.FSNotifyFUNC("sword->%s", "./route.json", true, func() {
 		util.ReadConfig("./route.json", &RouteConf)

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

@@ -121,9 +121,9 @@ func GetHotWinnerBuyer(identityType, limit int) []map[string]interface{} {
 	queryTotal := gconv.Int(gconv.Float64(limit) * 1.5)
 	var querySql string
 	if isWinner {
-		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "s_winner"}},{"exists": {"field": "entidlist"}}],"must_not":[{"term":{"entidlist":"-"}}]}},"_source":["buyer","s_winner","entidlist"],"size": %d}`, queryTotal)
+		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "s_winner"}},{"exists": {"field": "entidlist"}}],"must_not":[{"term":{"entidlist":"-"}}]}},"_source":["buyer","s_winner","entidlist"],"sort":[{"lasttime": "desc"}],"size": %d}`, queryTotal)
 	} else {
-		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "buyer"}}]}},"_source":["buyer","s_winner","entidlist"],"size": %d}`, queryTotal)
+		querySql = fmt.Sprintf(`{"query": {"bool": {"must": [{"exists": {"field": "buyer"}}]}},"_source":["buyer","s_winner","entidlist"],"sort":[{"lasttime": "desc"}],"size": %d}`, queryTotal)
 	}
 	getData := elastic.GetNoLimit("projectset", "projectset", querySql)
 	var finalList []map[string]interface{}

+ 55 - 10
src/jfw/front/dataExport.go

@@ -32,14 +32,16 @@ type DataExport struct {
 	toOrderDetail xweb.Mapper `xweb:"/front/dataExport/toOrderDetail/(.*)"`  //订单详情
 	getOrderCode  xweb.Mapper `xweb:"/front/dataExport/getOrderCode/(\\w+)"` //申请发票获取订单编号
 
-	superSearchExport xweb.Mapper `xweb:"/front/dataExport/superSearchExport"`      //数据导出-超级搜索
-	toCreateOrderPage xweb.Mapper `xweb:"/front/dataExport/toCreateOrderPage/(.*)"` //数据导出-订单页面
-	previewData       xweb.Mapper `xweb:"/front/(.*)/previewData/(.*)"`             //数据导出-数据预览
-	sendMailVerify    xweb.Mapper `xweb:"/front/dataExport/sendMailVerify"`         //发送邮箱验证码
-	checkMailVerify   xweb.Mapper `xweb:"/front/dataExport/checkMailVerify"`        //验证邮箱验证码
-	paysuccess        xweb.Mapper `xweb:"/front/dataExport/paysuccess"`             //支付成功页面
-	checkPhoneVerify  xweb.Mapper `xweb:"/front/dataExport/checkPhoneVerify"`       //验证手机号
-	fontSet           xweb.Mapper `xweb:"/front/dataExport/fontSet/(.*)"`
+	superSearchExport  xweb.Mapper `xweb:"/front/dataExport/superSearchExport"`      //数据导出-超级搜索
+	toCreateOrderPage  xweb.Mapper `xweb:"/front/dataExport/toCreateOrderPage/(.*)"` //数据导出-订单页面
+	previewData        xweb.Mapper `xweb:"/front/(.*)/previewData/(.*)"`             //数据导出-数据预览
+	sendMailVerify     xweb.Mapper `xweb:"/front/dataExport/sendMailVerify"`         //发送邮箱验证码
+	checkMailVerify    xweb.Mapper `xweb:"/front/dataExport/checkMailVerify"`        //验证邮箱验证码
+	paysuccess         xweb.Mapper `xweb:"/front/dataExport/paysuccess"`             //支付成功页面
+	checkPhoneVerify   xweb.Mapper `xweb:"/front/dataExport/checkPhoneVerify"`       //验证手机号
+	fontSet            xweb.Mapper `xweb:"/front/dataExport/fontSet/(.*)"`
+	setDontPromptAgain xweb.Mapper `xweb:"/front/dataExport/setDontPromptAgain"` //数据导出-超出2w条,不再提示
+	getDontPromptAgain xweb.Mapper `xweb:"/front/dataExport/getDontPromptAgain"` //数据导出-超出2w条,不再提示
 
 	cancelOrder          xweb.Mapper `xweb:"/front/dataExport/cancelOrder"`              //取消订单
 	vipOrderDetail       xweb.Mapper `xweb:"/front/vipOrder/vipOrderDetail"`             //vip订单详情
@@ -165,7 +167,16 @@ func (d *DataExport) SieveData() {
 		winnerArr = strings.Split(winner, ",")
 		log.Println("winnerArr", winnerArr)
 	}
+	var isTitle int
+
 	if selectType != "" {
+		if strings.Count(selectType, "title") > 1 {
+			isTitle = 3 //包含标题及正文
+		} else if strings.Contains(selectType, "detail") {
+			isTitle = 2 //只包含正文
+		} else if strings.Contains(selectType, "title") {
+			isTitle = 1 //只包含标题
+		}
 		//去重 如果选取了标题及正文 引起的有2个title问题
 		if strings.Count(selectType, "title") > 1 {
 			var detail []string
@@ -192,6 +203,7 @@ func (d *DataExport) SieveData() {
 		"subtype":     subType,
 		"buyer":       buyerArr,
 		"buyerclass":  buyerclassArr,
+		"isTitle":     isTitle,
 		"winner":      winnerArr,
 		"comeintime":  time.Now().Unix(),
 		"comeinfrom":  "exportPage",
@@ -230,9 +242,9 @@ func (d *DataExport) SieveData() {
 			}
 		}
 		list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
-		if msgCount > 20000 {
+		/*if msgCount > 20000 {
 			msgCount = 20000
-		}
+		}*/
 		_res["data"] = map[string]interface{}{
 			"list":  subUrl(list, dataType),
 			"_id":   encrypt.SE.Encode2Hex(_id),
@@ -833,6 +845,39 @@ func (d *DataExport) ValuationList(order_code string) error {
 	return d.Render("/_error.html")
 }
 
+func (d *DataExport) SetDontPromptAgain() {
+	status := d.GetString("status") //0 提示  1 不再提示
+	userId := d.GetSession("userId").(string)
+	boo := public.MQFW.UpdateById("user", userId, map[string]interface{}{
+		"$set": map[string]interface{}{
+			"i_export_promptAgain": status,
+		},
+	})
+	d.ServeJson(map[string]interface{}{
+		"error_code": 0,
+		"error_msg":  "",
+		"success":    boo,
+	})
+	return
+}
+
+func (d *DataExport) GetDontPromptAgain() {
+	isPrompt := true
+	userId := d.GetSession("userId").(string)
+	user, ok := public.MQFW.FindById("user", userId, `"i_export_promptAgain":1`)
+	if ok && user != nil {
+		if (*user)["_id"] == nil || util.IntAll((*user)["i_export_promptAgain"]) == 1 {
+			isPrompt = false
+		}
+	}
+	d.ServeJson(map[string]interface{}{
+		"error_code": 0,
+		"error_msg":  "",
+		"isPrompt":   isPrompt,
+	})
+	return
+}
+
 //
 //func (d *DataExport) EntDataExport(_id string) error {
 //	id := util.se.Decode4Hex(_id)

+ 18 - 0
src/jfw/front/login.go

@@ -435,6 +435,24 @@ func anonymousLogin(session *httpsession.Session, trustedId string) {
 
 	//匿名用户登录后创建关联信息
 	public.BaseMysql.Insert("anonymous_association", queryData)
+
+	//var count int
+	//err := config.ClickhouseDb.QueryRow(fmt.Sprintf(`SELECT count(*) FROM anonymous_association where positionId = %v and mgoUserId = "%v" and trustedId = "%v"`, positionId, mgoUserId, trustedId)).Scan(&count)
+	//if err != nil {
+	//	return
+	//}
+	////queryData := map[string]interface{}{"positionId": positionId, "mgoUserId": mgoUserId, "trustedId": trustedId, "creation_time": time.Now().Unix()}
+	//if count > 0 {
+	//	stmt, err := config.ClickhouseDb.Prepare("INSERT INTO anonymous_identity (positionId, mgoUserId, trustedId, creation_time) VALUES (?, ?, ?, ?)")
+	//	if err != nil {
+	//		return
+	//	}
+	//	defer stmt.Close()
+	//	_, err = stmt.Exec(positionId, mgoUserId, trustedId, time.Now().Unix())
+	//	if err != nil {
+	//		return
+	//	}
+	//}
 }
 
 func afterLogin(phone string, session *httpsession.Session, fool bool) (bool, *map[string]interface{}, map[string]interface{}) {

+ 9 - 0
src/jfw/front/wx_dataExport.go

@@ -184,7 +184,15 @@ func (w *WxDataExport) SaveData() error {
 			log.Println("keyWord param 反序列化异常,查看前后台字段是否对应")
 		}
 	}
+	var isTitle int
 	if selectType != "" {
+		if strings.Count(selectType, "title") > 1 {
+			isTitle = 3 //包含标题及正文
+		} else if strings.Contains(selectType, "detail") {
+			isTitle = 2 //只包含正文
+		} else if strings.Contains(selectType, "title") {
+			isTitle = 1 //只包含标题
+		}
 		//去重 如果选取了标题及正文 引起的有2个title问题
 		if strings.Count(selectType, "title") > 1 {
 			var detail []string
@@ -207,6 +215,7 @@ func (w *WxDataExport) SaveData() error {
 		"keywords":    keyWordArr,
 		"minprice":    min,
 		"maxprice":    max,
+		"isTitle":     isTitle,
 		"subtype":     subType,
 		"buyer":       buyerArr,
 		"buyerclass":  buyerclassArr,

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

@@ -186,7 +186,15 @@ func (w *WxDataExport) SaveData() error {
 			}
 		}
 	}
+	var isTitle int
 	if selectType != "" {
+		if strings.Count(selectType, "title") > 1 {
+			isTitle = 3 //包含标题及正文
+		} else if strings.Contains(selectType, "detail") {
+			isTitle = 2 //只包含正文
+		} else if strings.Contains(selectType, "title") {
+			isTitle = 1 //只包含标题
+		}
 		//去重 如果选取了标题及正文 引起的有2个title问题
 		if strings.Count(selectType, "title") > 1 {
 			var detail []string
@@ -207,6 +215,7 @@ func (w *WxDataExport) SaveData() error {
 		"region":      regionArr,
 		"industry":    industryArr,
 		"keywords":    keyWordArr,
+		"isTitle":     isTitle,
 		"minprice":    min,
 		"maxprice":    max,
 		"subtype":     subType,

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

@@ -83,9 +83,9 @@ func (w *WsDataExport) GetPreview() error {
 		}
 	}
 	list := dataexport.FormatExportData(public.Mgo_Ent, &res_screen, config.Sysconfig["webdomain"].(string), dataType, true)
-	if msgCount > 20000 {
-		msgCount = 20000
-	}
+	//if msgCount > 20000 {
+	//	msgCount = 20000
+	//}
 	_res["data"] = subUrl(list, dataType)
 	_res["dataType"] = dataType
 	_res["total"] = msgCount

+ 20 - 2
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/ent_portrait.js

@@ -4,7 +4,8 @@ var vNode = {
   components: {
     vipComponent: vipComponent,
     hisproComponent: hisproComponent,
-    forwardshare: vmForward
+    forwardshare: vmForward,
+
   },
   data () {
     // 修改柱状条颜色为渐变色
@@ -326,6 +327,11 @@ var vNode = {
       var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
       return memberCustom || isNewVip || entniche
     },
+    phoneUnlockTip () {
+      var info = this.powerInfo
+      var phone = this.entBaseInfo.phone
+      return info.isFree && phone && phone.indexOf('*') !== -1
+    },
     noShowTip: function () {
       return (!this.isFree && !this.updateVipStatus && !this.customerServiceStatus) || (this.isFree && this.canFreeTrial)
     }
@@ -558,8 +564,16 @@ var vNode = {
         }
       });
     },
+    next_export (obj){
+      console.log(obj)
+      this.onExport('popupClick')
+    },
     //数据导出
-    onExport () {
+    onExport (type) {
+      if(this.topProject.count > 20000 && type !== 'popupClick' && this.$refs.popup_dataExport.isPrompt){
+        this.$refs.popup_dataExport.show = true
+        return
+      }
       var _this = this
       var storageSet = this.getHighSet()
       var data = {
@@ -1555,6 +1569,10 @@ var vNode = {
       //   }).then(function () {})
       // }
     },
+    goToUnlock: function () {
+      // this.savePageState()
+      location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=ent_portrait_contacts'
+    },
     //免费赠送企业全景分析体验 去解锁
     goGiveAnalysis: function () {
       location.href = '/jyapp/frontPage/bigmember/free/perfect_info?source=ent_portrait_freeuser';

+ 9 - 1
src/jfw/modules/app/src/web/staticres/jyapp/big-member/js/unit_portrayal.js

@@ -606,12 +606,20 @@ var vNode = {
         location.href = './free_buyer_project_news?entName=' + decodeURIComponent(utils.getParam('entName'))
       }
     },
+    next_export (obj){
+      console.log(obj)
+      this.onExport('popupClick')
+    },
     //数据导出
-    onExport () {
+    onExport (type) {
       if(!this.isLogin) {
         window.location.href = "/jyapp/free/login?to=back";
         return
       }
+      if(this.dt.pageCount > 20000 && type !== 'popupClick' && this.$refs.popup_dataExport.isPrompt){
+        this.$refs.popup_dataExport.show = true
+        return
+      }
       var storageSet = this.getHighSet()
       // var isMember = this.bigStatus > 0 && this.power.indexOf(5) > -1
       var data = {

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

@@ -169,12 +169,12 @@ html .page .elseChoose .elseChooseList {
 
 html .page .elseChoose .elseChooseList ul li {
   padding: 0 .4rem;
-  height: .88rem;
-  line-height: .88rem;
+  /* height: .88rem;
+  line-height: .88rem; */
   background: #fff;
   font-size: 0.3rem;
   color: #1d1d1d;
-  margin-bottom: .24rem;
+  /* margin-bottom: .24rem; */
 }
 
 html .page .elseChoose .elseChooseList ul li a {

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

@@ -20,6 +20,7 @@
         href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/css/ent_portrait.css?v={{Msg "seo" "version"}}'/>
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/mainSearch/css/j-icons.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/forward-share/css/forward.css?v={{Msg "seo" "version"}}'/>
+  <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/popup-data-export.css?v={{Msg "seo" "version"}}'/>
   <!--E-当前页面的css资源-->
 </head>
 <style>
@@ -163,7 +164,10 @@
                 </div>
                 <div class="card-column organization-code">
                   <div class="ent-info-label">联系方式</div>
-                  <div class="ent-info-text">${entBaseInfo.phone ? entBaseInfo.phone : '-'}</div>
+                  <div class="ent-info-text">
+                    <p>${entBaseInfo.phone ? entBaseInfo.phone : '-'}</p>
+                    <p class="highlight-text" v-show="phoneUnlockTip" @click="goToUnlock">解锁查看</p>
+                  </div>
                 </div>
               </div>
               <div class="card-row">
@@ -652,6 +656,7 @@
         </div>
       </div>
     </div>
+    <popup-data-export ref="popup_dataExport" @next="next_export"></popup-data-export>
   </div>
   <div id="jyKeepComponent">
     <keep-component ref="vKeepComponent" @on-change-keep="changeKeepStatus" :bid="nowOpenBid" :first="false"></keep-component>
@@ -683,6 +688,7 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/visited.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/keep-tags/keep-tags-template.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/keep-tags/keep-ent-tags-template.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/components/popup-data-export.js?v={{Msg "seo" "version"}}'></script>
 <script>
   // 收藏组件
   var vKeepComponent = new Vue({

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

@@ -27,6 +27,7 @@
   <link rel="stylesheet"
     href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/css/unit_portrayal.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/forward-share/css/forward.css?v={{Msg "seo" "version"}}'/>
+  <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/popup-data-export.css?v={{Msg "seo" "version"}}'/>
   <style>
     .skeleton {
       height: 100%;
@@ -701,6 +702,7 @@
           </van-tab>
         </van-tabs>
       </div>
+      <popup-data-export ref="popup_dataExport" @next="next_export"></popup-data-export>
     </div>
     <div id="jyKeepComponent">
       <keep-component ref="vKeepComponent" @on-change-keep="changeKeepStatus" :bid="nowOpenBid" :first="false">
@@ -752,6 +754,7 @@
   <script
     src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/keep-tags/keep-ent-tags-template.js?v={{Msg "seo" "version"}}'>
   </script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/components/popup-data-export.js?v={{Msg "seo" "version"}}'></script>
   <script>
     // 收藏组件
     var vKeepComponent = new Vue({

+ 345 - 41
src/jfw/modules/app/src/web/templates/dataExport/dataExport.html

@@ -4,6 +4,8 @@
 <head>
     {{include "/common/meta.html"}}
     <title>数据导出</title>
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
     <link rel="stylesheet" type="text/css"
           href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/css/base.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" type="text/css"
@@ -20,10 +22,13 @@
           href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/appbutton.css?v={{Msg "seo" "version"}}"/>
     <link href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/p13.css?v={{Msg "seo" "version"}}" rel="stylesheet">
   <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/swiper.min.css">
+  <link rel="stylesheet"href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/dataExportAppend.css?v={{Msg "seo" "version"}}'/>
   <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/swiper.min.js"></script>
     <script src="https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js"></script>
     <script src="//cdn-common.jianyu360.com/cdn/lib/vue/2.6.14/vue.min.js"></script>
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.js"></script>
+    <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/js/mapJSON.js?v={{Msg "seo" "version"}}"></script>
     {{include "/common/js.html"}}
 </head>
 <style>
@@ -66,8 +71,8 @@
     html .page .chooseTime .dateMake input {
         display: inline-block;
         width: 3.05rem;
-        /*height: .72rem;
-        line-height: .72rem;*/
+        /* height: .72rem; */
+        line-height: 0.4rem;
         font-size: .28rem;
         border: 1px solid #CECECE;
         margin: .16rem .13rem;
@@ -217,6 +222,9 @@
     .swiper-container-horizontal>.swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction{
       top: 80%;
     }
+    [v-cloak] {
+    display: none!important;
+   }
 
 </style>
 <body class="p13">
@@ -226,30 +234,38 @@
     <span></span>
 </div>
 <div class="app-layout-content-b">
-    <div class="page">
-        <div class='main' style="">
-            <div class="progress" style="margin-top: -4px">
-                <div class="p-item">
-                    <p class="p-item-icon" style="background: #2cb7ca;">
-                        <i class="icon iconfont">&#xe606;</i>
-                    </p>
-                    <span class="active">条件筛选</span>
-                    <div class="line"></div>
+    <div class="page" style="background-color:#F5F6F7;">
+        <div class='main'>
+            <div class="screeningCondition">
+                <div  class="sc-btnContent">
+                    <span class="sc-icon"></span>
+                    <div class="sc-btn"><span class="sc-text">已存筛选&nbsp;</span><span class="sc-num">0</span></div>
                 </div>
-
-                <div class="p-item">
-                    <p class="p-item-icon">
-                        <i class="icon iconfont">&#xe617;</i>
-                    </p>
-                    <span>支付订单</span>
-                    <div class="line"></div>
-                </div>
-
-                <div class="p-item">
-                    <p class="p-item-icon icon-gray">
-                        <i class="icon iconfont">&#xe616;</i>
-                    </p>
-                    <span>数据导出</span>
+            </div>
+            <div class="progressBox">
+                <div class="progress" style="margin-top: -4px">
+                    <div class="p-item">
+                        <p class="p-item-icon" style="background: #2cb7ca;">
+                            <!-- <i class="icon iconfont">&#xe606;</i> -->
+                        </p>
+                        <span class="active">条件筛选</span>
+                        <div class="line"></div>
+                    </div>
+    
+                    <div class="p-item">
+                        <p class="p-item-icon">
+                            <!-- <i class="icon iconfont">&#xe617;</i> -->
+                        </p>
+                        <span>支付订单</span>
+                        <div class="line"></div>
+                    </div>
+    
+                    <div class="p-item">
+                        <p class="p-item-icon icon-gray">
+                            <!-- <i class="icon iconfont">&#xe616;</i> -->
+                        </p>
+                        <span>数据导出</span>
+                    </div>
                 </div>
             </div>
             <!-- dateChooseStart -->
@@ -261,13 +277,13 @@
                     <li><span data-value="2016_toNow"></span></li>
                 </ul>
                 <div class="dateMake">
-                    <i class="iconfont icon-rili" id="first"></i>
+                    <!-- <i class="iconfont icon-rili" id="first"></i> -->
                     <input id="starttime" type="text" placeholder="开始日期" readonly="readonly" unselectable="on"
                            onfocus="this.blur()"/>
                     <div class="heng">—</div>
                     <input id="endtime" type="text" placeholder="截止日期" readonly="readonly" unselectable="on"
                            onfocus="this.blur()"/>
-                    <i class="iconfont icon-rili" id="second"></i>
+                    <!-- <i class="iconfont icon-rili" id="second"></i> -->
                 </div>
             </div>
             <!-- dateChooseEnd -->
@@ -277,22 +293,22 @@
                 <p>*以下为非必选项</p>
                 <div class="elseChooseList">
                     <ul>
-                        <li><a href="/jyapp/front/dataExport/area">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/area')">
                                 <strong>区域</strong>
                                 <span id="area"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
-                        <li><a href="/jyapp/front/dataExport/industry">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/industry')">
                                 <strong>行业</strong>
                                 <span id="industry"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
-                        <li><a href="/jyapp/front/dataExport/buyerclass">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/buyerclass')">
                                 <strong style="width: 2.2rem;">采购单位类型</strong>
                                 <span id="buyClass"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
-                        <li><a href="/jyapp/front/dataExport/keyWord">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/keyWord')">
                                 <strong>关键词</strong>
                                 <span id="keyWord"></span>
                                 <i class="iconfont icon-arrow"></i>
@@ -302,24 +318,24 @@
                                 <span style="width: 4rem;" class="match">标题</span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
-                        <li><a href="/jyapp/front/dataExport/price">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/price')">
                                 <strong>金额</strong>
                                 <span id="price"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
 
-                        <li><a href="/jyapp/front/dataExport/subType">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/subType')">
                                 <strong>信息类型</strong>
                                 <span id="subType"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
 
-                        <li><a href="/jyapp/front/dataExport/buyerEdit">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/buyerEdit')">
                                 <strong>采购单位</strong>
                                 <span id="buyer"></span>
                                 <i class="iconfont icon-arrow"></i>
                             </a></li>
-                        <li><a href="/jyapp/front/dataExport/winnerEdit">
+                        <li><a href="JavaScript:;" onclick="goChoosedetail('/jyapp/front/dataExport/winnerEdit')">
                                 <strong>中标单位</strong>
                                 <span id="winner"></span>
                                 <i class="iconfont icon-arrow"></i>
@@ -453,7 +469,7 @@
             </div>
         </div>
         <!-- 多选弹框 -->
-        <div id="checkbox_dialog">
+        <div id="checkbox_dialog" v-cloak>
             <div class="mask" v-show="dialog_show">
                 <div class="box">
                     <div class="head"><p>关键词匹配方式</p><img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/images/icon_delete_gray@2x.png?v={{Msg "seo" "version"}}" alt="" @click.stop="dialog_show=false"></div>
@@ -507,6 +523,155 @@
                 window.location.reload();
             }
         });
+        
+            //接口回显逻辑
+            try{
+            $.ajax({
+        type: 'get',
+        url: '/subscribepay/dataExportPack/screenList',
+        async:sessionStorage.getItem('goScreen') != '1'?false:true,
+        success: function (res) { 
+          if(res.data && res.data.length > 0){
+            $('.sc-num').text(res.data.length)
+            if(sessionStorage.getItem('goScreen') != '1'){ // 非设置筛选条件相关的页面回来使用接口数据回显
+                localStorage.removeItem('date') 
+            localStorage.removeItem('areaHtml') 
+            localStorage.removeItem('city') 
+            localStorage.removeItem('province') 
+            localStorage.removeItem('area') 
+            localStorage.removeItem('industry')  
+            localStorage.removeItem('buyclass') 
+            localStorage.removeItem('keyWord') 
+            localStorage.removeItem('export_selectType')  
+            localStorage.removeItem('price')  
+            localStorage.removeItem('subType') 
+            localStorage.removeItem('subTypes')   
+            localStorage.removeItem('buyer') 
+            localStorage.removeItem('winner')
+            localStorage.setItem('index','-1') 
+            let val =res.data[0]
+            if(val.publishtime){
+        localStorage.setItem('date',val.publishtime) 
+        }
+        if (val.city || val.area) {
+        let str = ''
+        if (val.area) {
+          str += val.area.replace(/,/g, "、")
+        }
+        if (val.city) {
+          let arr = val.city.split(',')
+          str = str+'、'+ getArea_city(arr)
+        }
+        localStorage.setItem('areaHtml',str)  
+      }
+        if(val.city){
+          localStorage.setItem('city',val.city) 
+          let area = val.city.replace(/,/g, " ")
+          localStorage.setItem('area',area) 
+        }
+        if(val.area){
+          let allcity = ""
+          let str = ""
+          let arr = val.area.split(",")
+          let cityarr =[]
+          if(val.city){
+            str = val.city
+          }
+          arr.forEach(e=>{ // 选整个省下的所有城市
+            cityarr = cityarr.concat(getCitiesFromJSONMap(e))     
+          })
+          allcity = cityarr.toString()
+          localStorage.setItem('province', val.area)
+        if (str) {
+          localStorage.setItem('city', allcity + ',' + str)
+        } else {
+          localStorage.setItem('city', allcity)
+        }
+        let area;
+        if (allcity) {
+          area = allcity + ',' + val.region
+        } else {
+          area = val.region
+        }
+        let areaList = area.split(',') || []
+        areaList.forEach((e, index) => {
+          if(e === '上海' || e === '北京' || e === '天津' || e === '重庆'){
+            areaList[index] = e + '市'
+          }
+          if( e === '台湾'){
+            areaList[index]  = e + '省'
+          }
+        })
+        let areaStr = areaList.join(',')
+        if(areaStr){
+          localStorage.setItem('area', areaStr.replace(/,/g, " "))
+        }
+        }
+        if(!val.area && !val.city){
+          localStorage.setItem('area','全国') 
+          localStorage.setItem('areaHtml','全国') 
+        }
+         console.log(val.industry)
+        if(val.industry){
+          let str = val.industry.replace(/,/g, " ")
+          localStorage.setItem('industry',str)    
+        }else{
+          localStorage.setItem('industry','全部')   
+        }
+        if(val.buyerclass){
+          localStorage.setItem('buyclass',JSON.stringify(val.buyerclass.split(',')))    
+        }else{
+          localStorage.setItem('buyclass','[]')   
+        }
+        if (val.keywords && val.keywords.length > 0) {
+        let keyjson
+        try{
+          keyjson = JSON.parse(val.keywords)
+        }catch(e){
+          keyjson = val.keywords
+        }
+       // keyWord储存本地处理为驼峰式 自助导出页面使用本地回显存取的为驼峰式
+        keyjson.forEach((item) =>{
+          item.keyWord = item.keyword 
+          })
+        localStorage.setItem('keyWord', JSON.stringify(keyjson))
+       } else {
+        localStorage.setItem('keyWord', '[]')
+       }
+        if(val.selectType){
+          localStorage.setItem('export_selectType',selectType_dispose(val.selectType))  
+        }
+        if(val.minprice || val.maxprice){
+          let str = ""
+          str += (val.minprice || '-' )+'万元'+'-'+(val.maxprice || '-')+'万元'
+          localStorage.setItem('price',str)  
+        }else{
+          localStorage.setItem('price','全部')  
+        }
+        if(val.subtype){
+          let str = val.subtype.replace(/,/g, " ")
+          localStorage.setItem('subTypes',str)  
+          localStorage.setItem('subType',str)  
+        }else{
+          localStorage.setItem('subType','全部') 
+        }
+        if(val.buyer){
+          localStorage.setItem('buyer',val.buyer)
+        }
+        if(val.winner){
+          localStorage.setItem('winner',val.winner)
+        }      
+        }
+      }
+          sessionStorage.setItem('goScreen','2');
+         },
+         error: function (error) {
+         }
+         })
+        }catch(e){
+            
+        }
+   
         //
         var scrollTop = 0;
         //
@@ -556,6 +721,7 @@
             $("#starttime").removeClass("timeSelect");
             $("#endtime").removeClass("timeSelect");
             $(".dateMake").css({"color": "#888"});
+            $(".dateMake").removeClass('chooseTimebox')
             localStorage.removeItem("export_starttime");
             localStorage.removeItem("export_endtime");
         });
@@ -889,11 +1055,13 @@
                     $("#starttime").addClass("timeSelect");
                     $("#endtime").addClass("timeSelect");
                     $(".dateMake").css({"color": "#24C0D7"});
+                    $(".dateMake").addClass('chooseTimebox')
                     $(".chooseTime ul li").removeClass('active');
 
                     $(".confirm").hide();
                     $(".resetOne").show();
-                    localStorage.removeItem("date");
+                    localStorage.removeItem("date"); 
+                    // localStorage.removeItem("date"); // 重新选择日期不在移除date 重新访问页面以提交的时间为准回显
                     localStorage.removeItem("index");
                 }
             });
@@ -913,6 +1081,7 @@
                     $("#endtime").removeClass("timeSelect");
                     $("#starttime").removeClass("timeSelect");
                     $(".dateMake").css({"color": "#000"});
+                    $(".dateMake").removeClass('chooseTimebox')
                     $(".chooseTime > i").css("color", "#888");
                     $(".chooseTime ul li").removeClass('active');
                     $(".chooseTime ul li:eq(0)").addClass('active');
@@ -955,11 +1124,13 @@
                     $("#starttime").addClass("timeSelect");
                     $("#endtime").addClass("timeSelect");
                     $(".dateMake").css({"color": "#24C0D7"});
+                    $(".dateMake").addClass('chooseTimebox')
                     $(".chooseTime ul li").removeClass('active');
 
                     $(".confirm").hide();
                     $(".resetOne").show();
-                    localStorage.removeItem("date");
+                    localStorage.removeItem("date"); 
+                    // localStorage.removeItem("date");  // 重新选择日期不在移除date 重新访问页面以提交的时间为准回显
                     localStorage.removeItem("index");
                 }
             });
@@ -979,6 +1150,7 @@
                     $("#endtime").removeClass("timeSelect");
                     $("#starttime").removeClass("timeSelect");
                     $(".dateMake").css({"color": "#000"});
+                    $(".dateMake").removeClass('chooseTimebox')
                     $(".chooseTime > i").css("color", "#888");
                     $(".chooseTime ul li").removeClass('active');
                     $(".chooseTime ul li:eq(0)").addClass('active');
@@ -1000,6 +1172,7 @@
             $("#starttime").addClass("timeSelect");
             $("#endtime").addClass("timeSelect");
             $(".dateMake").css({"color": "#24C0D7"});
+            $(".dateMake").addClass('chooseTimebox')
             $(".chooseTime ul li").removeClass('active');
             $(".confirm").hide();
             $(".resetOne").css('display', 'flex');
@@ -1017,6 +1190,7 @@
             $("#starttime").addClass("timeSelect");
             $("#endtime").addClass("timeSelect");
             $(".dateMake").css({"color": "#24C0D7"});
+            $(".dateMake").addClass('chooseTimebox')
             $(".chooseTime ul li").removeClass('active');
             $(".confirm").hide();
             $(".resetOne").css('display', 'flex');
@@ -1028,6 +1202,7 @@
         }
         //
         if (localStorage.date !== undefined && localStorage.date !== "") {
+            // localStorage.setItem('index','-1') // 存在提交的date直接回显时间至具体时间组件
             if (localStorage.index !== "-1") {
                 $(".chooseTime ul li.active").removeClass("active");
                 $(".chooseTime ul li").eq(localStorage.index).addClass("active");
@@ -1064,6 +1239,7 @@
                     $("#starttime").addClass("timeSelect");
                     $("#endtime").addClass("timeSelect");
                     $(".dateMake").css({"color": "#24C0D7"});
+                    $(".dateMake").addClass('chooseTimebox')
                     $(".chooseTime ul li").removeClass('active');
                 }
             }
@@ -1080,6 +1256,17 @@
 //      	alert(scrollTop)
 //      	$(document).scrollTop(scrollTop);
 //      }
+       $(".screeningCondition .sc-btn").on('click', function () { // 跳转至保存筛选列表页
+        if($('.sc-num').text()=='0'){
+            return
+        }
+        sessionStorage.setItem('goScreen','1');
+         window.location.href = "/jy_mobile/search/filter-history/bidding?from=dataExport";
+       })
+       $(".screeningCondition .sc-icon").on('click', function () { // 调起说明弹框
+        checkboxVm.showDialog({title:'已存筛选说明', message:'数据导出后,会将历史筛选条件保存在已存筛选中。您可从已存筛选中直接选择并使用。'})
+         
+       })
         //筛选条件发送
         $(".saveData").on('click', function () {
             var date = "";
@@ -1097,6 +1284,8 @@
             var selectType = "";
             var comeinfrom = "";
             var buyclass = "";
+            var prvinceArr = [];
+            var areaArr = [];
             date = getDate();
             localStorage.date = date;
 //          alert(scrollTop)
@@ -1110,6 +1299,16 @@
             if (localStorage.province !== undefined && localStorage.province !== "") {
                 province = localStorage.province;
             }
+             prvinceArr = province.split(",");
+             areaArr =area.split(" ");
+              
+             let result_city = areaArr.filter(function(item) { // 筛选出未全选的省中的市
+              return !prvinceArr.includes(item);
+             });
+             result_city = result_city.join(",");
+             if(result_city == '全国'){
+                result_city=''
+             }
             if (localStorage.city !== undefined && localStorage.city !== "") {
                 city = localStorage.city;
             }
@@ -1211,7 +1410,7 @@
                     "date": date,
                     "area": area,
                     "province": province,
-                    "city": city,
+                    "city": result_city,
                     "industry": industry,
                     "buyerclass": buyclass,
                     "keyWord": keyWord,
@@ -1232,6 +1431,7 @@
                     } else {
                       if (data._id !== "") {
                         // window.location.href = "/jyapp/front/dataExport/toCreateOrderPage?id=" + data._id + "&source=d&payway=" + pay_way + "&dataspec=" + data_spec;
+                        sessionStorage.setItem('goScreen','1'); // 储存参数 返回页面不使用接口回显使用已存本地存储
                         window.location.href = "/jy_mobile/dataexport/limitpreview/" + data._id + '?type=senior';
                       }
                     }
@@ -1279,6 +1479,7 @@
             $("#starttime").removeClass("timeSelect");
             $("#endtime").removeClass("timeSelect");
             $(".dateMake").css({"color": "#888"});
+            $(".dateMake").removeClass('chooseTimebox')
             $("#starttime").val("");
             $("#endtime").val("");
             //
@@ -1297,7 +1498,7 @@
             r = null;
             return context == null || context == "" || context == "undefined" ? "" : context;
         }
-
+ 
         //
         function getDate() {
             var start;
@@ -1361,7 +1562,6 @@
             n = n.toString();
             return n[1] ? n : '0' + n
         }
-
         var checkboxVm=new Vue({
         el: '#checkbox_dialog',
         delimiters: ['{', '}'],
@@ -1382,6 +1582,16 @@
         mounted() {
         },
         methods: {
+            showDialog ({title,message}){
+                this.$dialog({
+                    className:'msgDialog',
+                    title: title,
+                    message: message,
+                    messageAlign:'left',
+                    confirmButtonText: '我知道了',
+                    confirmButtonColor: '#2ABED1'
+                })
+            },
             open_(str){
                 this.list=[
                     {name:'标题',val:false},
@@ -1458,6 +1668,100 @@
         }
       })
     })
+    function selectType_dispose(selectType) {
+            let select = [];
+            if (selectType) {
+                let titleNum = 0
+            selectType.split(',').forEach((v) => {
+        if (v === 'title') {
+          titleNum++
+        }
+      })
+      if(selectType.indexOf("detail") !== -1){
+        if (titleNum > 1) {
+           select.push('标题') 
+         }
+      }else{
+        if (titleNum > 0) {
+           select.push('标题') 
+         }
+      }
+    if (selectType.indexOf("title") !== -1 && selectType.indexOf("detail") !== -1) {
+       select.push('正文')
+    }
+    if (selectType.indexOf("filetext") !== -1) {
+      select.push('附件')
+    }
+    if (selectType.indexOf('purchasing') !== -1 && selectType.indexOf('projectname.pname')) {
+      select.push('项目名称/标的物')
+    }
+    return select.toString()
+    }else{
+      return ''
+    }
+    }
+    function getCitiesFromJSONMap(provinceName) { // 通过省份获取地市
+      var temp = null
+      let arr =[]
+      for (var i = 0; i < chinaMapJSON.length; i++) {
+        var findThis = chinaMapJSON[i].name.indexOf(provinceName) !== -1
+        // 如果找到了,就不再循环后面的了
+        if (findThis) {
+          temp = chinaMapJSON[i]
+          break
+        }
+      }
+      temp.city.forEach(function (c) {
+        if(c.name.indexOf('北京') == -1&&c.name.indexOf('上海') == -1&&c.name.indexOf('重庆') == -1&&c.name.indexOf('天津') == -1&&c.name.indexOf('澳门') == -1&&c.name.indexOf('香港') == -1){
+          arr.push(c.name)   
+        }
+               
+       })
+       return arr
+    }
+    function getArea_city(arr) { // 根据地市获取省份并拼串
+      let obj = {}
+      let haveVal = {}
+      chinaMapJSON.forEach(p => {
+        obj[p.name] = []
+        p.city.forEach(c => {
+          arr.forEach(ele => {
+            if (c.name == ele) {
+              obj[p.name].push(c.name)
+            }
+          })
+        })
+      })
+       console.log(obj)
+       for(let key in obj){
+        if(obj[key].length>0){
+          haveVal[key] = obj[key]
+        }
+       }
+      let str = ""
+      for(let key in haveVal){
+        str += key + '('
+        for(let i=0;i<haveVal[key].length;i++){
+          str += haveVal[key][i]
+          if(i==haveVal[key].length-1){
+            str += ')、'
+          }else{
+            str += '、'
+          }
+        }
+      }
+      str =  str.replace(/省/g, "")
+      str =  str.replace(/维吾尔自治区/g, "")
+      str =  str.replace(/壮族自治区/g, "")
+      str =  str.replace(/自治区/g, "")
+      str =  str.replace(/回族自治区/g, "")
+      return str
+    }
+    function goChoosedetail(url){
+      sessionStorage.setItem('goScreen','1');
+      window.location.href=url;
+            
+    }
 </script>
 
 <!--百度统计-->

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

@@ -10,7 +10,9 @@
 	<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>
@@ -50,12 +52,11 @@
 				<section class="content">
 				<div class="enter addkeyWord">
 					<input type="text" class="enterOne" placeholder="采购单位名称" />
-					<div class="btn">
+					<div class="btn fixed-bottom">
 						<button disabled class="save-btn">确认</button>
 						<button class="close">取消</button>
 					</div>
 				</div>
-
 				<!-- 添加附加词显示列表 -->
 				<div class="showKeyWord">
 					<ul>
@@ -63,16 +64,18 @@
 
 					</ul>
 
+				</div>
+				<div class="association-list-box" style="display: none;">
+					<ul class="association-list">
+					</ul>
 				</div>
 					</section>
 			</div>
-
 		</div>
 	</div>
 	<div class="addKeyWord">
 		<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 src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/dataExport/js/additionWord.js?v={{Msg "seo" "version"}}"></script>
 <script>
@@ -108,6 +111,7 @@
 		$('.showKeyWord > ul').prepend(html);
 	}
 </script>
+<script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
 
 <!--百度统计end-->
 {{include "/common/baiducc.html"}}

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

@@ -10,7 +10,9 @@
     <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>
@@ -45,7 +47,7 @@
         <section class="content">
         <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="采购单位名称" />
-        <div class="btn">
+        <div class="btn fixed-bottom">
         <button disabled class="save-btn">确认</button>
         <button class="close">取消</button>
         </div>
@@ -59,7 +61,10 @@
         </ul>
 
         </div>
-
+        <div class="association-list-box" style="display: none;">
+            <ul class="association-list">
+            </ul>
+        </div>
         </section>
         </div>
        		</div>
@@ -130,7 +135,7 @@
             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>

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

@@ -10,7 +10,9 @@
 	<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>
@@ -47,7 +49,7 @@
 				<div class="keyWord">
 						<div class="enter addkeyWord">
 						<input type="text" class="enterOne" placeholder="中标单位名称" />
-						<div class="btn">
+						<div class="btn fixed-bottom">
 						<button class="save-btn" disabled>确认</button>
 						<button class="close">取消</button>
 				</div>
@@ -60,6 +62,10 @@
 						</ul>
 
 						</div>
+						<div class="association-list-box" style="display: none;">
+							<ul class="association-list">
+							</ul>
+						</div>
 
 						</div>
 
@@ -282,6 +288,7 @@
 		})
 
 	</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>

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

@@ -10,7 +10,9 @@
     <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>
@@ -44,7 +46,7 @@
         <section class="content">
         <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="中标单位名称" />
-        <div class="btn">
+        <div class="btn fixed-bottom">
         <button class="save-btn" disabled>确认</button>
         <button class="close">取消</button>
     </div>
@@ -57,6 +59,10 @@
         </ul>
 
 
+        </div>
+        <div class="association-list-box" style="display: none;">
+            <ul class="association-list">
+            </ul>
         </div>
             </section>
         </div>
@@ -132,6 +138,7 @@
     })
 
     </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>

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

@@ -12,6 +12,7 @@
     <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
     <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}' />
     <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/bidstatus-update/css/bid-status-update.css?v={{Msg "seo" "version"}}'></link>
+    <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/css/popup-data-export.css?v={{Msg "seo" "version"}}'/>
 </head>
 <style>
   .list-mian{
@@ -157,6 +158,7 @@
       <van-popup class="j-container" :style="popupHeight" v-model="showBidStatus" round position="bottom">
         <bid-status-node @cancel-update="cancelUpdate" @save-success="saveSuccess" :project-cell-info="projectCellInfo" @set-height="setHeight"></bid-status-node>
       </van-popup>
+      <popup-data-export ref="popup_dataExport" @next="next_export"></popup-data-export>
     </div>
   </div>
   <!--S-当前页面的资源-->
@@ -173,6 +175,7 @@
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/visited.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/bidstatus-update/js/bid-status-update.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/index.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/dataExport/components/popup-data-export.js?v={{Msg "seo" "version"}}'></script>
   {{include "/common/baiducc.html"}}
 </body>
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 48 - 46
src/jfw/modules/subscribepay/src/dataexport.json


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

@@ -392,7 +392,7 @@ 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)) {
 	list, err := dataexport.GetDataExportSearchResultByScdId(util.MQFW, util.Mgo_bidding, config.Config.Mongobidding.DbName, config.Config.Elasticsearch, selectId, qutil.If(isSenior, "2", "1").(string), checkCount)
-	url := util.GetExcelFilePath(pay.GetOrderCode(selectId))
+	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")
 		err = util.CreateDataExportExcelFile(list, isSenior, config.ExConf.ExcelPayedPath+url) //创建excel文件

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

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"io/ioutil"
 	"jy/src/jfw/modules/subscribepay/src/config"
+	"jy/src/jfw/modules/subscribepay/src/pay"
 	"jy/src/jfw/modules/subscribepay/src/util"
 	"log"
 	"os"
@@ -83,9 +84,11 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool {
 				"out_trade_no": param.OutTradeno,
 			}
 			orderCode := qutil.ObjToString((*orderdata)["order_code"])
+			dataCount := qutil.IntAll((*orderdata)["data_count"])
+
 			download_url := qutil.ObjToString((*orderdata)["download_url"])
 			if download_url == "" { //若未生成execl
-				download_url = util.GetExcelFilePath(orderCode)
+				download_url = util.GetExcelFilePath(orderCode, dataCount)
 				updateMap["download_url"] = download_url
 			}
 
@@ -95,7 +98,7 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool {
 			if update {
 				//先发个通知
 				go SendMailToBJFinance(orderdata, pay_time, param.TransactionId, 1, config.GmailAuth)
-
+				go pay.CheckSave(userId, qutil.InterfaceToStr((*orderdata)["filter_id"])) //数据导出成功保存筛选条件
 				//发送邮件移至定时任务
 				//go SendMailToPayUser(orderdata, float64(param.CashFee)/100, pay_time, download_url, config.GmailAuth)
 

+ 32 - 27
src/jfw/modules/subscribepay/src/entity/order.go

@@ -25,7 +25,7 @@ import (
 	"github.com/shopspring/decimal"
 )
 
-//资源包
+// 资源包
 type commonOrderStruct struct {
 }
 
@@ -88,15 +88,18 @@ func (this *commonOrderStruct) RequestCheck(product string, m map[string]interfa
 }
 
 /*
-	param
-		product:产品类型
-		m:订单需要的参数
-		lotteryId, discountId:优惠券相关
-		sess:session
-		activityType 活动类型 0满减、1折扣券、2满赠、3促销、4限时折扣、5限时减免  0、1才有券 2以后没券(虚假的券)
-	return
-		insertMap:创建订单的参数
-		msg:错误信息
+param
+
+	product:产品类型
+	m:订单需要的参数
+	lotteryId, discountId:优惠券相关
+	sess:session
+	activityType 活动类型 0满减、1折扣券、2满赠、3促销、4限时折扣、5限时减免  0、1才有券 2以后没券(虚假的券)
+
+return
+
+	insertMap:创建订单的参数
+	msg:错误信息
 */
 func (this *commonOrderStruct) InserMap(product, productId, userid, lotteryId, discountId string, m map[string]interface{}, session *httpsession.Session, activityType int) (orderinfo *OrderInfo, msg string) {
 	switch product {
@@ -240,7 +243,7 @@ func dataExportCheck(m map[string]interface{}, sess *httpsession.Session) string
 	return ""
 }
 
-//历史数据
+// 历史数据
 func dataExportOrder(m map[string]interface{}, userId string) (*OrderInfo, string) {
 	id := encrypt.SE.Decode4Hex(qu.ObjToString(m["id"]))
 	if id == "" {
@@ -309,7 +312,7 @@ func dataExportOrder(m map[string]interface{}, userId string) (*OrderInfo, strin
 	}
 
 	ordercode := pay.GetOrderCode(userId)
-	download_url := util.GetExcelFilePath(ordercode)
+	download_url := util.GetExcelFilePath(ordercode, data_count)
 	go func() {
 		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)
 		if err == nil && list != nil && len(*list) > 0 {
@@ -359,7 +362,7 @@ func (this *commonOrderStruct) DataExportPhoneAndMailCheck(sess *httpsession.Ses
 	return
 }
 
-//商机管理
+// 商机管理
 func entnicheOrder(m map[string]interface{}, userId string) (*OrderInfo, string) {
 	if phone, _ := util.GetMyPhoneAndName(userId); phone == "" {
 		return nil, "未绑定手机号"
@@ -446,7 +449,7 @@ var EntnichePirce entnichePrice
 
 type entnichePrice struct{}
 
-//商机管理计算价格
+// 商机管理计算价格
 func (this *entnichePrice) GetOrderMoney(userId string, personnum, cycle int) int {
 	if personnum < 5 || cycle < 1 {
 		log.Println(userId, "商机管理订单personnum、cycle参数不合法", personnum, cycle)
@@ -478,7 +481,7 @@ func (this *entnichePrice) GetOrderMoney(userId string, personnum, cycle int) in
 	return order_money
 }
 
-//获取解密后的企业id
+// 获取解密后的企业id
 func DecodeEntId(encodeId string) int {
 	encodeId = strings.TrimSpace(encodeId)
 	if encodeId == "" {
@@ -495,7 +498,7 @@ func DecodeEntId(encodeId string) int {
 	return id
 }
 
-//超级订阅
+// 超级订阅
 func vipOrder(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	types := qu.ObjToString(m["type"])
 	switch types {
@@ -509,7 +512,7 @@ func vipOrder(m map[string]interface{}, userId string, session *httpsession.Sess
 	return nil, "未知类型"
 }
 
-//超级订阅首次购买
+// 超级订阅首次购买
 func vipFirstBuy(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	//area := qu.ObjToMap(m["area"])          //地区  p195不再选择地区 只选择数量
 	areaCount := qu.IntAll(m["areaCount"]) //地区
@@ -629,7 +632,7 @@ func vipFirstBuy(m map[string]interface{}, userId string, session *httpsession.S
 	}, ""
 }
 
-//超级订阅续费
+// 超级订阅续费
 func vipRenew(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	disWord := qu.ObjToString(m["disWord"])
 	// req_price := qu.IntAll(m["price"])
@@ -725,7 +728,7 @@ func vipRenew(m map[string]interface{}, userId string, session *httpsession.Sess
 	}, ""
 }
 
-//超级订阅升级
+// 超级订阅升级
 func vipUpgrade(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	areaCount := qu.IntAll(m["areaCount"]) //地区
 	//area := qu.ObjToMap(m["area"])                  //地区  p195不再选择地区 只选数量
@@ -879,7 +882,7 @@ func vipUpgrade(m map[string]interface{}, userId string, session *httpsession.Se
 	return orderinfo, ""
 }
 
-//大会员
+// 大会员
 func memberOrder(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	//校验是否有转账待审核订单
 	num := util.Mysql.Count("dataexport_order", map[string]interface{}{
@@ -930,7 +933,7 @@ func memberOrder(m map[string]interface{}, userId string, session *httpsession.S
 	}, ""
 }
 
-//剑鱼币
+// 剑鱼币
 func integralOrder(m map[string]interface{}, userId string) (*OrderInfo, string) {
 	//参数验证 price:价格(已折扣);score:购买积分
 	price := qu.IntAll(m["price"])
@@ -968,7 +971,7 @@ func integralOrder(m map[string]interface{}, userId string) (*OrderInfo, string)
 	}, ""
 }
 
-//数据流量包
+// 数据流量包
 func dataexportPackOrder(m map[string]interface{}, userId string) (*OrderInfo, string) {
 	packId := qu.ObjToString(m["packId"])
 	// 获取用户分销口令
@@ -1015,7 +1018,7 @@ func dataexportPackOrder(m map[string]interface{}, userId string) (*OrderInfo, s
 	}, ""
 }
 
-//省份订阅包
+// 省份订阅包
 func areaPackOrder(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	orderType := qu.IntAll(m["orderType"])
 	area := qu.ObjToMap(m["area"])
@@ -1108,7 +1111,7 @@ func areaPackOrder(m map[string]interface{}, userId string, session *httpsession
 	return orderinfo, ""
 }
 
-//附件下载包
+// 附件下载包
 func filePackOrder(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	data := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
 	if data.VipStatus <= 0 {
@@ -1156,7 +1159,9 @@ func filePackOrder(m map[string]interface{}, userId string, session *httpsession
 	useProduct :产品类型
 	useProductType:商品类型 0普通的 1线上课程
 	discountId:活动赠品对应标识
+
 return:
+
 	timeNum:赠送数量
 	查看赠品
 */
@@ -1182,7 +1187,7 @@ func GiveInfo(userid string, useProduct, useProductType, discountId int) []map[s
 	return nil
 }
 
-//采购单位画像包 -超级订阅升级版用户可以购买使用
+// 采购单位画像包 -超级订阅升级版用户可以购买使用
 func buyerPortraitPackOrder(m map[string]interface{}, userId string, session *httpsession.Session) (*OrderInfo, string) {
 	uData := jy.GetBigVipUserBaseMsg(session, *config.Middleground)
 	if uData.VipStatus <= 0 || uData.Vip_BuySet.Upgrade <= 0 {
@@ -1224,7 +1229,7 @@ func buyerPortraitPackOrder(m map[string]interface{}, userId string, session *ht
 	}, ""
 }
 
-//数据报告
+// 数据报告
 func newDataReportOrder(m map[string]interface{}, userId string) (*OrderInfo, string) {
 	reportId := qu.IntAll(m["reportId"]) //报告id
 	email := qu.ObjToString(m["email"])
@@ -1285,7 +1290,7 @@ func newDataReportOrder(m map[string]interface{}, userId string) (*OrderInfo, st
 	}, ""
 }
 
-//中标必听课
+// 中标必听课
 func courseOnlineOrder(m map[string]interface{}, userId string) (*OrderInfo, string) {
 	pay_way := "wx_app"
 	_id := qu.ObjToString(m["courseId"])

+ 25 - 27
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -329,6 +329,15 @@ func (this *vipSubscribeStruct) GetUserLastOrderDetaul(userid string) (VipSimple
 	}
 	return vmsg, nil
 }
+func (this *vipSubscribeStruct) ClearCache(userId string) {
+	positionId := util.MongoIdToPositionId(userId)
+	jy.ClearBigVipUserPower(positionId)
+	config.Middleground.UserCenter.WorkDesktopClearUserInfo(pb.WorkDesktopClearUserInfoReq{
+		PositionId: positionId,
+		AppId:      "10000",
+	})
+	config.Middleground.PowerCheckCenter.DelCheckRedis("10000", qutil.Int64All(positionId))
+}
 
 // 设置开始使用vip订阅
 func (this *vipSubscribeStruct) StartSubVip(userId string, vmsg VipSimpleMsg, startTime, endTime time.Time, isTrial bool, positionType, entId, entUserId int64) bool {
@@ -357,14 +366,7 @@ func (this *vipSubscribeStruct) StartSubVip(userId string, vmsg VipSimpleMsg, st
 
 	util.MergeKws(userId, positionType, entId, entUserId) //初始化vip订阅关键词
 	redis.Del("other", "p1_indexMessage_"+userId)         //清除redis中vip状态
-	positionId := util.MongoIdToPositionId(userId)
-	jy.ClearBigVipUserPower(positionId)
-	config.Middleground.UserCenter.WorkDesktopClearUserInfo(pb.WorkDesktopClearUserInfoReq{
-		PositionId: positionId,
-		AppId:      "10000",
-	})
-	config.Middleground.PowerCheckCenter.DelCheckRedis("10000", qutil.Int64All(positionId))
-
+	this.ClearCache(userId)
 	return true
 }
 
@@ -385,6 +387,7 @@ func (this *vipSubscribeStruct) RenewSubVip(userId string, end string) bool {
 		log.Printf("%s更新结束%d日期出错\n", userId, endTime.Unix())
 		return false
 	}
+	this.ClearCache(userId)
 	return true
 }
 
@@ -424,6 +427,7 @@ func (this *vipSubscribeStruct) WillNew(userId string, vmsg VipSimpleMsg, start,
 		log.Printf("%s续费保存续费表出错 %+v\n", userId, value)
 		return false
 	} else {
+		this.ClearCache(userId)
 		return true
 	}
 }
@@ -464,13 +468,7 @@ func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg,
 		log.Printf("%s更新用户出错 %+v\n", userId, updata)
 		return false
 	} else {
-		positionId := util.MongoIdToPositionId(userId)
-		jy.ClearBigVipUserPower(positionId)
-		config.Middleground.UserCenter.WorkDesktopClearUserInfo(pb.WorkDesktopClearUserInfoReq{
-			PositionId: positionId,
-			AppId:      "10000",
-		})
-		config.Middleground.PowerCheckCenter.DelCheckRedis("10000", qutil.Int64All(positionId))
+		this.ClearCache(userId)
 		return true
 	}
 }
@@ -603,18 +601,18 @@ func (this *vipSubscribeStruct) SubChange(userId string, oldVip, areaNew *map[st
 	if !updateOk {
 		return false
 	}
-    //保存修改日志
-    go func() {
-        util.MQFW.Save("subvip_edit_log", map[string]interface{}{
-            "s_userid":         userId,
-            "o_area_old":       (*oldVip)["o_area"],
-            "a_buyerclass_old": (*oldVip)["a_buyerclass"],
-            "o_area":           areaNew,
-            "a_buyerclass":     industryNew,
-            "l_changeTime":     time.Now().Unix(),
-        })
-    }()
-    return true
+	//保存修改日志
+	go func() {
+		util.MQFW.Save("subvip_edit_log", map[string]interface{}{
+			"s_userid":         userId,
+			"o_area_old":       (*oldVip)["o_area"],
+			"a_buyerclass_old": (*oldVip)["a_buyerclass"],
+			"o_area":           areaNew,
+			"a_buyerclass":     industryNew,
+			"l_changeTime":     time.Now().Unix(),
+		})
+	}()
+	return true
 }
 
 // 获取省份,城市,行业购买内容

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

@@ -5,7 +5,7 @@ go 1.20
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
-	app.yhyue.com/moapp/jypkg v0.0.0-20230925120741-9e02619bfe25
+	app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72
 	bp.jydev.jianyu360.cn/BaseService/pushpkg v0.0.0-20230225061813-384daf716c9d
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.14
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
@@ -14,6 +14,7 @@ require (
 	github.com/tealeg/xlsx v1.0.5
 	go.mongodb.org/mongo-driver v1.11.6
 	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
+	k8s.io/apimachinery v0.27.0-alpha.3
 )
 
 require (
@@ -137,9 +138,8 @@ 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-20230710093759-d9d6c68de8b1 // 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

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

@@ -9,8 +9,8 @@ app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b h1:Wtytm2QqQWtBV+s
 app.yhyue.com/moapp/jybase v0.0.0-20230718012114-37013054344b/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
-app.yhyue.com/moapp/jypkg v0.0.0-20230925120741-9e02619bfe25 h1:2q7b1auPihIJD3Ewsd7Zi8ESeLkxuP57avWL8UoBr9U=
-app.yhyue.com/moapp/jypkg v0.0.0-20230925120741-9e02619bfe25/go.mod h1:gPCOY8bVXdY5bD7nry7th+YNkKC/viG8Dc9+z4fUaRo=
+app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72 h1:irUuaH36GK/6tz4UWDjxSseKX8GJnfy5J6F+e9fFAZY=
+app.yhyue.com/moapp/jypkg v1.0.3-0.20231031031244-d8df2b391b72/go.mod h1:76Kz6+MuxcRJRyFad9W8R4AByiQlVGzuGFzklY+2m38=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae h1:6rDDaz6yxvE8viTSzEBwKYOFWq14TMfuBivSazUZMz4=
 app.yhyue.com/moapp/message v0.0.0-20221223100203-6402e389d9ae/go.mod h1:b0zZHev3gmJao1Fo+2Z2KPVjsuLOJVvVxf+kCnu9WkA=
 bp.jydev.jianyu360.cn/BaseService/entManageApplication v0.0.0-20230214091519-89a98c01ab0e h1:h+VEI3o1qC0jeCzkFGTrLI4f27cfa/W/y+0sXokWMgE=
@@ -1423,8 +1423,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1 h1:BItxi1gkQUs3sjxaBk6tc34fZWSO4hUSXcTM3PcnY4I=
-jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20230710093759-d9d6c68de8b1/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a h1:kwjO4pqB3gnNGrQ9aXyz6f8s9qXAUenPUDWip8gYR/Q=
+jygit.jydev.jianyu360.cn/ApplicationCenter/publicService v0.0.0-20231017031425-45003ca9f35a/go.mod h1:p/595fgbj4r6GhSJhHDpx3Ru1NkD5UASFL8OuIQw09E=
 k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
 k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
 k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=

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

@@ -0,0 +1,121 @@
+package pay
+
+import (
+	util "app.yhyue.com/moapp/jybase/common"
+	"go.mongodb.org/mongo-driver/bson/primitive"
+	qutil "jy/src/jfw/modules/subscribepay/src/util"
+	"k8s.io/apimachinery/pkg/util/json"
+	"sort"
+	"strings"
+	"time"
+)
+
+func CheckSave(userid, filterId string) {
+	if filterId == "" || userid == "" {
+		return
+	}
+	id, _ := primitive.ObjectIDFromHex(filterId)
+	dataMap, ok := qutil.MQFW.FindOne("export_search", map[string]interface{}{
+		"s_userid":   userid,
+		"_id":        id,
+		"comeinfrom": "exportPage",
+	})
+	if !ok || dataMap == nil || len(*dataMap) == 0 {
+		return
+	}
+	data := make(map[string]interface{})
+	query := map[string]interface{}{
+		"s_userid": userid,
+	}
+	area, _ := (*dataMap)["area"].([]interface{})
+	data["area"] = ArrSort(area)
+	city, _ := (*dataMap)["city"].([]interface{})
+	data["city"] = ArrSort(city)
+	region, _ := (*dataMap)["region"].([]interface{})
+	data["region"] = ArrSort(region)
+	industry, _ := (*dataMap)["industry"].([]interface{})
+	data["industry"] = ArrSort(industry)
+	buyerclass, _ := (*dataMap)["buyerclass"].([]interface{})
+	data["buyerclass"] = ArrSort(buyerclass)
+	buyer, _ := (*dataMap)["buyer"].([]interface{})
+	data["buyer"] = ArrSort(buyer)
+	winner, _ := (*dataMap)["winner"].([]interface{})
+	data["winner"] = ArrSort(winner)
+	keyword, _ := (*dataMap)["keywords"].([]interface{})
+	data["keywords"] = keywordSort(util.ObjArrToMapArr(keyword))
+
+	data["publishtime"] = util.InterfaceToStr((*dataMap)["publishtime"])
+	data["selectType"] = ValueSort(util.InterfaceToStr((*dataMap)["selectType"]))
+	data["minprice"] = util.InterfaceToStr((*dataMap)["minprice"])
+	data["isTitle"] = util.IntAll((*dataMap)["isTitle"])
+	data["maxprice"] = util.InterfaceToStr((*dataMap)["maxprice"])
+	data["subtype"] = ValueSort(util.InterfaceToStr((*dataMap)["subtype"]))
+
+	inKey := GetKeysByParam(data)
+	query["in_key"] = inKey
+	tm := time.Now()
+	if qutil.MQFW.Count("export_condition", query) > 0 {
+		qutil.MQFW.Update("export_condition", query, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"update_time": tm.Unix(),
+			}}, false, false)
+	} else {
+		delete(*dataMap, "_id")
+		delete(*dataMap, "comeinfrom")
+		delete(*dataMap, "comeintime")
+
+		(*dataMap)["create_time"] = tm.Unix()
+		(*dataMap)["update_time"] = tm.Unix()
+		(*dataMap)["in_key"] = inKey
+		(*dataMap)["filter_id"] = filterId
+		qutil.MQFW.Save("export_condition", *dataMap)
+	}
+}
+
+func keywordSort(data []map[string]interface{}) string {
+	var (
+		dataArr []map[string]string
+	)
+	if data == nil || len(data) == 0 {
+		return ""
+	}
+	for _, v := range data {
+		dm := make(map[string]string)
+		for k, v1 := range v {
+			var v2 string
+			if k == "keyword" {
+				v2 = ValueSort(util.InterfaceToStr(v1))
+			} else if (k == "appended" && v1 != "" && v1 != nil) || (k == "exclude" && v1 != "" && v1 != nil) {
+				vs, _ := v1.([]interface{})
+				v2 = ArrSort(vs)
+			}
+			dm[k] = v2
+		}
+		dataArr = append(dataArr, dm)
+	}
+	SortData(&dataArr, "keyword", false)
+	b, _ := json.Marshal(dataArr)
+	return string(b)
+}
+
+func ValueSort(v string) string {
+	if v == "" {
+		return ""
+	}
+	vs := strings.Split(v, ",")
+	sort.Slice(vs, func(i, j int) bool {
+		return vs[i] < vs[j]
+	})
+	return strings.Join(vs, ",")
+}
+
+func ArrSort(value []interface{}) string {
+	if value == nil || len(value) == 0 {
+		return ""
+	}
+	vs := util.ObjArrToStringArr(value)
+	sort.Slice(vs, func(i, j int) bool {
+		return vs[i] < vs[j]
+	})
+	return strings.Join(vs, ",")
+}

+ 160 - 7
src/jfw/modules/subscribepay/src/pay/util.go

@@ -1,12 +1,15 @@
 package pay
 
 import (
+	"bytes"
 	"crypto"
+	"crypto/md5"
 	"crypto/rand"
 	"crypto/rsa"
 	"crypto/sha256"
 	"crypto/x509"
 	"encoding/base64"
+	"encoding/json"
 	"encoding/pem"
 	"errors"
 	"fmt"
@@ -14,6 +17,9 @@ import (
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"jy/src/jfw/modules/subscribepay/src/util"
 	"log"
+	"net/url"
+	"reflect"
+	"sort"
 	"strings"
 	"sync"
 	"time"
@@ -297,7 +303,7 @@ func GetCacheOrderCode(tradeNo string) (orderCode string) {
 	return redis.GetStr("other", fmt.Sprintf(CacheOrderTradeNo, tradeNo))
 }
 
-//关闭订单
+// 关闭订单
 func CloseOrderByOrderCode(ordercode string) error {
 	res := util.Mysql.FindOne("dataexport_order", map[string]interface{}{"order_code": ordercode}, "out_trade_no,pay_way", "")
 	if res == nil || len(*res) == 0 {
@@ -330,13 +336,13 @@ func CloseOrder(tradeno, payWay string) bool {
 	return false
 }
 
-//创建订单号
+// 创建订单号
 func GetOrderCode(id ...string) string {
 	//2020-08-01之前的规则 fmt.Sprintf("%s%s", time.Now().Format("150405"), qutil.GetRandom(6))
 	return <-varOrderCode.pool
 }
 
-//关闭订单
+// 关闭订单
 func CloseDataExportOrder(payWay, tradeno, prepayTime string) (status bool) {
 	//如果订单超时 则不用关闭订单
 	t, err := time.ParseInLocation(Date_Full_Layout, prepayTime, time.Local)
@@ -361,7 +367,7 @@ func CloseDataExportOrder(payWay, tradeno, prepayTime string) (status bool) {
 	return status
 }
 
-//加载秘钥
+// 加载秘钥
 func parsePrivateKey(key string) (*rsa.PrivateKey, error) {
 	block, _ := pem.Decode([]byte(key))
 	if block == nil {
@@ -377,7 +383,7 @@ func parsePrivateKey(key string) (*rsa.PrivateKey, error) {
 	return rsaPrivateKey.(*rsa.PrivateKey), nil
 }
 
-//加载支付宝后台公钥
+// 加载支付宝后台公钥
 func parseAliPayPublicKey(key string) (*rsa.PublicKey, error) {
 	publicKeyDecoded, err := base64.StdEncoding.DecodeString(key)
 	if err != nil {
@@ -393,7 +399,7 @@ func parseAliPayPublicKey(key string) (*rsa.PublicKey, error) {
 	return nil, errors.New("rsa.PublicKey 断言出错")
 }
 
-//生成加密token
+// 生成加密token
 func (a *aliPayStruct) getSign(data []byte) (signature string, err error) {
 	var h hash.Hash
 	var hType crypto.Hash
@@ -411,7 +417,7 @@ func (a *aliPayStruct) getSign(data []byte) (signature string, err error) {
 	return
 }
 
-//处理商户订单号
+// 处理商户订单号
 func processTradeno(tradeno string) string {
 	if devTradenoSign, _ := config.PayConf["devTradenoSign"].(string); devTradenoSign != "" {
 		tradeno = devTradenoSign + tradeno
@@ -419,3 +425,150 @@ func processTradeno(tradeno string) string {
 	}
 	return tradeno
 }
+
+type paramSorter struct {
+	Keys   []string
+	Values []string
+}
+
+var SP = strings.Replace
+
+func (ps *paramSorter) String() string {
+	str := ""
+	for n, k := range ps.Keys {
+		str += k + "=" + ps.Values[n]
+		if n < len(ps.Keys)-1 {
+			str += "&"
+		}
+	}
+	return str
+}
+
+func (ps *paramSorter) Sort() {
+	sort.Sort(ps)
+}
+func (ps *paramSorter) Len() int {
+	return len(ps.Values)
+}
+
+func (ps *paramSorter) Less(i, j int) bool {
+	return bytes.Compare([]byte(ps.Keys[i]), []byte(ps.Keys[j])) < 0
+}
+
+func (ps *paramSorter) Swap(i, j int) {
+	ps.Values[i], ps.Values[j] = ps.Values[j], ps.Values[i]
+	ps.Keys[i], ps.Keys[j] = ps.Keys[j], ps.Keys[i]
+}
+
+func percentEncode(str string) string {
+	str = url.QueryEscape(str)
+	str = SP(SP(SP(str, "+", "%20", -1), "*", "%2A", -1), "%7E", "~", -1)
+	return str
+}
+
+// 排序 排序键必须为数字类型
+type SortBy struct {
+	Data    []map[string]interface{}
+	Sortkey string
+}
+
+func (a SortBy) Len() int { return len(a.Data) }
+
+func (a SortBy) Swap(i, j int) {
+	a.Data[i], a.Data[j] = a.Data[j], a.Data[i]
+}
+
+func (a SortBy) Less(i, j int) bool {
+	//return Float64(a.Data[i][a.Sortkey]) < Float64(a.Data[j][a.Sortkey])
+	m := a.Data[i][a.Sortkey]
+	n := a.Data[j][a.Sortkey]
+	w := reflect.ValueOf(m)
+	v := reflect.ValueOf(n)
+	switch v.Kind() {
+	case reflect.String:
+		return w.String() < v.String()
+	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+		return w.Int() < v.Int()
+	case reflect.Float64, reflect.Float32:
+		return w.Float() < v.Float()
+	default:
+		return fmt.Sprintf("%v", w) < fmt.Sprintf("%v", v)
+	}
+}
+
+// 根据指定字符排序
+//
+//	m := []map[string]int{
+//	   {"k": 2},
+//	   {"k": 1},
+//	   {"k": 3},
+//	}
+//
+// customer.SortData(&m, "k", true)
+// ture  倒序3, 2, 1
+// fmt.Println(m)
+func SortData(data interface{}, sortkey string, reverse bool) {
+	//func SortData(data interface{}, sortkey string, reverse bool) {
+	var db []map[string]interface{}
+	err := Bind(data, &db)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	stb := SortBy{db, sortkey}
+	if !reverse {
+		sort.Sort(stb)
+	} else {
+		sort.Sort(sort.Reverse(stb))
+	}
+	err = Bind(stb.Data, data)
+	if err != nil {
+		fmt.Println(err)
+	}
+
+}
+
+func Bind(data interface{}, ret interface{}) error {
+	v := reflect.ValueOf(ret)
+	if v.Kind() != reflect.Ptr {
+		return fmt.Errorf("ptr input ret needed as type as input type %s", v.Kind())
+	}
+	havdata := false
+	var bk interface{}
+	if v.Elem().Kind() == reflect.Slice {
+		t := reflect.Zero(reflect.TypeOf(v.Elem().Interface()))
+		bk = v.Elem().Interface()
+		v.Elem().Set(t)
+		havdata = true
+	}
+	_data, _ := json.MarshalIndent(data, "", "    ")
+	err := json.Unmarshal(_data, ret)
+	if err != nil {
+		fmt.Println(err)
+		if havdata {
+			v.Elem().Set(reflect.ValueOf(bk))
+		}
+		return err
+	}
+	return nil
+}
+
+func GetKeysByParam(param map[string]interface{}) string {
+	ps := &paramSorter{[]string{}, []string{}}
+	for k, v := range param {
+		ps.Keys = append(ps.Keys, k)
+		ps.Values = append(ps.Values, qutil.InterfaceToStr(v))
+	}
+	ps.Sort()
+	reqStr := ps.String()
+	str := percentEncode(reqStr)
+	str = SP(str, "%3A", "%253A", -1)
+	return MD5(str)
+}
+
+func MD5(str string) string {
+	data := []byte(str)
+	has := md5.Sum(data)
+	md5str := fmt.Sprintf("%x", has)
+	return md5str
+}

+ 1 - 1
src/jfw/modules/subscribepay/src/service/dataExportPay.go

@@ -164,7 +164,7 @@ func (p *DataExportPay) CreateOrder() {
 			}
 		}
 		ordercode := pay.GetOrderCode(openId)
-		download_url := util.GetExcelFilePath(ordercode)
+		download_url := util.GetExcelFilePath(ordercode, data_count)
 		go func() {
 			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)
 			if err == nil && list != nil && len(*list) > 0 {

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

@@ -2,6 +2,7 @@ package service
 
 import (
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io/ioutil"
 	"jy/src/jfw/modules/subscribepay/src/config"
@@ -15,6 +16,8 @@ import (
 	"strings"
 	"time"
 
+	"go.mongodb.org/mongo-driver/bson/primitive"
+
 	. "app.yhyue.com/moapp/jybase/api"
 	qutil "app.yhyue.com/moapp/jybase/common"
 	. "app.yhyue.com/moapp/jybase/date"
@@ -37,6 +40,103 @@ type DataExportPack struct {
 	rechargeList   xweb.Mapper `xweb:"/dataExportPack/rechargeList"` //数据导出-流量包充值记录
 	recordList     xweb.Mapper `xweb:"/dataExportPack/recordList"`   //数据导出记录
 	sendExportMail xweb.Mapper `xweb:"/dataExportPack/sendMail"`     //移动端导出记录发送附件邮件
+
+	screenList   xweb.Mapper `xweb:"/dataExportPack/screenList"`   //数据导出_筛选列表
+	screenDelete xweb.Mapper `xweb:"/dataExportPack/screenDelete"` //数据导出_删除筛选
+
+}
+
+func (des *DataExportPack) ScreenList() {
+	data, err := func() (*[]map[string]interface{}, error) {
+		qMap := map[string]interface{}{
+			"s_userid": des.GetSession("userId"),
+			"update_time": map[string]interface{}{
+				"$gte": time.Now().AddDate(-1, 0, 0).Unix(),
+			},
+		}
+		data, ok := util.MQFW.Find("export_condition", qMap, `{"update_time":1}`, "", false, -1, -1)
+		if !ok {
+			log.Printf("获取筛选条件失败;qMap:%v", qMap)
+			return nil, errors.New("获取筛选条件失败")
+		}
+		if data != nil && len(*data) > 0 {
+			for _, dataMap := range *data {
+				area, _ := dataMap["area"].([]interface{})
+				dataMap["area"] = strings.Join(qutil.ObjArrToStringArr(area), ",")
+				city, _ := dataMap["city"].([]interface{})
+				dataMap["city"] = strings.Join(qutil.ObjArrToStringArr(city), ",")
+				region, _ := dataMap["region"].([]interface{})
+				dataMap["region"] = strings.Join(qutil.ObjArrToStringArr(region), ",")
+				industry, _ := dataMap["industry"].([]interface{})
+				dataMap["industry"] = strings.Join(qutil.ObjArrToStringArr(industry), ",")
+				buyerclass, _ := dataMap["buyerclass"].([]interface{})
+				dataMap["buyerclass"] = strings.Join(qutil.ObjArrToStringArr(buyerclass), ",")
+				buyer, _ := dataMap["buyer"].([]interface{})
+				dataMap["buyer"] = strings.Join(qutil.ObjArrToStringArr(buyer), ",")
+				winner, _ := dataMap["winner"].([]interface{})
+				dataMap["winner"] = strings.Join(qutil.ObjArrToStringArr(winner), ",")
+				keywords, _ := dataMap["keywords"].([]interface{})
+				if keywords != nil && len(keywords) > 0 {
+					mb, _ := json.Marshal(dataMap["keywords"])
+					dataMap["keywords"] = string(mb)
+				} else {
+					dataMap["keywords"] = ""
+				}
+				dataMap["publishtime"] = qutil.InterfaceToStr(dataMap["publishtime"])
+				dataMap["selectType"] = qutil.InterfaceToStr(dataMap["selectType"])
+				dataMap["minprice"] = qutil.InterfaceToStr(dataMap["minprice"])
+				dataMap["isTitle"] = qutil.IntAll(dataMap["isTitle"])
+				dataMap["maxprice"] = qutil.InterfaceToStr(dataMap["maxprice"])
+				dataMap["subtype"] = qutil.InterfaceToStr(dataMap["subtype"])
+
+				dataMap["_id"] = encrypt.SE.EncodeString(qutil.InterfaceToStr(dataMap["_id"]))
+
+				isTitle := qutil.IntAll(dataMap["isTitle"])
+				selectType := qutil.InterfaceToStr(dataMap["selectType"])
+				if isTitle == 3 {
+					selectType = selectType + ",title"
+				}
+				dataMap["selectType"] = selectType
+				delete(dataMap, "user_id")
+				delete(dataMap, "filter_id")
+			}
+		}
+		return data, nil
+	}()
+
+	des.ServeJson(NewResult(data, err))
+}
+
+func (des *DataExportPack) ScreenDelete() {
+	err := func() error {
+		userid := des.GetSession("userId")
+		if len(des.Body()) == 0 {
+			return errors.New("body数据异常")
+		}
+		data := make(map[string]interface{})
+		err := json.Unmarshal(des.Body(), &data)
+		if err != nil {
+			return errors.New("获取ids失败")
+		}
+		ids := qutil.InterfaceToStr(data["ids"])
+		var idArr []primitive.ObjectID
+		for _, v := range strings.Split(ids, ",") {
+			if id := encrypt.SE.DecodeString(v); id != "" {
+				mgoId, _ := primitive.ObjectIDFromHex(id)
+				idArr = append(idArr, mgoId)
+			}
+		}
+		//log.Println("userid", userid, idArr)
+		util.MQFW.Delete("export_condition", map[string]interface{}{
+			"s_userid": userid,
+			"_id": map[string]interface{}{
+				"$in": idArr,
+			},
+		})
+		return nil
+	}()
+
+	des.ServeJson(NewResult("", err))
 }
 
 // PackGoodsList 数据包规格及价格列表
@@ -108,7 +208,6 @@ func (this *DataExportPack) CreateOrder() {
 			endTime := qutil.Int64All((*userfilter)["endTime"])
 			if startTime != 0 {
 				if startTime <= time.Now().Unix() && endTime >= time.Now().Unix() {
-
 					disWordStr = qutil.ObjToString((*userfilter)["disWords"])
 				}
 			}
@@ -303,11 +402,11 @@ func (this *DataExportPack) Statistics() {
 // return	serialNumber 流水号(暂定为记录id)
 func (this *DataExportPack) PackPay() {
 	userId, _ := this.GetSession("userId").(string)
+	filterId := encrypt.SE.Decode4Hex(this.GetString("filterId"))
 	rData, errMsg := func() (interface{}, error) {
 		//企业数据包、个人数据包流量包支付
 		//数据总量,扣除量
 		total_req, _ := this.GetInteger("total") //导出总量
-		filterId := encrypt.SE.Decode4Hex(this.GetString("filterId"))
 		if filterId == "" {
 			return nil, fmt.Errorf("请求参数异常")
 		}
@@ -380,6 +479,9 @@ func (this *DataExportPack) PackPay() {
 	}()
 	if errMsg != nil {
 		log.Printf("%s DataExportPack PackPay 异常:%s\n", userId, errMsg.Error())
+	} else {
+		//条件保存
+		go pay.CheckSave(userId, filterId)
 	}
 	this.ServeJson(NewResult(rData, errMsg))
 }
@@ -472,6 +574,7 @@ func (this *DataExportPack) SendExportMail() {
 		if downurl == "" || userMail == "" {
 			return nil, fmt.Errorf("缺少字段")
 		}
+		downurl = strings.ReplaceAll(downurl, config.Config.WebDomain, config.Config.WxDomain)
 		mailContent := fmt.Sprintf(config.ExConf.Mail_attach_pack_attachment, downurl)
 		//用户发送邮件
 		sendOk := false

+ 124 - 44
src/jfw/modules/subscribepay/src/util/dataExportExcel.go

@@ -5,6 +5,7 @@ import (
 	qutil "app.yhyue.com/moapp/jybase/common"
 	"errors"
 	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
 	"io"
 	"jy/src/jfw/modules/subscribepay/src/config"
 	"os"
@@ -16,26 +17,33 @@ import (
 
 var (
 	defaultExcelBorder = xlsx.Border{ //边框样式
-		Left:        "thin",
-		LeftColor:   "00A6A6A6",
-		Right:       "thin",
-		RightColor:  "00A6A6A6",
-		Top:         "thin",
-		TopColor:    "00A6A6A6",
-		Bottom:      "thin",
-		BottomColor: "00A6A6A6",
+		Left:        "dotted",
+		LeftColor:   "00000000",
+		Right:       "dotted",
+		RightColor:  "00000000",
+		Top:         "dotted",
+		TopColor:    "00000000",
+		Bottom:      "dotted",
+		BottomColor: "00000000",
 	}
+
 	defaultExcelAlignment = xlsx.Alignment{ //对其方式
-		Horizontal: "center",
+		Horizontal: "left",
 		Vertical:   "center",
 		WrapText:   true,
 	}
+	defaultFont = xlsx.NewFont(12, "等线")
+	blueFont    = xlsx.Font{
+		Size:  12,
+		Name:  "等线",
+		Color: "00376092",
+	}
 )
 
 // 获取
-func GetExcelFilePath(orderCode string) string {
+func GetExcelFilePath(orderCode string, num int) string {
 	now := time.Now()
-	filename := fmt.Sprintf("%s.xlsx", fmt.Sprintf("%s_%s_%s", now.Format("20060102150405"), orderCode, qutil.GetLetterRandom(5)))
+	filename := fmt.Sprintf("%s.xlsx", fmt.Sprintf("%s_%d_%s_%s", now.Format("20060102"), num, orderCode, qutil.GetLetterRandom(5)))
 	return fmt.Sprintf("/dataexport/%s/%s/%s", now.Format("2006"), now.Format("01"), filename)
 }
 
@@ -57,9 +65,9 @@ func GetDataExportFileDataLen(path string) (int, error) {
 
 // 生成数据导出excel
 func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, filePath string) error {
-	if list == nil || len(*list) == 0 {
-		return errors.New("未查询到数据")
-	}
+	//if list == nil || len(*list) == 0 {
+	//	return errors.New("未查询到数据")
+	//}
 	//创建excel文件
 	file := xlsx.NewFile()
 	sheet, err := file.AddSheet("Sheet1")
@@ -77,18 +85,20 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 		for index, excel := range excelHead {
 			cell = row.AddCell()
 			cell.SetString(excel.Name)
-			cell.SetStyle(&xlsx.Style{
+			style := &xlsx.Style{
 				Fill:      *xlsx.NewFill("solid", excel.Color, excel.Color),
-				Border:    defaultExcelBorder,
 				Alignment: defaultExcelAlignment,
-			})
+				Font:      *defaultFont,
+				Border:    defaultExcelBorder,
+			}
+			cell.SetStyle(style)
 			sheet.Col(index).Width = excel.Width
 		}
 	} else {
 		excelHead = config.ExConf.Senior_Fields
 		//铺设第一层title
 		row = sheet.AddRow()
-		row.SetHeight(12)
+		row.SetHeight(20)
 		lastF := false //合并行时标识
 		for _, excel := range excelHead {
 			if excel.VMerge != 1 && excel.HMerge == 0 {
@@ -107,15 +117,17 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 			if excel.HMerge != 0 {
 				lastF = true
 			}
-			cell.SetStyle(&xlsx.Style{
+			style := &xlsx.Style{
 				Fill:      *xlsx.NewFill("solid", excel.Color, excel.Color),
-				Border:    defaultExcelBorder,
 				Alignment: defaultExcelAlignment,
-			})
+				Font:      *defaultFont,
+				Border:    defaultExcelBorder,
+			}
+			cell.SetStyle(style)
 		}
 		//铺设第二层title并设置宽度
 		row = sheet.AddRow()
-		row.SetHeight(12)
+		row.SetHeight(20)
 		cNum := 0
 		for _, excel := range excelHead {
 			if excel.HMerge != 0 {
@@ -131,35 +143,103 @@ func CreateDataExportExcelFile(list *[]map[string]interface{}, isSenior bool, fi
 				Fill:      *xlsx.NewFill("solid", excel.Color, excel.Color),
 				Border:    defaultExcelBorder,
 				Alignment: defaultExcelAlignment,
+				Font:      *defaultFont,
 			})
 		}
 	}
-	//填充数据
-	for k, data := range *list {
-		row = sheet.AddRow()
-		row.SetHeight(50)
-		data["index"] = k + 1
-		for _, v := range excelHead {
-			if v.Filed == "" {
-				continue
-			}
-			cell = row.AddCell()
+	if list != nil && len(*list) > 0 {
+		//填充数据
+		for k, data := range *list {
+			winnerMaps := gconv.Maps(data["winnerMaps"])
+			winnerTotal := len(winnerMaps)
+			data["index"] = k + 1
+			if winnerTotal > 0 {
+				for index, winnerDatas := range winnerMaps {
+					row = sheet.AddRow()
+					row.SetHeight(20)
 
-			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]))
+					for _, v := range excelHead {
+						if v.Filed == "" {
+							continue
+						}
+						cell = row.AddCell()
+						style := &xlsx.Style{
+							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" {
+									cell.SetFormula(fmt.Sprintf("=HYPERLINK(\"%s\",\"%s\")", data["href"], data[v.Filed]))
+								} else {
+									cell.SetValue(data[v.Filed])
+								}
+							}
+						} else {
+							cell.SetValue(winnerDatas[v.Filed])
+						}
+						if v.Filed == "title" {
+							style.Font = blueFont
+						}
+						cell.SetStyle(style)
+					}
+				}
 			} else {
-				cell.SetValue(data[v.Filed])
+				row = sheet.AddRow()
+				row.SetHeight(20)
+
+				for _, v := range excelHead {
+					if v.Filed == "" {
+						continue
+					}
+					cell = row.AddCell()
+					style := &xlsx.Style{
+						Border:    defaultExcelBorder,
+						Alignment: defaultExcelAlignment,
+					}
+					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])
+					}
+					if v.Filed == "title" {
+						style.Font = blueFont
+					}
+					cell.SetStyle(style)
+				}
 			}
-			cell.SetStyle(&xlsx.Style{
-				Border:    defaultExcelBorder,
-				Alignment: defaultExcelAlignment,
-			})
+			//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
 		}
-	}
-	if err := FolderCheck(filePath); err != nil {
-		return err
 	}
 	return file.Save(filePath)
 }

+ 9 - 1
src/web/staticres/big-member/js/unit_portrayal.js

@@ -562,9 +562,17 @@ var vNode = {
             location.href = '/big/wx/page/free_buyer_project_news?entName=' + decodeURIComponent(utils.getParam('entName'))
           }
         },
+        next_export (obj){
+          console.log(obj)
+          this.onExport('popupClick')
+        },
         //数据导出
-        onExport(){
+        onExport(type){
           var _this = this
+          if(this.dt.pageCount > 20000 && type !== 'popupClick' && this.$refs.popup_dataExport.isPrompt){
+            this.$refs.popup_dataExport.show = true
+            return
+          }
           var storageSet = this.getHighSet()
           var data = {
             buyer: decodeURIComponent(utils.getParam('entName')),

+ 19 - 1
src/web/staticres/common-module/collection/js/ent_portrait.js

@@ -326,6 +326,11 @@ var vNode = {
       var entniche = info.vipStatus <= 0 && info.memberStatus <= 0 && info.entniche
       return memberCustom || isNewVip || entniche
     },
+    phoneUnlockTip () {
+      var info = this.powerInfo
+      var phone = this.entBaseInfo.phone
+      return info.isFree && phone && phone.indexOf('*') !== -1
+    },
     noShowTip: function () {
       return (!this.isFree && !this.updateVipStatus && !this.customerServiceStatus) || (this.isFree && this.canFreeTrial)
     }
@@ -561,8 +566,17 @@ var vNode = {
       }
       return urls
     },
+    next_export (obj){
+      console.log(obj)
+      this.onExport('popupClick')
+    },
+    
     //数据导出
-    onExport(){
+    onExport(type){
+      if(this.topProject.count > 20000 && type !== 'popupClick' && this.$refs.popup_dataExport.isPrompt){
+        this.$refs.popup_dataExport.show = true
+        return
+      }
       var _this = this
       var storageSet = this.getHighSet()
       var data = {
@@ -774,6 +788,10 @@ var vNode = {
         this.changeFollowStateRequest()
       }
     },
+    goToUnlock: function () {
+      // this.savePageState()
+      location.href = '/weixin/frontPage/bigmember/free/perfect_info?source=ent_portrait_contacts'
+    },
     goExpAnalysis () {
       location.href = '/weixin/frontPage/bigmember/free/perfect_info?source=ent_portrait_freeuser';
     },

+ 13 - 3
src/web/staticres/common-module/collection/js/index-wx.js

@@ -265,6 +265,7 @@ var vNode = {
           }
           if (res.error_code == 0) {
             if (res.data && res.data.res && $.isArray(res.data.res)) {
+              _this.listState.total = res.data.count
               try {
                 res.data.res.forEach(function (item) {
                     item.isCB = {
@@ -343,6 +344,7 @@ var vNode = {
       })
     },
     getCBProject: function(arr) {
+      let _this = this
       let idArr = arr.map(item => item._id)
       if (idArr.length > 0) {
         idArr = idArr.join(',')
@@ -370,8 +372,8 @@ var vNode = {
             }
           }
         },
-        error: function(){
-          _this.$toast(res.error_msg)
+        error: function(err){
+          // _this.$toast(err.error_msg)
         }
       })
     },
@@ -591,11 +593,19 @@ var vNode = {
         }
       })
     },
+    next_export (obj){
+      console.log(obj)
+      this.dataReport('popupClick')
+    },
     // 数据导出
-    dataReport: function() {
+    dataReport: function(type) {
       if(this.listState.list.length == 0) {
         this.$toast('暂无数据')
       } else {
+        if(this.listState.total> 20000 && type !== 'popupClick' && this.$refs.popup_dataExport.isPrompt){
+          this.$refs.popup_dataExport.show = true
+          return
+        }
         $.ajax({
           url: '/publicapply/dataexpoet/bycollection',
           type: 'POST',

+ 13 - 3
src/web/staticres/common-module/collection/js/index.js

@@ -267,6 +267,7 @@ var vNode = {
           }
           if (res.error_code == 0) {
             if (res.data && res.data.res && $.isArray(res.data.res)) {
+              _this.listState.total = res.data.count
               try {
                 res.data.res.forEach(function (item) {
                     item.isCB = {
@@ -345,6 +346,7 @@ var vNode = {
       })
     },
     getCBProject: function(arr) {
+      let _this = this
       let idArr = arr.map(item => item._id)
       if (idArr.length > 0) {
         idArr = idArr.join(',')
@@ -372,8 +374,8 @@ var vNode = {
             }
           }
         },
-        error: function(){
-          _this.$toast(res.error_msg)
+        error: function(err){
+          // _this.$toast(err.error_msg)
         }
       })
     },
@@ -594,11 +596,19 @@ var vNode = {
         }
       })
     },
+    next_export (obj){
+      console.log(obj)
+      this.dataReport('popupClick')
+    },
     // 数据导出
-    dataReport: function() {
+    dataReport: function(type) {
       if(this.listState.list.length == 0) {
         this.$toast('暂无数据')
       }else {
+        if(this.listState.total> 20000 && type !== 'popupClick' && this.$refs.popup_dataExport.isPrompt){
+          this.$refs.popup_dataExport.show = true
+          return
+        }
         $.ajax({
           url: '/publicapply/dataexpoet/bycollection',
           type: 'POST',

+ 114 - 0
src/web/staticres/common-module/dataExport/components/popup-data-export.js

@@ -0,0 +1,114 @@
+Vue.component('popup-data-export', {
+  delimiters: ['@@', '@@'],
+  template: `
+  <div class="popupDataexport">
+    <van-popup v-model="show">
+      <div class="warm">
+        <div class="close" @click="show = false"></div>
+        <div class="content_box">
+          <p class="title">温馨提示</p>
+          <div class="text_box">您选择的数据超过了导出数据最大值<span class="blue">20,000</span>,请优化条件后导出。您也可联系客服:<span @click="callPhone('400-108-6670')">400-108-6670</span>,或添加<span class="blue">客服微信。</span></div>
+          <div class="qr_box">
+            <img :src="img" alt="">
+          </div>
+          <div class="desc">客服微信</div>
+          <div class="btn_box">
+            <div class="btn"><div :class="choose?'choosed':'nochoose'" @click="btnClick"></div></div>
+            <p class="text">后续不再提醒</p>
+          </div>
+        </div>
+        <div class="footer" @click="next">
+          <span>继续导出20000条</span>
+        </div>
+      </div>
+    </van-popup>  
+  </div>
+  `,
+  props: {
+
+  },
+  data: function () {
+    return {
+      show: false,
+      choose:false,
+      img:'',
+      isPrompt:true
+
+    }
+  } ,
+  created (){
+    this.getqr()
+    $.ajax({
+      type: 'POST',
+      url: '/front/dataExport/getDontPromptAgain',
+      success: function (res) { 
+        if(!res){return}
+        this.isPrompt = res.isPrompt
+       },
+      error: function (error) {
+      }
+    })
+  },
+  mounted () {
+
+  },
+  computed: {
+
+  },
+  methods: {
+    getqr () {
+      let _this = this
+      $.ajax({
+        type: 'POST',
+        url: '/bigmember/use/isAdd?t=' + Date.now(),
+        success: function (res) { 
+          if(!res.data){return}
+          if(res.data.customers&&res.data.customers.length>0){
+            let list = res.data.customers
+            list.forEach(e => {
+              if(e.remark === '客户经理'){
+                _this.img = e.wxer 
+              }  
+            })
+            if(_this.img == ''){
+              _this.img = customer[0].wxer
+            }
+          }
+         },
+        error: function (error) {
+        }
+      })
+
+    },
+    btnClick(){
+      this.choose = !this.choose
+    },
+    next(){
+      if(this.choose){
+        $.ajax({
+          type: 'POST',
+          url: '/front/dataExport/setDontPromptAgain',
+          data: {status:1},
+          contentType: 'application/x-www-form-urlencoded',
+          success: function (res) { 
+           },
+          error: function (error) {
+          }
+        })
+      }
+      this.$emit('next',{choose:this.choose})
+    },
+    callPhone: function (tel) {
+      if (navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1) { // 微信
+        location.href = 'tel:' + tel
+      } else {
+        try {
+          JyObj.callPhone(tel);
+        } catch (error) {
+          console.log(error)
+        }
+      }
+    },
+   
+  }
+})

+ 81 - 0
src/web/staticres/common-module/dataExport/css/association.css

@@ -0,0 +1,81 @@
+.association-list-box{
+  flex: 1;
+  box-sizing: border-box;
+  /* padding-top: 0.16rem; */
+  overflow-y: scroll;
+  padding-bottom: 1.8rem;
+  /* background-color: #fff; */
+  /* border-radius: 0.2rem 0.2rem 0 0; */
+}
+.association-list{
+  /* height: 100%;
+  overflow-y: scroll; */
+  box-sizing: border-box;
+  padding-left: 0.32rem;
+  background-color: #fff;
+  /* border-radius: 0.2rem 0.2rem 0 0; */
+  border-top: 1px solid #F5F6F7;
+  
+}
+.association-item{
+  height: 0.92rem;
+  display: flex;
+  align-items: center;
+  border-bottom: 1px solid #F5F6F7;
+  background-color: #fff;
+  color: #171826;
+  font-size: 0.28rem;
+  /* padding-left: 0.32rem; */
+}
+.btn{
+  height: 1.8rem;
+  background-color: #fff;
+  box-sizing: border-box;
+  padding-left: 0.32rem;
+  padding-top: 0.16rem;
+  padding-right: 0.32rem;
+}
+.btn .close{
+  background-color: #EDEFF2 !important;
+  color: #5F5E64 !important;
+  width: 3.3rem !important;
+  height: 0.8rem !important;
+  border-radius: 0.08rem !important;
+  font-size: 0.32rem !important;
+}
+.btn .save-btn{
+  width: 3.3rem !important;
+  height: 0.8rem !important;
+  border-radius: 0.08rem !important;
+  font-size: 0.32rem !important;
+}
+.keyWord {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  overflow: scroll;
+
+}
+.keyWord .content{
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+
+}
+.enter.addkeyWord{
+  /* height: 100%; */
+  /* margin-bottom: 0.16rem; */
+}
+.highlight-text{
+  color: #2ABED1;
+}
+.fixed-bottom{
+  width: 100%;
+  position: fixed;
+  left: 0;
+  bottom: 0;
+}
+.pb-0-impor{
+  padding-bottom: 0 !important;
+}

+ 136 - 0
src/web/staticres/common-module/dataExport/css/dataExportAppend.css

@@ -0,0 +1,136 @@
+.screeningCondition{
+  box-sizing: border-box;
+  height: 1.12rem;
+  padding-right: 0.35rem;
+  width: 100%;
+}
+.screeningCondition .sc-btnContent{
+  float: right;
+  overflow: hidden;
+}
+.screeningCondition .sc-btn{
+  padding: 0.08rem 0.16rem;
+  display: flex;
+  background-color: #fff;
+  justify-content: center;
+  align-items: center;
+  border: 1px solid #2ABED1;
+  border-radius: 0.08rem;
+  color: #2ABED1;
+  float: right;
+  margin-top: 0.26rem;
+
+}
+.screeningCondition .sc-icon{
+  width: 0.4rem;
+  height: 0.4rem;
+  background-image: url(/common-module/dataExport/image/help.png);
+  background-size: contain;
+  display: flex;
+  margin-left: 0.16rem;
+  float: right;
+  margin-top: 0.36rem;
+}
+html .page .elseChoose .elseChooseList ul li{
+  height: 1.08rem;
+  line-height: 1.08rem;
+  border-bottom: 1px solid #F5F6F7;
+  padding-left: 0;
+  color: #171826;
+}
+html .page .elseChoose .elseChooseList ul {
+  margin-bottom: 0.24rem;
+  padding-left: 0.32rem;
+  box-sizing: border-box;
+  background-color: #fff;
+}
+html .page .elseChoose .elseChooseList ul li a span{
+  height: 1.08rem;
+}
+html .page .elseChoose .elseChooseList ul li a i{
+  color: #C0C4CC;
+}
+html .page .elseChoose .elseChooseList ul .iconfont{
+  font-size: 15px;
+}
+html .page .elseChoose .elseChooseList ul li a span{
+  color: #9B9CA3;
+}
+html .page .elseChoose p{
+  color: #9B9CA3;
+}
+html .page .chooseTime{
+  background-color: #fff;
+  padding-top: 0.32rem;
+  margin-top: 0;
+  padding-bottom: 0.16rem;
+}
+html .page .progress{
+/* padding: 0 0.32rem; */
+margin: 0 0.32rem;
+border-bottom: 1px solid #F5F6F7;
+}
+html .page .progress .p-item{
+  /* border-bottom: 1px solid #F5F6F7; */
+  /* padding: 0.2rem 0; */
+  color: #9B9CA3;
+}
+html .page .progressBox{
+  background-color: #fff;
+
+}
+html .page .chooseTime ul li{
+  color: #5F5E64;
+  background-color: #F5F6F7;
+}
+html .page .chooseTime .dateMake {
+  height: 1.04rem;
+  line-height: 1.04rem;
+  width: 6.84rem;
+  padding: 0.16rem;
+  margin: auto;
+  margin-top: 0.16rem;
+  box-sizing: border-box;
+}
+html .page .chooseTime .dateMake .heng{
+  color: #0000004D;
+}
+html .page .chooseTime .dateMake input{
+  width: 2.96rem !important;
+  margin: 0!important;
+  border-radius: 0.08rem !important;
+  border: 1px solid #0000001A !important;
+  color: #171826 !important;
+  padding-left: 0.38rem!important;
+  padding-right: 0.38rem!important;;
+  /* text-align:center; */
+}
+html .page .chooseTimebox{
+  background-color: #E8FAFD !important;
+  position: relative;
+  border-radius: 0.08rem;
+}
+html .page .chooseTimebox::before{
+  content: '';
+  position: absolute;
+  width: 0.28rem;
+  height: 0.24rem;
+  background-image: url(/common-module/dataExport/image/right_corner.png);
+  background-size: contain;
+  right: 0;
+  bottom: 0;
+}
+
+html .page .progress .p-item .p-item-icon{
+  width: 0.2rem;
+  height: 0.2rem;
+  line-height: 0.2rem;
+  background-color: #E6E6E6;
+}
+html .page .progress .p-item .line{
+  top: 0.1rem;
+  background-color: #E6E6E6;
+  height: 0.02rem;
+  width: 2rem;
+  right: -1rem;
+}

+ 105 - 0
src/web/staticres/common-module/dataExport/css/popup-data-export.css

@@ -0,0 +1,105 @@
+.popupDataexport .van-popup {
+  background-color: rgba(0, 0, 0, 0);
+}
+.popupDataexport .warm {
+  width: 6.06rem;
+  height: 8.9rem;
+  background-color: #FFF;
+  border-radius: 0.16rem;
+  position: relative;
+}
+.popupDataexport .warm .close {
+  width: 0.4rem;
+  height: 0.4rem;
+  display: block;
+  position: absolute;
+  right: 0.16rem;
+  top: 0.16rem;
+  z-index: 2;
+  background-image: url(/images/dataExport/close.png);
+  background-size: contain;
+}
+.popupDataexport .warm .content_box {
+  padding: 0.48rem 0.6rem 0.32rem 0.6rem;
+}
+.popupDataexport .warm .content_box .title {
+  font-size: 0.36rem;
+  font-weight: 400;
+  line-height: 0.52rem;
+  text-align: center;
+  color: #171826;
+}
+.popupDataexport .warm .content_box .text_box {
+  font-size: 0.28rem;
+  font-weight: 400;
+  line-height: 0.4rem;
+  color: #5F5E64;
+  margin-top: 0.16rem;
+}
+.popupDataexport .warm .content_box .text_box .blue {
+  color: #2ABED1;
+}
+.popupDataexport .warm .content_box .qr_box {
+  border: 0.02rem solid #0000001A;
+  border-radius: 0.16rem;
+  width: 2.82rem;
+  height:2.82rem;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin: auto;
+  margin-top: 0.48rem;
+}
+.popupDataexport .warm .content_box .qr_box img {
+  width: 2.68rem;
+  height: 2.68rem;
+}
+.popupDataexport .warm .content_box .desc {
+  text-align: center;
+  font-size: 0.28rem;
+  font-weight: 400;
+  line-height: 0.4rem;
+  color: #1B1A2A;
+  margin-top: 0.24rem;
+}
+.popupDataexport .warm .btn_box {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-top: 0.48rem;
+}
+.popupDataexport .warm .btn_box .btn {
+  width: 0.48rem;
+  height: 0.48rem;
+  justify-content: center;
+  display: flex;
+  align-items: center;
+}
+.popupDataexport .warm .btn_box .choosed {
+  width: 0.48rem;
+  height: 0.48rem;
+  background-image: url(/images/dataExport/choose_right.png);
+  background-size: contain;
+}
+.popupDataexport .warm .btn_box .nochoose {
+  width: 0.36rem;
+  height: 0.36rem;
+  border-radius: 50%;
+  border: 0.02rem solid #0000001A;
+}
+.popupDataexport .warm .btn_box .text {
+  font-size: 0.24rem;
+  font-weight: 400;
+  line-height: 0.36rem;
+  color: #9B9CA3;
+  margin-left: 0.08rem
+}
+.popupDataexport .warm .footer {
+  border-top: 0.02rem solid #0000001A;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  color: #2ABED1;
+  font-size: 0.36rem;
+  height: 0.9rem;
+}

BIN=BIN
src/web/staticres/common-module/dataExport/image/help.png


BIN=BIN
src/web/staticres/common-module/dataExport/image/right_corner.png


+ 86 - 0
src/web/staticres/common-module/dataExport/js/association.js

@@ -0,0 +1,86 @@
+$(function(){
+  var chooseindex;
+  var debouncedInputHandler = utils.debounce(function(e) {
+    if($('.keyWord .addkeyWord').css('display') != 'none'){
+      var input_query = $('.keyWord input').val()
+      $('.association-list-box').removeClass('pb-0-impor')
+    }else{
+      var input_query = $('.keyWord textarea').eq(chooseindex).val()
+      $('.association-list-box').addClass('pb-0-impor')
+    } 
+    let type = ''
+    if(window.location.href.indexOf('buyer') > -1){
+      type = 'buyer'
+    }else{
+      type = 'ent'
+    }
+    associationNameList(type,input_query,function(res){
+      $('.keyWord .association-list').html('')
+      if(res.length > 0){
+        $('.keyWord .association-list').html('')
+        res.forEach(function(item){
+          $('.keyWord .association-list').append('<li class="association-item" data-val='+item.value+'>'+ utils.replaceKeyword(item.value,input_query, '<span class="highlight-text">' + input_query + '</span>')+'</li>')
+        })
+        $('.keyWord .association-list-box').show()
+        }else{
+          $('.keyWord .association-list-box').hide()
+        }
+    })
+  },300)
+  $('.keyWord').on('click','.editKeyWord',function(){
+     chooseindex = $(this).index('.editKeyWord') // 当前修改索引赋值
+     console.log(chooseindex)
+  })
+  $('.keyWord input').on('input',debouncedInputHandler) // 新增
+  $('.keyWord').on('input','textarea',debouncedInputHandler) // 修改
+  $('.keyWord input').on('blur',function(){
+    setTimeout(function () {
+      $('.keyWord .association-list-box').hide()
+    }, 100);
+  })
+  $('.keyWord').on('blur','textarea',function(){
+    setTimeout(function () {
+      $('.keyWord .association-list-box').hide()
+    }, 100);
+  })
+  $('.keyWord .association-list').on('click','.association-item',function(){
+    if($('.keyWord .addkeyWord').css('display') != 'none'){
+      $('.keyWord input').val($(this).attr('data-val'))
+    }else{
+      $('.keyWord textarea').eq(chooseindex).val($(this).attr('data-val'))
+
+    }
+    $('.keyWord .association-list-box').hide()
+  })
+})
+function associationNameList (type,str, cb) {
+  const query = str.replace(/\s+/g, '')
+  if (query.length < 2) {
+    return cb([])
+  }
+  $.ajax({
+    type: 'post',
+    url: '/bigmember/search/'+type+'/association',
+    dataType: "json",
+    data: {
+      name:query,
+    },
+    success: function (res) {
+      if (res.error_code == 0) {
+        if (res.data) {
+          const result = (res.data.list || []).map(v => {
+            return {
+              ...v,
+              value: v.name?v.name:v
+            }
+          })
+          // const result = [{value:'中国佛学院'},{value:'中国佛学院'},{value:'中国佛学院'},{value:'中国佛学院'},{value:'中国佛学院'},{value:'中国佛学院'},{value:'中国佛学院'}]
+          cb(result)
+        }
+      }
+    },
+    error: function (error) {
+      cb([])
+    }
+  })
+}

+ 2429 - 0
src/web/staticres/common-module/js/mapJSON.js

@@ -0,0 +1,2429 @@
+/**
+ * @file china-map.json
+ * @author zhangyuhan2016 <hi_zhangyuhan@163.com>
+ */
+var chinaMapJSON = [{
+  "ProID": 1,
+  "name": "北京市",
+  "ProSort": 1,
+  "ProRemark": "直辖市",
+  "city": [{
+    "CityID": 1,
+    "name": "北京市",
+    "ProID": 1,
+    "CitySort": 1,
+    "area": ["东城区", "西城区", "崇文区", "宣武区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云县", "延庆县"]
+  }]
+}, {
+  "ProID": 2,
+  "name": "天津市",
+  "ProSort": 2,
+  "ProRemark": "直辖市",
+  "city": [{
+    "CityID": 2,
+    "name": "天津市",
+    "ProID": 2,
+    "CitySort": 2,
+    "area": ["和平区", "河东区", "河西区", "南开区", "河北区", "红桥区", "塘沽区", "汉沽区", "大港区", "东丽区", "西青区", "津南区", "北辰区", "武清区", "宝坻区", "宁河县", "静海县", "蓟县"]
+  }]
+}, {
+  "ProID": 3,
+  "name": "河北省",
+  "ProSort": 5,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 5,
+    "name": "邯郸市",
+    "ProID": 3,
+    "CitySort": 5,
+    "area": ["邯山区", "丛台区", "复兴区", "峰峰矿区", "邯郸县", "临漳县", "成安县", "大名县", "涉县", "磁县", "肥乡县", "永年县", "邱县", "鸡泽县", "广平县", "馆陶县", "魏县", "曲周县", "武安市"]
+  }, {
+    "CityID": 6,
+    "name": "石家庄市",
+    "ProID": 3,
+    "CitySort": 6,
+    "area": ["长安区", "桥东区", "桥西区", "新华区", "井陉矿区", "裕华区", "井陉县", "正定县", "栾城县", "行唐县", "灵寿县", "高邑县", "深泽县", "赞皇县", "无极县", "平山县", "元氏县", "赵县", "辛集市", "藁城市", "晋州市", "新乐市", "鹿泉市"]
+  }, {
+    "CityID": 666,
+    "name": "秦皇岛市",
+    "ProID": 3,
+    "CitySort": 666,
+    "area": ["海港区", "山海关区", "北戴河区", "抚宁区", "青龙满族自治县", "昌黎县", "卢龙县"]
+  }, {
+    "CityID": 7,
+    "name": "保定市",
+    "ProID": 3,
+    "CitySort": 7,
+    "area": ["新市区", "北市区", "南市区", "满城县", "清苑县", "涞水县", "阜平县", "徐水县", "定兴县", "唐县", "高阳县", "容城县", "涞源县", "望都县", "安新县", "易县", "曲阳县", "蠡县", "顺平县", "博野县", "雄县", "涿州市", "定州市", "安国市", "高碑店市"]
+  }, {
+    "CityID": 8,
+    "name": "张家口市",
+    "ProID": 3,
+    "CitySort": 8,
+    "area": ["桥东区", "桥西区", "宣化区", "下花园区", "宣化县", "张北县", "康保县", "沽源县", "尚义县", "蔚县", "阳原县", "怀安县", "万全县", "怀来县", "涿鹿县", "赤城县", "崇礼县"]
+  }, {
+    "CityID": 9,
+    "name": "承德市",
+    "ProID": 3,
+    "CitySort": 9,
+    "area": ["双桥区", "双滦区", "鹰手营子矿区", "承德县", "兴隆县", "平泉县", "滦平县", "隆化县", "丰宁满族自治县", "宽城满族自治县", "围场满族蒙古族自治县"]
+  }, {
+    "CityID": 10,
+    "name": "唐山市",
+    "ProID": 3,
+    "CitySort": 10,
+    "area": ["路南区", "路北区", "古冶区", "开平区", "丰南区", "丰润区", "滦县", "滦南县", "乐亭县", "迁西县", "玉田县", "唐海县", "遵化市", "迁安市"]
+  }, {
+    "CityID": 11,
+    "name": "廊坊市",
+    "ProID": 3,
+    "CitySort": 11,
+    "area": ["安次区", "广阳区", "固安县", "永清县", "香河县", "大城县", "文安县", "大厂回族自治县", "霸州市", "三河市"]
+  }, {
+    "CityID": 12,
+    "name": "沧州市",
+    "ProID": 3,
+    "CitySort": 12,
+    "area": ["新华区", "运河区", "沧县", "青县", "东光县", "海兴县", "盐山县", "肃宁县", "南皮县", "吴桥县", "献县", "孟村回族自治县", "泊头市", "任丘市", "黄骅市", "河间市"]
+  }, {
+    "CityID": 13,
+    "name": "衡水市",
+    "ProID": 3,
+    "CitySort": 13,
+    "area": ["桃城区", "枣强县", "武邑县", "武强县", "饶阳县", "安平县", "故城县", "景县", "阜城县", "冀州市", "深州市"]
+  }, {
+    "CityID": 14,
+    "name": "邢台市",
+    "ProID": 3,
+    "CitySort": 14,
+    "area": ["桥东区", "桥西区", "邢台县", "临城县", "内丘县", "柏乡县", "隆尧县", "任县", "南和县", "宁晋县", "巨鹿县", "新河县", "广宗县", "平乡县", "威县", "清河县", "临西县", "南宫市", "沙河市"]
+  }]
+}, {
+  "ProID": 4,
+  "name": "山西省",
+  "ProSort": 6,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 16,
+    "name": "朔州市",
+    "ProID": 4,
+    "CitySort": 16,
+    "area": ["朔城区", "平鲁区", "山阴县", "应县", "右玉县", "怀仁县"]
+  }, {
+    "CityID": 17,
+    "name": "忻州市",
+    "ProID": 4,
+    "CitySort": 17,
+    "area": ["忻府区", "定襄县", "五台县", "代县", "繁峙县", "宁武县", "静乐县", "神池县", "五寨县", "岢岚县", "河曲县", "保德县", "偏关县", "原平市"]
+  }, {
+    "CityID": 18,
+    "name": "太原市",
+    "ProID": 4,
+    "CitySort": 18,
+    "area": ["小店区", "迎泽区", "杏花岭区", "尖草坪区", "万柏林区", "晋源区", "清徐县", "阳曲县", "娄烦县", "古交市"]
+  }, {
+    "CityID": 19,
+    "name": "大同市",
+    "ProID": 4,
+    "CitySort": 19,
+    "area": ["矿区", "南郊区", "新荣区", "阳高县", "天镇县", "广灵县", "灵丘县", "浑源县", "左云县", "大同县"]
+  }, {
+    "CityID": 20,
+    "name": "阳泉市",
+    "ProID": 4,
+    "CitySort": 20,
+    "area": ["矿区", "平定县", "盂县"]
+  }, {
+    "CityID": 21,
+    "name": "晋中市",
+    "ProID": 4,
+    "CitySort": 21,
+    "area": ["榆次区", "榆社县", "左权县", "和顺县", "昔阳县", "寿阳县", "太谷县", "祁县", "平遥县", "灵石县", "介休市"]
+  }, {
+    "CityID": 22,
+    "name": "长治市",
+    "ProID": 4,
+    "CitySort": 22,
+    "area": ["城区", "长治县", "襄垣县", "屯留县", "平顺县", "黎城县", "壶关县", "长子县", "武乡县", "沁县", "沁源县", "潞城市"]
+  }, {
+    "CityID": 23,
+    "name": "晋城市",
+    "ProID": 4,
+    "CitySort": 23,
+    "area": ["沁水县", "阳城县", "陵川县", "泽州县", "高平市"]
+  }, {
+    "CityID": 24,
+    "name": "临汾市",
+    "ProID": 4,
+    "CitySort": 24,
+    "area": ["尧都区", "曲沃县", "翼城县", "襄汾县", "洪洞县", "古县", "安泽县", "浮山县", "吉县", "乡宁县", "大宁县", "隰县", "永和县", "蒲县", "汾西县", "侯马市", "霍州市"]
+  }, {
+    "CityID": 25,
+    "name": "吕梁市",
+    "ProID": 4,
+    "CitySort": 25,
+    "area": ["离石区", "文水县", "交城县", "兴县", "临县", "柳林县", "石楼县", "岚县", "方山县", "中阳县", "交口县", "孝义市", "汾阳市"]
+  }, {
+    "CityID": 26,
+    "name": "运城市",
+    "ProID": 4,
+    "CitySort": 26,
+    "area": ["盐湖区", "临猗县", "万荣县", "闻喜县", "稷山县", "新绛县", "绛县", "垣曲县", "夏县", "平陆县", "芮城县", "永济市", "河津市"]
+  }]
+}, {
+  "ProID": 5,
+  "name": "内蒙古自治区",
+  "ProSort": 32,
+  "ProRemark": "自治区",
+  "city": [{
+    "CityID": 351,
+    "name": "呼伦贝尔市",
+    "ProID": 5,
+    "CitySort": 351,
+    "area": ["海拉尔区", "阿荣旗", "莫力达瓦达斡尔族自治旗", "鄂伦春自治旗", "鄂温克族自治旗", "陈巴尔虎旗", "新巴尔虎左旗", "新巴尔虎右旗", "满洲里市", "牙克石市", "扎兰屯市", "额尔古纳市", "根河市"]
+  }, {
+    "CityID": 352,
+    "name": "呼和浩特市",
+    "ProID": 5,
+    "CitySort": 352,
+    "area": ["新城区", "回民区", "玉泉区", "赛罕区", "土默特左旗", "托克托县", "和林格尔县", "清水河县", "武川县"]
+  }, {
+    "CityID": 353,
+    "name": "包头市",
+    "ProID": 5,
+    "CitySort": 353,
+    "area": ["东河区", "昆都仑区", "青山区", "石拐区", "白云鄂博矿区", "九原区", "土默特右旗", "固阳县", "达尔罕茂明安联合旗"]
+  }, {
+    "CityID": 354,
+    "name": "乌海市",
+    "ProID": 5,
+    "CitySort": 354,
+    "area": ["海勃湾区", "海南区", "乌达区"]
+  }, {
+    "CityID": 355,
+    "name": "乌兰察布市",
+    "ProID": 5,
+    "CitySort": 355,
+    "area": ["集宁区", "卓资县", "化德县", "商都县", "兴和县", "凉城县", "察哈尔右翼前旗", "察哈尔右翼中旗", "察哈尔右翼后旗", "四子王旗", "丰镇市"]
+  }, {
+    "CityID": 356,
+    "name": "通辽市",
+    "ProID": 5,
+    "CitySort": 356,
+    "area": ["科尔沁区", "科尔沁左翼中旗", "科尔沁左翼后旗", "开鲁县", "库伦旗", "奈曼旗", "扎鲁特旗", "霍林郭勒市"]
+  }, {
+    "CityID": 357,
+    "name": "赤峰市",
+    "ProID": 5,
+    "CitySort": 357,
+    "area": ["红山区", "元宝山区", "松山区", "阿鲁科尔沁旗", "巴林左旗", "巴林右旗", "林西县", "克什克腾旗", "翁牛特旗", "喀喇沁旗", "宁城县", "敖汉旗"]
+  }, {
+    "CityID": 358,
+    "name": "鄂尔多斯市",
+    "ProID": 5,
+    "CitySort": 358,
+    "area": ["东胜区", "达拉特旗", "准格尔旗", "鄂托克前旗", "鄂托克旗", "杭锦旗", "乌审旗", "伊金霍洛旗"]
+  }, {
+    "CityID": 359,
+    "name": "巴彦淖尔市",
+    "ProID": 5,
+    "CitySort": 359,
+    "area": ["临河区", "五原县", "磴口县", "乌拉特前旗", "乌拉特中旗", "乌拉特后旗", "杭锦后旗"]
+  }, {
+    "CityID": 360,
+    "name": "锡林郭勒盟",
+    "ProID": 5,
+    "CitySort": 360,
+    "area": ["二连浩特市", "锡林浩特市", "阿巴嘎旗", "苏尼特左旗", "苏尼特右旗", "东乌珠穆沁旗", "西乌珠穆沁旗", "太仆寺旗", "镶黄旗", "正镶白旗", "正蓝旗", "多伦县"]
+  }, {
+    "CityID": 361,
+    "name": "兴安盟",
+    "ProID": 5,
+    "CitySort": 361,
+    "area": ["乌兰浩特市", "阿尔山市", "科尔沁右翼前旗", "科尔沁右翼中旗", "扎赉特旗", "突泉县"]
+  }, {
+    "CityID": 362,
+    "name": "阿拉善盟",
+    "ProID": 5,
+    "CitySort": 362,
+    "area": ["阿拉善左旗", "阿拉善右旗", "额济纳旗"]
+  }]
+}, {
+  "ProID": 6,
+  "name": "辽宁省",
+  "ProSort": 8,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 27,
+    "name": "沈阳市",
+    "ProID": 6,
+    "CitySort": 27,
+    "area": ["和平区", "沈河区", "大东区", "皇姑区", "铁西区", "苏家屯区", "东陵区", "沈北新区", "于洪区", "辽中县", "康平县", "法库县", "新民市"]
+  }, {
+    "CityID": 28,
+    "name": "铁岭市",
+    "ProID": 6,
+    "CitySort": 28,
+    "area": ["银州区", "清河区", "铁岭县", "西丰县", "昌图县", "调兵山市", "开原市"]
+  }, {
+    "CityID": 29,
+    "name": "大连市",
+    "ProID": 6,
+    "CitySort": 29,
+    "area": ["长海县", "旅顺口区", "中山区", "西岗区", "沙河口区", "甘井子区", "金州区", "普兰店区", "瓦房店市", "庄河市"]
+  }, {
+    "CityID": 30,
+    "name": "鞍山市",
+    "ProID": 6,
+    "CitySort": 30,
+    "area": ["铁东区", "铁西区", "立山区", "千山区", "台安县", "岫岩满族自治县", "海城市"]
+  }, {
+    "CityID": 31,
+    "name": "抚顺市",
+    "ProID": 6,
+    "CitySort": 31,
+    "area": ["新抚区", "东洲区", "望花区", "顺城区", "抚顺县", "新宾满族自治县", "清原满族自治县"]
+  }, {
+    "CityID": 32,
+    "name": "本溪市",
+    "ProID": 6,
+    "CitySort": 32,
+    "area": ["平山区", "溪湖区", "明山区", "南芬区", "本溪满族自治县", "桓仁满族自治县"]
+  }, {
+    "CityID": 33,
+    "name": "丹东市",
+    "ProID": 6,
+    "CitySort": 33,
+    "area": ["元宝区", "振兴区", "振安区", "宽甸满族自治县", "东港市", "凤城市"]
+  }, {
+    "CityID": 34,
+    "name": "锦州市",
+    "ProID": 6,
+    "CitySort": 34,
+    "area": ["古塔区", "凌河区", "太和区", "黑山县", "义县", "凌海市", "北镇市"]
+  }, {
+    "CityID": 35,
+    "name": "营口市",
+    "ProID": 6,
+    "CitySort": 35,
+    "area": ["站前区", "西市区", "鮁鱼圈区", "老边区", "盖州市", "大石桥市"]
+  }, {
+    "CityID": 36,
+    "name": "阜新市",
+    "ProID": 6,
+    "CitySort": 36,
+    "area": ["海州区", "新邱区", "太平区", "清河门区", "细河区", "阜新蒙古族自治县", "彰武县"]
+  }, {
+    "CityID": 37,
+    "name": "辽阳市",
+    "ProID": 6,
+    "CitySort": 37,
+    "area": ["白塔区", "文圣区", "宏伟区", "弓长岭区", "太子河区", "辽阳县", "灯塔市"]
+  }, {
+    "CityID": 38,
+    "name": "朝阳市",
+    "ProID": 6,
+    "CitySort": 38,
+    "area": ["双塔区", "龙城区", "朝阳县", "建平县", "喀喇沁左翼蒙古族自治县", "北票市", "凌源市"]
+  }, {
+    "CityID": 39,
+    "name": "盘锦市",
+    "ProID": 6,
+    "CitySort": 39,
+    "area": ["双台子区", "兴隆台区", "大洼县", "盘山县"]
+  }, {
+    "CityID": 40,
+    "name": "葫芦岛市",
+    "ProID": 6,
+    "CitySort": 40,
+    "area": ["连山区", "龙港区", "南票区", "绥中县", "建昌县", "兴城市"]
+  }]
+}, {
+  "ProID": 7,
+  "name": "吉林省",
+  "ProSort": 9,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 41,
+    "name": "长春市",
+    "ProID": 7,
+    "CitySort": 41,
+    "area": ["南关区", "宽城区", "朝阳区", "二道区", "绿园区", "双阳区", "农安县", "九台市", "榆树市", "德惠市"]
+  }, {
+    "CityID": 42,
+    "name": "吉林市",
+    "ProID": 7,
+    "CitySort": 42,
+    "area": ["昌邑区", "龙潭区", "船营区", "丰满区", "永吉县", "蛟河市", "桦甸市", "舒兰市", "磐石市"]
+  }, {
+    "CityID": 43,
+    "name": "延边朝鲜族自治州",
+    "ProID": 7,
+    "CitySort": 43,
+    "area": ["延吉市", "图们市", "敦化市", "珲春市", "龙井市", "和龙市", "汪清县", "安图县"]
+  }, {
+    "CityID": 44,
+    "name": "四平市",
+    "ProID": 7,
+    "CitySort": 44,
+    "area": ["铁西区", "铁东区", "梨树县", "伊通满族自治县", "公主岭市", "双辽市"]
+  }, {
+    "CityID": 45,
+    "name": "通化市",
+    "ProID": 7,
+    "CitySort": 45,
+    "area": ["东昌区", "二道江区", "通化县", "辉南县", "柳河县", "梅河口市", "集安市"]
+  }, {
+    "CityID": 46,
+    "name": "白城市",
+    "ProID": 7,
+    "CitySort": 46,
+    "area": ["洮北区", "镇赉县", "通榆县", "洮南市", "大安市"]
+  }, {
+    "CityID": 47,
+    "name": "辽源市",
+    "ProID": 7,
+    "CitySort": 47,
+    "area": ["龙山区", "西安区", "东丰县", "东辽县"]
+  }, {
+    "CityID": 48,
+    "name": "松原市",
+    "ProID": 7,
+    "CitySort": 48,
+    "area": ["宁江区", "前郭尔罗斯蒙古族自治县", "长岭县", "乾安县", "扶余县"]
+  }, {
+    "CityID": 49,
+    "name": "白山市",
+    "ProID": 7,
+    "CitySort": 49,
+    "area": ["八道江区", "江源区", "抚松县", "靖宇县", "长白朝鲜族自治县", "临江市"]
+  }]
+}, {
+  "ProID": 8,
+  "name": "黑龙江省",
+  "ProSort": 10,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 50,
+    "name": "哈尔滨市",
+    "ProID": 8,
+    "CitySort": 50,
+    "area": ["道里区", "南岗区", "道外区", "平房区", "松北区", "香坊区", "呼兰区", "阿城区", "依兰县", "方正县", "宾县", "巴彦县", "木兰县", "通河县", "延寿县", "双城市", "尚志市", "五常市"]
+  }, {
+    "CityID": 51,
+    "name": "齐齐哈尔市",
+    "ProID": 8,
+    "CitySort": 51,
+    "area": ["龙沙区", "建华区", "铁锋区", "昂昂溪区", "富拉尔基区", "碾子山区", "梅里斯达翰尔族区", "龙江县", "依安县", "泰来县", "甘南县", "富裕县", "克山县", "克东县", "拜泉县", "讷河市"]
+  }, {
+    "CityID": 52,
+    "name": "鸡西市",
+    "ProID": 8,
+    "CitySort": 52,
+    "area": ["鸡冠区", "恒山区", "滴道区", "梨树区", "城子河区", "麻山区", "鸡东县", "虎林市", "密山市"]
+  }, {
+    "CityID": 53,
+    "name": "牡丹江市",
+    "ProID": 8,
+    "CitySort": 53,
+    "area": ["东安区", "阳明区", "爱民区", "西安区", "东宁县", "林口县", "绥芬河市", "海林市", "宁安市", "穆棱市"]
+  }, {
+    "CityID": 54,
+    "name": "七台河市",
+    "ProID": 8,
+    "CitySort": 54,
+    "area": ["新兴区", "桃山区", "茄子河区", "勃利县"]
+  }, {
+    "CityID": 55,
+    "name": "佳木斯市",
+    "ProID": 8,
+    "CitySort": 55,
+    "area": ["向阳区", "前进区", "东风区", "桦南县", "桦川县", "汤原县", "抚远县", "同江市", "富锦市"]
+  }, {
+    "CityID": 56,
+    "name": "鹤岗市",
+    "ProID": 8,
+    "CitySort": 56,
+    "area": ["向阳区", "工农区", "南山区", "兴安区", "东山区", "兴山区", "萝北县", "绥滨县"]
+  }, {
+    "CityID": 57,
+    "name": "双鸭山市",
+    "ProID": 8,
+    "CitySort": 57,
+    "area": ["尖山区", "岭东区", "四方台区", "宝山区", "集贤县", "友谊县", "宝清县", "饶河县"]
+  }, {
+    "CityID": 58,
+    "name": "绥化市",
+    "ProID": 8,
+    "CitySort": 58,
+    "area": ["北林区", "望奎县", "兰西县", "青冈县", "庆安县", "明水县", "绥棱县", "安达市", "肇东市", "海伦市"]
+  }, {
+    "CityID": 59,
+    "name": "黑河市",
+    "ProID": 8,
+    "CitySort": 59,
+    "area": ["爱辉区", "嫩江县", "逊克县", "孙吴县", "北安市", "五大连池市"]
+  }, {
+    "CityID": 60,
+    "name": "大兴安岭地区",
+    "ProID": 8,
+    "CitySort": 60,
+    "area": ["呼玛县", "塔河县", "漠河县"]
+  }, {
+    "CityID": 61,
+    "name": "伊春市",
+    "ProID": 8,
+    "CitySort": 61,
+    "area": ["伊春区", "南岔区", "友好区", "西林区", "翠峦区", "新青区", "美溪区", "金山屯区", "五营区", "乌马河区", "汤旺河区", "带岭区", "乌伊岭区", "红星区", "上甘岭区", "嘉荫县", "铁力市"]
+  }, {
+    "CityID": 62,
+    "name": "大庆市",
+    "ProID": 8,
+    "CitySort": 62,
+    "area": ["萨尔图区", "龙凤区", "让胡路区", "红岗区", "大同区", "肇州县", "肇源县", "林甸县", "杜尔伯特蒙古族自治县"]
+  }]
+}, {
+  "ProID": 9,
+  "name": "上海市",
+  "ProSort": 3,
+  "ProRemark": "直辖市",
+  "city": [{
+    "CityID": 3,
+    "name": "上海市",
+    "ProID": 9,
+    "CitySort": 3,
+    "area": ["黄浦区", "卢湾区", "徐汇区", "长宁区", "静安区", "普陀区", "闸北区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "浦东新区", "金山区", "松江区", "青浦区", "南汇区", "奉贤区", "崇明县"]
+  }]
+}, {
+  "ProID": 10,
+  "name": "江苏省",
+  "ProSort": 11,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 63,
+    "name": "南京市",
+    "ProID": 10,
+    "CitySort": 63,
+    "area": ["江宁区", "浦口区", "玄武区", "白下区", "秦淮区", "建邺区", "鼓楼区", "下关区", "栖霞区", "雨花台区", "六合区", "溧水县", "高淳县"]
+  }, {
+    "CityID": 64,
+    "name": "无锡市",
+    "ProID": 10,
+    "CitySort": 64,
+    "area": ["崇安区", "南长区", "北塘区", "锡山区", "惠山区", "滨湖区", "江阴市", "宜兴市"]
+  }, {
+    "CityID": 65,
+    "name": "镇江市",
+    "ProID": 10,
+    "CitySort": 65,
+    "area": ["京口区", "润州区", "丹徒区", "丹阳市", "扬中市", "句容市"]
+  }, {
+    "CityID": 66,
+    "name": "苏州市",
+    "ProID": 10,
+    "CitySort": 66,
+    "area": ["沧浪区", "常熟市", "平江区", "金阊区", "虎丘区", "昆山市", "太仓市", "吴江市", "吴中区", "相城区", "张家港市"]
+  }, {
+    "CityID": 67,
+    "name": "南通市",
+    "ProID": 10,
+    "CitySort": 67,
+    "area": ["崇川区", "港闸区", "海安县", "如东县", "启东市", "如皋市", "通州市", "海门市"]
+  }, {
+    "CityID": 68,
+    "name": "扬州市",
+    "ProID": 10,
+    "CitySort": 68,
+    "area": ["高邮市", "广陵区", "邗江区", "维扬区", "宝应县", "江都市", "仪征市"]
+  }, {
+    "CityID": 69,
+    "name": "盐城市",
+    "ProID": 10,
+    "CitySort": 69,
+    "area": ["亭湖区", "盐都区", "响水县", "滨海县", "阜宁县", "射阳县", "建湖县", "东台市", "大丰市"]
+  }, {
+    "CityID": 70,
+    "name": "徐州市",
+    "ProID": 10,
+    "CitySort": 70,
+    "area": ["鼓楼区", "云龙区", "九里区", "贾汪区", "泉山区", "丰县", "沛县", "铜山县", "睢宁县", "新沂市", "邳州市"]
+  }, {
+    "CityID": 71,
+    "name": "淮安市",
+    "ProID": 10,
+    "CitySort": 71,
+    "area": ["清河区", "楚州区", "淮阴区", "清浦区", "涟水县", "洪泽县", "盱眙县", "金湖县"]
+  }, {
+    "CityID": 72,
+    "name": "连云港市",
+    "ProID": 10,
+    "CitySort": 72,
+    "area": ["连云区", "新浦区", "海州区", "赣榆县", "东海县", "灌云县", "灌南县"]
+  }, {
+    "CityID": 73,
+    "name": "常州市",
+    "ProID": 10,
+    "CitySort": 73,
+    "area": ["天宁区", "钟楼区", "戚墅堰区", "新北区", "武进区", "溧阳市", "金坛市"]
+  }, {
+    "CityID": 74,
+    "name": "泰州市",
+    "ProID": 10,
+    "CitySort": 74,
+    "area": ["海陵区", "高港区", "兴化市", "靖江市", "泰兴市", "姜堰市"]
+  }, {
+    "CityID": 75,
+    "name": "宿迁市",
+    "ProID": 10,
+    "CitySort": 75,
+    "area": ["宿城区", "宿豫区", "沭阳县", "泗阳县", "泗洪县"]
+  }]
+}, {
+  "ProID": 11,
+  "name": "浙江省",
+  "ProSort": 12,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 76,
+    "name": "舟山市",
+    "ProID": 11,
+    "CitySort": 76,
+    "area": ["定海区", "普陀区", "岱山县", "嵊泗县"]
+  }, {
+    "CityID": 77,
+    "name": "衢州市",
+    "ProID": 11,
+    "CitySort": 77,
+    "area": ["柯城区", "衢江区", "常山县", "开化县", "龙游县", "江山市"]
+  }, {
+    "CityID": 78,
+    "name": "杭州市",
+    "ProID": 11,
+    "CitySort": 78,
+    "area": ["上城区", "下城区", "江干区", "拱墅区", "西湖区", "滨江区", "余杭区", "桐庐县", "淳安县", "建德市", "富阳市", "临安市", "萧山区"]
+  }, {
+    "CityID": 79,
+    "name": "湖州市",
+    "ProID": 11,
+    "CitySort": 79,
+    "area": ["吴兴区", "南浔区", "德清县", "长兴县", "安吉县"]
+  }, {
+    "CityID": 80,
+    "name": "嘉兴市",
+    "ProID": 11,
+    "CitySort": 80,
+    "area": [" 南湖区", " 秀洲区", " 嘉善县", " 海盐县", " 海宁市", " 平湖市", " 桐乡市 "]
+  }, {
+    "CityID": 81,
+    "name": "宁波市",
+    "ProID": 11,
+    "CitySort": 81,
+    "area": ["海曙区", "江东区", "江北区", "北仑区", "镇海区", "鄞州区", "象山县", "宁海县", "余姚市", "慈溪市", "奉化市"]
+  }, {
+    "CityID": 82,
+    "name": "绍兴市",
+    "ProID": 11,
+    "CitySort": 82,
+    "area": ["越城区", "绍兴县", "新昌县", "诸暨市", "上虞市", "嵊州市"]
+  }, {
+    "CityID": 83,
+    "name": "温州市",
+    "ProID": 11,
+    "CitySort": 83,
+    "area": ["鹿城区", "龙湾区", "瓯海区", "洞头县", "永嘉县", "平阳县", "苍南县", "文成县", "泰顺县", "瑞安市", "乐清市"]
+  }, {
+    "CityID": 84,
+    "name": "丽水市",
+    "ProID": 11,
+    "CitySort": 84,
+    "area": ["莲都区", "青田县", "缙云县", "遂昌县", "松阳县", "云和县", "庆元县", "景宁畲族自治县", "龙泉市"]
+  }, {
+    "CityID": 85,
+    "name": "金华市",
+    "ProID": 11,
+    "CitySort": 85,
+    "area": ["婺城区", "金东区", "武义县", "浦江县", "磐安县", "兰溪市", "义乌市", "东阳市", "永康市"]
+  }, {
+    "CityID": 86,
+    "name": "台州市",
+    "ProID": 11,
+    "CitySort": 86,
+    "area": ["椒江区", "黄岩区", "路桥区", "玉环县", "三门县", "天台县", "仙居县", "温岭市", "临海市"]
+  }]
+}, {
+  "ProID": 12,
+  "name": "安徽省",
+  "ProSort": 13,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 87,
+    "name": "合肥市",
+    "ProID": 12,
+    "CitySort": 87,
+    "area": ["瑶海区", "庐阳区", "蜀山区", "包河区", "长丰县", "肥东县", "肥西县"]
+  }, {
+    "CityID": 88,
+    "name": "芜湖市",
+    "ProID": 12,
+    "CitySort": 88,
+    "area": ["镜湖区", "弋江区", "鸠江区", "三山区", "芜湖县", "繁昌县", "南陵县"]
+  }, {
+    "CityID": 89,
+    "name": "蚌埠市",
+    "ProID": 12,
+    "CitySort": 89,
+    "area": ["龙子湖区", "蚌山区", "禹会区", "淮上区", "怀远县", "五河县", "固镇县"]
+  }, {
+    "CityID": 90,
+    "name": "淮南市",
+    "ProID": 12,
+    "CitySort": 90,
+    "area": ["大通区", "田家庵区", "谢家集区", "八公山区", "潘集区", "凤台县"]
+  }, {
+    "CityID": 91,
+    "name": "马鞍山市",
+    "ProID": 12,
+    "CitySort": 91,
+    "area": ["金家庄区", "花山区", "雨山区", "当涂县"]
+  }, {
+    "CityID": 92,
+    "name": "淮北市",
+    "ProID": 12,
+    "CitySort": 92,
+    "area": ["杜集区", "相山区", "烈山区", "濉溪县 "]
+  }, {
+    "CityID": 93,
+    "name": "铜陵市",
+    "ProID": 12,
+    "CitySort": 93,
+    "area": ["铜官山区", "狮子山区", "铜陵县"]
+  }, {
+    "CityID": 94,
+    "name": "安庆市",
+    "ProID": 12,
+    "CitySort": 94,
+    "area": ["迎江区", "大观区", "宜秀区", "怀宁县", "枞阳县", "潜山县", "太湖县", "宿松县", "望江县", "岳西县", "桐城市"]
+  }, {
+    "CityID": 95,
+    "name": "黄山市",
+    "ProID": 12,
+    "CitySort": 95,
+    "area": ["屯溪区", "黄山区", "徽州区", "歙县", "休宁县", "黟县", "祁门县"]
+  }, {
+    "CityID": 96,
+    "name": "滁州市",
+    "ProID": 12,
+    "CitySort": 96,
+    "area": ["琅琊区", "南谯区", "来安县", "全椒县", "定远县", "凤阳县", "天长市", "明光市"]
+  }, {
+    "CityID": 97,
+    "name": "阜阳市",
+    "ProID": 12,
+    "CitySort": 97,
+    "area": ["颍州区", "颍东区", "颍泉区", "临泉县", "太和县", "阜南县", "颍上县", "界首市"]
+  }, {
+    "CityID": 98,
+    "name": "宿州市",
+    "ProID": 12,
+    "CitySort": 98,
+    "area": ["埇桥区", "砀山县", "萧县", "灵璧县", "泗县 "]
+  }, {
+    "CityID": 99,
+    "name": "巢湖市",
+    "ProID": 12,
+    "CitySort": 99,
+    "area": ["居巢区", "庐江县", "无为县", "含山县", "和县 "]
+  }, {
+    "CityID": 100,
+    "name": "六安市",
+    "ProID": 12,
+    "CitySort": 100,
+    "area": ["金安区", "裕安区", "寿县", "霍邱县", "舒城县", "金寨县", "霍山县"]
+  }, {
+    "CityID": 101,
+    "name": "亳州市",
+    "ProID": 12,
+    "CitySort": 101,
+    "area": ["谯城区", "涡阳县", "蒙城县", "利辛县"]
+  }, {
+    "CityID": 102,
+    "name": "池州市",
+    "ProID": 12,
+    "CitySort": 102,
+    "area": ["贵池区", "东至县", "石台县", "青阳县"]
+  }, {
+    "CityID": 103,
+    "name": "宣城市",
+    "ProID": 12,
+    "CitySort": 103,
+    "area": ["宣州区", "郎溪县", "广德县", "泾县", "绩溪县", "旌德县", "宁国市"]
+  }]
+}, {
+  "ProID": 13,
+  "name": "福建省",
+  "ProSort": 14,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 104,
+    "name": "福州市",
+    "ProID": 13,
+    "CitySort": 104,
+    "area": ["鼓楼区", "台江区", "仓山区", "马尾区", "晋安区", "闽侯县", "连江县", "罗源县", "闽清县", "永泰县", "平潭县", "福清市", "长乐市"]
+  }, {
+    "CityID": 105,
+    "name": "厦门市",
+    "ProID": 13,
+    "CitySort": 105,
+    "area": ["思明区", "海沧区", "湖里区", "集美区", "同安区", "翔安区"]
+  }, {
+    "CityID": 106,
+    "name": "宁德市",
+    "ProID": 13,
+    "CitySort": 106,
+    "area": ["蕉城区", "霞浦县", "古田县", "屏南县", "寿宁县", "周宁县", "柘荣县", "福安市", "福鼎市"]
+  }, {
+    "CityID": 107,
+    "name": "莆田市",
+    "ProID": 13,
+    "CitySort": 107,
+    "area": ["城厢区", "涵江区", "荔城区", "秀屿区", "仙游县"]
+  }, {
+    "CityID": 108,
+    "name": "泉州市",
+    "ProID": 13,
+    "CitySort": 108,
+    "area": ["鲤城区", "丰泽区", "洛江区", "泉港区", "惠安县", "安溪县", "永春县", "德化县", "石狮市", "晋江市", "南安市"]
+  }, {
+    "CityID": 109,
+    "name": "漳州市",
+    "ProID": 13,
+    "CitySort": 109,
+    "area": ["芗城区", "龙文区", "云霄县", "漳浦县", "诏安县", "长泰县", "东山县", "南靖县", "平和县", "华安县", "龙海市"]
+  }, {
+    "CityID": 110,
+    "name": "龙岩市",
+    "ProID": 13,
+    "CitySort": 110,
+    "area": ["新罗区", "长汀县", "永定县", "上杭县", "武平县", "连城县", "漳平市"]
+  }, {
+    "CityID": 111,
+    "name": "三明市",
+    "ProID": 13,
+    "CitySort": 111,
+    "area": ["梅列区", "三元区", "明溪县", "清流县", "宁化县", "大田县", "尤溪县", "沙县", "将乐县", "泰宁县", "建宁县", "永安市"]
+  }, {
+    "CityID": 112,
+    "name": "南平市",
+    "ProID": 13,
+    "CitySort": 112,
+    "area": ["延平区", "顺昌县", "浦城县", "光泽县", "松溪县", "政和县", "邵武市", "武夷山市", "建瓯市", "建阳市"]
+  }]
+}, {
+  "ProID": 14,
+  "name": "江西省",
+  "ProSort": 15,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 113,
+    "name": "鹰潭市",
+    "ProID": 14,
+    "CitySort": 113,
+    "area": ["月湖区", "余江县", "贵溪市"]
+  }, {
+    "CityID": 114,
+    "name": "新余市",
+    "ProID": 14,
+    "CitySort": 114,
+    "area": ["渝水区", "分宜县"]
+  }, {
+    "CityID": 115,
+    "name": "南昌市",
+    "ProID": 14,
+    "CitySort": 115,
+    "area": ["东湖区", "西湖区", "青云谱区", "湾里区", "青山湖区", "南昌县", "新建县", "安义县", "进贤县"]
+  }, {
+    "CityID": 116,
+    "name": "九江市",
+    "ProID": 14,
+    "CitySort": 116,
+    "area": ["庐山区", "浔阳区", "九江县", "武宁县", "修水县", "永修县", "德安县", "星子县", "都昌县", "湖口县", "彭泽县", "瑞昌市"]
+  }, {
+    "CityID": 117,
+    "name": "上饶市",
+    "ProID": 14,
+    "CitySort": 117,
+    "area": ["信州区", "上饶县", "广丰县", "玉山县", "铅山县", "横峰县", "弋阳县", "余干县", "鄱阳县", "万年县", "婺源县", "德兴市"]
+  }, {
+    "CityID": 118,
+    "name": "抚州市",
+    "ProID": 14,
+    "CitySort": 118,
+    "area": ["临川区", "南城县", "黎川县", "南丰县", "崇仁县", "乐安县", "宜黄县", "金溪县", "资溪县", "东乡县", "广昌县"]
+  }, {
+    "CityID": 119,
+    "name": "宜春市",
+    "ProID": 14,
+    "CitySort": 119,
+    "area": ["袁州区", "奉新县", "万载县", "上高县", "宜丰县", "靖安县", "铜鼓县", "丰城市", "樟树市", "高安市"]
+  }, {
+    "CityID": 120,
+    "name": "吉安市",
+    "ProID": 14,
+    "CitySort": 120,
+    "area": ["吉州区", "青原区", "吉安县", "吉水县", "峡江县", "新干县", "永丰县", "泰和县", "遂川县", "万安县", "安福县", "永新县", "井冈山市"]
+  }, {
+    "CityID": 121,
+    "name": "赣州市",
+    "ProID": 14,
+    "CitySort": 121,
+    "area": ["章贡区", "赣县", "信丰县", "大余县", "上犹县", "崇义县", "安远县", "龙南县", "定南县", "全南县", "宁都县", "于都县", "兴国县", "会昌县", "寻乌县", "石城县", "瑞金市", "南康市"]
+  }, {
+    "CityID": 122,
+    "name": "景德镇市",
+    "ProID": 14,
+    "CitySort": 122,
+    "area": ["昌江区", "珠山区", "浮梁县", "乐平市"]
+  }, {
+    "CityID": 123,
+    "name": "萍乡市",
+    "ProID": 14,
+    "CitySort": 123,
+    "area": ["安源区", "湘东区", "莲花县", "上栗县", "芦溪县"]
+  }]
+}, {
+  "ProID": 15,
+  "name": "山东省",
+  "ProSort": 16,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 124,
+    "name": "菏泽市",
+    "ProID": 15,
+    "CitySort": 124,
+    "area": ["牡丹区", "曹县", "单县", "成武县", "巨野县", "郓城县", "鄄城县", "定陶县", "东明县"]
+  }, {
+    "CityID": 125,
+    "name": "济南市",
+    "ProID": 15,
+    "CitySort": 125,
+    "area": ["历下区", "市中区", "槐荫区", "天桥区", "历城区", "长清区", "平阴县", "济阳县", "商河县", "章丘市"]
+  }, {
+    "CityID": 126,
+    "name": "青岛市",
+    "ProID": 15,
+    "CitySort": 126,
+    "area": ["市南区", "市北区", "四方区", "黄岛区", "崂山区", "李沧区", "城阳区", "胶州市", "即墨市", "平度市", "胶南市", "莱西市"]
+  }, {
+    "CityID": 127,
+    "name": "淄博市",
+    "ProID": 15,
+    "CitySort": 127,
+    "area": ["淄川区", "张店区", "博山区", "临淄区", "周村区", "桓台县", "高青县", "沂源县"]
+  }, {
+    "CityID": 128,
+    "name": "德州市",
+    "ProID": 15,
+    "CitySort": 128,
+    "area": ["德城区", "陵县", "宁津县", "庆云县", "临邑县", "齐河县", "平原县", "夏津县", "武城县", "乐陵市", "禹城市"]
+  }, {
+    "CityID": 129,
+    "name": "烟台市",
+    "ProID": 15,
+    "CitySort": 129,
+    "area": ["芝罘区", "福山区", "牟平区", "莱山区", "长岛县", "龙口市", "莱阳市", "莱州市", "蓬莱市", "招远市", "栖霞市", "海阳市"]
+  }, {
+    "CityID": 130,
+    "name": "潍坊市",
+    "ProID": 15,
+    "CitySort": 130,
+    "area": ["潍城区", "寒亭区", "坊子区", "奎文区", "临朐县", "昌乐县", "青州市", "诸城市", "寿光市", "安丘市", "高密市", "昌邑市"]
+  }, {
+    "CityID": 131,
+    "name": "济宁市",
+    "ProID": 15,
+    "CitySort": 131,
+    "area": ["市中区", "任城区", "微山县", "鱼台县", "金乡县", "嘉祥县", "汶上县", "泗水县", "梁山县", "曲阜市", "兖州市", "邹城市"]
+  }, {
+    "CityID": 132,
+    "name": "泰安市",
+    "ProID": 15,
+    "CitySort": 132,
+    "area": ["泰山区", "岱岳区", "宁阳县", "东平县", "新泰市", "肥城市"]
+  }, {
+    "CityID": 133,
+    "name": "临沂市",
+    "ProID": 15,
+    "CitySort": 133,
+    "area": ["兰山区", "罗庄区", "河东区", "沂南县", "郯城县", "沂水县", "苍山县", "费县", "平邑县", "莒南县", "蒙阴县", "临沭县"]
+  }, {
+    "CityID": 134,
+    "name": "滨州市",
+    "ProID": 15,
+    "CitySort": 134,
+    "area": ["滨城区", "惠民县", "阳信县", "无棣县", "沾化县", "博兴县", "邹平县"]
+  }, {
+    "CityID": 135,
+    "name": "东营市",
+    "ProID": 15,
+    "CitySort": 135,
+    "area": ["东营区", "河口区", "垦利县", "利津县", "广饶县"]
+  }, {
+    "CityID": 136,
+    "name": "威海市",
+    "ProID": 15,
+    "CitySort": 136,
+    "area": ["环翠区", "文登市", "荣成市", "乳山市"]
+  }, {
+    "CityID": 137,
+    "name": "枣庄市",
+    "ProID": 15,
+    "CitySort": 137,
+    "area": ["市中区", "薛城区", "峄城区", "台儿庄区", "山亭区", "滕州市"]
+  }, {
+    "CityID": 138,
+    "name": "日照市",
+    "ProID": 15,
+    "CitySort": 138,
+    "area": ["东港区", "岚山区", "五莲县", "莒县"]
+  }, {
+    "CityID": 139,
+    "name": "莱芜市",
+    "ProID": 15,
+    "CitySort": 139,
+    "area": ["莱城区", "钢城区"]
+  }, {
+    "CityID": 140,
+    "name": "聊城市",
+    "ProID": 15,
+    "CitySort": 140,
+    "area": ["东昌府区", "阳谷县", "莘县", "茌平县", "东阿县", "冠县", "高唐县", "临清市"]
+  }]
+}, {
+  "ProID": 16,
+  "name": "河南省",
+  "ProSort": 17,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 141,
+    "name": "商丘市",
+    "ProID": 16,
+    "CitySort": 141,
+    "area": ["梁园区", "睢阳区", "民权县", "睢县", "宁陵县", "柘城县", "虞城县", "夏邑县", "永城市"]
+  }, {
+    "CityID": 142,
+    "name": "郑州市",
+    "ProID": 16,
+    "CitySort": 142,
+    "area": ["中原区", "高新区", "经济技术开发区", "航空港区", "郑东新区", "二七区", "管城回族区", "金水区", "上街区", "惠济区", "中牟县", "巩义市", "荥阳市", "新密市", "新郑市", "登封市"]
+  }, {
+    "CityID": 143,
+    "name": "安阳市",
+    "ProID": 16,
+    "CitySort": 143,
+    "area": ["文峰区", "北关区", "殷都区", "龙安区", "安阳县", "汤阴县", "滑县", "内黄县", "林州市"]
+  }, {
+    "CityID": 144,
+    "name": "新乡市",
+    "ProID": 16,
+    "CitySort": 144,
+    "area": ["红旗区", "卫滨区", "凤泉区", "牧野区", "新乡县", "获嘉县", "原阳县", "延津县", "封丘县", "长垣县", "卫辉市", "辉县市"]
+  }, {
+    "CityID": 145,
+    "name": "许昌市",
+    "ProID": 16,
+    "CitySort": 145,
+    "area": ["魏都区", "许昌县", "鄢陵县", "襄城县", "禹州市", "长葛市"]
+  }, {
+    "CityID": 146,
+    "name": "平顶山市",
+    "ProID": 16,
+    "CitySort": 146,
+    "area": ["新华区", "卫东区", "石龙区", "湛河区", "宝丰县", "叶县", "鲁山县", "郏县", "舞钢市", "汝州市"]
+  }, {
+    "CityID": 147,
+    "name": "信阳市",
+    "ProID": 16,
+    "CitySort": 147,
+    "area": ["浉河区", "平桥区", "罗山县", "光山县", "新县", "商城县", "固始县", "潢川县", "淮滨县", "息县"]
+  }, {
+    "CityID": 148,
+    "name": "南阳市",
+    "ProID": 16,
+    "CitySort": 148,
+    "area": ["宛城区", "卧龙区", "南召县", "方城县", "西峡县", "镇平县", "内乡县", "淅川县", "社旗县", "唐河县", "新野县", "桐柏县", "邓州市"]
+  }, {
+    "CityID": 149,
+    "name": "开封市",
+    "ProID": 16,
+    "CitySort": 149,
+    "area": ["龙亭区", "顺河回族区", "鼓楼区", "禹王台区", "金明区", "杞县", "通许县", "尉氏县", "开封县", "兰考县"]
+  }, {
+    "CityID": 150,
+    "name": "洛阳市",
+    "ProID": 16,
+    "CitySort": 150,
+    "area": ["老城区", "西工区", "瀍河回族区", "涧西区", "吉利区", "洛龙区", "孟津县", "新安县", "栾川县", "嵩县", "汝阳县", "宜阳县", "洛宁县", "伊川县", "偃师市"]
+  }, {
+    "CityID": 151,
+    "name": "济源市",
+    "ProID": 16,
+    "CitySort": 151,
+    "area": ['其他']
+  }, {
+    "CityID": 152,
+    "name": "焦作市",
+    "ProID": 16,
+    "CitySort": 152,
+    "area": ["解放区", "中站区", "马村区", "山阳区", "修武县", "博爱县", "武陟县", "温县", "沁阳市", "孟州市"]
+  }, {
+    "CityID": 153,
+    "name": "鹤壁市",
+    "ProID": 16,
+    "CitySort": 153,
+    "area": ["鹤山区", "山城区", "淇滨区", "浚县", "淇县"]
+  }, {
+    "CityID": 154,
+    "name": "濮阳市",
+    "ProID": 16,
+    "CitySort": 154,
+    "area": ["华龙区", "清丰县", "南乐县", "范县", "台前县", "濮阳县"]
+  }, {
+    "CityID": 155,
+    "name": "周口市",
+    "ProID": 16,
+    "CitySort": 155,
+    "area": ["川汇区", "扶沟县", "西华县", "商水县", "沈丘县", "郸城县", "淮阳县", "太康县", "鹿邑县", "项城市"]
+  }, {
+    "CityID": 156,
+    "name": "漯河市",
+    "ProID": 16,
+    "CitySort": 156,
+    "area": ["源汇区", "郾城区", "召陵区", "舞阳县", "临颍县"]
+  }, {
+    "CityID": 157,
+    "name": "驻马店市",
+    "ProID": 16,
+    "CitySort": 157,
+    "area": ["驿城区", "西平县", "上蔡县", "平舆县", "正阳县", "确山县", "泌阳县", "汝南县", "遂平县", "新蔡县"]
+  }, {
+    "CityID": 158,
+    "name": "三门峡市",
+    "ProID": 16,
+    "CitySort": 158,
+    "area": ["湖滨区", "渑池县", "陕县", "卢氏县", "义马市", "灵宝市"]
+  }]
+}, {
+  "ProID": 17,
+  "name": "湖北省",
+  "ProSort": 18,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 159,
+    "name": "武汉市",
+    "ProID": 17,
+    "CitySort": 159,
+    "area": ["江岸区", "江汉区", "硚口区", "汉阳区", "武昌区", "青山区", "洪山区", "东西湖区", "汉南区", "蔡甸区", "江夏区", "黄陂区", "新洲区"]
+  }, {
+    "CityID": 160,
+    "name": "襄阳市",
+    "ProID": 17,
+    "CitySort": 160,
+    "area": ["襄城区", "樊城区", "襄阳区", "南漳县", "谷城县", "保康县", "老河口市", "枣阳市", "宜城市"]
+  }, {
+    "CityID": 161,
+    "name": "鄂州市",
+    "ProID": 17,
+    "CitySort": 161,
+    "area": ["梁子湖区", "华容区", "鄂城区"]
+  }, {
+    "CityID": 162,
+    "name": "孝感市",
+    "ProID": 17,
+    "CitySort": 162,
+    "area": ["孝南区", "孝昌县", "大悟县", "云梦县", "应城市", "安陆市", "汉川市"]
+  }, {
+    "CityID": 163,
+    "name": "黄冈市",
+    "ProID": 17,
+    "CitySort": 163,
+    "area": ["黄州区", "团风县", "红安县", "罗田县", "英山县", "浠水县", "蕲春县", "黄梅县", "麻城市", "武穴市"]
+  }, {
+    "CityID": 164,
+    "name": "黄石市",
+    "ProID": 17,
+    "CitySort": 164,
+    "area": ["黄石港区", "西塞山区", "下陆区", "铁山区", "阳新县", "大冶市"]
+  }, {
+    "CityID": 165,
+    "name": "咸宁市",
+    "ProID": 17,
+    "CitySort": 165,
+    "area": ["咸安区", "嘉鱼县", "通城县", "崇阳县", "通山县", "赤壁市"]
+  }, {
+    "CityID": 166,
+    "name": "荆州市",
+    "ProID": 17,
+    "CitySort": 166,
+    "area": ["沙市区", "荆州区", "公安县", "监利县", "江陵县", "石首市", "洪湖市", "松滋市"]
+  }, {
+    "CityID": 167,
+    "name": "宜昌市",
+    "ProID": 17,
+    "CitySort": 167,
+    "area": ["西陵区", "伍家岗区", "点军区", "猇亭区", "夷陵区", "远安县", "兴山县", "秭归县", "长阳土家族自治县", "五峰土家族自治县", "宜都市", "当阳市", "枝江市"]
+  }, {
+    "CityID": 168,
+    "name": "恩施土家族苗族自治州",
+    "ProID": 17,
+    "CitySort": 168,
+    "area": ["恩施市", "利川市", "建始县", "巴东县", "宣恩县", "咸丰县", "来凤县", "鹤峰县"]
+  }, {
+    "CityID": 169,
+    "name": "神农架林区",
+    "ProID": 17,
+    "CitySort": 169,
+    "area": ['其他']
+  }, {
+    "CityID": 170,
+    "name": "十堰市",
+    "ProID": 17,
+    "CitySort": 170,
+    "area": ["茅箭区", "张湾区", "郧县", "郧西县", "竹山县", "竹溪县", "房县", "丹江口市"]
+  }, {
+    "CityID": 171,
+    "name": "随州市",
+    "ProID": 17,
+    "CitySort": 171,
+    "area": ["曾都区", "广水市"]
+  }, {
+    "CityID": 172,
+    "name": "荆门市",
+    "ProID": 17,
+    "CitySort": 172,
+    "area": ["东宝区", "掇刀区", "京山县", "沙洋县", "钟祥市"]
+  }, {
+    "CityID": 173,
+    "name": "仙桃市",
+    "ProID": 17,
+    "CitySort": 173,
+    "area": ['其他']
+  }, {
+    "CityID": 174,
+    "name": "天门市",
+    "ProID": 17,
+    "CitySort": 174,
+    "area": ['其他']
+  }, {
+    "CityID": 175,
+    "name": "潜江市",
+    "ProID": 17,
+    "CitySort": 175,
+    "area": ['其他']
+  }]
+}, {
+  "ProID": 18,
+  "name": "湖南省",
+  "ProSort": 19,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 176,
+    "name": "岳阳市",
+    "ProID": 18,
+    "CitySort": 176,
+    "area": ["岳阳楼区", "云溪区", "君山区", "岳阳县", "华容县", "湘阴县", "平江县", "汨罗市", "临湘市"]
+  }, {
+    "CityID": 177,
+    "name": "长沙市",
+    "ProID": 18,
+    "CitySort": 177,
+    "area": ["芙蓉区", "天心区", "岳麓区", "开福区", "雨花区", "长沙县", "望城县", "宁乡县", "浏阳市"]
+  }, {
+    "CityID": 178,
+    "name": "湘潭市",
+    "ProID": 18,
+    "CitySort": 178,
+    "area": ["雨湖区", "岳塘区", "湘潭县", "湘乡市", "韶山市"]
+  }, {
+    "CityID": 179,
+    "name": "株洲市",
+    "ProID": 18,
+    "CitySort": 179,
+    "area": ["荷塘区", "芦淞区", "石峰区", "天元区", "株洲县", "攸县", "茶陵县", "炎陵县", "醴陵市"]
+  }, {
+    "CityID": 180,
+    "name": "衡阳市",
+    "ProID": 18,
+    "CitySort": 180,
+    "area": ["珠晖区", "雁峰区", "石鼓区", "蒸湘区", "南岳区", "衡阳县", "衡南县", "衡山县", "衡东县", "祁东县", "耒阳市", "常宁市"]
+  }, {
+    "CityID": 181,
+    "name": "郴州市",
+    "ProID": 18,
+    "CitySort": 181,
+    "area": ["北湖区", "苏仙区", "桂阳县", "宜章县", "永兴县", "嘉禾县", "临武县", "汝城县", "桂东县", "安仁县", "资兴市"]
+  }, {
+    "CityID": 182,
+    "name": "常德市",
+    "ProID": 18,
+    "CitySort": 182,
+    "area": ["武陵区", "鼎城区", "安乡县", "汉寿县", "澧县", "临澧县", "桃源县", "石门县", "津市市"]
+  }, {
+    "CityID": 183,
+    "name": "益阳市",
+    "ProID": 18,
+    "CitySort": 183,
+    "area": ["资阳区", "赫山区", "南县", "桃江县", "安化县", "沅江市"]
+  }, {
+    "CityID": 184,
+    "name": "娄底市",
+    "ProID": 18,
+    "CitySort": 184,
+    "area": ["娄星区", "双峰县", "新化县", "冷水江市", "涟源市"]
+  }, {
+    "CityID": 185,
+    "name": "邵阳市",
+    "ProID": 18,
+    "CitySort": 185,
+    "area": ["双清区", "大祥区", "北塔区", "邵东县", "新邵县", "邵阳县", "隆回县", "洞口县", "绥宁县", "新宁县", "城步苗族自治县", "武冈市"]
+  }, {
+    "CityID": 186,
+    "name": "湘西土家族苗族自治州",
+    "ProID": 18,
+    "CitySort": 186,
+    "area": ["吉首市", "泸溪县", "凤凰县", "花垣县", "保靖县", "古丈县", "永顺县", "龙山县"]
+  }, {
+    "CityID": 187,
+    "name": "张家界市",
+    "ProID": 18,
+    "CitySort": 187,
+    "area": ["永定区", "武陵源区", "慈利县", "桑植县"]
+  }, {
+    "CityID": 188,
+    "name": "怀化市",
+    "ProID": 18,
+    "CitySort": 188,
+    "area": ["鹤城区", "中方县", "沅陵县", "辰溪县", "溆浦县", "会同县", "麻阳苗族自治县", "新晃侗族自治县", "芷江侗族自治县", "靖州苗族侗族自治县", "通道侗族自治县", "洪江市"]
+  }, {
+    "CityID": 189,
+    "name": "永州市",
+    "ProID": 18,
+    "CitySort": 189,
+    "area": ["零陵区", "冷水滩区", "祁阳县", "东安县", "双牌县", "道县", "江永县", "宁远县", "蓝山县", "新田县", "江华瑶族自治县"]
+  }]
+}, {
+  "ProID": 19,
+  "name": "广东省",
+  "ProSort": 20,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 190,
+    "name": "广州市",
+    "ProID": 19,
+    "CitySort": 190,
+    "area": ["从化市", "荔湾区", "越秀区", "海珠区", "天河区", "白云区", "花都区", "黄埔区", "萝岗区", "南沙区", "番禺区", "增城市"]
+  }, {
+    "CityID": 191,
+    "name": "汕尾市",
+    "ProID": 19,
+    "CitySort": 191,
+    "area": ["海丰县", "陆河县", "陆丰市"]
+  }, {
+    "CityID": 192,
+    "name": "阳江市",
+    "ProID": 19,
+    "CitySort": 192,
+    "area": ["江城区", "阳西县", "阳东县", "阳春市"]
+  }, {
+    "CityID": 193,
+    "name": "揭阳市",
+    "ProID": 19,
+    "CitySort": 193,
+    "area": ["榕城区", "揭东县", "揭西县", "惠来县", "普宁市"]
+  }, {
+    "CityID": 194,
+    "name": "茂名市",
+    "ProID": 19,
+    "CitySort": 194,
+    "area": ["茂南区", "茂港区", "电白县", "高州市", "化州市", "信宜市"]
+  }, {
+    "CityID": 195,
+    "name": "惠州市",
+    "ProID": 19,
+    "CitySort": 195,
+    "area": ["惠城区", "惠阳区", "博罗县", "惠东县", "龙门县"]
+  }, {
+    "CityID": 196,
+    "name": "江门市",
+    "ProID": 19,
+    "CitySort": 196,
+    "area": ["蓬江区", "江海区", "新会区", "台山市", "开平市", "鹤山市", "恩平市"]
+  }, {
+    "CityID": 197,
+    "name": "韶关市",
+    "ProID": 19,
+    "CitySort": 197,
+    "area": ["武江区", "浈江区", "曲江区", "始兴县", "仁化县", "翁源县", "乳源瑶族自治县", "新丰县", "乐昌市", "南雄市"]
+  }, {
+    "CityID": 198,
+    "name": "梅州市",
+    "ProID": 19,
+    "CitySort": 198,
+    "area": ["梅江区", "梅县", "大埔县", "丰顺县", "五华县", "平远县", "蕉岭县", "兴宁市"]
+  }, {
+    "CityID": 199,
+    "name": "汕头市",
+    "ProID": 19,
+    "CitySort": 199,
+    "area": ["龙湖区", "金平区", "濠江区", "潮阳区", "潮南区", "澄海区", "南澳县"]
+  }, {
+    "CityID": 200,
+    "name": "深圳市",
+    "ProID": 19,
+    "CitySort": 200,
+    "area": ["罗湖区", "福田区", "南山区", "宝安区", "龙岗区", "盐田区"]
+  }, {
+    "CityID": 201,
+    "name": "珠海市",
+    "ProID": 19,
+    "CitySort": 201,
+    "area": ["香洲区", "斗门区", "金湾区"]
+  }, {
+    "CityID": 202,
+    "name": "佛山市",
+    "ProID": 19,
+    "CitySort": 202,
+    "area": ["禅城区", "南海区", "顺德区", "三水区", "高明区"]
+  }, {
+    "CityID": 203,
+    "name": "肇庆市",
+    "ProID": 19,
+    "CitySort": 203,
+    "area": ["端州区", "鼎湖区", "广宁县", "怀集县", "封开县", "德庆县", "高要市", "四会市"]
+  }, {
+    "CityID": 204,
+    "name": "湛江市",
+    "ProID": 19,
+    "CitySort": 204,
+    "area": ["赤坎区", "霞山区", "坡头区", "麻章区", "遂溪县", "徐闻县", "廉江市", "雷州市", "吴川市"]
+  }, {
+    "CityID": 205,
+    "name": "中山市",
+    "ProID": 19,
+    "CitySort": 205,
+    "area": ['其他']
+  }, {
+    "CityID": 206,
+    "name": "河源市",
+    "ProID": 19,
+    "CitySort": 206,
+    "area": ["源城区", "紫金县", "龙川县", "连平县", "和平县", "东源县"]
+  }, {
+    "CityID": 207,
+    "name": "清远市",
+    "ProID": 19,
+    "CitySort": 207,
+    "area": ["清城区", "佛冈县", "阳山县", "连山壮族瑶族自治县", "连南瑶族自治县", "清新县", "英德市", "连州市"]
+  }, {
+    "CityID": 208,
+    "name": "云浮市",
+    "ProID": 19,
+    "CitySort": 208,
+    "area": ["云城区", "新兴县", "郁南县", "云安县", "罗定市"]
+  }, {
+    "CityID": 209,
+    "name": "潮州市",
+    "ProID": 19,
+    "CitySort": 209,
+    "area": ["湘桥区", "潮安县", "饶平县"]
+  }, {
+    "CityID": 210,
+    "name": "东莞市",
+    "ProID": 19,
+    "CitySort": 210,
+    "area": ['其他']
+  }]
+}, {
+  "ProID": 20,
+  "name": "海南省",
+  "ProSort": 24,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 255,
+    "name": "海口市",
+    "ProID": 20,
+    "CitySort": 255,
+    "area": ["秀英区", "龙华区", "琼山区", "美兰区"]
+  }, {
+    "CityID": 256,
+    "name": "三亚市",
+    "ProID": 20,
+    "CitySort": 256,
+    "area": ['其他']
+  }, {
+    "CityID": 257,
+    "name": "五指山市",
+    "ProID": 20,
+    "CitySort": 257,
+    "area": ['其他']
+  }, {
+    "CityID": 258,
+    "name": "琼海市",
+    "ProID": 20,
+    "CitySort": 258,
+    "area": ['其他']
+  }, {
+    "CityID": 259,
+    "name": "儋州市",
+    "ProID": 20,
+    "CitySort": 259,
+    "area": ['其他']
+  }, {
+    "CityID": 260,
+    "name": "文昌市",
+    "ProID": 20,
+    "CitySort": 260,
+    "area": ['其他']
+  }, {
+    "CityID": 261,
+    "name": "万宁市",
+    "ProID": 20,
+    "CitySort": 261,
+    "area": ['其他']
+  }, {
+    "CityID": 262,
+    "name": "东方市",
+    "ProID": 20,
+    "CitySort": 262,
+    "area": ['其他']
+  }, {
+    "CityID": 263,
+    "name": "澄迈县",
+    "ProID": 20,
+    "CitySort": 263,
+    "area": ['其他']
+  }, {
+    "CityID": 264,
+    "name": "定安县",
+    "ProID": 20,
+    "CitySort": 264,
+    "area": ['其他']
+  }, {
+    "CityID": 265,
+    "name": "屯昌县",
+    "ProID": 20,
+    "CitySort": 265,
+    "area": ['其他']
+  }, {
+    "CityID": 266,
+    "name": "临高县",
+    "ProID": 20,
+    "CitySort": 266,
+    "area": ['其他']
+  }, {
+    "CityID": 267,
+    "name": "白沙黎族自治县",
+    "ProID": 20,
+    "CitySort": 267,
+    "area": ['其他']
+  }, {
+    "CityID": 268,
+    "name": "昌江黎族自治县",
+    "ProID": 20,
+    "CitySort": 268,
+    "area": ['其他']
+  }, {
+    "CityID": 269,
+    "name": "乐东黎族自治县",
+    "ProID": 20,
+    "CitySort": 269,
+    "area": ['其他']
+  }, {
+    "CityID": 270,
+    "name": "陵水黎族自治县",
+    "ProID": 20,
+    "CitySort": 270,
+    "area": ['其他']
+  }, {
+    "CityID": 271,
+    "name": "保亭黎族苗族自治县",
+    "ProID": 20,
+    "CitySort": 271,
+    "area": ['其他']
+  }, {
+    "CityID": 272,
+    "name": "琼中黎族苗族自治县",
+    "ProID": 20,
+    "CitySort": 272,
+    "area": ['其他']
+  },{
+    "CityID": 272,
+    "name": "三沙市",
+    "ProID": 20,
+    "CitySort": 272,
+    "area": ['其他']
+  }]
+}, {
+  "ProID": 21,
+  "name": "广西壮族自治区",
+  "ProSort": 28,
+  "ProRemark": "自治区",
+  "city": [{
+    "CityID": 307,
+    "name": "防城港市",
+    "ProID": 21,
+    "CitySort": 307,
+    "area": ["港口区", "防城区", "上思县", "东兴市"]
+  }, {
+    "CityID": 308,
+    "name": "南宁市",
+    "ProID": 21,
+    "CitySort": 308,
+    "area": ["兴宁区", "青秀区", "江南区", "西乡塘区", "良庆区", "邕宁区", "武鸣县", "隆安县", "马山县", "上林县", "宾阳县", "横县"]
+  }, {
+    "CityID": 309,
+    "name": "崇左市",
+    "ProID": 21,
+    "CitySort": 309,
+    "area": ["江洲区", "扶绥县", "宁明县", "龙州县", "大新县", "天等县", "凭祥市"]
+  }, {
+    "CityID": 310,
+    "name": "来宾市",
+    "ProID": 21,
+    "CitySort": 310,
+    "area": ["兴宾区", "忻城县", "象州县", "武宣县", "金秀瑶族自治县", "合山市"]
+  }, {
+    "CityID": 311,
+    "name": "柳州市",
+    "ProID": 21,
+    "CitySort": 311,
+    "area": ["城中区", "鱼峰区", "柳南区", "柳北区", "柳江县", "柳城县", "鹿寨县", "融安县", "融水苗族自治县", "三江侗族自治县"]
+  }, {
+    "CityID": 312,
+    "name": "桂林市",
+    "ProID": 21,
+    "CitySort": 312,
+    "area": ["秀峰区", "叠彩区", "象山区", "七星区", "雁山区", "阳朔县", "临桂县", "灵川县", "全州县", "兴安县", "永福县", "灌阳县", "龙胜各族自治县", "资源县", "平乐县", "荔浦县", "恭城瑶族自治县"]
+  }, {
+    "CityID": 313,
+    "name": "梧州市",
+    "ProID": 21,
+    "CitySort": 313,
+    "area": ["万秀区", "碟山区", "长洲区", "苍梧县", "藤县", "蒙山县", "岑溪市"]
+  }, {
+    "CityID": 314,
+    "name": "贺州市",
+    "ProID": 21,
+    "CitySort": 314,
+    "area": ["八步区", "昭平县", "钟山县", "富川瑶族自治县"]
+  }, {
+    "CityID": 315,
+    "name": "贵港市",
+    "ProID": 21,
+    "CitySort": 315,
+    "area": ["港北区", "港南区", "覃塘区", "平南县", "桂平市"]
+  }, {
+    "CityID": 316,
+    "name": "玉林市",
+    "ProID": 21,
+    "CitySort": 316,
+    "area": ["玉州区", "容县", "陆川县", "博白县", "兴业县", "北流市"]
+  }, {
+    "CityID": 317,
+    "name": "百色市",
+    "ProID": 21,
+    "CitySort": 317,
+    "area": ["右江区", "田阳县", "田东县", "平果县", "德保县", "靖西县", "那坡县", "凌云县", "乐业县", "田林县", "西林县", "隆林各族自治县"]
+  }, {
+    "CityID": 318,
+    "name": "钦州市",
+    "ProID": 21,
+    "CitySort": 318,
+    "area": ["钦南区", "钦北区", "灵山县", "浦北县"]
+  }, {
+    "CityID": 319,
+    "name": "河池市",
+    "ProID": 21,
+    "CitySort": 319,
+    "area": ["金城江区", "南丹县", "天峨县", "凤山县", "东兰县", "罗城仫佬族自治县", "环江毛南族自治县", "巴马瑶族自治县", "都安瑶族自治县", "大化瑶族自治县", "宜州市"]
+  }, {
+    "CityID": 320,
+    "name": "北海市",
+    "ProID": 21,
+    "CitySort": 320,
+    "area": ["海城区", "银海区", "铁山港区", "合浦县"]
+  }]
+}, {
+  "ProID": 22,
+  "name": "甘肃省",
+  "ProSort": 21,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 211,
+    "name": "兰州市",
+    "ProID": 22,
+    "CitySort": 211,
+    "area": ["城关区", "七里河区", "西固区", "安宁区", "红古区", "永登县", "皋兰县", "榆中县"]
+  }, {
+    "CityID": 212,
+    "name": "金昌市",
+    "ProID": 22,
+    "CitySort": 212,
+    "area": ["金川区", "永昌县"]
+  }, {
+    "CityID": 213,
+    "name": "白银市",
+    "ProID": 22,
+    "CitySort": 213,
+    "area": ["白银区", "平川区", "靖远县", "会宁县", "景泰县"]
+  }, {
+    "CityID": 214,
+    "name": "天水市",
+    "ProID": 22,
+    "CitySort": 214,
+    "area": ["秦州区", "麦积区", "清水县", "秦安县", "甘谷县", "武山县", "张家川回族自治县"]
+  }, {
+    "CityID": 215,
+    "name": "嘉峪关市",
+    "ProID": 22,
+    "CitySort": 215,
+    "area": ['其他']
+  }, {
+    "CityID": 216,
+    "name": "武威市",
+    "ProID": 22,
+    "CitySort": 216,
+    "area": ["凉州区", "民勤县", "古浪县", "天祝藏族自治县"]
+  }, {
+    "CityID": 217,
+    "name": "张掖市",
+    "ProID": 22,
+    "CitySort": 217,
+    "area": ["甘州区", "肃南裕固族自治县", "民乐县", "临泽县", "高台县", "山丹县"]
+  }, {
+    "CityID": 218,
+    "name": "平凉市",
+    "ProID": 22,
+    "CitySort": 218,
+    "area": ["崆峒区", "泾川县", "灵台县", "崇信县", "华亭县", "庄浪县", "静宁县"]
+  }, {
+    "CityID": 219,
+    "name": "酒泉市",
+    "ProID": 22,
+    "CitySort": 219,
+    "area": ["肃州区", "金塔县", "瓜州县", "肃北蒙古族自治县", "阿克塞哈萨克族自治县", "玉门市", "敦煌市"]
+  }, {
+    "CityID": 220,
+    "name": "庆阳市",
+    "ProID": 22,
+    "CitySort": 220,
+    "area": ["西峰区", "庆城县", "环县", "华池县", "合水县", "正宁县", "宁县", "镇原县"]
+  }, {
+    "CityID": 221,
+    "name": "定西市",
+    "ProID": 22,
+    "CitySort": 221,
+    "area": ["安定区", "通渭县", "陇西县", "渭源县", "临洮县", "漳县", "岷县"]
+  }, {
+    "CityID": 222,
+    "name": "陇南市",
+    "ProID": 22,
+    "CitySort": 222,
+    "area": ["武都区", "成县", "文县", "宕昌县", "康县", "西和县", "礼县", "徽县", "两当县"]
+  }, {
+    "CityID": 223,
+    "name": "临夏回族自治州",
+    "ProID": 22,
+    "CitySort": 223,
+    "area": ["临夏市", "临夏县", "康乐县", "永靖县", "广河县", "和政县", "东乡族自治县", "积石山保安族东乡族撒拉族自治县"]
+  }, {
+    "CityID": 224,
+    "name": "甘南藏族自治州",
+    "ProID": 22,
+    "CitySort": 224,
+    "area": ["合作市", "临潭县", "卓尼县", "舟曲县", "迭部县", "玛曲县", "碌曲县", "夏河县"]
+  }]
+}, {
+  "ProID": 23,
+  "name": "陕西省",
+  "ProSort": 27,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 297,
+    "name": "西安市",
+    "ProID": 23,
+    "CitySort": 297,
+    "area": ["新城区", "碑林区", "莲湖区", "灞桥区", "未央区", "雁塔区", "阎良区", "临潼区", "长安区", "蓝田县", "周至县", "户县", "高陵县"]
+  }, {
+    "CityID": 298,
+    "name": "咸阳市",
+    "ProID": 23,
+    "CitySort": 298,
+    "area": ["秦都区", "杨陵区", "渭城区", "三原县", "泾阳县", "乾县", "礼泉县", "永寿县", "彬县", "长武县", "旬邑县", "淳化县", "武功县", "兴平市"]
+  }, {
+    "CityID": 299,
+    "name": "延安市",
+    "ProID": 23,
+    "CitySort": 299,
+    "area": ["宝塔区", "延长县", "延川县", "子长县", "安塞县", "志丹县", "吴起县", "甘泉县", "富县", "洛川县", "宜川县", "黄龙县", "黄陵县"]
+  }, {
+    "CityID": 300,
+    "name": "榆林市",
+    "ProID": 23,
+    "CitySort": 300,
+    "area": ["榆阳区", "神木县", "府谷县", "横山县", "靖边县", "定边县", "绥德县", "米脂县", "佳县", "吴堡县", "清涧县", "子洲县"]
+  }, {
+    "CityID": 301,
+    "name": "渭南市",
+    "ProID": 23,
+    "CitySort": 301,
+    "area": ["临渭区", "华县", "潼关县", "大荔县", "合阳县", "澄城县", "蒲城县", "白水县", "富平县", "韩城市", "华阴市"]
+  }, {
+    "CityID": 302,
+    "name": "商洛市",
+    "ProID": 23,
+    "CitySort": 302,
+    "area": ["商州区", "洛南县", "丹凤县", "商南县", "山阳县", "镇安县", "柞水县"]
+  }, {
+    "CityID": 303,
+    "name": "安康市",
+    "ProID": 23,
+    "CitySort": 303,
+    "area": ["汉滨区", "汉阴县", "石泉县", "宁陕县", "紫阳县", "岚皋县", "平利县", "镇坪县", "旬阳县", "白河县"]
+  }, {
+    "CityID": 304,
+    "name": "汉中市",
+    "ProID": 23,
+    "CitySort": 304,
+    "area": ["汉台区", "南郑县", "城固县", "洋县", "西乡县", "勉县", "宁强县", "略阳县", "镇巴县", "留坝县", "佛坪县"]
+  }, {
+    "CityID": 305,
+    "name": "宝鸡市",
+    "ProID": 23,
+    "CitySort": 305,
+    "area": ["渭滨区", "金台区", "陈仓区", "凤翔县", "岐山县", "扶风县", "眉县", "陇县", "千阳县", "麟游县", "凤县", "太白县"]
+  }, {
+    "CityID": 306,
+    "name": "铜川市",
+    "ProID": 23,
+    "CitySort": 306,
+    "area": ["王益区", "印台区", "耀州区", "宜君县"]
+  }]
+}, {
+  "ProID": 24,
+  "name": "新疆维吾尔自治区",
+  "ProSort": 31,
+  "ProRemark": "自治区",
+  "city": [{
+    "CityID": 333,
+    "name": "塔城地区",
+    "ProID": 24,
+    "CitySort": 333,
+    "area": ["塔城市", "乌苏市", "额敏县", "沙湾县", "托里县", "裕民县", "和布克赛尔蒙古自治县"]
+  }, {
+    "CityID": 334,
+    "name": "哈密地区",
+    "ProID": 24,
+    "CitySort": 334,
+    "area": ["哈密市", "巴里坤哈萨克自治县", "伊吾县"]
+  }, {
+    "CityID": 335,
+    "name": "和田地区",
+    "ProID": 24,
+    "CitySort": 335,
+    "area": ["和田市", "和田县", "墨玉县", "皮山县", "洛浦县", "策勒县", "于田县", "民丰县"]
+  }, {
+    "CityID": 336,
+    "name": "阿勒泰地区",
+    "ProID": 24,
+    "CitySort": 336,
+    "area": ["阿勒泰市", "布尔津县", "富蕴县", "福海县", "哈巴河县", "青河县", "吉木乃县"]
+  }, {
+    "CityID": 337,
+    "name": "克孜勒苏柯尔克孜自治州",
+    "ProID": 24,
+    "CitySort": 337,
+    "area": ["阿图什市", "阿克陶县", "阿合奇县", "乌恰县"]
+  }, {
+    "CityID": 338,
+    "name": "博尔塔拉蒙古自治州",
+    "ProID": 24,
+    "CitySort": 338,
+    "area": ["博乐市", "精河县", "温泉县"]
+  }, {
+    "CityID": 339,
+    "name": "克拉玛依市",
+    "ProID": 24,
+    "CitySort": 339,
+    "area": ["独山子区", "克拉玛依区", "白碱滩区", "乌尔禾区"]
+  }, {
+    "CityID": 340,
+    "name": "乌鲁木齐市",
+    "ProID": 24,
+    "CitySort": 340,
+    "area": ["天山区", "沙依巴克区", "新市区", "水磨沟区", "头屯河区", "达坂城区", "米东区", "乌鲁木齐县"]
+  }, {
+    "CityID": 341,
+    "name": "石河子市",
+    "ProID": 24,
+    "CitySort": 341,
+    "area": ['其他']
+  }, {
+    "CityID": 342,
+    "name": "昌吉回族自治州",
+    "ProID": 24,
+    "CitySort": 342,
+    "area": ["昌吉市", "阜康市", "呼图壁县", "玛纳斯县", "奇台县", "吉木萨尔县", "木垒哈萨克自治县"]
+  }, {
+    "CityID": 343,
+    "name": "五家渠市",
+    "ProID": 24,
+    "CitySort": 343,
+    "area": ['其他']
+  }, {
+    "CityID": 344,
+    "name": "吐鲁番市",
+    "ProID": 24,
+    "CitySort": 344,
+    "area": ["吐鲁番市", "鄯善县", "托克逊县"]
+  }, {
+    "CityID": 345,
+    "name": "巴音郭楞蒙古自治州",
+    "ProID": 24,
+    "CitySort": 345,
+    "area": ["库尔勒市", "轮台县", "尉犁县", "若羌县", "且末县", "焉耆回族自治县", "和静县", "和硕县", "博湖县"]
+  }, {
+    "CityID": 346,
+    "name": "阿克苏地区",
+    "ProID": 24,
+    "CitySort": 346,
+    "area": ["阿克苏市", "温宿县", "库车县", "沙雅县", "新和县", "拜城县", "乌什县", "阿瓦提县", "柯坪县"]
+  }, {
+    "CityID": 347,
+    "name": "阿拉尔市",
+    "ProID": 24,
+    "CitySort": 347,
+    "area": ['其他']
+  }, {
+    "CityID": 348,
+    "name": "喀什地区",
+    "ProID": 24,
+    "CitySort": 348,
+    "area": ["喀什市", "疏附县", "疏勒县", "英吉沙县", "泽普县", "莎车县", "叶城县", "麦盖提县", "岳普湖县", "伽师县", "巴楚县", "塔什库尔干塔吉克自治县"]
+  }, {
+    "CityID": 349,
+    "name": "图木舒克市",
+    "ProID": 24,
+    "CitySort": 349,
+    "area": ['其他']
+  }, {
+    "CityID": 350,
+    "name": "伊犁哈萨克自治州",
+    "ProID": 24,
+    "CitySort": 350,
+    "area": ["伊宁市", "奎屯市", "伊宁县", "察布查尔锡伯自治县", "霍城县", "巩留县", "新源县", "昭苏县", "特克斯县", "尼勒克县"]
+  }]
+}, {
+  "ProID": 25,
+  "name": "青海省",
+  "ProSort": 26,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 289,
+    "name": "海北藏族自治州",
+    "ProID": 25,
+    "CitySort": 289,
+    "area": ["门源回族自治县", "祁连县", "海晏县", "刚察县"]
+  }, {
+    "CityID": 290,
+    "name": "西宁市",
+    "ProID": 25,
+    "CitySort": 290,
+    "area": ["城东区", "城中区", "城西区", "城北区", "大通回族土族自治县", "湟中县", "湟源县"]
+  }, {
+    "CityID": 291,
+    "name": "海东市",
+    "ProID": 25,
+    "CitySort": 291,
+    "area": ["平安县", "民和回族土族自治县", "乐都县", "互助土族自治县", "化隆回族自治县", "循化撒拉族自治县"]
+  }, {
+    "CityID": 292,
+    "name": "黄南藏族自治州",
+    "ProID": 25,
+    "CitySort": 292,
+    "area": ["同仁县", "尖扎县", "泽库县", "河南蒙古族自治县"]
+  }, {
+    "CityID": 293,
+    "name": "海南藏族自治州",
+    "ProID": 25,
+    "CitySort": 293,
+    "area": ["共和县", "同德县", "贵德县", "兴海县", "贵南县"]
+  }, {
+    "CityID": 294,
+    "name": "果洛藏族自治州",
+    "ProID": 25,
+    "CitySort": 294,
+    "area": ["玛沁县", "班玛县", "甘德县", "达日县", "久治县", "玛多县"]
+  }, {
+    "CityID": 295,
+    "name": "玉树藏族自治州",
+    "ProID": 25,
+    "CitySort": 295,
+    "area": ["玉树县", "杂多县", "称多县", "治多县", "囊谦县", "曲麻莱县"]
+  }, {
+    "CityID": 296,
+    "name": "海西蒙古族藏族自治州",
+    "ProID": 25,
+    "CitySort": 296,
+    "area": ["格尔木市", "德令哈市", "乌兰县", "都兰县", "天峻县"]
+  }]
+}, {
+  "ProID": 26,
+  "name": "宁夏回族自治区",
+  "ProSort": 30,
+  "ProRemark": "自治区",
+  "city": [{
+    "CityID": 328,
+    "name": "银川市",
+    "ProID": 26,
+    "CitySort": 328,
+    "area": ["兴庆区", "西夏区", "金凤区", "永宁县", "贺兰县", "灵武市"]
+  }, {
+    "CityID": 329,
+    "name": "石嘴山市",
+    "ProID": 26,
+    "CitySort": 329,
+    "area": ["大武口区", "惠农区", "平罗县"]
+  }, {
+    "CityID": 330,
+    "name": "吴忠市",
+    "ProID": 26,
+    "CitySort": 330,
+    "area": ["利通区", "盐池县", "同心县", "青铜峡市"]
+  }, {
+    "CityID": 331,
+    "name": "固原市",
+    "ProID": 26,
+    "CitySort": 331,
+    "area": ["原州区", "西吉县", "隆德县", "泾源县", "彭阳县"]
+  }, {
+    "CityID": 332,
+    "name": "中卫市",
+    "ProID": 26,
+    "CitySort": 332,
+    "area": ["沙坡头区", "中宁县", "海原县"]
+  }]
+}, {
+  "ProID": 27,
+  "name": "重庆市",
+  "ProSort": 4,
+  "ProRemark": "直辖市",
+  "city": [{
+    "CityID": 4,
+    "name": "重庆市",
+    "ProID": 27,
+    "CitySort": 4,
+    "area": ["万州区", "涪陵区", "渝中区", "大渡口区", "江北区", "沙坪坝区", "九龙坡区", "南岸区", "北碚区", "万盛区", "双桥区", "渝北区", "巴南区", "黔江区", "长寿区", "江津区", "合川区", "永川区", "南川区", "綦江县", "潼南县", "铜梁县", "大足县", "荣昌县", "璧山县", "梁平县", "城口县", "丰都县", "垫江县", "武隆县", "忠县", "开县", "云阳县", "奉节县", "巫山县", "巫溪县", "石柱土家族自治县", "秀山土家族苗族自治县", "酉阳土家族苗族自治县", "彭水苗族土家族自治县"]
+  }]
+}, {
+  "ProID": 28,
+  "name": "四川省",
+  "ProSort": 22,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 225,
+    "name": "成都市",
+    "ProID": 28,
+    "CitySort": 225,
+    "area": ["锦江区", "青羊区", "金牛区", "武侯区", "成华区", "龙泉驿区", "青白江区", "新都区", "温江区", "金堂县", "双流县", "郫县", "大邑县", "蒲江县", "新津县", "都江堰市", "彭州市", "邛崃市", "崇州市"]
+  }, {
+    "CityID": 226,
+    "name": "攀枝花市",
+    "ProID": 28,
+    "CitySort": 226,
+    "area": ["东区", "西区", "仁和区", "米易县", "盐边县"]
+  }, {
+    "CityID": 227,
+    "name": "自贡市",
+    "ProID": 28,
+    "CitySort": 227,
+    "area": ["自流井区", "贡井区", "大安区", "沿滩区", "荣县", "富顺县"]
+  }, {
+    "CityID": 228,
+    "name": "绵阳市",
+    "ProID": 28,
+    "CitySort": 228,
+    "area": ["涪城区", "游仙区", "三台县", "盐亭县", "安县", "梓潼县", "北川羌族自治县", "平武县", "江油市"]
+  }, {
+    "CityID": 229,
+    "name": "南充市",
+    "ProID": 28,
+    "CitySort": 229,
+    "area": ["顺庆区", "高坪区", "嘉陵区", "南部县", "营山县", "蓬安县", "仪陇县", "西充县", "阆中市"]
+  }, {
+    "CityID": 230,
+    "name": "达州市",
+    "ProID": 28,
+    "CitySort": 230,
+    "area": ["通川区", "达县", "宣汉县", "开江县", "大竹县", "渠县", "万源市"]
+  }, {
+    "CityID": 231,
+    "name": "遂宁市",
+    "ProID": 28,
+    "CitySort": 231,
+    "area": ["船山区", "安居区", "蓬溪县", "射洪县", "大英县"]
+  }, {
+    "CityID": 232,
+    "name": "广安市",
+    "ProID": 28,
+    "CitySort": 232,
+    "area": ["广安区", "岳池县", "武胜县", "邻水县", "华蓥市"]
+  }, {
+    "CityID": 233,
+    "name": "巴中市",
+    "ProID": 28,
+    "CitySort": 233,
+    "area": ["巴州区", "通江县", "南江县", "平昌县"]
+  }, {
+    "CityID": 234,
+    "name": "泸州市",
+    "ProID": 28,
+    "CitySort": 234,
+    "area": ["江阳区", "纳溪区", "龙马潭区", "泸县", "合江县", "叙永县", "古蔺县"]
+  }, {
+    "CityID": 235,
+    "name": "宜宾市",
+    "ProID": 28,
+    "CitySort": 235,
+    "area": ["翠屏区", "宜宾县", "南溪县", "江安县", "长宁县", "高县", "珙县", "筠连县", "兴文县", "屏山县"]
+  }, {
+    "CityID": 236,
+    "name": "资阳市",
+    "ProID": 28,
+    "CitySort": 236,
+    "area": ["雁江区", "安岳县", "乐至县", "简阳市"]
+  }, {
+    "CityID": 237,
+    "name": "内江市",
+    "ProID": 28,
+    "CitySort": 237,
+    "area": ["市中区", "东兴区", "威远县", "资中县", "隆昌县"]
+  }, {
+    "CityID": 238,
+    "name": "乐山市",
+    "ProID": 28,
+    "CitySort": 238,
+    "area": ["市中区", "沙湾区", "五通桥区", "金口河区", "犍为县", "井研县", "夹江县", "沐川县", "峨边彝族自治县", "马边彝族自治县", "峨眉山市"]
+  }, {
+    "CityID": 239,
+    "name": "眉山市",
+    "ProID": 28,
+    "CitySort": 239,
+    "area": ["东坡区", "仁寿县", "彭山县", "洪雅县", "丹棱县", "青神县"]
+  }, {
+    "CityID": 240,
+    "name": "凉山彝族自治州",
+    "ProID": 28,
+    "CitySort": 240,
+    "area": ["西昌市", "木里藏族自治县", "盐源县", "德昌县", "会理县", "会东县", "宁南县", "普格县", "布拖县", "金阳县", "昭觉县", "喜德县", "冕宁县", "越西县", "甘洛县", "美姑县", "雷波县"]
+  }, {
+    "CityID": 241,
+    "name": "雅安市",
+    "ProID": 28,
+    "CitySort": 241,
+    "area": ["雨城区", "名山县", "荥经县", "汉源县", "石棉县", "天全县", "芦山县", "宝兴县"]
+  }, {
+    "CityID": 242,
+    "name": "甘孜藏族自治州",
+    "ProID": 28,
+    "CitySort": 242,
+    "area": ["康定县", "泸定县", "丹巴县", "九龙县", "雅江县", "道孚县", "炉霍县", "甘孜县", "新龙县", "德格县", "白玉县", "石渠县", "色达县", "理塘县", "巴塘县", "乡城县", "稻城县", "得荣县"]
+  }, {
+    "CityID": 243,
+    "name": "阿坝藏族羌族自治州",
+    "ProID": 28,
+    "CitySort": 243,
+    "area": ["汶川县", "理县", "茂县", "松潘县", "九寨沟县", "金川县", "小金县", "黑水县", "马尔康县", "壤塘县", "阿坝县", "若尔盖县", "红原县"]
+  }, {
+    "CityID": 244,
+    "name": "德阳市",
+    "ProID": 28,
+    "CitySort": 244,
+    "area": ["旌阳区", "中江县", "罗江县", "广汉市", "什邡市", "绵竹市"]
+  }, {
+    "CityID": 245,
+    "name": "广元市",
+    "ProID": 28,
+    "CitySort": 245,
+    "area": ["市中区", "元坝区", "朝天区", "旺苍县", "青川县", "剑阁县", "苍溪县"]
+  }]
+}, {
+  "ProID": 29,
+  "name": "贵州省",
+  "ProSort": 23,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 246,
+    "name": "贵阳市",
+    "ProID": 29,
+    "CitySort": 246,
+    "area": ["南明区", "云岩区", "花溪区", "乌当区", "白云区", "小河区", "开阳县", "息烽县", "修文县", "清镇市"]
+  }, {
+    "CityID": 247,
+    "name": "遵义市",
+    "ProID": 29,
+    "CitySort": 247,
+    "area": ["红花岗区", "汇川区", "遵义县", "桐梓县", "绥阳县", "正安县", "道真仡佬族苗族自治县", "务川仡佬族苗族自治县", "凤冈县", "湄潭县", "余庆县", "习水县", "赤水市", "仁怀市"]
+  }, {
+    "CityID": 248,
+    "name": "安顺市",
+    "ProID": 29,
+    "CitySort": 248,
+    "area": ["西秀区", "平坝县", "普定县", "镇宁布依族苗族自治县", "关岭布依族苗族自治县", "紫云苗族布依族自治县"]
+  }, {
+    "CityID": 249,
+    "name": "黔南布依族苗族自治州",
+    "ProID": 29,
+    "CitySort": 249,
+    "area": ["都匀市", "福泉市", "荔波县", "贵定县", "瓮安县", "独山县", "平塘县", "罗甸县", "长顺县", "龙里县", "惠水县", "三都水族自治县"]
+  }, {
+    "CityID": 250,
+    "name": "黔东南苗族侗族自治州",
+    "ProID": 29,
+    "CitySort": 250,
+    "area": ["凯里市", "黄平县", "施秉县", "三穗县", "镇远县", "岑巩县", "天柱县", "锦屏县", "剑河县", "台江县", "黎平县", "榕江县", "从江县", "雷山县", "麻江县", "丹寨县"]
+  }, {
+    "CityID": 251,
+    "name": "铜仁市",
+    "ProID": 29,
+    "CitySort": 251,
+    "area": ["铜仁市", "江口县", "玉屏侗族自治县", "石阡县", "思南县", "印江土家族苗族自治县", "德江县", "沿河土家族自治县", "松桃苗族自治县", "万山特区"]
+  }, {
+    "CityID": 252,
+    "name": "毕节市",
+    "ProID": 29,
+    "CitySort": 252,
+    "area": ["毕节市", "大方县", "黔西县", "金沙县", "织金县", "纳雍县", "威宁彝族回族苗族自治县", "赫章县"]
+  }, {
+    "CityID": 253,
+    "name": "六盘水市",
+    "ProID": 29,
+    "CitySort": 253,
+    "area": ["钟山区", "六枝特区", "水城县", "盘县"]
+  }, {
+    "CityID": 254,
+    "name": "黔西南布依族苗族自治州",
+    "ProID": 29,
+    "CitySort": 254,
+    "area": ["兴义市", "兴仁县", "普安县", "晴隆县", "贞丰县", "望谟县", "册亨县", "安龙县"]
+  }]
+}, {
+  "ProID": 30,
+  "name": "云南省",
+  "ProSort": 25,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 273,
+    "name": "西双版纳傣族自治州",
+    "ProID": 30,
+    "CitySort": 273,
+    "area": ["景洪市", "勐海县", "勐腊县"]
+  }, {
+    "CityID": 274,
+    "name": "德宏傣族景颇族自治州",
+    "ProID": 30,
+    "CitySort": 274,
+    "area": ["瑞丽市", "潞西市", "梁河县", "盈江县", "陇川县"]
+  }, {
+    "CityID": 275,
+    "name": "昭通市",
+    "ProID": 30,
+    "CitySort": 275,
+    "area": ["昭阳区", "鲁甸县", "巧家县", "盐津县", "大关县", "永善县", "绥江县", "镇雄县", "彝良县", "威信县", "水富县"]
+  }, {
+    "CityID": 276,
+    "name": "昆明市",
+    "ProID": 30,
+    "CitySort": 276,
+    "area": ["五华区", "盘龙区", "官渡区", "西山区", "东川区", "呈贡县", "晋宁县", "富民县", "宜良县", "石林彝族自治县", "嵩明县", "禄劝彝族苗族自治县", "寻甸回族彝族自治县", "安宁市"]
+  }, {
+    "CityID": 277,
+    "name": "大理白族自治州",
+    "ProID": 30,
+    "CitySort": 277,
+    "area": ["大理市", "漾濞彝族自治县", "祥云县", "宾川县", "弥渡县", "南涧彝族自治县", "巍山彝族回族自治县", "永平县", "云龙县", "洱源县", "剑川县", "鹤庆县"]
+  }, {
+    "CityID": 278,
+    "name": "红河哈尼族彝族自治州",
+    "ProID": 30,
+    "CitySort": 278,
+    "area": ["个旧市", "开远市", "蒙自县", "屏边苗族自治县", "建水县", "石屏县", "弥勒县", "泸西县", "元阳县", "红河县", "金平苗族瑶族傣族自治县", "绿春县", "河口瑶族自治县"]
+  }, {
+    "CityID": 279,
+    "name": "曲靖市",
+    "ProID": 30,
+    "CitySort": 279,
+    "area": ["麒麟区", "马龙县", "陆良县", "师宗县", "罗平县", "富源县", "会泽县", "沾益县", "宣威市"]
+  }, {
+    "CityID": 280,
+    "name": "保山市",
+    "ProID": 30,
+    "CitySort": 280,
+    "area": ["隆阳区", "施甸县", "腾冲县", "龙陵县", "昌宁县"]
+  }, {
+    "CityID": 281,
+    "name": "文山壮族苗族自治州",
+    "ProID": 30,
+    "CitySort": 281,
+    "area": ["文山县", "砚山县", "西畴县", "麻栗坡县", "马关县", "丘北县", "广南县", "富宁县"]
+  }, {
+    "CityID": 282,
+    "name": "玉溪市",
+    "ProID": 30,
+    "CitySort": 282,
+    "area": ["红塔区", "江川县", "澄江县", "通海县", "华宁县", "易门县", "峨山彝族自治县", "新平彝族傣族自治县", "元江哈尼族彝族傣族自治县"]
+  }, {
+    "CityID": 283,
+    "name": "楚雄彝族自治州",
+    "ProID": 30,
+    "CitySort": 283,
+    "area": ["楚雄市", "双柏县", "牟定县", "南华县", "姚安县", "大姚县", "永仁县", "元谋县", "武定县", "禄丰县"]
+  }, {
+    "CityID": 284,
+    "name": "普洱市",
+    "ProID": 30,
+    "CitySort": 284,
+    "area": ["思茅区", "宁洱哈尼族彝族自治县", "墨江哈尼族自治县", "景东彝族自治县", "景谷傣族彝族自治县", "镇沅彝族哈尼族拉祜族自治县", "江城哈尼族彝族自治县", "孟连傣族拉祜族佤族自治县", "澜沧拉祜族自治县", "西盟佤族自治县"]
+  }, {
+    "CityID": 285,
+    "name": "临沧市",
+    "ProID": 30,
+    "CitySort": 285,
+    "area": ["临翔区", "凤庆县", "云县", "永德县", "镇康县", "双江拉祜族佤族布朗族傣族自治县", "耿马傣族佤族自治县", "沧源佤族自治县"]
+  }, {
+    "CityID": 286,
+    "name": "怒江傈僳族自治州",
+    "ProID": 30,
+    "CitySort": 286,
+    "area": ["泸水县", "福贡县", "贡山独龙族怒族自治县", "兰坪白族普米族自治县"]
+  }, {
+    "CityID": 287,
+    "name": "迪庆藏族自治州",
+    "ProID": 30,
+    "CitySort": 287,
+    "area": ["香格里拉县", "德钦县", "维西傈僳族自治县"]
+  }, {
+    "CityID": 288,
+    "name": "丽江市",
+    "ProID": 30,
+    "CitySort": 288,
+    "area": ["古城区", "玉龙纳西族自治县", "永胜县", "华坪县", "宁蒗彝族自治县"]
+  }]
+}, {
+  "ProID": 31,
+  "name": "西藏自治区",
+  "ProSort": 29,
+  "ProRemark": "自治区",
+  "city": [{
+    "CityID": 321,
+    "name": "拉萨市",
+    "ProID": 31,
+    "CitySort": 321,
+    "area": ["城关区", "林周县", "当雄县", "尼木县", "曲水县", "堆龙德庆县", "达孜县", "墨竹工卡县"]
+  }, {
+    "CityID": 322,
+    "name": "日喀则市",
+    "ProID": 31,
+    "CitySort": 322,
+    "area": ["日喀则市", "南木林县", "江孜县", "定日县", "萨迦县", "拉孜县", "昂仁县", "谢通门县", "白朗县", "仁布县", "康马县", "定结县", "仲巴县", "亚东县", "吉隆县", "聂拉木县", "萨嘎县", "岗巴县"]
+  }, {
+    "CityID": 323,
+    "name": "山南市",
+    "ProID": 31,
+    "CitySort": 323,
+    "area": ["乃东县", "扎囊县", "贡嘎县", "桑日县", "琼结县", "曲松县", "措美县", "洛扎县", "加查县", "隆子县", "错那县", "浪卡子县"]
+  }, {
+    "CityID": 324,
+    "name": "林芝市",
+    "ProID": 31,
+    "CitySort": 324,
+    "area": ["林芝县", "工布江达县", "米林县", "墨脱县", "波密县", "察隅县", "朗县"]
+  }, {
+    "CityID": 325,
+    "name": "昌都市",
+    "ProID": 31,
+    "CitySort": 325,
+    "area": ["昌都县", "江达县", "贡觉县", "类乌齐县", "丁青县", "察雅县", "八宿县", "左贡县", "芒康县", "洛隆县", "边坝县"]
+  }, {
+    "CityID": 326,
+    "name": "那曲地区",
+    "ProID": 31,
+    "CitySort": 326,
+    "area": ["那曲县", "嘉黎县", "比如县", "聂荣县", "安多县", "申扎县", "索县", "班戈县", "巴青县", "尼玛县"]
+  }, {
+    "CityID": 327,
+    "name": "阿里地区",
+    "ProID": 31,
+    "CitySort": 327,
+    "area": ["普兰县", "札达县", "噶尔县", "日土县", "革吉县", "改则县", "措勤县"]
+  }]
+}, {
+  "ProID": 32,
+  "name": "台湾省",
+  "ProSort": 7,
+  "ProRemark": "省份",
+  "city": [{
+    "CityID": 327,
+    "name": "台湾",
+    "ProID": 31,
+    "CitySort": 327,
+    "area": ["台北市","高雄市","台北县","桃园县","新竹县","苗栗县","台中县","彰化县","南投县","云林县","嘉义县","台南县","高雄县","屏东县","宜兰县","花莲县","台东县","澎湖县","基隆市","新竹市","台中市","嘉义市","台南市","其他"]
+  }]
+}, {
+  "ProID": 33,
+  "name": "澳门特别行政区",
+  "ProSort": 33,
+  "ProRemark": "特别行政区",
+  "city": [{
+    "CityID": 370,
+    "name": "澳门",
+    "ProID": 33,
+    "CitySort": 370,
+    "area": ["花地玛堂区","圣安多尼堂区","大堂区","望德堂区","风顺堂区","嘉模堂区","圣方济各堂区","路凼","其他"]
+  }]
+}, {
+  "ProID": 34,
+  "name": "香港特别行政区",
+  "ProSort": 34,
+  "ProRemark": "特别行政区",
+  "city": [{
+    "CityID": 371,
+    "name": "香港",
+    "ProID": 34,
+    "CitySort": 371,
+    "area": ["中西区","湾仔区","东区","南区","深水埗区","油尖旺区","九龙城区","黄大仙区","观塘区","北区","大埔区","沙田区","西贡区","元朗区","屯门区","荃湾区","葵青区","离岛区","其他"]
+  },]
+},{
+  "ProID": 35,
+  "name": "钓鱼岛",
+  "ProSort": 35,
+  "ProRemark": "特别行政区",
+  "city": [{
+    "CityID": 372,
+    "name": "钓鱼岛",
+    "ProID": 35,
+    "CitySort": 372,
+    "area": ["钓鱼岛"]
+  },]
+},{
+  "ProID": 36,
+  "name": " 海外",
+  "ProSort": 35,
+  "ProRemark": "特别行政区",
+  "city": [{
+    "CityID": 372,
+    "name": "海外",
+    "ProID": 35,
+    "CitySort": 372,
+    "area": ['美国','加拿大','澳大利亚','新西兰','英国','法国','德国','捷克','荷兰','瑞士','希腊','挪威','瑞典','丹麦','芬兰','爱尔兰','奥地利','意大利','乌克兰','俄罗斯','西班牙','韩国','新加坡','马来西亚','印度','泰国','日本','巴西','阿根廷','南非','埃及','其他']
+  },]
+}]

+ 67 - 0
src/web/staticres/css/dev2/newBidSearch.css

@@ -340,6 +340,73 @@
   border-radius: 6px;
   text-decoration: none;
 }
+.custom-dialog.have-thousand-dialog .dialog-container{
+  width: 388px;
+}
+.custom-dialog.have-thousand-dialog .dialog-header{
+  position: relative;
+}
+.custom-dialog.have-thousand-dialog .dialog-content{
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.custom-dialog.have-thousand-dialog .have-thousand-close{
+  position: absolute;
+  right: -8px;
+  top: -8px;
+  font-size: 24px;
+  color: #AAAAAA;
+
+  cursor: pointer;
+}
+.custom-dialog.have-thousand-dialog .dialog-container .custom-wx{
+  margin: 20px 0 8px;
+  width: 128px;
+  height: 128px;
+}
+.custom-dialog.have-thousand-dialog .custom-wx img{
+  width: 100%;
+  height: 100%;
+}
+.custom-dialog.have-thousand-dialog .continue-export-btn{
+  margin-top: 32px;
+  padding: 6px 16px;
+  background: #2ABED1;
+  font-size: 16px;
+  color: #fff;
+  border-radius: 6px;
+  border: none;
+}
+.dialog-checkbox{
+  position: relative;
+  margin-top: 12px;
+}
+.cheBoxjy-label{
+  margin-left: 20px;
+}
+#checkBoxjy {
+  position: absolute;
+  left: 0;
+  top: 3px;
+  padding: 0;
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  cursor: pointer;
+  box-sizing: border-box;
+  border: 1px solid #ccc;
+}
+#checkBoxjy.hideBf:before {
+  content: "\e62d";
+  position: absolute;
+  left: -3px;
+  top: -4.5px;
+  width: 14px;
+  height: 14px;
+  font-size: 18px;
+  color: #2CB7CA;
+}
 .custom-dialog .default-btn{
   float: right;
   border: 1px solid #e0e0e0;

+ 248 - 1
src/web/staticres/dataExport/css/conditions.css

@@ -604,10 +604,15 @@ input.sm {
 }
 
 .user-input {
+  position: relative;
   width: 100%;
   text-align: left;
 }
 
+.user-input .pre-search-list{
+  position: absolute;
+}
+
 .add-input-w {
   margin-top: 15px;
   width: 590px;
@@ -949,6 +954,53 @@ input.sm {
   z-index: 999;
   margin: 0 auto;
 }
+.dataExport-footer .data-footer-tip {
+  height: 40px;
+  background: #F5F5FB;
+}
+.data-footer-tip .footer-tip-main{
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin: 0 auto;
+  width: 1200px;
+  height: 100%;
+  background: #F9F2EA;
+  font-size: 14px;
+  color: #F56500;
+}
+.footer-tip-main .custom-service-wx{
+  position: relative;
+
+}
+.footer-tip-main .custom-service-wx .custom-service-wximg{
+  position: absolute;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 16px 16px 12px;
+  width: 160px;
+  height: 186px;
+  background: #fff;
+  border-radius: 8px;
+  top: -212px;
+  left: -54px;
+  box-shadow: 0px 0px 28px 0px rgba(0, 0, 0, 0.16);
+}
+.custom-service-wx .custom-service-wximg .triangle{
+  position: absolute;
+  display:inline-block;
+  border: 14px solid transparent;
+  border-top-color: #fff;
+  bottom: -26px;
+  left: 68px;
+}
+
+.custom-service-wximg img{
+  width: 128px;
+  height: 128px;
+}
+
 .dataExport-footer.bottomfixed {
   position: fixed;
   bottom: 0;
@@ -960,7 +1012,7 @@ input.sm {
   justify-content: flex-end;
   align-items: center;
   width: 1200px;
-  height: 100%;
+  height: 68px;
   margin: 0 auto;
 }
 .dataBtnCom{
@@ -1033,3 +1085,198 @@ input.sm {
   height: 100%;
 }
 /*E 新增数据预览样式 */
+
+/* S P289数据导出迭代优化 S*/
+.filter-data-container{
+  max-height: 400px;
+  overflow-y: scroll;
+  width: 694px;
+}
+.filter-dialog ::-webkit-scrollbar {
+  /*滚动条整体样式*/
+  width: 8px!important;
+}
+.filter-dialog .el-dialog__headerbtn{
+  width: auto;
+  right: 56px;
+  top: 10px;
+}
+.filter-data-container {
+  scrollbar-width: thin
+}
+.filter-data-container .filter-data-list{
+  margin-top: 12px;
+  padding: 0 16px;
+  background: #F5F6F7;
+  border-radius: 4px;
+}
+.filter-data-container  .f-l-title{
+  padding: 8px 0 2px;
+}
+.filter-data-container .f-l-content {
+  padding: 12px 0;
+  border-top: 1px dashed #ddd;
+  font-size: 12px;
+  color: #686868;
+  cursor: pointer;
+}
+.icon-caret-bottom{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  margin-right: 4px;
+  background: url('/images/biddingSearch/icon-caret-bottom-gray.png') no-repeat center;
+  background-size: contain;
+  cursor: pointer;
+}
+.icon-caret-top{
+  display: inline-block;
+  width: 18px;
+  height: 18px;
+  margin-right: 4px;
+  background: url('/images/biddingSearch/icon-caret-top-gray.png') no-repeat center;
+  background-size: contain;
+  cursor: pointer;
+}
+
+.icon-clean{
+  display: inline-block;
+  width: 18px;
+  height: 18px;
+  background: url('/images/biddingSearch/icon-clean-gray.png') no-repeat center;
+  cursor: pointer;
+  background-size: contain;
+}
+.filter-data-list .has-search-model{
+  padding:0 0 8px 22px;
+  font-size: 12px;
+  line-height: 18px;
+}
+.filter-data-list .f-l-title{
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  cursor: pointer;
+  font-size: 14px;
+  min-height: 22px;
+  color: #1D1D1D;
+}
+.filter-data-list .f-l-title .f-l-title-text{
+  flex: 1;
+  text-align: justify;
+  font-size: 14px;
+  line-height: 22px;
+  max-width: 582px;
+}
+.filter-data-list .f-l-title:hover .icon-caret-bottom{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  margin-right: 4px;
+  background: url('/images/biddingSearch/icon-caret-bottom-gold.png') no-repeat center;
+  background-size: contain;
+  cursor: pointer;
+}
+.filter-data-list .f-l-title:hover .icon-caret-top{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  margin-right: 4px;
+  background: url('/images/biddingSearch/icon-caret-top-gold.png') no-repeat center;
+  background-size: contain;
+  cursor: pointer;
+}
+.filter-data-list .f-l-title:hover .f-l-title-text{
+  color: #2cb7ca;
+}
+.filter-data-list .f-l-title:hover .icon-clean{
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  background: url('/images/biddingSearch/icon-clean-gold.png') no-repeat center;
+  cursor: pointer;
+  background-size: contain;
+}
+.filter-data-list .f-l-c-item{
+  margin-top: 8px;
+  line-height: 18px;
+}
+.filter-data-list .f-l-c-item > span {
+  margin-right: 16px;
+}
+.filter-data-list .f-l-c-item .i-value {
+  color: #1D1D1D;
+}
+/* 删除筛选提示框 */
+.filter-dialog .btn-group,
+.filter-messagebox .btn-group{
+  width: 132px;
+  height: 36px;
+  padding: 0;
+  border-radius: 6px;
+  font-size: 16px;
+}
+.filter-dialog .btn-group.confirm-btn,
+.filter-messagebox .btn-group.confirm-btn{
+  background: #2cb7ca;
+  margin-right: 52px;
+  border: 0;
+  color: #fff;
+}
+.filter-dialog .btn-group.confirm-btn:hover,
+.filter-dialog .btn-group.confirm-btn:focus,
+.filter-messagebox .btn-group.confirm-btn:hover,
+.filter-dialog .btn-group.confirm-btn:focus{
+  color: #fff;
+}
+.filter-messagebox{
+  width: 380px;
+  border-radius: 8px;
+  padding: 32px;
+}
+.el-message-box__title{
+  color: #1D1D1D;
+}
+.filter-messagebox .el-message-box__header{
+  padding: 0!important;
+}
+.filter-messagebox .el-message-box__content{
+  padding: 20px 0 32px;
+}
+.filter-messagebox .el-message-box__message p{
+  font-size: 14px;
+  color: #686868;
+}
+.filter-messagebox .el-message-box__btns{
+  display: flex;
+  flex-direction: row-reverse;
+  justify-content: space-between;
+}
+
+.pre-search-list {
+  padding: 20px 0;
+  position: absolute;
+  z-index: 6;
+  top: 52px;
+  width: 640px;
+  background: #fff;
+  box-shadow: 0 0 20px rgb(0,0,0,0.1);
+  border-radius: 8px;
+  overflow: hidden;
+}
+.pre-search-item {
+  padding: 12px 40px;
+  width: 100%;
+  font-size: 16px;
+  line-height: 24px;
+  color: #686868;
+  box-sizing: border-box;
+  transition: all .3s;
+  cursor: pointer;
+}
+.pre-search-item:hover {
+  padding: 12px 30px;
+  color: #1d1d1d;
+  background-color: #ececec;
+}
+/* E P289数据导出迭代优化 E*/

+ 17 - 0
src/web/staticres/dataExport/css/previewData.css

@@ -191,6 +191,23 @@ body{
 	width: 4%;
 }
 
+.d_gj tr.content td.multi_packet{
+  padding: 0;
+}
+
+.d_gj tr:nth-child(1) td.multi_packet_trd, .d_gj tr:nth-child(2) td.multi_packet_trd{
+  background: transparent;
+}
+
+.d_bz tr:nth-child(odd).multi_packet_tr, .d_gj tr:nth-child(odd).multi_packet_tr{
+  background: transparent;
+}
+.d_gj tr.multi_packet_tr td{
+  border-left: none;
+}
+.d_gj tr.multi_packet_tr:last-child td{
+  border-bottom: none;
+}
 
 .floatBtn{
     border-radius: 5px;

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

@@ -347,6 +347,11 @@ function addDelInput(t,type) {
 }
 /* 采购单位、中标单位 input-blur -- 添加可删除Input标签 -- 20190103*/
 function addDelInputB(t,type) {
+  setTimeout(() => {
+    dataNode.buyerSearchListShow = false
+    dataNode.winnerSearchListShow = false
+    $('.buyer-search-list').hide()
+    $('.winner-search-list').hide()
     var d = document.createElement('div');
     var text = $(t).val();
     if(!text){
@@ -370,6 +375,7 @@ function addDelInputB(t,type) {
     $(t).val('');
     $(t).hide();
     addDelBox(text,'#'+box,arr,null);
+  }, 500);
 }
 /* 添加排除/附加词 */
 var excludeArr = []

+ 3 - 1
src/web/staticres/dataExport/js/delbox.js

@@ -115,7 +115,9 @@ var DelBox = function () {
           return v !== _this3.arr[index];
         });
         var d = this.domArr.splice(index, 1)[0];
-        d.remove();
+        if(d) {
+          d.remove();
+        }
       }
     }
   }]);

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

@@ -406,3 +406,126 @@
   opacity: 0.6;
   cursor: not-allowed;
 } */
+
+/* 弹框 */
+.mask{
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  right: 0;
+  left: 0;
+  top: 0;
+  bottom: 0;
+  background: rgba(0, 0, 0, .65);
+  z-index: 1031;
+}
+.custom-dialog{
+  display: none;
+}
+.custom-dialog .dialog-container{
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  padding: 32px;
+  width: 380px;
+  transform: translateX(-50%) translateY(-50%);
+  background: #ffffff;
+  border-radius: 8px;
+  transition: all 2s linear;
+  z-index: 1038;
+  box-sizing: border-box;
+}
+.custom-dialog .dialog-header {
+  padding: 0 0 20px;
+}
+.custom-dialog .dialog-header .dialog-title{
+  text-align: center;
+  color: #1D1D1D;
+  font-size: 18px;
+  line-height: 28px;
+}
+.custom-dialog .dialog-content{
+  color: #686868;
+  text-align: center;
+  font-size: 14px;
+  line-height: 22px;
+}
+.custom-dialog .dialog-footer{
+  margin-top: 32px;
+}
+.custom-dialog .dialog-footer .dialog-btn{
+  display: inline-block;
+  width: 132px;
+  height: 36px;
+  line-height: 36px;
+  text-align: center;
+  border-radius: 6px;
+  text-decoration: none;
+}
+.custom-dialog.have-thousand-dialog .dialog-container{
+  width: 388px;
+}
+.custom-dialog.have-thousand-dialog .dialog-header{
+  position: relative;
+}
+.custom-dialog.have-thousand-dialog .dialog-content{
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.custom-dialog.have-thousand-dialog .have-thousand-close{
+  position: absolute;
+  right: -8px;
+  top: -8px;
+  font-size: 24px;
+  color: #AAAAAA;
+
+  cursor: pointer;
+}
+.custom-dialog.have-thousand-dialog .dialog-container .custom-wx{
+  margin: 20px 0 8px;
+  width: 128px;
+  height: 128px;
+}
+.custom-dialog.have-thousand-dialog .custom-wx img{
+  width: 100%;
+  height: 100%;
+}
+.custom-dialog.have-thousand-dialog .continue-export-btn{
+  margin-top: 32px;
+  padding: 6px 16px;
+  background: #2ABED1;
+  font-size: 16px;
+  color: #fff;
+  border-radius: 6px;
+  border: none;
+}
+.dialog-checkbox{
+  position: relative;
+  margin-top: 12px;
+}
+.cheBoxjy-label{
+  margin-left: 20px;
+}
+#checkBoxjy {
+  position: absolute;
+  left: 0;
+  top: 3px;
+  padding: 0;
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  cursor: pointer;
+  box-sizing: border-box;
+  border: 1px solid #ccc;
+}
+.el-icon-check {
+  content: "\e62d";
+  position: absolute;
+  left: -3px;
+  top: -6.5px;
+  width: 14px;
+  height: 14px;
+  font-size: 18px;
+  color: #2CB7CA;
+}

+ 94 - 29
src/web/staticres/frontRouter/pc/collection/js/index-pc.js

@@ -81,9 +81,22 @@ var vm = new Vue({
             urlFilterTagId: [],
             tableShowData: [],
             tableFirst20: [],
-            checkNum: 0
+            checkNum: 0,
+            exportChecked: false
         }
     },
+    watch: {
+      exportChecked (newval) {
+        $.ajax({
+          type: 'POST',
+          url: '/front/dataExport/setDontPromptAgain',
+          contentType: 'application/x-www-form-urlencoded',
+          data: {
+            status: newval ? '1' : '0'
+          }
+        })
+      }
+    },
     computed: {
         biEnv: function () {
             return this.inInjectBI
@@ -407,37 +420,89 @@ var vm = new Vue({
             this.listState.listType = type
         },
         dataExport: function () {
-            this.onPageChange(this.listState.pageNum)
-            var info = this.getSelectedIdArr()
-            var ids = info.ids
-            var data = null
-            if (ids.length === 0 && selectDataIds.length === 0) {
-                data = {
-                    label: this.filterState.tags.join(','),
-                    selectTime: this.filterState.selectTime,
-                    buyerclass: this.filterState.buyerclass.join(','),
-                    buyerPhone: this.filterState.buyerPhone ? this.filterState.buyerPhone : 0,
-                    winnerPhone: this.filterState.winnerPhone ? this.filterState.winnerPhone : 0
+          const _this = this
+          if(!_this.listState.total) return
+          //数据导出
+          $.ajax({
+            type: "POST",
+            url: "/front/dataExport/getDontPromptAgain",
+            contentType: "application/x-www-form-urlencoded",
+            success: function (res) {
+              if(res.error_code === 0) {
+                let countBool = false
+                if (_this.checkNum > 0) {
+                  countBool = _this.checkNum >= 20000
+                } else {
+                  countBool = _this.listState.total >= 20000
                 }
-            } else {
-                data = {
-                    selectIds: selectDataIds.join(',')
+                // 数据导出-判断是否展示弹框
+                if(res.isPrompt && countBool) {
+                  $('.have-thousand-dialog').show()
+                  // 获取微信客服二维码
+                  if (window.customers && window.customers.length > 0) {
+                    const customerInfo = window.customers.filter(v => v.name === '高静')
+                    if (customerInfo) {
+                      const html = `<img src="${customerInfo[0].wxer}" alt="">`
+                      $('.custom-wx').html(html)
+                    }
+                  }
+                } else {
+                  $('.have-thousand-dialog').hide()
+                  _this.toDataExportEvent()
                 }
+              } else {
+                $('.have-thousand-dialog').hide()
+                _this.toDataExportEvent()
+              }
+            },
+            error: function(err) {
+              _this.toDataExportEvent()
             }
-            $.ajax({
-                url: '/publicapply/dataexpoet/bycollection',
-                type: 'POST',
-                data: data,
-                success: function (res) {
-                    if (res.error_code === 0) {
-                        if (res.data._id) {
-                            this.savePageState()
-                            this.listState.loaded = true
-                            location.href = '/front/dataExport/toCreateOrderPage/' + res.data._id
-                        }
-                    }
-                }.bind(this)
-            })
+          })
+        },
+        toDataExportEvent: function () {
+          this.onPageChange(this.listState.pageNum)
+          var info = this.getSelectedIdArr()
+          var ids = info.ids
+          var data = null
+          if (ids.length === 0 && selectDataIds.length === 0) {
+              data = {
+                  label: this.filterState.tags.join(','),
+                  selectTime: this.filterState.selectTime,
+                  buyerclass: this.filterState.buyerclass.join(','),
+                  buyerPhone: this.filterState.buyerPhone ? this.filterState.buyerPhone : 0,
+                  winnerPhone: this.filterState.winnerPhone ? this.filterState.winnerPhone : 0
+              }
+          } else {
+              data = {
+                  selectIds: selectDataIds.join(',')
+              }
+          }
+          $.ajax({
+              url: '/publicapply/dataexpoet/bycollection',
+              type: 'POST',
+              data: data,
+              success: function (res) {
+                  if (res.error_code === 0) {
+                      if (res.data._id) {
+                          this.savePageState()
+                          this.listState.loaded = true
+                          location.href = '/front/dataExport/toCreateOrderPage/' + res.data._id
+                      }
+                  }
+              }.bind(this)
+          })
+        },
+        setCloseDialog () {
+          $('.have-thousand-dialog').hide()
+        },
+        setCheckBox ($this, type) {
+          $($this).hide()
+          if (type === 'open') {
+            $('.el-icon-check').show()
+          } else {
+            $('.bif-checkbox').show()
+          }
         },
         checkNotEnoughOnePage: function (unStarCount) {
             // 当前数据总共多少页数据

BIN=BIN
src/web/staticres/images/dataExport/choose_right.png


BIN=BIN
src/web/staticres/images/dataExport/close.png


BIN=BIN
src/web/staticres/images/dataExport/qr.png


BIN=BIN
src/web/staticres/images/right_corner.png


+ 42 - 1
src/web/staticres/js/biddingSearch.js

@@ -308,11 +308,52 @@ $(function() {
 				}
 			}else if($(this).attr("id")=="right-export"){
 				//数据导出
-				toPaydataExport();
+        if(!searchInnerVue.listState.allCount) return
+        $.ajax({
+          type: "POST",
+          url: "/front/dataExport/getDontPromptAgain",
+          contentType: "application/x-www-form-urlencoded",
+          success: function (res) {
+            if(res.error_code === 0) {
+              // 数据导出-判断是否展示弹框
+              let countBool = false
+              if(selectDataIds && selectDataIds.length) {
+                countBool = selectDataIds.length >= 20000
+              } else {
+                countBool = searchInnerVue.listState.allCount >= 20000
+              }
+              if(res.isPrompt && countBool) {
+                $('.have-thousand-dialog').show()
+                // 获取微信客服二维码
+                if (window.customers && window.customers.length > 0) {
+                  const customerInfo = window.customers.filter(v => v.name === '高静')
+                  if (customerInfo) {
+                    const html = `<img src="${customerInfo[0].wxer}" alt="">`
+                    $('.custom-wx').html(html)
+                  }
+                }
+              } else {
+                $('.have-thousand-dialog').hide()
+				        toPaydataExport();
+              }
+            } else {
+              $('.have-thousand-dialog').hide()
+				      toPaydataExport();
+            }
+          },
+          error: function(err) {
+				    toPaydataExport();
+          }
+        });
 			}
 		})
 	}
 
+  $('.have-thousand-close').click(function (e) { 
+    e.preventDefault();
+    $('.have-thousand-dialog').hide()
+  });
+
 	/*全文搜索 标题搜索 添加类名*/
 	luceneTab();
 

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

@@ -1,4 +1,4 @@
-var vm = new Vue({
+var entSearch = new Vue({
     el: '.vue-search-container',
     delimiters: ['${', '}'],
     components: {
@@ -9,6 +9,7 @@ var vm = new Vue({
     },
     data: function () {
         return {
+            isFree: true,
             foundingTime:'',//成立时间
             provinceMap: provinceMap,
             searchContent: pageInfo.searchContent,
@@ -298,6 +299,9 @@ var vm = new Vue({
         getBIParams () {
           const urlParams = new URLSearchParams(window.location.search)
           return urlParams.get('resource')
+        },
+        company_phone_show :function (){
+            return  this.isLogin && !this.isFree
         }
     },
     created: function () {
@@ -1067,6 +1071,10 @@ var vm = new Vue({
     }
 })
 
+function getPowerComplete () {
+    entSearch.isFree = window.isFree
+}
+
 ;(function () {
     var backUpLoginCallback = logic
     logic = function (data, num) {

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

@@ -340,6 +340,7 @@ function checkBigStatus () {
       if (res && res.data) {
         window.memberStatus = res.data.memberStatus
         window.memberPower = res.data.power
+        window.customers = res.data.customers
         window.vipStatus = res.data.vipStatus // 是否是超级订阅用户
         window.isFree = res.data.isFree // 是否是免费用户
         window.freeFile = res.data.freeFile // 免费用户 是否体验过 0:未体验过 -1:体验过

+ 3 - 3
src/web/staticres/wx_dataExport/css/dataExport.css

@@ -169,12 +169,12 @@ html .page .elseChoose .elseChooseList {
 
 html .page .elseChoose .elseChooseList ul li {
   padding: 0 .4rem;
-  height: .88rem;
-  line-height: .88rem;
+  /* height: .88rem;
+  line-height: .88rem; */
   background: #fff;
   font-size: 0.3rem;
   color: #1d1d1d;
-  margin-bottom: .24rem;
+  /* margin-bottom: .24rem; */
 }
 
 html .page .elseChoose .elseChooseList ul li a {

+ 3 - 0
src/web/templates/big-member/wx/page_unit_portrayal.html

@@ -37,6 +37,7 @@
     <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/unit_portrayal.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/mainSearch/css/j-icons.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/common-module/forward-share/css/forward.css?v={{Msg "seo" "version"}}'/>
+  <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/common-module/dataExport/css/popup-data-export.css?v={{Msg "seo" "version"}}'/>
   <style>
         .skeleton{
             height: 100%;
@@ -786,6 +787,7 @@
             </van-tab>
         </van-tabs>
       </div>
+      <popup-data-export ref="popup_dataExport" @next="next_export"></popup-data-export>
     </div>
   <div id="jyKeepComponent">
     <keep-component ref="vKeepComponent" @on-change-keep="changeKeepStatus" :bid="nowOpenBid" :first="false"></keep-component>
@@ -819,6 +821,7 @@
 <script src='{{Msg "seo" "cdn"}}/big-member/js/unit_portrayal.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Msg "seo" "cdn"}}/common-module/keep-tags/keep-tags-template.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Msg "seo" "cdn"}}/common-module/keep-tags/keep-ent-tags-template.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/common-module/dataExport/components/popup-data-export.js?v={{Msg "seo" "version"}}'></script>
 <script>
   // 收藏组件
   var vKeepComponent = new Vue({

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

@@ -187,6 +187,29 @@
                         </div>
                     </div>
                 </div>
+                <!-- 超出两万条弹框提示 -->
+                <div class="custom-dialog have-thousand-dialog" style="display: none;">
+                  <div class="mask"></div>
+                  <div class="dialog-container">
+                    <div class="dialog-header">
+                      <h3 class="dialog-title">温馨提示</h3>
+                      <i class="el-icon-close have-thousand-close" @click="setCloseDialog"></i>
+                      <!-- <i class="j-icon icon-delete-gray" style="width: 24px;height: 24px;"></i> -->
+                    </div>
+                    <div class="dialog-content">
+                      <span>您选择的数据超过了导出数据最大值<span style="color: #2ABED1;">20,000</span> ,请优化条件后导出。您也可联系客服:400-108-6670 ,或添加<span style="color: #2ABED1;">客服微信</span></span>
+                      <div class="custom-wx"></div>
+                      <p style="color: #1D1D1D;">客服微信</p>
+                      <button class="continue-export-btn">继续导出20000条</button>
+                      <div class="dialog-checkbox">
+                        <!-- <span id="checkBoxjy" class="bif-checkbox iconfont" @click="setCheckBox(this, 'open')"></span> -->
+                        <!-- <i class="el-icon-check" @click="setCheckBox(this, 'close')" style="display: none;color: #fff;background-color: #2ABED1;"></i> -->
+                        <el-checkbox v-model="exportChecked">后续不再提醒</el-checkbox>
+                        <!-- <label class="cheBoxjy-label" for="myCheckbox">后续不再提醒</label> -->
+                      </div>
+                    </div>
+                  </div>
+                </div>
                 <div class="collect-list-content no-select">
                     <div class="list collect-line-list" v-loading="listState.loading" v-show="listState.listType === 'line'">
                         <div class="list-item flex" :class="{ visited: item.visited }" v-for="(item, index) in listState.list" :key="item._id">

+ 7 - 1
src/web/templates/frontRouter/wx/collection/sess/ent_portrait.html

@@ -27,6 +27,7 @@
         <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/common-module/forward-share/css/forward.css?v={{Msg "seo" "version"}}'/>
         <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/ent_portrait.css?v={{Msg "seo" "version"}}' />
         <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/mainSearch/css/j-icons.css?v={{Msg "seo" "version"}}' />
+        <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/common-module/dataExport/css/popup-data-export.css?v={{Msg "seo" "version"}}'/>
 </head>
 <style>
     .vip_openDialog{
@@ -167,7 +168,10 @@
                             </div>
                             <div class="card-column organization-code">
                                 <div class="ent-info-label">联系方式</div>
-                                <div class="ent-info-text">${entBaseInfo.phone ? entBaseInfo.phone : '-'}</div>
+                                <div class="ent-info-text">
+                                    <p>${entBaseInfo.phone ? entBaseInfo.phone : '-'}</p>
+                                    <p class="highlight-text" v-show="phoneUnlockTip" @click="goToUnlock">解锁查看</p>
+                                </div>
                             </div>
                         </div>
                         <div class="card-row">
@@ -651,6 +655,7 @@
                 </div>
             </div>
         </div>
+        <popup-data-export ref="popup_dataExport" @next="next_export"></popup-data-export>
     </div>
   <div id="jyKeepComponent">
     <keep-component ref="vKeepComponent" @on-change-keep="changeKeepStatus" :bid="nowOpenBid" :first="false"></keep-component>
@@ -677,6 +682,7 @@
 <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/ent_portrait.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Msg "seo" "cdn"}}/common-module/keep-tags/keep-tags-template.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Msg "seo" "cdn"}}/common-module/keep-tags/keep-ent-tags-template.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/common-module/dataExport/components/popup-data-export.js?v={{Msg "seo" "version"}}'></script>
 <script>
   // 收藏组件
   var vKeepComponent = new Vue({

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

@@ -24,6 +24,7 @@
     <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/j-icons.css?v={{Msg "seo" "version"}}'>
     <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}' />
     <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/bidstatus-update/css/bid-status-update.css?v={{Msg "seo" "version"}}'></link>
+    <link rel="stylesheet" type="text/css" href='{{Msg "seo" "cdn"}}/common-module/dataExport/css/popup-data-export.css?v={{Msg "seo" "version"}}'/>
 </head>
 <style>
   .list-mian{
@@ -180,6 +181,7 @@
       <van-popup class="j-container" :style="popupHeight" v-model="showBidStatus" round position="bottom">
         <bid-status-node @cancel-update="cancelUpdate" @save-success="saveSuccess" :project-cell-info="projectCellInfo" @set-height="setHeight"></bid-status-node>
       </van-popup>
+      <popup-data-export ref="popup_dataExport" @next="next_export"></popup-data-export>
     </div>
   </div>
   <!--S-当前页面的资源-->
@@ -196,6 +198,7 @@
   <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/visited.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/common-module/bidstatus-update/js/bid-status-update.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/index-wx.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/dataExport/components/popup-data-export.js?v={{Msg "seo" "version"}}'></script>
   <script>
     // 数据包默认选中企业需请求默认企业接口
     try {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 752 - 21
src/web/templates/pc/dataExport_sieve.html


+ 1 - 1
src/web/templates/pc/entsearchindex.html

@@ -403,7 +403,7 @@
                                         <div class="i-label">成立日期:</div>
                                         <div class="i-text">${ item.establishStamp ? new Date(item.establishStamp * 1000).pattern('yyyy-MM-dd') : '-' }</div>
                                     </div>
-                                    <div class="ei-r-info-item">
+                                    <div class="ei-r-info-item" v-if="company_phone_show">
                                         <div class="i-label">联系方式:</div>
                                         <div class="i-text">${ item.company_phone ? item.company_phone : '-' }</div>
                                     </div>

+ 40 - 0
src/web/templates/pc/supsearch.html

@@ -9,6 +9,8 @@
   <meta content="招标搜索" theme="light" name="enable-header"/>
   <meta content="330" name="data-backside"/>
   {{include "/common/pnc.html"}}
+  <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/dataExport/css/font_624651_bjdvktmum68.css?v={{Msg "seo" "version"}}">
+  <link href='{{Msg "seo" "cdn"}}/dataExport/css/j-icons.css?v={{Msg "seo" "version"}}' rel="stylesheet">
   <link href='{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}' rel="stylesheet">
   <link href='{{Msg "seo" "cdn"}}/css/dev2/reset_pc.css?v={{Msg "seo" "version"}}' rel="stylesheet">
   <link href='{{Msg "seo" "cdn"}}/css/dev2/biddingSearch.css?v={{Msg "seo" "version"}}' rel="stylesheet">
@@ -1748,6 +1750,27 @@
         </div>
       </div>
     </div>
+    <!-- 超出两万条弹框提示 -->
+    <div class="custom-dialog have-thousand-dialog" style="display: none;">
+      <div class="mask"></div>
+      <div class="dialog-container">
+        <div class="dialog-header">
+          <h3 class="dialog-title">温馨提示</h3>
+          <i class="el-icon-close have-thousand-close"></i>
+          <!-- <i class="j-icon icon-delete-gray" style="width: 24px;height: 24px;"></i> -->
+        </div>
+        <div class="dialog-content">
+          <span>您选择的数据超过了导出数据最大值<span style="color: #2ABED1;">20,000</span> ,请优化条件后导出。您也可联系客服:400-108-6670 ,或添加<span style="color: #2ABED1;">客服微信</span></span>
+          <div class="custom-wx"></div>
+          <p style="color: #1D1D1D;">客服微信</p>
+          <button onclick="toPaydataExport()" class="continue-export-btn">继续导出20000条</button>
+          <div class="dialog-checkbox">
+            <span id="checkBoxjy" class="bif-checkbox iconfont"></span>
+            <label class="cheBoxjy-label" for="myCheckbox">后续不再提醒</label>
+          </div>
+        </div>
+      </div>
+    </div>
     <!-- 订阅弹框 -->
     <el-dialog custom-class="sub-key-dialog" top="20vh" title="订阅搜索词" :close-on-click-modal="false" :close-on-press-escape="false" width="380" :center="true" :show-close="false" :visible.sync="subDialog">
       <div class="sub-tips">
@@ -1939,6 +1962,23 @@
       $('.tab-item-ent-search').show()
       $('.tab-item-buyer-search').show()
     }
+
+    // 数据导出后续不再提示复选框
+    $('.bif-checkbox').on('click', function () {
+        $('.bif-checkbox').toggleClass('hideBf');
+        const haveClassBF = $('.bif-checkbox').hasClass('hideBf')
+        $.ajax({
+          type: 'POST',
+          url: '/front/dataExport/setDontPromptAgain',
+          contentType: 'application/x-www-form-urlencoded',
+          data: {
+            status: haveClassBF ? '1' : 0
+          },
+          success: function(res) {
+
+          }
+        })
+    })
     window.loginCallback = function () {//登录成功回调
       // @2023/9/26 未登录限制搜索条件
       $(".no-login-mask").remove()

+ 323 - 22
src/web/templates/weixin/dataExport/dataExport.html

@@ -7,12 +7,15 @@
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
     <title>数据导出</title>
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/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">-->
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/dataExport.css?v={{Msg "seo" "version"}}5">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/css/wxbutton.css?v={{Msg "seo" "version"}}1">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css">
+    <link rel="stylesheet"href='{{Msg "seo" "cdn"}}/common-module/dataExport/css/dataExportAppend.css?v={{Msg "seo" "version"}}'/>
     <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.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="//cdn-common.jianyu360.com/cdn/lib/vue/2.6.14/vue.min.js"></script>
@@ -25,9 +28,11 @@
     <script src="https://cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js"></script>
     <script src="{{Msg "seo" "cdn"}}/js/common.js?v={{Msg "seo" "version"}}"></script>
     <script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js"></script>
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
     <!--2.10.4-->
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}"/>
     <script type="text/javascript" src="{{Msg "seo" "cdn"}}/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/common-module/js/mapJSON.js?v={{Msg "seo" "version"}}"></script>
 </head>
 <style>
   .j-container {
@@ -83,9 +88,10 @@
         border: 1px solid #CECECE;
         margin: .16rem .13rem;
         border-radius: 0.02rem;
-		    padding-top: 0.14rem;
-    	  padding-bottom: 0.14rem;
-		    padding-left: 0.68rem;
+		padding-top: 0.14rem;
+    	padding-bottom: 0.14rem;
+		padding-left: 0.68rem;
+        line-height: 0.4rem;
     }
     html .page .chooseTime > i{
         position: relative;
@@ -223,15 +229,25 @@
   .swiper-container-horizontal>.swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction{
     top: 80%;
   }
+  [v-cloak] {
+    display: none!important;
+   }
 </style>
 <body class="p13">
-    <div class="page j-container">
+    <div class="page j-container" style="background-color:#F5F6F7;">
       <div class="main j-main">
        <div>
-        <div class="progress">
+        <div class="screeningCondition">
+          <div class="sc-btnContent">
+            <span class="sc-icon" ></span>
+            <div class="sc-btn" ><span class="sc-text">已存筛选&nbsp;</span><span class="sc-num">0</span></div>
+          </div>
+        </div>
+        <div class="progressBox">
+         <div class="progress">
         	<div class="p-item">
         		<p class="p-item-icon" style="background: #2cb7ca;">
-        			<i class="icon iconfont" >&#xe606;</i>
+        			<!-- <i class="icon iconfont" >&#xe606;</i> -->
         		</p>
         		<span class="active">条件筛选</span>
         		<div class="line"></div>
@@ -239,7 +255,7 @@
 
         	<div class="p-item">
         		<p class="p-item-icon">
-        			<i class="icon iconfont">&#xe617;</i>
+        			<!-- <i class="icon iconfont">&#xe617;</i> -->
         		</p>
         		<span>支付订单</span>
         		<div class="line"></div>
@@ -247,12 +263,13 @@
 
         	<div class="p-item">
         		<p class="p-item-icon icon-gray">
-        			<i class="icon iconfont">&#xe616;</i>
+        			<!-- <i class="icon iconfont">&#xe616;</i> -->
         		</p>
         		<span>数据导出</span>
         	</div>
+         </div>
         </div>
-            <div class="tit">
+            <!-- <div class="tit">
               <div class="helpwhat">数据导出可以帮助您做什么<img style="width: 15px; margin-top: -2px; margin-left: 2px;transform: rotate(180deg);" src="/wx_dataExport/images/jt.png"/></div>
               <div class="btn_img" style="display:none;" >
                 <span class="j-icon icon-arrow-top cion_img"></span>
@@ -267,7 +284,7 @@
                 <div class="sieve-cont ">2、准确掌握行业客户、竞争对手、合作伙伴的招投标活动;</div>
                 <div class="sieve-cont mar-bot10">3、轻松挖掘潜在客户、合作伙伴、拓展市场空间。</div>
               </div>
-          </div>
+          </div> -->
          <div>
         <!-- dateChooseStart -->
         <div class="chooseTime">
@@ -278,11 +295,11 @@
                 <li><span data-value="2016_toNow"></span></li>
             </ul>
             <div class="dateMake">
-            	<i class="iconfont icon-rili" id="first"></i>
+            	<!-- <i class="iconfont icon-rili" id="first"></i> -->
                 <input id="starttime" placeholder="开始日期" readonly="readonly">
                 <div class="heng">—</div>
                 <input id="endtime" placeholder="截止日期" readonly="readonly">
-                <i class="iconfont icon-rili" id="second"></i>
+                <!-- <i class="iconfont icon-rili" id="second"></i> -->
             </div>
         </div>
         <!-- dateChooseEnd -->
@@ -293,28 +310,28 @@
                <div class="elseChooseList">
                    <ul>
                        	<li class="list-item">
-							<a href="/front/wx_dataExport/area">
+							<a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/area')">
 	                           <strong class="label">区域</strong>
 	                           <span id="area" class="content"></span>
 	                           <i class="iconfont icon-arrow"></i>
                         	</a>
 						</li>
                        <li class="list-item">
-							<a href="/front/wx_dataExport/industry">
+							<a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/industry')">
 	                        <strong class="label">行业</strong>
                                <span id="industry" class="content"></span>
                                <i class="iconfont icon-arrow"></i>
 	                        </a>
                         </li>
                         <li class="list-item">
-							<a href="/front/wx_dataExport/buyerclass">
+							<a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/buyerclass')">
 	                        <strong class="label" style="width: 2.2rem;">采购单位类型</strong>
                                <span id="buyClass" class="content"></span>
                                <i class="iconfont icon-arrow"></i>
 	                        </a>
 						</li>
                        <li class="list-item">
-							<a href="/front/wx_dataExport/keyWord">
+							<a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/keyWord')">
 	                        	<strong class="label">关键词</strong>
 	                           <span id="keyWord" class="content"></span>
 	                           <i class="iconfont icon-arrow"></i>
@@ -326,24 +343,24 @@
                            <i class="iconfont icon-arrow"></i>
                        </a></li>
 
-                        <li class="list-item"><a href="/front/wx_dataExport/price">
+                        <li class="list-item"><a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/price')">
                             <strong class="label">金额</strong>
                             <span id="price" class="content"></span>
                             <i class="iconfont icon-arrow"></i>
                         </a></li>
 
-                        <li class="list-item"><a href="/front/wx_dataExport/subType">
+                        <li class="list-item"><a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/subType')">
                             <strong class="label">信息类型</strong>
                             <span id="subType" class="content"></span>
                             <i class="iconfont icon-arrow"></i>
                         </a></li>
 
-                       <li class="list-item"><a href="/front/wx_dataExport/buyerEdit">
+                       <li class="list-item"><a href="JavaScript:;" onclick="goChoosedetail('/front/wx_dataExport/buyerEdit')">
                             <strong class="label">采购单位</strong>
                            <span id="buyer" class="content"></span>
                            <i class="iconfont icon-arrow"></i>
                         </a></li>
-                       <li class="list-item"><a href="/front/wx_dataExport/winnerEdit">
+                       <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>
@@ -477,7 +494,7 @@
         </div>
     </div>
     <!-- 多选弹框 -->
-    <div id="checkbox_dialog">
+    <div id="checkbox_dialog" v-cloak>
         <div class="mask" v-show="dialog_show">
             <div class="box">
                 <div class="head"><p>关键词匹配方式</p><img src="{{Msg "seo" "cdn"}}/wx_dataExport/images/icon_delete_gray@2x.png?v={{Msg "seo" "version"}}" alt="" @click.stop="dialog_show=false"></div>
@@ -526,6 +543,149 @@
             }
         });
         //
+           //接口回显逻辑
+           $.ajax({
+        type: 'get',
+        url: '/subscribepay/dataExportPack/screenList',
+        async:sessionStorage.getItem('goScreen') != '1'?false:true,
+        success: function (res) { 
+          if(res.data && res.data.length > 0){
+            $('.sc-num').text(res.data.length)
+            if(sessionStorage.getItem('goScreen') != '1'){
+            localStorage.removeItem('date') 
+            localStorage.removeItem('areaHtml') 
+            localStorage.removeItem('city') 
+            localStorage.removeItem('province') 
+            localStorage.removeItem('area') 
+            localStorage.removeItem('industry')  
+            localStorage.removeItem('buyclass') 
+            localStorage.removeItem('keyWord') 
+            localStorage.removeItem('export_selectType')  
+            localStorage.removeItem('price')  
+            localStorage.removeItem('subType') 
+            localStorage.removeItem('subTypes')   
+            localStorage.removeItem('buyer') 
+            localStorage.removeItem('winner')
+            localStorage.setItem('index','-1') 
+            let val =res.data[0]
+            if(val.publishtime){
+        localStorage.setItem('date',val.publishtime) 
+        }
+        if (val.city || val.area) {
+        let str = ''
+        if (val.area) {
+          str += val.area.replace(/,/g, "、")
+        }
+        if (val.city) {
+          let arr = val.city.split(',')
+          str = str+'、'+ getArea_city(arr)
+        }
+        localStorage.setItem('areaHtml',str)  
+      }
+        if(val.city){
+          localStorage.setItem('city',val.city) 
+          let area = val.city.replace(/,/g, " ")
+          localStorage.setItem('area',area) 
+        }
+        if(val.area){
+          let allcity = ""
+          let str = ""
+          let arr = val.area.split(",")
+          let cityarr =[]
+          if(val.city){
+            str = val.city
+          }
+          arr.forEach(e=>{ // 选整个省下的所有城市
+            cityarr = cityarr.concat(getCitiesFromJSONMap(e))     
+          })
+          allcity = cityarr.toString()
+          localStorage.setItem('province', val.area)
+        if (str) {
+          localStorage.setItem('city', allcity + ',' + str)
+        } else {
+          localStorage.setItem('city', allcity)
+        }
+        let area;
+        if (allcity) {
+          area = allcity + ',' + val.region
+        } else {
+          area = val.region
+        }
+        let areaList = area.split(',') || []
+        areaList.forEach((e, index) => {
+          if(e === '上海' || e === '北京' || e === '天津' || e === '重庆'){
+            areaList[index] = e + '市'
+          }
+          if( e === '台湾'){
+            areaList[index]  = e + '省'
+          }
+        })
+        let areaStr = areaList.join(',')
+        if(areaStr){
+          localStorage.setItem('area', areaStr.replace(/,/g, " "))
+        }
+        }
+        if(!val.area && !val.city){
+          localStorage.setItem('area','全国') 
+          localStorage.setItem('areaHtml','全国') 
+        }
+         console.log(val.industry)
+        if(val.industry){
+          let str = val.industry.replace(/,/g, " ")
+          localStorage.setItem('industry',str)    
+        }else{
+          localStorage.setItem('industry','全部')   
+        }
+        if(val.buyerclass){
+          localStorage.setItem('buyclass',JSON.stringify(val.buyerclass.split(',')))    
+        }else{
+          localStorage.setItem('buyclass','[]')   
+        }
+        if (val.keywords && val.keywords.length > 0) {
+        let keyjson
+        try{
+          keyjson = JSON.parse(val.keywords)
+        }catch(e){
+          keyjson = val.keywords
+        }
+       // keyWord储存本地处理为驼峰式 自助导出页面使用本地回显存取的为驼峰式
+        keyjson.forEach((item) =>{
+          item.keyWord = item.keyword 
+          })
+        localStorage.setItem('keyWord', JSON.stringify(keyjson))
+       } else {
+        localStorage.setItem('keyWord', '[]')
+       }
+        if(val.selectType){
+          localStorage.setItem('export_selectType',selectType_dispose(val.selectType))  
+        }
+        if(val.minprice || val.maxprice){
+          let str = ""
+          str += (val.minprice || '-' )+'万元'+'-'+(val.maxprice || '-')+'万元'
+          localStorage.setItem('price',str)  
+        }else{
+          localStorage.setItem('price','全部')  
+        }
+        if(val.subtype){
+          let str = val.subtype.replace(/,/g, " ")
+          localStorage.setItem('subTypes',str)  
+          localStorage.setItem('subType',str)  
+        }else{
+          localStorage.setItem('subType','全部') 
+        }
+        if(val.buyer){
+          localStorage.setItem('buyer',val.buyer)
+        }
+        if(val.winner){
+          localStorage.setItem('winner',val.winner)
+        }
+       }
+       }
+          sessionStorage.setItem('goScreen','2');
+         },
+         error: function (error) {
+         }
+         })
         $('.match').click(function () {
              //单选原有逻辑
             // $('.match_way').slideDown('slow');
@@ -584,6 +744,7 @@
             $("#starttime").removeClass("timeSelect");
             $("#endtime").removeClass("timeSelect");
             $(".dateMake").css({"color":"#888"});
+            $(".dateMake").removeClass('chooseTimebox')
 			localStorage.removeItem("export_starttime");
            	localStorage.removeItem("export_endtime");
         });
@@ -912,10 +1073,12 @@
                     $("#starttime").addClass("timeSelect");
                     $("#endtime").addClass("timeSelect");
                     $(".dateMake").css({"color":"#24C0D7"});
+                    $(".dateMake").addClass('chooseTimebox')
                     $(".chooseTime ul li").removeClass('active');
 
                     $(".confirm").hide();
                     $(".resetOne").show();
+                    // localStorage.removeItem("date"); // 重新选择日期不在移除date 重新访问页面以提交的时间为准回显
                     localStorage.removeItem("date");
                     localStorage.removeItem("index");
                 }
@@ -934,6 +1097,7 @@
                     $("#endtime").removeClass("timeSelect");
                     $("#starttime").removeClass("timeSelect");
                     $(".dateMake").css({"color":"#000"});
+                    $(".dateMake").removeClass('chooseTimebox')
                     $(".chooseTime > i").css("color","#888");
                     $(".chooseTime ul li").removeClass('active');
                     $(".chooseTime ul li:eq(0)").addClass('active');
@@ -975,10 +1139,12 @@
                     $("#starttime").addClass("timeSelect");
                     $("#endtime").addClass("timeSelect");
                     $(".dateMake").css({"color":"#24C0D7"});
+                    $(".dateMake").addClass('chooseTimebox')
                     $(".chooseTime ul li").removeClass('active');
 
                     $(".confirm").hide();
                     $(".resetOne").show();
+                    // localStorage.removeItem("date"); // 重新选择日期不在移除date 重新访问页面以提交的时间为准回显
                     localStorage.removeItem("date");
                     localStorage.removeItem("index");
                 }
@@ -997,6 +1163,7 @@
                     $("#endtime").removeClass("timeSelect");
                     $("#starttime").removeClass("timeSelect");
                     $(".dateMake").css({"color":"#000"});
+                    $(".dateMake").removeClass('chooseTimebox')
                     $(".chooseTime > i").css("color","#888");
                     $(".chooseTime ul li").removeClass('active');
                     $(".chooseTime ul li:eq(0)").addClass('active');
@@ -1018,6 +1185,7 @@
             $("#starttime").addClass("timeSelect");
             $("#endtime").addClass("timeSelect");
             $(".dateMake").css({"color":"#24C0D7"});
+            $(".dateMake").addClass('chooseTimebox')
             $(".chooseTime ul li").removeClass('active');
             $(".confirm").hide();
             $(".resetOne").css('display','flex');
@@ -1035,6 +1203,7 @@
             $("#starttime").addClass("timeSelect");
             $("#endtime").addClass("timeSelect");
             $(".dateMake").css({"color":"#24C0D7"});
+            $(".dateMake").addClass('chooseTimebox')
             $(".chooseTime ul li").removeClass('active');
             $(".confirm").hide();
             $(".resetOne").css('display','flex');
@@ -1046,6 +1215,7 @@
         }
         //
         if(localStorage.date!==undefined && localStorage.date!==""){
+            // localStorage.setItem('index','-1') // 存在提交的date直接回显时间至具体时间组件
             if(localStorage.index !== "-1"){
                 $(".chooseTime ul li.active").removeClass("active");
                 $(".chooseTime ul li").eq(localStorage.index).addClass("active");
@@ -1082,6 +1252,7 @@
                     $("#starttime").addClass("timeSelect");
                     $("#endtime").addClass("timeSelect");
                     $(".dateMake").css({"color":"#24C0D7"});
+                    $(".dateMake").addClass('chooseTimebox')
                     $(".chooseTime ul li").removeClass('active');
                 }
             }
@@ -1093,6 +1264,17 @@
             sessionStorage.removeItem("keyWord");
             sessionStorage.IOSsession = "";
         }
+        $(".screeningCondition .sc-btn").on('click', function () { // 跳转至保存筛选列表页
+            if($('.sc-num').text()=='0'){
+            return
+        }
+        sessionStorage.setItem('goScreen','1');
+         window.location.href = "/jy_mobile/search/filter-history/bidding?from=dataExport";
+       })
+       $(".screeningCondition .sc-icon").on('click', function () { // 调起说明弹框
+        checkboxVm.showDialog({title:'已存筛选说明', message:'数据导出后,会将历史筛选条件保存在已存筛选中。您可从已存筛选中直接选择并使用。'})
+         
+       })
         //
         //筛选条件发送
         $(".saveData").on('click', function () {
@@ -1111,6 +1293,8 @@
             var selectType = "";
             var date = getDate();
 			var comeinfrom = "";
+            var prvinceArr = [];
+            var areaArr = [];
             localStorage.date = date;
             localStorage.removeItem("export_starttime");
             localStorage.removeItem("export_endtime");
@@ -1121,6 +1305,16 @@
             if(localStorage.province!==undefined&&localStorage.province!==""){
                 province = localStorage.province;
             }
+            prvinceArr = province.split(",");
+             areaArr =area.split(" ");
+              
+             let result_city = areaArr.filter(function(item) { // 筛选出未全选的省中的市
+              return !prvinceArr.includes(item);
+             });
+             result_city = result_city.join(",");
+             if(result_city == '全国'){
+                result_city=''
+             }
             if(localStorage.city!==undefined&&localStorage.city!==""){
                 city = localStorage.city;
             }
@@ -1223,7 +1417,7 @@
                     "date":date,
                     "area":area,
                     "province": province,
-                    "city":city,
+                    "city":result_city,
                     "industry":industry,
                     "buyerclass": buyclass,
                     "keyWord":keyWord,
@@ -1245,6 +1439,7 @@
                       if(data._id!==""){
                         // /front/wx_dataExport/submitOrder
                         // window.location.href="/jy_mobile/common/order/create/dataexport?id="+data._id+"&source=d&dataspec="+data_spec;
+                        sessionStorage.setItem('goScreen','1'); // 储存参数 返回页面不使用接口回显使用已存本地存储
                         window.location.href = "/jy_mobile/dataexport/limitpreview/" + data._id + '?type=senior';
                       }
                     }
@@ -1292,6 +1487,7 @@
             $("#starttime").removeClass("timeSelect");
             $("#endtime").removeClass("timeSelect");
             $(".dateMake").css({"color":"#888"});
+            $(".dateMake").removeClass('chooseTimebox')
             $("#starttime").val("");
             $("#endtime").val("");
             //
@@ -1309,6 +1505,7 @@
           r = null;
           return context == null || context == "" || context == "undefined" ? "" : context;
         }
+
         //
         function getDate() {
             var start;
@@ -1391,6 +1588,16 @@
         mounted() {
         },
         methods: {
+            showDialog ({title,message}){
+                this.$dialog({
+                    className:'msgDialog',
+                    title: title,
+                    message: message,
+                    messageAlign:'left',
+                    confirmButtonText: '我知道了',
+                    confirmButtonColor: '#2ABED1'
+                })
+            },
             open_(str){
                 this.list=[
                     {name:'标题',val:false},
@@ -1466,6 +1673,100 @@
         }
       })
     })
+    function selectType_dispose(selectType) {
+            let select = [];
+            if (selectType) {
+                let titleNum = 0
+            selectType.split(',').forEach((v) => {
+        if (v === 'title') {
+          titleNum++
+        }
+      })
+      if(selectType.indexOf("detail") !== -1){
+        if (titleNum > 1) {
+           select.push('标题') 
+         }
+      }else{
+        if (titleNum > 0) {
+           select.push('标题') 
+         }
+      }
+    if (selectType.indexOf("title") !== -1 && selectType.indexOf("detail") !== -1) {
+       select.push('正文')
+    }
+    if (selectType.indexOf("filetext") !== -1) {
+      select.push('附件')
+    }
+    if (selectType.indexOf('purchasing') !== -1 && selectType.indexOf('projectname.pname')) {
+      select.push('项目名称/标的物')
+    }
+    return select.toString()
+    }else{
+      return ''
+    }
+    }
+    function getCitiesFromJSONMap(provinceName) {
+      var temp = null
+      let arr =[]
+      for (var i = 0; i < chinaMapJSON.length; i++) {
+        var findThis = chinaMapJSON[i].name.indexOf(provinceName) !== -1
+        // 如果找到了,就不再循环后面的了
+        if (findThis) {
+          temp = chinaMapJSON[i]
+          break
+        }
+      }
+      temp.city.forEach(function (c) {
+        if(c.name.indexOf('北京') == -1&&c.name.indexOf('上海') == -1&&c.name.indexOf('重庆') == -1&&c.name.indexOf('天津') == -1&&c.name.indexOf('澳门') == -1&&c.name.indexOf('香港') == -1){
+          arr.push(c.name)   
+        }
+               
+       })
+       return arr
+    }
+    function getArea_city(arr) {
+      let obj = {}
+      let haveVal = {}
+      chinaMapJSON.forEach(p => {
+        obj[p.name] = []
+        p.city.forEach(c => {
+          arr.forEach(ele => {
+            if (c.name == ele) {
+              obj[p.name].push(c.name)
+            }
+          })
+        })
+      })
+       console.log(obj)
+       for(let key in obj){
+        if(obj[key].length>0){
+          haveVal[key] = obj[key]
+        }
+       }
+      let str = ""
+      for(let key in haveVal){
+        str += key + '('
+        for(let i=0;i<haveVal[key].length;i++){
+          str += haveVal[key][i]
+          if(i==haveVal[key].length-1){
+            str += ')、'
+          }else{
+            str += '、'
+          }
+        }
+      }
+      str =  str.replace(/省/g, "")
+      str =  str.replace(/维吾尔自治区/g, "")
+      str =  str.replace(/壮族自治区/g, "")
+      str =  str.replace(/自治区/g, "")
+      str =  str.replace(/回族自治区/g, "")
+      return str
+    }
+    function goChoosedetail(url){
+      sessionStorage.setItem('goScreen','1');
+      window.location.href=url;
+            
+    }
 </script>
 	{{include "/common/baiducc.html"}}
 </body>

+ 8 - 1
src/web/templates/weixin/dataExport/dataExport_buyerEdit.html

@@ -10,6 +10,7 @@
 	<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"}}5">
+	<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"></script>
 	{{include "/common/weixin.html"}}
 	<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
@@ -40,7 +41,7 @@
 <div class="keyWord">
 	<div class="enter addkeyWord">
 		<input type="text" class="enterOne" placeholder="采购单位名称" />
-		<div class="btn">
+		<div class="btn fixed-bottom">
 			<button disabled class="save-btn">确认</button>
 			<button class="close">取消</button>
 		</div>
@@ -54,6 +55,10 @@
 		</ul>
 
 	</div>
+	<div class="association-list-box" style="display: none;">
+		<ul class="association-list">
+		</ul>
+	</div>
 </div>
 <div class="addKeyWord">
 	<i class="iconfont icon-tianjia"></i>
@@ -100,6 +105,8 @@
 	}
 
 </script>
+<script src="{{Msg "seo" "cdn"}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}"></script>
+<script src="{{Msg "seo" "cdn"}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
 
 	{{include "/common/baiducc.html"}}
 </body>

+ 8 - 1
src/web/templates/weixin/dataExport/dataExport_buyerInput.html

@@ -10,9 +10,11 @@
     <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"}}3">
+    <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"></script>
     {{include "/common/weixin.html"}}
     <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>
         .keyWord .addKeyWord {
@@ -34,7 +36,7 @@
     <div class="keyWord">
         <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="采购单位名称" />
-        <div class="btn">
+        <div class="btn fixed-bottom">
         <button disabled class="save-btn">确认</button>
         <button class="close">取消</button>
         </div>
@@ -51,6 +53,10 @@
         <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"></script>
@@ -121,6 +127,7 @@
         })
 
     </script>
+    <script src="{{Msg "seo" "cdn"}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
 
 	{{include "/common/baiducc.html"}}
 </body>

+ 9 - 2
src/web/templates/weixin/dataExport/dataExport_winnerEdit.html

@@ -11,8 +11,11 @@
 	<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>
 		.addKeyWord i {
@@ -38,7 +41,7 @@
 	<div class="keyWord">
 		<div class="enter addkeyWord">
 			<input type="text" class="enterOne" placeholder="中标单位名称" />
-			<div class="btn">
+			<div class="btn fixed-bottom">
 				<button class="save-btn" disabled>确认</button>
 				<button class="close">取消</button>
 			</div>
@@ -50,7 +53,10 @@
 			</ul>
 
 		</div>
-
+		<div class="association-list-box" style="display: none;">
+			<ul class="association-list">
+			</ul>
+		</div>
 	</div>
 	<div class="addKeyWord">
 		<i class="iconfont icon-tianjia"></i>
@@ -282,6 +288,7 @@
 		})
 
 	</script>
+	<script src="{{Msg "seo" "cdn"}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
 	{{include "/common/baiducc.html"}}
 	</body>
 

+ 9 - 2
src/web/templates/weixin/dataExport/dataExport_winnerInput.html

@@ -10,9 +10,12 @@
     <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 {
@@ -33,7 +36,7 @@
     <div class="keyWord">
         <div class="enter addkeyWord">
         <input type="text" class="enterOne" placeholder="中标单位名称" />
-        <div class="btn">
+        <div class="btn fixed-bottom">
         <button class="save-btn" disabled>确认</button>
         <button class="close">取消</button>
     </div>
@@ -50,7 +53,10 @@
         </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>
@@ -124,6 +130,7 @@
         })
 
     </script>
+     <script src="{{Msg "seo" "cdn"}}/common-module/dataExport/js/association.js?v={{Msg "seo" "version"}}"></script>
 	{{include "/common/baiducc.html"}}
     </body>
 

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio