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 = {
|
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>
|
||||||
|
|||||||
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user