refactor(role): remove sortNo from role creation and update related logic

This commit is contained in:
mlogclub
2026-04-23 14:06:10 +08:00
parent e616169c41
commit 06b9c58e55
5 changed files with 13 additions and 39 deletions
@@ -26,7 +26,6 @@ import { Textarea } from "@/components/ui/textarea"
type CreateRoleDrawerProps = {
open: boolean
saving: boolean
defaultSortNo: number
onOpenChange: (open: boolean) => void
onSubmit: (payload: CreateAdminRolePayload) => Promise<void>
}
@@ -38,11 +37,6 @@ const createFormSchema = z.object({
.trim()
.min(1, "角色编码不能为空")
.regex(/^[A-Za-z][A-Za-z0-9:_-]*$/, "角色编码需以字母开头,仅支持字母、数字、冒号、下划线和短横线"),
sortNo: z
.string()
.trim()
.min(1, "排序不能为空")
.regex(/^\d+$/, "排序值必须是大于等于 0 的整数"),
remark: z.string().trim(),
})
@@ -54,12 +48,15 @@ const createFormResolver = zodResolver(createFormSchema as never) as Resolver<
z.output<typeof createFormSchema>
>
function buildEmptyForm(defaultSortNo: number): CreateForm {
const emptyForm: CreateForm = {
name: "",
code: "",
remark: "",
}
function buildEmptyForm(): CreateForm {
return {
name: "",
code: "",
sortNo: String(defaultSortNo),
remark: "",
...emptyForm,
}
}
@@ -67,7 +64,6 @@ function buildPayload(form: CreateForm): CreateAdminRolePayload {
return {
name: form.name.trim(),
code: form.code.trim(),
sortNo: Number(form.sortNo),
remark: form.remark.trim(),
}
}
@@ -75,7 +71,6 @@ function buildPayload(form: CreateForm): CreateAdminRolePayload {
export function CreateRoleDrawer({
open,
saving,
defaultSortNo,
onOpenChange,
onSubmit,
}: CreateRoleDrawerProps) {
@@ -83,9 +78,8 @@ export function CreateRoleDrawer({
<Drawer open={open} onOpenChange={onOpenChange} direction="right">
{open ? (
<CreateRoleDrawerBody
key={`create-role-${defaultSortNo}`}
key="create-role"
saving={saving}
defaultSortNo={defaultSortNo}
onOpenChange={onOpenChange}
onSubmit={onSubmit}
/>
@@ -96,14 +90,12 @@ export function CreateRoleDrawer({
type CreateRoleDrawerBodyProps = {
saving: boolean
defaultSortNo: number
onOpenChange: (open: boolean) => void
onSubmit: (payload: CreateAdminRolePayload) => Promise<void>
}
function CreateRoleDrawerBody({
saving,
defaultSortNo,
onOpenChange,
onSubmit,
}: CreateRoleDrawerBodyProps) {
@@ -113,7 +105,7 @@ function CreateRoleDrawerBody({
z.output<typeof createFormSchema>
>({
resolver: createFormResolver,
defaultValues: buildEmptyForm(defaultSortNo),
defaultValues: buildEmptyForm(),
})
const {
handleSubmit,
@@ -124,7 +116,7 @@ function CreateRoleDrawerBody({
async function onFormSubmit(values: CreateForm) {
await onSubmit(buildPayload(values))
reset(buildEmptyForm(defaultSortNo))
reset(buildEmptyForm())
}
return (
@@ -164,18 +156,6 @@ function CreateRoleDrawerBody({
<FieldError errors={[errors.code]} />
</FieldContent>
</Field>
<Field data-invalid={!!errors.sortNo}>
<FieldLabel htmlFor="create-role-sort-no"></FieldLabel>
<FieldContent>
<Input
id="create-role-sort-no"
inputMode="numeric"
aria-invalid={!!errors.sortNo}
{...register("sortNo")}
/>
<FieldError errors={[errors.sortNo]} />
</FieldContent>
</Field>
<Field data-invalid={!!errors.remark}>
<FieldLabel htmlFor="create-role-remark"></FieldLabel>
<FieldContent>
-4
View File
@@ -310,9 +310,6 @@ export default function DashboardRolesPage() {
void loadRoles()
}, [])
const defaultSortNo =
result.results.reduce((max, item) => Math.max(max, item.sortNo), -1) + 1
return (
<div className="flex flex-1 flex-col gap-6 p-4 lg:p-6">
<div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-end">
@@ -398,7 +395,6 @@ export default function DashboardRolesPage() {
<CreateRoleDrawer
open={creatingOpen}
saving={savingCreate}
defaultSortNo={defaultSortNo}
onOpenChange={handleCreateDrawerOpenChange}
onSubmit={handleCreateRole}
/>
-1
View File
@@ -75,7 +75,6 @@ export type AdminRole = {
export type CreateAdminRolePayload = {
name: string
code: string
sortNo: number
remark: string
}
@@ -50,7 +50,6 @@ type AssignRoleRequest struct {
type CreateRoleRequest struct {
Name string `json:"name"`
Code string `json:"code"`
SortNo int `json:"sortNo"`
Remark string `json:"remark"`
}
+2 -2
View File
@@ -88,7 +88,7 @@ func (s *roleService) CreateRole(req request.CreateRoleRequest, operator *dto.Au
Code: code,
Status: enums.StatusOk,
IsSystem: false,
SortNo: req.SortNo,
SortNo: s.NextSortNo(),
Remark: strings.TrimSpace(req.Remark),
AuditFields: utils.BuildAuditFields(operator),
}
@@ -115,7 +115,7 @@ func (s *roleService) UpdateRole(req request.UpdateRoleRequest, operator *dto.Au
}
func (s *roleService) NextSortNo() int {
if latest := s.FindOne(sqls.NewCnd().Asc("sort_no").Desc("id")); latest != nil {
if latest := s.FindOne(sqls.NewCnd().Desc("sort_no").Desc("id")); latest != nil {
return latest.SortNo + 1
}
return 0