소스 검색

Merge branch 'dev2.9.4' into release

lianbingjie 5 년 전
부모
커밋
5baca52980

+ 2 - 0
README.md

@@ -12,4 +12,6 @@ pkg目录,已经在版本控制中排除,不会被提交。
 
 业务代码放在bsw目录中,按前后台\模块划分
 系统配置文件统一放在config.json中。
+v2.9.4
+数据报告模块
 

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

@@ -40,4 +40,5 @@ type JyPayOrderResult struct {
 	Status    int    `json:"status"`
 	Err       string `json:"err"`
 	OrderCode string `json:"orderCode"`
+	PayStr    string `json:"payStr"`
 }

+ 68 - 45
core/src/qfw/filemanage/uploadfile.go

@@ -26,6 +26,7 @@ func (m *Files) Upload() error {
 	res["flag"] = false
 	res["error"] = 1
 	res["msg"] = "上传失败"
+	res["filename"] = ""
 	if m.Method() == "POST" {
 		filetype := m.GetString("type")
 		if filetype == "cauditupload" || filetype == "courseFile" {
@@ -34,8 +35,19 @@ func (m *Files) Upload() error {
 		if len(filetype) == 0 {
 			filetype = "imgFile"
 		}
+		var ispdf = false
+
 		file, FileHeader, _ := m.GetFile(filetype)
 		str := strings.Split(FileHeader.Filename, ".")
+		if str[len(str)-1:][0] == "pdf"{
+			ispdf = true
+			res["uploadtype"] = "pdf"
+		}else if str[len(str)-1:][0] == "jpg"||str[len(str)-1:][0] == "png" {
+			res["uploadtype"] = "img"
+		}else{
+
+		}
+		res["filename"] = FileHeader.Filename
 		var flag = false
 		for _, val := range fileTypeArray {
 			if strings.EqualFold(str[len(str)-1], val) {
@@ -45,59 +57,67 @@ func (m *Files) Upload() error {
 		if !flag {
 			res["msg"] = "上传文件类型错误,支持类型" + strings.Join(fileTypeArray, "、")
 		} else {
-			if fileInfo, ok := file.(Size); ok {
-				if fileInfo.Size() > FileSize {
-					res["msg"] = "上传文件大小超出限制"
+			var fileSize int64
+			if ispdf{
+				if fileInfo, ok := file.(Stat); ok {
+					t,_:= fileInfo.Stat()
+					fileSize = t.Size()
+				}
+			}else{
+				if fileInfo, ok := file.(Size); ok {
+					fileSize = fileInfo.Size()
+				}
+			}
+			if fileSize > FileSize{
+				res["msg"] = "上传文件大小超出限制"
+			}else {
+				temp := Getfilepath(str[len(str)-1], filetype)
+				err := m.SaveToFile(filetype, temp)
+				if err != nil {
+					log.Error(err.Error())
 				} else {
-					temp := Getfilepath(str[len(str)-1], filetype)
-					err := m.SaveToFile(filetype, temp)
-					if err != nil {
-						log.Error(err.Error())
-					} else {
-						res["flag"] = true
-						res["error"] = 0
-						res["msg"] = "ssss"
-						filePath := strings.Replace(temp, "./web/staticres", "", 1)
-						res["url"] = filePath
-						resize := m.GetString("resize")
-						//查询图片是否可以需要压缩 width>1920 或 height>1080
-						if true {
-							var n string
-							var e error
-							rs := image.IsCompress(temp)
-							if rs != "" {
-								if rs == "x" {
-									n, e = image.MakeResize(temp, 1920, -1, 100, 1)
-								} else if rs == "y" {
-									n, e = image.MakeResize(temp, -1, 1080, 100, 1)
-								}
-								if nil == e && len(n) > 0 {
-									res["url"] = filePath[:strings.LastIndex(filePath, "/")] + "/" + n
-								}
+					res["flag"] = true
+					res["error"] = 0
+					res["msg"] = "ssss"
+					filePath := strings.Replace(temp, "./web/staticres", "", 1)
+					res["url"] = filePath
+					resize := m.GetString("resize")
+					//查询图片是否可以需要压缩 width>1920 或 height>1080
+					if true {
+						var n string
+						var e error
+						rs := image.IsCompress(temp)
+						if rs != "" {
+							if rs == "x" {
+								n, e = image.MakeResize(temp, 1920, -1, 100, 1)
+							} else if rs == "y" {
+								n, e = image.MakeResize(temp, -1, 1080, 100, 1)
 							}
-						}
-						//生成小缩略图
-						if len(resize) > 0 {
-							rs := strings.Split(resize, ",")
-							w := 200
-							w, _ = strconv.Atoi(rs[0])
-							h := -1
-							q := 100
-							if len(rs) > 3 {
-								h, _ = strconv.Atoi(rs[1])
-								q, _ = strconv.Atoi(rs[2])
-							} else if len(rs) == 2 {
-								h, _ = strconv.Atoi(rs[1])
-								q = 100
-							}
-							n, e := image.MakeResize(temp, w, h, q, 0)
 							if nil == e && len(n) > 0 {
 								res["url"] = filePath[:strings.LastIndex(filePath, "/")] + "/" + n
 							}
 						}
 					}
+					//生成小缩略图
+					if len(resize) > 0 {
+						rs := strings.Split(resize, ",")
+						w := 200
+						w, _ = strconv.Atoi(rs[0])
+						h := -1
+						q := 100
+						if len(rs) > 3 {
+							h, _ = strconv.Atoi(rs[1])
+							q, _ = strconv.Atoi(rs[2])
+						} else if len(rs) == 2 {
+							h, _ = strconv.Atoi(rs[1])
+							q = 100
+						}
+						n, e := image.MakeResize(temp, w, h, q, 0)
+						if nil == e && len(n) > 0 {
+							res["url"] = filePath[:strings.LastIndex(filePath, "/")] + "/" + n
+						}
+					}
 				}
-
 			}
 		}
 	}
@@ -110,6 +130,9 @@ func (m *Files) Upload() error {
 type Size interface {
 	Size() int64
 }
+type Stat interface {
+	Stat() (os.FileInfo, error)
+}
 
 //获取文件路径、名称
 func Getfilepath(str, filetype string) (s string) {

+ 326 - 35
core/src/qfw/manage/dataReportOrder.go

@@ -1,10 +1,13 @@
 package manage
 
 import (
-	"errors"
 	"fmt"
+	"github.com/go-xweb/log"
+	"github.com/pkg/errors"
+	"net/url"
 	util "qfw/coreutil"
 	qutil "qfw/util"
+	"qfw/util/redis"
 	"strings"
 	"time"
 
@@ -13,65 +16,86 @@ import (
 
 type DataReportOrder struct {
 	*xweb.Action
-	orderList  xweb.Mapper `xweb:"/manage/dataReportOrder/list"`
-	pageing    xweb.Mapper `xweb:"/manage/dataReport/p"`                 //js翻页请求
-	dataDetail xweb.Mapper `xweb:"/manage/dataReport/dataDetail/(\\w+)"` //三级页
+	datareportList   xweb.Mapper `xweb:"/manage/dataReport/list"`   //数据报告列表
+	edit             xweb.Mapper `xweb:"/manage/dataReportOrder/(\\w+)"` //数据列表编辑或新建
+	pageing          xweb.Mapper `xweb:"/manage/dataReport/p"`           //js翻页请求
+	dataDetail       xweb.Mapper `xweb:"/manage/dataReport/dataDetail"`  //数据报告详情
+	createDatereport xweb.Mapper `xweb:"/manage/dataReport/create"`      //创建数据报告
+	deleteDatereport xweb.Mapper `xweb:"/manage/dataReport/delete"`      //删除数据报告
+
+	orderList        xweb.Mapper `xweb:"/manage/dataReportOrder/list"`   //数据报告列表页面
+	orderListData    xweb.Mapper `xweb:"/manage/dataReportOrder/listdata"`   //数据报告列表页数据
+	//orderDetail      xweb.Mapper `xweb:"/manage/dataReportOrder/Detailhtml"`   //数据报告详情页面
+	orderDetailData  xweb.Mapper `xweb:"/manage/dataReportOrder/Detaildata"`   //数据报告详情页面数据
+
 }
 
 func init() {
 	xweb.AddAction(&DataReportOrder{})
 }
 
-func (d *DataReportOrder) OrderList() error {
+func (d *DataReportOrder) DatareportList() error {
 	return d.Render("/manage/datareport/index.html")
 }
 
-func (d *DataReportOrder) DataDetail(id string) error {
-	m := util.Mysql.FindOne("jy_datareport_order", map[string]interface{}{"id": id}, "user_name,user_mail,user_phone,user_company,order_money,pay_time,pay_way", "")
-	if m == nil {
-		return errors.New("not find order")
+func (d *DataReportOrder) OrderList() error {
+	return d.Render("/manage/datareport/orderlist.html")
+}
+//func (d *DataReportOrder) OrderDetail() error {
+//	return d.Render("/manage/datareport/orderdetail.html")
+//}
+
+func (d *DataReportOrder) Edit(optiontype string) error {
+	if optiontype == "edit" {
+		edit_id := d.GetString("id")
+		d.T["edit_id"] = edit_id
+		d.T["type"] = "edit"
+		return d.Render("/manage/datareport/edit.html", &d.T)
+	} else {
+		d.T["type"] = "create"
+		return d.Render("/manage/datareport/edit.html", &d.T)
 	}
-	d.T["user_name"] = (*m)["user_name"]
-	d.T["user_mail"] = (*m)["user_mail"]
-	d.T["user_phone"] = (*m)["user_phone"]
-	d.T["user_company"] = (*m)["user_company"]
-	d.T["order_money"] = qutil.Float64All((*m)["order_money"]) / 100
-	d.T["pay_time"] = (*m)["pay_time"]
-	pay_way := qutil.ObjToString((*m)["pay_way"])
-	d.T["pay_way"] = qutil.If(strings.Contains(pay_way, "wx"), "微信支付", "支付宝支付")
-	d.T["source"] = qutil.If(strings.Contains(pay_way, "js"), "剑鱼标讯公众号", "剑鱼标讯APP")
-	return d.Render("/manage/datareport/detail.html", &d.T)
+
+}
+
+func (d *DataReportOrder) DataDetail() {
+	M := make(map[string]interface{})
+	reportId := d.GetString("reportid")
+	if reportId != "" {
+		res := util.Mysql.FindOne("jy_datareport", map[string]interface{}{
+			"report_id": reportId,
+		}, "", "")
+		if res != nil {
+			M["data"] = (*res)
+			M["status"] = "success"
+		} else {
+			log.Println("%s未查到数据", reportId)
+		}
+	} else {
+		M["data"] = ""
+		M["status"] = "fail"
+
+	}
+	d.ServeJson(M)
 }
 
 func (d *DataReportOrder) Pageing() {
-	startTime, _ := d.GetInt("starttime")
-	endTime, _ := d.GetInt("endtime")
 	query := d.GetString("query")
 	currentPage, _ := d.GetInteger("currentPage")
 	perPage, _ := d.GetInteger("perPage")
 
-	sql := " from jy_datareport_order where pay_money is not null "
+	sql := " from jy_datareport where isdelete=0"
 	val := []interface{}{}
-
-	if startTime != 0 {
-		sql = sql + "and pay_time > ? "
-		val = append(val, time.Unix(startTime, 0).Format(qutil.Date_Full_Layout))
-	}
-	if endTime != 0 {
-		sql = sql + "and pay_time < ? "
-		val = append(val, time.Unix(endTime, 0).AddDate(0, 0, 1).Format(qutil.Date_Full_Layout))
-	}
-
 	if query != "" {
-		sql = sql + " and (user_name like ? or user_phone like ? )"
-		val = append(val, "%"+query+"%", "%"+query+"%")
+		sql = sql + " and (report_name like ?  )"
+		val = append(val, "%"+query+"%")
 	}
 
 	countQuery := "select count(*) " + sql
 	count := util.Mysql.QueryCount(countQuery, val...)
 	//log.Println(countQuery, "count---", count)
 
-	listQuery := "select id,user_name,user_mail,user_phone,user_company,order_money,pay_time " + sql + fmt.Sprintf(" order by create_time desc limit %d,%d", (currentPage-1)*perPage, perPage)
+	listQuery := "select report_id,end_time,start_time,report_status,report_name,i_price " + sql + fmt.Sprintf(" order by create_time desc limit %d,%d", (currentPage-1)*perPage, perPage)
 	res := util.Mysql.Query(listQuery, val...)
 	//log.Println("list---", len(*res))
 	d.ServeJson(map[string]interface{}{
@@ -80,3 +104,270 @@ func (d *DataReportOrder) Pageing() {
 		"totalRows":   count,
 	})
 }
+
+func (d *DataReportOrder) CreateDatereport() {
+
+	reportName := d.GetString("reportName")
+	i_price, _ := d.GetInt("i_price")
+	s_price, _ := d.GetInt("s_price")
+	starttime := d.GetString("starttime")
+	endtime := d.GetString("endtime")
+	report_pdf := d.GetString("report_pdf")
+	content := d.GetString("content")
+	optiontype := d.GetString("optiontype")
+	cover_name := d.GetString("covername")
+	cover_url := d.GetString("cover_url")
+	report_file_name := d.GetString("report_file_name")
+	r := func() *FuncResult {
+		//数据校验
+		if reportName == "" || i_price == 0 || starttime == "" || endtime == "" ||
+			report_pdf == "" || content == "" || cover_url == "" || report_file_name == "" || cover_name == "" {
+			return &FuncResult{false, errors.New("参数不完整"), nil}
+		}
+		starttime, err := time.ParseInLocation(qutil.Date_Full_Layout, starttime, time.Local)
+		if err != nil {
+			return &FuncResult{false, errors.New("数据报告时间异常"), nil}
+		}
+		endtime, err := time.ParseInLocation(qutil.Date_Full_Layout, endtime, time.Local)
+		if err != nil {
+			return &FuncResult{false, errors.New("数据报告时间异常"), nil}
+		}
+		if endtime.Before(starttime) {
+			return &FuncResult{false, errors.New("时间异常"), nil}
+		}
+		//
+		d1_content, err := url.QueryUnescape(content)
+		if err != nil {
+			return &FuncResult{false, errors.New("数据报告内容解析异常"), nil}
+		}
+		content, err := url.QueryUnescape(d1_content)
+		if err != nil {
+			return &FuncResult{false, errors.New("数据报告内容解析异常"), nil}
+		}
+		if !(i_price > 0) {
+			return &FuncResult{false, errors.New("数据报告售价金额异常"), nil}
+		}
+		if(s_price>0){
+			if (i_price > s_price) {
+				return &FuncResult{false, errors.New("售价金额不能高于原价"), nil}
+			}
+		}else{
+			s_price = i_price
+		}
+
+		//数据校验
+		mData := map[string]interface{}{
+			"report_name":      reportName,
+			"i_price":          i_price,
+			"s_price":          s_price,
+			"start_time":       starttime.Unix(),
+			"end_time":         endtime.Unix(),
+			"create_time":      time.Now().Unix(),
+			"s_desrice":        content,
+			"report_file_name": report_file_name,
+			"cover_url":        cover_url,
+			"report_url":       report_pdf,
+			"cover_name":       cover_name,
+			"isdelete":         0,
+		}
+		if starttime.Before(time.Now()) {
+			if endtime.Before(time.Now()){
+				mData["report_status"] = 2
+			}else{
+				mData["report_status"] = 1
+			}
+		}else{
+			mData["report_status"] = 0
+		}
+		if optiontype != "" && optiontype == "create" {
+			res := util.Mysql.Insert("jy_datareport", mData)
+			if res <= 0 {
+				return &FuncResult{false, errors.New("增加数据报告失败"), nil}
+			} else {
+				return &FuncResult{true, nil, nil}
+			}
+		} else {
+			report_id := d.GetString("reportid")
+			if report_id != "" {
+				q := util.Mysql.Update("jy_datareport", map[string]interface{}{
+					"report_id": report_id,
+				}, mData)
+				if !q {
+					return &FuncResult{false, errors.New("数据报告编辑更新失败"), nil}
+				} else {
+					key := "datareport_detail_" + report_id
+					redis.Del("other", key)
+					return &FuncResult{true, nil, nil}
+				}
+			} else {
+				return &FuncResult{false, errors.New("数据报告id为空"), nil}
+			}
+		}
+
+	}()
+	if r.Err != nil {
+		log.Printf("Create err:%v\n", r.Err.Error())
+	}
+	d.ServeJson(r.Format())
+
+}
+
+
+func (d *DataReportOrder)DeleteDatereport(){
+	userId := d.GetSession("userId")
+	if userId!=""{
+		r := func() *FuncResult{
+			report_id := d.GetString("report_id")
+			if report_id !=""{
+				mData := make(map[string]interface{})
+				mData["report_id"] = report_id
+				query_status:=util.Mysql.FindOne("jy_datareport",mData,"report_status","")
+				if query_status !=nil{
+					if (*query_status)["report_status"] == 1{
+						return &FuncResult{false,errors.New("已上架数据不能删除"),nil}
+					}else{
+						res :=util.Mysql.Update("jy_datareport",mData, map[string]interface{}{
+							"isdelete":1,
+						})
+						//通过课程id查询该课程相关的订单
+						var updateSql = `UPDATE dataexport_order  SET order_status = -2 WHERE order_status = 0 AND product_type = '数据报告' AND filter_id = '` + report_id + `'`
+						go util.Mysql.UpdateOrDeleteBySql(updateSql)
+						if res{
+							return &FuncResult{true,nil,nil}
+						}else{
+							log.Println("数据删除失败",report_id)
+							return &FuncResult{true,errors.New("数据删除失败"),nil}
+						}
+					}
+
+				}else{
+					return &FuncResult{false,errors.New("数据报告不存在"),nil}
+				}
+
+
+			}else{
+				return &FuncResult{false,errors.New("数据报告id为空"),nil}
+			}
+		}()
+		if r.Err != nil {
+			log.Printf("delete err:%v\n", r.Err.Error())
+		}
+		d.ServeJson(r.Format())
+	}
+
+
+}
+
+func (d *DataReportOrder)OrderListData(){
+	currentPage, _ := d.GetInteger("currentPage")
+	perPage, _ := d.GetInteger("perPage")
+
+	c_status := d.GetString("strSel1") //订单状态 0:未支付 1:已支付 -1:已删除 -2:已取消
+	c_type := d.GetString("strSel2")   //请求类型 0:订单编号 1:报告名称 2:邮箱
+	c_content := d.GetString("strCont")
+	var sql = ``
+	var c_sql = "SELECT d.report_name,e.user_mail,e.order_money,e.create_time,e.order_status,e.applybill_status,e.order_code from dataexport_order e INNER JOIN jy_datareport d ON e.`filter_id` = d.`report_id` AND e.`product_type`="+"\"数据报告\"  "
+	var c_sql_c = "SELECT count(*) FROM dataexport_order e INNER JOIN jy_datareport d ON e.`filter_id` = d.`report_id`  WHERE e.product_type = '数据报告' "
+	if c_status != "" {
+		sql += `AND e.order_status =` + fmt.Sprint(c_status)
+	} else {
+		c_status = "-1"
+		sql += `AND e.order_status !=` + fmt.Sprint(c_status)
+	}
+	if c_type == "1" {
+		sql += ` AND d.report_name like '%` + c_content + `%'`
+	} else if c_type == "0" {
+		sql += ` AND e.order_code ='` + c_content + `'`
+	} else if c_type == "2" {
+		sql += ` AND e.user_mail like '%` + c_content + `%'`
+	}
+	c_sql = c_sql + sql
+	c_sql += ` order by e.create_time desc limit ` + fmt.Sprint((currentPage-1)*perPage) + `,` + fmt.Sprint(perPage)
+	log.Println("sql:", c_sql)
+	rData := util.Mysql.SelectBySql(c_sql)
+
+	c_sql_c = c_sql_c + sql
+	count := util.Mysql.CountBySql(c_sql_c)
+	d.ServeJson(map[string]interface{}{
+		"currentPage": currentPage,
+		"data":        rData,
+		"totalRows":   count,
+	})
+}
+
+
+func (d *DataReportOrder)OrderDetailData()error{
+	qMap := map[string]interface{}{}
+	order_code := d.GetString("code")
+	table := ""
+	qMap["order_code"] = order_code
+	res := util.Mysql.FindOne("dataexport_order", qMap, "", "create_time desc")
+	if len(*res) > 0 {
+		pay_time := qutil.ObjToString((*res)["pay_time"])
+		orderMoney := qutil.Float64All((*res)["order_money"]) / 100
+		order_status := qutil.IntAll((*res)["order_status"])
+		payway := qutil.ObjToString((*res)["pay_way"])
+		original_price := qutil.Int64All((*res)["original_price"])
+		if pay_time != "" && original_price != 0 {
+			(*res)["order_status"] = "已支付"
+			if order_status == -2 {
+				(*res)["order_status"] = "已取消"
+			}
+		} else {
+			if order_status == -2 {
+				(*res)["order_status"] = "已取消"
+			} else if order_status == 0 {
+				(*res)["order_status"] = "未支付"
+			} else if order_status == 1 {
+				(*res)["order_status"] = "已支付"
+			}
+			if original_price == 0 {
+				if order_status == 1 {
+					(*res)["order_status"] = "已支付"
+				}
+			}
+		}
+		(*res)["order_money"] = orderMoney
+		if strings.Contains(payway, "wx") {
+			(*res)["pay_way"] = "微信"
+			table = "weixin_pay"
+		} else if strings.Contains(payway, "ali") {
+			(*res)["pay_way"] = "支付宝"
+			table = "ali_pay"
+		}
+		if original_price != 0 {
+			wxPayMap := map[string]interface{}{}
+			wxPayMap["out_trade_no"] = (*res)["out_trade_no"]
+			if (table!=""){
+				wxpay := util.Mysql.FindOne(table, wxPayMap, "transaction_id", "create_time desc")
+				log.Println("wxpay",wxpay)
+				if wxpay != nil {
+					d.T["transaction_id"] = qutil.ObjToString((*wxpay)["transaction_id"])
+				}
+			}
+
+		}
+		//申请发票
+		applybill_status := qutil.IntAll((*res)["applybill_status"])
+		if applybill_status == 1 {
+			(*res)["applybill_status"] = "已申请"
+		} else if applybill_status == 0 {
+			(*res)["applybill_status"] = "未申请"
+		}
+		data := util.Mysql.Find("invoice", qMap, "", "create_time", 0, 0)
+		if *data != nil && len(*data) != 0 {
+			(*res)["invoice"] = *data
+		}
+		//0个人 1单位
+		applybill_type := qutil.IntAll((*res)["applybill_type"])
+		if applybill_type == 1 {
+			(*res)["applybill_type"] = "单位"
+		} else {
+			(*res)["applybill_type"] = "个人"
+		}
+
+	}
+		d.T["res"] = *res
+	return d.Render("/manage/datareport/orderdetail.html")
+
+}

+ 83 - 0
core/src/qfw/manage/toiletRevolution.go

@@ -0,0 +1,83 @@
+package manage
+
+
+import (
+	"errors"
+	"fmt"
+	util "qfw/coreutil"
+	qutil "qfw/util"
+	"strings"
+	"time"
+
+	"github.com/go-xweb/xweb"
+)
+
+type ToiletRevolution struct {
+	*xweb.Action
+	orderList  xweb.Mapper `xweb:"/manage/toiletrevolution/list"`
+	pageing    xweb.Mapper `xweb:"/manage/toiletrevolution/p"`                 //js翻页请求
+	dataDetail xweb.Mapper `xweb:"/manage/toiletrevolution/dataDetail/(\\w+)"` //三级页
+}
+
+func init() {
+	xweb.AddAction(&ToiletRevolution{})
+}
+
+func (d *ToiletRevolution) OrderList() error {
+	return d.Render("/manage/toiletrevolution/index.html")
+}
+
+func (d *ToiletRevolution) DataDetail(id string) error {
+	m := util.Mysql.FindOne("jy_datareport_order", map[string]interface{}{"id": id}, "user_name,user_mail,user_phone,user_company,order_money,pay_time,pay_way", "")
+	if m == nil {
+		return errors.New("not find order")
+	}
+	d.T["user_name"] = (*m)["user_name"]
+	d.T["user_mail"] = (*m)["user_mail"]
+	d.T["user_phone"] = (*m)["user_phone"]
+	d.T["user_company"] = (*m)["user_company"]
+	d.T["order_money"] = qutil.Float64All((*m)["order_money"]) / 100
+	d.T["pay_time"] = (*m)["pay_time"]
+	pay_way := qutil.ObjToString((*m)["pay_way"])
+	d.T["pay_way"] = qutil.If(strings.Contains(pay_way, "wx"), "微信支付", "支付宝支付")
+	d.T["source"] = qutil.If(strings.Contains(pay_way, "js"), "剑鱼标讯公众号", "剑鱼标讯APP")
+	return d.Render("/manage/toiletrevolution/detail.html", &d.T)
+}
+
+func (d *ToiletRevolution) Pageing() {
+	startTime, _ := d.GetInt("starttime")
+	endTime, _ := d.GetInt("endtime")
+	query := d.GetString("query")
+	currentPage, _ := d.GetInteger("currentPage")
+	perPage, _ := d.GetInteger("perPage")
+
+	sql := " from jy_datareport_order where pay_money is not null "
+	val := []interface{}{}
+
+	if startTime != 0 {
+		sql = sql + "and pay_time > ? "
+		val = append(val, time.Unix(startTime, 0).Format(qutil.Date_Full_Layout))
+	}
+	if endTime != 0 {
+		sql = sql + "and pay_time < ? "
+		val = append(val, time.Unix(endTime, 0).AddDate(0, 0, 1).Format(qutil.Date_Full_Layout))
+	}
+
+	if query != "" {
+		sql = sql + " and (user_name like ? or user_phone like ? )"
+		val = append(val, "%"+query+"%", "%"+query+"%")
+	}
+
+	countQuery := "select count(*) " + sql
+	count := util.Mysql.QueryCount(countQuery, val...)
+	//log.Println(countQuery, "count---", count)
+
+	listQuery := "select id,user_name,user_mail,user_phone,user_company,order_money,pay_time " + sql + fmt.Sprintf(" order by create_time desc limit %d,%d", (currentPage-1)*perPage, perPage)
+	res := util.Mysql.Query(listQuery, val...)
+	//log.Println("list---", len(*res))
+	d.ServeJson(map[string]interface{}{
+		"currentPage": currentPage,
+		"data":        res,
+		"totalRows":   count,
+	})
+}

+ 537 - 0
core/src/web/templates/manage/datareport/edit.html

@@ -0,0 +1,537 @@
+<html>
+<head>
+    <title>数据报告</title>
+    {{include "/common/inc.html"}}
+    <link href="{{Msg "seo" "cdn"}}/css/message.css" rel="stylesheet">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/js/kindeditor/themes/default/default.css"/>
+    <script charset="utf-8" src="{{Msg "seo" "cdn"}}/js/kindeditor/kindeditor-all.js"></script>
+    <script charset="utf-8" src="{{Msg "seo" "cdn"}}/js/kindeditor/kinditem.js"></script>
+    <script src="/js/validform-min.js"></script>
+    <script type="text/javascript" src="/js/zDrag.js"></script>
+    <script type="text/javascript" src="/js/zDialog.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/js/jquery.cityselect.js"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/My97DatePicker/WdatePicker.js"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/upload.js?v={{Msg "seo" "version"}}"></script>
+    <style type="text/css">
+        a{
+            text-decoration: none;
+            color: dodgerblue;
+        }
+        .widget-content {
+            table-layout: fixed;
+            font-size: 14px;
+        }
+
+        #course {
+            background-color: #f5f5f5;
+        }
+
+        #tr1 td img {
+            border: 1px solid #999999;
+            width: 78px;
+            height: 78px;
+            margin: 0;
+            padding: 0;
+            margin-bottom: 20px;
+        }
+
+        .delbtn {
+            position: absolute;
+            margin: 0 0 0 -10px;
+            padding: 0 0 0 0;
+            background-color: #00ffff;
+            cursor: pointer;
+        }
+
+        .delbtn img {
+            height: 15px !important;
+            width: 15px !important;
+            margin-right: -20px !important;
+            margin-top: -8px !important;
+        }
+
+        /*修改弹框样式*/
+        .modal {
+            top: 33%;
+        }
+
+        .modal-dialog {
+            width: 400px;
+            text-align: center;
+        }
+
+        .modal-dialog .bootbox-close-button.close {
+            display: none;
+        }
+
+        .modal-dialog .modal-header .modal-title {
+            color: #4E5051;
+            font-size: 18px;
+        }
+
+        .modal-dialog .bootbox-body {
+            color: #4E5051;
+            font-size: 14px;
+        }
+
+        .modal-dialog .modal-header,
+        .modal-dialog .modal-footer {
+            border: none;
+
+        }
+
+        .modal-dialog .modal-footer {
+            display: flex;
+            justify-content: space-between;
+        }
+
+        .modal-dialog .modal-footer .bootbox-cancel {
+            width: 110px;
+            height: 38px;
+            left: 24px;
+            top: 112px;
+
+            background: #C2C2C2;
+            border-radius: 4px;
+            border-color: #C2C2C2;
+            color: #ffff;
+        }
+
+        .modal-dialog .modal-footer .bootbox-accept {
+            width: 110px;
+            height: 38px;
+            left: 226px;
+            top: 112px;
+
+            background: #4DB443;
+            border-radius: 4px;
+            border-color: #4DB443;
+            color: #ffff;
+        }
+        span {
+            font-size: 12px;
+            color: grey;
+        }
+        .delete_report ,.delete_cover {
+            display: none;
+            font-weight: 700;
+            color: red;
+            cursor: pointer;
+        }
+
+    </style>
+</head>
+<body>
+
+{{include "/manage/audithead.html"}}
+<!-- 中间 -->
+<div class="row" style="width:96%; margin:0 auto; margin-top:10px;">
+    <div>
+        {{include "/manage/slider.html"}}
+
+        <div id="content" class="send">
+            <div class="widget-box">
+                <div class="widget-content nopadding">
+                    <div class="head">
+                        <div class="title">数据报告 - 编辑</div>
+                        <div style="clear:both;"></div>
+                    </div>
+                    <div class="sendform">
+                        <form class="registerform form-horizontal" role="form" method="post">
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" for="name">名称:</label>
+                                <div class="col-sm-10" id="fbt">
+                                    <input class="form-control" id="reportName" />
+                                </div>
+                            </div>
+
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" for="name">原价:</label>
+                                <div class="col-sm-5" id="fbt">
+                                    <input class="form-control" id="reportSPrice" />
+                                </div>
+                            </div>
+
+                            <div class="form-group" style="display: flex">
+                                <label class="col-sm-2 control-label" for="name">售价:</label>
+                                <div class="col-sm-5" id="fbt">
+                                    <input class="form-control" id="reportIPrice" value=""/>
+                                </div>
+                                <span style="display: flex;align-items: flex-end;">*报告真实售价</span>
+                            </div>
+
+
+                            <div class="form-group">
+                                <label class="col-sm-2 control-label" for="name">周期:</label>
+                                <div class="col-sm-5" id="fbt">
+                                    <input style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"
+                                           id="reportStart" datatype="*"
+                                           onFocus="WdatePicker({lang:'zh-cn',dateFmt:'yyyy-MM-dd HH:mm:ss'})"
+                                           type="text" class="form-control" placeholder="上架日期"
+                                           onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" readonly="ture"
+                                           value=""/>
+
+                                </div>
+                                <div class="col-sm-5" id="fbt">
+                                    <input style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"
+                                           id="reportEnd" datatype="*"
+                                           onFocus="WdatePicker({lang:'zh-cn',dateFmt:'yyyy-MM-dd HH:mm:ss'})"
+                                           type="text" class="form-control" placeholder="下架日期"
+                                           onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" readonly="ture"
+                                           value=""/>
+
+                                </div>
+                            </div>
+
+                            <div class="form-group" style="display: flex;align-items: baseline">
+                                <label class="col-sm-2 control-label" for="name">文件:</label>
+                                <div class="col-sm-5 upload-report-file" id="fbt">
+                                    <a class="report-file" style="display: none" target="_blank"></a><span class='delete_report' >&nbsp;&nbsp;&nbsp;&nbsp;x</span>
+                                    <input type="file" id="upload_report" accept=".pdf" style="display: none">
+                                    <input type="button" id="btn-file" value="上传报告" onclick="upload_file('report')" style="display: none;border-radius: 4px;border: 1px gray solid;"><span class="report-text" style="display: none">&nbsp;*仅限上传PDF文件</span>
+
+                                </div>
+                            </div>
+                            <div class="form-group" style="display: flex;align-items: baseline">
+                                <label class="col-sm-2 control-label" for="name">封面:</label>
+                                <div class="col-sm-5 upload-cover-file" id="fbt">
+                                    <a class="cover-file" style="display: none" target="_blank"></a><span class='delete_cover' >&nbsp;&nbsp;&nbsp;&nbsp;x</span>
+                                    <input type="file" id="upload_cover" accept=".png ,.jpg" style="display: none">
+                                    <input type="button" id="btn-cover" value="上传封面" onclick="upload_file('cover')" style="display: none ;border-radius: 4px;border: 1px gray solid;"><span class="cover-text" style="display: none">&nbsp;*仅限上传JPG\PNG文件</span>
+                                </div>
+                            </div>
+
+                        </form>
+                    </div>
+
+                    <div class="head">
+                        <div class="title">报告介绍</div>
+                        <div style="clear:both;"></div>
+                    </div>
+
+                    <div style="width: 800px;margin: 0 auto;padding-top: 20px">
+                        <textarea name="s_content" id="s_content"></textarea>
+                    </div>
+
+
+                    <div class="form-group" style="margin: 10px 0px 60px 0px">
+                        <label class="col-sm-2 control-label" for="name"></label>
+                        <div class="col-sm-10" id="submit" style="margin-top: 10px;margin-left: 275px;">
+                            <button class="btn save" type="button" onclick="submit(this, 'save')"
+                                    style="margin-left: 60px;color: #4DB443;border-color: #4DB443;background-color: #fff">
+                                发布
+                            </button>
+                            <button class="btn " type="button" onclick="cancel()"
+                                    style="margin-left: 60px;color: #4DB443;border-color: #4DB443;background-color: #fff">
+                                取消
+                            </button>
+
+                        </div>
+                    </div>
+
+                </div>
+            </div>
+
+        </div>
+
+    </div>
+</div>
+
+{{include "/common/bottom.html"}}
+<script type="text/javascript" src="/js/bootbox.js"></script>
+<script>
+    var reportName = "";
+    var starttime = "";
+    var endtime = "";
+    var publishtime = "";
+    var i_price = 0;
+    var s_price = 0;
+    var content = {{.T.content}};
+    var id = {{.T.id}};
+    var Dotype ={{.T.doType}};
+    var editor;
+    var optiontype = {{.T.type}};
+    var reportid = {{.T.edit_id}}
+    var report_pdf = ""
+    var report_cover = ""
+    var report_cover_url = ""
+    var report_file_name = ""
+    var defaultHtml = "<h2 class=\"c-title\" id=\"a1\">报告介绍</h2>"
+        + "<p></p>"
+        + "<p></p>"
+
+        + "<h2 class=\"c-title\" id=\"a2\">报告目录</h2>"
+        + "<p></p>"
+        + "<p></p>"
+
+        + "<h2 class=\"c-title\" id=\"a3\">购买须知</h2>"
+        + "<p></p>"
+        + "<p></p>"
+
+        + "<h2 class=\"c-title\" id=\"a4\">客户服务</h2>"
+        + "<p></p>"
+        + "<p></p>";
+
+    $(function () {
+        editor = KindEditor.create('textarea[name="s_content"]', {
+            id: "ke_editor",
+            items: ["source", "|", "undo", "redo", "|", "preview"],
+            allowFileManager: false,
+            filterMode: true,
+            cssPath: '/js/kindeditor/themes/course/iframe_course.css',
+            width: '800px',
+            height: '500px',
+            filterMode: false,
+            items: items_simp,
+            allowImageRemoteImageRemote: false,
+            uploadJson: '/filemanage/upload',
+            afterCreate: function () {
+                this.sync()
+            },
+            beforesubmit: function () {
+                this.sync()
+            },
+            afterBlur: function () {
+                this.sync()
+            }
+        });
+
+        // if (price !== "") {
+        //     $("#coursePrice").val(parseInt(price) / 100)
+        // }
+
+        if (!content) {
+            content = defaultHtml;
+        }
+        editor.html(content);
+        //数据回显end
+    });
+
+    //提交
+    function submit($Obj, flag) {
+        $($Obj).attr("disabled", "disabled");
+        reportName = $("#reportName").val();
+        i_price = parseInt(($("#reportIPrice").val() * 100).toFixed(2)); //售价
+        s_price = parseInt(($("#reportSPrice").val() * 100).toFixed(2));//原价
+        starttime = $("#reportStart").val();
+        endtime = $("#reportEnd").val();
+        content = editor.html();
+        report_pdf = $(".report-file").attr("href");
+        report_cover_url = $(".cover-file").attr("href");
+        report_cover = $(".cover-file").text();
+
+        if(report_pdf==""||report_cover_url==""){
+            bootbox.alert("上传文件不能为空");
+            $($Obj).removeAttr("disabled");
+            return
+        }
+        //数据校验
+        if (!( i_price  && starttime && endtime  && content)) {
+            bootbox.alert("请输入完整信息");
+            $($Obj).removeAttr("disabled");
+            return
+        }
+        if (s_price>0){
+            if(i_price > s_price){
+                bootbox.alert("售价不能超过原价");
+                $($Obj).removeAttr("disabled");
+                return
+            }
+        }
+
+        if (Date.parse(endtime) < Date.parse(starttime)) {
+            bootbox.alert("报告开始时间必须小于结束时间");
+            $($Obj).removeAttr("disabled");
+            return
+        }
+
+
+        var param = {
+            reportName: $("#reportName").val(),
+            i_price: i_price,
+            s_price: s_price,
+            starttime: starttime,
+            endtime: endtime,
+            report_pdf:report_pdf,
+            cover_url:report_cover_url,
+            covername:report_cover,
+            content: encodeURI(encodeURI(content)),
+            optiontype:optiontype,
+            report_file_name :$(".report-file").text(),
+            reportid:reportid,
+        }
+        $.post("/manage/dataReport/create", param, function (r) {
+            if (r.success) {
+                window.location.href = "/manage/dataReport/list";
+            } else {
+                bootbox.alert(r.errMsg)
+            }
+        });
+        $($Obj).removeAttr("disabled");
+    }
+
+
+     function dateFormat(timestamp, formats) {
+        // formats格式包括
+        // 1. Y-m-d
+        // 2. Y-m-d H:i:s
+        // 3. Y年m月d日
+        // 4. Y年m月d日 H时i分
+        formats = formats || 'Y-m-d';
+
+        var zero = function (value) {
+            if (value < 10) {
+                return '0' + value;
+            }
+            return value;
+        };
+
+
+        var myDate = timestamp ? new Date(parseInt(timestamp) * 1000) : new Date();
+        var year = myDate.getFullYear();
+        var month = zero(myDate.getMonth() + 1);
+        var day = zero(myDate.getDate());
+
+        var hour = zero(myDate.getHours());
+        var minite = zero(myDate.getMinutes());
+        var second = zero(myDate.getSeconds());
+
+        return formats.replace(/Y|m|d|H|i|s/ig, function (matches) {
+            return ({
+                Y: year,
+                m: month,
+                d: day,
+                H: hour,
+                i: minite,
+                s: second
+            })[matches];
+        });
+    };
+    //上传文件
+    function upload_file(type) {
+        if (type == "cover"){
+            $("#upload-cover").remove()    //同一个文件只上传一次
+            $("body").append('<div id="upload-cover" style="display:none;"><input type="file"/> </div>');
+            initUpload("cover")
+            $("#upload-cover form input[type='file']").attr("accept",".jpg,.png").trigger("click");
+        }else{
+            $("#upload-pdf").remove()
+            $("body").append('<div id="upload-pdf" style="display:none;"></div>');
+            initUpload("pdf")
+            $("#upload-pdf form input[type='file']").attr("accept",".pdf").trigger("click");
+        }
+    }
+    $(function () {
+        if (optiontype == "edit"){
+            $.ajax({
+                url:"/manage/dataReport/dataDetail",
+                type:"POST",
+                data:{"reportid":reportid},
+                success:function (r) {
+                    // $("#reportName").attr("value",nameformat(r.data.report_name))
+					$("#reportName").attr("value",r.data.report_name);
+                    $("#reportIPrice").attr("value",parseInt(r.data.i_price) / 100);    //售价
+                    $("#reportSPrice").attr("value",parseInt(r.data.s_price) / 100)     //原价
+                    $("#reportStart").attr("value",dateFormat(r.data.start_time, "Y-m-d H:i:s"))
+                    $("#reportEnd").attr("value",dateFormat(r.data.end_time,"Y-m-d H:i:s"))
+                    $(".report-file").show()
+                    $(".report-file").attr("href",r.data.report_url).text(r.data.report_file_name)
+                    $(".cover-file").attr("href",r.data.cover_url).text(r.data.cover_name)
+                    $(".delete_report").show()
+                    $(".cover-file").show()
+                    // $(".cover-file").text(nameformat(r.data.cover_name));
+					$(".cover-file").text(r.data.cover_name);
+                    $(".delete_cover").show()
+                    editor.html(r.data.s_desrice);
+                    $(".save").text("保存")
+
+                }
+            })
+        }else{
+            $("#btn-file").show()
+            $("#btn-cover").show()
+            $(".report-text").show()
+            $(".cover-text").show()
+        }
+    })
+    function nameformat(name) {
+        if (name.length >=0&&name.length<=20){
+            return name
+        }else{
+            return name.slice(0,21)+"..."
+        }
+
+    }
+    //删除封面图
+    $(".upload-cover-file").on("click",".delete_cover",function (e) {
+        $(".cover-file").attr("href","").hide();
+        $(".delete_cover").hide();
+        $("#btn-cover").show()
+    });
+    //删除文件
+    $(".upload-report-file").on("click",".delete_report",function (e) {
+        $(".report-file").attr("href","").hide()
+        $(".delete_report").hide();
+        $("#btn-file").show()
+
+    })
+    //上传按钮
+    function initUpload(file_type){
+        var option={
+            name:"datareportFile",
+            action:"/filemanage/upload",
+            afterError:function(data,e){
+                alert("上传失败,请重新上传。");
+            },
+            afterUpload:function(data){ //此处可以重写,上传后的处理
+                if(data.flag){
+                    if (data.uploadtype == "pdf"){
+                        $(".report-text").hide()
+                        $("#btn-file").hide();
+                        $(".delete_report").show();
+                        $(".report-file").attr("href",data.url);
+                        report_file_name = nameformat(data.filename)
+                        $(".report-file").text(report_file_name).show();
+                    }else{
+                        $(".cover-text").hide()
+                        $("#btn-cover").hide();
+                        $(".delete_cover").show();
+                        $(".cover-file").attr("href",data.url);
+                        report_file_name = nameformat(data.filename)
+                        $(".cover-file").text(report_file_name).show();
+                    }
+
+                }else{
+                    alert(data.msg)
+                }
+            }
+        };
+        try{
+            if (file_type == "pdf"){
+                $("#upload-pdf").upload(option);
+            }
+            if (file_type == "cover"){
+                $("#upload-cover").upload(option);
+            }
+
+        }catch(e){
+            console.log(e)
+        }
+    }
+    //上传图片
+    function setUrl(url,uploadtype) {
+        if(url!=""){
+            if (uploadtype == "pdf"){
+                $(".report-file").attr("href",url)
+            }else{
+                $(".cover-file").attr("src",url)
+            }
+
+        }
+    }
+    function cancel() {
+        window.location.replace("/manage/dataReport/list")
+    }
+</script>
+</body>
+</html>

+ 192 - 66
core/src/web/templates/manage/datareport/index.html

@@ -1,16 +1,14 @@
 
 <html>
 <head>
-<title>审核用户</title>
+<title>数据报告</title>
 {{include "/common/inc.html"}}
 <script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
 <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/zDialog.js"></script>
 <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/My97DatePicker/WdatePicker.js"></script>
 <script src="/js/qfwtable.js"></script>
 <style type="text/css">
-#dataReportOrder{
-	background-color: #f5f5f5;
-}
+
 #content table{
 	table-layout: fixed;
 	border:0px;
@@ -18,22 +16,33 @@
 }
 
 .table>thead>tr>th:nth-child(1){
-width:15%;
+width:25%;
 }
 .table>thead>tr>th:nth-child(2){
-width:15%;
+width:14%;
 }
 .table>thead>tr>th:nth-child(3){
-width:20%;	
+width:18%;
 }
 .table>thead>tr>th:nth-child(4){
-width:15%;
+width:18%;
 }
 .table>thead>tr>th:nth-child(5){
-	width:15%;
+	width:10%;
 }
 .table>thead>tr>th:nth-child(6){
-	width:25%;
+	width:10%;
+}
+.table > thead > tr > th:nth-child(7) {
+	width: 5%;
+	display: none;
+	/*text-align: center;*/
+}
+.table > tbody > tr > td:nth-child(7) {
+	display: none;
+}
+.addDateReport{
+	cursor: pointer;
 }
 .table>thead>tr>th{
 border:0px;
@@ -57,8 +66,60 @@ background-color:#FFFFFF;
 .pagination>.active>a:hover,.pagination>.active>a:focus{
 background-color:#18CC7D;
 }
+.addDateReport {
+	float: right;
+	margin-right: 20px;
+	color: #fff;
+	background-color: #38b44a;
+	border-color: #38b44a;
+	border-radius: 4px;
+	padding: 8px 12px;
+	margin: 5px;
+}
 #sidebar { margin-left:0px;}
 .hui{color:#999999;}
+/*修改弹框样式*/
+.modal {
+	top: 33%;
+}
+
+.modal-dialog {
+	width: 400px;
+	text-align: center;
+}
+.modal-dialog .bootbox-close-button.close {
+	display: none;
+}
+.modal-dialog .bootbox-body {
+	color: #4E5051;
+	font-size: 14px;
+}
+.modal-dialog .modal-footer .bootbox-cancel{
+	width: 110px;
+	height: 38px;
+	left: 24px;
+	top: 112px;
+
+	background: #C2C2C2;
+	border-radius: 4px;
+	border-color: #C2C2C2;
+	color: #ffff;
+}
+
+.modal-dialog .modal-footer .bootbox-accept{
+	width: 110px;
+	height: 38px;
+	left: 226px;
+	top: 112px;
+
+	background: #4DB443;
+	border-radius: 4px;
+	border-color: #4DB443;
+	color: #ffff;
+}
+.modal-footer{
+	text-align: center;
+}
 </style>
 </head>
 <body>
@@ -71,6 +132,7 @@ background-color:#18CC7D;
 </div>
 {{include "/common/bottom.html"}}
 </body>
+<script type="text/javascript" src="/js/bootbox.js"></script>
 <script>
 $(function(){
 	$("#audit").datatable({
@@ -81,51 +143,73 @@ $(function(){
 		  ,idField:"_id"
 		  ,classname:"table-hover"
 		  ,css:{"height":"450px"}
-		  ,buttons: ['<div style="margin: 0px 15px;"><div style="width:40%;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;width:70px;">检索</button></span></div><div style="margin:5px;" class="controls pull-left"><input type="text" style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"  id="starttime"  datatype="*" type="text" name="starttime" class="form-control" onClick="WdatePicker({oncleared:function(dp){oncleared(dp,this)},onpicked:function(dp){picked(dp,this)},dateFmt:\'yyyy-MM-dd\',maxDate:\'#F{$dp.$D(\\\'endtime\\\',{d:0})}\'})" readonly="ture" value="" placeholder="时间选择"></div><div class="controls pull-left" id="zhi" style="line-height: 46px;">至</div><div style="margin:5px;" class="controls pull-left"><input type="text"   style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"  id="endtime"  datatype="*" type="text" name="endtime" class="form-control" onClick="WdatePicker({oncleared:function(dp){oncleared(dp,this)},onpicked:function(dp){picked(dp,this)},dateFmt:\'yyyy-MM-dd\',minDate:\'#F{$dp.$D(\\\'starttime\\\',{d:0})}\'})" readonly="ture" value="" placeholder="时间选择"></div></div><div id="second"><div class="pull-right" id="allDoBut" style="display: none;"><button id="allDel" onclick="del(\'\',\'A\',\'\')" type="button" class="btn btn-primary">删除</button><button id="allPush" onclick="push(\'all\',\'\')" type="button" class="btn btn-warning">补推</button></div></div>']
+		  ,buttons: ['<div class="addDateReport" onclick="addReport()">&nbsp;新发布&nbsp;</div><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>']
+		  // ,buttons: ['<div style="width: 65px;height: 30px;border: 1px black solid;text-align: center" onclick="create_report()">新发布</div>']
 		  , url: '/manage/dataReport/p'
 		  , columns: [
 				{
-		            title: "姓名", field: "user_name"	
+		            title: "数据报告名称", field: "user_name",callback:function (d) {
+						return d.report_name
+					}
 		        },
 				{
-		            title: "手机号",field: "user_phone"
-		        },
+		            title: "售价",field: "user_phone"
+					,callback:function(ct,cd,val,k,m){
+						if(ct["i_price"]){
+							var o_money =ct["i_price"]/100
+							var a = num(o_money)
+							return a;
+						}
+					}
+
+				},
 				{
-		            title: "邮箱", field: "user_mail"
+		            title: "发布时间", field: "user_mail",callback:function (d) {
+						return timestampToTime(d.start_time)
+						// return d.start_time
+					}
 		        },
 				{
-		            title: "公司名称", field: "user_company"
+		            title: "下架时间", field: "user_company",callback:function (d) {
+						return timestampToTime(d.end_time)
+						// return d.end_time
+					}
 		        },
 				{
-		            title: "付款金额", field: "order_money"
-					,callback:function(ct,cd,val,k,m){
-						if(ct["order_money"]){
-						var o_money =ct["order_money"]/100
-						var a = num(o_money)
-						return a;
-				  }
-				}
+		            title: "状态", field: "order_money",callback:function (d) {
+						var report_status = ""
+						if (d.report_status == 1){
+							report_status = "<span style='color:green'>已上架</span>"
+						}else if (d.report_status == 0){
+							report_status = "<span style='color:deepskyblue'>未发布</span>"
+						}else{
+							report_status = "<span style='color:red'>已下架</span>"
+						}
+
+						return report_status
+					}
+
 		        },
 				{
-		            title: "付款时间", field: "pay_time"
+		            title: "操作", field: "pay_time",callback:function (d) {
+						var html = ""
+						html += "<span onclick='edit_datareport(this)'>编辑</span>&nbsp;&nbsp;<span onclick='delete_datareport(this)'>删除</span>"
+						return html
+					}
 		        },
-        {
-		      title: "", field: "order_code"
-					,callback:function(ct,cd,val,k,m){
-						if(ct["id"]){
-							var a=ct["order_code"]
-						return "<a style='display:none' style='color:#4e5051;text-decoration:none'>"+ct["id"]+"</a>"
-						}
-					}	
-		    }
+			{
+				title: "", field: "pay_time",callback:function (d) {
+					return d.report_id
+				}
+			},
 		    ]
 		});
 
 	//事件委托
-	$("#content").on("click","#audit>.dt-table-wrapper>.table>tbody>tr",function(){
-		var code = $(this).children().last().prev().children().html();
-    window.open("/manage/dataReport/dataDetail/"+code)
-	});
+	// $("#content").on("click","#audit>.dt-table-wrapper>.table>tbody>tr",function(){
+	// 	var code = $(this).children().last().prev().children().html();
+    // window.open("/manage/dataReport/dataDetail/"+code)
+	// });
 });
 
 function SearchContent(){
@@ -140,34 +224,6 @@ function num(i) {
 	var n = i.toFixed(2);
 	return n
 }
-function picked(dp,obj){
-    var time = new Date(dp.cal.newdate.y, dp.cal.newdate.M - 1, dp.cal.newdate.d).getTime() + "";
-    time = time.substring(0, time.length - 3);
-    $(obj).attr("data-value", time);
-	var find=$("#audit").data("datatable")
-	if(!find.options.opost) find.options.opost=find.options.post||{};
-	find.options.post=$.extend(find.options.opost,{starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
-	find.options.currentPage=1
-	find.render();
-	
-	//全选按钮
-	var tdEle =document.getElementsByTagName('td');
-	var errorFlag =$("div").hasClass("alert-error");
-	if (tdEle[5]!=undefined){
-		console.log("!unde")
-		if (tdEle[5].innerHTML=="&nbsp;"){
-			$(".allSelect").addClass("disno");
-		}else{
-			$(".allSelect").removeClass("disno");
-		}
-	}else if (errorFlag){
-		console.log("errorFlag")
-		$(".allSelect").addClass("disno");
-	}else {
-		console.log("else")
-		$(".allSelect").removeClass("disno");
-	}
-}
 function oncleared(dp,obj){
     $(obj).attr("data-value", "");
 	var find=$("#audit").data("datatable")
@@ -182,5 +238,75 @@ function oncleared(dp,obj){
 		$(".allSelect").addClass("disno");
 	}
 }
+//编辑数据报告
+function edit_datareport(e) {
+	// event.stopPropagation()
+	var id =$(e).parents("td").next().text()
+	window.location.href = "/manage/dataReportOrder/edit?id="+id
+
+}
+
+//删除数据报告
+function delete_datareport(e) {
+	var id =$(e).parents("td").next().text()
+	var dataexport_status = $(e).parents("td").prev().children().text() //获取报告状态
+	var tipMsg = "报告删除后将无法购买,确定是否删除?";
+
+
+	bootbox.confirm({
+		title: "提示",
+		message: tipMsg,
+		buttons: {
+			cancel: {
+				label: '取消'
+			},
+			confirm: {
+				label: '确定'
+			}
+		},
+		callback: function (result) {
+			if (!result) {
+				return
+			}
+			if (id != ""){
+				$.ajax({
+					url:"/manage/dataReport/delete",
+					type:"POST",
+					data:{"report_id":id},
+					success:function (r) {
+						if (r.success){
+							window.location.reload(true)
+						}else{
+							bootbox.alert(r.errMsg)
+						}
+					}
+				})
+			}
+		}
+	});
+
+
+
+
+
+}
+function addReport(){
+	window.location.href = "/manage/dataReportOrder/create"
+}
+function timestampToTime(timestamp) {
+	if (typeof(timestamp) == "undefined"){
+		return ""
+	}else{
+		var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
+		var Y = date.getFullYear() + '-';
+		var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
+		var D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
+		var h = (date.getHours()<10 ? '0'+date.getHours() : date.getHours())+':';
+		var m = (date.getMinutes()<10 ? '0'+date.getMinutes() : date.getMinutes())+':';
+		var s = (date.getSeconds()<10 ? '0'+date.getSeconds() : date.getSeconds())+' ';
+		return Y+M+D+h+m+s;
+	}
+
+}
 </script>
 </html>

+ 443 - 0
core/src/web/templates/manage/datareport/orderdetail.html

@@ -0,0 +1,443 @@
+<!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;
+    }
+    #viporder {
+        background-color: #f5f5f5;
+    }
+    .cont-one, .row {
+        margin-top: 20px  !important;
+    }
+    .pbtn{
+        margin: 20px;
+        background: #00bcd4;
+        user-select: none;
+        float: right;
+        width: 100px;
+        height: 35px;
+        line-height: 35px;
+        text-align: center;
+        color: #fff;
+        text-decoration:none;
+    }
+    .pbtn:hover{
+        text-decoration:none;
+        color:#fff;
+    }
+    .pbtn:visited {
+        text-decoration: none;
+    }
+    .pbtn:link {
+        text-decoration: none;
+    }
+    .imgdiv{
+        padding: 27px 120px;
+        background: #fff;
+    }
+    .imgdiv img{
+        height: 200px;
+        width:30%;
+        max-width: 300px;
+    }
+    .right .order_info .bd .line, .right .download_link .bd .line, .right .filter .bd .line {
+        float: left;
+        width: 1px;
+        height: 150px !important;
+        background: #ddd;
+        margin-top: 20px;
+    }
+    .right {
+        float: right;
+        width: calc(100% - 220px);
+        border: 1px solid #ddd;
+        min-height: 960px;
+        /* background-color: #fff; */
+    }
+</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>
+            {{ if .T.res.showOfflinePayBtn}}
+                <a class="pbtn" href="/manage/dataExport/toOfflinePayPage/{{.T.res.orderCode}}">已线下支付</a>
+            {{end}}
+        </div>
+        <div class="order_status">{{.T.res.order_status}}</div>
+        <script>
+            var order_status={{.T.res.order_status}};
+            if (order_status=="已取消"){
+                $(".order_status").css("color","#686868")
+            }else if (order_status=="已支付"){
+                $(".order_status").css("color","green")
+            }else if (order_status=="未支付") {
+                $(".order_status").css("color","red")
+            }
+        </script>
+
+        <!-- 订单信息 -->
+        <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_code}}</li>
+                    {{if .T.res.pay_way}}{{if eq .T.res.pay_way "trial"}}<li class="row-list nofloat">支付方式:-</li>{{else}}{{if eq .T.res.order_status "已支付"}}<li class="row-list nofloat">支付方式:{{.T.res.pay_way}}</li>{{else}}<li class="row-list nofloat">支付方式:-{{end}}{{end}}{{end}}
+                        {{if .T.res.order_status}}
+                        {{if eq .T.res.order_status "已支付"}}
+                <li class="row-list nofloat">下单时间:{{.T.res.create_time}}</li>
+                <li class="row-list nofloat">支付时间:{{.T.res.pay_time}}</li>
+                {{else}}
+                    <li class="row-list nofloat">下单时间:{{.T.res.create_time}}</li>
+                    <li class="row-list nofloat">支付时间:-</li>
+                {{end}}
+                    {{end}}
+                </ul>
+                <div class="line"></div>
+                <script>
+                    //alert({{.T.res.pay_way}})
+                </script>
+                <ul class="row second"  style="margin-top:20px  !important;">
+                    {{if .T.res.order_status}}
+                        {{if eq .T.res.order_status "已支付"}}
+                            {{if .T.transaction_id}}
+                                <li class="row-list nofloat">支付单号:{{.T.transaction_id}}</li>
+                            {{end}}
+                        {{else}}
+                            {{if .T.res.pay_way}}{{if eq .T.res.pay_way "trial"}}<li class="row-list nofloat">支付单号:-</li>{{else}}<li class="row-list nofloat">支付单号:-</li>{{end}}{{end}}
+                        {{end}}
+                    {{end}}
+                    <li class="row-list nofloat">产品类型:{{.T.res.product_type}}</li>
+                    <li class="row-list nofloat">实付金额:{{.T.res.order_money}}元</li>
+                    {{if .T.res.user_mail}}
+                        <li class="row-list nofloat">邮箱地址:{{.T.res.user_mail}}</li>
+                    {{else}}
+                        <li class="row-list nofloat">邮箱地址:-</li>
+                    {{end}}
+                </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>
+
+        <div class="invoice">
+            <div class="hd">发票信息</div>
+            <div class="bd clearfix" id="applyHtmls">
+                <ul class="row first" id="applyHtml">
+
+                </ul>
+                <div class="line" style="margin-left: 20px;"></div>
+                <ul class="row second" id="lineHtml" style="margin-top:20px  !important;">
+
+                </ul>
+            </div>
+        </div>
+
+
+    </div>
+</div>
+
+{{include "/common/bottom.html"}}
+<script>
+    var t = {{.T}}
+
+    var loginName = {{session "nickName"}}
+    if(loginName !== null && loginName !== ""&& loginName !== undefined){
+        $("#apply_name").text(loginName);
+    }else{
+        $("#apply_name").text("企明星管理员");
+    }
+
+    var invoice = {{.T.res.invoice}};
+    var applyStatus = {{.T.res.applybill_status}};
+    var orderStatus = {{.T.res.order_status}};
+    var applyHtml = "";
+    var lineHtml = "";
+    var applybill_type = {{.T.res.applybill_type}};
+    var applybill_company = {{.T.res.applybill_company}};
+    var applybill_taxnum = {{.T.res.applybill_taxnum}};
+    var orderCode = {{.T.res.order_code}};
+    if(invoice !== ""){
+        var applyType = invoice[0].invoice_type;
+        var taxpayer_identnum = invoice[0].taxpayer_identnum
+        var create_time = invoice[0].create_time
+        var create_times = formatDate(create_time *1000)
+        var billing_time = invoice[0].billing_time
+        var company_name = invoice[0].company_name
+        var checkurl,checkredurl = ""
+
+        if (invoice[0]){
+            if (invoice[0].url){
+                checkurl = invoice[0].url
+            }else{
+                checkurl = "#"
+            }
+
+        }else{
+            checkurl = "#"
+        }
+
+        if(orderStatus === "未支付"){
+            applyHtml  += `<li class="row-list nofloat">发票类型:-</li>
+	  		  	<li class="row-list nofloat">发票抬头:-</li>`
+            lineHtml += `<li class="row-list nofloat">开具时间:-</li>
+	  		  					<li class="row-list nofloat">发票:-</li>`
+        }else{
+            if(applyStatus === "已申请"){
+                lineHtml += `<li class="row-list nofloat">开具时间:${formatDate(invoice[0].billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">发票:<a target="_blank" href=`+checkurl+`>查看详情</a></li>`
+                var redObj = JSON.parse(invoice[0].red)
+                if(redObj !== null && redObj !== "" && redObj !== undefined){
+                    if(redObj.url){
+                        checkredurl = redObj.url
+                    }else{
+                        checkredurl = "#"
+                    }
+                    lineHtml += `<li class="row-list nofloat">红票开具时间:${formatDate(redObj.billing_time *1000)}</li>
+	  		  							<li class="row-list nofloat">红票:<a target="_blank" href=`+checkredurl+`>查看详情</a></li>`
+                }
+                if(applyType === "个人"){
+
+                    applyHtml  += `
+	  		  			<li class="row-list nofloat">申请时间:${create_times}</li>
+	  		  			<li class="row-list nofloat">申请状态:发票开具</li>
+	  		  			<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  			<li class="row-list nofloat">发票抬头:个人</li>`
+                }else{
+                    applyHtml  += `
+	  		  			<li class="row-list nofloat">申请时间:${create_times}</li>
+	  		  			<li class="row-list nofloat">申请状态:发票开具</li>
+	  		  			<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  			<li class="row-list nofloat">发票抬头:单位</li>
+	  		  			<li class="row-list nofloat">单位名称:${company_name}</li>
+	  		  			<li class="row-list nofloat">纳税人识别号:${taxpayer_identnum}</li>
+	  		  			`
+                }
+            }else{
+                applyHtml  += `<li class="row-list nofloat">申请状态:${applyStatus}</li>
+	  		  		<li class="row-list nofloat">发票类型:-</li>
+	  		  		<li class="row-list nofloat">发票抬头:-</li>`
+                lineHtml += `<li class="row-list nofloat">开具时间:-</li>
+	  		  						<li class="row-list nofloat">发票:-</li>`
+            }
+        }
+        //
+        $("#applyHtml").append(applyHtml);
+        $("#lineHtml").append(lineHtml);
+        if(invoice.length == 2){
+            var applyHtmls = "";
+            if(invoice[1].invoice_type === "个人"){
+            var redObj = JSON.parse(invoice[1].red)
+            var invoice_ = ""
+            var red_ = ""
+            if (invoice[1]){
+                if (invoice[1].url){
+                    invoice_ = invoice[1].url
+                }else{
+                    invoice_ = "#"
+                }
+            }else{
+                invoice_ = "#"
+            }
+
+                if(redObj !== null && redObj !== "" && redObj !== undefined){
+                    if (redObj.url){
+                        red_ = redObj.url
+                    }else{
+                        red_ = "#"
+                    }
+                    applyHtmls  += `
+	  		  			<div class="bd clearfix">
+	  		  				<ul class="row first">
+	  		  					<li class="row-list nofloat">换开时间:${formatDate(invoice[1].create_time *1000)}</li>
+	  		  					<li class="row-list nofloat">申请状态:发票开具</li>
+	  		  					<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  					<li class="row-list nofloat">发票抬头:个人</li>
+	  		  				</ul>
+	  		  				<div class="line" style="margin-left: 20px;float: left;width: 1px;height: 155px;background: #ddd;margin-top: 20px;"></div>
+	  		  				<ul class="row second"  style="margin-top:20px  !important;">
+	  		  					<li class="row-list nofloat">开具时间:${formatDate(invoice[1].billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">发票:<a target="_blank" href=`+invoice_+`>查看详情</a></li>
+	  		  					<li class="row-list nofloat">红票开具时间:${formatDate(redObj.billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">红票:<a target="_blank" href=`+red_+`>查看详情</a></li>
+	  		  				</ul>
+	  		  			</div>`
+                }else{
+                    applyHtmls  += `
+	  		  			<div class="bd clearfix">
+	  		  				<ul class="row first">
+	  		  					<li class="row-list nofloat">换开时间:${formatDate(invoice[1].create_time *1000)}</li>
+	  		  					<li class="row-list nofloat">申请状态:发票开具</li>
+	  		  					<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  					<li class="row-list nofloat">发票抬头:个人</li>
+	  		  				</ul>
+	  		  				<div class="line" style="margin-left: 20px;float: left;width: 1px;height: 155px;background: #ddd;margin-top: 20px;"></div>
+	  		  				<ul class="row second"  style="margin-top:20px  !important;">
+	  		  					<li class="row-list nofloat">开具时间:${formatDate(invoice[1].billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">发票:<a target="_blank" href=`+invoice_+`>查看详情</a></li>
+	  		  				</ul>
+	  		  			</div>`
+                }
+            }else{
+                var redObj = JSON.parse(invoice[1].red)
+                if (invoice[1]){
+                    if (invoice[1].url){
+                        invoice_ = invoice[1].url
+                    }else{
+                        invoice_ = "#"
+                    }
+                }else{
+                    invoice_ = "#"
+                }
+
+                if(redObj !== null && redObj !== "" && redObj !== undefined){
+                    if (redObj.url){
+                        red_ = redObj.url
+                    }else{
+                        red_ = "#"
+                    }
+                    applyHtmls  += `
+	  		  			<div class="bd clearfix">
+	  		  				<ul class="row first">
+	  		  					<li class="row-list nofloat">换开时间:${formatDate(invoice[1].create_time *1000)}</li>
+	  		  					<li class="row-list nofloat">申请状态:发票开具</li>
+	  		  					<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  					<li class="row-list nofloat">发票抬头:单位</li>
+	  		  					<li class="row-list nofloat">单位名称:${invoice[1].company_name}</li>
+	  		  					<li class="row-list nofloat">纳税人识别号:${invoice[1].taxpayer_identnum}</li>
+	  		  				</ul>
+	  		  				<div class="line" style="margin-left: 20px;float: left;width: 1px;height: 155px;background: #ddd;margin-top: 20px;"></div>
+	  		  				<ul class="row second"  style="margin-top:20px  !important;">
+	  		  					<li class="row-list nofloat">开具时间:${formatDate(invoice[1].billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">发票:<a target="_blank" href=`+invoice_+`>查看详情</a></li>
+	  		  					<li class="row-list nofloat">红票开具时间:${formatDate(redObj.billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">红票:<a target="_blank" href=`+red_+`>查看详情</a></li>
+	  		  				</ul>
+	  		  			</div>`
+                }else{
+                    applyHtmls  += `
+	  		  			<div class="bd clearfix">
+	  		  				<ul class="row first">
+	  		  					<li class="row-list nofloat">换开时间:${formatDate(invoice[1].create_time *1000)}</li>
+	  		  					<li class="row-list nofloat">申请状态:发票开具</li>
+	  		  					<li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  					<li class="row-list nofloat">发票抬头:单位</li>
+	  		  					<li class="row-list nofloat">单位名称:${invoice[1].company_name}</li>
+	  		  					<li class="row-list nofloat">纳税人识别号:${invoice[1].taxpayer_identnum}</li>
+	  		  				</ul>
+	  		  				<div class="line" style="margin-left: 20px;float: left;width: 1px;height: 155px;background: #ddd;margin-top: 20px;"></div>
+	  		  				<ul class="row second"  style="margin-top:20px  !important;">
+	  		  					<li class="row-list nofloat">开具时间:${formatDate(invoice[1].billing_time *1000)}</li>
+	  		  					<li class="row-list nofloat">发票:<a target="_blank" href=`+invoice_+`>查看详情</a></li>
+	  		  				</ul>
+	  		  			</div>`
+                }
+            }
+            $(".invoice").append(applyHtmls);
+        }
+    }else{
+
+        if(applyStatus === "已申请"){
+            if(applybill_type === "个人"){
+                applyHtml  += `
+	  		  				  <li class="row-list nofloat">申请时间:-</li>
+	  		  				  <li class="row-list nofloat">申请状态:发票开具</li>
+	  		  				  <li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  				  <li class="row-list nofloat">发票抬头:个人</li>`
+            }else{
+                applyHtml  += `
+	  		  				  <li class="row-list nofloat">申请时间:-</li>
+	  		  				  <li class="row-list nofloat">申请状态:发票开具</li>
+	  		  				  <li class="row-list nofloat">发票类型:普通发票(电子发票)</li>
+	  		  				  <li class="row-list nofloat">发票抬头:单位</li>
+	  		  				  <li class="row-list nofloat">单位名称:${applybill_company}</li>
+	  		  				  <li class="row-list nofloat">纳税人识别号:${applybill_taxnum}</li>
+	  		  				  `
+            }
+            lineHtml += `<li class="row-list nofloat">开具时间:-</li>
+	  		  			  			<li class="row-list nofloat">发票:-</li>`
+        }else{
+            applyHtml  += `<li class="row-list nofloat">申请状态:${applyStatus}</li>
+	  		  			  <li class="row-list nofloat">发票类型:-</li>
+	  		  			  <li class="row-list nofloat">发票抬头:-</li>`
+            lineHtml += `<li class="row-list nofloat">开具时间:-</li>
+	  		  			  				<li class="row-list nofloat">发票:-</li>`
+        }
+        $("#applyHtml").append(applyHtml);
+        $("#lineHtml").append(lineHtml);
+    }
+    if(orderStatus === "已支付"){
+    }else{
+        if(applyName !== null && applyName !== "" && applyName !== undefined){
+            $("#apply_names").text(applyName);
+            console.log(applyReason)
+            $("#applyReasons").text(applyReason);
+        }
+    }
+    function formatDate(date,hms) {
+        if(date ===null || date==="" || date === 0){
+            return "-"
+        }
+        var date = new Date(date);
+        var YY = date.getFullYear() + '-';
+        var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+        var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
+        var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
+        var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
+        var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
+        if(!hms){
+            return YY + MM + DD + " " + hh + mm + ss
+        }else{
+            return YY + MM + DD
+        }
+    }
+</script>
+</body>
+</html>

+ 226 - 0
core/src/web/templates/manage/datareport/orderlist.html

@@ -0,0 +1,226 @@
+
+<html>
+<head>
+    <title>数据报告订单列表</title>
+    {{include "/common/inc.html"}}
+    <script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/zDialog.js"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/My97DatePicker/WdatePicker.js"></script>
+    <script src="/js/qfwtable.js"></script>
+    <style type="text/css">
+        #content table{
+            table-layout: fixed;
+            border:0px;
+            font-size:14px;
+        }
+
+        .table>thead>tr>th:nth-child(1){
+            width:35%;
+        }
+        .table>thead>tr>th:nth-child(2){
+            width:19%;
+        }
+        .table>thead>tr>th:nth-child(3){
+            width:8%;
+        }
+        .table>thead>tr>th:nth-child(4){
+            width:18%;
+        }
+        .table>thead>tr>th:nth-child(5){
+            width:10%;
+        }
+        .table>thead>tr>th:nth-child(6){
+            width:10%;
+        }
+        .table>thead>tr>th{
+            border:0px;
+            font-size:14px;
+        }
+        .table>tbody>tr>td{
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            border:0px;
+            border-bottom:1px dashed #999999;
+        }
+        .table >tbody>tr{
+            cursor: pointer;
+        }
+        #_Container_0{
+            background-color:#FFFFFF;
+        }
+        .buttonStyle{width:64px;height:22px;line-height:22px;color:#369;text-align:center;background:url({{Msg "seo" "cdn"}}/images/buticon.gif) no-repeat left top;border:0;font-size:12px;}
+        .buttonStyle:hover{background:url({{Msg "seo" "cdn"}}/images/buticon.gif) no-repeat left -23px;}
+        .pagination>.active>a:hover,.pagination>.active>a:focus{
+            background-color:#18CC7D;
+        }
+        #sidebar { margin-left:0px;}
+        .hui{color:#999999;}
+    </style>
+</head>
+<body>
+{{include "/manage/audithead.html"}}
+<div class="row" style="width:96%; margin:0 auto;">
+    {{include "/manage/slider.html"}}
+    <div id="content">
+        <div id="audit"></div>
+    </div>
+</div>
+{{include "/common/bottom.html"}}
+</body>
+<script>
+    $(function(){
+        $("#audit").datatable({
+            perPage: 10
+            ,showPagination:true
+            ,checkbox:"" //check radio
+            ,checkboxHeader:false
+            ,idField:"_id"
+            ,classname:"table-hover"
+            ,css:{"height":"450px"}
+            ,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="0">  订单编号  </option><option  value="1">  报告名称</option><option value="2">  邮箱 </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="-2">  已取消 </option><option value="0">  未支付 </option></select></div>']
+            , url: '/manage/dataReportOrder/listdata'
+            , columns: [
+                {
+                    title: "数据报告名称", field: "datareport_name",callback:function (d) {
+                        return d.report_name
+                    }
+                },
+                {
+                    title: "邮箱",field: "user_email",callback:function (d) {
+                        return d.user_mail
+                    }
+                },
+                {
+                    title: "订单金额", field: "order_money"
+                    ,callback:function(ct,cd,val,k,m){
+                        if(ct["order_money"]){
+                            var o_money =ct["order_money"]/100
+                            var a = num(o_money)
+                            return a;
+                        }
+                    }
+                },
+                {
+                    title: "订单时间", field: "ordercreate_time",callback:function (d) {
+                        return d.create_time
+                    }
+                },
+                {
+                    title: "订单状态", field: "order_status",callback:function (d) {
+                        if (d.order_status == 1){
+                            return "<span>已完成</span>"
+                        }else if( d.order_status == 0){
+                            return "<span>未支付</span>"
+                        }else{
+                            return "<span>已取消</span>"
+                        }
+                    }
+
+                },
+                {
+                    title: "发票状态", field: "invoice_status",callback:function (d) {
+                        if (d.applybill_status == 0){
+                            return "<span>未申请</span>"
+                        }else{
+                            return "<span>已申请</span>"
+                        }
+                    }
+                },
+                {
+                    title: "", field: "order_code"
+                    ,callback:function(d){
+                            return "<a style='display:none' style='color:#4e5051;text-decoration:none'>"+d.order_code+"</a>"
+                    }
+                },
+            ]
+        });
+        $("#select1").change(function () {
+            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(),
+            });
+            find.options.currentPage = 1;
+            find.render();
+        });
+
+        $("#select2").change(function () {
+            var select2 = $("#select2").val();
+            if (select2==0){
+                select2 = "订单编号"
+            }else if(select2==1){
+                select2 = "报告名称"
+            }else if(select2 ==2){
+                select2 = "邮箱"
+            }
+            $("#searchtext").attr("placeholder","请输入"+select2)
+        })
+
+        //事件委托
+        $("#content").on("click","#audit>.dt-table-wrapper>.table>tbody>tr",function(){
+            var code = $(this).children().last().prev().children().html();
+            window.location.href = "/manage/dataReportOrder/Detaildata?code="+code
+        });
+    });
+
+    function SearchContent() {
+        var find = $("#audit").data("datatable");
+        if (!find.options.opost) find.options.opost = find.options.post || {};
+        find.options.post = $.extend(find.options.opost, {
+            strCont: $("#searchtext").val(),
+            strSel1: $("#select1").val(),
+            strSel2: $("#select2").val(),
+        });
+        find.options.currentPage = 1;
+        find.render();
+    }
+    //保留小数点后两位的方法
+    function num(i) {
+        var n = i.toFixed(2);
+        return n
+    }
+    function oncleared(dp,obj){
+        $(obj).attr("data-value", "");
+        var find=$("#audit").data("datatable")
+        if(!find.options.opost) find.options.opost=find.options.post||{};
+        find.options.post=$.extend(find.options.opost,{starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
+        find.options.currentPage=1
+        find.render();
+        var tdEle =document.getElementsByTagName('td');
+        if (tdEle[5].innerHTML!="&nbsp;"){
+            $(".allSelect").removeClass("disno");
+        }else{
+            $(".allSelect").addClass("disno");
+        }
+    }
+    function picked(dp,obj){
+        var time = new Date(dp.cal.newdate.y, dp.cal.newdate.M - 1, dp.cal.newdate.d).getTime() + "";
+        time = time.substring(0, time.length - 3);
+        $(obj).attr("data-value", time);
+        var find=$("#audit").data("datatable")
+        if(!find.options.opost) find.options.opost=find.options.post||{};
+        find.options.post=$.extend(find.options.opost,{username:$("#searchtext").val(),starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
+        find.options.currentPage=1
+        find.render();
+
+        //全选按钮
+        var tdEle =document.getElementsByTagName('td');
+        var errorFlag =$("div").hasClass("alert-error");
+        if (tdEle[5]!=undefined){
+            console.log("!unde")
+            if (tdEle[5].innerHTML=="&nbsp;"){
+                $(".allSelect").addClass("disno");
+            }else{
+                $(".allSelect").removeClass("disno");
+            }
+        }else if (errorFlag){
+            console.log("errorFlag")
+            $(".allSelect").addClass("disno");
+        }else {
+            console.log("else")
+            $(".allSelect").removeClass("disno");
+        }
+    }
+</script>
+</html>

+ 86 - 0
core/src/web/templates/manage/toiletrevolution/detail.html

@@ -0,0 +1,86 @@
+<!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;
+    }
+    #dataReportOrder {
+        background-color: #f5f5f5;
+    }
+    .cont-one, .row {
+        margin-top: 20px  !important;
+    }
+    .pbtn{
+        margin: 20px;
+        background: #00bcd4;
+        user-select: none;
+        float: right;
+        width: 100px;
+        height: 35px;
+        line-height: 35px;
+        text-align: center;
+        color: #fff;
+        text-decoration:none;
+    }
+    .pbtn:hover{
+        text-decoration:none;
+        color:#fff;
+    }
+    .pbtn:visited {
+        text-decoration: none;
+    }
+    .pbtn:link {
+        text-decoration: none;
+    }
+    .imgdiv{
+        padding: 27px 120px;
+        background: #fff;
+    }
+    .imgdiv img{
+        height: 200px;
+        width:30%;
+        max-width: 300px;
+    }
+</style>
+<body>
+{{include "/manage/audithead.html"}}
+<div class="main">
+    <div class="left">
+        {{include "/manage/slider.html"}}</div>
+    <div class="right" style="background: #fff;color:#4e5051;min-height: 610px;">
+        <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.user_name}}</li>
+                    <li class="row-list nofloat">手机号:{{.T.user_phone}}</li>
+                    <li class="row-list nofloat">邮箱:{{.T.user_mail}}</li>
+                    <li class="row-list nofloat">公司名称:{{.T.user_company}}</li>
+                    <li class="row-list nofloat">支付金额:{{.T.order_money}}元</li>
+                    <li class="row-list nofloat">支付时间:{{.T.pay_time}}</li>
+                    <li class="row-list nofloat">支付方式:{{.T.pay_way}}</li>
+                    <li class="row-list nofloat">信息来源:{{.T.source}}</li>
+                </ul>
+            </div>
+        </div>
+    </div>
+</div>
+{{include "/common/bottom.html"}}
+</body>
+</html>

+ 183 - 0
core/src/web/templates/manage/toiletrevolution/index.html

@@ -0,0 +1,183 @@
+<html>
+<head>
+    <title>厕所革命列表</title>
+    {{include "/common/inc.html"}}
+    <script src="{{Msg "seo" "cdn"}}/js/jquery.cookie.js"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/zDialog.js"></script>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/My97DatePicker/WdatePicker.js"></script>
+    <script src="/js/qfwtable.js"></script>
+    <style type="text/css">
+
+        #content table{
+            table-layout: fixed;
+            border:0px;
+            font-size:14px;
+        }
+
+        .table>thead>tr>th:nth-child(1){
+            width:15%;
+        }
+        .table>thead>tr>th:nth-child(2){
+            width:15%;
+        }
+        .table>thead>tr>th:nth-child(3){
+            width:20%;
+        }
+        .table>thead>tr>th:nth-child(4){
+            width:15%;
+        }
+        .table>thead>tr>th:nth-child(5){
+            width:15%;
+        }
+        .table>thead>tr>th:nth-child(6){
+            width:25%;
+        }
+        .table>thead>tr>th{
+            border:0px;
+            font-size:14px;
+        }
+        .table>tbody>tr>td{
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            border:0px;
+            border-bottom:1px dashed #999999;
+        }
+        .table >tbody>tr{
+            cursor: pointer;
+        }
+        #_Container_0{
+            background-color:#FFFFFF;
+        }
+        .buttonStyle{width:64px;height:22px;line-height:22px;color:#369;text-align:center;background:url({{Msg "seo" "cdn"}}/images/buticon.gif) no-repeat left top;border:0;font-size:12px;}
+        .buttonStyle:hover{background:url({{Msg "seo" "cdn"}}/images/buticon.gif) no-repeat left -23px;}
+        .pagination>.active>a:hover,.pagination>.active>a:focus{
+            background-color:#18CC7D;
+        }
+        #sidebar { margin-left:0px;}
+        .hui{color:#999999;}
+    </style>
+</head>
+<body>
+{{include "/manage/audithead.html"}}
+<div class="row" style="width:96%; margin:0 auto;">
+    {{include "/manage/slider.html"}}
+    <div id="content">
+        <div id="audit"></div>
+    </div>
+</div>
+{{include "/common/bottom.html"}}
+</body>
+<script>
+    $(function(){
+        $("#audit").datatable({
+            perPage: 10
+            ,showPagination:true
+            ,checkbox:"" //check radio
+            ,checkboxHeader:false
+            ,idField:"_id"
+            ,classname:"table-hover"
+            ,css:{"height":"450px"}
+            ,buttons: ['<div style="margin: 0px 15px;"><div style="width:40%;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;width:70px;">检索</button></span></div><div style="margin:5px;" class="controls pull-left"><input type="text" style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"  id="starttime"  datatype="*" type="text" name="starttime" class="form-control" onClick="WdatePicker({oncleared:function(dp){oncleared(dp,this)},onpicked:function(dp){picked(dp,this)},dateFmt:\'yyyy-MM-dd\',maxDate:\'#F{$dp.$D(\\\'endtime\\\',{d:0})}\'})" readonly="ture" value="" placeholder="时间选择"></div><div class="controls pull-left" id="zhi" style="line-height: 46px;">至</div><div style="margin:5px;" class="controls pull-left"><input type="text"   style="background:#fff url({{Msg "seo" "cdn"}}/images/datePicker.gif) no-repeat right;"  id="endtime"  datatype="*" type="text" name="endtime" class="form-control" onClick="WdatePicker({oncleared:function(dp){oncleared(dp,this)},onpicked:function(dp){picked(dp,this)},dateFmt:\'yyyy-MM-dd\',minDate:\'#F{$dp.$D(\\\'starttime\\\',{d:0})}\'})" readonly="ture" value="" placeholder="时间选择"></div></div><div id="second"><div class="pull-right" id="allDoBut" style="display: none;"><button id="allDel" onclick="del(\'\',\'A\',\'\')" type="button" class="btn btn-primary">删除</button><button id="allPush" onclick="push(\'all\',\'\')" type="button" class="btn btn-warning">补推</button></div></div>']
+            , url: '/manage/toiletrevolution/p'
+            , columns: [
+                {
+                    title: "姓名", field: "user_name"
+                },
+                {
+                    title: "手机号",field: "user_phone"
+                },
+                {
+                    title: "邮箱", field: "user_mail"
+                },
+                {
+                    title: "公司名称", field: "user_company"
+                },
+                {
+                    title: "付款金额", field: "order_money"
+                    ,callback:function(ct,cd,val,k,m){
+                        if(ct["order_money"]){
+                            var o_money =ct["order_money"]/100
+                            var a = num(o_money)
+                            return a;
+                        }
+                    }
+                },
+                {
+                    title: "付款时间", field: "pay_time"
+                },
+                {
+                    title: "", field: "order_code"
+                    ,callback:function(ct,cd,val,k,m){
+                        if(ct["id"]){
+                            var a=ct["order_code"]
+                            return "<a style='display:none' style='color:#4e5051;text-decoration:none'>"+ct["id"]+"</a>"
+                        }
+                    }
+                }
+            ]
+        });
+
+        //事件委托
+        $("#content").on("click","#audit>.dt-table-wrapper>.table>tbody>tr",function(){
+            var code = $(this).children().last().prev().children().html();
+            window.open("/manage/toiletrevolution/dataDetail/"+code)
+        });
+    });
+
+    function SearchContent(){
+        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.render();
+    }
+    //保留小数点后两位的方法
+    function num(i) {
+        var n = i.toFixed(2);
+        return n
+    }
+    function picked(dp,obj){
+        var time = new Date(dp.cal.newdate.y, dp.cal.newdate.M - 1, dp.cal.newdate.d).getTime() + "";
+        time = time.substring(0, time.length - 3);
+        $(obj).attr("data-value", time);
+        var find=$("#audit").data("datatable")
+        if(!find.options.opost) find.options.opost=find.options.post||{};
+        find.options.post=$.extend(find.options.opost,{starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
+        find.options.currentPage=1
+        find.render();
+
+        //全选按钮
+        var tdEle =document.getElementsByTagName('td');
+        var errorFlag =$("div").hasClass("alert-error");
+        if (tdEle[5]!=undefined){
+            console.log("!unde")
+            if (tdEle[5].innerHTML=="&nbsp;"){
+                $(".allSelect").addClass("disno");
+            }else{
+                $(".allSelect").removeClass("disno");
+            }
+        }else if (errorFlag){
+            console.log("errorFlag")
+            $(".allSelect").addClass("disno");
+        }else {
+            console.log("else")
+            $(".allSelect").removeClass("disno");
+        }
+    }
+    function oncleared(dp,obj){
+        $(obj).attr("data-value", "");
+        var find=$("#audit").data("datatable")
+        if(!find.options.opost) find.options.opost=find.options.post||{};
+        find.options.post=$.extend(find.options.opost,{starttime:$("#starttime").attr("data-value"),endtime:$("#endtime").attr("data-value")});
+        find.options.currentPage=1
+        find.render();
+        var tdEle =document.getElementsByTagName('td');
+        if (tdEle[5].innerHTML!="&nbsp;"){
+            $(".allSelect").removeClass("disno");
+        }else{
+            $(".allSelect").addClass("disno");
+        }
+    }
+</script>
+</html>