|
@@ -85,12 +85,32 @@
|
|
|
|
|
|
|
|
<!-- 今日行动任务 -->
|
|
<!-- 今日行动任务 -->
|
|
|
<DimensionTasks
|
|
<DimensionTasks
|
|
|
- v-if="dimensionTasks.length > 0"
|
|
|
|
|
dimensionCode="action"
|
|
dimensionCode="action"
|
|
|
:tasks="dimensionTasks"
|
|
:tasks="dimensionTasks"
|
|
|
@taskClick="onTaskClick"
|
|
@taskClick="onTaskClick"
|
|
|
@moreTasks="goTasks" />
|
|
@moreTasks="goTasks" />
|
|
|
|
|
|
|
|
|
|
+ <DimensionActivities
|
|
|
|
|
+ dimensionCode="action"
|
|
|
|
|
+ :activities="dimensionActivities"
|
|
|
|
|
+ :isLoggedIn="true"
|
|
|
|
|
+ @activityClick="goActivityDetail"
|
|
|
|
|
+ @moreActivities="goMoreActivities" />
|
|
|
|
|
+
|
|
|
|
|
+ <DimensionProducts
|
|
|
|
|
+ dimensionCode="action"
|
|
|
|
|
+ :products="dimensionProducts"
|
|
|
|
|
+ :isLoggedIn="true"
|
|
|
|
|
+ @productClick="goProductDetail"
|
|
|
|
|
+ @moreProducts="goMoreProducts" />
|
|
|
|
|
+
|
|
|
|
|
+ <DimensionArticles
|
|
|
|
|
+ dimensionCode="action"
|
|
|
|
|
+ :articles="actionArticles"
|
|
|
|
|
+ :isLoggedIn="true"
|
|
|
|
|
+ @articleClick="goArticleDetail"
|
|
|
|
|
+ @moreArticles="goMoreArticles" />
|
|
|
|
|
+
|
|
|
<!-- 功能入口 -->
|
|
<!-- 功能入口 -->
|
|
|
<view class="func-section">
|
|
<view class="func-section">
|
|
|
<view class="func-grid">
|
|
<view class="func-grid">
|
|
@@ -278,7 +298,11 @@ import TabTransition from '../../components/tab-transition.vue'
|
|
|
import FamilyMemberStrip from '../../components/FamilyMemberStrip.vue'
|
|
import FamilyMemberStrip from '../../components/FamilyMemberStrip.vue'
|
|
|
import FamilyEnergyBar from '../../components/FamilyEnergyBar.vue'
|
|
import FamilyEnergyBar from '../../components/FamilyEnergyBar.vue'
|
|
|
import DimensionTasks from '../../components/DimensionTasks.vue'
|
|
import DimensionTasks from '../../components/DimensionTasks.vue'
|
|
|
-import { acceptParentInvite, productList, getActivityList, getFeaturedArticles, getFamilyEnergySandbox, getVisibleFamilyMembers, getTodayTasksByCategory } from '../../utils/api.js'
|
|
|
|
|
|
|
+import DimensionActivities from '../../components/DimensionActivities.vue'
|
|
|
|
|
+import DimensionProducts from '../../components/DimensionProducts.vue'
|
|
|
|
|
+import DimensionArticles from '../../components/DimensionArticles.vue'
|
|
|
|
|
+import LoginGuideCard from '../../components/LoginGuideCard.vue'
|
|
|
|
|
+import { acceptParentInvite, productList, getActivityList, getFeaturedArticles, getFamilyEnergySandbox, getVisibleFamilyMembers, getTodayTasksByCategory, getChildren, getEnergyOverview, getProductsByDomain, getHealthAlerts } from '../../utils/api.js'
|
|
|
|
|
|
|
|
var DIMENSIONS = [
|
|
var DIMENSIONS = [
|
|
|
{ code: 'body', name: '身', icon: '🌏', color: '#8D6E63', bgColor: 'rgba(141,110,99,0.15)', title: '主动健康', desc: '用最适合的方法,从根源调理家人体质,畅享高质量长寿生活' },
|
|
{ code: 'body', name: '身', icon: '🌏', color: '#8D6E63', bgColor: 'rgba(141,110,99,0.15)', title: '主动健康', desc: '用最适合的方法,从根源调理家人体质,畅享高质量长寿生活' },
|
|
@@ -295,7 +319,11 @@ export default {
|
|
|
TabTransition,
|
|
TabTransition,
|
|
|
FamilyMemberStrip,
|
|
FamilyMemberStrip,
|
|
|
FamilyEnergyBar,
|
|
FamilyEnergyBar,
|
|
|
- DimensionTasks
|
|
|
|
|
|
|
+ DimensionTasks,
|
|
|
|
|
+ DimensionActivities,
|
|
|
|
|
+ DimensionProducts,
|
|
|
|
|
+ DimensionArticles,
|
|
|
|
|
+ LoginGuideCard
|
|
|
},
|
|
},
|
|
|
data() {
|
|
data() {
|
|
|
// 从 storage 预取登录态/角色,确保首次渲染即正确(WeChat 渲染层/逻辑层分离架构下 onLoad 执行前已渲染)
|
|
// 从 storage 预取登录态/角色,确保首次渲染即正确(WeChat 渲染层/逻辑层分离架构下 onLoad 执行前已渲染)
|
|
@@ -344,6 +372,12 @@ export default {
|
|
|
sandboxData: null,
|
|
sandboxData: null,
|
|
|
dualDimension: null,
|
|
dualDimension: null,
|
|
|
dimensionTasks: [],
|
|
dimensionTasks: [],
|
|
|
|
|
+ dimensionActivities: [],
|
|
|
|
|
+ dimensionProducts: [],
|
|
|
|
|
+ articles: [],
|
|
|
|
|
+ children: [],
|
|
|
|
|
+ currentChildId: null,
|
|
|
|
|
+ healthAlerts: [],
|
|
|
funcList: [
|
|
funcList: [
|
|
|
{ icon: '\u{1F3CB}', label: '任务', page: '/pages/tasks/tasks' },
|
|
{ icon: '\u{1F3CB}', label: '任务', page: '/pages/tasks/tasks' },
|
|
|
{ icon: '\u{1F3C0}', label: '活动', page: '/pages/discover/index?type=activity' },
|
|
{ icon: '\u{1F3C0}', label: '活动', page: '/pages/discover/index?type=activity' },
|
|
@@ -353,6 +387,20 @@ export default {
|
|
|
loggedInInitDone: false
|
|
loggedInInitDone: false
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ computed: {
|
|
|
|
|
+ actionArticles: function() {
|
|
|
|
|
+ if (!this.articles || this.articles.length === 0) return []
|
|
|
|
|
+ var result = []
|
|
|
|
|
+ for (var i = 0; i < this.articles.length; i++) {
|
|
|
|
|
+ var a = this.articles[i]
|
|
|
|
|
+ if (a.relatedDimensions && a.relatedDimensions.indexOf('action') !== -1) {
|
|
|
|
|
+ result.push(a)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (result.length === 0) return this.articles.slice(0, 5)
|
|
|
|
|
+ return result.slice(0, 5)
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
onLoad(options) {
|
|
onLoad(options) {
|
|
|
this._doInit(options)
|
|
this._doInit(options)
|
|
|
},
|
|
},
|
|
@@ -413,26 +461,51 @@ export default {
|
|
|
|
|
|
|
|
// ===== 登录态数据加载 =====
|
|
// ===== 登录态数据加载 =====
|
|
|
loadLoggedInData: function() {
|
|
loadLoggedInData: function() {
|
|
|
- var self = this
|
|
|
|
|
this.loadFamilyMembers()
|
|
this.loadFamilyMembers()
|
|
|
- this.loadEnergySandbox()
|
|
|
|
|
- this.loadDimensionTasks()
|
|
|
|
|
|
|
+ this.loadChildren()
|
|
|
},
|
|
},
|
|
|
- loadFamilyMembers: function() {
|
|
|
|
|
|
|
+ loadChildren: function() {
|
|
|
var self = this
|
|
var self = this
|
|
|
- getVisibleFamilyMembers().then(function(res) {
|
|
|
|
|
|
|
+ getChildren().then(function(res) {
|
|
|
if (res.code === 200 && res.data) {
|
|
if (res.code === 200 && res.data) {
|
|
|
- self.familyMembersVisible = Array.isArray(res.data) ? res.data : (res.data.list || [])
|
|
|
|
|
- if (self.familyMembersVisible.length > 0) {
|
|
|
|
|
- self.selectedMemberId = self.familyMembersVisible[0].memberId || self.familyMembersVisible[0].id
|
|
|
|
|
|
|
+ self.children = res.data
|
|
|
|
|
+ var savedChildId = uni.getStorageSync('currentChildId')
|
|
|
|
|
+ if (savedChildId) {
|
|
|
|
|
+ self.currentChildId = savedChildId
|
|
|
|
|
+ }
|
|
|
|
|
+ self.loadDimensionData()
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() {})
|
|
|
|
|
+ },
|
|
|
|
|
+ loadDimensionData: function() {
|
|
|
|
|
+ this.loadEnergyData()
|
|
|
|
|
+ this.loadSandboxData()
|
|
|
|
|
+ this.loadDimensionTasks()
|
|
|
|
|
+ this.loadActionActivities()
|
|
|
|
|
+ this.loadActionProducts()
|
|
|
|
|
+ this.loadActionArticles()
|
|
|
|
|
+ },
|
|
|
|
|
+ loadEnergyData: function() {
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ if (!this.currentChildId) return
|
|
|
|
|
+ getEnergyOverview(this.currentChildId).then(function(res) {
|
|
|
|
|
+ if (res && res.data) {
|
|
|
|
|
+ var dims = res.data.dimensions
|
|
|
|
|
+ if (dims && dims.length > 0) {
|
|
|
|
|
+ for (var i = 0; i < dims.length; i++) {
|
|
|
|
|
+ if (dims[i].code === 'action') {
|
|
|
|
|
+ self.dualDimension = dims[i]
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}).catch(function() {})
|
|
}).catch(function() {})
|
|
|
},
|
|
},
|
|
|
- loadEnergySandbox: function() {
|
|
|
|
|
|
|
+ loadSandboxData: function() {
|
|
|
var self = this
|
|
var self = this
|
|
|
getFamilyEnergySandbox().then(function(res) {
|
|
getFamilyEnergySandbox().then(function(res) {
|
|
|
- if (res.code === 200 && res.data) {
|
|
|
|
|
|
|
+ if (res && res.data) {
|
|
|
self.sandboxData = res.data
|
|
self.sandboxData = res.data
|
|
|
self._splashReady = true
|
|
self._splashReady = true
|
|
|
self._tryHideSplash()
|
|
self._tryHideSplash()
|
|
@@ -441,23 +514,115 @@ export default {
|
|
|
},
|
|
},
|
|
|
loadDimensionTasks: function() {
|
|
loadDimensionTasks: function() {
|
|
|
var self = this
|
|
var self = this
|
|
|
- getTodayTasksByCategory({ category: 'action' }).then(function(res) {
|
|
|
|
|
|
|
+ if (!this.currentChildId) return
|
|
|
|
|
+ getTodayTasksByCategory(this.currentChildId, 'action').then(function(res) {
|
|
|
|
|
+ if (res && res.data) {
|
|
|
|
|
+ self.dimensionTasks = Array.isArray(res.data) ? res.data.slice(0, 5) : []
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() { self.dimensionTasks = [] })
|
|
|
|
|
+ },
|
|
|
|
|
+ loadActionActivities: function() {
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ getActivityList({ dimensionCode: 'action', page: 1, size: 3 }).then(function(res) {
|
|
|
|
|
+ if (res && res.data) {
|
|
|
|
|
+ var list = Array.isArray(res.data) ? res.data : (res.data.records || [])
|
|
|
|
|
+ self.dimensionActivities = list.slice(0, 3)
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() { self.dimensionActivities = [] })
|
|
|
|
|
+ },
|
|
|
|
|
+ loadActionProducts: function() {
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ getProductsByDomain('action', 1, 4).then(function(res) {
|
|
|
|
|
+ if (res && res.data) {
|
|
|
|
|
+ var list = Array.isArray(res.data) ? res.data : (res.data.records || [])
|
|
|
|
|
+ self.dimensionProducts = list.slice(0, 4)
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() { self.dimensionProducts = [] })
|
|
|
|
|
+ },
|
|
|
|
|
+ loadActionArticles: function() {
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ getFeaturedArticles({ size: 5, dimensionCode: 'action' }).then(function(res) {
|
|
|
if (res.code === 200 && res.data) {
|
|
if (res.code === 200 && res.data) {
|
|
|
- self.dimensionTasks = Array.isArray(res.data) ? res.data : (res.data.list || [])
|
|
|
|
|
|
|
+ var gradientColors = [
|
|
|
|
|
+ 'linear-gradient(135deg, #10B981, #34D399)',
|
|
|
|
|
+ 'linear-gradient(135deg, #5B9BD5, #8FC5E8)',
|
|
|
|
|
+ 'linear-gradient(135deg, #8B5CF6, #C084FC)',
|
|
|
|
|
+ 'linear-gradient(135deg, #F97316, #FB923C)',
|
|
|
|
|
+ 'linear-gradient(135deg, #6366F1, #818CF8)'
|
|
|
|
|
+ ]
|
|
|
|
|
+ var list = Array.isArray(res.data) ? res.data : (res.data.records || [])
|
|
|
|
|
+ self.articles = list.map(function(item, index) {
|
|
|
|
|
+ return {
|
|
|
|
|
+ id: item.id,
|
|
|
|
|
+ category: item.categoryName || '行动社交',
|
|
|
|
|
+ categoryColor: gradientColors[index % gradientColors.length],
|
|
|
|
|
+ title: item.title || '',
|
|
|
|
|
+ summary: item.summary || '',
|
|
|
|
|
+ views: item.viewCount ? String(item.viewCount) : '0',
|
|
|
|
|
+ date: item.publishedAt ? item.publishedAt.slice(0, 10) : '',
|
|
|
|
|
+ relatedDimensions: self.parseRelatedDimensions(item.relatedDimensions)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
}).catch(function() {})
|
|
}).catch(function() {})
|
|
|
},
|
|
},
|
|
|
|
|
+ loadFamilyMembers: function() {
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ getVisibleFamilyMembers().then(function(res) {
|
|
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
|
|
+ self.familyMembersVisible = Array.isArray(res.data) ? res.data : (res.data.list || [])
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() {})
|
|
|
|
|
+ },
|
|
|
|
|
+ parseRelatedDimensions: function(val) {
|
|
|
|
|
+ if (!val) return []
|
|
|
|
|
+ if (Array.isArray(val)) return val
|
|
|
|
|
+ if (typeof val === 'string') {
|
|
|
|
|
+ try {
|
|
|
|
|
+ var parsed = JSON.parse(val)
|
|
|
|
|
+ return Array.isArray(parsed) ? parsed : []
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ return val.split(',').map(function(s) { return s.trim() }).filter(function(s) { return s })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return []
|
|
|
|
|
+ },
|
|
|
onFamilyMemberSelect: function(member) {
|
|
onFamilyMemberSelect: function(member) {
|
|
|
- this.selectedMemberId = member.memberId || member.id
|
|
|
|
|
|
|
+ this.selectedMemberId = member.id
|
|
|
},
|
|
},
|
|
|
onTaskClick: function(task) {
|
|
onTaskClick: function(task) {
|
|
|
- uni.navigateTo({ url: '/pages/tasks/task-detail?taskId=' + (task.id || task.taskId) })
|
|
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/tasks/tasks' })
|
|
|
},
|
|
},
|
|
|
goTasks: function() {
|
|
goTasks: function() {
|
|
|
- uni.navigateTo({ url: '/pages/tasks/tasks' })
|
|
|
|
|
|
|
+ uni.switchTab({ url: '/pages/tasks/tasks' })
|
|
|
|
|
+ },
|
|
|
|
|
+ goActivityDetail: function(act) {
|
|
|
|
|
+ if (!act || !act.id) return
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/discover-detail/activity-detail/activity-detail?id=' + act.id })
|
|
|
|
|
+ },
|
|
|
|
|
+ goMoreActivities: function() {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/activity/index' })
|
|
|
|
|
+ },
|
|
|
|
|
+ goProductDetail: function(prod) {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/discover-detail/product-detail/product-detail?id=' + prod.id })
|
|
|
|
|
+ },
|
|
|
|
|
+ goMoreProducts: function() {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/shop/index' })
|
|
|
|
|
+ },
|
|
|
|
|
+ goArticleDetail: function(article) {
|
|
|
|
|
+ var id = article.id || article
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/mind-detail/article-detail?id=' + id })
|
|
|
|
|
+ },
|
|
|
|
|
+ goMoreArticles: function() {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/article-center/index?dimension=action' })
|
|
|
},
|
|
},
|
|
|
onFuncClick: function(item) {
|
|
onFuncClick: function(item) {
|
|
|
- uni.navigateTo({ url: item.page })
|
|
|
|
|
|
|
+ var nativeTabs = ['/pages/tasks/tasks', '/pages/index-home/index', '/pages/body/index', '/pages/mind/index', '/pages/wisdom/index', '/pages/wealth/index']
|
|
|
|
|
+ if (nativeTabs.indexOf(item.page) !== -1) {
|
|
|
|
|
+ uni.switchTab({ url: item.page })
|
|
|
|
|
+ } else {
|
|
|
|
|
+ uni.navigateTo({ url: item.page })
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
// 首页 TabTransition 动态关闭:检测关键内容是否就绪
|
|
// 首页 TabTransition 动态关闭:检测关键内容是否就绪
|