|
|
@@ -130,14 +130,16 @@
|
|
|
<text class="section-sub">从成效出发,挖掘关键人,画出拓展路径</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <text class="section-link section-link-octopus" @tap="goOctopusEffectsList">+ 感恩记录</text>
|
|
|
+ <text class="section-link section-link-octopus" @tap="goOctopusEffectsList" v-if="currentView === 'self'">+ 感恩记录</text>
|
|
|
</view>
|
|
|
<OctopusDiagram
|
|
|
ref="octopusDiagram"
|
|
|
:selfId="selfId"
|
|
|
- :effects="octopusEffects"
|
|
|
- :expansions="octopusExpansions"
|
|
|
+ :effects="octopusDiagramData"
|
|
|
+ :expansions="currentView === 'family' ? [] : octopusExpansions"
|
|
|
:interactive="true"
|
|
|
+ :family-mode="currentView === 'family'"
|
|
|
+ :member-legend="familyOctopusLegend"
|
|
|
@effect-click="onEffectClick"
|
|
|
@expansion-click="onExpansionClick"
|
|
|
@add-effect="goOctopusAddEffect"
|
|
|
@@ -154,14 +156,16 @@
|
|
|
<text class="section-sub">把可调用的资源串成珍珠项链——盘点我有什么</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <text class="section-link section-link-pearl" @tap="goPearlAddResource">+ 登记</text>
|
|
|
+ <text class="section-link section-link-pearl" @tap="goPearlAddResource" v-if="currentView === 'self'">+ 登记</text>
|
|
|
</view>
|
|
|
<PearlDiagram
|
|
|
ref="pearlDiagram"
|
|
|
:selfId="selfId"
|
|
|
- :resources="pearlData"
|
|
|
- :overdue-map="overdueMap"
|
|
|
+ :resources="pearlDiagramData"
|
|
|
+ :overdue-map="currentView === 'family' ? null : overdueMap"
|
|
|
:interactive="true"
|
|
|
+ :family-mode="currentView === 'family'"
|
|
|
+ :member-legend="familyPearlLegend"
|
|
|
@add="goPearlAddResource"
|
|
|
@delete="onDeletePearlResource" />
|
|
|
</view>
|
|
|
@@ -275,7 +279,7 @@ import FloatingAvatar from '../../components/AIFloatingAvatar.vue'
|
|
|
import RadarChart from '../../components/RadarChart.vue'
|
|
|
import DimensionSubDims from './components/DimensionSubDims.vue'
|
|
|
import DimensionPageSkeleton from '../../components/DimensionPageSkeleton.vue'
|
|
|
-import { getVisibleSections, getEnergyOverview, getChildren, getFamilyEnergySandbox, getEnergySandbox, getFamilyMemberList, getOctopusTentacles, getPearlResources, deletePearlResource, getAbilityMap, getRadarData, getPearlReminders, getOctopusEffects, getOctopusAnalysisSummary, getOctopusExpansionSuggest, getOctopusEffectKeyPersons } from '../../utils/api.js'
|
|
|
+import { getVisibleSections, getEnergyOverview, getChildren, getFamilyEnergySandbox, getEnergySandbox, getFamilyMemberList, getOctopusTentacles, getPearlResources, deletePearlResource, getAbilityMap, getRadarData, getPearlReminders, getOctopusEffects, getOctopusAnalysisSummary, getOctopusExpansionSuggest, getOctopusEffectKeyPersons, getFamilyPearlResources, getFamilyOctopusEffects } from '../../utils/api.js'
|
|
|
import fontScaleMixin from '@/mixins/font-scale.js'
|
|
|
|
|
|
export default {
|
|
|
@@ -286,7 +290,7 @@ export default {
|
|
|
gridColor: BrandColors.emerald100,
|
|
|
labelColor: BrandColors.emerald800,
|
|
|
successColor: BrandColors.success,
|
|
|
- pageLoading: false,
|
|
|
+ pageLoading: false,
|
|
|
isLoggedIn: false,
|
|
|
role: null,
|
|
|
showTabTransition: true,
|
|
|
@@ -298,7 +302,7 @@ export default {
|
|
|
familyMembersVisible: [],
|
|
|
childrenChecked: false,
|
|
|
membersChecked: false,
|
|
|
- actionSubDims: [],
|
|
|
+ actionSubDims: [],
|
|
|
sandboxData: null,
|
|
|
actionPopulationScoreMap: {},
|
|
|
currentView: 'self', // 'self' | 'family'
|
|
|
@@ -311,6 +315,10 @@ export default {
|
|
|
octopusExpansions: [],
|
|
|
octopusKeyPersons: {},
|
|
|
overdueMap: null,
|
|
|
+ // 家庭汇集数据
|
|
|
+ familyPearlData: null,
|
|
|
+ familyOctopusEffects: null,
|
|
|
+ familyLoading: false,
|
|
|
// 帮助弹窗
|
|
|
helpPopup: { visible: false, title: '', content: '' },
|
|
|
funcList: [
|
|
|
@@ -529,6 +537,101 @@ export default {
|
|
|
result.tip = '建议寻求专业家庭辅导,或从简单的家庭对话开始改善'
|
|
|
}
|
|
|
return result
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 当前是否处于「全家」汇集视图 */
|
|
|
+ isFamilyView: function() {
|
|
|
+ return this.currentView === 'family'
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 珍珠图数据源:family 视图取家庭汇集(members 合并展开),否则取个人数据 */
|
|
|
+ pearlDiagramData: function() {
|
|
|
+ if (this.currentView === 'family') {
|
|
|
+ return this.familyPearlDiagram
|
|
|
+ }
|
|
|
+ return this.pearlData
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 章鱼图数据源:family 视图取家庭汇集(members 合并展开),否则取个人数据 */
|
|
|
+ octopusDiagramData: function() {
|
|
|
+ if (this.currentView === 'family') {
|
|
|
+ return this.familyOctopusDiagram
|
|
|
+ }
|
|
|
+ return this.octopusEffects
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 家庭珍珠图:将 members[].items 合并展开为 PearlDiagram 可消费结构,每项带成员标注 */
|
|
|
+ familyPearlDiagram: function() {
|
|
|
+ if (!this.familyPearlData) return null
|
|
|
+ var members = this.familyPearlData.members
|
|
|
+ if (!members || !Array.isArray(members)) return null
|
|
|
+ var groupMap = {}
|
|
|
+ var groupOrder = []
|
|
|
+ for (var i = 0; i < members.length; i++) {
|
|
|
+ var m = members[i]
|
|
|
+ if (!m || !Array.isArray(m.items)) continue
|
|
|
+ for (var j = 0; j < m.items.length; j++) {
|
|
|
+ var item = m.items[j]
|
|
|
+ if (!item) continue
|
|
|
+ // 归属组:优先按连接类型/资源类型字段归组,缺失则归入 INFO(历史资源)
|
|
|
+ var type = item.connectionType || item.type || item.groupType || 'INFO'
|
|
|
+ var stamped = Object.assign({}, item, {
|
|
|
+ memberId: m.memberId,
|
|
|
+ memberName: m.memberName || '',
|
|
|
+ memberType: m.memberType || '',
|
|
|
+ colorKey: m.colorKey || ''
|
|
|
+ })
|
|
|
+ if (!groupMap[type]) {
|
|
|
+ groupMap[type] = { type: type, typeName: item.groupTypeName || item.typeName || type, items: [] }
|
|
|
+ groupOrder.push(type)
|
|
|
+ }
|
|
|
+ groupMap[type].items.push(stamped)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var groups = []
|
|
|
+ for (var k = 0; k < groupOrder.length; k++) {
|
|
|
+ groups.push(groupMap[groupOrder[k]])
|
|
|
+ }
|
|
|
+ return { groups: groups, legacyGroups: [] }
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 家庭章鱼图:将 members[].effects 合并展开为 OctopusDiagram 可消费结构,每项带成员标注 */
|
|
|
+ familyOctopusDiagram: function() {
|
|
|
+ if (!this.familyOctopusEffects) return null
|
|
|
+ var members = this.familyOctopusEffects.members
|
|
|
+ if (!members || !Array.isArray(members)) return null
|
|
|
+ var list = []
|
|
|
+ for (var i = 0; i < members.length; i++) {
|
|
|
+ var m = members[i]
|
|
|
+ if (!m || !Array.isArray(m.effects)) continue
|
|
|
+ for (var j = 0; j < m.effects.length; j++) {
|
|
|
+ var effect = m.effects[j]
|
|
|
+ if (!effect) continue
|
|
|
+ list.push(Object.assign({}, effect, {
|
|
|
+ memberId: m.memberId,
|
|
|
+ memberName: m.memberName || '',
|
|
|
+ memberType: m.memberType || '',
|
|
|
+ colorKey: m.colorKey || ''
|
|
|
+ }))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return { list: list }
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 珍珠图成员图例(家庭视图) */
|
|
|
+ familyPearlLegend: function() {
|
|
|
+ if (!this.familyPearlData || !this.familyPearlData.members) return []
|
|
|
+ return this.familyPearlData.members.map(function(m) {
|
|
|
+ return { memberId: m.memberId, name: m.memberName || '成员', colorKey: m.colorKey || '', memberType: m.memberType || '' }
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /** 章鱼图成员图例(家庭视图) */
|
|
|
+ familyOctopusLegend: function() {
|
|
|
+ if (!this.familyOctopusEffects || !this.familyOctopusEffects.members) return []
|
|
|
+ return this.familyOctopusEffects.members.map(function(m) {
|
|
|
+ return { memberId: m.memberId, name: m.memberName || '成员', colorKey: m.colorKey || '', memberType: m.memberType || '' }
|
|
|
+ })
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
@@ -650,18 +753,40 @@ export default {
|
|
|
},
|
|
|
switchView: function(view) {
|
|
|
this.currentView = view
|
|
|
+ var self = this
|
|
|
if (view === 'family') {
|
|
|
this.selectedMemberId = null
|
|
|
- var self = this
|
|
|
+ // 全家视图:同时加载家庭汇集珍珠图/章鱼图(只读合并展示)
|
|
|
+ this.loadFamilyCollectData()
|
|
|
getEnergySandbox('family').then(function(res) {
|
|
|
if (res && res.data && !res.data.locked) {
|
|
|
self.sandboxData = res.data.familyData || res.data
|
|
|
}
|
|
|
}).catch(function(e) { console.log('获取家庭数据失败', e) })
|
|
|
} else {
|
|
|
+ // 切回自己视图:恢复个人珍珠图/章鱼图数据
|
|
|
this.loadSandboxData()
|
|
|
+ this.loadPearlResources()
|
|
|
+ this.loadOctopusData()
|
|
|
}
|
|
|
},
|
|
|
+ /** 加载家庭汇集珍珠图/章鱼图数据(Promise.all 并发,任一失败不白屏) */
|
|
|
+ loadFamilyCollectData: function() {
|
|
|
+ var self = this
|
|
|
+ this.familyLoading = true
|
|
|
+ Promise.all([getFamilyPearlResources(), getFamilyOctopusEffects()]).then(function(resArr) {
|
|
|
+ var pearlRes = resArr[0]
|
|
|
+ var octopusRes = resArr[1]
|
|
|
+ self.familyPearlData = (pearlRes && pearlRes.code === 200 && pearlRes.data) ? pearlRes.data : null
|
|
|
+ self.familyOctopusEffects = (octopusRes && octopusRes.code === 200 && octopusRes.data) ? octopusRes.data : null
|
|
|
+ self.familyLoading = false
|
|
|
+ }).catch(function(e) {
|
|
|
+ console.log('获取家庭汇集数据失败', e)
|
|
|
+ self.familyPearlData = null
|
|
|
+ self.familyOctopusEffects = null
|
|
|
+ self.familyLoading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
loadEnergyData: function() {
|
|
|
var self = this
|
|
|
getEnergyOverview(this.activeChildId).then(function(res) {
|