diff --git a/app/controller/admin/auth.go b/app/controller/admin/auth.go index aa65761..5305957 100644 --- a/app/controller/admin/auth.go +++ b/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, "删除成功") } diff --git a/app/model/qxkj_auth_rule/qxkj_auth_rule_entity.go b/app/model/auth_rule/auth_rule_entity.go similarity index 99% rename from app/model/qxkj_auth_rule/qxkj_auth_rule_entity.go rename to app/model/auth_rule/auth_rule_entity.go index b6ae9d2..e8bf338 100644 --- a/app/model/qxkj_auth_rule/qxkj_auth_rule_entity.go +++ b/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" diff --git a/app/model/qxkj_auth_rule/qxkj_auth_rule_model.go b/app/model/auth_rule/auth_rule_model.go similarity index 99% rename from app/model/qxkj_auth_rule/qxkj_auth_rule_model.go rename to app/model/auth_rule/auth_rule_model.go index 5d2b59c..4a2276b 100644 --- a/app/model/qxkj_auth_rule/qxkj_auth_rule_model.go +++ b/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" diff --git a/app/model/qxkj_auth_rule/qxkj_auth_rule.go b/app/model/qxkj_auth_rule/qxkj_auth_rule.go deleted file mode 100644 index ae4635b..0000000 --- a/app/model/qxkj_auth_rule/qxkj_auth_rule.go +++ /dev/null @@ -1,3 +0,0 @@ -package qxkj_auth_rule - -// Fill with you ideas below. diff --git a/app/model/qxkj_role/qxkj_role.go b/app/model/qxkj_role/qxkj_role.go deleted file mode 100644 index 0f6ab7d..0000000 --- a/app/model/qxkj_role/qxkj_role.go +++ /dev/null @@ -1,3 +0,0 @@ -package qxkj_role - -// Fill with you ideas below. diff --git a/app/model/qxkj_role_user/qxkj_role_user.go b/app/model/qxkj_role_user/qxkj_role_user.go deleted file mode 100644 index 8eb7954..0000000 --- a/app/model/qxkj_role_user/qxkj_role_user.go +++ /dev/null @@ -1,3 +0,0 @@ -package qxkj_role_user - -// Fill with you ideas below. diff --git a/app/model/qxkj_role/qxkj_role_entity.go b/app/model/role/role_entity.go similarity index 99% rename from app/model/qxkj_role/qxkj_role_entity.go rename to app/model/role/role_entity.go index 3ff5306..6da8311 100644 --- a/app/model/qxkj_role/qxkj_role_entity.go +++ b/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" diff --git a/app/model/qxkj_role/qxkj_role_model.go b/app/model/role/role_model.go similarity index 99% rename from app/model/qxkj_role/qxkj_role_model.go rename to app/model/role/role_model.go index 55e7afa..e8ce62d 100644 --- a/app/model/qxkj_role/qxkj_role_model.go +++ b/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" diff --git a/app/model/qxkj_role_user/qxkj_role_user_entity.go b/app/model/role_user/role_user_entity.go similarity index 98% rename from app/model/qxkj_role_user/qxkj_role_user_entity.go rename to app/model/role_user/role_user_entity.go index 41838b7..46c1121 100644 --- a/app/model/qxkj_role_user/qxkj_role_user_entity.go +++ b/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" diff --git a/app/model/qxkj_role_user/qxkj_role_user_model.go b/app/model/role_user/role_user_model.go similarity index 99% rename from app/model/qxkj_role_user/qxkj_role_user_model.go rename to app/model/role_user/role_user_model.go index 15c23da..7d08e5c 100644 --- a/app/model/qxkj_role_user/qxkj_role_user_model.go +++ b/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" diff --git a/app/model/qxkj_user/qxkj_user_entity.go b/app/model/user/user_entity.go similarity index 99% rename from app/model/qxkj_user/qxkj_user_entity.go rename to app/model/user/user_entity.go index 44f0a6c..31dbef3 100644 --- a/app/model/qxkj_user/qxkj_user_entity.go +++ b/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" diff --git a/app/model/qxkj_user/qxkj_user_model.go b/app/model/user/user_model.go similarity index 99% rename from app/model/qxkj_user/qxkj_user_model.go rename to app/model/user/user_model.go index 7171b54..193b6c7 100644 --- a/app/model/qxkj_user/qxkj_user_model.go +++ b/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" diff --git a/app/service/auth_service/auth_rule.go b/app/service/auth_service/auth_rule.go new file mode 100644 index 0000000..e9a69e1 --- /dev/null +++ b/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 +} diff --git a/app/service/auth_service/qxkj_auth_rule.go b/app/service/auth_service/qxkj_auth_rule.go deleted file mode 100644 index 155bec7..0000000 --- a/app/service/auth_service/qxkj_auth_rule.go +++ /dev/null @@ -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 -} diff --git a/app/service/user_service/qxkj_user.go b/app/service/user_service/user.go similarity index 70% rename from app/service/user_service/qxkj_user.go rename to app/service/user_service/user.go index 2d0727f..72734ff 100644 --- a/app/service/user_service/qxkj_user.go +++ b/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 } diff --git a/config/config.toml b/config/config.toml index b7dd27a..9cfa57e 100644 --- a/config/config.toml +++ b/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服务器配置 diff --git a/library/utils/slice_tree.go b/library/utils/slice_tree.go index 45aea79..7d616ce 100644 --- a/library/utils/slice_tree.go +++ b/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{} diff --git a/test/demo2_test.go b/test/demo2_test.go index 4d75dbc..d2ad02d 100644 --- a/test/demo2_test.go +++ b/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) + }