|
@@ -43,7 +43,7 @@
|
|
|
class="candidate-item"
|
|
class="candidate-item"
|
|
|
v-for="(cand, idx) in candidates"
|
|
v-for="(cand, idx) in candidates"
|
|
|
:key="idx"
|
|
:key="idx"
|
|
|
- :class="{ 'candidate-selected': selectedMemberId === (cand.id || cand.userId) }"
|
|
|
|
|
|
|
+ :class="{ 'candidate-selected': selectedMemberId === cand._mid }"
|
|
|
@click="selectAndClose(cand)"
|
|
@click="selectAndClose(cand)"
|
|
|
>
|
|
>
|
|
|
<view class="candidate-left">
|
|
<view class="candidate-left">
|
|
@@ -70,7 +70,7 @@
|
|
|
class="member-item"
|
|
class="member-item"
|
|
|
v-for="(member, mIdx) in otherMembers"
|
|
v-for="(member, mIdx) in otherMembers"
|
|
|
:key="mIdx"
|
|
:key="mIdx"
|
|
|
- :class="{ 'member-selected': selectedMemberId === (member.userId || member.id) }"
|
|
|
|
|
|
|
+ :class="{ 'member-selected': selectedMemberId === member._mid }"
|
|
|
@click="selectAndClose(member)"
|
|
@click="selectAndClose(member)"
|
|
|
>
|
|
>
|
|
|
<text class="member-avatar">{{ (member.nickname || '?').substring(0, 1) }}</text>
|
|
<text class="member-avatar">{{ (member.nickname || '?').substring(0, 1) }}</text>
|
|
@@ -356,6 +356,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
|
|
+import { normalizeMembers, memberIdOf } from '../../utils/memberNormalize.js'
|
|
|
import { confirmReportPreview, discardReportDraft, confirmTongue, discardTongue, parseReportDraft } from '../../utils/api.js'
|
|
import { confirmReportPreview, discardReportDraft, confirmTongue, discardTongue, parseReportDraft } from '../../utils/api.js'
|
|
|
import { addFamilyMember, getFamilyMemberList } from '../../utils/api.js'
|
|
import { addFamilyMember, getFamilyMemberList } from '../../utils/api.js'
|
|
|
import FeedbackPopup from '@/pages/health/components/feedback-popup.vue'
|
|
import FeedbackPopup from '@/pages/health/components/feedback-popup.vue'
|
|
@@ -461,14 +462,13 @@ export default {
|
|
|
otherMembers() {
|
|
otherMembers() {
|
|
|
var candIds = {}
|
|
var candIds = {}
|
|
|
for (var i = 0; i < this.candidates.length; i++) {
|
|
for (var i = 0; i < this.candidates.length; i++) {
|
|
|
- var c = this.candidates[i]
|
|
|
|
|
- var cid = c.id || c.userId
|
|
|
|
|
|
|
+ var cid = this.candidates[i]._mid
|
|
|
if (cid !== null && cid !== undefined) candIds[cid] = true
|
|
if (cid !== null && cid !== undefined) candIds[cid] = true
|
|
|
}
|
|
}
|
|
|
var list = []
|
|
var list = []
|
|
|
for (var j = 0; j < this.familyMembers.length; j++) {
|
|
for (var j = 0; j < this.familyMembers.length; j++) {
|
|
|
var m = this.familyMembers[j]
|
|
var m = this.familyMembers[j]
|
|
|
- var mid = m.userId || m.id
|
|
|
|
|
|
|
+ var mid = m._mid
|
|
|
if (mid !== null && mid !== undefined && candIds[mid]) continue
|
|
if (mid !== null && mid !== undefined && candIds[mid]) continue
|
|
|
list.push(m)
|
|
list.push(m)
|
|
|
}
|
|
}
|
|
@@ -575,6 +575,7 @@ export default {
|
|
|
if (candidatesStr) {
|
|
if (candidatesStr) {
|
|
|
try {
|
|
try {
|
|
|
this.candidates = JSON.parse(candidatesStr)
|
|
this.candidates = JSON.parse(candidatesStr)
|
|
|
|
|
+ for (var ci = 0; ci < this.candidates.length; ci++) this.candidates[ci]._mid = memberIdOf(this.candidates[ci])
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
this.candidates = []
|
|
this.candidates = []
|
|
|
}
|
|
}
|
|
@@ -644,6 +645,7 @@ export default {
|
|
|
this.matchConfidence = detail.confidence !== undefined && detail.confidence !== null ? parseFloat(detail.confidence) : null
|
|
this.matchConfidence = detail.confidence !== undefined && detail.confidence !== null ? parseFloat(detail.confidence) : null
|
|
|
this.matchLabel = detail.matchLabel || ''
|
|
this.matchLabel = detail.matchLabel || ''
|
|
|
this.candidates = detail.candidates || []
|
|
this.candidates = detail.candidates || []
|
|
|
|
|
+ for (var ci = 0; ci < this.candidates.length; ci++) this.candidates[ci]._mid = memberIdOf(this.candidates[ci])
|
|
|
|
|
|
|
|
// 始终加载家庭成员
|
|
// 始终加载家庭成员
|
|
|
this.loadFamilyMembers()
|
|
this.loadFamilyMembers()
|
|
@@ -659,12 +661,14 @@ export default {
|
|
|
getFamilyMemberList({ visibleOnly: true }).then(function(res) {
|
|
getFamilyMemberList({ visibleOnly: true }).then(function(res) {
|
|
|
var list = (res && res.data) || []
|
|
var list = (res && res.data) || []
|
|
|
var parents = list.filter(function(m) { return m.source === 'parent' }).map(function(p) {
|
|
var parents = list.filter(function(m) { return m.source === 'parent' }).map(function(p) {
|
|
|
- return { id: p.id, nickname: p.nickname, gender: p.gender, role: 'parent' }
|
|
|
|
|
|
|
+ return { id: p.id, userId: p.userId, nickname: p.nickname, gender: p.gender, role: 'parent' }
|
|
|
})
|
|
})
|
|
|
var children = list.filter(function(m) { return m.source !== 'parent' }).map(function(c) {
|
|
var children = list.filter(function(m) { return m.source !== 'parent' }).map(function(c) {
|
|
|
- return { id: c.id, nickname: c.nickname, gender: c.gender, age: c.age, role: 'child' }
|
|
|
|
|
|
|
+ return { id: c.id, userId: c.userId, nickname: c.nickname, gender: c.gender, age: c.age, role: 'child' }
|
|
|
})
|
|
})
|
|
|
- self.familyMembers = parents.concat(children)
|
|
|
|
|
|
|
+ // 前端防御层:按 user_id 折叠同用户多行,isSelf 唯一;统一身份键 memberId
|
|
|
|
|
+ self.familyMembers = normalizeMembers(parents.concat(children), { userId: uni.getStorageSync('userId') })
|
|
|
|
|
+ for (var i = 0; i < self.familyMembers.length; i++) self.familyMembers[i]._mid = memberIdOf(self.familyMembers[i])
|
|
|
self.syncSelectedMemberObj()
|
|
self.syncSelectedMemberObj()
|
|
|
}).catch(function(e) {
|
|
}).catch(function(e) {
|
|
|
console.log('加载家庭成员失败', e)
|
|
console.log('加载家庭成员失败', e)
|
|
@@ -678,7 +682,7 @@ export default {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
selectAndClose(member) {
|
|
selectAndClose(member) {
|
|
|
- var memberId = member.id || member.userId
|
|
|
|
|
|
|
+ var memberId = member._mid != null ? member._mid : memberIdOf(member)
|
|
|
this.selectedMemberId = memberId
|
|
this.selectedMemberId = memberId
|
|
|
this.selectedMemberObj = member
|
|
this.selectedMemberObj = member
|
|
|
this.extractedName = member.nickname || member.name || this.extractedName
|
|
this.extractedName = member.nickname || member.name || this.extractedName
|
|
@@ -695,7 +699,8 @@ export default {
|
|
|
var all = this.familyMembers.concat(this.candidates)
|
|
var all = this.familyMembers.concat(this.candidates)
|
|
|
for (var i = 0; i < all.length; i++) {
|
|
for (var i = 0; i < all.length; i++) {
|
|
|
var m = all[i]
|
|
var m = all[i]
|
|
|
- if ((m.id || m.userId) === this.selectedMemberId) {
|
|
|
|
|
|
|
+ var mid = m._mid != null ? m._mid : memberIdOf(m)
|
|
|
|
|
+ if (mid === this.selectedMemberId) {
|
|
|
this.selectedMemberObj = m
|
|
this.selectedMemberObj = m
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -732,7 +737,7 @@ export default {
|
|
|
}).then(function(res) {
|
|
}).then(function(res) {
|
|
|
uni.hideLoading()
|
|
uni.hideLoading()
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
- var memberId = res.data && (res.data.userId || res.data.id)
|
|
|
|
|
|
|
+ var memberId = res.data && memberIdOf(res.data)
|
|
|
if (memberId) {
|
|
if (memberId) {
|
|
|
self.createdMemberId = memberId
|
|
self.createdMemberId = memberId
|
|
|
self.selectedMemberId = memberId
|
|
self.selectedMemberId = memberId
|