mirror of
https://github.com/tiger1103/gfast.git
synced 2026-09-21 10:12:59 +00:00
项目初始
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/api"
|
||||
comModel "gfast/app/common/model"
|
||||
commonService "gfast/app/common/service"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"gfast/library"
|
||||
"github.com/goflyfox/gtoken/gtoken"
|
||||
"github.com/gogf/gf/crypto/gmd5"
|
||||
"github.com/gogf/gf/encoding/gjson"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/os/gcache"
|
||||
"github.com/gogf/gf/os/genv"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
"github.com/mssola/user_agent"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type auth struct {
|
||||
api.CommonBase
|
||||
}
|
||||
|
||||
var (
|
||||
Auth = new(auth)
|
||||
MultiLogin = g.Cfg().GetBool("gToken.system.MultiLogin")
|
||||
GfToken = >oken.GfToken{
|
||||
CacheMode: g.Cfg().GetInt8("gToken.system.CacheMode"),
|
||||
CacheKey: g.Cfg().GetString("gToken.system.CacheKey"),
|
||||
Timeout: g.Cfg().GetInt("gToken.system.Timeout"),
|
||||
MaxRefresh: g.Cfg().GetInt("gToken.system.MaxRefresh"),
|
||||
TokenDelimiter: g.Cfg().GetString("gToken.system.TokenDelimiter"),
|
||||
EncryptKey: g.Cfg().GetBytes("gToken.system.EncryptKey"),
|
||||
AuthFailMsg: g.Cfg().GetString("gToken.system.AuthFailMsg"),
|
||||
MultiLogin: MultiLogin,
|
||||
LoginPath: "/login",
|
||||
LoginBeforeFunc: Auth.login,
|
||||
LoginAfterFunc: Auth.loginAfter,
|
||||
LogoutPath: "/logout",
|
||||
AuthExcludePaths: g.SliceStr{"/login"},
|
||||
AuthAfterFunc: Auth.authAfterFunc,
|
||||
LogoutBeforeFunc: Auth.loginOut,
|
||||
}
|
||||
)
|
||||
|
||||
//后台用户登陆验证
|
||||
func (c *auth) login(r *ghttp.Request) (string, interface{}) {
|
||||
var ctx = r.GetCtx()
|
||||
var apiReq *model.LoginParamsReq
|
||||
if err := r.Parse(&apiReq); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
//判断验证码是否正确
|
||||
debug := genv.GetWithCmd("gf.debug")
|
||||
if debug.Int() != 1 {
|
||||
if !commonService.Captcha.VerifyString(apiReq.VerifyKey, apiReq.VerifyCode) {
|
||||
c.FailJson(true, r, "验证码输入错误")
|
||||
}
|
||||
}
|
||||
ip := library.GetClientIp(r)
|
||||
userAgent := r.Header.Get("User-Agent")
|
||||
if user, err := service.SysUser.GetAdminUserByUsernamePassword(ctx, apiReq); err != nil {
|
||||
//保存日志(异步)
|
||||
service.SysLoginLog.Invoke(&model.LoginLogParams{
|
||||
Status: 0,
|
||||
Username: apiReq.Username,
|
||||
Ip: ip,
|
||||
UserAgent: userAgent,
|
||||
Msg: err.Error(),
|
||||
Module: "系统后台",
|
||||
})
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else if user != nil {
|
||||
r.SetParam("userInfo", user)
|
||||
//更新用户登录记录 写入日志信息
|
||||
service.SysUser.UpdateLoginInfo(user.Id, apiReq.Username, ip, userAgent, "登录成功", "系统后台")
|
||||
var keys string
|
||||
if MultiLogin {
|
||||
keys = gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword+ip)
|
||||
} else {
|
||||
keys = gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword)
|
||||
}
|
||||
return keys, user
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
|
||||
//登录成功返回
|
||||
func (c *auth) loginAfter(r *ghttp.Request, respData gtoken.Resp) {
|
||||
if !respData.Success() {
|
||||
r.Response.WriteJson(respData)
|
||||
} else {
|
||||
token := respData.GetString("token")
|
||||
uuid := respData.GetString("uuid")
|
||||
var userInfo *model.LoginUserRes
|
||||
r.GetParamVar("userInfo").Struct(&userInfo)
|
||||
//保存用户在线状态token到数据库
|
||||
userAgent := r.Header.Get("User-Agent")
|
||||
ua := user_agent.New(userAgent)
|
||||
os := ua.OS()
|
||||
explorer, _ := ua.Browser()
|
||||
onlineData := &model.SysUserOnline{
|
||||
Uuid: uuid,
|
||||
Token: token,
|
||||
CreateTime: gtime.Now(),
|
||||
UserName: userInfo.UserName,
|
||||
Ip: library.GetClientIp(r),
|
||||
Explorer: explorer,
|
||||
Os: os,
|
||||
}
|
||||
//保存用户在线状态(异步)
|
||||
service.Online.Invoke(onlineData)
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"token": token,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
//gToken验证后返回
|
||||
func (c *auth) authAfterFunc(r *ghttp.Request, respData gtoken.Resp) {
|
||||
if r.Method == "OPTIONS" || respData.Success() {
|
||||
r.Middleware.Next()
|
||||
} else {
|
||||
c.JsonExit(r, respData.Code, "用户信息验证失败")
|
||||
}
|
||||
}
|
||||
|
||||
//后台退出登陆
|
||||
func (c *auth) loginOut(r *ghttp.Request) bool {
|
||||
//删除在线用户状态
|
||||
authHeader := r.Header.Get("Authorization")
|
||||
if authHeader != "" {
|
||||
parts := strings.SplitN(authHeader, " ", 2)
|
||||
if len(parts) == 2 && parts[0] == "Bearer" && parts[1] != "" {
|
||||
//删除在线用户状态操作
|
||||
service.Online.DeleteOnlineByToken(parts[1])
|
||||
}
|
||||
}
|
||||
authHeader = r.GetString("token")
|
||||
if authHeader != "" {
|
||||
//删除在线用户状态操作
|
||||
service.Online.DeleteOnlineByToken(authHeader)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// CheckUserOnline 检查在线用户
|
||||
func (c *auth) CheckUserOnline() {
|
||||
param := &model.SysUserOnlineSearchReq{
|
||||
PageReq: comModel.PageReq{
|
||||
PageNum: 1,
|
||||
PageSize: 50,
|
||||
},
|
||||
}
|
||||
var total int
|
||||
for {
|
||||
var (
|
||||
list []*model.SysUserOnline
|
||||
err error
|
||||
)
|
||||
total, _, list, err = service.Online.GetOnlineListPage(param, true)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
break
|
||||
}
|
||||
if list == nil {
|
||||
break
|
||||
}
|
||||
for _, v := range list {
|
||||
if b := c.UserIsOnline(v.Token); !b {
|
||||
service.Online.DeleteOnlineByToken(v.Token)
|
||||
}
|
||||
}
|
||||
if param.PageNum*param.PageSize >= total {
|
||||
break
|
||||
}
|
||||
param.PageNum++
|
||||
}
|
||||
}
|
||||
|
||||
// UserIsOnline 判断用户是否在线
|
||||
func (c *auth) UserIsOnline(token string) bool {
|
||||
uuid, userKey := c.GetUuidUserKeyByToken(token)
|
||||
cacheKey := GfToken.CacheKey + userKey
|
||||
switch GfToken.CacheMode {
|
||||
case gtoken.CacheModeCache:
|
||||
userCacheValue, _ := gcache.Get(cacheKey)
|
||||
if userCacheValue == nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
case gtoken.CacheModeRedis:
|
||||
var userCache g.Map
|
||||
userCacheJson, err := g.Redis().Do("GET", cacheKey)
|
||||
if err != nil {
|
||||
g.Log().Error("[GToken]cache get error", err)
|
||||
return false
|
||||
}
|
||||
if userCacheJson == nil {
|
||||
return false
|
||||
}
|
||||
err = gjson.DecodeTo(userCacheJson, &userCache)
|
||||
if err != nil {
|
||||
g.Log().Error("[GToken]cache get json error", err)
|
||||
return false
|
||||
}
|
||||
if uuid != userCache["uuid"] {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// GetUuidUserKeyByToken 通过token获取uuid和userKey
|
||||
func (c *auth) GetUuidUserKeyByToken(token string) (uuid, userKey string) {
|
||||
decryptToken := GfToken.DecryptToken(token)
|
||||
if !decryptToken.Success() {
|
||||
return
|
||||
}
|
||||
userKey = decryptToken.GetString("userKey")
|
||||
uuid = decryptToken.GetString("uuid")
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
CommService "gfast/app/common/service"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type authRule struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var AuthRule = new(authRule)
|
||||
|
||||
func (c *authRule) MenuList(r *ghttp.Request) {
|
||||
|
||||
var (
|
||||
req *model.SysAuthRuleReqSearch
|
||||
listEntities []*model.SysAuthRuleInfoRes
|
||||
err error
|
||||
)
|
||||
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
listEntities, err = service.Rule.GetMenuListSearch(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
list := make([]*model.SysAuthRuleTreeRes, 0, len(listEntities))
|
||||
if !req.IsEmpty() {
|
||||
for _, menu := range listEntities {
|
||||
list = append(list, &model.SysAuthRuleTreeRes{
|
||||
SysAuthRuleInfoRes: menu,
|
||||
})
|
||||
}
|
||||
} else {
|
||||
list = service.Rule.GetMenuListTree(0, listEntities)
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"list": list,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *authRule) GetMenus(r *ghttp.Request) {
|
||||
listEntities, err := service.Rule.GetIsMenuList()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"parentList": listEntities,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *authRule) AddMenuPost(r *ghttp.Request) {
|
||||
var menu *model.MenuReq
|
||||
if err := r.Parse(&menu); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
//判断菜单规则是否存在
|
||||
if !service.Rule.CheckMenuNameUnique(menu.Name, 0) {
|
||||
c.FailJsonExit(r, "菜单规则名称已经存在")
|
||||
}
|
||||
|
||||
//判断路由是否已经存在
|
||||
if !service.Rule.CheckMenuPathUnique(menu.Path, 0) {
|
||||
c.FailJsonExit(r, "路由地址已经存在")
|
||||
}
|
||||
err, _ := service.Rule.AddMenu(menu)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "添加菜单失败")
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "添加菜单成功")
|
||||
}
|
||||
|
||||
func (c *authRule) ModelOptions(r *ghttp.Request) {
|
||||
module := r.GetString("module")
|
||||
models, err := service.Rule.ModelOptions(module)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
c.SusJsonExit(r, models)
|
||||
}
|
||||
|
||||
func (c *authRule) GetMenu(r *ghttp.Request) {
|
||||
id := r.GetUint64("menuId")
|
||||
menuEntity, err := service.Rule.One(id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
listEntities, err := service.Rule.GetIsMenuList()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
list := service.Rule.ParentSonSort(listEntities, 0)
|
||||
var models []*model.SysModelInfo
|
||||
if menuEntity.ModuleType != "" {
|
||||
models, err = service.Rule.ModelOptions(menuEntity.ModuleType)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"parentList": list,
|
||||
"menu": menuEntity,
|
||||
"modelOptions": models,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *authRule) EditPost(r *ghttp.Request) {
|
||||
id := r.GetInt("menuId")
|
||||
menu := new(model.MenuReq)
|
||||
if err := r.Parse(menu); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
//判断菜单规则是否存在
|
||||
if !service.Rule.CheckMenuNameUnique(menu.Name, id) {
|
||||
c.FailJsonExit(r, "菜单规则名称已经存在")
|
||||
}
|
||||
|
||||
//判断路由是否已经存在
|
||||
if !service.Rule.CheckMenuPathUnique(menu.Path, id) {
|
||||
c.FailJsonExit(r, "路由地址已经存在")
|
||||
}
|
||||
|
||||
err, _ := service.Rule.EditMenu(menu, id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "修改菜单失败")
|
||||
}
|
||||
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "修改菜单成功")
|
||||
}
|
||||
|
||||
func (c *authRule) DeleteMenu(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
c.FailJsonExit(r, "删除失败,参数错误")
|
||||
}
|
||||
err := service.Rule.DeleteMenuByIds(ids)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"gfast/app/common/api"
|
||||
"gfast/app/system/dao"
|
||||
"gfast/app/system/service"
|
||||
)
|
||||
|
||||
type systemBase struct {
|
||||
api.CommonBase
|
||||
}
|
||||
|
||||
// GetCurrentUser 获取当前登陆用户信息
|
||||
func (c *systemBase) GetCurrentUser(ctx context.Context) *dao.CtxUser {
|
||||
context := service.Context.Get(ctx)
|
||||
return context.User
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* @desc:系统配置
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/5 17:46
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
"gfast/app/common/model"
|
||||
"gfast/app/common/service"
|
||||
commonService "gfast/app/common/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysConfig struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysConfig = new(sysConfig)
|
||||
|
||||
// List 系统参数配置列表
|
||||
func (c *sysConfig) List(r *ghttp.Request) {
|
||||
var req *model.SysConfigSearchReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
req.Ctx = r.GetCtx()
|
||||
total, page, list, err := service.SysConfig.SelectListByPage(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
// Add 添加
|
||||
func (c *sysConfig) Add(r *ghttp.Request) {
|
||||
var req *model.SysConfigAddReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
err := service.SysConfig.CheckConfigKeyUniqueAll(req.ConfigKey)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
req.CreateBy = c.GetCurrentUser(r.GetCtx()).GetUserId() //获取登陆用户id
|
||||
err = service.SysConfig.AddSave(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
commonService.Cache.New().Remove(global.SysConfigTag + req.ConfigKey)
|
||||
c.SusJsonExit(r, "添加参数成功")
|
||||
}
|
||||
|
||||
// Get 获取参数信息
|
||||
func (c *sysConfig) Get(r *ghttp.Request) {
|
||||
id := r.GetInt("id")
|
||||
params, err := service.SysConfig.GetById(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, params)
|
||||
}
|
||||
|
||||
// Edit 修改系统参数
|
||||
func (c *sysConfig) Edit(r *ghttp.Request) {
|
||||
var req *model.SysConfigEditReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
err := service.SysConfig.CheckConfigKeyUnique(req.ConfigKey, req.ConfigId)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
req.UpdateBy = c.GetCurrentUser(r.Context()).GetUserId()
|
||||
err = service.SysConfig.EditSave(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
commonService.Cache.New().Remove(global.SysConfigTag + req.ConfigKey)
|
||||
c.SusJsonExit(r, "修改参数成功")
|
||||
}
|
||||
|
||||
// Delete 删除参数
|
||||
func (c *sysConfig) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
err := service.SysConfig.DeleteByIds(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
commonService.Cache.New().RemoveByTag(global.SysConfigTag)
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
CommService "gfast/app/common/service"
|
||||
"gfast/app/system/dao"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type dept struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var Dept = new(dept)
|
||||
|
||||
// List 部门列表
|
||||
func (c *dept) List(r *ghttp.Request) {
|
||||
var searchParams *dao.SysDeptSearchParams
|
||||
if err := r.Parse(&searchParams); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
if list, err := service.Dept.GetList(searchParams); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else {
|
||||
if list != nil {
|
||||
c.SusJsonExit(r, list)
|
||||
} else {
|
||||
c.SusJsonExit(r, []*model.SysDept{})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (c *dept) Add(r *ghttp.Request) {
|
||||
var addParams *dao.SysDeptAddParams
|
||||
if err := r.Parse(&addParams); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
addParams.CreatedBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
if err := service.Dept.AddDept(addParams); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "添加成功")
|
||||
}
|
||||
|
||||
func (c *dept) Get(r *ghttp.Request) {
|
||||
id := r.GetUint64("id")
|
||||
if id == 0 {
|
||||
c.FailJsonExit(r, "参数错误")
|
||||
}
|
||||
if dept, err := service.Dept.GetDeptById(id); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else {
|
||||
c.SusJsonExit(r, dept)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *dept) Edit(r *ghttp.Request) {
|
||||
var editParams *dao.EditParams
|
||||
if err := r.Parse(&editParams); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
editParams.UpdatedBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
if err := service.Dept.EditDept(editParams); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "编辑成功")
|
||||
}
|
||||
|
||||
func (c *dept) Delete(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
if id == 0 {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
err := service.Dept.DelDept(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
|
||||
func (c *dept) RoleDeptTreeSelect(r *ghttp.Request) {
|
||||
id := r.GetInt64("roleId")
|
||||
if id == 0 {
|
||||
c.FailJsonExit(r, "参数错误")
|
||||
}
|
||||
list, err := service.Dept.GetList(&dao.SysDeptSearchParams{
|
||||
Status: "1",
|
||||
})
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
//获取关联的角色数据权限
|
||||
checkedKeys, err := service.Dept.GetRoleDepts(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
dList := service.Dept.GetDeptListTree(0, list)
|
||||
res := g.Map{
|
||||
"depts": dList,
|
||||
"checkedKeys": checkedKeys,
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
|
||||
func (c *dept) TreeSelect(r *ghttp.Request) {
|
||||
//获取正常状态部门数据
|
||||
list, err := service.Dept.GetList(&dao.SysDeptSearchParams{Status: "1"})
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
dList := service.Dept.GetDeptListTree(0, list)
|
||||
res := g.Map{
|
||||
"depts": dList,
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* @desc:字典数据
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/4/3 11:52
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
commonService "gfast/app/common/service"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type dictData struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var DictData = new(dictData)
|
||||
|
||||
// List 字典列表
|
||||
func (c *dictData) List(r *ghttp.Request) {
|
||||
var req *model.SelectDictPageReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
req.Ctx = r.GetCtx()
|
||||
total, page, list, err := service.SysDictData.DictDataList(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
// Add 添加字典数据
|
||||
func (c *dictData) Add(r *ghttp.Request) {
|
||||
var req *model.DictDataAddReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
req.CreateBy = c.GetCurrentUser(r.GetCtx()).GetUserId() //获取登陆用户id
|
||||
_, err := service.SysDictData.AddSave(req)
|
||||
if err != nil {
|
||||
g.Log().Error(err.Error())
|
||||
c.FailJsonExit(r, "字典数据添加失败")
|
||||
}
|
||||
//清除tag缓存
|
||||
commonService.Cache.New().RemoveByTag(global.SysDictTag)
|
||||
c.SusJsonExit(r, "添加字典数据成功")
|
||||
}
|
||||
|
||||
// Get 获取字典数据信息
|
||||
func (c *dictData) Get(r *ghttp.Request) {
|
||||
dictCode := r.GetInt("dictCode")
|
||||
data, err := service.SysDictData.GetDictDataById(dictCode)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, data)
|
||||
}
|
||||
|
||||
// Edit 修改字典数据
|
||||
func (c *dictData) Edit(r *ghttp.Request) {
|
||||
var req *model.EditDictDataReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
req.UpdateBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
err := service.SysDictData.EditSaveData(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
//清除tag缓存
|
||||
commonService.Cache.New().RemoveByTag(global.SysDictTag)
|
||||
c.SusJsonExit(r, "修改字典数据成功")
|
||||
}
|
||||
|
||||
// Delete 删除字典数据
|
||||
func (c *dictData) Delete(r *ghttp.Request) {
|
||||
dictCodes := r.GetInts("ids")
|
||||
if len(dictCodes) == 0 {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
err := service.SysDictData.DeleteDictDataByIds(dictCodes)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
//清除tag缓存
|
||||
commonService.Cache.New().RemoveByTag(global.SysDictTag)
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
|
||||
// GetDictData 获取字典数据
|
||||
func (c *dictData) GetDictData(r *ghttp.Request) {
|
||||
var req *model.GetDictReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
req.Ctx = r.GetCtx()
|
||||
dict, err := service.SysDictData.GetDictWithDataByType(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, dict)
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
comService "gfast/app/common/service"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type dictType struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var DictType = new(dictType)
|
||||
|
||||
func (c *dictType) List(r *ghttp.Request) {
|
||||
var req *model.ListSysDictTypeReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
req.Ctx = r.GetCtx()
|
||||
total, page, list, err := service.SysDictType.SelectList(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"total": total,
|
||||
"page": page,
|
||||
"list": list,
|
||||
})
|
||||
}
|
||||
|
||||
func (c *dictType) Get(r *ghttp.Request) {
|
||||
id := r.GetInt("dictId")
|
||||
entity, err := service.SysDictType.GetDictById(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "字典数据获取失败")
|
||||
}
|
||||
c.SusJsonExit(r, entity)
|
||||
}
|
||||
|
||||
func (c *dictType) Add(r *ghttp.Request) {
|
||||
var req *model.SysDictTypeAddReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
if service.SysDictType.ExistsDictType(req.DictType) {
|
||||
c.FailJsonExit(r, "字典类型已经存在")
|
||||
}
|
||||
req.CreateBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
err := service.SysDictType.Add(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
//清除缓存
|
||||
comService.Cache.New().RemoveByTag(global.SysDictTag)
|
||||
c.SusJsonExit(r)
|
||||
}
|
||||
|
||||
func (c *dictType) Edit(r *ghttp.Request) {
|
||||
var req *model.SysDictTypeEditReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
if service.SysDictType.ExistsDictType(req.DictType, req.DictId) {
|
||||
c.FailJsonExit(r, "字典类型已经存在")
|
||||
}
|
||||
ctx := r.GetCtx()
|
||||
req.UpdateBy = c.GetCurrentUser(ctx).Id
|
||||
err := service.SysDictType.Edit(ctx, req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
//清除缓存
|
||||
comService.Cache.New().RemoveByTag(global.SysDictTag)
|
||||
c.SusJsonExit(r)
|
||||
}
|
||||
|
||||
func (c *dictType) Delete(r *ghttp.Request) {
|
||||
dictIds := r.GetInts("dictIds")
|
||||
if len(dictIds) == 0 {
|
||||
c.FailJsonExit(r, "参数错误")
|
||||
}
|
||||
if err := service.SysDictType.Delete(r.GetCtx(), dictIds); err != nil {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
//清除缓存
|
||||
comService.Cache.New().RemoveByTag(global.SysDictTag)
|
||||
c.SusJsonExit(r)
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* @desc:定时任务
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/14 9:02
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/system/dao"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysJob struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysJob = new(sysJob)
|
||||
|
||||
// List 任务列表
|
||||
func (c *sysJob) List(r *ghttp.Request) {
|
||||
var req *dao.SysJobSearchReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
total, page, list, err := service.SysJob.JobList(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
func (c *sysJob) Add(r *ghttp.Request) {
|
||||
var req *dao.SysJobAddReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
req.CreateBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
err := service.SysJob.AddJob(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "任务添加成功")
|
||||
}
|
||||
|
||||
func (c *sysJob) Get(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
job, err := service.SysJob.GetJobInfoById(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, job)
|
||||
}
|
||||
|
||||
func (c *sysJob) Edit(r *ghttp.Request) {
|
||||
var req *dao.SysJobEditReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
req.UpdateBy = c.GetCurrentUser(r.GetCtx()).GetUserId() //获取登陆用户id
|
||||
err := service.SysJob.EditJob(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "修改任务成功")
|
||||
}
|
||||
|
||||
// Start 启动任务
|
||||
func (c *sysJob) Start(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
job, err := service.SysJob.GetJobInfoById(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
err = service.SysJob.JobStart(job)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "定时任务管理启动"+err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "定时任务管理启动成功")
|
||||
}
|
||||
|
||||
// Stop 停止任务
|
||||
func (c *sysJob) Stop(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
job, err := service.SysJob.GetJobInfoById(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
err = service.SysJob.JobStop(job)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "定时任务管理停止"+err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "定时任务管理停止成功")
|
||||
}
|
||||
|
||||
// Delete 删除任务
|
||||
func (c *sysJob) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
err := service.SysJob.DeleteJobByIds(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* @desc:登录日志
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/19 10:21
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysLoginLog struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysLoginLog = new(sysLoginLog)
|
||||
|
||||
// List 获取日志列表
|
||||
func (c sysLoginLog) List(r *ghttp.Request) {
|
||||
var req *model.SysLoginLogSearchReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
total, page, list, err := service.SysLoginLog.LoginLogListByPage(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
// Delete 删除日志
|
||||
func (c *sysLoginLog) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
err := service.SysLoginLog.DeleteLoginLogByIds(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
|
||||
// Clear 清空日志
|
||||
func (c *sysLoginLog) Clear(r *ghttp.Request) {
|
||||
err := service.SysLoginLog.ClearLoginLog()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "清除成功")
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* @desc:系统服务信息
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/19 9:03
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gfast/library"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/os/gtime"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/host"
|
||||
"github.com/shirou/gopsutil/load"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
"os"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type sysMonitor struct {
|
||||
systemBase
|
||||
startTime *gtime.Time
|
||||
}
|
||||
|
||||
var SysMonitor = &sysMonitor{
|
||||
startTime: gtime.Now(),
|
||||
}
|
||||
|
||||
// Info 服务监控信息
|
||||
func (c *sysMonitor) Info(r *ghttp.Request) {
|
||||
cpuNum := runtime.NumCPU() //核心数
|
||||
var cpuUsed float64 = 0 //用户使用率
|
||||
var cpuAvg5 float64 = 0 //CPU负载5
|
||||
var cpuAvg15 float64 = 0 //当前空闲率
|
||||
|
||||
cpuInfo, err := cpu.Percent(time.Duration(time.Second), false)
|
||||
if err == nil {
|
||||
cpuUsed, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", cpuInfo[0]), 64)
|
||||
}
|
||||
|
||||
loadInfo, err := load.Avg()
|
||||
if err == nil {
|
||||
cpuAvg5, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", loadInfo.Load5), 64)
|
||||
cpuAvg15, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", loadInfo.Load5), 64)
|
||||
}
|
||||
|
||||
var memTotal uint64 = 0 //总内存
|
||||
var memUsed uint64 = 0 //总内存 := 0 //已用内存
|
||||
var memFree uint64 = 0 //剩余内存
|
||||
var memUsage float64 = 0 //使用率
|
||||
|
||||
v, err := mem.VirtualMemory()
|
||||
if err == nil {
|
||||
memTotal = v.Total
|
||||
memUsed = v.Used
|
||||
memFree = memTotal - memUsed
|
||||
memUsage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.UsedPercent), 64)
|
||||
}
|
||||
|
||||
var goTotal uint64 = 0 //go分配的总内存数
|
||||
var goUsed uint64 = 0 //go使用的内存数
|
||||
var goFree uint64 = 0 //go剩余的内存数
|
||||
var goUsage float64 = 0 //使用率
|
||||
|
||||
var gomem runtime.MemStats
|
||||
runtime.ReadMemStats(&gomem)
|
||||
goUsed = gomem.Sys
|
||||
goUsage = gconv.Float64(fmt.Sprintf("%.2f", gconv.Float64(goUsed)/gconv.Float64(memTotal)*100))
|
||||
sysComputerIp := "" //服务器IP
|
||||
|
||||
ip, err := library.GetLocalIP()
|
||||
if err == nil {
|
||||
sysComputerIp = ip
|
||||
}
|
||||
|
||||
sysComputerName := "" //服务器名称
|
||||
sysOsName := "" //操作系统
|
||||
sysOsArch := "" //系统架构
|
||||
|
||||
sysInfo, err := host.Info()
|
||||
|
||||
if err == nil {
|
||||
sysComputerName = sysInfo.Hostname
|
||||
sysOsName = sysInfo.OS
|
||||
sysOsArch = sysInfo.KernelArch
|
||||
}
|
||||
|
||||
goName := "GoLang" //语言环境
|
||||
goVersion := runtime.Version() //版本
|
||||
gtime.Date()
|
||||
goStartTime := c.startTime //启动时间
|
||||
|
||||
goRunTime := gtime.Now().Timestamp() - c.startTime.Timestamp() //运行时长(秒)
|
||||
goHome := runtime.GOROOT() //安装路径
|
||||
goUserDir := "" //项目路径
|
||||
|
||||
curDir, err := os.Getwd()
|
||||
|
||||
if err == nil {
|
||||
goUserDir = curDir
|
||||
}
|
||||
|
||||
//服务器磁盘信息
|
||||
diskList := make([]disk.UsageStat, 0)
|
||||
diskInfo, err := disk.Partitions(true) //所有分区
|
||||
if err == nil {
|
||||
for _, p := range diskInfo {
|
||||
diskDetail, err := disk.Usage(p.Mountpoint)
|
||||
if err == nil {
|
||||
diskDetail.UsedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", diskDetail.UsedPercent), 64)
|
||||
diskList = append(diskList, *diskDetail)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res := g.Map{
|
||||
"cpuNum": cpuNum,
|
||||
"cpuUsed": cpuUsed,
|
||||
"cpuAvg5": cpuAvg5,
|
||||
"cpuAvg15": cpuAvg15,
|
||||
"memTotal": memTotal,
|
||||
"goTotal": goTotal,
|
||||
"memUsed": memUsed,
|
||||
"goUsed": goUsed,
|
||||
"memFree": memFree,
|
||||
"goFree": goFree,
|
||||
"memUsage": memUsage,
|
||||
"goUsage": goUsage,
|
||||
"sysComputerName": sysComputerName,
|
||||
"sysOsName": sysOsName,
|
||||
"sysComputerIp": sysComputerIp,
|
||||
"sysOsArch": sysOsArch,
|
||||
"goName": goName,
|
||||
"goVersion": goVersion,
|
||||
"goStartTime": goStartTime,
|
||||
"goRunTime": goRunTime,
|
||||
"goHome": goHome,
|
||||
"goUserDir": goUserDir,
|
||||
"diskList": diskList,
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* @desc:操作日志管理
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/19 14:50
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/system/dao"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"gfast/library"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/text/gstr"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysOperLog struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysOperLog = new(sysOperLog)
|
||||
|
||||
// List 操作日志列表
|
||||
func (c *sysOperLog) List(r *ghttp.Request) {
|
||||
var req *dao.SysOperLogSearchReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
total, page, list, err := service.SysOperLog.OperationLogListByPage(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
// Detail 日志详细
|
||||
func (c *sysOperLog) Detail(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
log, err := service.SysOperLog.GetOperationLogById(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"info": log,
|
||||
})
|
||||
}
|
||||
|
||||
// Delete 删除
|
||||
func (c *sysOperLog) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
err := service.SysOperLog.DeleteOperationLogByIds(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
|
||||
// Clear 清空
|
||||
func (c *sysOperLog) Clear(r *ghttp.Request) {
|
||||
err := service.SysOperLog.ClearOperationLog()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "清除成功")
|
||||
}
|
||||
|
||||
// OperationLog 操作日志记录
|
||||
func (c *sysOperLog) OperationLog(r *ghttp.Request) {
|
||||
user := c.GetCurrentUser(r.GetCtx())
|
||||
if user == nil {
|
||||
return
|
||||
}
|
||||
url := r.Request.URL //请求地址
|
||||
//获取菜单
|
||||
//获取地址对应的菜单id
|
||||
menuList, err := service.Rule.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return
|
||||
}
|
||||
var menu *model.SysAuthRuleInfoRes
|
||||
path := gstr.TrimLeft(url.Path, "/")
|
||||
for _, m := range menuList {
|
||||
if gstr.Equal(m.Name, path) {
|
||||
menu = m
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
data := &dao.SysOperLogAdd{
|
||||
User: user,
|
||||
Menu: menu,
|
||||
Url: url,
|
||||
Params: r.GetMap(),
|
||||
Method: r.Method,
|
||||
ClientIp: library.GetClientIp(r),
|
||||
OperatorType: 1,
|
||||
}
|
||||
service.SysOperLog.Invoke(data)
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* @desc:岗位管理
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/12 10:32
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/system/dao"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysPost struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysPost = new(sysPost)
|
||||
|
||||
func (c *sysPost) List(r *ghttp.Request) {
|
||||
var req *dao.SysPostSearchParams
|
||||
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
total, page, list, err := service.SysPost.List(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"total": total,
|
||||
"list": list,
|
||||
"page": page,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
func (c *sysPost) Add(r *ghttp.Request) {
|
||||
var addParams *dao.SysPostAddParams
|
||||
if err := r.Parse(&addParams); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
addParams.CreatedBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
if err := service.SysPost.Add(addParams); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "添加成功")
|
||||
}
|
||||
|
||||
func (c *sysPost) Get(r *ghttp.Request) {
|
||||
id := r.GetInt64("id")
|
||||
if id == 0 {
|
||||
c.FailJsonExit(r, "id必须")
|
||||
}
|
||||
if post, err := service.SysPost.GetOneById(id); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else {
|
||||
c.SusJsonExit(r, post)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *sysPost) Edit(r *ghttp.Request) {
|
||||
var editParams *dao.SysPostEditParams
|
||||
if err := r.Parse(&editParams); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
editParams.UpdatedBy = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
if err := service.SysPost.Edit(editParams); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "修改成功")
|
||||
}
|
||||
|
||||
func (c *sysPost) Delete(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
err := service.SysPost.Delete(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
c.SusJsonExit(r, "删除信息成功")
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
CommService "gfast/app/common/service"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysRole struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysRole = new(sysRole)
|
||||
|
||||
// RoleList 角色列表
|
||||
func (c *sysRole) RoleList(r *ghttp.Request) {
|
||||
var req *model.SelectPageReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
total, page, list, err := service.SysRole.GetRoleListSearch(req)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "获取数据失败")
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
})
|
||||
}
|
||||
|
||||
// GetRoleMenu GetRole 新增角色
|
||||
func (c *sysRole) GetRoleMenu(r *ghttp.Request) {
|
||||
mListEntities, err := service.Rule.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "获取数据失败")
|
||||
}
|
||||
mList := service.Rule.GetMenuListTree(0, mListEntities)
|
||||
res := g.Map{
|
||||
"menuList": mList,
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
|
||||
// AddRole 新增角色提交
|
||||
func (c *sysRole) AddRole(r *ghttp.Request) {
|
||||
res := r.GetFormMap()
|
||||
if err := service.SysRole.AddRolePost(res); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "添加角色成功")
|
||||
}
|
||||
|
||||
// 获取修改的角色
|
||||
func (c *sysRole) GetRole(r *ghttp.Request) {
|
||||
id := r.GetRequestInt("roleId")
|
||||
//获取角色信息
|
||||
role, err := service.SysRole.One(id)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "获取角色数据失败")
|
||||
}
|
||||
//获取菜单信息
|
||||
mListEntities, err := service.Rule.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "获取菜单数据失败")
|
||||
}
|
||||
mList := service.Rule.GetMenuListTree(0, mListEntities)
|
||||
//获取角色关联的菜单规则
|
||||
gpSlice, err := service.SysRole.GetFilteredNamedPolicy(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"menuList": mList,
|
||||
"role": role,
|
||||
"checkedRules": gpSlice,
|
||||
})
|
||||
}
|
||||
|
||||
// EditRole 编辑角色提交
|
||||
func (c *sysRole) EditRole(r *ghttp.Request) {
|
||||
id := r.GetRequestInt("roleId")
|
||||
res := r.GetFormMap()
|
||||
if err := service.SysRole.EditRolePost(res, id); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "修改角色成功")
|
||||
}
|
||||
|
||||
// StatusSetRole 设置角色状态
|
||||
func (c *sysRole) StatusSetRole(r *ghttp.Request) {
|
||||
var req *model.StatusSetReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
err := service.SysRole.StatusSetRole(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "状态设置成功")
|
||||
}
|
||||
|
||||
// RoleDataScope 角色数据权限分配
|
||||
func (c *sysRole) RoleDataScope(r *ghttp.Request) {
|
||||
var req *model.DataScopeReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).Current().Error())
|
||||
}
|
||||
err := service.SysRole.RoleDataScope(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, req)
|
||||
}
|
||||
|
||||
// DeleteRole 删除角色
|
||||
func (c *sysRole) DeleteRole(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
c.FailJsonExit(r, "删除失败,参数错误")
|
||||
}
|
||||
err := service.SysRole.DeleteByIds(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
CommService.Cache.New().RemoveByTag(global.SysAuthTag)
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gconv"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type user struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var User = new(user)
|
||||
|
||||
// UserList 获取用户列表
|
||||
func (c *user) UserList(r *ghttp.Request) {
|
||||
var req *model.SysUserSearchReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
|
||||
if err := service.SysUser.WriteDeptIdsOfSearchReq(req); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
total, page, userList, err := service.SysUser.GetUserList(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "获取用户列表数据失败")
|
||||
}
|
||||
|
||||
users, err := service.SysUser.GetUsersRoleDept(userList)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"total": total,
|
||||
"currentPage": page,
|
||||
"userList": users,
|
||||
})
|
||||
}
|
||||
|
||||
// Get 获取添加用户信息
|
||||
func (c *user) Get(r *ghttp.Request) {
|
||||
roleListEntities, err := service.SysRole.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "获取角色数据失败")
|
||||
}
|
||||
posts, err := service.SysUser.GetUsedPost()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"roleList": roleListEntities,
|
||||
"posts": posts,
|
||||
})
|
||||
}
|
||||
|
||||
// AddUser 添加用户提交
|
||||
func (c *user) AddUser(r *ghttp.Request) {
|
||||
var req *model.AddUserReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
err := service.SysUser.AddUser(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "添加管理员成功")
|
||||
}
|
||||
|
||||
// GetEditUser 获取编辑的用户
|
||||
func (c *user) GetEditUser(r *ghttp.Request) {
|
||||
id := r.GetUint64("id")
|
||||
res, err := service.SysUser.GetEditUser(id)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
|
||||
// EditUser 编辑用户提交
|
||||
func (c *user) EditUser(r *ghttp.Request) {
|
||||
var req *model.EditUserReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
err := service.SysUser.EditUser(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "修改管理员成功")
|
||||
}
|
||||
|
||||
// GetInfo 获取登陆用户信息
|
||||
func (c *user) GetInfo(r *ghttp.Request) {
|
||||
userInfo := c.GetCurrentUser(r.Context())
|
||||
rolesList := make([]string, 0, 10)
|
||||
var permissions []string
|
||||
userId := userInfo.Id
|
||||
allRoles, err := service.SysRole.GetRoleList()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
roles, err := service.SysUser.GetAdminRole(userId, allRoles)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
name := make([]string, len(roles))
|
||||
roleIds := make([]uint, len(roles))
|
||||
for k, v := range roles {
|
||||
name[k] = v.Name
|
||||
roleIds[k] = v.Id
|
||||
}
|
||||
isSuperAdmin := false
|
||||
service.SysUser.NotCheckAuthAdminIds.Iterator(func(v interface{}) bool {
|
||||
if gconv.Uint64(v) == userId {
|
||||
isSuperAdmin = true
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
if isSuperAdmin {
|
||||
permissions = []string{"*/*/*"}
|
||||
} else {
|
||||
permissions, err = service.SysUser.GetPermissions(roleIds)
|
||||
}
|
||||
rolesList = name
|
||||
c.SusJsonExit(r, g.Map{
|
||||
"user": userInfo,
|
||||
"roles": rolesList,
|
||||
"permissions": permissions,
|
||||
})
|
||||
}
|
||||
|
||||
// GetRouters 获取用户菜单
|
||||
func (c *user) GetRouters(r *ghttp.Request) {
|
||||
//获取用户信息
|
||||
userInfo := c.GetCurrentUser(r.Context())
|
||||
//是否超管
|
||||
isSuperAdmin := false
|
||||
userId := userInfo.Id
|
||||
//获取无需验证权限的用户id
|
||||
service.SysUser.NotCheckAuthAdminIds.Iterator(func(v interface{}) bool {
|
||||
if gconv.Uint64(v) == userId {
|
||||
isSuperAdmin = true
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
//获取用户角色信息
|
||||
allRoles, err := service.SysRole.GetRoleList()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
roles, e := service.SysUser.GetAdminRole(userId, allRoles)
|
||||
if e != nil {
|
||||
c.FailJsonExit(r, e.Error())
|
||||
}
|
||||
name := make([]string, len(roles))
|
||||
roleIds := make([]uint, len(roles))
|
||||
for k, v := range roles {
|
||||
name[k] = v.Name
|
||||
roleIds[k] = v.Id
|
||||
}
|
||||
var menuList []service.UserMenus
|
||||
//获取菜单信息
|
||||
if isSuperAdmin {
|
||||
//超管获取所有菜单
|
||||
menuList, err = service.SysUser.GetAllMenus()
|
||||
} else {
|
||||
menuList, err = service.SysUser.GetAdminMenusByRoleIds(roleIds)
|
||||
}
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, e.Error())
|
||||
}
|
||||
if menuList == nil {
|
||||
menuList = make([]service.UserMenus, 0)
|
||||
}
|
||||
adminMenus := make([]service.UserMenus, 0, len(menuList))
|
||||
//过滤非后台模块的菜单
|
||||
for _, v := range menuList {
|
||||
if v.ModuleType == "sys_admin" {
|
||||
adminMenus = append(adminMenus, v)
|
||||
}
|
||||
}
|
||||
c.SusJsonExit(r, adminMenus)
|
||||
}
|
||||
|
||||
func (c *user) ResetUserPwd(r *ghttp.Request) {
|
||||
var req *model.SysUserResetPwdReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
if err := service.SysUser.ResetUserPwd(req); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else {
|
||||
c.SusJsonExit(r, "用户密码重置成功")
|
||||
}
|
||||
}
|
||||
|
||||
func (c *user) ChangeUserStatus(r *ghttp.Request) {
|
||||
var req *model.SysUserStatusReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
if err := service.SysUser.ChangeUserStatus(req); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else {
|
||||
c.SusJsonExit(r, "用户状态设置成功")
|
||||
}
|
||||
}
|
||||
|
||||
func (c *user) DeleteUser(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) > 0 {
|
||||
err := service.SysUser.DeleteUser(r.GetCtx(), ids)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
c.FailJsonExit(r, "删除失败")
|
||||
}
|
||||
} else {
|
||||
c.FailJsonExit(r, "删除失败,参数错误")
|
||||
}
|
||||
|
||||
c.SusJsonExit(r, "删除成功")
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* @desc:在线用户管理
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/13 15:10
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysUserOnline struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysUserOnline = new(sysUserOnline)
|
||||
|
||||
// List 在线用户列表
|
||||
func (c *sysUserOnline) List(r *ghttp.Request) {
|
||||
var req *model.SysUserOnlineSearchReq
|
||||
//获取参数
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
total, page, list, err := service.Online.GetOnlineListPage(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
result := g.Map{
|
||||
"currentPage": page,
|
||||
"total": total,
|
||||
"list": list,
|
||||
}
|
||||
c.SusJsonExit(r, result)
|
||||
}
|
||||
|
||||
// ForceLogout 强退用户
|
||||
func (c *sysUserOnline) ForceLogout(r *ghttp.Request) {
|
||||
ids := r.GetInts("ids")
|
||||
if len(ids) == 0 {
|
||||
c.FailJsonExit(r, "参数错误")
|
||||
}
|
||||
tokens, err := service.Online.ForceLogout(ids)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
for _, token := range tokens {
|
||||
GfToken.RemoveToken(token)
|
||||
}
|
||||
c.SusJsonExit(r, "用户已退出")
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* @desc:站点设置
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/6 15:41
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/global"
|
||||
commonService "gfast/app/common/service"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type sysWebSet struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var SysWebSet = new(sysWebSet)
|
||||
|
||||
func (c *sysWebSet) Update(r *ghttp.Request) {
|
||||
var req *model.SysWebSetUpdateReq
|
||||
err := r.Parse(&req)
|
||||
if err != nil {
|
||||
c.FailJson(true, r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
err = service.SysWebSet.UpdateSave(req)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
commonService.Cache.New().Remove(global.SysWebSet)
|
||||
c.SusJsonExit(r, "更新成功!")
|
||||
}
|
||||
|
||||
func (c *sysWebSet) Get(r *ghttp.Request) {
|
||||
data, err := service.SysWebSet.Get()
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, data)
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* @desc:后台上传
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/7 15:10
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/adapter"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
)
|
||||
|
||||
type upload struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var Upload = new(upload)
|
||||
|
||||
// UpImg 单图上传
|
||||
func (c *upload) UpImg(r *ghttp.Request) {
|
||||
upFile := r.GetUploadFile("file")
|
||||
info, err := adapter.Upload.UpImg(upFile)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "上传失败,"+err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"fileInfo": info,
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* @desc:个人中心
|
||||
* @company:云南省奇讯科技有限公司
|
||||
* @Author: yixiaohu
|
||||
* @Date: 2021/7/12 22:14
|
||||
*/
|
||||
|
||||
package api
|
||||
|
||||
import (
|
||||
"gfast/app/common/adapter"
|
||||
"gfast/app/system/model"
|
||||
"gfast/app/system/service"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
"github.com/gogf/gf/net/ghttp"
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
type userProfile struct {
|
||||
systemBase
|
||||
}
|
||||
|
||||
var UserProfile = new(userProfile)
|
||||
|
||||
// Profile 获取个人信息
|
||||
func (c *userProfile) Profile(r *ghttp.Request) {
|
||||
//获取用户信息
|
||||
user, err := service.SysUser.GetUserInfoById(c.GetCurrentUser(r.GetCtx()).GetUserId())
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
userInfo, err := service.SysUser.GetUserRoleDeptPost(user)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, userInfo)
|
||||
}
|
||||
|
||||
// Avatar 修改头像
|
||||
func (c *userProfile) Avatar(r *ghttp.Request) {
|
||||
upFile := r.GetUploadFile("avatarfile")
|
||||
info, err := adapter.Upload.UpImg(upFile)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, "上传失败,"+err.Error())
|
||||
}
|
||||
res := g.Map{
|
||||
"fileInfo": info,
|
||||
}
|
||||
userId := c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
err = service.SysUser.SetAvatar(userId, info.FileUrl)
|
||||
if err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, res)
|
||||
}
|
||||
|
||||
// Edit 修改个人信息
|
||||
func (c *userProfile) Edit(r *ghttp.Request) {
|
||||
var req *model.ProfileUpReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
req.UserId = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
if err := service.SysUser.ProfileEdit(req); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
}
|
||||
c.SusJsonExit(r, "修改成功")
|
||||
}
|
||||
|
||||
// UpdatePwd 修改密码
|
||||
func (c *userProfile) UpdatePwd(r *ghttp.Request) {
|
||||
var req *model.ProfileUpdatePwdReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
c.FailJsonExit(r, err.(gvalid.Error).FirstString())
|
||||
}
|
||||
req.UserId = c.GetCurrentUser(r.GetCtx()).GetUserId()
|
||||
if err := service.SysUser.ProfileUpdatePwd(req); err != nil {
|
||||
c.FailJsonExit(r, err.Error())
|
||||
} else {
|
||||
c.SusJsonExit(r, "修改成功")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user