SelectChannel.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { ModalForm, ProForm, ProFormSelect } from "@ant-design/pro-components";
  2. import { Button, message } from "antd";
  3. import { GlobalOutlined } from "@ant-design/icons";
  4. import { useAppSelector } from "../../hooks";
  5. import { currentUser as _currentUser } from "../../reducers/current-user";
  6. import { get, put } from "../../request";
  7. import { IApiResponseChannelList } from "../api/Channel";
  8. import { LockIcon } from "../../assets/icon";
  9. import { ICourseMemberData, ICourseMemberResponse } from "../api/Course";
  10. import { useNavigate, useParams } from "react-router-dom";
  11. interface IWidget {
  12. courseId?: string;
  13. exerciseId?: string;
  14. channel?: string;
  15. onSelected?: Function;
  16. open?: boolean;
  17. onOpenChange?: Function;
  18. }
  19. const Widget = ({
  20. courseId,
  21. exerciseId,
  22. channel,
  23. onSelected,
  24. open,
  25. onOpenChange,
  26. }: IWidget) => {
  27. const user = useAppSelector(_currentUser);
  28. const { id } = useParams(); //url 参数
  29. const navigate = useNavigate();
  30. //TODO 从哪里拿到courseId?
  31. return (
  32. <ModalForm<{
  33. channel: string;
  34. }>
  35. title="选择作业的存放位置"
  36. trigger={<Button>做练习</Button>}
  37. autoFocusFirstInput
  38. modalProps={{
  39. destroyOnClose: true,
  40. onCancel: () => console.log("run"),
  41. }}
  42. submitTimeout={2000}
  43. onFinish={async (values) => {
  44. console.log(values.channel);
  45. console.log("id", id);
  46. const mCourseId = id?.split("_")[0];
  47. if (typeof user !== "undefined" && typeof mCourseId !== "undefined") {
  48. const json = await put<ICourseMemberData, ICourseMemberResponse>(
  49. `/v2/course-member_set-channel`,
  50. {
  51. user_id: user.id,
  52. course_id: mCourseId,
  53. channel_id: values.channel,
  54. }
  55. );
  56. if (json.ok) {
  57. if (json.data.channel_id === courseId) {
  58. message.success("提交成功");
  59. navigate(
  60. `/article/exercise/${id}_${exerciseId}_${user.realName}/wbw`
  61. );
  62. } else {
  63. message.error(json.data.channel_id);
  64. }
  65. } else {
  66. message.error(json.message);
  67. }
  68. } else {
  69. console.log("select channel error:", user, courseId);
  70. }
  71. return true;
  72. }}
  73. >
  74. <div>
  75. 您还没有选择版本。您将用一个版本保存自己的作业。这个版本将会被老师,助理老师看到。
  76. </div>
  77. <ProForm.Group>
  78. <ProFormSelect
  79. rules={[
  80. {
  81. required: true,
  82. },
  83. ]}
  84. request={async () => {
  85. const channelData = await get<IApiResponseChannelList>(
  86. `/v2/channel?view=studio&name=${user?.realName}`
  87. );
  88. const channel = channelData.data.rows.map((item) => {
  89. const icon =
  90. item.status === 30 ? <GlobalOutlined /> : <LockIcon />;
  91. return {
  92. value: item.uid,
  93. label: (
  94. <>
  95. {icon} {item.name}
  96. </>
  97. ),
  98. };
  99. });
  100. return channel;
  101. }}
  102. width="md"
  103. name="channel"
  104. label="版本风格"
  105. />
  106. </ProForm.Group>
  107. </ModalForm>
  108. );
  109. };
  110. export default Widget;