first commit

This commit is contained in:
ytc1012
2026-02-04 16:11:55 +08:00
commit 0f3ee050dc
165 changed files with 25795 additions and 0 deletions

View File

@@ -0,0 +1,234 @@
const app = getApp()
const db = wx.cloud.database()
Page({
data: {
myRooms: [],
joinedRooms: [],
userOpenId: ''
},
onLoad: function () {
// 先从本地加载
const myRooms = wx.getStorageSync('myRooms') || []
this.setData({ myRooms })
// 获取用户openid后加载完整数据
this.getUserOpenId()
},
onShow: function () {
// 每次显示页面时重新加载聚会列表
if (this.data.userOpenId) {
this.loadRooms()
} else {
// 先显示本地数据,异步加载完整数据
this.getUserOpenId()
}
},
async getUserOpenId() {
try {
// 调用云函数获取 openid
const res = await wx.cloud.callFunction({
name: 'getOpenId'
})
if (res.result && res.result.openid) {
this.setData({ userOpenId: res.result.openid })
this.loadRooms()
}
} catch (err) {
console.error('获取openid失败', err)
}
},
async loadRooms() {
try {
const userOpenId = this.data.userOpenId
if (!userOpenId) return
const _ = db.command
// 查询我创建的聚会
const myRoomsRes = await db.collection('rooms')
.where({
_openid: userOpenId
})
.orderBy('createdAt', 'desc')
.limit(5)
.get()
// 查询我参与的聚会members中有我但不是我创建的
const joinedRoomsRes = await db.collection('rooms')
.where({
_openid: _.neq(userOpenId),
'members.openid': userOpenId
})
.orderBy('createdAt', 'desc')
.limit(5)
.get()
// 转换数据格式
const myRooms = myRoomsRes.data.map(room => ({
roomId: room._id,
name: room.name,
meetTime: room.meetTime
}))
const joinedRooms = joinedRoomsRes.data.map(room => ({
roomId: room._id,
name: room.name,
meetTime: room.meetTime
}))
// 更新到本地存储
const allRooms = [...myRooms, ...joinedRooms]
const uniqueRooms = this.getUniqueRooms(allRooms)
wx.setStorageSync('roomList', uniqueRooms)
wx.setStorageSync('myRooms', myRooms.slice(0, 2))
this.setData({
myRooms: myRooms.slice(0, 2),
joinedRooms: joinedRooms.slice(0, 2)
})
} catch (err) {
console.error('加载聚会列表失败', err)
}
},
getUniqueRooms(rooms) {
const unique = {}
rooms.forEach(room => {
unique[room.roomId] = room
})
// 使用 Object.keys + map 代替 Object.values
return Object.keys(unique).map(key => unique[key])
},
onJoinRoom(e) {
const roomId = e.currentTarget.dataset.roomid
wx.navigateTo({
url: `/pages/room/room?roomId=${roomId}&isCreator=true`
})
},
onDeleteRoom(e) {
const roomId = e.currentTarget.dataset.roomid
wx.showModal({
title: '删除聚会',
content: '确定要删除这个聚会吗?',
confirmText: '删除',
confirmColor: '#ff4d4f',
success: (res) => {
if (res.confirm) {
this.deleteRoom(roomId)
}
}
})
},
async deleteRoom(roomId) {
wx.showLoading({ title: '删除中...' })
try {
// 调用云函数删除聚会
const res = await wx.cloud.callFunction({
name: 'deleteRoom',
data: { roomId }
})
wx.hideLoading()
if (res.result && res.result.success) {
// 从本地存储中移除
let myRooms = wx.getStorageSync('myRooms') || []
myRooms = myRooms.filter(item => item.roomId !== roomId)
wx.setStorageSync('myRooms', myRooms)
let roomList = wx.getStorageSync('roomList') || []
roomList = roomList.filter(item => item.roomId !== roomId)
wx.setStorageSync('roomList', roomList)
// 更新页面数据
this.setData({
myRooms
})
wx.showToast({ title: '删除成功', icon: 'success' })
} else {
wx.showToast({ title: res.result?.msg || '删除失败', icon: 'none' })
}
} catch (err) {
wx.hideLoading()
console.error('删除聚会失败', err)
wx.showToast({ title: '网络错误', icon: 'none' })
}
},
onCreateRoom() {
wx.navigateTo({
url: '/pages/create-room/create-room'
})
},
createRoom(name, keywords, meetTime) {
wx.showLoading({ title: '创建中...', mask: true })
wx.cloud.callFunction({
name: 'createRoom',
data: {
name,
meetTime,
keywords,
requirements: ''
},
success: res => {
wx.hideLoading()
if (res.result.success) {
const roomId = res.result.roomId
// 保存到本地存储
let myRooms = wx.getStorageSync('myRooms') || []
myRooms = myRooms.filter(item => item.roomId !== roomId)
myRooms.unshift({
roomId,
name,
meetTime,
keywords
})
if (myRooms.length > 2) {
myRooms = myRooms.slice(0, 2)
}
wx.setStorageSync('myRooms', myRooms)
// 更新全局roomList
let roomList = wx.getStorageSync('roomList') || []
roomList = roomList.filter(item => item.roomId !== roomId)
roomList.unshift({
roomId,
name,
meetTime,
keywords
})
if (roomList.length > 5) {
roomList = roomList.slice(0, 5)
}
wx.setStorageSync('roomList', roomList)
wx.navigateTo({
url: `/pages/room/room?roomId=${roomId}&isCreator=true`
})
} else {
wx.showToast({ title: res.result.msg || '创建失败', icon: 'none' })
}
},
fail: err => {
wx.hideLoading()
console.error('云函数调用失败', err)
wx.showToast({ title: '网络错误', icon: 'none' })
}
})
}
})