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

course 组件全部移动到 components/course

visuddhinanda 3 лет назад
Родитель
Сommit
8a4b127947

+ 2 - 2
dashboard/src/components/library/course/AddLesson.tsx → dashboard/src/components/course/AddLesson.tsx

@@ -6,9 +6,9 @@ import {
 } from "@ant-design/pro-components";
 } from "@ant-design/pro-components";
 import { Button, message, Popover } from "antd";
 import { Button, message, Popover } from "antd";
 import { UserAddOutlined } from "@ant-design/icons";
 import { UserAddOutlined } from "@ant-design/icons";
-import { get } from "../../../request";
+import { get } from "../../request";
 
 
-import { IUserListResponse } from "../../api/Auth";
+import { IUserListResponse } from "../api/Auth";
 
 
 interface IFormData {
 interface IFormData {
   userId: string;
   userId: string;

+ 4 - 8
dashboard/src/components/library/course/AddStudent.tsx → dashboard/src/components/course/AddStudent.tsx

@@ -1,14 +1,10 @@
 import { useIntl } from "react-intl";
 import { useIntl } from "react-intl";
-import {
-  ProForm,
-  ProFormSelect,
-  ProFormText,
-} from "@ant-design/pro-components";
-import { Button, message, Popover, MenuProps } from "antd";
+import { ProForm, ProFormSelect } from "@ant-design/pro-components";
+import { Button, message, Popover } from "antd";
 import { UserAddOutlined } from "@ant-design/icons";
 import { UserAddOutlined } from "@ant-design/icons";
-import { get } from "../../../request";
+import { get } from "../../request";
 
 
-import { IUserListResponse } from "../../api/Auth";
+import { IUserListResponse } from "../api/Auth";
 
 
 interface IFormData {
 interface IFormData {
   userId: string;
   userId: string;

+ 3 - 7
dashboard/src/components/library/course/AddTeacher.tsx → dashboard/src/components/course/AddTeacher.tsx

@@ -1,14 +1,10 @@
 import { useIntl } from "react-intl";
 import { useIntl } from "react-intl";
-import {
-  ProForm,
-  ProFormSelect,
-  ProFormText,
-} from "@ant-design/pro-components";
+import { ProForm, ProFormSelect } from "@ant-design/pro-components";
 import { Button, message, Popover } from "antd";
 import { Button, message, Popover } from "antd";
 import { UserAddOutlined } from "@ant-design/icons";
 import { UserAddOutlined } from "@ant-design/icons";
-import { get } from "../../../request";
+import { get } from "../../request";
 
 
-import { IUserListResponse } from "../../api/Auth";
+import { IUserListResponse } from "../api/Auth";
 
 
 interface IFormData {
 interface IFormData {
   userId: string;
   userId: string;

+ 24 - 24
dashboard/src/components/library/course/CourseIntro.tsx → dashboard/src/components/course/CourseIntro.tsx

@@ -1,24 +1,24 @@
-//课程详情简介
-import { Col, Row } from "antd";
-import { marked } from "marked";
-
-interface IWidget {
-  intro?: string;
-}
-const Widget = ({ intro }: IWidget) => {
-  return (
-    <Row>
-      <Col flex="auto"></Col>
-      <Col flex="960px">
-        <div
-          dangerouslySetInnerHTML={{
-            __html: marked.parse(intro ? intro : ""),
-          }}
-        />
-      </Col>
-      <Col flex="auto"></Col>
-    </Row>
-  );
-};
-
-export default Widget;
+//课程详情简介
+import { Col, Row } from "antd";
+import { marked } from "marked";
+
+interface IWidget {
+  intro?: string;
+}
+const Widget = ({ intro }: IWidget) => {
+  return (
+    <Row>
+      <Col flex="auto"></Col>
+      <Col flex="960px">
+        <div
+          dangerouslySetInnerHTML={{
+            __html: marked.parse(intro ? intro : ""),
+          }}
+        />
+      </Col>
+      <Col flex="auto"></Col>
+    </Row>
+  );
+};
+
+export default Widget;

+ 71 - 72
dashboard/src/components/library/course/CourseList.tsx → dashboard/src/components/course/CourseList.tsx

@@ -1,72 +1,71 @@
-//课程列表
-import React, { useEffect, useState } from "react";
-import { LikeOutlined, MessageOutlined, StarOutlined } from "@ant-design/icons";
-import { Avatar, List, message, Space, Typography } from "antd";
-import { ICourseListResponse } from "../../api/Course";
-import { ICourse } from "../../../pages/library/course/course";
-import { Link, useNavigate } from "react-router-dom";
-import { API_HOST, get } from "../../../request";
-
-const { Paragraph } = Typography;
-
-interface IWidget {
-  type: "open" | "close";
-}
-const Widget = ({ type }: IWidget) => {
-  const [data, setData] = useState<ICourse[]>();
-  const navigate = useNavigate();
-
-  useEffect(() => {
-    get<ICourseListResponse>(`/v2/course?view=${type}`).then((json) => {
-      if (json.ok) {
-        console.log(json.data);
-        const course: ICourse[] = json.data.rows.map((item) => {
-          return {
-            id: item.id,
-            title: item.title,
-            subtitle: item.subtitle,
-            teacher: item.teacher,
-            intro: item.content,
-            coverUrl: item.cover,
-          };
-        });
-        setData(course);
-      } else {
-        message.error(json.message);
-      }
-    });
-  }, []);
-
-  return (
-    <List
-      itemLayout="vertical"
-      size="default"
-      pagination={{
-        onChange: (page) => {
-          console.log(page);
-        },
-        pageSize: 5,
-      }}
-      dataSource={data}
-      renderItem={(item) => (
-        <List.Item
-          key={item.title}
-          extra={
-            <img width={128} alt="logo" src={API_HOST + "/" + item.coverUrl} />
-          }
-        >
-          <List.Item.Meta
-            avatar={<Avatar />}
-            title={<Link to={`/course/show/${item.id}`}>{item.title}</Link>}
-            description={<div>主讲:{item.teacher?.nickName}</div>}
-          />
-          <Paragraph ellipsis={{ rows: 2, expandable: false }}>
-            {item.intro}
-          </Paragraph>
-        </List.Item>
-      )}
-    />
-  );
-};
-
-export default Widget;
+//课程列表
+import { Link } from "react-router-dom";
+import { useEffect, useState } from "react";
+
+import { Avatar, List, message, Typography } from "antd";
+import { ICourse } from "../../pages/library/course/course";
+import { ICourseListResponse } from "../api/Course";
+import { API_HOST, get } from "../../request";
+
+const { Paragraph } = Typography;
+
+interface IWidget {
+  type: "open" | "close";
+}
+const Widget = ({ type }: IWidget) => {
+  const [data, setData] = useState<ICourse[]>();
+
+  useEffect(() => {
+    get<ICourseListResponse>(`/v2/course?view=${type}`).then((json) => {
+      if (json.ok) {
+        console.log(json.data);
+        const course: ICourse[] = json.data.rows.map((item) => {
+          return {
+            id: item.id,
+            title: item.title,
+            subtitle: item.subtitle,
+            teacher: item.teacher,
+            intro: item.content,
+            coverUrl: item.cover,
+          };
+        });
+        setData(course);
+      } else {
+        message.error(json.message);
+      }
+    });
+  }, []);
+
+  return (
+    <List
+      itemLayout="vertical"
+      size="default"
+      pagination={{
+        onChange: (page) => {
+          console.log(page);
+        },
+        pageSize: 5,
+      }}
+      dataSource={data}
+      renderItem={(item) => (
+        <List.Item
+          key={item.title}
+          extra={
+            <img width={128} alt="logo" src={API_HOST + "/" + item.coverUrl} />
+          }
+        >
+          <List.Item.Meta
+            avatar={<Avatar />}
+            title={<Link to={`/course/show/${item.id}`}>{item.title}</Link>}
+            description={<div>主讲:{item.teacher?.nickName}</div>}
+          />
+          <Paragraph ellipsis={{ rows: 2, expandable: false }}>
+            {item.intro}
+          </Paragraph>
+        </List.Item>
+      )}
+    />
+  );
+};
+
+export default Widget;

+ 66 - 66
dashboard/src/components/library/course/CourseShow.tsx → dashboard/src/components/course/CourseShow.tsx

@@ -1,66 +1,66 @@
-//课程详情图片标题按钮主讲人组合
-import { Link } from "react-router-dom";
-import { Image, Button, Space, Col, Row, Breadcrumb } from "antd";
-import { Typography } from "antd";
-import { HomeOutlined } from "@ant-design/icons";
-
-import { IUser } from "../../auth/User";
-import { API_HOST } from "../../../request";
-import UserName from "../../auth/UserName";
-
-const { Title } = Typography;
-
-interface IWidget {
-  title?: string;
-  subtitle?: string;
-  coverUrl?: string;
-  teacher?: IUser;
-}
-const Widget = ({ title, subtitle, coverUrl, teacher }: IWidget) => {
-  return (
-    <>
-      <Row>
-        <Col flex="auto"></Col>
-        <Col flex="960px">
-          <Space direction="vertical">
-            <Breadcrumb>
-              <Breadcrumb.Item>
-                <HomeOutlined />
-              </Breadcrumb.Item>
-              <Breadcrumb.Item>
-                <Link to="/course/list">课程</Link>
-              </Breadcrumb.Item>
-              <Breadcrumb.Item>{title}</Breadcrumb.Item>
-            </Breadcrumb>
-            <Space>
-              <Image
-                width={200}
-                style={{ borderRadius: 12 }}
-                src={API_HOST + "/" + coverUrl}
-                fallback={`${API_HOST}/app/course/img/default.jpg`}
-              />
-              <Space direction="vertical">
-                <Title level={3}>{title}</Title>
-                <Title level={5}>{subtitle}</Title>
-                <Button type="primary">关注</Button>
-              </Space>
-            </Space>
-            <div>
-              主讲人: <UserName {...teacher} />
-            </div>
-          </Space>
-        </Col>
-        <Col flex="auto"></Col>
-      </Row>
-    </>
-  );
-};
-
-export default Widget;
-
-/*
-<Button type="primary">关注</Button>
-<Button type="primary" disabled>
-  已关注
-</Button>
-*/
+//课程详情图片标题按钮主讲人组合
+import { Link } from "react-router-dom";
+import { Image, Button, Space, Col, Row, Breadcrumb } from "antd";
+import { Typography } from "antd";
+import { HomeOutlined } from "@ant-design/icons";
+
+import { IUser } from "../auth/User";
+import { API_HOST } from "../../request";
+import UserName from "../auth/UserName";
+
+const { Title } = Typography;
+
+interface IWidget {
+  title?: string;
+  subtitle?: string;
+  coverUrl?: string;
+  teacher?: IUser;
+}
+const Widget = ({ title, subtitle, coverUrl, teacher }: IWidget) => {
+  return (
+    <>
+      <Row>
+        <Col flex="auto"></Col>
+        <Col flex="960px">
+          <Space direction="vertical">
+            <Breadcrumb>
+              <Breadcrumb.Item>
+                <HomeOutlined />
+              </Breadcrumb.Item>
+              <Breadcrumb.Item>
+                <Link to="/course/list">课程</Link>
+              </Breadcrumb.Item>
+              <Breadcrumb.Item>{title}</Breadcrumb.Item>
+            </Breadcrumb>
+            <Space>
+              <Image
+                width={200}
+                style={{ borderRadius: 12 }}
+                src={API_HOST + "/" + coverUrl}
+                fallback={`${API_HOST}/app/course/img/default.jpg`}
+              />
+              <Space direction="vertical">
+                <Title level={3}>{title}</Title>
+                <Title level={5}>{subtitle}</Title>
+                <Button type="primary">关注</Button>
+              </Space>
+            </Space>
+            <div>
+              主讲人: <UserName {...teacher} />
+            </div>
+          </Space>
+        </Col>
+        <Col flex="auto"></Col>
+      </Row>
+    </>
+  );
+};
+
+export default Widget;
+
+/*
+<Button type="primary">关注</Button>
+<Button type="primary" disabled>
+  已关注
+</Button>
+*/

+ 72 - 72
dashboard/src/components/library/course/LecturerList.tsx → dashboard/src/components/course/LecturerList.tsx

@@ -1,72 +1,72 @@
-//主讲人列表
-import { useNavigate } from "react-router-dom";
-import { useEffect, useState } from "react";
-import { Card, List, message, Typography } from "antd";
-
-import { ICourse } from "../../../pages/library/course/course";
-import { API_HOST, get } from "../../../request";
-import { ICourseListResponse } from "../../api/Course";
-
-const { Meta } = Card;
-const { Paragraph } = Typography;
-
-const Widget = () => {
-  const [data, setData] = useState<ICourse[]>();
-  const navigate = useNavigate();
-
-  useEffect(() => {
-    get<ICourseListResponse>(`/v2/course?view=new&limit=4`).then((json) => {
-      if (json.ok) {
-        console.log(json.data);
-        const course: ICourse[] = json.data.rows.map((item) => {
-          return {
-            id: item.id,
-            title: item.title,
-            subtitle: item.subtitle,
-            teacher: item.teacher,
-            intro: item.content,
-            coverUrl: item.cover,
-          };
-        });
-        setData(course);
-      } else {
-        message.error(json.message);
-      }
-    });
-  }, []);
-  return (
-    <List
-      grid={{ gutter: 16, column: 4 }}
-      dataSource={data}
-      renderItem={(item) => (
-        <List.Item>
-          <Card
-            hoverable
-            style={{ width: "100%", height: 300 }}
-            cover={
-              <img
-                alt="example"
-                src={API_HOST + "/" + item.coverUrl}
-                width="240"
-                height="200"
-              />
-            }
-            onClick={(e) => {
-              navigate(`/course/show/${item.id}`);
-            }}
-          >
-            <Meta
-              title={item.title}
-              description={
-                <Paragraph ellipsis={{ rows: 2, expandable: false }}>
-                  {item.intro}
-                </Paragraph>
-              }
-            />
-          </Card>
-        </List.Item>
-      )}
-    />
-  );
-};
-export default Widget;
+//主讲人列表
+import { useNavigate } from "react-router-dom";
+import { useEffect, useState } from "react";
+import { Card, List, message, Typography } from "antd";
+
+import { ICourse } from "../../pages/library/course/course";
+import { ICourseListResponse } from "../api/Course";
+import { API_HOST, get } from "../../request";
+
+const { Meta } = Card;
+const { Paragraph } = Typography;
+
+const Widget = () => {
+  const [data, setData] = useState<ICourse[]>();
+  const navigate = useNavigate();
+
+  useEffect(() => {
+    get<ICourseListResponse>(`/v2/course?view=new&limit=4`).then((json) => {
+      if (json.ok) {
+        console.log(json.data);
+        const course: ICourse[] = json.data.rows.map((item) => {
+          return {
+            id: item.id,
+            title: item.title,
+            subtitle: item.subtitle,
+            teacher: item.teacher,
+            intro: item.content,
+            coverUrl: item.cover,
+          };
+        });
+        setData(course);
+      } else {
+        message.error(json.message);
+      }
+    });
+  }, []);
+  return (
+    <List
+      grid={{ gutter: 16, column: 4 }}
+      dataSource={data}
+      renderItem={(item) => (
+        <List.Item>
+          <Card
+            hoverable
+            style={{ width: "100%", height: 300 }}
+            cover={
+              <img
+                alt="example"
+                src={API_HOST + "/" + item.coverUrl}
+                width="240"
+                height="200"
+              />
+            }
+            onClick={(e) => {
+              navigate(`/course/show/${item.id}`);
+            }}
+          >
+            <Meta
+              title={item.title}
+              description={
+                <Paragraph ellipsis={{ rows: 2, expandable: false }}>
+                  {item.intro}
+                </Paragraph>
+              }
+            />
+          </Card>
+        </List.Item>
+      )}
+    />
+  );
+};
+export default Widget;

+ 0 - 0
dashboard/src/components/library/course/LessonSelect.tsx → dashboard/src/components/course/LessonSelect.tsx


+ 0 - 0
dashboard/src/components/library/course/LessonTreeShow.tsx → dashboard/src/components/course/LessonTreeShow.tsx


+ 0 - 0
dashboard/src/components/library/course/StudentsSelect.tsx → dashboard/src/components/course/StudentsSelect.tsx


+ 0 - 0
dashboard/src/components/library/course/TeacherSelect.tsx → dashboard/src/components/course/TeacherSelect.tsx


+ 0 - 0
dashboard/src/components/library/course/UploadTexture.tsx → dashboard/src/components/course/UploadTexture.tsx


+ 4 - 4
dashboard/src/pages/library/course/course.tsx

@@ -1,10 +1,10 @@
 //课程详情页面
 //课程详情页面
-import { Link, useParams } from "react-router-dom";
+import { useParams } from "react-router-dom";
 import { useEffect, useState } from "react";
 import { useEffect, useState } from "react";
-import { Breadcrumb, Divider, message } from "antd";
+import { Divider, message } from "antd";
 
 
-import CourseShow from "../../../components/library/course/CourseShow";
-import CourseIntro from "../../../components/library/course/CourseIntro";
+import CourseShow from "../../../components/course/CourseShow";
+import CourseIntro from "../../../components/course/CourseIntro";
 import TextBook from "../../../components/course/TextBook";
 import TextBook from "../../../components/course/TextBook";
 
 
 import { IUser } from "../../../components/auth/User";
 import { IUser } from "../../../components/auth/User";

+ 4 - 9
dashboard/src/pages/library/course/lesson.tsx

@@ -1,15 +1,11 @@
 //讲页面
 //讲页面
-import { Link } from "react-router-dom";
-import { useParams } from "react-router-dom";
 import { Layout, Col, Row, Divider } from "antd";
 import { Layout, Col, Row, Divider } from "antd";
-import CourseShow from "../../../components/library/course/CourseShow";
-import CourseIntro from "../../../components/library/course/CourseIntro";
+
 import TocTree from "../../../components/article/TocTree";
 import TocTree from "../../../components/article/TocTree";
 import { ListNodeData } from "../../../components/article/EditableTree";
 import { ListNodeData } from "../../../components/article/EditableTree";
-import ReactMarkdown from "react-markdown";
-import rehypeRaw from "rehype-raw";
+
 import { marked } from "marked";
 import { marked } from "marked";
-const { Content, Header } = Layout;
+const { Content } = Layout;
 
 
 let arrTocTree: ListNodeData[] = [];
 let arrTocTree: ListNodeData[] = [];
 let i = 0;
 let i = 0;
@@ -38,8 +34,7 @@ let markdown =
   "```const a=2; ```";
   "```const a=2; ```";
 
 
 const Widget = () => {
 const Widget = () => {
-  // TODO
-  const { courseid } = useParams(); //url 参数
+  // TODO delete
 
 
   return (
   return (
     <Layout>
     <Layout>

+ 2 - 2
dashboard/src/pages/library/course/list.tsx

@@ -1,8 +1,8 @@
 //课程主页
 //课程主页
 import { Layout, Col, Row, Divider } from "antd";
 import { Layout, Col, Row, Divider } from "antd";
 
 
-import LecturerList from "../../../components/library/course/LecturerList";
-import CourseList from "../../../components/library/course/CourseList";
+import LecturerList from "../../../components/course/LecturerList";
+import CourseList from "../../../components/course/CourseList";
 const { Content, Header } = Layout;
 const { Content, Header } = Layout;
 
 
 const Widget = () => {
 const Widget = () => {

+ 0 - 2
dashboard/src/pages/studio/course/edit.tsx

@@ -21,13 +21,11 @@ import {
 import PublicitySelect from "../../../components/studio/PublicitySelect";
 import PublicitySelect from "../../../components/studio/PublicitySelect";
 import GoBack from "../../../components/studio/GoBack";
 import GoBack from "../../../components/studio/GoBack";
 
 
-import LessonSelect from "../../../components/library/course/LessonSelect";
 import { IUserListResponse } from "../../../components/api/Auth";
 import { IUserListResponse } from "../../../components/api/Auth";
 import MDEditor from "@uiw/react-md-editor";
 import MDEditor from "@uiw/react-md-editor";
 import { DefaultOptionType } from "antd/lib/select";
 import { DefaultOptionType } from "antd/lib/select";
 import { UploadFile } from "antd/es/upload/interface";
 import { UploadFile } from "antd/es/upload/interface";
 import { IAttachmentResponse } from "../../../components/api/Attachments";
 import { IAttachmentResponse } from "../../../components/api/Attachments";
-import StudentsSelect from "../../../components/library/course/StudentsSelect";
 import CourseMember from "../../../components/course/CourseMember";
 import CourseMember from "../../../components/course/CourseMember";
 import { IAnthologyListResponse } from "../../../components/api/Article";
 import { IAnthologyListResponse } from "../../../components/api/Article";
 import { IApiResponseChannelList } from "../../../components/api/Channel";
 import { IApiResponseChannelList } from "../../../components/api/Channel";

+ 2 - 2
dashboard/src/pages/studio/course/show.tsx

@@ -4,8 +4,8 @@ import { Card, Col, Row } from "antd";
 
 
 import GoBack from "../../../components/studio/GoBack";
 import GoBack from "../../../components/studio/GoBack";
 import { ProForm } from "@ant-design/pro-components";
 import { ProForm } from "@ant-design/pro-components";
-import LessonTreeShow from "../../../components/library/course/LessonTreeShow";
-import StudentsSelect from "../../../components/library/course/StudentsSelect";
+import LessonTreeShow from "../../../components/course/LessonTreeShow";
+import StudentsSelect from "../../../components/course/StudentsSelect";
 
 
 interface IFormData {
 interface IFormData {
   uid: string;
   uid: string;