Commit 65dec009 authored by 王炽's avatar 王炽

任务页面移动到index

parent eb3b67d6
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
.task_complete_container { .task_complete_container {
position: relative; position: relative;
width: 600rpx; width: 750rpx;
height: 500rpx; height: 500rpx;
// background: #ffffff; // background: #ffffff;
border-radius: 30rpx; border-radius: 30rpx;
......
...@@ -26,6 +26,21 @@ ...@@ -26,6 +26,21 @@
@close="handleCloseTaskComplete" @close="handleCloseTaskComplete"
@accept="handleAcceptTaskComplete" @accept="handleAcceptTaskComplete"
/> />
<!-- 任务弹窗 -->
<TaskPop
:visible="globalStore.isShowTaskPop"
:taskTodo="globalStore.taskTodo"
@close="handleCloseTaskPop"
@taskClick="handleTaskClick"
/>
<!-- 任务信息弹窗 -->
<TaskPerson
:visible="globalStore.isShowTaskPerson"
@close="handleCloseTaskPerson"
@submit="handleTaskPersonSubmit"
/>
<button v-if="isBackApp" class="back-app" open-type="launchApp" app-parameter="wechat" @binderror="handleLaunchAppError" <button v-if="isBackApp" class="back-app" open-type="launchApp" app-parameter="wechat" @binderror="handleLaunchAppError"
:style="{ :style="{
...@@ -59,7 +74,7 @@ ...@@ -59,7 +74,7 @@
<script setup> <script setup>
import { ref, getCurrentInstance } from "vue"; import { ref, getCurrentInstance } from "vue";
import { onLoad, onShareAppMessage, onShareTimeline, onPageScroll } from "@dcloudio/uni-app"; import { onLoad, onShareAppMessage, onShareTimeline, onPageScroll, onShow } from "@dcloudio/uni-app";
import TabBar from "@/components/TabBar.vue"; import TabBar from "@/components/TabBar.vue";
import Home from "@/views/Home.vue"; import Home from "@/views/Home.vue";
import Brand from "@/views/Brand.vue"; import Brand from "@/views/Brand.vue";
...@@ -68,9 +83,13 @@ import My from "@/views/My.vue"; ...@@ -68,9 +83,13 @@ import My from "@/views/My.vue";
import WxFriendCircleSimplePage from "@/components/WxFriendCircleSimplePage.vue"; import WxFriendCircleSimplePage from "@/components/WxFriendCircleSimplePage.vue";
import InvitePrizePanel from "@/components/integralArea/InvitePrizePanel.vue"; import InvitePrizePanel from "@/components/integralArea/InvitePrizePanel.vue";
import TaskComplete from "@/components/qiandao/TaskComplete.vue"; import TaskComplete from "@/components/qiandao/TaskComplete.vue";
import TaskPop from "@/components/renwu/TaskPop.vue";
import TaskPerson from "@/components/renwu/TaskPerson.vue";
import { useGlobalStore } from "@/stores/global.js"; import { useGlobalStore } from "@/stores/global.js";
import { useUserStore } from "@/stores/user.js"; import { useUserStore } from "@/stores/user.js";
import { jump, JumpType } from "../../utils"; import { jump, JumpType } from "../../utils";
import { taskCompleteJSON } from "../../api/integral";
import { useIntegralStore } from "@/stores/integral";
const globalStore = useGlobalStore(); const globalStore = useGlobalStore();
const userStore = useUserStore(); const userStore = useUserStore();
...@@ -80,6 +99,10 @@ const homeRef = ref(null); ...@@ -80,6 +99,10 @@ const homeRef = ref(null);
const scrollTop = ref(0); const scrollTop = ref(0);
const isBackApp = ref(false); const isBackApp = ref(false);
const showGoldCoinAnimation = ref(false); const showGoldCoinAnimation = ref(false);
const taskId = ref(0);
const goldCoinConfig = ref({ const goldCoinConfig = ref({
title: '恭喜你回答正确', title: '恭喜你回答正确',
description: '获得20积分' description: '获得20积分'
...@@ -210,6 +233,22 @@ onPageScroll((e) => { ...@@ -210,6 +233,22 @@ onPageScroll((e) => {
// } // }
// }); // });
onShow(async () => {
console.log('onShow--index');
//完成了浏览任务
if(taskId.value > 0) {
const integralStore = useIntegralStore();
const res = await taskCompleteJSON(taskId.value);
console.log('taskCompleteJSON res:', res);
globalStore.isShowTaskComplete = true;
globalStore.taskCompletePoints = res?.data?.credits;
globalStore.taskCompleteTitle = res?.data?.taskName;
//刷新签到和任务信息
await integralStore.getSigninAndTaskInfo();
}
});
// 暴露显示金币动画的方法供其他组件调用 // 暴露显示金币动画的方法供其他组件调用
defineExpose({ defineExpose({
showGoldCoinEffect showGoldCoinEffect
...@@ -247,6 +286,97 @@ const handleAcceptTaskComplete = () => { ...@@ -247,6 +286,97 @@ const handleAcceptTaskComplete = () => {
globalStore.isShowTaskComplete = false; globalStore.isShowTaskComplete = false;
// 这里可以添加接受奖励后的逻辑 // 这里可以添加接受奖励后的逻辑
}; };
// 任务弹窗处理方法
const handleCloseTaskPop = () => {
globalStore.closeTaskPop();
};
const handleTaskClick = async (data) => {
console.log('任务点击:', data);
// 如果是完善信息任务,显示TaskPerson弹窗
if (!data.task) {
uni.showToast({
title: '任务不存在',
icon: 'none'
});
return;
}
taskId.value = 0;
switch (data.task.taskTodoExtra.type) {
case 'Perfect':
globalStore.closeTaskPop(); // 先关闭TaskPop
setTimeout(() => {
globalStore.showTaskPerson(); // 延迟显示TaskPerson
}, 100);
break;
case 'BROWSE_PAGE'://浏览商城
globalStore.closeTaskPop();
taskId.value = data?.task?.id;
// 这里可以设置任务ID用于后续完成检测
jump({
type: JumpType.H5,
url: 'https://www.baidu.com'
});
break;
case 'EXCHANGE_GOODS'://完成首单优选消费
jump({
type: JumpType.H5,
url: 'https://www.baidu.com'
});
break;
case 'FollowWx'://关注公众号
globalStore.closeTaskPop(); // 先关闭TaskPop
setTimeout(() => {
// 这里可以显示公众号弹窗
uni.showToast({
title: '请关注公众号',
icon: 'none'
});
}, 100);
break;
case 'AddQw'://添加企业微信
globalStore.closeTaskPop(); // 先关闭TaskPop
setTimeout(() => {
// 这里可以显示企业微信弹窗
uni.showToast({
title: '请添加企业微信',
icon: 'none'
});
}, 100);
break;
case 'Register'://注册会员
// 这里可以处理注册逻辑
uni.showToast({
title: '请先注册会员',
icon: 'none'
});
break;
default:
uni.showToast({
title: '任务类型不支持',
icon: 'none'
});
break;
}
};
// 任务信息弹窗处理方法
const handleCloseTaskPerson = () => {
globalStore.closeTaskPerson();
};
const handleTaskPersonSubmit = (formData) => {
console.log('任务信息提交:', formData);
globalStore.closeTaskPerson();
// 可以显示成功提示
uni.showToast({
title: '信息提交成功',
icon: 'success'
});
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -20,6 +20,9 @@ export const useGlobalStore = defineStore('global', { ...@@ -20,6 +20,9 @@ export const useGlobalStore = defineStore('global', {
isShowTaskComplete: false, // 是否显示任务完成弹窗 isShowTaskComplete: false, // 是否显示任务完成弹窗
taskCompletePoints: 100, // 任务完成获得的积分 taskCompletePoints: 100, // 任务完成获得的积分
taskCompleteTitle: 'xxx', // 任务完成的任务名称 taskCompleteTitle: 'xxx', // 任务完成的任务名称
isShowTaskPop: false, // 是否显示任务弹窗
isShowTaskPerson: false, // 是否显示任务信息弹窗
taskTodo: [], // 任务数据
}; };
}, },
actions: { actions: {
...@@ -67,6 +70,36 @@ export const useGlobalStore = defineStore('global', { ...@@ -67,6 +70,36 @@ export const useGlobalStore = defineStore('global', {
this.taskCompletePoints = points; this.taskCompletePoints = points;
this.taskCompleteTitle = taskTitle; this.taskCompleteTitle = taskTitle;
this.isShowTaskComplete = true; this.isShowTaskComplete = true;
},
/**
* 显示任务弹窗
* @param {Array} taskTodo 任务数据
*/
showTaskPop(taskTodo = []) {
this.taskTodo = taskTodo;
this.isShowTaskPop = true;
},
/**
* 关闭任务弹窗
*/
closeTaskPop() {
this.isShowTaskPop = false;
},
/**
* 显示任务信息弹窗
*/
showTaskPerson() {
this.isShowTaskPerson = true;
},
/**
* 关闭任务信息弹窗
*/
closeTaskPerson() {
this.isShowTaskPerson = false;
} }
}, },
}); });
\ No newline at end of file
...@@ -14,66 +14,66 @@ export const useIntegralStore = defineStore("integral", { ...@@ -14,66 +14,66 @@ export const useIntegralStore = defineStore("integral", {
}, },
actions: { actions: {
async getSigninAndTaskInfo(isdebug = false) { async getSigninAndTaskInfo(isdebug = false) {
if(isdebug) { // if(isdebug) {
this._signinAndTaskInfo = signinAndTaskInfoMock; // this._signinAndTaskInfo = signinAndTaskInfoMock;
return signinAndTaskInfoMock; // return signinAndTaskInfoMock;
}else{ // }else{
const res = await getSigninAndTaskInfoJSON(); const res = await getSigninAndTaskInfoJSON();
this._signinAndTaskInfo = res; this._signinAndTaskInfo = res;
return res; return res;
} // }
}, },
async checkIn(activityId,isdebug = false) { async checkIn(activityId,isdebug = false) {
if(isdebug) { // if(isdebug) {
this._checkInData = checkInMock; // 存储到state中 // this._checkInData = checkInMock; // 存储到state中
return checkInMock; // return checkInMock;
}else{ // }else{
const res = await checkInJSON(activityId); const res = await checkInJSON(activityId);
this._checkInData = res; // 存储到state中 this._checkInData = res; // 存储到state中
return res; return res;
} // }
}, },
async getSeckillData(isdebug = false) { async getSeckillData(isdebug = false) {
if(isdebug) { // if(isdebug) {
// 使用模拟数据结构 // // 使用模拟数据结构
const mockSeckillData = { // const mockSeckillData = {
sessions: [ // sessions: [
{ // {
id: 1, // id: 1,
status: 'ongoing', // status: 'ongoing',
countdown: '01:58:59', // countdown: '01:58:59',
timeTags: ['正在秒杀', '18:00开始', '20:00结束'], // timeTags: ['正在秒杀', '18:00开始', '20:00结束'],
goods: [ // goods: [
{ // {
id: 'good1', // id: 'good1',
name: '商品名称商品名称商称商品名称商称商品名称商称商品名称商品...', // name: '商品名称商品名称商称商品名称商称商品名称商称商品名称商品...',
points: 100, // points: 100,
originalPoints: 500, // originalPoints: 500,
image: '' // image: ''
} // }
] // ]
} // }
] // ]
}; // };
this._seckillData = mockSeckillData; // this._seckillData = mockSeckillData;
return mockSeckillData; // return mockSeckillData;
} else { // } else {
const res = await getSeckillList(); const res = await getSeckillList();
this._seckillData = res; this._seckillData = res;
return res; return res;
} // }
}, },
async getPointsBenefitCoupon(isdebug = false) { async getPointsBenefitCoupon(isdebug = false) {
if(isdebug) { // if(isdebug) {
this._pointsBenefitCoupon = pointsBenefitCouponMock; // this._pointsBenefitCoupon = pointsBenefitCouponMock;
return pointsBenefitCouponMock; // return pointsBenefitCouponMock;
}else{ // }else{
const res = await getPointsBenefitCouponJSON(); const res = await getPointsBenefitCouponJSON();
this._pointsBenefitCoupon = res; this._pointsBenefitCoupon = res;
return res; return res;
} // }
}, },
}, },
getters: { getters: {
......
...@@ -482,10 +482,6 @@ ...@@ -482,10 +482,6 @@
<!-- 签到规则说明弹窗 --> <!-- 签到规则说明弹窗 -->
<SignRuleDes :visible="showSignRuleDes" @close="handleCloseSignRuleDes" /> <SignRuleDes :visible="showSignRuleDes" @close="handleCloseSignRuleDes" />
<!-- 任务弹窗 -->
<TaskPop :visible="showTaskPop" :taskTodo="integralStore?.signinAndTaskInfo?.data?.taskTodo"
@close="handleCloseTaskPop" @taskClick="handleTaskClick" />
<TaskPerson :visible="showTaskPerson" @close="handleCloseTaskPerson" @submit="handleTaskPersonSubmit" />
<!-- 公众号弹窗 --> <!-- 公众号弹窗 -->
<GongzhonghaoPop :visible="showGongzhonghaoPop" :title="gongzhonghaoTitle" <GongzhonghaoPop :visible="showGongzhonghaoPop" :title="gongzhonghaoTitle"
...@@ -526,8 +522,6 @@ import YearGift from '../components/pointRightsCom/yearGift.vue'; ...@@ -526,8 +522,6 @@ import YearGift from '../components/pointRightsCom/yearGift.vue';
import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
import SignedTips from '../components/qiandao/SignedTips.vue'; import SignedTips from '../components/qiandao/SignedTips.vue';
import SignRuleDes from '../components/qiandao/SignRuleDes.vue'; import SignRuleDes from '../components/qiandao/SignRuleDes.vue';
import TaskPop from '../components/renwu/TaskPop.vue';
import TaskPerson from '../components/renwu/TaskPerson.vue';
import GongzhonghaoPop from '../components/renwu/GongzhonghaoPop.vue'; import GongzhonghaoPop from '../components/renwu/GongzhonghaoPop.vue';
import bannerDataIntegral from '../mock/bannerDataIntegral.json'; import bannerDataIntegral from '../mock/bannerDataIntegral.json';
import jifenGoodsData from '../mock/jifenGoodsData.json'; import jifenGoodsData from '../mock/jifenGoodsData.json';
...@@ -1530,11 +1524,8 @@ const earnedPoints = ref(0); ...@@ -1530,11 +1524,8 @@ const earnedPoints = ref(0);
// 签到规则说明弹窗相关 // 签到规则说明弹窗相关
const showSignRuleDes = ref(false); const showSignRuleDes = ref(false);
// 任务弹窗相关 // 公众号弹窗相关
const showTaskPop = ref(false);
const showTaskPerson = ref(false);
const showGongzhonghaoPop = ref(false); const showGongzhonghaoPop = ref(false);
const taskId = ref(0);
// 公众号弹窗参数 // 公众号弹窗参数
const gongzhonghaoTitle = ref('公众号'); const gongzhonghaoTitle = ref('公众号');
...@@ -1795,14 +1786,6 @@ onShow(async () => { ...@@ -1795,14 +1786,6 @@ onShow(async () => {
initNetData() initNetData()
} }
//完成了浏览任务
if(taskId.value > 0) {
// const res = await taskCompleteJSON(taskId.value);
// console.log('taskCompleteJSON res:', res);
globalStore.isShowTaskComplete = true;
globalStore.taskCompletePoints = 10;//res?.data?.credits;
globalStore.taskCompleteTitle = '浏览任务'//res?.data?.taskName;
}
}) })
...@@ -2754,17 +2737,7 @@ const handleTaskButtonClick = () => { ...@@ -2754,17 +2737,7 @@ const handleTaskButtonClick = () => {
console.log('任务按钮点击'); console.log('任务按钮点击');
console.log('taskTodo数据:', integralStore?.signinAndTaskInfo?.data?.taskTodo); console.log('taskTodo数据:', integralStore?.signinAndTaskInfo?.data?.taskTodo);
showTaskPop.value = true; globalStore.showTaskPop(integralStore?.signinAndTaskInfo?.data?.taskTodo);
}
// 关闭任务弹窗
const handleCloseTaskPop = () => {
showTaskPop.value = false;
}
// 关闭任务信息弹窗
const handleCloseTaskPerson = () => {
showTaskPerson.value = false;
} }
// 关闭公众号弹窗 // 关闭公众号弹窗
...@@ -2874,18 +2847,6 @@ const downloadQrCode = (imgurl) => {//现在二维码图片 ...@@ -2874,18 +2847,6 @@ const downloadQrCode = (imgurl) => {//现在二维码图片
}); });
} }
// 处理任务信息提交
const handleTaskPersonSubmit = (formData) => {
console.log('任务信息提交:', formData);
// 这里可以处理任务信息提交逻辑
showTaskPerson.value = false;
// 可以显示成功提示
uni.showToast({
title: '信息提交成功',
icon: 'success'
});
}
// 处理邀请按钮点击 // 处理邀请按钮点击
const handleInviteClick = () => { const handleInviteClick = () => {
console.log('去邀请按钮点击'); console.log('去邀请按钮点击');
...@@ -2960,88 +2921,6 @@ const handleRecordClick = () => { ...@@ -2960,88 +2921,6 @@ const handleRecordClick = () => {
}); });
} }
// 任务点击事件
const handleTaskClick = async (data) => {
console.log('任务点击:', data);
// 如果是完善信息任务,显示TaskPerson弹窗
if (!data.task) {
uni.showToast({
title: '任务不存在',
icon: 'none'
});
return;
}
switch (data.task.taskTodoExtra.type) {
case 'Perfect':
showTaskPop.value = false; // 先关闭TaskPop
setTimeout(() => {
showTaskPerson.value = true; // 延迟显示TaskPerson
}, 100);
break;
case 'BROWSE_PAGE'://浏览商城
showTaskPop.value = false;
taskId.value = data.task.id;
jump({
type: JumpType.H5,
url: 'https://www.baidu.com'
})
break;
case 'EXCHANGE_GOODS'://完成首单优选消费
jump({
type: JumpType.H5,
url: 'https://www.baidu.com'
})
break;
case 'FollowWx'://关注公众号
showTaskPop.value = false; // 先关闭TaskPop
setTimeout(() => {
// 设置公众号弹窗参数
gongzhonghaoTitle.value = '公众号';
gongzhonghaoDescription.value = '长按关注星妈会公众号,了解更多专业育儿资讯';
gongzhonghaoQrCodeUrl.value = 'https://course.feihe.com/momclub-picture/homepage/qrcode_gzh.png';
showGongzhonghaoPop.value = true; // 延迟显示公众号弹窗
}, 100);
break;
case 'AddQw'://添加企业微信
showTaskPop.value = false; // 先关闭TaskPop
gongzhonghaoTitle.value = '企业微信';
gongzhonghaoDescription.value = '长按添加星妈管家,享受专家问诊与社群福利活动';
gongzhonghaoQrCodeUrl.value = 'https://course.feihe.com/momclub-picture/homepage/qrcode_qw.png';
showGongzhonghaoPop.value = true; // 延迟显示企业微信弹窗
break;
case 'Register'://注册会员
if (!islogin.value) {
needReinit.value = true
jump({
type: JumpType.INNER,
url: "/pages/activity/register",
})
}
break;
default:
uni.showToast({
title: '任务类型不支持',
icon: 'none'
});
break;
}
// 其他任务的处理逻辑
// 这里可以添加具体的任务跳转逻辑
// uni.showToast({
// title: `开始${data.task.title}`,
// icon: 'none',
// duration: 2000
// });
}
// 手动显示注册层(用于测试) // 手动显示注册层(用于测试)
// const showRegisterDialog = () => { // const showRegisterDialog = () => {
// console.log('手动显示注册层'); // console.log('手动显示注册层');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment