Просмотр исходного кода

Merge pull request #2084 from visuddhinanda/agile

支持 signUpMessage
visuddhinanda 1 год назад
Родитель
Сommit
a0c3415ce4

+ 3 - 0
dashboard/src/components/api/Course.ts

@@ -16,6 +16,7 @@ export interface ICourseDataRequest {
   subtitle?: string; //副标题
   subtitle?: string; //副标题
   summary?: string; //副标题
   summary?: string; //副标题
   content?: string | null;
   content?: string | null;
+  sign_up_message?: string | null;
   cover?: string; //封面图片文件名
   cover?: string; //封面图片文件名
   teacher_id?: string; //UserID
   teacher_id?: string; //UserID
   publicity: number; //类型-公开/内部
   publicity: number; //类型-公开/内部
@@ -47,6 +48,7 @@ export interface ICourseDataResponse {
   title: string; //标题
   title: string; //标题
   subtitle: string; //副标题
   subtitle: string; //副标题
   summary?: string; //副标题
   summary?: string; //副标题
+  sign_up_message?: string | null; //报名弹窗消息
   teacher?: IUser; //UserID
   teacher?: IUser; //UserID
   course_count?: number; //课程数
   course_count?: number; //课程数
   publicity: number; //类型-公开/内部
   publicity: number; //类型-公开/内部
@@ -56,6 +58,7 @@ export interface ICourseDataResponse {
   channel_id: string; //标准答案ID
   channel_id: string; //标准答案ID
   channel_name?: string; //文集标题
   channel_name?: string; //文集标题
   channel_owner?: IStudio; //文集拥有者
   channel_owner?: IStudio; //文集拥有者
+  studio?: IStudio; //课程拥有者
   start_at: string; //课程开始时间
   start_at: string; //课程开始时间
   end_at: string; //课程结束时间
   end_at: string; //课程结束时间
   sign_up_start_at: string; //报名开始时间
   sign_up_start_at: string; //报名开始时间

+ 1 - 1
dashboard/src/components/corpus/ChapterTagList.tsx

@@ -43,7 +43,7 @@ const ChapterTagListWidget = ({
 
 
   useEffect(() => {
   useEffect(() => {
     const strTags = tags.length > 0 ? "&tags=" + tags.join() : "";
     const strTags = tags.length > 0 ? "&tags=" + tags.join() : "";
-    const url = `/v2/tag?view=chapter${strTags}&progress=${progress}&lang=${lang}&channel_type=${type}`;
+    const url = `/v2/tags-in-chapter?view=chapter${strTags}&progress=${progress}&lang=${lang}&channel_type=${type}`;
     console.log("tag list ajax", url);
     console.log("tag list ajax", url);
     setLoad(true);
     setLoad(true);
     get<IChapterTagResponse>(url)
     get<IChapterTagResponse>(url)

+ 13 - 0
dashboard/src/components/course/CourseInfoEdit.tsx

@@ -43,6 +43,7 @@ interface IFormData {
   teacherId?: string;
   teacherId?: string;
   anthologyId?: string;
   anthologyId?: string;
   channelId?: string;
   channelId?: string;
+  signUpMessage?: string | null;
   dateRange?: string[];
   dateRange?: string[];
   signUp?: string[];
   signUp?: string[];
   status: number;
   status: number;
@@ -98,6 +99,7 @@ const CourseInfoEditWidget = ({
             subtitle: values.subtitle, //副标题
             subtitle: values.subtitle, //副标题
             summary: values.summary,
             summary: values.summary,
             content: values.content, //简介
             content: values.content, //简介
+            sign_up_message: values.signUpMessage,
             cover: _cover, //封面图片文件名
             cover: _cover, //封面图片文件名
             teacher_id: values.teacherId, //UserID
             teacher_id: values.teacherId, //UserID
             publicity: values.status, //类型-公开/内部
             publicity: values.status, //类型-公开/内部
@@ -161,6 +163,7 @@ const CourseInfoEditWidget = ({
             subtitle: res.data.subtitle,
             subtitle: res.data.subtitle,
             summary: res.data.summary,
             summary: res.data.summary,
             content: res.data.content ?? "",
             content: res.data.content ?? "",
+            signUpMessage: res.data.sign_up_message,
             cover: res.data.cover
             cover: res.data.cover
               ? [
               ? [
                   {
                   {
@@ -435,6 +438,16 @@ const CourseInfoEditWidget = ({
             }}
             }}
           </ProFormDependency>
           </ProFormDependency>
         </ProForm.Group>
         </ProForm.Group>
+        <ProForm.Group>
+          <Form.Item
+            name="signUpMessage"
+            label={intl.formatMessage({
+              id: "forms.fields.sign-up-message.label",
+            })}
+          >
+            <MDEditor />
+          </Form.Item>
+        </ProForm.Group>
         <ProForm.Group>
         <ProForm.Group>
           <Form.Item
           <Form.Item
             name="content"
             name="content"

+ 10 - 3
dashboard/src/components/course/SignUp.tsx

@@ -17,6 +17,7 @@ import {
   TCourseExpRequest,
   TCourseExpRequest,
   TCourseJoinMode,
   TCourseJoinMode,
 } from "../api/Course";
 } from "../api/Course";
+import Marked from "../general/Marked";
 
 
 const { confirm } = Modal;
 const { confirm } = Modal;
 const { Text } = Typography;
 const { Text } = Typography;
@@ -24,12 +25,14 @@ const { Text } = Typography;
 interface IWidget {
 interface IWidget {
   courseId: string;
   courseId: string;
   startAt?: string;
   startAt?: string;
+  signUpMessage?: string | null;
   joinMode?: TCourseJoinMode;
   joinMode?: TCourseJoinMode;
   expRequest?: TCourseExpRequest;
   expRequest?: TCourseExpRequest;
   onStatusChanged?: Function;
   onStatusChanged?: Function;
 }
 }
 const SignUpWidget = ({
 const SignUpWidget = ({
   courseId,
   courseId,
+  signUpMessage,
   joinMode,
   joinMode,
   startAt,
   startAt,
   expRequest,
   expRequest,
@@ -48,9 +51,13 @@ const SignUpWidget = ({
           content: (
           content: (
             <div>
             <div>
               <div>
               <div>
-                {intl.formatMessage({
-                  id: `course.join.mode.${joinMode}.message`,
-                })}
+                {signUpMessage ? (
+                  <Marked text={signUpMessage} />
+                ) : (
+                  intl.formatMessage({
+                    id: `course.join.mode.${joinMode}.message`,
+                  })
+                )}
               </div>
               </div>
               <Text type="danger">
               <Text type="danger">
                 {intl.formatMessage({
                 {intl.formatMessage({

+ 1 - 0
dashboard/src/components/course/Status.tsx

@@ -96,6 +96,7 @@ const StatusWidget = ({ data }: IWidget) => {
               currUser={currMember}
               currUser={currMember}
               courseId={data?.id}
               courseId={data?.id}
               courseName={data?.title}
               courseName={data?.title}
+              signUpMessage={data?.sign_up_message}
               user={{
               user={{
                 id: user.id,
                 id: user.id,
                 nickName: user.nickName,
                 nickName: user.nickName,

+ 17 - 7
dashboard/src/components/course/UserAction.tsx

@@ -15,6 +15,7 @@ import {
 
 
 import { IUser } from "../auth/User";
 import { IUser } from "../auth/User";
 import { post, put } from "../../request";
 import { post, put } from "../../request";
+import Marked from "../general/Marked";
 
 
 export interface ISetStatus {
 export interface ISetStatus {
   courseMemberId?: string;
   courseMemberId?: string;
@@ -68,7 +69,7 @@ export const setStatus = ({
 }: ISetStatus) => {
 }: ISetStatus) => {
   Modal.confirm({
   Modal.confirm({
     icon: <ExclamationCircleFilled />,
     icon: <ExclamationCircleFilled />,
-    content: message,
+    content: <Marked text={message} />,
     onOk() {
     onOk() {
       const query: ISetStatus = {
       const query: ISetStatus = {
         status: status,
         status: status,
@@ -105,6 +106,7 @@ interface IWidget {
   currUser?: ICourseMemberData;
   currUser?: ICourseMemberData;
   courseId?: string;
   courseId?: string;
   courseName?: string;
   courseName?: string;
+  signUpMessage?: string | null;
   user?: IUser;
   user?: IUser;
   onStatusChanged?: Function;
   onStatusChanged?: Function;
 }
 }
@@ -113,6 +115,7 @@ const UserActionWidget = ({
   currUser,
   currUser,
   courseId,
   courseId,
   courseName,
   courseName,
+  signUpMessage,
   user,
   user,
   onStatusChanged,
   onStatusChanged,
 }: IWidget) => {
 }: IWidget) => {
@@ -130,6 +133,18 @@ const UserActionWidget = ({
   } else {
   } else {
     buttonDisable = false;
     buttonDisable = false;
   }
   }
+
+  let courseMessage = intl.formatMessage(
+    {
+      id: `course.member.status.${action}.message`,
+    },
+    { course: courseName }
+  );
+  if (action === "apply" || action === "join") {
+    if (signUpMessage) {
+      courseMessage = signUpMessage;
+    }
+  }
   return (
   return (
     <>
     <>
       {status ? (
       {status ? (
@@ -147,12 +162,7 @@ const UserActionWidget = ({
               courseMemberId: currUser?.id,
               courseMemberId: currUser?.id,
               courseId: courseId,
               courseId: courseId,
               user: user,
               user: user,
-              message: intl.formatMessage(
-                {
-                  id: `course.member.status.${action}.message`,
-                },
-                { course: courseName }
-              ),
+              message: courseMessage,
               status: status,
               status: status,
               onSuccess: (data: ICourseMemberData) => {
               onSuccess: (data: ICourseMemberData) => {
                 statusChange(data);
                 statusChange(data);