wcj vor 6 Jahren
Ursprung
Commit
5d26862a48

+ 15 - 2
src/config.json

@@ -19,7 +19,7 @@
     ],
     "cassandrasize": 5,
     "agreement": "http",
-    "webdomain": "http://webwcj.qmx.top",
+    "webdomain": "http://webky.qmx.top",
     "redirect": {
         "searchinfo": "/jylab/mainSearch",
         "rssset": "/swordfish/historypush",
@@ -243,5 +243,18 @@
 		"address":  "192.168.3.207:3366",
 		"userName": "root",
 		"passWord": "Topnet123"
-	}
+	},
+	"exportData":{
+		"unitPrice_normal":1,
+		"unitPrice_senior":2,
+		"discount":0.8,
+		"orderMinPrice":100,
+		"msgMaxCount":20000
+	},
+	"mail":{
+        "addr": "smtp.exmail.qq.com",
+        "port": 465,
+        "pwd": "ue9Rg9Sf4CVtdm5a",
+        "user": "public03@topnet.net.cn"
+    }
 }

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

@@ -1,10 +1,16 @@
 package front
 
-import "github.com/go-xweb/xweb"
+import (
+	"github.com/go-xweb/xweb"
+	"log"
+	"strings"
+	"encoding/json"
+)
 
 type DataExport struct {
 	*xweb.Action
-	toSieve xweb.Mapper `xweb:"/front/dataExport/toSieve"` //数据导出-条件筛选
+	toSieve   xweb.Mapper `xweb:"/front/dataExport/toSieve"`   //数据导出-条件筛选
+	sieveData xweb.Mapper `xweb:"/front/dataExport/sieveData"` //筛选数据
 }
 
 func init() {
@@ -12,6 +18,71 @@ func init() {
 }
 
 func (d *DataExport) ToSieve() error {
-	d.Render("/pc/dataExport_sieve.html")
+	industrylist, sortArray = getindustrys()
+	d.T["industrylist"] = industrylist
+	d.T["sortArray"] = sortArray
+	d.Render("/pc/dataExport_sieve.html", &d.T)
 	return nil
 }
+
+func (d *DataExport) SieveData() error {
+	publishtime := d.GetString("publishtime")
+	area := d.GetString("area")
+	industry := d.GetString("industry")
+	keyword := d.GetString("keyword")
+	buyer := d.GetString("buyer")
+	winner := d.GetString("winner")
+
+	var areaArr []string
+	var industryArr []string
+	var buyerArr []string
+	var winnerArr []string
+	var keywordList []KeyWord
+
+	if publishtime != "" {
+		log.Println("publishtime", publishtime)
+	}
+	if area != "" {
+		areaArr = strings.Split(area, ",")
+		log.Println("areaArr", areaArr)
+	}
+	if industry != "" {
+		industryArr = strings.Split(industry, ",")
+		log.Println("industryArr", industryArr)
+	}
+	log.Println("keywordParam", keyword)
+	if keyword != "" {
+		err := json.Unmarshal([]byte(keyword), &keywordList)
+		if err != nil {
+			log.Println("keyword param 反序列化异常,查看前后台字段是否对应")
+		} else {
+			log.Println("keywordList", len(keywordList), keywordList)
+		}
+	}
+	if buyer != "" {
+		buyerArr = strings.Split(buyer, ",")
+		log.Println("buyerArr", buyerArr)
+	}
+	if winner != "" {
+		winnerArr = strings.Split(winner, ",")
+		log.Println("winnerArr", winnerArr)
+	}
+
+	sieveCondition := map[string]interface{}{
+		"publishtime": publishtime,
+		"area":        areaArr,
+		"industry":    industryArr,
+		"keyword":     keywordList,
+		"buyer":       buyerArr,
+		"winner":      winnerArr,
+	}
+	reS := mongodb.Save("sieveCondition", sieveCondition)
+	log.Println("save ", reS)
+	return nil
+}
+
+type KeyWord struct {
+	Keyword  string   `json:"keyword"`  //关键词
+	Appended []string `json:"appended"` //附加词
+	Exclude  []string `json:"exclude"`  //排除词
+}

+ 196 - 0
src/jfw/front/dataExport2.go

@@ -0,0 +1,196 @@
+package front
+
+import (
+	"encoding/json"
+	"errors"
+	"jfw/config"
+	"log"
+	"qfw/util"
+	"qfw/util/elastic"
+	qum "qfw/util/mail"
+	"regexp"
+	"strings"
+	"time"
+
+	"github.com/go-xweb/xweb"
+)
+
+var (
+	ExportTable   string = "export_search"
+	ExConf        ExportConfig
+	mailConfigMap map[string]interface{}
+)
+
+func init() {
+	xweb.AddAction(&DataExport2{})
+	//读取配置文件
+	byte_conf, err := json.Marshal(config.Sysconfig["exportData"])
+	if err != nil {
+		log.Panic(err)
+	}
+	err = json.Unmarshal(byte_conf, &ExConf)
+	if err != nil {
+		log.Panic(err)
+	}
+	mailConfigMap = config.Sysconfig["mail"].(map[string]interface{})
+}
+
+type ExportConfig struct {
+	UnitPrice_normal int64   `json:"unitPrice_normal"`
+	UnitPrice_senior int64   `json:"unitPrice_senior"`
+	Discount         float64 `json:"discount"`
+	OrderMinPrice    int64   `json:"orderMinPrice"`
+	MsgMaxCount      int64   `json:"msgMaxCount"`
+}
+
+type DataExport2 struct {
+	*xweb.Action
+	superSearchExport xweb.Mapper `xweb:"/front/dataExport/superSearchExport"`      //数据导出-超级搜索
+	toCreateOrderPage xweb.Mapper `xweb:"/front/dataExport/toCreateOrderPage/(.*)"` //数据导出-订单页面
+	sendMailVerify    xweb.Mapper `xweb:"/front/dataExport/sendMailVerify"`         //发送邮箱验证码
+	checkMailVerify   xweb.Mapper `xweb:"/front/dataExport/checkMailVerify"`        //验证邮箱验证码
+}
+
+func (de *DataExport2) SuperSearchExport() error {
+	openid := util.ObjToString(de.GetSession("s_m_openid"))
+	if openid == "" {
+		return errors.New("未登录")
+	}
+	//接收超级搜索页面参数
+	keywords := de.GetString("keywords")                    //搜索词
+	publishtime := de.GetString("publishtime")              //发布时间
+	area := de.GetString("area")                            //地区
+	subtype := de.GetString("subtype")                      //信息类型
+	minprice := de.GetString("minprice")                    //最低价格
+	maxprice := de.GetString("maxprice")                    //最高价格
+	industry := strings.TrimSpace(de.GetString("industry")) //选中的行业
+	selectType := de.GetString("selectType")                //标题 or 全文
+
+	log.Printf("keywords:%s \n publishtime:%s \n area:%s \n subtype:%s \n minprice:%s \n maxprice:%s \n industry:%s \n selectType:%s \n",
+		keywords, publishtime, area, subtype, minprice, maxprice, industry, selectType)
+
+	data := map[string]interface{}{
+		"keywords":    keywords,
+		"publishtime": publishtime,
+		"area":        area,
+		"subtype":     subtype,
+		"minprice":    minprice,
+		"maxprice":    maxprice,
+		"industry":    industry,
+		"selectType":  selectType,
+		"comeintime":  time.Now().Unix(),
+		"s_openid":    openid,
+	}
+	//存入数据库
+	_id := mongodb.Save(ExportTable, data)
+	log.Println("_id-------", _id)
+	//携带id跳转订单生成页面
+	de.Redirect("/front/dataExport/toCreateOrderPage/" + _id)
+	return nil
+}
+func (de *DataExport2) ToCreateOrderPage(_id string) error {
+	var (
+		query    *map[string]interface{}
+		ok       bool
+		msgCount int64
+		//查询字段
+		keywords    string
+		industry    string
+		minprice    string
+		maxprice    string
+		selectType  string
+		area        string
+		publishtime string
+		subtype     string
+	)
+	openid := util.ObjToString(de.GetSession("s_m_openid"))
+	if openid == "" {
+		return errors.New("未登录")
+	}
+	//query := make(map[string]interface{})
+	if query, ok = mongodb.FindById(ExportTable, _id, nil); !ok {
+		return errors.New("未找到搜索记录")
+	}
+	//查询参数
+	keywords = (*query)["keywords"].(string)
+	industry = (*query)["industry"].(string)
+	minprice = (*query)["minprice"].(string)
+	maxprice = (*query)["maxprice"].(string)
+	subtype = (*query)["subtype"].(string)
+	area = (*query)["area"].(string)
+	selectType = (*query)["selectType"].(string)
+	publishtime = (*query)["publishtime"].(string)
+
+	log.Printf("keywords:%s \n publishtime:%s \n area:%s \n subtype:%s \n minprice:%s \n maxprice:%s \n industry:%s \n selectType:%s \n",
+		keywords, publishtime, area, subtype, minprice, maxprice, industry, selectType)
+
+	if selectType != "" {
+		selectType = "\"" + selectType + "\""
+	}
+
+	qstr := getSearchQuery(keywords, industry, minprice, maxprice, selectType, getBidSearchQuery(area, publishtime, subtype))
+	msgCount = elastic.Count(INDEX, TYPE, qstr)
+
+	if msgCount > ExConf.MsgMaxCount {
+		msgCount = ExConf.MsgMaxCount
+	}
+
+	de.T["msgCount"] = msgCount
+	de.T["msgMaxCount"] = ExConf.MsgMaxCount
+	de.T["discount"] = ExConf.Discount
+	de.T["unitPrice_normal"] = ExConf.UnitPrice_normal
+	de.T["unitPrice_senior"] = ExConf.UnitPrice_senior
+	de.T["orderMinPrice"] = ExConf.OrderMinPrice
+
+	de.Render("/pc/createOrderPage.html", &de.T)
+	return nil
+}
+
+func (de *DataExport2) SendMailVerify() {
+	email := de.GetString("email")
+	if isEmail(email) {
+		lastSendDEVerify := util.Int64All(de.GetSession("CreatEVerifyTime"))
+		timeSpaceing := lastSendDEVerify - time.Now().Unix() + 60*5
+
+		log.Println("~~~~", lastSendDEVerify, timeSpaceing)
+		if lastSendDEVerify == 0 || timeSpaceing < 0 {
+			//生成随机数
+			verifyStr := strings.ToUpper(util.GetComplexRandom(6, 3, 3))
+			de.SetSession("DataExportVerify", verifyStr)
+			de.SetSession("CreatEVerifyTime", time.Now().Unix())
+			log.Println("====================", verifyStr, "====================")
+			//发送邮箱验证码
+			qum.SendMail(&qum.MailAuth{mailConfigMap["addr"].(string), mailConfigMap["port"].(int), mailConfigMap["user"].(string), mailConfigMap["pwd"].(string)}, &qum.Message{"剑鱼招标订阅邮箱校验", "剑鱼招标订阅", []string{email}, "您可以使用此验证码来验证您是该电子邮件地址的所有者。<font size=3>" + verifyStr + "</font>;如果这不是您本人所为,则可能是有人误输了您的电子邮件地址。请勿将此验证码泄露给他人,并且您目前无需执行任何其它操作。"})
+			de.T["success"] = true
+		} else {
+			de.T["success"] = false
+			de.T["errCode"] = 2
+			de.T["time"] = timeSpaceing
+			de.T["errMsg"] = "已发送,5分钟后再尝试"
+		}
+	} else {
+		de.T["success"] = false
+		de.T["errCode"] = 1
+		de.T["errMsg"] = "验证码校验失败"
+	}
+	de.ServeJson(&de.T)
+}
+
+func (de *DataExport2) CheckMailVerify() {
+	emailVerity := de.GetString("emailVerity")
+	DataExportVerify := de.GetSession("DataExportVerify")
+	verityResult := false
+	if emailVerity != "" && emailVerity == DataExportVerify {
+		verityResult = true
+		de.DelSession("DataExportVerify")
+		de.DelSession("CreatEVerifyTime")
+		de.SetSession("EMVerifySucess", true)
+	}
+	de.T["success"] = verityResult
+	de.ServeJson(&de.T)
+}
+
+func isEmail(value string) bool {
+	var emailPattern = regexp.MustCompile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$")
+	return emailPattern.MatchString(value)
+}

+ 4 - 3
src/web/staticres/dataExport/css/payment_order.css

@@ -34,9 +34,9 @@ body { background-color: #F5F5FB; }
 
 #pay .inner .infotitle span i { font-size: 20px; color: #2CB7CA; margin: 0 2px; }
 
-#pay .inner .infotitle em { font-size: 12px; color: #888888; margin-left: 20px; margin-right: 20px; }
+#pay .inner .infotitle em { font-size: 12px; color: #888888; margin-left: 20px; }
 
-#pay .inner .infotitle a { color: #2CB7CA; }
+#pay .inner .infotitle a { color: #2CB7CA; margin-left: 20px; cursor: pointer;}
 
 #pay .inner .infotitle a span { color: #2CB7CA; }
 
@@ -116,6 +116,7 @@ body { background-color: #F5F5FB; }
 
 #pay .inner .info .right .btn button:nth-of-type(1) { background-color: #fff; margin-right: 15px; border: 1px solid #ccc; }
 
-#pay .inner .info .right .btn button:nth-of-type(2) { background-color: #2CB7CA; color: #fff; }
+#pay .inner .info .right .btn button:nth-of-type(2) { color: #fff; }
 
+#pay .no-select{-webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none;}
 /*# sourceMappingURL=payment_order.css.map */

+ 87 - 22
src/web/staticres/dataExport/js/conditions_order.js

@@ -2,6 +2,7 @@
 var selectArea = []
 var selectAreaCity = []
 var selectAreaNow = null
+var selectAreaArr = []
 var keyAllArr = []
 /* 切换市区显示 */
 function toggleDialog(f) {
@@ -16,9 +17,9 @@ function showMoreCity (arr) {
   var box = $('.dialog>.select-area-box')
   var tempHTML = ''
   box.html(tempHTML)
-  console.log('--arr--', arr)
+  // console.log('--arr--', arr)
   arr.forEach(function (value) {
-    console.log('--value--', value.name)
+    // console.log('--value--', value.name)
     tempHTML += '<span class="select-area">' + value.name.replace(/市$/g,'') + '</span>'
   })
   box.html(tempHTML)
@@ -28,22 +29,38 @@ $(document).on('click','span.select-area', function () {
   var dom = $(this)
   var t = dom.text()
   if(t === '全国'){
+    selectArea.forEach(function (value) {
+      delAddBox(value)
+    })
     return addDelBox(t,'#area-del')
   }
   /* 判断来源 */
   var f = dom.parent().parent().hasClass('dialog')
   if(f) {
-    if(selectAreaCity.indexOf(t) !== -1) {
-      selectAreaCity.splice(selectAreaCity.indexOf(t),1)
-    } else {
-      selectAreaCity.push(t)
-    }
+      // console.log(t)
+      if(t === '全省') {
+          // console.log($(this))
+          selectAreaCity = [t]
+          $(this).nextAll().removeClass('select')
+      } else {
+          var tempI = selectAreaCity.indexOf('全省')
+          if(tempI !== -1) {
+            selectAreaCity.splice(tempI,1)
+          }
+          if(selectAreaCity.indexOf(t) !== -1) {
+              selectAreaCity.splice(selectAreaCity.indexOf(t),1)
+          } else {
+              selectAreaCity.push(t)
+          }
+          $(this).parent().children('.select-area:eq(0)').removeClass('select')
+      }
     dom.toggleClass('select')
     return true
   } else {
     if(t !== selectAreaNow) {
       selectAreaCity = []
     }
+    delAddBox('全国')
     selectAreaNow = t
   }
   /* 展开市级 */
@@ -65,7 +82,12 @@ $(document).on('click','span.select-area', function () {
     }
     dom.addClass('click')
     toggleDialog(true)
-    showMoreCity(area.city)
+    var tempA = [{name: '全省'}].concat(area.city)
+      selectAreaArr = area.city.map(function (v) {
+          return v.name.replace(/市$/g,'')
+      })
+      // console.log(area.city);
+      showMoreCity(tempA)
   } else {
     addDelBox(t,'#area-del')
     toggleDialog(false)
@@ -79,12 +101,27 @@ $(document).on('click','.delete-close>i',function () {
   window[arr].splice(index,1)
   dom.remove()
 })
+/*移除delBox*/
+function removeDelBox(select) {
+  $("#area-del").find("div[data-arr='selectArea'][data-val='全国']").remove();
+  if(select=="全国"){
+      if(!Array.isArray(window['selectArea'])) {
+          window['selectArea'] = []
+      }
+      $("#area-del").html("");
+  }else if (select=="全省"){
+      $("#area-del").find("div[data-arr='selectArea'][data-parent='"+select+"']").remove();
+      window['selectArea'].splice()
+  }else{
+
+  }
+}
 /* 添加可删除标签 */
 function addDelBox(str,box,arr,template){
-  console.log('--template,arr--', template,arr)
+  // console.log('--template,arr--', template,arr)
   arr = arr || 'selectArea'
   var tempKey = arr ? 'data-arr="'+arr+'"' : ''
-  template = template || '<div '+tempKey+' class="delete-close">'+str+'<i class="iconfont icon-guanbi"></i></div>'
+  template = template || '<div '+tempKey+' class="delete-close" >'+str+'<i class="iconfont icon-guanbi"></i></div>'
   var tempArr = window[arr]
   if(!Array.isArray(tempArr)) {
     window[arr] = []
@@ -100,9 +137,25 @@ function addDelBox(str,box,arr,template){
 /* 确定选中 */
 function areaSelect (f) {
   if(f) {
-    selectAreaCity.forEach(function (value) {
-      addDelBox(value,'#area-del')
-    })
+      // console.log(selectAreaCity);
+      var sf = selectAreaCity.indexOf('全省')  !== -1
+      if(sf) {
+          selectAreaCity = [selectAreaNow]
+          // console.log('s1',selectArea)
+          selectAreaArr.forEach(function (value) {
+            var tempI = selectArea.indexOf(value)
+            // console.log(value,tempI)
+            if(tempI !== -1) {
+                delAddBox(value)
+            }
+          })
+          addDelBox(selectAreaNow,'#area-del')
+      } else {
+         delAddBox(selectAreaNow)
+          selectAreaCity.forEach(function (value) {
+              addDelBox(value,'#area-del')
+          })
+      }
   } else {
     selectAreaCity = []
   }
@@ -110,6 +163,18 @@ function areaSelect (f) {
   selectAreaNow = null
   toggleDialog(false)
 }
+/* 删除box */
+function delAddBox(n) {
+  $('#area-del .delete-close').each(function () {
+      if($(this).text() === n) {
+        $(this).remove()
+      }
+  })
+  selectArea = []
+  $('#area-del .delete-close').each(function () {
+      selectArea.push($(this).text())
+  })
+}
 /* 输入事件 */
 $(".user-input input").on('input',function () {
   var dom = $(this)
@@ -121,28 +186,28 @@ $(".user-input input").on('input',function () {
   }
 })
 /* 生成子标签 */
-function createCKey(title,arr) {
+function createCKey(title,arr,clazz) {
   if(arr.length === 0) {
     return ''
   }
   var all = arr.map(function (value) {
     return '<span>'+value+'</span>'
   }).join('')
-  return '<div class="text-box float-box"><div class="title">'+title+':</div><div class="title-other float-box">'+all+'</div></div>'
+  return '<div class="text-box float-box '+clazz+'"><div class="title">'+title+':</div><div class="title-other float-box">'+all+'</div></div>'
 }
 /* 添加关键词标签 */
 function createKeyBox(t) {
   var appArr = appendArr
   var exArr = excludeArr
   var key = t
-  var all = createCKey('关键词',[key]) + createCKey('附加词',appArr) + createCKey('排除词',exArr)
+  var all = createCKey('关键词',[key],"key") + createCKey('附加词',appArr,"app") + createCKey('排除词',exArr,"ex")
   var template = '<div data-index="'+keyAllArr.length+'" data-arr="inputDel_0" class="delete-close">'+all+' <i class="iconfont icon-guanbi"></i> </div>'
   return template
 }
 /* 添加可删除Input标签 */
 function addDelInput(t,type) {
   var text = $(t).prev().val()
-  console.log('--text--', text)
+  // console.log('--text--', text)
   var box = 'inputDel_' + type
   var template = null
   var arr = box
@@ -179,7 +244,7 @@ function addOtherInput(t,f) {
   var input = document.createElement('input')
   input.className = 'sm'
   input.placeholder = temp
-  console.log('--$(input)--', $(input))
+  // console.log('--$(input)--', $(input))
   if(f){
     var l = appendArr.length
     $(input).on('input',function () {
@@ -197,12 +262,12 @@ function addOtherInput(t,f) {
 var nowSpan = null
 $(document).on('click','#inputDel_0 .title-other>span',function (e) {
   var xy = $(this).offset()
-  console.log('--xy--', xy)
+  // console.log('--xy--', xy)
   var x = xy.top + 30
   var maxY = $(document).width() - 600
   var y = maxY < xy.left ? maxY : xy.left
   nowSpan = $(this)
-  console.log('--$(this).offset()--', xy)
+  // console.log('--$(this).offset()--', xy)
   var text = $(this).text()
   $('.edit-user-input').children('.up-icon').css({
     left: xy.left - y + 'px'
@@ -211,7 +276,7 @@ $(document).on('click','#inputDel_0 .title-other>span',function (e) {
     top: x + 'px',
     left: y + 'px'
   }).show().children('input').val(text)
-  console.log('--text--', text)
+  // console.log('--text--', text)
 })
 /* 修改关键词标签文字 */
 $(".edit-user-input").click(function (e) {
@@ -236,7 +301,7 @@ function editInput(t,f){
   hideEdit()
 }
 /*行业筛选*/
-industryScreening($(".industry  .industry-content"), $(".industry-content .parent-node"), $("#induAll"), $(".industry .stop"))
+//industryScreening($(".industry  .industry-content"), $(".industry-content .parent-node"), $("#induAll"), $(".industry .stop"))
 /*
  * warpContent 外层元素
  * parentNode  标题父元素

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

@@ -379,7 +379,9 @@ $(function() {
 					$("#bidLogin").modal("show");
 				}else{
 					//已登录跳转订单支付页面
-					
+					$("#zbSeatchT").attr("action","/front/dataExport/superSearchExport");
+					$("#zbSeatchT").removeAttr("onsubmit");
+					$("#zbSeatchT").submit();
 				}
 			}
 		})

+ 251 - 0
src/web/templates/pc/createOrderPage.html

@@ -0,0 +1,251 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_624651_bjdvktmum68.css">
+    <link rel="stylesheet" href="/dataExport/css/reset_pc.css">
+    <link rel="stylesheet" href="/dataExport/css/payment_order.css">
+    <title>支付订单</title>
+</head>
+<body>
+<section id="pay" class="w">
+    <div class="progress">
+        <div class="l c3">
+            1.条件筛选
+        </div>
+        <div class="c b2">
+            2.订单支付
+        </div>
+        <div class="r a1">
+            3.数据导出
+        </div>
+    </div>
+    <div class="inner">
+        <div class="infotitle">
+            <span>当前搜索到<i class="msgCount"></i>条信息</span>
+            <em style="display:none">最大限额20,000条</em>
+            <a class="dataPreview"><span class="iconfont icon-yulan"></span>预览数据</a>
+        </div>
+        <div class="email">
+            <div class="title">导出邮箱地址</div>
+            <div class="input clearfix">
+                <input class="fl em email_input" type="text" placeholder="请输入邮箱地址,用于接收导出的数据">
+                <input class="fl test verity_input" type="text" maxlength="6" placeholder="请输入邮箱验证码">
+                <button class="fl sub sendEmail">获取验证码</button>
+                <div class="fl status clearfix">
+                    <i class="fl iconfont icon-zhengque succ email_check_ok" style="display:none"></i>
+                    <p class="err fl email_err_msg" style="display:none"><i class="iconfont icon-cuowu"></i>您输入的验证码不正确</p>
+                </div>
+            </div>
+        </div>
+        <div class="guige">
+            <div class="title">数据规格<i class="iconfont icon-bangzhu"></i></div>
+            <div class="inner clearfix switch-dataType">
+                <div class="bz no-select">
+                    <p>标准字段包</p>
+                    <p>
+                        <del>{{.T.unitPrice_normal}}元/条</del>&nbsp;<span>{{.T.unitPrice_normal_final}}元/条</span></p>
+                </div>
+                <div class="gj active no-select">
+                    <p><i class="iconfont icon-huangguan"></i>高级字段包</p>
+                    <p>
+                        <del>{{.T.unitPrice_senior}}元/条</del>&nbsp;<span>{{.T.unitPrice_senior_final}}元/条</span></p>
+                </div>
+            </div>
+        </div>
+        <div class="wxpay">
+            <div class="title">支付方式</i></div>
+            <div class="inner clearfix">
+                <div class="wx active no-select">
+                    <span>微信支付</span>
+                </div>
+            </div>
+        </div>
+        <div class="money ">
+            <div class="clearfix">
+                <p class="fr">应付总额:现价 <span class="pay_discount">¥2046</span></p>
+            </div>
+            <div class="clearfix">
+                <p class="fr">原价
+                    <del class="pay_before">¥2090</del>
+                </p>
+            </div>
+        </div>
+        <div class="info clearfix">
+            <div class="fl left">
+                <p>最低起售{{.T.orderMinPrice}}元</p>
+                <p>限额{{.T.msgMaxCount}}条,计价方式唯一</p>
+                <p class="unitPrice_normal_detail">标准字段包:原价1元/条,5折价0.5元/条计费</p>
+                <p class="unitPrice_senior_detail">高级字段包:原价2元/条,5折价1元/条计费</p>
+            </div>
+            <div class="fr right">
+                <p class="clearfix t fr">
+                    <span id="checkBoxjy" class="iconfont"></span>
+                    <i>已阅读并同意<a href="#">《剑鱼服务条款》</a></i>
+
+                </p>
+                <p class="btn">
+                    <button class="dataPreview">预览数据</button>
+                    <button class="toPay" disabled="disabled">确认支付</button>
+                </p>
+            </div>
+        </div>
+    </div>
+</section>
+
+<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
+<script>
+	var msgCount={{.T.msgCount}}
+	var msgMaxCount={{.T.msgMaxCount}}
+	var discount={{.T.discount}}
+	var unitPrice_normal={{.T.unitPrice_normal}}
+	var unitPrice_senior={{.T.unitPrice_senior}}
+	var orderMinPrice={{.T.orderMinPrice}}
+	
+	var finishEmailVerity=false;
+	var dataType=2;
+	$(function () {
+		//数据展示
+		var showCount=FormatNum(msgCount);
+		$(".msgCount").text(showCount);
+		$(".unitPrice_normal_detail").text("标准字段包:原价"+unitPrice_normal+"元/条,"+discount*10+"折价"+unitPrice_normal*discount+"元/条计费");
+		$(".unitPrice_senior_detail").text("高级字段包:原价"+unitPrice_senior+"元/条,"+discount*10+"折价"+unitPrice_senior*discount+"元/条计费");
+		ChangePayMoney();
+		
+		//邮箱验证
+		$(".sendEmail").on("click",function(){
+			var email=$(".email_input").val();
+			if(!/\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(email)){
+				showEmailErr("邮箱格式不正确");
+				return
+			}
+			showEmailErr("");
+			$.post("/front/dataExport/sendMailVerify",{"email":email},function(data){
+				console.log(data)
+				if(data.success){
+					//发送成功
+					sendemailTimer(60*5);
+					$(".sendEmail").attr("disabled","disabled");
+					$(".email_input").attr("disabled","disabled");
+				}else{
+					showEmailErr(data.errMsg)
+					if(data.errCode==2){
+						sendemailTimer(data.time);
+						$(".sendEmail").attr("disabled","disabled");
+						$(".email_input").attr("disabled","disabled");
+					}
+				}
+			},"json")
+		});
+		//校验验证码
+		$(".verity_input").bind("input propertychange",function(){
+			var verity=$(this).val()
+			if(verity.length==6){
+				$.post("/front/dataExport/checkMailVerify",{"emailVerity":verity},function(data){
+					if(data.success){
+						showEmailErr("");
+						finishEmailVerity=true;
+						$(".email_check_ok").css("display","");
+						$(".verity_input").attr("disabled","disabled");
+					}else{
+						showEmailErr("验证码错误");
+					}
+				})
+			}
+		})
+		
+		
+		
+		//是否显示最大条数
+		if(msgCount=msgMaxCount){
+			$(".infotitle em").text("最大限额"+showCount+"条");
+			$(".infotitle em").css("display","");
+		} 
+		
+		//点击阅读条款
+		$('#checkBoxjy').on('click', function () {
+			$(this).toggleClass('hideBf');
+			if($(this).attr("class").indexOf("hideBf")>-1){
+				$(".toPay").css("background-color","#2CB7CA")
+				$(".toPay").removeAttr("disabled");
+			}else{
+				$(".toPay").css("background-color","buttonface")
+				$(".toPay").attr("disabled","disabled");
+			}
+		})
+		
+		//类型切换
+		$(".switch-dataType div").on("click",function(){
+			$($(this).addClass("active").siblings()).removeClass("active")
+			if($(this).attr("class").indexOf("bz")>-1){
+				dataType=1;
+			}else if($(this).attr("class").indexOf("gj")>-1){
+				dataType=2;
+			}
+			ChangePayMoney();
+		})
+		//确认支付
+		$(".toPay").on("click",function(){
+			alert(111)
+		})
+		//数据浏览
+		$(".dataPreview").on("click",function(){window.open("http://baidu.com");})
+		
+	})
+	
+	function FormatNum(n){
+		if(n>=1000){
+			return Math.floor(n/1000)+","+("0000"+n%1000).slice(-3)
+		}
+		return n
+	}
+	
+	function ChangePayMoney(){
+		var shouldPay;beforePay=0;0;
+		if(dataType==1){
+			beforePay=unitPrice_normal*msgCount
+			shouldPay=beforePay*discount;	
+		}else if(dataType==2){
+			beforePay=unitPrice_senior*msgCount
+			shouldPay=beforePay*discount;	
+		}
+		shouldPay=shouldPay>orderMinPrice?shouldPay:orderMinPrice;
+		beforePay=beforePay>orderMinPrice?beforePay:orderMinPrice;
+		$(".pay_discount").text("¥"+shouldPay);
+		$(".pay_before").text("¥"+beforePay)
+	}
+	function showEmailErr(str){
+		if(!finishEmailVerity){
+			$(".email_check_ok").css("display","none");
+		}
+		
+		if(str!=""){
+			$(".email_err_msg").css("display","").html("<i class=\"iconfont icon-cuowu\"></i>"+str);
+		}else{
+			$(".email_err_msg").css("display","none")
+		}
+	}
+	function sendemailTimer(t){
+		$(".sendEmail").css("background","buttonface");
+		$(".sendEmail").text("再次尝试("+t+"s)")
+		r=setInterval(function(){
+			t--;
+			$(".sendEmail").text("再次尝试("+t+"s)")
+			console.log("sss")
+			if(t==0){
+				clearInterval(r)
+				$(".sendEmail").text("获取验证码").css("background","#2CB7CA");
+				if(!finishEmailVerity){
+					$(".sendEmail").removeAttr("disabled");
+					$(".email_input").removeAttr("disabled");
+				}
+				showEmailErr("");
+			}
+		},1000)
+	}
+</script>
+</body>
+</html>

+ 218 - 86
src/web/templates/pc/dataExport_sieve.html

@@ -2,12 +2,19 @@
 <html lang="zh-Hans">
 <head>
     <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <link rel="stylesheet" href="//at.alicdn.com/t/font_624651_c3e1rnkx3cn.css">
     <link rel="stylesheet" href="/dataExport/css/reset_pc.css">
     <link rel="stylesheet" href="/dataExport/css/conditions.css">
+    <script language="javascript" type="text/javascript" src="/My97DatePicker/WdatePicker.js"></script>
     <title>条件筛选</title>
+    <style>
+        .select-date.select {
+            border-color: #2CB7CA;
+            color: #2CB7CA; }
+    </style>
 </head>
 <body>
 <section class="conditions-box w">
@@ -30,13 +37,17 @@
             <div class="left">筛选日期</div>
             <div class="right">
                 <div class="float-box">
-                    <button class="u-select select">2018全年</button>
-                    <button class="u-select">2017全年</button>
-                    <button class="u-select">2017年至今</button>
-                    <button class="u-select">2016年至今</button>
-                    <div class="select-date" data-text="请输入开始日期"></div>
+                    <button class="u-select select" data-value="2018">2018全年</button>
+                    <button class="u-select" data-value="2017">2017全年</button>
+                    <button class="u-select" data-value="2017_toNow">2017年至今</button>
+                    <button class="u-select" data-value="2016_toNow">2016年至今</button>
+                    <div class="select-date" data-text="开始日期"
+                         onClick="WdatePicker({onclearing:function(){onclearing(this)},onpicked:function(dp){picked(dp,this)},onpicking:function(dp){onpicking(dp,this)},dateFmt:'yyyy年MM月dd日',maxDate:'#F{$dp.$D(\'endtime\')}'})"
+                         id="starttime" readonly="true"></div>
                     <div class="split-line">—</div>
-                    <div class="select-date" data-text="请输入结束日期"></div>
+                    <div class="select-date" data-text="结束日期"
+                         onClick="WdatePicker({onclearing:function(){onclearing(this)},onpicked:function(dp){picked(dp,this)},onpicking:function(dp){onpicking(dp,this)},dateFmt:'yyyy年MM月dd日',minDate:'#F{$dp.$D(\'starttime\')}'})"
+                         id="endtime" readonly="true"></div>
                 </div>
             </div>
         </div>
@@ -46,7 +57,25 @@
             <div class="right">
                 <div class="del-box float-box" id="area-del"></div>
                 <div class="select-area-box float-box">
-                    <span class="select-area">全国</span><span>A</span><span class="select-area">安徽</span><span>B</span><span class="select-area">北京</span><span>C</span><span class="select-area">重庆</span><span>F</span><span class="select-area">福建</span><span>G</span><span class="select-area">广东</span><span class="select-area">广西</span><span class="select-area">贵州</span><span class="select-area">甘肃</span><span>H</span><span class="select-area">河北</span><span class="select-area">湖北</span><span class="select-area">黑龙江</span><span class="select-area">海南</span><span class="select-area">河南</span><span class="select-area">湖南</span><span>J</span><span class="select-area">吉林</span><span class="select-area">江苏</span><span class="select-area">江西</span><span>L</span><span class="select-area">辽宁</span><span>N</span><span class="select-area">内蒙古</span><span class="select-area">宁夏</span><span>Q</span><span class="select-area">青海</span><span>S</span><span class="select-area">山西</span><span class="select-area">陕西</span><span class="select-area">上海</span><span class="select-area">山东</span><span class="select-area">四川</span><span>T</span><span class="select-area">天津</span><span>X</span><span class="select-area">西藏</span><span class="select-area">新疆</span><span>Y</span><span class="select-area">云南</span><span>Z</span><span class="select-area">浙江</span>
+                    <span class="select-area">全国</span><span>A</span><span
+                        class="select-area">安徽</span><span>B</span><span
+                        class="select-area">北京</span><span>C</span><span
+                        class="select-area">重庆</span><span>F</span><span
+                        class="select-area">福建</span><span>G</span><span class="select-area">广东</span><span
+                        class="select-area">广西</span><span class="select-area">贵州</span><span
+                        class="select-area">甘肃</span><span>H</span><span class="select-area">河北</span><span
+                        class="select-area">湖北</span><span class="select-area">黑龙江</span><span
+                        class="select-area">海南</span><span class="select-area">河南</span><span
+                        class="select-area">湖南</span><span>J</span><span class="select-area">吉林</span><span
+                        class="select-area">江苏</span><span class="select-area">江西</span><span>L</span><span
+                        class="select-area">辽宁</span><span>N</span><span class="select-area">内蒙古</span><span
+                        class="select-area">宁夏</span><span>Q</span><span
+                        class="select-area">青海</span><span>S</span><span class="select-area">山西</span><span
+                        class="select-area">陕西</span><span class="select-area">上海</span><span
+                        class="select-area">山东</span><span class="select-area">四川</span><span>T</span><span
+                        class="select-area">天津</span><span>X</span><span class="select-area">西藏</span><span
+                        class="select-area">新疆</span><span>Y</span><span
+                        class="select-area">云南</span><span>Z</span><span class="select-area">浙江</span>
                 </div>
                 <div class="dialog" style="display: none">
                     <div class="select-area-box float-box"></div>
@@ -59,7 +88,7 @@
         </div>
         <!--行业-->
         <div class="line-box float-box" style="padding-bottom: 0">
-            <div class="left"  style="padding-top: 8px">行业</div>
+            <div class="left" style="padding-top: 8px">行业</div>
             <div class="right">
                 <div class="industry">
                     <!--收起-->
@@ -67,80 +96,6 @@
                         更多
                     </div>
                     <div class="industry-content">
-                        <span id="induAll" class="active">全部</span>
-                        <i class="diver"></i>
-                        <font class="parent-node ">建筑工程</font>
-                        <font>勘察设计</font>
-                        <font>工程施工</font>
-                        <font>工程监理</font>
-                        <font>材料设备</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">水利水电</font>
-                        <font>水利工程</font>
-                        <font>发电工程</font>
-                        <font>航运工程</font>
-                        <font>其他工程</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">能源化工</font>
-                        <font>原材料</font>
-                        <font>仪器仪表</font>
-                        <font>设备</font>
-                        <font>化工产品</font>
-                        <font>新能源</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">弱电安防</font>
-                        <font>综合布线</font>
-                        <font>智能系统</font>
-                        <font>智能家居</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">信息技术</font>
-                        <font>系统集成及安全</font>
-                        <font>软件开发</font>
-                        <font>运维服务</font>
-                        <font>其他</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">行政办公</font>
-                        <font>办公家具</font>
-                        <font>通用办公设备</font>
-                        <font>专业设备</font>
-                        <font>办公用品</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">机械设备</font>
-                        <font>农业机械 </font>
-                        <font>矿山机械</font>
-                        <font>工程机械</font>
-                        <font>机械零部件 </font>
-                        <font>机床</font>
-                        <font>车辆</font>
-                        <font>其他机械设备</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">交通工程</font>
-                        <font>道路工程 </font>
-                        <font>轨道工程</font>
-                        <font>桥梁工程</font>
-                        <font>隧道工程 </font>
-                        <font>其他工程</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">医疗卫生</font>
-                        <font>设备 </font>
-                        <font>耗材</font>
-                        <font>药品</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">市政设施</font>
-                        <font>市政道路</font>
-                        <font>市政绿化</font>
-                        <font>管网线路</font>
-                        <font>综合项目</font>
-                        <i class="diver"></i>
-                        <font class="parent-node">服务采购</font>
-                        <font>法律咨询</font>
-                        <font>会计服务</font>
-                        <font>物业服务</font>
-                        <font>审计服务</font>
-                        <font>安保服务</font>
-                        <font>物流服务</font>
-                        <font>其他服务</font>
-
                     </div>
                 </div>
             </div>
@@ -170,7 +125,7 @@
                     <div class="up-icon"></div>
                     <input class="sm" type="text" placeholder="请输入修改文字">
                     <button class="sussecc w100" onclick="editInput(this,true)">确定</button>
-                    <button  class="w100" onclick="editInput(this,false)">删除</button>
+                    <button class="w100" onclick="editInput(this,false)">删除</button>
                 </div>
             </div>
         </div>
@@ -196,9 +151,9 @@
                 </div>
             </div>
         </div>
-        <!--确定区域-->
+        <!--确定筛选-->
         <div class="button-box">
-            <button class="sussecc">确定</button>
+            <button class="sussecc" id="sieve">确定</button>
             <button>重置</button>
         </div>
     </div>
@@ -208,4 +163,181 @@
 <script src="/dataExport/js/mapJSON.js"></script>
 <script src="/dataExport/js/conditions_order.js"></script>
 </body>
+<script>
+    var industrylist = {{.T.industrylist}};
+    var sortArray = {{.T.sortArray}};
+    $(function () {
+        //行业
+        var industryhtml = '<span id="induAll" class="active">全部</span>';
+        if (sortArray != null && sortArray.length > 0) {
+            for (var i in sortArray) {
+                var fat = sortArray[i];
+                var childlist = industrylist[fat];
+                industryhtml += '<i class="diver"></i><font class="parent-node">' + fat + '</font>';
+                for (var j in childlist) {
+                    industryhtml += '<font data-value="' + fat + '_' + childlist[j] + '" style="display: none;">' + childlist[j] + '</font>';
+                }
+            }
+            $(".industry-content").html(industryhtml);
+            /*行业筛选*/
+            industryScreening($(".industry  .industry-content"), $(".industry-content .parent-node"), $("#induAll"), $(".industry .stop"));
+        }
+    });
+
+    $(".u-select").click(function () {
+        $(".select-date").removeClass("select");
+        $("#starttime").attr("data-value", "");
+        $("#endtime").attr("data-value", "");
+        $("#starttime").text("");
+        $("#endtime").text("");
+        $("#starttime").attr("data-text", "开始时间");
+        $("#endtime").attr("data-text", "结束时间");
+        //
+        $(".u-select").removeClass("select");
+        $(this).addClass("select");
+    });
+
+    //datepicker start-------------
+    function onpicking(dp, obj) {
+        var time = new Date(dp.cal.newdate.y, dp.cal.newdate.M - 1, dp.cal.newdate.d).getTime() + "";
+        time = time.substring(0, time.length - 3);
+        $(obj).attr("data-text", "");
+        $(obj).attr("data-value", time);
+        if ($("#starttime").attr("data-value") && $("#endtime").attr("data-value")) {
+            $(".u-select").removeClass("select");
+            $(".select-date").addClass("select");
+        }
+    }
+
+    function onclearing(obj) {
+        $(".select-date").removeClass("select");
+        $(obj).attr("data-value", "");
+        if ($(obj).attr("id") == "starttime") {
+            $(obj).attr("data-text", "开始时间");
+        } else {
+            $(obj).attr("data-text", "结束时间");
+        }
+        if (!$("#starttime").attr("data-value") || !$("#endtime").attr("data-value")) {
+            $(".u-select").first().addClass("select");
+        }
+    }
+
+    function picked(dp, obj) {
+    }
+
+    //datepicker end-------------
+
+    //日期
+    function getDate() {
+        var start;
+        var end;
+        if ($(".u-select").hasClass("select")) {
+            var temp = $(".u-select.select").data("value") + "";
+            if (temp) {
+                if (temp.indexOf("_toNow") > 0) {
+                    start = new Date(temp.split("_")[0] + "-01-01 00:00:00").getTime() / 1000;
+                    end = parseInt(new Date().getTime() / 1000);
+                } else {
+                    start = new Date(temp.split("_")[0] + "-01-01 00:00:00").getTime() / 1000;
+                    end = new Date(temp.split("_")[0] + "-12-31 23:59:59").getTime() / 1000;
+                }
+            }
+        } else {
+            start = $("#starttime").data("value");
+            end = $("#endtime").data("value");
+        }
+        return start + "_" + end;
+    }
+
+    //区域
+    function getAreas() {
+        var arr = new Array();
+        $.each($("#area-del").children("div"), function (index, value) {
+            if ($(value).text()) {
+                arr.push($(value).text())
+            }
+        });
+        return arr;
+    }
+
+    //行业
+    function getIndustries() {
+        var arr = new Array();
+        $.each($(".industry-content").children("font[class='active']"), function (index, value) {
+            console.log($(value).data("value"));
+            var obj = $(value);
+            if (obj) {
+                arr.push(obj.data("value"));
+            }
+        });
+        return arr;
+    }
+
+    //关键词
+    function getKeywords() {
+        var re = new Array();
+        $.each($("#inputDel_0").find("div[data-arr='inputDel_0']"), function (index, value) {
+            var obj = $(value);
+            var key = obj.children(".key").find("div:eq(1) span").text();
+            var appArr = new Array();
+            var exArr = new Array();
+            $.each(obj.children(".app").find("div:eq(1) span"), function (i, v) {
+                if ($(v).text()) {
+                    appArr.push($(v).text());
+                }
+            });
+            $.each(obj.children(".ex").find("div:eq(1) span"), function (i, v) {
+                if ($(v).text()) {
+                    exArr.push($(v).text());
+                }
+            });
+            re.push({"keyword": key, "appended": appArr, "exclude": exArr});
+        });
+        return re;
+    }
+
+    //采购单位
+    function getBuyers() {
+        var arr = new Array();
+        $.each($("#inputDel_1").children("div"), function (index, value) {
+            if ($(value).text()) {
+                arr.push($(value).text())
+            }
+        });
+        return arr;
+    }
+
+    //中标单位
+    function getWinners() {
+        var arr = new Array();
+        $.each($("#inputDel_2").children("div"), function (index, value) {
+            if ($(value).text()) {
+                arr.push($(value).text())
+            }
+        });
+        return arr;
+    }
+
+    $("#sieve").click(function () {
+        var date = getDate();
+        var area = getAreas();
+        var industry = getIndustries();
+        var keyword = getKeywords();
+        var buyer = getBuyers();
+        var winner = getWinners();
+
+        var param = {
+            "publishtime": date,
+            "area": area.toString(),
+            "industry": industry.toString(),
+            "keyword": JSON.stringify(keyword),
+            "buyer": buyer.toString(),
+            "winner": winner.toString()
+        };
+        console.log(param);
+        $.post("/front/dataExport/sieveData", param, function (data) {
+
+        }, 'json');
+    });
+</script>
 </html>