refactor(role): remove sortNo from role creation and update related logic
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user