AddStudent.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { useIntl } from "react-intl";
  2. import { ProForm, ProFormSelect } from "@ant-design/pro-components";
  3. import { Button, message, Popover } from "antd";
  4. import { UserAddOutlined } from "@ant-design/icons";
  5. import { get } from "../../request";
  6. import { IUserListResponse } from "../api/Auth";
  7. interface IFormData {
  8. userId: string;
  9. }
  10. interface IWidget {
  11. courseId?: string;
  12. }
  13. const AddStudentWidget = ({ courseId }: IWidget) => {
  14. const intl = useIntl();
  15. const form = (
  16. <ProForm<IFormData>
  17. onFinish={async (values: IFormData) => {
  18. console.log(values);
  19. message.success(intl.formatMessage({ id: "flashes.success" }));
  20. }}
  21. >
  22. <ProForm.Group>
  23. <ProFormSelect
  24. name="userId"
  25. label={intl.formatMessage({ id: "forms.fields.user.label" })}
  26. showSearch
  27. debounceTime={300}
  28. request={async ({ keyWord }) => {
  29. console.log("keyWord", keyWord);
  30. const json = await get<IUserListResponse>(`/v2/user?view=key&key=`);
  31. const userList = json.data.rows.map((item) => {
  32. return {
  33. value: item.id,
  34. label: `${item.userName}-${item.nickName}`,
  35. };
  36. });
  37. console.log("json", userList);
  38. return userList;
  39. }}
  40. placeholder={intl.formatMessage({ id: "forms.fields.user.required" })}
  41. rules={[
  42. {
  43. required: true,
  44. message: intl.formatMessage({
  45. id: "forms.message.user.required",
  46. }),
  47. },
  48. ]}
  49. />
  50. <ProFormSelect
  51. colProps={{ xl: 8, md: 12 }}
  52. name="userType"
  53. label={intl.formatMessage({ id: "forms.fields.type.label" })}
  54. valueEnum={{
  55. 3: intl.formatMessage({ id: "forms.fields.student.label" }),
  56. 2: intl.formatMessage({ id: "forms.fields.assistant.label" }),
  57. }}
  58. />
  59. </ProForm.Group>
  60. </ProForm>
  61. );
  62. return (
  63. <Popover
  64. placement="bottom"
  65. arrowPointAtCenter
  66. content={form}
  67. trigger="click"
  68. >
  69. <Button icon={<UserAddOutlined />} key="add" type="primary">
  70. {intl.formatMessage({ id: "buttons.group.add.member" })}
  71. </Button>
  72. </Popover>
  73. );
  74. };
  75. export default AddStudentWidget;