fix: 校验物料名称和规格长度

This commit is contained in:
文睿 张 2026-10-12 15:37:54 +08:00
parent bc1352b918
commit ec293fa8b2
3 changed files with 29 additions and 2 deletions

View File

@ -510,6 +510,14 @@ async function handleSave() {
ElMessage.warning('请填写物料名称')
return
}
if (Array.from(form.name).length > 200) {
ElMessage.warning('物料名称过长,请小于200字')
return
}
if (Array.from(form.spec || '').length > 200) {
ElMessage.warning('物料规格过长,请小于200字')
return
}
saveLoading.value = true
try {
const formData = toMaterialPayload(form)

View File

@ -332,7 +332,7 @@ func (h *Handler) CreateMaterial(c *gin.Context) {
material, err := h.materialSvc.Create(&req, operator)
if err != nil {
if errors.Is(err, service.ErrInvalidMaterialCategory) || errors.Is(err, service.ErrInvalidMaterialUnit) {
if errors.Is(err, service.ErrInvalidMaterialCategory) || errors.Is(err, service.ErrInvalidMaterialUnit) || errors.Is(err, service.ErrMaterialNameTooLong) || errors.Is(err, service.ErrMaterialSpecTooLong) {
response.BadRequest(c, err.Error())
return
}
@ -371,7 +371,7 @@ func (h *Handler) UpdateMaterial(c *gin.Context) {
material, err := h.materialSvc.Update(orgID, id, &req, operator)
if err != nil {
if errors.Is(err, service.ErrInvalidMaterialCategory) || errors.Is(err, service.ErrInvalidMaterialUnit) {
if errors.Is(err, service.ErrInvalidMaterialCategory) || errors.Is(err, service.ErrInvalidMaterialUnit) || errors.Is(err, service.ErrMaterialNameTooLong) || errors.Is(err, service.ErrMaterialSpecTooLong) {
response.BadRequest(c, err.Error())
return
}

View File

@ -4,6 +4,7 @@ import (
"database/sql"
"errors"
"log"
"unicode/utf8"
"github.com/wmms/wmms/internal/model"
"github.com/wmms/wmms/internal/repository"
@ -11,6 +12,12 @@ import (
var ErrInvalidMaterialCategory = errors.New("请选择有效的小类类型")
var ErrMaterialNameTooLong = errors.New("物料名称过长,请小于200字")
var ErrMaterialSpecTooLong = errors.New("物料规格过长,请小于200字")
const maxMaterialNameLength = 200
const maxMaterialSpecLength = 200
// ErrInvalidMaterialUnit 表示物料引用的基本单位无效:要么不属于当前公司,
// 要么已停用。创建以及"改选"单位时都要求是本公司启用中的单位。
var ErrInvalidMaterialUnit = errors.New("请选择有效的单位")
@ -65,6 +72,12 @@ func (s *MaterialService) Create(req *model.CreateMaterialRequest, operator stri
if organizationID <= 0 {
return nil, ErrInvalidOrganizationID
}
if utf8.RuneCountInString(req.Name) > maxMaterialNameLength {
return nil, ErrMaterialNameTooLong
}
if utf8.RuneCountInString(req.Spec) > maxMaterialSpecLength {
return nil, ErrMaterialSpecTooLong
}
if err := s.validateCategory(req.CategoryID, organizationID); err != nil {
return nil, err
}
@ -184,6 +197,12 @@ func (s *MaterialService) Update(organizationID, id int64, req *model.UpdateMate
if err != nil {
return nil, err
}
if utf8.RuneCountInString(req.Name) > maxMaterialNameLength {
return nil, ErrMaterialNameTooLong
}
if utf8.RuneCountInString(req.Spec) > maxMaterialSpecLength {
return nil, ErrMaterialSpecTooLong
}
if req.CategoryID == nil || *req.CategoryID <= 0 {
return nil, ErrInvalidMaterialCategory
}