213 lines
7.6 KiB
JavaScript
213 lines
7.6 KiB
JavaScript
import * as taskService from './modules/task-service.js';
|
|
import * as timerUtils from './modules/timer-utils.js';
|
|
|
|
Page({
|
|
data: {
|
|
imageUrl: '',
|
|
textContent: '',
|
|
taskId: null,
|
|
courseId: null,
|
|
loading: true,
|
|
progressLoading: true, // 进度加载中
|
|
timerText: '加载中...', // 初始为加载中文案
|
|
remainingTime: 0, // 剩余时间(秒),从接口获取
|
|
startTime: null,
|
|
isCompleted: false, // 添加完成状态标记
|
|
},
|
|
|
|
onLoad(options) {
|
|
const { task_id, task_title, camp_id, course_id, task_status } = options
|
|
|
|
this.setData({
|
|
taskId: task_id,
|
|
campId: camp_id,
|
|
courseId: course_id,
|
|
task_status,
|
|
startTime: new Date().getTime(),
|
|
progressLoading: true,
|
|
timerText: '加载中...'
|
|
});
|
|
|
|
// 设置导航栏标题
|
|
wx.setNavigationBarTitle({
|
|
title: task_title
|
|
});
|
|
|
|
if (task_status == 'Completed') {
|
|
this.setData({
|
|
isCompleted: true,
|
|
timerText: '已完成',
|
|
progressLoading: false
|
|
});
|
|
}
|
|
|
|
// 按正确顺序:先获取任务详情,再获取任务进度
|
|
if (task_id) {
|
|
wx.showLoading({ title: '加载中...' });
|
|
// 1. 先获取任务详情(包含倒计时时长)
|
|
this.getTaskDetail().then(() => {
|
|
wx.hideLoading();
|
|
// 2. 任务详情获取成功后,再获取任务进度
|
|
this.getProgressDetail();
|
|
}).catch(err => {
|
|
wx.hideLoading();
|
|
console.error('获取任务详情失败:', err);
|
|
this.setData({
|
|
progressLoading: false,
|
|
timerText: '00:00'
|
|
});
|
|
wx.showToast({
|
|
title: '加载任务失败',
|
|
icon: 'none'
|
|
});
|
|
});
|
|
} else {
|
|
this.setData({
|
|
progressLoading: false,
|
|
timerText: '00:00'
|
|
});
|
|
}
|
|
},
|
|
|
|
// 获取用户任务进度
|
|
getProgressDetail() {
|
|
const userId = wx.getStorageSync('wxuserid');
|
|
const { taskId } = this.data;
|
|
|
|
if (!userId || !taskId) {
|
|
this.setData({ progressLoading: false });
|
|
if (!this.data.isCompleted && this.data.remainingTime > 0 && !this.timerInterval) {
|
|
this.startTimer();
|
|
}
|
|
return Promise.resolve();
|
|
}
|
|
|
|
return taskService.getProgressDetail(userId, taskId)
|
|
.then(progress => {
|
|
if (progress && (progress.is_completed === true || progress.is_completed === 1)) {
|
|
this.setData({
|
|
isCompleted: true,
|
|
timerText: '已完成',
|
|
progressLoading: false
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (!this.data.isCompleted && this.data.remainingTime > 0 && !this.timerInterval) {
|
|
this.startTimer();
|
|
}
|
|
this.setData({ progressLoading: false });
|
|
})
|
|
.catch(err => {
|
|
console.error('获取任务进度失败:', err);
|
|
if (!this.data.isCompleted && this.data.remainingTime > 0 && !this.timerInterval) {
|
|
this.startTimer();
|
|
}
|
|
this.setData({ progressLoading: false });
|
|
});
|
|
},
|
|
|
|
getTaskDetail() {
|
|
const { taskId } = this.data;
|
|
|
|
if (!taskId) {
|
|
this.setData({
|
|
progressLoading: false,
|
|
timerText: '00:00'
|
|
});
|
|
return Promise.reject(new Error('任务ID为空'));
|
|
}
|
|
|
|
return taskService.getTaskDetail(taskId).then(taskData => {
|
|
this.setData({
|
|
imageUrl: taskData.imageUrl,
|
|
textContent: taskData.textContent,
|
|
taskType: taskData.taskType,
|
|
remainingTime: taskData.remainingTime,
|
|
timerText: taskData.remainingTime > 0 ? timerUtils.formatTimer(taskData.remainingTime) : '00:00'
|
|
});
|
|
}).catch(err => {
|
|
console.error('获取任务详情失败:', err);
|
|
this.setData({
|
|
timerText: '00:00',
|
|
remainingTime: 0
|
|
});
|
|
throw err;
|
|
});
|
|
},
|
|
|
|
// 图片加载成功
|
|
onImageLoad() {
|
|
this.setData({
|
|
loading: false
|
|
});
|
|
},
|
|
|
|
// 图片加载失败
|
|
onImageError() {
|
|
this.setData({
|
|
loading: false
|
|
});
|
|
wx.showToast({
|
|
title: '图片加载失败',
|
|
icon: 'none'
|
|
});
|
|
},
|
|
|
|
// 预览图片
|
|
previewImage() {
|
|
const { imageUrl } = this.data;
|
|
if (imageUrl) {
|
|
wx.previewImage({
|
|
urls: [imageUrl],
|
|
current: imageUrl
|
|
});
|
|
}
|
|
},
|
|
|
|
|
|
|
|
startTimer() {
|
|
timerUtils.startTimer(this, () => {
|
|
// 倒计时结束回调
|
|
const taskId = String(this.data.taskId);
|
|
const userId = String(wx.getStorageSync('wxuserid') || '');
|
|
|
|
taskService.updateProgressToCompleted(userId, taskId)
|
|
.then(res => {
|
|
console.log('更新任务进度成功:', res);
|
|
if (res && res.success === true) {
|
|
console.log('任务进度已更新为已完成');
|
|
} else {
|
|
console.error('更新任务进度失败:', res);
|
|
wx.showToast({
|
|
title: res && res.message || '更新进度失败',
|
|
icon: 'none'
|
|
});
|
|
}
|
|
})
|
|
.catch(err => {
|
|
console.error('更新任务进度异常:', err);
|
|
wx.showToast({
|
|
title: '更新进度失败',
|
|
icon: 'none'
|
|
});
|
|
});
|
|
|
|
this.setData({
|
|
isCompleted: true,
|
|
timerText: '已完成'
|
|
});
|
|
|
|
wx.showToast({
|
|
title: '学习完成!',
|
|
icon: 'success'
|
|
});
|
|
});
|
|
},
|
|
|
|
onUnload() {
|
|
timerUtils.stopTimer(this);
|
|
}
|
|
|
|
});
|