app.js
4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import usersData from '../data/users.json'
import activitiesData from '../data/activities.json'
import registrationsData from '../data/registrations.json'
import messagesData from '../data/messages.json'
export const useAppStore = defineStore('app', () => {
const currentUser = ref(null)
const activities = ref([])
const loading = ref(true)
const error = ref(null)
const registrations = ref([])
const userMessages = ref([])
// 初始化应用数据
function fetchInitialData() {
try {
loading.value = true
// 获取用户数据
currentUser.value = usersData.users[0]
// 获取活动数据
activities.value = activitiesData.activities
// 获取报名数据
registrations.value = registrationsData.registrations
// 获取消息数据
userMessages.value = messagesData.messages
loading.value = false
} catch (err) {
console.error('Failed to fetch initial data:', err)
error.value = '加载应用数据失败,请稍后重试。'
loading.value = false
}
}
// 根据ID获取活动
const getActivityById = computed(() => {
return (activityId) => activities.value.find(activity => activity.id === activityId) || null
})
// 获取用户的报名记录
const getUserRegistrations = computed(() => {
return () => currentUser.value ? registrations.value.filter(reg => reg.user_id === currentUser.value.id) : []
})
// 报名活动
function registerForActivity(activityId, formData) {
if (!currentUser.value) return { success: false, error: '用户未登录' }
const newRegistration = {
id: `R${Math.floor(Math.random() * 10000).toString().padStart(4, '0')}`,
activity_id: activityId,
user_id: currentUser.value.id,
registration_time: new Date().toISOString().replace('T', ' ').substring(0, 19),
status: 'pending',
custom_fields: formData.fields,
custom_answers: formData.answers
}
registrations.value.push(newRegistration)
return { success: true, registrationId: newRegistration.id }
}
// 创建新活动
function createActivity(activityData) {
if (!currentUser.value) return { success: false, error: '用户未登录' }
const newActivity = {
id: `A${Math.floor(Math.random() * 10000).toString().padStart(4, '0')}`,
organizer_id: currentUser.value.id,
organizer_name: currentUser.value.name,
...activityData,
participant_count: 0,
is_published: activityData.is_published || true,
is_public: activityData.is_public || true,
}
activities.value.push(newActivity)
return { success: true, activityId: newActivity.id }
}
// 活动签到
function checkInForActivity(activityId, registrationId, method = 'manual') {
if (!currentUser.value) return { success: false, error: '用户未登录' }
const checkinData = {
id: `C${Math.floor(Math.random() * 10000).toString().padStart(4, '0')}`,
activity_id: activityId,
user_id: currentUser.value.id,
registration_id: registrationId,
checkin_time: new Date().toISOString().replace('T', ' ').substring(0, 19),
checkin_type: method,
status: 'successful',
is_late: false
}
return { success: true, checkin: checkinData }
}
// 获取用户消息
const getUserMessages = computed(() => {
return () => currentUser.value ? userMessages.value.filter(msg => msg.recipient_id === currentUser.value.id) : []
})
// 切换消息已读状态
function toggleMessageReadStatus(messageId) {
userMessages.value = userMessages.value.map(msg =>
msg.id === messageId
? { ...msg, read_status: !msg.read_status }
: msg
)
}
return {
currentUser,
activities,
loading,
error,
registrations,
userMessages,
fetchInitialData,
getActivityById,
getUserRegistrations,
registerForActivity,
createActivity,
checkInForActivity,
getUserMessages,
toggleMessageReadStatus
}
})