diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 44777c3..70db441 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -291,6 +291,10 @@ android:launchMode="singleTop" android:screenOrientation="portrait" /> + + () { // CommonToastUtils.showToast("敬请期待") } "health_dic" ->{ - CommonToastUtils.showToast("敬请期待") + RouteManager.goAct(ARouterUrl.HEALTH_CODE_MAIN_ACT) + // CommonToastUtils.showToast("敬请期待") } else ->{ @@ -608,7 +609,25 @@ HealthHomeFrag : BaseVmFrag() { mViewModel.videoDoctorLive.observe(this){ if (it.data.type == 2){ - CallKit.startCallKitLogic(requireActivity(),it.data.data) + CallKit.startCallKitLogic(requireActivity(),it.data.url) + }else{ + val appId = "wx032bacb749c0dcb0" // 填移动应用(App)的 AppId,非小程序的 AppID + + val api = WXAPIFactory.createWXAPI(requireContext(), appId) + + val req = WXLaunchMiniProgram.Req() + req.userName = it.data.wxid // 填小程序原始id + + req.path = it.data.url ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + if(it.data.wxtype== 1){ + req.miniprogramType = + WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版 + }else{ + req.miniprogramType = + WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW // 可选打开 开发版,体验版和正式版 + } + + api.sendReq(req) } } } 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 12e1069..a07da62 100644 --- a/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt +++ b/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt @@ -59,7 +59,8 @@ open class CloudJSBridge(val context: Context, val listener: IJsBridge) { @JavascriptInterface fun gotoElectronicFence(str: String?){ LogUtils.e("CloudJSBridge","gotoElectronicFence str") - ToastUtils(context).showToast("敬请期待") + //ToastUtils(context).showToast("敬请期待") + RouteManager.goAct(ARouterUrl.ELECTRONIC_FENCE_SET_ACT) } 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 d1b3fa9..8674b58 100644 --- a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt +++ b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt @@ -135,6 +135,11 @@ class ARouterUrl { const val FAMILY_REPORT_UPLOAD_ACT = "/health/com/zj365/health/act/healthrecord/UploadHealthRecordAct" const val FAMILY_REPORT_LIST_ACT = "/health/com/zj365/health/act/healthrecord/HealthRecordsListAct" + //健康医典 + const val HEALTH_CODE_MAIN_ACT = "/health/com/zj365/health/act/healthcode/HealthCodeMainAct" + const val HEALTH_BODY_INQUIRY_ACT = "/health/com/zj365/health/act/healthcode/HealthBodyInquiryAct" + const val HEALTH_BODY_PART_ACT = "/health/com/zj365/health/act/healthcode/HealthBodyPartAct" + //心理测试 const val PSYCHOLOGICAL_TEST_LIST_ACT = "/health/com/zj365/health/act/psychological/PsychologicalTestMainAct" @@ -214,6 +219,10 @@ class ARouterUrl { const val MY_ORGAN= "/mine/com/zj365/dc/mime/act/MyOrganAct" const val SPORT_DETAIL = "/mine/com/zj365/dc/mime/act/SportDetailAct" + //地理围栏 + const val ELECTRONIC_FENCE_SET_ACT = "/mine/com/zj365/dc/mime/act/electronicfence/ElectronicFenceSettingAct" + + const val CHANGE_PHONE = "/mine/com/zj365/dc/mime/act/ChangePhoneAct" const val VERSION_LIST = "/mine/com/zj365/dc/mime/act/VersionList" @@ -250,5 +259,6 @@ class ARouterUrl { //调试模式 const val DEBUG = "/mine/com/zj365/dc/mime/act/DebugAct" + } } \ No newline at end of file diff --git a/common/src/main/java/com/xty/common/weight/AdapterStick.java b/common/src/main/java/com/xty/common/weight/AdapterStick.java new file mode 100644 index 0000000..ac708ca --- /dev/null +++ b/common/src/main/java/com/xty/common/weight/AdapterStick.java @@ -0,0 +1,14 @@ +package com.xty.common.weight; + +import android.view.ViewGroup; + +import androidx.recyclerview.widget.RecyclerView; + +public interface AdapterStick extends Stick{ + void onBindViewHolder(T holder, int position); + RecyclerView.ViewHolder createViewHolder(ViewGroup parent, int viewType); + int getItemViewType(int position); + int getItemCount(); + void bindViewHolder(T holder, int position); + int getHeaderCount(); +} \ No newline at end of file diff --git a/common/src/main/java/com/xty/common/weight/PinnedHeaderItemDecoration.java b/common/src/main/java/com/xty/common/weight/PinnedHeaderItemDecoration.java new file mode 100644 index 0000000..1c540e9 --- /dev/null +++ b/common/src/main/java/com/xty/common/weight/PinnedHeaderItemDecoration.java @@ -0,0 +1,246 @@ +package com.xty.common.weight; + +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.Region; +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.HashMap; +import java.util.Map; + +public class PinnedHeaderItemDecoration extends RecyclerView.ItemDecoration { + + private final static String TAG = PinnedHeaderItemDecoration.class.getSimpleName(); + + /** + * 当前绘制的pinnedheaderview + */ + View mPinnedHeaderView = null; + + /** + * pinnedheaderview的位置 + */ + int mHeaderPosition = -1; + + /** + * 装载所有的viewtype + */ + Map mPinnedViewTypes = new HashMap(); + + /** + * pinnedheaderview的上边距 + */ + private int mPinnedHeaderTop; + + /** + * pinnedheaderview的裁剪区域 + */ + private Rect mClipBounds; + private Builder mBuilder; + private int mFirstVisiblePosition; + + private PinnedHeaderItemDecoration(Builder builder) { + + mBuilder = builder; + } + + /** + * @param c + * @param parent + * @param state + */ + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + createPinnedHeader(parent); + + if (mPinnedHeaderView != null) { + // check overlap section view. + //TODO support only vertical header currently. + final int headerEndAt = mPinnedHeaderView.getTop() + mPinnedHeaderView.getHeight() + 1; + final View v = parent.findChildViewUnder(c.getWidth() / 2, headerEndAt); + if (isPinnedView(parent, v)) { + mPinnedHeaderTop = v.getTop() - mPinnedHeaderView.getHeight(); + } else { + mPinnedHeaderTop = 0; + } + + if (isHeaderView(mFirstVisiblePosition)) { + return; + } + mClipBounds = c.getClipBounds(); + mClipBounds.top = mPinnedHeaderTop + mPinnedHeaderView.getHeight(); + c.clipRect(mClipBounds); + } + } + + + /** + * @param c + * @param parent + * @param state + */ + @Override + public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { + if (mPinnedHeaderView != null && !isHeaderView(mFirstVisiblePosition)) { + c.save(); + + mClipBounds.top = 0; + c.clipRect(mClipBounds, Region.Op.UNION); + c.translate(0, mPinnedHeaderTop); + mPinnedHeaderView.draw(c); + + c.restore(); + } + } + + private void createPinnedHeader(RecyclerView parent) { + checkCache(parent); + + // get LinearLayoutManager. + //final LinearLayoutManager linearLayoutManager = getLayoutManager(parent); + final RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof LinearLayoutManager) { + mFirstVisiblePosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); + } else if (layoutManager instanceof GridLayoutManager) { + mFirstVisiblePosition = ((GridLayoutManager) layoutManager).findFirstVisibleItemPosition(); + } else { + return; + } + + // mFirstVisiblePosition = gridLayoutManager.findFirstVisibleItemPosition(); + + final int headerPosition = findPinnedHeaderPosition(mFirstVisiblePosition); + + if (isHeaderView(mFirstVisiblePosition)) { + return; + } + + if (headerPosition >= 0 && mHeaderPosition != headerPosition) { + mHeaderPosition = headerPosition; + final int viewType = mBuilder.mStickProvider.getItemViewType(headerPosition); + + final RecyclerView.ViewHolder pinnedViewHolder = mBuilder.mStickProvider.createViewHolder(parent, viewType); + mBuilder.mStickProvider.bindViewHolder(pinnedViewHolder, headerPosition); + mPinnedHeaderView = pinnedViewHolder.itemView; + + // read layout parameters + ViewGroup.LayoutParams layoutParams = mPinnedHeaderView.getLayoutParams(); + if (layoutParams == null) { + layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + mPinnedHeaderView + .setLayoutParams(layoutParams); + } + + + int heightMode = View.MeasureSpec.getMode(layoutParams.height); + int heightSize = View.MeasureSpec.getSize(layoutParams.height); + + if (heightMode == View.MeasureSpec.UNSPECIFIED) { + heightMode = View.MeasureSpec.EXACTLY; + } + + final int maxHeight = parent.getHeight() - parent.getPaddingTop() - parent.getPaddingBottom(); + if (heightSize > maxHeight) { + heightSize = maxHeight; + } + + // measure & layout + final int ws = View.MeasureSpec.makeMeasureSpec(parent.getWidth() - parent.getPaddingLeft() - parent.getPaddingRight(), View.MeasureSpec.EXACTLY); + final int hs = View.MeasureSpec.makeMeasureSpec(heightSize, heightMode); + mPinnedHeaderView.measure(ws, hs); + + mPinnedHeaderView.layout(0, 0, mPinnedHeaderView.getMeasuredWidth(), mPinnedHeaderView.getMeasuredHeight()); + } + } + + + /** + * return the first visible view position is headerview + * + * @param firstVisiblePosition first visible view position + */ + private boolean isHeaderView(int firstVisiblePosition) { + final int position = firstVisiblePosition - mBuilder.mStickProvider.getHeaderCount(); + if (position < 0) { + return true; + } + return false; + } + + + private int findPinnedHeaderPosition(int fromPosition) { + if (fromPosition > mBuilder.mStickProvider.getItemCount()) { + return -1; + } + + for (int position = fromPosition; position >= 0; position--) { + final int viewType = mBuilder.mStickProvider.getItemViewType(position); + if (isPinnedViewType(viewType)) { + return position; + } + } + + return -1; + } + + private boolean isPinnedViewType(int viewType) { + if (!mPinnedViewTypes.containsKey(viewType)) { + mPinnedViewTypes.put(viewType, mBuilder.mStickProvider.isPinnedViewType(viewType)); + } + return mPinnedViewTypes.get(viewType); + } + + private boolean isPinnedView(RecyclerView parent, View v) { + final int position = parent.getChildAdapterPosition(v) /*- mBuilder.mStickProvider.getHeaderCount()*/; + if (position == RecyclerView.NO_POSITION) { + return false; + } + final int viewType = mBuilder.mStickProvider.getItemViewType(position); + + return isPinnedViewType(viewType); + } + + private void checkCache(RecyclerView parent) { + RecyclerView.Adapter adapter = parent.getAdapter(); + if (mBuilder.mStickProvider != adapter) { + disableCache(); + } + } + + + private void disableCache() { + mPinnedHeaderView = null; + mHeaderPosition = -1; + mPinnedViewTypes.clear(); + } + + public static Builder builder() { + return new Builder(); + } + + + public static class Builder { + + private AdapterStick mStickProvider; + private PinnedHeaderItemDecoration mPinnedHeaderItemDecoration; + + + public Builder adapterProvider(AdapterStick stickProvider) { + mStickProvider = stickProvider; + return this; + } + + public PinnedHeaderItemDecoration build() { + if (mPinnedHeaderItemDecoration == null) { + mPinnedHeaderItemDecoration = new PinnedHeaderItemDecoration(this); + } + return mPinnedHeaderItemDecoration; + } + } + +} diff --git a/common/src/main/java/com/xty/common/weight/SideBar.java b/common/src/main/java/com/xty/common/weight/SideBar.java new file mode 100644 index 0000000..585491f --- /dev/null +++ b/common/src/main/java/com/xty/common/weight/SideBar.java @@ -0,0 +1,157 @@ +package com.xty.common.weight; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import com.xty.common.R; + +public class SideBar extends View { + // 触摸事件 + private OnTouchingLetterChangedListener onTouchingLetterChangedListener; + // 26个字母 + public static String[] b = {"A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z", "#"}; + + /** + * 过滤 + * + * @param filterData + */ + public void setFilterData(String[] filterData) { + b = filterData; + invalidate(); + } + + + private int choose = -1;// 选中 + private Paint paint = new Paint(); + + private TextView mTextDialog; + + public void setTextView(TextView mTextDialog) { + this.mTextDialog = mTextDialog; + } + + + public SideBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public SideBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SideBar(Context context) { + super(context); + } + + /** + * 重写这个方法 + */ + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + // 获取焦点改变背景颜色. + int height = getHeight();// 获取对应高度 + int width = getWidth(); // 获取对应宽度 + if (b.length > 0) { + int singleHeight = height / b.length;// 获取每一个字母的高度 + for (int i = 0; i < b.length; i++) { + paint.setColor(Color.rgb(85, 100, 129)); + paint.setTextSize(15); + paint.setAntiAlias(true); + // 选中的状态 + if (i == choose) { + paint.setColor(Color.parseColor("#8200FF")); + paint.setFakeBoldText(true); + } + // x坐标等于中间-字符串宽度的一半. + float xPos = width / 2 - paint.measureText(b[i]) / 2; + float yPos = singleHeight * i + singleHeight / 2; + canvas.drawText(b[i], xPos, yPos, paint); + paint.reset();// 重置画笔 + } + } + } + + /** + * 更新当前选中的字体颜色 + * @param text 当前字体文本 + */ + public void changeCurrentTextColor(String text){ + for(int i=0;i= 0 && c < b.length) { + if (listener != null) { + listener.onTouchingLetterChanged(b[c]); + } + if (mTextDialog != null) { + mTextDialog.setText(b[c]); + mTextDialog.setVisibility(View.VISIBLE); + } + + choose = c; + invalidate(); + } + } + break; + default: + //noinspection deprecation + setBackgroundDrawable(new ColorDrawable(0x00000000)); + choose = -1;// + if (mTextDialog != null) { + mTextDialog.setVisibility(View.GONE); + } + invalidate(); + break; + } + return true; + } + + /** + * 向外公开的方法 + * + * @param onTouchingLetterChangedListener 触摸事件 + */ + public void setOnTouchingLetterChangedListener( + OnTouchingLetterChangedListener onTouchingLetterChangedListener) { + this.onTouchingLetterChangedListener = onTouchingLetterChangedListener; + } + + /** + * 接口 + * + * @author coder + */ + public interface OnTouchingLetterChangedListener { + void onTouchingLetterChanged(String s); + } + + + +} diff --git a/common/src/main/java/com/xty/common/weight/Stick.java b/common/src/main/java/com/xty/common/weight/Stick.java new file mode 100644 index 0000000..acfde1c --- /dev/null +++ b/common/src/main/java/com/xty/common/weight/Stick.java @@ -0,0 +1,5 @@ +package com.xty.common.weight; + +public interface Stick { + boolean isPinnedViewType(int viewType); +} diff --git a/common/src/main/res/drawable/shape_oval_02c.xml b/common/src/main/res/drawable/shape_oval_02c.xml new file mode 100644 index 0000000..8a9d7e0 --- /dev/null +++ b/common/src/main/res/drawable/shape_oval_02c.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/mipmap-xxhdpi/icon_arrow_rigth_black.png b/common/src/main/res/mipmap-xxhdpi/icon_arrow_rigth_black.png new file mode 100644 index 0000000..e48516c Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_arrow_rigth_black.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/icon_forbid_enter.png b/common/src/main/res/mipmap-xxhdpi/icon_forbid_enter.png new file mode 100644 index 0000000..17c2d41 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_forbid_enter.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/icon_forbid_leave.png b/common/src/main/res/mipmap-xxhdpi/icon_forbid_leave.png new file mode 100644 index 0000000..17c2d41 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_forbid_leave.png differ diff --git a/common/src/main/res/mipmap-xxhdpi/icon_radius.png b/common/src/main/res/mipmap-xxhdpi/icon_radius.png new file mode 100644 index 0000000..fc50494 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/icon_radius.png differ diff --git a/common/src/main/res/values/attrs.xml b/common/src/main/res/values/attrs.xml index 0b590a1..c394155 100644 --- a/common/src/main/res/values/attrs.xml +++ b/common/src/main/res/values/attrs.xml @@ -98,4 +98,10 @@ + + + + + + \ No newline at end of file diff --git a/health/src/main/AndroidManifest.xml b/health/src/main/AndroidManifest.xml index 6d268be..58a213f 100644 --- a/health/src/main/AndroidManifest.xml +++ b/health/src/main/AndroidManifest.xml @@ -318,6 +318,15 @@ + + + diff --git a/health/src/main/java/com/zj365/health/act/HealthMainAct.kt b/health/src/main/java/com/zj365/health/act/HealthMainAct.kt index fe9b91a..0d298e5 100644 --- a/health/src/main/java/com/zj365/health/act/HealthMainAct.kt +++ b/health/src/main/java/com/zj365/health/act/HealthMainAct.kt @@ -219,11 +219,11 @@ class HealthMainAct : BaseVmAct() { override fun onPageSelected(position: Int) { super.onPageSelected(position) // binding.xTablayout.getTabAt(position)!!.select() - onEventObject( + /*onEventObject( baseContext, UmengEventId.HealthMonitor, "${getString(tabName[position])}监测详情页" - ) + )*/ changeTitle(position) } }) diff --git a/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt b/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt index b094c4d..669a868 100644 --- a/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt +++ b/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt @@ -1,16 +1,71 @@ package com.zj365.health.act.healthcode import android.view.View +import com.alibaba.android.arouter.facade.annotation.Route +import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram +import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.xty.base.act.BaseVmAct import com.xty.base.vm.BaseVm +import com.xty.common.arouter.ARouterUrl import com.zj365.health.databinding.ActHealthBodyInquiryBinding +import com.zj365.health.vm.HealthBodyInquiryVm +import me.chunyu.call_kit.CallKit -class HealthBodyInquiryAct : BaseVmAct() { +@Route(path = ARouterUrl.HEALTH_BODY_INQUIRY_ACT) +class HealthBodyInquiryAct : BaseVmAct() { val binding by lazy { ActHealthBodyInquiryBinding.inflate(layoutInflater) } + var id:Long = 0 + override fun liveObserver() { + mViewModel.inquiryDetailLiveData.observe(this){ + binding.title.mTvTitle.text = "${it.data.ref_name}" + binding.tvDepartment.text = it.data.department + binding.tvSurvey.text = it.data.condition + binding.tvDefinition.text = it.data.seek + binding.tvPathogeny.text = it.data.etiology + + } + + mViewModel.videoDoctorLive.observe(this){ + if (it.data.type == 2){ + CallKit.startCallKitLogic(this@HealthBodyInquiryAct,it.data.url) + }else{ + val appId = "wx032bacb749c0dcb0" // 填移动应用(App)的 AppId,非小程序的 AppID + + val api = WXAPIFactory.createWXAPI(this@HealthBodyInquiryAct, appId) + + val req = WXLaunchMiniProgram.Req() + req.userName = it.data.wxid // 填小程序原始id + + req.path = it.data.url ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + if(it.data.wxtype== 1){ + req.miniprogramType = + WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版 + }else{ + req.miniprogramType = + WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW // 可选打开 开发版,体验版和正式版 + } + + api.sendReq(req) + } + } } override fun setLayout() = binding.root + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mIvBack.setOnClickListener { + finish() + } + id = intent.extras!!.getLong("id") + mViewModel.getInquiryDetail(id) + + binding.imgVideoInquiry.setOnClickListener { + mViewModel.getVideoDoctorType() + } + } } \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyPartAct.kt b/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyPartAct.kt new file mode 100644 index 0000000..d16f547 --- /dev/null +++ b/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyPartAct.kt @@ -0,0 +1,94 @@ +package com.zj365.health.act.healthcode + +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import com.alibaba.android.arouter.facade.annotation.Route +import com.xty.base.act.BaseVmAct +import com.xty.base.vm.BaseVm +import com.xty.common.arouter.ARouterUrl +import com.xty.common.arouter.RouteManager +import com.xty.common.weight.PinnedHeaderItemDecoration +import com.xty.common.weight.SideBar +import com.xty.network.model.HealthBodyPartBean +import com.xty.network.model.HealthHeaderEntity +import com.zj365.health.R +import com.zj365.health.adapter.healthcode.HealthBodyPartAdapter +import com.zj365.health.databinding.ActHealthCodeBodyPartBinding +import com.zj365.health.vm.HealthBodyPartVm +import retrofit2.http.Path + +@Route(path = ARouterUrl.HEALTH_BODY_PART_ACT) +class HealthBodyPartAct : BaseVmAct() { + + var mTitle:String ="" + var id:Long = 0 + val binding by lazy { ActHealthCodeBodyPartBinding.inflate(layoutInflater) } + + val adapter by lazy { HealthBodyPartAdapter() } + + var mList = ArrayList>() + + private var filterSlideList = ArrayList() + + override fun liveObserver() { + mViewModel.refiningNameLiveData.observe(this){ + if (it.data != null){ + it.data.forEachIndexed { index, healthBodyPartBean -> + filterSlideList.add(healthBodyPartBean.first) + mList.add(HealthHeaderEntity(healthBodyPartBean.first,HealthBodyPartAdapter.TYPE_HEADER,HealthBodyPartBean.HealthBodyPartChildBean(0L,"",0))) + healthBodyPartBean.list.forEachIndexed { index, healthBodyPartChildBean -> + mList.add(HealthHeaderEntity(healthBodyPartBean.first,HealthBodyPartAdapter.TYPE_DATA,healthBodyPartChildBean)) + + } + } + // binding.sideBar.setFilterData(filterSlideList.toArray(arrayOf())) + adapter.setNewInstance(mList) + } + } + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + + mTitle = intent.extras!!.getString("title","") + id = intent.extras!!.getLong("id",0) + binding.title.mTvTitle.text = "${mTitle}" + binding.title.mIvBack.setOnClickListener { + finish() + } + + mViewModel.getBodyPart(id) + + /* val phid = PinnedHeaderItemDecoration.Builder(HealthBodyPartAdapter.TYPE_HEADER) + .enableDivider(false) + .create() + phid.setOnScrollToHeaderListener { + binding.sideBar.changeCurrentTextColor(it) + } + binding.recycler!!!!.addItemDecoration( + phid)*/ + binding.sideBar.setOnTouchingLetterChangedListener(SideBar.OnTouchingLetterChangedListener { s: String -> + val position: Int = adapter!!.getPositionForSection(s.get(0)) + if (position != -1) { + binding.recycler!!.layoutManager!!.scrollToPosition(position) + } + }) + + binding.recycler.adapter = adapter + binding.recycler.layoutManager = LinearLayoutManager(this) + + adapter.setOnItemChildClickListener { adapter, view, position -> + when(view.id){ + R.id.rx_child ->{ + bundle.clear() + bundle.putLong("id",mList[position].data.ref_id) + RouteManager.goAct(ARouterUrl.HEALTH_BODY_INQUIRY_ACT,bundle) + } + } + } + + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt b/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt index 9e305a7..0e757e1 100644 --- a/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt +++ b/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt @@ -1,13 +1,91 @@ package com.zj365.health.act.healthcode +import android.text.TextUtils +import android.view.KeyEvent import android.view.View +import android.view.inputmethod.EditorInfo +import android.widget.TextView +import android.widget.TextView.OnEditorActionListener +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.alibaba.android.arouter.facade.annotation.Route +import com.tamsiree.rxkit.RxKeyboardTool import com.xty.base.act.BaseVmAct import com.xty.base.vm.BaseVm +import com.xty.common.arouter.ARouterUrl +import com.xty.common.arouter.RouteManager +import com.xty.common.util.CommonToastUtils +import com.xty.network.model.HealthBodyBean +import com.zj365.health.adapter.healthcode.HealthCodeMainAdapter import com.zj365.health.databinding.ActHealthCodeMainBinding +import com.zj365.health.vm.HealthCodeMainVm -class HealthCodeMainAct : BaseVmAct() { +@Route(path = ARouterUrl.HEALTH_CODE_MAIN_ACT) +class HealthCodeMainAct : BaseVmAct() { val binding by lazy { ActHealthCodeMainBinding.inflate(layoutInflater) } + + var searchStr:String? = null + + val leftAdapter by lazy { HealthCodeMainAdapter() } + + val rightAdapter by lazy { HealthCodeMainAdapter() } + override fun liveObserver() { + mViewModel.allBodyLiveData.observe(this){ + leftAdapter.setNewInstance(it.data.subList(0,6)) + rightAdapter.setNewInstance(it.data.subList(6,it.data.size)) + } + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text = "健康医典" + binding.title.mIvBack.setOnClickListener { + finish() + } + + binding.etSearch.setOnEditorActionListener(object : OnEditorActionListener{ + override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean { + if(p1 == EditorInfo.IME_ACTION_SEARCH){ + searchStr = binding.etSearch.text.toString().trim() + if(TextUtils.isEmpty(searchStr)){ + CommonToastUtils.showToast("请输入搜索内容") + return true + } + + + RxKeyboardTool.hideSoftInput(this@HealthCodeMainAct) + return true + + } + return false + } + + }) + + mViewModel.getAllBody() + + binding.leftRecycler.adapter = leftAdapter + binding.leftRecycler.layoutManager = GridLayoutManager(this,6,LinearLayoutManager.HORIZONTAL,false) + + leftAdapter.setOnItemClickListener { adapter, view, position -> + var healthBodyBean = adapter.data[position] as HealthBodyBean + bundle.clear() + bundle.putLong("id",healthBodyBean.id) + bundle.putString("title",healthBodyBean.med_name) + RouteManager.goAct(ARouterUrl.HEALTH_BODY_PART_ACT,bundle) + } + + binding.rightRecycler.adapter = rightAdapter + binding.rightRecycler.layoutManager = GridLayoutManager(this,6,LinearLayoutManager.HORIZONTAL,false) + rightAdapter.setOnItemClickListener { adapter, view, position -> + var healthBodyBean = adapter.data[position] as HealthBodyBean + bundle.clear() + bundle.putLong("id",healthBodyBean.id) + bundle.putString("title",healthBodyBean.med_name) + RouteManager.goAct(ARouterUrl.HEALTH_BODY_PART_ACT,bundle) + } } override fun setLayout() = binding.root diff --git a/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt b/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt index c0e9465..a3f4137 100644 --- a/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt +++ b/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt @@ -1,12 +1,21 @@ package com.zj365.health.act.healthrecord +import android.graphics.Rect +import android.text.TextUtils +import android.view.KeyEvent import android.view.View +import android.view.inputmethod.EditorInfo +import android.widget.TextView +import android.widget.TextView.OnEditorActionListener import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.alibaba.android.arouter.facade.annotation.Route +import com.tamsiree.rxkit.RxKeyboardTool import com.xty.base.act.BaseListAct import com.xty.base.vm.BaseVm import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager +import com.xty.common.util.CommonToastUtils import com.zj365.health.adapter.healthrecord.HealthRecordsAdapter import com.zj365.health.databinding.ActHealthRecordBinding import com.zj365.health.databinding.ActHealthRecordsListBinding @@ -19,14 +28,23 @@ class HealthRecordsListAct : BaseListAct() { val mAdapter by lazy { HealthRecordsAdapter()} + var searchTitle:String ? = null + override fun initAdapter() { binding.recyclerView.adapter = mAdapter binding.recyclerView.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false) + binding.recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() { + override fun getItemOffsets(outRect: Rect, itemPosition: Int, parent: RecyclerView) { + super.getItemOffsets(outRect, itemPosition, parent) + outRect.bottom = 12 + } + }) + setRecycleRefresh(binding.recyclerView,binding.mRefresh,true) } override fun loadData() { - mViewModel.getHealthRecordList() + mViewModel.getHealthRecordList(searchTitle,page.toString()) } override fun initView() { @@ -39,11 +57,42 @@ class HealthRecordsListAct : BaseListAct() { binding.tvUploadReport.setOnClickListener { RouteManager.goAct(ARouterUrl.FAMILY_REPORT_UPLOAD_ACT) } + binding.etSearch.setOnEditorActionListener(object :OnEditorActionListener{ + override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean { + if(p1 == EditorInfo.IME_ACTION_SEARCH){ + searchTitle = binding.etSearch.text.toString().trim() + if(TextUtils.isEmpty(searchTitle)){ + CommonToastUtils.showToast("请输入搜索内容") + return true + } + + page = 1 + loadData() + RxKeyboardTool.hideSoftInput(this@HealthRecordsListAct) + return true + + } + return false + } + }) + + } + + override fun onResume() { + super.onResume() + page = 1 + loadData() } override fun liveObserver() { mViewModel.healthReportListLiveData.observe(this){ - mAdapter.setNewInstance(it.data.records) + if (page > 1){ + mAdapter.addData(it.data.records) + + }else{ + mAdapter.setNewInstance(it.data.records) + + } } } diff --git a/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt b/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt index d072831..0133c5b 100644 --- a/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt +++ b/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt @@ -75,6 +75,9 @@ class UploadHealthRecordAct : BaseVmAct() { } mViewModel.submitReport(reportTitle,reportType,reportTime,strBuilder.toString(),reportExplain) } + mViewModel.submitLiveData.observe(this){ + finish() + } } @@ -88,7 +91,7 @@ class UploadHealthRecordAct : BaseVmAct() { binding.tvUploadTime.setOnClickListener { RxKeyboardTool.hideSoftInput(this) - timSelect.selectTime(it, "yyyy-MM-dd HH:mm") + timSelect.selectTime(it, "yyyy-MM-dd HH:mm:ss") } binding.tvUploadType.setOnClickListener { diff --git a/health/src/main/java/com/zj365/health/act/psychological/PsychologicalTestMainAct.kt b/health/src/main/java/com/zj365/health/act/psychological/PsychologicalTestMainAct.kt index 6e4c790..8f452c5 100644 --- a/health/src/main/java/com/zj365/health/act/psychological/PsychologicalTestMainAct.kt +++ b/health/src/main/java/com/zj365/health/act/psychological/PsychologicalTestMainAct.kt @@ -45,7 +45,7 @@ class PsychologicalTestMainAct : BaseListAct() { override fun liveObserver() { mViewModel.psychologicalListData.observe(this){ if (page > 1){ - mAdapter.setList(it.data.records) + mAdapter.addData(it.data.records) }else{ mAdapter.setNewInstance(it.data.records) diff --git a/health/src/main/java/com/zj365/health/adapter/healthcode/HealthBodyPartAdapter.kt b/health/src/main/java/com/zj365/health/adapter/healthcode/HealthBodyPartAdapter.kt new file mode 100644 index 0000000..7ea9fb1 --- /dev/null +++ b/health/src/main/java/com/zj365/health/adapter/healthcode/HealthBodyPartAdapter.kt @@ -0,0 +1,45 @@ +package com.zj365.health.adapter.healthcode + +import com.chad.library.adapter.base.BaseMultiItemQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.xty.network.model.HealthBodyPartBean +import com.xty.network.model.HealthHeaderEntity +import com.zj365.health.R + +class HealthBodyPartAdapter: BaseMultiItemQuickAdapter, BaseViewHolder>() { + companion object{ + const val TYPE_HEADER = 1 + const val TYPE_DATA = 2 + } + + init { + addItemType(TYPE_HEADER, R.layout.item_health_code_body_part_header) + addItemType(TYPE_DATA,R.layout.item_health_code_body_part_child) + addChildClickViewIds(R.id.rx_child) + } + override fun convert(holder: BaseViewHolder, item: HealthHeaderEntity) { + + when(item.itemType){ + TYPE_HEADER ->{ + holder.setText(R.id.tv_letter,item.first) + } + TYPE_DATA ->{ + holder.setText(R.id.tv_name,item.data.ref_name) + holder.setText(R.id.tv_num,"查看:${item.data.view_num}") + } + } + + } + + fun getPositionForSection(section: Char): Int { + for (i in 0 until itemCount) { + val sortStr: String = data.get(i).first + val firstChar = sortStr.toUpperCase()[0] + if (firstChar == section) { + return i + } + } + return -1 + } + +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/adapter/healthcode/HealthCodeMainAdapter.kt b/health/src/main/java/com/zj365/health/adapter/healthcode/HealthCodeMainAdapter.kt new file mode 100644 index 0000000..01c90f6 --- /dev/null +++ b/health/src/main/java/com/zj365/health/adapter/healthcode/HealthCodeMainAdapter.kt @@ -0,0 +1,14 @@ +package com.zj365.health.adapter.healthcode + +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.xty.base.adapter.BaseAdapter +import com.xty.network.model.HealthBodyBean +import com.zj365.health.R + +class HealthCodeMainAdapter : BaseAdapter(R.layout.item_health_code_main) { + override fun convert(holder: BaseViewHolder, item: HealthBodyBean) { + holder.setText(R.id.tv_body_sort,"${item.med_code}") + holder.setText(R.id.tv_body_name,item.med_name) + holder.setText(R.id.tv_body_num,"查看:${item.view_num}人") + } +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsAdapter.kt b/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsAdapter.kt index d82859d..a853c1a 100644 --- a/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsAdapter.kt +++ b/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsAdapter.kt @@ -1,5 +1,7 @@ package com.zj365.health.adapter.healthrecord +import android.graphics.Rect +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter.base.viewholder.BaseViewHolder @@ -16,10 +18,10 @@ class HealthRecordsAdapter : BaseAdapter( holder.setText(R.id.tv_report_time,item.reportTime) when(item.reportType){ 1->{ - holder.setText(R.id.tv_report_type,"体检") + holder.setText(R.id.tv_report_type,"体检报告") } 2->{ - holder.setText(R.id.tv_report_type,"病例") + holder.setText(R.id.tv_report_type,"病例报告") } else->{ holder.setText(R.id.tv_report_type,"CT或其他影像") @@ -27,11 +29,22 @@ class HealthRecordsAdapter : BaseAdapter( } } + var imgs = item.pic.split(",") as MutableList var imgAdapter = HealthRecordsChildAdapter() var recycler = holder.getView(R.id.recycler) + recycler.addItemDecoration(object : RecyclerView.ItemDecoration() { + override fun getItemOffsets(outRect: Rect, itemPosition: Int, parent: RecyclerView) { + super.getItemOffsets(outRect, itemPosition, parent) + outRect.bottom = 12 + outRect.right = 12 + } + }) recycler.adapter = imgAdapter - recycler.layoutManager = LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false) + recycler.layoutManager = GridLayoutManager(context,4) + if (imgs.size > 0){ + imgAdapter.setNewInstance(imgs) + } } } \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsChildAdapter.kt b/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsChildAdapter.kt index 4d9f12e..f0ae09f 100644 --- a/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsChildAdapter.kt +++ b/health/src/main/java/com/zj365/health/adapter/healthrecord/HealthRecordsChildAdapter.kt @@ -1,10 +1,13 @@ package com.zj365.health.adapter.healthrecord import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.ruffian.library.widget.RImageView import com.xty.base.adapter.BaseAdapter +import com.xty.common.setImage import com.zj365.health.R -class HealthRecordsChildAdapter : BaseAdapter(R.layout.item_health_report_record_child) { - override fun convert(holder: BaseViewHolder, item: Any) { +class HealthRecordsChildAdapter : BaseAdapter(R.layout.item_health_report_record_child) { + override fun convert(holder: BaseViewHolder, item: String) { + holder.getView(R.id.img_pic).setImage(context,item) } } \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/HealthBodyInquiryVm.kt b/health/src/main/java/com/zj365/health/vm/HealthBodyInquiryVm.kt new file mode 100644 index 0000000..d60c02c --- /dev/null +++ b/health/src/main/java/com/zj365/health/vm/HealthBodyInquiryVm.kt @@ -0,0 +1,27 @@ +package com.zj365.health.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.InquiryInfoDetailBean +import com.xty.network.model.RespBody +import com.xty.network.model.VideoDoctorBean + +class HealthBodyInquiryVm: BaseVm() { + + val inquiryDetailLiveData by lazy { MutableLiveData>() } + + val videoDoctorLive by lazy { MutableLiveData>() } + fun getInquiryDetail(id:Long){ + startHttp { + val body = apiInterface().getInquiryInfo(id) + body.getCodeStatus(inquiryDetailLiveData, nowData) + } + } + + fun getVideoDoctorType(){ + startHttp { + var body= apiInterface().getVideoDoctorType() + body.getCodeStatus(videoDoctorLive,nowData) + } + } +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/HealthBodyPartVm.kt b/health/src/main/java/com/zj365/health/vm/HealthBodyPartVm.kt new file mode 100644 index 0000000..1057767 --- /dev/null +++ b/health/src/main/java/com/zj365/health/vm/HealthBodyPartVm.kt @@ -0,0 +1,17 @@ +package com.zj365.health.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.HealthBodyPartBean +import com.xty.network.model.RespBody + +class HealthBodyPartVm : BaseVm() { + + val refiningNameLiveData by lazy { MutableLiveData>>() } + fun getBodyPart(id:Long){ + startHttp { + val body = apiInterface().getRefiningName(id) + body.getCodeStatus(refiningNameLiveData, nowData) + } + } +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/HealthCodeMainVm.kt b/health/src/main/java/com/zj365/health/vm/HealthCodeMainVm.kt new file mode 100644 index 0000000..749e5c2 --- /dev/null +++ b/health/src/main/java/com/zj365/health/vm/HealthCodeMainVm.kt @@ -0,0 +1,18 @@ +package com.zj365.health.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.HealthBodyBean +import com.xty.network.model.RespBody + +class HealthCodeMainVm : BaseVm() { + + val allBodyLiveData by lazy { MutableLiveData>>() } + fun getAllBody(){ + + startHttp { + val body = apiInterface().getAllBody() + body.getCodeStatus(allBodyLiveData, nowData) + } + } +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/HealthRecordsListVm.kt b/health/src/main/java/com/zj365/health/vm/HealthRecordsListVm.kt index 934fff4..5099c10 100644 --- a/health/src/main/java/com/zj365/health/vm/HealthRecordsListVm.kt +++ b/health/src/main/java/com/zj365/health/vm/HealthRecordsListVm.kt @@ -1,6 +1,7 @@ package com.zj365.health.vm import androidx.lifecycle.MutableLiveData +import com.alibaba.fastjson.JSONObject import com.xty.base.vm.BaseVm import com.xty.network.model.HealthReportListBean import com.xty.network.model.RespBody @@ -9,9 +10,16 @@ class HealthRecordsListVm : BaseVm() { val healthReportListLiveData by lazy { MutableLiveData>() } - fun getHealthRecordList(){ + fun getHealthRecordList(title:String?,pageNum:String){ startHttp { - var response = apiInterface().getHealthReportList() + var json = JSONObject() + title?.let { + json.put("title",title) + + } + json.put("pageNum",pageNum) + json.put("pageSize",10) + var response = apiInterface().getHealthReportList(retrofits.getRequestBody(json.toString())) response.getCodeStatus(healthReportListLiveData, nowData) } } diff --git a/health/src/main/res/layout/act_health_body_inquiry.xml b/health/src/main/res/layout/act_health_body_inquiry.xml index 654cdf8..130946f 100644 --- a/health/src/main/res/layout/act_health_body_inquiry.xml +++ b/health/src/main/res/layout/act_health_body_inquiry.xml @@ -27,7 +27,6 @@ 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" diff --git a/health/src/main/res/layout/act_health_code_body_part.xml b/health/src/main/res/layout/act_health_code_body_part.xml new file mode 100644 index 0000000..c2f5e80 --- /dev/null +++ b/health/src/main/res/layout/act_health_code_body_part.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/act_health_code_main.xml b/health/src/main/res/layout/act_health_code_main.xml index d2ce8ee..d500129 100644 --- a/health/src/main/res/layout/act_health_code_main.xml +++ b/health/src/main/res/layout/act_health_code_main.xml @@ -17,6 +17,9 @@ android:layout_marginRight="@dimen/dp_16" android:layout_marginTop="@dimen/dp_3" app:corner_radius="@dimen/dp_18" + android:focusable="true" + android:visibility="gone" + android:focusableInTouchMode="true" app:background_normal="@color/col_2F2"> - @@ -64,239 +73,11 @@ app:layout_constraintRight_toLeftOf="@+id/img_body" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:id="@+id/left_recycler"/> - @@ -322,239 +103,10 @@ app:layout_constraintLeft_toRightOf="@+id/img_body" app:layout_constraintRight_toRightOf="parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:id="@+id/right_recycler"/> diff --git a/health/src/main/res/layout/act_health_records_list.xml b/health/src/main/res/layout/act_health_records_list.xml index 6c1e42a..018d903 100644 --- a/health/src/main/res/layout/act_health_records_list.xml +++ b/health/src/main/res/layout/act_health_records_list.xml @@ -18,6 +18,8 @@ android:layout_marginTop="@dimen/dp_12" app:corner_radius="@dimen/dp_18" android:layout_below="@+id/title" + android:focusableInTouchMode="true" + android:focusable="true" app:background_normal="@color/white"> - diff --git a/health/src/main/res/layout/item_health_code_body_part_child.xml b/health/src/main/res/layout/item_health_code_body_part_child.xml new file mode 100644 index 0000000..bae76e7 --- /dev/null +++ b/health/src/main/res/layout/item_health_code_body_part_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/item_health_code_body_part_header.xml b/health/src/main/res/layout/item_health_code_body_part_header.xml new file mode 100644 index 0000000..b288ae7 --- /dev/null +++ b/health/src/main/res/layout/item_health_code_body_part_header.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/item_health_code_main.xml b/health/src/main/res/layout/item_health_code_main.xml new file mode 100644 index 0000000..e6ffdc6 --- /dev/null +++ b/health/src/main/res/layout/item_health_code_main.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/item_health_report_record_child.xml b/health/src/main/res/layout/item_health_report_record_child.xml index eaee031..362783d 100644 --- a/health/src/main/res/layout/item_health_report_record_child.xml +++ b/health/src/main/res/layout/item_health_report_record_child.xml @@ -6,9 +6,11 @@ android:layout_height="wrap_content"> diff --git a/mine/src/main/java/com/zj365/mime/act/electronicfence/ElectronicFenceSettingAct.kt b/mine/src/main/java/com/zj365/mime/act/electronicfence/ElectronicFenceSettingAct.kt index 5150bce..b34132a 100644 --- a/mine/src/main/java/com/zj365/mime/act/electronicfence/ElectronicFenceSettingAct.kt +++ b/mine/src/main/java/com/zj365/mime/act/electronicfence/ElectronicFenceSettingAct.kt @@ -1,14 +1,41 @@ package com.zj365.mime.act.electronicfence +import android.annotation.SuppressLint +import android.os.Bundle import android.view.View +import androidx.core.view.isVisible +import androidx.recyclerview.widget.LinearLayoutManager +import com.alibaba.android.arouter.facade.annotation.Route +import com.amap.api.maps.AMap import com.xty.base.act.BaseVmAct import com.xty.base.vm.BaseVm +import com.xty.common.arouter.ARouterUrl +import com.zj365.mime.adapter.ElectronicFenceAdapter import com.zj365.mime.databinding.ActivityElectronicFenceSettingBinding +import com.zj365.mime.vm.ElectronicFenceSettingVm -class ElectronicFenceSettingAct : BaseVmAct() { +@Route(path = ARouterUrl.ELECTRONIC_FENCE_SET_ACT) +class ElectronicFenceSettingAct : BaseVmAct() { val binding by lazy { ActivityElectronicFenceSettingBinding.inflate(layoutInflater) } + + val mAdapter by lazy { ElectronicFenceAdapter() } + + var type: Int = 0 //0 列表页 1 设置页 + + private var aMap: AMap? = null override fun liveObserver() { + mViewModel.electronicFenceListLiveDate.observe(this){ + if(it.data.count == 0){ + binding.inEmpty.root.visibility = View.VISIBLE + binding.recycler.visibility = View.GONE + + }else{ + binding.recycler.visibility = View.VISIBLE + binding.inEmpty.root.visibility = View.VISIBLE + mAdapter.setNewInstance(it.data.list) + } + } } override fun initView() { @@ -18,7 +45,55 @@ class ElectronicFenceSettingAct : BaseVmAct() { binding.title.mIvBack.setOnClickListener { finish() } + aMap = binding.map.map + mViewModel.getElectronicFenceList() + + binding.recycler.adapter = mAdapter + binding.recycler.layoutManager = LinearLayoutManager(this) + + binding.tvCancel.visibility = View.GONE + binding.tvConfirm.setOnClickListener { + if (type == 0){ + binding.llData.visibility = View.GONE + type = 1 + }else{ + binding.llData.visibility = View.VISIBLE + type = 0 + } + } + + binding.tvCancel.setOnClickListener { + + } } override fun setLayout() = binding.root + + override fun onDestroy() { + super.onDestroy() + binding.map.onDestroy() + } + + override fun onPause() { + super.onPause() + binding.map.onPause() + } + + + override fun onResume() { + super.onResume() + binding.map.onResume() + } + + @SuppressLint("MissingSuperCall") + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + binding.map.onSaveInstanceState(outState) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding.map.onCreate(savedInstanceState) + } + } \ No newline at end of file diff --git a/mine/src/main/java/com/zj365/mime/adapter/ElectronicFenceAdapter.kt b/mine/src/main/java/com/zj365/mime/adapter/ElectronicFenceAdapter.kt new file mode 100644 index 0000000..b661c4e --- /dev/null +++ b/mine/src/main/java/com/zj365/mime/adapter/ElectronicFenceAdapter.kt @@ -0,0 +1,31 @@ +package com.zj365.mime.adapter + +import android.widget.TextView +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.xty.base.adapter.BaseAdapter +import com.xty.network.model.EtFenceListBean +import com.zj365.mime.R + +class ElectronicFenceAdapter : BaseAdapter (R.layout.item_electron_setting){ + override fun convert(holder: BaseViewHolder, item: EtFenceListBean.EtFenceChildBean) { + holder.setText(R.id.tv_address,item.title) + holder.setText(R.id.tv_radius,"半径:${item.radius}米") + var tvForbid = holder.getView(R.id.tv_forbid) + + if (item.type == 1){ + var drawableLeft = context.getDrawable(R.mipmap.icon_forbid_enter) + tvForbid.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,null,null,null) + tvForbid.compoundDrawablePadding = 5 + + tvForbid.text = "禁入" + + }else{ + var drawableLeft = context.getDrawable(R.mipmap.icon_forbid_leave) + tvForbid.setCompoundDrawablesWithIntrinsicBounds(drawableLeft,null,null,null) + tvForbid.compoundDrawablePadding = 5 + tvForbid.text = "禁出" + + + } + } +} \ No newline at end of file diff --git a/mine/src/main/java/com/zj365/mime/vm/ElectronicFenceSettingVm.kt b/mine/src/main/java/com/zj365/mime/vm/ElectronicFenceSettingVm.kt new file mode 100644 index 0000000..d873806 --- /dev/null +++ b/mine/src/main/java/com/zj365/mime/vm/ElectronicFenceSettingVm.kt @@ -0,0 +1,17 @@ +package com.zj365.mime.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.EtFenceListBean +import com.xty.network.model.RespBody + +class ElectronicFenceSettingVm : BaseVm() { + + val electronicFenceListLiveDate by lazy { MutableLiveData>() } + fun getElectronicFenceList(){ + startHttp { + var response = apiInterface().getBtFenceList() + response.getCodeStatus(electronicFenceListLiveDate, nowData) + } + } +} \ No newline at end of file diff --git a/mine/src/main/res/layout/activity_electronic_fence_setting.xml b/mine/src/main/res/layout/activity_electronic_fence_setting.xml index 55e263c..7020673 100644 --- a/mine/src/main/res/layout/activity_electronic_fence_setting.xml +++ b/mine/src/main/res/layout/activity_electronic_fence_setting.xml @@ -24,17 +24,25 @@ android:layout_gravity="bottom" > - - - + android:layout_height="match_parent" + android:orientation="vertical" + android:id="@+id/ll_data"> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 90a6de5..a48dfdb 100644 --- a/network/src/main/java/com/xty/network/ApiInterface.kt +++ b/network/src/main/java/com/xty/network/ApiInterface.kt @@ -1477,7 +1477,7 @@ interface ApiInterface { * 获取报告记录 */ @POST("customer/reportData/list") - suspend fun getHealthReportList():RespBody + suspend fun getHealthReportList(@Body rb: RequestBody):RespBody /** * 添加报告记录 @@ -1485,6 +1485,21 @@ interface ApiInterface { @POST("customer/reportData/add") suspend fun submitHealthReport(@Body rb: RequestBody):RespBody + /** + * 健康医典-获取数据 + */ + @GET("customer/medical/getBody") + suspend fun getAllBody():RespBody> + + /** + * 健康医典-医典详情 + */ + @GET("customer/medical/getMedicalInfo") + suspend fun getInquiryInfo(@Query("refId") id:Long ):RespBody + + @GET("customer/medical/getRefiningName") + suspend fun getRefiningName(@Query("medId") id:Long):RespBody> + /** * 商品信息接口 @@ -1798,6 +1813,9 @@ interface ApiInterface { @POST("customer/watch/realmeas") suspend fun measureWatchData(@Body rb: RequestBody):RespBody + @POST("customer/watch/getBtfenceList") + suspend fun getBtFenceList():RespBody + /** * 获取演示模式 diff --git a/network/src/main/java/com/xty/network/model/EtFenceListBean.kt b/network/src/main/java/com/xty/network/model/EtFenceListBean.kt new file mode 100644 index 0000000..5486c89 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/EtFenceListBean.kt @@ -0,0 +1,13 @@ +package com.xty.network.model + +data class EtFenceListBean(var count:Int,var list:ArrayList){ + data class EtFenceChildBean( + var id:Long, + var user_id:Long, + var title:String, + var radius:Int, + var type:Int, + var log:String, + var lat:String + ) +} diff --git a/network/src/main/java/com/xty/network/model/HealthBodyBean.kt b/network/src/main/java/com/xty/network/model/HealthBodyBean.kt new file mode 100644 index 0000000..4c10227 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/HealthBodyBean.kt @@ -0,0 +1,8 @@ +package com.xty.network.model + +data class HealthBodyBean( + var view_num:Int, + var med_code:Int, + var med_name:String, + var id:Long +) diff --git a/network/src/main/java/com/xty/network/model/HealthBodyPartBean.kt b/network/src/main/java/com/xty/network/model/HealthBodyPartBean.kt new file mode 100644 index 0000000..6aad8f6 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/HealthBodyPartBean.kt @@ -0,0 +1,13 @@ +package com.xty.network.model + +data class HealthBodyPartBean( + + val list:ArrayList, + val first:String +) { + data class HealthBodyPartChildBean( + var ref_id:Long , + var ref_name:String , + var view_num:Int + ) +} diff --git a/network/src/main/java/com/xty/network/model/HealthHeaderEntity.kt b/network/src/main/java/com/xty/network/model/HealthHeaderEntity.kt new file mode 100644 index 0000000..6c97556 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/HealthHeaderEntity.kt @@ -0,0 +1,11 @@ +package com.xty.network.model + +import com.chad.library.adapter.base.entity.MultiItemEntity + +data class HealthHeaderEntity( + val first:String, + override val itemType: Int, + val data:T +): MultiItemEntity{ + +} diff --git a/network/src/main/java/com/xty/network/model/InquiryInfoDetailBean.kt b/network/src/main/java/com/xty/network/model/InquiryInfoDetailBean.kt new file mode 100644 index 0000000..ed7440e --- /dev/null +++ b/network/src/main/java/com/xty/network/model/InquiryInfoDetailBean.kt @@ -0,0 +1,23 @@ +package com.xty.network.model + +data class InquiryInfoDetailBean( + val ref_name:String, //详细名称 + + val view_num:Int, //浏览量 + + val prevent:String, //预后 + + val condition:String, //状况 + + val symptom:String,//症状 + val initial:String, //首字母 + + val daily:String, //日常 + val heal:String, //治疗 + val department:String, //问诊科室 + + val seek:String, //就医 + + val etiology:String //病因 + +) diff --git a/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt b/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt index 4c184af..d96e45b 100644 --- a/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt +++ b/network/src/main/java/com/xty/network/model/VideoDoctorBean.kt @@ -1,7 +1,10 @@ package com.xty.network.model data class VideoDoctorBean ( - val data:String, + val url:String, + val wxtype:Int,// 1=正式 2=测试 + + val wxid:String, val type:Int // 类型:1-和缓(跳转小程序) 2-春雨(H5打开) 3-平安(跳转小程序) ) { } \ No newline at end of file