import * as React from 'react'; import { observer } from 'mobx-react'; import { generatePath, useLocation, useParams } from 'react-router-dom'; import { List, Button, Divider, Empty, Modal, Form, Input, message } from 'antd'; import { SettingOutlined, DeleteOutlined, ArrowLeftOutlined, PlusOutlined } from '@ant-design/icons'; import { apis } from '@/apis'; import { PaginationConfig } from 'antd/es/pagination'; import router from '@/router'; import './style.less'; import LocalStorage from '@/LocalStorage'; import { makeAutoObservable } from 'mobx'; const FormItem = Form.Item; const page = makeAutoObservable({ pageNum: 1, pageSize: 10, total: 0, }); const SliceList: React.FC = () => { const [form] = Form.useForm(); const params = useParams(); interface Item { slice_id: string, document_id: string, slice_text: string, slice_char_len: number, }; const location = useLocation(); const [listLoading, setListLoading] = React.useState(false); const [list, setList] = React.useState([]); const [createFlag, setCreateFlag] = React.useState(); const [deleteFlag, setDeleteFlag] = React.useState(); const [updateFlag, setUpdateFlag] = React.useState(); const [listFlag, setListFlag] = React.useState(); const appApi = { fetchList: async (p0: { searchText: string; }) => { setListLoading(true); try { const res = await apis.fetchTakaiSliceList({ knowledge_id: params.knowledgeId || '', document_id: params.documentId || '', text: p0.searchText, pageSize: page.pageSize, pageNum: page.pageNum }) const list = res.rows.map((item: any) => { return { slice_id: item.sliceId, document_id: item.documentId, slice_text: item.sliceText, slice_char_len: item.sliceText.length, } }); setList(list); page.total = res.total; } catch (error) { console.error(error); } finally { setListLoading(false); } }, }; const handleClickSearch = () => { const values = form.getFieldsValue(); appApi.fetchList({ searchText: values.text }); } const handleClickReset = () => { form.resetFields(); appApi.fetchList({ searchText: '' }); } const deleteSlice = async (slice_id: string, knowledgeId: string) => { try { if (!params.knowledgeId || !params.documentId) { throw new Error('knowledgeId或documentId未定义,请检查路由参数'); } const res = await apis.deleteTakaiSlice(slice_id, params.knowledgeId, params.documentId); if (res.code === 200 && res.data === 1) { appApi.fetchList({ searchText: '' }); message.success('删除切片成功'); } } catch (error) { console.error('删除切片失败:', error); } } const init = async () => { if (location.state) { const { text, page: currentPage } = location.state; if (text) { form.setFieldsValue({ text: text, }); } if (currentPage && currentPage.pageNum && currentPage.pageSize) { page.pageNum = currentPage.pageNum; page.pageSize = currentPage.pageSize; page.total = currentPage.total; } } const values = form.getFieldsValue(); const searchText = values.text ? values.text : ''; await appApi.fetchList({ searchText: searchText }); } React.useEffect(() => { init(); const cFlag = LocalStorage.getStatusFlag('deepseek:slice:create'); setCreateFlag(cFlag); const dFlag = LocalStorage.getStatusFlag('deepseek:slice:delete'); setDeleteFlag(dFlag); const tFlag = LocalStorage.getStatusFlag('deepseek:slice:update'); setUpdateFlag(tFlag); const lFlag = LocalStorage.getStatusFlag('deepseek:slice:list'); setListFlag(lFlag); return () => { page.pageNum = 1; page.pageSize = 10; page.total = 0; }; }, []) const paginationConfig: PaginationConfig = { // 显示数据总量 showTotal: (total: number) => { return `共 ${total} 条`; }, // 展示分页条数切换 showSizeChanger: true, // 指定每页显示条数 pageSizeOptions: ['10', '20', '50', '100'], // 快速跳转至某页 showQuickJumper: true, current: page.pageNum, pageSize: page.pageSize, total: page.total, onChange: async (pageNum, pageSize) => { page.pageNum = pageNum; page.pageSize = pageSize; const values = form.getFieldsValue(); const searchText = values.text ? values.text : ''; await appApi.fetchList({ searchText: searchText }); }, }; return (
{ createFlag && }
{ list.length ?
( )} pagination={paginationConfig} // 分页 />
: }
) }; export default observer(SliceList);