feat:完善项目信息

This commit is contained in:
henry
2022-01-06 17:11:57 +08:00
parent 1b0f71735b
commit a92801b1ce
29 changed files with 815 additions and 623 deletions

View File

@ -6,6 +6,7 @@ import (
"SciencesServer/config"
"SciencesServer/serve/orm"
"errors"
"fmt"
"time"
"gorm.io/gorm"
@ -34,6 +35,31 @@ func (c *Config) Config(kind, page, pageSize int) (*ReturnPages, error) {
return &ReturnPages{Data: out, Count: count}, nil
}
func (c *Config) Add(kind int, name, key string, value interface{}) error {
mSysConfig := model.NewSysConfig()
var count int64
err := model2.Count(mSysConfig.SysConfig, &count, model2.NewWhere("key", key))
if err != nil {
return err
} else if count > 0 {
return errors.New("key已存在")
}
mSysConfig.Kind = model2.SysConfigKind(kind)
mSysConfig.Name = name
mSysConfig.Key = key
mSysConfig.Value = fmt.Sprintf("%v", value)
if err = model2.Create(mSysConfig.SysConfig); err != nil {
return err
}
config.SystemConfig[key] = value
return nil
}
func (c *Config) Form(params map[string]interface{}) error {
if len(params) <= 0 {
return nil

View File

@ -1,98 +0,0 @@
package controller
import (
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"time"
)
type Department struct{ *Platform }
type DepartmentHandle func(session *service.Session) *Department
type DepartmentParams struct {
ID, ParentID uint64
Title, Name, Mobile, Remark string
}
type DepartmentTree struct {
*model2.SysDepartment
Children []*DepartmentTree `json:"children"`
}
func (c *Department) tree(src []*model2.SysDepartment, parentID uint64) []*DepartmentTree {
out := make([]*DepartmentTree, 0)
for _, v := range src {
if v.ParentID == parentID {
out = append(out, &DepartmentTree{
SysDepartment: v,
Children: c.tree(src, v.ID),
})
}
}
return out
}
func (c *Department) List() ([]*DepartmentTree, error) {
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
if err := model2.Scan(mSysDepartment.SysDepartment, &out, &model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil {
return nil, err
}
return c.tree(out, 0), nil
}
func (c *Department) Select() ([]*DepartmentTree, error) {
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
if err := model2.ScanFields(mSysDepartment.SysDepartment, &out, []string{"id", "name"}, &model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil {
return nil, err
}
return c.tree(out, 0), nil
}
func (c *Department) Data(params *DepartmentParams) error {
mSysDepartment := model.NewSysDepartment()
if params.ID <= 0 {
mSysDepartment.ParentID = params.ParentID
mSysDepartment.Title = params.Title
mSysDepartment.Name = params.Name
mSysDepartment.Mobile = params.Mobile
mSysDepartment.Remark = params.Remark
return model2.Create(mSysDepartment.SysDepartment)
}
mSysDepartment.ID = params.ID
return model2.Updates(mSysDepartment.SysDepartment, map[string]interface{}{
"parent_id": params.ParentID, "title": params.Title, "name": params.Name,
"mobile": params.Mobile, "remark": params.Remark, "updated_at": time.Now(),
})
}
func (c *Department) Delete(id uint64) error {
mSysDepartment := model.NewSysDepartment()
mSysDepartment.ID = id
if err := model2.Delete(mSysDepartment.SysDepartment); err != nil {
return err
}
return nil
}
func NewDepartment() DepartmentHandle {
return func(session *service.Session) *Department {
return &Department{Platform: &Platform{Session: session}}
}
}

View File

@ -0,0 +1,114 @@
package department
import (
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"time"
)
type Instance struct{ *session.Admin }
type InstanceHandle func(session *session.Admin) *Instance
type InstanceParams struct {
ID, ParentID uint64
Name, Contact, ContactMobile, Remark string
Status int
}
type (
// InstanceInfo 部门信息
InstanceInfo struct {
ID string `json:"id"`
ParentID string `json:"parent_id"`
*model2.SysDepartment
}
// InstanceTreeInfo 部门树
InstanceTreeInfo struct {
*InstanceInfo
Children []*InstanceTreeInfo `json:"children"`
}
)
func (c *Instance) tree(src []*model2.SysDepartment, parentID uint64) []*InstanceTreeInfo {
out := make([]*InstanceTreeInfo, 0)
for _, v := range src {
if v.ParentID == parentID {
out = append(out, &InstanceTreeInfo{
InstanceInfo: &InstanceInfo{
ID: v.GetEncodeID(),
ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(),
SysDepartment: v,
},
Children: c.tree(src, v.ID),
})
}
}
return out
}
func (c *Instance) Index() ([]*InstanceTreeInfo, error) {
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
if err := model2.Scan(mSysDepartment.SysDepartment, &out, &model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil {
return nil, err
}
return c.tree(out, 0), nil
}
func (c *Instance) Select() ([]*InstanceTreeInfo, error) {
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
if err := model2.ScanFields(mSysDepartment.SysDepartment, &out, []string{"id", "name"}, &model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil {
return nil, err
}
return c.tree(out, 0), nil
}
func (c *Instance) Form(params *InstanceParams) error {
mSysDepartment := model.NewSysDepartment()
if params.ID <= 0 {
mSysDepartment.ParentID = params.ParentID
mSysDepartment.Name = params.Name
mSysDepartment.Contact = params.Contact
mSysDepartment.ContactMobile = params.ContactMobile
mSysDepartment.Status = params.Status
mSysDepartment.Remark = params.Remark
return model2.Create(mSysDepartment.SysDepartment)
}
mSysDepartment.ID = params.ID
return model2.Updates(mSysDepartment.SysDepartment, map[string]interface{}{
"parent_id": params.ParentID, "name": params.Name, "contact": params.Contact,
"contact_mobile": params.ContactMobile, "status": params.Status, "remark": params.Remark,
"updated_at": time.Now(),
})
}
func (c *Instance) Delete(id uint64) error {
mSysDepartment := model.NewSysDepartment()
mSysDepartment.ID = id
if err := model2.Delete(mSysDepartment.SysDepartment); err != nil {
return err
}
return nil
}
func NewInstance() InstanceHandle {
return func(session *session.Admin) *Instance {
return &Instance{Admin: session}
}
}

View File

@ -7,11 +7,19 @@ import (
type (
Tree struct {
ID string `json:"id"`
ParentID string `json:"parent_id"`
*model2.SysMenu
Path string `json:"path"`
Hidden int `json:"hidden"`
Children []*Tree `json:"children"`
}
TreeChecked struct {
ID string `json:"id"`
ParentID string `json:"parent_id"`
*model2.SysMenuBasic
Path string `json:"path"`
Hidden int `json:"hidden"`
Checked bool `json:"checked"`
Children []*TreeChecked `json:"children"`
}
@ -24,7 +32,11 @@ func tree(src []*model2.SysMenu, parentID uint64) []*Tree {
for _, v := range src {
if v.ParentID == parentID {
out = append(out, &Tree{
ID: v.GetEncodeID(),
ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(),
SysMenu: v,
Path: v.Link,
Hidden: int(v.IsHidden),
Children: tree(src, v.ID),
})
}
@ -39,7 +51,11 @@ func TreeCheckedFunc(src []*model.SysMenuScene, parentID uint64) []*TreeChecked
for _, v := range src {
if v.ParentID == parentID {
out = append(out, &TreeChecked{
ID: v.GetEncodeID(),
ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(),
SysMenuBasic: v.SysMenuBasic,
Path: v.Link,
Hidden: int(v.IsHidden),
Checked: v.SceneID > 0,
Children: TreeCheckedFunc(src, v.ID),
})
@ -58,9 +74,9 @@ func menuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree,
return tree(out, 0), nil
}
// MenuForSystem 系统管理员菜单
func MenuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree, error) {
out, err := iModel.(*model.SysMenu).SystemMenu(where...)
// menuForTenant 租户人员菜单
func menuForTenant(iModel model2.IModel, tenantID uint64, where ...*model2.ModelWhere) ([]*Tree, error) {
out, err := iModel.(*model.SysMenu).TenantMenu(tenantID, where...)
if err != nil {
return nil, err
@ -68,28 +84,39 @@ func MenuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree,
return tree(out, 0), nil
}
// MenuForTenant 租户人员菜单
func MenuForTenant(iModel model2.IModel, tenantID uint64) ([]*TreeChecked, error) {
out, err := iModel.(*model.SysMenu).TenantMenu(tenantID)
if err != nil {
return nil, err
}
return TreeCheckedFunc(out, 0), nil
// MenuForSystem 系统管理员菜单
func MenuForSystem(iModel model2.IModel, where ...*model2.ModelWhere) ([]*Tree, error) {
return menuForSystem(iModel, where...)
}
func MenuForRole(iModel model2.IModel, tenantID uint64, roleID uint64) ([]*TreeChecked, error) {
out, err := iModel.(*model.SysMenu).RoleMenu(tenantID, roleID)
if err != nil {
return nil, err
}
return TreeCheckedFunc(out, 0), nil
// MenuForTenant 租户人员菜单
func MenuForTenant(iModel model2.IModel, tenantID uint64, where ...*model2.ModelWhere) ([]*Tree, error) {
return menuForTenant(iModel, tenantID, where...)
}
// MenuForUser 当前用户菜单
func MenuForUser(iModel model2.IModel, tenantID uint64, uid uint64) ([]*TreeChecked, error) {
out, err := iModel.(*model.SysMenu).UserMenu(tenantID, uid)
func MenuForUser(iModel model2.IModel, tenantID uint64, uid uint64, where ...*model2.ModelWhere) ([]*Tree, error) {
out, err := iModel.(*model.SysMenu).UserMenu(tenantID, uid, where...)
if err != nil {
return nil, err
}
return tree(out, 0), nil
}
// MenuForTenantChecked 租户选中菜单
func MenuForTenantChecked(iModel model2.IModel, tenantID uint64) ([]*TreeChecked, error) {
out, err := iModel.(*model.SysMenu).TenantMenuChecked(tenantID)
if err != nil {
return nil, err
}
return TreeCheckedFunc(out, 0), nil
}
// MenuForRoleChecked 角色选中菜单
func MenuForRoleChecked(iModel model2.IModel, tenantID uint64, roleID uint64) ([]*TreeChecked, error) {
out, err := iModel.(*model.SysMenu).RoleMenuChecked(tenantID, roleID)
if err != nil {
return nil, err
}

View File

@ -16,24 +16,24 @@ type InstanceHandle func(session *session.Admin) *Instance
type (
// InstanceParams 菜单参数
InstanceParams struct {
ID, ParentID uint64
Kind, Auth int
Name, Link, Component, Icon string
Sort, Status int
Remark string
ID, ParentID uint64
Kind, Auth int
Name, Link, Component, Icon string
Sort, IsCache, IsHidden, Status int
Remark string
}
)
// List 列表信息
func (c *Instance) List() ([]*Tree, error) {
// Index 列表信息
func (c *Instance) Index() ([]*Tree, error) {
// 总管理:
// 租户管理:
mSysMenu := model.NewSysMenu()
auth := []model2.SysMenuAuth{model2.SysMenuAuthForOrdinary}
if c.IsAdmin {
auth = append(auth, model2.SysMenuAuthForSystem)
if c.IsAdmin && c.TenantID <= 0 {
return menuForSystem(mSysMenu)
}
return menuForSystem(mSysMenu, model2.NewWhereIn("auth", auth))
return menuForTenant(mSysMenu, c.TenantID)
}
// Form 数据操作
@ -46,11 +46,13 @@ func (c *Instance) Form(params *InstanceParams) error {
Kind: model2.SysMenuKind(params.Kind),
Link: params.Link,
Component: params.Component,
IsCache: model2.SysMenuCacheStatus(params.IsCache),
IsHidden: model2.SysMenuHiddenStatus(params.IsHidden),
Icon: params.Icon,
},
Auth: model2.SysMenuAuth(params.Auth),
Sort: params.Sort,
Status: model2.SysMenuStatusForNormal,
Status: model2.SysMenuStatus(params.Status),
Remark: params.Remark,
})
}
@ -62,7 +64,7 @@ func (c *Instance) Form(params *InstanceParams) error {
if err != nil {
return err
} else if !isExist {
return errors.New("菜单信息不存在")
return errors.New("操作错误,菜单信息不存在")
}
out.ParentID = params.ParentID
out.Name = params.Name
@ -71,6 +73,8 @@ func (c *Instance) Form(params *InstanceParams) error {
out.Component = params.Component
out.Icon = params.Icon
out.Auth = model2.SysMenuAuth(params.Auth)
out.IsCache = model2.SysMenuCacheStatus(params.IsCache)
out.IsHidden = model2.SysMenuHiddenStatus(params.IsHidden)
out.Sort = params.Sort
out.Status = model2.SysMenuStatus(params.Status)
out.Remark = params.Remark

View File

@ -5,20 +5,23 @@ import (
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"SciencesServer/app/session"
"SciencesServer/serve/logger"
"SciencesServer/utils"
"errors"
"fmt"
"time"
)
type Instance struct{ *controller.Platform }
type Instance struct{ *session.Admin }
type InstanceHandle func(session *service.Session) *Instance
type InstanceHandle func(session *session.Admin) *Instance
type (
// InstanceInfo 角色信息
InstanceInfo struct {
ID string `json:"id"`
*model2.SysRole
StatusTitle string `json:"status_title"`
}
// InstanceBasicInfo 角色基本信息
InstanceBasicInfo struct {
@ -27,14 +30,14 @@ type (
}
)
// List 列表信息
func (c *Instance) List(name string, status, page, pageSize int) (*controller.ReturnPages, error) {
// Index 列表信息
func (c *Instance) Index(name string, page, pageSize int) (*controller.ReturnPages, error) {
mSysRole := model.NewSysRole()
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("sort", model2.OrderModeToDesc),
Order: model2.NewOrder("sort", model2.OrderModeToAsc),
},
&model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc),
@ -42,12 +45,7 @@ func (c *Instance) List(name string, status, page, pageSize int) (*controller.Re
}
if name != "" {
where = append(where, &model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
})
}
if status > 0 {
where = append(where, &model2.ModelWhereOrder{
Where: model2.NewWhere("status", status),
Where: model2.NewWhereLike("name", name),
})
}
var count int64
@ -60,7 +58,7 @@ func (c *Instance) List(name string, status, page, pageSize int) (*controller.Re
list := make([]*InstanceInfo, 0)
for _, v := range out {
list = append(list, &InstanceInfo{SysRole: v, StatusTitle: v.StatusTitle()})
list = append(list, &InstanceInfo{ID: v.GetEncodeID(), SysRole: v})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
@ -73,10 +71,9 @@ func (c *Instance) Select() ([]*InstanceBasicInfo, error) {
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("sort", model2.OrderModeToDesc),
Order: model2.NewOrder("sort", model2.OrderModeToAsc),
},
&model2.ModelWhereOrder{
Where: model2.NewWhere("status", model2.SysRoleStatusForNormal),
Order: model2.NewOrder("id", model2.OrderModeToDesc),
},
}
@ -88,8 +85,8 @@ func (c *Instance) Select() ([]*InstanceBasicInfo, error) {
return out, nil
}
// Data 数据操作
func (c *Instance) Data(id uint64, name, remark string, sort int) error {
// Form 数据操作
func (c *Instance) Form(id uint64, name, remark string, sort int) error {
mSysRole := model.NewSysRole()
if id <= 0 {
@ -147,27 +144,28 @@ func (c *Instance) Delete(id uint64) error {
if err != nil {
return err
} else if !isExist {
return errors.New("角色不存在")
}
if c.TenantID > 0 && c.TenantID != mSysRole.TenantID {
return errors.New("不可删除其他租户角色")
return errors.New("操作错误,角色信息不存在")
} else if c.TenantID > 0 && c.TenantID != mSysRole.TenantID {
return errors.New("操作错误,无权限操作")
}
if err = model2.Delete(mSysRole.SysRole); err != nil {
return err
}
go utils.TryCatch(func() {
//permission := service.NewPermission([]string{utils.UintToString(id)})(c.TenantKey, "")
//// 删除角色权限
//if _, err = permission.RemoveRolePolicy(); err != nil {
// logger.ErrorF("删除租户【%s】下角色【%d】权限信息错误%v", c.TenantKey, id, err)
// return
//}
permission := service.NewPermission(
service.WithAuthTenant(fmt.Sprintf("%d", mSysRole.TenantID)),
service.WithAuthRoles([]string{fmt.Sprintf("%d", id)}),
)
if _, err = permission.RemoveRolePolicy(); err != nil {
logger.ErrorF("Casbin 删除租户【%d】下角色【%d】权限信息错误%v", mSysRole.TenantID, id, err)
return
}
})
return nil
}
func NewInstance() InstanceHandle {
return func(session *service.Session) *Instance {
return &Instance{Platform: &controller.Platform{Session: session}}
return func(session *session.Admin) *Instance {
return &Instance{Admin: session}
}
}

View File

@ -19,7 +19,7 @@ type MenuHandle func(session *service.Session) *Menu
// List 菜单列表
func (c *Menu) List(roleID uint64) ([]*menu2.TreeChecked, error) {
mSysMenu := model3.NewSysMenu()
return menu2.MenuForRole(mSysMenu, c.TenantID, roleID)
return menu2.MenuForRoleChecked(mSysMenu, c.TenantID, roleID)
}
// Bind 绑定菜单

View File

@ -27,7 +27,7 @@ func (c *Auth) delete(tenantID uint64, tenantKey string, tx *gorm.DB) error {
return err
}
go utils.TryCatch(func() {
permission := service.NewPermission(nil)(tenantKey, "")
permission := service.NewPermission(service.WithAuthTenant(tenantKey))
if succ, err := permission.RemoveFilteredGroupingPolicy(); err != nil {
logger.ErrorF("删除租户【%s】权限信息错误%v", tenantKey, err)

View File

@ -19,7 +19,7 @@ type MenuHandle func(session *service.Session) *Menu
// List 菜单列表
func (c *Menu) List(tenantID uint64) ([]*menu2.TreeChecked, error) {
mSysMenu := model3.NewSysMenu()
return menu2.MenuForTenant(mSysMenu, tenantID)
return menu2.MenuForTenantChecked(mSysMenu, tenantID)
}
// Bind 绑定菜单

View File

@ -7,8 +7,13 @@ import (
"SciencesServer/app/service"
"SciencesServer/app/session"
"SciencesServer/config"
"SciencesServer/serve/logger"
"SciencesServer/serve/orm"
"SciencesServer/utils"
"errors"
"fmt"
"gorm.io/gorm"
"strings"
"time"
)
@ -21,9 +26,12 @@ type (
InstanceInfo struct {
ID string `json:"id"`
InstanceUserInfo
Gender model2.GenderKind `json:"gender"`
IsAdmin model2.SysUserAdministrator `json:"is_admin"`
CreatedAt time.Time `json:"created_at"`
Gender model2.GenderKind `json:"gender"`
IsAdmin model2.SysUserAdministrator `json:"is_admin"`
Status model2.SysUserStatus `json:"status"`
Department *InstanceDepartmentInfo `json:"department"`
Role *InstanceRoleInfo `json:"role"`
CreatedAt time.Time `json:"created_at"`
}
// InstanceUserInfo 用户信息
InstanceUserInfo struct {
@ -33,14 +41,85 @@ type (
Email string `json:"email"`
Mobile string `json:"mobile"`
}
// InstanceDepartmentInfo 部门信息
InstanceDepartmentInfo struct {
ID string `json:"id"`
Name string `json:"name"`
}
// InstanceRoleInfo 角色信息
InstanceRoleInfo struct {
IDs []string `json:"ids"`
Names []string `json:"names"`
}
)
// InstanceForm 表单信息
type InstanceForm struct {
ID uint64 // 租户用户主键ID
ID uint64
Account, Name, Mobile, Password, Remark string
Gender int
Departments, Roles []uint64
DepartmentID uint64
RoleIDs []uint64
}
func (c *InstanceForm) sync(tx *gorm.DB, first bool, uid, tenantID uint64) error {
var err error
mSysUserDepartment := model.NewSysUserDepartment()
mSysUserRole := model.NewSysUserRole()
permission := service.NewPermission(
service.WithAuthTenant(fmt.Sprintf("%d", tenantID)),
service.WithAuthUser(fmt.Sprintf("%d", uid)),
)
if !first {
if err = model2.DeleteWhere(mSysUserDepartment.SysUserDepartment, []*model2.ModelWhere{
model2.NewWhere("uid", uid)}, tx); err != nil {
return err
}
if err = model2.DeleteWhere(mSysUserRole.SysUserRole, []*model2.ModelWhere{
model2.NewWhere("uid", uid)}, tx); err != nil {
return err
}
go utils.TryCatch(func() {
if _, err = permission.DeleteRolesForUser(false); err != nil {
logger.ErrorF("Casbin 删除用户【%d】权限错误%v", uid, err)
}
})
}
if c.DepartmentID > 0 {
mSysUserDepartment.UID = uid
mSysUserDepartment.DepartmentID = c.DepartmentID
if err = model2.Create(mSysUserDepartment.SysUserDepartment, tx); err != nil {
return err
}
}
if len(c.RoleIDs) > 0 {
roles := make([]*model2.SysUserRole, 0)
rolesIDs := make([]string, 0)
for _, v := range c.RoleIDs {
roles = append(roles, &model2.SysUserRole{
UID: uid,
RoleID: v,
})
rolesIDs = append(rolesIDs, fmt.Sprintf("%d", v))
}
if err := model2.Creates(mSysUserRole.SysUserRole, roles, tx); err != nil {
return err
}
go utils.TryCatch(func() {
permission.AddRole(rolesIDs)
if _, err = permission.AddRoleForUser(); err != nil {
logger.ErrorF("Casbin 给予用户【%d】权限错误%v", uid, err)
}
})
}
return nil
}
// Info 用户信息
@ -60,50 +139,59 @@ func (c *Instance) Info() (*InstanceUserInfo, error) {
// Index 列表信息
func (c *Instance) Index(name, mobile string, status, page, pageSize int) (*controller.ReturnPages, error) {
where := []*model2.ModelWhereOrder{&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("id", model2.OrderModeToDesc),
}}
where := []*model2.ModelWhere{model2.NewWhere("u.tenant_id", c.TenantID)}
if name != "" {
where = append(where, &model2.ModelWhereOrder{
Where: model2.NewWhereLike("name", name),
})
where = append(where, model2.NewWhereLike("u.name", name))
}
if mobile != "" {
where = append(where, &model2.ModelWhereOrder{
Where: model2.NewWhereLike("mobile", mobile),
})
where = append(where, model2.NewWhereLike("u.mobile", mobile))
}
if status > 0 {
where = append(where, &model2.ModelWhereOrder{
Where: model2.NewWhere("status", status),
})
where = append(where, model2.NewWhere("u.status", status))
}
mSysUser := model.NewSysUser()
out := make([]*model2.SysUser, 0)
var count int64
if err := model2.PagesFields(mSysUser.SysUser, &out, []string{"id", "uuid", "account", "avatar", "name", "mobile", "gender",
"is_admin", "created_at"}, page, pageSize, &count, where...); err != nil {
out, err := mSysUser.Users(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*InstanceInfo, 0)
obj := new(model2.Model)
for _, v := range out {
list = append(list, &InstanceInfo{ID: v.GetEncodeID(),
data := &InstanceInfo{ID: v.GetEncodeID(),
InstanceUserInfo: InstanceUserInfo{
UID: v.UUIDString(),
Avatar: v.Avatar,
Name: v.Name,
Email: v.Email,
Mobile: v.Mobile,
UID: v.UUIDString(), Avatar: v.Avatar, Name: v.Name, Email: v.Email, Mobile: v.Mobile,
},
Gender: v.Gender.Gender,
IsAdmin: v.IsAdmin,
CreatedAt: v.CreatedAt,
})
Gender: v.Gender.Gender, IsAdmin: v.IsAdmin, Status: v.Status, CreatedAt: v.CreatedAt,
}
if v.DepartmentID > 0 {
obj.ID = v.DepartmentID
data.Department = &InstanceDepartmentInfo{
ID: obj.GetEncodeID(),
Name: v.DepartmentName,
}
}
if v.RoleIDs != "" {
roleIDs := make([]string, 0)
for _, v := range strings.Split(v.RoleIDs, "&&") {
obj.ID = utils.StringToUnit64(v)
roleIDs = append(roleIDs, obj.GetEncodeID())
}
roles := &InstanceRoleInfo{
IDs: roleIDs,
Names: strings.Split(v.RoleNames, "&&"),
}
data.Role = roles
}
list = append(list, data)
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
@ -123,14 +211,25 @@ func (c *Instance) Add(params *InstanceForm) error {
if err != nil {
return err
}
mSysUser.Account = params.Account
mSysUser.Name = params.Name
mSysUser.Mobile = params.Mobile
mSysUser.Gender.Gender = model2.GenderKind(params.Gender)
mSysUser.Password = params.Password
mSysUser.Remark = params.Remark
return model2.Create(mSysUser.SysUser)
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
mSysUser.TenantID = c.TenantID
mSysUser.Account = params.Account
mSysUser.Name = params.Name
mSysUser.Mobile = params.Mobile
mSysUser.Gender.Gender = model2.GenderKind(params.Gender)
mSysUser.Password = params.Password
mSysUser.Remark = params.Remark
if err = model2.Create(mSysUser.SysUser, tx); err != nil {
return err
}
if err = params.sync(tx, true, mSysUser.UUID, c.TenantID); err != nil {
return err
}
return nil
})
}
// Edit 修改用户信息
@ -166,7 +265,15 @@ func (c *Instance) Edit(params *InstanceForm) error {
mSysUser.Gender.Gender = model2.GenderKind(params.Gender)
mSysUser.Remark = params.Remark
return model2.Updates(mSysUser.SysUser, mSysUser.SysUser)
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
if err = model2.Updates(mSysUser.SysUser, mSysUser.SysUser, tx); err != nil {
return err
}
if err = params.sync(tx, false, mSysUser.UUID, mSysUser.TenantID); err != nil {
return err
}
return nil
})
}
func (c *Instance) Password(id uint64, password, repeatPwd string) error {

View File

@ -1,8 +1,9 @@
package user
import (
menu2 "SciencesServer/app/api/admin/controller/menu"
"SciencesServer/app/api/admin/controller/menu"
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
)
@ -10,26 +11,22 @@ type Menu struct{ *session.Admin }
type MenuHandle func(session *session.Admin) *Menu
// List 菜单列表
func (c *Menu) List() (interface{}, error) {
// Index 菜单列表
func (c *Menu) Index() ([]*menu.Tree, error) {
mSysMenu := model.NewSysMenu()
if c.IsAdmin {
return menu2.MenuForSystem(mSysMenu)
kinds := []model2.SysMenuKind{
model2.SysMenuKindForCatalogue,
model2.SysMenuKindForMenu,
}
//mSysUserTenant := model.NewSysUserTenant()
//
//if isExist, err := model2.FirstField(mSysUserTenant.SysUserTenant, []string{"id", "identity"},
// model2.NewWhere("tenant_id", c.TenantID), model2.NewWhere("uid", c.UID)); err != nil {
// return nil, err
//} else if !isExist {
// return nil, nil
//}
//if mSysUserTenant.Identity == model2.SysUserTenantIdentityForSystemAdmin {
// return menu2.MenuForTenant(mSysMenu, c.TenantID)
//}
//return menu2.MenuForUser(mSysMenu, c.TenantID, c.UID)
return nil, nil
if c.IsAdmin {
if c.TenantID > 0 {
return menu.MenuForTenant(mSysMenu, c.TenantID, model2.NewWhereIn("m.kind", kinds))
}
return menu.MenuForSystem(mSysMenu, model2.NewWhereIn("kind", kinds))
}
return menu.MenuForUser(mSysMenu, c.TenantID, c.UID, model2.NewWhereIn("m.kind", kinds))
}
func NewMenu() MenuHandle {