feat: 完成产线与仓储系统多模块迭代升级
本次迭代覆盖MES与WMS核心业务: 1. 新增接驳台托盘传感器读取与AGV对接能力 2. 完善工单排产、备料流程与权限体系拆分 3. 优化看板接口与前端路由、样式 4. 新增操作日志、库存盘点与角色保护逻辑 5. 修复代理地址、BOM保存等已知问题
This commit is contained in:
@@ -198,9 +198,14 @@ func createUserHandler(ctx *svc.ServiceContext) http.HandlerFunc {
|
||||
}
|
||||
role := roleOrDefault(req.Role)
|
||||
// role 字符串与 role_id 用同一角色语义:优先 role_id(数据化),否则按字符串回退。
|
||||
// 若用户给的是 role_code,尝试从 roles 表反查 role_id。
|
||||
// 显式给 role_id 时回填 role 字符串为该角色实际 code(前端 UserManage 只传 roleId,避免 role 落成 operator);
|
||||
// 只给 role_code 时反查 roles 表补 role_id。
|
||||
roleID := req.RoleID
|
||||
if roleID == 0 {
|
||||
if roleID > 0 {
|
||||
if rl, err := ctx.EntClient.Role.Get(ctx0(), roleID); err == nil {
|
||||
role = rl.Code
|
||||
}
|
||||
} else if role != "" {
|
||||
if rl, err := ctx.EntClient.Role.Query().Where(userrole.CodeEQ(role)).Only(ctx0()); err == nil {
|
||||
roleID = rl.ID
|
||||
}
|
||||
@@ -217,6 +222,8 @@ func createUserHandler(ctx *svc.ServiceContext) http.HandlerFunc {
|
||||
fail(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
ctx.EventLog.Write(ctx0(), "user.create", r.Header.Get("X-Username"), "user", strconv.Itoa(u.ID),
|
||||
"新建账号 "+u.Username, map[string]any{"roleId": roleID, "dept": req.Dept})
|
||||
ok(w, userDTO(u))
|
||||
})
|
||||
}
|
||||
@@ -251,11 +258,17 @@ func updateUserHandler(ctx *svc.ServiceContext) http.HandlerFunc {
|
||||
if req.RealName != "" {
|
||||
upd.SetRealName(req.RealName)
|
||||
}
|
||||
if req.Role != "" {
|
||||
upd.SetRole(roleOrDefault(req.Role))
|
||||
}
|
||||
if req.RoleID > 0 {
|
||||
upd.SetRoleID(req.RoleID)
|
||||
// 显式给 role_id:同步回填 role 字符串为该角色实际 code,避免双字段不一致
|
||||
if rl, err := ctx.EntClient.Role.Get(ctx0(), req.RoleID); err == nil {
|
||||
upd.SetRole(rl.Code).SetRoleID(rl.ID)
|
||||
}
|
||||
} else if req.Role != "" {
|
||||
role := roleOrDefault(req.Role)
|
||||
upd.SetRole(role)
|
||||
if rl, err := ctx.EntClient.Role.Query().Where(userrole.CodeEQ(role)).Only(ctx0()); err == nil {
|
||||
upd.SetRoleID(rl.ID)
|
||||
}
|
||||
}
|
||||
if req.Dept != "" {
|
||||
upd.SetNillableDept(strPtr(req.Dept))
|
||||
@@ -281,6 +294,12 @@ func updateUserHandler(ctx *svc.ServiceContext) http.HandlerFunc {
|
||||
fail(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
ctx.EventLog.Write(ctx0(), "user.update", r.Header.Get("X-Username"), "user", strconv.Itoa(u.ID),
|
||||
"编辑账号 "+target.Username, map[string]any{
|
||||
"resetPassword": req.Password != "",
|
||||
"isActive": req.IsActive != nil,
|
||||
"changedRole": req.Role != "" || req.RoleID > 0,
|
||||
})
|
||||
ok(w, userDTO(u))
|
||||
})
|
||||
}
|
||||
@@ -322,6 +341,8 @@ func deleteUserHandler(ctx *svc.ServiceContext) http.HandlerFunc {
|
||||
fail(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
ctx.EventLog.Write(ctx0(), "user.delete", r.Header.Get("X-Username"), "user", strconv.Itoa(req.ID),
|
||||
"删除账号 "+target.Username, map[string]any{"role": target.Role})
|
||||
ok(w, nil)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user