diff --git a/src/component/MessageList/index.less b/src/component/MessageList/index.less index 2532459..2655d9e 100644 --- a/src/component/MessageList/index.less +++ b/src/component/MessageList/index.less @@ -1,3 +1,5 @@ +@import '~antd/dist/antd.less'; + .list { :global { .ant-card { @@ -8,3 +10,11 @@ } } } + +.link { + color: @text-color; + + &:hover { + color: @primary-color; + } +} diff --git a/src/component/MessageList/index.tsx b/src/component/MessageList/index.tsx index 5418f99..6847eae 100644 --- a/src/component/MessageList/index.tsx +++ b/src/component/MessageList/index.tsx @@ -9,7 +9,12 @@ import { MESSAGE_TYPE_MAP, MessageType } from '@/constants'; import * as styles from './index.less'; -const MessageList: React.FC = ({ dataSource, loading, toolbar }) => { +const MessageList: React.FC = ({ + dataSource, + loading, + toolbar, + onClick, +}) => { const metas: ProListMetas = { avatar: { dataIndex: 'author.avatar_url', @@ -25,7 +30,7 @@ const MessageList: React.FC = ({ dataSource, loading, toolbar }) => { width: '200px', }} > - + {loginname} @@ -43,9 +48,20 @@ const MessageList: React.FC = ({ dataSource, loading, toolbar }) => { valueType: 'text', render: (_, entity: MessageModel) => { const { + id: messageId, topic: { id, title }, } = entity; - return {title}; + return ( + { + onClick && onClick(messageId); + }} + > + {title} + + ); }, }, actions: { @@ -74,4 +90,5 @@ interface Props { dataSource?: MessageModel[]; loading?: boolean; toolbar?: ListToolBarProps; + onClick?: (id: string) => void; } diff --git a/src/component/TopicList/index.less b/src/component/TopicList/index.less index 2532459..2655d9e 100644 --- a/src/component/TopicList/index.less +++ b/src/component/TopicList/index.less @@ -1,3 +1,5 @@ +@import '~antd/dist/antd.less'; + .list { :global { .ant-card { @@ -8,3 +10,11 @@ } } } + +.link { + color: @text-color; + + &:hover { + color: @primary-color; + } +} diff --git a/src/component/TopicList/index.tsx b/src/component/TopicList/index.tsx index 6dfaa6c..c6c6692 100644 --- a/src/component/TopicList/index.tsx +++ b/src/component/TopicList/index.tsx @@ -58,7 +58,11 @@ const TopicList: React.FC = ({ dataSource, loading, toolbar }) => { valueType: 'text', render: (_, entity: TopicModel) => { const { id, title } = entity; - return {title}; + return ( + + {title} + + ); }, }, actions: { diff --git a/src/model/message.ts b/src/model/message.ts index e09a8dc..888a641 100644 --- a/src/model/message.ts +++ b/src/model/message.ts @@ -45,5 +45,34 @@ export default () => { setUnreadMessage(data.hasnot_read_messages); }, [token]); - return { count, message, unreadMessage, load, fetch }; + const mark = useCallback( + async (id: string) => { + if (!token) { + return; + } + + await API.markMessage(id, { + accesstoken: token, + }); + + load(); + fetch(); + }, + [token], + ); + + const markAll = useCallback(async () => { + if (!token) { + return; + } + + await API.markAllMessage({ + accesstoken: token, + }); + + load(); + fetch(); + }, [token]); + + return { count, message, unreadMessage, load, fetch, mark, markAll }; }; diff --git a/src/page/message/index.tsx b/src/page/message/index.tsx index d304b4d..ae36802 100644 --- a/src/page/message/index.tsx +++ b/src/page/message/index.tsx @@ -1,11 +1,11 @@ import React from 'react'; import { useModel } from 'umi'; -import { Divider } from 'antd'; +import { Divider, Button } from 'antd'; import ProCard from '@ant-design/pro-card'; import MessageList from '@/component/MessageList'; const MessagePage: React.FC = (props) => { - const { message, unreadMessage } = useModel('message'); + const { message, unreadMessage, mark, markAll } = useModel('message'); console.debug('===message', message); console.debug('===unreadMessage', unreadMessage); @@ -15,12 +15,30 @@ const MessagePage: React.FC = (props) => { return 暂无新消息; } - return ; + return ( + mark(id)} /> + ); }; return (
- {renderUnreadMessage()} + { + markAll(); + }} + > + 标记全部 + + } + > + {renderUnreadMessage()} + diff --git a/src/service/message.ts b/src/service/message.ts index d6b373e..c81a753 100644 --- a/src/service/message.ts +++ b/src/service/message.ts @@ -29,6 +29,37 @@ export const getMessages = async (params: { return res; }; +export const markMessage = async ( + id: string, + data: { + accesstoken: string; + }, +) => { + const options: any = { + method: 'POST', + data, + }; + const res: any = await request( + `${BASE_URL}/api/v1/message/mark_one/${id}`, + options, + ); + + return res; +}; + +export const markAllMessage = async (data: { accesstoken: string }) => { + const options: any = { + method: 'POST', + data, + }; + const res: any = await request( + `${BASE_URL}/api/v1/message/mark_all`, + options, + ); + + return res; +}; + interface MessageCollection { has_read_messages: MessageModel[]; hasnot_read_messages: MessageModel[];