12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { defineComponent } from 'vue';
- import { List, Avatar, Tag } from 'ant-design-vue';
- import { NoticeListItem } from './data';
- import './index.less';
- const prefixCls = 'notice-popover';
- export default defineComponent({
- name: 'NoticeList',
- props: {
- list: {
- type: Array,
- default: () => [],
- },
- },
- setup(props) {
- // 头像渲染
- function renderAvatar(avatar: string) {
- return avatar ? <Avatar class="avatar" src={avatar} /> : <span>{avatar}</span>;
- }
- // 描述渲染
- function renderDescription(description: string, datetime: string) {
- return (
- <div>
- <div class="description">{description}</div>
- <div class="datetime">{datetime}</div>
- </div>
- );
- }
- // 标题渲染
- function renderTitle(title: string, extra?: string, color?: string) {
- return (
- <div class="title">
- {title}
- {extra && (
- <div class="extra">
- <Tag class="tag" color={color}>
- {() => extra}
- </Tag>
- </div>
- )}
- </div>
- );
- }
- return () => {
- const { list } = props;
- return (
- <List dataSource={list} class={`${prefixCls}__list`}>
- {() => {
- return list.map((item: NoticeListItem) => {
- const { id, avatar, title, description, datetime, extra, read, color } = item;
- return (
- <List.Item key={id} class={`${prefixCls}__list-item ${read ? 'read' : ''}`}>
- {() => (
- <List.Item.Meta
- class="meta"
- avatar={renderAvatar(avatar)}
- title={renderTitle(title, extra, color)}
- description={renderDescription(description, datetime)}
- />
- )}
- </List.Item>
- );
- });
- }}
- </List>
- );
- };
- },
- });
|