|
@@ -20,7 +20,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
-import { getHealthStatus, saveHealthStatus, getDietPreferences, saveDietPreferences, getMyMembership, getFamilyMemberList } from '../../utils/api'
|
|
|
|
|
|
|
+import { getHealthStatus, saveHealthStatus, getDietPreferences, saveDietPreferences, getMyMembership, getFamilyMemberList, submitSurvey, getLastHealthReview } from '../../utils/api'
|
|
|
import ComprehensiveSurvey from '@/pages/health/components/ComprehensiveSurvey.vue'
|
|
import ComprehensiveSurvey from '@/pages/health/components/ComprehensiveSurvey.vue'
|
|
|
|
|
|
|
|
var ALL_MODULES = ['basic', 'status', 'diet', 'disease', 'bowel', 'sleep', 'med', 'allergy']
|
|
var ALL_MODULES = ['basic', 'status', 'diet', 'disease', 'bowel', 'sleep', 'med', 'allergy']
|
|
@@ -108,10 +108,14 @@ export default {
|
|
|
},
|
|
},
|
|
|
dietSnapshot: normalizeDiet(null),
|
|
dietSnapshot: normalizeDiet(null),
|
|
|
memberProfile: {},
|
|
memberProfile: {},
|
|
|
- _loaded: false
|
|
|
|
|
|
|
+ _loaded: false,
|
|
|
|
|
+ // 健康阅卷模式标记(source=health_review,HL-01)
|
|
|
|
|
+ reviewSource: ''
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
onLoad: function(options) {
|
|
onLoad: function(options) {
|
|
|
|
|
+ // 0. 解析来源:health_review=健康阅卷模式(仅写 survey_records,不自检/不写 health_status)
|
|
|
|
|
+ this.reviewSource = (options && options.source) || ''
|
|
|
// 1. 解析 modules(缺省/空串/全非法 → 全量 8 模块)
|
|
// 1. 解析 modules(缺省/空串/全非法 → 全量 8 模块)
|
|
|
if (options && options.modules) {
|
|
if (options && options.modules) {
|
|
|
var list = String(options.modules).split(',').filter(function(m) { return ALL_MODULES.indexOf(m) >= 0 })
|
|
var list = String(options.modules).split(',').filter(function(m) { return ALL_MODULES.indexOf(m) >= 0 })
|
|
@@ -119,7 +123,12 @@ export default {
|
|
|
}
|
|
}
|
|
|
// 2. 当前成员快照(与 preferences.vue 一致)
|
|
// 2. 当前成员快照(与 preferences.vue 一致)
|
|
|
this.familyMemberId = uni.getStorageSync('currentChildId') || uni.getStorageSync('currentMemberId') || uni.getStorageSync('userId') || ''
|
|
this.familyMemberId = uni.getStorageSync('currentChildId') || uni.getStorageSync('currentMemberId') || uni.getStorageSync('userId') || ''
|
|
|
- // 3. 会员门槛 + 加载
|
|
|
|
|
|
|
+ // 3. 健康阅卷:直接加载最后一条记录预填(无记录则空表),不走会员门槛/自检数据
|
|
|
|
|
+ if (this.reviewSource === 'health_review') {
|
|
|
|
|
+ this.loadHealthReviewData()
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // 4. 会员门槛 + 加载
|
|
|
this.checkGateAndLoad()
|
|
this.checkGateAndLoad()
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
@@ -206,6 +215,58 @@ export default {
|
|
|
self._loaded = true
|
|
self._loaded = true
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
|
|
+ // 健康阅卷(HL-01):加载最后一条 health_review 记录并预填 formSnapshot/dietSnapshot
|
|
|
|
|
+ loadHealthReviewData: function() {
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ self.loading = true
|
|
|
|
|
+ var tasks = [
|
|
|
|
|
+ getLastHealthReview({}).then(function(res) {
|
|
|
|
|
+ var d = (res && res.code === 200 && res.data) ? res.data : null
|
|
|
|
|
+ if (d && d.answersJson) {
|
|
|
|
|
+ self.applyHealthReviewJson(d.answersJson)
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() {}),
|
|
|
|
|
+ getFamilyMemberList({}).then(function(res) {
|
|
|
|
|
+ var list = (res && res.code === 200 && res.data) ? res.data : []
|
|
|
|
|
+ var arr = list instanceof Array ? list : []
|
|
|
|
|
+ var found = null
|
|
|
|
|
+ for (var j = 0; j < arr.length; j++) {
|
|
|
|
|
+ if (arr[j].isSelf) { found = arr[j]; break }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (found) {
|
|
|
|
|
+ self.memberProfile = { gender: found.gender || '', age: found.age != null ? found.age : '' }
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(function() {})
|
|
|
|
|
+ ]
|
|
|
|
|
+ Promise.all(tasks).then(function() {
|
|
|
|
|
+ self.loading = false
|
|
|
|
|
+ self._loaded = true
|
|
|
|
|
+ })
|
|
|
|
|
+ },
|
|
|
|
|
+ // 健康阅卷 answersJson 还原:{form: <与 hsPayload 同构>, diet: <与 dietPayload 同构>}
|
|
|
|
|
+ applyHealthReviewJson: function(answersJson) {
|
|
|
|
|
+ var parsed = null
|
|
|
|
|
+ try {
|
|
|
|
|
+ parsed = JSON.parse(answersJson || '{}')
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ parsed = null
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!parsed || typeof parsed !== 'object') return
|
|
|
|
|
+ var f = parsed.form || {}
|
|
|
|
|
+ var d = parsed.diet || {}
|
|
|
|
|
+ var self = this
|
|
|
|
|
+ if (f.heightCm != null) self.$set(self.formSnapshot, 'heightCm', f.heightCm)
|
|
|
|
|
+ if (f.weightKg != null) self.$set(self.formSnapshot, 'weightKg', f.weightKg)
|
|
|
|
|
+ if (f.bloodPressure != null) self.$set(self.formSnapshot, 'bloodPressure', f.bloodPressure)
|
|
|
|
|
+ if (f.bloodGlucose != null) self.$set(self.formSnapshot, 'bloodGlucose', f.bloodGlucose)
|
|
|
|
|
+ if (f.notes != null) self.$set(self.formSnapshot, 'notes', f.notes)
|
|
|
|
|
+ if (f.lipidCholesterol != null) self.$set(self.formSnapshot, 'lipidCholesterol', f.lipidCholesterol)
|
|
|
|
|
+ if (Array.isArray(f.selectedDiseases)) self.$set(self.formSnapshot, 'selectedDiseases', f.selectedDiseases)
|
|
|
|
|
+ if (Array.isArray(f.medRows)) self.$set(self.formSnapshot, 'medRows', f.medRows)
|
|
|
|
|
+ if (f.noMedication != null) self.$set(self.formSnapshot, 'noMedication', !!f.noMedication)
|
|
|
|
|
+ if (f.lifestyle && typeof f.lifestyle === 'object') self.$set(self.formSnapshot, 'lifestyle', f.lifestyle)
|
|
|
|
|
+ self.dietSnapshot = normalizeDiet(d)
|
|
|
|
|
+ },
|
|
|
// 组件 patch → 合并到快照(patch 为结构化字段副本,不含 lifestyle)
|
|
// 组件 patch → 合并到快照(patch 为结构化字段副本,不含 lifestyle)
|
|
|
onUpdateForm: function(patch) {
|
|
onUpdateForm: function(patch) {
|
|
|
var self = this
|
|
var self = this
|
|
@@ -277,7 +338,21 @@ export default {
|
|
|
else if (v !== '' && v !== 'none') dietPayload[k] = v
|
|
else if (v !== '' && v !== 'none') dietPayload[k] = v
|
|
|
})
|
|
})
|
|
|
if (diet.noPreference) dietPayload.noPreference = true
|
|
if (diet.noPreference) dietPayload.noPreference = true
|
|
|
- // 3. 组装保存任务
|
|
|
|
|
|
|
+ // 3. 健康阅卷(source=health_review):仅写 survey_records(多次填写多条记录),不动 health_status/diet_preferences
|
|
|
|
|
+ if (self.reviewSource === 'health_review') {
|
|
|
|
|
+ var reviewAnswer = JSON.stringify({ form: hsPayload, diet: dietPayload })
|
|
|
|
|
+ self.submitting = true
|
|
|
|
|
+ submitSurvey({ memberId: self.familyMemberId, source: 'health_review', answersJson: reviewAnswer }).then(function() {
|
|
|
|
|
+ uni.showToast({ title: '已保存', icon: 'success' })
|
|
|
|
|
+ self.submitting = false
|
|
|
|
|
+ setTimeout(function() { uni.navigateBack() }, 800)
|
|
|
|
|
+ }).catch(function(err) {
|
|
|
|
|
+ self.submitting = false
|
|
|
|
|
+ uni.showToast({ title: (err && err.message) || '保存失败,请重试', icon: 'none' })
|
|
|
|
|
+ })
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ // 4. 组装保存任务(既有自检/方案流程,零改动)
|
|
|
var saveTasks = []
|
|
var saveTasks = []
|
|
|
if (Object.keys(hsPayload).length > 0) {
|
|
if (Object.keys(hsPayload).length > 0) {
|
|
|
hsPayload.memberId = self.familyMemberId
|
|
hsPayload.memberId = self.familyMemberId
|