LeaveCourse.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 LeaveCourseWidget = ({
  20. joinMode,
  21. currUser,
  22. onStatusChanged,
  23. }: IWidget) => {
  24. const intl = useIntl();
  25. console.log("user info", currUser);
  26. /**
  27. * 离开课程业务逻辑
  28. * open 直接删除记录
  29. * manual,invite
  30. * sign_up 直接删除记录
  31. * 其他 设置为 left
  32. */
  33. let isDelete = false;
  34. if (joinMode === "open") {
  35. if (currUser?.status === "normal") {
  36. isDelete = true;
  37. }
  38. } else if (currUser?.status === "sign_up") {
  39. isDelete = true;
  40. }
  41. const statusChange = (status: ICourseMemberData | undefined) => {
  42. if (typeof onStatusChanged !== "undefined") {
  43. onStatusChanged(status);
  44. }
  45. };
  46. return (
  47. <>
  48. <Button
  49. onClick={() => {
  50. confirm({
  51. title: "退出已经报名的课程吗?",
  52. icon: <ExclamationCircleFilled />,
  53. content: (
  54. <div>
  55. <Text type="danger">
  56. {joinMode !== "open"
  57. ? intl.formatMessage({
  58. id: `course.leave.message`,
  59. })
  60. : ""}
  61. </Text>
  62. </div>
  63. ),
  64. onOk() {
  65. return isDelete
  66. ? delete_<ICourseMemberDeleteResponse>(
  67. "/v2/course-member/" + currUser?.id
  68. )
  69. .then((json) => {
  70. console.log("add member", json);
  71. if (json.ok) {
  72. console.log("delete", json.data);
  73. statusChange(undefined);
  74. message.success(
  75. intl.formatMessage({ id: "flashes.success" })
  76. );
  77. } else {
  78. message.error(json.message);
  79. }
  80. })
  81. .catch((error) => {
  82. message.error(error);
  83. })
  84. : put<ICourseMemberData, ICourseMemberResponse>(
  85. "/v2/course-member/" + currUser?.id,
  86. {
  87. user_id: "",
  88. course_id: "",
  89. status: "left",
  90. }
  91. )
  92. .then((json) => {
  93. console.log("leave", json);
  94. if (json.ok) {
  95. console.log("leave", json.data);
  96. statusChange(json.data);
  97. message.success(
  98. intl.formatMessage({ id: "flashes.success" })
  99. );
  100. } else {
  101. message.error(json.message);
  102. }
  103. })
  104. .catch((error) => {
  105. message.error(error);
  106. });
  107. },
  108. });
  109. }}
  110. >
  111. 退出
  112. </Button>
  113. </>
  114. );
  115. };
  116. export default LeaveCourseWidget;