fix: 修复入库可能重复;筛选逻辑优化 (#226)

* 修改数据清洗筛选逻辑-筛选修改为多选

* 修改数据清洗筛选逻辑-筛选修改为多选

* antd 组件库样式定制修改

* fix: 修复入库可能重复

* fix: 算子市场筛选逻辑优化

* fix: 清洗任务创建筛选逻辑优化

* fix: 清洗任务创建筛选逻辑优化

---------

Co-authored-by: chase <byzhangxin11@126.com>
This commit is contained in:
hhhhsc701
2026-01-06 17:57:25 +08:00
committed by GitHub
parent 49cc98941f
commit 7d4dcb756b
19 changed files with 247 additions and 152 deletions

View File

@@ -37,10 +37,13 @@ export default function OperatorMarketPage() {
const [showFilters, setShowFilters] = useState(true);
const [categoriesTree, setCategoriesTree] = useState<CategoryTreeI[]>([]);
const [starCount, setStarCount] = useState(0);
const [selectedStar, setSelectedStar] = useState<boolean>(false);
const initCategoriesTree = async () => {
const { data } = await queryCategoryTreeUsingGet({ page: 0, size: 1000 });
setCategoriesTree(data.content || []);
setStarCount(data.starCount || 0);
};
useEffect(() => {
@@ -104,16 +107,7 @@ export default function OperatorMarketPage() {
];
useEffect(() => {
const filteredIds = Object.values(selectedFilters).reduce(
(acc, filter: string[]) => {
if (filter.length) {
acc.push(...filter);
}
return acc;
},
[]
);
const filteredIds = Object.values(selectedFilters).filter(item => item.length > 0);
// 分类筛选变化时:
// 1. 将分类 ID 写入通用 searchParams.filter.categories,确保分页时条件不会丢失
@@ -124,9 +118,10 @@ export default function OperatorMarketPage() {
filter: {
...prev.filter,
categories: filteredIds,
selectedStar: selectedStar,
},
}));
}, [selectedFilters, setSearchParams]);
}, [selectedFilters, setSearchParams, selectedStar]);
return (
<div className="h-full flex flex-col gap-4">
@@ -162,8 +157,11 @@ export default function OperatorMarketPage() {
<Filters
hideFilter={() => setShowFilters(false)}
categoriesTree={categoriesTree}
selectedStar={selectedStar}
starCount={starCount}
selectedFilters={selectedFilters}
setSelectedFilters={setSelectedFilters}
setSelectedStar={setSelectedStar}
/>
</div>
<div className="flex-overflow-auto p-6 ">

View File

@@ -104,15 +104,21 @@ const FilterSection: React.FC<FilterSectionProps> = ({
interface FiltersProps {
categoriesTree: CategoryTreeI[];
selectedFilters: { [key: string]: string[] };
selectedStar: boolean;
starCount: number;
hideFilter: () => void;
setSelectedFilters: (filters: { [key: string]: string[] }) => void;
setSelectedStar: (item: boolean) => void;
}
const Filters: React.FC<FiltersProps> = ({
categoriesTree,
selectedFilters,
selectedStar,
starCount,
hideFilter,
setSelectedFilters,
setSelectedStar,
}) => {
const clearAllFilters = () => {
const newFilters = Object.keys(selectedFilters).reduce((acc, key) => {
@@ -126,6 +132,17 @@ const Filters: React.FC<FiltersProps> = ({
(filters) => Array.isArray(filters) && filters.length > 0
);
const starCategory = {
id: "starStatus",
count: starCount,
name: "收藏状态",
categories: [{
id: "isStar",
count: starCount,
name: "已收藏"
}]
};
return (
<div className="p-6 space-y-4 h-full overflow-y-auto">
{/* Filter Header */}
@@ -170,6 +187,22 @@ const Filters: React.FC<FiltersProps> = ({
showIcons={false}
/>
))}
<FilterSection
key={starCategory.id}
total={starCategory.count}
title={starCategory.name}
options={starCategory.categories.map(cat => ({
key: cat.id.toString(),
label: cat.name,
count: cat.count,
}))}
selectedValues={selectedStar ? ["isStar"] : []}
onSelectionChange={(values) => {
values.length > 0 ? setSelectedStar(true) : setSelectedStar(false);
}}
showIcons={false}
/>
</div>
);
};

View File

@@ -46,11 +46,11 @@ export interface OperatorI {
}
export interface CategoryI {
id: number;
id: string;
name: string;
count: number; // 该分类下的算子数量
type: string; // e.g., "数据源", "数据清洗", "数据分析", "数据可视化"
parentId?: number; // 父分类ID,若无父分类则为null
parentId?: string; // 父分类ID,若无父分类则为null
value: string;
createdAt: string;
}