From dc55c65b87ac2bf9e168fbb5250b8636b9902cec Mon Sep 17 00:00:00 2001 From: zhanglei <350328959@qq.com> Date: Mon, 9 Mar 2026 16:42:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(home):=20=E6=96=B0=E5=A2=9E=E5=81=A5?= =?UTF-8?q?=E5=BA=B7=E9=93=B6=E8=A1=8CH5=E9=93=BE=E6=8E=A5=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=9C=8D=E5=8A=A1=E7=AB=AF=E5=8A=A0=E5=AF=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 EncryptInfoBean 数据类,承载服务端返回的加密参数 - 新增 getSysEnCryptInfo 接口及完整数据层/视图层调用链 - 修改 getHomeBankH5Url() 仅返回参数字符串,由调用方拼接完整 URL - 将 HOME_BANK_H5 改为 public,支持 Fragment 层直接引用 - 测试环境下健康银行入口通过加密参数跳转 WebActivity - 登录后预加载加密信息,提升首次点击响应速度 Co-Authored-By: Claude Sonnet 4.6 --- .../xjjk/healthyclients/bean/home/HomeBean.kt | 3 ++ .../xjjk/healthyclients/data/api/HomeApi.kt | 7 ++++ .../data/repository/HomeRepository.kt | 9 +++++ .../healthyclients/fragment/HomeFragment.kt | 36 +++++++++++++++---- .../xjjk/healthyclients/retrofit/UrlConfig.kt | 6 ++-- .../ui/viewmodel/HomeViewModel.kt | 14 ++++++++ 6 files changed, 66 insertions(+), 9 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 ec6f816..199bb0f 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 @@ -49,3 +49,6 @@ data class HomeBannerBean( val updateTime: String ) +data class EncryptInfoBean( + val encryptData: String? +) diff --git a/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt b/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt index f49b2bc..001cbc6 100644 --- a/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt +++ b/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt @@ -4,6 +4,7 @@ import com.xjjk.healthyclients.bean.home.HomeBannerBean import com.xjjk.healthyclients.bean.home.HomeNoticeBean import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean import com.xjjk.healthyclients.bean.home.WatchInfoBean +import com.xjjk.healthyclients.bean.home.EncryptInfoBean import com.xjjk.healthyclients.bean.user.CheckInBean import com.xjjk.healthyclients.bean.user.PointDetailBean import com.xjjk.healthyclients.bean.user.PointRank @@ -85,5 +86,11 @@ interface HomeApi { @GET("/health-watch/api/watchData/findWatchInfo") suspend fun getHomeWatchInfo(@QueryMap params: MutableMap): ApiResponse + /** + * weburl参数加密 + */ + @GET("/health-system/api/sys/encryptInfo") + suspend fun getSysEnCryptInfo(@QueryMap params: MutableMap): ApiResponse + } \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt b/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt index fe22256..79f1463 100644 --- a/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt +++ b/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt @@ -1,6 +1,7 @@ package com.xjjk.healthyclients.data.repository import com.xjjk.healthyclients.base.repository.BaseRepository +import com.xjjk.healthyclients.bean.home.EncryptInfoBean import com.xjjk.healthyclients.bean.home.HomeBannerBean import com.xjjk.healthyclients.bean.home.HomeNoticeBean import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean @@ -100,4 +101,12 @@ object HomeRepository : BaseRepository() { service.getHomeWatchInfo(map) } } + + suspend fun getSysEnCryptInfo(str: String?): ApiResponse { + return apiCall { + val map = mutableMapOf() + map["str"] = str + service.getSysEnCryptInfo(map) + } + } } \ 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 0f36a8c..1fe6d7a 100644 --- a/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt +++ b/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt @@ -1,6 +1,7 @@ package com.xjjk.healthyclients.fragment import android.os.Bundle +import android.text.TextUtils import android.view.View import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope @@ -17,12 +18,14 @@ import com.xjjk.healthyclients.base.BaseVMBFragment import com.xjjk.healthyclients.bean.guidance.GuidanceListBean import com.xjjk.healthyclients.databinding.FragmentHomeBinding import com.xjjk.healthyclients.event.HomeTabChangeEvent +import com.xjjk.healthyclients.retrofit.UrlConfig import com.xjjk.healthyclients.superfuntion.initColors import com.xjjk.healthyclients.superfuntion.showBanner import com.xjjk.healthyclients.superfuntion.startAppointmentWaitAffirmActivity import com.xjjk.healthyclients.superfuntion.startGroupChat import com.xjjk.healthyclients.superfuntion.startLoginActivity import com.xjjk.healthyclients.superfuntion.startMyGuidanceActivity +import com.xjjk.healthyclients.superfuntion.startWebActivity import com.xjjk.healthyclients.ui.activity.EmptyActivity import com.xjjk.healthyclients.ui.activity.LoginActivity import com.xjjk.healthyclients.ui.activity.guidance.adapter.GuidanceFragmentDoctorAdapter @@ -169,16 +172,26 @@ class HomeFragment : } R.id.home_head_tab4 -> { + if (UrlConfig.baseUrlType == UrlConfig.BaseUrlType.TEST) { + if (DataStoreManager.isLogin()) { + val value = mViewModel.enCryptInfoUrl.value + if (TextUtils.isEmpty(value)) { + mViewModel.getSysEnCryptInfo(UrlConfig.getHomeBankH5Url()) + showToast("网络错误") + return + } + requireContext().startWebActivity(UrlConfig.HOME_BANK_H5+"?param="+ value, myTitle = "健康银行") + } else { + startLoginActivity(requireContext()) + } + return + } + val bundle = Bundle() bundle.putString("title", "健康银行") toActivity(EmptyActivity::class.java, bundle) -// -// if (DataStoreManager.isLogin()) { -// requireContext().startWebActivity(UrlConfig.getHomeBankH5Url(), myTitle = "健康银行") -// } else { -// startLoginActivity(requireContext()) -// } + } R.id.home_head_tab3 -> { @@ -327,6 +340,16 @@ class HomeFragment : } } } +// lifecycleScope.launch{ +// repeatOnLifecycle(Lifecycle.State.CREATED){ +// mViewModel.enCryptInfoUrl.collectLatest { url -> +// requireContext().startWebActivity( +// UrlConfig.HOME_BANK_H5+"?param="+url, +// myTitle = "健康银行" +// ) +// } +// } +// } } @@ -338,6 +361,7 @@ class HomeFragment : if (DataStoreManager.isLogin()) { homeNoticeStartRepeat() mViewModel.getHomeWatchInfo(DataStoreManager.getUserId()) + mViewModel.getSysEnCryptInfo(UrlConfig.getHomeBankH5Url()) } } diff --git a/app/src/main/java/com/xjjk/healthyclients/retrofit/UrlConfig.kt b/app/src/main/java/com/xjjk/healthyclients/retrofit/UrlConfig.kt index 5cd87eb..0674605 100644 --- a/app/src/main/java/com/xjjk/healthyclients/retrofit/UrlConfig.kt +++ b/app/src/main/java/com/xjjk/healthyclients/retrofit/UrlConfig.kt @@ -28,7 +28,7 @@ object UrlConfig { // 安眼修改密码 const val ANYAN_CHANGE_PASSWORD_H5 = "https://sso.iosp.ydpt.tech/SSOManageClient/userController/changePassword" - private const val HOME_BANK_H5 = "https://gstest.superwx.cn/healthbank/index.html" + const val HOME_BANK_H5 = "https://gstest.superwx.cn/healthbank/index.html" val baseUrlType: BaseUrlType = BaseUrlType.PRODUCT @@ -100,12 +100,12 @@ object UrlConfig { } /** - * 手机银行外链h5 + * 手机银行外链h5 参数 */ fun getHomeBankH5Url(): String{ var httpUrl = getDefaultBaseUrl().toHttpUrl() - return HOME_BANK_H5+"?scheme=" + httpUrl.scheme + + return "scheme=" + httpUrl.scheme + "&host=" + httpUrl.host + "&tokenF=" + DataStoreManager.getToken() diff --git a/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt b/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt index e9a7e0a..c0e65e2 100644 --- a/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt @@ -23,6 +23,8 @@ class HomeViewModel : BaseViewModel() { var homeBannerList = MutableSharedFlow?>() var sessionPicUrl = MutableSharedFlow() + var enCryptInfoUrl = MutableStateFlow(null) + //手表 var watchInfo = MutableSharedFlow() var watchAllData = MutableSharedFlow?>() @@ -164,5 +166,17 @@ class HomeViewModel : BaseViewModel() { ) } + fun getSysEnCryptInfo(str: String?) { + launch(showDialog = false, + { + handleRequest( + HomeRepository.getSysEnCryptInfo(str), + successBlock = { + enCryptInfoUrl.emit(it.result?.encryptData) + }) + } + ) + } + } \ No newline at end of file