修改弹窗两次时候无法弹出

This commit is contained in:
田岩
2025-12-04 16:23:07 +08:00
parent 95505e40d2
commit 3201fc026d
7 changed files with 958 additions and 114 deletions
+5 -2
View File
@@ -138,8 +138,11 @@
},
failCb: (res) => {
checkInLoading.value = false;
console.log('签到失败', res);
common.msg('签到失败,请稍后再试');
if (res.data.rtnCode === '0002') {
common.msg(res.data.message);
} else {
common.msg('签到失败,请稍后再试');
}
}
});
};
@@ -34,88 +34,118 @@ export default function usePointsAndBadge() {
* @param {any} res - 接口返回数据
*/
const handlePointsBadgePopup = (points, pointsBadges, complete = () => {}, res = {}) => {
// AI问答仅弹徽章弹窗
if (points?.length > 0) {
// 普通场景:先弹积分弹窗,再弹徽章弹窗
pointsRef.value?.open(points, pointsBadges, (status, pointsList, badgesList) => {
pointsRef.value.close();
// 有徽章则弹徽章弹窗,否则直接完成
if (badgesList?.length > 0) {
nextTick(() => {
setTimeout(() => {
badgeRef.value.open(pointsList, badgesList, () => {
badgeRef.value.close();
complete(true, '积分获取成功', res);
// AI问答仅弹徽章弹窗
if (points?.length > 0) {
// 普通场景:先弹积分弹窗,再弹徽章弹窗
pointsRef.value?.open(points, pointsBadges, (status, pointsList, badgesList) => {
pointsRef.value.close();
if(pointsList.length > 0) {
setTimeout(() => {
pointsRef.value?.open(pointsList, badgesList, (status, pointsList,
badgesList) => {
pointsRef.value.close();
// 有徽章则弹徽章弹窗,否则直接完成
if (badgesList?.length > 0) {
nextTick(() => {
setTimeout(() => {
badgeRef.value.open(pointsList,
badgesList, () => {
badgeRef.value.close();
complete(true, '积分获取成功',
res);
});
}, pop_up_time);
});
}, pop_up_time);
} else {
complete(true, '积分获取成功', res);
}
});
} else {
complete(true, '积分获取成功', res);
}
});
} else if (pointsBadges?.length > 0) {
badgeRef.value.open([], pointsBadges, () => {
badgeRef.value.close();
}, 300)
} else if (badgesList?.length > 0) {
// 有徽章则弹徽章弹窗,否则直接完成
nextTick(() => {
setTimeout(() => {
badgeRef.value.open(pointsList, badgesList, () => {
badgeRef.value.close();
complete(true, '积分获取成功', res);
});
}, pop_up_time);
});
} else {
complete(true, '积分获取成功', res);
});
}else{
}
});
} else if (pointsBadges?.length > 0) {
badgeRef.value.open([], pointsBadges, () => {
badgeRef.value.close();
complete(true, '积分获取成功', res);
});
} else {
complete(false, '积分接口返回数据异常', res);
}
};
/**
* 积分和徽章处理主方法
* @param {string} type - 任务类型(04:课程练习,06:AI问答,其他:普通任务)
* @param {string|null} taskId - 任务ID
* @param {Function} complete - 完成回调(status, message, data
*/
const pointAndBadgesRun = async (type, taskId = '', complete = () => {}) => {
try {
console.log('调用积分接口');
const res = await addPointsByTask({
type,
taskId
});
// 防御性处理:确保res.body存在
if (!res?.body) {
complete(false, '积分接口返回数据异常', res);
return;
}
};
/**
* 积分和徽章处理主方法
* @param {string} type - 任务类型(04:课程练习,06:AI问答,其他:普通任务)
* @param {string|null} taskId - 任务ID
* @param {Function} complete - 完成回调(status, message, data
*/
const pointAndBadgesRun = async (type, taskId = '', complete = () => {}) => {
try {
console.log('调用积分接口');
const res = await addPointsByTask({
type,
taskId
});
// 防御性处理:确保res.body存在
if (!res?.body) {
complete(false, '积分接口返回数据异常', res);
const {
points,
pointsBadges,
message = ''
} = res.body;
// const points = [{
// "changePoints": 1,
// "message": '学习时长累计1小时'
// },
// {
// "changePoints": 10,
// "message": '完成课程学习'
// }
// ]
// 分支逻辑:按类型处理
switch (type) {
case '04': // 04:课程练习,自定义返回逻辑,不弹弹窗
complete(true, '', res.body); // 补充回调,避免调用方等待
return;
}
const {
points,
pointsBadges,
message = ''
} = res.body;
// 分支逻辑:按类型处理
switch (type) {
case '04': // 04:课程练习,自定义返回逻辑,不弹弹窗
complete(true, '', res.body); // 补充回调,避免调用方等待
return;
case '06': // 06AI问答,仅弹徽章弹窗
if (pointsBadges?.length > 0) {
handlePointsBadgePopup(points, pointsBadges, complete, res);
} else {
complete(true, '', res);
}
return;
// 其他类型:弹积分+徽章弹窗
default:
case '06': // 06AI问答,仅弹徽章弹窗
if (pointsBadges?.length > 0) {
handlePointsBadgePopup(points, pointsBadges, complete, res);
return;
}
} catch (error) {
// 细化错误信息:区分网络错误/接口错误
const errorMsg = error?.message || '积分获取失败';
complete(false, `积分获取失败:${errorMsg}`, error);
} else {
complete(true, '', res);
}
return;
// 其他类型:弹积分+徽章弹窗
default:
handlePointsBadgePopup(points, pointsBadges, complete, res);
return;
}
};
return {
pointAndBadgesRun,
handlePointsBadgePopup,
badgeRef,
pointsRef
};
}
} catch (error) {
// 细化错误信息:区分网络错误/接口错误
const errorMsg = error?.message || '积分获取失败';
complete(false, `积分获取失败:${errorMsg}`, error);
}
};
return {
pointAndBadgesRun,
handlePointsBadgePopup,
badgeRef,
pointsRef
};
}