This commit is contained in:
Rao 2025-02-28 10:45:13 +08:00
parent e7013895ef
commit d8e9b5d216
5 changed files with 21 additions and 5 deletions

View File

@ -35,6 +35,7 @@ const CategorySection = () => {
const handleMouseClick = useCallback((categoryId: string) => { const handleMouseClick = useCallback((categoryId: string) => {
setSelectedTerms({ setSelectedTerms({
...selectedTerms,
[TaxonomySlug.CATEGORY]: [categoryId], [TaxonomySlug.CATEGORY]: [categoryId],
}); });
navigate("/courses"); navigate("/courses");

View File

@ -24,6 +24,7 @@ export default function FilterSection() {
<div key={index}> <div key={index}>
<h3 className="text-lg font-medium mb-4"> <h3 className="text-lg font-medium mb-4">
{tax?.name} {tax?.name}
{/* {JSON.stringify(items)} */}
</h3> </h3>
<TermParentSelector <TermParentSelector
value={items} value={items}

View File

@ -29,6 +29,7 @@ interface CourseDetailContextType {
setIsHeaderVisible: (visible: boolean) => void; // 新增 setIsHeaderVisible: (visible: boolean) => void; // 新增
canEdit?: boolean; canEdit?: boolean;
userIsLearning?: boolean; userIsLearning?: boolean;
setUserIsLearning:(learning: boolean) => void;
} }
interface CourseFormProviderProps { interface CourseFormProviderProps {
@ -56,9 +57,14 @@ export function CourseDetailProvider({
{ enabled: Boolean(editId) } { enabled: Boolean(editId) }
); );
const userIsLearning = useMemo(() => { // const userIsLearning = useMemo(() => {
return (course?.studentIds || []).includes(user?.id); // return (course?.studentIds || []).includes(user?.id);
}, [user, course, isLoading]); // }, [user, course, isLoading]);
const [userIsLearning, setUserIsLearning] = useState(false);
useEffect(()=>{
console.log(course?.studentIds,user?.id)
setUserIsLearning((course?.studentIds || []).includes(user?.id));
},[user, course, isLoading])
const canEdit = useMemo(() => { const canEdit = useMemo(() => {
const isAuthor = isAuthenticated && user?.id === course?.authorId; const isAuthor = isAuthenticated && user?.id === course?.authorId;
const isRoot = hasSomePermissions(RolePerms?.MANAGE_ANY_POST); const isRoot = hasSomePermissions(RolePerms?.MANAGE_ANY_POST);
@ -110,6 +116,7 @@ export function CourseDetailProvider({
setIsHeaderVisible, setIsHeaderVisible,
canEdit, canEdit,
userIsLearning, userIsLearning,
setUserIsLearning
}}> }}>
{children} {children}
</CourseDetailContext.Provider> </CourseDetailContext.Provider>

View File

@ -12,15 +12,17 @@ import {
EditTwoTone, EditTwoTone,
LoginOutlined, LoginOutlined,
} from "@ant-design/icons"; } from "@ant-design/icons";
import toast from "react-hot-toast";
export default function CourseOperationBtns() { export default function CourseOperationBtns() {
const { id } = useParams(); const { id } = useParams();
const { isAuthenticated, user, hasSomePermissions, hasEveryPermissions } = const { isAuthenticated, user, hasSomePermissions, hasEveryPermissions } =
useAuth(); useAuth();
const navigate = useNavigate(); const navigate = useNavigate();
const { course, canEdit, userIsLearning } = useContext(CourseDetailContext); const { course, canEdit, userIsLearning, setUserIsLearning} = useContext(CourseDetailContext);
const { update } = useStaff(); const { update } = useStaff();
const [isHovered, setIsHovered] = useState(false); const [isHovered, setIsHovered] = useState(false);
const toggleLearning = async () => { const toggleLearning = async () => {
if (!userIsLearning) { if (!userIsLearning) {
await update.mutateAsync({ await update.mutateAsync({
@ -31,7 +33,10 @@ export default function CourseOperationBtns() {
}, },
}, },
}); });
setUserIsLearning(true)
toast.success("加入学习成功");
} else { } else {
await update.mutateAsync({ await update.mutateAsync({
where: { id: user?.id }, where: { id: user?.id },
data: { data: {
@ -42,6 +47,8 @@ export default function CourseOperationBtns() {
}, },
}, },
}); });
toast.success("退出学习成功");
setUserIsLearning(false)
} }
}; };
return ( return (

View File

@ -37,7 +37,7 @@ export default function TermParentSelector({
<Checkbox.Group onChange={handleCheckboxChange}> <Checkbox.Group onChange={handleCheckboxChange}>
{data?.map((category) => ( {data?.map((category) => (
<div className="w-full h-9 p-2 my-1"> <div className="w-full h-9 p-2 my-1">
<Checkbox className="text-base text-slate-700" key={category.id} value={category.id}> <Checkbox checked={value?.includes(category.id)} className="text-base text-slate-700" key={category.id} value={category.id}>
{category.name} {category.name}
</Checkbox> </Checkbox>
</div> </div>