中建365-X2手表接入/二期有关UI开发

develop
wlh 1 year ago
parent 6c665893d1
commit 0a3674eea8

@ -2,6 +2,7 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: 'com.huawei.agconnect' apply plugin: 'com.huawei.agconnect'
apply plugin: 'kotlin-parcelize'
def rely = rootProject.ext.relyOn def rely = rootProject.ext.relyOn

@ -142,6 +142,10 @@
<activity android:name=".activity.RecognizeResultAct" <activity android:name=".activity.RecognizeResultAct"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity android:name=".activity.DeviceActiveAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".activity.OneKeyBinderDeviceAct" <activity android:name=".activity.OneKeyBinderDeviceAct"
android:launchMode="singleTop" android:launchMode="singleTop"
@ -378,7 +382,7 @@
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /> <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="com.xty.healthuser" /> <category android:name="com.zj365.dc" />
</intent-filter> </intent-filter>
</receiver> </receiver>
@ -387,14 +391,14 @@
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask" android:launchMode="singleTask"
android:taskAffinity="com.xty.healthuser" android:taskAffinity="com.zj365.dc"
android:theme="@style/Theme.AppCompat.NoActionBar.Transparent"></activity> android:theme="@style/Theme.AppCompat.NoActionBar.Transparent"></activity>
<activity <activity
android:name="com.zj365.dc.wxapi.WXPayEntryActivity" android:name="com.zj365.dc.wxapi.WXPayEntryActivity"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask" android:launchMode="singleTask"
android:taskAffinity="com.xty.healthuser" android:taskAffinity="com.zj365.dc"
android:theme="@style/Theme.AppCompat.NoActionBar.Transparent" /> android:theme="@style/Theme.AppCompat.NoActionBar.Transparent" />
<!--适配华为huawei刘海屏--> <!--适配华为huawei刘海屏-->
@ -409,9 +413,15 @@
android:name="com.hihonor.push.app_id" android:name="com.hihonor.push.app_id"
android:value="${HONOR_APPID}" /> android:value="${HONOR_APPID}" />
<meta-data <meta-data
android:name="com.amap.api.v2.apikey" android:name="com.amap.api.v2.apikey"
android:value="5a316db0d8149008c774308b33d47174"/> android:value="5a316db0d8149008c774308b33d47174"/>
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
</application> </application>

