Initial Commit

This commit is contained in:
chenglijuan
2026-04-18 22:15:11 +08:00
commit 9de2bdee2e
25 changed files with 1465 additions and 0 deletions
+138
View File
@@ -0,0 +1,138 @@
// 云数据库操作工具库
const db = wx.cloud.database()
const _ = db.command
/**
* 用户相关操作
*/
const userDB = {
/**
* 通过 openId 查找用户,不存在则创建
* @param {string} openid
* @param {object} userInfo - { avatarUrl, nickName }
* @returns {Promise<object>} 用户记录
*/
async loginOrCreate(openid, userInfo) {
const res = await db.collection('users').where({ _openid: openid }).get()
if (res.data.length > 0) {
// 已存在,更新头像昵称
const existing = res.data[0]
await db.collection('users').doc(existing._id).update({
data: {
avatarUrl: userInfo.avatarUrl,
nickName: userInfo.nickName,
lastLoginTime: db.serverDate()
}
})
return { ...existing, avatarUrl: userInfo.avatarUrl, nickName: userInfo.nickName }
} else {
// 不存在,新建
const addRes = await db.collection('users').add({
data: {
_openid: openid,
avatarUrl: userInfo.avatarUrl,
nickName: userInfo.nickName,
createTime: db.serverDate(),
lastLoginTime: db.serverDate()
}
})
return {
_id: addRes._id,
_openid: openid,
avatarUrl: userInfo.avatarUrl,
nickName: userInfo.nickName
}
}
},
/**
* 根据 openId 获取用户信息
* @param {string} openid
* @returns {Promise<object|null>}
*/
async getByOpenId(openid) {
const res = await db.collection('users').where({ _openid: openid }).get()
return res.data.length > 0 ? res.data[0] : null
}
}
/**
* 预约相关操作
*/
const appointmentDB = {
/**
* 创建预约
* @param {object} data - 预约表单数据
* @returns {Promise<string>} 新记录 _id
*/
async create(data) {
const res = await db.collection('appointments').add({
data: {
...data,
status: 'pending',
statusText: '待审核',
createTime: db.serverDate()
}
})
return res._id
},
/**
* 获取当前用户的预约列表(按创建时间倒序)
* @param {string} openid
* @returns {Promise<Array>}
*/
async getList(openid) {
const res = await db.collection('appointments')
.where({ _openid: openid })
.orderBy('createTime', 'desc')
.get()
return res.data
},
/**
* 获取当前用户最新一条预约
* @param {string} openid
* @returns {Promise<object|null>}
*/
async getLatest(openid) {
const res = await db.collection('appointments')
.where({ _openid: openid })
.orderBy('createTime', 'desc')
.limit(1)
.get()
return res.data.length > 0 ? res.data[0] : null
},
/**
* 取消预约
* @param {string} id - 预约记录 _id
* @param {string} openid - 当前用户 openid,用于权限校验
* @returns {Promise<boolean>} 是否成功
*/
async cancel(id, openid) {
// 先校验该预约属于当前用户
const res = await db.collection('appointments').doc(id).get()
if (res.data._openid !== openid) {
return false
}
if (res.data.status !== 'pending') {
return false
}
await db.collection('appointments').doc(id).update({
data: {
status: 'cancelled',
statusText: '已取消'
}
})
return true
}
}
module.exports = {
db,
_,
userDB,
appointmentDB
}
+27
View File
@@ -0,0 +1,27 @@
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
}
const formatDate = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return `${year}-${formatNumber(month)}-${formatNumber(day)}`
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : `0${n}`
}
module.exports = {
formatTime,
formatDate
}