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 = { type CreateRoleDrawerProps = {
open: boolean open: boolean
saving: boolean saving: boolean
defaultSortNo: number
onOpenChange: (open: boolean) => void onOpenChange: (open: boolean) => void
onSubmit: (payload: CreateAdminRolePayload) => Promise<void> onSubmit: (payload: CreateAdminRolePayload) => Promise<void>
} }
@@ -38,11 +37,6 @@ const createFormSchema = z.object({
.trim() .trim()
.min(1, "角色编码不能为空") .min(1, "角色编码不能为空")
.regex(/^[A-Za-z][A-Za-z0-9:_-]*$/, "角色编码需以字母开头,仅支持字母、数字、冒号、下划线和短横线"), .regex(/^[A-Za-z][A-Za-z0-9:_-]*$/, "角色编码需以字母开头,仅支持字母、数字、冒号、下划线和短横线"),
sortNo: z
.string()
.trim()
.min(1, "排序不能为空")
.regex(/^\d+$/, "排序值必须是大于等于 0 的整数"),
remark: z.string().trim(), remark: z.string().trim(),
}) })
@@ -54,20 +48,22 @@ const createFormResolver = zodResolver(createFormSchema as never) as Resolver<
z.output<typeof createFormSchema> z.output<typeof createFormSchema>
> >
function buildEmptyForm(defaultSortNo: number): CreateForm { const emptyForm: CreateForm = {
return {
name: "", name: "",
code: "", code: "",
sortNo: String(defaultSortNo),
remark: "", remark: "",
} }
function buildEmptyForm(): CreateForm {
return {
...emptyForm,
}
} }
function buildPayload(form: CreateForm): CreateAdminRolePayload { function buildPayload(form: CreateForm): CreateAdminRolePayload {
return { return {
name: form.name.trim(), name: form.name.trim(),
code: form.code.trim(), code: form.code.trim(),
sortNo: Number(form.sortNo),
remark: form.remark.trim(), remark: form.remark.trim(),
} }
} }
@@ -75,7 +71,6 @@ function buildPayload(form: CreateForm): CreateAdminRolePayload {
export function CreateRoleDrawer({ export function CreateRoleDrawer({
open, open,
saving, saving,
defaultSortNo,
onOpenChange, onOpenChange,
onSubmit, onSubmit,
}: CreateRoleDrawerProps) { }: CreateRoleDrawerProps) {
@@ -83,9 +78,8 @@ export function CreateRoleDrawer({
<Drawer open={open} onOpenChange={onOpenChange} direction="right"> <Drawer open={open} onOpenChange={onOpenChange} direction="right">
{open ? ( {open ? (
<CreateRoleDrawerBody <CreateRoleDrawerBody
key={`create-role-${defaultSortNo}`} key="create-role"
saving={saving} saving={saving}
defaultSortNo={defaultSortNo}
onOpenChange={onOpenChange} onOpenChange={onOpenChange}
onSubmit={onSubmit} onSubmit={onSubmit}
/> />
@@ -96,14 +90,12 @@ export function CreateRoleDrawer({
type CreateRoleDrawerBodyProps = { type CreateRoleDrawerBodyProps = {
saving: boolean saving: boolean
defaultSortNo: number
onOpenChange: (open: boolean) => void onOpenChange: (open: boolean) => void
onSubmit: (payload: CreateAdminRolePayload) => Promise<void> onSubmit: (payload: CreateAdminRolePayload) => Promise<void>
} }
function CreateRoleDrawerBody({ function CreateRoleDrawerBody({
saving, saving,
defaultSortNo,
onOpenChange, onOpenChange,
onSubmit, onSubmit,
}: CreateRoleDrawerBodyProps) { }: CreateRoleDrawerBodyProps) {
@@ -113,7 +105,7 @@ function CreateRoleDrawerBody({
z.output<typeof createFormSchema> z.output<typeof createFormSchema>
>({ >({
resolver: createFormResolver, resolver: createFormResolver,
defaultValues: buildEmptyForm(defaultSortNo), defaultValues: buildEmptyForm(),
}) })
const { const {
handleSubmit, handleSubmit,
@@ -124,7 +116,7 @@ function CreateRoleDrawerBody({
async function onFormSubmit(values: CreateForm) { async function onFormSubmit(values: CreateForm) {
await onSubmit(buildPayload(values)) await onSubmit(buildPayload(values))
reset(buildEmptyForm(defaultSortNo)) reset(buildEmptyForm())
} }
return ( return (
@@ -164,18 +156,6 @@ function CreateRoleDrawerBody({
<FieldError errors={[errors.code]} /> <FieldError errors={[errors.code]} />
</FieldContent> </FieldContent>
</Field> </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}> <Field data-invalid={!!errors.remark}>
<FieldLabel htmlFor="create-role-remark"></FieldLabel> <FieldLabel htmlFor="create-role-remark"></FieldLabel>
<FieldContent> <FieldContent>
-4
View File
@@ -310,9 +310,6 @@ export default function DashboardRolesPage() {
void loadRoles() void loadRoles()
}, []) }, [])
const defaultSortNo =
result.results.reduce((max, item) => Math.max(max, item.sortNo), -1) + 1
return ( return (
<div className="flex flex-1 flex-col gap-6 p-4 lg:p-6"> <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"> <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 <CreateRoleDrawer
open={creatingOpen} open={creatingOpen}
saving={savingCreate} saving={savingCreate}
defaultSortNo={defaultSortNo}
onOpenChange={handleCreateDrawerOpenChange} onOpenChange={handleCreateDrawerOpenChange}
onSubmit={handleCreateRole} onSubmit={handleCreateRole}
/> />
-1
View File
@@ -75,7 +75,6 @@ export type AdminRole = {
export type CreateAdminRolePayload = { export type CreateAdminRolePayload = {
name: string name: string
code: string code: string
sortNo: number
remark: string remark: string
} }
@@ -50,7 +50,6 @@ type AssignRoleRequest struct {
type CreateRoleRequest struct { type CreateRoleRequest struct {
Name string `json:"name"` Name string `json:"name"`
Code string `json:"code"` Code string `json:"code"`
SortNo int `json:"sortNo"`
Remark string `json:"remark"` Remark string `json:"remark"`
} }
+2 -2
View File
@@ -88,7 +88,7 @@ func (s *roleService) CreateRole(req request.CreateRoleRequest, operator *dto.Au
Code: code, Code: code,
Status: enums.StatusOk, Status: enums.StatusOk,
IsSystem: false, IsSystem: false,
SortNo: req.SortNo, SortNo: s.NextSortNo(),
Remark: strings.TrimSpace(req.Remark), Remark: strings.TrimSpace(req.Remark),
AuditFields: utils.BuildAuditFields(operator), AuditFields: utils.BuildAuditFields(operator),
} }
@@ -115,7 +115,7 @@ func (s *roleService) UpdateRole(req request.UpdateRoleRequest, operator *dto.Au
} }
func (s *roleService) NextSortNo() int { 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 latest.SortNo + 1
} }
return 0 return 0