LeaveCourse.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { Button, message, Modal, Typography } from "antd";
  2. import { useIntl } from "react-intl";
  3. import { ExclamationCircleFilled } from "@ant-design/icons";
  4. import { delete_, put } from "../../request";
  5. import {
  6. ICourseMemberData,
  7. ICourseMemberDeleteResponse,
  8. ICourseMemberResponse,
  9. TCourseJoinMode,
  10. TCourseMemberStatus,
  11. } from "../api/Course";
  12. const { confirm } = Modal;
  13. const { Text } = Typography;
  14. interface IWidget {
  15. joinMode?: TCourseJoinMode;
  16. currUser?: ICourseMemberData;
  17. onStatusChanged?: Function;
  18. }
  19. const Widget = ({ joinMode, currUser, onStatusChanged }: IWidget) => {
  20. const intl = useIntl();
  21. /**
  22. * 离开课程业务逻辑
  23. * open 直接删除记录
  24. * manual,invite
  25. * progressing 直接删除记录
  26. * 其他 设置为 left
  27. */
  28. let isDelete = false;
  29. if (joinMode === "open") {
  30. isDelete = true;
  31. } else if (currUser?.status === "progressing") {
  32. isDelete = true;
  33. }
  34. const statusChange = (status: TCourseMemberStatus) => {
  35. if (typeof onStatusChanged !== "undefined") {
  36. onStatusChanged(status);
  37. }
  38. };
  39. return (
  40. <>
  41. <Button
  42. type="primary"
  43. onClick={() => {
  44. confirm({
  45. title: "退出已经报名的课程吗?",
  46. icon: <ExclamationCircleFilled />,
  47. content: (
  48. <div>
  49. <Text type="danger">
  50. {joinMode !== "open"
  51. ? intl.formatMessage({
  52. id: `course.leave.message`,
  53. })
  54. : ""}
  55. </Text>
  56. </div>
  57. ),
  58. onOk() {
  59. return isDelete
  60. ? delete_<ICourseMemberDeleteResponse>(
  61. "/v2/course-member/" + currUser?.id
  62. )
  63. .then((json) => {
  64. console.log("add member", json);
  65. if (json.ok) {
  66. console.log("delete", json.data);
  67. statusChange("normal");
  68. message.success(
  69. intl.formatMessage({ id: "flashes.success" })
  70. );
  71. } else {
  72. message.error(json.message);
  73. }
  74. })
  75. .catch((error) => {
  76. message.error(error);
  77. })
  78. : put<ICourseMemberData, ICourseMemberResponse>(
  79. "/v2/course-member/" + currUser?.id,
  80. {
  81. user_id: "",
  82. course_id: "",
  83. status: "left",
  84. }
  85. )
  86. .then((json) => {
  87. console.log("leave", json);
  88. if (json.ok) {
  89. console.log("leave", json.data);
  90. statusChange("left");
  91. message.success(
  92. intl.formatMessage({ id: "flashes.success" })
  93. );
  94. } else {
  95. message.error(json.message);
  96. }
  97. })
  98. .catch((error) => {
  99. message.error(error);
  100. });
  101. },
  102. });
  103. }}
  104. >
  105. 退出
  106. </Button>
  107. </>
  108. );
  109. };
  110. export default Widget;