2025-05-27 10:30:44 +08:00
|
|
|
<template>
|
|
|
|
|
<page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
|
|
|
|
|
<view class="health-form">
|
|
|
|
|
<Navbar title="健康信息" :showRightText="true" :isBack="false" />
|
|
|
|
|
<scroll-view style="width: 100%;height: 85vh;" scroll-y="true">
|
|
|
|
|
<u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" style="margin-left: 20rpx;">
|
|
|
|
|
<u-form-item label="身高(cm)" prop="height" borderBottom required labelWidth="200rpx">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model.number="form.height"
|
|
|
|
|
border="none"
|
|
|
|
|
placeholder="请输入身高cm"
|
|
|
|
|
type="number"
|
|
|
|
|
></u--input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="体重(kg)" prop="weight" borderBottom required labelWidth="200rpx">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model.number="form.weight"
|
|
|
|
|
border="none"
|
|
|
|
|
placeholder="请输入体重kg"
|
|
|
|
|
type="number"
|
|
|
|
|
></u--input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="体重控制" prop="weightControl" borderBottom labelWidth="200rpx" @click="showSelector('weightControl')">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model="weightControlName"
|
|
|
|
|
disabled
|
|
|
|
|
disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择"
|
|
|
|
|
border="none"
|
|
|
|
|
></u--input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="BMI" prop="bmi" borderBottom labelWidth="200rpx">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model="form.bmi"
|
|
|
|
|
disabled
|
|
|
|
|
border="none"
|
|
|
|
|
disabledColor="#ffffff"
|
|
|
|
|
placeholder="请输入身高、体重"
|
|
|
|
|
></u--input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="劳动强度" prop="labourIntensity" borderBottom labelWidth="200rpx" @click="showSelector('labourIntensity')">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model="labourIntensityName"
|
|
|
|
|
disabled
|
|
|
|
|
border="none"
|
|
|
|
|
disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择"
|
|
|
|
|
></u--input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="是否住院" prop="ifHospitalized" borderBottom labelWidth="200rpx" @click="showSelector('ifHospitalized')">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model="ifHospitalizedName"
|
|
|
|
|
disabled
|
|
|
|
|
border="none"
|
|
|
|
|
disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择"
|
|
|
|
|
></u--input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="医嘱" borderBottom labelWidth="200rpx">
|
2025-07-03 19:49:12 +08:00
|
|
|
<text class="u-content-color">{{doctorAdvices}}</text>
|
2025-05-27 10:30:44 +08:00
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
<u-form-item label="孕否" prop="pregnantStatus" borderBottom labelWidth="200rpx" @click="showSelector('pregnantStatus')">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model="pregnantStatusName"
|
|
|
|
|
disabled
|
|
|
|
|
border="none"
|
|
|
|
|
disabledColor="#ffffff"
|
|
|
|
|
placeholder="请选择"
|
|
|
|
|
></u--input>
|
|
|
|
|
<u-icon slot="right" name="arrow-right"></u-icon>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<u-form-item label="过敏源" prop="allergen" borderBottom labelWidth="200rpx">
|
|
|
|
|
<u--input
|
|
|
|
|
v-model="form.allergen"
|
|
|
|
|
border="none"
|
|
|
|
|
placeholder="请输入过敏源"
|
|
|
|
|
></u--input>
|
|
|
|
|
</u-form-item>
|
|
|
|
|
</u--form>
|
|
|
|
|
<view class="chronic-diseases">
|
|
|
|
|
<view style="display: flex;justify-content: space-between;">
|
|
|
|
|
<text class="chronic-diseases__label">慢性病</text>
|
|
|
|
|
<text style="color: #ccc;">请从下方选择慢性病</text>
|
|
|
|
|
</view>
|
|
|
|
|
<u-checkbox-group v-model="form.chronicDiseases" borderBottom placement="column" iconSize="16">
|
|
|
|
|
<u-checkbox
|
|
|
|
|
v-for="(item, index) in chronicList"
|
|
|
|
|
:key="index"
|
|
|
|
|
:name="item.chronicId"
|
|
|
|
|
:label="item.chronicName"
|
|
|
|
|
style="display: flex;justify-content: space-between;width: 100%;padding: 10rpx 20rpx;"
|
|
|
|
|
shape="squrd"
|
|
|
|
|
></u-checkbox>
|
|
|
|
|
</u-checkbox-group>
|
|
|
|
|
</view>
|
|
|
|
|
</scroll-view>
|
|
|
|
|
<view class="submit-btn">
|
|
|
|
|
<u-button type="warning" text="保存" @click="handleSubmit"></u-button>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<u-action-sheet
|
|
|
|
|
v-if="currentSelector"
|
|
|
|
|
:show="selectorVisible"
|
|
|
|
|
:actions="getSelectorOptions(currentSelector)"
|
|
|
|
|
:title="getSelectorTitle(currentSelector)"
|
|
|
|
|
@close="hideSelector"
|
|
|
|
|
@select="handleSelectorSelect"
|
|
|
|
|
>
|
|
|
|
|
</u-action-sheet>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
|
|
import { dictHealthChronicApi,healthDetailApi, editHealthInfoApi } from '@/api/mine/health.js'
|
|
|
|
|
export default {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
fontValue:uni.getStorageSync('fontSize') || 8,
|
|
|
|
|
selectorVisible: false,
|
|
|
|
|
currentSelector: null,
|
|
|
|
|
selectors: {
|
|
|
|
|
weightControl: { options: [{ name: '减重', value: '1' }, { name: '增重', value: '2' }], title: '请选择体重控制' },
|
2025-06-13 13:25:10 +08:00
|
|
|
labourIntensity: { options: [{ name: '轻劳力', value: '1' }, { name: '中等强度劳动', value: '2' }, { name: '重强度劳动', value: '3' }], title: '请选择劳动强度' },
|
2025-05-27 10:30:44 +08:00
|
|
|
ifHospitalized: { options: [{ name: '是', value: '1' }, { name: '否', value: '2' }], title: '是否住院' },
|
|
|
|
|
pregnantStatus: { options: [{ name: '保密', value: '0' },{ name: '是', value: '2' }, { name: '否', value: '1' }], title: '是否怀孕' }
|
|
|
|
|
},
|
|
|
|
|
chronicDiseaseOptions: [
|
|
|
|
|
{ label: '糖尿病', value: 'diabetes' },
|
|
|
|
|
{ label: '肾结石', value: 'kidney_stone' },
|
|
|
|
|
{ label: '心脏疾病', value: 'heart_disease' },
|
|
|
|
|
{ label: '痛风', value: 'gout' }
|
|
|
|
|
],
|
|
|
|
|
rules: {
|
|
|
|
|
height: { type: 'number', required: true, message: '请输入身高', trigger: ['blur', 'change'] },
|
|
|
|
|
weight: { type: 'number', required: true, message: '请输入体重', trigger: ['blur', 'change'] },
|
|
|
|
|
// labourIntensity: { type: 'string',required: true, message: '请选择劳动强度', trigger: ['change'] }
|
|
|
|
|
},
|
2025-07-03 19:49:12 +08:00
|
|
|
doctorAdvices:'暂无医嘱',
|
2025-05-27 10:30:44 +08:00
|
|
|
weightControlName: '',
|
|
|
|
|
labourIntensityName: '',
|
|
|
|
|
ifHospitalizedName: '',
|
|
|
|
|
pregnantStatusName: '',
|
2025-06-13 13:25:10 +08:00
|
|
|
chronicList:[],
|
|
|
|
|
form: {
|
|
|
|
|
nickName:null,
|
|
|
|
|
userId:null,
|
|
|
|
|
orgFullName:null,
|
|
|
|
|
userType:null,
|
|
|
|
|
mobile:null,
|
|
|
|
|
sex:1,
|
|
|
|
|
birthday:null,
|
|
|
|
|
doctorNum:null,
|
|
|
|
|
hospitalNum:null,
|
|
|
|
|
height:null,
|
|
|
|
|
weight:null,
|
|
|
|
|
bloodType:null,
|
|
|
|
|
chronicList:[],
|
|
|
|
|
pregnantStatus:null,
|
|
|
|
|
pregnancyDate:null,
|
|
|
|
|
ifHospitalized:null,
|
|
|
|
|
inpatientDate:null,
|
|
|
|
|
labourIntensity:null,
|
|
|
|
|
allergen:null,
|
|
|
|
|
doctorAdvice:null,
|
|
|
|
|
weightControl:null,
|
|
|
|
|
},//详情
|
2025-05-27 10:30:44 +08:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
watch: {
|
|
|
|
|
'form.height': 'calculateBMI',
|
|
|
|
|
'form.weight': 'calculateBMI',
|
|
|
|
|
'form.weightControl': 'updateDisplayBodyTypeName',
|
|
|
|
|
'form.labourIntensity': 'updateDisplayLaborIntensityName',
|
|
|
|
|
'form.ifHospitalized': 'updateDisplayHousingName',
|
|
|
|
|
'form.pregnantStatus': 'updatePregnantStatusName',
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
onLoad() {
|
|
|
|
|
this.getHealthDetail()
|
|
|
|
|
this.getHealthChronic()
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
//获取慢性病字典
|
|
|
|
|
async getHealthChronic() {
|
|
|
|
|
let param = {}
|
|
|
|
|
const res = await dictHealthChronicApi(param)
|
|
|
|
|
this.chronicList = res.data
|
|
|
|
|
console.log(res, '慢性病')
|
|
|
|
|
},
|
|
|
|
|
//获取健康信息
|
|
|
|
|
async getHealthDetail() {
|
|
|
|
|
let param = {
|
|
|
|
|
"userId": uni.getStorageSync('userId')
|
|
|
|
|
}
|
|
|
|
|
const res = await healthDetailApi(param)
|
|
|
|
|
this.form = res.data;
|
|
|
|
|
if(this.form.chronicIds){
|
|
|
|
|
this.form.chronicDiseases = this.form.chronicIds.split(",")
|
2025-07-03 19:49:12 +08:00
|
|
|
if(this.form.doctorAdvice=='1'){
|
|
|
|
|
this.doctorAdvices='禁食';
|
|
|
|
|
}else if(this.form.doctorAdvice=='2'){
|
|
|
|
|
this.doctorAdvices='流食';
|
|
|
|
|
}else if(this.form.doctorAdvice=='3'){
|
|
|
|
|
this.doctorAdvices='半流食';
|
|
|
|
|
}else if(this.form.doctorAdvice=='4'){
|
|
|
|
|
this.doctorAdvices='治疗饮食';
|
|
|
|
|
}
|
2025-05-27 10:30:44 +08:00
|
|
|
}
|
|
|
|
|
console.log(res, '详情')
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
calculateBMI() {
|
2025-06-12 14:41:57 +08:00
|
|
|
if (this.form.height && this.form.weight) {
|
|
|
|
|
const heightInMeters = this.form.height / 100
|
|
|
|
|
const bmi = (this.form.weight / (heightInMeters * heightInMeters)).toFixed(1)
|
|
|
|
|
this.form.bmi = bmi
|
|
|
|
|
}
|
2025-05-27 10:30:44 +08:00
|
|
|
},
|
|
|
|
|
showSelector(selector) {
|
|
|
|
|
this.currentSelector = selector;
|
|
|
|
|
this.selectorVisible = true;
|
|
|
|
|
},
|
|
|
|
|
hideSelector() {
|
|
|
|
|
this.currentSelector = null;
|
|
|
|
|
this.selectorVisible = false;
|
|
|
|
|
},
|
|
|
|
|
getSelectorOptions(selector) {
|
|
|
|
|
return this.selectors[selector]?.options || [];
|
|
|
|
|
},
|
|
|
|
|
getSelectorTitle(selector) {
|
|
|
|
|
return this.selectors[selector]?.title || '';
|
|
|
|
|
},
|
|
|
|
|
handleSelectorSelect(e) {
|
|
|
|
|
this.form[this.currentSelector] = e.value;
|
|
|
|
|
|
|
|
|
|
this.hideSelector();
|
|
|
|
|
},
|
|
|
|
|
updateDisplayBodyTypeName() {
|
|
|
|
|
this.weightControlName = this.getDisplayName('weightControl', this.form.weightControl);
|
|
|
|
|
},
|
|
|
|
|
updateDisplayLaborIntensityName() {
|
|
|
|
|
this.labourIntensityName = this.getDisplayName('labourIntensity', this.form.labourIntensity);
|
|
|
|
|
},
|
|
|
|
|
updateDisplayHousingName() {
|
|
|
|
|
this.ifHospitalizedName = this.getDisplayName('ifHospitalized', this.form.ifHospitalized);
|
|
|
|
|
},
|
|
|
|
|
updatePregnantStatusName() {
|
|
|
|
|
this.pregnantStatusName = this.getDisplayName('pregnantStatus', this.form.pregnantStatus);
|
|
|
|
|
},
|
|
|
|
|
getDisplayName(selector, value) {
|
|
|
|
|
const options = this.selectors[selector]?.options || [];
|
|
|
|
|
const selectedOption = options.find(option => option.value == value);
|
|
|
|
|
return selectedOption ? selectedOption.name : '';
|
|
|
|
|
},
|
|
|
|
|
handleSubmit() {
|
|
|
|
|
console.log('Form submitted:', this.form);
|
|
|
|
|
this.$refs.uForm.validate().then(valid => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
console.log('Form submitted:', this.form);
|
|
|
|
|
if(this.form.chronicDiseases&&this.form.chronicDiseases.length>0){
|
|
|
|
|
this.form.chronicIds = this.form.chronicDiseases.join(",")
|
|
|
|
|
}else{
|
|
|
|
|
this.form.chronicIds = ""
|
|
|
|
|
}
|
|
|
|
|
editHealthInfoApi(this.form).then((res) => {
|
|
|
|
|
uni.$u.toast('保存成功');
|
|
|
|
|
this.getHealthDetail()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
uni.$u.toast('请填写完整信息');
|
|
|
|
|
}
|
|
|
|
|
}).catch(errors => {
|
|
|
|
|
console.error('Validation failed:', errors);
|
|
|
|
|
uni.$u.toast('请检查并修正错误');
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
hideKeyboard() {
|
|
|
|
|
uni.hideKeyboard();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
.health-form {
|
|
|
|
|
padding: 20rpx;
|
|
|
|
|
background-color: #ffffff;
|
|
|
|
|
|
|
|
|
|
.chronic-diseases {
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
|
|
|
|
&__label {
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: $u-main-color;
|
|
|
|
|
margin-bottom: 20rpx;
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.submit-btn {
|
|
|
|
|
margin-top: 40rpx;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .u-form-item {
|
|
|
|
|
min-height: 100rpx;
|
|
|
|
|
|
|
|
|
|
&__body__right__content__slot {
|
|
|
|
|
text-align: right;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .u-checkbox {
|
|
|
|
|
margin-bottom: 16rpx;
|
|
|
|
|
}
|
|
|
|
|
</style>
|