90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
/**
|
|
* 图文任务服务模块
|
|
* 负责任务详情和进度相关的 API 调用
|
|
*/
|
|
|
|
import { campApi } from '../../../config/camp_api.js';
|
|
|
|
/**
|
|
* 获取任务详情
|
|
* @param {String} taskId - 任务ID
|
|
* @returns {Promise} 任务详情
|
|
*/
|
|
export function getTaskDetail(taskId) {
|
|
if (!taskId) {
|
|
return Promise.reject(new Error('任务ID为空'));
|
|
}
|
|
|
|
return campApi.getTaskDetailById(taskId).then(res => {
|
|
if (res && res.success === true && res.task) {
|
|
const task = res.task || {};
|
|
const content = task.content || {};
|
|
const condition = task.condition || {};
|
|
// 数据嵌套在 image_text 子对象中
|
|
const imageTextContent = content.image_text || {};
|
|
const imageTextCondition = condition.image_text || {};
|
|
const imageUrlRaw = imageTextContent.image_url || '';
|
|
const textContent = imageTextContent.text_content || '';
|
|
const durationSeconds = imageTextCondition.view_duration_seconds || 0;
|
|
|
|
const imageUrl = (imageUrlRaw && /^https?:\/\//.test(imageUrlRaw))
|
|
? imageUrlRaw
|
|
: (imageUrlRaw ? ('https://' + imageUrlRaw) : '');
|
|
|
|
const validDuration = Number(durationSeconds) || 0;
|
|
|
|
return {
|
|
imageUrl,
|
|
textContent,
|
|
taskType: task.task_type || 'TASK_TYPE_IMAGE_TEXT',
|
|
remainingTime: validDuration
|
|
};
|
|
} else {
|
|
throw new Error('任务详情接口返回格式不符合预期');
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 获取任务进度
|
|
* @param {String} userId - 用户ID
|
|
* @param {String} taskId - 任务ID
|
|
* @returns {Promise} 任务进度
|
|
*/
|
|
export function getProgressDetail(userId, taskId) {
|
|
if (!userId || !taskId) {
|
|
return Promise.resolve(null);
|
|
}
|
|
|
|
return campApi.getProgressDetail(userId, taskId).then(res => {
|
|
if (res && res.success === true && res.progress) {
|
|
return res.progress;
|
|
}
|
|
return null;
|
|
}).catch(err => {
|
|
console.error('获取任务进度失败:', err);
|
|
return null;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 更新任务进度为已完成
|
|
* @param {String} userId - 用户ID
|
|
* @param {String} taskId - 任务ID
|
|
* @returns {Promise} 更新结果
|
|
*/
|
|
export function updateProgressToCompleted(userId, taskId) {
|
|
const completedAt = Math.floor(Date.now() / 1000);
|
|
|
|
return campApi.updateCampProgress({
|
|
user_id: String(userId),
|
|
task_id: String(taskId),
|
|
is_completed: true,
|
|
completed_at: String(completedAt),
|
|
review_status: 'pending',
|
|
review_comment: '',
|
|
review_images: []
|
|
});
|
|
}
|
|
|