yxh 6 лет назад
Родитель
Сommit
e1b494ea78

+ 82 - 5
app/controller/admin/auth.go

@@ -1,10 +1,14 @@
 package admin
 
 import (
+	"gfast/app/model/auth_rule"
 	"gfast/app/service/auth_service"
 	"gfast/library/response"
+	"gfast/library/utils"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
+	"github.com/gogf/gf/util/gvalid"
+	"strings"
 )
 
 //用户管理
@@ -15,16 +19,89 @@ func (c *Auth) AddGroup(r *ghttp.Request) {
 	r.Response.Write("添加用户组")
 }
 
+//菜单列表
+func (c *Auth) MenuList(r *ghttp.Request) {
+	//获取菜单信息
+	err, list := auth_service.GetMenuList("")
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "获取数据失败")
+	}
+	list = utils.PushSonToParent(list)
+	response.SusJson(true, r, "成功", g.Map{
+		"list": list,
+	})
+}
+
+//添加菜单
 func (c *Auth) AddMenu(r *ghttp.Request) {
 	if r.Method == "POST" {
-		postData := r.GetFormMap()
-		response.SusJson(true, r, "成功", postData)
+		menu := new(auth_service.MenuReq)
+		if err := r.Parse(menu); err != nil {
+			response.FailJson(true, r, err.(*gvalid.Error).FirstString())
+		}
+		//保存到数据库
+		err, _ := auth_service.AddMenu(menu)
+		if err != nil {
+			g.Log().Error(err)
+			response.FailJson(true, r, "添加菜单失败")
+		}
+		response.SusJson(true, r, "添加菜单成功")
 	}
 	//获取父级菜单信息
-	err, list := auth_service.GetMenuList()
+	err, list := auth_service.GetMenuList("ismenu=?", 1)
 	if err != nil {
 		response.FailJson(true, r, "获取数据失败")
 	}
-	returnData := g.Map{"parentList": list}
-	response.SusJson(true, r, "成功", returnData)
+	list = utils.ParentSonSort(list)
+	response.SusJson(true, r, "成功", g.Map{"parentList": list})
+}
+
+//修改菜单
+func (c *Auth) EditMenu(r *ghttp.Request) {
+	id := r.GetRequestInt("id")
+	if r.Method == "POST" {
+		menu := new(auth_service.MenuReq)
+		if err := r.Parse(menu); err != nil {
+			response.FailJson(true, r, err.(*gvalid.Error).FirstString())
+		}
+		//保存到数据库
+		err, _ := auth_service.EditMenu(menu, id)
+		if err != nil {
+			g.Log().Error(err)
+			response.FailJson(true, r, "修改菜单失败")
+		}
+		response.SusJson(true, r, "修改菜单成功")
+	}
+	menuEntity, err := auth_rule.Model.Where("id=?", id).One()
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "获取数据失败")
+	}
+	//获取父级菜单信息
+	err, list := auth_service.GetMenuList("ismenu=?", 1)
+	if err != nil {
+		response.FailJson(true, r, "获取数据失败")
+	}
+	list = utils.ParentSonSort(list)
+	response.SusJson(true, r, "成功", g.Map{
+		"parentList": list,
+		"menu":       menuEntity,
+	})
+}
+
+//删除菜单
+func (c *Auth) DeleteMenu(r *ghttp.Request) {
+	ids := r.GetRequestArray("ids")
+	where := "id in(" + strings.TrimRight(strings.Repeat("?,", len(ids)), ",") + ")"
+	idsInterface := make([]interface{}, len(ids))
+	for k, v := range ids {
+		idsInterface[k] = v
+	}
+	_, err := auth_rule.Model.Where(where, idsInterface...).Delete()
+	if err != nil {
+		g.Log().Error(err)
+		response.FailJson(true, r, "删除失败")
+	}
+	response.SusJson(true, r, "删除成功")
 }

