Files
Michelle ZanandCursor cd05113755 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>
2026-09-29 19:01:36 +08:00

98 lines
2.6 KiB
JavaScript

const api = require('../../utils/api')
const media = require('../../utils/media')
const activityUtil = require('../../utils/activity')
const FIELDS = ['nickName', 'name', 'phone', 'company', 'position']
Page({
data: {
avatarUrl: '',
avatarPreview: '',
nickName: '',
name: '',
phone: '',
company: '',
position: '',
letter: '微',
uploading: false,
saving: false
},
onLoad() {
api
.profile()
.then((profile) => {
const next = {
avatarUrl: profile.avatarUrl || '',
avatarPreview: media.absUrl(profile.avatarUrl),
letter: (profile.nickName || profile.name || '微').slice(0, 1)
}
FIELDS.forEach((key) => {
next[key] = profile[key] || ''
})
this.setData(next)
})
.catch(activityUtil.toast)
},
pickAvatar() {
if (this.data.uploading) return
wx.chooseMedia({
count: 1,
mediaType: ['image'],
sourceType: ['album', 'camera'],
sizeType: ['compressed'],
success: (res) => {
const file = res.tempFiles && res.tempFiles[0]
if (!file || !file.tempFilePath) return
this.setData({ uploading: true, avatarPreview: file.tempFilePath })
api
.uploadAvatar(file.tempFilePath)
.then((data) => this.setData({ avatarUrl: data.url, uploading: false }))
.catch((error) => {
this.setData({ uploading: false, avatarPreview: media.absUrl(this.data.avatarUrl) })
activityUtil.toast(error)
})
}
})
},
onInput(event) {
const next = {}
next[event.currentTarget.dataset.field] = event.detail.value
this.setData(next)
},
save() {
if (this.data.saving) return
if (this.data.uploading) {
wx.showToast({ title: '头像上传中,请稍候', icon: 'none' })
return
}
const payload = { avatarUrl: this.data.avatarUrl }
FIELDS.forEach((key) => {
payload[key] = (this.data[key] || '').trim()
})
if (!payload.name && !payload.nickName) {
wx.showToast({ title: '请至少填写昵称或姓名', icon: 'none' })
return
}
if (payload.phone && !/^1\d{10}$/.test(payload.phone)) {
wx.showToast({ title: '请填写正确的手机号', icon: 'none' })
return
}
this.setData({ saving: true })
api
.saveProfile(payload)
.then(() => {
wx.showToast({ title: '已保存', icon: 'success' })
setTimeout(() => wx.navigateBack(), 500)
})
.catch((error) => {
this.setData({ saving: false })
activityUtil.toast(error)
})
}
})