Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
飞
飞鹤小程序
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
FH
飞鹤小程序
Commits
65dec009
Commit
65dec009
authored
Oct 24, 2025
by
王炽
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
任务页面移动到index
parent
eb3b67d6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
207 additions
and
165 deletions
+207
-165
TaskComplete.less
components/qiandao/TaskComplete.less
+1
-1
index.vue
pages/index/index.vue
+131
-1
global.js
stores/global.js
+33
-0
integral.js
stores/integral.js
+40
-40
Integral.vue
views/Integral.vue
+2
-123
No files found.
components/qiandao/TaskComplete.less
View file @
65dec009
...
...
@@ -20,7 +20,7 @@
.task_complete_container {
position: relative;
width:
60
0rpx;
width:
75
0rpx;
height: 500rpx;
// background: #ffffff;
border-radius: 30rpx;
...
...
pages/index/index.vue
View file @
65dec009
...
...
@@ -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
>
...
...
stores/global.js
View file @
65dec009
...
...
@@ -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
stores/integral.js
View file @
65dec009
...
...
@@ -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
:
{
...
...
views/Integral.vue
View file @
65dec009
...
...
@@ -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('手动显示注册层');
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment