Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { ReactComponent as MoreIcon } from '@/assets/svg/more.svg';
  2. import { KnowledgeRouteKey } from '@/constants/knowledge';
  3. import { useShowDeleteConfirm } from '@/hooks/commonHooks';
  4. import { IKnowledge } from '@/interfaces/database/knowledge';
  5. import { formatDate } from '@/utils/date';
  6. import {
  7. CalendarOutlined,
  8. DeleteOutlined,
  9. FileTextOutlined,
  10. UserOutlined,
  11. } from '@ant-design/icons';
  12. import { Avatar, Card, Dropdown, MenuProps, Space } from 'antd';
  13. import { useDispatch, useNavigate } from 'umi';
  14. import styles from './index.less';
  15. interface IProps {
  16. item: IKnowledge;
  17. }
  18. const KnowledgeCard = ({ item }: IProps) => {
  19. const navigate = useNavigate();
  20. const dispatch = useDispatch();
  21. const showDeleteConfirm = useShowDeleteConfirm();
  22. const removeKnowledge = () => {
  23. return dispatch({
  24. type: 'knowledgeModel/rmKb',
  25. payload: {
  26. kb_id: item.id,
  27. },
  28. });
  29. };
  30. const handleDelete = () => {
  31. showDeleteConfirm({ onOk: removeKnowledge });
  32. };
  33. const items: MenuProps['items'] = [
  34. {
  35. key: '1',
  36. label: (
  37. <Space>
  38. Delete
  39. <DeleteOutlined />
  40. </Space>
  41. ),
  42. },
  43. ];
  44. const handleDropdownMenuClick: MenuProps['onClick'] = ({ domEvent, key }) => {
  45. domEvent.preventDefault();
  46. domEvent.stopPropagation();
  47. if (key === '1') {
  48. handleDelete();
  49. }
  50. };
  51. const handleCardClick = () => {
  52. navigate(`/knowledge/${KnowledgeRouteKey.Dataset}?id=${item.id}`, {
  53. state: { from: 'list' },
  54. });
  55. };
  56. return (
  57. <Card className={styles.card} onClick={handleCardClick}>
  58. <div className={styles.container}>
  59. <div className={styles.content}>
  60. <Avatar size={34} icon={<UserOutlined />} src={item.avatar} />
  61. <Dropdown
  62. menu={{
  63. items,
  64. onClick: handleDropdownMenuClick,
  65. }}
  66. >
  67. <span className={styles.delete}>
  68. <MoreIcon />
  69. </span>
  70. </Dropdown>
  71. </div>
  72. <div className={styles.titleWrapper}>
  73. <span className={styles.title}>{item.name}</span>
  74. <p>{item.description}</p>
  75. </div>
  76. <div className={styles.footer}>
  77. <div className={styles.footerTop}>
  78. <div className={styles.bottomLeft}>
  79. <FileTextOutlined className={styles.leftIcon} />
  80. <span className={styles.rightText}>
  81. <Space>{item.doc_num}Docs</Space>
  82. </span>
  83. </div>
  84. </div>
  85. <div className={styles.bottom}>
  86. <div className={styles.bottomLeft}>
  87. <CalendarOutlined className={styles.leftIcon} />
  88. <span className={styles.rightText}>
  89. {formatDate(item.update_date)}
  90. </span>
  91. </div>
  92. {/* <Avatar.Group size={25}>
  93. <Avatar src="https://api.dicebear.com/7.x/miniavs/svg?seed=1" />
  94. <a href="https://ant.design">
  95. <Avatar style={{ backgroundColor: '#f56a00' }}>K</Avatar>
  96. </a>
  97. <Tooltip title="Ant User" placement="top">
  98. <Avatar
  99. style={{ backgroundColor: '#87d068' }}
  100. icon={<UserOutlined />}
  101. />
  102. </Tooltip>
  103. <Avatar
  104. style={{ backgroundColor: '#1677ff' }}
  105. icon={<AntDesignOutlined />}
  106. />
  107. </Avatar.Group> */}
  108. </div>
  109. </div>
  110. </div>
  111. </Card>
  112. );
  113. };
  114. export default KnowledgeCard;