更新oa代码
This commit is contained in:
@@ -3,6 +3,7 @@ package controllers
|
||||
import (
|
||||
"encoding/json"
|
||||
"server/models"
|
||||
"server/services"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -63,7 +64,7 @@ func (c *AuthController) Login() {
|
||||
}
|
||||
|
||||
// 验证用户(先检查用户表,找不到再检查员工表)
|
||||
user, employee, err := models.ValidateUser(username, password, tenantName)
|
||||
user, employee, err := services.ValidateUser(username, password, tenantName)
|
||||
|
||||
if err != nil {
|
||||
// 登录失败
|
||||
|
||||
@@ -3,6 +3,7 @@ package controllers
|
||||
import (
|
||||
"encoding/json"
|
||||
"server/models"
|
||||
"server/services"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
@@ -15,7 +16,7 @@ type EmployeeController struct {
|
||||
// GetAllEmployees 获取所有员工(可选,用于管理员查看所有员工)
|
||||
// @router /employees [get]
|
||||
func (c *EmployeeController) GetAllEmployees() {
|
||||
employees, err := models.GetAllEmployees()
|
||||
employees, err := services.GetAllEmployees()
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -46,7 +47,7 @@ func (c *EmployeeController) GetTenantEmployees() {
|
||||
return
|
||||
}
|
||||
|
||||
employees, err := models.GetTenantEmployees(tenantId)
|
||||
employees, err := services.GetTenantEmployees(tenantId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -87,7 +88,7 @@ func (c *EmployeeController) GetTenantEmployees() {
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
// GetEmployeeInfo 获取员工详情
|
||||
// GetEmployeeInfo 获取员工详情(包含关联的部门、职位、角色信息)
|
||||
// @router /employees/:id [get]
|
||||
func (c *EmployeeController) GetEmployeeInfo() {
|
||||
id, err := c.GetInt(":id")
|
||||
@@ -101,7 +102,8 @@ func (c *EmployeeController) GetEmployeeInfo() {
|
||||
return
|
||||
}
|
||||
|
||||
employee, err := models.GetEmployeeById(id)
|
||||
// 使用联查方法获取员工详细信息
|
||||
detail, err := services.GetEmployeeDetailWithRelations(id)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -112,27 +114,67 @@ func (c *EmployeeController) GetEmployeeInfo() {
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "获取员工信息成功",
|
||||
"data": map[string]interface{}{
|
||||
"id": employee.Id,
|
||||
"tenant_id": employee.TenantId,
|
||||
"employee_no": employee.EmployeeNo,
|
||||
"name": employee.Name,
|
||||
"phone": employee.Phone,
|
||||
"email": employee.Email,
|
||||
"department_id": employee.DepartmentId,
|
||||
"position_id": employee.PositionId,
|
||||
"role": employee.Role,
|
||||
"bank_name": employee.BankName,
|
||||
"bank_account": employee.BankAccount,
|
||||
"status": employee.Status,
|
||||
"create_time": employee.CreateTime,
|
||||
"last_login_time": employee.LastLoginTime,
|
||||
"last_login_ip": employee.LastLoginIp,
|
||||
},
|
||||
// 构建返回数据
|
||||
employeeData := map[string]interface{}{
|
||||
"id": detail.Employee.Id,
|
||||
"tenant_id": detail.Employee.TenantId,
|
||||
"employee_no": detail.Employee.EmployeeNo,
|
||||
"name": detail.Employee.Name,
|
||||
"phone": detail.Employee.Phone,
|
||||
"email": detail.Employee.Email,
|
||||
"department_id": detail.Employee.DepartmentId,
|
||||
"position_id": detail.Employee.PositionId,
|
||||
"role": detail.Employee.Role,
|
||||
"bank_name": detail.Employee.BankName,
|
||||
"bank_account": detail.Employee.BankAccount,
|
||||
"status": detail.Employee.Status,
|
||||
"create_time": detail.Employee.CreateTime,
|
||||
"last_login_time": detail.Employee.LastLoginTime,
|
||||
"last_login_ip": detail.Employee.LastLoginIp,
|
||||
}
|
||||
|
||||
// 添加部门详细信息(如果存在)
|
||||
if detail.Department != nil {
|
||||
employeeData["department"] = map[string]interface{}{
|
||||
"id": detail.Department.Id,
|
||||
"name": detail.Department.Name,
|
||||
"code": detail.Department.Code,
|
||||
"tenant_id": detail.Department.TenantId,
|
||||
"parent_id": detail.Department.ParentId,
|
||||
"description": detail.Department.Description,
|
||||
}
|
||||
}
|
||||
|
||||
// 添加职位详细信息(如果存在)
|
||||
if detail.Position != nil {
|
||||
employeeData["position"] = map[string]interface{}{
|
||||
"id": detail.Position.Id,
|
||||
"name": detail.Position.Name,
|
||||
"code": detail.Position.Code,
|
||||
"tenant_id": detail.Position.TenantId,
|
||||
"department_id": detail.Position.DepartmentId,
|
||||
"level": detail.Position.Level,
|
||||
"description": detail.Position.Description,
|
||||
}
|
||||
}
|
||||
|
||||
// 添加角色详细信息(如果存在)
|
||||
if detail.Role != nil {
|
||||
employeeData["role_detail"] = map[string]interface{}{
|
||||
"roleId": detail.Role.RoleId,
|
||||
"roleName": detail.Role.RoleName,
|
||||
"roleCode": detail.Role.RoleCode,
|
||||
"tenantId": detail.Role.TenantId,
|
||||
"description": detail.Role.Description,
|
||||
"status": detail.Role.Status,
|
||||
}
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "获取员工信息成功",
|
||||
"data": employeeData,
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
@@ -195,7 +237,7 @@ func (c *EmployeeController) AddEmployee() {
|
||||
|
||||
// 默认密码
|
||||
defaultPassword := "yunzer123"
|
||||
id, err := models.AddEmployee(employee, defaultPassword)
|
||||
id, err := services.AddEmployee(employee, defaultPassword)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -253,7 +295,7 @@ func (c *EmployeeController) UpdateEmployee() {
|
||||
return
|
||||
}
|
||||
|
||||
employee, err := models.GetEmployeeById(id)
|
||||
employee, err := services.GetEmployeeById(id)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -276,7 +318,7 @@ func (c *EmployeeController) UpdateEmployee() {
|
||||
employee.BankAccount = updateData.BankAccount
|
||||
employee.Status = int8(updateData.Status) // 转换为int8
|
||||
|
||||
if err := models.UpdateEmployee(employee); err != nil {
|
||||
if err := services.UpdateEmployee(employee); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "更新员工信息失败: " + err.Error(),
|
||||
@@ -308,7 +350,7 @@ func (c *EmployeeController) DeleteEmployee() {
|
||||
return
|
||||
}
|
||||
|
||||
if err := models.DeleteEmployee(id); err != nil {
|
||||
if err := services.DeleteEmployee(id); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "删除员工失败: " + err.Error(),
|
||||
@@ -343,7 +385,7 @@ func (c *EmployeeController) ResetEmployeePassword() {
|
||||
// 默认密码
|
||||
defaultPassword := "yunzer123"
|
||||
|
||||
if err := models.ResetEmployeePassword(id, defaultPassword); err != nil {
|
||||
if err := services.ResetEmployeePassword(id, defaultPassword); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "重置密码失败: " + err.Error(),
|
||||
@@ -401,7 +443,7 @@ func (c *EmployeeController) ChangeEmployeePassword() {
|
||||
return
|
||||
}
|
||||
|
||||
if err := models.ChangeEmployeePassword(id, passwordData.OldPassword, passwordData.NewPassword); err != nil {
|
||||
if err := services.ChangeEmployeePassword(id, passwordData.OldPassword, passwordData.NewPassword); err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "修改密码失败: " + err.Error(),
|
||||
|
||||
+28
-16
@@ -20,17 +20,23 @@ func (c *MenuController) GetAllMenus() {
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"success": false,
|
||||
"message": "获取菜单失败",
|
||||
"error": err.Error(),
|
||||
}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"success": true,
|
||||
"message": "获取菜单成功",
|
||||
"data": menus,
|
||||
"message": "获取菜单失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 确保返回数组,即使为空
|
||||
if menus == nil {
|
||||
menus = []map[string]interface{}{}
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"success": true,
|
||||
"message": "获取菜单成功",
|
||||
"data": menus,
|
||||
}
|
||||
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
@@ -55,14 +61,20 @@ func (c *MenuController) GetTenantMenus() {
|
||||
"message": "获取菜单失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
} else {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"success": true,
|
||||
"message": "获取菜单成功",
|
||||
"data": menus,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 确保返回数组,即使为空
|
||||
if menus == nil {
|
||||
menus = []map[string]interface{}{}
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"success": true,
|
||||
"message": "获取菜单成功",
|
||||
"data": menus,
|
||||
}
|
||||
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"server/services"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// OAController OA基础数据控制器
|
||||
type OAController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// GetOABaseData 获取OA基础数据(部门、职位、角色)
|
||||
// 这是一个合并接口,用于一次性获取所有基础数据,减少网络请求次数
|
||||
// @router /api/oa/base-data/:tenantId [get]
|
||||
func (c *OAController) GetOABaseData() {
|
||||
tenantId, err := c.GetInt(":tenantId")
|
||||
if err != nil || tenantId < 0 {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "租户ID无效",
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 调用 services 层获取数据
|
||||
baseData, err := services.GetOABaseData(tenantId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取基础数据失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
// 预分配切片容量,减少内存分配
|
||||
deptCount := len(baseData.Departments)
|
||||
posCount := len(baseData.Positions)
|
||||
roleCount := len(baseData.Roles)
|
||||
|
||||
// 格式化部门数据(预分配容量)
|
||||
deptList := make([]map[string]interface{}, 0, deptCount)
|
||||
for _, dept := range baseData.Departments {
|
||||
deptList = append(deptList, map[string]interface{}{
|
||||
"id": dept.Id,
|
||||
"tenant_id": dept.TenantId,
|
||||
"name": dept.Name,
|
||||
"code": dept.Code,
|
||||
"parent_id": dept.ParentId,
|
||||
"description": dept.Description,
|
||||
"manager_id": dept.ManagerId,
|
||||
"sort_order": dept.SortOrder,
|
||||
"status": dept.Status,
|
||||
"create_time": dept.CreateTime,
|
||||
"update_time": dept.UpdateTime,
|
||||
})
|
||||
}
|
||||
|
||||
// 格式化职位数据(预分配容量)
|
||||
posList := make([]map[string]interface{}, 0, posCount)
|
||||
for _, pos := range baseData.Positions {
|
||||
posList = append(posList, map[string]interface{}{
|
||||
"id": pos.Id,
|
||||
"tenant_id": pos.TenantId,
|
||||
"name": pos.Name,
|
||||
"code": pos.Code,
|
||||
"department_id": pos.DepartmentId,
|
||||
"level": pos.Level,
|
||||
"description": pos.Description,
|
||||
"sort_order": pos.SortOrder,
|
||||
"status": pos.Status,
|
||||
"create_time": pos.CreateTime,
|
||||
"update_time": pos.UpdateTime,
|
||||
})
|
||||
}
|
||||
|
||||
// 格式化角色数据(预分配容量)
|
||||
roleList := make([]map[string]interface{}, 0, roleCount)
|
||||
for _, role := range baseData.Roles {
|
||||
roleList = append(roleList, map[string]interface{}{
|
||||
"roleId": role.RoleId,
|
||||
"tenantId": role.TenantId,
|
||||
"roleCode": role.RoleCode,
|
||||
"roleName": role.RoleName,
|
||||
"description": role.Description,
|
||||
"status": role.Status,
|
||||
"sortOrder": role.SortOrder,
|
||||
"createTime": role.CreateTime,
|
||||
"updateTime": role.UpdateTime,
|
||||
})
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "获取基础数据成功",
|
||||
"data": map[string]interface{}{
|
||||
"departments": deptList,
|
||||
"positions": posList,
|
||||
"roles": roleList,
|
||||
},
|
||||
}
|
||||
c.ServeJSON()
|
||||
}
|
||||
|
||||
@@ -74,14 +74,22 @@ func (c *RoleController) GetRoleById() {
|
||||
return
|
||||
}
|
||||
|
||||
// 确保 menuIds 是数组,即使为空
|
||||
menuIds := role.MenuIds
|
||||
if menuIds == nil {
|
||||
menuIds = []int{}
|
||||
}
|
||||
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 0,
|
||||
"message": "获取角色详情成功",
|
||||
"data": map[string]interface{}{
|
||||
"roleId": role.RoleId,
|
||||
"tenantId": role.TenantId,
|
||||
"roleCode": role.RoleCode,
|
||||
"roleName": role.RoleName,
|
||||
"description": role.Description,
|
||||
"menuIds": menuIds,
|
||||
"status": role.Status,
|
||||
"sortOrder": role.SortOrder,
|
||||
"createTime": role.CreateTime,
|
||||
@@ -176,7 +184,7 @@ func (c *RoleController) CreateRole() {
|
||||
role.Status = 1
|
||||
}
|
||||
|
||||
id, err := models.CreateRole(&role)
|
||||
err = models.CreateRole(&role)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -191,7 +199,7 @@ func (c *RoleController) CreateRole() {
|
||||
"code": 0,
|
||||
"message": "创建角色成功",
|
||||
"data": map[string]interface{}{
|
||||
"roleId": id,
|
||||
"roleId": role.RoleId,
|
||||
},
|
||||
}
|
||||
c.ServeJSON()
|
||||
@@ -307,7 +315,13 @@ func (c *RoleController) DeleteRole() {
|
||||
return
|
||||
}
|
||||
|
||||
err = models.DeleteRole(roleId)
|
||||
// 获取当前用户名(用于记录删除操作)
|
||||
updateBy := "system"
|
||||
if username, ok := c.Ctx.Input.GetData("username").(string); ok && username != "" {
|
||||
updateBy = username
|
||||
}
|
||||
|
||||
err = models.DeleteRole(roleId, updateBy)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
|
||||
+27
-18
@@ -2,7 +2,7 @@ package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"server/models"
|
||||
"server/services"
|
||||
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
@@ -14,7 +14,16 @@ type UserController struct {
|
||||
// GetAllUsers 获取所有用户
|
||||
func (c *UserController) GetAllUsers() {
|
||||
tenantId, _ := c.GetInt("tenant_id", 0)
|
||||
users := models.GetAllUsers(tenantId)
|
||||
users, err := services.GetAllUsers(tenantId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
"message": "获取用户列表失败: " + err.Error(),
|
||||
"data": nil,
|
||||
}
|
||||
c.ServeJSON()
|
||||
return
|
||||
}
|
||||
|
||||
userList := make([]map[string]interface{}, 0)
|
||||
for _, user := range users {
|
||||
@@ -53,8 +62,8 @@ func (c *UserController) GetTenantUsers() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型层方法查询
|
||||
users, err := models.GetTenantUsers(tenantId)
|
||||
// 调用服务层方法查询
|
||||
users, err := services.GetTenantUsers(tenantId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -134,7 +143,7 @@ func (c *UserController) ChangePassword() {
|
||||
}
|
||||
|
||||
// 先获取用户信息
|
||||
user, err := models.GetUserInfo(userId, "", 0)
|
||||
user, err := services.GetUserInfo(userId, "", 0)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -145,8 +154,8 @@ func (c *UserController) ChangePassword() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型方法修改密码
|
||||
err = models.ChangePassword(user.Username, changeData.OldPassword, changeData.NewPassword, user.TenantId)
|
||||
// 调用服务层方法修改密码
|
||||
err = services.ChangePassword(user.Username, changeData.OldPassword, changeData.NewPassword, user.TenantId)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -177,8 +186,8 @@ func (c *UserController) GetUserInfo() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型层方法根据ID查询
|
||||
user, err := models.GetUserInfo(userId, "", 0)
|
||||
// 调用服务层方法根据ID查询
|
||||
user, err := services.GetUserInfo(userId, "", 0)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -262,8 +271,8 @@ func (c *UserController) AddUser() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型层方法添加用户(传递参数,接收新用户对象)
|
||||
newUser, err := models.AddUser(
|
||||
// 调用服务层方法添加用户(传递参数,接收新用户对象)
|
||||
newUser, err := services.AddUser(
|
||||
userData.Username,
|
||||
userData.Password,
|
||||
userData.Email,
|
||||
@@ -335,8 +344,8 @@ func (c *UserController) EditUser() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型层方法更新用户
|
||||
_, err = models.EditUser(
|
||||
// 调用服务层方法更新用户
|
||||
_, err = services.EditUser(
|
||||
updateData.Id,
|
||||
updateData.Username,
|
||||
updateData.Email,
|
||||
@@ -376,7 +385,7 @@ func (c *UserController) DeleteUser() {
|
||||
}
|
||||
|
||||
// 先查询用户信息,检查是否为admin账号
|
||||
user, err := models.GetUserInfo(userId, "", 0)
|
||||
user, err := services.GetUserInfo(userId, "", 0)
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
"code": 1,
|
||||
@@ -398,8 +407,8 @@ func (c *UserController) DeleteUser() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型层方法删除用户
|
||||
err = models.DeleteUser(userId)
|
||||
// 调用服务层方法删除用户
|
||||
err = services.DeleteUser(userId)
|
||||
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{
|
||||
@@ -444,8 +453,8 @@ func (c *UserController) ResetPassword() {
|
||||
return
|
||||
}
|
||||
|
||||
// 调用模型方法
|
||||
err := models.ResetPassword(username, superPassword, tenantId)
|
||||
// 调用服务层方法
|
||||
err := services.ResetPassword(username, superPassword, tenantId)
|
||||
|
||||
if err != nil {
|
||||
c.Data["json"] = map[string]interface{}{"success": false, "message": err.Error()}
|
||||
|
||||
Reference in New Issue
Block a user