中建365-二期开发-健康医典/电子围栏

develop
wlh 1 year ago
parent dd733d9367
commit ca2dfddaa7

@ -291,6 +291,10 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name="com.zj365.mime.act.electronicfence.ElectronicFenceSettingAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="com.zj365.mime.act.BaseInfoChangeAct"
android:launchMode="singleTop"

@ -255,7 +255,8 @@ HealthHomeFrag : BaseVmFrag<HomeVm>() {
// CommonToastUtils.showToast("敬请期待")
}
"health_dic" ->{
CommonToastUtils.showToast("敬请期待")
RouteManager.goAct(ARouterUrl.HEALTH_CODE_MAIN_ACT)
// CommonToastUtils.showToast("敬请期待")
}
else ->{
@ -608,7 +609,25 @@ HealthHomeFrag : BaseVmFrag<HomeVm>() {
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)
}
}
}

@ -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)
}

@ -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"
}
}

@ -0,0 +1,14 @@
package com.xty.common.weight;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
public interface AdapterStick <T extends RecyclerView.ViewHolder> 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();
}

@ -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<Integer, Boolean> mPinnedViewTypes = new HashMap<Integer, Boolean>();
/**
* 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;
}
}
}

@ -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<b.length;i++){
if(b[i].equals(text)){
choose = i;
}
}
invalidate();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
final int action = event.getAction();
final float y = event.getY();// 点击y坐标
final int oldChoose = choose;
final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;
final int c = (int) (y / getHeight() * b.length);// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数.
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
// setBackgroundResource(R.drawable.sidebar_background);
if (oldChoose != c) {
if (c >= 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);
}
}

@ -0,0 +1,5 @@
package com.xty.common.weight;
public interface Stick {
boolean isPinnedViewType(int viewType);
}

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid
android:color="@color/white"/>
<stroke android:color="@color/col_02c"
android:width="@dimen/dp_0_5"/>
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -98,4 +98,10 @@
</declare-styleable>
<declare-styleable name="SideBar">
<attr name="scaleSize" format="integer"/>
<attr name="scaleItemCount" format="integer"/>
<attr name="scaleWidth" format="dimension"/>
</declare-styleable>
</resources>

@ -318,6 +318,15 @@
<activity android:name=".act.healthrecord.HealthRecordsListAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".act.healthcode.HealthCodeMainAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".act.healthcode.HealthBodyInquiryAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".act.healthcode.HealthBodyPartAct"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
</application>

@ -219,11 +219,11 @@ class HealthMainAct : BaseVmAct<HealthMainVm>() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
// binding.xTablayout.getTabAt(position)!!.select()
onEventObject(
/*onEventObject(
baseContext,
UmengEventId.HealthMonitor,
"${getString(tabName[position])}监测详情页"
)
)*/
changeTitle(position)
}
})

@ -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<BaseVm>() {
@Route(path = ARouterUrl.HEALTH_BODY_INQUIRY_ACT)
class HealthBodyInquiryAct : BaseVmAct<HealthBodyInquiryVm>() {
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()
}
}
}

@ -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<HealthBodyPartVm>() {
var mTitle:String =""
var id:Long = 0
val binding by lazy { ActHealthCodeBodyPartBinding.inflate(layoutInflater) }
val adapter by lazy { HealthBodyPartAdapter() }
var mList = ArrayList<HealthHeaderEntity<HealthBodyPartBean.HealthBodyPartChildBean>>()
private var filterSlideList = ArrayList<String>()
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
}

@ -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<BaseVm>() {
@Route(path = ARouterUrl.HEALTH_CODE_MAIN_ACT)
class HealthCodeMainAct : BaseVmAct<HealthCodeMainVm>() {
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

@ -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<HealthRecordsListVm>() {
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<HealthRecordsListVm>() {
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)
}
}
}

@ -75,6 +75,9 @@ class UploadHealthRecordAct : BaseVmAct<UploadHealthRecordVm>() {
}
mViewModel.submitReport(reportTitle,reportType,reportTime,strBuilder.toString(),reportExplain)
}
mViewModel.submitLiveData.observe(this){
finish()
}
}
@ -88,7 +91,7 @@ class UploadHealthRecordAct : BaseVmAct<UploadHealthRecordVm>() {
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 {

@ -45,7 +45,7 @@ class PsychologicalTestMainAct : BaseListAct<PsychologicalTestMainVm>() {
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)

@ -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<HealthHeaderEntity<HealthBodyPartBean.HealthBodyPartChildBean>, 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<HealthBodyPartBean.HealthBodyPartChildBean>) {
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
}
}

@ -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<HealthBodyBean>(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}")
}
}

@ -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<HealthReportListBean.HealthReportBean>(
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<HealthReportListBean.HealthReportBean>(
}
}
var imgs = item.pic.split(",") as MutableList<String>
var imgAdapter = HealthRecordsChildAdapter()
var recycler = holder.getView<RecyclerView>(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)
}
}
}

