Files
danyang-match/miniapp/pages/my-appointments/my-appointments.js
T

65 lines
1.9 KiB
JavaScript
Raw Normal View History

/**
* U52 我的预约
*
* Phase 19:此前是硬编码假预约(取消只弹 Modal,不改数据)。
* 现接入 GET /service-appointments(服务端按登录主体过滤)+ POST /{id}/cancel。
*/
const { serviceAppointmentService } = require('../../services');
const STATUS_LABEL = {
submitted: '待确认',
pending_confirmation: '待确认',
confirmed: '已确认',
completed: '已完成',
cancelled: '已取消',
};
Page({
data: {
loading: true,
error: '',
appointments: [],
},
onShow() {
this.load();
},
async load() {
this.setData({ loading: true, error: '' });
try {
const list = await serviceAppointmentService.getMyAppointments();
const appointments = (list || []).map((item) => ({
id: item.id,
title: item.serviceLocationName || '善缘丹阳公益服务站',
status: STATUS_LABEL[item.status] || item.status || '',
date: [item.preferredDate, item.preferredTimeSlot].filter(Boolean).join(' ') || '时间待确认',
station: item.serviceLocationName || '',
cancellable: item.status !== 'completed' && item.status !== 'cancelled',
}));
this.setData({ appointments, loading: false });
} catch (error) {
this.setData({ loading: false, error: '加载失败,请稍后重试' });
}
},
cancel(event) {
const id = event.currentTarget.dataset.id;
wx.showModal({
title: '取消预约',
content: '确定取消本次服务预约吗?',
confirmText: '确认取消',
confirmColor: '#D94A4A',
success: async (res) => {
if (!res.confirm) {
return;
}
try {
await serviceAppointmentService.cancelAppointment(id, '用户取消');
wx.showToast({ title: '已取消', icon: 'success' });
this.load();
} catch (error) {
wx.showToast({ title: '取消失败,请稍后重试', icon: 'none' });
}
},
});
},
});