diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 39b6060..9f6cc5e 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -61,5 +61,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt
index b19d52e..bb14c68 100644
--- a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt
+++ b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt
@@ -1064,6 +1064,7 @@ class DynamicManagementFrag : BaseVmFrag() , EasyPermission
//设置用户头像
setUserImage(settingBean.user.id, settingBean.user.avatarUrl, settingBean.user.sex.toString())
+ binding.mHeader.tvUserName.text = settingBean.user.name
if (settingBean.user.bluetooth.isNullOrEmpty()) { //没有mac地址表示未绑定
// binding.mContent.visibility = View.VISIBLE
diff --git a/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt b/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt
index 3920847..4712214 100644
--- a/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt
+++ b/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt
@@ -45,6 +45,7 @@ import com.zj365.health.weight.DialogTip
import com.zj365.mime.weight.NoticeSettingDialog
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
+import me.chunyu.call_kit.CallKit
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
@@ -159,8 +160,13 @@ HealthHomeFrag : BaseVmFrag() {
// req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
- req.miniprogramType =
- WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ if(bannerBean.wxType == 3){
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ }else{
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW // 可选打开 开发版,体验版和正式版
+ }
api.sendReq(req)
}
@@ -203,8 +209,13 @@ HealthHomeFrag : BaseVmFrag() {
//req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
- req.miniprogramType =
- WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ if(bannerBean.wxType == 3){
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ }else{
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW // 可选打开 开发版,体验版和正式版
+ }
api.sendReq(req)
}
@@ -241,13 +252,23 @@ HealthHomeFrag : BaseVmFrag() {
}
2->{
- contentData.jumpUrl?.let {
- bundle.clear()
- bundle.putString("title", contentData.name)
- bundle.putString("url", contentData.jumpUrl)
- RouteManager.goAct(ARouterUrl.WEB_ACT, bundle)
+ if (contentData.name == "视频问诊"){
+ if(MMkvHelper.getLong(Const.USER_ID).toString() == "0"){
+ RouteManager.goAct(ARouterUrl.LOGIN_ACT)
+ }else {
+ mViewModel.getVideoDoctorType()
+ }
+
+ }else{
+ contentData.jumpUrl?.let {
+ bundle.clear()
+ bundle.putString("title", contentData.name)
+ bundle.putString("url", contentData.jumpUrl)
+ RouteManager.goAct(ARouterUrl.WEB_ACT, bundle)
+ }
}
+
}
3 ->{
@@ -261,8 +282,13 @@ HealthHomeFrag : BaseVmFrag() {
// req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
- req.miniprogramType =
- WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ if(contentData.wxType == 3){
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ }else{
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW // 可选打开 开发版,体验版和正式版
+ }
api.sendReq(req)
}
@@ -344,9 +370,14 @@ HealthHomeFrag : BaseVmFrag() {
req.userName = contentData.wxId // 填小程序原始id
//req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
+ if(contentData.wxType == 3){
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
+ }else{
+ req.miniprogramType =
+ WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW // 可选打开 开发版,体验版和正式版
+ }
- req.miniprogramType =
- WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版
api.sendReq(req)
}
@@ -608,6 +639,12 @@ HealthHomeFrag : BaseVmFrag() {
}
layoutContentAdapter.setNewInstance(it.data.middle)
}
+
+ mViewModel.videoDoctorLive.observe(this){
+ if (it.data.type == 2){
+ CallKit.startCallKitLogic(requireActivity(),it.data.data)
+ }
+ }
}
diff --git a/app/src/main/java/com/zj365/dc/vm/HomeVm.kt b/app/src/main/java/com/zj365/dc/vm/HomeVm.kt
index 9f59873..6b048ed 100644
--- a/app/src/main/java/com/zj365/dc/vm/HomeVm.kt
+++ b/app/src/main/java/com/zj365/dc/vm/HomeVm.kt
@@ -9,6 +9,7 @@ import com.xty.network.model.FamilyBean
import com.xty.network.model.HomeLayoutBean
import com.xty.network.model.RespBody
import com.xty.network.model.ScienceBean
+import com.xty.network.model.VideoDoctorBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.withContext
@@ -23,6 +24,8 @@ class HomeVm: BaseVm() {
val layoutLive by lazy { MutableLiveData>() }
+ val videoDoctorLive by lazy { MutableLiveData>() }
+
fun getBanners(id: String?,location:Int){
startHttp(false) {
@@ -84,4 +87,11 @@ class HomeVm: BaseVm() {
}
}
+ fun getVideoDoctorType(){
+ startHttp {
+ var body= apiInterface().getVideoDoctorType()
+ body.getCodeStatus(videoDoctorLive,nowData)
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/frag_dynamic_management_header.xml b/app/src/main/res/layout/frag_dynamic_management_header.xml
index 2cb0a4d..5c878a1 100644
--- a/app/src/main/res/layout/frag_dynamic_management_header.xml
+++ b/app/src/main/res/layout/frag_dynamic_management_header.xml
@@ -30,18 +30,33 @@
app:layout_constraintTop_toTopOf="parent" />
+
+
@@ -63,8 +78,8 @@
android:textColor="@color/col_D9BD"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
- app:layout_constraintLeft_toRightOf="@+id/mHeaderImage"
- app:layout_constraintTop_toBottomOf="@+id/mBMI"
+ app:layout_constraintLeft_toRightOf="@+id/mBMI"
+ app:layout_constraintTop_toBottomOf="@+id/tv_userName"
tools:ignore="UseCompatTextViewDrawableXml" />
diff --git a/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt b/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt
index 17402ca..b52d040 100644
--- a/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt
+++ b/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt
@@ -2,8 +2,11 @@ package com.xty.base.h5
import android.content.Context
import android.webkit.JavascriptInterface
+import com.blankj.utilcode.util.GsonUtils
import com.google.gson.Gson
import com.xty.base.act.BaseVmAct
+import com.xty.base.model.WatchReChangeBean
+import com.xty.base.utils.PayUtils
import com.xty.common.Const
import com.xty.common.LogUtils
import com.xty.common.MMkvHelper
@@ -68,7 +71,8 @@ open class CloudJSBridge(val context: Context, val listener: IJsBridge) {
@JavascriptInterface
fun watchRecharge(str: String?){
str?.let {
-
+ var watchBean = GsonUtils.fromJson(it,WatchReChangeBean::class.java)
+ PayUtils(context).reChangeWatch(watchBean.pay_price,watchBean.orderId)
}
}
diff --git a/base/src/main/java/com/xty/base/model/PayBaseResult.java b/base/src/main/java/com/xty/base/model/PayBaseResult.java
new file mode 100644
index 0000000..1b9610d
--- /dev/null
+++ b/base/src/main/java/com/xty/base/model/PayBaseResult.java
@@ -0,0 +1 @@
+package com.xty.base.model;
import android.text.TextUtils;
import java.util.Map;
public class PayBaseResult {
private String resultStatus;
private String result;
private String memo;
public PayBaseResult(Map rawResult) {
if (rawResult == null) {
return;
}
for (String key : rawResult.keySet()) {
if (TextUtils.equals(key, "resultStatus")) {
resultStatus = rawResult.get(key);
} else if (TextUtils.equals(key, "result")) {
result = rawResult.get(key);
} else if (TextUtils.equals(key, "memo")) {
memo = rawResult.get(key);
}
}
}
@Override
public String toString() {
return "resultStatus={" + resultStatus + "};memo={" + memo
+ "};result={" + result + "}";
}
/**
* @return the resultStatus
*/
public String getResultStatus() {
return resultStatus;
}
/**
* @return the memo
*/
public String getMemo() {
return memo;
}
/**
* @return the result
*/
public String getResult() {
return result;
}
}
\ No newline at end of file
diff --git a/base/src/main/java/com/xty/base/model/WatchReChangeBean.kt b/base/src/main/java/com/xty/base/model/WatchReChangeBean.kt
new file mode 100644
index 0000000..74c060c
--- /dev/null
+++ b/base/src/main/java/com/xty/base/model/WatchReChangeBean.kt
@@ -0,0 +1,7 @@
+package com.xty.base.model
+
+class WatchReChangeBean (
+ var orderId:String,
+ var pay_price:Float
+){
+}
\ No newline at end of file
diff --git a/base/src/main/java/com/xty/base/utils/PayUtils.kt b/base/src/main/java/com/xty/base/utils/PayUtils.kt
new file mode 100644
index 0000000..ac850c7
--- /dev/null
+++ b/base/src/main/java/com/xty/base/utils/PayUtils.kt
@@ -0,0 +1,242 @@
+package com.xty.base.utils
+
+import android.content.Context
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import android.text.TextUtils
+import android.view.LayoutInflater
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import android.widget.Toast
+import androidx.lifecycle.ViewModelProvider
+import com.alipay.sdk.app.PayTask
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.tencent.mm.opensdk.modelbase.BaseResp
+import com.tencent.mm.opensdk.modelpay.PayReq
+import com.tencent.mm.opensdk.openapi.WXAPIFactory
+import com.xty.base.R
+import com.xty.base.act.BaseVmAct
+import com.xty.base.model.PayBaseResult
+import com.xty.base.vm.PayVm
+import com.xty.common.BuildConfig
+import com.xty.common.LogUtils
+import com.xty.common.arouter.ARouterUrl
+import com.xty.common.arouter.RouteManager
+import com.xty.common.event.WxPayEvent
+import com.xty.common.util.SpannableUtils
+import com.xty.network.model.WeixinPayBean
+
+open class PayUtils(var context: Context) {
+
+ lateinit var bottomSheetDialog: BottomSheetDialog
+
+ private var baseActivity: BaseVmAct<*> = context as BaseVmAct<*>
+ private val SDK_PAY_FLAG = 1
+ private val WEIXIN_PAY_FLAG = 2
+ val mViewModel by lazy { ViewModelProvider(baseActivity).get(PayVm::class.java)}
+
+ var price:Float? = null
+
+ open fun reChangeWatch(xPrice:Float,orderNo:String){
+ bottomSheetDialog = BottomSheetDialog(context, R.style.Theme_ChartDialogManager)
+ bottomSheetDialog?.let { dialog ->
+ val view = LayoutInflater.from(context).inflate(R.layout.dialog_pay, null)
+ dialog.setContentView(view)
+
+ val tvprice = view.findViewById(R.id.tvPrice)
+ tvprice.text = SpannableUtils.setSpanMoney(xPrice)
+ val ivClose = view.findViewById(R.id.close_button)
+ ivClose.setOnClickListener {
+ dialog.dismiss()
+ }
+ val tvZhifubao = view.findViewById(R.id.tv_gouxuan_zhifubao)
+ val tvWeixin = view.findViewById(R.id.tv_gouxuan_weixin)
+ tvWeixin.isSelected = true
+ val tvDuihuanma = view.findViewById(R.id.tv_gouxuan_duihuanma)
+ val llWeixin = view.findViewById(R.id.llWeixin)
+ val llZhifu = view.findViewById(R.id.llZhifu)
+ val tvZhifu = view.findViewById(R.id.tvZhifu)
+ llZhifu.setOnClickListener {
+ tvZhifubao.isSelected = true
+ tvDuihuanma.isSelected = false
+ tvWeixin.isSelected = false
+ tvZhifu.text = "确认支付"
+ }
+ llWeixin.setOnClickListener {
+ tvZhifubao.isSelected = false
+ tvDuihuanma.isSelected = false
+ tvWeixin.isSelected = true
+ tvZhifu.text = "确认支付"
+ }
+ val llDuihuan = view.findViewById(R.id.llDuihuan)
+ llDuihuan.setOnClickListener {
+ tvWeixin.isSelected = false
+ tvZhifubao.isSelected = false
+ tvDuihuanma.isSelected = true
+ tvZhifu.text = "去兑换"
+ }
+
+ tvZhifu.setOnClickListener {
+ //支付
+ if (tvZhifubao.isSelected) {
+ //支付宝
+ mViewModel.payWatch(orderNo, "ALIPAY_APP")
+ } else if (tvWeixin.isSelected) {
+ //微信
+ mViewModel.payWatch(orderNo, "WEIXIN_APP")
+ } else {
+
+ }
+
+ liveObserver()
+ }
+ }
+ bottomSheetDialog?.show()
+
+
+ }
+
+ fun liveObserver(){
+ baseActivity.runOnUiThread {
+ mViewModel.payObservable.observe(baseActivity) {
+ it.data?.let {
+ val orderInfo: String? = it.alipayOrderInfo // 支付宝订单信息
+ val wxmodel: WeixinPayBean? = it.wxmodel // 微信订单信息
+ if (wxmodel != null) {
+ startWechatPay(wxmodel)
+ } else if (orderInfo != null) {
+ LogUtils.i("start Alipay")
+ val orderInfo: String = it.alipayOrderInfo!! // 订单信息
+ val payRunnable = Runnable {
+ val alipay = PayTask(baseActivity)
+ val result = alipay.payV2(orderInfo, true)
+ val msg = Message()
+ msg.what = SDK_PAY_FLAG
+ msg.obj = result
+ mHandler.sendMessage(msg)
+ }
+ // 必须异步调用
+ val payThread = Thread(payRunnable)
+ payThread.start()
+ }
+ bottomSheetDialog?.dismiss()
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 微信支付
+ */
+ fun startWechatPay(wxModel: WeixinPayBean) {
+ LogUtils.i("startWechatPay")
+ val appId = wxModel.appId
+ val partnerId = wxModel.partnerid
+ val prepayId = wxModel.prepayId
+ val packageValue = wxModel.packageName
+ val nonceStr = wxModel.noncestr
+ val timeStamp = wxModel.timestamp
+ val sign = wxModel.sign
+
+ val api = WXAPIFactory.createWXAPI(context, BuildConfig.appid)
+ api.registerApp(appId)
+
+ //以下这些都应该从服务器去获取
+ val payRequest = PayReq()
+ payRequest.appId = appId//你的微信appid
+ payRequest.partnerId = partnerId//微信支付分配的商户号
+ payRequest.prepayId = prepayId//微信返回的支付交易会话ID
+ payRequest.packageValue = packageValue//固定值
+ payRequest.nonceStr = nonceStr//随机字符串
+ payRequest.timeStamp = timeStamp//时间戳
+ payRequest.sign = sign//签名
+ //传入一个标识,以便区分回调
+ payRequest.extData = "AICancelPay"
+ //在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
+ //发起请求,调起微信前去支付
+ api.sendReq(payRequest);
+ }
+
+ private val mHandler: Handler = object : Handler(Looper.getMainLooper()) {
+ override fun handleMessage(msg: Message) {
+ when (msg.what) {
+ SDK_PAY_FLAG -> {
+ val payResult = PayBaseResult(msg.obj as Map)
+
+ /**
+ * 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
+ */
+ val resultInfo: String = payResult.getResult() // 同步返回需要验证的信息
+ val resultStatus: String = payResult.getResultStatus()
+ // 判断resultStatus 为9000则代表支付成功
+ if (TextUtils.equals(resultStatus, "9000")) {
+ // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
+// Toast.makeText(this@PreventCancertAct,"支付成功"+payResult,Toast.LENGTH_SHORT).show()
+// com.alipay.sdk.pay.demo.PayDemoActivity.showAlert(
+// this@PayDemoActivity,
+// getString(R.string.pay_success) + payResult
+// )
+ /* bundle.clear()
+ bundle.putString("orderNo", orderNo)
+ bundle.putString("orderType", "1")
+ RouteManager.goAct(ARouterUrl.PAY_SUCCESS, bundle)*/
+
+ Toast.makeText(
+ context,
+ "支付成功",
+ Toast.LENGTH_SHORT
+ )
+ .show()
+ } else {
+ Toast.makeText(
+ context,
+ "支付失败,请联系客服",
+ Toast.LENGTH_SHORT
+ )
+ .show()
+
+ // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
+// com.alipay.sdk.pay.demo.PayDemoActivity.showAlert(
+// this@PayDemoActivity,
+// getString(R.string.pay_failed) + payResult
+// )
+ }
+ }
+
+ WEIXIN_PAY_FLAG -> {
+ val event = msg.obj as WxPayEvent
+ when (event.code) {
+ BaseResp.ErrCode.ERR_OK -> {
+ /* bundle.clear()
+ bundle.putString("orderNo", orderNo)
+ bundle.putString("orderType", "1")
+ RouteManager.goAct(ARouterUrl.PAY_SUCCESS, bundle)*/
+ Toast.makeText(
+ context,
+ "支付成功",
+ Toast.LENGTH_SHORT
+ )
+ .show()
+ }
+
+ BaseResp.ErrCode.ERR_USER_CANCEL -> {
+
+ }
+
+ else -> {
+ Toast.makeText(
+ context,
+ "支付失败,请联系客服",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/base/src/main/java/com/xty/base/vm/PayVm.kt b/base/src/main/java/com/xty/base/vm/PayVm.kt
new file mode 100644
index 0000000..823da07
--- /dev/null
+++ b/base/src/main/java/com/xty/base/vm/PayVm.kt
@@ -0,0 +1,25 @@
+package com.xty.base.vm
+
+import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.MutableLiveData
+import com.xty.network.model.PayBean
+import com.xty.network.model.RespBody
+import org.json.JSONObject
+
+class PayVm : BaseVm() , LifecycleObserver {
+
+ val payObservable by lazy { MutableLiveData>() }
+
+
+ fun payWatch(orderNo:String,channelName:String){
+ startHttp {
+ var json = JSONObject()
+ json.put("orderNo", orderNo)
+ json.put("channelName", channelName)
+
+ var response = apiInterface().toPay(retrofits.getRequestBody(json.toString()))
+ response.getCodeStatus(payObservable, nowData)
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/base/src/main/res/layout/dialog_activities.xml b/base/src/main/res/layout/dialog_activities.xml
index 5f6ac44..402bafa 100644
--- a/base/src/main/res/layout/dialog_activities.xml
+++ b/base/src/main/res/layout/dialog_activities.xml
@@ -17,7 +17,6 @@
android:layout_width="match_parent"
android:layout_height="@dimen/dp_500"
android:maxWidth="@dimen/dp_312"
- android:scaleType="centerCrop"
android:maxHeight="@dimen/dp_500"
android:adjustViewBounds="true"
app:is_circle="false"
diff --git a/base/src/main/res/layout/dialog_pay.xml b/base/src/main/res/layout/dialog_pay.xml
new file mode 100644
index 0000000..797a209
--- /dev/null
+++ b/base/src/main/res/layout/dialog_pay.xml
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/base/src/main/res/mipmap-xhdpi/ic_weixinzhif.png b/base/src/main/res/mipmap-xhdpi/ic_weixinzhif.png
new file mode 100644
index 0000000..b71e38a
Binary files /dev/null and b/base/src/main/res/mipmap-xhdpi/ic_weixinzhif.png differ
diff --git a/build.gradle b/build.gradle
index 3b4abdb..ed99960 100644
--- a/build.gradle
+++ b/build.gradle
@@ -16,6 +16,7 @@ buildscript {
maven {url 'https://developer.huawei.com/repo/'}
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'https://oss.sonatype.org/content/repositories/snapshots'}
+
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.2"
@@ -28,9 +29,13 @@ buildscript {
allprojects {
repositories {
+ maven {
+ url uri("${project.rootDir}/libs/")
+ }
google()
mavenCentral()
+
maven {url 'https://maven.aliyun.com/repository/google/'}
maven {url 'https://maven.aliyun.com/repository/public/'}
maven {url 'https://maven.aliyun.com/repository/gradle-plugin/'}
diff --git a/common/build.gradle b/common/build.gradle
index 014eb1a..637172a 100644
--- a/common/build.gradle
+++ b/common/build.gradle
@@ -105,5 +105,7 @@ dependencies {
api 'com.github.maning0303:MNZXingCode:V2.1.9'
api 'pub.devrel:easypermissions:3.0.0'
+ api 'com.alipay.sdk:alipaysdk-android:+@aar'
+ api 'me.chunyu.call_kit:call_kit:2.0.1'
}
\ No newline at end of file
diff --git a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt
index ed19a76..d7c1dfe 100644
--- a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt
+++ b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt
@@ -126,6 +126,7 @@ class ARouterUrl {
const val ADD_FAMILY_GUARDIAN_ACT = "/health/com/zj365/health/act/familyhealth/AddFamilyGuardianAct"
const val FAMILY_HEALTH_ACT = "/health/com/zj365/health/act/familyhealth/FamilyHealthAct"
const val FAMILY_HEALTH_REAL_TIME_ACT = "/health/com/zj365/health/act/familyhealth/FamilyHealthRealTimeAct"
+ const val FAMILY_GUARDIAN_LIST_ACT = "/health/com/zj365/health/act/familyhealth/FamilyHealthGuardianListAct"
//设备绑定相关
diff --git a/common/src/main/res/mipmap-xxhdpi/icon_close_delet.png b/common/src/main/res/mipmap-xxhdpi/icon_close_delet.png
new file mode 100644
index 0000000..3ee6da0
Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_close_delet.png differ
diff --git a/health/build.gradle b/health/build.gradle
index 7fa1109..0aa80a2 100644
--- a/health/build.gradle
+++ b/health/build.gradle
@@ -75,7 +75,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
kapt rely.arouter_compiler
kapt rely.utilcode
- api 'com.alipay.sdk:alipaysdk-android:+@aar'
+
api 'com.github.barteksc:android-pdf-viewer:2.8.2'
implementation files('libs/bluetooth-mini-fatscale-2.9.5.jar')
implementation files('libs/bluetooth-mini-core-2.9.5.jar')
diff --git a/health/src/main/AndroidManifest.xml b/health/src/main/AndroidManifest.xml
index 5d09f04..9f28e84 100644
--- a/health/src/main/AndroidManifest.xml
+++ b/health/src/main/AndroidManifest.xml
@@ -303,6 +303,9 @@
+
\ No newline at end of file
diff --git a/health/src/main/java/com/zj365/health/act/OpenOrRenewAct.kt b/health/src/main/java/com/zj365/health/act/OpenOrRenewAct.kt
index 1063125..efe5176 100644
--- a/health/src/main/java/com/zj365/health/act/OpenOrRenewAct.kt
+++ b/health/src/main/java/com/zj365/health/act/OpenOrRenewAct.kt
@@ -140,7 +140,7 @@ class OpenOrRenewAct : BaseVmAct() {
if (bottomSheetDialog == null) {
bottomSheetDialog = BottomSheetDialog(this)
bottomSheetDialog?.let { dialog ->
- val view = LayoutInflater.from(this).inflate(R.layout.bottom_cancer, null)
+ val view = LayoutInflater.from(this).inflate(R.layout.dialog_pay, null)
dialog.setContentView(view)
val tvprice = view.findViewById(R.id.tvPrice)
diff --git a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt
index 0721f07..a6ab906 100644
--- a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt
+++ b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt
@@ -46,7 +46,7 @@ class FamilyHealthAct : BaseListAct() {
setRecycleRefresh(binding.recyclerView, binding.mRefresh, true)
binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = mAdapter
- mAdapter.addChildClickViewIds(R.id.tv_add_cancel, R.id.tv_watch,R.id.tv_current_time)
+ mAdapter.addChildClickViewIds(R.id.tv_add_cancel, R.id.tv_watch,R.id.tv_current_time,R.id.ll_avatar)
mAdapter.setOnItemChildClickListener { adapter, view, position ->
val familyHealthBean = adapter.data[position] as FamilyHealthBean
when (view.id) {
@@ -57,6 +57,10 @@ class FamilyHealthAct : BaseListAct() {
mViewModel.exitCustody(familyHealthBean.id.toString())
}
}
+
+ R.id.ll_avatar ->{
+ RouteManager.goAct(ARouterUrl.FAMILY_GUARDIAN_LIST_ACT)
+ }
}
}
}
diff --git a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthGuardianListAct.kt b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthGuardianListAct.kt
new file mode 100644
index 0000000..16dc4d2
--- /dev/null
+++ b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthGuardianListAct.kt
@@ -0,0 +1,58 @@
+package com.zj365.health.act.familyhealth
+
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.xty.base.act.BaseListAct
+import com.xty.common.arouter.ARouterUrl
+import com.xty.network.model.FamilyHealthBean
+import com.zj365.health.R
+import com.zj365.health.adapter.familyhealth.FamilyHealthGuardianAdapter
+import com.zj365.health.databinding.ActFamilyHealthGuardianBinding
+import com.zj365.health.vm.FamilyHealthVm
+
+@Route(path = ARouterUrl.FAMILY_GUARDIAN_LIST_ACT)
+class FamilyHealthGuardianListAct : BaseListAct() {
+ val binding by lazy { ActFamilyHealthGuardianBinding.inflate(layoutInflater) }
+
+ val adapter by lazy { FamilyHealthGuardianAdapter() }
+ override fun initAdapter() {
+
+ setRecycleRefresh(binding.recyclerView, binding.mRefresh, true)
+ binding.recyclerView.layoutManager = LinearLayoutManager(this)
+ binding.recyclerView.adapter = adapter
+ adapter.addChildClickViewIds(R.id.cb_frist, R.id.img_delete)
+ adapter.setOnItemChildClickListener { adapter, view, position ->
+ val familyHealthBean = adapter.data[position] as FamilyHealthBean
+ when (view.id) {
+ R.id.img_delete -> {
+ mViewModel.exitCustody(familyHealthBean.id.toString())
+ }
+ R.id.cb_frist->{
+
+ }
+ }
+ }
+ }
+
+
+ override fun initView() {
+ super.initView()
+ statusBar(binding.title.mView)
+ binding.title.mTvTitle.text = "监护人列表"
+ binding.title.mIvBack.setOnClickListener {
+ finish()
+ }
+ }
+
+ override fun loadData() {
+ mViewModel.getFamilyHealthGuardianList()
+ }
+
+ override fun liveObserver() {
+ mViewModel.familyGuardianLiveData.observe(this){
+ adapter.setNewInstance(it.data)
+ }
+ }
+
+ override fun setLayout()= binding.root
+}
\ No newline at end of file
diff --git a/health/src/main/java/com/zj365/health/act/skin/SkinMeasurementMainAct.kt b/health/src/main/java/com/zj365/health/act/skin/SkinMeasurementMainAct.kt
index 6d2cac8..ae696ae 100644
--- a/health/src/main/java/com/zj365/health/act/skin/SkinMeasurementMainAct.kt
+++ b/health/src/main/java/com/zj365/health/act/skin/SkinMeasurementMainAct.kt
@@ -1,6 +1,5 @@
package com.zj365.health.act.skin
-import android.graphics.Color
import android.os.Handler
import android.os.Looper
import android.os.Message
@@ -29,11 +28,9 @@ import com.zj365.health.R
import com.zj365.health.databinding.ActAiSkinMeasurementBinding
import com.zj365.health.model.PayResult
import com.zj365.health.vm.SkinMeasurementVm
-import com.zj365.health.vm.TongueDiagnosisVm
import com.zj365.health.weight.CancerDialog
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
-import retrofit2.http.Path
@Route(path = ARouterUrl.AI_SKIN_MEASUREMENT_ACTIVITY)
class SkinMeasurementMainAct : BaseVmAct() {
@@ -101,7 +98,7 @@ class SkinMeasurementMainAct : BaseVmAct() {
if (bottomSheetDialog == null) {
bottomSheetDialog = BottomSheetDialog(this,R.style.Theme_ChartDialogManager)
bottomSheetDialog?.let { dialog ->
- val view = LayoutInflater.from(this).inflate(R.layout.bottom_cancer, null)
+ val view = LayoutInflater.from(this).inflate(R.layout.dialog_pay, null)
dialog.setContentView(view)
val tvprice = view.findViewById(R.id.tvPrice)
diff --git a/health/src/main/java/com/zj365/health/act/tonguediagnosis/TongueDiagnosisMainActivity.kt b/health/src/main/java/com/zj365/health/act/tonguediagnosis/TongueDiagnosisMainActivity.kt
index 656dfc0..7ac117f 100644
--- a/health/src/main/java/com/zj365/health/act/tonguediagnosis/TongueDiagnosisMainActivity.kt
+++ b/health/src/main/java/com/zj365/health/act/tonguediagnosis/TongueDiagnosisMainActivity.kt
@@ -1,6 +1,5 @@
package com.zj365.health.act.tonguediagnosis
-import android.graphics.Color
import android.os.Handler
import android.os.Looper
import android.os.Message
@@ -90,7 +89,7 @@ class TongueDiagnosisMainActivity : BaseVmAct() {
if (bottomSheetDialog == null) {
bottomSheetDialog = BottomSheetDialog(this,R.style.Theme_ChartDialogManager)
bottomSheetDialog?.let { dialog ->
- val view = LayoutInflater.from(this).inflate(R.layout.bottom_cancer, null)
+ val view = LayoutInflater.from(this).inflate(R.layout.dialog_pay, null)
dialog.setContentView(view)
val tvprice = view.findViewById(R.id.tvPrice)
diff --git a/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthGuardianAdapter.kt b/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthGuardianAdapter.kt
new file mode 100644
index 0000000..e886781
--- /dev/null
+++ b/health/src/main/java/com/zj365/health/adapter/FamilyHealth/FamilyHealthGuardianAdapter.kt
@@ -0,0 +1,27 @@
+package com.zj365.health.adapter.familyhealth
+
+import android.graphics.Color
+import android.widget.CheckBox
+import android.widget.TextView
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import com.xty.base.adapter.BaseAdapter
+import com.xty.common.setImageUser
+import com.xty.network.model.FamilyGuardianBean
+import com.zj365.health.R
+import de.hdodenhof.circleimageview.CircleImageView
+
+class FamilyHealthGuardianAdapter : BaseAdapter(R.layout.item_health_family_guardian) {
+ override fun convert(holder: BaseViewHolder, item: FamilyGuardianBean) {
+ holder.getView(R.id.img_avatar).setImageUser(context,item.avatarUrl)
+ holder.setText(R.id.tv_relation,item.relation)
+ holder.setText(R.id.tv_phone,item.phone)
+ if(item.isFirst == 1){
+ holder.getView(R.id.cb_frist).isChecked = true
+ holder.getView(R.id.desc).setTextColor(Color.parseColor("#02C191"))
+ }else{
+ holder.getView(R.id.cb_frist).isChecked = false
+ holder.getView(R.id.desc).setTextColor(Color.parseColor("#7C7C7C"))
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/health/src/main/java/com/zj365/health/adapter/FamilyHealth/HealthFamilyTargetAdapter.kt b/health/src/main/java/com/zj365/health/adapter/FamilyHealth/HealthFamilyTargetAdapter.kt
index 32e027b..5630802 100644
--- a/health/src/main/java/com/zj365/health/adapter/FamilyHealth/HealthFamilyTargetAdapter.kt
+++ b/health/src/main/java/com/zj365/health/adapter/FamilyHealth/HealthFamilyTargetAdapter.kt
@@ -38,7 +38,6 @@ class HealthFamilyTargetAdapter : BaseAdapter
contentValue = if (item.value == "0") "--" else item.value
}
- LogUtils.e("HealthFamilyTargetAdapter","contentValue:${contentValue}")
if(item.status == 1){
tvValue.setTextColor(Color.parseColor("#7C7C7C"))
tvValue.text = SpannableUtils.setStrSpan(
@@ -64,7 +63,6 @@ class HealthFamilyTargetAdapter : BaseAdapter
"${contentValue}${context.getString(units[item.type-1])}".length -
context.getString(units[item.type-1]).length)
}
- LogUtils.e("HealthFamilyTargetAdapter","textValue:${tvValue.text.toString()}")
when(item.type){
1 ->{
diff --git a/health/src/main/java/com/zj365/health/vm/FamilyHealthVm.kt b/health/src/main/java/com/zj365/health/vm/FamilyHealthVm.kt
index 7ac2a21..4d1f28b 100644
--- a/health/src/main/java/com/zj365/health/vm/FamilyHealthVm.kt
+++ b/health/src/main/java/com/zj365/health/vm/FamilyHealthVm.kt
@@ -2,6 +2,7 @@ package com.zj365.health.vm
import androidx.lifecycle.MutableLiveData
import com.xty.base.vm.BaseVm
+import com.xty.network.model.FamilyGuardianBean
import com.xty.network.model.FamilyHealthBean
import com.xty.network.model.RespBody
import org.json.JSONObject
@@ -10,6 +11,8 @@ class FamilyHealthVm :BaseVm() {
val familyHealthListData by lazy { MutableLiveData>>() }
+ val familyGuardianLiveData by lazy { MutableLiveData>>() }
+
val exitCustody by lazy { MutableLiveData>() }
fun getFamilyHealthList(){
startHttp (true){
@@ -27,5 +30,14 @@ class FamilyHealthVm :BaseVm() {
}
}
+ fun getFamilyHealthGuardianList(){
+ startHttp (true){
+
+ val json = JSONObject()
+ val request = apiInterface().getFamilyGuardianList(retrofits.getRequestBody(json.toString()))
+ request.getCodeStatus(familyGuardianLiveData,nowData)
+ }
+ }
+
}
\ No newline at end of file
diff --git a/health/src/main/res/layout/act_blood_calilbration.xml b/health/src/main/res/layout/act_blood_calilbration.xml
index ed620ef..64dafad 100644
--- a/health/src/main/res/layout/act_blood_calilbration.xml
+++ b/health/src/main/res/layout/act_blood_calilbration.xml
@@ -21,6 +21,7 @@
android:drawablePadding="@dimen/dp_6"
android:text="注:血压校准须知"
android:textColor="@color/col_f23"
+ android:visibility="gone"
android:textSize="@dimen/sp_15"
tools:ignore="HardcodedText,UseCompatTextViewDrawableXml" />
diff --git a/health/src/main/res/layout/act_family_health_guardian.xml b/health/src/main/res/layout/act_family_health_guardian.xml
new file mode 100644
index 0000000..cbb85c1
--- /dev/null
+++ b/health/src/main/res/layout/act_family_health_guardian.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/health/src/main/res/layout/item_health_family_guardian.xml b/health/src/main/res/layout/item_health_family_guardian.xml
new file mode 100644
index 0000000..ed07b98
--- /dev/null
+++ b/health/src/main/res/layout/item_health_family_guardian.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/network/src/main/java/com/xty/network/ApiInterface.kt b/network/src/main/java/com/xty/network/ApiInterface.kt
index e42058f..f0976fd 100644
--- a/network/src/main/java/com/xty/network/ApiInterface.kt
+++ b/network/src/main/java/com/xty/network/ApiInterface.kt
@@ -910,6 +910,9 @@ interface ApiInterface {
@POST("customer/layout/list")
suspend fun getHomeLayout():RespBody
+ @POST("customer/layout/getVideoDoctorType")
+ suspend fun getVideoDoctorType():RespBody
+
/**
* 膳食分析-热卡分析
*/
@@ -1433,6 +1436,12 @@ interface ApiInterface {
@POST("pay/payAiTumorOrder")
suspend fun payUrl(@Body rb: RequestBody): RespBody
+ /**
+ * 拉起支付
+ */
+ @POST("pay/toPay")
+ suspend fun toPay(@Body rb: RequestBody):RespBody
+
/**
* 商品信息接口
*/
@@ -1709,6 +1718,12 @@ interface ApiInterface {
@POST("customer/family/familyList")
suspend fun getFamilyList(@Body rb:RequestBody) : RespBody>
+ /**
+ * 监护人列表
+ */
+ @POST("customer/family/getGuardianList")
+ suspend fun getFamilyGuardianList(@Body rb:RequestBody) : RespBody>
+
/**
* 退出监护
*/
diff --git a/network/src/main/java/com/xty/network/model/BannerBean.kt b/network/src/main/java/com/xty/network/model/BannerBean.kt
index 2798689..cd46131 100644
--- a/network/src/main/java/com/xty/network/model/BannerBean.kt
+++ b/network/src/main/java/com/xty/network/model/BannerBean.kt
@@ -8,5 +8,6 @@ data class BannerBean(
val bannerType: Int,//1:图文展示, 5:app内部打开, 10:web外部跳转, 15:视频播放,20 小程序跳转】,imgUrl 图片地址,linkAddress,连接地址
val imgUrl: String,
val linkAddress: String,
- val wxId:String //小程序ID
+ val wxId:String, //小程序ID
+ val wxType:Int //1.开发版,2.体验版 3.正式版
):Serializable
\ No newline at end of file
diff --git a/network/src/main/java/com/xty/network/model/FamilyGuardianBean.kt b/network/src/main/java/com/xty/network/model/FamilyGuardianBean.kt
new file mode 100644
index 0000000..e5c161d
--- /dev/null
+++ b/network/src/main/java/com/xty/network/model/FamilyGuardianBean.kt
@@ -0,0 +1,13 @@
+package com.xty.network.model
+
+data class FamilyGuardianBean(
+ var id:Long,
+ var userId:Long,
+ var name:String,
+ var phone:String,
+ var relation:String,
+ var avatarUrl:String,
+ var isMy:Int,
+ var isFirst:Int
+) {
+}
\ No newline at end of file
diff --git a/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt b/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt
index dc3f529..4acff42 100644
--- a/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt
+++ b/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt
@@ -14,6 +14,7 @@ data class HomeLayoutBean(
var jumpUrl:String?, //跳转地址或编码
var status:Int,
var seq:String,
- var wxId:String
+ var wxId:String,
+ var wxType:Int //1.开发版,2.体验版 3.正式版
)
}
diff --git a/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt b/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt
new file mode 100644
index 0000000..4c184af
--- /dev/null
+++ b/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt
@@ -0,0 +1,7 @@
+package com.xty.network.model
+
+data class VideoDoctorBean (
+ val data:String,
+ val type:Int // 类型:1-和缓(跳转小程序) 2-春雨(H5打开) 3-平安(跳转小程序)
+) {
+}
\ No newline at end of file