Prechádzať zdrojové kódy

Merge branch 'dev2.6' of http://192.168.3.207:10080/qmx/qfw into dev2.6

6 rokov pred
rodič
commit
dd3c6f66da

+ 1 - 0
common/src/github.com/fiam/gounidecode

@@ -0,0 +1 @@
+Subproject commit 8deddbd03fec2c28969266e52f27b6fb22be1823

+ 26 - 0
common/src/qfw/util/jy.go

@@ -0,0 +1,26 @@
+package util
+
+//获取用户合并以前,合并以后的openid
+func GetOldOpenid(s_m_openid, a_m_openid, s_phone string, mergeorder interface{}) string {
+	a_mergeorder, _ := mergeorder.([]interface{})
+	openid := ""
+	if len(a_mergeorder) > 0 {
+		first, _ := a_mergeorder[0].(string)
+		if first == "s_m_openid" {
+			openid = s_m_openid
+		} else if first == "a_m_openid" {
+			openid = a_m_openid
+		} else if first == "s_phone" {
+			openid = s_phone
+		}
+	} else {
+		if s_m_openid != "" {
+			openid = s_m_openid
+		} else if a_m_openid != "" {
+			openid = a_m_openid
+		} else if s_phone != "" {
+			openid = s_phone
+		}
+	}
+	return openid
+}

+ 6 - 7
common/src/qfw/util/mysql/mysql.go

@@ -127,14 +127,13 @@ func (m *Mysql) Find(tableName string, query map[string]interface{}, fields, ord
 	defer stmtOut.Close()
 
 	rows, err := stmtOut.Query(vs...)
-	if rows != nil {
-		defer rows.Close()
-	}
 	if err != nil {
 		log.Println(err)
 		return nil
 	}
-
+	if rows != nil {
+		defer rows.Close()
+	}
 	columns, err := rows.Columns()
 	if err != nil {
 		log.Println(err)
@@ -258,13 +257,13 @@ func (m *Mysql) Count(tableName string, query map[string]interface{}) int64 {
 	defer stmtIns.Close()
 
 	rows, err := stmtIns.Query(values...)
-	if rows != nil {
-		defer rows.Close()
-	}
 	if err != nil {
 		log.Println(err)
 		return -1
 	}
+	if rows != nil {
+		defer rows.Close()
+	}
 	var count int64 = -1
 	if rows.Next() {
 		err = rows.Scan(&count)

+ 1 - 0
common/src/qfw/util/rpc/push.go

@@ -10,6 +10,7 @@ type FollowPush struct {
 	ProjectCode string
 	InfoId      string
 	FollowId    string
+	UserId      string
 	OpenId      string
 	Flag        int
 }

+ 5 - 0
common/src/qfw/util/rpc/weixin.go

@@ -11,6 +11,7 @@ type NotifyMsg struct {
 	Service     string
 	Color       string
 	DetailColor string
+	TplId       string
 }
 
 type RpcResult string
@@ -36,3 +37,7 @@ type News struct {
 	ToUser   string //用户id
 	Articles []Article
 }
+type CustomMsg struct {
+	Url  string
+	Data map[string]interface{}
+}

+ 4 - 3
core/src/qfw/active/activemanage.go

@@ -6,8 +6,6 @@ package active
 import (
 	"container/list"
 	"fmt"
-	"github.com/go-xweb/xweb"
-	"gopkg.in/mgo.v2/bson"
 	"log"
 	"math/rand"
 	. "qfw/coreconfig"
@@ -22,6 +20,9 @@ import (
 	"strings"
 	"sync"
 	"time"
+
+	"github.com/go-xweb/xweb"
+	"gopkg.in/mgo.v2/bson"
 )
 
 //限制与解除数组
@@ -45,7 +46,7 @@ var tList = list.New()
 //全局抽奖次数
 var times int64
 
-//通知openid
+//通知userid
 var notifyIds []string
 
 //对池的管理

+ 141 - 0
core/src/qfw/manage/dataExport.go

@@ -0,0 +1,141 @@
+package manage
+
+import (
+	"encoding/json"
+	"qfw/coreconfig"
+	cutil "qfw/coreutil"
+	"qfw/util"
+	//"qfw/util/mongodb"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/go-xweb/xweb"
+)
+
+type DataExport struct {
+	*xweb.Action
+	dataDetail xweb.Mapper `xweb:"/manage/dataExport/dataDetail/(\\w+)"`
+}
+
+func init() {
+	xweb.AddAction(&DataExport{})
+}
+
+func (d *DataExport) DataDetail(order_code string) error {
+	isExit := map[string]interface{}{}
+	isExit["urlExit"] = "F"
+	isExit["notime"] = "F"
+	isExit["noprice"] = "F"
+
+	//查询
+	qMap := map[string]interface{}{}
+	qMap["order_code"] = order_code
+	res := cutil.Mysql.FindOne("dataexport_order", qMap, "", "create_time desc")
+
+	orderStatus := util.IntAll((*res)["order_status"])
+	orderMoney := util.Float64All((*res)["order_money"]) / 100
+	serviceStatus := util.IntAll((*res)["service_status"])
+	downloadUrl := util.ObjToString((*res)["download_url"])
+
+	//申请发票
+	applybill_status := util.IntAll((*res)["applybill_status"])
+	if applybill_status == 1 {
+		(*res)["applybill_status"] = "已申请"
+	} else if applybill_status == 0 {
+		(*res)["applybill_status"] = "未申请"
+	}
+	//0个人 1单位
+	applybill_type := util.IntAll((*res)["applybill_type"])
+	if applybill_type == 1 {
+		(*res)["applybill_type"] = "单位"
+	} else {
+		(*res)["applybill_type"] = "个人"
+	}
+	(*res)["service_status"] = "发送失败"
+	(*res)["product_type"] = "历史数据导出"
+	(*res)["order_money"] = orderMoney
+	(*res)["order_status"] = "未支付"
+
+	//微信订单编号
+	if (*res)["pay_money"] != nil {
+		wxPayMap := map[string]interface{}{}
+		wxPayMap["out_trade_no"] = (*res)["out_trade_no"]
+		wxpay := cutil.Mysql.FindOne("weixin_pay", wxPayMap, "", "create_time desc")
+		d.T["wxpay"] = *wxpay
+	}
+	if orderStatus == 1 {
+		(*res)["order_status"] = "已支付"
+		if serviceStatus == 1 {
+			(*res)["service_status"] = "发送成功"
+		}
+	} else {
+		if (*res)["pay_money"] != nil {
+			(*res)["order_status"] = "已支付"
+			if serviceStatus == 1 {
+				(*res)["service_status"] = "发送成功"
+			}
+		} else {
+			(*res)["order_status"] = "未支付"
+			(*res)["service_status"] = "-"
+		}
+	}
+	//下载链接
+	if downloadUrl != "" {
+		(*res)["download_url"] = coreconfig.SysConfig.JyWebdomain + (*res)["download_url"].(string)
+	} else {
+		isExit["urlExit"] = "T"
+	}
+
+	var fiterMap map[string]interface{}
+	filterData := (*res)["filter"]
+	if err := json.Unmarshal([]byte(filterData.(string)), &fiterMap); err == nil {
+		//筛选条件
+		//时间处理
+		publishtime := fiterMap["publishtime"].(string)
+		if publishtime != "" {
+			starTimeStr := strings.Split(publishtime, "_")[0]
+			starTimestamp, _ := strconv.ParseInt(starTimeStr, 10, 64)
+			endTimeStr := strings.Split(publishtime, "_")[1]
+			endTimestamp, _ := strconv.ParseInt(endTimeStr, 10, 64)
+			starTime := time.Unix(starTimestamp, 0).Format("2006年01月02日")
+			endTime := time.Unix(endTimestamp, 0).Format("2006年01月02日")
+			(fiterMap)["startime"] = starTime
+			(fiterMap)["endtime"] = endTime
+		} else {
+			isExit["notime"] = "T"
+		}
+		//关键字处理
+		keywords := util.ObjArrToMapArr(fiterMap["keywords"].([]interface{}))
+		for _, v := range keywords {
+			va := v["appended"].([]interface{})
+			vAppended := util.ObjArrToStringArr(va)
+			appendedStr := strings.Join(vAppended, "")
+			v["appended_str"] = appendedStr
+			ve := v["exclude"].([]interface{})
+			vExclude := util.ObjArrToStringArr(ve)
+			excludeStr := strings.Join(vExclude, "")
+			v["exclude_str"] = excludeStr
+		}
+		//金额处理
+		minPrice := fiterMap["minprice"]
+		maxPrice := fiterMap["maxprice"]
+		if minPrice == "" && maxPrice == "" {
+			isExit["noprice"] = "T"
+		} else if maxPrice == "" && minPrice != "" {
+			isExit["noprice"] = "onlymin"
+		} else if maxPrice != "" && minPrice == "" {
+			isExit["noprice"] = "onlymax"
+		}
+		//信息类型处理
+		subtype := fiterMap["subtype"].(string)
+		if subtype != "" {
+			subtypeStr := strings.Replace(subtype, ",", " ", -1)
+			fiterMap["subtype"] = subtypeStr
+		}
+	}
+	d.T["isExit"] = isExit
+	d.T["res"] = *res
+	d.T["filterData"] = fiterMap
+	return d.Render("/manage/dataExport.html")
+}

+ 24 - 8
core/src/qfw/manage/dataExportOrder.go

@@ -1,6 +1,7 @@
 package manage
 
 import (
+	"fmt"
 	"qfw/coreconfig"
 	util "qfw/coreutil"
 
@@ -36,30 +37,45 @@ func (d *DataExportOrder) Pageing() {
 	if service_status != "" {
 		qMap["service_status"] = service_status
 	}
-	res := util.Mysql.Find("dataexport_order", qMap, "order_code,pay_time,data_spec,order_money,order_status,service_status,download_url", "create_time desc", (currentPage-1)*perPage, perPage)
+	res := util.Mysql.Find("dataexport_order", qMap, "order_code,pay_time,data_spec,order_money,order_status,service_status,download_url,applybill_status,pay_money", "create_time desc", (currentPage-1)*perPage, perPage)
+	fmt.Println("res", res)
 	count := util.Mysql.Count("dataexport_order", qMap)
 
 	for k, v := range *res {
 		v["index"] = k + 1
-
 		if v["pay_time"] == nil {
 			v["pay_time"] = "-"
 		}
 		var y, n int64 = 1, 0
+		//申请发票
+		if v["applybill_status"] == y {
+			v["applybill_status"] = "已申请"
+		} else if v["applybill_status"] == n || v["applybill_status"] == nil {
+			v["applybill_status"] = "未申请"
+		}
+		//数据发送状态
+		if v["service_status"] == y {
+			v["service_status"] = "发送成功"
+		} else {
+			v["service_status"] = "发送失败"
+		}
+		//是否支付
 		if v["order_status"] == n {
 			v["order_status"] = "未支付"
 			v["service_status"] = "-"
+			v["applybill_status"] = "-"
 		} else if v["order_status"] == y {
 			v["order_status"] = "已支付"
-			if v["service_status"] == y {
-				v["service_status"] = "发送成功"
+		} else {
+			//删除用户 -1 根据支付金额判断
+			if v["pay_money"] != nil {
+				v["order_status"] = "已支付"
 			} else {
-				v["service_status"] = "发送失败"
+				v["order_status"] = "未支付"
+				v["service_status"] = "-"
+				v["applybill_status"] = "-"
 			}
-		} else {
-			v["order_status"] = "已删除"
 		}
-
 		if v["download_url"] != nil {
 			v["download_url"] = coreconfig.SysConfig.JyWebdomain + v["download_url"].(string)
 		}

+ 41 - 12
core/src/qfw/manage/feedback.go

@@ -100,7 +100,7 @@ func (s *SystemManage) Feedbackcontent(_id string) error {
 		if u_type == 0 {
 			r := FindById("interaction", _id, `{"i_type":1,"l_submitdate":1,"s_submitid":1,"s_submitname":1,"s_remark":1,
 					  "s_pic":1,"s_enterprisetype":1,"_id":1,"s_link":1,"i_status":1,"s_title":1,
-					"s_editorname":1,"s_opinion":1,"l_editordate":1,"s_record":1,"s_title_no":1,"s_source":1,"s_username":1}`)
+					"s_editorname":1,"s_opinion":1,"l_editordate":1,"s_record":1,"s_title_no":1,"s_source":1,"s_username":1,"s_from":1}`)
 			if nil != r {
 				if util.IntAll((*r)["i_status"]) == 0 {
 					s_editorname, _ := s.GetSession("nickName").(string)
@@ -157,6 +157,7 @@ func (s *SystemManage) Updateback() error {
 		s_submitid := s.GetString("s_submitid")
 		opinion := s.GetString("s_opinion")
 		title := s.GetString("s_remark")
+		s_from := s.GetString("s_from")
 		if len(title) > 40 {
 			title = front.SubstrByByte(title, 40)
 		}
@@ -188,36 +189,64 @@ func (s *SystemManage) Updateback() error {
 			//
 			f := FindOne("user", "{'_id':'"+s_submitid+"'}")
 			if (*f)["s_m_openid"] != nil {
-				openid := (*f)["s_m_openid"].(string)
+				s_m_openid, _ := (*f)["s_m_openid"].(string)
+				a_m_openid, _ := (*f)["a_m_openid"].(string)
+				s_phone, _ := (*f)["s_phone"].(string)
 				opinion := s.GetString("s_opinion")
 				if (*f)["i_appid"] == 2 {
 					userType := util.IntAll((*f)["i_type"])
 					jpushid, _ := (*f)["s_jpushid"].(string)
 					opushid, _ := (*f)["s_opushid"].(string)
 					//微信发送模板消息
-					if userType == 0 && openid != "" {
-						msgurl := coreconfig.SysConfig.JyWebdomain + "/front/sess/" + seTopnet.EncodeString(openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",myfeedbacks")
+					isWxReply, isAppReply := false, false
+					if s_from == "" {
+						if userType == 0 && s_m_openid != "" {
+							isWxReply = true
+						}
+						//app推送极光消息
+						if (userType == 1 || userType == 2) && (jpushid != "" || opushid != "") {
+							isAppReply = true
+						}
+					} else if s_from == "app" {
+						if jpushid != "" || opushid != "" {
+							isAppReply = true
+						}
+					} else if s_from == "wx" {
+						if s_m_openid != "" {
+							isWxReply = true
+						}
+					}
+					if isWxReply {
+						msgurl := coreconfig.SysConfig.JyWebdomain + "/front/sess/" + seTopnet.EncodeString(s_m_openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",myfeedbacks")
 						s_result := "剑鱼客服回复了您的问题!"
 						s_detail := "问题回复"
 						s_remark := "  " + opinion
 						s_submitdate := s.GetString("l_submitdate")
-						log.Println("微信模板消息-意见反馈答复", openid)
-						coreutil.JyWeixinRpc.SendFeedbackNotifyMsg(&qrpc.NotifyMsg{Openid: openid, Title: s_result, Detail: s_detail, Date: s_submitdate, Remark: s_remark, Url: msgurl})
-					} else if (userType == 1 || userType == 2) && (jpushid != "" || opushid != "") {
-						//app推送极光消息
-						msgurl := "/jyapp/free/sess/" + seTopnet.EncodeString(openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",myfeedbacks")
+						log.Println("微信模板消息-意见反馈答复", s_m_openid)
+						coreutil.JyWeixinRpc.SendFeedbackNotifyMsg(&qrpc.NotifyMsg{Openid: s_m_openid, Title: s_result, Detail: s_detail, Date: s_submitdate, Remark: s_remark, Url: msgurl})
+					}
+					if isAppReply {
+						sess_openid := a_m_openid
+						if sess_openid == "" {
+							sess_openid = s_phone
+						}
+						if sess_openid == "" {
+							sess_openid = s_m_openid
+						}
+						msgurl := "/jyapp/free/sess/" + seTopnet.EncodeString(sess_openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",myfeedbacks")
 						ponetype, _ := (*f)["s_appponetype"].(string)
 						if jpushid != "" || opushid != "" {
 							if len([]rune(opinion)) > 80 {
 								opinion = string([]rune(opinion)[:80]) + "..."
 							}
-							log.Println("极光推送-意见反馈答复", openid, jpushid)
+							log.Println("极光推送-意见反馈答复", sess_openid, jpushid)
 							go coreutil.AppPushServiceCall(map[string]interface{}{
 								"phoneType":   ponetype,
 								"otherPushId": opushid,
 								"jgPushId":    jpushid,
 								"url":         msgurl,
-								"openId":      openid,
+								"openId":      sess_openid,
+								"userId":      s_submitid,
 								"type":        "feedback",
 								"descript":    opinion,
 								"extend": map[string]interface{}{
@@ -234,7 +263,7 @@ func (s *SystemManage) Updateback() error {
 					s_detail := "以下是对你提交“" + title + "”意见的回复结果"
 					s_remark := "  " + opinion
 					go func() {
-						coreutil.SendManagerNotifyMsg(&qrpc.NotifyMsg{Openid: openid, Title: s_result, Detail: s_detail, Remark: s_remark})
+						coreutil.SendManagerNotifyMsg(&qrpc.NotifyMsg{Openid: s_m_openid, Title: s_result, Detail: s_detail, Remark: s_remark})
 					}()
 				}
 			}

+ 73 - 33
core/src/qfw/manage/message.go

@@ -3,6 +3,7 @@ package manage
 import (
 	"fmt"
 	"html/template"
+	"log"
 	. "qfw/coreconfig"
 	"qfw/coreutil"
 	"qfw/util"
@@ -33,6 +34,7 @@ type Message struct {
 }
 
 var meslock *sync.Mutex
+var msgPool = make(chan bool, 20)
 
 func init() {
 	meslock = new(sync.Mutex)
@@ -53,10 +55,17 @@ func (m *Message) UpdateMes() bool {
 }
 
 //
-func (m *Message) AddUserOpenid() bool {
-	openids := m.GetString("openids")
-	ok := redis.Put("other", "messageOpenids", openids, -1)
-	return ok
+func (m *Message) AddUserOpenid() string {
+	userids := m.GetString("userids")
+	msg := ""
+	if userids == "" {
+		msg = "给所有人发消息"
+		redis.Del("other", "messageUserids")
+	} else {
+		msg = "给" + userids + "发消息"
+		redis.Put("other", "messageUserids", userids, -1)
+	}
+	return msg
 }
 
 //
@@ -178,51 +187,81 @@ func (m *Message) Sase() error {
 //
 func sendMes(id, title, subtitle, url, pic string) error {
 	defer util.Catch()
-	var userDatas []map[string]interface{}
-	mos := redis.Get("other", "messageOpenids")
-	if mos != nil && util.ObjToString(mos) != "" {
-		openids := strings.Split(util.ObjToString(mos), ",")
-		for _, v := range openids {
-			userData := FindOneByField("user", `{"s_m_openid":"`+v+`"}`, `{"s_m_openid":1,"s_jpushid":1,"s_province":1,"s_city":1,"s_nickname":1,"s_opushid":1,"s_appponetype":1}`)
-			if userData != nil && len(*userData) > 0 {
-				userDatas = append(userDatas, *userData)
+	mos := redis.Get("other", "messageUserids")
+	var query map[string]interface{}
+	if mos != nil {
+		_ids := []bson.ObjectId{}
+		for _, v := range strings.Split(util.ObjToString(mos), ",") {
+			_ids = append(_ids, bson.ObjectIdHex(v))
+		}
+		if len(_ids) > 0 {
+			query = map[string]interface{}{
+				"_id": map[string]interface{}{
+					"$in": _ids,
+				},
 			}
 		}
 	} else {
-		userDatas = *Find("user", `{"i_type":{"$in": [1,2]}}`, `{"l_registedate":-1}`, `{"s_m_openid":1,"s_jpushid":1,"s_province":1,"s_city":1,"s_nickname":1,"s_opushid":1,"s_appponetype":1}`, false, -1, -1)
+		query = map[string]interface{}{
+			"s_jpushid": map[string]interface{}{
+				"$exists": 1,
+			},
+		}
+	}
+	if query == nil {
+		log.Println("没有符合条件的用户!")
+		return nil
 	}
+	sess := GetMgoConn()
+	defer DestoryMongoConn(sess)
+	it := sess.DB("qfw").C("user").Find(query).Sort("l_registedate").Select(map[string]interface{}{
+		"s_m_openid":    1,
+		"s_jpushid":     1,
+		"s_province":    1,
+		"s_city":        1,
+		"s_nickname":    1,
+		"s_opushid":     1,
+		"s_appponetype": 1,
+	}).Iter()
 	var total = 0
-	for _, v := range userDatas {
+	for v := make(map[string]interface{}); it.Next(&v); {
 		jpushid := util.ObjToString(v["s_jpushid"])
+		if jpushid == "" || id == "" {
+			continue
+		}
 		opushid := util.ObjToString(v["s_opushid"])
-		openid := util.ObjToString(v["s_m_openid"])
+		_id := util.BsonIdToSId(v["_id"])
 		province := util.ObjToString(v["s_province"])
 		city := util.ObjToString(v["s_city"])
 		nickname := util.ObjToString(v["s_nickname"])
 		ponetype := util.ObjToString(v["s_appponetype"])
-		if (jpushid != "" || opushid != "") && openid != "" && id != "" {
-			total = total + 1
-			go func() {
-				ca.SaveCache("jy_message", map[string]interface{}{
-					"id":       uc.DayShortTime(),
-					"openid":   openid,
-					"mid":      id,
-					"title":    title,
-					"subtitle": subtitle,
-					"province": province,
-					"city":     city,
-					"nickname": nickname,
-					"action":   "S", //S:发送 D:送达 C:打开
-					"date":     time.Now().Unix(),
-					"url":      url,
-				})
+		openid := util.ObjToString(v["s_m_openid"])
+		total = total + 1
+		msgPool <- true
+		go func() {
+			defer func() {
+				<-msgPool
 			}()
+			ca.SaveCache("jy_message", map[string]interface{}{
+				"id":       uc.DayShortTime(),
+				"openid":   _id,
+				"mid":      id,
+				"title":    title,
+				"subtitle": subtitle,
+				"province": province,
+				"city":     city,
+				"nickname": nickname,
+				"action":   "S", //S:发送 D:送达 C:打开
+				"date":     time.Now().Unix(),
+				"url":      url,
+			})
 			coreutil.AppPushServiceCall(map[string]interface{}{
 				"phoneType":   ponetype,
 				"otherPushId": opushid,
 				"jgPushId":    jpushid,
 				"url":         url + "==" + id,
 				"openId":      openid,
+				"userId":      _id,
 				"type":        "message",
 				"content":     pic,
 				"descript":    subtitle,
@@ -231,9 +270,10 @@ func sendMes(id, title, subtitle, url, pic string) error {
 					"s_id": id,
 				},
 			})
-		}
+		}()
+		v = make(map[string]interface{})
 	}
-	go Update("message_app", map[string]interface{}{"_id": bson.ObjectIdHex(id)}, map[string]interface{}{"$set": map[string]interface{}{"i_total": total}}, false, false)
+	Update("message_app", map[string]interface{}{"_id": bson.ObjectIdHex(id)}, map[string]interface{}{"$set": map[string]interface{}{"i_total": total}}, false, false)
 	return nil
 }
 

+ 1 - 1
core/src/timetask.json

@@ -1 +1 @@
-{"comment":{"c_rate":720,"commentrate":900},"market":{"demand":{"attr":["i_hits","i_bids","i_status"],"timepoint":"2018-10-29 14:18:29"},"service":{"attr":["i_hits","i_sales","i_comments","i_score","i_appcounts"],"timepoint":"2018-10-29 14:18:29"}},"marketisstart":true,"marketrate":300}
+{"comment":{"c_rate":720,"commentrate":900},"market":{"demand":{"attr":["i_hits","i_bids","i_status"],"timepoint":"2019-02-22 11:26:04"},"service":{"attr":["i_hits","i_sales","i_comments","i_score","i_appcounts"],"timepoint":"2019-02-22 11:26:04"}},"marketisstart":true,"marketrate":300}

+ 97 - 0
core/src/web/staticres/dataexport/base.css

@@ -0,0 +1,97 @@
+* {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -webkit-overflow-scrolling: touch;
+}
+body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, sumary {
+    margin: 0;
+    padding: 0;
+}
+html,body {
+    /* max-width: 750px; */
+    -webkit-text-size-adjust: 100%;
+    margin: 0 auto;
+    height: 100%;
+    overflow-x: hidden;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+   /* font-size: .24rem;*/
+    background:rgba(245,244,249,1);;
+    color: #3d3d3d;
+    font-family:  "Microsoft YaHei","Helvetica Neue", "Roboto", "Segoe UI", "PingFang SC", "Hiragino Sans GB", sans-serif;
+}
+
+ul,ol {
+    list-style: none;
+}
+/*清除输入框内阴影*/
+input,textarea,select,button{
+    outline: none;
+    border: 0;
+    -webkit-appearance: none;
+    appearance:none;
+}
+
+img {
+    border: 0;
+    vertical-align: middle;
+    max-width: 100%;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+a {
+    text-decoration: none;
+    color: #3d3d3d;
+	-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+	-webkit-user-select: none;
+	-moz-user-focus: none;
+	-moz-user-select: none;
+}
+/*禁用长按页面时的弹出菜单(iOS下有效) ,img和a标签都要加*/
+img,a{
+    -webkit-touch-callout:none;
+}
+em,i{
+	font-style: normal;
+}
+/*兼容ios调取h5页面的头部*/
+.ios-head {
+    display: none;
+    position: fixed;
+    top: 0;
+    padding-top: 15px;
+    background: #18974b;
+    width: 100%;
+    z-index: 100;
+}
+/*base*/
+.clearfix{
+    zoom: 1;
+}
+.clearfix:after{
+    clear: both;
+    height: 0;
+    overflow: hidden;
+    display: block;
+    visibility: hidden;
+    content: "";
+}
+
+.fl {
+    float: left;
+}
+
+.fr {
+    float: right;
+}
+.ellipsis {
+    overflow:hidden;
+    text-overflow:ellipsis;
+    white-space:nowrap;
+}
+.show{
+	display: block;
+}
+.hide{
+	display: none;
+}

+ 27 - 0
core/src/web/staticres/dataexport/dataExport.css

@@ -0,0 +1,27 @@
+/*.header { height: 100px; background: #fff; border-bottom: 1px solid #ddd; }*/
+
+/*.footer { height: 120px; background: #444; border-top: 3px solid #f00; }*/
+
+.main { padding: 20px 54px 30px 20px; overflow: hidden; width: 100%; background: #f6f5fb; }
+
+/*.left { width: 200px; height: 512px; border: 1px solid #ddd; background: #fff; float: left; }*/
+
+.right { float: right; width: calc(100% - 220px); border: 1px solid #ddd; min-height: 506px; }
+.right .title { height: 78px; line-height: 78px; padding-left: 80px; font-size: 16px; background: #fff; }
+.right .title span { width: 36px; height: 1px; background: #333333; display: inline-block; vertical-align: middle; }
+.right .order_info .hd, .right .download_link .hd, .right .filter .hd { height: 34px; line-height: 34px; background: #f7f8fa; padding-left: 120px; font-size: 14px; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; }
+.right .order_info .bd, .right .download_link .bd, .right .filter .bd { padding: 0 120px; background: #fff; }
+.right .order_info .bd .line, .right .download_link .bd .line, .right .filter .bd .line { float: left; width: 1px; height: 155px; background: #ddd; margin-top: 20px; }
+.right .order_info .bd .row, .right .download_link .bd .row, .right .filter .bd .row { float: left; padding: 0px 30px 30px 30px; }
+.right .order_info .bd .row .row-list, .right .download_link .bd .row .row-list, .right .filter .bd .row .row-list { line-height: 1.8; font-size: 14px;  }
+.right .order_info .bd .first, .right .download_link .bd .first, .right .filter .bd .first { padding-left: 14px; width: 37%; }
+.right .order_info .bd .second, .right .download_link .bd .second, .right .filter .bd .second { width: 30%; }
+.right .order_info .bd .third, .right .download_link .bd .third, .right .filter .bd .third { width: 38%; }
+.right .order_info .bd .link, .right .download_link .bd .link, .right .filter .bd .link { height: 56px; line-height: 56px; font-size: 14px; }
+.right .order_info .bd .link:hover, .right .download_link .bd .link:hover, .right .filter .bd .link:hover { color: #f00; }
+.right .order_info .bd .filter_cont, .right .download_link .bd .filter_cont, .right .filter .bd .filter_cont { padding: 20px 0 60px 0;margin-left: -2px }
+.right .order_info .bd .filter_cont .filter-list, .right .download_link .bd .filter_cont .filter-list, .right .filter .bd .filter_cont .filter-list { width: 100%; margin-bottom: 10px; font-size: 14px; }
+.right .order_info .bd .filter_cont .filter-list label, .right .download_link .bd .filter_cont .filter-list label, .right .filter .bd .filter_cont .filter-list label { float: left; width: 70px; }
+.right .order_info .bd .filter_cont .filter-list .ul, .right .download_link .bd .filter_cont .filter-list .ul, .right .filter .bd .filter_cont .filter-list .ul { float: left; }
+.right .order_info .bd .filter_cont .filter-list .ul li, .right .download_link .bd .filter_cont .filter-list .ul li, .right .filter .bd .filter_cont .filter-list .ul li { float: left; margin-right: 8px; }
+.right .order_info .bd .filter_cont .filter-list .ul .keywords, .right .download_link .bd .filter_cont .filter-list .ul .keywords, .right .filter .bd .filter_cont .filter-list .ul .keywords { margin-right: 16px; border: 1px solid #ddd; padding: 14px 36px 14px 14px; }

+ 116 - 0
core/src/web/staticres/dataexport/dataExport.scss

@@ -0,0 +1,116 @@
+.header{
+	height: 100px;
+	background: #fff;
+	border-bottom: 1px solid #ddd;
+}
+.footer{
+	height: 120px;
+	background: #444;
+	border-top: 3px solid #f00;
+}
+.main{
+	padding: 30px 54px 30px 40px;
+	overflow: hidden;
+	width: 100%;
+	background: #f6f5fb;
+}
+.left{
+	width: 200px;
+	height: 512px;
+	border: 1px solid #ddd;
+	background: #fff;
+	float: left;
+}
+.right{
+	float: right;
+	width: calc(100% - 212px);
+	border: 1px solid #ddd;
+	height: auto;
+	.title{
+		height: 78px;
+		line-height: 78px;
+		padding-left: 80px;
+		font-size: 16px;
+		background: #fff;
+		span{
+			width: 36px;
+			height: 1px;
+			background: #333333;
+			display: inline-block;
+			vertical-align: middle;
+		}
+	}
+	.order_info,.download_link,.filter{
+		.hd{
+			height: 34px;
+			line-height: 34px;
+			background: #f7f8fa;
+			padding-left: 120px;
+			font-size: 14px;
+			border-top: 1px solid #ddd;
+			border-bottom: 1px solid #ddd;
+		}
+		.bd{
+			padding:0 120px;
+			background: #fff;
+			.line{
+				float: left;
+				width: 1px;
+				height: 150px;
+				background: #ddd;
+				margin-top: 20px;
+			}
+			.row{
+				float: left;
+				padding: 20px 30px 30px 30px;
+				.row-list{
+					line-height: 1.8;
+					font-size: 14px;
+					white-space: nowrap;
+				}
+			}
+			.first{
+				padding-left: 0;
+				width: 35%;
+			}
+			.second{
+				width: 31%;
+			}
+			.third{
+				width: 33%;
+			}
+			.link{
+				height: 56px;
+				line-height: 56px;
+				font-size: 14px;
+			}
+			.link:hover{
+				color: #f00;
+			}
+			.filter_cont{
+				padding: 20px 0 60px 0;  
+				.filter-list{
+					width: 100%;
+					margin-bottom: 10px;
+					font-size: 14px;
+					label{
+						float: left;
+						width: 70px;
+					}
+					.ul{
+						float: left;
+						li{
+							float: left;
+							margin-right: 8px;
+						}
+						.keywords{
+							margin-right: 16px;
+							border: 1px solid #ddd;
+							padding: 14px 36px 14px 14px;
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 230 - 0
core/src/web/templates/manage/dataExport.html

@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+		<title>数据导出订单</title>
+		{{include "/common/inc.html"}}
+		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/dataexport/base.css"/>
+		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/dataexport/dataExport.css"/>
+	</head>
+	<style>
+	.nofloat{float:none}
+	body {
+	    padding-top: 0px;
+	    font-family: tahoma, arial, 'Hiragino Sans GB', 'Microsoft YaHei', 宋体, sans-serif;
+	    color: #4e5051;
+	    background: #f5f5fb;
+	}
+	#dataExportOrder {
+	    background-color: #f5f5f5;
+	}
+	.cont-one, .row {
+   	 margin-top: 20px  !important;
+	}
+	</style>
+	<body>
+		{{include "/manage/audithead.html"}}
+		<div class="main">
+			<div class="left">
+			{{include "/manage/slider.html"}}</div>
+			<div class="right" style="color:#4e5051">
+				<div class="title">
+					<span></span>订单详情<span></span>
+				</div>
+				<!-- 订单信息 -->
+				<div class="order_info" >
+					<div class="hd">订单信息</div>
+					<div class="bd clearfix" style="padding-right: 65px;">
+						<ul class="row first"  style="margin-top:20px  !important;">
+							<li class="row-list nofloat">支付状态:{{.T.res.order_status}}</li>
+							<li class="row-list nofloat">数据发送状态:{{.T.res.service_status}}</li>
+							<li class="row-list nofloat">订单编号:{{.T.res.order_code}}</li>
+							<li class="row-list nofloat">下单时间:{{.T.res.create_time}}</li>
+							{{if .T.res.order_status}}
+							{{if eq .T.res.order_status "已支付"}}
+							<li class="row-list nofloat">支付时间:{{.T.res.pay_time}}</li>
+							<li class="row-list nofloat">微信支付单号:{{.T.wxpay.transaction_id}}</li>
+							{{else}}
+							<li class="row-list nofloat">支付时间:-</li>
+							<li class="row-list nofloat">微信支付单号:-</li>
+							{{end}}
+							{{end}}
+						</ul>
+						<div class="line"></div>
+						<ul class="row second"  style="margin-top:20px  !important;">
+							<li class="row-list nofloat">产品类型:{{.T.res.product_type}}</li>
+							<li class="row-list nofloat">数据规格:{{.T.res.data_spec}}</li>
+							<li class="row-list nofloat">数量:{{.T.res.data_count}}条</li>
+							<li class="row-list nofloat">价格:{{.T.res.order_money}}元</li>
+							<li class="row-list nofloat">邮箱地址:{{.T.res.user_mail}}</li>
+							<li class="row-list nofloat">手机号:{{.T.res.user_phone}}</li>
+						</ul>
+						<div class="line"></div>
+						<ul class="row third"  style="margin-top:20px  !important;padding-right: 0px;">	
+							{{if .T.res.order_status}}
+							{{if eq .T.res.order_status "未支付"}}
+							<li class="row-list nofloat">发票类型:-</li>
+							<li class="row-list nofloat">发票内容:-</li>
+							<li class="row-list nofloat">发票抬头:-</li>
+							{{else}}
+							{{if .T.res.applybill_status}}
+							{{if eq .T.res.applybill_status "已申请"}}
+							<li class="row-list nofloat">发票状态:{{.T.res.applybill_status}}</li>
+							<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+							<li class="row-list nofloat">发票内容:明细</li>
+							<li class="row-list nofloat">发票抬头:{{.T.res.applybill_type}}</li>
+							{{else}}
+							<li class="row-list nofloat">发票状态:{{.T.res.applybill_status}}</li>
+							<li class="row-list nofloat">发票类型:-</li>
+							<li class="row-list nofloat">发票内容:-</li>
+							<li class="row-list nofloat">发票抬头:-</li>
+							{{end}}
+							{{end}}
+							{{if .T.res.applybill_type}}
+							{{if eq .T.res.applybill_type "个人"}}
+							<li class="row-list nofloat" style="display:none">单位名称:{{.T.res.applybill_company}}</li>
+							<li class="row-list nofloat" style="display:none">纳税人识别号:{{.T.res.applybill_taxnum}}</li>
+							{{else}}
+							<li class="row-list nofloat">单位名称:{{.T.res.applybill_company}}</li>
+							<li class="row-list nofloat">纳税人识别号:{{.T.res.applybill_taxnum}}</li>
+							{{end}}
+							{{end}}
+							{{end}}
+							{{end}}
+						</ul>
+					</div>
+				</div>
+				{{if .T.isExit.urlExit}}
+				{{if eq .T.isExit.urlExit "T"}}
+				<!-- 下载链接 -->
+				<div class="download_link" style="display:none">
+					<div class="hd">下载链接</div>
+					<div class="bd">
+						<a href="#" class="link">{{.T.res.download_url}}</a>
+					</div>
+				</div>
+				{{else}}
+				<div class="download_link">
+					<div class="hd">下载链接</div>
+					<div class="bd">
+						<a href="{{.T.res.download_url}}" class="link">{{.T.res.download_url}}</a>
+					</div>
+				</div>
+				{{end}}
+				{{end}}
+				
+				<!-- 筛选条件 -->
+				<div class="filter">
+					<div class="hd">筛选条件</div>
+					<div class="bd">
+						<div class="filter_cont">
+							
+							<div class="filter-list clearfix">
+							{{if .T.isExit.notime}}
+							{{if eq .T.isExit.notime "T"}}
+								<label >筛选日期:</label>
+								<ul class="ul">
+									<li></li>
+								</ul>
+							{{else}}
+								<label>筛选日期:</label>
+								<ul class="ul">
+									<li>{{.T.filterData.startime}} - {{.T.filterData.endtime}}</li>
+								</ul>
+							{{end}}
+							{{end}}
+							</div>
+							
+							<div class="filter-list clearfix">
+
+								<label>区域:</label>
+								{{range $k, $v := .T.filterData.area}}
+								<ul class="ul">
+									<li>{{$v}}</li>
+								</ul>
+								{{end}}
+							</div>
+							<div class="filter-list clearfix">
+
+								<label>行业:</label>
+								<ul class="ul" style="width:92%">
+								{{range $k, $v := .T.filterData.industry}}
+									<li>{{$v}}</li>
+								{{end}}
+								</ul>
+							</div>
+							<div class="filter-list clearfix">
+								
+								<label>关键词:</label>
+								{{range $k, $v := .T.filterData.keywords}}
+								<ul class="ul">
+									<li class="keywords">
+										<p>关键词:{{$v.keyword}}</p>
+										<p>附加词:{{$v.appended_str}}</p>
+										<p>排除词:{{$v.exclude_str}}</p>
+									</li>
+								</ul>
+								{{end}}
+							</div>
+							<div class="filter-list clearfix">
+								{{if .T.isExit.noprice}}
+								{{if eq .T.isExit.noprice "T"}}
+								<label>金额:</label>
+								<ul class="ul">
+									<li></li>
+								</ul>
+								{{else if eq .T.isExit.noprice "onlymin"}}
+								<label>金额:</label>
+								<ul class="ul">
+									<li>{{.T.filterData.minprice}}万元 - </li>
+								</ul>
+								{{else if eq .T.isExit.noprice "onlymax"}}
+								<label>金额:</label>
+								<ul class="ul">
+									<li> - {{.T.filterData.maxprice}}万元</li>
+								</ul>
+								{{else}}
+								<label>金额:</label>
+								<ul class="ul">
+									<li>{{.T.filterData.minprice}}万元 - {{.T.filterData.maxprice}}万元</li>
+								</ul>
+								{{end}}
+								{{end}}
+							</div>
+							<div class="filter-list clearfix">
+
+								<label>信息类型:</label>
+								<ul class="ul">
+									<li>{{.T.filterData.subtype}}</li>
+								</ul>
+							</div>
+							<div class="filter-list clearfix">
+
+								<label>采购单位:</label>
+								<ul class="ul">
+								{{range $k, $v := .T.filterData.buyer}}
+									<li>{{$v}}</li>
+								{{end}}
+								</ul>
+
+							</div>
+							<div class="filter-list clearfix">
+
+								<label>中标单位:</label>
+								<ul class="ul">
+								{{range $k,$v :=.T.filterData.winner}}
+									<li>{{$v}}</li>
+								{{end}}
+								</ul>
+
+							</div>
+						</div>
+					</div>
+				</div>
+
+			</div>
+		</div>
+		{{include "/common/bottom.html"}}
+	</body>
+</html>

+ 78 - 57
core/src/web/templates/manage/dataExportOrder.html

@@ -1,7 +1,9 @@
+
 <html>
 <head>
 <title>审核用户</title>
 {{include "/common/inc.html"}}
+<script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
 <script src="/js/qfwtable.js"></script>
 <style type="text/css">
 #dataExportOrder{
@@ -17,23 +19,27 @@
 width:5%;
 }
 .table>thead>tr>th:nth-child(2){
-width:12%;
+width:11%;
 }
 .table>thead>tr>th:nth-child(3){
-width:18%;	
+width:15%;	
 }
 .table>thead>tr>th:nth-child(4),.table>thead>tr>th:nth-child(6),.table>thead>tr>th:nth-child(5){
 width:11%;
 }
 .table>thead>tr>th:nth-child(7){
-width:25%;
+width:10%;
 }
 .table>thead>tr>th:nth-child(8){
-width:12%;
+width:25%;
+}
+
+.table>thead>tr>th:nth-child(9){
+width:10%;
 text-align: center;
 }
-.table>tbody>tr>td:nth-child(8){
-	text-align: center;
+.table>tbody>tr>td:nth-child(9){
+text-align: center;
 }
 .table>thead>tr>th{
 border:0px;
@@ -71,74 +77,89 @@ background-color:#18CC7D;
 <script>
 $(function(){
 	$("#audit").datatable({
-	   perPage: 10
-	  ,showPagination:true
-	  ,checkbox:"" //check radio
-	  ,checkboxHeader:false
-	  ,idField:"_id"
-	  ,classname:"table-hover"
-	  ,css:{"height":"450px"}
-	  //,post:{"name":"ee"}
-	  ,buttons: ['<div style="width:50%;margin:5px" class="input-group pull-right" id="search"><input type="text" id="searchtext" value=""  data-original-title="Search" class="form-control" placeholder="请输入订单编号"><span class="input-group-btn"><button class="btn btn-success" onclick="SearchContent()" data-original-title="Search" id="searchtip" type="button" style="height:38px;">检索</button></span></div><div style="margin:5px;" class="controls pull-right"><select class="form-control" id="select2" ><option value="">  数据发送状态  </option><option  value="1">  发送成功</option><option value="0">  发送失败 </option></select></div><div style="margin:5px;" class="controls pull-right"><select class="form-control" id="select1"><option value="">  订单状态  </option><option value="1">  已支付 </option><option value="0">  未支付 </option></select></div>']
-	  , url: '/manage/dataExport/p'
-	  , columns: [
-			{
-	            title: "序号", field: "index"	
-	        },
-	        {
-	            title: "订单编号", field: "order_code"	
-	        },
-			{
-	            title: "购买时间",field: "pay_time"
-	        },
-			{
-	            title: "数据规格", field: "data_spec"
-	        },
-			{
-	            title: "价格", field: "order_money"
-				,callback:function(ct,cd,val,k,m){
-					if(ct["order_money"]){
-					return 	ct["order_money"]/100+"元"
+		   perPage: 10
+		  ,showPagination:true
+		  ,checkbox:"" //check radio
+		  ,checkboxHeader:false
+		  ,idField:"_id"
+		  ,classname:"table-hover"
+		  ,css:{"height":"450px"}
+		  //,post:{"name":"ee"}
+		  ,buttons: ['<div style="width:50%;margin:5px" class="input-group pull-right" id="search"><input type="text" id="searchtext" value=""  data-original-title="Search" class="form-control" placeholder="请输入订单编号"><span class="input-group-btn"><button class="btn btn-success" onclick="SearchContent()" data-original-title="Search" id="searchtip" type="button" style="height:38px;">检索</button></span></div><div style="margin:5px;" class="controls pull-right"><select class="form-control" id="select2" ><option value="">  数据发送状态  </option><option  value="1">  发送成功</option><option value="0">  发送失败 </option></select></div><div style="margin:5px;" class="controls pull-right"><select class="form-control" id="select1"><option value="">  订单状态  </option><option value="1">  已支付 </option><option value="0">  未支付 </option></select></div>']
+		  , url: '/manage/dataExport/p'
+		  , columns: [
+				{
+		            title: "序号", field: "index"	
+		        },
+		        {
+		            title: "订单编号", field: "order_code"
+					,callback:function(ct,cd,val,k,m){
+						if(ct["order_code"]){
+						return "<a onclick='redirect(\""+ct["order_code"]+"\")' style='color:#4e5051;text-decoration:none'>"+   ct["order_code"]+"</a>"
+						}
+					}	
+		        },
+				{
+		            title: "购买时间",field: "pay_time"
+		        },
+				{
+		            title: "数据规格", field: "data_spec"
+		        },
+				{
+		            title: "价格", field: "order_money"
+					,callback:function(ct,cd,val,k,m){
+						if(ct["order_money"]){
+						return 	ct["order_money"]/100+"元"
+						}
 					}
-				}
-	        },
-			{
-	            title: "支付状态", field: "order_status"
-	        },
-			{
-	            title: "下载链接", field: "download_url"
-				,callback:function(ct,cd,val,k,m){
-					if(ct["download_url"]){
-					return "<a href='"+ct["download_url"]+"' title='"+ct["download_url"]+"'>"+   ct["download_url"]+"</a>"	
+		        },
+				{
+		            title: "支付状态", field: "order_status"
+		        },
+				{
+		            title: "发票状态", field: "applybill_status"
+		        },
+				{
+		            title: "下载链接", field: "download_url"
+					,callback:function(ct,cd,val,k,m){
+						if(ct["download_url"]){
+						return "<a href='"+ct["download_url"]+"' title='"+ct["download_url"]+"'>"+   ct["download_url"]+"</a>"	
+						}
 					}
-				}
-	        },
-			{
-	            title: "数据发送状态", field: "service_status"
-	        }
-	    ]
-	});
+		        },
+				{
+		            title: "数据发送状态", field: "service_status"
+		        }
+		    ]
+		});
+
 	$("select").change(function(){
+	//$("body").on("change","select",function(){
 		//选择已支付,才能选择是否发送成功
 		if($("#select1").val()=="0"){
 			$("#select2").val("").attr("disabled","disabled");
 		}else{
 			$("#select2").removeAttr("disabled","disabled");
 		}
-		
-		var find=$("#audit").data("datatable")
+		var find=$("#audit").data("datatable");
 		if(!find.options.opost) find.options.opost=find.options.post||{};
 		find.options.post=$.extend(find.options.opost,{strSel1:$("#select1").val(),strSel2:$("#select2").val()});
-		find.options.currentPage=1
+		find.options.currentPage=1;
 		find.render();
 	});
-	
 });
+
+//点击跳转新页面
+function redirect(code){
+	//sessionStorage.setItem("contentHtml",$("#content").prop("outerHTML"));
+	window.open("/manage/dataExport/dataDetail/"+code);
+}
+//
 function SearchContent(){
-	var find=$("#audit").data("datatable")
+	var find=$("#audit").data("datatable");
 	if(!find.options.opost) find.options.opost=find.options.post||{};
 	find.options.post=$.extend(find.options.opost,{query:$("#searchtext").val()});
-	find.options.currentPage=1
+	find.options.currentPage=1;
 	find.render();
 }
 </script>

+ 1 - 0
core/src/web/templates/manage/feedbackcontent.html

@@ -49,6 +49,7 @@ background-color:#FFFFFF;
 		<h4><p style="font-weight:bold; border-bottom:1px solid #98D6DC; padding-bottom:10px; margin-top:30px;" class="text-left">  问题处理</p></h4>
 		<form class="registerform form-horizontal" role="form" id="updateback" method="post">
 		<input name="s_submitid" id="s_submitid" class="form-control" value="{{.T.s_submitid}}" style="display:none;"/>
+		<input name="s_from" id="s_from" class="form-control" value="{{.T.s_from}}" style="display:none;"/>
 		<input name="s_submitname" id="s_submitname" class="form-control"  value="{{.T.s_submitname}}" style="display:none;"/>
 		<input name="s_remark" id="s_remark" class="form-control" value="{{.T.s_remark}}" style="display:none;"/>
 		<div class="form-group">