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 = "选择分类",
multiple = true,
taxonomyId, taxonomyId,
domainId, domainId = undefined,
style, style,
}: any) { }: {
const [selectedValues, setSelectedValues] = useState<string[]>([]); // 用于存储选中的值 value?: string[];
const { onChange?: (value: string[]) => void;
data, className?: string;
isLoading, taxonomyId: string;
}: { data: TermDto[]; isLoading: boolean } = api.term.findMany.useQuery({ domainId?: string;
style?: React.CSSProperties;
}) {
const { data, isLoading }: { data: TermDto[]; isLoading: boolean } =
api.term.findMany.useQuery({
where: { where: {
taxonomy: { taxonomyId: taxonomyId,
id: taxonomyId, parentId: null,
}, domainId,
parentId: null
}, },
}); });
const handleCheckboxChange = (checkedValues: string[]) => { const handleCheckboxChange = (checkedValues: string[]) => {
setSelectedValues(checkedValues); // 更新选中的值 // setSelectedValues(checkedValues); // 更新选中的值
if (onChange) { if (onChange) {
onChange(checkedValues); // 调用外部传入的 onChange 回调 onChange(checkedValues); // 调用外部传入的 onChange 回调
} }
}; };
return ( return (
<div className={className} style={style}> <div className={className} style={style}>
<Form onFinish={null}> {isLoading ? (
<Form.Item name="categories"> <Skeleton
<Checkbox.Group onChange={handleCheckboxChange}> paragraph={{
rows: 4,
}}></Skeleton>
) : (
<Checkbox.Group value={value} 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" key={category.id}>
<Checkbox checked={value?.includes(category.id)} className="text-base text-slate-700" key={category.id} value={category.id}> <Checkbox
className="text-base text-slate-700"
value={category.id}>
{category.name} {category.name}
</Checkbox> </Checkbox>
</div> </div>
))} ))}
</Checkbox.Group> </Checkbox.Group>
</Form.Item> )}
</Form>
</div> </div>
) );
} }