ソースを参照

Merge branch 'dev2.8' of http://192.168.3.207:10080/qmx/jy into dev2.8

wangshan 6 年 前
コミット
aa0ec1578d

+ 28 - 1
src/jfw/front/wxMyOrder.go

@@ -44,6 +44,9 @@ func (w *WxMyOrder) MyMenu() error {
 }
 
 func (w *WxMyOrder) ToMyWxOrder() error {
+	if w.Session().Get("userId") == nil {
+		return w.Redirect("/swordfish/about")
+	}
 	return w.Render("/weixin/dataExport/dataExport_toMyOrder.html")
 }
 
@@ -134,7 +137,31 @@ func (w *WxMyOrder) MyOrderPaging() error {
 	} else {
 		queryM["order_status"] = map[string]interface{}{"ne": orderStatus_deleted}
 	}
-	res, haveNextPage, _ := w.Datas(queryM, pageNum)
+	log.Println("pagenum:", pageNum)
+	haveNextPage, res, _ := w.Datas(queryM, pageNum)
+	log.Println(len((res)))
+	if res != nil {
+		for _, v := range res {
+			filter_publishtime := v["filter_publishtime"]
+			if filter_publishtime != nil || filter_publishtime != "" {
+				timeArr := strings.Split(filter_publishtime.(string), "_")
+				if len(timeArr) == 2 {
+					start, err := strconv.ParseInt(timeArr[0], 10, 64)
+					end, erro := strconv.ParseInt(timeArr[1], 10, 64)
+					if err == nil && erro == nil {
+						v["filter_publishtime"] = util.FormatDateByInt64(&start, layout_date) + "-" + util.FormatDateByInt64(&end, layout_date)
+					}
+				}
+			}
+			orderMoney := v["order_money"]
+			if orderMoney != nil {
+				v["order_money"] = float64(orderMoney.(int64)) / 100
+			}
+			if v["id"] != nil && orderMoney != nil && v["order_code"] != nil {
+				v["token"] = public.GetWaitPayToken(v["id"].(int64), int(orderMoney.(int64)), v["order_code"].(string), queryM["user_openid"].(string))
+			}
+		}
+	}
 	w.ServeJson(map[string]interface{}{
 		"haveNextPage": haveNextPage,
 		"res":          res,

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

@@ -1,10 +1,7 @@
 package front
 
 import (
-	"log"
-
 	"github.com/go-xweb/xweb"
-	"gopkg.in/mgo.v2/bson"
 )
 
 type WxDataExport struct {
@@ -15,16 +12,8 @@ type WxDataExport struct {
 	keyWord    xweb.Mapper `xweb:"/front/wx_dataExport/keyWord"`    //关键词
 	price      xweb.Mapper `xweb:"/front/wx_dataExport/price"`      //金额
 	subType    xweb.Mapper `xweb:"/front/wx_dataExport/subType"`    //信息类型
-	buyer      xweb.Mapper `xweb:"/front/wx_dataExport/buyer"`      //采购单位
 	buyerEdit  xweb.Mapper `xweb:"/front/wx_dataExport/buyerEdit"`  //采购单位编辑
-	saveBuyer  xweb.Mapper `xweb:"/front/wx_dataExport/saveBuyer"`  //采购单位保存
-	delBuyer   xweb.Mapper `xweb:"/front/wx_dataExport/delBuyer"`   //采购单位删除
-	editBuyer  xweb.Mapper `xweb:"/front/wx_dataExport/editBuyer"`  //采购单位修改
-	winner     xweb.Mapper `xweb:"/front/wx_dataExport/winner"`     //中标单位
 	winnerEdit xweb.Mapper `xweb:"/front/wx_dataExport/winnerEdit"` //中标单位编辑
-	saveWinner xweb.Mapper `xweb:"/front/wx_dataExport/saveWinner"` //中标单位保存
-	delWinner  xweb.Mapper `xweb:"/front/wx_dataExport/delWinner"`  //中标单位删除
-	editWinner xweb.Mapper `xweb:"/front/wx_dataExport/editWinner"` //中标单位修改
 }
 
 func init() {
@@ -33,11 +22,6 @@ func init() {
 
 //微信数据导出
 func (w *WxDataExport) ToSieve() error {
-	openid := w.GetSession("s_m_openid")
-	buyer, _ := mongodb.Find("buyer", bson.M{"openid": openid}, nil, nil, false, -1, -1)
-	winner, _ := mongodb.Find("winners", bson.M{"openid": openid}, nil, nil, false, -1, -1)
-	w.T["buyer"] = *buyer
-	w.T["winner"] = *winner
 	w.Render("/weixin/dataExport/dataExport.html", &w.T)
 	return nil
 }
@@ -72,115 +56,14 @@ func (w *WxDataExport) SubType() error {
 	return nil
 }
 
-//采购单位
-func (w *WxDataExport) Buyer() error {
-	w.Render("/weixin/dataExport/dataExport_buyer.html")
-	return nil
-}
-
 //采购单位编辑
 func (w *WxDataExport) BuyerEdit() error {
-	openid := w.GetSession("s_m_openid")
-	log.Println("openid", openid)
-	data, ok := mongodb.Find("buyer", bson.M{"openid": openid}, nil, nil, false, -1, -1)
-	if ok && data != nil && len(*data) > 0 {
-		w.T["data"] = *data
-	}
 	w.Render("/weixin/dataExport/dataExport_buyerEdit.html", &w.T)
 	return nil
 }
 
-//采购单位保存
-func (w *WxDataExport) SaveBuyer() error {
-	buyer := w.GetString("buyer")
-	openid := w.GetSession("s_m_openid")
-	if openid != "" && buyer != "" {
-		data := map[string]interface{}{
-			"buyer":  buyer,
-			"openid": openid,
-		}
-		mongodb.Save("buyer", data)
-	}
-	return nil
-}
-
-//采购单位删除
-func (w *WxDataExport) DelBuyer() error {
-	buyer := w.GetString("buyer")
-	openid := w.GetSession("s_m_openid")
-	if openid != "" && buyer != "" {
-		data := map[string]interface{}{
-			"buyer":  buyer,
-			"openid": openid,
-		}
-		mongodb.Del("buyer", data)
-	}
-	return nil
-}
-
-//采购单位修改
-func (w *WxDataExport) EditBuyer() error {
-	buyer := w.GetString("buyer")
-	buyerEdit := w.GetString("buyerEdit")
-	openid := w.GetSession("s_m_openid")
-	if openid != "" && buyer != "" {
-		mongodb.Update("buyer", bson.M{"openid": openid, "buyer": buyer}, bson.M{"$set": bson.M{"buyer": buyerEdit}}, false, false)
-	}
-	return nil
-}
-
-//中标单位
-func (w *WxDataExport) Winner() error {
-	w.Render("/weixin/dataExport/dataExport_winner.html")
-	return nil
-}
-
 //中标单位编辑
 func (w *WxDataExport) WinnerEdit() error {
-	openid := w.GetSession("s_m_openid")
-	data, ok := mongodb.Find("winners", bson.M{"openid": openid}, nil, nil, false, -1, -1)
-	if ok && data != nil && len(*data) > 0 {
-		w.T["data"] = *data
-	}
 	w.Render("/weixin/dataExport/dataExport_winnerEdit.html", &w.T)
 	return nil
 }
-
-//中标单位保存
-func (w *WxDataExport) SaveWinner() error {
-	winner := w.GetString("winner")
-	openid := w.GetSession("s_m_openid")
-	if openid != "" && winner != "" {
-		data := map[string]interface{}{
-			"winner": winner,
-			"openid": openid,
-		}
-		mongodb.Save("winners", data)
-	}
-	return nil
-}
-
-//中标单位删除
-func (w *WxDataExport) DelWinner() error {
-	winner := w.GetString("winner")
-	openid := w.GetSession("s_m_openid")
-	if openid != "" && winner != "" {
-		data := map[string]interface{}{
-			"winner": winner,
-			"openid": openid,
-		}
-		mongodb.Del("winners", data)
-	}
-	return nil
-}
-
-//中标单位修改
-func (w *WxDataExport) EditWinner() error {
-	winner := w.GetString("winner")
-	winnerEdit := w.GetString("winnerEdit")
-	openid := w.GetSession("s_m_openid")
-	if openid != "" && winner != "" {
-		mongodb.Update("winners", bson.M{"openid": openid, "winner": winner}, bson.M{"$set": bson.M{"winner": winnerEdit}}, false, false)
-	}
-	return nil
-}

+ 6 - 6
src/jfw/modules/weixin/src/config.json

@@ -7,14 +7,14 @@
     "weixinrpcport": "8083",
     "webrpcport": "127.0.0.1:8084",
     "jyop_webrpcport": "127.0.0.1:8012",
-    "webdomain": "http://web-jydev-ws.jianyu360.cn",
-    "appid": "wx5b1c6e7cc4dac0e4",
-    "apptoken": "top2015top2015",
-    "appsecret": "b026103ffebd2291b3edb7a269612112",
-    "proxysess": "http://web-jydev-ws.jianyu360.cn/front/sess/%s",
+    "webdomain": "http://web-jydev-xzh.jianyu360.cn",
+    "appid": "wx41a95e706276804d",
+    "apptoken": "topnet2018topnet2018",
+    "appsecret": "1b385c7dd14274c5e0898b9b208580b7",
+    "proxysess": "http://web-jydev-xzh.jianyu360.cn/front/sess/%s",
     "followCompany": 10,
     "welcomemsg": "用剑鱼标讯,所有功能完全免费,\n和传统的会员制说再见!\n\n<a href='%s'>点击这里</a>设置关键词,或直接回复“订阅 关键词”,如“订阅 教学设备”,您将随时随地接收招标信息!\n\n剑鱼标讯,让投标无限可能!",
-    "tpl_subscribe_push_id": "UgDiQfxHKj4kJXOeOV8fslKRyjZeLbaSyU7qc20b5-I",
+    "tpl_subscribe_push_id": "IY_RWWzMlwDK6hcd6RAzTec6qre8n5r8PNOOUM_hgk0",
     "tpl_push_id": "UgDiQfxHKj4kJXOeOV8fslKRyjZeLbaSyU7qc20b5-I",
     "tpl_bidopen_id": "3URB-9evmkJ9wntI8iGMEl8_elSAC3wL3ZrQQX-q0cg",
     "tpl_managernotify_id": "LB0XHcbNQKcbgUdDfDncuJW10jay4EfoJ9j-UVh2j5A",

+ 16 - 5
src/web/staticres/wx_dataExport/js/additionWord.js

@@ -52,6 +52,8 @@ $(function(){
     // 添加 按钮的点击事件
     $('.addkeyWord .btn button').on('click', function(){
         var keyWord = $('.addkeyWord input.enterOne').val()
+        buyerArr.push(keyWord);
+        localStorage.setItem("buyer", buyerArr);
         var html = `<li>
                         <div class="one">
                             <div>
@@ -91,16 +93,25 @@ $(function(){
 
     // 编辑 删除
     $('.showKeyWord').on('click', '.deleteKey', function(e) {
-        $(this).parents('li').remove()
+        var buyer = $(this).parent().prev().find('.key').text();
+        buyerArr.splice($.inArray(buyer, buyerArr),1);
+        localStorage.buyer = buyerArr.toString();
+        $(this).parents('li').remove();
         hasWords()
-        console.log('删除附加词:',$(this).parent().find('span').text())
+        // console.log('删除附加词:',$(this).parent().find('span').text())
     })
     // 编辑 确定
     $('.showKeyWord').on('click', '.ascertainKey', function(e) {
-        var keyWord = $(this).siblings('span').text()
+        var keyWord = $(this).siblings('span').text();
+        var buyer = $(this).parent().prev().find('.key').text();
+        for(var i in buyerArr){
+            if(buyerArr[i] === buyer){
+                buyerArr[i] = keyWord;
+            }
+        }
+        localStorage.buyer = buyerArr.toString();
         $(this).parent().siblings().find('.key').text(keyWord)
         $(this).parent().hide().siblings().show()
-        console.log(keyWord)
     })
 
     //去空格方法
@@ -111,7 +122,7 @@ $(function(){
     //附加词个数
     $('.modify span').keydown(function(){
         var olength = $(this).text().replace(/\s+/g,'').length;
-        console.log(olength)
+        // console.log(olength)
         if(olength >= 100){
             $('.fontLength').show();
             var s = $(this).text().slice(0,100)

+ 127 - 0
src/web/staticres/wx_dataExport/js/exclusiveWord.js

@@ -0,0 +1,127 @@
+$(function(){
+
+    $('.knowBtn').on('click',function(){
+        $(".problemPop").hide()
+    })
+    $(".problem").on('click',function(){
+        $(".problemPop").css("display",'flex');
+    })
+
+    function hasWords () {
+        var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+        if(showKeyWordLength === 0){
+            $(".addkeyWord").show();
+            $(".showKeyWord").hide();
+        } else {
+            $(".addkeyWord").hide();
+            $(".showKeyWord").show();
+        }
+    }
+    hasWords()
+    
+    // 添加按钮
+    $(".addKeyWord i").on('click',function(){
+        $(".addkeyWord").show();
+        $(".showKeyWord").hide();
+    })
+
+    // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+    $('.addkeyWord input.enterOne').on('input', function() {
+        if ($(this).val().length >= 100) {
+            var s = $(this).val().slice(0,100)
+            $(this).val(s)
+
+            weui.toast('排除词不能超过100字', {
+                duration: 2000,
+                className: 'text-overflow100',
+                callback: function(){ console.log('close') }
+            });
+            return
+        }
+
+        var buttonDOM = $(this).siblings().find('button')[0]
+        if ($(this).val().length >= 1) {
+            buttonDOM.style.opacity = 1
+            buttonDOM.removeAttribute("disabled")
+        } else {
+            buttonDOM.style.opacity = .5
+            buttonDOM.setAttribute("disabled", true)
+        }
+    })
+    
+    // 添加 按钮的点击事件
+    $('.addkeyWord .btn button').on('click', function(){
+        var keyWord = $('.addkeyWord input.enterOne').val()
+        var html = `<li>
+                        <div class="one">
+                            <div>
+                                <span>
+                                    <p class="key">${ keyWord }</p>
+                                </span>
+                            </div>
+                            <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                        </div>
+                        <div class="modify">
+                            <span contentEditable="true">${ keyWord }</span>
+                            <button class="deleteKey">删除</button>
+                            <button class="ascertainKey">确定</button>
+                        </div>
+                    </li>`
+        $('.showKeyWord > ul').prepend(html)
+        
+        // 隐藏
+        $(".addkeyWord").hide();
+        $('.showKeyWord').show();
+        $('.enter.addkeyWord > input').val('')
+        var buttonDOM = $('.enter.addkeyWord .btn button')[0]
+        buttonDOM.style.opacity = .5
+        buttonDOM.setAttribute("disabled", true)
+
+    })
+
+    // 编辑
+    $(".showKeyWord").on('click', '.editKeyWord',function(e){
+        $('.modify span').each(function(item){
+            $('.modify span')[0].contentEditable = true
+        })
+        // console.log($(this).parent().siblings().find('span').text())
+        $(this).parent().hide()
+        $(this).parent().siblings().css('display','block')
+    })
+
+    // 编辑 删除
+    $('.showKeyWord').on('click', '.deleteKey', function(e) {
+        $(this).parents('li').remove()
+        hasWords()
+        console.log('删除排除词:',$(this).parent().find('span').text())
+    })
+    // 编辑 确定
+    $('.showKeyWord').on('click', '.ascertainKey', function(e) {
+        var keyWord = $(this).siblings('span').text()
+        $(this).parent().siblings().find('.key').text(keyWord)
+        $(this).parent().hide().siblings().show()
+        console.log(keyWord)
+    })
+
+    //去空格方法
+    String.prototype.trim = function(){
+        return this.replace(/(^\s*)|(\s*$)/g, ' ');
+     }
+
+    //排除词个数
+    $('.modify span').keydown(function(){
+        var olength = $(this).text().replace(/\s+/g,'').length;
+        console.log(olength)
+        if(olength >= 100){
+            $('.fontLength').show();
+            var s = $(this).text().slice(0,100)
+            $(this).text(s)
+            weui.toast('排除词不能超过100字', {
+                duration: 2000,
+                className: 'text-overflow100',
+                callback: function(){ console.log('close') }
+            });
+        }
+    })
+
+})

+ 147 - 25
src/web/staticres/wx_dataExport/js/keyWord.js

@@ -3,7 +3,6 @@ $(function(){
     $(".enterOne").focus(function(){
         $(".btnChoose").show();
     })
-
     $('.knowBtn').on('click',function(){
         $(".problemPop").hide()
     })
@@ -11,50 +10,173 @@ $(function(){
         $(".problemPop").css("display",'flex');
     })
 
-    var showKeyWordLength = $(".showKeyWord ul li").length;
-    if(showKeyWordLength>0){
-        $(".addkeyWord").hide();
-    }
-    else{
-        $(".showKeyWord").show();
+    function hasWords () {
+        var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+        if(showKeyWordLength === 0){
+            $(".addkeyWord").show();
+            $(".showKeyWord").hide();
+        } else {
+            $(".addkeyWord").hide();
+            $(".showKeyWord").show();
+        }
     }
+    hasWords()
+    
     //添加按钮
     $(".addKeyWord i").on('click',function(){
         $(".addkeyWord").show();
         $(".showKeyWord").hide();
     })
 
+    // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+    $('.addkeyWord input.enterOne').on('input', function() {
+        if ($(this).val().length >= 100) {
+            var s = $(this).val().slice(0,100)
+            $(this).val(s)
+
+            weui.toast('关键词不能超过100字', {
+                duration: 2000,
+                className: 'text-overflow100',
+                callback: function(){ console.log('close') }
+            });
+            return
+        }
+
+        var buttonDOM = $(this).siblings()[1].children[0]
+        if ($(this).val().length >= 1) {
+            buttonDOM.style.opacity = 1
+            buttonDOM.removeAttribute("disabled")
+        } else {
+            buttonDOM.style.opacity = .5
+            buttonDOM.setAttribute("disabled", true)
+        }
+    })
+    
+    // $('.exclusion input.enterOne').on('input', function() {
+    //     var buttonDOM = $(this).siblings().find('button')[0]
+    //     if ($(this).val().length >= 1) {
+    //         buttonDOM.style.opacity = 1
+    //         buttonDOM.removeAttribute("disabled")
+    //     } else {
+    //         buttonDOM.style.opacity = .5
+    //         buttonDOM.setAttribute("disabled", true)
+    //     }
+    // })
+    
+    // 添加 按钮的点击事件
+    $('.addkeyWord .btn button').on('click', function(){
+        var keyWord = $('.addkeyWord input.enterOne').val()
+        var html = `<li>
+                        <div class="one">
+                            <div>
+                                <span>
+                                    <strong> 关键词:</strong>
+                                    <p class="key">${ keyWord }</p>
+                                </span>
+                            </div>
+                            <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                        </div>
+                        <div class="modify">
+                            <span contentEditable="true">${ keyWord }</span>
+                            <button class="addAdjunctWord">编辑 附加词</button>
+                            <button class="addExclusion">添加 排除词</button>
+                            <button class="deleteKey">删除</button>
+                            <button class="ascertainKey">确定</button>
+                        </div>
+                    </li>`
+        $('.showKeyWord > ul').prepend(html)
+        
+        // 隐藏
+        $(".addkeyWord").hide();
+        $('.showKeyWord').show();
+        $('.enter.addkeyWord > input').val('')
+        var buttonDOM = $('.enter.addkeyWord .btn button')[0]
+        buttonDOM.style.opacity = .5
+        buttonDOM.setAttribute("disabled", true)
+
+    })
+
     // 编辑
-    $(".editKeyWord").on('click',function(){
+    $(".showKeyWord").on('click', '.editKeyWord',function(e){
         $('.modify span').each(function(item){
             $('.modify span')[0].contentEditable = true
-            console.log($('.modify span')[0].contentEditable)
         })
+        // console.log($(this).parent().siblings().find('span').text())
         $(this).parent().hide()
         $(this).parent().siblings().css('display','block')
     })
 
+    // 编辑删除
+    $('.showKeyWord').on('click', '.deleteKey', function(e) {
+        var jQueryDOM = $(this).parents('li')
+        weui.confirm('确定要删除关键词?', {
+            buttons: [{
+                label: '取消',
+                type: 'default',
+                onClick: function(){ console.log('不删了') }
+            }, {
+                label: '确定',
+                type: 'primary',
+                onClick: function(){
+                    jQueryDOM.remove()
+                    hasWords()
+                }
+            }]
+        });
+        console.log('删除关键词:',$(this).parent().find('span').text())
+
+    })
+    // 编辑确定
+    $('.showKeyWord').on('click', '.ascertainKey', function(e) {
+        var $this = $(this)
+        var keyWord = $(this).siblings('span').text()
+        // weui.confirm('保存关键词?', {
+        //     buttons: [{
+        //         label: '我再想想',
+        //         type: 'default',
+        //         onClick: function(){
+        //             $this.parent().hide().siblings().show()
+        //             console.log('我再想想')
+        //         }
+        //     }, {
+        //         label: '确定保存',
+        //         type: 'primary',
+        //         onClick: function(){
+        //             $this.parent().siblings().find('.key').text(keyWord)
+        //             $this.parent().hide().siblings().show()
+        //             console.log(keyWord)
+        //         }
+        //     }]
+        // });
+        $this.parent().siblings().find('.key').text(keyWord)
+        $this.parent().hide().siblings().show()
+        // console.log(keyWord)
+    })
+
     //去空格方法
-    String.prototype.trim=function(){
+    String.prototype.trim = function(){
         return this.replace(/(^\s*)|(\s*$)/g, ' ');
      }
 
     //关键词个数
-$('.modify span').keydown(function(){
-    var olength = $(this).text().replace(/\s+/g,'').length;
-    console.log(olength)
-    if(olength>100){
-        $('.fontLength').show();
-        $(this)[0].contentEditable = false
-        setTimeout(function(){
-            $('.fontLength').hide()
-        },1000)
-    }
-})
-
-    $(".addExclusion").on('click',function(){
-        $('.exclusion').show();
-        $('.showKeyWord').hide();
+    $('.modify span').keydown(function(){
+        var olength = $(this).text().replace(/\s+/g,'').length;
+        console.log(olength)
+        if(olength >= 100){
+            $('.fontLength').show();
+            var s = $(this).text().slice(0,100)
+            $(this).text(s)
+            weui.toast('关键词不能超过100字', {
+                duration: 2000,
+                className: 'text-overflow100',
+                callback: function(){ console.log('close') }
+            });
+        }
     })
+
+    // $(".addExclusion").on('click',function(){
+    //     $('.exclusion').show();
+    //     $('.showKeyWord').hide();
+    // })
     
 })

+ 1 - 0
src/web/staticres/wx_dataExport/js/weui.min.js

@@ -1,5 +1,6 @@
 /*!
  * weui.js v1.0.0 (https://weui.io)
+ * 文档: https://github.com/Tencent/weui.js/blob/master/docs
  * Copyright 2016, wechat ui team
  * MIT license
  */

+ 597 - 96
src/web/staticres/wx_dataExport/js/zepto.js

@@ -1,7 +1,12 @@
-/* Zepto v1.1.6 - zepto event ajax form ie - zeptojs.com/license */
-
-var Zepto = (function() {
-  var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
+/* Zepto 1.2.0 - zepto event ajax form ie touch fx fx_methods - zeptojs.com/license */
+(function(global, factory) {
+  if (typeof define === 'function' && define.amd)
+    define(function() { return factory(global) })
+  else
+    factory(global)
+}(window, function(window) {
+  var Zepto = (function() {
+  var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,
     document = window.document,
     elementDisplay = {}, classCache = {},
     cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
@@ -23,7 +28,6 @@ var Zepto = (function() {
       'td': tableRow, 'th': tableRow,
       '*': document.createElement('div')
     },
-    readyRE = /complete|loaded|interactive/,
     simpleSelectorRE = /^[\w-]*$/,
     class2type = {},
     toString = class2type.toString,
@@ -49,8 +53,9 @@ var Zepto = (function() {
 
   zepto.matches = function(element, selector) {
     if (!selector || !element || element.nodeType !== 1) return false
-    var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
-                          element.oMatchesSelector || element.matchesSelector
+    var matchesSelector = element.matches || element.webkitMatchesSelector ||
+                          element.mozMatchesSelector || element.oMatchesSelector ||
+                          element.matchesSelector
     if (matchesSelector) return matchesSelector.call(element, selector)
     // fall back to performing a selector:
     var match, parent = element.parentNode, temp = !parent
@@ -72,7 +77,16 @@ var Zepto = (function() {
   function isPlainObject(obj) {
     return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype
   }
-  function likeArray(obj) { return typeof obj.length == 'number' }
+
+  function likeArray(obj) {
+    var length = !!obj && 'length' in obj && obj.length,
+      type = $.type(obj)
+
+    return 'function' != type && !isWindow(obj) && (
+      'array' == type || length === 0 ||
+        (typeof length == 'number' && length > 0 && (length - 1) in obj)
+    )
+  }
 
   function compact(array) { return filter.call(array, function(item){ return item != null }) }
   function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
@@ -114,10 +128,17 @@ var Zepto = (function() {
       $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
   }
 
+  function Z(dom, selector) {
+    var i, len = dom ? dom.length : 0
+    for (i = 0; i < len; i++) this[i] = dom[i]
+    this.length = len
+    this.selector = selector || ''
+  }
+
   // `$.zepto.fragment` takes a html string and an optional tag name
-  // to generate DOM nodes nodes from the given html string.
+  // to generate DOM nodes from the given html string.
   // The generated DOM nodes are returned as an array.
-  // This function can be overriden in plugins for example to make
+  // This function can be overridden in plugins for example to make
   // it compatible with browsers that don't support the DOM fully.
   zepto.fragment = function(html, name, properties) {
     var dom, nodes, container
@@ -150,17 +171,13 @@ var Zepto = (function() {
 
   // `$.zepto.Z` swaps out the prototype of the given `dom` array
   // of nodes with `$.fn` and thus supplying all the Zepto functions
-  // to the array. Note that `__proto__` is not supported on Internet
-  // Explorer. This method can be overriden in plugins.
+  // to the array. This method can be overridden in plugins.
   zepto.Z = function(dom, selector) {
-    dom = dom || []
-    dom.__proto__ = $.fn
-    dom.selector = selector || ''
-    return dom
+    return new Z(dom, selector)
   }
 
   // `$.zepto.isZ` should return `true` if the given object is a Zepto
-  // collection. This method can be overriden in plugins.
+  // collection. This method can be overridden in plugins.
   zepto.isZ = function(object) {
     return object instanceof zepto.Z
   }
@@ -168,7 +185,7 @@ var Zepto = (function() {
   // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
   // takes a CSS selector and an optional context (and handles various
   // special cases).
-  // This method can be overriden in plugins.
+  // This method can be overridden in plugins.
   zepto.init = function(selector, context) {
     var dom
     // If nothing given, return an empty Zepto collection
@@ -244,18 +261,18 @@ var Zepto = (function() {
 
   // `$.zepto.qsa` is Zepto's CSS selector implementation which
   // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
-  // This method can be overriden in plugins.
+  // This method can be overridden in plugins.
   zepto.qsa = function(element, selector){
     var found,
         maybeID = selector[0] == '#',
         maybeClass = !maybeID && selector[0] == '.',
         nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked
         isSimple = simpleSelectorRE.test(nameOnly)
-    return (isDocument(element) && isSimple && maybeID) ?
+    return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById
       ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :
-      (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
+      (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :
       slice.call(
-        isSimple && !maybeID ?
+        isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName
           maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class
           element.getElementsByTagName(selector) : // Or a tag
           element.querySelectorAll(selector) // Or it's not simple, and we need to query all
@@ -328,6 +345,13 @@ var Zepto = (function() {
     return true
   }
 
+  $.isNumeric = function(val) {
+    var num = Number(val), type = typeof val
+    return val != null && type != 'boolean' &&
+      (type != 'string' || val.length) &&
+      !isNaN(num) && isFinite(num) || false
+  }
+
   $.inArray = function(elem, array, i){
     return emptyArray.indexOf.call(array, elem, i)
   }
@@ -341,6 +365,7 @@ var Zepto = (function() {
   $.uuid = 0
   $.support = { }
   $.expr = { }
+  $.noop = function() {}
 
   $.map = function(elements, callback){
     var value, values = [], i, key
@@ -384,14 +409,25 @@ var Zepto = (function() {
   // Define methods that will be available on all
   // Zepto collections
   $.fn = {
+    constructor: zepto.Z,
+    length: 0,
+
     // Because a collection acts like an array
     // copy over these useful array functions.
     forEach: emptyArray.forEach,
     reduce: emptyArray.reduce,
     push: emptyArray.push,
     sort: emptyArray.sort,
+    splice: emptyArray.splice,
     indexOf: emptyArray.indexOf,
-    concat: emptyArray.concat,
+    concat: function(){
+      var i, value, args = []
+      for (i = 0; i < arguments.length; i++) {
+        value = arguments[i]
+        args[i] = zepto.isZ(value) ? value.toArray() : value
+      }
+      return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)
+    },
 
     // `map` and `slice` in the jQuery API work differently
     // from their array counterparts
@@ -403,10 +439,19 @@ var Zepto = (function() {
     },
 
     ready: function(callback){
-      // need to check if document.body exists for IE as that browser reports
-      // document ready when it hasn't yet created the body element
-      if (readyRE.test(document.readyState) && document.body) callback($)
-      else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
+      // don't use "interactive" on IE <= 10 (it can fired premature)
+      if (document.readyState === "complete" ||
+          (document.readyState !== "loading" && !document.documentElement.doScroll))
+        setTimeout(function(){ callback($) }, 0)
+      else {
+        var handler = function() {
+          document.removeEventListener("DOMContentLoaded", handler, false)
+          window.removeEventListener("load", handler, false)
+          callback($)
+        }
+        document.addEventListener("DOMContentLoaded", handler, false)
+        window.addEventListener("load", handler, false)
+      }
       return this
     },
     get: function(idx){
@@ -438,7 +483,8 @@ var Zepto = (function() {
       return $(uniq(this.concat($(selector,context))))
     },
     is: function(selector){
-      return this.length > 0 && zepto.matches(this[0], selector)
+      return typeof selector == 'string' ? this.length > 0 && zepto.matches(this[0], selector) : 
+          selector && this.selector == selector.selector
     },
     not: function(selector){
       var nodes=[]
@@ -488,11 +534,13 @@ var Zepto = (function() {
       return result
     },
     closest: function(selector, context){
-      var node = this[0], collection = false
-      if (typeof selector == 'object') collection = $(selector)
-      while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
-        node = node !== context && !isDocument(node) && node.parentNode
-      return $(node)
+      var nodes = [], collection = typeof selector == 'object' && $(selector)
+      this.each(function(_, node){
+        while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
+          node = node !== context && !isDocument(node) && node.parentNode
+        if (node && nodes.indexOf(node) < 0) nodes.push(node)
+      })
+      return $(nodes)
     },
     parents: function(selector){
       var ancestors = [], nodes = this
@@ -512,7 +560,7 @@ var Zepto = (function() {
       return filtered(this.map(function(){ return children(this) }), selector)
     },
     contents: function() {
-      return this.map(function() { return slice.call(this.childNodes) })
+      return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })
     },
     siblings: function(selector){
       return filtered(this.map(function(i, el){
@@ -601,14 +649,12 @@ var Zepto = (function() {
           var newText = funcArg(this, text, idx, this.textContent)
           this.textContent = newText == null ? '' : ''+newText
         }) :
-        (0 in this ? this[0].textContent : null)
+        (0 in this ? this.pluck('textContent').join("") : null)
     },
     attr: function(name, value){
       var result
       return (typeof name == 'string' && !(1 in arguments)) ?
-        (!this.length || this[0].nodeType !== 1 ? undefined :
-          (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
-        ) :
+        (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :
         this.each(function(idx){
           if (this.nodeType !== 1) return
           if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
@@ -622,11 +668,16 @@ var Zepto = (function() {
     },
     prop: function(name, value){
       name = propMap[name] || name
-      return (1 in arguments) ?
+      return (typeof name == 'string' && !(1 in arguments)) ?
+        (this[0] && this[0][name]) :
         this.each(function(idx){
-          this[name] = funcArg(this, value, idx, this[name])
-        }) :
-        (this[0] && this[0][name])
+          if (isObject(name)) for (key in name) this[propMap[key] || key] = name[key]
+          else this[name] = funcArg(this, value, idx, this[name])
+        })
+    },
+    removeProp: function(name){
+      name = propMap[name] || name
+      return this.each(function(){ delete this[name] })
     },
     data: function(name, value){
       var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()
@@ -638,14 +689,16 @@ var Zepto = (function() {
       return data !== null ? deserializeValue(data) : undefined
     },
     val: function(value){
-      return 0 in arguments ?
-        this.each(function(idx){
+      if (0 in arguments) {
+        if (value == null) value = ""
+        return this.each(function(idx){
           this.value = funcArg(this, value, idx, this.value)
-        }) :
-        (this[0] && (this[0].multiple ?
+        })
+      } else {
+        return this[0] && (this[0].multiple ?
            $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :
            this[0].value)
-        )
+      }
     },
     offset: function(coordinates){
       if (coordinates) return this.each(function(index){
@@ -661,6 +714,8 @@ var Zepto = (function() {
         $this.css(props)
       })
       if (!this.length) return null
+      if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))
+        return {top: 0, left: 0}
       var obj = this[0].getBoundingClientRect()
       return {
         left: obj.left + window.pageXOffset,
@@ -671,13 +726,14 @@ var Zepto = (function() {
     },
     css: function(property, value){
       if (arguments.length < 2) {
-        var computedStyle, element = this[0]
-        if(!element) return
-        computedStyle = getComputedStyle(element, '')
-        if (typeof property == 'string')
-          return element.style[camelize(property)] || computedStyle.getPropertyValue(property)
-        else if (isArray(property)) {
+        var element = this[0]
+        if (typeof property == 'string') {
+          if (!element) return
+          return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)
+        } else if (isArray(property)) {
+          if (!element) return
           var props = {}
+          var computedStyle = getComputedStyle(element, '')
           $.each(property, function(_, prop){
             props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))
           })
@@ -829,8 +885,17 @@ var Zepto = (function() {
     $.fn[operator] = function(){
       // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
       var argType, nodes = $.map(arguments, function(arg) {
+            var arr = []
             argType = type(arg)
-            return argType == "object" || argType == "array" || arg == null ?
+            if (argType == "array") {
+              arg.forEach(function(el) {
+                if (el.nodeType !== undefined) return arr.push(el)
+                else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())
+                arr = arr.concat(zepto.fragment(el))
+              })
+              return arr
+            }
+            return argType == "object" || arg == null ?
               arg : zepto.fragment(arg)
           }),
           parent, copyByClone = this.length > 1
@@ -854,8 +919,10 @@ var Zepto = (function() {
           parent.insertBefore(node, target)
           if (parentInDocument) traverseNode(node, function(el){
             if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
-               (!el.type || el.type === 'text/javascript') && !el.src)
-              window['eval'].call(window, el.innerHTML)
+               (!el.type || el.type === 'text/javascript') && !el.src){
+              var target = el.ownerDocument ? el.ownerDocument.defaultView : window
+              target['eval'].call(target, el.innerHTML)
+            }
           })
         })
       })
@@ -871,7 +938,7 @@ var Zepto = (function() {
     }
   })
 
-  zepto.Z.prototype = $.fn
+  zepto.Z.prototype = Z.prototype = $.fn
 
   // Export internal API functions in the `$.zepto` namespace
   zepto.uniq = uniq
@@ -881,9 +948,14 @@ var Zepto = (function() {
   return $
 })()
 
+
 window.Zepto = Zepto
 window.$ === undefined && (window.$ = Zepto)
 
+
+
+
+
 ;(function($){
   var _zid = 1, undefined,
       slice = Array.prototype.slice,
@@ -1001,7 +1073,7 @@ window.$ === undefined && (window.$ = Zepto)
 
   var returnTrue = function(){return true},
       returnFalse = function(){return false},
-      ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$)/,
+      ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,
       eventMethods = {
         preventDefault: 'isDefaultPrevented',
         stopImmediatePropagation: 'isImmediatePropagationStopped',
@@ -1021,6 +1093,10 @@ window.$ === undefined && (window.$ = Zepto)
         event[predicate] = returnFalse
       })
 
+      try {
+        event.timeStamp || (event.timeStamp = Date.now())
+      } catch (ignored) { }
+
       if (source.defaultPrevented !== undefined ? source.defaultPrevented :
           'returnValue' in source ? source.returnValue === false :
           source.getPreventDefault && source.getPreventDefault())
@@ -1064,7 +1140,7 @@ window.$ === undefined && (window.$ = Zepto)
 
     if (!isString(selector) && !isFunction(callback) && callback !== false)
       callback = data, data = selector, selector = undefined
-    if (isFunction(data) || data === false)
+    if (callback === undefined || data === false)
       callback = data, data = undefined
 
     if (callback === false) callback = returnFalse
@@ -1154,8 +1230,12 @@ window.$ === undefined && (window.$ = Zepto)
 
 })(Zepto)
 
+
+
+
+
 ;(function($){
-  var jsonpID = 0,
+  var jsonpID = +new Date(),
       document = window.document,
       key,
       name,
@@ -1223,6 +1303,12 @@ window.$ === undefined && (window.$ = Zepto)
     ajaxStop(settings)
   }
 
+  function ajaxDataFilter(data, type, settings) {
+    if (settings.dataFilter == empty) return data
+    var context = settings.context
+    return settings.dataFilter.call(context, data, type)
+  }
+
   // Empty function, used as default callback
   function empty() {}
 
@@ -1231,7 +1317,7 @@ window.$ === undefined && (window.$ = Zepto)
 
     var _callbackName = options.jsonpCallback,
       callbackName = ($.isFunction(_callbackName) ?
-        _callbackName() : _callbackName) || ('jsonp' + (++jsonpID)),
+        _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)),
       script = document.createElement('script'),
       originalCallback = window[callbackName],
       responseData,
@@ -1313,7 +1399,11 @@ window.$ === undefined && (window.$ = Zepto)
     // Whether data should be serialized to string
     processData: true,
     // Whether the browser should be allowed to cache GET responses
-    cache: true
+    cache: true,
+    //Used to handle the raw response data of XMLHttpRequest.
+    //This is a pre-filtering function to sanitize the response.
+    //The sanitized response should be returned
+    dataFilter: empty
   }
 
   function mimeToDataType(mime) {
@@ -1333,14 +1423,14 @@ window.$ === undefined && (window.$ = Zepto)
   function serializeData(options) {
     if (options.processData && options.data && $.type(options.data) != "string")
       options.data = $.param(options.data, options.traditional)
-    if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
+    if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType))
       options.url = appendQuery(options.url, options.data), options.data = undefined
   }
 
   $.ajax = function(options){
     var settings = $.extend({}, options || {}),
         deferred = $.Deferred && $.Deferred(),
-        urlAnchor
+        urlAnchor, hashIndex
     for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
 
     ajaxStart(settings)
@@ -1348,11 +1438,13 @@ window.$ === undefined && (window.$ = Zepto)
     if (!settings.crossDomain) {
       urlAnchor = document.createElement('a')
       urlAnchor.href = settings.url
+      // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049
       urlAnchor.href = urlAnchor.href
       settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host)
     }
 
     if (!settings.url) settings.url = window.location.toString()
+    if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex)
     serializeData(settings)
 
     var dataType = settings.dataType, hasPlaceholder = /\?.+=\?/.test(settings.url)
@@ -1400,17 +1492,25 @@ window.$ === undefined && (window.$ = Zepto)
         var result, error = false
         if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
           dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))
-          result = xhr.responseText
 
-          try {
-            // http://perfectionkills.com/global-eval-what-are-the-options/
-            if (dataType == 'script')    (1,eval)(result)
-            else if (dataType == 'xml')  result = xhr.responseXML
-            else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
-          } catch (e) { error = e }
+          if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob')
+            result = xhr.response
+          else {
+            result = xhr.responseText
+
+            try {
+              // http://perfectionkills.com/global-eval-what-are-the-options/
+              // sanitize response accordingly if data filter callback provided
+              result = ajaxDataFilter(result, dataType, settings)
+              if (dataType == 'script')    (1,eval)(result)
+              else if (dataType == 'xml')  result = xhr.responseXML
+              else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
+            } catch (e) { error = e }
+
+            if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred)
+          }
 
-          if (error) ajaxError(error, 'parsererror', xhr, settings, deferred)
-          else ajaxSuccess(result, xhr, settings, deferred)
+          ajaxSuccess(result, xhr, settings, deferred)
         } else {
           ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)
         }
@@ -1423,11 +1523,11 @@ window.$ === undefined && (window.$ = Zepto)
       return xhr
     }
 
-    if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]
-
     var async = 'async' in settings ? settings.async : true
     xhr.open(settings.type, settings.url, async, settings.username, settings.password)
 
+    if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]
+
     for (name in headers) nativeSetHeader.apply(xhr, headers[name])
 
     if (settings.timeout > 0) abortTimeout = setTimeout(function(){
@@ -1514,6 +1614,10 @@ window.$ === undefined && (window.$ = Zepto)
   }
 })(Zepto)
 
+
+
+
+
 ;(function($){
   $.fn.serializeArray = function() {
     var name, type, result = [],
@@ -1551,37 +1655,434 @@ window.$ === undefined && (window.$ = Zepto)
 
 })(Zepto)
 
-;(function($){
-  // __proto__ doesn't exist on IE<11, so redefine
-  // the Z function to use object extension instead
-  if (!('__proto__' in {})) {
-    $.extend($.zepto, {
-      Z: function(dom, selector){
-        dom = dom || []
-        $.extend(dom, $.fn)
-        dom.selector = selector || ''
-        dom.__Z = true
-        return dom
-      },
-      // this is a kludge but works
-      isZ: function(object){
-        return $.type(object) === 'array' && '__Z' in object
-      }
-    })
-  }
 
+
+
+
+;(function(){
   // getComputedStyle shouldn't freak out when called
   // without a valid element as argument
   try {
     getComputedStyle(undefined)
   } catch(e) {
-    var nativeGetComputedStyle = getComputedStyle;
-    window.getComputedStyle = function(element){
+    var nativeGetComputedStyle = getComputedStyle
+    window.getComputedStyle = function(element, pseudoElement){
       try {
-        return nativeGetComputedStyle(element)
+        return nativeGetComputedStyle(element, pseudoElement)
       } catch(e) {
         return null
       }
     }
   }
+})()
+
+
+
+
+
+;(function($){
+  var touch = {},
+    touchTimeout, tapTimeout, swipeTimeout, longTapTimeout,
+    longTapDelay = 750,
+    gesture,
+    down, up, move,
+    eventMap,
+    initialized = false
+
+  function swipeDirection(x1, x2, y1, y2) {
+    return Math.abs(x1 - x2) >=
+      Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down')
+  }
+
+  function longTap() {
+    longTapTimeout = null
+    if (touch.last) {
+      touch.el.trigger('longTap')
+      touch = {}
+    }
+  }
+
+  function cancelLongTap() {
+    if (longTapTimeout) clearTimeout(longTapTimeout)
+    longTapTimeout = null
+  }
+
+  function cancelAll() {
+    if (touchTimeout) clearTimeout(touchTimeout)
+    if (tapTimeout) clearTimeout(tapTimeout)
+    if (swipeTimeout) clearTimeout(swipeTimeout)
+    if (longTapTimeout) clearTimeout(longTapTimeout)
+    touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null
+    touch = {}
+  }
+
+  function isPrimaryTouch(event){
+    return (event.pointerType == 'touch' ||
+      event.pointerType == event.MSPOINTER_TYPE_TOUCH)
+      && event.isPrimary
+  }
+
+  function isPointerEventType(e, type){
+    return (e.type == 'pointer'+type ||
+      e.type.toLowerCase() == 'mspointer'+type)
+  }
+
+  // helper function for tests, so they check for different APIs
+  function unregisterTouchEvents(){
+    if (!initialized) return
+    $(document).off(eventMap.down, down)
+      .off(eventMap.up, up)
+      .off(eventMap.move, move)
+      .off(eventMap.cancel, cancelAll)
+    $(window).off('scroll', cancelAll)
+    cancelAll()
+    initialized = false
+  }
+
+  function setup(__eventMap){
+    var now, delta, deltaX = 0, deltaY = 0, firstTouch, _isPointerType
+
+    unregisterTouchEvents()
+
+    eventMap = (__eventMap && ('down' in __eventMap)) ? __eventMap :
+      ('ontouchstart' in document ?
+      { 'down': 'touchstart', 'up': 'touchend',
+        'move': 'touchmove', 'cancel': 'touchcancel' } :
+      'onpointerdown' in document ?
+      { 'down': 'pointerdown', 'up': 'pointerup',
+        'move': 'pointermove', 'cancel': 'pointercancel' } :
+       'onmspointerdown' in document ?
+      { 'down': 'MSPointerDown', 'up': 'MSPointerUp',
+        'move': 'MSPointerMove', 'cancel': 'MSPointerCancel' } : false)
+
+    // No API availables for touch events
+    if (!eventMap) return
+
+    if ('MSGesture' in window) {
+      gesture = new MSGesture()
+      gesture.target = document.body
+
+      $(document)
+        .bind('MSGestureEnd', function(e){
+          var swipeDirectionFromVelocity =
+            e.velocityX > 1 ? 'Right' : e.velocityX < -1 ? 'Left' : e.velocityY > 1 ? 'Down' : e.velocityY < -1 ? 'Up' : null
+          if (swipeDirectionFromVelocity) {
+            touch.el.trigger('swipe')
+            touch.el.trigger('swipe'+ swipeDirectionFromVelocity)
+          }
+        })
+    }
+
+    down = function(e){
+      if((_isPointerType = isPointerEventType(e, 'down')) &&
+        !isPrimaryTouch(e)) return
+      firstTouch = _isPointerType ? e : e.touches[0]
+      if (e.touches && e.touches.length === 1 && touch.x2) {
+        // Clear out touch movement data if we have it sticking around
+        // This can occur if touchcancel doesn't fire due to preventDefault, etc.
+        touch.x2 = undefined
+        touch.y2 = undefined
+      }
+      now = Date.now()
+      delta = now - (touch.last || now)
+      touch.el = $('tagName' in firstTouch.target ?
+        firstTouch.target : firstTouch.target.parentNode)
+      touchTimeout && clearTimeout(touchTimeout)
+      touch.x1 = firstTouch.pageX
+      touch.y1 = firstTouch.pageY
+      if (delta > 0 && delta <= 250) touch.isDoubleTap = true
+      touch.last = now
+      longTapTimeout = setTimeout(longTap, longTapDelay)
+      // adds the current touch contact for IE gesture recognition
+      if (gesture && _isPointerType) gesture.addPointer(e.pointerId)
+    }
+
+    move = function(e){
+      if((_isPointerType = isPointerEventType(e, 'move')) &&
+        !isPrimaryTouch(e)) return
+      firstTouch = _isPointerType ? e : e.touches[0]
+      cancelLongTap()
+      touch.x2 = firstTouch.pageX
+      touch.y2 = firstTouch.pageY
+
+      deltaX += Math.abs(touch.x1 - touch.x2)
+      deltaY += Math.abs(touch.y1 - touch.y2)
+    }
+
+    up = function(e){
+      if((_isPointerType = isPointerEventType(e, 'up')) &&
+        !isPrimaryTouch(e)) return
+      cancelLongTap()
+
+      // swipe
+      if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||
+          (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
+
+        swipeTimeout = setTimeout(function() {
+          if (touch.el){
+            touch.el.trigger('swipe')
+            touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))
+          }
+          touch = {}
+        }, 0)
+
+      // normal tap
+      else if ('last' in touch)
+        // don't fire tap when delta position changed by more than 30 pixels,
+        // for instance when moving to a point and back to origin
+        if (deltaX < 30 && deltaY < 30) {
+          // delay by one tick so we can cancel the 'tap' event if 'scroll' fires
+          // ('tap' fires before 'scroll')
+          tapTimeout = setTimeout(function() {
+
+            // trigger universal 'tap' with the option to cancelTouch()
+            // (cancelTouch cancels processing of single vs double taps for faster 'tap' response)
+            var event = $.Event('tap')
+            event.cancelTouch = cancelAll
+            // [by paper] fix -> "TypeError: 'undefined' is not an object (evaluating 'touch.el.trigger'), when double tap
+            if (touch.el) touch.el.trigger(event)
+
+            // trigger double tap immediately
+            if (touch.isDoubleTap) {
+              if (touch.el) touch.el.trigger('doubleTap')
+              touch = {}
+            }
+
+            // trigger single tap after 250ms of inactivity
+            else {
+              touchTimeout = setTimeout(function(){
+                touchTimeout = null
+                if (touch.el) touch.el.trigger('singleTap')
+                touch = {}
+              }, 250)
+            }
+          }, 0)
+        } else {
+          touch = {}
+        }
+        deltaX = deltaY = 0
+    }
+
+    $(document).on(eventMap.up, up)
+      .on(eventMap.down, down)
+      .on(eventMap.move, move)
+
+    // when the browser window loses focus,
+    // for example when a modal dialog is shown,
+    // cancel all ongoing events
+    $(document).on(eventMap.cancel, cancelAll)
+
+    // scrolling the window indicates intention of the user
+    // to scroll, not tap or swipe, so cancel all ongoing events
+    $(window).on('scroll', cancelAll)
+
+    initialized = true
+  }
+
+  ;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown',
+    'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(eventName){
+    $.fn[eventName] = function(callback){ return this.on(eventName, callback) }
+  })
+
+  $.touch = { setup: setup }
+
+  $(document).ready(setup)
+})(Zepto)
+
+
+
+
+
+;(function($, undefined){
+  var prefix = '', eventPrefix,
+    vendors = { Webkit: 'webkit', Moz: '', O: 'o' },
+    testEl = document.createElement('div'),
+    supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
+    transform,
+    transitionProperty, transitionDuration, transitionTiming, transitionDelay,
+    animationName, animationDuration, animationTiming, animationDelay,
+    cssReset = {}
+
+  function dasherize(str) { return str.replace(/([A-Z])/g, '-$1').toLowerCase() }
+  function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }
+
+  if (testEl.style.transform === undefined) $.each(vendors, function(vendor, event){
+    if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
+      prefix = '-' + vendor.toLowerCase() + '-'
+      eventPrefix = event
+      return false
+    }
+  })
+
+  transform = prefix + 'transform'
+  cssReset[transitionProperty = prefix + 'transition-property'] =
+  cssReset[transitionDuration = prefix + 'transition-duration'] =
+  cssReset[transitionDelay    = prefix + 'transition-delay'] =
+  cssReset[transitionTiming   = prefix + 'transition-timing-function'] =
+  cssReset[animationName      = prefix + 'animation-name'] =
+  cssReset[animationDuration  = prefix + 'animation-duration'] =
+  cssReset[animationDelay     = prefix + 'animation-delay'] =
+  cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''
+
+  $.fx = {
+    off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
+    speeds: { _default: 400, fast: 200, slow: 600 },
+    cssPrefix: prefix,
+    transitionEnd: normalizeEvent('TransitionEnd'),
+    animationEnd: normalizeEvent('AnimationEnd')
+  }
+
+  $.fn.animate = function(properties, duration, ease, callback, delay){
+    if ($.isFunction(duration))
+      callback = duration, ease = undefined, duration = undefined
+    if ($.isFunction(ease))
+      callback = ease, ease = undefined
+    if ($.isPlainObject(duration))
+      ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration
+    if (duration) duration = (typeof duration == 'number' ? duration :
+                    ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
+    if (delay) delay = parseFloat(delay) / 1000
+    return this.anim(properties, duration, ease, callback, delay)
+  }
+
+  $.fn.anim = function(properties, duration, ease, callback, delay){
+    var key, cssValues = {}, cssProperties, transforms = '',
+        that = this, wrappedCallback, endEvent = $.fx.transitionEnd,
+        fired = false
+
+    if (duration === undefined) duration = $.fx.speeds._default / 1000
+    if (delay === undefined) delay = 0
+    if ($.fx.off) duration = 0
+
+    if (typeof properties == 'string') {
+      // keyframe animation
+      cssValues[animationName] = properties
+      cssValues[animationDuration] = duration + 's'
+      cssValues[animationDelay] = delay + 's'
+      cssValues[animationTiming] = (ease || 'linear')
+      endEvent = $.fx.animationEnd
+    } else {
+      cssProperties = []
+      // CSS transitions
+      for (key in properties)
+        if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
+        else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
+
+      if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
+      if (duration > 0 && typeof properties === 'object') {
+        cssValues[transitionProperty] = cssProperties.join(', ')
+        cssValues[transitionDuration] = duration + 's'
+        cssValues[transitionDelay] = delay + 's'
+        cssValues[transitionTiming] = (ease || 'linear')
+      }
+    }
+
+    wrappedCallback = function(event){
+      if (typeof event !== 'undefined') {
+        if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
+        $(event.target).unbind(endEvent, wrappedCallback)
+      } else
+        $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout
+
+      fired = true
+      $(this).css(cssReset)
+      callback && callback.call(this)
+    }
+    if (duration > 0){
+      this.bind(endEvent, wrappedCallback)
+      // transitionEnd is not always firing on older Android phones
+      // so make sure it gets fired
+      setTimeout(function(){
+        if (fired) return
+        wrappedCallback.call(that)
+      }, ((duration + delay) * 1000) + 25)
+    }
+
+    // trigger page reflow so new elements can animate
+    this.size() && this.get(0).clientLeft
+
+    this.css(cssValues)
+
+    if (duration <= 0) setTimeout(function() {
+      that.each(function(){ wrappedCallback.call(this) })
+    }, 0)
+
+    return this
+  }
+
+  testEl = null
+})(Zepto)
+
+
+
+
+
+;(function($, undefined){
+  var document = window.document,
+    origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle
+
+  function anim(el, speed, opacity, scale, callback) {
+    if (typeof speed == 'function' && !callback) callback = speed, speed = undefined
+    var props = { opacity: opacity }
+    if (scale) {
+      props.scale = scale
+      el.css($.fx.cssPrefix + 'transform-origin', '0 0')
+    }
+    return el.animate(props, speed, null, callback)
+  }
+
+  function hide(el, speed, scale, callback) {
+    return anim(el, speed, 0, scale, function(){
+      origHide.call($(this))
+      callback && callback.call(this)
+    })
+  }
+
+  $.fn.show = function(speed, callback) {
+    origShow.call(this)
+    if (speed === undefined) speed = 0
+    else this.css('opacity', 0)
+    return anim(this, speed, 1, '1,1', callback)
+  }
+
+  $.fn.hide = function(speed, callback) {
+    if (speed === undefined) return origHide.call(this)
+    else return hide(this, speed, '0,0', callback)
+  }
+
+  $.fn.toggle = function(speed, callback) {
+    if (speed === undefined || typeof speed == 'boolean')
+      return origToggle.call(this, speed)
+    else return this.each(function(){
+      var el = $(this)
+      el[el.css('display') == 'none' ? 'show' : 'hide'](speed, callback)
+    })
+  }
+
+  $.fn.fadeTo = function(speed, opacity, callback) {
+    return anim(this, speed, opacity, null, callback)
+  }
+
+  $.fn.fadeIn = function(speed, callback) {
+    var target = this.css('opacity')
+    if (target > 0) this.css('opacity', 0)
+    else target = 1
+    return origShow.call(this).fadeTo(speed, target, callback)
+  }
+
+  $.fn.fadeOut = function(speed, callback) {
+    return hide(this, speed, null, callback)
+  }
+
+  $.fn.fadeToggle = function(speed, callback) {
+    return this.each(function(){
+      var el = $(this)
+      el[
+        (el.css('opacity') == 0 || el.css('display') == 'none') ? 'fadeIn' : 'fadeOut'
+      ](speed, callback)
+    })
+  }
+
 })(Zepto)
+  return Zepto
+}))

+ 201 - 195
src/web/templates/weixin/dataExport/dataExPort.html

@@ -6,14 +6,16 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>数据导出</title>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/dataExport.css">
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/dataExport.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="/js/jquery.js"></script>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/mobiscroll/mobiscroll.min.css">
-    <script src="{{Msg "seo" "cdn"}}/mobiscroll/mobiscroll.min.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/mobiscroll/mobiscroll.min.css?v={{Msg "seo" "version"}}">
+    <script src="{{Msg "seo" "cdn"}}/mobiscroll/mobiscroll.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/js/common.js?v={{Msg "seo" "version"}}"></script>
 </head>
 <style>
     .mbsc-ios .dwbc{
@@ -174,7 +176,8 @@
                             <strong>中标单位</strong>
                            <span id="winner"></span>
                            <i class="iconfont icon-arrow"></i>
-                        </a></li>
+                        </a>
+                        </li>
                    </ul>
                </div>
            </div> 
@@ -185,207 +188,210 @@
         <button>确认</button>
 
     </div>
-    
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js"></script>
-	<script src="{{Msg "seo" "cdn"}}/js/common.js?v={{Msg "seo" "version"}}"></script>
 
-    <script>
-        $(function(){
-            //筛选日期选中
-            $(".chooseTime ul li").click(function(){
-                $(".chooseTime ul li").removeClass('active');
-                $(this).addClass('active');
-            });
+<script>
+    $(function(){
+        //筛选日期选中
+        $(".chooseTime ul li").click(function(){
+            $(".chooseTime ul li").removeClass('active');
+            $(this).addClass('active');
+        });
 
-            //筛选日期自动更新
-            var nowMonth = new Date().getMonth();
-            var nowYear = new Date().getFullYear();
-            if (nowMonth>=2){
-                var autoDate1 = nowYear;
-                var autoDate2 = autoDate1-1;
-                var autoDate3 = autoDate1-2;
-                $(".chooseTime ul li span").eq(0).append(autoDate1+"全年");
-                $(".chooseTime ul li span").eq(1).append(autoDate2+"全年");
-                $(".chooseTime ul li span").eq(2).append(autoDate2+"年至今");
-                $(".chooseTime ul li span").eq(3).append(autoDate3+"年至今");
-                $(".chooseTime ul li span").eq(0).attr("data-value", autoDate1);
-                $(".chooseTime ul li span").eq(1).attr("data-value", autoDate2);
-                $(".chooseTime ul li span").eq(2).attr("data-value", autoDate2+"_toNow");
-                $(".chooseTime ul li span").eq(3).attr("data-value", autoDate3+"_toNow");
-            }else{
-                var autoDate1 = nowYear-1;
-                var autoDate2 = nowYear-2;
-                var autoDate3 = nowYear-3;
-                $(".chooseTime ul li span").eq(0).append(autoDate1+"全年");
-                $(".chooseTime ul li span").eq(1).append(autoDate2+"全年");
-                $(".chooseTime ul li span").eq(2).append(autoDate2+"年至今");
-                $(".chooseTime ul li span").eq(3).append(autoDate3+"年至今");
-                $(".chooseTime ul li span").eq(0).attr("data-value", autoDate1);
-                $(".chooseTime ul li span").eq(1).attr("data-value", autoDate2);
-                $(".chooseTime ul li span").eq(2).attr("data-value", autoDate2+"_toNow");
-                $(".chooseTime ul li span").eq(3).attr("data-value", autoDate3+"_toNow");
-            }
+        //筛选日期自动更新
+        var nowMonth = new Date().getMonth();
+        var nowYear = new Date().getFullYear();
+        if (nowMonth>=2){
+            var autoDate1 = nowYear;
+            var autoDate2 = autoDate1-1;
+            var autoDate3 = autoDate1-2;
+            $(".chooseTime ul li span").eq(0).append(autoDate1+"全年");
+            $(".chooseTime ul li span").eq(1).append(autoDate2+"全年");
+            $(".chooseTime ul li span").eq(2).append(autoDate2+"年至今");
+            $(".chooseTime ul li span").eq(3).append(autoDate3+"年至今");
+            $(".chooseTime ul li span").eq(0).attr("data-value", autoDate1);
+            $(".chooseTime ul li span").eq(1).attr("data-value", autoDate2);
+            $(".chooseTime ul li span").eq(2).attr("data-value", autoDate2+"_toNow");
+            $(".chooseTime ul li span").eq(3).attr("data-value", autoDate3+"_toNow");
+        }else{
+            var autoDate1 = nowYear-1;
+            var autoDate2 = nowYear-2;
+            var autoDate3 = nowYear-3;
+            $(".chooseTime ul li span").eq(0).append(autoDate1+"全年");
+            $(".chooseTime ul li span").eq(1).append(autoDate2+"全年");
+            $(".chooseTime ul li span").eq(2).append(autoDate2+"年至今");
+            $(".chooseTime ul li span").eq(3).append(autoDate3+"年至今");
+            $(".chooseTime ul li span").eq(0).attr("data-value", autoDate1);
+            $(".chooseTime ul li span").eq(1).attr("data-value", autoDate2);
+            $(".chooseTime ul li span").eq(2).attr("data-value", autoDate2+"_toNow");
+            $(".chooseTime ul li span").eq(3).attr("data-value", autoDate3+"_toNow");
+        }
 
-            //日期选择器
-            $("#starttime").mobiscroll().date({
-                theme: "ios",
-                lang: "zh",
-                setText: "确定",
-                clearText: "清空",
+        //日期选择器
+        $("#starttime").mobiscroll().date({
+            theme: "ios",
+            lang: "zh",
+            setText: "确定",
+            clearText: "清空",
 
-                buttons: [
-                    'set',
-                    {
-                        text: '开始日期',
-                        cssClass: 'dwb title',
-                        handler: function(event,inst){
+            buttons: [
+                'set',
+                {
+                    text: '开始日期',
+                    cssClass: 'dwb title',
+                    handler: function(event,inst){
 
-                        }
-                    },
-                    'clear'
-                ],
-                dateFormat: "yyyy年mm月dd日",
-                dateOrder: "yyyymd",
-                timeWheels: "H",
-                timeFormat: "HH时 周DD",
-                dayNames: ["日","一","二","三","四","五","六"],
-                headerText: false,
-                yearSuffix: "年",
-                monthSuffix: "月",
-                daySuffix: "日",
-                showOnTap: false,
-                maxDate:new Date(),
-                onSelect: function (valueText, inst) {//选择时事件(点击确定后),valueText 为选择的时间,
-					var startFlag = true;
-					// 转化时间戳
-					var tval = valueText.replace("年","-").replace("月","-").replace("日","");
-                	var val = new Date(tval).getTime();
-                	// 判空
-					if ($("#endtime").val()!=""){
-						var ete = $("#endtime").val().replace("年","-").replace("月","-").replace("日","");
-						var enddate =  new Date(ete).getTime();        
-						if(val >  enddate){
-							$("#starttime").val("");
-							EasyAlert.show("开始日期不能大于截止日期","",3000);
-						}
-						startFlag =false;
-					}
-					if (startFlag){
-                    	$("#starttime").addClass("timeSelect");
-                    	$("#endtime").addClass("timeSelect");
-                   	 	$(".dateMake").css({"color":"#24C0D7"});
-                    	$(".chooseTime ul li").removeClass('active');
-					}
-					
+                    }
                 },
-                onClear: function (inst) {
-					if ($("#endtime").val()==""){
-                   	 	$("#endtime").removeClass("timeSelect");
-                   	 	$("#starttime").removeClass("timeSelect");
-                    	$(".dateMake").css({"color":"#000"});
-                    	$(".chooseTime > i").css("color","#888");
-						$(".chooseTime ul li:eq(0)").addClass('active');
-					}
+                'clear'
+            ],
+            dateFormat: "yyyy年mm月dd日",
+            dateOrder: "yyyymd",
+            timeWheels: "H",
+            timeFormat: "HH时 周DD",
+            dayNames: ["日","一","二","三","四","五","六"],
+            headerText: false,
+            yearSuffix: "年",
+            monthSuffix: "月",
+            daySuffix: "日",
+            showOnTap: false,
+            maxDate:new Date(),
+            onSelect: function (valueText, inst) {//选择时事件(点击确定后),valueText 为选择的时间,
+                var startFlag = true;
+                // 转化时间戳
+                var tval = valueText.replace("年","-").replace("月","-").replace("日","");
+                var val = new Date(tval).getTime();
+                // 判空
+                if ($("#endtime").val()!=""){
+                    var ete = $("#endtime").val().replace("年","-").replace("月","-").replace("日","");
+                    var enddate =  new Date(ete).getTime();
+                    if(val >  enddate){
+                        $("#starttime").val("");
+                        EasyAlert.show("开始日期不能大于截止日期","",3000);
+                    }
+                    startFlag =false;
+                }
+                if (startFlag){
+                    $("#starttime").addClass("timeSelect");
+                    $("#endtime").addClass("timeSelect");
+                    $(".dateMake").css({"color":"#24C0D7"});
+                    $(".chooseTime ul li").removeClass('active');
                 }
-            });
 
-            $("#endtime").mobiscroll().date({
-                theme: "ios",
-                lang: "zh",
-                setText: "确定",
-                clearText: "清空",
-                buttons: [
-                    'set',
-                    {
-                        text: '截止日期',
-                        cssClass: 'dwb title',
-                        handler: function(event,inst){
-                        }
-                    },
-                    'clear'
-                ],
-                dateFormat: "yyyy年mm月dd日",
-                dateOrder: "yyyymd",
-                timeWheels: "H",
-                timeFormat: "HH时 周DD",
-                dayNames: ["日","一","二","三","四","五","六"],
-                headerText: false,
-                yearSuffix: "年",
-                monthSuffix: "月",
-                daySuffix: "日",
-                showOnTap: false,
-                maxDate:new Date(),
-                onInit: function(inst){
+            },
+            onClear: function (inst) {
+                if ($("#endtime").val()==""){
+                    $("#endtime").removeClass("timeSelect");
+                    $("#starttime").removeClass("timeSelect");
+                    $(".dateMake").css({"color":"#000"});
+                    $(".chooseTime > i").css("color","#888");
+                    $(".chooseTime ul li:eq(0)").addClass('active');
+                }
+            }
+        });
 
+        $("#endtime").mobiscroll().date({
+            theme: "ios",
+            lang: "zh",
+            setText: "确定",
+            clearText: "清空",
+            buttons: [
+                'set',
+                {
+                    text: '截止日期',
+                    cssClass: 'dwb title',
+                    handler: function(event,inst){
+                    }
                 },
-                onSelect: function (valueText, inst) {//选择时事件(点击确定后),valueText 为选择的时间,
-                    //$("#endtime").text("");
-                    //$("#endtime").append("<i class=\"iconfont icon-rili\"></i>"+valueText);
-					var endFlag = true;
-					// 转化时间戳
-					var tval = valueText.replace("年","-").replace("月","-").replace("日","");
-                	var val = new Date(tval).getTime();
-                	// 判空
-					if ($("#starttime").val()!=""){
-						var ste = $("#starttime").val().replace("年","-").replace("月","-").replace("日","");
-						var startdate =  new Date(ste).getTime();   
-						if(val <  startdate){
-							$("#endtime").val("");
-							EasyAlert.show("截止日期不能小于开始日期","",3000);
-						}
-						endFlag =false;
-					}
-					if (endFlag){
-                    	$("#starttime").addClass("timeSelect");
-                    	$("#endtime").addClass("timeSelect");
-                   	 	$(".dateMake").css({"color":"#24C0D7"});
-                    	$(".chooseTime ul li").removeClass('active');
-					}
-                },
-                onClear: function (inst) {
-					if ($("#starttime").val()==""){
-                   	 	$("#endtime").removeClass("timeSelect");
-                   	 	$("#starttime").removeClass("timeSelect");
-                    	$(".dateMake").css({"color":"#000"});
-                    	$(".chooseTime > i").css("color","#888");
-						$(".chooseTime ul li:eq(0)").addClass('active');
-					}
+                'clear'
+            ],
+            dateFormat: "yyyy年mm月dd日",
+            dateOrder: "yyyymd",
+            timeWheels: "H",
+            timeFormat: "HH时 周DD",
+            dayNames: ["日","一","二","三","四","五","六"],
+            headerText: false,
+            yearSuffix: "年",
+            monthSuffix: "月",
+            daySuffix: "日",
+            showOnTap: false,
+            maxDate:new Date(),
+            onInit: function(inst){
+
+            },
+            onSelect: function (valueText, inst) {//选择时事件(点击确定后),valueText 为选择的时间,
+                //$("#endtime").text("");
+                //$("#endtime").append("<i class=\"iconfont icon-rili\"></i>"+valueText);
+                var endFlag = true;
+                // 转化时间戳
+                var tval = valueText.replace("年","-").replace("月","-").replace("日","");
+                var val = new Date(tval).getTime();
+                // 判空
+                if ($("#starttime").val()!=""){
+                    var ste = $("#starttime").val().replace("年","-").replace("月","-").replace("日","");
+                    var startdate =  new Date(ste).getTime();
+                    if(val <  startdate){
+                        $("#endtime").val("");
+                        EasyAlert.show("截止日期不能小于开始日期","",3000);
+                    }
+                    endFlag =false;
+                }
+                if (endFlag){
+                    $("#starttime").addClass("timeSelect");
+                    $("#endtime").addClass("timeSelect");
+                    $(".dateMake").css({"color":"#24C0D7"});
+                    $(".chooseTime ul li").removeClass('active');
                 }
-            });
+            },
+            onClear: function (inst) {
+                if ($("#starttime").val()==""){
+                    $("#endtime").removeClass("timeSelect");
+                    $("#starttime").removeClass("timeSelect");
+                    $(".dateMake").css({"color":"#000"});
+                    $(".chooseTime > i").css("color","#888");
+                    $(".chooseTime ul li:eq(0)").addClass('active');
+                }
+            }
+        });
 
-            $("#starttime").on("click",function(){
-                $("#starttime").mobiscroll('show');
-            });
+        $("#starttime").on("click",function(){
+            $("#starttime").mobiscroll('show');
+        });
 
-            $("#endtime").on("click",function(){
-                $("#endtime").mobiscroll('show');
-            });
-            //
-            var buyerarr = {{.T.buyer}};
-            var winnerarr = {{.T.winner}};
-            var buyerHtml = "";
-            var winnerHtml = "";
-            for (var i in buyerarr) {
-                buyerHtml += buyerarr[i]["buyer"]+ "&nbsp;";
-            }
-            $("#buyer").html(buyerHtml);
-            for (var i in winnerarr) {
-                winnerHtml += winnerarr[i]["winner"]+ "&nbsp;";
-            }
-            $("#winner").html(winnerHtml);
-            //
-            if(localStorage.length>0){
-                var price = localStorage.price;
-                $("#price").text(price);
-                var area = localStorage.area;
-                $("#area").text(area);
-                var industry = localStorage.industry;
-                $("#industry").text(industry);
-                var subType = localStorage.subType;
-                $("#subType").text(subType);
-            }
-        })
-    </script>
+        $("#endtime").on("click",function(){
+            $("#endtime").mobiscroll('show');
+        });
+        //
+        var buyerarr = {{.T.buyer}};
+        var winnerarr = {{.T.winner}};
+        var buyerHtml = "";
+        var winnerHtml = "";
+        for (var i in buyerarr) {
+            buyerHtml += buyerarr[i]["buyer"]+ "&nbsp;";
+        }
+        $("#buyer").html(buyerHtml);
+        for (var i in winnerarr) {
+            winnerHtml += winnerarr[i]["winner"]+ "&nbsp;";
+        }
+        $("#winner").html(winnerHtml);
+        //
+        if(localStorage.length>0){
+            var price = localStorage.price;
+            $("#price").text(price);
+            var area = localStorage.area;
+            $("#area").text(area);
+            var industry = localStorage.industry;
+            $("#industry").text(industry);
+            var subType = localStorage.subType;
+            $("#subType").text(subType);
+            var buyer = localStorage.buyer;
+            var buyers = buyer.replace(/,/g," ");
+            $("#buyer").text(buyers);
+            var winner = localStorage.winner;
+            var winners = winner.replace(/,/g," ");
+            $("#winner").text(winners);
+        }
+    })
+</script>
     
 </body>
 

+ 172 - 65
src/web/templates/weixin/dataExport/dataExport_appended.html

@@ -6,11 +6,11 @@
     <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>附加词</title>
-    <link rel="stylesheet" href="../css/base.css">
-    <link rel="stylesheet" href="../iconfont/iconfont.css">
-    <link rel="stylesheet" href="../css/weui.min.css">
-    <link rel="stylesheet" href="../css/keyWord.css">
-    <script src="../js/rem.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
 </head>
 
 <body>
@@ -28,38 +28,7 @@
         <!-- 添加附加词显示列表 -->
         <div class="showKeyWord">
             <ul>
-                <li>
-                    <div class="one">
-                        <div>
-                            <span>
-                                <p class="key">abcde</p>
-                            </span>
-                        </div>
-                        <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
-                    </div>
-                    <div class="modify">
-                        <span contentEditable="true">abcde</span>
-                        <button class="deleteKey">删除</button>
-                        <button class="ascertainKey">确定</button>
-                    </div>
-                </li>
-
-                <li>
-                    <div class="one">
-                        <div>
-                            <span>
-                                <p class="key">abcde</p>
-                            </span>
-                        </div>
-                        <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
-                    </div>
-                    <div class="modify">
-                        <span contentEditable="true">abcde</span>
-                        <button class="deleteKey">删除</button>
-                        <button class="ascertainKey">确定</button>
-                    </div>
-                </li>
-                
+
             </ul>
 
             <div class="addKeyWord">
@@ -68,37 +37,175 @@
 
         </div>
 
-        <div class="problem">
-            疑问解答 <i class="iconfont icon-wenhao"></i>
-        </div>
+    </div>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script>
+        var appendedArr = [];
+        if(localStorage.appended !== "" && localStorage.appended !== undefined){
+            var appended = localStorage.appended.split(",");
+            appendedArr = appended;
+            var html = "";
+            for(var i in appended){
+                html +=
+                    `<li>
+                            <div class="one">
+                                <div>
+                                    <span>
+                                        <p class="key">${ appended[i] }</p>
+                                    </span>
+                                </div>
+                                <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                            </div>
+                            <div class="modify">
+                                <span contentEditable="true">${ appended[i] }</span>
+                                <button class="deleteKey">删除</button>
+                                <button class="ascertainKey">确定</button>
+                            </div>
+                        </li>`
+            }
+            $('.showKeyWord > ul').prepend(html);
+        }
+        $(function(){
 
-        <!-- 疑难问题弹窗 -->
-        <div class="problemPop">
-            <div class="problemPopContent">
-                <h3>疑问解答</h3>
-                <ul>
-                    <li>
-                    	<h4>·关键词</h4>
-                    	<p>目标信息中的关键性词语,如“软件系统”</p>
-                    </li>
-                    <li>
-                    	<h4>·附加词</h4>
-                    	<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-                    </li>
-                    <li>
-                    	<h4>·排除词</h4>
-                    	<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-                    </li>
-                </ul>
-                <button class="knowBtn">我知道了</button>
-            </div>
+            $('.knowBtn').on('click',function(){
+                $(".problemPop").hide()
+            })
+            $(".problem").on('click',function(){
+                $(".problemPop").css("display",'flex');
+            })
 
-        </div>
+            function hasWords () {
+                var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+                if(showKeyWordLength === 0){
+                    $(".addkeyWord").show();
+                    $(".showKeyWord").hide();
+                } else {
+                    $(".addkeyWord").hide();
+                    $(".showKeyWord").show();
+                }
+            }
+            hasWords()
 
-    </div>
-    <script src="../js/zepto.js"></script>
-    <script src="../js/weui.min.js"></script>
-    <script src="../js/additionWord.js"></script>
+            // 添加按钮
+            $(".addKeyWord i").on('click',function(){
+                $(".addkeyWord").show();
+                $(".showKeyWord").hide();
+            })
+
+            // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+            $('.addkeyWord input.enterOne').on('input', function() {
+                if ($(this).val().length >= 100) {
+                    var s = $(this).val().slice(0,100)
+                    $(this).val(s)
+
+                    weui.toast('附加词不能超过100字', {
+                        duration: 2000,
+                        className: 'text-overflow100',
+                        callback: function(){ console.log('close') }
+                    });
+                    return
+                }
+
+                var buttonDOM = $(this).siblings().find('button')[0]
+                if ($(this).val().length >= 1) {
+                    buttonDOM.style.opacity = 1
+                    buttonDOM.removeAttribute("disabled")
+                } else {
+                    buttonDOM.style.opacity = .5
+                    buttonDOM.setAttribute("disabled", true)
+                }
+            })
+
+            // 添加 按钮的点击事件
+            $('.addkeyWord .btn button').on('click', function(){
+                var keyWord = $('.addkeyWord input.enterOne').val()
+                appendedArr.push(keyWord);
+                localStorage.setItem("appended", appendedArr);
+                var html = `<li>
+                                <div class="one">
+                                    <div>
+                                        <span>
+                                            <p class="key">${ keyWord }</p>
+                                        </span>
+                                    </div>
+                                    <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                                </div>
+                                <div class="modify">
+                                    <span contentEditable="true">${ keyWord }</span>
+                                    <button class="deleteKey">删除</button>
+                                    <button class="ascertainKey">确定</button>
+                                </div>
+                            </li>`
+                $('.showKeyWord > ul').prepend(html)
+
+                // 隐藏
+                $(".addkeyWord").hide();
+                $('.showKeyWord').show();
+                $('.enter.addkeyWord > input').val('')
+                var buttonDOM = $('.enter.addkeyWord .btn button')[0]
+                buttonDOM.style.opacity = .5
+                buttonDOM.setAttribute("disabled", true)
+
+            })
+
+            // 编辑
+            $(".showKeyWord").on('click', '.editKeyWord',function(e){
+                $('.modify span').each(function(item){
+                    $('.modify span')[0].contentEditable = true
+                })
+                // console.log($(this).parent().siblings().find('span').text())
+                $(this).parent().hide()
+                $(this).parent().siblings().css('display','block')
+            })
+
+            // 编辑 删除
+            $('.showKeyWord').on('click', '.deleteKey', function(e) {
+                var appended = $(this).parent().prev().find('.key').text();
+                appendedArr.splice($.inArray(appended, appendedArr),1);
+                localStorage.appended = appendedArr.toString();
+                $(this).parents('li').remove();
+                hasWords()
+                // console.log('删除附加词:',$(this).parent().find('span').text())
+            })
+            // 编辑 确定
+            $('.showKeyWord').on('click', '.ascertainKey', function(e) {
+                var keyWord = $(this).siblings('span').text();
+                var appended = $(this).parent().prev().find('.key').text();
+                for(var i in appendedArr){
+                    if(appendedArr[i] === appended){
+                        appendedArr[i] = keyWord;
+                    }
+                }
+                localStorage.appended = appendedArr.toString();
+                $(this).parent().siblings().find('.key').text(keyWord)
+                $(this).parent().hide().siblings().show()
+            })
+
+            //去空格方法
+            String.prototype.trim = function(){
+                return this.replace(/(^\s*)|(\s*$)/g, ' ');
+            }
+
+            //附加词个数
+            $('.modify span').keydown(function(){
+                var olength = $(this).text().replace(/\s+/g,'').length;
+                // console.log(olength)
+                if(olength >= 100){
+                    $('.fontLength').show();
+                    var s = $(this).text().slice(0,100)
+                    $(this).text(s)
+                    weui.toast('附加词不能超过100字', {
+                        duration: 2000,
+                        className: 'text-overflow100',
+                        callback: function(){ console.log('close') }
+                    });
+                }
+            })
+
+        })
+
+    </script>
 </body>
 
 </html>

+ 23 - 28
src/web/templates/weixin/dataExport/dataExport_area.html

@@ -7,12 +7,12 @@
 		<meta name="apple-mobile-web-app-capable" content="yes">
 		<meta name="apple-mobile-web-app-status-bar-style" content="black">
 
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css">
-		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css" />
-		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css" />
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/public.css">
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/choose_area.css">
-		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
+		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}" />
+		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
+		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/public.css?v={{Msg "seo" "version"}}">
+		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/choose_area.css?v={{Msg "seo" "version"}}">
+		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
 		{{include "/common/weixin.html"}}
 	</head>
 		<style>
@@ -386,7 +386,7 @@
 
 				</div>
 		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/jquery-2.1.4.js"></script>
-		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/mapJSON.js"></script>
+		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/mapJSON.js?v={{Msg "seo" "version"}}"></script>
 		<script>
 			chinaMapJSON.forEach(function(item,index){
 				// console.log(item,index)
@@ -419,7 +419,7 @@
 				 });
 				 $('.province .checkbox:not(.other)').on('change',function(){
 					var isCheckded = $(this).is(':checked');
-					console.log(isCheckded);
+					// console.log(isCheckded);
 					if(isCheckded){
 						$(this).parents('.tab').siblings('.tab_content').find('.city').addClass('active')
 						$('.other').prop('checked',false);
@@ -430,7 +430,7 @@
 				 $('.tab_content').on('click','.city',function(){
 					 $(this).toggleClass('active');
 					 var isActive = $(this).parent().find('.city.active').length
-					 console.log(isActive,$(this).html());
+					 // console.log(isActive,$(this).html());
 					 if(isActive){
 						 var input = $(this).parents('li').find('input.checkbox')
 						 window.input = input;
@@ -479,24 +479,6 @@
 					$('.tab_content .city').removeClass('active');
 					$('.result_name').empty()
 				});
-				//
-				 if($(".province").find("input").prop("checked") === false){
-				 	$(".other").prop("checked", true);
-				 }
-				 //
-				 $(".tab_content").find(".city.active").each(function(){
-					 $(this).parent().prev().children("input").prop("checked", true)
-				 });
-				 //
-				 $(document).on('click', function () {
-					 console.log($(".province").find("input").prop("checked"));
-					 if($(".province").find("input").prop("checked") === false){
-						 $(".other").prop("checked", true);
-					 }else{
-						 $(".other").prop("checked", false);
-					 }
-				 });
-
 				 //
 				 if(localStorage.area !== "" && localStorage.area!==undefined){
 					 var area = localStorage.area.split(" ");
@@ -504,11 +486,24 @@
 						 $(".tab_content").find(".city").each(function(){
 							 if($(this).text() === area[i]){
 								 $(this).addClass("active");
-								 $(this).parent().slideDown();
+								 if($(this).parent().prev().prop("class") !== "tab municipality"){
+									 $(this).parent().slideDown();
+								 }
 							 }
 						 })
 					 }
+					 if(localStorage.area === "全国"){
+						 $(".other").prop("checked", true);
+					 }
+				 }else{
+					 $(".other").prop("checked", true);
 				 }
+				 //
+				 $(".tab_content").find(".city.active").each(function(){
+					 $(this).parent().prev().find(".checkbox").prop("checked", true);
+				 });
+				 //
+
 			})
 		</script>
 	</body>

+ 0 - 77
src/web/templates/weixin/dataExport/dataExport_buyer.html

@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<html>
-	<head>
-		<meta charset="utf-8">
-		<title>采购单位</title>
-		<meta name="viewport" content="initial-scale=1, maximum-scale=1">
-		<meta name="apple-mobile-web-app-capable" content="yes">
-		<meta name="apple-mobile-web-app-status-bar-style" content="black">
-		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css">
-		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css" />
-		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css" />
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/win_bid.css">
-		{{include "/common/weixin.html"}}
-	</head>
-	<body>
-		<div class="win_bid" id="win_bid">
-			<main class="main">
-
-			</main>
-			<div class="form">
-				<div class="form-item">
-					<input type="text" placeholder="采购单位名称">
-				</div>
-				<button class="btn">确认</button>
-			</div>
-			<!-- 引用weui Dialog组件 -->
-			<div class="js_dialog" id="tipDialog" style="display: none;">
-				<div class="weui-mask"></div>
-				<div class="weui-dialog">
-					<div class="weui-dialog__bd">
-						<h1 class="dialog-title">疑问解答</h1>
-						<ul class="info">
-							<li>
-								<label>·关键词</label>
-								<p>目标信息中的关键性词语,如“软件系统”</p>
-							</li>
-							<li>
-								<label>·附加词</label>
-								<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-							</li>
-							<li>
-								<label>·排除词</label>
-								<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-							</li>
-						</ul>
-					</div>
-					<div class="weui-dialog__ft">
-						<a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_primary">我知道了</a>
-					</div>
-				</div>
-			</div>
-		</div>
-		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js" type="text/javascript" charset="utf-8"></script>
-		<script>
-			$(function(){
-				$('.query').click(function(){
-					$('#tipDialog').show(200);
-					$('.weui-dialog__btn_primary').click(function() {
-						$('#tipDialog').hide(200);
-					})
-				});
-				//
-				$(".btn").click(function () {
-					var buyer = $(".form-item > input").val();
-					$.ajax({
-						type: 'post',
-						url: '/front/wx_dataExport/saveBuyer',
-						data: {"buyer": buyer},
-						async: false,
-						dataType: 'json',
-					})
-				})
-			})
-		</script>
-	</body>
-</html>

+ 32 - 61
src/web/templates/weixin/dataExport/dataExport_buyerEdit.html

@@ -19,84 +19,55 @@
 	<div class="enter addkeyWord">
 		<input type="text" class="enterOne" placeholder="采购单位名称" />
 		<div class="btn">
-			<button disabled>确认</button>
+			<button disabled class="save-btn">确认</button>
 		</div>
 	</div>
 
 	<!-- 添加附加词显示列表 -->
 	<div class="showKeyWord">
 		<ul>
-			<li>
-				<div class="one">
-					<div>
-                            <span>
-                                <p class="key">abcde</p>
-                            </span>
-					</div>
-					<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
-				</div>
-				<div class="modify">
-					<span contentEditable="true">abcde</span>
-					<button class="deleteKey">删除</button>
-					<button class="ascertainKey">确定</button>
-				</div>
-			</li>
 
-			<li>
-				<div class="one">
-					<div>
-                            <span>
-                                <p class="key">abcde</p>
-                            </span>
-					</div>
-					<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
-				</div>
-				<div class="modify">
-					<span contentEditable="true">abcde</span>
-					<button class="deleteKey">删除</button>
-					<button class="ascertainKey">确定</button>
-				</div>
-			</li>
 
 		</ul>
 
 		<div class="addKeyWord">
 			<i class="iconfont icon-tianjia"></i>
 		</div>
-
-	</div>
-
-	<div class="problem">
-		疑问解答 <i class="iconfont icon-wenhao"></i>
-	</div>
-
-	<!-- 疑难问题弹窗 -->
-	<div class="problemPop">
-		<div class="problemPopContent">
-			<h3>疑问解答</h3>
-			<ul>
-				<li>
-					<h4>·关键词</h4>
-					<p>目标信息中的关键性词语,如“软件系统”</p>
-				</li>
-				<li>
-					<h4>·附加词</h4>
-					<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-				</li>
-				<li>
-					<h4>·排除词</h4>
-					<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-				</li>
-			</ul>
-			<button class="knowBtn">我知道了</button>
-		</div>
-
 	</div>
-
 </div>
 <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js"></script>
 <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js"></script>
-<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/additionWord.js"></script>
+<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/additionWord.js?v={{Msg "seo" "version"}}25"></script>
+<script>
+	var buyerArr = [];
+	if(localStorage.buyer !== "" && localStorage.buyer !== undefined){
+		var buyer = localStorage.buyer.split(",");
+		buyerArr = buyer;
+		console.log(buyerArr);
+		var html = "";
+		for(var i in buyer){
+			html +=
+					`<li>
+                        <div class="one">
+                            <div>
+                                <span>
+                                    <p class="key">${ buyer[i] }</p>
+                                </span>
+                            </div>
+                            <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                        </div>
+                        <div class="modify">
+                            <span contentEditable="true">${ buyer[i] }</span>
+                            <button class="deleteKey">删除</button>
+                            <button class="ascertainKey">确定</button>
+                        </div>
+                    </li>`
+		}
+		$('.showKeyWord > ul').prepend(html);
+	}
+
+</script>
+
 </body>
 
 </html>

+ 171 - 33
src/web/templates/weixin/dataExport/dataExport_exclude.html

@@ -6,11 +6,11 @@
     <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>排除词</title>
-    <link rel="stylesheet" href="../css/base.css">
-    <link rel="stylesheet" href="../iconfont/iconfont.css">
-    <link rel="stylesheet" href="../css/weui.min.css">
-    <link rel="stylesheet" href="../css/keyWord.css">
-    <script src="../js/rem.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
 </head>
 
 <body>
@@ -68,37 +68,175 @@
 
         </div>
 
-        <div class="problem">
-            疑问解答 <i class="iconfont icon-wenhao"></i>
-        </div>
+    </div>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script>
+        var excludeArr = [];
+        if(localStorage.exclude !== "" && localStorage.exclude !== undefined){
+            var exclude = localStorage.exclude.split(",");
+            excludeArr = exclude;
+            var html = "";
+            for(var i in exclude){
+                html +=
+                    `<li>
+                                <div class="one">
+                                    <div>
+                                        <span>
+                                            <p class="key">${ exclude[i] }</p>
+                                        </span>
+                                    </div>
+                                    <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                                </div>
+                                <div class="modify">
+                                    <span contentEditable="true">${ exclude[i] }</span>
+                                    <button class="deleteKey">删除</button>
+                                    <button class="ascertainKey">确定</button>
+                                </div>
+                            </li>`
+            }
+            $('.showKeyWord > ul').prepend(html);
+        }
+        $(function(){
 
-        <!-- 疑难问题弹窗 -->
-        <div class="problemPop">
-            <div class="problemPopContent">
-                <h3>疑问解答</h3>
-                <ul>
-                    <li>
-                    	<h4>·关键词</h4>
-                    	<p>目标信息中的关键性词语,如“软件系统”</p>
-                    </li>
-                    <li>
-                    	<h4>·附加词</h4>
-                    	<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-                    </li>
-                    <li>
-                    	<h4>·排除词</h4>
-                    	<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-                    </li>
-                </ul>
-                <button class="knowBtn">我知道了</button>
-            </div>
+            $('.knowBtn').on('click',function(){
+                $(".problemPop").hide()
+            })
+            $(".problem").on('click',function(){
+                $(".problemPop").css("display",'flex');
+            })
 
-        </div>
+            function hasWords () {
+                var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+                if(showKeyWordLength === 0){
+                    $(".addkeyWord").show();
+                    $(".showKeyWord").hide();
+                } else {
+                    $(".addkeyWord").hide();
+                    $(".showKeyWord").show();
+                }
+            }
+            hasWords()
 
-    </div>
-    <script src="../js/zepto.js"></script>
-    <script src="../js/weui.min.js"></script>
-    <script src="../js/exclusiveWord.js"></script>
+            // 添加按钮
+            $(".addKeyWord i").on('click',function(){
+                $(".addkeyWord").show();
+                $(".showKeyWord").hide();
+            })
+
+            // 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+            $('.addkeyWord input.enterOne').on('input', function() {
+                if ($(this).val().length >= 100) {
+                    var s = $(this).val().slice(0,100)
+                    $(this).val(s)
+
+                    weui.toast('附加词不能超过100字', {
+                        duration: 2000,
+                        className: 'text-overflow100',
+                        callback: function(){ console.log('close') }
+                    });
+                    return
+                }
+
+                var buttonDOM = $(this).siblings().find('button')[0]
+                if ($(this).val().length >= 1) {
+                    buttonDOM.style.opacity = 1
+                    buttonDOM.removeAttribute("disabled")
+                } else {
+                    buttonDOM.style.opacity = .5
+                    buttonDOM.setAttribute("disabled", true)
+                }
+            })
+
+            // 添加 按钮的点击事件
+            $('.addkeyWord .btn button').on('click', function(){
+                var keyWord = $('.addkeyWord input.enterOne').val()
+                excludeArr.push(keyWord);
+                localStorage.setItem("exclude", excludeArr);
+                var html = `<li>
+                                    <div class="one">
+                                        <div>
+                                            <span>
+                                                <p class="key">${ keyWord }</p>
+                                            </span>
+                                        </div>
+                                        <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                                    </div>
+                                    <div class="modify">
+                                        <span contentEditable="true">${ keyWord }</span>
+                                        <button class="deleteKey">删除</button>
+                                        <button class="ascertainKey">确定</button>
+                                    </div>
+                                </li>`
+                $('.showKeyWord > ul').prepend(html)
+
+                // 隐藏
+                $(".addkeyWord").hide();
+                $('.showKeyWord').show();
+                $('.enter.addkeyWord > input').val('')
+                var buttonDOM = $('.enter.addkeyWord .btn button')[0]
+                buttonDOM.style.opacity = .5
+                buttonDOM.setAttribute("disabled", true)
+
+            })
+
+            // 编辑
+            $(".showKeyWord").on('click', '.editKeyWord',function(e){
+                $('.modify span').each(function(item){
+                    $('.modify span')[0].contentEditable = true
+                })
+                // console.log($(this).parent().siblings().find('span').text())
+                $(this).parent().hide()
+                $(this).parent().siblings().css('display','block')
+            })
+
+            // 编辑 删除
+            $('.showKeyWord').on('click', '.deleteKey', function(e) {
+                var exclude = $(this).parent().prev().find('.key').text();
+                excludeArr.splice($.inArray(exclude, excludeArr),1);
+                localStorage.exclude = excludeArr.toString();
+                $(this).parents('li').remove();
+                hasWords()
+                // console.log('删除附加词:',$(this).parent().find('span').text())
+            })
+            // 编辑 确定
+            $('.showKeyWord').on('click', '.ascertainKey', function(e) {
+                var keyWord = $(this).siblings('span').text();
+                var exclude = $(this).parent().prev().find('.key').text();
+                for(var i in excludeArr){
+                    if(excludeArr[i] === exclude){
+                        excludeArr[i] = keyWord;
+                    }
+                }
+                localStorage.exclude = excludeArr.toString();
+                $(this).parent().siblings().find('.key').text(keyWord)
+                $(this).parent().hide().siblings().show()
+            })
+
+            //去空格方法
+            String.prototype.trim = function(){
+                return this.replace(/(^\s*)|(\s*$)/g, ' ');
+            }
+
+            //附加词个数
+            $('.modify span').keydown(function(){
+                var olength = $(this).text().replace(/\s+/g,'').length;
+                // console.log(olength)
+                if(olength >= 100){
+                    $('.fontLength').show();
+                    var s = $(this).text().slice(0,100)
+                    $(this).text(s)
+                    weui.toast('附加词不能超过100字', {
+                        duration: 2000,
+                        className: 'text-overflow100',
+                        callback: function(){ console.log('close') }
+                    });
+                }
+            })
+
+        })
+
+    </script>
 </body>
 
 </html>

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

@@ -5,10 +5,10 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>行业</title>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/industry.css">
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/industry.css?v={{Msg "seo" "version"}}">
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
     {{include "/common/weixin.html"}}
 </head>
     <style>
@@ -160,7 +160,7 @@
         </div>
 
     </div>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
     <script>
            
             function hasActive(){

+ 26 - 33
src/web/templates/weixin/dataExport/dataExport_keyWord.html

@@ -3,14 +3,14 @@
 
 <head>
     <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>关键词</title>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css">
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
-    {{include "/common/weixin.html"}}
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
 </head>
 
 <body>
@@ -19,23 +19,23 @@
         <p class="title">示例:软件系统(关键词);  开发(附加词);  运维(排除词)</p>
         <!-- 添加关键词 -->
         <div class="enter addkeyWord">
-            <input type="text" placeholder="请输入关键词" class="enterOne">
+            <input type="text" class="enterOne" placeholder="请输入关键词" />
             <div class="btnChoose" style="display:none;">
-                <button>添加 关键词</button>
+                <button>添加 附加词</button>
                 <button>添加 排除词</button>
             </div>
             <div class="btn">
-                <button>确认</button>
+                <button disabled>确认</button>
             </div>
         </div>
 
         <!-- 添加排除词 -->
-        <div class="enter exclusion" style="display:none;">
+        <!-- <div class="enter exclusion" style="display:none;">
             <input type="text" placeholder="请输入排除词" class="enterOne">
             <div class="btn">
-                <button>确认</button>
+                <button disabled>确认</button>
             </div>
-        </div>
+        </div> -->
 
 
         <!-- 添加关键词显示列表 -->
@@ -46,15 +46,15 @@
                         <div>
                             <span>
                                 <strong> 关键词:</strong>
-                                <p>信息化</p>
+                                <p class="key">信息化</p>
                             </span>
                         </div>
                         <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
                     </div>
                     <div class="modify">
-                        <span contentEditable="true">信息   化</span>
+                        <span contentEditable="true">信息化</span>
                         <button class="addAdjunctWord">编辑 附加词</button>
-                        <button class="addExclusion ">添加排除词</button>
+                        <button class="addExclusion">添加 排除词</button>
                         <button class="deleteKey">删除</button>
                         <button class="ascertainKey">确定</button>
                     </div>
@@ -65,15 +65,15 @@
                         <div>
                             <span>
                                 <strong> 关键词:</strong>
-                                <p>信息化二</p>
+                                <p class="key">信息化二</p>
                             </span>
                             <span>
                                 <strong> 附加词:</strong>
-                                <p>工程 招标项目 科技产品 农业 电子产品</p>
+                                <p class="addition">工程 招标项目 科技产品 农业 电子产品</p>
                             </span>
                             <span>
                                 <strong> 排除词:</strong>
-                                <p>办公 教育</p>
+                                <p class="exclusion">办公 教育</p>
                             </span>
                         </div>
                         <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
@@ -81,24 +81,21 @@
                     <div class="modify">
                         <span contentEditable="true">信息化二</span>
                         <button class="addAdjunctWord">编辑 附加词</button>
-                        <button class="addExclusion ">添加排除词</button>
+                        <button class="addExclusion ">添加 排除词</button>
                         <button class="deleteKey">删除</button>
                         <button class="ascertainKey">确定</button>
                     </div>
                 </li>
             </ul>
 
-            <div class="addKeyWord">
-                <i class="iconfont icon-tianjia"></i>
-            </div>
-
         </div>
 
-
-
+        <div class="addKeyWord">
+            <i class="iconfont icon-tianjia"></i>
+        </div>
 
         <div class="problem">
-            疑问解答 <i class="iconfont icon-wenhao "></i>
+            疑问解答 <i class="iconfont icon-wenhao"></i>
         </div>
 
         <!-- 疑难问题弹窗 -->
@@ -124,14 +121,10 @@
 
         </div>
 
-        <!-- 字数限制弹窗 -->
-        <div class="fontLength">
-            <div>关键词不能超过100字</div>
-        </div>
-
     </div>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js"></script>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/keyWord.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/keyWord.js?v={{Msg "seo" "version"}}"></script>
 </body>
 
 </html>

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

@@ -5,10 +5,10 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>金额</title>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/money.css">
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/money.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="/js/jquery.js"></script>
 </head>

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

@@ -5,10 +5,10 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>信息类型</title>
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css">
-    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/messageType.css">
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/messageType.css?v={{Msg "seo" "version"}}">
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
     {{include "/common/weixin.html"}}
 </head>
     <style>
@@ -86,7 +86,7 @@
         </div>
 
     </div>
-    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
     <script>
            
             function hasActive(){

+ 16 - 61
src/web/templates/weixin/dataExport/dataExport_toMyOrder.html

@@ -7,7 +7,7 @@
 		<meta name="apple-mobile-web-app-status-bar-style" content="black">
 		<script src="/wx_dataExport/js/rem.js"></script>
 		<script src="/js/jquery-3.2.1.min.js"></script>
-		<script src="/js/dropload.js?v=16"></script>
+		<script src="/js/dropload.js?v=271"></script>
 		<link rel="stylesheet" type="text/css" href="/wx_dataExport/css/base.css" />
 		<link rel="stylesheet" type="text/css" href="/wx_dataExport/iconfont/iconfont.css" />
 		<link rel="stylesheet" href="/wx_dataExport/css/order_list.css">
@@ -91,7 +91,7 @@
 			                                    self.remove();
 			                                    $.alert({
 			                                        title:"",
-			                                        content:"删除成功!",
+			                                        content:"取消成功!",
 			                                        buttons: {
 			                                            ok: {
 			                                                text: '确认',
@@ -151,6 +151,9 @@
 //				$(".buttons-tab ul li").on("click",function(){
 //					var index = $(this).index();
 //				})
+				$(".media").on("click",function(){
+					alert("~~~")
+				})
 
 			/*------------------------------------------------------------------*/	
 				//查询订单ajax
@@ -167,6 +170,7 @@
 						dataType: 'json',
 						success:function(data){
 							var list=data.res;
+							pageIndex=2;
 						    haveNextPage=data.haveNextPage;
 							if (data.res&&data.res.length>0){
 								structureHtml(data.res);	
@@ -193,80 +197,31 @@
 						return
 					}
 					console.log(haveNextPage)
-//					if(haveNextPage){
-//						console.log("!")
-////						setTimeout(function(){
-//							wxflag = $('#order_list > .main > .tabs').dropload({
-//						        scrollArea : window,
-//						        loadDownFn : function(me){
-//									if(wxflag == null){
-//										wxflag = me;
-//									}
-//									console.log("pageIndex:"+pageIndex+"==="+typ)
-//						            $.ajax({
-//						                type: 'post',
-//						                url: '/front/wxMyOrder/myOrder/myOrderPaging',
-//										data: {"pageNum": pageIndex,"type":typ},
-//						                dataType: 'json',
-//						                success: function(data){
-//						                	console.log("===="+data.hasNextPage)
-//											//没有数据
-//											if(data.res.length==0){
-//												noMoreData(me);
-//											}else{
-//												pageIndex++;
-//												structureHtml(data["res"]);
-//												if(data.hasNextPage){
-//													// 每次数据插入,必须重置
-//													me.resetload();
-//												}else{
-//													noMoreData(me);
-//												}
-//											}
-//						                },
-//						                error: function(xhr, type){
-//											noMoreData(me);
-//						                }
-//						            });
-//						        }
-//						    });
-////						    },1500)	
-//						}else{
-//							wxflag = $('.tabs').dropload({
-//						        scrollArea : window,
-//						        loadDownFn : function(me){
-//									if(wxflag == null){
-//										wxflag = me;
-//									}
-//									noMoreData(me);
-//						        }
-//						    });
-//							noMoreData(wxflag);
-//						}
+
 						if(haveNextPage){
 							setTimeout(function(){
+								console.log("======")
 								wxflag = $('#order_list > .main > .tabs').dropload({
 							        scrollArea : window,
 							        loadDownFn : function(me){
-										if(wxflag == null){
-											wxflag = me;
-										}
-//										me.$domDown.html(me.opts.domDown.domLoad);
-//										me.isData = true;
-//										me.isLockUp = false;
-//										me.isLockDown = false;
+//										if(wxflag == null){
+//											wxflag = me;
+//										}
 										$.ajax({
 											type: 'post',
 											url: '/front/wxMyOrder/myOrder/myOrderPaging',
 											data: {"pageNum": pageIndex,"type":typ},
 											dataType: 'json',
 											success: function(data){
+//												for(var i=0;i<data.res.length;i++){
+//													alert(data.res[i]["order_money"])
+//												}
 												//没有数据
-												if(data.data.length==0){
+												if(data.res.length==0){
 													noMoreData(me);
 												}else{
 													pageIndex++;
-													structureHtml(data["res"]);
+													structureHtml(data.res);
 													if(data.hasNextPage){
 														// 每次数据插入,必须重置
 														me.resetload();

+ 0 - 86
src/web/templates/weixin/dataExport/dataExport_winner.html

@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-	<head>
-		<meta charset="utf-8">
-		<title>中标单位</title>
-		<meta name="viewport" content="initial-scale=1, maximum-scale=1">
-		<meta name="apple-mobile-web-app-capable" content="yes">
-		<meta name="apple-mobile-web-app-status-bar-style" content="black">
-		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css">
-		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css" />
-		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css" />
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/win_bid.css">
-		{{include "/common/weixin.html"}}
-	</head>
-	<body>
-		<div class="win_bid" id="win_bid">
-			<!-- <header class="header">
-				<a href="#" class="return pull-left">
-					<i class="icon iconfont">&#xe640;</i>
-				</a>
-				<h1 class="title">中标单位</h1>
-			</header> -->
-			<main class="main">
-				<form action="/front/wx_dataExport/winnerEdit" class="form">
-					<div class="form-item">
-						<input type="text" placeholder="中标单位名称">
-					</div>
-					<button class="btn">确认</button>
-					<a href="#" class="query">
-						疑问解答
-						<i class="iconfont icon-wenhao "></i>
-					</a>
-				</form>
-			</main>
-			<!-- 引用weui Dialog组件 -->
-			<div class="js_dialog" id="tipDialog" style="display: none;">
-				<div class="weui-mask"></div>
-				<div class="weui-dialog">
-					<div class="weui-dialog__bd">
-						<h1 class="dialog-title">疑问解答</h1>
-						<ul class="info">
-							<li>
-								<label>·关键词</label>
-								<p>目标信息中的关键性词语,如“软件系统”</p>
-							</li>
-							<li>
-								<label>·附加词</label>
-								<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-							</li>
-							<li>
-								<label>·排除词</label>
-								<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-							</li>
-						</ul>
-					</div>
-					<div class="weui-dialog__ft">
-						<a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_primary">我知道了</a>
-					</div>
-				</div>
-			</div>
-		</div>
-		<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js" type="text/javascript" charset="utf-8"></script>
-		<script>
-			$(function(){
-				$('.query').click(function(){
-					$('#tipDialog').show(200);
-					$('.weui-dialog__btn_primary').click(function() {
-						$('#tipDialog').hide(200);
-					})
-				});
-				//
-				$(".btn").click(function () {
-					var winner = $(".form-item > input").val();
-					$.ajax({
-						type: 'post',
-						url: '/front/wx_dataExport/saveWinner',
-						data: {"winner": winner},
-						async: false,
-						dataType: 'json',
-					})
-				})
-			})
-		</script>
-	</body>
-</html>

+ 170 - 63
src/web/templates/weixin/dataExport/dataExport_winnerEdit.html

@@ -6,11 +6,11 @@
 	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
 	<meta http-equiv="X-UA-Compatible" content="ie=edge">
 	<title>中标单位</title>
-	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css">
-	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css">
-	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css">
-	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css">
-	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js"></script>
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
+	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
 	</head>
 
 	<body>
@@ -26,37 +26,6 @@
 	<!-- 添加附加词显示列表 -->
 	<div class="showKeyWord">
 			<ul>
-			<li>
-			<div class="one">
-			<div>
-			<span>
-			<p class="key">abcde</p>
-			</span>
-			</div>
-			<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
-	</div>
-	<div class="modify">
-			<span contentEditable="true">abcde</span>
-			<button class="deleteKey">删除</button>
-			<button class="ascertainKey">确定</button>
-			</div>
-			</li>
-
-			<li>
-			<div class="one">
-			<div>
-			<span>
-			<p class="key">abcde</p>
-			</span>
-			</div>
-			<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
-	</div>
-	<div class="modify">
-			<span contentEditable="true">abcde</span>
-			<button class="deleteKey">删除</button>
-			<button class="ascertainKey">确定</button>
-			</div>
-			</li>
 
 			</ul>
 
@@ -66,37 +35,175 @@
 
 			</div>
 
-			<div class="problem">
-			疑问解答 <i class="iconfont icon-wenhao"></i>
 			</div>
+			<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js?v={{Msg "seo" "version"}}"></script>
+	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+	<script>
+		var winnerArr = [];
+		if(localStorage.winner !== "" && localStorage.winner !== undefined){
+			var winner = localStorage.winner.split(",");
+			winnerArr = winner;
+			var html = "";
+			for(var i in winner){
+				html +=
+						`<li>
+                        <div class="one">
+                            <div>
+                                <span>
+                                    <p class="key">${ winner[i] }</p>
+                                </span>
+                            </div>
+                            <button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+                        </div>
+                        <div class="modify">
+                            <span contentEditable="true">${ winner[i] }</span>
+                            <button class="deleteKey">删除</button>
+                            <button class="ascertainKey">确定</button>
+                        </div>
+                    </li>`
+			}
+			$('.showKeyWord > ul').prepend(html);
+		}
+		$(function(){
 
-			<!-- 疑难问题弹窗 -->
-			<div class="problemPop">
-			<div class="problemPopContent">
-			<h3>疑问解答</h3>
-			<ul>
-			<li>
-			<h4>·关键词</h4>
-				<p>目标信息中的关键性词语,如“软件系统”</p>
-				</li>
-				<li>
-				<h4>·附加词</h4>
-				<p>与关键词形成一体/组合,便于查找准确信息,如“开发”</p>
-				</li>
-				<li>
-				<h4>·排除词</h4>
-				<p>与关键词互斥,可排除一部分非目标信息,如“运维”</p>
-				</li>
-				</ul>
-				<button class="knowBtn">我知道了</button>
-			</div>
+			$('.knowBtn').on('click',function(){
+				$(".problemPop").hide()
+			})
+			$(".problem").on('click',function(){
+				$(".problemPop").css("display",'flex');
+			})
 
-			</div>
+			function hasWords () {
+				var showKeyWordLength = $(".showKeyWord ul").find('li').length;
+				if(showKeyWordLength === 0){
+					$(".addkeyWord").show();
+					$(".showKeyWord").hide();
+				} else {
+					$(".addkeyWord").hide();
+					$(".showKeyWord").show();
+				}
+			}
+			hasWords()
 
-			</div>
-			<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/zepto.js"></script>
-	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/weui.min.js"></script>
-	<script src="{{Msg "seo" "cdn"}}/wx_dataExport/js/additionWord.js"></script>
+			// 添加按钮
+			$(".addKeyWord i").on('click',function(){
+				$(".addkeyWord").show();
+				$(".showKeyWord").hide();
+			})
+
+			// 添加keyWords检查输入框内是否有文字,如果有才能点击添加按钮
+			$('.addkeyWord input.enterOne').on('input', function() {
+				if ($(this).val().length >= 100) {
+					var s = $(this).val().slice(0,100)
+					$(this).val(s)
+
+					weui.toast('附加词不能超过100字', {
+						duration: 2000,
+						className: 'text-overflow100',
+						callback: function(){ console.log('close') }
+					});
+					return
+				}
+
+				var buttonDOM = $(this).siblings().find('button')[0]
+				if ($(this).val().length >= 1) {
+					buttonDOM.style.opacity = 1
+					buttonDOM.removeAttribute("disabled")
+				} else {
+					buttonDOM.style.opacity = .5
+					buttonDOM.setAttribute("disabled", true)
+				}
+			})
+
+			// 添加 按钮的点击事件
+			$('.addkeyWord .btn button').on('click', function(){
+				var keyWord = $('.addkeyWord input.enterOne').val()
+				winnerArr.push(keyWord);
+				localStorage.setItem("winner", winnerArr);
+				var html = `<li>
+							<div class="one">
+								<div>
+									<span>
+										<p class="key">${ keyWord }</p>
+									</span>
+								</div>
+								<button class="editKeyWord"><i class="iconfont icon-xiugai"></i> 修改</button>
+							</div>
+							<div class="modify">
+								<span contentEditable="true">${ keyWord }</span>
+								<button class="deleteKey">删除</button>
+								<button class="ascertainKey">确定</button>
+							</div>
+						</li>`
+				$('.showKeyWord > ul').prepend(html)
+
+				// 隐藏
+				$(".addkeyWord").hide();
+				$('.showKeyWord').show();
+				$('.enter.addkeyWord > input').val('')
+				var buttonDOM = $('.enter.addkeyWord .btn button')[0]
+				buttonDOM.style.opacity = .5
+				buttonDOM.setAttribute("disabled", true)
+
+			})
+
+			// 编辑
+			$(".showKeyWord").on('click', '.editKeyWord',function(e){
+				$('.modify span').each(function(item){
+					$('.modify span')[0].contentEditable = true
+				})
+				// console.log($(this).parent().siblings().find('span').text())
+				$(this).parent().hide()
+				$(this).parent().siblings().css('display','block')
+			})
+
+			// 编辑 删除
+			$('.showKeyWord').on('click', '.deleteKey', function(e) {
+				var winner = $(this).parent().prev().find('.key').text();
+				winnerArr.splice($.inArray(winner, winnerArr),1);
+				localStorage.winner = winnerArr.toString();
+				$(this).parents('li').remove();
+				hasWords()
+				// console.log('删除附加词:',$(this).parent().find('span').text())
+			})
+			// 编辑 确定
+			$('.showKeyWord').on('click', '.ascertainKey', function(e) {
+				var keyWord = $(this).siblings('span').text();
+				var winner = $(this).parent().prev().find('.key').text();
+				for(var i in winnerArr){
+					if(winnerArr[i] === winner){
+						winnerArr[i] = keyWord;
+					}
+				}
+				localStorage.winner = winnerArr.toString();
+				$(this).parent().siblings().find('.key').text(keyWord)
+				$(this).parent().hide().siblings().show()
+			})
+
+			//去空格方法
+			String.prototype.trim = function(){
+				return this.replace(/(^\s*)|(\s*$)/g, ' ');
+			}
+
+			//附加词个数
+			$('.modify span').keydown(function(){
+				var olength = $(this).text().replace(/\s+/g,'').length;
+				// console.log(olength)
+				if(olength >= 100){
+					$('.fontLength').show();
+					var s = $(this).text().slice(0,100)
+					$(this).text(s)
+					weui.toast('附加词不能超过100字', {
+						duration: 2000,
+						className: 'text-overflow100',
+						callback: function(){ console.log('close') }
+					});
+				}
+			})
+
+		})
+
+	</script>
 	</body>
 
 </html>