huangrf 6 лет назад
Родитель
Сommit
dbf3dad47e
4 измененных файлов с 71 добавлено и 3 удалено
  1. 9 2
      controllers/partial/SystemController.go
  2. 7 0
      models/PageResult_gen.go
  3. 1 1
      models/SysMenu_gen.go
  4. 54 0
      utils/utils.go

+ 9 - 2
controllers/partial/SystemController.go

@@ -800,14 +800,21 @@ func System_DelMenu(c *entitys.CtrlContext) {
 // @Failure 403 :id is empty
 func System_UpdateMenu(c *entitys.CtrlContext) {
 	var sysmenu models.SysMenu
-	c.Ctx.BindJSON(&sysmenu)
+	err := c.Ctx.BindJSON(&sysmenu)
+	if err != nil{
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
+		return
+	}
 
 	user_id := c.Ctx.GetString("user_id")
 
+	whereMenu := &models.SysMenu{}
+	whereMenu.Id = sysmenu.Id
+
 	sysmenu.LastUpdateBy = user_id
 	sysmenu.LastUpdateDate = time.Now()
 
-	_, err := c.Db.ID(sysmenu.Id).Update(&sysmenu)
+	_, err = c.Db.Update(&sysmenu, whereMenu)
 
 	if err != nil {
 		c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})

+ 7 - 0
models/PageResult_gen.go

@@ -11,3 +11,10 @@ type PageResult struct {
 	//内容
 	Content interface{} `json:"content"`
 }
+
+type PageQueryParam struct{
+	TableName string
+	SelectFields []string
+	JoinTables []Join
+	PageInfo GetPageInfo
+}

+ 1 - 1
models/SysMenu_gen.go

@@ -14,7 +14,7 @@ type SysMenu struct {
 	//父菜单ID,一级菜单为null
 	Parent   string    `xorm:"'parent' varchar(36) null "json:"parent"`
 	//菜单URL,类型:1.普通页面(如用户管理, /sys/user) 2.嵌套完整外部页面,以http(s)开头的链接 3.嵌套服务器页面,使用iframe:前缀+目标URL(如SQL监控, iframe:/druid/login.html, iframe:前缀会替换成服务器地址)
-	Url   string    `xorm:"'url' varchar(200) notnull "json:"url"`
+	Url   string    `xorm:"'url' varchar(200) null "json:"url"`
 	//授权(多个用逗号分隔,如:sys:user:add,sys:user:edit)
 	Perms   string    `xorm:"'perms' varchar(500) null "json:"perms"`
 	// 组件

+ 54 - 0
utils/utils.go

@@ -6,6 +6,8 @@ import (
 	"encoding/hex"
 	"git.qianqiusoft.com/qianqiusoft/go-uuid/uuid"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
+	"github.com/xormplus/xorm"
 	"net/url"
 	"strings"
 )
@@ -50,3 +52,55 @@ func FormatForBrowse(agent, val string) string {
 	}
 	return val
 }
+
+func PageQuery(db *xorm.Engine, param models.PageQueryParam, rowsSlicePtr interface{})(*models.PageResult, error){
+	pageResult := models.PageResult{}
+
+	dbSession := db.Table(param.TableName)
+	if len(param.SelectFields) > 0{
+		dbSession = dbSession.Select(param.TableName + ".*")
+	}else{
+		dbSession = dbSession.Select(strings.Join(param.SelectFields, ","))
+	}
+
+	count := 0
+	countSession := db.Table(param.TableName)
+	countSession.Select("count(*) as records")
+
+	for _, join := range param.JoinTables {
+		dbSession = dbSession.Join(join.JoinOperator, join.TabelName, join.Condition)
+	}
+
+	whereStr, datas, err := param.PageInfo.Filter.Parse("")
+
+	if err != nil {
+		return nil, err
+	}
+
+	dbSession = dbSession.Where(whereStr, datas...)
+	countSession = countSession.Where(whereStr, datas...)
+
+	sidx := strings.Split(param.PageInfo.Sidx, ",")
+	for _, order := range sidx {
+		order = strings.TrimSpace(order)
+		if len(order) == 0 {
+			continue
+		}
+
+		if strings.ToLower(param.PageInfo.Sord) == "desc" {
+			dbSession = dbSession.OrderBy(order + " desc")
+		} else {
+			dbSession = dbSession.OrderBy(order + " asc")
+		}
+	}
+
+	err = dbSession.Limit(param.PageInfo.PageSize, (param.PageInfo.PageNum-1)*param.PageInfo.PageSize).Find(rowsSlicePtr)
+	_, err = countSession.Get(&count)
+
+	pageResult.Content = rowsSlicePtr
+	pageResult.TotalSize = count
+	pageResult.PageNum = param.PageInfo.PageNum
+	pageResult.PageSize = param.PageInfo.PageSize
+
+	return &pageResult, nil
+}