{" "}
{/* 添加这个包装 div */}
diff --git a/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx b/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx
index cc984e1..de577eb 100755
--- a/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx
+++ b/apps/web/src/components/models/course/detail/CourseDetailTitle.tsx
@@ -12,11 +12,12 @@ import dayjs from "dayjs";
import CourseOperationBtns from "./JoinLearingButton";
export default function CourseDetailTitle() {
- const { course } = useContext(CourseDetailContext);
+ const { course, lecture, selectedLectureId } =
+ useContext(CourseDetailContext);
return (
- {course?.title}
+ {!selectedLectureId ? course?.title : lecture?.title}
{course?.author?.showname && (
@@ -36,15 +37,27 @@ export default function CourseDetailTitle() {
{"发布于:"}
- {dayjs(course?.createdAt).format("YYYY年M月D日")}
+ {dayjs(
+ !selectedLectureId
+ ? course?.createdAt
+ : lecture?.createdAt
+ ).format("YYYY年M月D日")}
{"最后更新:"}
- {dayjs(course?.updatedAt).format("YYYY年M月D日")}
+ {dayjs(
+ !selectedLectureId
+ ? course?.updatedAt
+ : lecture?.updatedAt
+ ).format("YYYY年M月D日")}
-
{`观看次数${course?.meta?.views || 0}`}
+
{`观看次数${
+ !selectedLectureId
+ ? course?.views || 0
+ : lecture?.views || 0
+ }`}
diff --git a/apps/web/src/components/models/course/detail/CourseSyllabus/LectureItem.tsx b/apps/web/src/components/models/course/detail/CourseSyllabus/LectureItem.tsx
index 39bce21..9f41c82 100755
--- a/apps/web/src/components/models/course/detail/CourseSyllabus/LectureItem.tsx
+++ b/apps/web/src/components/models/course/detail/CourseSyllabus/LectureItem.tsx
@@ -45,7 +45,9 @@ export const LectureItem: React.FC = ({
)}
-
{lecture.title}
+
+ {lecture.title}
+
{lecture.subTitle && (
{lecture.subTitle}
@@ -53,7 +55,9 @@ export const LectureItem: React.FC = ({
)}
- {lecture?.meta?.views ? lecture?.meta?.views : 0}
+
+ {lecture?.views ? lecture?.views : 0}
+
diff --git a/apps/web/src/components/models/course/detail/JoinLearingButton.tsx b/apps/web/src/components/models/course/detail/JoinLearingButton.tsx
index 68c4243..942a7de 100644
--- a/apps/web/src/components/models/course/detail/JoinLearingButton.tsx
+++ b/apps/web/src/components/models/course/detail/JoinLearingButton.tsx
@@ -12,15 +12,17 @@ import {
EditTwoTone,
LoginOutlined,
} from "@ant-design/icons";
+import toast from "react-hot-toast";
export default function CourseOperationBtns() {
const { id } = useParams();
const { isAuthenticated, user, hasSomePermissions, hasEveryPermissions } =
useAuth();
const navigate = useNavigate();
- const { course, canEdit, userIsLearning } = useContext(CourseDetailContext);
+ const { course, canEdit, userIsLearning, setUserIsLearning} = useContext(CourseDetailContext);
const { update } = useStaff();
const [isHovered, setIsHovered] = useState(false);
+
const toggleLearning = async () => {
if (!userIsLearning) {
await update.mutateAsync({
@@ -31,7 +33,10 @@ export default function CourseOperationBtns() {
},
},
});
+ setUserIsLearning(true)
+ toast.success("加入学习成功");
} else {
+
await update.mutateAsync({
where: { id: user?.id },
data: {
@@ -42,6 +47,8 @@ export default function CourseOperationBtns() {
},
},
});
+ toast.success("退出学习成功");
+ setUserIsLearning(false)
}
};
return (
diff --git a/apps/web/src/components/models/course/detail/course-objectives.tsx b/apps/web/src/components/models/course/detail/course-objectives.tsx
deleted file mode 100755
index b849eac..0000000
--- a/apps/web/src/components/models/course/detail/course-objectives.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { CheckOutlined } from '@ant-design/icons';
-import React from 'react';
-interface CourseObjectivesProps {
- objectives: string[];
- title?: string;
-}
-const CourseObjectives: React.FC
= ({
- objectives,
- title = "您将会学到"
-}) => {
- return (
-
-
{title}
-
- {objectives.map((objective, index) => (
-
-
- {objective}
-
- ))}
-
-
- );
-};
-
-export default CourseObjectives;
\ No newline at end of file
diff --git a/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx b/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx
index bc84b18..6cbfd00 100755
--- a/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx
+++ b/apps/web/src/components/models/course/editor/context/CourseEditorContext.tsx
@@ -82,7 +82,7 @@ export function CourseFormProvider({
}, [course, form]);
const onSubmit = async (values: any) => {
- console.log(values);
+
const sections = values?.sections || [];
const deptIds = values?.deptIds || [];
const termIds = taxonomies
@@ -101,13 +101,17 @@ export function CourseFormProvider({
terms:
termIds?.length > 0
? {
- set: termIds.map((id) => ({ id })), // 转换成 connect 格式
+ [editId ? "set" : "connect"]: termIds.map((id) => ({
+ id,
+ })), // 转换成 connect 格式
}
: undefined,
depts:
deptIds?.length > 0
? {
- set: deptIds.map((id) => ({ id })),
+ [editId ? "set" : "connect"]: deptIds.map((id) => ({
+ id,
+ })),
}
: undefined,
};
@@ -149,6 +153,7 @@ export function CourseFormProvider({
}
};
+
return (
({
label: value,
diff --git a/apps/web/src/components/models/course/editor/form/CourseContentForm/SortableLecture.tsx b/apps/web/src/components/models/course/editor/form/CourseContentForm/SortableLecture.tsx
index 3c9f279..2f74c61 100755
--- a/apps/web/src/components/models/course/editor/form/CourseContentForm/SortableLecture.tsx
+++ b/apps/web/src/components/models/course/editor/form/CourseContentForm/SortableLecture.tsx
@@ -115,7 +115,7 @@ export const SortableLecture: React.FC = ({
resources:
[videoUrlId, ...fileIds].filter(Boolean)?.length > 0
? {
- connect: [videoUrlId, ...fileIds]
+ set: [videoUrlId, ...fileIds]
.filter(Boolean)
.map((fileId) => ({
fileId,
diff --git a/apps/web/src/components/models/post/PostCard.tsx b/apps/web/src/components/models/post/PostCard.tsx
index aa0e2c5..eb9f51e 100644
--- a/apps/web/src/components/models/post/PostCard.tsx
+++ b/apps/web/src/components/models/post/PostCard.tsx
@@ -1,4 +1,4 @@
-import { Card, Typography, Button, Empty } from "antd";
+import { Typography, Button, Empty, Card } from "antd";
import { PostDto } from "@nice/common";
import DeptInfo from "@web/src/app/main/path/components/DeptInfo";
@@ -19,9 +19,9 @@ export default function PostCard({ post, onClick }: PostCardProps) {
onClick={() => handleClick(post)}
key={post?.id}
hoverable
- className="group overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-xl hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-2"
+ className="group overflow-hidden rounded-2xl border border-gray-200 shadow-xl hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-2"
cover={
-
+
{post?.meta?.thumbnail ? (