balibabu
feat: remove loading from model and use DvaModel instead of redundant types such as kAModelType (#47)
362ec6c
import { formatDate } from '@/utils/date'; | |
import { | |
DeleteOutlined, | |
MinusSquareOutlined, | |
PlusOutlined, | |
} from '@ant-design/icons'; | |
import { Card, Col, FloatButton, Popconfirm, Row } from 'antd'; | |
import { useCallback, useEffect } from 'react'; | |
import { useDispatch, useNavigate, useSelector } from 'umi'; | |
import styles from './index.less'; | |
const Knowledge = () => { | |
const dispatch = useDispatch(); | |
const knowledgeModel = useSelector((state: any) => state.knowledgeModel); | |
const navigate = useNavigate(); | |
const { data = [] } = knowledgeModel; | |
const fetchList = useCallback(() => { | |
dispatch({ | |
type: 'knowledgeModel/getList', | |
payload: {}, | |
}); | |
}, []); | |
const confirm = (id: string) => { | |
dispatch({ | |
type: 'knowledgeModel/rmKb', | |
payload: { | |
kb_id: id, | |
}, | |
}); | |
}; | |
const handleAddKnowledge = () => { | |
navigate(`add/setting?activeKey=setting`); | |
}; | |
const handleEditKnowledge = (id: string) => { | |
navigate(`add/setting?activeKey=file&id=${id}`); | |
}; | |
useEffect(() => { | |
fetchList(); | |
}, [fetchList]); | |
return ( | |
<> | |
<div className={styles.knowledge}> | |
<FloatButton | |
onClick={handleAddKnowledge} | |
icon={<PlusOutlined />} | |
type="primary" | |
style={{ right: 24, top: 100 }} | |
/> | |
<Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}> | |
{data.map((item: any) => { | |
return ( | |
<Col | |
className="gutter-row" | |
key={item.name} | |
xs={24} | |
sm={12} | |
md={8} | |
lg={6} | |
> | |
<Card | |
className={styles.card} | |
onClick={() => { | |
handleEditKnowledge(item.id); | |
}} | |
> | |
<div className={styles.container}> | |
<div className={styles.content}> | |
<span className={styles.context}>{item.name}</span> | |
<span className={styles.delete}> | |
<Popconfirm | |
title="Delete the task" | |
description="Are you sure to delete this task?" | |
onConfirm={(e: any) => { | |
e.stopPropagation(); | |
e.nativeEvent.stopImmediatePropagation(); | |
confirm(item.id); | |
}} | |
okText="Yes" | |
cancelText="No" | |
> | |
<DeleteOutlined | |
onClick={(e) => { | |
e.stopPropagation(); | |
e.nativeEvent.stopImmediatePropagation(); | |
}} | |
/> | |
</Popconfirm> | |
</span> | |
</div> | |
<div className={styles.footer}> | |
<span className={styles.text}> | |
<MinusSquareOutlined /> | |
{item.doc_num}文档 | |
</span> | |
<span className={styles.text}> | |
<MinusSquareOutlined /> | |
{item.chunk_num}个 | |
</span> | |
<span className={styles.text}> | |
<MinusSquareOutlined /> | |
{item.token_num}千字符 | |
</span> | |
<span style={{ float: 'right' }}> | |
{formatDate(item.update_date)} | |
</span> | |
</div> | |
</div> | |
</Card> | |
</Col> | |
); | |
})} | |
</Row> | |
</div> | |
</> | |
); | |
}; | |
export default Knowledge; | |