diff --git a/.env.development b/.env.development index f50f603d..464348e8 100644 --- a/.env.development +++ b/.env.development @@ -3,9 +3,9 @@ ENV = 'development' # 'development' -VITE_APP_BASE_API_Url = 'https://aits.jlbank.com.cn:7001' +# VITE_APP_BASE_API_Url = 'https://aits.jlbank.com.cn:7001' -# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002' +VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002' # VITE_APP_BASE_API_Url = 'http://192.168.247.200' # VITE_APP_BASE_API_Url = 'http://aitscdn.jlbank.com.cn:7001' diff --git a/src/components/points-and-badge/badge.vue b/src/components/points-and-badge/badge.vue index e2bffedb..7a1089c6 100644 --- a/src/components/points-and-badge/badge.vue +++ b/src/components/points-and-badge/badge.vue @@ -5,11 +5,11 @@ - 恭喜你获得新徽章 + {{ title }} - + @@ -23,7 +23,7 @@ {{ item.pointsBadgeName }} - + @@ -56,11 +56,17 @@ const popup = ref(null); const current = ref(0); const opacity = ref(1); - +let CloseComplete const badgesList = ref([]); const pointsList = ref([]); const multiple = computed(() => badgesList.value.length > 1); + const titleNumberText = ['', '两', '三', '四', '五', '六', '七', '八', '九', '十']; + const title = computed(() => + badgesList.value.length === 1 + ? '恭喜你获得新徽章' + : `恭喜你获得${titleNumberText[badgesList.value.length - 1]}枚新徽章` + ); const buttonColor = 'linear-gradient( 270deg, #F81758 0%, #FFA062 100%)'; const customStyle = { borderRadius: '40rpx' @@ -91,7 +97,7 @@ nextTick(() => { popup.value.close(); }); - + // uni.showTabBar({ // success() { // opacity.value = 0; @@ -104,25 +110,23 @@ // 点击 const clickFun = (status = true) => { emits('confirm', status, pointsList.value, badgesList.value, () => {}); + CloseComplete(status, pointsList.value, badgesList.value) }; - const open = (points = [], badges = []) => { + const open = (points = [], badges = [], complete = () => {}) => { if (!Array.isArray(badges) || badges.length === 0) { console.error('badges 不是有效的数组或为空'); return; } console.log('badges', badges); + CloseComplete = complete badgesList.value = badges; pointsList.value = points; - - opacity.value = 1; console.log('成功'); popup.value.open('center'); // uni.hideTabBar({ // success() { - - // opacity.value = 1; // console.log('成功'); // popup.value.open('center'); diff --git a/src/components/points-and-badge/points.vue b/src/components/points-and-badge/points.vue index c333c690..b3ad9ec2 100644 --- a/src/components/points-and-badge/points.vue +++ b/src/components/points-and-badge/points.vue @@ -49,13 +49,15 @@ const badgesList =ref([]); const pointsList = ref([]); const popup = ref(null); + let CloseComplete const buttonColor = 'linear-gradient( 270deg, #F81758 0%, #FFA062 100%)'; const customStyle = { borderRadius: '40rpx' //圆角 }; - + const emits = defineEmits(['confirm']); - const open = (points, badges=[]) => { + const open = (points, badges=[], complete = () => {}) => { + console.log('开启积分弹窗'); if (!Array.isArray(points) || points.length === 0) { console.error('points 不是有效的数组或为空'); // 积分为空直接调用完成 @@ -67,6 +69,7 @@ ); return; } + CloseComplete = complete badgesList.value = badges // 解构出第一项和剩余元素(原数组不变) const [firstItem, ...remainingPoints] = points; @@ -90,6 +93,7 @@ } ); + CloseComplete(status, pointsList.value, badgesList.value) }; defineExpose({ open, close }); diff --git a/src/components/points-and-badge/usePointsAndBadge.js b/src/components/points-and-badge/usePointsAndBadge.js new file mode 100644 index 00000000..50388319 --- /dev/null +++ b/src/components/points-and-badge/usePointsAndBadge.js @@ -0,0 +1,118 @@ +/** + 完成课程学习 首次完成1分 每天最多获取5分 完成课程学习 crsId 02 完成调用 杨航 + 完成课程练习 首次完成1分 每天最多获取5分 完成课程练习 crsId 04 完成练习调用 田岩 + 通过课程考试 首次完成1分 每天最多获取5分 通过课程考试 crsId 03 通过调用 田岩 + 完成考试中心考试 首次完成1分 每天最多获取5分 完成考试中心考试 papersId 05 完成调用 田岩 + 完成竞赛PK 每次1分 每天最多获取5分 完成竞赛PK 11 完成调用 田岩 + 通过AI陪练练习 每次1分 每天最多获取5分 通过AI陪练练习 07 通过调用 杨航 + 通过AI陪练考试 每次1分 每天最多获取5分 通过AI陪练考试 08 通过调用 杨航 + 签到 每日1积分, + 第七天5积分, + 第30天20积分, + 断签从第一天计算。 签到完成 田岩 + */ +import { + addPointsByTask +} from '@/api/pointsAndRank.js' +import { + ref +} from 'vue' +import { + pop_up_time +} from '@/enum'; +// 徽章类型配置:映射类型编码、参数键、规则描述 +const typeConfig = { + '02': { + name: '完成课程学习', + paramsKey: 'crsId', + rule: '首次完成1分,每天最多5分' + }, + '03': { + name: '通过课程考试', + paramsKey: 'crsId', + rule: '首次完成1分,每天最多5分' + }, + '04': { + name: '完成课程练习', + paramsKey: 'crsId', + rule: '首次完成1分,每天最多5分' + }, + '05': { + name: '完成考试中心考试', + paramsKey: 'papersId', + rule: '首次完成1分,每天最多5分' + }, + '07': { + name: '通过AI陪练练习', + paramsKey: '', + rule: '每次1分,每天最多5分' + }, + '08': { + name: '通过AI陪练考试', + paramsKey: '', + rule: '每次1分,每天最多5分' + }, + '11': { + name: '完成竞赛PK', + paramsKey: '', + rule: '每次1分,每天最多5分' + } +} + +export default function usePointsAndBadge() { + const badgeRef = ref(null); + const pointsRef = ref(null); + + const pointAndBadgesRun = async (type, params = null, complete = () => {}) => { + // 校验类型合法性 + if (!typeConfig[type] && type !== 'sign') { + console.warn(`不支持的徽章类型:${type}`); + complete(false, '类型不合法'); + return; + } + + let requestParams = { + type + }; + const config = typeConfig[type]; + + // 适配参数键(crsId/papersId/无参数) + if (config?.paramsKey) { + if (!params) { + console.warn(`类型${type}(${config.name})需传入${config.paramsKey}参数`); + complete(false, '缺少必要参数'); + return; + } + requestParams[config.paramsKey] = params; + } + + try { + // 调用积分接口 + console.log('调用积分接口'); + const res = await addPointsByTask(requestParams); + console.log('调用积分接口', res); + console.log('pointsRefpointsRef', pointsRef.value); + + pointsRef.value.open(res.body.points, res.body.pointsBadges, (status, pointsList, badgesList) => { + pointsRef.value.close() + if (badgesList.length > 0) { + nextTick(() => { + setTimeout(() => { + badgeRef.value.open(pointsList, badgesList); + }, pop_up_time); + }); + } + }); + // complete(true, '积分获取成功', res); + } catch (error) { + // console.error(`类型${type}积分获取失败:`, error); + // complete(false, '积分获取失败', error); + } + }; + + return { + pointAndBadgesRun, + badgeRef, + pointsRef + }; +} \ No newline at end of file diff --git a/src/pages/competition/result.vue b/src/pages/competition/result.vue index 9d8e2fa5..df3fde8a 100644 --- a/src/pages/competition/result.vue +++ b/src/pages/competition/result.vue @@ -60,7 +60,7 @@ - {{ pkData.pkIsAnony === 'N' ? pkData.userNamePk : '匿名' }} + {{ pkData.pkIsAnony === 'N' ? pkData.userNamePk : '匿名' }} 正确/总题数 {{ pkData.correctNubPk }} @@ -83,15 +83,17 @@ 查看排行榜 - + - + + +