UserAssignRoleForm.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import React, { useState, useImperativeHandle, forwardRef } from 'react';
  2. import { Modal, Form, Input, Select, message } from 'antd';
  3. import { userPermissionApi } from '../../api/user/permission';
  4. import { systemApi } from '../../api/System';
  5. import { UserVO, RoleVO } from '../../types';
  6. interface UserAssignRoleFormProps {
  7. onSuccess?: () => void;
  8. }
  9. export interface UserAssignRoleFormRef {
  10. open: (row: UserVO) => void;
  11. }
  12. const UserAssignRoleForm = forwardRef<UserAssignRoleFormRef, UserAssignRoleFormProps>(({ onSuccess }, ref) => {
  13. const [dialogVisible, setDialogVisible] = useState(false);
  14. const [formLoading, setFormLoading] = useState(false);
  15. const [form] = Form.useForm();
  16. const [roleList, setRoleList] = useState<RoleVO[]>([]);
  17. // 打开弹窗
  18. const open = async (row: UserVO) => {
  19. setDialogVisible(true);
  20. form.resetFields();
  21. // 设置用户信息
  22. form.setFieldsValue({
  23. id: row.id,
  24. username: row.username,
  25. nickname: row.nickname,
  26. roleIds: [],
  27. });
  28. // 加载角色列表
  29. try {
  30. const roles = await systemApi.getSimpleRoleList();
  31. setRoleList(roles || []);
  32. } catch (error) {
  33. console.error('加载角色列表失败:', error);
  34. message.error('加载角色列表失败');
  35. }
  36. // 获取用户角色列表
  37. setFormLoading(true);
  38. try {
  39. const roleIds = await userPermissionApi.getUserRoleList(row.id);
  40. form.setFieldsValue({
  41. roleIds: roleIds || [],
  42. });
  43. } catch (error: any) {
  44. console.error('获取用户角色失败:', error);
  45. message.error(error.message || '获取用户角色失败');
  46. } finally {
  47. setFormLoading(false);
  48. }
  49. };
  50. useImperativeHandle(ref, () => ({
  51. open,
  52. }));
  53. // 提交表单
  54. const submitForm = async () => {
  55. try {
  56. const values = await form.validateFields();
  57. setFormLoading(true);
  58. try {
  59. await userPermissionApi.assignUserRole({
  60. userId: values.id,
  61. roleIds: values.roleIds,
  62. });
  63. message.success('分配成功');
  64. setDialogVisible(false);
  65. onSuccess?.();
  66. } catch (error: any) {
  67. message.error(error.message || '分配失败');
  68. } finally {
  69. setFormLoading(false);
  70. }
  71. } catch (error) {
  72. // 表单验证失败
  73. }
  74. };
  75. return (
  76. <Modal
  77. title="分配角色"
  78. open={dialogVisible}
  79. onCancel={() => setDialogVisible(false)}
  80. onOk={submitForm}
  81. confirmLoading={formLoading}
  82. destroyOnClose
  83. >
  84. <Form
  85. form={form}
  86. layout="vertical"
  87. initialValues={{
  88. roleIds: [],
  89. }}
  90. >
  91. <Form.Item label="用户名称" name="username">
  92. <Input disabled />
  93. </Form.Item>
  94. <Form.Item label="用户昵称" name="nickname">
  95. <Input disabled />
  96. </Form.Item>
  97. <Form.Item label="角色" name="roleIds">
  98. <Select
  99. mode="multiple"
  100. placeholder="请选择角色"
  101. options={roleList.map(role => ({
  102. label: role.name,
  103. value: role.id,
  104. }))}
  105. />
  106. </Form.Item>
  107. </Form>
  108. </Modal>
  109. );
  110. });
  111. UserAssignRoleForm.displayName = 'UserAssignRoleForm';
  112. export default UserAssignRoleForm;