package controllers import ( "encoding/json" "server/models" beego "github.com/beego/beego/v2/server/web" ) // EmployeeController 员工控制器 type EmployeeController struct { beego.Controller } // GetAllEmployees 获取所有员工(可选,用于管理员查看所有员工) // @router /employees [get] func (c *EmployeeController) GetAllEmployees() { employees, err := models.GetAllEmployees() if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "获取员工列表失败: " + err.Error(), "data": nil, } } else { c.Data["json"] = map[string]interface{}{ "code": 0, "message": "获取员工列表成功", "data": employees, } } c.ServeJSON() } // GetTenantEmployees 获取租户下的所有员工 // @router /employees/tenant/:tenantId [get] func (c *EmployeeController) GetTenantEmployees() { 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 } employees, err := models.GetTenantEmployees(tenantId) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "获取员工列表失败: " + err.Error(), "data": nil, } c.ServeJSON() return } // 格式化返回数据 employeeList := make([]map[string]interface{}, 0) for _, emp := range employees { employeeList = append(employeeList, map[string]interface{}{ "id": emp.Id, "tenant_id": emp.TenantId, "employee_no": emp.EmployeeNo, "name": emp.Name, "phone": emp.Phone, "email": emp.Email, "department_id": emp.DepartmentId, "position_id": emp.PositionId, "bank_name": emp.BankName, "bank_account": emp.BankAccount, "status": emp.Status, "create_time": emp.CreateTime, }) } c.Data["json"] = map[string]interface{}{ "code": 0, "message": "获取员工列表成功", "data": employeeList, } c.ServeJSON() } // GetEmployeeInfo 获取员工详情 // @router /employees/:id [get] func (c *EmployeeController) GetEmployeeInfo() { id, err := c.GetInt(":id") if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工ID无效", "data": nil, } c.ServeJSON() return } employee, err := models.GetEmployeeById(id) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工不存在", "data": nil, } c.ServeJSON() 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, "bank_name": employee.BankName, "bank_account": employee.BankAccount, "status": employee.Status, "create_time": employee.CreateTime, }, } c.ServeJSON() } // AddEmployee 添加员工 // @router /employees [post] func (c *EmployeeController) AddEmployee() { var employeeData struct { TenantId int `json:"tenant_id"` EmployeeNo string `json:"employee_no"` Name string `json:"name"` Phone string `json:"phone"` Email string `json:"email"` DepartmentId int `json:"department_id"` PositionId int `json:"position_id"` BankName string `json:"bank_name"` BankAccount string `json:"bank_account"` Status int8 `json:"status"` } err := json.Unmarshal(c.Ctx.Input.RequestBody, &employeeData) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "请求参数错误: " + err.Error(), "data": nil, } c.ServeJSON() return } employee := &models.Employee{ TenantId: employeeData.TenantId, EmployeeNo: employeeData.EmployeeNo, Name: employeeData.Name, Phone: employeeData.Phone, Email: employeeData.Email, DepartmentId: employeeData.DepartmentId, PositionId: employeeData.PositionId, BankName: employeeData.BankName, BankAccount: employeeData.BankAccount, Status: employeeData.Status, } // 如果没有指定租户ID,从当前登录用户获取(需要JWT中间件支持) // 这里暂时使用传入的tenant_id,如果为0则使用默认值 if employee.TenantId == 0 { // 可以从JWT token中获取租户ID,这里暂时设为1作为默认值 employee.TenantId = 1 } // 默认密码 defaultPassword := "yunzer123" id, err := models.AddEmployee(employee, defaultPassword) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "添加员工失败: " + err.Error(), "data": nil, } c.ServeJSON() return } employee.Id = int(id) c.Data["json"] = map[string]interface{}{ "code": 0, "message": "添加员工成功", "data": employee, } c.ServeJSON() } // UpdateEmployee 更新员工信息 // @router /employees/:id [put] func (c *EmployeeController) UpdateEmployee() { id, err := c.GetInt(":id") if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工ID无效", "data": nil, } c.ServeJSON() return } var updateData struct { EmployeeNo string `json:"employee_no"` Name string `json:"name"` Phone string `json:"phone"` Email string `json:"email"` DepartmentId int `json:"department_id"` PositionId int `json:"position_id"` BankName string `json:"bank_name"` BankAccount string `json:"bank_account"` Status int8 `json:"status"` } err = json.Unmarshal(c.Ctx.Input.RequestBody, &updateData) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "请求参数错误: " + err.Error(), "data": nil, } c.ServeJSON() return } employee, err := models.GetEmployeeById(id) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工不存在", "data": nil, } c.ServeJSON() return } // 更新字段 employee.EmployeeNo = updateData.EmployeeNo employee.Name = updateData.Name employee.Phone = updateData.Phone employee.Email = updateData.Email employee.DepartmentId = updateData.DepartmentId employee.PositionId = updateData.PositionId employee.BankName = updateData.BankName employee.BankAccount = updateData.BankAccount employee.Status = updateData.Status if err := models.UpdateEmployee(employee); err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "更新员工信息失败: " + err.Error(), "data": nil, } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "code": 0, "message": "更新员工信息成功", "data": employee, } c.ServeJSON() } // DeleteEmployee 删除员工 // @router /employees/:id [delete] func (c *EmployeeController) DeleteEmployee() { id, err := c.GetInt(":id") if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工ID无效", "data": nil, } c.ServeJSON() return } if err := models.DeleteEmployee(id); err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "删除员工失败: " + err.Error(), "data": nil, } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "code": 0, "message": "删除员工成功", "data": nil, } c.ServeJSON() } // ResetEmployeePassword 重置员工密码 // @router /employees/:id/reset-password [post] func (c *EmployeeController) ResetEmployeePassword() { id, err := c.GetInt(":id") if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工ID无效", "data": nil, } c.ServeJSON() return } // 默认密码 defaultPassword := "yunzer123" if err := models.ResetEmployeePassword(id, defaultPassword); err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "重置密码失败: " + err.Error(), "data": nil, } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "code": 0, "message": "密码重置成功,新密码为: " + defaultPassword, "data": nil, } c.ServeJSON() } // ChangeEmployeePassword 修改员工密码 // @router /employees/:id/change-password [post] func (c *EmployeeController) ChangeEmployeePassword() { id, err := c.GetInt(":id") if err != nil || id <= 0 { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "员工ID无效", "data": nil, } c.ServeJSON() return } var passwordData struct { OldPassword string `json:"old_password"` NewPassword string `json:"new_password"` } err = json.Unmarshal(c.Ctx.Input.RequestBody, &passwordData) if err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "请求参数错误: " + err.Error(), "data": nil, } c.ServeJSON() return } if passwordData.NewPassword == "" { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "新密码不能为空", "data": nil, } c.ServeJSON() return } if err := models.ChangeEmployeePassword(id, passwordData.OldPassword, passwordData.NewPassword); err != nil { c.Data["json"] = map[string]interface{}{ "code": 1, "message": "修改密码失败: " + err.Error(), "data": nil, } c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "code": 0, "message": "密码修改成功", "data": nil, } c.ServeJSON() }