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

任务页面移动到index

parent eb3b67d6
......@@ -20,7 +20,7 @@
.task_complete_container {
position: relative;
width: 600rpx;
width: 750rpx;
height: 500rpx;
// background: #ffffff;
border-radius: 30rpx;
......
......@@ -26,6 +26,21 @@
@close="handleCloseTaskComplete"
@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"
:style="{
......@@ -59,7 +74,7 @@
<script setup>
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 Home from "@/views/Home.vue";
import Brand from "@/views/Brand.vue";
......@@ -68,9 +83,13 @@ import My from "@/views/My.vue";
import WxFriendCircleSimplePage from "@/components/WxFriendCircleSimplePage.vue";
import InvitePrizePanel from "@/components/integralArea/InvitePrizePanel.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 { useUserStore } from "@/stores/user.js";
import { jump, JumpType } from "../../utils";
import { taskCompleteJSON } from "../../api/integral";
import { useIntegralStore } from "@/stores/integral";
const globalStore = useGlobalStore();
const userStore = useUserStore();
......@@ -80,6 +99,10 @@ const homeRef = ref(null);
const scrollTop = ref(0);
const isBackApp = ref(false);
const showGoldCoinAnimation = ref(false);
const taskId = ref(0);
const goldCoinConfig = ref({
title: '恭喜你回答正确',
description: '获得20积分'
......@@ -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({
showGoldCoinEffect
......@@ -247,6 +286,97 @@ const handleAcceptTaskComplete = () => {
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>
<style lang="scss" scoped>
......
......@@ -20,6 +20,9 @@ export const useGlobalStore = defineStore('global', {
isShowTaskComplete: false, // 是否显示任务完成弹窗
taskCompletePoints: 100, // 任务完成获得的积分
taskCompleteTitle: 'xxx', // 任务完成的任务名称
isShowTaskPop: false, // 是否显示任务弹窗
isShowTaskPerson: false, // 是否显示任务信息弹窗
taskTodo: [], // 任务数据
};
},
actions: {
......@@ -67,6 +70,36 @@ export const useGlobalStore = defineStore('global', {
this.taskCompletePoints = points;
this.taskCompleteTitle = taskTitle;
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", {
},
actions: {
async getSigninAndTaskInfo(isdebug = false) {
if(isdebug) {
this._signinAndTaskInfo = signinAndTaskInfoMock;
return signinAndTaskInfoMock;
}else{
// if(isdebug) {
// this._signinAndTaskInfo = signinAndTaskInfoMock;
// return signinAndTaskInfoMock;
// }else{
const res = await getSigninAndTaskInfoJSON();
this._signinAndTaskInfo = res;
return res;
}
// }
},
async checkIn(activityId,isdebug = false) {
if(isdebug) {
this._checkInData = checkInMock; // 存储到state中
return checkInMock;
}else{
// if(isdebug) {
// this._checkInData = checkInMock; // 存储到state中
// return checkInMock;
// }else{
const res = await checkInJSON(activityId);
this._checkInData = res; // 存储到state中
return res;
}
// }
},
async getSeckillData(isdebug = false) {
if(isdebug) {
// 使用模拟数据结构
const mockSeckillData = {
sessions: [
{
id: 1,
status: 'ongoing',
countdown: '01:58:59',
timeTags: ['正在秒杀', '18:00开始', '20:00结束'],
goods: [
{
id: 'good1',
name: '商品名称商品名称商称商品名称商称商品名称商称商品名称商品...',
points: 100,
originalPoints: 500,
image: ''
}
]
}
]
};
this._seckillData = mockSeckillData;
return mockSeckillData;
} else {
// if(isdebug) {
// // 使用模拟数据结构
// const mockSeckillData = {
// sessions: [
// {
// id: 1,
// status: 'ongoing',
// countdown: '01:58:59',
// timeTags: ['正在秒杀', '18:00开始', '20:00结束'],
// goods: [
// {
// id: 'good1',
// name: '商品名称商品名称商称商品名称商称商品名称商称商品名称商品...',
// points: 100,
// originalPoints: 500,
// image: ''
// }
// ]
// }
// ]
// };
// this._seckillData = mockSeckillData;
// return mockSeckillData;
// } else {
const res = await getSeckillList();
this._seckillData = res;
return res;
}
// }
},
async getPointsBenefitCoupon(isdebug = false) {
if(isdebug) {
this._pointsBenefitCoupon = pointsBenefitCouponMock;
return pointsBenefitCouponMock;
}else{
// if(isdebug) {
// this._pointsBenefitCoupon = pointsBenefitCouponMock;
// return pointsBenefitCouponMock;
// }else{
const res = await getPointsBenefitCouponJSON();
this._pointsBenefitCoupon = res;
return res;
}
// }
},
},
getters: {
......
......@@ -482,10 +482,6 @@
<!-- 签到规则说明弹窗 -->
<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"
......@@ -526,8 +522,6 @@ import YearGift from '../components/pointRightsCom/yearGift.vue';
import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
import SignedTips from '../components/qiandao/SignedTips.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 bannerDataIntegral from '../mock/bannerDataIntegral.json';
import jifenGoodsData from '../mock/jifenGoodsData.json';
......@@ -1530,11 +1524,8 @@ const earnedPoints = ref(0);
// 签到规则说明弹窗相关
const showSignRuleDes = ref(false);
// 任务弹窗相关
const showTaskPop = ref(false);
const showTaskPerson = ref(false);
// 公众号弹窗相关
const showGongzhonghaoPop = ref(false);
const taskId = ref(0);
// 公众号弹窗参数
const gongzhonghaoTitle = ref('公众号');
......@@ -1795,14 +1786,6 @@ onShow(async () => {
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 = () => {
console.log('任务按钮点击');
console.log('taskTodo数据:', integralStore?.signinAndTaskInfo?.data?.taskTodo);
showTaskPop.value = true;
}
// 关闭任务弹窗
const handleCloseTaskPop = () => {
showTaskPop.value = false;
}
// 关闭任务信息弹窗
const handleCloseTaskPerson = () => {
showTaskPerson.value = false;
globalStore.showTaskPop(integralStore?.signinAndTaskInfo?.data?.taskTodo);
}
// 关闭公众号弹窗
......@@ -2874,18 +2847,6 @@ const downloadQrCode = (imgurl) => {//现在二维码图片
});
}
// 处理任务信息提交
const handleTaskPersonSubmit = (formData) => {
console.log('任务信息提交:', formData);
// 这里可以处理任务信息提交逻辑
showTaskPerson.value = false;
// 可以显示成功提示
uni.showToast({
title: '信息提交成功',
icon: 'success'
});
}
// 处理邀请按钮点击
const handleInviteClick = () => {
console.log('去邀请按钮点击');
......@@ -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 = () => {
// 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