From 356a9f7a6e789ff152b80f917233b8736dfb0d7f Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 07 十一月 2025 11:17:10 +0800
Subject: [PATCH] 页面显示字段调整
---
wx/pages/message/message.js | 594 +++-------------------------------------------------------
1 files changed, 39 insertions(+), 555 deletions(-)
diff --git a/wx/pages/message/message.js b/wx/pages/message/message.js
index 9b36d57..508d1fb 100644
--- a/wx/pages/message/message.js
+++ b/wx/pages/message/message.js
@@ -1,587 +1,71 @@
// pages/message/message.js
const app = getApp()
-const { graphqlRequest, formatDate, formatRelativeTime } = require('../../lib/utils')
Page({
data: {
- loading: false,
- refreshing: false,
- loadingMore: false,
- hasMore: true,
-
- // 娑堟伅鍒楄〃
messages: [],
-
- // 鍒嗛〉鍙傛暟
- pagination: {
- page: 1,
- limit: 20,
- total: 0
- },
-
- // 绛涢�夋潯浠�
- filter: {
- type: 'ALL', // ALL, SYSTEM, ACTIVITY, JUDGE, ORGANIZER
- status: 'ALL' // ALL, READ, UNREAD
- },
-
- // 绛涢�夐�夐」
- typeOptions: [
- { value: 'ALL', label: '鍏ㄩ儴娑堟伅' },
- { value: 'SYSTEM', label: '绯荤粺閫氱煡' },
- { value: 'ACTIVITY', label: '娲诲姩娑堟伅' },
- { value: 'JUDGE', label: '璇勫娑堟伅' },
- { value: 'ORGANIZER', label: '涓诲姙鏂规秷鎭�' }
- ],
-
- statusOptions: [
- { value: 'ALL', label: '鍏ㄩ儴鐘舵��' },
- { value: 'UNREAD', label: '鏈' },
- { value: 'READ', label: '宸茶' }
- ],
-
- // 鏄剧ず绛涢�夐潰鏉�
- showFilter: false,
-
- // 缁熻鏁版嵁
- stats: {
- total: 0,
- unread: 0
- },
-
- // 閫夋嫨妯″紡
- selectMode: false,
- selectedMessages: [],
-
- // 娑堟伅绫诲瀷鍥炬爣鏄犲皠
- typeIcons: {
- 'SYSTEM': '馃敂',
- 'ACTIVITY': '馃幆',
- 'JUDGE': '鈿栵笍',
- 'ORGANIZER': '馃懃',
- 'REGISTRATION': '馃摑',
- 'RESULT': '馃弳',
- 'REMINDER': '鈴�'
- }
+ loading: false
},
onLoad() {
this.loadMessages()
- this.loadMessageStats()
},
onShow() {
- // 椤甸潰鏄剧ず鏃跺埛鏂版湭璇绘暟閲�
- this.loadMessageStats()
- // 鍒濆鍖栬嚜瀹氫箟 tabbar
- if (typeof this.getTabBar === 'function' && this.getTabBar()) {
- this.getTabBar().init()
- }
+ this.loadMessages()
},
onPullDownRefresh() {
- this.refreshMessages()
- },
-
- onReachBottom() {
- if (this.data.hasMore && !this.data.loadingMore) {
- this.loadMoreMessages()
- }
+ this.loadMessages()
},
// 鍔犺浇娑堟伅鍒楄〃
- async loadMessages(reset = true) {
- try {
- if (reset) {
- this.setData({
- loading: true,
- pagination: { ...this.data.pagination, page: 1 }
- })
- }
-
- const { filter, pagination } = this.data
-
- const query = `
- query GetMessages($input: MessageQueryInput!) {
- messages(input: $input) {
- items {
- id
- type
- title
- content
- isRead
- createdAt
- data
- relatedActivity {
- id
- title
- }
- }
- pagination {
- total
- page
- limit
- hasMore
- }
- }
- }
- `
-
- const input = {
- type: filter.type === 'ALL' ? null : filter.type,
- status: filter.status === 'ALL' ? null : filter.status,
- page: pagination.page,
- limit: pagination.limit
- }
-
- const result = await graphqlRequest(query, { input })
-
- if (result && result.messages) {
- const { items, pagination: newPagination } = result.messages
-
- // 涓烘瘡涓秷鎭坊鍔犻�変腑鐘舵��
- const processedItems = items.map(item => ({
- ...item,
- isSelected: this.data.selectedMessages.indexOf(item.id) > -1
- }))
-
- this.setData({
- messages: reset ? processedItems : [...this.data.messages, ...processedItems],
- pagination: newPagination,
- hasMore: newPagination.hasMore
- })
- }
- } catch (error) {
- console.error('鍔犺浇娑堟伅澶辫触:', error)
- wx.showToast({
- title: '鍔犺浇澶辫触',
- icon: 'error'
- })
- } finally {
- this.setData({
- loading: false,
- refreshing: false,
- loadingMore: false
- })
- wx.stopPullDownRefresh()
- }
- },
-
- // 鍒锋柊娑堟伅
- async refreshMessages() {
- this.setData({ refreshing: true })
- await this.loadMessages(true)
- await this.loadMessageStats()
- },
-
- // 鍔犺浇鏇村娑堟伅
- async loadMoreMessages() {
- if (!this.data.hasMore || this.data.loadingMore) return
-
- this.setData({
- loadingMore: true,
- pagination: {
- ...this.data.pagination,
- page: this.data.pagination.page + 1
- }
- })
-
- await this.loadMessages(false)
- },
-
- // 鍔犺浇娑堟伅缁熻
- async loadMessageStats() {
- try {
- const query = `
- query GetMessageStats {
- messageStats {
- total
- unread
- }
- }
- `
-
- const result = await graphqlRequest(query)
-
- if (result && result.messageStats) {
- this.setData({
- stats: result.messageStats
- })
-
- // 鏇存柊搴曢儴瀵艰埅鏍忕殑鏈鏁伴噺
- if (typeof this.getTabBar === 'function' && this.getTabBar()) {
- this.getTabBar().setData({
- unreadCount: result.messageStats.unread
- })
- }
- }
- } catch (error) {
- console.error('鍔犺浇娑堟伅缁熻澶辫触:', error)
- }
- },
-
- // 娑堟伅鐐瑰嚮
- async onMessageTap(e) {
- const { id, index } = e.currentTarget.dataset
- const message = this.data.messages[index]
-
- // 濡傛灉鏄�夋嫨妯″紡锛屽垏鎹㈤�夋嫨鐘舵��
- if (this.data.selectMode) {
- this.toggleMessageSelection(id)
+ loadMessages() {
+ // 妫�鏌ョ敤鎴锋槸鍚﹀凡鐧诲綍
+ const userInfo = app.globalData.userInfo
+ if (!userInfo || !userInfo.userId) {
return
}
+
+ this.setData({ loading: true })
- // 鏍囪涓哄凡璇�
- if (!message.isRead) {
- await this.markAsRead(id, index)
+ const query = `
+ query GetMessagesByUserId($userId: Long!) {
+ getMessagesByUserId(userId: $userId) {
+ id
+ userId
+ content
+ wxMsgSuccess
+ wxMsgErrCount
+ state
+ createTime
+ updateTime
+ }
+ }
+ `
+
+ const variables = {
+ userId: userInfo.userId
}
-
- // 鏍规嵁娑堟伅绫诲瀷澶勭悊璺宠浆
- this.handleMessageAction(message)
- },
- // 澶勭悊娑堟伅鍔ㄤ綔
- handleMessageAction(message) {
- const { type, data, relatedActivity } = message
-
- switch (type) {
- case 'ACTIVITY':
- if (relatedActivity && relatedActivity.id) {
- wx.navigateTo({
- url: `/pages/activity/detail?id=${relatedActivity.id}`
- })
- }
- break
- case 'REGISTRATION':
- if (data && data.registrationId) {
- wx.navigateTo({
- url: `/pages/profile/registration-detail?id=${data.registrationId}`
- })
- }
- break
- case 'JUDGE':
- if (data && data.submissionId) {
- wx.navigateTo({
- url: `/pages/judge/review?id=${data.submissionId}`
- })
- }
- break
- case 'ORGANIZER':
- if (relatedActivity && relatedActivity.id) {
- wx.navigateTo({
- url: `/pages/organizer/activity-detail?id=${relatedActivity.id}`
- })
- }
- break
- default:
- // 鏄剧ず娑堟伅璇︽儏
- this.showMessageDetail(message)
- break
- }
- },
-
- // 鏄剧ず娑堟伅璇︽儏
- showMessageDetail(message) {
- wx.showModal({
- title: message.title,
- content: message.content,
- showCancel: false,
- confirmText: '鐭ラ亾浜�'
- })
- },
-
- // 鏍囪涓哄凡璇�
- async markAsRead(messageId, index) {
- try {
- const mutation = `
- mutation MarkMessageAsRead($id: ID!) {
- markMessageAsRead(id: $id) {
- success
- }
- }
- `
-
- const result = await graphqlRequest(mutation, { id: messageId })
-
- if (result && result.markMessageAsRead.success) {
- // 鏇存柊鏈湴鏁版嵁
- const messages = [...this.data.messages]
- messages[index].isRead = true
-
- this.setData({ messages })
-
- // 鏇存柊缁熻鏁版嵁
+ app.graphqlRequest(query, variables)
+ .then(data => {
+ console.log('娑堟伅鏁版嵁:', data)
this.setData({
- 'stats.unread': Math.max(0, this.data.stats.unread - 1)
+ messages: data.getMessagesByUserId || [],
+ loading: false
})
- }
- } catch (error) {
- console.error('鏍囪宸茶澶辫触:', error)
- }
- },
-
- // 鎵归噺鏍囪涓哄凡璇�
- async markAllAsRead() {
- try {
- wx.showLoading({ title: '澶勭悊涓�...' })
-
- const mutation = `
- mutation MarkAllMessagesAsRead {
- markAllMessagesAsRead {
- success
- count
- }
- }
- `
-
- const result = await graphqlRequest(mutation)
-
- if (result && result.markAllMessagesAsRead.success) {
- // 鍒锋柊娑堟伅鍒楄〃
- await this.refreshMessages()
-
+ wx.stopPullDownRefresh()
+ })
+ .catch(error => {
+ console.error('鍔犺浇娑堟伅澶辫触:', error)
wx.showToast({
- title: '宸插叏閮ㄦ爣璁颁负宸茶',
- icon: 'success'
+ title: '鍔犺浇澶辫触',
+ icon: 'error'
})
- }
- } catch (error) {
- console.error('鎵归噺鏍囪宸茶澶辫触:', error)
- wx.showToast({
- title: '鎿嶄綔澶辫触',
- icon: 'error'
+ this.setData({ loading: false })
+ wx.stopPullDownRefresh()
})
- } finally {
- wx.hideLoading()
- }
},
- // 鍒犻櫎娑堟伅
- async deleteMessage(messageId) {
- try {
- const mutation = `
- mutation DeleteMessage($id: ID!) {
- deleteMessage(id: $id) {
- success
- }
- }
- `
-
- const result = await graphqlRequest(mutation, { id: messageId })
-
- if (result && result.deleteMessage.success) {
- // 浠庡垪琛ㄤ腑绉婚櫎
- const messages = this.data.messages.filter(msg => msg.id !== messageId)
- this.setData({ messages })
-
- wx.showToast({
- title: '鍒犻櫎鎴愬姛',
- icon: 'success'
- })
- }
- } catch (error) {
- console.error('鍒犻櫎娑堟伅澶辫触:', error)
- wx.showToast({
- title: '鍒犻櫎澶辫触',
- icon: 'error'
- })
- }
- },
-
- // 闀挎寜娑堟伅
- onMessageLongPress(e) {
- const { id } = e.currentTarget.dataset
-
- wx.showActionSheet({
- itemList: ['鏍囪涓哄凡璇�', '鍒犻櫎娑堟伅'],
- success: (res) => {
- switch (res.tapIndex) {
- case 0:
- this.markAsRead(id)
- break
- case 1:
- wx.showModal({
- title: '纭鍒犻櫎',
- content: '纭畾瑕佸垹闄よ繖鏉℃秷鎭悧锛�',
- success: (modalRes) => {
- if (modalRes.confirm) {
- this.deleteMessage(id)
- }
- }
- })
- break
- }
- }
- })
- },
-
- // 鍒囨崲绛涢�夐潰鏉�
- onToggleFilter() {
- this.setData({
- showFilter: !this.data.showFilter
- })
- },
-
- // 绛涢�夋潯浠舵敼鍙�
- onFilterChange(e) {
- const { type, value } = e.currentTarget.dataset
-
- this.setData({
- [`filter.${type}`]: value,
- showFilter: false
- })
-
- // 閲嶆柊鍔犺浇娑堟伅
- this.loadMessages(true)
- },
-
- // 鍒囨崲閫夋嫨妯″紡
- onToggleSelectMode() {
- this.setData({
- selectMode: !this.data.selectMode,
- selectedMessages: []
- })
- },
-
- // 鍒囨崲娑堟伅閫夋嫨鐘舵��
- toggleMessageSelection(messageId) {
- const selectedMessages = [...this.data.selectedMessages]
- const index = selectedMessages.indexOf(messageId)
-
- if (index > -1) {
- selectedMessages.splice(index, 1)
- } else {
- selectedMessages.push(messageId)
- }
-
- // 鍚屾椂鏇存柊娑堟伅鐨刬sSelected瀛楁
- const messages = this.data.messages.map(msg => ({
- ...msg,
- isSelected: selectedMessages.indexOf(msg.id) > -1
- }))
-
- this.setData({
- selectedMessages,
- messages
- })
- },
-
- // 鍏ㄩ��/鍙栨秷鍏ㄩ��
- onToggleSelectAll() {
- const { messages, selectedMessages } = this.data
- const allSelected = selectedMessages.length === messages.length
- const newSelectedMessages = allSelected ? [] : messages.map(msg => msg.id)
-
- // 鍚屾椂鏇存柊娑堟伅鐨刬sSelected瀛楁
- const updatedMessages = messages.map(msg => ({
- ...msg,
- isSelected: !allSelected
- }))
-
- this.setData({
- selectedMessages: newSelectedMessages,
- messages: updatedMessages
- })
- },
-
- // 鎵归噺鍒犻櫎閫変腑娑堟伅
- async onDeleteSelected() {
- const { selectedMessages } = this.data
-
- if (selectedMessages.length === 0) {
- wx.showToast({
- title: '璇烽�夋嫨瑕佸垹闄ょ殑娑堟伅',
- icon: 'error'
- })
- return
- }
-
- wx.showModal({
- title: '纭鍒犻櫎',
- content: `纭畾瑕佸垹闄ら�変腑鐨� ${selectedMessages.length} 鏉℃秷鎭悧锛焋,
- success: async (res) => {
- if (res.confirm) {
- try {
- wx.showLoading({ title: '鍒犻櫎涓�...' })
-
- const mutation = `
- mutation DeleteMessages($ids: [ID!]!) {
- deleteMessages(ids: $ids) {
- success
- count
- }
- }
- `
-
- const result = await graphqlRequest(mutation, { ids: selectedMessages })
-
- if (result && result.deleteMessages.success) {
- // 鍒锋柊娑堟伅鍒楄〃
- await this.refreshMessages()
-
- this.setData({
- selectMode: false,
- selectedMessages: []
- })
-
- wx.showToast({
- title: `宸插垹闄� ${result.deleteMessages.count} 鏉℃秷鎭痐,
- icon: 'success'
- })
- }
- } catch (error) {
- console.error('鎵归噺鍒犻櫎澶辫触:', error)
- wx.showToast({
- title: '鍒犻櫎澶辫触',
- icon: 'error'
- })
- } finally {
- wx.hideLoading()
- }
- }
- }
- })
- },
-
- // 鑾峰彇娑堟伅绫诲瀷鍥炬爣
- getTypeIcon(type) {
- return this.data.typeIcons[type] || '馃摠'
- },
-
- // 鑾峰彇娑堟伅绫诲瀷鏂囨湰
- getTypeText(type) {
- const typeMap = {
- 'SYSTEM': '绯荤粺閫氱煡',
- 'ACTIVITY': '娲诲姩娑堟伅',
- 'JUDGE': '璇勫娑堟伅',
- 'ORGANIZER': '涓诲姙鏂规秷鎭�',
- 'REGISTRATION': '鎶ュ悕娑堟伅',
- 'RESULT': '缁撴灉閫氱煡',
- 'REMINDER': '鎻愰啋娑堟伅'
- }
- return typeMap[type] || '娑堟伅'
- },
-
- // 鏍煎紡鍖栨椂闂�
- formatTime(dateString) {
- const now = new Date()
- const date = new Date(dateString)
- const diff = now.getTime() - date.getTime()
-
- // 涓�澶╁唴鏄剧ず鐩稿鏃堕棿
- if (diff < 24 * 60 * 60 * 1000) {
- return formatRelativeTime(dateString)
- }
-
- // 瓒呰繃涓�澶╂樉绀哄叿浣撴棩鏈�
- return formatDate(dateString, 'MM-DD HH:mm')
- },
-
- // 鍒嗕韩椤甸潰
- onShareAppMessage() {
- return {
- title: '钃夋槗鍒� - 娑堟伅涓績',
- path: '/pages/index/index'
- }
- }
})
\ No newline at end of file
--
Gitblit v1.8.0