You've already forked DataMate
fix: 修复入库可能重复;筛选逻辑优化 (#226)
* 修改数据清洗筛选逻辑-筛选修改为多选 * 修改数据清洗筛选逻辑-筛选修改为多选 * antd 组件库样式定制修改 * fix: 修复入库可能重复 * fix: 算子市场筛选逻辑优化 * fix: 清洗任务创建筛选逻辑优化 * fix: 清洗任务创建筛选逻辑优化 --------- Co-authored-by: chase <byzhangxin11@126.com>
This commit is contained in:
@@ -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 ">
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user