From 7cca7e0b793694a015e520ca41ccdc3a562fdb7c Mon Sep 17 00:00:00 2001 From: zhangxiao <1441011491@qq.com> Date: Wed, 15 Jul 2026 17:50:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E6=B7=BB=E5=8A=A0=E7=BE=A4?= =?UTF-8?q?=E8=81=8A=E5=8F=B3=E4=BE=A7=E5=AF=BC=E8=88=AA=E6=8A=BD=E5=B1=89?= =?UTF-8?q?=E5=92=8C=E5=81=A5=E5=BA=B7=E6=A1=A3=E6=A1=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 集成 androidx.drawerlayout:drawerlayout:1.2.0 依赖 - 新增 chat_activity_with_navigation.xml 布局文件实现抽屉布局 - 新增 chat_navigation_header.xml 头部布局显示群成员信息 - 在 TUIBaseChatActivity 中实现抽屉打开关闭功能 - 修改 InputView 中的群视频通话逻辑,针对特定包名使用新方案 - 添加 ProposalBean 数据模型用于健康档案信息 - 实现 ProposalActivity 页面展示患者健康档案详情 - 添加 EmergencyApi 接口获取健康档案数据 - 在 HomeFragment 中增加登录验证跳转健康档案页面 - 完善群聊界面右滑抽屉显示群成员列表功能 --- .../xjjk/healthyclients/bean/home/HomeBean.kt | 67 + .../healthyclients/data/api/EmergencyApi.kt | 6 + .../data/repository/EmergencyRepository.kt | 6 +- .../healthyclients/fragment/HomeFragment.kt | 10 +- .../ui/activity/ProposalActivity.kt | 83 + .../ui/viewmodel/ProposalViewModel.kt | 19 + app/src/main/res/layout/activity_proposal.xml | 2192 ++++++++++------- 7 files changed, 1479 insertions(+), 904 deletions(-) diff --git a/app/src/main/java/com/xjjk/healthyclients/bean/home/HomeBean.kt b/app/src/main/java/com/xjjk/healthyclients/bean/home/HomeBean.kt index 97e6708..7f28eb4 100644 --- a/app/src/main/java/com/xjjk/healthyclients/bean/home/HomeBean.kt +++ b/app/src/main/java/com/xjjk/healthyclients/bean/home/HomeBean.kt @@ -58,3 +58,70 @@ data class HomeBankBean( val totalPoints: String? ) +data class ProposalBean( + val id: String, + val empId: String, + val name: String, + val age: Int, + val sexCode: String?, + val workUnit: String?, + val careLiaisonName: String?, + val idNo: String, + val phone: String, + val careStatus: String, + val dataLevel: Int, + val negativeList: String, + val caseInfo: String, + val riskLevel: String, + val year: String, + val flagFat: Int, + val bmi: String, + val height: String, + val weight: String, + val targetWeight: String, + val targetBmi: String, + val bmiCurrent: String, + val waistNew: String, + val bodyFatPercentNew: String, + val weightRiskType: String, + val hypertension: Int, + val systolicPressureAvg: String, + val systolicPressureTarget: String, + val diastolicPressureAvg: String, + val diastolicPressureTarget: String, + val diabetes: Int, + val glu: String, + val bloodSugarTarget: String, + val ldl: String, + val ldlTarget: String, + val tc: String, + val tcTarget: String, + val tg: String, + val tgTarget: String, + val uricAcid: String, + val uricAcidTarget: String, + val homocysteine: String, + val homocysteineTarget: String, + val bloodK: String, + val chd: String, + val cvd: String, + val af: String, + val ca: String, + val indicatorListStr: String, + val indicatorListStrOrigin: String, + val screeningProjects: String, + val treatPlan: String, + val treatPlanResponse: String, + val dietSuggestion: String, + val dietSuggestionResponse: String, + val sportGuide: String, + val sportGuideResponse: String, + val lifeManage: String, + val lifeManageResponse: String, + val cabinOpinion: String, + val cabinOpinionTime: String, + val cabinOpinionUserName: String, + val expertOpinion: String, + val expertOpinionTime: String, + val expertOpinionUserName: String +) \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/data/api/EmergencyApi.kt b/app/src/main/java/com/xjjk/healthyclients/data/api/EmergencyApi.kt index eb19b7b..845957e 100644 --- a/app/src/main/java/com/xjjk/healthyclients/data/api/EmergencyApi.kt +++ b/app/src/main/java/com/xjjk/healthyclients/data/api/EmergencyApi.kt @@ -8,6 +8,7 @@ import com.xjjk.healthyclients.bean.emergency.HospitalBean import com.xjjk.healthyclients.bean.emergency.LocationResourceBean import com.xjjk.healthyclients.bean.emergency.OrderThroughBean import com.xjjk.healthyclients.bean.emergency.initUserOrderPageBean +import com.xjjk.healthyclients.bean.home.ProposalBean import com.xjjk.healthyclients.data.bean.ApiResponse import okhttp3.RequestBody import retrofit2.http.Body @@ -82,5 +83,10 @@ interface EmergencyApi { */ @GET("/health-emergency/api/emergency/createGroupMag") suspend fun getIMGroupInfo(@QueryMap params: MutableMap): ApiResponse + /** + * 获取一人一案 + */ + @GET("/health-emergency/emergency/LargeScreenNew/onePersonCase") + suspend fun getProposalInfo(): ApiResponse } \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/data/repository/EmergencyRepository.kt b/app/src/main/java/com/xjjk/healthyclients/data/repository/EmergencyRepository.kt index f3da36a..a67a569 100644 --- a/app/src/main/java/com/xjjk/healthyclients/data/repository/EmergencyRepository.kt +++ b/app/src/main/java/com/xjjk/healthyclients/data/repository/EmergencyRepository.kt @@ -11,6 +11,7 @@ import com.xjjk.healthyclients.bean.emergency.HospitalBean import com.xjjk.healthyclients.bean.emergency.LocationResourceBean import com.xjjk.healthyclients.bean.emergency.OrderThroughBean import com.xjjk.healthyclients.bean.emergency.initUserOrderPageBean +import com.xjjk.healthyclients.bean.home.ProposalBean import com.xjjk.healthyclients.data.api.EmergencyApi import com.xjjk.healthyclients.data.bean.ApiResponse import com.xjjk.healthyclients.retrofit.RetrofitManager @@ -107,8 +108,6 @@ object EmergencyRepository : BaseRepository() { return CommonRepository.getCommonSettingMenuList("category") } - - suspend fun getIMGroupInfo(groupName: String, longitude: Double, latitude: Double): ApiResponse { var map = mutableMapOf() @@ -118,4 +117,7 @@ object EmergencyRepository : BaseRepository() { return apiCall { service.getIMGroupInfo(map) } } + suspend fun getProposalInfo(): ApiResponse { + return apiCall { service.getProposalInfo() } + } } \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt b/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt index 853376b..df5c122 100644 --- a/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt +++ b/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt @@ -209,9 +209,13 @@ class HomeFragment : } R.id.img_right -> { - val bundle = Bundle() - bundle.putString("title", "一人一案") - toActivity(ProposalActivity::class.java, bundle) + if (DataStoreManager.isLogin()) { + val bundle = Bundle() + bundle.putString("title", "一人一案") + toActivity(ProposalActivity::class.java, bundle) + } else { + startLoginActivity(requireContext()) + } } R.id.home_head_tab1 -> { diff --git a/app/src/main/java/com/xjjk/healthyclients/ui/activity/ProposalActivity.kt b/app/src/main/java/com/xjjk/healthyclients/ui/activity/ProposalActivity.kt index 6465a17..e8556fc 100644 --- a/app/src/main/java/com/xjjk/healthyclients/ui/activity/ProposalActivity.kt +++ b/app/src/main/java/com/xjjk/healthyclients/ui/activity/ProposalActivity.kt @@ -2,10 +2,16 @@ package com.xjjk.healthyclients.ui.activity import android.os.Bundle import android.view.View +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.xjjk.healthyclients.R import com.xjjk.healthyclients.base.BaseVMBActivity +import com.xjjk.healthyclients.bean.home.ProposalBean import com.xjjk.healthyclients.databinding.ActivityProposalBinding import com.xjjk.healthyclients.ui.viewmodel.ProposalViewModel +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch /** * 一人一案(健康档案)页面 @@ -20,6 +26,83 @@ class ProposalActivity : override fun initData() { // 加载健康档案数据 + + } + override fun createObserve() { + super.createObserve() + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + mViewModel.proposalInfo.collectLatest { + setProposalInfo(it) + } + } + } + } + private fun setProposalInfo(proposalBean: ProposalBean?) { + proposalBean?.let { + // 患者信息 + mBinding.tvPatientName.text = it.name + mBinding.tvPatientGenderAge.text = it.sexCode + " · " + it.age + mBinding.tvDocumentStatus.text = it.careStatus + mBinding.tvPatientCompany.text = it.workUnit + mBinding.tvIdNumber.text = it.idNo + mBinding.tvPhone.text = it.phone + + // 关爱管理信息 + mBinding.tvLevel.text = it.dataLevel.toString() + mBinding.tvLiaisonName.text = it.careLiaisonName + mBinding.tvNegativeList.text = it.negativeList + + // 档案与标签 + mBinding.tvFlagFat.text = it.flagFat.toString() + mBinding.tvWeight.text = it.weight + mBinding.tvHeight.text = it.height + mBinding.tvBmi.text = it.bmiCurrent + mBinding.tvStandardWeight.text = it.targetWeight + + // 心血管健康 + mBinding.tvBloodPressure.text = it.hypertension.toString() + mBinding.tvSystolicAvg.text = it.systolicPressureAvg + mBinding.tvSystolicTarget.text = it.systolicPressureTarget + mBinding.tvSystolic.text = it.systolicPressureAvg + mBinding.tvDiastolicAvg.text = it.diastolicPressureAvg + mBinding.tvDiastolicTarget.text = it.diastolicPressureTarget + mBinding.tvDiastolic.text = it.diastolicPressureAvg + + // 代谢指标 + mBinding.tvDiabetes.text = it.diabetes.toString() + mBinding.llDiabetesTag.visibility = if (it.diabetes != 0) View.VISIBLE else View.GONE + mBinding.tvFbsValue.text = it.glu + mBinding.tvFbsTarget.text = it.bloodSugarTarget + mBinding.tvFbsCurrent.text = it.glu + + // 血脂四项 + mBinding.tvTcValue.text = it.tc + mBinding.tvTcTarget.text = it.tcTarget + mBinding.tvTcCurrent.text = it.tc + mBinding.tvTgValue.text = it.tg + mBinding.tvTgTarget.text = it.tgTarget + mBinding.tvTgCurrent.text = it.tg + mBinding.tvLdlValue.text = it.ldl + mBinding.tvLdlTarget.text = it.ldlTarget + mBinding.tvLdlCurrent.text = it.ldl + + // 肾脏与骨骼代谢 + mBinding.tvUaValue.text = it.uricAcid + mBinding.tvUaTarget.text = it.uricAcidTarget + mBinding.tvUaCurrent.text = it.uricAcid + + // 特殊代谢指标 + mBinding.tvHcyValue.text = it.homocysteine + mBinding.tvHcyTarget.text = it.homocysteineTarget + mBinding.tvHcyCurrent.text = it.homocysteine + + // 医疗意见与记录 + mBinding.tvCabinTime.text = it.cabinOpinionTime + mBinding.tvCabinReporter.text = it.cabinOpinionUserName + mBinding.tvDoctorTime.text = it.expertOpinionTime + mBinding.tvDoctorReporter.text = it.expertOpinionUserName + } } override fun bindEvent() { diff --git a/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/ProposalViewModel.kt b/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/ProposalViewModel.kt index e9600d9..48480c2 100644 --- a/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/ProposalViewModel.kt +++ b/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/ProposalViewModel.kt @@ -1,13 +1,32 @@ package com.xjjk.healthyclients.ui.viewmodel import com.xjjk.healthyclients.base.viewmodel.BaseViewModel +import com.xjjk.healthyclients.bean.home.ProposalBean +import com.xjjk.healthyclients.data.repository.EmergencyRepository +import com.xjjk.healthyclients.superfuntion.handleRequest +import com.xjjk.healthyclients.superfuntion.launch +import kotlinx.coroutines.flow.MutableStateFlow /** * 一人一案(健康档案)ViewModel */ class ProposalViewModel : BaseViewModel() { + var proposalInfo = MutableStateFlow(null) override fun init() { // 初始化逻辑 + getProposalInfo() + } + + fun getProposalInfo() { + launch({ + handleRequest( + EmergencyRepository.getProposalInfo(), + successBlock = { + it.result?.let { it1 -> + proposalInfo.emit(it1) + } + }) + }) } } diff --git a/app/src/main/res/layout/activity_proposal.xml b/app/src/main/res/layout/activity_proposal.xml index 9d2f009..6685ee3 100644 --- a/app/src/main/res/layout/activity_proposal.xml +++ b/app/src/main/res/layout/activity_proposal.xml @@ -39,260 +39,291 @@ android:layout_marginStart="16dp" android:layout_marginTop="12dp" android:layout_marginEnd="16dp" - android:background="@drawable/bg_white_round_12" + android:background="@color/white" android:orientation="vertical"> - + + + + + android:layout_weight="1" + android:orientation="vertical"> - - - - - - - + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:orientation="horizontal"> + android:textColor="@color/text_primary_25" + android:textSize="18sp" + android:textStyle="bold" + tools:text="艾比拜·牙库甫" /> + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + android:text="档案已建立" + android:textColor="@color/white" + android:textSize="13sp" /> - - - + + android:layout_height="wrap_content" + android:layout_marginStart="12dp" + android:layout_marginTop="12dp" + android:layout_marginEnd="12dp" + android:layout_marginBottom="12dp" + android:background="@drawable/bg_gray_round_12" + android:orientation="vertical" + android:paddingStart="12dp" + android:paddingEnd="12dp"> - + + + + + + + + + + + + + - + + + + + + + + android:layout_width="3dp" + android:layout_height="16dp" + android:background="@color/theme_color" /> - + + + + + + android:layout_width="wrap_content" + android:layout_height="24dp" + android:background="@drawable/bg_teal_round_24" + android:gravity="center" + android:paddingStart="10dp" + android:paddingEnd="10dp"> - - + android:text="重点关爱" + android:textColor="@color/white" + android:textSize="12sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -381,74 +413,60 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:orientation="vertical"> + android:gravity="bottom" + android:orientation="horizontal"> + + - - - - - - - - + android:textSize="14sp" /> - + + + + + + - - - - - - - - + - + @@ -484,43 +504,71 @@ - + android:background="@drawable/bg_gray_round_8"> - + android:layout_gravity="center" + android:gravity="center" + android:orientation="vertical"> + + + + + + - + android:layout_marginEnd="4dp" + android:background="@drawable/bg_teal_tag_round_4_small" + android:gravity="center" + android:paddingStart="4dp" + android:paddingTop="1dp" + android:paddingEnd="4dp" + android:paddingBottom="1dp" + android:text="标准" + android:textColor="@color/white" + android:textSize="9sp" /> + @@ -551,7 +599,7 @@ @@ -613,6 +661,7 @@ android:background="@drawable/bg_red_circle" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + android:text="项目" + android:textColor="@color/text_primary_25" + android:textSize="12sp" /> - - - - - - - - - + android:text="GLU检测值" + android:textColor="@color/text_primary_25" + android:textSize="12sp" /> - + - - + + + + + + + + + + + + @@ -767,7 +1080,6 @@ android:layout_marginEnd="16dp" android:background="@color/divider_ea" /> - + android:layout_height="32dp" + android:orientation="horizontal"> - - + + + android:layout_height="32dp" + android:orientation="horizontal"> @@ -833,8 +1152,9 @@ + + + android:layout_height="32dp" + android:orientation="horizontal"> @@ -871,8 +1202,9 @@ + + + android:layout_height="32dp" + android:orientation="horizontal"> @@ -909,8 +1252,9 @@ + + + android:layout_height="32dp" + android:orientation="horizontal"> @@ -947,8 +1302,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1298,56 +1394,65 @@ android:orientation="vertical" android:padding="16dp"> + + android:layout_height="32dp" + android:orientation="horizontal"> - - - - - + + + + + + @@ -1355,8 +1460,9 @@ + + - + - + + + + - + android:padding="16dp"> + - + + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1.5" + android:background="@drawable/bg_table_header_cell" + android:gravity="center" + android:text="检测值" + android:textColor="@color/text_primary_25" + android:textSize="12sp" /> + + + + - - - - - - - - - - - - - - - - + - - + android:layout_height="match_parent" + android:layout_weight="2" + android:background="@drawable/bg_table_data_cell" + android:gravity="center" + android:text="同型半胱氨酸" + android:textColor="@color/text_tab_color" + android:textSize="12sp" /> + android:id="@+id/tv_hcy_value" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1.5" + android:background="@drawable/bg_table_data_cell" + android:gravity="center" + android:textColor="@color/text_primary_25" + android:textSize="12sp" + tools:text="3.8mmol/L" /> + + + + + + + + + + + + android:layout_width="3dp" + android:layout_height="16dp" + android:background="@color/theme_color" /> - - + android:layout_marginStart="8dp" + android:text="医疗意见与记录" + android:textColor="@color/text_primary_25" + android:textSize="16sp" + android:textStyle="bold" /> + - + + - + - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +