visuddhinanda 2 лет назад
Родитель
Сommit
a828d0d4d7
1 измененных файлов с 33 добавлено и 102 удалено
  1. 33 102
      dashboard/src/components/course/CourseMemberList.tsx

+ 33 - 102
dashboard/src/components/course/CourseMemberList.tsx

@@ -1,50 +1,28 @@
 import { useIntl } from "react-intl";
 import { useIntl } from "react-intl";
-import { Dropdown, Modal, Tag } from "antd";
+import { Dropdown, Modal, Tag, message } from "antd";
 import { ActionType, ProList } from "@ant-design/pro-components";
 import { ActionType, ProList } from "@ant-design/pro-components";
 import { ExclamationCircleFilled } from "@ant-design/icons";
 import { ExclamationCircleFilled } from "@ant-design/icons";
 
 
-import { delete_, get, put } from "../../request";
+import { get, put } from "../../request";
 import { ICourseMember } from "./CourseMember";
 import { ICourseMember } from "./CourseMember";
 import AddMember from "./AddMember";
 import AddMember from "./AddMember";
 import { useEffect, useRef, useState } from "react";
 import { useEffect, useRef, useState } from "react";
 import {
 import {
   ICourseDataResponse,
   ICourseDataResponse,
   ICourseMemberData,
   ICourseMemberData,
-  ICourseMemberDeleteResponse,
   ICourseMemberListResponse,
   ICourseMemberListResponse,
   ICourseMemberResponse,
   ICourseMemberResponse,
   ICourseResponse,
   ICourseResponse,
   TCourseMemberAction,
   TCourseMemberAction,
   TCourseMemberStatus,
   TCourseMemberStatus,
+  actionMap,
 } from "../api/Course";
 } from "../api/Course";
 import { ItemType } from "antd/lib/menu/hooks/useItems";
 import { ItemType } from "antd/lib/menu/hooks/useItems";
 import User from "../auth/User";
 import User from "../auth/User";
-import { managerCanDo } from "./RolePower";
+import { getStatusColor, managerCanDo } from "./RolePower";
+import { ISetStatus, setStatus } from "./UserAction";
 const { confirm } = Modal;
 const { confirm } = Modal;
 
 
-interface IStatusColor {
-  status: TCourseMemberStatus;
-  color: string;
-}
-export const getStatusColor = (status?: TCourseMemberStatus): string => {
-  let color = "unset";
-  const setting: IStatusColor[] = [
-    { status: "applied", color: "blue" },
-    { status: "invited", color: "blue" },
-    { status: "accepted", color: "green" },
-    { status: "rejected", color: "orange" },
-    { status: "disagreed", color: "red" },
-    { status: "left", color: "red" },
-    { status: "blocked", color: "orange" },
-  ];
-  const CourseStatusColor = setting.find((value) => value.status === status);
-
-  if (CourseStatusColor) {
-    color = CourseStatusColor.color;
-  }
-  return color;
-};
-
 interface IWidget {
 interface IWidget {
   courseId?: string;
   courseId?: string;
   onSelect?: Function;
   onSelect?: Function;
@@ -52,7 +30,7 @@ interface IWidget {
 
 
 const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
 const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
   const intl = useIntl(); //i18n
   const intl = useIntl(); //i18n
-  const [canDelete, setCanDelete] = useState(false);
+  const [canManage, setCanManage] = useState(false);
   const [course, setCourse] = useState<ICourseDataResponse>();
   const [course, setCourse] = useState<ICourseDataResponse>();
   const ref = useRef<ActionType>();
   const ref = useRef<ActionType>();
 
 
@@ -71,42 +49,6 @@ const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
     }
     }
   }, [courseId]);
   }, [courseId]);
 
 
-  const ChangeStatus = (
-    id: string,
-    name: string,
-    status: TCourseMemberStatus
-  ) => {
-    confirm({
-      title: (
-        <div>
-          <div>
-            {intl.formatMessage({
-              id: `course.member.status.${status}.message`,
-            })}
-          </div>
-          <div>{name}</div>
-        </div>
-      ),
-      icon: <ExclamationCircleFilled />,
-      onOk() {
-        return put<ICourseMemberData, ICourseMemberResponse>(
-          "/v2/course-member/" + id,
-          {
-            course_id: "",
-            user_id: "",
-            status: status,
-          }
-        )
-          .then((json) => {
-            if (json.ok) {
-              console.log("delete ok");
-              ref.current?.reload();
-            }
-          })
-          .catch(() => console.log("Oops errors!"));
-      },
-    });
-  };
   return (
   return (
     <>
     <>
       <ProList<ICourseMember>
       <ProList<ICourseMember>
@@ -158,7 +100,6 @@ const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
           actions: {
           actions: {
             search: false,
             search: false,
             render: (text, row, index, action) => {
             render: (text, row, index, action) => {
-              let canUndo = false;
               const statusColor = getStatusColor(row.status);
               const statusColor = getStatusColor(row.status);
               const actions: TCourseMemberAction[] = [
               const actions: TCourseMemberAction[] = [
                 "invite",
                 "invite",
@@ -167,11 +108,14 @@ const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
                 "reject",
                 "reject",
                 "block",
                 "block",
               ];
               ];
+              /*
+
               const undo = {
               const undo = {
                 key: "undo",
                 key: "undo",
                 label: "撤销上次操作",
                 label: "撤销上次操作",
                 disabled: !canUndo,
                 disabled: !canUndo,
               };
               };
+              */
               const items: ItemType[] = actions.map((item) => {
               const items: ItemType[] = actions.map((item) => {
                 return {
                 return {
                   key: item,
                   key: item,
@@ -194,49 +138,36 @@ const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
                     id: `course.member.status.${row.status}.label`,
                     id: `course.member.status.${row.status}.label`,
                   })}
                   })}
                 </span>,
                 </span>,
-                canDelete ? (
+                canManage ? (
                   <Dropdown.Button
                   <Dropdown.Button
                     key={index}
                     key={index}
                     type="link"
                     type="link"
                     menu={{
                     menu={{
                       items,
                       items,
                       onClick: (e) => {
                       onClick: (e) => {
-                        console.log("click", e);
-                        switch (e.key) {
-                          case "exp":
-                            break;
-                          case "delete":
-                            confirm({
-                              title: `删除此成员吗?`,
-                              icon: <ExclamationCircleFilled />,
-                              content: "此操作不能恢复",
-                              okType: "danger",
-                              onOk() {
-                                return delete_<ICourseMemberDeleteResponse>(
-                                  "/v2/course-member/" + row.id
-                                )
-                                  .then((json) => {
-                                    if (json.ok) {
-                                      console.log("delete ok");
-                                      ref.current?.reload();
-                                    }
-                                  })
-                                  .catch(() => console.log("Oops errors!"));
+                        console.debug("click", e);
+                        const currAction = e.key as TCourseMemberAction;
+                        if (actions.includes(currAction)) {
+                          const newStatus = actionMap(currAction);
+                          if (newStatus) {
+                            const actionParam: ISetStatus = {
+                              courseMemberId: row.id,
+                              message: intl.formatMessage(
+                                {
+                                  id: `course.member.status.${currAction}.message`,
+                                },
+                                { user: row.user?.nickName }
+                              ),
+                              status: newStatus,
+                              onSuccess: (data: ICourseMemberData) => {
+                                message.success(
+                                  intl.formatMessage({ id: "flashes.success" })
+                                );
+                                ref.current?.reload();
                               },
                               },
-                            });
-                            break;
-                          case "accept":
-                            if (row.id && row.name) {
-                              ChangeStatus(row.id, row.name, "accepted");
-                            }
-                            break;
-                          case "reject":
-                            if (row.id && row.name) {
-                              ChangeStatus(row.id, row.name, "rejected");
-                            }
-                            break;
-                          default:
-                            break;
+                            };
+                            setStatus(actionParam);
+                          }
                         }
                         }
                       },
                       },
                     }}
                     }}
@@ -291,7 +222,7 @@ const CourseMemberListWidget = ({ courseId, onSelect }: IWidget) => {
           if (res.ok) {
           if (res.ok) {
             console.debug("api response", res.data);
             console.debug("api response", res.data);
             if (res.data.role === "owner" || res.data.role === "manager") {
             if (res.data.role === "owner" || res.data.role === "manager") {
-              setCanDelete(true);
+              setCanManage(true);
             }
             }
             const items: ICourseMember[] = res.data.rows.map((item, id) => {
             const items: ICourseMember[] = res.data.rows.map((item, id) => {
               let member: ICourseMember = {
               let member: ICourseMember = {