+ 1 - 1
app/model/qxkj_auth_rule/qxkj_auth_rule_entity.go → app/model/auth_rule/auth_rule_entity.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_auth_rule
+package auth_rule
 
 import (
 	"database/sql"

+ 1 - 1
app/model/qxkj_auth_rule/qxkj_auth_rule_model.go → app/model/auth_rule/auth_rule_model.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_auth_rule
+package auth_rule
 
 import (
 	"database/sql"

+ 0 - 3
app/model/qxkj_auth_rule/qxkj_auth_rule.go

@@ -1,3 +0,0 @@
-package qxkj_auth_rule
-
-// Fill with you ideas below.

+ 0 - 3
app/model/qxkj_role/qxkj_role.go

@@ -1,3 +0,0 @@
-package qxkj_role
-
-// Fill with you ideas below.

+ 0 - 3
app/model/qxkj_role_user/qxkj_role_user.go

@@ -1,3 +0,0 @@
-package qxkj_role_user
-
-// Fill with you ideas below.

+ 1 - 1
app/model/qxkj_role/qxkj_role_entity.go → app/model/role/role_entity.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_role
+package role
 
 import (
 	"database/sql"

+ 1 - 1
app/model/qxkj_role/qxkj_role_model.go → app/model/role/role_model.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_role
+package role
 
 import (
 	"database/sql"

+ 1 - 1
app/model/qxkj_role_user/qxkj_role_user_entity.go → app/model/role_user/role_user_entity.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_role_user
+package role_user
 
 import (
 	"database/sql"

+ 1 - 1
app/model/qxkj_role_user/qxkj_role_user_model.go → app/model/role_user/role_user_model.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_role_user
+package role_user
 
 import (
 	"database/sql"

+ 1 - 1
app/model/qxkj_user/qxkj_user_entity.go → app/model/user/user_entity.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_user
+package user
 
 import (
 	"database/sql"

+ 1 - 1
app/model/qxkj_user/qxkj_user_model.go → app/model/user/user_model.go

@@ -2,7 +2,7 @@
 // This is auto-generated by gf cli tool. You may not really want to edit it.
 // ==========================================================================
 
-package qxkj_user
+package user
 
 import (
 	"database/sql"

+ 65 - 0
app/service/auth_service/auth_rule.go

@@ -0,0 +1,65 @@
+package auth_service
+
+import (
+	"gfast/app/model/auth_rule"
+	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/os/gtime"
+	"github.com/gogf/gf/util/gconv"
+)
+
+//菜单对象
+type MenuReq struct {
+	IsMenu    int    `p:"ismenu" c:"ismenu" v:"min:0|max:1#菜单类型最小值为:min|菜单类型最大值为:max"`
+	Pid       int    `p:"pid" c:"pid" v:"min:0"`
+	Name      string `p:"name" c:"name" v:"required#请填写规则名称"`
+	Title     string `p:"title" c:"title" v:"required|length:1,100#请填写标题|标题长度在:min到:max位"`
+	Icon      string `p:"icon" c:"icon"`
+	Weigh     int    `p:"weigh" c:"weigh"`
+	Condition string `p:"condition" c:"condition"`
+	Remark    string `p:"remark" c:"remark"`
+	Status    int    `p:"status" c:"status"`
+}
+
+//获取菜单列表
+func GetMenuList(where string, params ...interface{}) (error, g.List) {
+	var err error
+	var list []*auth_rule.Entity
+	if where != "" {
+		list, err = auth_rule.Model.Where(where, params...).Order("weigh desc,id asc").FindAll()
+	} else {
+		list, err = auth_rule.Model.Order("weigh desc,id asc").FindAll()
+	}
+	if err != nil {
+		g.Log().Error(err)
+		return err, nil
+	}
+	var gList = make(g.List, len(list))
+	for k, v := range list {
+		tMap := gconv.Map(v)
+		gList[k] = tMap
+	}
+	return nil, gList
+}
+
+// 添加菜单操作
+func AddMenu(req *MenuReq) (err error, insertId int64) {
+	menuMap := gconv.Map(req)
+	now := gtime.Timestamp()
+	menuMap["createtime"] = now
+	menuMap["updatetime"] = now
+	res, e := auth_rule.Model.Insert(menuMap)
+	err = e
+	insertId, _ = res.LastInsertId()
+	return
+}
+
+//修改菜单操作
+func EditMenu(req *MenuReq, id int) (err error, rows int64) {
+	menuMap := gconv.Map(req)
+	now := gtime.Timestamp()
+	menuMap["updatetime"] = now
+	res, e := auth_rule.Model.Where("id=?", id).Update(menuMap)
+	err = e
+	rows, _ = res.RowsAffected()
+	return
+}

+ 0 - 24
app/service/auth_service/qxkj_auth_rule.go

@@ -1,24 +0,0 @@
-package auth_service
-
-import (
-	"gfast/app/model/qxkj_auth_rule"
-	"gfast/library/utils"
-	"github.com/gogf/gf/database/gdb"
-	"github.com/gogf/gf/frame/g"
-	"github.com/gogf/gf/util/gconv"
-)
-
-func GetMenuList() (error, gdb.List) {
-	list, err := qxkj_auth_rule.Model.Where(" ismenu=?", 1).Order("weigh desc,id asc").FindAll()
-	if err != nil {
-		g.Log().Error(err)
-		return err, nil
-	}
-	var gdbList = make(gdb.List, len(list))
-	for k, v := range list {
-		tMap := gconv.Map(v)
-		gdbList[k] = tMap
-	}
-	gdbList = utils.ParentSonSort(gdbList)
-	return nil, gdbList
-}

+ 3 - 3
app/service/user_service/qxkj_user.go → app/service/user_service/user.go

@@ -3,13 +3,13 @@ package user_service
 import (
 	"database/sql"
 	"errors"
-	"gfast/app/model/qxkj_user"
+	"gfast/app/model/user"
 	"github.com/gogf/gf/net/ghttp"
 )
 
 // 用户登录,成功返回用户信息,否则返回nil
-func SignIn(username, password string, session *ghttp.Session) (error, *qxkj_user.QxkjUser) {
-	qxkjUser, err := qxkj_user.Model.Where("user_name=? and user_password=?", username, password).One()
+func SignIn(username, password string, session *ghttp.Session) (error, *user.QxkjUser) {
+	qxkjUser, err := user.Model.Where("user_name=? and user_password=?", username, password).One()
 	if err != nil && err != sql.ErrNoRows {
 		return err, nil
 	}

+ 3 - 0
config/config.toml

@@ -1,6 +1,9 @@
 # 数据库连接
 [database]
     link = "mysql:root:123456@tcp(127.0.0.1:3306)/gfast"
+    maxIdle      = "10" #连接池最大闲置的连接数
+    maxOpen     = "10" #连接池最大打开的连接数
+    maxLifetime  = "30" #(单位秒)连接对象可重复使用的时间长度
     debug  = true
 
 #web服务器配置

+ 45 - 3
library/utils/slice_tree.go

@@ -2,13 +2,13 @@ package utils
 
 import (
 	"fmt"
-	"github.com/gogf/gf/database/gdb"
+	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/util/gconv"
 	"strings"
 )
 
 //有层级关系的数组,父级-》子级 排序
-func ParentSonSort(list gdb.List, params ...interface{}) gdb.List {
+func ParentSonSort(list g.List, params ...interface{}) g.List {
 	args := make([]interface{}, 8)
 	for k, v := range params {
 		if k == 8 {
@@ -35,7 +35,7 @@ func ParentSonSort(list gdb.List, params ...interface{}) gdb.List {
 	breaks = gconv.Int(GetSliceByKey(args, 6, -1))
 	prefixStr = gconv.String(GetSliceByKey(args, 7, "  "))
 	//定义一个新slice用于返回
-	var returnSlice gdb.List
+	var returnSlice g.List
 	for _, v := range list {
 		if pid == gconv.Int(v[fieldName]) {
 			v[levelName] = level
@@ -70,6 +70,48 @@ func ParentSonSort(list gdb.List, params ...interface{}) gdb.List {
 	return returnSlice
 }
 
+//有层级关系的数组 ,将子级压入到父级(树形结构)
+func PushSonToParent(list g.List, params ...interface{}) g.List {
+	args := make([]interface{}, 6)
+	for k, v := range params {
+		if k == 6 {
+			break
+		}
+		args[k] = v
+	}
+	var (
+		pid       int         //父级id
+		fieldName string      //父级id键名
+		id        string      //id键名
+		key       string      //子级数组键名
+		filter    string      //过滤键名
+		filterVal interface{} //过滤的值
+	)
+	pid = gconv.Int(GetSliceByKey(args, 0, 0))
+	fieldName = gconv.String(GetSliceByKey(args, 1, "pid"))
+	id = gconv.String(GetSliceByKey(args, 2, "id"))
+	key = gconv.String(GetSliceByKey(args, 3, "children"))
+	filter = gconv.String(GetSliceByKey(args, 4, ""))
+	filterVal = GetSliceByKey(args, 5, nil)
+	var returnList g.List
+	for _, v := range list {
+		if gconv.Int(v[fieldName]) == pid {
+			if filter != "" {
+				if v[filter] == filterVal {
+					args[0] = v[id]
+					v[key] = PushSonToParent(list, args...)
+					returnList = append(returnList, v)
+				}
+			} else {
+				args[0] = v[id]
+				v[key] = PushSonToParent(list, args...)
+				returnList = append(returnList, v)
+			}
+		}
+	}
+	return returnList
+}
+
 //获取切片里的值 若为nil 可设置默认值val
 func GetSliceByKey(args []interface{}, key int, val interface{}) interface{} {
 	var value interface{}

+ 1 - 7
test/demo2_test.go

@@ -1,7 +1,6 @@
 package test
 
 import (
-	"fmt"
 	"testing"
 )
 
@@ -10,10 +9,5 @@ func TestDemo2(t *testing.T) {
 }
 
 func test21(t *testing.T) {
-	a := []int{1, 2, 3, 4, 5}
-	b := []int{6, 7, 8, 9}
-	c := make([]int, 0, 9)
-	c = append(c, a...)
-	c = append(c, b...)
-	fmt.Println(c)
+
 }