NoticeList.jsx 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { Avatar, List } from 'antd';
  2. import React from 'react';
  3. import classNames from 'classnames';
  4. import styles from './NoticeList.less';
  5. const NoticeList = ({
  6. list = [],
  7. onClick,
  8. onClear,
  9. title,
  10. onViewMore,
  11. emptyText,
  12. showClear = true,
  13. clearText,
  14. viewMoreText,
  15. showViewMore = false,
  16. }) => {
  17. if (!list || list.length === 0) {
  18. return (
  19. <div className={styles.notFound}>
  20. <img
  21. src="https://gw.alipayobjects.com/zos/rmsportal/sAuJeJzSKbUmHfBQRzmZ.svg"
  22. alt="not found"
  23. />
  24. <div>{emptyText}</div>
  25. </div>
  26. );
  27. }
  28. return (
  29. <div>
  30. <List
  31. className={styles.list}
  32. dataSource={list}
  33. renderItem={(item, i) => {
  34. const itemCls = classNames(styles.item, {
  35. [styles.read]: item.read,
  36. }); // eslint-disable-next-line no-nested-ternary
  37. const leftIcon = item.avatar ? (
  38. typeof item.avatar === 'string' ? (
  39. <Avatar className={styles.avatar} src={item.avatar} />
  40. ) : (
  41. <span className={styles.iconElement}>{item.avatar}</span>
  42. )
  43. ) : null;
  44. return (
  45. <List.Item
  46. className={itemCls}
  47. key={item.key || i}
  48. onClick={() => {
  49. onClick?.(item);
  50. }}
  51. >
  52. <List.Item.Meta
  53. className={styles.meta}
  54. avatar={leftIcon}
  55. title={
  56. <div className={styles.title}>
  57. {item.title}
  58. <div className={styles.extra}>{item.extra}</div>
  59. </div>
  60. }
  61. description={
  62. <div>
  63. <div className={styles.description}>{item.description}</div>
  64. <div className={styles.datetime}>{item.datetime}</div>
  65. </div>
  66. }
  67. />
  68. </List.Item>
  69. );
  70. }}
  71. />
  72. <div className={styles.bottomBar}>
  73. {showClear ? (
  74. <div onClick={onClear}>
  75. {clearText} {title}
  76. </div>
  77. ) : null}
  78. {showViewMore ? (
  79. <div
  80. onClick={(e) => {
  81. if (onViewMore) {
  82. onViewMore(e);
  83. }
  84. }}
  85. >
  86. {viewMoreText}
  87. </div>
  88. ) : null}
  89. </div>
  90. </div>
  91. );
  92. };
  93. export default NoticeList;