@ -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<Any>(R.layout.item_health_report_record_child) {
override fun convert(holder: BaseViewHolder, item: Any) {
class HealthRecordsChildAdapter : BaseAdapter<String>(R.layout.item_health_report_record_child) {
override fun convert(holder: BaseViewHolder, item: String) {
holder.getView<RImageView>(R.id.img_pic).setImage(context,item)
}
}

@ -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<RespBody<InquiryInfoDetailBean>>() }
val videoDoctorLive by lazy { MutableLiveData<RespBody<VideoDoctorBean>>() }
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)
}
}
}

@ -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<RespBody<MutableList<HealthBodyPartBean>>>() }
fun getBodyPart(id:Long){
startHttp {
val body = apiInterface().getRefiningName(id)
body.getCodeStatus(refiningNameLiveData, nowData)
}
}
}

@ -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<RespBody<MutableList<HealthBodyBean>>>() }
fun getAllBody(){
startHttp {
val body = apiInterface().getAllBody()
body.getCodeStatus(allBodyLiveData, nowData)
}
}
}

@ -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<RespBody<HealthReportListBean>>() }
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)
}
}

@ -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"

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/title_white_bar"
android:id="@+id/title"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler"/>
<com.xty.common.weight.SideBar
android:id="@+id/sideBar"
android:layout_width="@dimen/dp_20"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:paddingRight="10dp"
android:textColor="@color/col_c7c"
android:layout_marginBottom="@dimen/dp_89"
android:textSize="@dimen/sp_13"/>
</RelativeLayout>
</LinearLayout>

@ -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">
<ImageView
@ -27,13 +30,19 @@
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_21"/>
<TextView
android:layout_width="wrap_content"
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请输入症状、病因、身体反应"
android:hint="请输入症状、病因、身体反应"
android:layout_toRightOf="@+id/img_search"
android:layout_centerVertical="true"
android:textColor="@color/col_c7c"
android:textColor="@color/col_313"
android:background="@null"
android:textColorHint="@color/col_7c7"
android:imeOptions="actionSearch"
android:singleLine="true"
android:inputType="text"
android:textSize="@dimen/sp_13"
android:layout_marginLeft="@dimen/dp_7"/>
@ -64,239 +73,11 @@
app:layout_constraintRight_toLeftOf="@+id/img_body"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="1"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="头部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="2"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="颈部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="3"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="胸部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="4"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="腹部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="5"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="腰部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="6"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="骨盆"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
android:layout_height="match_parent"
android:id="@+id/left_recycler"/>
</LinearLayout>
</LinearLayout>
@ -322,239 +103,10 @@
app:layout_constraintLeft_toRightOf="@+id/img_body"
app:layout_constraintRight_toRightOf="parent">
<LinearLayout
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="7"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="血液"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="8"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="皮肤"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="9"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="肌肉"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="10"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="骨骼"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="11"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生殖"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.ruffian.library.widget.RTextView
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:corner_radius="@dimen/dp_50"
app:border_color_normal="@color/col_02c"
app:background_normal="@color/white"
app:border_width_normal="0.5dp"
android:text="12"
android:textColor="@color/col_02c"
android:gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="四肢"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>
android:layout_height="match_parent"
android:id="@+id/right_recycler"/>
</LinearLayout>

@ -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">
<ImageView
@ -28,10 +30,15 @@
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_21"/>
<TextView
android:layout_width="wrap_content"
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="搜索报告记录"
android:hint="搜索报告记录"
android:background="@null"
android:singleLine="true"
android:inputType="text"
android:imeOptions="actionSearch"
android:layout_toRightOf="@+id/img_search"
android:layout_centerVertical="true"
android:textColor="@color/col_c7c"
@ -55,6 +62,7 @@
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="12dp"
android:layout_marginLeft="@dimen/dp_14"
android:layout_marginRight="@dimen/dp_14"/>

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:background="@color/white"
android:id="@+id/rx_child">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_313"
android:layout_marginLeft="@dimen/dp_15"
android:text="动脉脑痛"
android:layout_centerVertical="true"/>
<TextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_15"
android:textColor="@color/col_313"
android:layout_marginRight="@dimen/dp_30"
android:text="查看:30"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"/>
</RelativeLayout>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_25"
android:gravity="center_vertical"
android:background="@color/col_2F2">
<TextView
android:id="@+id/tv_letter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="@dimen/sp_13"
android:text="A"
android:layout_marginLeft="@dimen/dp_18"/>
</LinearLayout>

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_body_sort"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:gravity="center"
android:text="12"
android:layout_gravity="center"
android:textColor="@color/col_02c"
android:background="@drawable/shape_oval_02c" />
<TextView
android:id="@+id/tv_body_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="头部"
android:textSize="@dimen/sp_15"
android:layout_marginLeft="@dimen/dp_5"
android:textColor="@color/col_313"/>
</LinearLayout>
<TextView
android:id="@+id/tv_body_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_c7c"
android:textSize="12sp"
tools:text="查看:187人"/>
</LinearLayout>

