|
@@ -18,13 +18,13 @@
|
|
|
<view class="hint-text">选择方案针对的家庭成员</view>
|
|
<view class="hint-text">选择方案针对的家庭成员</view>
|
|
|
<view class="member-list">
|
|
<view class="member-list">
|
|
|
<view v-for="(m, idx) in executors" :key="getMemberKey(m, idx)"
|
|
<view v-for="(m, idx) in executors" :key="getMemberKey(m, idx)"
|
|
|
- class="member-card" :class="{ active: isMemberSelected(m.memberId) }"
|
|
|
|
|
- @click="toggleMember(m.memberId)">
|
|
|
|
|
|
|
+ class="member-card" :class="{ active: isMemberSelected(m.id) }"
|
|
|
|
|
+ @click="toggleMember(m.id)">
|
|
|
<view class="member-card-left">
|
|
<view class="member-card-left">
|
|
|
- <view class="member-avatar">{{ m.name.charAt(0) }}</view>
|
|
|
|
|
- <text class="member-card-name">{{ m.name }}</text>
|
|
|
|
|
|
|
+ <view class="member-avatar">{{ (m.nickname || m.name || '成').charAt(0) }}</view>
|
|
|
|
|
+ <text class="member-card-name">{{ m.nickname || m.name || '成员' }}</text>
|
|
|
</view>
|
|
</view>
|
|
|
- <view class="member-check">{{ isMemberSelected(m.memberId) ? '✓' : '' }}</view>
|
|
|
|
|
|
|
+ <view class="member-check">{{ isMemberSelected(m.id) ? '✓' : '' }}</view>
|
|
|
</view>
|
|
</view>
|
|
|
<view v-if="executors.length === 0" class="empty-state">
|
|
<view v-if="executors.length === 0" class="empty-state">
|
|
|
<text class="empty-icon">👨👩👧</text>
|
|
<text class="empty-icon">👨👩👧</text>
|
|
@@ -418,7 +418,7 @@ export default {
|
|
|
var self = this
|
|
var self = this
|
|
|
// 处理初始成员ID
|
|
// 处理初始成员ID
|
|
|
if (options.initialMemberIds) {
|
|
if (options.initialMemberIds) {
|
|
|
- this.selectedMemberIds = options.initialMemberIds.split(',').filter(function(id) { return id })
|
|
|
|
|
|
|
+ this.selectedMemberIds = options.initialMemberIds.split(',').filter(function(id) { return id }).map(function(id) { return parseInt(id) || id })
|
|
|
}
|
|
}
|
|
|
// 处理 planId 查看模式
|
|
// 处理 planId 查看模式
|
|
|
this.planId = options.planId ? parseInt(options.planId) : null
|
|
this.planId = options.planId ? parseInt(options.planId) : null
|
|
@@ -450,29 +450,27 @@ export default {
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
// ===== 成员选择 (保持原有) =====
|
|
// ===== 成员选择 (保持原有) =====
|
|
|
- getMemberKey: function(m, idx) { return m.memberId || idx },
|
|
|
|
|
|
|
+ getMemberKey: function(m, idx) { return m.id || idx },
|
|
|
loadExecutors: function() {
|
|
loadExecutors: function() {
|
|
|
|
|
+ if (this._executorsLoading) return
|
|
|
|
|
+ this._executorsLoading = true
|
|
|
var self = this
|
|
var self = this
|
|
|
getFamilyMemberList({ visibleOnly: true }).then(function(res) {
|
|
getFamilyMemberList({ visibleOnly: true }).then(function(res) {
|
|
|
if (res && res.code === 200 && res.data) {
|
|
if (res && res.code === 200 && res.data) {
|
|
|
var list = res.data instanceof Array ? res.data : []
|
|
var list = res.data instanceof Array ? res.data : []
|
|
|
- self.executors = list.filter(function(m) { return m.memberId || m.id }).map(function(m) {
|
|
|
|
|
- return { memberId: String(m.memberId || m.id), name: m.nickname || m.name || '成员' }
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ self.executors = list.filter(function(m) { return m.id })
|
|
|
if (self.selectedMemberIds.length === 0 && self.executors.length > 0) {
|
|
if (self.selectedMemberIds.length === 0 && self.executors.length > 0) {
|
|
|
- self.selectedMemberIds = [self.executors[0].memberId]
|
|
|
|
|
- } else {
|
|
|
|
|
- self.selectedMemberIds = self.selectedMemberIds.map(function(id) { return String(id) })
|
|
|
|
|
|
|
+ self.selectedMemberIds = [self.executors[0].id]
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
self._executorsLoaded = true
|
|
self._executorsLoaded = true
|
|
|
- }).catch(function() { self.executors = []; self._executorsLoaded = true })
|
|
|
|
|
|
|
+ self._executorsLoading = false
|
|
|
|
|
+ }).catch(function() { self.executors = []; self._executorsLoaded = true; self._executorsLoading = false })
|
|
|
},
|
|
},
|
|
|
- isMemberSelected: function(memberId) {
|
|
|
|
|
- return this.selectedMemberIds.indexOf(String(memberId)) >= 0
|
|
|
|
|
|
|
+ isMemberSelected: function(id) {
|
|
|
|
|
+ return this.selectedMemberIds.indexOf(id) >= 0
|
|
|
},
|
|
},
|
|
|
- toggleMember: function(memberId) {
|
|
|
|
|
- var id = String(memberId)
|
|
|
|
|
|
|
+ toggleMember: function(id) {
|
|
|
var idx = this.selectedMemberIds.indexOf(id)
|
|
var idx = this.selectedMemberIds.indexOf(id)
|
|
|
if (idx >= 0) this.selectedMemberIds.splice(idx, 1)
|
|
if (idx >= 0) this.selectedMemberIds.splice(idx, 1)
|
|
|
else this.selectedMemberIds.push(id)
|
|
else this.selectedMemberIds.push(id)
|
|
@@ -849,7 +847,7 @@ export default {
|
|
|
self.planDetail = res.data
|
|
self.planDetail = res.data
|
|
|
self.userGoal = res.data.goal || ''
|
|
self.userGoal = res.data.goal || ''
|
|
|
if (res.data.memberIds) {
|
|
if (res.data.memberIds) {
|
|
|
- self.selectedMemberIds = res.data.memberIds.split(',').filter(function(id) { return id })
|
|
|
|
|
|
|
+ self.selectedMemberIds = res.data.memberIds.split(',').filter(function(id) { return id }).map(function(id) { return parseInt(id) || id })
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
var pj = JSON.parse(res.data.planJson || '{}')
|
|
var pj = JSON.parse(res.data.planJson || '{}')
|