瀏覽代碼

数据预览

wangkaiyue 6 年之前
父節點
當前提交
155493a01e

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

@@ -1,10 +1,11 @@
 package front
 
 import (
-	"github.com/go-xweb/xweb"
+	"encoding/json"
 	"log"
 	"strings"
-	"encoding/json"
+
+	"github.com/go-xweb/xweb"
 )
 
 type DataExport struct {
@@ -76,7 +77,7 @@ func (d *DataExport) SieveData() error {
 		"buyer":       buyerArr,
 		"winner":      winnerArr,
 	}
-	reS := mongodb.Save("sieveCondition", sieveCondition)
+	reS := mongodb.Save(ExportTable, sieveCondition)
 	log.Println("save ", reS)
 	return nil
 }

+ 143 - 25
src/jfw/front/dataExport2.go

@@ -47,6 +47,7 @@ type DataExport2 struct {
 	*xweb.Action
 	superSearchExport xweb.Mapper `xweb:"/front/dataExport/superSearchExport"`      //数据导出-超级搜索
 	toCreateOrderPage xweb.Mapper `xweb:"/front/dataExport/toCreateOrderPage/(.*)"` //数据导出-订单页面
+	previewData       xweb.Mapper `xweb:"/front/dataExport/previewData/(.*)"`       //数据导出-数据预览
 	sendMailVerify    xweb.Mapper `xweb:"/front/dataExport/sendMailVerify"`         //发送邮箱验证码
 	checkMailVerify   xweb.Mapper `xweb:"/front/dataExport/checkMailVerify"`        //验证邮箱验证码
 }
