增加导出功能

This commit is contained in:
hoteas
2022-08-01 03:40:09 +08:00
parent 4e24a913c6
commit 3da135e3cb
6 changed files with 168 additions and 12 deletions
+148 -7
View File
@@ -2,6 +2,8 @@ package hotime
import (
. "code.hoteas.com/golang/hotime/common"
"fmt"
"github.com/360EntSecGroup-Skylar/excelize"
"io"
"io/ioutil"
"os"
@@ -261,6 +263,12 @@ var TptProject = Proj{
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v1.GetString("auth"), `"add"`) {
auth = append(auth, "add")
@@ -315,7 +323,11 @@ var TptProject = Proj{
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v2.GetString("auth"), `"add"`) {
auth = append(auth, "add")
@@ -516,7 +528,11 @@ var TptProject = Proj{
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v1.GetString("auth"), `"add"`) {
auth = append(auth, "add")
@@ -571,7 +587,11 @@ var TptProject = Proj{
auth = append(auth, "show")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
strings.Contains(v1.GetString("auth"), `"download"`) {
auth = append(auth, "download")
}
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
strings.Contains(v2.GetString("auth"), `"add"`) {
auth = append(auth, "add")
@@ -657,7 +677,6 @@ var TptProject = Proj{
}
that.Display(0, "删除成功")
},
"search": func(that *Context) {
hotimeName := that.RouterString[0]
fileConfig := that.MakeCodeRouter[hotimeName].FileConfig
@@ -669,6 +688,8 @@ var TptProject = Proj{
page := ObjToInt(that.Req.FormValue("page"))
pageSize := ObjToInt(that.Req.FormValue("pageSize"))
download := ObjToInt(that.Req.FormValue("download"))
if page < 1 {
page = 1
}
@@ -677,23 +698,39 @@ var TptProject = Proj{
pageSize = 20
}
count := that.Db.Count(tableName, leftJoin, where)
reData := that.Db.Page(page, pageSize).
PageSelect(tableName, leftJoin, columnStr, where)
var count int
var reData []Map
//是否下载
if download == 0 {
count = that.Db.Count(tableName, leftJoin, where)
reData = that.Db.Page(page, pageSize).
PageSelect(tableName, leftJoin, columnStr, where)
}
if download == 1 {
reData = that.Db.Select(tableName, leftJoin, columnStr, where)
}
for _, v := range reData {
v.RangeSort(func(k string, v1 interface{}) (isEnd bool) {
//如果有table字段则代为link
if v["table"] != nil && v["table_id"] != nil {
id := v.GetCeilInt64("table_id")
tableName := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v.GetString("table")).GetString("label")
v["table_table_name"] = strings.Replace(tableName, "管理", "", -1)
parentC := that.Db.Get(v.GetString("table"), "name", Map{"id": id})
sname := "name"
if that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("table")][sname] == nil {
sname = "title"
if that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("table")][sname] == nil {
sname = "id"
}
}
parentC := that.Db.Get(v.GetString("table"), sname, Map{"id": id})
v["table_table_id_name"] = ""
if parentC != nil {
v["table_table_id_name"] = parentC.GetString("name")
v["table_table_id_name"] = parentC.GetString(sname)
}
}
@@ -717,6 +754,93 @@ var TptProject = Proj{
})
}
if download == 1 {
tableNameLabel := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetString("label")
f := excelize.NewFile()
// 创建一个工作表
f.NewSheet(tableNameLabel)
f.DeleteSheet("Sheet1")
columns := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetSlice("columns")
//单列
n := 0
for k, _ := range columns {
v := columns.GetMap(k)
if v["list"] != nil && v.GetBool("list") == false {
continue
}
n++
//第一个要加状态行
//单行
for k1, v1 := range reData {
if k1 == 0 {
f.SetCellValue(tableNameLabel, convertToTitle(n)+"1", v.GetString("label"))
}
if v.GetString("link") != "" {
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("link")+"_"+v.GetString("name")+"_"+v.GetString("value")))
continue
}
if v.GetString("name") == "table" {
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v1.GetString("table")).GetString("label"))
continue
}
if v.GetString("name") == "table_id" {
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString("table_"+v.GetString("name")+"_name"))
continue
}
//select类型
options := v.GetSlice("options")
if len(options) != 0 {
isEnd := false
for ok, _ := range options {
ov := options.GetMap(ok)
if ov.GetString("value") == v1.GetString(v.GetString("name")) {
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), ov.GetString("name"))
isEnd = true
break
}
}
if isEnd {
continue
}
}
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("name")))
}
}
filePath := that.Config.GetString("filePath")
if filePath == "" {
filePath = "/file/temp/"
}
//path := time.Now().Format(filePath)
e := os.MkdirAll(that.Config.GetString("tpt")+filePath, os.ModeDir)
if e != nil {
that.Display(3, e)
return
}
filePath = filePath + tableName + time.Now().Format("2006-01-02-15-04-05") + ".xlsx"
// 根据指定路径保存文件
if err := f.SaveAs(that.Config.GetString("tpt") + filePath); err != nil {
fmt.Println(err)
that.Display(4, "输出异常")
return
}
f.Save()
//that.Resp.Header().Set("Location", filePath)
//that.Resp.WriteHeader(307) //关键在这里!
that.Display(0, filePath)
return
}
that.Display(0, Map{"count": count, "data": reData})
},
},
@@ -1030,3 +1154,20 @@ var TptProject = Proj{
},
},
}
func convertToTitle(columnNumber int) string {
var res []byte
for columnNumber > 0 {
a := columnNumber % 26
if a == 0 {
a = 26
}
res = append(res, 'A'+byte(a-1))
columnNumber = (columnNumber - a) / 26
}
// 上面输出的res是反着的,前后交换
for i, n := 0, len(res); i < n/2; i++ {
res[i], res[n-1-i] = res[n-1-i], res[i]
}
return string(res)
}