feat(component): 实现组件列表搜索与导出功能

- 添加搜索状态和搜索处理逻辑- 实现分页重置和延迟搜索机制- 完善导出组件功能并添加错误提示
- 优化组件列表获取逻辑,支持搜索参数传递
- 增加搜索框和重置按钮UI及交互
- 补充获取组件列表失败的错误消息提示
master
钟良源 3 months ago
parent 44569a0e5a
commit 65d6098c0c

@ -2,7 +2,8 @@ import React, { useState, useEffect } from 'react';
import styles from './style/index.module.less'; import styles from './style/index.module.less';
import { Button, Divider, Input, Space, Table, Radio, Pagination, Modal, Message } from '@arco-design/web-react'; import { Button, Divider, Input, Space, Table, Radio, Pagination, Modal, Message } from '@arco-design/web-react';
import { IconSearch } from '@arco-design/web-react/icon'; import { IconSearch } from '@arco-design/web-react/icon';
import { exportComponent, getCooperationComponentList, getMyComponentList, remove } from '@/api/componentBase'; import { getMyComponentList, getCooperationComponentList, remove, exportComponent } from '@/api/componentBase';
import { getReviewGroupByNew } from '@/api/componentMarket';
import { componentRelease, componentRevoke } from '@/api/componentRelease'; import { componentRelease, componentRevoke } from '@/api/componentRelease';
import { ComponentItem } from '@/api/interface'; import { ComponentItem } from '@/api/interface';
import AddComponentModal from '@/pages/componentDevelopment/componentList/addComponentModal'; import AddComponentModal from '@/pages/componentDevelopment/componentList/addComponentModal';
@ -10,11 +11,10 @@ import HandleButtonGroup from '@/pages/componentDevelopment/componentList/handle
import { import {
componentStatusConstant, componentStatusConstant,
componentStatusDict, componentStatusDict,
publicStatusDict, publicStatus,
publishStatusDict publicStatusDict, publishStatusConstant, publishStatusDict
} from '@/const/isdp/componentBase'; } from '@/const/isdp/componentBase';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { getReviewGroupByNew } from '@/api/componentMarket';
const Group = Radio.Group; const Group = Radio.Group;
@ -31,6 +31,7 @@ const GlobalVarContainer = () => {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [mode, setMode] = useState<'create' | 'edit' | 'copy'>('create'); // 添加模式状态 const [mode, setMode] = useState<'create' | 'edit' | 'copy'>('create'); // 添加模式状态
const [searchValue, setSearchValue] = useState(''); // 添加搜索状态
const menuItems = [ const menuItems = [
{ {
@ -183,9 +184,8 @@ const GlobalVarContainer = () => {
console.log('Share collaboration', row); console.log('Share collaboration', row);
}} }}
onExportComponent={(id) => { onExportComponent={(id) => {
// TODO: 实现导出组件逻辑 // 实现导出组件逻辑
console.log('Export component', id); onExportComponent(id);
exportComponent(id);
}} }}
onStopComponentShow={(row) => { onStopComponentShow={(row) => {
// TODO: 实现下架组件逻辑 // TODO: 实现下架组件逻辑
@ -218,25 +218,41 @@ const GlobalVarContainer = () => {
useEffect(() => { useEffect(() => {
if (selectedItem === '我的组件' || selectedItem === '协同组件') { if (selectedItem === '我的组件' || selectedItem === '协同组件') {
fetchComponentData(); // 当切换菜单或搜索条件变化时,重置到第一页
setPagination({
...pagination,
currPage: 1
});
// 延迟执行搜索,确保分页参数已更新
setTimeout(() => {
fetchComponentData();
}, 0);
} }
else if (selectedItem === '组件审核') { else if (selectedItem === '组件审核') {
fetchComponentReview(); fetchComponentReview();
} }
}, [selectedItem, pagination.currPage, pagination.pageSize]); }, [selectedItem, searchValue]); // 添加 searchValue 作为依赖项
// 获取组件列表数据 // 获取组件列表数据,支持传入额外参数
const fetchComponentData = async () => { const fetchComponentData = async (extraParams: any = {}) => {
setLoading(true); setLoading(true);
const apiMap = { const apiMap = {
'我的组件': getMyComponentList, '我的组件': getMyComponentList,
'协同组件': getCooperationComponentList '协同组件': getCooperationComponentList
}; };
try { try {
const res: any = await apiMap[selectedItem]({ const params = {
currPage: pagination.currPage, currPage: pagination.currPage,
pageSize: pagination.pageSize pageSize: pagination.pageSize,
}); ...extraParams
};
// 如果有搜索关键词,则添加到参数中
if (searchValue.trim()) {
params.name = searchValue.trim();
}
const res: any = await apiMap[selectedItem](params);
setComponentData(res.data.list); setComponentData(res.data.list);
setPagination({ setPagination({
@ -247,6 +263,7 @@ const GlobalVarContainer = () => {
}); });
} catch (error) { } catch (error) {
console.error('获取组件列表失败:', error); console.error('获取组件列表失败:', error);
Message.error('获取组件列表失败');
} finally { } finally {
setLoading(false); setLoading(false);
} }
@ -271,6 +288,43 @@ const GlobalVarContainer = () => {
}); });
}; };
// 修改分页变化处理函数
useEffect(() => {
if (selectedItem === '我的组件' || selectedItem === '协同组件') {
fetchComponentData();
}
}, [pagination.currPage, pagination.pageSize]);
// 搜索处理函数
const searchHandle = () => {
// 重置到第一页并触发搜索
setPagination({
...pagination,
currPage: 1
});
fetchComponentData();
};
// 重置搜索
const resetSearch = () => {
setSearchValue('');
setPagination({
...pagination,
currPage: 1
});
fetchComponentData();
};
// 修改导出组件的回调函数
const onExportComponent = async (id) => {
try {
await exportComponent(id);
Message.success('组件导出成功');
} catch (error) {
console.error('导出组件失败:', error);
Message.error('组件导出失败');
}
};
return ( return (
<> <>
@ -296,15 +350,26 @@ const GlobalVarContainer = () => {
<Space> <Space>
<Input <Input
prefix={<IconSearch />} prefix={<IconSearch />}
placeholder={'搜索'} placeholder={'输入组件名称搜索'}
style={{ width: 236 }} style={{ width: 236 }}
value={searchValue}
onChange={(value) => setSearchValue(value)}
onPressEnter={searchHandle}
/> />
<Button <Button
type="primary" type="primary"
style={{ marginLeft: 5, borderRadius: 4 }} style={{ marginLeft: 5, borderRadius: 4 }}
onClick={searchHandle}
> >
</Button> </Button>
<Button
type="outline"
style={{ marginLeft: 5, borderRadius: 4 }}
onClick={resetSearch}
>
</Button>
</Space> </Space>
</div> </div>
<div className={styles['comp-list-handle']}> <div className={styles['comp-list-handle']}>

Loading…
Cancel
Save