110 lines
2.9 KiB
Go
110 lines
2.9 KiB
Go
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()
|
||
}
|
||
|