You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

223 lines
5.0 KiB

4 years ago
package user
import (
"recook/internal/back"
"recook/internal/cache"
"recook/internal/dbc"
"recook/internal/model/manage"
"recook/internal/model/menu"
"recook/internal/model/rolemenu"
"recook/internal/model/vend"
"recook/tools"
"strconv"
"time"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
)
type loginParam struct {
Mobile string `gorm:"column:mobile" json:"mobile" validate:"required,len=11"`
Password string `gorm:"column:password" json:"password" validate:"required,len=6"`
}
type logoutParam struct {
ID uint `json:"id" validate:"required"`
}
// 登录
func Login(c *gin.Context) {
var p loginParam
err := tools.Params(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
var u manage.UserInfo
err = dbc.DB.First(&u, "mobile=?", p.Mobile).Error
if err != nil {
if gorm.IsRecordNotFoundError(err) {
back.PasswordErr(c)
} else {
back.Err(c, err.Error())
}
return
}
if u.Password == tools.MD5(p.Password) {
if u.IsDel == 1 {
back.LoginErr(c, "账号被禁用")
return
}
if u.RoleID == 0 {
back.LoginErr(c, "账号未绑定角色")
return
}
var r manage.Role
dbc.DB.First(&r, "id=?", u.RoleID)
if r.IsDel == 1 {
back.LoginErr(c, "角色被禁用")
return
}
token := tools.Token()
dbc.DB.Model(&u).Update("token", token)
cache.SetAdminLoginCache(&u)
u.Code = r.Code
back.Suc(c, "登录成功", u)
} else {
back.PasswordErr(c)
}
}
type TreeList struct {
ID int `json:"id"`
Name string `json:"name" validate:"required"` //菜单名称
Parentid int `json:"parentid"` //父级菜单id
Path string `json:"path"` //前端跳转路径
Action string `json:"action"` //后台api路径
Icon string `json:"icon"` //图标
Component string `json:"component"` //react组件名称
Listorder int `json:"listorder"` //排序
Display string `json:"display"` //是否显示1正常2禁用
Check int `json:"check"` //是否选中
Children []*TreeList `json:"children"`
}
//获取管理员对应的菜单
func GetManagerMenu(c *gin.Context) {
id, _ := strconv.Atoi(c.Request.Header.Get("X-Recook-ID"))
var myManager manage.UserInfo
dbc.DB.First(&myManager, "id=?", id)
var MenuId []int
//超级管理员拥有所有的权限
//if myManager.NewroleId == 1 {
// MenuId = nil
//} else {
var myMenuId []struct{ Menuid int }
var myRole rolemenu.Rolemenu
dbc.DB.Select("menuid").Model(&myRole).Where("roleid=?", myManager.NewroleId).Scan(&myMenuId)
for _, item := range myMenuId {
MenuId = append(MenuId, item.Menuid)
}
if len(myMenuId) == 0 {
MenuId = append(MenuId, 0)
}
//}
//返回权限菜单
treeList := getMenu(MenuId, 0, 1)
back.Suc(c, "", treeList)
}
/*
,
*/
func getMenu(menuId []int, pid int, level int) []*TreeList {
var menu []menu.RecookMenu
if len(menuId) > 0 {
dbc.DB.Where("parentid = ? and display=1 and id in (?)", pid, menuId).Order("listorder asc").Find(&menu)
} else {
dbc.DB.Where("parentid =? and display=1", pid).Order("listorder asc").Find(&menu)
}
level = level + 1
treeList := []*TreeList{}
if level <= 3 {
for _, v := range menu {
child := getMenu(menuId, v.ID, level)
node := &TreeList{
Name: v.Name,
Parentid: v.Parentid,
Path: v.Path,
Action: v.Action,
Icon: v.Icon,
Component: v.Component,
Listorder: v.Listorder,
Display: v.Display,
}
node.Children = child
treeList = append(treeList, node)
}
}
return treeList
}
type loginGysParam struct {
Username string ` json:"username" validate:"required"`
Pass string ` json:"pass" validate:"required"`
Type int ` json:"type"`
}
// 供应商的登录
func LoginGys(c *gin.Context) {
var p loginGysParam
err := tools.Params(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
var gys vend.GysUsers
err = dbc.DB.First(&gys, "username=?", p.Username).Error
if err != nil {
if gorm.IsRecordNotFoundError(err) {
back.PasswordErr(c)
} else {
back.Err(c, err.Error())
}
return
}
if p.Type == 1 {
p.Pass = tools.MD5(p.Pass)
}
if tools.MD5(gys.Password) == p.Pass {
//供应商统一管理
var u manage.UserInfo
dbc.DB.First(&u, "name=?", "供应商统一管理")
var r manage.Role
dbc.DB.First(&r, "id=?", u.RoleID)
token := tools.Token()
//过期时间
dbc.Rds.Set(token, gys.ID, 24*time.Hour)
u.Code = r.Code
back.Suc(c, "登录成功", &gin.H{
"id": u.ID,
"token": u.Token,
"code": u.Code,
"gysToken": token,
})
return
} else {
back.PasswordErr(c)
}
}
// 退出
func Logout(c *gin.Context) {
var p logoutParam
err := tools.Params(&p, c)
if err != nil {
back.Fail(c, err.Error())
return
}
var u manage.UserInfo
dbc.DB.First(&u, "id=?", p.ID)
dbc.DB.Model(&u).Update("token", tools.Token())
back.Suc(c, "登出成功", nil)
}