فهرست منبع

Merge pull request #2122 from visuddhinanda/agile

Agile
visuddhinanda 1 سال پیش
والد
کامیت
8c191338f3

+ 16 - 2
dashboard/src/components/article/TypeCourse.tsx

@@ -21,9 +21,13 @@ import "./article.css";
 
 import { ArticleMode, ArticleType } from "./Article";
 import TypeArticle from "./TypeArticle";
-import { useNavigate, useSearchParams } from "react-router-dom";
+import { Link, useNavigate, useSearchParams } from "react-router-dom";
 
 import SelectChannel from "../course/SelectChannel";
+import { Space, Tag, Typography } from "antd";
+import { useIntl } from "react-intl";
+
+const { Text } = Typography;
 
 /**
  * 每种article type 对应的路由参数
@@ -72,6 +76,7 @@ const TypeCourseWidget = ({
   onLoading,
   onError,
 }: IWidget) => {
+  const intl = useIntl();
   const [anthologyId, setAnthologyId] = useState<string>();
   const [course, setCourse] = useState<ICourseDataResponse>();
   const [currUser, setCurrUser] = useState<ICourseUser>();
@@ -188,7 +193,7 @@ const TypeCourseWidget = ({
 
   return anthologyId && currUser ? (
     <>
-      {!currUser.channel_id ? (
+      {!currUser.channel_id && currUser.role === "student" ? (
         <SelectChannel
           courseId={courseId}
           open={channelPickerOpen}
@@ -202,6 +207,15 @@ const TypeCourseWidget = ({
       ) : (
         <></>
       )}
+      <Space>
+        <Text>
+          {"课程:"}
+          <Link to={`/course/show/${course?.id}`} target="_blank">
+            {course?.title}
+          </Link>
+        </Text>
+        <Tag>{intl.formatMessage({ id: `auth.role.${currUser.role}` })}</Tag>
+      </Space>
       <TypeArticle
         type={"article"}
         articleId={articleId}

+ 10 - 4
dashboard/src/components/general/ErrorResult.tsx

@@ -1,5 +1,6 @@
 import { Result } from "antd";
 import { ResultStatusType } from "antd/lib/result";
+import { useIntl } from "react-intl";
 
 interface IWidget {
   code: number;
@@ -7,24 +8,29 @@ interface IWidget {
 }
 
 const ErrorResultWidget = ({ code, message }: IWidget) => {
+  const intl = useIntl();
   let strStatus: ResultStatusType;
   let strTitle: string = "";
   switch (code) {
     case 401:
       strStatus = 403;
-      strTitle = "未登录";
+      strTitle = intl.formatMessage({ id: "labels.error.401" });
       break;
     case 403:
       strStatus = 403;
-      strTitle = "没有权限";
+      strTitle = intl.formatMessage({ id: "labels.error.403" });
       break;
     case 404:
       strStatus = 404;
-      strTitle = "没有找到指定的资源";
+      strTitle = intl.formatMessage({ id: "labels.error.404" });
       break;
     case 500:
       strStatus = 500;
-      strTitle = "服务器内部错误";
+      strTitle = intl.formatMessage({ id: "labels.error.500" });
+      break;
+    case 429:
+      strStatus = "error";
+      strTitle = intl.formatMessage({ id: "labels.error.429" });
       break;
     default:
       strStatus = "error";

+ 5 - 0
dashboard/src/locales/en-US/label.ts

@@ -47,6 +47,11 @@ const items = {
   "labels.sign-up": "Sign Up",
   "labels.done": "Done",
   "labels.tag.list": "tag list",
+  "labels.error.401": "未登录",
+  "labels.error.403": "没有权限",
+  "labels.error.404": "没有找到指定的资源",
+  "labels.error.429": "请求过于频繁",
+  "labels.error.500": "服务器内部错误",
 };
 
 export default items;

+ 5 - 0
dashboard/src/locales/zh-Hans/label.ts

@@ -52,6 +52,11 @@ const items = {
   "labels.sign-up": "注册",
   "labels.done": "完成",
   "labels.tag.list": "标签列表",
+  "labels.error.401": "未登录",
+  "labels.error.403": "没有权限",
+  "labels.error.404": "没有找到指定的资源",
+  "labels.error.429": "请求过于频繁",
+  "labels.error.500": "服务器内部错误",
 };
 
 export default items;