Browse Source

更新消息管理页面,调整消息数据结构,新增标记消息为已读的API路由,优化用户消息状态处理,提升用户体验和代码可维护性。

zyh 8 tháng trước cách đây
mục cha
commit
a16e7a4165

+ 6 - 6
client/admin/pages_messages.tsx

@@ -90,11 +90,11 @@ export  const MessagesPage = () => {
     },
     {
       title: '状态',
-      dataIndex: 'status',
-      key: 'status',
-      render: (status: MessageStatus) => (
-        <span style={{ color: status === MessageStatus.UNREAD ? 'red' : 'green' }}>
-          {MessageStatusNameMap[status]}
+      dataIndex: 'user_status',
+      key: 'user_status',
+      render: (user_status: MessageStatus) => (
+        <span style={{ color: user_status === MessageStatus.UNREAD ? 'red' : 'green' }}>
+          {MessageStatusNameMap[user_status]}
         </span>
       ),
     },
@@ -112,7 +112,7 @@ export  const MessagesPage = () => {
           <Button 
             type="link" 
             onClick={() => markAsReadMutation.mutate(record.id)}
-            disabled={record.status === MessageStatus.READ}
+            disabled={record.user_status === MessageStatus.READ}
           >
             标记已读
           </Button>

+ 2 - 2
client/mobile/api.ts

@@ -5,7 +5,7 @@ import type {
   User, FileLibrary, FileCategory, ThemeSettings,
   SystemSetting, SystemSettingGroupData, 
   LoginLocation, LoginLocationDetail,
-  Message, MessageType, MessageStatus
+  Message, MessageType, MessageStatus, UserMessage
 } from '../share/types.ts';
 
 
@@ -608,7 +608,7 @@ export interface MessageResponse {
 }
 
 export interface MessagesResponse {
-  data: Message[];
+  data: UserMessage[];
   pagination: {
     total: number;
     current: number;

+ 4 - 1
client/share/types.ts

@@ -487,7 +487,10 @@ export interface UserMessage {
   id: number;
   user_id: number;
   message_id: number;
-  status: MessageStatus;
+  title: string;
+  content: string;
+  user_status: MessageStatus;
+  user_message_id: number;
   is_deleted?: DeleteStatus;
   read_at?: string;
   created_at: string;

+ 25 - 0
server/routes_messages.ts

@@ -190,5 +190,30 @@ export function createMessagesRoutes(withAuth: WithAuth) {
     }
   })
 
+  // 标记消息为已读
+  messagesRoutes.post('/:id/read', withAuth, async (c) => {
+    try {
+      const apiClient = c.get('apiClient')
+      const user = c.get('user')
+      if (!user) return c.json({ error: '未授权访问' }, 401)
+      
+      const messageId = c.req.param('id')
+
+      await apiClient.database.table('user_messages')
+        .where('user_id', user.id)
+        .where('message_id', messageId)
+        .update({
+          status: MessageStatus.READ,
+          read_at: apiClient.database.fn.now(),
+          updated_at: apiClient.database.fn.now()
+        })
+
+      return c.json({ message: '消息已标记为已读' })
+    } catch (error) {
+      console.error('标记消息为已读失败:', error)
+      return c.json({ error: '标记消息为已读失败' }, 500)
+    }
+  })
+
   return messagesRoutes
 }