This commit is contained in:
ditiqi 2025-02-26 10:53:06 +08:00
parent c45cfe7644
commit cd449f43d8
4 changed files with 29 additions and 12 deletions

View File

@ -24,7 +24,12 @@ export const LectureItem: React.FC<LectureItemProps> = ({
}, [lectureId, lecture]); }, [lectureId, lecture]);
return ( return (
<div <div
className="w-full flex items-center gap-4 p-4 hover:bg-gray-200 text-left transition-colors cursor-pointer" className={`w-full flex items-center gap-4 p-4 text-left transition-colors cursor-pointer
${
isReading
? "bg-blue-50 border-l-4 border-blue-500 hover:bg-blue-50"
: "hover:bg-gray-200"
}`}
onClick={() => onClick(lecture.id)}> onClick={() => onClick(lecture.id)}>
{lecture?.meta?.type === LectureType.VIDEO && ( {lecture?.meta?.type === LectureType.VIDEO && (
<div className="text-blue-500 flex items-center"> <div className="text-blue-500 flex items-center">

View File

@ -1,6 +1,7 @@
import { createContext, useContext, ReactNode, useEffect } from "react"; import { createContext, useContext, ReactNode, useEffect } from "react";
import { Form, FormInstance, message } from "antd"; import { Form, FormInstance, message } from "antd";
import { import {
courseDetailSelect,
CourseDto, CourseDto,
CourseMeta, CourseMeta,
CourseStatus, CourseStatus,
@ -48,9 +49,7 @@ export function CourseFormProvider({
const { data: course }: { data: CourseDto } = api.post.findFirst.useQuery( const { data: course }: { data: CourseDto } = api.post.findFirst.useQuery(
{ {
where: { id: editId }, where: { id: editId },
include: { select: courseDetailSelect,
terms: true,
},
}, },
{ enabled: Boolean(editId) } { enabled: Boolean(editId) }
); );
@ -65,10 +64,12 @@ export function CourseFormProvider({
useEffect(() => { useEffect(() => {
if (course) { if (course) {
const deptIds = (course?.depts || [])?.map((dept) => dept.id);
const formData = { const formData = {
title: course.title, title: course.title,
subTitle: course.subTitle, subTitle: course.subTitle,
content: course.content, content: course.content,
deptIds: deptIds,
meta: { meta: {
thumbnail: course?.meta?.thumbnail, thumbnail: course?.meta?.thumbnail,
}, },
@ -91,7 +92,10 @@ export function CourseFormProvider({
const formattedValues = { const formattedValues = {
...values, ...values,
meta: { meta: {
thumbnail: values?.meta?.thumbnail, ...((course?.meta as CourseMeta) || {}),
...(values?.meta?.thumbnail !== undefined && {
thumbnail: values?.meta?.thumbnail,
}),
}, },
terms: { terms: {
connect: termIds.map((id) => ({ id })), // 转换成 connect 格式 connect: termIds.map((id) => ({ id })), // 转换成 connect 格式
@ -106,12 +110,9 @@ export function CourseFormProvider({
}); });
delete formattedValues.sections; delete formattedValues.sections;
delete formattedValues.deptIds; delete formattedValues.deptIds;
if (course) {
formattedValues.meta = { console.log(course.meta);
...(course?.meta as CourseMeta), console.log(formattedValues?.meta);
thumbnail: values?.meta?.thumbnail,
};
}
try { try {
if (editId) { if (editId) {
const result = await update.mutateAsync({ const result = await update.mutateAsync({

View File

@ -69,6 +69,9 @@ export const SortableSection: React.FC<SortableSectionProps> = ({
}); });
} else { } else {
result = await update.mutateAsync({ result = await update.mutateAsync({
where: {
id: field?.id,
},
data: { data: {
title: values?.title, title: values?.title,
}, },

View File

@ -4,6 +4,7 @@ import { useEffect } from "react";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { CourseStatus, CourseStatusLabel } from "@nice/common"; import { CourseStatus, CourseStatusLabel } from "@nice/common";
import { useCourseEditor } from "../context/CourseEditorContext"; import { useCourseEditor } from "../context/CourseEditorContext";
import { useAuth } from "@web/src/providers/auth-provider";
const { Title } = Typography; const { Title } = Typography;
@ -16,6 +17,7 @@ const courseStatusVariant: Record<CourseStatus, string> = {
export default function CourseEditorHeader() { export default function CourseEditorHeader() {
const navigate = useNavigate(); const navigate = useNavigate();
const {} = useAuth();
const { onSubmit, course, form } = useCourseEditor(); const { onSubmit, course, form } = useCourseEditor();
const handleSave = () => { const handleSave = () => {
@ -34,7 +36,13 @@ export default function CourseEditorHeader() {
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<Button <Button
icon={<ArrowLeftOutlined />} icon={<ArrowLeftOutlined />}
onClick={() => navigate(-1)} onClick={() => {
if (course?.id) {
navigate(`/course/${course?.id}/detail`);
} else {
navigate("/");
}
}}
type="text" type="text"
/> />
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">