@ -0,0 +1,515 @@
package com.zj365.dc.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.text.SpannableString
import android.text.Spanned
import android.text.TextPaint
import android.text.style.ClickableSpan
import android.view.View
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.alibaba.android.arouter.facade.annotation.Route
import com.google.gson.Gson
import com.tamsiree.rxkit.RxActivityTool
import com.tamsiree.rxkit.RxKeyboardTool
import com.xty.base.act.BaseVmAct
import com.xty.common.*
import com.xty.common.aMapUtils.AmapInit
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
import com.xty.common.bracelet.*
import com.xty.common.event.BindDevEvent
import com.xty.common.event.BlueToothConnectEvent
import com.xty.common.event.BluetoothEvent
import com.xty.common.event.MyInfoEvent
import com.xty.common.util.CommonToastUtils
import com.xty.common.util.CommonUtils
import com.xty.common.util.PermissionUtils
import com.xty.common.xqr_code.XQRCodeAct
import com.xuexiang.xqrcode.XQRCode
import com.yanzhenjie.permission.runtime.Permission
import com.zj365.dc.databinding.ActDeviceActiveBinding
import com.zj365.dc.model.ScanInfoBean
import com.zj365.dc.vm.BasicInfoVm
import com.zj365.health.weight.SignDialog
import com.zj365.mime.weight.FactorySettingDialog
import com.zj365.mime.weight.NoticeSettingDialog
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
*
* 设备激活
*/
@SuppressLint("ObsoleteSdkInt")
@Route(path = ARouterUrl.DEVICE_ACTIVE)
class DeviceActiveAct : BaseVmAct<BasicInfoVm>() {
val binding by lazy { ActDeviceActiveBinding.inflate(layoutInflater) }
override fun setLayout() = binding.root
// var user: SettingBean.User? = null
var signPath = ""//签名地址
var isAgree = false
val SERVER_AGREEMENT = 1000 //服务协议
var isLogin: Boolean = false
//签名
val dialog by lazy {
SignDialog(this) {
signPath = it
binding.mImageSign.setImage(this, it)
}
}
private val factorySettingDialog by lazy {
FactorySettingDialog(
this,
"蓝牙手表需要访问位置、蓝牙权限。"
) {
getBluePermission(baseContext) {
if (it) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& !isGpsOpen(baseContext)
) {
requestGPSPermission()
}
} else {
finish()
}
}
}
}
private var headerPath = ""
private var name = ""
private var sexType = ""
private var idCard = ""
private var height = ""
private var wieght = ""
private var address = ""
private var otherName = ""
private var otherPhone = ""
private var rela = ""
private var provincey = ""
private var city = ""
private var district = ""
private var lat = ""
private var lng = ""
private var medicName = ""
private var medicIds = ""
private var diseaseList = ""
private var birthDay = ""
private var birthdayType = -1
private var type = 0//0:蓝牙设备 默认 1:4G设备
private var watchName = ""
override fun initData() {
super.initData()
isDarkBar = true
isLogin = intent.getBooleanExtra("isLogin", false)
intent.extras?.let {
headerPath = getIntentStringData(it, "headerPath")
name = getIntentStringData(it, "name")
sexType = getIntentStringData(it, "sexType")
idCard = getIntentStringData(it, "idCard")
height = getIntentStringData(it, "height")
wieght = getIntentStringData(it, "wieght")
address = getIntentStringData(it, "address")
otherName = getIntentStringData(it, "otherName")
otherPhone = getIntentStringData(it, "otherPhone")
rela = getIntentStringData(it, "rela")
provincey = getIntentStringData(it, "provincey")
city = getIntentStringData(it, "city")
district = getIntentStringData(it, "district")
lat = getIntentStringData(it, "lat")
lng = getIntentStringData(it, "lng")
medicName = getIntentStringData(it, "medicName")
medicIds = getIntentStringData(it, "medicIds")
diseaseList = getIntentStringData(it, "diseaseList")
birthDay = getIntentStringData(it, "birthDay")
birthdayType = it.getInt("birthdayType", -1)
type = it.getInt("type", 0)
}
}
private fun getIntentStringData(it: Bundle, key: String): String {
return if (it.getString(key).isNullOrEmpty()) "" else it.getString(key).toString()
}
override fun initView() {
super.initView()
statusBar(binding.title.mView)
binding.title.mTvTitle.text = getString(R.string.active_action)
binding.title.mIvBack.setOnClickListener {
if (isLogin) { //如果是走注册流程过来的,退出该界面,则进入主界面
RouteManager.goAct(ARouterUrl.MAIN_ACT)
RxActivityTool.finishAllActivity()
} else {
/* EventBus.getDefault().post(BindDevEvent())
CommonToastUtils.showToast("绑定成功")*/
finish()
}
}
binding.mSign.setOnClickListener {//签名信息填写
dialog.show()
}
binding.mSubmit.setOnClickListener {
submitData()
}
if (type == 0) {//是蓝牙设备
factorySettingDialog.isShow()
binding.mBlueTooth.setOnClickListener {//蓝牙设备搜索绑定
RxKeyboardTool.hideSoftInput(this)
bundle.clear()
bundle.putString("devMac", if (it.tag == null) "" else it.tag.toString())
bundle.putString("devName", (it as TextView).text.toString())
RouteManager.goAct(ARouterUrl.DEVICE_CONNECT, bundle)
}
binding.mDeviceLayout.visibility = View.VISIBLE
if (YCBBlueConnectHelper.getBlueStatus(false)) {//如果当前已经连接手表
binding.mBlueTooth.text = Const.connectBlueDevice.deviceName
binding.mBlueTooth.tag = Const.connectBlueDevice.deviceMac
}
} else {//4G设备
binding.mDeviceLayout.visibility = View.GONE
binding.title.mIvReight.apply {
visibility = View.VISIBLE
setImageResource(com.zj365.health.R.mipmap.ic_scan)
setOnClickListener {
startScan()
}
}
}
setPrive()
}
private val reqGpsPermissionDialog by lazy {
NoticeSettingDialog(this, "请打开GPS权限", {
finish()
}) {
// 转到手机设置界面用户设置GPS
var intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
startActivityForResult(intent, 1001); // 设置完成后返回到原来的界面
}
}
private fun requestGPSPermission() {
reqGpsPermissionDialog.show()
}
// /**
// * 检测拍摄权限
// */
// private fun checkCameraPermissions() {
// val permission = arrayOf(Manifest.permission.CAMERA)
// Acp.getInstance(this).request(
// AcpOptions.Builder()
// .setPermissions(
// *permission
// ).build(),
// object : AcpListener {
// override fun onGranted() {
//
// }
//
// override fun onDenied(permissions: List<String>) {
// finish()
// }
// })
// }
/**
* 扫码
*/
private fun startScan() {
PermissionUtils.requestPermission(this,
{
XQRCodeAct.start(
this@DeviceActiveAct,
XQRCodeAct.QRCODE_AGREEMENT,
com.zj365.health.R.style.XQRCodeTheme_Custom
)
}, Permission.CAMERA)
}
/**
* 隐私协议
*/
private fun setPrive() {
binding.mPrivate.setOnClickListener {
if (!isAgree) {
forwardPrivate()
return@setOnClickListener
}
it.isSelected = !it.isSelected
}
binding.mPrivate.movementMethod = MyLinkedMovementMethod().getInstance()
var span = SpannableString(getString(R.string.agree_private_active))
span.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
forwardPrivate()
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color =
ContextCompat.getColor(this@DeviceActiveAct, R.color.col_02c)
ds.isUnderlineText = false
}
}, 2, 8, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
binding.mPrivate.text = span
binding.mPrivate.highlightColor = Color.TRANSPARENT
}
/**
* 跳转至隐私协议页面
*/
private fun forwardPrivate() {
bundle.clear()
bundle.putString("title", "服务协议")
bundle.putInt("type", Const.AGREEMENT_6)
RouteManager.goActRequest(
ARouterUrl.RICH_TEXT,
this@DeviceActiveAct,
SERVER_AGREEMENT,
bundle
)
}
private fun submitData() {
RxKeyboardTool.hideSoftInput(this)
if (!isAgree) {
CommonToastUtils.showToast(R.string.please_agree_server)
return
}
if (type == 0 && binding.mBlueTooth.text.isNullOrEmpty()) {
CommonToastUtils.showToast(R.string.please_input_device_code)
return
}
if (signPath.isNullOrEmpty()) {
CommonToastUtils.showToast("请完善签名")
return
}
if (binding.mDevNum.text.isNullOrEmpty()) {
CommonToastUtils.showToast(R.string.please_input_device_code)
return
}
if (binding.mActiveCode.text.isNullOrEmpty()) {
CommonToastUtils.showToast(R.string.please_input_active_code)
return
}
var devMc = if (type == 0) {
if (binding.mBlueTooth.tag == null) "" else binding.mBlueTooth.tag as String
} else {//4G直接传设备号
binding.mDevNum.text.toString()
}
var devName = if (type == 0) {
binding.mBlueTooth.text.toString()
} else {
if (watchName.isNullOrEmpty()) {
if (devMc.startsWith("818") && devMc.length > 6) {
"A3-${devMc.substring(devMc.length - 7)}"
} else {
"4G-$devMc"
}
} else {
watchName
}
}
if (otherPhone.isNullOrEmpty() || height.isNullOrEmpty() || wieght.isNullOrEmpty() || otherName.isNullOrEmpty()) {
mViewModel.activeDevice(
signPath,
binding.mDevNum.text.toString(),
binding.mActiveCode.text.toString(),
devMc,
devName
)
} else {
mViewModel.submit(
headerPath,
name,
sexType,
idCard,
height,
wieght,
address,
otherName,
otherPhone,
rela,
provincey,
city,
district,
lat,
lng,
medicName,
medicIds,
signPath,
binding.mDevNum.text.toString(),
binding.mActiveCode.text.toString(),
devMc,
devName,
diseaseList,
birthDay,
birthdayType
)
}
}
/**
* 设置扫码信息
*/
private fun setScanInfo(scanInfo: ScanInfoBean) {
binding.mDevNum.setText(scanInfo.deviceCode)
binding.mActiveCode.setText(scanInfo.activationCode)
watchName = scanInfo.watchName
}
override fun onRestart() {
super.onRestart()
if (type == 0) {//是蓝牙设备
factorySettingDialog.isShow()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode === RESULT_OK) {
when (requestCode) {
SERVER_AGREEMENT -> {
isAgree = true
binding.mPrivate.isSelected = isAgree
}
XQRCodeAct.QRCODE_AGREEMENT -> {
when (data!!.getIntExtra(XQRCode.RESULT_TYPE, 0)) {
XQRCode.RESULT_SUCCESS -> {
try {
val result = data.extras!!.getString(XQRCode.RESULT_DATA)
LogUtils.d("扫描结果:$result")
if (!result.isNullOrEmpty()) {
val gson = Gson()
setScanInfo(gson.fromJson(result, ScanInfoBean::class.java))
} else {
CommonToastUtils.showToast("扫码失败,请重试...")
}
} catch (e: Exception) {
LogUtils.e("二维码扫描:$e")
CommonToastUtils.showToast("请确认二维码是否正确!")
}
}
XQRCode.RESULT_FAILED -> {
LogUtils.d("扫描失败")
}
}
}
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun bloothConnect(event: BluetoothEvent) {
binding.mBlueTooth.text = event.devName
binding.mBlueTooth.tag = event.devMac
}
private var isActiveSuccess = false
// private val dialogWear by lazy {
// WearDialog(this) {
// RouteManager.goAct(ARouterUrl.MAIN_ACT)
// finish()
// }
// }
override fun liveObserver() {
mViewModel.activeLive.observe(this) {
activeSuccess()
}
mViewModel.setBasic.observe(this) {
activeSuccess()
}
// mViewModel.prevLive.observe(this) {
// dialogWear.showContent(it.data.content)
// }
}
private fun activeSuccess() {
isActiveSuccess = true
CommonToastUtils.showSucceedToast("设备激活成功")
LogUtils.d("设备激活成功")
MMkvHelper.put(Const.Watch_Device_Type, type)
if (type == 0) {
YCBManager.deleteHistory(YCBOrder.DELETE_LocalALL)
EventBus.getDefault().post(BlueToothConnectEvent())
}
EventBus.getDefault().post(MyInfoEvent())
EventBus.getDefault().post(BindDevEvent())
// CommonToastUtils.showToast("绑定成功")
finish()
/* if (CommonUtils.getMyUserInfo() == null) {
bundle.clear()
bundle.putInt("isBind", 0)
RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle)
finish()
}
CommonUtils.getMyUserInfo()?.let { bean ->
if (bean.urgentPhone.isNullOrEmpty()) {//如果紧急联系人电话并且签名为空则认为没有完善信息
bundle.clear()
bundle.putInt("isBind", 0)
RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle)
finish()
} else {
RouteManager.goAct(ARouterUrl.MAIN_ACT)
finish()
}
}*/
// mViewModel.getPrev(7)
}
override fun onDestroy() {
AmapInit.stopLocation()
if (!isActiveSuccess && type == 0) {
YCBBlueConnectHelper.disconnect()
}
super.onDestroy()
}
override fun onBackPressed() {
if (isLogin) { //如果是走注册流程过来的,退出该界面,则进入主界面
RouteManager.goAct(ARouterUrl.MAIN_ACT)
RxActivityTool.finishAllActivity()
} else {
super.onBackPressed()
}
}
}

@ -68,10 +68,19 @@ class DeviceChoiceAct : BaseVmAct<DeviceChoiceVm>() {
val device = adapter.data[position] as DeviceBean val device = adapter.data[position] as DeviceBean
val type = device.watchType val type = device.watchType
if (type != 0) { if (type != 0) {
bundle.clear() if(device.bindType == 1){
bundle.putInt("type", type) bundle.clear()
bundle.putBoolean("isLogin", isLogin) bundle.putInt("type", type)
RouteManager.goAct(ARouterUrl.DEVICE_ACTIVE, bundle) bundle.putBoolean("isLogin", isLogin)
RouteManager.goAct(ARouterUrl.ONE_KEY_DEVICE_ACTIVE, bundle)
}else{
bundle.clear()
bundle.putInt("type", type)
bundle.putBoolean("isLogin", isLogin)
RouteManager.goAct(ARouterUrl.DEVICE_ACTIVE, bundle)
}
} else { } else {
if (!checkBlueConnectPermission(this)) { if (!checkBlueConnectPermission(this)) {
FactorySettingDialog(this, "蓝牙手表需要访问位置、蓝牙权限。") { FactorySettingDialog(this, "蓝牙手表需要访问位置、蓝牙权限。") {

@ -7,6 +7,7 @@ import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -152,7 +153,20 @@ class MainActivity : BaseVmAct<MainVm>(), Consumer<AbstractMeasureData> {
"" ""
} else { } else {
MMkvHelper.getLong(Const.USER_ID).toString() MMkvHelper.getLong(Const.USER_ID).toString()
}
if(!TextUtils.isEmpty(userId)){
// if (BuildConfig.isRelease) {//设置极光推送别名
JPushInterface.setAlias(
this,
MMkvHelper.getLong(Const.USER_ID).toInt(),
"user_release_${MMkvHelper.getLong(Const.USER_ID)}"
)
// }
} }
mViewModel.getUserEquipmentInformationizationRequest(userId) mViewModel.getUserEquipmentInformationizationRequest(userId)
mViewModel.getBanners(userId,3) mViewModel.getBanners(userId,3)
mViewModel.getIsDemonstate() mViewModel.getIsDemonstate()

@ -20,7 +20,7 @@ import com.zj365.dc.vm.OneKeyBinderDeviceVm
import com.zj365.health.R import com.zj365.health.R
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
@Route(path = ARouterUrl.DEVICE_ACTIVE) @Route(path = ARouterUrl.ONE_KEY_DEVICE_ACTIVE)
class OneKeyBinderDeviceAct : BaseVmAct<OneKeyBinderDeviceVm>() { class OneKeyBinderDeviceAct : BaseVmAct<OneKeyBinderDeviceVm>() {
val binding by lazy { ActBinderDeviceOneKeyBinding.inflate(layoutInflater) } val binding by lazy { ActBinderDeviceOneKeyBinding.inflate(layoutInflater) }

@ -231,7 +231,7 @@ class WelcomeAct : BaseVmAct<WelcomeVm>() {
Log.i("terry", "useId:$userId") Log.i("terry", "useId:$userId")
JPushInterface.setAlias(this,userId.toInt(),"user_release_${userId}") JPushInterface.setAlias(this,userId.toInt(),"user_release_${userId}")
} }
JPushHelper(this).stopOrResumeJPush(MMkvHelper.getBoolean(Const.NOTICE_FLAG)) // JPushHelper(this).stopOrResumeJPush(MMkvHelper.getBoolean(Const.NOTICE_FLAG))
} }

@ -57,6 +57,7 @@ import com.xty.common.work.MyWorkManger
import com.xty.common.xqr_code.XQRCodeAct import com.xty.common.xqr_code.XQRCodeAct
import com.zj365.mime.weight.NoticeSettingDialog import com.zj365.mime.weight.NoticeSettingDialog
import com.xty.network.MyRetrofit import com.xty.network.MyRetrofit
import com.xty.network.model.DeviceFunctionBean
import com.xty.network.model.FamilyBean import com.xty.network.model.FamilyBean
import com.xty.network.model.HealthMonitoringListBean import com.xty.network.model.HealthMonitoringListBean
import com.xty.network.model.MainBean import com.xty.network.model.MainBean
@ -140,6 +141,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
private var tenJob: Job? = null private var tenJob: Job? = null
private val tenLive by lazy { MutableLiveData<String>() } private val tenLive by lazy { MutableLiveData<String>() }
private var isShrinkage = false//记录是否收缩 private var isShrinkage = false//记录是否收缩
private var functionList= ArrayList<DeviceFunctionBean>()
/** /**
* -1步数 0:心率 1血氧 2呼吸率 3体温 4睡眠 5血压 6血糖 7:心电|血脂 * -1步数 0:心率 1血氧 2呼吸率 3体温 4睡眠 5血压 6血糖 7:心电|血脂
@ -182,17 +184,18 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
binding.mGriddingList.mGridView.adapter = mHealthAdapter binding.mGriddingList.mGridView.adapter = mHealthAdapter
binding.mGriddingList.mGridView.setOnItemClickListener { _, _, position, _ -> binding.mGriddingList.mGridView.setOnItemClickListener { _, _, position, _ ->
val index = mHealthAdapter.getItem(position).type val index = mHealthAdapter.getItem(position).type
val functionType = mHealthAdapter.getItem(position).functionType
onEventObject(requireContext(), UmengEventId.HealthMonitor, pageNames[index]) onEventObject(requireContext(), UmengEventId.HealthMonitor, pageNames[index])
when (pageIndexs[index]) { when (functionType) {
// 0.心率、1.血氧、2.呼吸率、3.体温、4.步数、5.睡眠、6.血压、7.血糖、8.心电、9.尿酸、10.血脂。 // 0.心率、1.血氧、2.呼吸率、3.体温、4.步数、5.睡眠、6.血压、7.血糖、8.心电、9.尿酸、10.血脂。
//U320.心率、1.血氧、2.呼吸率、3.体温、 、4.睡眠、5.血压、6.血糖、7.尿酸、8.心电,9血脂 //U320.心率、1.血氧、2.呼吸率、3.体温、 、4.睡眠、5.血压、6.血糖、7.尿酸、8.心电,9血脂
//A3 0.心率、1.血氧、2.呼吸率、3.体温、 、4.睡眠、5.血压、6.血糖、7.尿酸8.血脂 //A3 0.心率、1.血氧、2.呼吸率、3.体温、 、4.睡眠、5.血压、6.血糖、7.尿酸8.血脂
//x1 0.心率、1.血氧、2.呼吸率、 、3.睡眠、4.血压、5.血糖、6.尿酸7.血脂 //x1 0.心率、1.血氧、2.呼吸率、 、3.睡眠、4.血压、5.血糖、6.尿酸7.血脂
0, 1, 2, 3 -> { "hr", "so", "resp", "temp" -> {
goPage(index) goPage(index,functionType)
} }
4 -> {//步数 "step" -> {//步数
if (isDemonstrate) { if (isDemonstrate) {
return@setOnItemClickListener return@setOnItemClickListener
} }
@ -201,7 +204,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putInt("status", data.adorn.health + 1) bundle.putInt("status", data.adorn.health + 1)
bundle.putInt("type", 1) bundle.putInt("type", 1)
if (showIdInfo.isEmpty()) { if (showIdInfo.isEmpty()) {
bundle.putString("userId", CommonUtils.getMyUserId()) bundle.putString("userId", MMkvHelper.getLong(Const.USER_ID).toString())
} else showIdInfo.let { } else showIdInfo.let {
bundle.putString("userId", it) bundle.putString("userId", it)
} }
@ -209,85 +212,30 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
} }
} }
5 -> { "sleep" -> {
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) goPage(index - 1,functionType)
/*if (deviceType == "U32" || deviceType == "A3") {
goPage(index - 1)
} else {
}*/
goPage(index - 1)
/*if (deviceType == "X1" || deviceType == "X2") {
goPage(index - 2)
} else {
goPage(index - 1)
}*/
} }
6 -> { "dbp" -> {
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) goPage(index - 1,functionType)
/*if (deviceType == "X1" || deviceType == "X2") {
goPage(4)
} else {*/
goPage(index - 1)
// }
} }
9 -> { //心电隐藏的前提下尿酸为8 否则为9 "uric" -> { //心电隐藏的前提下尿酸为8 否则为9
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) goPage(7,functionType)
/* if (deviceType == "X1" || deviceType == "X2") {
goPage(6)
} else {*/
goPage(7)
// }
} }
7 -> { //血糖 "sugar" -> { //血糖
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) goPage(index - 1,functionType)
/*if (deviceType == "X1" || deviceType == "X2") {
goPage(5)
} else {*/
goPage(index - 1)
// }
}
10 -> { // //心电隐藏的前提下血脂为9 否则为10 }
"bloodFat" -> { // //心电隐藏的前提下血脂为9 否则为10
CommonToastUtils.showToast("尊敬的用户您好,血脂功能暂未开放,敬请期待哦~") CommonToastUtils.showToast("尊敬的用户您好,血脂功能暂未开放,敬请期待哦~")
/*when (MMkvHelper.getString(Const.DEVICE_TYPE)) {
"X1", "X2" -> {
goPage(7)
}
"U32","" -> {
goPage(9)
}
"A3" -> {
goPage(8)
}
else -> {
goPage(7)
}
}*/
} }
"ecg" ->{ //心电 暂时隐藏
/*8 -> {//心电 暂时隐藏 尿酸就改成8 CommonToastUtils.showToast("尊敬的用户您好,心电功能暂未开放,敬请期待哦~")
// if (MMkvHelper.getInt(Const.Watch_Device_Type) == -1) { //演示模式 }
// showToast("尊敬的用户您好,心电功能暂未开放,敬请期待哦~")
// } else
if (MMkvHelper.getInt(Const.Watch_Device_Type) == Const.Companion.WatchDevice.LightA3.ordinal) {//4G手表
CommonToastUtils.showToast("尊敬的用户您好,心电功能暂未开放,敬请期待哦~")
} else {
goPage(8)
// if (showIdInfo.isEmpty()) {
// goPage(8)
// } else {
// bundle.clear()
// bundle.putString("id", showIdInfo)
// RouteManager.goAct(ARouterUrl.XD_HISTORY, bundle)
// }
}
}*/
} }
} }
} }
@ -346,7 +294,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
} }
//健康监测 //健康监测
R.id.mSub -> { R.id.mSub -> {
goPage(0) goPage(0,"")
} }
//健康对比 //健康对比
R.id.ll_compare -> { R.id.ll_compare -> {
@ -391,6 +339,8 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
bundle.putInt("pageType", 0) bundle.putInt("pageType", 0)
bundle.putString("titleName", "日报") bundle.putString("titleName", "日报")
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle)
} }
//周报 //周报
@ -401,6 +351,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putSerializable("index", ReportVm.ReportInfoType.Week) bundle.putSerializable("index", ReportVm.ReportInfoType.Week)
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
bundle.putString("titleName", "周报") bundle.putString("titleName", "周报")
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle)
} }
@ -412,6 +363,8 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putSerializable("index", ReportVm.ReportInfoType.Month) bundle.putSerializable("index", ReportVm.ReportInfoType.Month)
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
bundle.putString("titleName", "月报") bundle.putString("titleName", "月报")
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle)
} }
//年报 //年报
@ -422,6 +375,8 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putSerializable("index", ReportVm.ReportInfoType.Year) bundle.putSerializable("index", ReportVm.ReportInfoType.Year)
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
bundle.putString("titleName", "年报") bundle.putString("titleName", "年报")
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle)
} }
//24小时健康评估 //24小时健康评估
@ -432,6 +387,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putString("titleName", "24小时健康评估") bundle.putString("titleName", "24小时健康评估")
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
bundle.putBoolean("isEstimate", true) bundle.putBoolean("isEstimate", true)
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle)
} }
//近7天健康评估 //近7天健康评估
@ -443,6 +399,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putString("titleName", "近7天健康评估") bundle.putString("titleName", "近7天健康评估")
bundle.putBoolean("isNearMouth", false) bundle.putBoolean("isNearMouth", false)
bundle.putBoolean("isEstimate", true) bundle.putBoolean("isEstimate", true)
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle)
} }
//近30天健康评估 //近30天健康评估
@ -454,17 +411,22 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
bundle.putString("titleName", "近30天健康评估") bundle.putString("titleName", "近30天健康评估")
bundle.putBoolean("isNearMouth", true) bundle.putBoolean("isNearMouth", true)
bundle.putBoolean("isEstimate", true) bundle.putBoolean("isEstimate", true)
bundle.putParcelableArrayList("functionList",functionList)
RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle)
} }
} }
} }
//界面跳转 //界面跳转
private fun goPage(page: Int) { private fun goPage(page: Int,functionType:String) {
if (isBind()) { if (isBind()) {
bundle.clear() bundle.clear()
bundle.putInt("page", page) bundle.putInt("page", page)
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
if(functionList.size > 0){
bundle.putParcelableArrayList("functionList",functionList)
}
bundle.putString("functionType",functionType)
if (!TextUtils.isEmpty(showIdInfo)) { if (!TextUtils.isEmpty(showIdInfo)) {
bundle.putString("id", showIdInfo) bundle.putString("id", showIdInfo)
bundle.putString("sex", sex) bundle.putString("sex", sex)
@ -759,6 +721,16 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
} }
} }
mViewModel.functionLiveData.observe(this){
LogUtils.e("DynamicManagementFrag","functionList:${it.data.size}")
functionList.addAll(it.data)
if (showIdInfo ==MMkvHelper.getLong(Const.USER_ID).toString()) {
Const.functionListDate.value = functionList
}
}
//获取首页所有信息返回 //获取首页所有信息返回
mViewModel.allData.observe(this) { mViewModel.allData.observe(this) {
it.data.let { bean -> it.data.let { bean ->
@ -774,7 +746,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
} }
if (showIdInfo == CommonUtils.getMyUserId()) { //自己 if (showIdInfo ==MMkvHelper.getLong(Const.USER_ID).toString()) { //自己
Const.otherLiveData.value = bean Const.otherLiveData.value = bean
} }
Const.battery = bean.power Const.battery = bean.power
@ -808,7 +780,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
} else if (Const.Companion.WatchDevice.LightA3.ordinal == bean.watchType) {//如果是4G设备设置连接状态与电量信息 } else if (Const.Companion.WatchDevice.LightA3.ordinal == bean.watchType) {//如果是4G设备设置连接状态与电量信息
} else {*/ } else {*/
if (showIdInfo ==CommonUtils.getMyUserId()) { //自己 if (showIdInfo == MMkvHelper.getLong(Const.USER_ID).toString()) { //自己
val localBlueMac = MMkvHelper.getString(Const.Blue_Tooth) val localBlueMac = MMkvHelper.getString(Const.Blue_Tooth)
if (YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.DisConnect) {//如果本地有蓝牙信息且属于未连接状态,则直接连接 if (YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.DisConnect) {//如果本地有蓝牙信息且属于未连接状态,则直接连接
LogUtils.d("startConnect::${localBlueMac}") LogUtils.d("startConnect::${localBlueMac}")
@ -832,9 +804,13 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
healthMonitoringList.clear() healthMonitoringList.clear()
healthMonitoringListExceed.clear() healthMonitoringListExceed.clear()
mHealthAdapter.mainBean.clear() mHealthAdapter.mainBean.clear()
LogUtils.e("DynamicManagementFrag","11111111")
val healthMonitoringListData = mViewModel.setHealthMonitoringListData( val healthMonitoringListData = mViewModel.setHealthMonitoringListData(
requireContext(), requireContext(),
bean bean,
mViewModel.functionLiveData.value?.data
) )
val deviceType = bean.deviceType val deviceType = bean.deviceType
if (TextUtils.isEmpty(deviceType)) { if (TextUtils.isEmpty(deviceType)) {
@ -903,7 +879,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
binding.mHeader.mBtnBind.visibility = View.GONE binding.mHeader.mBtnBind.visibility = View.GONE
binding.mHeader.mLayoutResult.visibility = View.VISIBLE binding.mHeader.mLayoutResult.visibility = View.VISIBLE
} else { //没有绑定手表 } else { //没有绑定手表
if (/*mFamilyAdapter.position == 0 &&*/ it.data.user?.id.toString() == CommonUtils.getMyUserId()) { //是自己,显示绑定手表 if (/*mFamilyAdapter.position == 0 &&*/ it.data.user?.id.toString() == MMkvHelper.getLong(Const.USER_ID).toString()) { //是自己,显示绑定手表
binding.mHeader.mBtnBind.visibility = View.VISIBLE binding.mHeader.mBtnBind.visibility = View.VISIBLE
binding.mHeader.mLayoutResult.visibility = View.GONE binding.mHeader.mLayoutResult.visibility = View.GONE
} else { //不是自己隐藏数据 } else { //不是自己隐藏数据
@ -1026,7 +1002,7 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
return@observe return@observe
} }
if ((!showIdInfo.isNullOrEmpty() && showIdInfo != CommonUtils.getMyUserId())) {//不是当前用户 if ((!showIdInfo.isNullOrEmpty() && showIdInfo !=MMkvHelper.getLong(Const.USER_ID).toString())) {//不是当前用户
LogUtils.d("当前用户与showIdInfo不匹配") LogUtils.d("当前用户与showIdInfo不匹配")
return@observe return@observe
} }
@ -1538,6 +1514,16 @@ class DynamicManagementFrag : BaseVmFrag<DynamicManagementVm>(){
MMkvHelper.getLong(Const.USER_ID).toString() MMkvHelper.getLong(Const.USER_ID).toString()
} }
if(!TextUtils.isEmpty(showIdInfo)){
// if (BuildConfig.isRelease) {//设置极光推送别名
JPushInterface.setAlias(
requireContext(),
MMkvHelper.getLong(Const.USER_ID).toInt(),
"user_release_${MMkvHelper.getLong(Const.USER_ID)}"
)
// }
}
getXtInfo(showIdInfo) getXtInfo(showIdInfo)
get24HourReportInfo(showIdInfo) get24HourReportInfo(showIdInfo)
request() request()

@ -148,7 +148,7 @@ HealthHomeFrag : BaseVmFrag<HomeVm>() {
val req = WXLaunchMiniProgram.Req() val req = WXLaunchMiniProgram.Req()
req.userName = bannerBean.wxId// 填小程序原始id req.userName = bannerBean.wxId// 填小程序原始id
// req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 req.path = bannerBean.linkAddress ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
if(bannerBean.wxType == 3){ if(bannerBean.wxType == 3){
req.miniprogramType = req.miniprogramType =
@ -205,7 +205,7 @@ HealthHomeFrag : BaseVmFrag<HomeVm>() {
val req = WXLaunchMiniProgram.Req() val req = WXLaunchMiniProgram.Req()
req.userName = bannerBean.wxId // 填小程序原始id req.userName = bannerBean.wxId // 填小程序原始id
//req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 req.path = bannerBean.linkAddress ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
if(bannerBean.wxType == 3){ if(bannerBean.wxType == 3){
req.miniprogramType = req.miniprogramType =
@ -281,7 +281,7 @@ HealthHomeFrag : BaseVmFrag<HomeVm>() {
val req = WXLaunchMiniProgram.Req() val req = WXLaunchMiniProgram.Req()
req.userName = contentData.wxId // 填小程序原始id req.userName = contentData.wxId // 填小程序原始id
// req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 req.path = contentData.jumpUrl ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
if(contentData.wxType == 3){ if(contentData.wxType == 3){
req.miniprogramType = req.miniprogramType =
@ -374,7 +374,7 @@ HealthHomeFrag : BaseVmFrag<HomeVm>() {
val req = WXLaunchMiniProgram.Req() val req = WXLaunchMiniProgram.Req()
req.userName = contentData.wxId // 填小程序原始id req.userName = contentData.wxId // 填小程序原始id
//req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 req.path = contentData.jumpUrl ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
if(contentData.wxType == 3){ if(contentData.wxType == 3){
req.miniprogramType = req.miniprogramType =
WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版 WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版

@ -216,6 +216,12 @@ class MineFrag : BaseVmFrag<SettingVm>() {
bundle.putInt("page", 0) bundle.putInt("page", 0)
bundle.putBoolean("isDemonstrate", (requireActivity() as MainActivity).isDemonstrate) bundle.putBoolean("isDemonstrate", (requireActivity() as MainActivity).isDemonstrate)
Const.functionListDate.value?.let {
if(it.size > 0){
bundle.putParcelableArrayList("functionList",it)
}
}
val id = if (MMkvHelper.getLong(Const.USER_ID).toString() == "0") { val id = if (MMkvHelper.getLong(Const.USER_ID).toString() == "0") {
"" ""
} else { } else {
@ -239,6 +245,11 @@ class MineFrag : BaseVmFrag<SettingVm>() {
bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isDemonstrate", isDemonstrate)
bundle.putInt("pageType", 0) bundle.putInt("pageType", 0)
bundle.putString("titleName", "日报") bundle.putString("titleName", "日报")
Const.functionListDate.value?.let {
if(it.size > 0){
bundle.putParcelableArrayList("functionList",it)
}
}
RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle) RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle)
} }
} }
@ -269,6 +280,12 @@ class MineFrag : BaseVmFrag<SettingVm>() {
}else { }else {
bundle.clear() bundle.clear()
bundle.putString("id", user?.id) bundle.putString("id", user?.id)
Const.functionListDate.value?.let {
if(it.size > 0){
bundle.putParcelableArrayList("functionList",it)
}
}
RouteManager.goAct(ARouterUrl.COMPARE_PAGE_DATA_ACT, bundle) RouteManager.goAct(ARouterUrl.COMPARE_PAGE_DATA_ACT, bundle)
} }
} }

@ -0,0 +1,295 @@
package com.zj365.dc.vm
import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm
import com.xty.common.TimeUtils
import com.xty.common.util.CommonToastUtils
import com.xty.network.model.ImageUploadBean
import com.xty.network.model.NotAccepted
import com.xty.network.model.PrevBean
import com.xty.network.model.RespBody
import com.zj365.dc.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.withContext
import okhttp3.MultipartBody
import org.json.JSONArray
import org.json.JSONObject
import java.io.File
class BasicInfoVm : BaseVm() {
val setBasic by lazy {MutableLiveData<NotAccepted>()}
val prevLive by lazy{MutableLiveData<RespBody<PrevBean>>()}
val activeLive by lazy {MutableLiveData<NotAccepted>()}
fun submit(path: String,name:String,sex:String, icCard:String,height:String,weight:String,area:String,urgent:String,urgentPhone:String,urgentRelation:String
,province:String,city:String,district:String,lat:String,lng:String,medicNames:String,medicIds:String,signPath:String,devNum:String,code:String,devMc:String,devName:String,diseaseList:String,birthDay:String,birthdayType:Int) {
// if(icCard.length!=18){
// ToastUtils.show("请输入正确的身份证号")
// return
// }
if(height.isNullOrEmpty()){
CommonToastUtils.showToast("请输入身高")
return
}
if (height.toFloat() < 50 || height.toFloat() > 260){
CommonToastUtils.showToast("请输入正确身高")
return
}
if(weight.isNullOrEmpty()){
CommonToastUtils.showToast("请输入体重")
return
}
if(weight.toFloat() < 3 || weight.toFloat() > 300){
CommonToastUtils.showToast("请输入正确体重")
return
}
if (TimeUtils.getAgeByBirth(birthDay) < 14){
CommonToastUtils.showToast("需要年满14岁才可使用")
return
}
if(area.isNullOrEmpty()){
CommonToastUtils.showToast("请输入家庭住址")
return
}
if(medicIds.isNullOrEmpty()){
CommonToastUtils.showToast("请选择病史")
return
}
if(urgent.isNullOrEmpty()){
CommonToastUtils.showToast("请输入紧急联系人姓名")
return
}
if(urgentPhone.isNullOrEmpty()){
CommonToastUtils.showToast("请输入紧急联系人联系方式")
return
}
if(urgentRelation.isNullOrEmpty()){
CommonToastUtils.showToast("请输入关系")
return
}
if(devMc.isNullOrEmpty()){
CommonToastUtils.showToast(R.string.please_connect_device)
return
}
if(devNum.isNullOrEmpty()){
CommonToastUtils.showToast(R.string.please_input_device_code)
return
}
if(code.isNullOrEmpty()){
CommonToastUtils.showToast(R.string.please_input_active_code)
return
}
if(signPath.isNullOrEmpty()){
CommonToastUtils.showToast("请完善签名")
return
}
startHttp {
withContext(Dispatchers.IO) {
var fileId:String?=null
if(!path.isNullOrEmpty()){
var image = async { uploadImage(path) }
val await = image.await()
fileId = await.fileId
}
var upload = async {uploadInfo(name,sex, icCard,height,weight,area,urgent,urgentPhone,urgentRelation,fileId,province,city,
district,lat,lng,medicNames,medicIds,diseaseList,birthDay,birthdayType) }
val infoUpload = upload.await() //个人信息上传
if(infoUpload.code==0){
var activeDev =async { active(signPath,devNum,code,devMc,devName) }
var signUpload=activeDev.await()
if(signUpload.code==0){
setBasic.postValue(infoUpload.data)
}else{
CommonToastUtils.showToast(signUpload.msg)
}
}else{
CommonToastUtils.showToast(infoUpload.msg)
}
}
}
}
fun submitNew(path: String,name:String,sex:String, icCard:String,height:String,weight:String,area:String,urgent:String,urgentPhone:String,urgentRelation:String
,province:String,city:String,district:String,lat:String,lng:String,medicNames:String,medicIds:String ,diseaseList:String,birthDay:String,birthdayType:Int) {
// if(icCard.length!=18){
// ToastUtils.show("请输入正确的身份证号")
// return
// }
if(height.isNullOrEmpty()){
CommonToastUtils.showToast("请输入身高")
return
}
if (height.toFloat() < 50 || height.toFloat() > 260){
CommonToastUtils.showToast("请输入正确身高")
return
}
if(weight.isNullOrEmpty()){
CommonToastUtils.showToast("请输入体重")
return
}
if(weight.toFloat() < 3 || weight.toFloat() > 300){
CommonToastUtils.showToast("请输入正确体重")
return
}
if (TimeUtils.getAgeByBirth(birthDay) < 14){
CommonToastUtils.showToast("需要年满14岁才可使用")
return
}
if(area.isNullOrEmpty()){
CommonToastUtils.showToast("请输入家庭住址")
return
}
if(medicIds.isNullOrEmpty()){
CommonToastUtils.showToast("请选择病史")
return
}
if(urgent.isNullOrEmpty()){
CommonToastUtils.showToast("请输入紧急联系人姓名")
return
}
if(urgentPhone.isNullOrEmpty()){
CommonToastUtils.showToast("请输入紧急联系人联系方式")
return
}
if(urgentRelation.isNullOrEmpty()){
CommonToastUtils.showToast("请输入关系")
return
}
startHttp {
withContext(Dispatchers.IO) {
var fileId:String?=null
if(!path.isNullOrEmpty()){
var image = async { uploadImage(path) }
val await = image.await()
fileId = await.fileId
}
var upload = async {uploadInfo(name,sex, icCard,height,weight,area,urgent,urgentPhone,urgentRelation,fileId,province,city,
district,lat,lng,medicNames,medicIds,diseaseList,birthDay,birthdayType) }
val infoUpload = upload.await() //个人信息上传
if(infoUpload.code==0){
CommonToastUtils.showSucceedToast("提交成功")
setBasic.postValue(infoUpload.data)
}else{
CommonToastUtils.showToast(infoUpload.msg)
}
}
}
}
fun activeDevice(path:String,devNum:String,code:String,devMc:String,devName:String){
startHttp {
withContext(Dispatchers.IO){
var file= File(path)
var fileBody=MultipartBody.Part.createFormData("file",file.name,retrofits.getMultiPartFileRb(file))
var response= apiInterface().activite(fileBody,retrofits.getRequestBody(devNum.replace(" ", "")),retrofits.getRequestBody(code.replace(" ", "")),retrofits.getRequestBody(devMc),retrofits.getRequestBody(devName))
if (response.code == 0){
activeLive.postValue(response.data)
}else{
CommonToastUtils.showToast(response.msg)
}
}
}
}
/**
* 激活设备 签名文件上传
*/
private suspend fun active(path:String,devNum:String,code:String,devMc:String,devName:String):RespBody<NotAccepted>{
var file= File(path)
var fileBody=MultipartBody.Part.createFormData("file",file.name,retrofits.getMultiPartFileRb(file))
var response= apiInterface().activite(fileBody,retrofits.getRequestBody(devNum.replace(" ", "")),retrofits.getRequestBody(code.replace(" ", "")),retrofits.getRequestBody(devMc),retrofits.getRequestBody(devName))
return response
}
private suspend fun uploadInfo(name:String,sex:String, icCard:String,height:String,weight:String,area:String,
urgent:String,urgentPhone:String,urgentRelation:String,
fileId:String?,province:String,city:String,district:String,lat:String,lng:String,medicNames:String,medicIds:String,diseaseList:String,birthDay:String,birthdayType:Int): RespBody<NotAccepted> {
var json=JSONObject()
json.put("name",name)
json.put("sex",sex)
json.put("idCard",icCard)
json.put("height",height)
json.put("weight",weight)
json.put("area",area)
json.put("medicalHistory",medicNames)
json.put("historyId",medicIds)
json.put("latitude",lat)
json.put("longitude",lng)
json.put("province",province)
json.put("city",city)
json.put("district",district)
json.put("birthday",birthDay)
json.put("birthdayType",birthdayType)
if(diseaseList.isEmpty()){
json.put("diseaseList","")
}else{
var array=JSONArray(diseaseList) //去掉转移的斜杠
json.put("diseaseList",array)
}
json.put("urgent",urgent)
json.put("urgentPhone",urgentPhone)
json.put("urgentRelation",urgentRelation)
if(!fileId.isNullOrEmpty()){
json.put("avatarUrl",fileId)
}
var rb=retrofits.getRequestBody(json.toString())
var body=apiInterface().setUpdateUser(rb)
return body
}
private suspend fun uploadImage(path: String): ImageUploadBean {
var f = File(path)
var fileRb =
MultipartBody.Part.createFormData("file", f.name, retrofits.getMultiPartFileRb(f))
var body = apiInterface().uploadImage(fileRb)
return body.data
}
//1:用户协议 2:管家协议 3:隐私协议 7:佩戴须知
// fun getPrev(type:Int){
// startHttp {
// var response=apiInterface().getPrev(type)
// response.getCodeStatus(prevLive,nowData)
// }
// }
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,253 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/title"
layout="@layout/title_white_bar" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/mSubmit"
android:layout_below="@+id/title"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/shape_round_white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@color/col_f1f" />
<RelativeLayout
android:id="@+id/mDeviceLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingRight="@dimen/dp_10">
<com.xty.common.weight.RequiredTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:drawablePadding="@dimen/dp_10"
android:ellipsize="end"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_15"
android:text="@string/device"
android:textColor="@color/col_455"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/mBlueTooth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:drawableRight="@mipmap/ic_next"
android:drawablePadding="@dimen/dp_10"
android:gravity="center|right"
android:hint="@string/please_connect_device"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_15"
android:textColor="@color/col_455"
android:textSize="@dimen/dp_16" />
<View
android:id="@+id/line1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@color/col_f1f" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingRight="@dimen/dp_10">
<com.xty.common.weight.RequiredTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:drawablePadding="@dimen/dp_10"
android:ellipsize="end"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_15"
android:singleLine="true"
android:text="@string/device_code"
android:textColor="@color/col_455"
android:textSize="@dimen/sp_14" />
<EditText
android:id="@+id/mDevNum"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@null"
android:gravity="center|right"
android:hint="@string/please_input_device_code"
android:maxLength="20"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_15"
android:singleLine="true"
android:textColor="@color/col_455"
android:textSize="@dimen/dp_16" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@color/col_f1f" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingRight="@dimen/dp_10">
<com.xty.common.weight.RequiredTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:drawablePadding="@dimen/dp_10"
android:ellipsize="end"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_15"
android:singleLine="true"
android:text="@string/active_code"
android:textColor="@color/col_455"
android:textSize="@dimen/sp_14" />
<EditText
android:id="@+id/mActiveCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@null"
android:gravity="center|right"
android:hint="@string/please_input_active_code"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_15"
android:singleLine="true"
android:textColor="@color/col_455"
android:textSize="@dimen/dp_16" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@color/col_f1f" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:text="@string/sign"
android:textColor="@color/col_455"
android:textSize="@dimen/dp_18" />
<androidx.cardview.widget.CardView
android:id="@+id/mSign"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_120"
android:layout_margin="@dimen/dp_10"
app:cardBackgroundColor="@color/col_f4f"
app:cardCornerRadius="@dimen/dp_10"
app:cardElevation="0dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/confirm_sign"
android:textColor="@color/col_B8B"
android:textSize="@dimen/dp_14" />
<ImageView
android:id="@+id/mImageSign"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.cardview.widget.CardView>
<!-- <TextView-->
<!-- android:id="@+id/mSign"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="right"-->
<!-- android:layout_margin="@dimen/dp_15"-->
<!-- android:background="@drawable/shape_btn_select_bg"-->
<!-- android:paddingLeft="@dimen/dp_15"-->
<!-- android:paddingTop="@dimen/dp_5"-->
<!-- android:paddingRight="@dimen/dp_15"-->
<!-- android:paddingBottom="@dimen/dp_5"-->
<!-- android:text="签名"-->
<!-- android:textColor="@color/white"-->
<!-- android:textSize="@dimen/dp_16" />-->
<TextView
android:id="@+id/mPrivate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_10"
android:drawableLeft="@drawable/selctor_check_sel"
android:drawablePadding="@dimen/dp_10"
android:gravity="center|left"
android:text="@string/agree_private_active"
android:textColor="@color/col_8a00"
android:textColorHighlight="@android:color/transparent"
android:textSize="@dimen/dp_20" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<TextView
android:id="@+id/mSubmit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_20"
android:autoSizeMaxTextSize="@dimen/dp_20"
android:background="@drawable/shape_btn_select_bg"
android:gravity="center"
android:padding="@dimen/dp_10"
android:text="@string/confirm"
android:textColor="@color/white"
android:textSize="@dimen/dp_16" />
</RelativeLayout>

@ -2,6 +2,7 @@ plugins {
id 'com.android.library' id 'com.android.library'
id 'kotlin-android' id 'kotlin-android'
id 'kotlin-kapt' id 'kotlin-kapt'
id 'kotlin-parcelize'
} }
def androidId = rootProject.ext.defaultSetting def androidId = rootProject.ext.defaultSetting
@ -53,7 +54,6 @@ android {
viewBinding{ viewBinding{
enabled=true enabled=true
} }
} }
repositories { repositories {

@ -1,15 +1,19 @@
package com.xty.base.h5 package com.xty.base.h5
import android.content.Context import android.content.Context
import android.os.Bundle
import android.webkit.JavascriptInterface import android.webkit.JavascriptInterface
import com.blankj.utilcode.util.GsonUtils import com.blankj.utilcode.util.GsonUtils
import com.google.gson.Gson import com.google.gson.Gson
import com.xty.base.act.BaseVmAct import com.xty.base.act.BaseVmAct
import com.xty.base.model.ScienceDetailBean
import com.xty.base.model.WatchReChangeBean import com.xty.base.model.WatchReChangeBean
import com.xty.base.utils.PayUtils import com.xty.base.utils.PayUtils
import com.xty.common.Const import com.xty.common.Const
import com.xty.common.LogUtils import com.xty.common.LogUtils
import com.xty.common.MMkvHelper import com.xty.common.MMkvHelper
import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager
import com.xty.common.util.ToastUtils import com.xty.common.util.ToastUtils
import org.json.JSONObject import org.json.JSONObject
@ -63,9 +67,11 @@ open class CloudJSBridge(val context: Context, val listener: IJsBridge) {
fun gotoScienceDetail(str: String?){ fun gotoScienceDetail(str: String?){
LogUtils.e("CloudJSBridge","gotoScienceDetail str") LogUtils.e("CloudJSBridge","gotoScienceDetail str")
str?.let { str?.let {
var detailBean = GsonUtils.fromJson(it, ScienceDetailBean::class.java)
var bundle = Bundle()
bundle.putString("id",detailBean.id)
RouteManager.goAct(ARouterUrl.SCIENCE_DETAIL, bundle)
} }
ToastUtils(context).showToast("敬请期待")
} }
@JavascriptInterface @JavascriptInterface
@ -76,4 +82,6 @@ open class CloudJSBridge(val context: Context, val listener: IJsBridge) {
} }
} }
} }

@ -0,0 +1,3 @@
package com.xty.base.model
data class ScienceDetailBean (var id:String){
}

@ -2,6 +2,7 @@ plugins {
id 'com.android.library' id 'com.android.library'
id 'kotlin-android' id 'kotlin-android'
id 'kotlin-kapt' id 'kotlin-kapt'
id 'kotlin-parcelize'
} }

@ -1,6 +1,7 @@
package com.xty.common package com.xty.common
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.xty.network.model.DeviceFunctionBean
import com.xty.network.model.MainBean import com.xty.network.model.MainBean
import com.xty.network.model.MusicBean import com.xty.network.model.MusicBean
import com.xty.network.model.SettingBean import com.xty.network.model.SettingBean
@ -70,6 +71,7 @@ class Const {
val mainLiveData by lazy { MutableLiveData<SettingBean>() } //个人信息数据 val mainLiveData by lazy { MutableLiveData<SettingBean>() } //个人信息数据
val otherLiveData by lazy { MutableLiveData<MainBean>() } val otherLiveData by lazy { MutableLiveData<MainBean>() }
val connectBlueDevice by lazy { ScanDeviceBean() } val connectBlueDevice by lazy { ScanDeviceBean() }
val functionListDate by lazy { MutableLiveData<ArrayList<DeviceFunctionBean>>() }
var battery = ""//电量信息 var battery = ""//电量信息

@ -6,7 +6,8 @@ class ARouterUrl {
const val MAIN_ACT = "/com/zj365/dc/activity/MainActivity" const val MAIN_ACT = "/com/zj365/dc/activity/MainActivity"
const val LOGIN_ACT = "/com/zj365/dc/activity/LoginAct" const val LOGIN_ACT = "/com/zj365/dc/activity/LoginAct"
const val REGIST_ACT = "/com/zj365/dc/activity/RegisterAct" const val REGIST_ACT = "/com/zj365/dc/activity/RegisterAct"
const val DEVICE_ACTIVE = "/com/zj365/dc/activity/OneKeyBinderDeviceAct" const val ONE_KEY_DEVICE_ACTIVE = "/com/zj365/dc/activity/OneKeyBinderDeviceAct"
const val DEVICE_ACTIVE = "/com/xty/health/act/DeviceActiveAct"
const val BASIC_INFO = "/com/zj365/dc/act/BasicInfoAct" const val BASIC_INFO = "/com/zj365/dc/act/BasicInfoAct"
const val BIND_WX_PHONE = "/com/zj365/dc/act/BindWxPhone" const val BIND_WX_PHONE = "/com/zj365/dc/act/BindWxPhone"
const val DEVICE_CONNECT = "/com/zj365/dc/activity/DeviceConnectAct" const val DEVICE_CONNECT = "/com/zj365/dc/activity/DeviceConnectAct"

@ -0,0 +1,22 @@
package com.xty.common.util
import com.xty.network.model.DeviceFunctionBean
object DeviceFunctionUtils {
fun hasFunction(functionList:ArrayList<DeviceFunctionBean>,functionType:String) : Boolean{
functionList.forEach {
if(it.type == functionType && it.status == 1){
return true
}
}
return false
}
fun hasFunction(bean:DeviceFunctionBean,functionType:String):Boolean{
if(bean.type == functionType && bean.status == 1){
return true
}
return false
}
}

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#2902C191" />
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
<item>
<!--clip 直接裁切的话 会成直角-->
<scale android:scaleWidth="100%">
<shape>
<solid android:color="@color/col_02c" />
<corners android:radius="@dimen/dp_10" />
</shape>
</scale>
</item>
</layer-list>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

@ -169,7 +169,8 @@ ext {
stream : 'com.annimon:stream:1.2.1', stream : 'com.annimon:stream:1.2.1',
rxjave : 'io.reactivex.rxjava2:rxjava:2.2.8', rxjave : 'io.reactivex.rxjava2:rxjava:2.2.8',
rxandroid : 'io.reactivex.rxjava2:rxandroid:2.1.1', rxandroid : 'io.reactivex.rxjava2:rxandroid:2.1.1',
permission : 'com.yanzhenjie:permission:2.0.3', permission : 'com.yanzhenjie:permission:2.0.3',
autoSize :'me.jessyan:autosize:1.2.1',
//seekbar //seekbar
seekbar : 'com.github.Jay-Goo:RangeSeekBar:v3.0.0' seekbar : 'com.github.Jay-Goo:RangeSeekBar:v3.0.0'

@ -2,6 +2,7 @@ plugins {
id 'com.android.library' id 'com.android.library'
id 'org.jetbrains.kotlin.android' id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt' id 'kotlin-kapt'
id 'kotlin-parcelize'
} }

@ -10,6 +10,8 @@ import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm import com.xty.base.vm.BaseVm
import com.xty.base.vp2.VpAdapter import com.xty.base.vp2.VpAdapter
import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.ARouterUrl
import com.xty.common.util.DeviceFunctionUtils
import com.xty.network.model.DeviceFunctionBean
import com.zj365.health.R import com.zj365.health.R
import com.zj365.health.databinding.ActComparePageBinding import com.zj365.health.databinding.ActComparePageBinding
import com.zj365.health.fragment.BreathCompareDataFrag import com.zj365.health.fragment.BreathCompareDataFrag
@ -21,12 +23,13 @@ import com.zj365.health.fragment.XlCompareDataFrag
import com.zj365.health.fragment.XueTangCompareDataFrag import com.zj365.health.fragment.XueTangCompareDataFrag
import com.zj365.health.fragment.XueYaCompareDataFrag import com.zj365.health.fragment.XueYaCompareDataFrag
import com.zj365.health.fragment.bloodlipid.BloodFatCompareDataFrag import com.zj365.health.fragment.bloodlipid.BloodFatCompareDataFrag
import com.zj365.health.vm.ComparePageDataVm
/** /**
* 数据对比 * 数据对比
*/ */
@Route(path = ARouterUrl.COMPARE_PAGE_DATA_ACT) @Route(path = ARouterUrl.COMPARE_PAGE_DATA_ACT)
class ComparePageDataAct : BaseVmAct<BaseVm>() { class ComparePageDataAct : BaseVmAct<ComparePageDataVm>() {
/** /**
* userid * userid
*/ */
@ -34,7 +37,7 @@ class ComparePageDataAct : BaseVmAct<BaseVm>() {
val title by lazy { arrayOf( "心率数据对比", "血氧数据对比", "呼吸率数据对比","体温数据对比","睡眠数据对比", "血压数据对比" ,"血糖数据对比","尿酸数据对比","血脂数据对比" ) } val title by lazy { arrayOf( "心率数据对比", "血氧数据对比", "呼吸率数据对比","体温数据对比","睡眠数据对比", "血压数据对比" ,"血糖数据对比","尿酸数据对比","血脂数据对比" ) }
val compareArray: Array<String> by lazy { resources.getStringArray(R.array.compare_array) } val compareArray: Array<String> by lazy { resources.getStringArray(R.array.compare_array) }
var listFragment = mutableListOf<Fragment>() var listFragment = mutableListOf<Fragment>()
var functionList = ArrayList<DeviceFunctionBean>()
/** /**
*/ */
val binding by lazy{ ActComparePageBinding.inflate(layoutInflater)} val binding by lazy{ ActComparePageBinding.inflate(layoutInflater)}
@ -45,18 +48,38 @@ class ComparePageDataAct : BaseVmAct<BaseVm>() {
if (intent.extras!!.containsKey("id")) { if (intent.extras!!.containsKey("id")) {
id = intent.extras!!.getString("id").toString() id = intent.extras!!.getString("id").toString()
} }
if(intent.extras!!.containsKey("functionList")){
functionList = intent.extras!!.getParcelableArrayList<DeviceFunctionBean>("functionList")!!
}
} }
private fun initVp2() { private fun initVp2(functionList :MutableList<DeviceFunctionBean>) {
listFragment.clear() listFragment.clear()
listFragment.add(setArgumentFrag(XlCompareDataFrag(), id)) functionList.forEach {
listFragment.add(setArgumentFrag(XYangCompareDataFrag(), id)) if (DeviceFunctionUtils.hasFunction(it,"hr")){
listFragment.add(setArgumentFrag(BreathCompareDataFrag (),id)) listFragment.add(setArgumentFrag(XlCompareDataFrag(), id))
listFragment.add(setArgumentFrag(TempCompareDataFrag(),id)) }else if(DeviceFunctionUtils.hasFunction(it,"so")){
listFragment.add(setArgumentFrag(SleepCompareDataFrag (),id)) listFragment.add(setArgumentFrag(XYangCompareDataFrag(), id))
listFragment.add(setArgumentFrag(XueYaCompareDataFrag (),id)) }else if(DeviceFunctionUtils.hasFunction(it,"resp")){
listFragment.add(setArgumentFrag(XueTangCompareDataFrag(),id)) listFragment.add(setArgumentFrag(BreathCompareDataFrag (),id))
listFragment.add(setArgumentFrag(UricAcidCompareDataFrag(),id)) }else if(DeviceFunctionUtils.hasFunction(it,"temp")){
listFragment.add(setArgumentFrag(BloodFatCompareDataFrag(),id)) listFragment.add(setArgumentFrag(TempCompareDataFrag(),id))
}else if(DeviceFunctionUtils.hasFunction(it,"sleep")){
listFragment.add(setArgumentFrag(SleepCompareDataFrag (),id))
}else if(DeviceFunctionUtils.hasFunction(it,"dbp")){
listFragment.add(setArgumentFrag(XueYaCompareDataFrag (),id))
}else if(DeviceFunctionUtils.hasFunction(it,"sugar")){
listFragment.add(setArgumentFrag(XueTangCompareDataFrag(),id))
}else if(DeviceFunctionUtils.hasFunction(it,"uric")){
listFragment.add(setArgumentFrag(UricAcidCompareDataFrag(),id))
}/*else if(it.type == "bloodFat" && it.status == 1){
listFragment.add(setArgumentFrag(BloodFatCompareDataFrag(),id))
}*/
}
binding.mVp2.adapter = VpAdapter(listFragment, this) binding.mVp2.adapter = VpAdapter(listFragment, this)
binding.mVp2.isUserInputEnabled = false binding.mVp2.isUserInputEnabled = false
@ -81,16 +104,25 @@ class ComparePageDataAct : BaseVmAct<BaseVm>() {
finish() finish()
} }
} }
initTab() if(functionList.size == 0){
initVp2() mViewModel.getDeviceFunctionList(id)
}else{
initTab(functionList)
initVp2(functionList)
}
} }
private fun initTab() { private fun initTab(functionList :MutableList<DeviceFunctionBean>) {
compareArray.forEach { functionList.forEach {
val tab = binding.xTablayout.newTab() if(it.type == "ecg" || it.type == "step" || it.type == "bloodFat"){
tab.text = it return@forEach
binding.xTablayout.addTab(tab) }
if (it.status == 1){
val tab = binding.xTablayout.newTab()
tab.text = it.name
binding.xTablayout.addTab(tab)
}
} }
binding.xTablayout.setOnTabSelectedListener(object : XTabLayout.OnTabSelectedListener{ binding.xTablayout.setOnTabSelectedListener(object : XTabLayout.OnTabSelectedListener{
override fun onTabSelected(tab: XTabLayout.Tab?) { override fun onTabSelected(tab: XTabLayout.Tab?) {
@ -107,7 +139,14 @@ class ComparePageDataAct : BaseVmAct<BaseVm>() {
} }
override fun liveObserver() { override fun liveObserver() {
mViewModel.functionLiveData.observe(this){
it.data.let {
functionList.addAll(it)
initTab(functionList)
initVp2(functionList)
}
} }
}
fun changeTitle(position: Int) { fun changeTitle(position: Int) {
binding.title.mTvTitle.text = title[position] binding.title.mTvTitle.text = title[position]

@ -10,31 +10,45 @@ import androidx.viewpager2.widget.ViewPager2
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.androidkun.xtablayout.XTabLayout import com.androidkun.xtablayout.XTabLayout
import com.gyf.immersionbar.ImmersionBar import com.gyf.immersionbar.ImmersionBar
import com.xty.base.act.BaseVmAct
import com.xty.base.act.IBaseAct import com.xty.base.act.IBaseAct
import com.xty.base.vm.BaseVm
import com.xty.base.vp2.VpAdapter import com.xty.base.vp2.VpAdapter
import com.xty.common.* import com.xty.common.*
import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.ARouterUrl
import com.xty.common.arouter.RouteManager import com.xty.common.arouter.RouteManager
import com.xty.common.util.DeviceFunctionUtils
import com.xty.common.weight.tablayout.listener.CustomTabEntity import com.xty.common.weight.tablayout.listener.CustomTabEntity
import com.xty.network.model.DeviceFunctionBean
import com.zj365.health.R import com.zj365.health.R
import com.zj365.health.databinding.ActHealthMainBinding import com.zj365.health.databinding.ActHealthMainBinding
import com.zj365.health.fragment.BreathCompareDataFrag
import com.zj365.health.fragment.bloodlipid.BloodFatFrag import com.zj365.health.fragment.bloodlipid.BloodFatFrag
import com.zj365.health.fragment.BreathFrag import com.zj365.health.fragment.BreathFrag
import com.zj365.health.fragment.SleepCompareDataFrag
import com.zj365.health.weight.DialogTip import com.zj365.health.weight.DialogTip
import com.zj365.health.fragment.SleepFrag import com.zj365.health.fragment.SleepFrag
import com.zj365.health.fragment.TemFrag import com.zj365.health.fragment.TemFrag
import com.zj365.health.fragment.TempCompareDataFrag
import com.zj365.health.fragment.UricAcidCompareDataFrag
import com.zj365.health.fragment.UricAcidFrag import com.zj365.health.fragment.UricAcidFrag
import com.zj365.health.fragment.XYangCompareDataFrag
import com.zj365.health.fragment.XdFrag import com.zj365.health.fragment.XdFrag
import com.zj365.health.fragment.XinlvFrag import com.zj365.health.fragment.XinlvFrag
import com.zj365.health.fragment.XlCompareDataFrag
import com.zj365.health.fragment.XueTangCompareDataFrag
import com.zj365.health.fragment.XueTangFrag import com.zj365.health.fragment.XueTangFrag
import com.zj365.health.fragment.XueYaCompareDataFrag
import com.zj365.health.fragment.XueyaFrag import com.zj365.health.fragment.XueyaFrag
import com.zj365.health.fragment.XueyangFrag import com.zj365.health.fragment.XueyangFrag
import com.zj365.health.fragment.bloodlipid.BloodFatCompareDataFrag
import com.zj365.health.vm.HealthMainVm
/** /**
* 健康监测 详情 * 健康监测 详情
*/ */
@Route(path = ARouterUrl.HEALTHMAIN) @Route(path = ARouterUrl.HEALTHMAIN)
class HealthMainAct : IBaseAct() { class HealthMainAct : BaseVmAct<HealthMainVm>() {
var isDemonstrate: Boolean = false var isDemonstrate: Boolean = false
var page = 0 var page = 0
val binding by lazy { ActHealthMainBinding.inflate(layoutInflater) } val binding by lazy { ActHealthMainBinding.inflate(layoutInflater) }
@ -42,6 +56,8 @@ class HealthMainAct : IBaseAct() {
var tabName = arrayOf<Int>() var tabName = arrayOf<Int>()
var id = "" var id = ""
var sex = "1" var sex = "1"
var functionType:String = ""
var functionList = ArrayList<DeviceFunctionBean>()
val dialogBind by lazy { val dialogBind by lazy {
DialogTip(this, "需绑定中健三六五健康手表,才能查看", "去绑定") { DialogTip(this, "需绑定中健三六五健康手表,才能查看", "去绑定") {
RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) RouteManager.goAct(ARouterUrl.DEVICE_CHOICE)
@ -51,8 +67,12 @@ class HealthMainAct : IBaseAct() {
override fun setLayout(): View = binding.root override fun setLayout(): View = binding.root
override fun initData() { override fun initData() {
super.initData() super.initData()
page = intent.extras!!.getInt("page") // page = intent.extras!!.getInt("page")
functionType = intent.extras!!.getString("functionType").toString()
isDemonstrate = intent.extras!!.getBoolean("isDemonstrate", false) isDemonstrate = intent.extras!!.getBoolean("isDemonstrate", false)
if(intent.extras!!.containsKey("functionList")){
functionList = intent.extras!!.getParcelableArrayList<DeviceFunctionBean>("functionList")!!
}
if (intent.extras!!.containsKey("id")) { if (intent.extras!!.containsKey("id")) {
id = intent.extras!!.getString("id").toString() id = intent.extras!!.getString("id").toString()
} }
@ -65,42 +85,21 @@ class HealthMainAct : IBaseAct() {
super.initView() super.initView()
val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE)
if(functionList.size == 0){
mViewModel.getDeviceFunctionList(id)
}else{
initTab(functionList)
initVp2(functionList)
}
tabName = arrayOf( tabName = arrayOf(
R.string.info_1, R.string.info_3, R.string.info_7, R.string.info_1, R.string.info_3, R.string.info_7,
R.string.info_4, R.string.info_6, R.string.info_2, R.string.info_4, R.string.info_6, R.string.info_2,
R.string.info_8, R.string.info_11/*, R.string.info_5, R.string.info_8, R.string.info_11/*, R.string.info_5,
R.string.info_10*/ R.string.info_10*/
) /*when (deviceType) { )
"", "U32" -> {
arrayOf(
R.string.info_1, R.string.info_3, R.string.info_7,
R.string.info_4, R.string.info_6, R.string.info_2,
R.string.info_8, R.string.info_11/*, R.string.info_5,
R.string.info_10*/
)
}
"A3" -> {
arrayOf(
R.string.info_1, R.string.info_3, R.string.info_7,
R.string.info_4, R.string.info_6, R.string.info_2,
R.string.info_8, R.string.info_11*//*, R.string.info_10*//*
)
}
else -> {
arrayOf(
R.string.info_1, R.string.info_3, R.string.info_7,
R.string.info_6, R.string.info_2, R.string.info_8,
R.string.info_11*//*, R.string.info_10*//*
)
}
}*/
statusBar(binding.title.mView) statusBar(binding.title.mView)
initTitle() initTitle()
initTab()
initVp2()
if (isDemonstrate) { if (isDemonstrate) {
binding.mSubmit.visibility = View.VISIBLE binding.mSubmit.visibility = View.VISIBLE
binding.title.mTvTitle.text = resources.getString(R.string.health_sub_demonstrate) binding.title.mTvTitle.text = resources.getString(R.string.health_sub_demonstrate)
@ -108,6 +107,16 @@ class HealthMainAct : IBaseAct() {
} }
} }
override fun liveObserver() {
mViewModel.functionLiveData.observe(this){
it.data.let {
functionList.addAll(it)
initTab(functionList)
initVp2(functionList)
}
}
}
private fun setArgumentFrag(frag: Fragment, id: String = "", sex: String = "1"): Fragment { private fun setArgumentFrag(frag: Fragment, id: String = "", sex: String = "1"): Fragment {
val bundle = Bundle() val bundle = Bundle()
bundle.putString("id", id) bundle.putString("id", id)
@ -118,9 +127,6 @@ class HealthMainAct : IBaseAct() {
private fun initTitle() { private fun initTitle() {
binding.title.mTvTitle.text = resources.getString(R.string.health_sub) binding.title.mTvTitle.text = resources.getString(R.string.health_sub)
var parentView = binding.title.mTvTitle.parent as View
// var bg = ContextCompat.getDrawable(this, R.drawable.shape_bg_health_round)
// parentView.background = bg
binding.title.mIvBack.apply { binding.title.mIvBack.apply {
this.setOnClickListener { this.setOnClickListener {
finish() finish()
@ -131,11 +137,21 @@ class HealthMainAct : IBaseAct() {
//设置tab //设置tab
private val mTabEntities: java.util.ArrayList<CustomTabEntity> = java.util.ArrayList() private val mTabEntities: java.util.ArrayList<CustomTabEntity> = java.util.ArrayList()
private fun initTab() { private fun initTab(functionList :MutableList<DeviceFunctionBean>) {
tabName.forEach { functionList.forEach {
var tab = binding.xTablayout.newTab() if (it.type == "step" || it.type == "bloodFat"){
tab.text = resources.getString(it) return@forEach
binding.xTablayout.addTab(tab) }
if (it.status == 1){
var tab = binding.xTablayout.newTab()
tab.text = it.name
binding.xTablayout.addTab(tab)
if(it.type == functionType){
page = tab.position
}
}
} }
binding.xTablayout.setOnTabSelectedListener(object : XTabLayout.OnTabSelectedListener { binding.xTablayout.setOnTabSelectedListener(object : XTabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: XTabLayout.Tab?) { override fun onTabSelected(tab: XTabLayout.Tab?) {
@ -163,46 +179,37 @@ class HealthMainAct : IBaseAct() {
} }
//设置vp2 //设置vp2
private fun initVp2() { private fun initVp2(functionList :MutableList<DeviceFunctionBean>) {
listFragment.clear() listFragment.clear()
/*when (MMkvHelper.getString(Const.DEVICE_TYPE)) { functionList.forEach {
"", "U32" -> {*/ if (DeviceFunctionUtils.hasFunction(it,"hr")){
listFragment.add(setArgumentFrag(XinlvFrag(), id)) listFragment.add(setArgumentFrag(XinlvFrag(), id))
}else if(DeviceFunctionUtils.hasFunction(it,"so")){
listFragment.add(setArgumentFrag(XueyangFrag(), id)) listFragment.add(setArgumentFrag(XueyangFrag(), id))
}else if(DeviceFunctionUtils.hasFunction(it,"resp")){
listFragment.add(setArgumentFrag(BreathFrag(), id)) listFragment.add(setArgumentFrag(BreathFrag(), id))
}else if(DeviceFunctionUtils.hasFunction(it,"temp")){
listFragment.add(setArgumentFrag(TemFrag(), id)) listFragment.add(setArgumentFrag(TemFrag(), id))
}else if(DeviceFunctionUtils.hasFunction(it,"sleep")){
listFragment.add(setArgumentFrag(SleepFrag(), id)) listFragment.add(setArgumentFrag(SleepFrag(), id))
listFragment.add(setArgumentFrag(XueyaFrag(), id))
listFragment.add(setArgumentFrag(XueTangFrag(), id))
listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex))
// listFragment.add(setArgumentFrag(XdFrag(), id))
// listFragment.add(setArgumentFrag(BloodFatFrag(), id))
/* }
"A3" -> { }else if(DeviceFunctionUtils.hasFunction(it,"dbp")){
listFragment.add(setArgumentFrag(XinlvFrag(), id))
listFragment.add(setArgumentFrag(XueyangFrag(), id))
listFragment.add(setArgumentFrag(BreathFrag(), id))
listFragment.add(setArgumentFrag(TemFrag(), id))
listFragment.add(setArgumentFrag(SleepFrag(), id))
listFragment.add(setArgumentFrag(XueyaFrag(), id)) listFragment.add(setArgumentFrag(XueyaFrag(), id))
listFragment.add(setArgumentFrag(XueTangFrag(), id))
listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex))
// listFragment.add(setArgumentFrag(BloodFatFrag(), id))
}
else -> { }else if(DeviceFunctionUtils.hasFunction(it,"sugar")){
listFragment.add(setArgumentFrag(XinlvFrag(), id))
listFragment.add(setArgumentFrag(XueyangFrag(), id))
listFragment.add(setArgumentFrag(BreathFrag(), id))
listFragment.add(setArgumentFrag(SleepFrag(), id))
listFragment.add(setArgumentFrag(XueyaFrag(), id))
listFragment.add(setArgumentFrag(XueTangFrag(), id)) listFragment.add(setArgumentFrag(XueTangFrag(), id))
}else if(DeviceFunctionUtils.hasFunction(it,"uric")){
listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex)) listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex))
// listFragment.add(setArgumentFrag(BloodFatFrag(), id))
} }/*else if(it.type == "bloodFat" && it.status == 1){
}*/ listFragment.add(setArgumentFrag(BloodFatCompareDataFrag(),id))
}*/
}
binding.mVp2.adapter = VpAdapter(listFragment, this) binding.mVp2.adapter = VpAdapter(listFragment, this)
binding.mVp2.isUserInputEnabled = false binding.mVp2.isUserInputEnabled = false
@ -233,25 +240,11 @@ class HealthMainAct : IBaseAct() {
txtColInt = ContextCompat.getColor(this, R.color.col_515) txtColInt = ContextCompat.getColor(this, R.color.col_515)
ImmersionBar.with(this).statusBarDarkFont(true).init() ImmersionBar.with(this).statusBarDarkFont(true).init()
binding.title.mIvReight.visibility = View.GONE binding.title.mIvReight.visibility = View.GONE
// if (position == 5 && tabName.size == 8) {
// bg = ContextCompat.getDrawable(this, R.drawable.shape_white)!!
// backId = R.mipmap.icon_back_black
// txtColInt = ContextCompat.getColor(this, R.color.col_515)
// ImmersionBar.with(this).statusBarDarkFont(true).init()
// binding.title.mIvReight.visibility = View.GONE
// } else {
// bg = ContextCompat.getDrawable(this, R.drawable.shape_bg_health_round)!!
// backId = R.mipmap.icon_back_white
// txtColInt = ContextCompat.getColor(this, R.color.white)
// ImmersionBar.with(this).statusBarDarkFont(false).init()
// //binding.title.mIvReight.visibility=View.VISIBLE
// }
var parentView = binding.title.mTvTitle.parent as View var parentView = binding.title.mTvTitle.parent as View
parentView.background = bg parentView.background = bg
binding.title.mTvTitle.setTextColor(txtColInt) binding.title.mTvTitle.setTextColor(txtColInt)
binding.title.mIvBack.apply { binding.title.mIvBack.apply {
// this.setImageResource(backId)
this.setOnClickListener { this.setOnClickListener {
finish() finish()
} }

@ -37,7 +37,9 @@ import com.xty.common.event.IntegralEvent
import com.xty.common.setImageUser import com.xty.common.setImageUser
import com.xty.common.util.CommonToastUtils import com.xty.common.util.CommonToastUtils
import com.xty.common.util.CommonUtils import com.xty.common.util.CommonUtils
import com.xty.common.util.DeviceFunctionUtils
import com.xty.common.weight.CenterImageSpan import com.xty.common.weight.CenterImageSpan
import com.xty.network.model.DeviceFunctionBean
import com.zj365.health.R import com.zj365.health.R
import com.zj365.health.act.exception.BaseExceptionDataAct import com.zj365.health.act.exception.BaseExceptionDataAct
import com.zj365.health.adapter.DayReportInfoAdapter import com.zj365.health.adapter.DayReportInfoAdapter
@ -105,6 +107,9 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
private val infoAdapter by lazy { DayReportInfoAdapter() } private val infoAdapter by lazy { DayReportInfoAdapter() }
private val mAdapterCount by lazy { ReportAnalysisAdapter() } private val mAdapterCount by lazy { ReportAnalysisAdapter() }
var functionList = ArrayList<DeviceFunctionBean>()
private val dialogBind by lazy { private val dialogBind by lazy {
DialogTip(this, "需绑定中健三六五健康手表,才能查看", "去绑定") { DialogTip(this, "需绑定中健三六五健康手表,才能查看", "去绑定") {
RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) RouteManager.goAct(ARouterUrl.DEVICE_CHOICE)
@ -178,6 +183,10 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
super.initData() super.initData()
isX1X2 = MMkvHelper.getBoolean(Const.X1_X2_Device, false) isX1X2 = MMkvHelper.getBoolean(Const.X1_X2_Device, false)
isEstimate = intent.getBooleanExtra("isEstimate", false) isEstimate = intent.getBooleanExtra("isEstimate", false)
if(intent.extras!!.containsKey("functionList")){
functionList = intent.extras!!.getParcelableArrayList<DeviceFunctionBean>("functionList")!!
}
if (isEstimate) { if (isEstimate) {
binding.mTvTime.setCompoundDrawablesWithIntrinsicBounds( binding.mTvTime.setCompoundDrawablesWithIntrinsicBounds(
null, // left null, // left
@ -241,6 +250,10 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
} }
} }
if(functionList.size == 0){
mViewModel.getDeviceFunctionList(userId)
}
//设置tab //设置tab
//"用户信息", "器官功能分析", "睡眠监测", "中医分析", "中医养生指导", "西医分析", "西医指导", //"用户信息", "器官功能分析", "睡眠监测", "中医分析", "中医养生指导", "西医分析", "西医指导",
// "饮食指导", "运动指导", "睡眠方案建议", "营养处方建议", "统计分析", "综合分析" // "饮食指导", "运动指导", "睡眠方案建议", "营养处方建议", "统计分析", "综合分析"
@ -833,7 +846,7 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
) )
// x1和x2没有体温 // x1和x2没有体温
if (!isX1X2 || isDemonstrate) { if (DeviceFunctionUtils.hasFunction(functionList,"temp")|| isDemonstrate) {
listInfo.add( listInfo.add(
ReportBean.HrInfo( ReportBean.HrInfo(
"体温", "体温",
@ -1027,7 +1040,7 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
} }
list.add(respiratoryMean) list.add(respiratoryMean)
if (!isX1X2 || isDemonstrate) { if (DeviceFunctionUtils.hasFunction(functionList,"temp")|| isDemonstrate) {
val tempMean = com.xty.common.model.ReportBean().apply { val tempMean = com.xty.common.model.ReportBean().apply {
title = "体温" title = "体温"
count = it.data.tempMean.count count = it.data.tempMean.count
@ -1285,6 +1298,10 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
CommonToastUtils.showLoserToast("分享记录失败") CommonToastUtils.showLoserToast("分享记录失败")
} }
} }
mViewModel.functionLiveData.observe(this){
functionList.addAll(it.data)
}
} }
private fun goExceptionActivity(exceptionType: Int) { private fun goExceptionActivity(exceptionType: Int) {
@ -1679,7 +1696,7 @@ class HealthSkyHourReportAct : BaseVmAct<ReportVm>() {
binding.analysisTv1.text = "平均心率:" + it.data.signData.hr.avg + "次/分" binding.analysisTv1.text = "平均心率:" + it.data.signData.hr.avg + "次/分"
binding.analysisTv2.text = "平均血氧:" + it.data.signData.so.avg + "%" binding.analysisTv2.text = "平均血氧:" + it.data.signData.so.avg + "%"
binding.analysisTv3.text = "平均呼吸率:" + it.data.signData.respiratory.avg + "次/分" binding.analysisTv3.text = "平均呼吸率:" + it.data.signData.respiratory.avg + "次/分"
if (isX1X2) { if (!DeviceFunctionUtils.hasFunction(functionList,"temp")) {
binding.analysisTv8.visibility = View.GONE binding.analysisTv8.visibility = View.GONE
} else { } else {
binding.analysisTv8.text = binding.analysisTv8.text =

@ -94,7 +94,7 @@ class FamilyHealthAct : BaseListAct<FamilyHealthVm>() {
RouteManager.goAct(ARouterUrl.FAMILY_GUARDIAN_LIST_ACT) RouteManager.goAct(ARouterUrl.FAMILY_GUARDIAN_LIST_ACT)
} }
R.id.tv_current_time ->{ R.id.tv_current_time ->{
RouteManager.goAct(ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT) // RouteManager.goAct(ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT)
} }
R.id.tv_watch ->{ R.id.tv_watch ->{

@ -0,0 +1,16 @@
package com.zj365.health.act.healthcode
import android.view.View
import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm
import com.zj365.health.databinding.ActHealthBodyInquiryBinding
class HealthBodyInquiryAct : BaseVmAct<BaseVm>() {
val binding by lazy { ActHealthBodyInquiryBinding.inflate(layoutInflater) }
override fun liveObserver() {
}
override fun setLayout() = binding.root
}

@ -0,0 +1,14 @@
package com.zj365.health.act.healthcode
import android.view.View
import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm
import com.zj365.health.databinding.ActHealthCodeMainBinding
class HealthCodeMainAct : BaseVmAct<BaseVm>() {
val binding by lazy { ActHealthCodeMainBinding.inflate(layoutInflater) }
override fun liveObserver() {
}
override fun setLayout() = binding.root
}

@ -0,0 +1,37 @@
package com.zj365.health.act.healthrecord
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm
import com.zj365.health.adapter.familyhealth.HealthFamilyTargetAdapter
import com.zj365.health.databinding.ActHealthRecordMainBinding
class HealthRecordMainAct : BaseVmAct<BaseVm>() {
val binding by lazy { ActHealthRecordMainBinding.inflate(layoutInflater) }
val mAdapter by lazy { HealthFamilyTargetAdapter() }
override fun liveObserver() {
}
override fun initView() {
super.initView()
statusBar(binding.title.mView)
binding.title.mTvTitle.text ="健康档案"
binding.title.mIvBack.setOnClickListener {
finish()
}
initAdapter()
}
fun initAdapter (){
binding.recycler.adapter = mAdapter
binding.recycler.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false)
}
override fun setLayout() = binding.root
}

@ -0,0 +1,31 @@
package com.zj365.health.act.healthrecord
import android.view.View
import com.xty.base.act.BaseListAct
import com.xty.base.vm.BaseVm
import com.zj365.health.databinding.ActHealthRecordBinding
import com.zj365.health.databinding.ActHealthRecordsListBinding
class HealthRecordsListAct : BaseListAct<BaseVm>() {
val binding by lazy { ActHealthRecordsListBinding.inflate(layoutInflater) }
override fun initAdapter() {
}
override fun loadData() {
}
override fun initView() {
super.initView()
statusBar(binding.title.mView)
binding.title.mTvTitle.text = "报告记录"
binding.title.mIvBack.setOnClickListener {
finish()
}
}
override fun liveObserver() {
}
override fun setLayout() = binding.root
}

@ -0,0 +1,26 @@
package com.zj365.health.act.healthrecord
import android.view.View
import com.xty.base.act.BaseListAct
import com.xty.base.act.BaseVmAct
import com.xty.base.vm.BaseVm
import com.zj365.health.databinding.ActUploadHealthRecordBinding
class UploadHealthRecordAct : BaseVmAct<BaseVm>() {
val binding by lazy { ActUploadHealthRecordBinding.inflate(layoutInflater) }
override fun liveObserver() {
}
override fun initView() {
super.initView()
statusBar(binding.title.mView)
binding.title.mTvTitle.text = "上传报告"
binding.title.mIvBack.setOnClickListener {
finish()
}
}
override fun setLayout() = binding.root
}

@ -0,0 +1,20 @@
package com.zj365.health.vm
import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm
import com.xty.network.model.DeviceFunctionBean
import com.xty.network.model.RespBody
import org.json.JSONObject
class ComparePageDataVm :BaseVm() {
val functionLiveData by lazy { MutableLiveData<RespBody<MutableList<DeviceFunctionBean>>>() }
fun getDeviceFunctionList(id:String){
startHttp {
val json = JSONObject()
json.put("id", id)
val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString()))
body.getCodeStatus(functionLiveData, nowData)
}
}
}

@ -0,0 +1,20 @@
package com.zj365.health.vm
import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm
import com.xty.network.model.DeviceFunctionBean
import com.xty.network.model.RespBody
import org.json.JSONObject
class HealthMainVm : BaseVm() {
val functionLiveData by lazy { MutableLiveData<RespBody<MutableList<DeviceFunctionBean>>>() }
fun getDeviceFunctionList(id:String){
startHttp {
val json = JSONObject()
json.put("id", id)
val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString()))
body.getCodeStatus(functionLiveData, nowData)
}
}
}

@ -233,4 +233,14 @@ class ReportVm : BaseVm() {
null null
} }
} }
val functionLiveData by lazy { MutableLiveData<RespBody<MutableList<DeviceFunctionBean>>>() }
fun getDeviceFunctionList(id:String){
startHttp {
val json = JSONObject()
json.put("id", id)
val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString()))
body.getCodeStatus(functionLiveData, nowData)
}
}
} }

@ -0,0 +1,184 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/col_6f7">
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_round_white"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_14"
android:paddingTop="22dp"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:paddingBottom="@dimen/dp_22"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="问诊科室"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_26"
android:id="@+id/tv_department"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_video_inquiry"
android:layout_marginTop="@dimen/dp_16"
android:text="视频问诊"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_02c"
android:drawablePadding="@dimen/dp_6"
android:drawableLeft="@mipmap/icon_video_inquriy"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_round_white"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:paddingTop="22dp"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:paddingBottom="@dimen/dp_22"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="概况"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_22"
android:textColor="@color/col_c7c"
android:textSize="@dimen/sp_14"
android:id="@+id/tv_survey"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_round_white"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:paddingTop="22dp"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:paddingBottom="@dimen/dp_22"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="定义"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_22"
android:textColor="@color/col_c7c"
android:textSize="@dimen/sp_14"
android:id="@+id/tv_definition"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_round_white"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:paddingTop="22dp"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:paddingBottom="@dimen/dp_22"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="病因"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_22"
android:textColor="@color/col_c7c"
android:textSize="@dimen/sp_14"
android:id="@+id/tv_pathogeny"/>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

@ -0,0 +1,567 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<com.ruffian.library.widget.RRelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_36"
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_3"
app:corner_radius="@dimen/dp_18"
app:background_normal="@color/col_2F2">
<ImageView
android:id="@+id/img_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_search"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_21"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入症状、病因、身体反应"
android:layout_toRightOf="@+id/img_search"
android:layout_centerVertical="true"
android:textColor="@color/col_c7c"
android:textSize="@dimen/sp_13"
android:layout_marginLeft="@dimen/dp_7"/>
</com.ruffian.library.widget.RRelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全身性其他疾病"
android:textSize="@dimen/sp_17"
android:textColor="@color/col_313"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_34"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_38"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_8"
app:layout_constraintTop_toTopOf="@+id/img_body"
app:layout_constraintBottom_toBottomOf="@+id/img_body"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/img_body"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="1"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="头部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="2"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="颈部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="3"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="胸部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="4"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="腹部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="5"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="腰部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="6"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="骨盆"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/img_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/bg_person_body"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="@dimen/dp_8"
android:layout_marginRight="@dimen/dp_14"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="@+id/img_body"
app:layout_constraintBottom_toBottomOf="@+id/img_body"
app:layout_constraintLeft_toRightOf="@+id/img_body"
app:layout_constraintRight_toRightOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="7"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="血液"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="8"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="皮肤"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="9"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="肌肉"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="10"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="骨骼"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="11"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生殖"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="12"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="四肢"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

@ -0,0 +1,578 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/col_6f7">
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/shape_round_white"
android:layout_margin="@dimen/dp_14">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginLeft="@dimen/dp_13"
android:layout_marginRight="@dimen/dp_14">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="@dimen/dp_57"
android:layout_height="@dimen/dp_57"
android:id="@+id/img_avatar"
android:background="@mipmap/icon_default_avator"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_17"
android:textColor="@color/col_313"
android:layout_toRightOf="@+id/img_avatar"
tools:text="李晓芳"
android:layout_marginLeft="@dimen/dp_10"/>
<TextView
android:id="@+id/tv_complete_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="完善信息"
android:layout_alignParentEnd="true"
android:textSize="@dimen/sp_13"
android:textColor="@color/col_c7c"
android:drawableRight="@mipmap/icon_arrow_right"
android:drawablePadding="@dimen/dp_5"/>
<ProgressBar
android:id="@+id/mProgress"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_14"
android:layout_below="@+id/tv_name"
android:layout_toRightOf="@+id/img_avatar"
android:progress="0"
android:progressDrawable="@drawable/progress_bg_info" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_14"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_bmi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_18"
tools:text="31"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_bmi_desc"
android:textSize="@dimen/sp_13"
android:textColor="@color/col_91d"
tools:text="肥胖"
android:layout_marginLeft="@dimen/dp_7"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_12"
android:textColor="@color/col_C7C"
android:layout_marginTop="@dimen/dp_8"
android:text="BMI"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_bmr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_18"
tools:text="31"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_12"
android:textColor="@color/col_C7C"
android:layout_marginTop="@dimen/dp_8"
android:text="BMR"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_body_fat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_18"
tools:text="31"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_12"
android:layout_marginTop="@dimen/dp_8"
android:textColor="@color/col_C7C"
android:text="体脂率"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<com.androidkun.xtablayout.XTabLayout
android:id="@+id/xTablayout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_42"
app:xTabDisplayNum="4"
app:xTabIndicatorColor="@color/col_02c"
app:xTabIndicatorHeight="@dimen/dp_3"
app:xTabIndicatorRoundY="@dimen/dp_3"
app:xTabIndicatorWidth="@dimen/dp_20"
app:xTabMode="scrollable"
app:xTabSelectedTextColor="@color/col_02c"
app:xTabSelectedTextSize="@dimen/sp_16"
app:xTabTextColor="@color/col_c7c"
app:xTabTextSelectedBold="true"
app:xTabTextSize="@dimen/sp_14" />
<androidx.core.widget.NestedScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clSelfTest"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:background="@drawable/shape_round_white"
android:paddingBottom="@dimen/dp_27">
<TextView
android:id="@+id/mTvSelTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_22"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="自检自测"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<include
android:id= "@+id/cl_body"
layout="@layout/layout_health_record_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mTvSelTest"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clFoodDiary"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:background="@drawable/shape_round_white"
android:paddingBottom="@dimen/dp_27">
<TextView
android:id="@+id/mTvFoodDiary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_22"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="饮食日记"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<TextView
android:id="@+id/tv_balance_diet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标准均衡饮食"
android:textSize="@dimen/sp_16"
android:textColor="@color/col_313"
app:layout_constraintTop_toBottomOf="@+id/mTvFoodDiary"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="@dimen/dp_22"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="前往记录"
android:drawableRight="@mipmap/icon_arrow_right"
android:drawablePadding="@dimen/dp_5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mTvFoodDiary"
android:layout_marginTop="@dimen/dp_22"/>
<TextView
android:id="@+id/tv_diet_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="还可摄入"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_c7c"
app:layout_constraintTop_toBottomOf="@+id/tv_balance_diet"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="@dimen/dp_26"
android:textStyle="bold"/>
<LinearLayout
android:id="@+id/ll_calorie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="@dimen/dp_19"
app:layout_constraintTop_toBottomOf="@+id/tv_diet_desc"
app:layout_constraintLeft_toLeftOf="parent">
<TextView
android:id="@+id/tv_diet_calorie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="29sp"
android:textStyle="bold"
android:textColor="@color/col_313"
tools:text="2315"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="千卡"
android:textColor="@color/col_c7c"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="@dimen/dp_39"
app:layout_constraintTop_toBottomOf="@+id/ll_calorie"
app:layout_constraintLeft_toLeftOf="parent">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="碳水化合物"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_313"/>
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_11"
android:layout_below="@+id/tv_name"
android:layout_toRightOf="@+id/img_avatar"
android:progress="0"
android:progressDrawable="@drawable/progress_bg_info" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_4"
tools:text="55%"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="@dimen/dp_19"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蛋白质"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_313"/>
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_11"
android:layout_below="@+id/tv_name"
android:layout_toRightOf="@+id/img_avatar"
android:progress="0"
android:progressDrawable="@drawable/progress_bg_info" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_4"
tools:text="55%"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="@dimen/dp_19"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="脂肪"
android:textSize="@dimen/sp_14"
android:textColor="@color/col_313"/>
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_11"
android:layout_below="@+id/tv_name"
android:layout_toRightOf="@+id/img_avatar"
android:progress="0"
android:progressDrawable="@drawable/progress_bg_info" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_4"
tools:text="55%"/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clHealthMonitoring"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:background="@drawable/shape_round_white"
android:paddingBottom="@dimen/dp_27">
<TextView
android:id="@+id/mTvHealthMonitoring"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_22"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="健康监测"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycler"
app:layout_constraintTop_toBottomOf="@+id/mTvHealthMonitoring"
app:layout_constraintLeft_toLeftOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clHealthRecording"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_12"
android:background="@drawable/shape_round_white"
android:paddingBottom="@dimen/dp_27">
<TextView
android:id="@+id/mTvHealthRecording"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_22"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="健康记录"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_32"
app:layout_constraintTop_toBottomOf="@+id/mTvHealthRecording"
app:layout_constraintLeft_toLeftOf="parent">
<LinearLayout
android:layout_width="0dp"
android:layout_height="@dimen/dp_100"
android:layout_weight="1"
android:background="@mipmap/bg_home_item"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_inquiry_record"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="问诊记录"
android:layout_marginTop="@dimen/dp_11"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_14"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="@dimen/dp_100"
android:layout_weight="1"
android:background="@mipmap/bg_home_item"
android:layout_marginLeft="@dimen/dp_17"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_report_record"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="报告记录"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_11"
android:textSize="@dimen/sp_14"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="@dimen/dp_100"
android:layout_weight="1"
android:background="@mipmap/bg_home_item"
android:layout_marginLeft="@dimen/dp_17"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/icon_health_week_record"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="健康周报"
android:textColor="@color/col_313"
android:layout_marginTop="@dimen/dp_11"
android:textSize="@dimen/sp_14"/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingDefaultResource">
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/mRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/title"
android:background="@color/col_f4f">
<com.scwang.smart.refresh.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"/>
<com.scwang.smart.refresh.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
<TextView
android:id="@+id/tv_upload_report"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_margin="@dimen/dp_25"
android:background="@drawable/shape_r25_02c"
android:text="上传报告"
android:textSize="@dimen/sp_18"
android:textColor="@color/white"
android:textStyle="bold"
android:gravity="center"
android:layout_alignParentBottom="true"/>
</RelativeLayout>

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:background="@color/col_6f7"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<LinearLayout
android:id="@+id/ll_img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:background="@drawable/shape_round_white"
android:layout_marginTop="@dimen/dp_14"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:paddingLeft="@dimen/dp_16"
android:paddingRight="@dimen/dp_16"
android:paddingBottom="25dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_22"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="上传图片"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重要内容拍照存储0/5"
android:layout_marginTop="@dimen/dp_21"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_15"/>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycler"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="示例图"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_c7c"
android:layout_marginTop="@dimen/dp_20"/>
<com.ruffian.library.widget.RImageView
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_70"
app:corner_radius="@dimen/dp_5"
app:is_circle="false"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_14"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"
android:orientation="vertical"
android:layout_below="@+id/ll_img">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_22"
android:drawableStart="@drawable/shape_head_tip_new"
android:drawablePadding="@dimen/dp_10"
android:text="备注"
android:textColor="@color/col_313"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompatTextViewDrawableXml" />
<EditText
android:id="@+id/mZyDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_round_gray"
android:layout_marginTop="22dp"
android:gravity="top"
android:minHeight="@dimen/dp_100"
android:hint="请输入备注"
android:maxLength="500"
android:padding="@dimen/dp_10"
android:text=""
android:textColor="@color/col_455"
android:textSize="@dimen/dp_14"
/>
</LinearLayout>
<TextView
android:id="@+id/tv_save"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_margin="@dimen/dp_25"
android:background="@drawable/shape_r25_02c"
android:textColor="@color/white"
android:textSize="@dimen/sp_18"
android:textStyle="bold"
android:gravity="center"
android:text="保存"
android:layout_alignParentBottom="true"/>
</RelativeLayout>

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:background="@mipmap/bg_health_record_test">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_25"
android:textColor="@color/white"
android:textStyle="bold"
tools:text="67"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="@dimen/sp_15"
android:text="健康分"
android:textStyle="bold"
android:layout_marginTop="@dimen/dp_9"/>
</LinearLayout>
</FrameLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@ -23,6 +23,7 @@ import com.xty.common.bracelet.YCBBlueConnectHelper
import com.xty.common.event.BlueToothConnectEvent import com.xty.common.event.BlueToothConnectEvent
import com.xty.common.event.MyInfoEvent import com.xty.common.event.MyInfoEvent
import com.xty.common.event.ReChangeEvent import com.xty.common.event.ReChangeEvent
import com.xty.common.setImage
import com.xty.common.util.PermissionUtils import com.xty.common.util.PermissionUtils
import com.xty.network.MyRetrofit import com.xty.network.MyRetrofit
import com.xty.network.model.SettingBean import com.xty.network.model.SettingBean
@ -161,38 +162,26 @@ class DevInfoAct : BaseVmAct<SettingVm>() {
} }
mViewModel.deviceInfo.observe(this) { mViewModel.deviceInfo.observe(this) {
if(it.data.bindType == 1){
binding.mNickName.text = "设备名称:${it.data.watchName?:""}" binding.mNickName.text = "设备名称:${it.data.watchName?:""}"
binding.mNum.text = "设备编码:${it.data.bluetooth?:""}" binding.mNum.text = "设备编码:${it.data.bluetooth?:""}"
binding.mCode.text = "物联网卡:${it.data.iccid?:""}" binding.mCode.text = "物联网卡:${it.data.iccid?:""}"
binding.mActiveCode.text = "流量到期:${it.data.flowExpireTime?:""}" binding.mActiveCode.text = "流量到期:${it.data.flowExpireTime?:""}"
binding.mActiveCode.visibility = View.VISIBLE binding.mActiveCode.visibility = View.VISIBLE
binding.ivDevice.setImage(this,it.data.deviceImageUrl)
setDevicePic(it.data.deviceType, binding.ivDevice)
} }else{
} binding.mNickName.text = "设备名称:${it.data.watchName?:""}"
binding.mNum.text = "设备编码:${it.data.bluetooth?:""}"
binding.mCode.text = "设备激活码:${it.data.activationCode?:""}"
private fun setDevicePic(type: String?, imageView: ImageView) { binding.mActiveCode.text = "设备激活码:${it.data.activationCode?:""}"
if (type == null) { binding.mActiveCode.visibility = View.GONE
return binding.tvRecharge.visibility = View.GONE
} binding.tvDeviceSetting.visibility = View.GONE
when (type) { binding.ivDevice.setImage(this,it.data.deviceImageUrl)
"U32" -> {
imageView.setImageResource(R.mipmap.ic_watch_u32_big)
} }
"A3" -> {
imageView.setImageResource(R.mipmap.ic_watch_a3_big)
}
"X1" -> {
imageView.setImageResource(R.mipmap.ic_watch_x1_big)
}
"X2" -> {
imageView.setImageResource(R.mipmap.ic_watch_x2_big)
}
} }
} }

@ -25,4 +25,10 @@ class FactorySettingDialog(context: Context,var title:String,var confirm:()->Uni
fun changeTextSetting() { fun changeTextSetting() {
binding.mTitle.gravity=Gravity.LEFT binding.mTitle.gravity=Gravity.LEFT
} }
fun isShow(){
if (!isShowing) {
show()
}
}
} }

@ -1,6 +1,7 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-parcelize'
def androidId = rootProject.ext.defaultSetting def androidId = rootProject.ext.defaultSetting
def rely = rootProject.ext.relyOn def rely = rootProject.ext.relyOn
@ -39,6 +40,7 @@ android {
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
} }
dependencies { dependencies {

@ -471,6 +471,9 @@ interface ApiInterface {
@POST("customer/index") @POST("customer/index")
suspend fun getMainInfo(@Body rb: RequestBody): RespBody<MainBean> suspend fun getMainInfo(@Body rb: RequestBody): RespBody<MainBean>
@POST("customer/user/getDeviceFuncList")
suspend fun getDeviceFunctionList(@Body rb: RequestBody) :RespBody<MutableList<DeviceFunctionBean>>
/** /**
* 首页小贴士 * 首页小贴士
*/ */
@ -903,6 +906,11 @@ interface ApiInterface {
*/ */
@GET("customer/analyse/coupeNew") @GET("customer/analyse/coupeNew")
suspend fun getScinceList(): RespBody<MutableList<ScienceBean>> suspend fun getScinceList(): RespBody<MutableList<ScienceBean>>
/**
* 健康科普详情
*/
@GET("customer/analyse/coupeDetail")
suspend fun getScinceDetail(@Query("id") id: String):RespBody<ScienceBean>
/** /**
* 获取首页布局 * 获取首页布局

@ -1,3 +1,3 @@
package com.xty.network.model package com.xty.network.model
data class DeviceBean(val imageUrl:String,val watchTypeName:String,val watchType:Int,val deviceType:String) data class DeviceBean(val imageUrl:String,val watchTypeName:String,val watchType:Int,val deviceType:String,val bindType:Int)

@ -0,0 +1,13 @@
package com.xty.network.model
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class DeviceFunctionBean(
val name:String, //功能名
val type:String, //功能类型
val status:Int //01
): Parcelable

@ -11,6 +11,7 @@ data class HealthMonitoringListBean(
var buttonBg: Int, var buttonBg: Int,
var buttonIcon: Int, var buttonIcon: Int,
var type: Int,//0.心率、1.血氧、2.呼吸率、3.体温、4.步数、5.睡眠、6.血压、7.血糖、8.心电、9.尿酸、10.血脂。 var type: Int,//0.心率、1.血氧、2.呼吸率、3.体温、4.步数、5.睡眠、6.血压、7.血糖、8.心电、9.尿酸、10.血脂。
var functionType:String, //功能code
var sex: String = "",//性别12 var sex: String = "",//性别12
var calorie: String? = "" var calorie: String? = ""
) )

@ -15,6 +15,8 @@ data class UserEquipmentInformationizationBean(
val power: String,//电量 val power: String,//电量
val linkStatus: String,//连接状态 val linkStatus: String,//连接状态
val iccid:String,//物联网卡 val iccid:String,//物联网卡
val bindType:Int, //1中健4G2鹏升4G
val deviceImageUrl:String,//手表图片
val flowExpireTime:String,//流量到期时间 val flowExpireTime:String,//流量到期时间
val deviceTotal: DeviceTotal,//物联网设备统计 val deviceTotal: DeviceTotal,//物联网设备统计
val adorn: Adorn,//佩戴时长对象 val adorn: Adorn,//佩戴时长对象

@ -19,12 +19,19 @@ class ScienceDetailAct:BaseVmAct<ScienceDetailVm>() {
val binding by lazy{ActScienceDetailBinding.inflate(layoutInflater)} val binding by lazy{ActScienceDetailBinding.inflate(layoutInflater)}
var bean: ScienceBean?=null var bean: ScienceBean?=null
var job: Job?=null var job: Job?=null
var id:String? = null
override fun setLayout()=binding.root override fun setLayout()=binding.root
override fun initData() { override fun initData() {
super.initData() super.initData()
isDarkBar=true isDarkBar=true
intent.extras?.let { intent.extras?.let {
bean=intent.extras!!.getSerializable("bean") as ScienceBean if(it.containsKey("bean")){
bean=intent.extras!!.getSerializable("bean") as ScienceBean
}else if(it.containsKey("id")){
id = it.getString("id")
}
} }
} }
@ -42,6 +49,10 @@ class ScienceDetailAct:BaseVmAct<ScienceDetailVm>() {
binding.mRich.loadDataWithBaseURL(null,bean!!.content,"text/html", "utf-8", null); binding.mRich.loadDataWithBaseURL(null,bean!!.content,"text/html", "utf-8", null);
} }
id?.let {
mViewModel.getDetailForId(it)
}
} }
private fun startDelay() { private fun startDelay() {
@ -59,5 +70,15 @@ class ScienceDetailAct:BaseVmAct<ScienceDetailVm>() {
} }
override fun liveObserver() { override fun liveObserver() {
mViewModel.detailLiveData.observe(this){
it.data.let {
binding.mTvSubTitle.text = it.name
binding.mTvOrgName.text = it.orgName
binding.mTvReleaseTime.text = it.time
WebViewOrigin().initWebSettings(this,binding.mRich)
binding.mRich.loadDataWithBaseURL(null,it.content,"text/html", "utf-8", null);
}
}
} }
} }

@ -3,13 +3,26 @@ package com.xty.server.vm
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm import com.xty.base.vm.BaseVm
import com.xty.network.model.RespBody import com.xty.network.model.RespBody
import com.xty.network.model.ScienceBean
import org.json.JSONObject
class ScienceDetailVm:BaseVm() { class ScienceDetailVm:BaseVm() {
val anyLive by lazy{MutableLiveData<RespBody<Any>>()} val anyLive by lazy{MutableLiveData<RespBody<Any>>()}
val detailLiveData by lazy { MutableLiveData<RespBody<ScienceBean>>() }
fun startSetScore(){ fun startSetScore(){
startHttp { startHttp {
var body=apiInterface().saveScore() var body=apiInterface().saveScore()
body.getCodeStatus(anyLive,nowData) body.getCodeStatus(anyLive,nowData)
} }
} }
fun getDetailForId(id:String){
startHttp {
var body=apiInterface().getScinceDetail(id)
body.getCodeStatus(detailLiveData,nowData)
}
}
} }
Loading…
Cancel
Save