更新oa代码

This commit is contained in:
2025-11-06 15:56:29 +08:00
parent 9c67793fc3
commit 6a9b5d413a
60 changed files with 6194 additions and 2757 deletions
+2 -1
View File
@@ -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 {
// 登录失败
+72 -30
View File
@@ -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
View File
@@ -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()
}
+109
View File
@@ -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()
}
+17 -3
View File
@@ -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
View File
@@ -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()}