This commit is contained in:
ditiqi 2025-02-28 12:55:53 +08:00
parent 3b497fed63
commit 83c9b80b20
5 changed files with 60 additions and 55 deletions

View File

@ -28,7 +28,7 @@ export default function FilterSection() {
</h3> </h3>
<TermParentSelector <TermParentSelector
value={items} value={items}
slug={tax?.slug} // slug={tax?.slug}
className="w-70 max-h-[400px] overscroll-contain overflow-x-hidden" className="w-70 max-h-[400px] overscroll-contain overflow-x-hidden"
onChange={(selected) => onChange={(selected) =>
handleTermChange( handleTermChange(

View File

@ -1,12 +1,12 @@
import { Tag } from "antd"; import { Tag } from "antd";
import { PostDto, TaxonomySlug } from "@nice/common"; import { PostDto, TaxonomySlug, TermDto } from "@nice/common";
const TermInfo = ({ post }: { post: PostDto }) => { const TermInfo = ({ terms = [] }: { terms?: TermDto[] }) => {
return ( return (
<div> <div>
{post?.terms && post?.terms?.length > 0 ? ( {terms && terms?.length > 0 ? (
<div className="flex gap-2 mb-4"> <div className="flex gap-2 mb-4">
{post?.terms?.map((term: any) => { {terms?.map((term: any) => {
return ( return (
<Tag <Tag
key={term.id} key={term.id}

View File

@ -70,7 +70,7 @@ export const CourseDetailDescription: React.FC = () => {
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<div className="flex gap-2 flex-wrap items-center float-start"> <div className="flex gap-2 flex-wrap items-center float-start">
{course?.subTitle && <div>{course?.subTitle}</div>} {course?.subTitle && <div>{course?.subTitle}</div>}
<TermInfo post={course}></TermInfo> <TermInfo terms={course.terms}></TermInfo>
</div> </div>
</div> </div>
<Paragraph <Paragraph

View File

@ -39,7 +39,7 @@ export default function PostCard({ post, onClick }: PostCardProps) {
<div className="px-4 "> <div className="px-4 ">
<div className="overflow-hidden hover:overflow-auto"> <div className="overflow-hidden hover:overflow-auto">
<div className="flex gap-2 h-7 whiteSpace-nowrap"> <div className="flex gap-2 h-7 whiteSpace-nowrap">
<TermInfo post={post}></TermInfo> <TermInfo terms={post.terms}></TermInfo>
</div> </div>
</div> </div>
<Title <Title
@ -65,4 +65,3 @@ export default function PostCard({ post, onClick }: PostCardProps) {
</Card> </Card>
); );
} }

View File

@ -1,50 +1,56 @@
import { api } from "@nice/client/"; import { api } from "@nice/client/";
import { Checkbox, Form } from "antd"; import { Checkbox, Skeleton } from "antd";
import { TermDto } from "@nice/common"; import { TermDto } from "@nice/common";
import { useCallback, useEffect, useState } from "react"; import React from "react";
export default function TermParentSelector({ export default function TermParentSelector({
value, value,
onChange, onChange,
className, className,
placeholder = "选择分类", taxonomyId,
multiple = true, domainId = undefined,
taxonomyId, style,
domainId, }: {
style, value?: string[];
}: any) { onChange?: (value: string[]) => void;
const [selectedValues, setSelectedValues] = useState<string[]>([]); // 用于存储选中的值 className?: string;
const { taxonomyId: string;
data, domainId?: string;
isLoading, style?: React.CSSProperties;
}: { data: TermDto[]; isLoading: boolean } = api.term.findMany.useQuery({ }) {
where: { const { data, isLoading }: { data: TermDto[]; isLoading: boolean } =
taxonomy: { api.term.findMany.useQuery({
id: taxonomyId, where: {
}, taxonomyId: taxonomyId,
parentId: null parentId: null,
}, domainId,
}); },
const handleCheckboxChange = (checkedValues: string[]) => { });
setSelectedValues(checkedValues); // 更新选中的值 const handleCheckboxChange = (checkedValues: string[]) => {
if (onChange) { // setSelectedValues(checkedValues); // 更新选中的值
onChange(checkedValues); // 调用外部传入的 onChange 回调 if (onChange) {
} onChange(checkedValues); // 调用外部传入的 onChange 回调
}; }
return ( };
<div className={className} style={style}> return (
<Form onFinish={null}> <div className={className} style={style}>
<Form.Item name="categories"> {isLoading ? (
<Checkbox.Group onChange={handleCheckboxChange}> <Skeleton
{data?.map((category) => ( paragraph={{
<div className="w-full h-9 p-2 my-1"> rows: 4,
<Checkbox checked={value?.includes(category.id)} className="text-base text-slate-700" key={category.id} value={category.id}> }}></Skeleton>
{category.name} ) : (
</Checkbox> <Checkbox.Group value={value} onChange={handleCheckboxChange}>
</div> {data?.map((category) => (
))} <div className="w-full h-9 p-2 my-1" key={category.id}>
</Checkbox.Group> <Checkbox
</Form.Item> className="text-base text-slate-700"
</Form> value={category.id}>
</div> {category.name}
) </Checkbox>
} </div>
))}
</Checkbox.Group>
)}
</div>
);
}