@@ -66,17 +67,47 @@ func (de *DataExport2) SuperSearchExport() error {
 	industry := strings.TrimSpace(de.GetString("industry")) //选中的行业
 	selectType := de.GetString("selectType")                //标题 or 全文
 
-	log.Printf("keywords:%s \n publishtime:%s \n area:%s \n subtype:%s \n minprice:%s \n maxprice:%s \n industry:%s \n selectType:%s \n",
-		keywords, publishtime, area, subtype, minprice, maxprice, industry, selectType)
+	//格式化keywords
+	KeyWordSave := []KeyWord{}
+	if len(keywords) > 0 {
+		keywordArr := strings.Split(keywords, " ")
+		if len(keywordArr) > 0 {
+			oneKw := KeyWord{}
+			if len(keywordArr) > 1 {
+				kwAppended := []string{}
+				for k, v := range keywordArr {
+					if k == 0 {
+						oneKw.Keyword = v
+					} else {
+						kwAppended = append(kwAppended, v)
+					}
+				}
+				oneKw.Appended = kwAppended
+			} else {
+				oneKw.Keyword = keywordArr[0]
+			}
+			KeyWordSave = append(KeyWordSave, oneKw)
+
+		}
+	}
+
+	areaSave := []string{}
+	if len(area) > 0 {
+		areaSave = strings.Split(area, ",")
+	}
+	industrySave := []string{}
+	if len(industry) > 0 {
+		industrySave = strings.Split(industry, ",")
+	}
 
 	data := map[string]interface{}{
-		"keywords":    keywords,
+		"keywords":    KeyWordSave,
 		"publishtime": publishtime,
-		"area":        area,
+		"area":        areaSave,
 		"subtype":     subtype,
 		"minprice":    minprice,
 		"maxprice":    maxprice,
-		"industry":    industry,
+		"industry":    industrySave,
 		"selectType":  selectType,
 		"comeintime":  time.Now().Unix(),
 		"s_openid":    openid,
@@ -94,41 +125,40 @@ func (de *DataExport2) ToCreateOrderPage(_id string) error {
 		ok       bool
 		msgCount int64
 		//查询字段
-		keywords    string
-		industry    string
+		keywords    []KeyWord
+		industry    []string
 		minprice    string
 		maxprice    string
 		selectType  string
-		area        string
+		area        []string
 		publishtime string
 		subtype     string
+		buyer       []string //招标单位
+		winner      []string //中标单位
 	)
 	openid := util.ObjToString(de.GetSession("s_m_openid"))
 	if openid == "" {
 		return errors.New("未登录")
 	}
-	//query := make(map[string]interface{})
+
 	if query, ok = mongodb.FindById(ExportTable, _id, nil); !ok {
 		return errors.New("未找到搜索记录")
 	}
-	//查询参数
-	keywords = (*query)["keywords"].(string)
-	industry = (*query)["industry"].(string)
-	minprice = (*query)["minprice"].(string)
-	maxprice = (*query)["maxprice"].(string)
-	subtype = (*query)["subtype"].(string)
-	area = (*query)["area"].(string)
-	selectType = (*query)["selectType"].(string)
-	publishtime = (*query)["publishtime"].(string)
-
-	log.Printf("keywords:%s \n publishtime:%s \n area:%s \n subtype:%s \n minprice:%s \n maxprice:%s \n industry:%s \n selectType:%s \n",
-		keywords, publishtime, area, subtype, minprice, maxprice, industry, selectType)
 
-	if selectType != "" {
-		selectType = "\"" + selectType + "\""
-	}
+	keywords = getKeyWordArrFromDbResult((*query)["keywords"])
+	industry = getStringArrFromDbResult((*query)["industry"])
+	minprice = util.ObjToString((*query)["minprice"])
+	maxprice = util.ObjToString((*query)["maxprice"])
+	subtype = util.ObjToString((*query)["subtype"])
+	area = getStringArrFromDbResult((*query)["area"])
+	selectType = util.ObjToString((*query)["selectType"])
+	publishtime = util.ObjToString((*query)["publishtime"])
+	subtype = util.ObjToString((*query)["subtype"])
+	buyer = getStringArrFromDbResult((*query)["buyer"])
+	winner = getStringArrFromDbResult((*query)["winner"])
 
-	qstr := getSearchQuery(keywords, industry, minprice, maxprice, selectType, getBidSearchQuery(area, publishtime, subtype))
+	//qstr := getSearchQuery(keywords, industry, minprice, maxprice, selectType, getBidSearchQuery(area, publishtime, subtype))
+	qstr := getDataExportSql(keywords, industry, minprice, maxprice, subtype, area, selectType, publishtime, buyer, winner)
 	msgCount = elastic.Count(INDEX, TYPE, qstr)
 
 	if msgCount > ExConf.MsgMaxCount {
@@ -145,6 +175,94 @@ func (de *DataExport2) ToCreateOrderPage(_id string) error {
 	de.Render("/pc/createOrderPage.html", &de.T)
 	return nil
 }
+func getKeyWordArrFromDbResult(k interface{}) (arr []KeyWord) {
+	if k == nil {
+		return
+	}
+	kArr := k.([]interface{})
+	for _, v := range kArr {
+		kw := KeyWord{}
+		b, e := json.Marshal(v)
+		if e != nil {
+			log.Println(e.Error())
+		}
+		json.Unmarshal(b, &kw)
+		arr = append(arr, kw)
+	}
+	return
+}
+func getStringArrFromDbResult(c interface{}) (arr []string) {
+	if c != nil {
+		cArr := c.([]interface{})
+		arr = util.ObjArrToStringArr(cArr)
+	}
+	return
+}
+func (de *DataExport2) PreviewData(_id string) error {
+	var (
+		query *map[string]interface{}
+		ok    bool
+		//查询字段
+		keywords    []KeyWord
+		industry    []string
+		minprice    string
+		maxprice    string
+		selectType  string
+		area        []string
+		publishtime string
+		subtype     string
+		buyer       []string //招标单位
+		winner      []string //中标单位
+	)
+	dataType := de.GetString("dataType")
+	openid := util.ObjToString(de.GetSession("s_m_openid"))
+	if openid == "" {
+		return errors.New("未登录")
+	}
+
+	if query, ok = mongodb.FindById(ExportTable, _id, nil); !ok {
+		return errors.New("未找到搜索记录")
+	}
+
+	keywords = getKeyWordArrFromDbResult((*query)["keywords"])
+	industry = getStringArrFromDbResult((*query)["industry"])
+	minprice = util.ObjToString((*query)["minprice"])
+	maxprice = util.ObjToString((*query)["maxprice"])
+	subtype = util.ObjToString((*query)["subtype"])
+	area = getStringArrFromDbResult((*query)["area"])
+	selectType = util.ObjToString((*query)["selectType"])
+	publishtime = util.ObjToString((*query)["publishtime"])
+	subtype = util.ObjToString((*query)["subtype"])
+	buyer = getStringArrFromDbResult((*query)["buyer"])
+	winner = getStringArrFromDbResult((*query)["winner"])
+
+	dataexport_field := `"_id","title","description","area","city","publishtime","projectname","buyer","winner","bidamount","subtype"`
+	if dataType == "2" {
+		dataexport_field += `,"href","projectcode","buyerperson","buyertel","budget","bidopentime","agency"`
+	}
+
+	//查询
+	qstr := getDataExportSql(keywords, industry, minprice, maxprice, subtype, area, selectType, publishtime, buyer, winner)
+	res := elastic.GetAllByIk(INDEX, TYPE, qstr, "", bidSearch_sort, dataexport_field, 0, 5, 5, false)
+	//格式化输出
+	for k, v := range *res {
+		v["index"] = k + 1
+		if v["bidamount"] != nil {
+			v["bidamount"] = v["bidamount"].(float64) / 10000
+		}
+		if v["publishtime"] != nil {
+			date := v["publishtime"]
+			v["publishtime"] = util.FormatDateWithObj(&date, util.Date_Short_Layout)
+		}
+		if v["_id"] != nil {
+			v["url"] = config.Sysconfig["webdomain"].(string) + "/article/content/" + util.CommonEncodeArticle("content", v["_id"].(string)) + ".html"
+		}
+	}
+	de.T["data"] = res
+	de.T["dataType"] = dataType
+	de.Render("/pc/previewData.html", &de.T)
+	return nil
+}
 
 func (de *DataExport2) SendMailVerify() {
 	email := de.GetString("email")

+ 155 - 0
src/jfw/front/swordfish.go

@@ -2875,6 +2875,161 @@ func getSearchQuery(keyword, industry, minprice, maxprice, findfields, mustquery
 	return
 }
 
+//获取数据导出查询语句
+func getDataExportSql(keywords []KeyWord, industry []string, minprice string, maxprice string, subtype string, area []string, selectType string, publishtime string, buyer []string, winner []string) string {
+	mustquery := ``
+	if len(area) > 0 {
+		mustquery += `{"terms":{"area":[`
+		for k, v := range area {
+			if k > 0 {
+				mustquery += `,`
+			}
+			mustquery += `"` + v + `"`
+		}
+		mustquery += `]}}`
+	}
+	if publishtime != "" {
+		if len(mustquery) > 0 {
+			mustquery += ","
+		}
+		starttime, endtime := "", ""
+		now := time.Now()
+		if publishtime == "lately-7" { //最近7天
+			starttime = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-7, 0, 0, 0, 0, time.Local).Unix())
+		} else if publishtime == "lately-30" { //最近30天
+			starttime = fmt.Sprint(time.Date(now.Year(), now.Month(), now.Day()-30, 0, 0, 0, 0, time.Local).Unix())
+		} else if publishtime == "thisyear" { //去年
+			starttime = fmt.Sprint(time.Date(now.Year()-1, 1, 1, 0, 0, 0, 0, time.Local).Unix())
+			endtime = fmt.Sprint(time.Date(now.Year(), 1, 1, 0, 0, 0, 0, time.Local).Unix())
+		} else {
+			starttime = strings.Split(publishtime, "_")[0]
+			endtime = strings.Split(publishtime, "_")[1]
+			etTime := time.Now()
+			if endtime != "" {
+				et, _ := strconv.ParseInt(endtime, 0, 64)
+				etTime = time.Unix(et, 0)
+			}
+			endtime = fmt.Sprint(time.Date(etTime.Year(), etTime.Month(), etTime.Day()+1, 0, 0, 0, 0, time.Local).Unix())
+		}
+		mustquery += `{"range":{"publishtime":{`
+		if starttime != "" {
+			mustquery += `"gte":` + starttime
+		}
+		if starttime != "" && endtime != "" {
+			mustquery += `,`
+		}
+		if endtime != "" {
+			mustquery += `"lt":` + endtime
+		}
+		mustquery += `}}}`
+	}
+	if subtype != "" {
+		if len(mustquery) > 0 {
+			mustquery += ","
+		}
+		mustquery += `{"terms":{"subtype":[`
+		for k, v := range strings.Split(subtype, ",") {
+			if k > 0 {
+				mustquery += `,`
+			}
+			mustquery += `"` + v + `"`
+		}
+		mustquery += `]}}`
+	}
+	log.Println("query__1_____\n", mustquery)
+
+	multi_match := `{"multi_match": {"query": %s,"type": "phrase", "fields": [%s],"analyzer": "my_ngram"}}`
+	query := `{"query":{"bool":{"must":[%s],"should":[%s],"must_not":[%s],"minimum_should_match": %d}}}`
+	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
+	query_bools_must := `{"bool":{"must":[{"range":{"bidamount":{%s}}}],"must_not":[{"term":{"bidamount":0}},{"term":{"budget":0}}]}},{"bool":{"must":[{"term":{"bidamount":0}},{"range":{"budget":{%s}}}]}},{"bool":{"must":[{"term":{"budget":0}},{"range":{"bidamount":{%s}}}]}}`
+	query_bool_must := `{"bool":{"must":[{"terms":{"%s":[%s]}}]}}`
+	gte := `"gte": %s`
+	lte := `"lte": %s`
+	bools := []string{}
+	must_not := []string{}
+	if len(keywords) > 0 {
+		if selectType == "" {
+			selectType = "detail\", \"title"
+		}
+		multi_match = fmt.Sprintf(multi_match, "%s", stringMForm(selectType))
+
+		shoulds := []string{}
+		mustsNot := []string{}
+		for _, v := range keywords {
+			//附加词
+			if v.Keyword != "" {
+				shoulds = append(shoulds, fmt.Sprintf(multi_match, stringMForm(v.Keyword)))
+			}
+
+			for _, vv := range v.Appended {
+				shoulds = append(shoulds, fmt.Sprintf(multi_match, stringMForm(vv)))
+			}
+
+			//排除词
+			for _, vv := range v.Exclude {
+				must_not = append(mustsNot, fmt.Sprintf(multi_match, stringMForm(vv)))
+			}
+
+		}
+		if len(shoulds) > 0 {
+			bools = append(bools, fmt.Sprintf(elastic.NgramMust, strings.Join(shoulds, ",")))
+		}
+		if len(mustsNot) > 0 {
+			must_not = append(must_not, fmt.Sprintf(elastic.NgramMust, strings.Join(mustsNot, ",")))
+		}
+
+	}
+	log.Printf("query__2_____\n %s \n %s", bools, must_not)
+	if len(industry) > 0 {
+		bools = append(bools, fmt.Sprintf(query_bool_must, "s_subscopeclass", `"`+strings.Join(industry, `","`)+`"`))
+		log.Printf("query__3_____\n %s ", fmt.Sprintf(query_bool_must, "s_subscopeclass", `"`+strings.Join(industry, `","`)+`"`))
+	}
+	if len(buyer) > 0 {
+		bools = append(bools, fmt.Sprintf(query_bool_must, "buyer", `"`+strings.Join(buyer, `","`)+`"`))
+		log.Printf("query__4_____\n %s ", fmt.Sprintf(query_bool_must, "buyer", `"`+strings.Join(buyer, `","`)+`"`))
+	}
+	if len(winner) > 0 {
+		bools = append(bools, fmt.Sprintf(query_bool_must, "s_winner", `"`+strings.Join(winner, `","`)+`"`))
+		log.Printf("query__5_____\n %s ", fmt.Sprintf(query_bool_must, "s_winner", `"`+strings.Join(winner, `","`)+`"`))
+	}
+	if minprice != "" || maxprice != "" {
+		sq := ``
+		if minprice != "" {
+			min, _ := strconv.ParseFloat(minprice, 64)
+			minprice = fmt.Sprintf("%.0f", min*10000)
+			if minprice == "0" {
+				minprice = ""
+			}
+		}
+		if maxprice != "" {
+			max, _ := strconv.ParseFloat(maxprice, 64)
+			maxprice = fmt.Sprintf("%.0f", max*10000)
+			if maxprice == "0" {
+				maxprice = ""
+			}
+		}
+		if minprice != "" {
+			sq += fmt.Sprintf(gte, minprice)
+		}
+		if minprice != "" && maxprice != "" {
+			sq += `,`
+		}
+		if maxprice != "" {
+			sq += fmt.Sprintf(lte, maxprice)
+		}
+		query_price := fmt.Sprintf(query_bool_should, fmt.Sprintf(query_bools_must, sq, sq, sq))
+		bools = append(bools, query_price)
+		log.Printf("query__6_____\n %s ", query_price)
+	}
+	log.Println("must_not", must_not)
+	qstr := fmt.Sprintf(query, mustquery, strings.Join(bools, ","), strings.Join(must_not, ","), len(bools)+len(must_not))
+	log.Println("\n", qstr)
+	return qstr
+}
+func stringMForm(s string) string {
+	return "\"" + s + "\""
+}
+
 //
 func wxPushViewDatas(index, itype string, keys []elastic.KeyConfig, allquery, findfields, SortQuery, fields string, start, limit int) *[]map[string]interface{} {
 	query_all := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match":1}}}`

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

@@ -0,0 +1,137 @@
+body{
+	padding: 10px;
+}
+.s{
+	min-width: 1200px;
+    margin: 0 auto;
+}
+.d_bz,.d_gj{
+	border-top: #DCE1E4 1px solid;
+	border-right: #DCE1E4 1px solid;
+}
+.d_bz tr td,.d_gj tr td{
+	border-left: #DCE1E4 1px solid;
+	border-bottom: #DCE1E4 1px solid;
+	text-align: center;
+    font-weight: lighter;
+	font-size: 12px;
+	
+	padding: 5px;
+}
+.d_bz tr:nth-child(1) td,.d_gj tr:nth-child(1) td{
+	color: #565f66;
+	background-color: #e9f6ff;
+	height: 35px;
+    white-space: nowrap;
+}
+.d_bz tr:nth-child(odd),.d_gj tr:nth-child(odd){
+	background-color: #f9f9f9;
+}
+.d_bz tr:nth-child(even),.d_gj tr:nth-child(even){
+	background-color: #ffffff;
+}
+
+.d_bz td:nth-child(1){
+	width: 2%;
+}
+.d_bz td:nth-child(2){
+	width: 19%;
+}
+.d_bz td:nth-child(3){
+	width: 19%;
+}
+.d_bz td:nth-child(4){
+	width: 10%;
+	word-break: break-all;
+}
+.d_bz td:nth-child(5){
+	width: 3%;
+	white-space: nowrap;
+}
+.d_bz td:nth-child(6){
+	width: 3%;
+	white-space: nowrap;
+
+}
+.d_bz td:nth-child(7){
+	width: 4%;
+	white-space: nowrap;
+
+}
+.d_bz td:nth-child(8){
+	width: 15%;
+}
+.d_bz td:nth-child(9){
+	width: 10%;
+}
+.d_bz td:nth-child(10){
+	width: 10%;
+}
+.d_bz td:nth-child(11){
+	width: 2%;
+}
+.d_bz td:nth-child(12){
+	width: 3%;
+}
+
+.d_gj td:nth-child(1){
+	width: 2%;
+}
+.d_gj td:nth-child(2){
+	width: 10%;
+}
+.d_gj td:nth-child(3){
+	width: 15%;
+}
+.d_gj td:nth-child(4){
+	width: 10%;
+	word-break: break-all;
+}
+.d_gj td:nth-child(5){
+	width: 10%;
+	word-break: break-all;
+}
+.d_gj td:nth-child(6){
+	width: 2%;
+}
+.d_gj td:nth-child(7){
+	width: 3%;
+}
+.d_gj td:nth-child(8){
+	width: 5%;
+	white-space: nowrap;
+}
+.d_gj td:nth-child(9){
+	width: 7%;
+}
+.d_gj td:nth-child(10){
+	width: 5%;
+}
+.d_gj td:nth-child(11){
+	width: 3%;
+}
+.d_gj td:nth-child(12){
+	width: 3%;
+}
+.d_gj td:nth-child(13){
+	width: 5%;
+}
+.d_gj td:nth-child(14){
+	width: 2%;
+}
+.d_gj td:nth-child(15){
+	width: 5%;
+	white-space: nowrap;
+}
+.d_gj td:nth-child(16){
+	width: 7%;
+}
+.d_gj td:nth-child(17){
+	width: 2%;
+}
+.d_gj td:nth-child(18){
+	width: 2%;
+}
+.d_gj td:nth-child(19){
+	width: 2%;
+}

+ 5 - 3
src/web/templates/pc/createOrderPage.html

@@ -157,8 +157,6 @@
 			}
 		})
 		