@ -6,9 +6,11 @@
android:layout_height="wrap_content">
<com.ruffian.library.widget.RImageView
android:id="@+id/img_pic"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_70"
app:corner_radius="@dimen/dp_5"
android:scaleType="centerCrop"
app:is_circle="false"/>

@ -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<BaseVm>() {
@Route(path = ARouterUrl.ELECTRONIC_FENCE_SET_ACT)
class ElectronicFenceSettingAct : BaseVmAct<ElectronicFenceSettingVm>() {
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<BaseVm>() {
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)
}
}

@ -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<EtFenceListBean.EtFenceChildBean> (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<TextView>(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 = "禁出"
}
}
}

@ -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<RespBody<EtFenceListBean>>() }
fun getElectronicFenceList(){
startHttp {
var response = apiInterface().getBtFenceList()
response.getCodeStatus(electronicFenceListLiveDate, nowData)
}
}
}

@ -24,17 +24,25 @@
android:layout_gravity="bottom"
>
<include layout="@layout/layout_empyt_no_data"
android:id="@+id/in_empty"
android:layout_above="@+id/ll_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.recyclerview.widget.RecyclerView
android:visibility="gone"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycler"/>
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/ll_data">
<include layout="@layout/layout_empyt_no_data"
android:id="@+id/in_empty"
android:layout_above="@+id/ll_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.recyclerview.widget.RecyclerView
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycler"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_btn"
@ -48,17 +56,20 @@
android:layout_alignParentBottom="true">
<com.ruffian.library.widget.RTextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="@dimen/dp_42"
android:layout_weight="1"
app:corner_radius="@dimen/dp_12"
app:background_normal="@color/col_eee"
android:text="点击设置"
android:text="删除"
android:visibility="gone"
android:textSize="@dimen/sp_16"
android:layout_marginRight="@dimen/dp_11"
android:gravity="center"
android:textColor="@color/col_333"/>
<com.ruffian.library.widget.RTextView
android:id="@+id/tv_confirm"
android:layout_width="0dp"
android:layout_height="@dimen/dp_42"
android:layout_weight="1"

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_80"
android:padding="@dimen/dp_16"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_333"
android:textSize="@dimen/sp_16"
tools:text="长沙市开福区东辰19公馆"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_radius"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_333"
android:textSize="@dimen/sp_14"
android:drawablePadding="@dimen/dp_5"
android:drawableLeft="@mipmap/icon_radius"
tools:text="半径1公里"/>
<TextView
android:id="@+id/tv_forbid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/col_333"
android:layout_marginLeft="@dimen/dp_16"
android:drawableLeft="@mipmap/icon_forbid_leave"
android:drawablePadding="@dimen/dp_5"
android:textSize="@dimen/sp_14"
tools:text="禁出"/>
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:background="@mipmap/icon_arrow_rigth_black"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>

@ -1477,7 +1477,7 @@ interface ApiInterface {
* 获取报告记录
*/
@POST("customer/reportData/list")
suspend fun getHealthReportList():RespBody<HealthReportListBean>
suspend fun getHealthReportList(@Body rb: RequestBody):RespBody<HealthReportListBean>
/**
* 添加报告记录
@ -1485,6 +1485,21 @@ interface ApiInterface {
@POST("customer/reportData/add")
suspend fun submitHealthReport(@Body rb: RequestBody):RespBody<Any>
/**
* 健康医典-获取数据
*/
@GET("customer/medical/getBody")
suspend fun getAllBody():RespBody<MutableList<HealthBodyBean>>
/**
* 健康医典-医典详情
*/
@GET("customer/medical/getMedicalInfo")
suspend fun getInquiryInfo(@Query("refId") id:Long ):RespBody<InquiryInfoDetailBean>
@GET("customer/medical/getRefiningName")
suspend fun getRefiningName(@Query("medId") id:Long):RespBody<MutableList<HealthBodyPartBean>>
/**
* 商品信息接口
@ -1798,6 +1813,9 @@ interface ApiInterface {
@POST("customer/watch/realmeas")
suspend fun measureWatchData(@Body rb: RequestBody):RespBody<Any>
@POST("customer/watch/getBtfenceList")
suspend fun getBtFenceList():RespBody<EtFenceListBean>
/**
* 获取演示模式

@ -0,0 +1,13 @@
package com.xty.network.model
data class EtFenceListBean(var count:Int,var list:ArrayList<EtFenceChildBean>){
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
)
}

@ -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
)

@ -0,0 +1,13 @@
package com.xty.network.model
data class HealthBodyPartBean(
val list:ArrayList<HealthBodyPartChildBean>,
val first:String
) {
data class HealthBodyPartChildBean(
var ref_id:Long ,
var ref_name:String ,
var view_num:Int
)
}

@ -0,0 +1,11 @@
package com.xty.network.model
import com.chad.library.adapter.base.entity.MultiItemEntity
data class HealthHeaderEntity<T>(
val first:String,
override val itemType: Int,
val data:T
): MultiItemEntity{
}

@ -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 //病因
)

@ -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-平安(跳转小程序)
) {
}
Loading…
Cancel
Save