From ca2dfddaa74b64a506d79d0dcec08078f724825c Mon Sep 17 00:00:00 2001 From: wlh <646507849@qq.com> Date: Tue, 16 Jan 2024 09:00:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=BB=BA365-=E4=BA=8C=E6=9C=9F?= =?UTF-8?q?=E5=BC=80=E5=8F=91-=E5=81=A5=E5=BA=B7=E5=8C=BB=E5=85=B8/?= =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=9B=B4=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 + .../com/zj365/dc/fragment/HealthHomeFrag.kt | 23 +- .../java/com/xty/base/h5/CloudJSBridge.kt | 3 +- .../java/com/xty/common/arouter/ARouterUrl.kt | 10 + .../com/xty/common/weight/AdapterStick.java | 14 + .../weight/PinnedHeaderItemDecoration.java | 246 +++++++++ .../java/com/xty/common/weight/SideBar.java | 157 ++++++ .../java/com/xty/common/weight/Stick.java | 5 + .../src/main/res/drawable/shape_oval_02c.xml | 7 + .../mipmap-xxhdpi/icon_arrow_rigth_black.png | Bin 0 -> 1220 bytes .../res/mipmap-xxhdpi/icon_forbid_enter.png | Bin 0 -> 1398 bytes .../res/mipmap-xxhdpi/icon_forbid_leave.png | Bin 0 -> 1398 bytes .../main/res/mipmap-xxhdpi/icon_radius.png | Bin 0 -> 2590 bytes common/src/main/res/values/attrs.xml | 6 + health/src/main/AndroidManifest.xml | 9 + .../com/zj365/health/act/HealthMainAct.kt | 4 +- .../act/healthcode/HealthBodyInquiryAct.kt | 57 +- .../act/healthcode/HealthBodyPartAct.kt | 94 ++++ .../act/healthcode/HealthCodeMainAct.kt | 80 ++- .../act/healthrecord/HealthRecordsListAct.kt | 53 +- .../act/healthrecord/UploadHealthRecordAct.kt | 5 +- .../psychological/PsychologicalTestMainAct.kt | 2 +- .../healthcode/HealthBodyPartAdapter.kt | 45 ++ .../healthcode/HealthCodeMainAdapter.kt | 14 + .../healthrecord/HealthRecordsAdapter.kt | 19 +- .../healthrecord/HealthRecordsChildAdapter.kt | 7 +- .../zj365/health/vm/HealthBodyInquiryVm.kt | 27 + .../com/zj365/health/vm/HealthBodyPartVm.kt | 17 + .../com/zj365/health/vm/HealthCodeMainVm.kt | 18 + .../zj365/health/vm/HealthRecordsListVm.kt | 12 +- .../res/layout/act_health_body_inquiry.xml | 1 - .../res/layout/act_health_code_body_part.xml | 31 ++ .../main/res/layout/act_health_code_main.xml | 486 +----------------- .../res/layout/act_health_records_list.xml | 14 +- .../item_health_code_body_part_child.xml | 30 ++ .../item_health_code_body_part_header.xml | 19 + .../main/res/layout/item_health_code_main.xml | 41 ++ .../item_health_report_record_child.xml | 2 + .../ElectronicFenceSettingAct.kt | 77 ++- .../mime/adapter/ElectronicFenceAdapter.kt | 31 ++ .../zj365/mime/vm/ElectronicFenceSettingVm.kt | 17 + .../activity_electronic_fence_setting.xml | 33 +- .../main/res/layout/item_electron_setting.xml | 62 +++ .../main/java/com/xty/network/ApiInterface.kt | 20 +- .../com/xty/network/model/EtFenceListBean.kt | 13 + .../com/xty/network/model/HealthBodyBean.kt | 8 + .../xty/network/model/HealthBodyPartBean.kt | 13 + .../xty/network/model/HealthHeaderEntity.kt | 11 + .../network/model/InquiryInfoDetailBean.kt | 23 + .../com/xty/network/model/VideoDoctorBean.kt | 5 +- 50 files changed, 1372 insertions(+), 503 deletions(-) create mode 100644 common/src/main/java/com/xty/common/weight/AdapterStick.java create mode 100644 common/src/main/java/com/xty/common/weight/PinnedHeaderItemDecoration.java create mode 100644 common/src/main/java/com/xty/common/weight/SideBar.java create mode 100644 common/src/main/java/com/xty/common/weight/Stick.java create mode 100644 common/src/main/res/drawable/shape_oval_02c.xml create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_arrow_rigth_black.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_forbid_enter.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_forbid_leave.png create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_radius.png create mode 100644 health/src/main/java/com/zj365/health/act/healthcode/HealthBodyPartAct.kt create mode 100644 health/src/main/java/com/zj365/health/adapter/healthcode/HealthBodyPartAdapter.kt create mode 100644 health/src/main/java/com/zj365/health/adapter/healthcode/HealthCodeMainAdapter.kt create mode 100644 health/src/main/java/com/zj365/health/vm/HealthBodyInquiryVm.kt create mode 100644 health/src/main/java/com/zj365/health/vm/HealthBodyPartVm.kt create mode 100644 health/src/main/java/com/zj365/health/vm/HealthCodeMainVm.kt create mode 100644 health/src/main/res/layout/act_health_code_body_part.xml create mode 100644 health/src/main/res/layout/item_health_code_body_part_child.xml create mode 100644 health/src/main/res/layout/item_health_code_body_part_header.xml create mode 100644 health/src/main/res/layout/item_health_code_main.xml create mode 100644 mine/src/main/java/com/zj365/mime/adapter/ElectronicFenceAdapter.kt create mode 100644 mine/src/main/java/com/zj365/mime/vm/ElectronicFenceSettingVm.kt create mode 100644 mine/src/main/res/layout/item_electron_setting.xml create mode 100644 network/src/main/java/com/xty/network/model/EtFenceListBean.kt create mode 100644 network/src/main/java/com/xty/network/model/HealthBodyBean.kt create mode 100644 network/src/main/java/com/xty/network/model/HealthBodyPartBean.kt create mode 100644 network/src/main/java/com/xty/network/model/HealthHeaderEntity.kt create mode 100644 network/src/main/java/com/xty/network/model/InquiryInfoDetailBean.kt 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 0000000000000000000000000000000000000000..e48516c1f8bb16742d87891e07a23d62ecfb9935 GIT binary patch literal 1220 zcmV;#1UvhQP)Px(en~_@RA@u(+RJYnMHm3^@0)c|Oq3ubP`TFOAw`OacWhaZON*3BP?Q^qC=ZD? zzya|r(3AtDLV#Kc%CSJ998iT6QCiUh6p%tmQKH?MHF5s{9v2=5$^k-T?|f*=rYvSH zTgmJruIIeko!@-l?#_HO2v=CcE6fW$aJNUi7vWxnyKDrEr1Z$h$hH0b{nsomE`FEw z@i7ACoIeQwFZjMcRjpR%vy3(co`bE`+G32{#5_LvYTI0lK=Qp%G_pc4UWNU>PFl`(b>5eFku{4W4FEQEL|ZggT`4H+978(3Lc z`4kavZ-xcYK2fjNA6Z^r{v$4UqTnFCuLgjFi1=)CqyzK?0GJj+EX9FN92_8!b3TrU zr-`U90`?~WJS>DbVH%wl_>v=duRjKWZOt&tvh-a1O(J^Ut7LxW75Y zg9XT!N~!5;wQ8iAk~%m*Zy}<`0(evw>)F|)5aR4cQ#=#kHAJaYx|4`L1c1R7uqOcE z=tfdJQ(%oOm&*mE)GJ?o8h=D->=Xu|66q|ZVx0_lv8jT}} zxPK!l+&oBWMVQ&PJ4N@cKKuj>N9 zZOviRYhfb#fQTLyLg?jTEG@AJw=3}=;vv^{XJb)@Zkh;~bG|Pq;#px(sEGHJlv1yY zV{fs8Ip=2pVAub?mjCQTEHK7)cSV^tD8!#d#BD7K@u#GelK`;!3-PvX-^Uo!lZmLU zmWu#zplh~TY}?j5haKSlSTT=NSN?eskF+t^>$77sA?4wuX28! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..17c2d4160e9ae76e43110a4d34f98018aeabdda6 GIT binary patch literal 1398 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 Aw*UYD literal 0 HcmV?d00001 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