-		
-		
 		//是否显示最大条数
 		if(msgCount=msgMaxCount){
 			$(".infotitle em").text("最大限额"+showCount+"条");
@@ -192,7 +190,11 @@
 			alert(111)
 		})
 		//数据浏览
-		$(".dataPreview").on("click",function(){window.open("http://baidu.com");})
+		$(".dataPreview").on("click",function(){
+			var url=window.location.href;
+			var param=url.substring(url.lastIndexOf("\/")+1,url.length)
+			window.open("/front/dataExport/previewData/"+param+"?dataType="+dataType);
+		})
 		
 	})
 	

+ 103 - 0
src/web/templates/pc/previewData.html

@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<meta name="viewport" content="widtd=device-widtd, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+		<link rel="stylesheet" href="/dataExport/css/previewData.css">
+		<title>预览数据</title>
+	</head>
+	<body>
+		<section class="s">
+			{{if eq .T.dataType "1"}}
+				<table class="d_bz" cellspacing="0" cellpadding="0">
+					<tr>
+						<td>序号</td>
+						<td>公告标题</td>
+						<td>公告内容</td>
+						<td>剑鱼地址</td>
+						<td>省份</td>
+						<td>城市</td>
+						<td>发布时间</td>
+						<td>项目名称</td>
+						<td>采购单位</td>
+						<td>中标单位</td>
+						<td>中标价<br>(万元)</td>
+						<!--<td>币种</td>-->
+						<td>公告类别</td>
+					</tr>
+					{{range $i, $v := .T.data}}
+						<tr>
+						<td>{{$v.index}}</td>
+						<td>{{$v.title}}</td>
+						<td>{{$v.description}}</td>
+						<td>{{$v.url}}</td>
+						<td>{{$v.area}}</td>
+						<td>{{$v.city}}</td>
+						<td>{{$v.publishtime}}</td>
+						<td>{{$v.projectname}}</td>
+						<td>{{$v.buyer}}</td>
+						<td>{{$v.winner}}</td>
+						<td>{{$v.bidamount}}</td>
+						<!--<td>人民币</td>-->
+						<td>{{$v.subtype}}</td>
+					</tr>
+					{{end}}
+				</table>
+			{{else}}	
+				<table class="d_gj" cellspacing="0" cellpadding="0">
+				<tr>
+					<td>序号</td>
+					<td>公告标题</td>
+					<td>公告内容</td>
+					<td>公告地址</td>
+					<td>剑鱼地址</td>
+					<td>省份</td>
+					<td>城市</td>
+					<td>发布时间</td>
+					<td>项目名称</td>
+					<td>项目编号</td>
+					<td>采购单位</td>
+					<td>采购单位<br>联系人</td>
+					<td>采购单位<br>联系电话</td>
+					<td>预算</td>
+					<td>开标日期</td>
+					<td>中标单位</td>
+					<!--<td>中标单位<br>联系方式</td>-->
+					<td>中标价<br>(万元)</td>
+					<td>招标机构</td>
+					<!--<td>项目范围</td>-->
+					<!--<td>币种</td>-->
+					<td>公告类别</td>
+				</tr>
+				{{range $i, $v := .T.data}}
+				<tr>
+					<td>{{$v.index}}</td>
+					<td>{{$v.title}}</td>
+					<td>{{$v.description}}</td>					
+					<td>{{$v.href}}</td>
+					<td>{{$v.url}}</td>
+					<td>{{$v.area}}</td>
+					<td>{{$v.city}}</td>
+					<td>{{$v.publishtime}}</td>
+					<td>{{$v.projectname}}</td>
+					<td>{{$v.projectcode}}</td>
+					<td>{{$v.buyer}}</td>
+					<td>{{$v.buyerperson}}</td>
+					<td>{{$v.buyertel}}</td>
+					<td>{{$v.budget}}</td>
+					<td>{{$v.bidopentime}}</td>
+					<td>{{$v.winner}}</td>
+					<!--<td>13027620000</td>-->
+					<td>{{$v.bidamount}}</td>
+					<td>{{$v.agency}}</td>
+					<!--<td>项目范围</td>-->
+					<!--<td>人民币</td>-->
+					<td>{{$v.subtype}}</td>
+				</tr>
+				{{end}}
+			</table>
+			{{end}}		
+		</section>
+	</body>
+	<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
+</html>