|
@@ -34,11 +34,15 @@
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
<!-- 家庭成员选择条 -->
|
|
<!-- 家庭成员选择条 -->
|
|
|
- <FamilyMemberStrip
|
|
|
|
|
|
|
+ <DimensionMemberTabs
|
|
|
v-if="currentView === 'self' && isLoggedIn"
|
|
v-if="currentView === 'self' && isLoggedIn"
|
|
|
:members="familyMembersVisible"
|
|
:members="familyMembersVisible"
|
|
|
:selectedMemberId="selectedMemberId"
|
|
:selectedMemberId="selectedMemberId"
|
|
|
|
|
+ dimension-code="wisdom"
|
|
|
|
|
+ :score-map="memberScoreMap"
|
|
|
@select="onFamilyMemberSelect"
|
|
@select="onFamilyMemberSelect"
|
|
|
|
|
+ @longpress="onMemberLongPress"
|
|
|
|
|
+ @manage="onMemberManage"
|
|
|
@removed="loadFamilyMembersVisible" />
|
|
@removed="loadFamilyMembersVisible" />
|
|
|
|
|
|
|
|
<!-- 游客引导语 -->
|
|
<!-- 游客引导语 -->
|
|
@@ -240,17 +244,18 @@ import TabTransition from '../../components/tab-transition.vue'
|
|
|
import RadarChart from '../../components/RadarChart.vue'
|
|
import RadarChart from '../../components/RadarChart.vue'
|
|
|
import FamilyEnergyBar from '../../components/FamilyEnergyBar.vue'
|
|
import FamilyEnergyBar from '../../components/FamilyEnergyBar.vue'
|
|
|
import FloatingAvatar from '../../components/AIFloatingAvatar.vue'
|
|
import FloatingAvatar from '../../components/AIFloatingAvatar.vue'
|
|
|
-import FamilyMemberStrip from '../../components/FamilyMemberStrip.vue'
|
|
|
|
|
import DimensionIntroCard from '../../components/DimensionIntroCard.vue'
|
|
import DimensionIntroCard from '../../components/DimensionIntroCard.vue'
|
|
|
import DimensionVisitorCard from '../../components/DimensionVisitorCard.vue'
|
|
import DimensionVisitorCard from '../../components/DimensionVisitorCard.vue'
|
|
|
import DimensionPageSkeleton from '../../components/DimensionPageSkeleton.vue'
|
|
import DimensionPageSkeleton from '../../components/DimensionPageSkeleton.vue'
|
|
|
-import { getVisibleSections, getChildren, getFamilyEnergySandbox, getEnergySandbox, getAssessmentLatestResult, getDanReportByChild, getGutCognitionIndicators, getLatestIndicators, getRadarData } from '../../utils/api.js'
|
|
|
|
|
|
|
+import DimensionMemberTabs from '../../components/DimensionMemberTabs.vue'
|
|
|
|
|
+import { getVisibleSections, getChildren, getFamilyEnergySandbox, getEnergySandbox, getAssessmentLatestResult, getDanReportByChild, getGutCognitionIndicators, getLatestIndicators, getRadarData, getFamilyMemberList, kickFamilyMemberById } from '../../utils/api.js'
|
|
|
import { parseDate } from '../../utils/format.js'
|
|
import { parseDate } from '../../utils/format.js'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
- components: { TabTransition, RadarChart, FamilyEnergyBar, FloatingAvatar, FamilyMemberStrip, DimensionIntroCard, DimensionVisitorCard, DimensionPageSkeleton },
|
|
|
|
|
|
|
+ components: { TabTransition, RadarChart, FamilyEnergyBar, FloatingAvatar, DimensionMemberTabs, DimensionIntroCard, DimensionVisitorCard, DimensionPageSkeleton },
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
|
|
+ memberScoreMap: {},
|
|
|
pageLoading: false,
|
|
pageLoading: false,
|
|
|
isLoggedIn: false,
|
|
isLoggedIn: false,
|
|
|
role: null,
|
|
role: null,
|
|
@@ -494,8 +499,62 @@ export default {
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
getInsightKey: function(prefix, idx) { return prefix + idx },
|
|
getInsightKey: function(prefix, idx) { return prefix + idx },
|
|
|
|
|
+ // 切换成员:同步成员ID并持久化,重载该页全部成员相关数据
|
|
|
onFamilyMemberSelect: function(member) {
|
|
onFamilyMemberSelect: function(member) {
|
|
|
|
|
+ if (!member || member.id === this.selectedMemberId) return
|
|
|
this.selectedMemberId = member.id
|
|
this.selectedMemberId = member.id
|
|
|
|
|
+ this.activeChildId = member.id
|
|
|
|
|
+ uni.setStorageSync('currentChildId', member.id)
|
|
|
|
|
+ this.reloadForMember()
|
|
|
|
|
+ },
|
|
|
|
|
+ // 切换成员后的统一重载入口
|
|
|
|
|
+ reloadForMember: function() {
|
|
|
|
|
+ if (!this.isLoggedIn) return
|
|
|
|
|
+ this.loadCognitiveReport()
|
|
|
|
|
+ this.loadDanReports()
|
|
|
|
|
+ this.loadGutCognitionData()
|
|
|
|
|
+ },
|
|
|
|
|
+ // 成员标签长按:唤出管理动作面板
|
|
|
|
|
+ onMemberLongPress: function(member) {
|
|
|
|
|
+ this.showMemberActions(member)
|
|
|
|
|
+ },
|
|
|
|
|
+ // 成员标签管理入口
|
|
|
|
|
+ onMemberManage: function() {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/profile-extra/family-members' })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 成员管理动作面板(系统 ActionSheet,触摸目标由微信保证)
|
|
|
|
|
+ showMemberActions: function(member) {
|
|
|
|
|
+ if (!member) return
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ var items = ['切换到该成员视角', '编辑资料', '移除成员']
|
|
|
|
|
+ uni.showActionSheet({
|
|
|
|
|
+ itemList: items,
|
|
|
|
|
+ success: function(res) {
|
|
|
|
|
+ if (res.tapIndex === 0) {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/action-detail/relationship-questionnaire?memberId=' + member.id })
|
|
|
|
|
+ } else if (res.tapIndex === 1) {
|
|
|
|
|
+ uni.navigateTo({ url: '/pages/family/add-member?memberId=' + member.id })
|
|
|
|
|
+ } else if (res.tapIndex === 2) {
|
|
|
|
|
+ uni.showModal({
|
|
|
|
|
+ title: '确认移除',
|
|
|
|
|
+ content: '确定要移除 ' + (member.nickname || '该成员') + ' 吗?',
|
|
|
|
|
+ success: function(m) {
|
|
|
|
|
+ if (m.confirm) {
|
|
|
|
|
+ uni.showLoading({ title: '移除中...' })
|
|
|
|
|
+ kickFamilyMemberById(member.id).then(function() {
|
|
|
|
|
+ uni.hideLoading()
|
|
|
|
|
+ uni.showToast({ title: '已移除', icon: 'success' })
|
|
|
|
|
+ self.loadFamilyMembersVisible()
|
|
|
|
|
+ }).catch(function(err) {
|
|
|
|
|
+ uni.hideLoading()
|
|
|
|
|
+ uni.showToast({ title: (err && err.message) || '移除失败', icon: 'none' })
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
loadSectionConfig: function() {
|
|
loadSectionConfig: function() {
|
|
|
var baseSections = ['func_entries', 'recommended_reading']
|
|
var baseSections = ['func_entries', 'recommended_reading']
|
|
@@ -564,15 +623,27 @@ export default {
|
|
|
},
|
|
},
|
|
|
loadFamilyMembersVisible: function() {
|
|
loadFamilyMembersVisible: function() {
|
|
|
var self = this
|
|
var self = this
|
|
|
- getFamilyEnergySandbox().then(function(res) {
|
|
|
|
|
- if (res && res.data) {
|
|
|
|
|
- self.sandboxData = res.data.sandboxData || null
|
|
|
|
|
- self.dualDimension = res.data.dualDimension || null
|
|
|
|
|
- if (res.data.members) {
|
|
|
|
|
- self.familyMembersVisible = res.data.members
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ getFamilyMemberList({}).then(function(res) {
|
|
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
|
|
+ // 保留后端全字段:成员标签需要 relationship/relativeLabel/roleLabel/effectiveRole/isSelf 等
|
|
|
|
|
+ self.familyMembersVisible = res.data.map(function(m) {
|
|
|
|
|
+ return {
|
|
|
|
|
+ id: m.id,
|
|
|
|
|
+ memberId: m.memberId,
|
|
|
|
|
+ nickname: m.nickname,
|
|
|
|
|
+ avatar: m.avatar,
|
|
|
|
|
+ relationship: m.relationship,
|
|
|
|
|
+ relativeLabel: m.relativeLabel,
|
|
|
|
|
+ roleLabel: m.roleLabel,
|
|
|
|
|
+ effectiveRole: m.effectiveRole,
|
|
|
|
|
+ generation: m.generation,
|
|
|
|
|
+ phone: m.phone,
|
|
|
|
|
+ isSelf: m.isSelf,
|
|
|
|
|
+ isSwitchable: m.isSwitchable
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
- }).catch(function(e) {})
|
|
|
|
|
|
|
+ }).catch(function(e) { console.log('获取家庭成员失败', e) })
|
|
|
},
|
|
},
|
|
|
loadCognitiveReport: function() {
|
|
loadCognitiveReport: function() {
|
|
|
var self = this
|
|
var self = this
|