feat: 完成角色删除功能对接
This commit is contained in:
@@ -33,3 +33,7 @@ export async function addRole(request: RoleFormValues) {
|
|||||||
export async function editRole(request: RoleFormValues) {
|
export async function editRole(request: RoleFormValues) {
|
||||||
return await webClient.put("/roles", request)
|
return await webClient.put("/roles", request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function deleteRole(id: number | string) {
|
||||||
|
return await webClient.delete(`/roles/${id}`)
|
||||||
|
}
|
||||||
|
|||||||
@@ -69,10 +69,10 @@ export default function RoleDisplayForm({ initialValues, form, mode }: RoleDispl
|
|||||||
{ required: true, message: "排序不能为空" },
|
{ required: true, message: "排序不能为空" },
|
||||||
{ type: "number", min: 0, max: Number.MAX_VALUE, message: "排序必须是正数" },
|
{ type: "number", min: 0, max: Number.MAX_VALUE, message: "排序必须是正数" },
|
||||||
]}>
|
]}>
|
||||||
<InputNumber />
|
<InputNumber type="number" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item<RoleFormValues> label="是否为默认角色" name="defaultValue">
|
<Form.Item<RoleFormValues> label="是否为默认角色" name="defaultValue">
|
||||||
<Switch disabled={isEditing}/>
|
<Switch disabled={isEditing} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item<RoleFormValues> label="角色状态" name="status">
|
<Form.Item<RoleFormValues> label="角色状态" name="status">
|
||||||
<Select<Status> options={StatusOptions} />
|
<Select<Status> options={StatusOptions} />
|
||||||
|
|||||||
+65
-27
@@ -18,9 +18,6 @@ import type { Status } from "@/types/constant"
|
|||||||
import AddRoleDialogue from "@/components/add-role-dialogue"
|
import AddRoleDialogue from "@/components/add-role-dialogue"
|
||||||
import type { RoleFormValues } from "@/components/role-display-form"
|
import type { RoleFormValues } from "@/components/role-display-form"
|
||||||
import EditRoleDialogue from "@/components/edit-role-dialogue"
|
import EditRoleDialogue from "@/components/edit-role-dialogue"
|
||||||
import { addRole } from "@/api/role"
|
|
||||||
import type { AntFormValidationError } from "@/types/antd"
|
|
||||||
import { AntUtils } from "@/utils"
|
|
||||||
|
|
||||||
export default function RolePage() {
|
export default function RolePage() {
|
||||||
const { message, modal } = App.useApp()
|
const { message, modal } = App.useApp()
|
||||||
@@ -32,6 +29,8 @@ export default function RolePage() {
|
|||||||
const [pageNum, setPageNum] = useState<number>(1)
|
const [pageNum, setPageNum] = useState<number>(1)
|
||||||
const [pageSize, setPageSize] = useState<number>(10)
|
const [pageSize, setPageSize] = useState<number>(10)
|
||||||
const [totalElementCount, setTotalElementCount] = useState<number>(0)
|
const [totalElementCount, setTotalElementCount] = useState<number>(0)
|
||||||
|
const [isLastPage, setIsLastPage] = useState<boolean>(false)
|
||||||
|
const [isFirstPage, setIsFirstPage] = useState<boolean>(false)
|
||||||
|
|
||||||
const queryRoles = (pageNum: number, pageSize: number, queryRoleForm: QueryRoleForm | null) => {
|
const queryRoles = (pageNum: number, pageSize: number, queryRoleForm: QueryRoleForm | null) => {
|
||||||
const queryRoleRequest: QueryRoleRequest = {
|
const queryRoleRequest: QueryRoleRequest = {
|
||||||
@@ -44,11 +43,12 @@ export default function RolePage() {
|
|||||||
|
|
||||||
RoleApi.fetchRoles(queryRoleRequest)
|
RoleApi.fetchRoles(queryRoleRequest)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
// console.log("role response", response)
|
|
||||||
setPageNum(response.pageable.pageNumber + 1)
|
setPageNum(response.pageable.pageNumber + 1)
|
||||||
setPageSize(response.pageable.pageSize)
|
setPageSize(response.pageable.pageSize)
|
||||||
setTotalElementCount(response.totalElements)
|
setTotalElementCount(response.totalElements)
|
||||||
setRoles(response.content.sort((role1, role2) => role1.sort - role2.sort))
|
setRoles(response.content.sort((role1, role2) => role1.sort - role2.sort))
|
||||||
|
setIsLastPage(response.last)
|
||||||
|
setIsFirstPage(response.first)
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
const err = error as AxiosError<GeneralErrorResponse>
|
const err = error as AxiosError<GeneralErrorResponse>
|
||||||
@@ -64,26 +64,24 @@ export default function RolePage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onAddRoleFinish = async () => {
|
const onAddRoleFinish = async () => {
|
||||||
addRoleForm
|
|
||||||
.validateFields()
|
|
||||||
.then(async (values) => {
|
|
||||||
try {
|
try {
|
||||||
|
const values = await addRoleForm.validateFields()
|
||||||
|
console.log(values)
|
||||||
await RoleApi.addRole(values)
|
await RoleApi.addRole(values)
|
||||||
void message.success(`角色 ${values.name} 创建成功`)
|
void message.success(`角色 ${values.name} 创建成功`)
|
||||||
|
return true
|
||||||
} catch (error: unknown) {
|
} catch (error: unknown) {
|
||||||
if (axios.isAxiosError<GeneralErrorResponse>(error)) {
|
if (axios.isAxiosError<GeneralErrorResponse>(error)) {
|
||||||
void message.error(error.response?.data.message ?? "创建失败,请稍后再试")
|
// 处理 Axios 请求错误
|
||||||
} else if (error instanceof Error) {
|
const serverMsg = error.response?.data?.message
|
||||||
void message.error(error.message)
|
void message.error(serverMsg ?? "服务异常,请稍后再试")
|
||||||
} else {
|
} else {
|
||||||
void message.error("发生未知错误,新增角色信息失败。")
|
// 处理其他预期外的错误(如代码逻辑 Bug)
|
||||||
|
console.error("未知错误:", error)
|
||||||
|
void message.error("发生系统错误,请联系管理员")
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.catch((error: AntFormValidationError<RoleFormValues>) => {
|
|
||||||
void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleAddRole = () => {
|
const handleAddRole = () => {
|
||||||
@@ -96,12 +94,10 @@ export default function RolePage() {
|
|||||||
})
|
})
|
||||||
.then(
|
.then(
|
||||||
() => {
|
() => {
|
||||||
addRoleForm.resetFields()
|
|
||||||
const formValues = queryForm.getFieldsValue()
|
const formValues = queryForm.getFieldsValue()
|
||||||
queryRoles(pageNum, pageSize, formValues)
|
queryRoles(pageNum, pageSize, formValues)
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
addRoleForm.resetFields()
|
|
||||||
console.error("用户取消添加角色")
|
console.error("用户取消添加角色")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -111,16 +107,22 @@ export default function RolePage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onEditRoleFinish = async () => {
|
const onEditRoleFinish = async () => {
|
||||||
editRoleForm
|
try {
|
||||||
.validateFields()
|
const values = await editRoleForm.validateFields()
|
||||||
.then(async (values) => {
|
console.log(values)
|
||||||
// console.log(values)
|
|
||||||
await RoleApi.editRole(values)
|
await RoleApi.editRole(values)
|
||||||
void message.success(`角色 ${values.name} 修改成功`)
|
void message.success(`角色 ${values.name} 更新成功`)
|
||||||
})
|
return true
|
||||||
.catch((error: AntFormValidationError<RoleFormValues>) => {
|
} catch (error: unknown) {
|
||||||
void message.error(`角色信息检验失败:${AntUtils.getFieldErrorMessage(error)}`)
|
if (axios.isAxiosError<GeneralErrorResponse>(error)) {
|
||||||
})
|
const serverMsg = error.response?.data?.message
|
||||||
|
void message.error(serverMsg ?? "后端服务异常,请稍后再试")
|
||||||
|
} else {
|
||||||
|
console.error("未知错误:", error)
|
||||||
|
void message.error("发生系统错误,请联系管理员")
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleEditRole = (role: Role) => {
|
const handleEditRole = (role: Role) => {
|
||||||
@@ -145,6 +147,42 @@ export default function RolePage() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onDeleteRoleFinish = async (role: Role) => {
|
||||||
|
try {
|
||||||
|
await RoleApi.deleteRole(role.id)
|
||||||
|
void message.info(`角色 ${role.name} 删除成功`)
|
||||||
|
|
||||||
|
// Refresh roles
|
||||||
|
if (roles.length == 1 && isLastPage && !isFirstPage) {
|
||||||
|
setPageNum(pageNum - 1)
|
||||||
|
} else {
|
||||||
|
// Execute refresh manually
|
||||||
|
const searchParams = queryForm.getFieldsValue()
|
||||||
|
queryRoles(pageNum, pageSize, searchParams)
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
} catch (error: unknown) {
|
||||||
|
if (axios.isAxiosError<GeneralErrorResponse>(error)) {
|
||||||
|
const serverMsg = error.response?.data?.message
|
||||||
|
void message.error(serverMsg ?? "服务异常,请稍后再试")
|
||||||
|
} else {
|
||||||
|
console.error("未知错误:", error)
|
||||||
|
void message.error("发生系统错误,请联系管理员")
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDeleteRole = async (role: Role) => {
|
||||||
|
modal
|
||||||
|
.confirm({
|
||||||
|
title: "删除角色确认",
|
||||||
|
content: <>删除角色会同步解除该角色与用户的绑定关系,确定要删除吗?</>,
|
||||||
|
onOk: () => onDeleteRoleFinish(role),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
queryRoles(pageNum, pageSize, null)
|
queryRoles(pageNum, pageSize, null)
|
||||||
}, [pageNum, pageSize])
|
}, [pageNum, pageSize])
|
||||||
@@ -246,7 +284,7 @@ export default function RolePage() {
|
|||||||
<Button variant="solid" onClick={() => handleEditRole(role)}>
|
<Button variant="solid" onClick={() => handleEditRole(role)}>
|
||||||
修改
|
修改
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="solid" danger>
|
<Button variant="solid" danger onClick={() => handleDeleteRole(role)}>
|
||||||
删除
|
删除
|
||||||
</Button>
|
</Button>
|
||||||
</Space.Compact>
|
</Space.Compact>
|
||||||
|
|||||||
Reference in New Issue
Block a user