Add 卓米会 mini program and admin server.
Initial commit of the WeChat mini program, Express backend, and admin console. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
const api = require('../../utils/api')
|
||||
const media = require('../../utils/media')
|
||||
const activityUtil = require('../../utils/activity')
|
||||
|
||||
function chooseOne(mediaType) {
|
||||
return new Promise((resolve, reject) => {
|
||||
wx.chooseMedia({
|
||||
count: 1,
|
||||
mediaType: [mediaType],
|
||||
sourceType: ['album', 'camera'],
|
||||
maxDuration: 60,
|
||||
success: (res) => {
|
||||
const file = res.tempFiles && res.tempFiles[0]
|
||||
if (file && file.tempFilePath) resolve(file.tempFilePath)
|
||||
},
|
||||
fail: reject
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function uploadWithLoading(filePath) {
|
||||
wx.showLoading({ title: '上传中', mask: true })
|
||||
return api.uploadMedia(filePath).then(
|
||||
(data) => {
|
||||
wx.hideLoading()
|
||||
return data
|
||||
},
|
||||
(error) => {
|
||||
wx.hideLoading()
|
||||
throw error
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
Page({
|
||||
data: {
|
||||
title: '',
|
||||
startAt: '',
|
||||
pinned: false,
|
||||
cover: '',
|
||||
coverPreview: '',
|
||||
video: '',
|
||||
saving: false
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
api
|
||||
.profile()
|
||||
.then((profile) => {
|
||||
if (profile && profile.isAdmin) return
|
||||
wx.showToast({ title: '仅管理员可操作', icon: 'none' })
|
||||
setTimeout(() => wx.navigateBack(), 400)
|
||||
})
|
||||
.catch((error) => {
|
||||
activityUtil.toast(error)
|
||||
setTimeout(() => wx.navigateBack(), 400)
|
||||
})
|
||||
},
|
||||
|
||||
onTitle(event) {
|
||||
this.setData({ title: event.detail.value })
|
||||
},
|
||||
|
||||
onTime(event) {
|
||||
this.setData({ startAt: event.detail.value })
|
||||
},
|
||||
|
||||
togglePinned() {
|
||||
this.setData({ pinned: !this.data.pinned })
|
||||
},
|
||||
|
||||
pickCover() {
|
||||
chooseOne('image')
|
||||
.then(uploadWithLoading)
|
||||
.then((data) => this.setData({ cover: data.url, coverPreview: media.absUrl(data.url) }))
|
||||
.catch((error) => {
|
||||
if (error && error.message) activityUtil.toast(error)
|
||||
})
|
||||
},
|
||||
|
||||
clearCover() {
|
||||
this.setData({ cover: '', coverPreview: '' })
|
||||
},
|
||||
|
||||
pickVideo() {
|
||||
chooseOne('video')
|
||||
.then(uploadWithLoading)
|
||||
.then((data) => this.setData({ video: data.url }))
|
||||
.catch((error) => {
|
||||
if (error && error.message) activityUtil.toast(error)
|
||||
})
|
||||
},
|
||||
|
||||
clearVideo() {
|
||||
this.setData({ video: '' })
|
||||
},
|
||||
|
||||
save() {
|
||||
if (this.data.saving) return
|
||||
const title = this.data.title.trim()
|
||||
const startAt = this.data.startAt.trim()
|
||||
if (!title || !startAt) {
|
||||
wx.showToast({ title: '请填写名称和时间', icon: 'none' })
|
||||
return
|
||||
}
|
||||
this.setData({ saving: true })
|
||||
api
|
||||
.createPast({
|
||||
title: title,
|
||||
startAt: startAt,
|
||||
pinned: this.data.pinned,
|
||||
cover: this.data.cover,
|
||||
video: this.data.video
|
||||
})
|
||||
.then(() => wx.navigateBack())
|
||||
.catch((error) => {
|
||||
this.setData({ saving: false })
|
||||
activityUtil.toast(error)
|
||||
})
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user