You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
4.6 KiB

2 weeks ago
const app = getApp<IAppOption>()
interface AgendaItem {
id: number
time: string
title: string
desc: string
}
2 weeks ago
Page({
2 weeks ago
data: {
currentStep: 1,
steps: [
{ label: '基本信息', field: 'basic' },
{ label: '报名签到设置', field: 'signup' },
{ label: '活动议程', field: 'agenda' },
],
// 步骤1 基本信息
coverImage: '',
title: '',
startTime: '',
endTime: '',
detail: '',
level: '',
levels: ['校级', '院级', '系级', '班级', '其他'],
category: '',
categories: ['讲座', '比赛', '社团活动', '志愿服务', '文体活动', '学术交流', '其他'],
location: '',
organizer: '',
contactName: '',
contactPhone: '',
// 步骤2 活动议程
agendas: [{ id: 1, time: '', title: '', desc: '' }] as AgendaItem[],
nextAgendaId: 2,
// 步骤3 报名签到设置
needRegister: true,
registerStartTime: '',
registerEndTime: '',
registerLimit: 'unlimited',
registerLimitCount: '',
registerCondition: '',
checkinWay: 'dynamic',
checkinStartTime: '',
checkinEndTime: '',
},
onLoad() {
app.waitLogin()
},
// ========== 步骤切换 ==========
goStep(step: number) {
if (step < 1 || step > 4) return
this.setData({ currentStep: step })
},
onNextStep() {
const next = this.data.currentStep + 1
if (next <= 4) this.setData({ currentStep: next })
},
onPrevStep() {
const prev = this.data.currentStep - 1
if (prev >= 1) this.setData({ currentStep: prev })
},
// ========== 图片上传 ==========
onChooseImage() {
wx.chooseMedia({
count: 1,
mediaType: ['image'],
sourceType: ['album', 'camera'],
success: (res) => {
const tempFile = res.tempFiles[0]?.tempFilePath
if (tempFile) this.setData({ coverImage: tempFile })
},
})
},
// ========== 输入绑定 ==========
onInputChange(e: WechatMiniprogram.Input) {
const { field } = e.currentTarget.dataset
this.setData({ [field]: e.detail.value })
},
onTextareaChange(e: WechatMiniprogram.TextareaInput) {
const { field } = e.currentTarget.dataset
this.setData({ [field]: e.detail.value })
},
// ========== 时间选择 ==========
onPickTime(e: WechatMiniprogram.PickerChange) {
const { field } = e.currentTarget.dataset
this.setData({ [field]: e.detail.value })
},
// ========== 标签选择 ==========
onSelectLevel(e: WechatMiniprogram.TouchEvent) {
const { value } = e.currentTarget.dataset
this.setData({ level: value })
},
onSelectCategory(e: WechatMiniprogram.TouchEvent) {
const { value } = e.currentTarget.dataset
this.setData({ category: value })
},
// ========== 议程管理 ==========
onAddAgenda() {
const agendas = this.data.agendas
agendas.push({
id: this.data.nextAgendaId,
time: '',
title: '',
desc: '',
})
this.setData({
agendas,
nextAgendaId: this.data.nextAgendaId + 1,
})
},
onRemoveAgenda(e: WechatMiniprogram.TouchEvent) {
const { index } = e.currentTarget.dataset
const agendas = this.data.agendas.filter((_, i) => i !== index)
this.setData({ agendas })
},
onAgendaInput(e: WechatMiniprogram.Input | WechatMiniprogram.TextareaInput) {
const { index, field } = e.currentTarget.dataset
const agendas = this.data.agendas
agendas[index][field] = e.detail.value
this.setData({ agendas })
},
onAgendaTime(e: WechatMiniprogram.PickerChange) {
const { index } = e.currentTarget.dataset
const agendas = this.data.agendas
agendas[index].time = e.detail.value as string
this.setData({ agendas })
},
// ========== 报名签到设置 ==========
onToggleRegister(e: WechatMiniprogram.TouchEvent) {
const { value } = e.currentTarget.dataset
this.setData({ needRegister: value === 'yes' })
},
onToggleRegisterLimit(e: WechatMiniprogram.TouchEvent) {
const { value } = e.currentTarget.dataset
this.setData({ registerLimit: value })
},
onSelectCheckinWay(e: WechatMiniprogram.TouchEvent) {
const { value } = e.currentTarget.dataset
this.setData({ checkinWay: value })
},
// ========== 底部操作 ==========
onSaveDraft() {
wx.showToast({ title: '已保存草稿', icon: 'success' })
},
onSubmit() {
wx.showModal({
title: '确认提交',
content: '提交后将进入审核流程,是否继续?',
success: (res) => {
if (res.confirm) {
this.setData({ currentStep: 4 })
}
},
})
},
onGoHome() {
wx.switchTab({ url: '/pages/index/index' })
},
})
2 weeks ago
export {}