fix 1、修复虚拟树形结构ID错误问题
2、修复组件name首字母大写造成的页面缓存失败问题 3、修复excel导出文件未关闭资源的问题 4、更新数据权限同时支持按创建人划分(created_by)或按部门(dept_id划分) 5、更新token自动刷新功能
This commit is contained in:
parent
6e2f38c945
commit
379abd65e0
@ -59,3 +59,14 @@ type PersonalResetPwdReq struct {
|
|||||||
|
|
||||||
type PersonalResetPwdRes struct {
|
type PersonalResetPwdRes struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RefreshTokenReq struct {
|
||||||
|
g.Meta `path:"/personal/refreshToken" tags:"系统后台/用户管理" method:"get" summary:"刷新token"`
|
||||||
|
commonApi.Author
|
||||||
|
}
|
||||||
|
|
||||||
|
type RefreshTokenRes struct {
|
||||||
|
commonApi.EmptyRes
|
||||||
|
Token string `json:"token"`
|
||||||
|
UserInfo *model.LoginUserRes `json:"userInfo"`
|
||||||
|
}
|
||||||
|
@ -12,4 +12,9 @@ const (
|
|||||||
EffectiveTypeStartEnd = 1
|
EffectiveTypeStartEnd = 1
|
||||||
// EffectiveTypeDate 按时间段
|
// EffectiveTypeDate 按时间段
|
||||||
EffectiveTypeDate = 2
|
EffectiveTypeDate = 2
|
||||||
|
|
||||||
|
// WebsocketTypeTokenUpdated websocket通知类型-更新token
|
||||||
|
WebsocketTypeTokenUpdated = "tokenUpdated"
|
||||||
|
// WebsocketTypeNotice websocket通知类型-系统通知
|
||||||
|
WebsocketTypeNotice = "notice"
|
||||||
)
|
)
|
||||||
|
@ -9,11 +9,13 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"github.com/gogf/gf/v2/crypto/gmd5"
|
"github.com/gogf/gf/v2/crypto/gmd5"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gtime"
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
"github.com/gogf/gf/v2/util/gconv"
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
"github.com/tiger1103/gfast/v3/api/v1/system"
|
"github.com/tiger1103/gfast/v3/api/v1/system"
|
||||||
|
"github.com/tiger1103/gfast/v3/internal/app/system/model"
|
||||||
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
||||||
"github.com/tiger1103/gfast/v3/library/libUtils"
|
"github.com/tiger1103/gfast/v3/library/libUtils"
|
||||||
)
|
)
|
||||||
@ -36,12 +38,7 @@ func (c *personalController) EditPersonal(ctx context.Context, req *system.Perso
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
key := gconv.String(res.UserInfo.Id) + "-" + gmd5.MustEncryptString(res.UserInfo.UserName) + gmd5.MustEncryptString(res.UserInfo.UserPassword)
|
res.Token, err = c.genToken(ctx, res.UserInfo, ip, userAgent)
|
||||||
if g.Cfg().MustGet(ctx, "gfToken.multiLogin").Bool() {
|
|
||||||
key = gconv.String(res.UserInfo.Id) + "-" + gmd5.MustEncryptString(res.UserInfo.UserName) + gmd5.MustEncryptString(res.UserInfo.UserPassword+ip+userAgent+gtime.Now().String())
|
|
||||||
}
|
|
||||||
res.UserInfo.UserPassword = ""
|
|
||||||
res.Token, err = service.GfToken().GenerateToken(ctx, key, res.UserInfo)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,3 +46,31 @@ func (c *personalController) ResetPwdPersonal(ctx context.Context, req *system.P
|
|||||||
res, err = service.Personal().ResetPwdPersonal(ctx, req)
|
res, err = service.Personal().ResetPwdPersonal(ctx, req)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *personalController) RefreshToken(ctx context.Context, req *system.RefreshTokenReq) (res *system.RefreshTokenRes, err error) {
|
||||||
|
var (
|
||||||
|
ip = libUtils.GetClientIp(ctx)
|
||||||
|
userAgent = libUtils.GetUserAgent(ctx)
|
||||||
|
)
|
||||||
|
res = new(system.RefreshTokenRes)
|
||||||
|
res.UserInfo, err = service.SysUser().GetUserById(ctx, service.Context().GetUserId(ctx))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if res.UserInfo == nil {
|
||||||
|
err = errors.New("用户信息不存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res.Token, err = c.genToken(ctx, res.UserInfo, ip, userAgent)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *personalController) genToken(ctx context.Context, userInfo *model.LoginUserRes, ip, userAgent string) (token string, err error) {
|
||||||
|
key := gconv.String(userInfo.Id) + "-" + gmd5.MustEncryptString(userInfo.UserName) + gmd5.MustEncryptString(userInfo.UserPassword)
|
||||||
|
if g.Cfg().MustGet(ctx, "gfToken.multiLogin").Bool() {
|
||||||
|
key = gconv.String(userInfo.Id) + "-" + gmd5.MustEncryptString(userInfo.UserName) + gmd5.MustEncryptString(userInfo.UserPassword+ip+userAgent+gtime.Now().String())
|
||||||
|
}
|
||||||
|
|
||||||
|
token, err = service.GfToken().GenerateToken(ctx, key, userInfo)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
@ -64,3 +64,12 @@ func (s *sContext) GetUserId(ctx context.Context) uint64 {
|
|||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDeptId 获取当前登录用户部门id
|
||||||
|
func (s *sContext) GetDeptId(ctx context.Context) uint64 {
|
||||||
|
user := s.GetLoginUser(ctx)
|
||||||
|
if user != nil {
|
||||||
|
return user.DeptId
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@ package sysDept
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/text/gstr"
|
"github.com/gogf/gf/v2/text/gstr"
|
||||||
"github.com/gogf/gf/v2/util/gconv"
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
@ -96,6 +97,9 @@ func (s *sSysDept) Add(ctx context.Context, req *system.DeptAddReq) (err error)
|
|||||||
// Edit 部门修改
|
// Edit 部门修改
|
||||||
func (s *sSysDept) Edit(ctx context.Context, req *system.DeptEditReq) (err error) {
|
func (s *sSysDept) Edit(ctx context.Context, req *system.DeptEditReq) (err error) {
|
||||||
err = g.Try(ctx, func(ctx context.Context) {
|
err = g.Try(ctx, func(ctx context.Context) {
|
||||||
|
if req.DeptId == req.ParentID {
|
||||||
|
liberr.ErrIsNil(ctx, errors.New("上级部门不能是自己"))
|
||||||
|
}
|
||||||
_, err = dao.SysDept.Ctx(ctx).WherePri(req.DeptId).Update(do.SysDept{
|
_, err = dao.SysDept.Ctx(ctx).WherePri(req.DeptId).Update(do.SysDept{
|
||||||
ParentId: req.ParentID,
|
ParentId: req.ParentID,
|
||||||
DeptName: req.DeptName,
|
DeptName: req.DeptName,
|
||||||
@ -177,3 +181,15 @@ func (s *sSysDept) GetByDeptId(ctx context.Context, deptId uint64) (dept *entity
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetByDept 获取部门信息
|
||||||
|
func (s *sSysDept) GetByDept(ctx context.Context, deptId interface{}) (dept *model.LinkDeptRes) {
|
||||||
|
deptEnt, _ := s.GetByDeptId(ctx, gconv.Uint64(deptId))
|
||||||
|
if deptEnt != nil {
|
||||||
|
dept = &model.LinkDeptRes{
|
||||||
|
DeptId: deptEnt.DeptId,
|
||||||
|
DeptName: deptEnt.DeptName,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
@ -175,7 +175,7 @@ func (s *sSysNotice) Add(ctx context.Context, req *model.SysNoticeAddReq) (err e
|
|||||||
data.Id, err = rows.LastInsertId()
|
data.Id, err = rows.LastInsertId()
|
||||||
liberr.ErrIsNil(ctx, err, "获取ID失败")
|
liberr.ErrIsNil(ctx, err, "获取ID失败")
|
||||||
response := &libWebsocket.WResponse{
|
response := &libWebsocket.WResponse{
|
||||||
Event: "notice",
|
Event: consts.WebsocketTypeNotice,
|
||||||
Data: data,
|
Data: data,
|
||||||
}
|
}
|
||||||
if req.Type == consts.SysLetterType {
|
if req.Type == consts.SysLetterType {
|
||||||
@ -210,7 +210,7 @@ func (s *sSysNotice) Edit(ctx context.Context, req *model.SysNoticeEditReq) (err
|
|||||||
data.Id = req.Id
|
data.Id = req.Id
|
||||||
data.Type = req.Type
|
data.Type = req.Type
|
||||||
response := &libWebsocket.WResponse{
|
response := &libWebsocket.WResponse{
|
||||||
Event: "notice",
|
Event: consts.WebsocketTypeNotice,
|
||||||
Data: data,
|
Data: data,
|
||||||
}
|
}
|
||||||
if req.Type == consts.SysLetterType {
|
if req.Type == consts.SysLetterType {
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/gogf/gf/v2/container/garray"
|
"github.com/gogf/gf/v2/container/garray"
|
||||||
"github.com/gogf/gf/v2/database/gdb"
|
"github.com/gogf/gf/v2/database/gdb"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/gogf/gf/v2/text/gstr"
|
||||||
"github.com/gogf/gf/v2/util/gconv"
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
"github.com/tiger1103/gfast/v3/api/v1/system"
|
"github.com/tiger1103/gfast/v3/api/v1/system"
|
||||||
commonService "github.com/tiger1103/gfast/v3/internal/app/common/service"
|
commonService "github.com/tiger1103/gfast/v3/internal/app/common/service"
|
||||||
@ -22,6 +23,7 @@ import (
|
|||||||
"github.com/tiger1103/gfast/v3/internal/app/system/model/do"
|
"github.com/tiger1103/gfast/v3/internal/app/system/model/do"
|
||||||
"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
|
"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
|
||||||
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
||||||
|
"github.com/tiger1103/gfast/v3/library/libWebsocket"
|
||||||
"github.com/tiger1103/gfast/v3/library/liberr"
|
"github.com/tiger1103/gfast/v3/library/liberr"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -251,6 +253,8 @@ func (s *sSysRole) EditRole(ctx context.Context, req *system.RoleEditReq) (err e
|
|||||||
liberr.ErrIsNil(ctx, e)
|
liberr.ErrIsNil(ctx, e)
|
||||||
//清除缓存
|
//清除缓存
|
||||||
commonService.Cache().Remove(ctx, consts.CacheSysRole)
|
commonService.Cache().Remove(ctx, consts.CacheSysRole)
|
||||||
|
//通知刷新token
|
||||||
|
s.refreshToken(ctx, req.Id)
|
||||||
})
|
})
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
@ -360,6 +364,8 @@ func (s *sSysRole) RoleDataScope(ctx context.Context, req *system.DataScopeReq)
|
|||||||
_, err = dao.SysRoleScope.Ctx(ctx).Data(data).Insert()
|
_, err = dao.SysRoleScope.Ctx(ctx).Data(data).Insert()
|
||||||
liberr.ErrIsNil(ctx, err, "设置权限信息失败")
|
liberr.ErrIsNil(ctx, err, "设置权限信息失败")
|
||||||
}
|
}
|
||||||
|
//通知刷新token
|
||||||
|
s.refreshToken(ctx, gconv.Int64(req.RoleId))
|
||||||
})
|
})
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
@ -389,3 +395,20 @@ func (s *sSysRole) FindSonIdsByParentId(roleList []*entity.SysRole, id uint) []u
|
|||||||
}
|
}
|
||||||
return children
|
return children
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 刷新角色下用户token
|
||||||
|
func (s *sSysRole) refreshToken(ctx context.Context, roleId int64) {
|
||||||
|
_ = g.Try(ctx, func(ctx context.Context) {
|
||||||
|
enforcer, e := commonService.CasbinEnforcer(ctx)
|
||||||
|
liberr.ErrIsNil(ctx, e)
|
||||||
|
userRoleIds := enforcer.GetFilteredGroupingPolicy(1, gconv.String(roleId))
|
||||||
|
for _, v := range userRoleIds {
|
||||||
|
userId := gstr.Split(v[0], "_")[1]
|
||||||
|
//通知用户更新token
|
||||||
|
libWebsocket.SendToUser(gconv.Uint64(userId), &libWebsocket.WResponse{
|
||||||
|
Event: consts.WebsocketTypeTokenUpdated,
|
||||||
|
Data: nil,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/gogf/gf/v2/container/garray"
|
"github.com/gogf/gf/v2/container/garray"
|
||||||
"github.com/gogf/gf/v2/encoding/gurl"
|
"github.com/gogf/gf/v2/encoding/gurl"
|
||||||
"github.com/gogf/gf/v2/net/ghttp"
|
"github.com/gogf/gf/v2/net/ghttp"
|
||||||
|
"github.com/tiger1103/gfast/v3/library/libWebsocket"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/gogf/gf/v2/container/gset"
|
"github.com/gogf/gf/v2/container/gset"
|
||||||
@ -687,6 +688,11 @@ func (s *sSysUser) Edit(ctx context.Context, req *system.UserEditReq) (err error
|
|||||||
liberr.ErrIsNil(ctx, err, "设置用户权限失败")
|
liberr.ErrIsNil(ctx, err, "设置用户权限失败")
|
||||||
err = s.AddUserPost(ctx, tx, req.PostIds, req.UserId)
|
err = s.AddUserPost(ctx, tx, req.PostIds, req.UserId)
|
||||||
liberr.ErrIsNil(ctx, err)
|
liberr.ErrIsNil(ctx, err)
|
||||||
|
//通知用户更新token
|
||||||
|
libWebsocket.SendToUser(gconv.Uint64(req.UserId), &libWebsocket.WResponse{
|
||||||
|
Event: consts.WebsocketTypeTokenUpdated,
|
||||||
|
Data: nil,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
@ -758,6 +764,11 @@ func (s *sSysUser) SetUserRole(ctx context.Context, roleId uint, userIds []uint6
|
|||||||
for _, v := range userIds {
|
for _, v := range userIds {
|
||||||
_, err = enforcer.AddGroupingPolicy(fmt.Sprintf("%s%d", s.casBinUserPrefix, v), gconv.String(roleId))
|
_, err = enforcer.AddGroupingPolicy(fmt.Sprintf("%s%d", s.casBinUserPrefix, v), gconv.String(roleId))
|
||||||
liberr.ErrIsNil(ctx, err)
|
liberr.ErrIsNil(ctx, err)
|
||||||
|
//通知用户更新token
|
||||||
|
libWebsocket.SendToUser(v, &libWebsocket.WResponse{
|
||||||
|
Event: consts.WebsocketTypeTokenUpdated,
|
||||||
|
Data: nil,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@ -893,7 +904,7 @@ func (s *sSysUser) GetUsers(ctx context.Context, ids []int) (users []*model.SysU
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetDataWhere 获取数据权限判断条件
|
// GetDataWhere 获取数据权限判断条件
|
||||||
// Deprecated : 此方法已废弃,请使用更简单的GetAuthWhere方法
|
// Deprecated : 此方法已废弃,请使用更简单的GetAuthWhere方法或GetAuthDeptWhere方法
|
||||||
func (s *sSysUser) GetDataWhere(ctx context.Context, userInfo *model.ContextUser, entityData interface{}, menuId uint) (where g.Map, err error) {
|
func (s *sSysUser) GetDataWhere(ctx context.Context, userInfo *model.ContextUser, entityData interface{}, menuId uint) (where g.Map, err error) {
|
||||||
whereJustMe := g.Map{} //本人数据权限
|
whereJustMe := g.Map{} //本人数据权限
|
||||||
t := reflect.TypeOf(entityData)
|
t := reflect.TypeOf(entityData)
|
||||||
@ -963,6 +974,7 @@ func (s *sSysUser) GetDataWhere(ctx context.Context, userInfo *model.ContextUser
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAuthWhere 获取数据权限判断条件-按创建人id获取(created_by),数据权限会跟随创建人转移
|
||||||
func (s *sSysUser) GetAuthWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, field ...string) *gdb.Model {
|
func (s *sSysUser) GetAuthWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, field ...string) *gdb.Model {
|
||||||
var (
|
var (
|
||||||
//当前请求api接口对应的菜单
|
//当前请求api接口对应的菜单
|
||||||
@ -985,7 +997,7 @@ func (s *sSysUser) GetAuthWhere(ctx context.Context, m *gdb.Model, userInfo *mod
|
|||||||
return nm
|
return nm
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAuthDataWhere 获取数据权限判断条件
|
// GetAuthDataWhere 获取数据权限判断条件-按创建用户
|
||||||
func (s *sSysUser) GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, menuId uint, field ...string) (nm *gdb.Model, err error) {
|
func (s *sSysUser) GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, menuId uint, field ...string) (nm *gdb.Model, err error) {
|
||||||
whereJustMe := g.Map{} //本人数据权限
|
whereJustMe := g.Map{} //本人数据权限
|
||||||
createdUserField := "created_by"
|
createdUserField := "created_by"
|
||||||
@ -1008,7 +1020,6 @@ func (s *sSysUser) GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo
|
|||||||
roleIds []uint
|
roleIds []uint
|
||||||
scope []*model.ScopeAuthData
|
scope []*model.ScopeAuthData
|
||||||
deptIdArr = gset.New()
|
deptIdArr = gset.New()
|
||||||
allScope = false
|
|
||||||
)
|
)
|
||||||
roleIds, err = s.GetAdminRoleIds(ctx, userInfo.Id)
|
roleIds, err = s.GetAdminRoleIds(ctx, userInfo.Id)
|
||||||
liberr.ErrIsNil(ctx, err)
|
liberr.ErrIsNil(ctx, err)
|
||||||
@ -1022,7 +1033,6 @@ func (s *sSysUser) GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo
|
|||||||
for _, sv := range scope {
|
for _, sv := range scope {
|
||||||
switch sv.DataScope {
|
switch sv.DataScope {
|
||||||
case 1: //全部数据权限
|
case 1: //全部数据权限
|
||||||
allScope = true
|
|
||||||
goto endLoop
|
goto endLoop
|
||||||
case 2: //自定数据权限
|
case 2: //自定数据权限
|
||||||
deptIdArr.Add(gconv.Interfaces(sv.DeptIds)...)
|
deptIdArr.Add(gconv.Interfaces(sv.DeptIds)...)
|
||||||
@ -1053,13 +1063,119 @@ func (s *sSysUser) GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
endLoop:
|
endLoop:
|
||||||
if allScope {
|
if deptIdArr.Size() > 0 {
|
||||||
nm = m
|
|
||||||
} else if !allScope && deptIdArr.Size() > 0 {
|
|
||||||
nm = m.WhereIn(createdUserField, dao.SysUser.Ctx(ctx).Fields(dao.SysUser.Columns().Id).
|
nm = m.WhereIn(createdUserField, dao.SysUser.Ctx(ctx).Fields(dao.SysUser.Columns().Id).
|
||||||
WhereIn(dao.SysUser.Columns().DeptId, deptIdArr.Slice()))
|
WhereIn(dao.SysUser.Columns().DeptId, deptIdArr.Slice()))
|
||||||
} else if !allScope && len(whereJustMe) > 0 {
|
} else if len(whereJustMe) > 0 {
|
||||||
nm = m.Where(whereJustMe)
|
nm = m.Where(whereJustMe)
|
||||||
|
} else {
|
||||||
|
nm = m
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAuthDeptWhere 获取部门数据权限判断条件-按部门id获取(dept_id),数据权限依赖部门,不会随创建人转移
|
||||||
|
func (s *sSysUser) GetAuthDeptWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, field ...string) *gdb.Model {
|
||||||
|
var (
|
||||||
|
//当前请求api接口对应的菜单
|
||||||
|
url = gstr.TrimLeft(ghttp.RequestFromCtx(ctx).Request.URL.Path, "/")
|
||||||
|
menuId uint
|
||||||
|
err error
|
||||||
|
nm *gdb.Model
|
||||||
|
)
|
||||||
|
//获取菜单ID
|
||||||
|
menuId, err = service.SysAuthRule().GetIdByName(ctx, url)
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Error(ctx, err)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
nm, err = s.GetAuthDeptDataWhere(ctx, m, userInfo, menuId, field...)
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Error(ctx, err)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
return nm
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAuthDeptDataWhere 获取数据权限判断条件-按部门
|
||||||
|
func (s *sSysUser) GetAuthDeptDataWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, menuId uint, field ...string) (nm *gdb.Model, err error) {
|
||||||
|
whereJustMe := g.Map{} //本人数据权限
|
||||||
|
deptField := "dept_id"
|
||||||
|
createdUserField := "created_by"
|
||||||
|
//表别名
|
||||||
|
tableAlias := ""
|
||||||
|
if len(field) > 0 && field[0] != "" {
|
||||||
|
tableAlias = field[0]
|
||||||
|
}
|
||||||
|
if len(field) > 1 && field[1] != "" {
|
||||||
|
deptField = field[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(field) > 2 && field[2] != "" {
|
||||||
|
createdUserField = field[2]
|
||||||
|
}
|
||||||
|
|
||||||
|
if tableAlias != "" {
|
||||||
|
deptField = tableAlias + "." + deptField
|
||||||
|
createdUserField = tableAlias + "." + createdUserField
|
||||||
|
}
|
||||||
|
err = g.Try(ctx, func(ctx context.Context) {
|
||||||
|
//若存在用户id的字段,则生成判断数据权限的条件
|
||||||
|
//1、获取当前用户所属角色Ids
|
||||||
|
var (
|
||||||
|
roleIds []uint
|
||||||
|
scope []*model.ScopeAuthData
|
||||||
|
deptIdArr = gset.New()
|
||||||
|
)
|
||||||
|
roleIds, err = s.GetAdminRoleIds(ctx, userInfo.Id)
|
||||||
|
liberr.ErrIsNil(ctx, err)
|
||||||
|
scope, err = service.SysRole().GetRoleMenuScope(ctx, roleIds, menuId)
|
||||||
|
liberr.ErrIsNil(ctx, err)
|
||||||
|
if scope == nil {
|
||||||
|
//角色未设置数据权限,默认仅本人数据权限
|
||||||
|
whereJustMe = g.Map{deptField: userInfo.DeptId, createdUserField: userInfo.Id}
|
||||||
|
} else {
|
||||||
|
//2获取角色对应数据权限
|
||||||
|
for _, sv := range scope {
|
||||||
|
switch sv.DataScope {
|
||||||
|
case 1: //全部数据权限
|
||||||
|
goto endLoop
|
||||||
|
case 2: //自定数据权限
|
||||||
|
deptIdArr.Add(gconv.Interfaces(sv.DeptIds)...)
|
||||||
|
case 3: //本部门数据权限
|
||||||
|
deptIdArr.Add(gconv.Int64(userInfo.DeptId))
|
||||||
|
case 4: //本部门及以下数据权限
|
||||||
|
deptIdArr.Add(gconv.Int64(userInfo.DeptId))
|
||||||
|
//获取正常状态部门数据
|
||||||
|
deptList := ([]*entity.SysDept)(nil)
|
||||||
|
deptList, err = service.SysDept().GetList(ctx, &system.DeptSearchReq{Status: "1"})
|
||||||
|
liberr.ErrIsNil(ctx, err)
|
||||||
|
var dList g.List
|
||||||
|
for _, d := range deptList {
|
||||||
|
m := g.Map{
|
||||||
|
"id": d.DeptId,
|
||||||
|
"pid": d.ParentId,
|
||||||
|
"label": d.DeptName,
|
||||||
|
}
|
||||||
|
dList = append(dList, m)
|
||||||
|
}
|
||||||
|
l := libUtils.FindSonByParentId(dList, userInfo.DeptId, "pid", "id")
|
||||||
|
for _, li := range l {
|
||||||
|
deptIdArr.Add(gconv.Int64(li["id"]))
|
||||||
|
}
|
||||||
|
case 5: //仅本人数据权限
|
||||||
|
whereJustMe = g.Map{deptField: userInfo.Id, createdUserField: userInfo.Id}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endLoop:
|
||||||
|
if deptIdArr.Size() > 0 {
|
||||||
|
nm = m.WhereIn(deptField, deptIdArr.Slice())
|
||||||
|
} else if len(whereJustMe) > 0 {
|
||||||
|
nm = m.Where(whereJustMe)
|
||||||
|
} else {
|
||||||
|
nm = m
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
|
@ -987,6 +987,8 @@ func (s *sToolsGenTable) SelectRecordById(ctx context.Context, tableId int64) (t
|
|||||||
|
|
||||||
_, hasCreatedBy := columnMap["created_by"]
|
_, hasCreatedBy := columnMap["created_by"]
|
||||||
tableEx.HasCreatedBy = hasCreatedBy
|
tableEx.HasCreatedBy = hasCreatedBy
|
||||||
|
_, hasDeptId := columnMap["dept_id"]
|
||||||
|
tableEx.HasDeptId = hasDeptId
|
||||||
_, hasUpdateBy := columnMap["updated_by"]
|
_, hasUpdateBy := columnMap["updated_by"]
|
||||||
tableEx.HasUpdatedBy = hasUpdateBy
|
tableEx.HasUpdatedBy = hasUpdateBy
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ func New() service.IToolsGenTableColumn {
|
|||||||
ColumnTypeStr: []string{"char", "varchar", "narchar", "varchar2", "tinytext", "text", "mediumtext", "longtext"},
|
ColumnTypeStr: []string{"char", "varchar", "narchar", "varchar2", "tinytext", "text", "mediumtext", "longtext"},
|
||||||
ColumnTypeTime: []string{"datetime", "time", "date", "timestamp"},
|
ColumnTypeTime: []string{"datetime", "time", "date", "timestamp"},
|
||||||
ColumnTypeNumber: []string{"tinyint", "smallint", "mediumint", "int", "number", "integer", "bigint", "float", "float", "double", "decimal"},
|
ColumnTypeNumber: []string{"tinyint", "smallint", "mediumint", "int", "number", "integer", "bigint", "float", "float", "double", "decimal"},
|
||||||
ColumnNameNotEdit: []string{"created_by", "created_at", "updated_by", "updated_at", "deleted_at"},
|
ColumnNameNotEdit: []string{"created_by", "created_at", "updated_by", "updated_at", "deleted_at", "dept_id"},
|
||||||
ColumnNameNotList: []string{"updated_by", "updated_at", "deleted_at"},
|
ColumnNameNotList: []string{"updated_by", "updated_at", "deleted_at"},
|
||||||
ColumnNameNotDetail: []string{"updated_at", "deleted_at"},
|
ColumnNameNotDetail: []string{"updated_at", "deleted_at"},
|
||||||
ColumnNameNotQuery: []string{"updated_by", "updated_at", "deleted_at", "remark"},
|
ColumnNameNotQuery: []string{"updated_by", "updated_at", "deleted_at", "remark"},
|
||||||
@ -76,10 +76,10 @@ func (s *sToolsGenTableColumn) SelectDbTableColumnsByName(ctx context.Context, t
|
|||||||
sql += "where " + gdb.FormatSqlWithArgs(" c.table_name=? ", []interface{}{tableName}) + " order by c.ordinal_position"
|
sql += "where " + gdb.FormatSqlWithArgs(" c.table_name=? ", []interface{}{tableName}) + " order by c.ordinal_position"
|
||||||
} else {
|
} else {
|
||||||
sql = " select column_name, (case when (is_nullable = 'YES' || is_nullable = 'NO' && column_default is not null) then '0' else '1' end) as is_required, " +
|
sql = " select column_name, (case when (is_nullable = 'YES' || is_nullable = 'NO' && column_default is not null) then '0' else '1' end) as is_required, " +
|
||||||
"(case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort_order_edit, column_comment," +
|
"(case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort_order_edit, column_comment," +
|
||||||
" (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type from information_schema.columns" +
|
" (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type from information_schema.columns" +
|
||||||
" where table_schema = (select database()) "
|
" where table_schema = (select database()) "
|
||||||
sql += " and " + gdb.FormatSqlWithArgs(" table_name=? ", []interface{}{tableName}) + " order by ordinal_position ASC "
|
sql += " and " + gdb.FormatSqlWithArgs(" table_name=? ", []interface{}{tableName}) + " order by ordinal_position ASC "
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,9 +7,16 @@
|
|||||||
|
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import "github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
|
import (
|
||||||
|
"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
|
||||||
|
)
|
||||||
|
|
||||||
type SysDeptTreeRes struct {
|
type SysDeptTreeRes struct {
|
||||||
*entity.SysDept
|
*entity.SysDept
|
||||||
Children []*SysDeptTreeRes `json:"children"`
|
Children []*SysDeptTreeRes `json:"children"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LinkDeptRes struct {
|
||||||
|
DeptId uint64 `json:"deptId"`
|
||||||
|
DeptName string `json:"deptName"`
|
||||||
|
}
|
||||||
|
@ -47,6 +47,7 @@ type ToolsGenTableEx struct {
|
|||||||
IsPkListable bool // 主键是否出现在列表中
|
IsPkListable bool // 主键是否出现在列表中
|
||||||
HasTimeColumn bool // 是否有时间类型
|
HasTimeColumn bool // 是否有时间类型
|
||||||
HasCreatedBy bool // 是否有created_by字段
|
HasCreatedBy bool // 是否有created_by字段
|
||||||
|
HasDeptId bool // 是否右dept_id字段
|
||||||
HasUpdatedBy bool // 是否有updated_by字段
|
HasUpdatedBy bool // 是否有updated_by字段
|
||||||
HasConversion bool // service中是否有转换函数
|
HasConversion bool // service中是否有转换函数
|
||||||
Columns []*ToolsGenTableColumnEx // 表列信息
|
Columns []*ToolsGenTableColumnEx // 表列信息
|
||||||
|
@ -18,6 +18,7 @@ type IContext interface {
|
|||||||
SetUser(ctx context.Context, ctxUser *model.ContextUser)
|
SetUser(ctx context.Context, ctxUser *model.ContextUser)
|
||||||
GetLoginUser(ctx context.Context) *model.ContextUser
|
GetLoginUser(ctx context.Context) *model.ContextUser
|
||||||
GetUserId(ctx context.Context) uint64
|
GetUserId(ctx context.Context) uint64
|
||||||
|
GetDeptId(ctx context.Context) uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
var localContext IContext
|
var localContext IContext
|
||||||
|
@ -22,6 +22,7 @@ type ISysDept interface {
|
|||||||
FindSonByParentId(deptList []*entity.SysDept, deptId uint64) []*entity.SysDept
|
FindSonByParentId(deptList []*entity.SysDept, deptId uint64) []*entity.SysDept
|
||||||
GetListTree(pid uint64, list []*entity.SysDept) (deptTree []*model.SysDeptTreeRes)
|
GetListTree(pid uint64, list []*entity.SysDept) (deptTree []*model.SysDeptTreeRes)
|
||||||
GetByDeptId(ctx context.Context, deptId uint64) (dept *entity.SysDept, err error)
|
GetByDeptId(ctx context.Context, deptId uint64) (dept *entity.SysDept, err error)
|
||||||
|
GetByDept(ctx context.Context, deptId interface{}) (dept *model.LinkDeptRes)
|
||||||
}
|
}
|
||||||
|
|
||||||
var localSysDept ISysDept
|
var localSysDept ISysDept
|
||||||
|
@ -52,14 +52,14 @@ type (
|
|||||||
ChangeUserStatus(ctx context.Context, req *system.UserStatusReq) (err error)
|
ChangeUserStatus(ctx context.Context, req *system.UserStatusReq) (err error)
|
||||||
Delete(ctx context.Context, ids []int) (err error)
|
Delete(ctx context.Context, ids []int) (err error)
|
||||||
GetUsers(ctx context.Context, ids []int) (users []*model.SysUserSimpleRes, err error)
|
GetUsers(ctx context.Context, ids []int) (users []*model.SysUserSimpleRes, err error)
|
||||||
// Deprecated : 此方法已废弃,请使用更简单的GetAuthWhere方法
|
// Deprecated : 此方法已废弃,请使用更简单的GetAuthWhere方法或GetAuthDeptWhere方法
|
||||||
GetDataWhere(ctx context.Context, userInfo *model.ContextUser, entityData interface{}, menuId uint) (where g.Map, err error)
|
GetDataWhere(ctx context.Context, userInfo *model.ContextUser, entityData interface{}, menuId uint) (where g.Map, err error)
|
||||||
HasAccessByDataWhere(ctx context.Context, where g.Map, uid interface{}) bool
|
HasAccessByDataWhere(ctx context.Context, where g.Map, uid interface{}) bool
|
||||||
AccessRule(ctx context.Context, userId uint64, rule string) bool
|
AccessRule(ctx context.Context, userId uint64, rule string) bool
|
||||||
GetUserSelector(ctx context.Context, req *system.UserSelectorReq) (total interface{}, userList []*model.SysUserSimpleRes, err error)
|
GetUserSelector(ctx context.Context, req *system.UserSelectorReq) (total interface{}, userList []*model.SysUserSimpleRes, err error)
|
||||||
GetUsersByRoleId(ctx context.Context, roleId uint) (users []*model.SysUserRoleDeptRes, err error)
|
GetUsersByRoleId(ctx context.Context, roleId uint) (users []*model.SysUserRoleDeptRes, err error)
|
||||||
GetAuthWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, field ...string) *gdb.Model
|
GetAuthWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, field ...string) *gdb.Model
|
||||||
GetAuthDataWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, menuId uint, field ...string) (nm *gdb.Model, err error)
|
GetAuthDeptWhere(ctx context.Context, m *gdb.Model, userInfo *model.ContextUser, field ...string) *gdb.Model
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,5 +9,5 @@ package consts
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
Logo = `CiAgIF9fX19fX19fX19fXyAgICAgICAgICAgX18gCiAgLyBfX19fLyBfX19fL19fXyBfX19fX18vIC9fCiAvIC8gX18vIC9fICAvIF9fIGAvIF9fXy8gX18vCi8gL18vIC8gX18vIC8gL18vIChfXyAgKSAvXyAgClxfX19fL18vICAgIFxfXyxfL19fX18vXF9fLyAg`
|
Logo = `CiAgIF9fX19fX19fX19fXyAgICAgICAgICAgX18gCiAgLyBfX19fLyBfX19fL19fXyBfX19fX18vIC9fCiAvIC8gX18vIC9fICAvIF9fIGAvIF9fXy8gX18vCi8gL18vIC8gX18vIC8gL18vIChfXyAgKSAvXyAgClxfX19fL18vICAgIFxfXyxfL19fX18vXF9fLyAg`
|
||||||
Version = "3.2.25"
|
Version = "3.2.26"
|
||||||
)
|
)
|
||||||
|
@ -163,6 +163,7 @@ func GetType(p string) (result string, err error) {
|
|||||||
g.Log().Error(context.TODO(), err)
|
g.Log().Error(context.TODO(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer file.Close()
|
||||||
buff := make([]byte, 512)
|
buff := make([]byte, 512)
|
||||||
|
|
||||||
_, err = file.Read(buff)
|
_, err = file.Read(buff)
|
||||||
|
@ -256,6 +256,7 @@ func (c *{{$structName}}Controller) Export(ctx context.Context, req *{{.table.Mo
|
|||||||
}
|
}
|
||||||
//创建excel处理对象
|
//创建excel处理对象
|
||||||
excel := new(libUtils.ExcelHelper).CreateFile()
|
excel := new(libUtils.ExcelHelper).CreateFile()
|
||||||
|
defer excel.Close()
|
||||||
excel.ArrToExcel("Sheet1", "A1", excelData)
|
excel.ArrToExcel("Sheet1", "A1", excelData)
|
||||||
col, _ := excelize.ColumnNumberToName(len(tableHead))
|
col, _ := excelize.ColumnNumberToName(len(tableHead))
|
||||||
row := len(excelData)
|
row := len(excelData)
|
||||||
@ -291,6 +292,7 @@ func (c *{{$structName}}Controller) ExcelTemplate(ctx context.Context,req *{{.ta
|
|||||||
)
|
)
|
||||||
//创建excel处理对象
|
//创建excel处理对象
|
||||||
excel := new(libUtils.ExcelHelper).CreateFile()
|
excel := new(libUtils.ExcelHelper).CreateFile()
|
||||||
|
defer excel.Close()
|
||||||
excel.ArrToExcel("Sheet1", "A1", excelData)
|
excel.ArrToExcel("Sheet1", "A1", excelData)
|
||||||
col, _ := excelize.ColumnNumberToName(len(tableHead))
|
col, _ := excelize.ColumnNumberToName(len(tableHead))
|
||||||
row := len(excelData)
|
row := len(excelData)
|
||||||
|
@ -22,7 +22,7 @@ package {{$structName}}
|
|||||||
{{if eq $column.HtmlType "images" "file" "files"}}
|
{{if eq $column.HtmlType "images" "file" "files"}}
|
||||||
{{$libUtils = true}}
|
{{$libUtils = true}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if and (eq $column.HtmlField "createdBy" "updatedBy" "deletedBy") (ne $.table.ModuleName "system")}}
|
{{if and (eq $column.HtmlField "createdBy" "updatedBy" "deletedBy" "deptId") (ne $.table.ModuleName "system")}}
|
||||||
{{$usedSystemModule = true}}
|
{{$usedSystemModule = true}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if eq $column.HtmlType "selects" "checkbox"}}
|
{{if eq $column.HtmlType "selects" "checkbox"}}
|
||||||
@ -203,6 +203,13 @@ func (s *s{{.table.ClassName}})List(ctx context.Context, req *model.{{.table.Cla
|
|||||||
{{end}}
|
{{end}}
|
||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
CreatedUser:v.CreatedUser,
|
CreatedUser:v.CreatedUser,
|
||||||
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
{{if $usedSystemModule}}
|
||||||
|
DeptInfo:systemService.SysDept().GetByDept(ctx, v.DeptId),
|
||||||
|
{{else}}
|
||||||
|
DeptInfo:service.SysDept().GetByDept(ctx, v.DeptId),
|
||||||
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if eq $column.HtmlField "UpdatedBy"}}
|
{{if eq $column.HtmlField "UpdatedBy"}}
|
||||||
UpdatedUser:v.UpdatedUser,
|
UpdatedUser:v.UpdatedUser,
|
||||||
@ -230,6 +237,13 @@ func (s *s{{.table.ClassName}})List(ctx context.Context, req *model.{{.table.Cla
|
|||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
CreatedUser:v.CreatedUser,
|
CreatedUser:v.CreatedUser,
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
{{if $usedSystemModule}}
|
||||||
|
DeptInfo:systemService.SysDept().GetByDept(ctx, v.DeptId),
|
||||||
|
{{else}}
|
||||||
|
DeptInfo:service.SysDept().GetByDept(ctx, v.DeptId),
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "UpdatedBy"}}
|
{{if eq $column.HtmlField "UpdatedBy"}}
|
||||||
UpdatedUser:v.UpdatedUser,
|
UpdatedUser:v.UpdatedUser,
|
||||||
{{end}}
|
{{end}}
|
||||||
@ -426,6 +440,15 @@ func (s *s{{.table.ClassName}})GetBy{{$pkGoField}}(ctx context.Context, {{$.tabl
|
|||||||
err =g.Try(ctx, func(ctx context.Context){
|
err =g.Try(ctx, func(ctx context.Context){
|
||||||
err = dao.{{.table.ClassName}}.Ctx(ctx).WithAll().Where(dao.{{.table.ClassName}}.Columns().{{$pkGoField}}, {{$.table.PkColumn.HtmlField}}).Scan(&res)
|
err = dao.{{.table.ClassName}}.Ctx(ctx).WithAll().Where(dao.{{.table.ClassName}}.Columns().{{$pkGoField}}, {{$.table.PkColumn.HtmlField}}).Scan(&res)
|
||||||
liberr.ErrIsNil(ctx,err,"获取信息失败")
|
liberr.ErrIsNil(ctx,err,"获取信息失败")
|
||||||
|
if res!=nil{
|
||||||
|
{{if $.table.HasDeptId}}
|
||||||
|
{{if $usedSystemModule}}
|
||||||
|
res.DeptInfo = systemService.SysDept().GetByDept(ctx, res.DeptId)
|
||||||
|
{{else}}
|
||||||
|
res.DeptInfo = service.SysDept().GetByDept(ctx, res.DeptId)
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
}
|
||||||
{{range $index, $column := .table.Columns}}
|
{{range $index, $column := .table.Columns}}
|
||||||
{{if eq $column.HtmlType "selects" "checkbox" "treeSelects"}}
|
{{if eq $column.HtmlType "selects" "checkbox" "treeSelects"}}
|
||||||
{{range $ti, $linkedTable := $.table.LinkedTables}}
|
{{range $ti, $linkedTable := $.table.LinkedTables}}
|
||||||
@ -484,6 +507,13 @@ func (s *s{{.table.ClassName}})Add(ctx context.Context, req *model.{{.table.Clas
|
|||||||
CreatedBy:service.Context().GetUserId(ctx),
|
CreatedBy:service.Context().GetUserId(ctx),
|
||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if .table.HasDeptId}}
|
||||||
|
{{if $usedSystemModule}}
|
||||||
|
DeptId:systemService.Context().GetDeptId(ctx),
|
||||||
|
{{else}}
|
||||||
|
DeptId:service.Context().GetDeptId(ctx),
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
})
|
})
|
||||||
liberr.ErrIsNil(ctx, err, "添加失败")
|
liberr.ErrIsNil(ctx, err, "添加失败")
|
||||||
})
|
})
|
||||||
|
@ -17,7 +17,7 @@ package model
|
|||||||
|
|
||||||
|
|
||||||
{{range $index,$column :=.table.Columns}}
|
{{range $index,$column :=.table.Columns}}
|
||||||
{{if and (eq $column.HtmlField "createdBy" "updatedBy") (ne $.table.ModuleName "system")}}
|
{{if and (eq $column.HtmlField "createdBy" "updatedBy" "deptId") (ne $.table.ModuleName "system")}}
|
||||||
{{$hasUser = true}}
|
{{$hasUser = true}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if eq $column.HtmlType "imagefile" "images" "file" "files" }}
|
{{if eq $column.HtmlType "imagefile" "images" "file" "files" }}
|
||||||
@ -28,7 +28,7 @@ package model
|
|||||||
{{end}}
|
{{end}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{range $index,$column :=.table.EditColumns}}
|
{{range $index,$column :=.table.EditColumns}}
|
||||||
{{if and (eq $column.HtmlField "createdBy" "updatedBy") (ne $.table.ModuleName "system")}}
|
{{if and (eq $column.HtmlField "createdBy" "updatedBy" "deptId") (ne $.table.ModuleName "system")}}
|
||||||
{{$hasUser = true}}
|
{{$hasUser = true}}
|
||||||
{{end}}
|
{{end}}
|
||||||
{{if eq $column.GoType "Time"}}
|
{{if eq $column.GoType "Time"}}
|
||||||
@ -63,6 +63,9 @@ type {{.table.ClassName}}InfoRes struct {
|
|||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
CreatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=created_by" json:"createdUser"`
|
CreatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=created_by" json:"createdUser"`
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
DeptInfo *{{if $hasUser}}systemModel.{{end}}LinkDeptRes `json:"deptInfo"`
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
UpdatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=updated_by" json:"updatedUser"`
|
UpdatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=updated_by" json:"updatedUser"`
|
||||||
{{end}}
|
{{end}}
|
||||||
@ -101,6 +104,9 @@ type {{.table.ClassName}}ListRes struct{
|
|||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
CreatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=created_by" json:"createdUser"`
|
CreatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=created_by" json:"createdUser"`
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
DeptInfo *{{if $hasUser}}systemModel.{{end}}LinkDeptRes `json:"deptInfo"`
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
UpdatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=updated_by" json:"updatedUser"`
|
UpdatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=updated_by" json:"updatedUser"`
|
||||||
{{end}}
|
{{end}}
|
||||||
@ -114,6 +120,9 @@ type {{.table.ClassName}}ListRes struct{
|
|||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
CreatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=created_by" json:"createdUser"`
|
CreatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=created_by" json:"createdUser"`
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
DeptInfo *{{if $hasUser}}systemModel.{{end}}LinkDeptRes `json:"deptInfo"`
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
UpdatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=updated_by" json:"updatedBy"`
|
UpdatedUser *{{if $hasUser}}systemModel.{{end}}LinkUserRes `orm:"with:id=updated_by" json:"updatedBy"`
|
||||||
{{end}}
|
{{end}}
|
||||||
@ -168,6 +177,9 @@ type {{.table.ClassName}}AddReq struct {
|
|||||||
{{if .table.HasCreatedBy}}
|
{{if .table.HasCreatedBy}}
|
||||||
CreatedBy uint64
|
CreatedBy uint64
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if .table.HasDeptId}}
|
||||||
|
DeptId uint64
|
||||||
|
{{end}}
|
||||||
}
|
}
|
||||||
|
|
||||||
////
|
////
|
||||||
|
@ -309,6 +309,9 @@
|
|||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
data.createdBy = data.createdUser?.userNickname
|
data.createdBy = data.createdUser?.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
data.deptId = data.deptInfo?.deptName
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
data.updatedBy = data.updatedUser?.userNickname
|
data.updatedBy = data.updatedUser?.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -469,7 +469,7 @@ import {downLoadXml} from "/@/utils/zipdownload";
|
|||||||
import loadExcel from "/@/components/loadExcel/index.vue"
|
import loadExcel from "/@/components/loadExcel/index.vue"
|
||||||
{{end}}
|
{{end}}
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}List",
|
name: "{{.apiVersion|replace "/" "_"|CaseCamelLower}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}List",
|
||||||
components:{
|
components:{
|
||||||
{{if .table.ExcelImp}}
|
{{if .table.ExcelImp}}
|
||||||
loadExcel,
|
loadExcel,
|
||||||
@ -591,11 +591,14 @@ export default defineComponent({
|
|||||||
list{{.table.ClassName}}(state.tableData.param).then((res:any)=>{
|
list{{.table.ClassName}}(state.tableData.param).then((res:any)=>{
|
||||||
let list = res.data.list??[];
|
let list = res.data.list??[];
|
||||||
{{range $index,$column := .table.ListColumns}}
|
{{range $index,$column := .table.ListColumns}}
|
||||||
{{if eq $column.HtmlField "createdBy" "updatedBy"}}
|
{{if eq $column.HtmlField "createdBy" "updatedBy" "deptId"}}
|
||||||
list.map((item:any)=>{
|
list.map((item:any)=>{
|
||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
item.createdBy = item.createdUser?.userNickname
|
item.createdBy = item.createdUser?.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
item.deptId = item.deptInfo?.deptName
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
item.updatedBy = item.updatedUser?.userNickname
|
item.updatedBy = item.updatedUser?.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -340,7 +340,7 @@ import {{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|Ca
|
|||||||
import {{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail from "/@/views/{{.modulePath}}/{{$businessName}}/list/component/detail.vue"
|
import {{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail from "/@/views/{{.modulePath}}/{{$businessName}}/list/component/detail.vue"
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}List",
|
name: "{{.apiVersion|replace "/" "_"|CaseCamelLower}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}List",
|
||||||
components:{
|
components:{
|
||||||
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Edit,
|
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Edit,
|
||||||
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail
|
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail
|
||||||
@ -457,11 +457,14 @@ export default defineComponent({
|
|||||||
list{{.table.ClassName}}(state.tableData.param).then((res:any)=>{
|
list{{.table.ClassName}}(state.tableData.param).then((res:any)=>{
|
||||||
let list = res.data.list??[];
|
let list = res.data.list??[];
|
||||||
{{range $index,$column := .table.ListColumns}}
|
{{range $index,$column := .table.ListColumns}}
|
||||||
{{if eq $column.HtmlField "createdBy" "updatedBy"}}
|
{{if eq $column.HtmlField "createdBy" "updatedBy" "dept_id"}}
|
||||||
list.map((item:any)=>{
|
list.map((item:any)=>{
|
||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
item.createdBy = item?.createdUser.userNickname
|
item.createdBy = item?.createdUser.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
item.deptId = item.deptInfo?.deptName
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
item.updatedBy = item?.updatedUser.userNickname
|
item.updatedBy = item?.updatedUser.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
@ -470,7 +473,7 @@ export default defineComponent({
|
|||||||
{{end}}
|
{{end}}
|
||||||
if(list.length > 0 && typeof list[0].id == "undefined"){
|
if(list.length > 0 && typeof list[0].id == "undefined"){
|
||||||
list.map((item:any)=>{
|
list.map((item:any)=>{
|
||||||
item.id = item.categoryId
|
item.id = item.{{.table.PkColumn.HtmlField}}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
dataList.value = _.clone(res.data.list)
|
dataList.value = _.clone(res.data.list)
|
||||||
|
@ -447,7 +447,7 @@ import {{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|Ca
|
|||||||
import {{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail from "/@/views/{{.modulePath}}/{{$businessName}}/list/component/detail.vue"
|
import {{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail from "/@/views/{{.modulePath}}/{{$businessName}}/list/component/detail.vue"
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}List",
|
name: "{{.apiVersion|replace "/" "_"|CaseCamelLower}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}List",
|
||||||
components:{
|
components:{
|
||||||
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Edit,
|
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Edit,
|
||||||
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail
|
{{.apiVersion|replace "/" "_"|CaseCamel}}{{.modulePath|replace "/" "_"|CaseCamel}}{{.table.ClassName}}Detail
|
||||||
@ -564,11 +564,14 @@ export default defineComponent({
|
|||||||
list{{.table.ClassName}}(state.tableData.param).then((res:any)=>{
|
list{{.table.ClassName}}(state.tableData.param).then((res:any)=>{
|
||||||
let list = res.data.list??[];
|
let list = res.data.list??[];
|
||||||
{{range $index,$column := .table.ListColumns}}
|
{{range $index,$column := .table.ListColumns}}
|
||||||
{{if eq $column.HtmlField "createdBy" "updatedBy"}}
|
{{if eq $column.HtmlField "createdBy" "updatedBy" "deptId"}}
|
||||||
list.map((item:any)=>{
|
list.map((item:any)=>{
|
||||||
{{if eq $column.HtmlField "createdBy"}}
|
{{if eq $column.HtmlField "createdBy"}}
|
||||||
item.createdBy = item?.createdUser.userNickname
|
item.createdBy = item?.createdUser.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if eq $column.HtmlField "deptId"}}
|
||||||
|
item.deptId = item.deptInfo?.deptName
|
||||||
|
{{end}}
|
||||||
{{if eq $column.HtmlField "updatedBy"}}
|
{{if eq $column.HtmlField "updatedBy"}}
|
||||||
item.updatedBy = item?.updatedUser.userNickname
|
item.updatedBy = item?.updatedUser.userNickname
|
||||||
{{end}}
|
{{end}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user