feat: 完成产线MES系统全流程功能迭代与优化
本提交完成了多个核心模块的功能完善与业务对齐: 1. 工位终端:固定工位配置、移除自选工位逻辑、适配配置化工位号 2. MES核心:重构工位组合逻辑、新增工单/流程状态管理、补全报工/追溯逻辑 3. WMS客户端:新增修改密码功能、优化帮助弹窗逻辑 4. 文档与权限:补充完整操作手册、统一菜单名称与权限描述 5. 修复多业务校验:排产数量校验、工单状态校验、工位绑定规则
This commit is contained in:
@@ -124,3 +124,52 @@ func roleOrDefault(r string) string {
|
||||
return "operator"
|
||||
}
|
||||
}
|
||||
|
||||
// changePasswordHandler POST /api/user/change-password(需登录 JWT)
|
||||
// 当前登录用户修改自己的密码;登录人由中间件写入的 X-Username 头确定。
|
||||
func changePasswordHandler(ctx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
username := strings.TrimSpace(r.Header.Get("X-Username"))
|
||||
if username == "" {
|
||||
fail(w, http.StatusUnauthorized, "未登录或登录状态缺失")
|
||||
return
|
||||
}
|
||||
var req struct {
|
||||
OldPassword string `json:"oldPassword"`
|
||||
NewPassword string `json:"newPassword"`
|
||||
}
|
||||
if err := parseJSON(r, &req); err != nil {
|
||||
fail(w, http.StatusBadRequest, "参数错误")
|
||||
return
|
||||
}
|
||||
if req.OldPassword == "" || req.NewPassword == "" {
|
||||
fail(w, http.StatusBadRequest, "请输入旧密码和新密码")
|
||||
return
|
||||
}
|
||||
if len(req.NewPassword) < 6 {
|
||||
fail(w, http.StatusBadRequest, "新密码长度至少 6 位")
|
||||
return
|
||||
}
|
||||
u, err := ctx.EntClient.User.Query().
|
||||
Where(user.UsernameEQ(username)).
|
||||
Only(ctx0())
|
||||
if err != nil {
|
||||
fail(w, http.StatusNotFound, "用户不存在")
|
||||
return
|
||||
}
|
||||
if bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(req.OldPassword)) != nil {
|
||||
fail(w, http.StatusBadRequest, "旧密码不正确")
|
||||
return
|
||||
}
|
||||
hash, err := bcrypt.GenerateFromPassword([]byte(req.NewPassword), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
fail(w, http.StatusInternalServerError, "密码加密失败")
|
||||
return
|
||||
}
|
||||
if err := ctx.EntClient.User.UpdateOneID(u.ID).SetPassword(string(hash)).Exec(ctx0()); err != nil {
|
||||
fail(w, http.StatusInternalServerError, "密码保存失败")
|
||||
return
|
||||
}
|
||||
ok(w, nil)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,13 @@ func RegisterHandlers(server *rest.Server, ctx *svc.ServiceContext) {
|
||||
|
||||
server.Use(authInterceptor(ctx))
|
||||
|
||||
// 当前登录用户(JWT 鉴权)
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{Method: http.MethodPost, Path: "/api/user/change-password", Handler: changePasswordHandler(ctx)},
|
||||
},
|
||||
)
|
||||
|
||||
// 物料档案
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
|
||||
Reference in New Issue
Block a user