Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.tsx 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { KnowledgeRouteKey } from '@/constants/knowledge';
  2. import { IKnowledge } from '@/interfaces/database/knowledge';
  3. import { formatDate } from '@/utils/date';
  4. import {
  5. CalendarOutlined,
  6. FileTextOutlined,
  7. UserOutlined,
  8. } from '@ant-design/icons';
  9. import { Avatar, Badge, Card, Space } from 'antd';
  10. import classNames from 'classnames';
  11. import { useTranslation } from 'react-i18next';
  12. import { useNavigate } from 'umi';
  13. import OperateDropdown from '@/components/operate-dropdown';
  14. import { useTheme } from '@/components/theme-provider';
  15. import { useDeleteKnowledge } from '@/hooks/knowledge-hooks';
  16. import { useFetchUserInfo } from '@/hooks/user-setting-hooks';
  17. import styles from './index.less';
  18. interface IProps {
  19. item: IKnowledge;
  20. }
  21. const KnowledgeCard = ({ item }: IProps) => {
  22. const navigate = useNavigate();
  23. const { t } = useTranslation();
  24. const { data: userInfo } = useFetchUserInfo();
  25. const { theme } = useTheme();
  26. const { deleteKnowledge } = useDeleteKnowledge();
  27. const removeKnowledge = async () => {
  28. return deleteKnowledge(item.id);
  29. };
  30. const handleCardClick = () => {
  31. navigate(`/knowledge/${KnowledgeRouteKey.Dataset}?id=${item.id}`, {
  32. state: { from: 'list' },
  33. });
  34. };
  35. return (
  36. <Badge.Ribbon
  37. text={item?.nickname}
  38. color={userInfo.nickname === item.nickname ? '#1677ff' : 'pink'}
  39. className={classNames(styles.ribbon, {
  40. [styles.hideRibbon]: item.permission !== 'team',
  41. })}
  42. >
  43. <Card className={styles.card} onClick={handleCardClick}>
  44. <div className={styles.container}>
  45. <div className={styles.content}>
  46. <Avatar size={34} icon={<UserOutlined />} src={item.avatar} />
  47. <OperateDropdown deleteItem={removeKnowledge}></OperateDropdown>
  48. </div>
  49. <div className={styles.titleWrapper}>
  50. <span
  51. className={theme === 'dark' ? styles.titledark : styles.title}
  52. >
  53. {item.name}
  54. </span>
  55. <p
  56. className={
  57. theme === 'dark' ? styles.descriptiondark : styles.description
  58. }
  59. >
  60. {item.description}
  61. </p>
  62. </div>
  63. <div className={styles.footer}>
  64. <div className={styles.footerTop}>
  65. <div className={styles.bottomLeft}>
  66. <FileTextOutlined className={styles.leftIcon} />
  67. <span className={styles.rightText}>
  68. <Space>
  69. {item.doc_num}
  70. {t('knowledgeList.doc')}
  71. </Space>
  72. </span>
  73. </div>
  74. </div>
  75. <div className={styles.bottom}>
  76. <div className={styles.bottomLeft}>
  77. <CalendarOutlined className={styles.leftIcon} />
  78. <span className={styles.rightText}>
  79. {formatDate(item.update_time)}
  80. </span>
  81. </div>
  82. {/* <Avatar.Group size={25}>
  83. <Avatar src="https://api.dicebear.com/7.x/miniavs/svg?seed=1" />
  84. <a href="https://ant.design">
  85. <Avatar style={{ backgroundColor: '#f56a00' }}>K</Avatar>
  86. </a>
  87. <Tooltip title="Ant User" placement="top">
  88. <Avatar
  89. style={{ backgroundColor: '#87d068' }}
  90. icon={<UserOutlined />}
  91. />
  92. </Tooltip>
  93. <Avatar
  94. style={{ backgroundColor: '#1677ff' }}
  95. icon={<AntDesignOutlined />}
  96. />
  97. </Avatar.Group> */}
  98. </div>
  99. </div>
  100. </div>
  101. </Card>
  102. </Badge.Ribbon>
  103. );
  104. };
  105. export default KnowledgeCard;