|
|
@@ -159,7 +159,7 @@
|
|
|
<text class="task-quick-meta" v-if="!task._isOverdue">+{{ task.points }}CF</text>
|
|
|
<text class="task-quick-meta task-quick-meta--overdue" v-else>已超期</text>
|
|
|
</view>
|
|
|
- <button v-if="!task._isOverdue" class="btn-quick-complete" @click="quickCompleteTask(task)">完成</button>
|
|
|
+ <button v-if="!task._isOverdue" class="btn-quick-complete" @click="quickCompleteTask(task)">{{ task._isLinked ? '去完成' : '完成' }}</button>
|
|
|
<view v-else class="status-badge-overdue">⏰ 已超期</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -1122,6 +1122,10 @@ title: '添加家庭成员',
|
|
|
t._isOverdue = true
|
|
|
}
|
|
|
}
|
|
|
+ // 打卡/联动类任务在首页显示「去完成」,点击跳转对应功能页而非直接完成
|
|
|
+ if (t.actionType && ['minigame', 'focus', 'survey', 'article', 'activity', 'cart', 'order', 'diet', 'sleep', 'exercise'].indexOf(t.actionType) >= 0) {
|
|
|
+ t._isLinked = true
|
|
|
+ }
|
|
|
return true
|
|
|
})
|
|
|
}
|
|
|
@@ -1500,6 +1504,15 @@ title: '添加家庭成员',
|
|
|
},
|
|
|
quickCompleteTask: function(task) {
|
|
|
var self = this
|
|
|
+ // 打卡/联动类任务:跳转对应功能页(饮食/运动/睡眠/阅读/购买/问卷/活动等),
|
|
|
+ // 提交后由后端回写完成,不在首页直接完成
|
|
|
+ if (task && task.actionType) {
|
|
|
+ var linked = ['minigame', 'focus', 'survey', 'article', 'activity', 'cart', 'order', 'diet', 'sleep', 'exercise']
|
|
|
+ if (linked.indexOf(task.actionType) >= 0) {
|
|
|
+ self.navigateByLinkedAction(task)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
// 首页「我的任务」只展示本人任务:memberId 取任务归属成员,后端亦会按任务
|
|
|
// 实际归属校验(不属于本人时返回空数据),不会替其他家庭成员完成任务
|
|
|
var memberId = (task && task.familyMemberId) || null
|
|
|
@@ -1520,6 +1533,38 @@ title: '添加家庭成员',
|
|
|
uni.showToast({ title: '完成失败,请重试', icon: 'none' })
|
|
|
})
|
|
|
},
|
|
|
+ /** 打卡/联动类任务:跳转对应功能页(与 pages/tasks/tasks.vue 的 navigateByAction 同款) */
|
|
|
+ navigateByLinkedAction: function(task) {
|
|
|
+ var cfg = {}
|
|
|
+ try { cfg = typeof task.actionConfig === 'string' ? JSON.parse(task.actionConfig || '{}') : (task.actionConfig || {}) } catch (e) {}
|
|
|
+ var at = task.actionType
|
|
|
+ var taskId = task.id
|
|
|
+ if (at === 'minigame') {
|
|
|
+ uni.navigateTo({ url: '/pages/games/index?taskId=' + taskId })
|
|
|
+ } else if (at === 'focus') {
|
|
|
+ uni.navigateTo({ url: '/pages/games/focus-timer?taskId=' + taskId })
|
|
|
+ } else if (at === 'survey') {
|
|
|
+ uni.navigateTo({ url: '/pages/survey/index?taskId=' + taskId })
|
|
|
+ } else if (at === 'article') {
|
|
|
+ var articleId = cfg.articleId || task.sourceId
|
|
|
+ uni.navigateTo({ url: '/pages/article-center/article-detail?taskId=' + taskId + (articleId ? '&id=' + articleId : '') })
|
|
|
+ } else if (at === 'activity') {
|
|
|
+ uni.navigateTo({ url: '/pages/activity/list?taskId=' + taskId })
|
|
|
+ } else if (at === 'cart' || at === 'order') {
|
|
|
+ var isExternal = cfg.isExternal === 1 || cfg.isExternal === '1'
|
|
|
+ if (isExternal) {
|
|
|
+ uni.navigateTo({ url: '/pages/tasks/task-upload-purchase?taskId=' + taskId })
|
|
|
+ } else {
|
|
|
+ uni.navigateTo({ url: '/pages/shop/cart?taskId=' + taskId })
|
|
|
+ }
|
|
|
+ } else if (at === 'diet') {
|
|
|
+ uni.navigateTo({ url: '/pages/growth/diet-checkin?taskId=' + taskId })
|
|
|
+ } else if (at === 'sleep') {
|
|
|
+ uni.navigateTo({ url: '/pages/growth/sleep-checkin?taskId=' + taskId })
|
|
|
+ } else if (at === 'exercise') {
|
|
|
+ uni.navigateTo({ url: '/pages/growth/exercise-checkin?taskId=' + taskId })
|
|
|
+ }
|
|
|
+ },
|
|
|
onChallengeCheckin: function(payload) {
|
|
|
var self = this
|
|
|
updateChallengeProgress({ challengeId: payload.challengeId, delta: 1 }).then(function(res) {
|