Commit eae736e4 by 刘鹏

feat : im模块代码提交

parent bfc4344e
......@@ -8,9 +8,9 @@ ext {
"m-confide" : "0.0.49.10",
"m-consultant" : "0.0.59.91",
"m-fm" : "0.0.30.03",
"m-user" : "0.0.61.68",
"m-user" : "0.0.61.84",
"m-home" : "0.0.22.70",
"m-im" : "0.0.19.90",
"m-im" : "0.0.20.13",
"m-dynamic" : "0.0.7.28",
"m-article" : "0.0.0.10",
......@@ -33,10 +33,10 @@ ext {
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.40.44",
"ydl-platform" : "0.0.40.51",
//第二步 若干
"ydl-webview" : "0.0.38.51",
"ydl-webview" : "0.0.38.52",
"ydl-media" : "0.0.21.10",
"ydl-pay" : "0.0.18.19",
"m-audioim" : "0.0.49.29.37",
......@@ -91,9 +91,9 @@ ext {
"m-confide" : "0.0.49.10",
"m-consultant" : "0.0.59.91",
"m-fm" : "0.0.30.01",
"m-user" : "0.0.61.68",
"m-user" : "0.0.61.84",
"m-home" : "0.0.22.70",
"m-im" : "0.0.19.90",
"m-im" : "0.0.20.13",
"m-dynamic" : "0.0.7.28",
"m-article" : "0.0.0.8",
......@@ -115,10 +115,10 @@ ext {
//-------------- 功能组件 --------------
//第一步
"ydl-platform" : "0.0.40.44",
"ydl-platform" : "0.0.40.51",
//第二步 若干
"ydl-webview" : "0.0.38.51",
"ydl-webview" : "0.0.38.52",
"ydl-media" : "0.0.21.10",
"ydl-pay" : "0.0.18.19",
"m-audioim" : "0.0.49.29.37",
......
......@@ -270,8 +270,10 @@
<!--图文问诊页面2-->
<activity
android:name="com.yidianling.medical.GraphicConsulttionFlow2Activity"
android:windowSoftInputMode="adjustNothing"
android:screenOrientation="portrait" />
<activity
android:name="com.yidianling.medical.pic.MedicalBrowsePicturesActivity"
android:screenOrientation="portrait"
......@@ -288,5 +290,11 @@
android:name="com.yidianling.medical.archives.MedicalAddNewArchivesActivity"
android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" />
<!--编辑问诊人-->
<activity
android:name="com.yidianling.medical.archives.MedicalEditArchivesActivity"
android:screenOrientation="portrait"
android:theme="@style/platform_NoTitleTheme" />
</application>
</manifest>
......@@ -16,6 +16,9 @@ import com.ydl.ydlcommon.adapter.custom.PublishImageAdapter
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.router.YdlCommonOut.Companion.showToast
import com.ydl.ydlcommon.ui.ParcelableImage
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.view.dialog.NormalDialog
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.R
import com.yidianling.medical.pic.MedicalBrowsePicturesActivity
import com.yidianling.medical.pic.MedicalDynamicConstants
......@@ -35,14 +38,16 @@ import java.util.*
class GraphicConsultationFlow1Activity : BaseActivity() {
companion object {
var publishTrendImgs = ArrayList<ParcelableImage>()
var publishTrendImgBrows = ArrayList<ParcelableImage>()
var PUBLISH_PIC_BROW = 21009
lateinit var imageAdapter: PublishImageAdapter
private var publishTrendImgs = ArrayList<ParcelableImage>()
private var publishTrendImgBrows = ArrayList<ParcelableImage>()
private var PUBLISH_PIC_BROW = 21009
private lateinit var mDoctorId: String
private lateinit var imageAdapter: PublishImageAdapter
@JvmStatic
fun start(context: Context) {
fun start(context: Context, doctorId: String) {
val starter = Intent(context, GraphicConsultationFlow1Activity::class.java)
.putExtra("doctorId", doctorId)
context.startActivity(starter)
}
}
......@@ -52,6 +57,8 @@ class GraphicConsultationFlow1Activity : BaseActivity() {
}
override fun initDataAndEvent() {
initStatus()
mDoctorId = intent.getStringExtra("doctorId")
imageAdapter =
PublishImageAdapter(publishTrendImgs, this@GraphicConsultationFlow1Activity);
......@@ -74,8 +81,17 @@ class GraphicConsultationFlow1Activity : BaseActivity() {
}
}
text_service.setOnClickListener {
if (edit_input.text.length < 10) {
ToastUtil.toastShort("请最少填写10个字")
return@setOnClickListener
} else {
//下一步
GraphicConsulttionFlow2Activity.start(this@GraphicConsultationFlow1Activity)
GraphicConsulttionFlow2Activity.start(
this@GraphicConsultationFlow1Activity,
edit_input.text.toString(), "", mDoctorId
)
}
}
edit_input.addTextChangedListener(object : TextWatcher {
......@@ -83,6 +99,15 @@ class GraphicConsultationFlow1Activity : BaseActivity() {
override fun afterTextChanged(s: Editable?) {
val inputNumber = edit_input.text.length.toString()
input_num.text = "$inputNumber/200"
if (edit_input.text.isNotEmpty()) {
text_service.setBackgroundResource(R.drawable.bg_doctor_detail_bottom)
text_service.isEnabled = true
} else {
text_service.setBackgroundResource(R.drawable.medical_bg_d7dfea_8dp)
text_service.isEnabled = false
}
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
......@@ -92,6 +117,36 @@ class GraphicConsultationFlow1Activity : BaseActivity() {
}
})
iv_back.setOnClickListener {
backCheck()
}
}
private fun backCheck() {
val builder = NormalDialog.Builder(this@GraphicConsultationFlow1Activity, "center", true)
builder.setTitle("")
builder.setMessage("\n仅剩一步就可抢到医生的问诊名额,确认放弃吗?\n")
builder.setPositiveButton(
"继续填写"
) { dialog, which ->
dialog.dismiss()
}.setNegativeButton(
"放弃填写"
) { dialog, which ->
//关闭页面
finish()
dialog.dismiss()
}
builder.setRight_color("#3464EC")
builder.setLeft_color("#8595A9")
builder.setContent_color("#10233A")
builder.create().show()
}
override fun onBackPressed() {
backCheck()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
......@@ -263,4 +318,9 @@ class GraphicConsultationFlow1Activity : BaseActivity() {
imageAdapter.updateDate(publishTrendImgs)
}
private fun initStatus() {
StatusBarUtils.setTransparentForImageView(this@GraphicConsultationFlow1Activity, null)
StatusBarUtils.statusBarLightMode(this@GraphicConsultationFlow1Activity)
}
}
\ No newline at end of file
package com.yidianling.medical
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import androidx.recyclerview.widget.LinearLayoutManager
import android.view.View
import androidx.recyclerview.widget.GridLayoutManager
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.R
import com.yidianling.medical.archives.MedicalAddNewArchivesActivity
import com.yidianling.medical.archives.adapter.MedicalUserArchivesFlow2Adapter
import com.yidianling.medical.archives.bean.MedicalArchivesListBean
import com.yidianling.uikit.custom.http.ServiceImpl
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.medical_graphic_consultation_flow2.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
/**
......@@ -14,9 +28,27 @@ import kotlinx.android.synthetic.main.medical_graphic_consultation_flow2.*
class GraphicConsulttionFlow2Activity : BaseActivity() {
companion object {
lateinit var stringExtra: String
lateinit var fileStrExtra: String
lateinit var doctorIdStrExtra: String
private lateinit var mAdapter: MedicalUserArchivesFlow2Adapter
private var mList = ArrayList<MedicalArchivesListBean>()
private var isFirstLoadData = true
//是否是首次问诊
private var isFirst = -1
/**
* @param inputText 并请描述
* @param fileStr 图片拼接字符串
* */
@JvmStatic
fun start(context: Context) {
fun start(context: Context, inputText: String, fileStr: String, doctorId: String) {
val starter = Intent(context, GraphicConsulttionFlow2Activity::class.java)
.putExtra("inputText", inputText)
.putExtra("fileStr", fileStr)
.putExtra("doctorId", doctorId)
context.startActivity(starter)
}
}
......@@ -26,11 +58,160 @@ class GraphicConsulttionFlow2Activity : BaseActivity() {
}
override fun initDataAndEvent() {
initStatus()
stringExtra = intent.getStringExtra("inputText")
fileStrExtra = intent.getStringExtra("fileStr")
doctorIdStrExtra = intent.getStringExtra("doctorId")
mAdapter = MedicalUserArchivesFlow2Adapter()
rv_people_list.layoutManager = GridLayoutManager(this@GraphicConsulttionFlow2Activity, 3)
rv_people_list.adapter = mAdapter
mAdapter.setOnItemClickListener { baseQuickAdapter, view, position ->
if (mAdapter.data[position]?.isAdd == true) {
//点击添加患者
isFirstLoadData = false
MedicalAddNewArchivesActivity.start(this@GraphicConsulttionFlow2Activity)
} else {
//item 点击
for ((index, bean) in mAdapter.data.withIndex()) {
if (mAdapter.data[index]?.isCheck == true) {
mAdapter.data[index]?.isCheck = false
} else {
mAdapter.data[index]?.isCheck = index == position
}
}
baseQuickAdapter.notifyDataSetChanged()
}
}
radio_first_mit.setOnCheckedChangeListener { group, checkedId ->
//婚姻状态
when (checkedId) {
R.id.yes -> {
//是首次问诊
input_first_mit.visibility = View.GONE
isFirst = 1
}
R.id.no -> {
//不是首次问诊
input_first_mit.visibility = View.VISIBLE
isFirst = 0
}
}
}
text_service.setOnClickListener {
//保存
toSave()
}
iv_back_flow2.setOnClickListener { finish() }
informed_consent_text.setOnClickListener {
//协议内容
}
getList()
}
/**
* 生成图文订单
* */
@SuppressLint("CheckResult")
private fun toSave() {
var selectBean: MedicalArchivesListBean? = null
//携程用于解决遍历选中item时,没遍历完就判断了selectBean
val scope = CoroutineScope(Dispatchers.Default + Job())
scope.launch {
for ((index, bean) in mAdapter.data.withIndex()) {
if (mAdapter.data[index]?.isCheck == true) {
selectBean = mAdapter.data[index]!!
break
}
}
if (selectBean == null) {
ToastUtil.toastShort("请选择就诊人")
return@launch
}
if (isFirst == -1) {
ToastUtil.toastShort("请选择是否首次问诊")
return@launch
}
if (isFirst == 0 && input_first_mit.text.isEmpty()) {
ToastUtil.toastShort("请描述您的病情")
return@launch
}
ServiceImpl.instance.createArchivesOrder(
"",
isFirst,
stringExtra,
input_first_mit.text.toString(),
selectBean!!.patientId,
doctorIdStrExtra
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
mList.clear()
if ("200" == response.code) {
ToastUtil.toastShort("成功")
} else {
ToastUtil.toastShort(response.msg)
}
}, { e ->
e.printStackTrace()
})
}
}
override fun onResume() {
super.onResume()
if (!isFirstLoadData) {
getList()
}
}
/**
* 获取患者列表
* */
@SuppressLint("CheckResult")
private fun getList() {
ServiceImpl.instance.getList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
mList.clear()
if ("200" == response.code) {
var data = response.data
if (data.size < 8) {
mList = data as ArrayList<MedicalArchivesListBean>
mList.add(MedicalArchivesListBean(true))
} else {
mList = data as ArrayList<MedicalArchivesListBean>
}
mAdapter.setNewData(mList as List<MedicalArchivesListBean?>?)
} else {
mList.add(MedicalArchivesListBean(true))
}
}, { e ->
rv_people_list.layoutManager = LinearLayoutManager(this@GraphicConsulttionFlow2Activity)
})
}
private fun initStatus() {
StatusBarUtils.setTransparentForImageView(this@GraphicConsulttionFlow2Activity, null)
StatusBarUtils.statusBarLightMode(this@GraphicConsulttionFlow2Activity)
}
}
\ No newline at end of file
package com.yidianling.medical
import android.app.AppOpsManager
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.net.Uri
import android.os.Build
import androidx.annotation.RequiresApi
import java.lang.reflect.Field
import java.lang.reflect.InvocationTargetException
import java.lang.reflect.Method
open class NotificationsUtils {
companion object {
private val CHECK_OP_NO_THROW = "checkOpNoThrow"
private val OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"
@RequiresApi(Build.VERSION_CODES.KITKAT)
fun isNotificationOpen(context: Context): Boolean {
val mAppOps: AppOpsManager =
context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
val appInfo: ApplicationInfo = context.getApplicationInfo()
val pkg: String = context.getApplicationContext().getPackageName()
val uid: Int = appInfo.uid
var appOpsClass: Class<*>? = null /* Context.APP_OPS_MANAGER */
try {
appOpsClass = Class.forName(AppOpsManager::class.java.getName())
val checkOpNoThrowMethod: Method = appOpsClass.getMethod(
CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE,
String::class.java
)
val opPostNotificationValue: Field =
appOpsClass.getDeclaredField(OP_POST_NOTIFICATION)
val value = opPostNotificationValue.get(Int::class.java) as Int
return checkOpNoThrowMethod.invoke(
mAppOps,
value,
uid,
pkg
) as Int == AppOpsManager.MODE_ALLOWED
} catch (e: ClassNotFoundException) {
e.printStackTrace()
} catch (e: NoSuchMethodException) {
e.printStackTrace()
} catch (e: NoSuchFieldException) {
e.printStackTrace()
} catch (e: InvocationTargetException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
}
return false
}
fun getAppDetailSettingIntent(context: Context) {
val localIntent = Intent()
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
if (Build.VERSION.SDK_INT >= 9) {
localIntent.action = "android.settings.APPLICATION_DETAILS_SETTINGS"
localIntent.data = Uri.fromParts("package", context.packageName, null)
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.action = Intent.ACTION_VIEW
localIntent.setClassName(
"com.android.settings",
"com.android.settings.InstalledAppDetails"
)
localIntent.putExtra("com.android.settings.ApplicationPkgName", context.packageName)
}
context.startActivity(localIntent)
}
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.R
import com.yidianling.uikit.custom.http.ServiceImpl
......@@ -34,7 +35,7 @@ class MedicalAddNewArchivesActivity : BaseActivity() {
}
override fun initDataAndEvent() {
initStatus()
group_merried.setOnCheckedChangeListener { group, checkedId ->
//婚姻状态
when (checkedId) {
......@@ -100,6 +101,8 @@ class MedicalAddNewArchivesActivity : BaseActivity() {
checkInfo()
}
iv_back.setOnClickListener { finish() }
}
......@@ -137,6 +140,7 @@ class MedicalAddNewArchivesActivity : BaseActivity() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if ("200" == it.code) {
finish()
ToastUtil.toastShort("保存成功")
} else {
ToastUtil.toastShort(it.msg)
......@@ -149,4 +153,8 @@ class MedicalAddNewArchivesActivity : BaseActivity() {
}
private fun initStatus() {
StatusBarUtils.setTransparentForImageView(this@MedicalAddNewArchivesActivity, null)
StatusBarUtils.statusBarLightMode(this@MedicalAddNewArchivesActivity)
}
}
\ No newline at end of file
......@@ -10,7 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.yidianling.im.R
import com.yidianling.im.bean.SetCourseStatus
import com.yidianling.medical.archives.adapter.MedicalUserArchivesAdapter
import com.yidianling.medical.widgets.LoadMoreView
import com.yidianling.uikit.custom.http.ServiceImpl.Companion.instance
......@@ -29,6 +31,7 @@ class MedicalArchivesListActivity : BaseActivity(), SwipeRefreshLayout.OnRefresh
private val pageSize: Int = 20
private lateinit var mEmptyView: View
private lateinit var mAdapter: MedicalUserArchivesAdapter
private var isFirstLoadData = true
@JvmStatic
fun start(context: Context) {
......@@ -42,6 +45,7 @@ class MedicalArchivesListActivity : BaseActivity(), SwipeRefreshLayout.OnRefresh
}
override fun initDataAndEvent() {
initStatus()
mEmptyView =
LayoutInflater.from(this).inflate(R.layout.medical_list_empty_view, null, false)
var reLoad = mEmptyView.findViewById<View>(R.id.reLoad)
......@@ -64,7 +68,13 @@ class MedicalArchivesListActivity : BaseActivity(), SwipeRefreshLayout.OnRefresh
doctor_swipe_refresh_layout?.setProgressViewOffset(false, 0, 200)
mAdapter.setOnItemClickListener { baseQuickAdapter, view, position ->
isFirstLoadData = false
mAdapter.data[position]?.let {
MedicalEditArchivesActivity.start(
this@MedicalArchivesListActivity,
it
)
}
}
add_archives.setOnClickListener {
......@@ -79,9 +89,15 @@ class MedicalArchivesListActivity : BaseActivity(), SwipeRefreshLayout.OnRefresh
getPageList()
}
override fun onResume() {
super.onResume()
if (!isFirstLoadData) {
getPageList()
}
}
@SuppressLint("CheckResult")
private fun getPageList() {
//获取来源的专家
instance.getPageList(currPage, pageSize)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
......@@ -129,7 +145,7 @@ class MedicalArchivesListActivity : BaseActivity(), SwipeRefreshLayout.OnRefresh
}
}
}
}else{
} else {
doctor_swipe_refresh_layout.isRefreshing = false
mAdapter.loadMoreFail()
mAdapter.emptyView = mEmptyView
......@@ -143,12 +159,18 @@ class MedicalArchivesListActivity : BaseActivity(), SwipeRefreshLayout.OnRefresh
}
override fun onRefresh() {
currPage = 1
getPageList()
}
override fun onLoadMoreRequested() {
getPageList()
}
private fun initStatus() {
StatusBarUtils.setTransparentForImageView(this@MedicalArchivesListActivity, null)
StatusBarUtils.statusBarLightMode(this@MedicalArchivesListActivity)
}
}
\ No newline at end of file
package com.yidianling.medical.archives
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.utils.StatusBarUtils
import com.ydl.ydlcommon.view.dialog.NormalDialog
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.R
import com.yidianling.medical.archives.bean.MedicalArchivesListBean
import com.yidianling.uikit.custom.http.ServiceImpl
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.medical_edit_archives_activity.*
/**
*编辑问诊人
* */
class MedicalEditArchivesActivity : BaseActivity() {
companion object {
private lateinit var archivesBeanExtra: MedicalArchivesListBean
@JvmStatic
fun start(context: Context, archivesBean: MedicalArchivesListBean) {
val starter = Intent(context, MedicalEditArchivesActivity::class.java)
.putExtra("archivesBean", archivesBean)
context.startActivity(starter)
}
}
override fun layoutResId(): Int {
return R.layout.medical_edit_archives_activity
}
override fun initDataAndEvent() {
initStatus()
archivesBeanExtra = intent.getSerializableExtra("archivesBean") as MedicalArchivesListBean
iv_back.setOnClickListener { finish() }
tv_save.setOnClickListener { finish() }
tv_delete.setOnClickListener {
val builder = NormalDialog.Builder(this@MedicalEditArchivesActivity, "center", true)
builder.setTitle("")
builder.setMessage("\n是否删除该条问诊人信息\n")
builder.setPositiveButton(
"是"
) { dialog, which ->
//删除
toDelete()
dialog.dismiss()
}.setNegativeButton(
"否"
) { dialog, which ->
dialog.dismiss()
}
builder.setRight_color("#3464EC")
builder.setLeft_color("#8595A9")
builder.setContent_color("#10233A")
builder.create().show()
}
name.text = archivesBeanExtra.name
idcard.text = archivesBeanExtra.idcardNo
merried.text = archivesBeanExtra.merriedName
relation.text = archivesBeanExtra.relationName
}
@SuppressLint("CheckResult")
private fun toDelete() {
ServiceImpl.instance.deleteArchives(archivesBeanExtra.patientId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
if ("200" == response.code) {
finish()
ToastUtil.toastShort("成功")
} else {
ToastUtil.toastShort(response.msg)
}
}, { e ->
e.printStackTrace()
})
}
private fun initStatus() {
StatusBarUtils.setTransparentForImageView(this@MedicalEditArchivesActivity, null)
StatusBarUtils.statusBarLightMode(this@MedicalEditArchivesActivity)
}
}
\ No newline at end of file
......@@ -4,14 +4,18 @@ import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yidianling.im.R
import com.yidianling.medical.archives.bean.MedicalArchivesListBean
import com.yidianling.medical.archives.bean.MedicalUserArchivesBean
class MedicalUserArchivesAdapter :BaseQuickAdapter<MedicalArchivesListBean?, BaseViewHolder>(R.layout.medical_item_archives_list){
/**
* 问诊人列表adapter
* */
class MedicalUserArchivesAdapter :
BaseQuickAdapter<MedicalArchivesListBean?, BaseViewHolder>(R.layout.medical_item_archives_list) {
override fun convert(helper: BaseViewHolder, item: MedicalArchivesListBean?) {
helper.setText(R.id.name, item?.name)
helper.setText(R.id.sex, item?.genderName)
helper.setText(R.id.age, item?.birthday)
helper.setText(R.id.age, "${item?.age}岁")
helper.setText(R.id.id_card, item?.idcardNo)
......
package com.yidianling.medical.archives.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yidianling.im.R
import com.yidianling.medical.archives.bean.MedicalArchivesListBean
/**
* 图文问诊 患者adapter
* */
class MedicalUserArchivesFlow2Adapter :
BaseQuickAdapter<MedicalArchivesListBean?, BaseViewHolder>(R.layout.medical_item_archives_flow2_list) {
override fun convert(helper: BaseViewHolder, item: MedicalArchivesListBean?) {
if (item?.isAdd == true) {
helper.setBackgroundRes(R.id.bg, R.drawable.medical_bg_edit_f2f5f8)
helper.setGone(R.id.group_item, false)
helper.setGone(R.id.iv_bottom_check, false)
helper.setGone(R.id.group_add, true)
} else {
helper.setGone(R.id.group_add, false)
helper.setGone(R.id.group_item, true)
if (item?.isCheck == true) {
helper.setBackgroundRes(R.id.bg, R.drawable.medical_list_check_bg)
helper.setGone(R.id.iv_bottom_check, true)
} else {
helper.setBackgroundRes(R.id.bg, R.drawable.medical_bg_edit_f2f5f8)
helper.setGone(R.id.iv_bottom_check, false)
}
helper.setText(R.id.name, item?.name)
helper.setText(R.id.sex, item?.genderName)
helper.setText(R.id.age, "${item?.age}岁")
}
}
}
\ No newline at end of file
package com.yidianling.medical.archives.bean
data class CreateImageInquiryDtoBody(
var doctorId: String,
var firstInquiry: Int,
var images: String,
var inquiryType: Int,
var mainSuitDisease: String,
var mainSuit: String,
var patientId: Int = 1
)
package com.yidianling.medical.archives.bean
data class CreatePatientDtoBody(
var idcardNo: String,
var merried: Int,
var name: String,
var relation: Int,
var idcardType: Int = 1
)
package com.yidianling.medical.archives.bean
import java.io.Serializable
data class MedicalArchivesListBean(
val birthday: String,
val createTime: String,
val gender: Int,
val genderName: String,
val idcardNo: String,
val idcardType: Int,
val isDeleted: Boolean,
val locationCityId: Int,
val locationCityName: String,
val merried: Int,
val name: String,
val patientId: Int,
val phone: String,
val relation: Int,
val userId: Int
)
\ No newline at end of file
var isAdd: Boolean,
val birthday: String = "",
val age: String = "",
val createTime: String = "",
val gender: Int = -1,
val genderName: String = "",
val idcardNo: String = "",
val idcardType: Int = -1,
val isDeleted: Boolean = false,
val locationCityId: Int = -1,
val locationCityName: String = "",
val merried: Int = -1,
val merriedName: String = "",
val name: String = "",
val patientId: Int = -1,
val phone: String = "",
val relation: Int = -1,
val relationName: String = "",
val userId: Int = -1,
var isCheck: Boolean = false
):Serializable
\ No newline at end of file
package com.yidianling.medical.archives.bean
data class PatientIdDtoBody(
var patientId: Int
)
package com.yidianling.medical.im
import android.content.Context
import android.os.Build
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.jcodecraeer.xrecyclerview.CustomFooterViewCallBack
import com.jcodecraeer.xrecyclerview.XRecyclerView
import com.ydl.ydlcommon.base.BaseFragment
import com.ydl.ydlcommon.data.http.RxUtils
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.R
import com.yidianling.im.event.MessageListRefreshEvent
import com.yidianling.im.helper.MsgReceiveHelper
import com.yidianling.im.http.ImHttpImpl
import com.yidianling.im.router.ImIn
import com.yidianling.im.ui.page.fragment.bean.ChatItemBean
import com.yidianling.im.ui.page.fragment.bean.ChatModelBean
import com.yidianling.im.ui.page.fragment.view.ChatFooterItemView
import com.yidianling.im.ui.page.widget.ChatUnusualView
import com.yidianling.im.ui.param.ChatParam
import com.yidianling.medical.NotificationsUtils
import com.yidianling.medical.im.adapter.MedicalChatAdapter
import de.greenrobot.event.EventBus
import kotlinx.android.synthetic.main.medical_im_chat_fragment_layout.*
/**
* 私聊消息列表页面
* Created by xj on 2019/9/20.
*/
@Route(path = "/im/medicalim")
class MeidicalChatFragment : BaseFragment(), XRecyclerView.LoadingListener {
private lateinit var mContext: Context
private var chatAdapter: MedicalChatAdapter? = null
private var allChatData: ChatModelBean = ChatModelBean() //全部数据
private var showData: ArrayList<ChatItemBean> = ArrayList() // 最终展示的数据
private var threeWeekItem: ChatItemBean =
ChatItemBean(0, 0, "", 0, 0, "", 0, 0, 0, 0, 0, "", 0, "", "", 0, 0, 0, "", 1, "", true)
private val mCompare: Comparator<ChatItemBean> = Comparator { o1, o2 ->
val res = o1.timestamp.compareTo(o2.timestamp)
when {
res == 0 -> 0
res > 0 -> -1
else -> 1
}
}
//当前未读item下标
private var curItem = 0
override fun layoutResId(): Int {
return R.layout.medical_im_chat_fragment_layout
}
override fun initDataAndEvent() {
mContext = requireContext()
selectModel()
initListData()
notifiVisible()
}
private fun notifiVisible() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (NotificationsUtils.isNotificationOpen(mContext)) {
top_hide.visibility = View.GONE
} else {
top_hide.visibility = View.VISIBLE
top_hide.setOnClickListener {
NotificationsUtils.getAppDetailSettingIntent(mContext)
}
close_hide.setOnClickListener {
top_hide.visibility = View.GONE
}
}
}
}
override fun initDataAndEventLazy() {
}
fun getChatMessageData() {
if (ImIn.getUserInfo()?.uid != "0") {
var dis = ImHttpImpl.getInstance()
.getAllChatMessage(ChatParam("${ImIn.getUserInfo()?.uid}", "${0}"))
.compose(RxUtils.applySchedulers(this))
.compose<ChatModelBean>(RxUtils.resultJavaData())
.subscribe({ it ->
if (it.before.data.size != 0 || it.nomal.data.size != 0) {
setData(it)
}
chat_recyclerview?.let {
chat_recyclerview.refreshComplete()
}
}, { t ->
ToastUtil.toastShort("您的网络出现了问题")
chat_recyclerview?.let {
chat_recyclerview.refreshComplete()
}
})
}
}
fun nextUnReadItem() {
if (showData == null) return
for (i in curItem + 1 until showData.size) {
var num = 0
try {
num = Integer.parseInt(showData[i].unReadNum.toString())
} catch (e: NumberFormatException) {
e.printStackTrace()
}
if (num > 0 || MsgReceiveHelper.getUnNum(showData[i].toUid.toString()) > 0) {
if (chat_recyclerview != null) {
chat_recyclerview.smoothScrollToPosition(i)
}
curItem = i
break
}
if (i == showData.size - 1) {
curItem = 0
if (chat_recyclerview != null) {
chat_recyclerview.smoothScrollToPosition(0)
}
}
}
}
override fun onLoadMore() {
chat_recyclerview.setNoMore(true)
}
override fun onRefresh() {
EventBus.getDefault().post(MessageListRefreshEvent(0))
getChatMessageData()
}
/**
* 设置全部数据
*/
fun setData(data: ChatModelBean) {
allChatData = data
setShowData()
}
/**
* 设置最终显示得数据,(优先置顶,再最近数据,再三周前的消息item,再三周前,其余按照时间排序)
*/
private fun setShowData() {
showData.clear()
chatAdapter?.notifyDataSetChanged()
selectTopData()
// 全部
showData.addAll(allChatData.topData.data.sortedWith(mCompare))
showData.addAll(allChatData.nomal.data.filter { it.is_top == 0 }
.sortedWith(mCompare))
if (allChatData.before.data.any { it.is_top == 0 }) {
showData.add(threeWeekItem)
showData.addAll(allChatData.before.data.filter { it.is_top == 0 }
.sortedWith(mCompare))
}
// 重置消息未读数
MsgReceiveHelper.reQueryUnreadNumber {
showData.forEachIndexed { index, _ ->
showData[index].unReadNum =
MsgReceiveHelper.getUnNum(showData[index].toUid.toString())
}
chatAdapter?.notifyDataSetChanged()
resetPageShow()
}
}
/**
* 将before数据和nomal数据里面的置顶数据筛选出来放入topData里面
*/
private fun selectTopData() {
allChatData.topData.data.clear()
allChatData.topData.data.addAll(allChatData.before.data.filter { it.is_top == 1 })
allChatData.topData.data.addAll(allChatData.nomal.data.filter { it.is_top == 1 })
}
private fun initListData() {
chatAdapter = MedicalChatAdapter(mContext, showData, this)
chatAdapter?.setlistener(object : MedicalChatAdapter.ChatRecyclerViewCallback {
override fun onRefresh() {
getChatMessageData()
}
})
chat_recyclerview.layoutManager = LinearLayoutManager(context)
chat_recyclerview.adapter = chatAdapter
chat_recyclerview.setLoadingListener(this)
chat_recyclerview.setFootView(
ChatFooterItemView(mContext),
object : CustomFooterViewCallBack {
override fun onSetNoMore(p0: View?, p1: Boolean) {
}
override fun onLoadingMore(p0: View?) {
}
override fun onLoadMoreComplete(p0: View?) {
}
})
}
override fun onResume() {
super.onResume()
resetPageShow()
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser && getIsViewCreated()) {
notifiVisible()
resetPageShow()
}
}
fun clearData() {
showData.clear()
chatAdapter?.notifyDataSetChanged()
resetPageShow()
}
/**
* 页面展示状态逻辑
*/
private fun resetPageShow() {
ll_chat_unusual_view?.let {
if (ImIn.isLogin()) {
//登录状态
if (showData.size != 0) {
//数据不为空
chat_recyclerview.visibility = View.VISIBLE
ll_chat_unusual_view.visibility = View.GONE
} else {
chat_recyclerview.visibility = View.GONE
ll_chat_unusual_view.visibility = View.VISIBLE
ll_chat_unusual_view.setUnusualType(ChatUnusualView.TYPE_CHAT_ALL_NO_DATA)
ll_chat_unusual_view.setListener(object : ChatUnusualView.ChatUnusualListener {
override fun onButtonClick() {
startActivity(
ImIn.getConsultService()
.expertSearchIntent(activity!!, "0", 0, false)
)
}
})
}
} else {
//未登录状态
chat_recyclerview.visibility = View.GONE
ll_chat_unusual_view.visibility = View.VISIBLE
ll_chat_unusual_view.setUnusualType(ChatUnusualView.TYPE_UNLOGIN)
ll_chat_unusual_view.setListener(object : ChatUnusualView.ChatUnusualListener {
override fun onButtonClick() {
ImIn.loginByOneKeyLogin(mContext, true)
}
})
}
}
}
/**
* 选择私聊列表展示模式
*/
private fun selectModel() {
setShowData()
resetPageShow()
}
}
\ No newline at end of file
package com.yidianling.medical.im.adapter
import android.app.Dialog
import android.content.Context
import android.text.TextUtils
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import com.netease.nimlib.sdk.NIMClient
import com.netease.nimlib.sdk.msg.MsgService
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum
import com.ydl.ydlcommon.base.lifecycle.ILifecycleable
import com.ydl.ydlcommon.data.http.RxUtils
import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.ydl.ydlcommon.view.ListNoCancelDialog
import com.yidianling.im.api.param.RmHistoryParam
import com.yidianling.im.api.param.RmTalkParam
import com.yidianling.im.api.param.TopMessageParam
import com.yidianling.im.bridge.P2PCustomActionHandlerImpl
import com.yidianling.im.event.UpdateTabUnreadNumEvent
import com.yidianling.im.helper.IMChatUtil
import com.yidianling.im.helper.MsgReceiveHelper
import com.yidianling.im.http.ImHttpImpl
import com.yidianling.im.session.SessionHelper
import com.yidianling.im.ui.page.fragment.bean.ChatItemBean
import com.yidianling.im.ui.page.fragment.view.ChatTimeItemView
import com.yidianling.medical.im.view.MedicalChatItemView
import de.greenrobot.event.EventBus
/**
* 互动列表适配器
* Created by xj on 2019/10/14.
*/
class MedicalChatAdapter(
var context: Context,
private var mList: ArrayList<ChatItemBean>,
private var lifecycleable: ILifecycleable<*>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val TYPE_NORMAL_ITEM = 1001 // 正常item
const val TYPE_TIME_ITEM = 1002 // 三周前item
}
fun setData(data: ArrayList<ChatItemBean>) {
mList.clear()
mList.addAll(data)
notifyDataSetChanged()
}
override fun getItemViewType(position: Int): Int {
if (position < mList.size && !mList[position].isThreeItem) return TYPE_NORMAL_ITEM
return TYPE_TIME_ITEM
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ChatItemHolder -> {
holder.view.initData(mList[position])
holder.view.setOnClickListener {
//点击去私聊
if (TextUtils.equals(mList[position].toUid.toString(), "4108805")) {
SessionHelper.startP2PSession(
context, -1, "4108805", null,
P2PCustomActionHandlerImpl("4108805", "课程小助手-壹壹", "4108805")
)
} else {
IMChatUtil.startChat(context as AppCompatActivity, mList[position])
// IMChatUtil.startCms(context as AppCompatActivity, 18, "main_xinliyisheng")
}
}
holder.view.setOnLongClickListener {
var nowBean = mList[position]
val name = java.util.ArrayList<String>()
name.add("删除")
if (nowBean.is_top == 1) {
name.add("取消置顶")
} else if (nowBean.is_top == 0) {
name.add("置顶该聊天")
}
val unread = MsgReceiveHelper.getUnNum(nowBean.toUid.toString())//获取未读消息数量
if (unread > 0) {
name.add("标记为已读")
}
val builder = ListNoCancelDialog.Builder(context, name, 0)
builder.SetOnItemClickLister(object :
ListNoCancelDialog.Builder.OnItemClickLister {
override fun onItemClick(dialog: Dialog, view: View, position1: Int) {
val tag = name[position1]
when (tag) {
"删除" -> {
delete(nowBean)
dialog.dismiss()
}
"置顶该聊天" -> {
toTop(nowBean, 1)
dialog.dismiss()
}
"取消置顶" -> {
toTop(nowBean, 0)
dialog.dismiss()
}
"标记为已读" -> {
mark(nowBean)
dialog.dismiss()
}
}
}
override fun onItemLongClick(dialog: Dialog, view: View, position1: Int) {
}
})
builder.create().show()
true
}
}
is ChatTimeItemHolder -> {
holder.view.initData(mList[position])
}
else -> {
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
TYPE_NORMAL_ITEM -> {
ChatItemHolder(MedicalChatItemView(context))
}
else -> {
ChatTimeItemHolder(ChatTimeItemView(context))
}
}
}
override fun getItemCount(): Int {
return mList.size
}
private fun delete(bean: ChatItemBean) {
LogHelper.getInstance().writeLogSync("删除聊天:uid = " + bean.toUid)
var dis = ImHttpImpl.getInstance().rmHistory(
RmHistoryParam(
bean.toUid.toString(),
1
)
)
.compose(RxUtils.applySchedulers(lifecycleable))
.compose(RxUtils.resultData())
.subscribe({ o ->
LogHelper.getInstance().writeLogSync("删除聊天成功:uid = " + bean.toUid)
NIMClient.getService(MsgService::class.java)
.clearChattingHistory(bean.toUid.toString(), SessionTypeEnum.P2P)
deleteItem(bean)
}, { t ->
ToastHelper.show(t.message.toString())
LogHelper.getInstance().writeLogSync("删除聊天失败:uid = " + bean.toUid)
})
}
private fun deleteItem(bean: ChatItemBean) {
var dis = ImHttpImpl.getInstance().rmTalk(RmTalkParam(bean.toUid.toString()))
.compose(RxUtils.applySchedulers(lifecycleable))
.compose(RxUtils.resultData())
.subscribe({ o ->
NIMClient.getService(MsgService::class.java)
.clearUnreadCount(bean.toUid.toString(), SessionTypeEnum.P2P)
NIMClient.getService(MsgService::class.java)
.clearUnreadCount(bean.toUid.toString(), SessionTypeEnum.Team)
MsgReceiveHelper.updateNum(bean.toUid.toString(), 0)
EventBus.getDefault().post(UpdateTabUnreadNumEvent())
}, { t ->
ToastHelper.show(t.message.toString())
})
}
private fun toTop(bean: ChatItemBean, istop: Int) {
LogHelper.getInstance().writeLogSync(
"置顶聊天:uid = " + bean.toUid.toString() +
"取消置顶 = " + (istop == 0)
)
var dis = ImHttpImpl.getInstance().topMessage(
TopMessageParam(
bean.toUid.toString(),
1,
istop
)
)
.compose(RxUtils.applySchedulers(lifecycleable))
.compose(RxUtils.resultData())
.subscribe({ o ->
LogHelper.getInstance().writeLogSync(
"置顶聊天成功:uid = " + bean.toUid.toString() +
"取消置顶 = " + (istop == 0)
)
mListener?.onRefresh()
}, { t ->
LogHelper.getInstance().writeLogSync(
"置顶聊天失败:uid = " + bean.toUid.toString() +
"取消置顶 = " + (istop == 0)
)
ToastHelper.show("操作失败")
})
}
private fun mark(bean: ChatItemBean) {
LogHelper.getInstance().writeLogSync("标记为已读:uid = " + bean.toUid.toString())
NIMClient.getService(MsgService::class.java)
.clearUnreadCount(bean.toUid.toString(), SessionTypeEnum.P2P)
MsgReceiveHelper.updateNum(bean.toUid.toString(), 0)
mListener?.onRefresh()
EventBus.getDefault().post(UpdateTabUnreadNumEvent())
}
private var mListener: ChatRecyclerViewCallback? = null
fun setlistener(listener: ChatRecyclerViewCallback) {
this.mListener = listener
}
interface ChatRecyclerViewCallback {
fun onRefresh() //刷新聊天列表
}
/**
* 互动列表正常item的holder
*/
inner class ChatItemHolder(val view: MedicalChatItemView) : RecyclerView.ViewHolder(view)
/**
* 互动列表正常item的holder
*/
inner class ChatTimeItemHolder(val view: ChatTimeItemView) : RecyclerView.ViewHolder(view)
}
\ No newline at end of file
package com.yidianling.medical.im.view
import android.content.Context
import android.text.Html
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.RelativeLayout
import com.ydl.ydl_image.module.GlideApp
import com.yidianling.im.R
import com.yidianling.im.helper.MsgReceiveHelper
import com.yidianling.im.preference.ImTempData
import com.yidianling.im.ui.page.fragment.bean.ChatItemBean
import kotlinx.android.synthetic.main.im_chat_item_view.view.*
/**
* 互动列表普通itemView
*/
class MedicalChatItemView(mContext: Context) : LinearLayout(mContext) {
init {
val params = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
layoutParams = params
View.inflate(mContext, R.layout.medical_im_chat_item_view, this)
}
fun initData(bean: ChatItemBean?) {
bean?.let {
GlideApp.with(context)
.load(bean.head)
.circleCrop()
.into(chat_message_img)
chat_message_name.text = bean.toName
if (bean.doctorTitle != "") {
chat_message_tab.visibility = View.VISIBLE
chat_message_tab.text = bean.doctorTitle
} else {
chat_message_tab.visibility = View.GONE
}
// 咨询优先显示 再倾诉
when {
bean.orderStatus == 1 -> {
chat_message_sub_desc.visibility = View.VISIBLE
chat_message_sub_desc.text = "咨询服务中"
}
bean.listenOrderStatus == 1 -> {
chat_message_sub_desc.visibility = View.VISIBLE
chat_message_sub_desc.text = "倾诉服务中"
}
bean.orderCount != 0 -> {
chat_message_sub_desc.visibility = View.VISIBLE
chat_message_sub_desc.text = "已咨询${bean.orderCount}次"
}
bean.listenOrderCount != 0 -> {
chat_message_sub_desc.visibility = View.VISIBLE
chat_message_sub_desc.text = "已倾诉${bean.listenOrderCount}次"
}
else -> chat_message_sub_desc.visibility = View.GONE
}
chat_message_time.text = bean.timeStr
if (ImTempData.getInstance().getTempMsg(bean.toUid.toString()) != null && ImTempData.getInstance().getTempMsg(
bean.toUid.toString()
) != ""
) run {
//if草稿箱有消息则显示
val th =
"<font color='#EA0000' charset='utf-8'>[草稿]</font> " + ImTempData.getInstance().getTempMsg(
bean.toUid.toString()
)
chat_message_content.setText(Html.fromHtml(th))
}else {
chat_message_content.text = bean.content
}
if (bean.unReadNum > 99) {
chat_message_unread_num.visibility = View.VISIBLE
chat_message_unread_num.text = "99+"
} else if (bean.unReadNum > 0) {
chat_message_unread_num.visibility = View.VISIBLE
chat_message_unread_num.text = "${bean.unReadNum}"
} else {
chat_message_unread_num.visibility = View.GONE
}
if (bean.is_top == 1) {
chat_global_ll.setBackgroundResource(R.drawable.im_chat_is_top_bg)
} else {
chat_global_ll.setBackgroundResource(0)
}
}
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import com.ydl.ydlcommon.base.config.YDL_DOMAIN
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA_URL
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.yidianling.medical.archives.bean.MedicalArchivesListBean
import com.yidianling.medical.archives.bean.MedicalUserArchivesBean
import com.yidianling.uikit.custom.http.response.*
import com.yidianling.uikit.custom.http.response.question.QuestionsInfoBean
......@@ -124,17 +125,26 @@ interface ServiceApi {
@Query("pageSize") pageSize: Int
): Observable<BaseAPIResponse<MedicalUserArchivesBean>>
//医疗 获取问诊人列表
@GET("ydl-yiliao-api/api/client/user/patient/v1/getList")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA_URL)
fun getList(): Observable<BaseAPIResponse<List<MedicalArchivesListBean>>>
//医疗 创建问诊人
@POST("ydl-yiliao-api/api/client/user/patient/v1/create")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA_URL)
fun createArchives(
@Query("name") name: String,
@Query("idcardNo") idcardNo: String,
@Query("relation") relation: Int,
@Query("merried") merried: Int,
@Query("idcardType") idcardType: Int = 1
): Observable<BaseAPIResponse<Any>>
fun createArchives(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>
//医疗 创建问诊人
@POST("ydl-yiliao-api/api/client/inquiry/v1/create")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA_URL)
fun createArchivesOrder(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>
//医疗 删除问诊人
@POST("ydl-yiliao-api/api/client/user/patient/v1/delete")
@Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA_URL)
fun deleteArchives(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>
}
\ No newline at end of file
......@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.im.http.ImRetrofitApi
import com.yidianling.medical.archives.bean.MedicalUserArchivesBean
import com.yidianling.medical.archives.bean.*
import com.yidianling.uikit.custom.http.response.*
import com.yidianling.uikit.custom.http.response.question.QuestionsInfoBean
import io.reactivex.Observable
......@@ -189,13 +189,83 @@ class ServiceImpl private constructor() {
return YDLHttpUtils.obtainApi(ServiceApi::class.java).getPageList(pageNum, pageSize)
}
/***获取问诊人列表*/
fun getList(): Observable<BaseAPIResponse<List<MedicalArchivesListBean>>> {
return YDLHttpUtils.obtainApi(ServiceApi::class.java).getList()
}
/***
* 创建问诊人
* @param name 名字
* @param idcardNo 身份证号
* @param relation 与问诊人关系
* @param merried 婚姻状态
* */
fun createArchives(
name: String,
idcardNo: String,
relation: Int,
merried: Int
): Observable<BaseAPIResponse<Any>> {
return YDLHttpUtils.obtainApi(ServiceApi::class.java).createArchives(name,idcardNo,relation,merried)
val body = RequestBody.create(
MediaType.parse("application/json; charset=utf-8"),
JSON.toJSONString(CreatePatientDtoBody(idcardNo, merried, name, relation))
) as RequestBody
return YDLHttpUtils.obtainApi(ServiceApi::class.java)
.createArchives(body)
}
/***
* 创建问诊订单
* @param images 图片(检查报告或患处图片,逗号分隔)
* @param isFirst 是否首次问诊(0不是、1是)
* @param mainSuit 主诉,自己描述的病情
* @param mainSuitDisease 主诉疾病(医生诊断的疾病名称)
* @param patientId 患者ID
* */
fun createArchivesOrder(
images: String,
isFirst: Int,
mainSuit: String,
mainSuitDisease: String,
patientId: Int,
doctorId: String
): Observable<BaseAPIResponse<Any>> {
val body = RequestBody.create(
MediaType.parse("application/json; charset=utf-8"),
JSON.toJSONString(
CreateImageInquiryDtoBody(
doctorId,
isFirst,
images,
1,
mainSuitDisease,
mainSuit,
1
)
)
) as RequestBody
return YDLHttpUtils.obtainApi(ServiceApi::class.java)
.createArchivesOrder(body)
}
/***
* 删除问诊人
* @param patientId 患者ID
* */
fun deleteArchives(
patientId: Int
): Observable<BaseAPIResponse<Any>> {
val body = RequestBody.create(
MediaType.parse("application/json; charset=utf-8"),
JSON.toJSONString(PatientIdDtoBody(patientId))
) as RequestBody
return YDLHttpUtils.obtainApi(ServiceApi::class.java).deleteArchives(body)
}
}
\ No newline at end of file
......@@ -4,8 +4,8 @@
<gradient
android:angle="270"
android:startColor="#FF5040"
android:endColor="#FF6E52"/>
android:startColor="#FF7766"
android:endColor="#FF7766"/>
<corners android:radius="9dp"/>
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff3464ec" />
<corners android:radius="4dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#ffc0c9d4" />
<corners android:radius="8dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#ff3464ec" />
<solid android:color="#f2f5f8" />
<corners android:radius="4dp" />
</shape>
\ No newline at end of file
......@@ -7,7 +7,7 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_height="96dp"
android:background="@color/white"
android:elevation="0dp"
android:gravity="bottom"
......
......@@ -8,7 +8,7 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_height="96dp"
android:background="@color/white"
android:elevation="0dp"
android:gravity="bottom"
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="96dp"
android:background="@color/white"
android:elevation="0dp"
android:gravity="bottom"
app:contentInsetStart="0dp"
app:layout_collapseMode="pin">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="56dp"
android:ellipsize="end"
android:gravity="center"
android:maxEms="10"
android:maxLines="1"
android:text="编辑问诊人"
android:textColor="@color/medical_color_10233a"
android:textSize="18sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="56dp"
android:paddingStart="16dp"
android:paddingEnd="20dp"
android:src="@mipmap/medical_icon_title_back" />
</RelativeLayout>
</androidx.appcompat.widget.Toolbar>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
android:background="@color/white"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:text="姓名"
android:textColor="#ff0c1d31"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/medical_color_0c1d31"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:text="真实姓名" />
<View
android:id="@+id/line_name"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="12dp"
android:background="@color/medical_color_e7ecf0"
app:layout_constraintTop_toBottomOf="@id/name" />
<TextView
android:id="@+id/tv_idcard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="身份证号"
android:textColor="#ff0c1d31"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/line_name" />
<TextView
android:id="@+id/idcard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/medical_color_0c1d31"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/tv_idcard"
tools:text="身份证号码" />
<View
android:id="@+id/line_idcard"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="12dp"
android:background="@color/medical_color_e7ecf0"
app:layout_constraintTop_toBottomOf="@id/idcard" />
<TextView
android:id="@+id/tv_merried"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="婚姻状态"
android:textColor="#ff0c1d31"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/line_idcard" />
<TextView
android:id="@+id/merried"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:textColor="@color/medical_color_0c1d31"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/tv_merried"
tools:text="" />
<View
android:id="@+id/line_merried"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="12dp"
android:background="@color/medical_color_e7ecf0"
app:layout_constraintTop_toBottomOf="@id/merried" />
<TextView
android:id="@+id/tv_relation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="与受访者的关系"
android:textColor="#ff0c1d31"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/line_merried" />
<TextView
android:id="@+id/relation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:textColor="@color/medical_color_0c1d31"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/tv_relation"
tools:text="" />
<View
android:id="@+id/line_relation"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="12dp"
android:background="@color/medical_color_e7ecf0"
app:layout_constraintTop_toBottomOf="@id/relation" />
<TextView
android:id="@+id/tv_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:text="温馨提示"
android:textColor="@color/medical_color_0c1d31"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/line_relation" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="就诊人姓名、证件信息用于平台审核,不会外传。"
android:textColor="#ff495c72"
android:textSize="12sp"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_hint" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_delete"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginStart="16dp"
android:layout_marginBottom="34dp"
android:layout_weight="1"
android:background="@drawable/medical_bg_c0c9d4_8dp"
android:gravity="center"
android:text="删除"
android:textColor="@color/medical_color_8595a9"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_save"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="34dp"
android:layout_weight="1"
android:background="@drawable/medical_bg_3464ec_8dp"
android:gravity="center"
android:text="保存"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -9,7 +9,7 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_height="96dp"
android:background="@color/white"
android:elevation="0dp"
android:gravity="bottom"
......@@ -322,8 +322,9 @@
android:layout_height="48dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="36dp"
android:background="@drawable/bg_doctor_detail_bottom"
android:background="@drawable/medical_bg_d7dfea_8dp"
android:gravity="center"
android:enabled="false"
android:text="下一步"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
......
......@@ -8,7 +8,7 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_height="96dp"
android:background="@color/white"
android:elevation="0dp"
android:gravity="bottom"
......@@ -33,7 +33,7 @@
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_back"
android:id="@+id/iv_back_flow2"
android:layout_width="wrap_content"
android:layout_height="56dp"
android:paddingStart="16dp"
......@@ -119,17 +119,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/dec_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="20dp"
android:text="您需要为谁咨询"
android:textColor="#10233a"
......@@ -142,6 +139,7 @@
android:id="@+id/dec_title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="4dp"
android:text="请选择患者信息,信息仅医生可见"
android:textColor="#ff495c72"
......@@ -151,13 +149,13 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_people_list"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/dec_title2" />
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/first_mit"
......@@ -167,8 +165,8 @@
android:text="是否首次问诊"
android:textColor="#ff0c1d31"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="@id/dec_title"
app:layout_constraintTop_toBottomOf="@id/rv_people_list" />
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RadioGroup
android:id="@+id/radio_first_mit"
......@@ -180,16 +178,17 @@
app:layout_constraintTop_toTopOf="@id/first_mit">
<RadioButton
android:id="@+id/yes"
android:layout_width="56dp"
android:layout_height="32dp"
android:background="@drawable/radiobutton_bg"
android:button="@null"
android:checked="true"
android:gravity="center"
android:text="是"
android:textColor="@drawable/radiobutton_textcolor" />
<RadioButton
android:id="@+id/no"
android:layout_width="56dp"
android:layout_height="32dp"
android:layout_marginLeft="20dp"
......@@ -207,45 +206,78 @@
android:layout_marginTop="16dp"
android:background="@drawable/medical_bg_edit_f2f5f8"
android:hint="输入医生诊断的疾病名称"
android:longClickable="false"
android:maxEms="50"
android:minHeight="44dp"
android:padding="12dp"
android:textColor="#0C1D31"
android:textColorHint="#C0C9D4"
android:textIsSelectable="false"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/radio_first_mit" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:orientation="vertical"
android:gravity="center_horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:id="@+id/informed_consent_text"
android:layout_width="match_parent"
android:id="@+id/text_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
android:text="开始问诊即代表您已阅读并同意《知情同意书》、家庭签约"
android:text="开始问诊即代表您已阅读并同意"
android:textColor="@color/medical_color_8595a9"
android:textSize="12sp" />
android:textSize="12sp"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintRight_toLeftOf="@id/informed_consent_text"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/informed_consent_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/text_left"
android:gravity="center_horizontal"
android:text="《知情同意书》"
android:textColor="@color/medical_color_3464ec"
android:textSize="12sp"
app:layout_constraintBaseline_toBaselineOf="@id/text_left"
app:layout_constraintLeft_toRightOf="@id/text_left"
app:layout_constraintRight_toLeftOf="@id/text_right" />
<TextView
android:id="@+id/text_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="、家庭签约"
android:textColor="@color/medical_color_8595a9"
android:textSize="12sp"
app:layout_constraintBaseline_toBaselineOf="@id/text_left"
app:layout_constraintLeft_toRightOf="@id/informed_consent_text"
app:layout_constraintRight_toRightOf="parent" />
<TextView
android:id="@+id/text_service"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@id/informed_consent_text"
android:layout_marginTop="16dp"
android:layout_marginBottom="36dp"
android:background="@drawable/bg_doctor_detail_bottom"
......@@ -253,10 +285,12 @@
android:text="开始问诊"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
android:textStyle="bold" />
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_left" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
\ No newline at end of file
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="96dp"
android:background="#ffffff"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="96dp"
android:background="@color/white"
android:elevation="0dp"
android:gravity="bottom"
app:contentInsetStart="0dp"
app:layout_collapseMode="pin">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="56dp"
android:ellipsize="end"
android:gravity="center"
android:maxEms="10"
android:maxLines="1"
android:text="消息"
android:textColor="@color/medical_color_10233a"
android:textSize="18sp"
android:textStyle="bold" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="56dp"
android:layout_alignParentRight="true"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:src="@mipmap/medical_icon_more" />
</RelativeLayout>
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
<LinearLayout
android:id="@+id/top_hide"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0d3464EC"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="16dp"
android:paddingBottom="10dp">
<ImageView
android:id="@+id/close_hide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:src="@mipmap/medical_close_ovel" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="开启推送通知,及时查看消息~"
android:textColor="#ff3464ec"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/medical_bg_3464ec_4dp_fill"
android:gravity="center"
android:paddingLeft="12dp"
android:paddingTop="5dp"
android:paddingRight="12dp"
android:paddingBottom="6dp"
android:text="立即开启"
android:textColor="#ffffffff"
android:textSize="12sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/chat_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/im_white"></com.jcodecraeer.xrecyclerview.XRecyclerView>
<com.yidianling.im.ui.page.widget.ChatUnusualView
android:id="@+id/ll_chat_unusual_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/im_white"
android:visibility="gone" />
</RelativeLayout>
</LinearLayout>
<?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:id="@+id/chat_global_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="15dp"
android:paddingTop="12dp"
android:paddingRight="15dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<androidx.cardview.widget.CardView
android:id="@+id/card_img"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_centerInParent="true"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/chat_message_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/chat_message_unread_num"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:background="@drawable/im_chat_message_unread_num_bg"
android:gravity="center"
android:minWidth="18dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:textColor="@color/im_white"
android:textSize="10sp"
android:visibility="gone"
app:layout_constraintRight_toRightOf="@id/card_img"
app:layout_constraintTop_toTopOf="@id/card_img"
tools:text="3"
tools:visibility="visible" />
<TextView
android:id="@+id/chat_message_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/medical_color_0c1d31"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintLeft_toRightOf="@id/card_img"
app:layout_constraintTop_toTopOf="@id/card_img"
tools:text="林小丽" />
<TextView
android:id="@+id/chat_message_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_marginRight="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/medical_color_0c1d31"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintBaseline_toBaselineOf="@id/chat_message_name"
app:layout_constraintLeft_toRightOf="@id/chat_message_name"
tools:text="高级心理咨询师"
tools:visibility="visible" />
<TextView
android:id="@+id/chat_message_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:maxLines="1"
android:textColor="#8595A9"
android:textSize="12sp"
app:layout_constraintBaseline_toBaselineOf="@id/chat_message_name"
app:layout_constraintRight_toRightOf="parent"
tools:text="09-04" />
<TextView
android:id="@+id/chat_message_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginRight="35dp"
android:layout_marginBottom="18dp"
android:ellipsize="end"
android:gravity="left"
android:maxLines="1"
android:text="你好,请问你遇到了什么烦恼?我可你好,请问你遇到了什么烦恼?我可以帮…"
android:textColor="#495C72"
android:textSize="14sp"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintLeft_toLeftOf="@id/chat_message_name"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/chat_message_name" />
<View
android:layout_width="0dp"
android:layout_height="0.5dp"
android:layout_marginTop="20dp"
android:background="#E7ECF0"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintLeft_toLeftOf="@id/card_img"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/chat_message_content" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="0"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:background="@drawable/medical_bg_edit_f2f5f8"
android:paddingStart="12dp"
android:paddingTop="8dp"
tools:background="@drawable/medical_list_check_bg">
<androidx.constraintlayout.widget.Group
android:id="@+id/group_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="age,name,sex"
tools:visibility="gone" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/medical_color_0c1d31"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="何照" />
<TextView
android:id="@+id/sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="8dp"
android:textColor="#ff495c72"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/name"
app:layout_constraintTop_toBottomOf="@id/name"
tools:text="男" />
<TextView
android:id="@+id/age"
android:layout_width="31dp"
android:layout_height="20dp"
android:layout_marginLeft="8dp"
android:text="20岁"
android:textColor="#ff495c72"
android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@id/sex"
app:layout_constraintLeft_toRightOf="@id/sex" />
<ImageView
android:visibility="gone"
android:id="@+id/iv_bottom_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/medical_check_bottom_right"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="add,tv_add" />
<ImageView
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/medical_add_icon"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="16dp"
android:paddingBottom="10dp"
android:text="添加患者"
android:textColor="#ff495c72"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/add" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -6,3 +6,4 @@ include ':app',
":m-im",":m-dynamic","m-article","m-audioim","m-user","m-confide"
include ':ydl_medical_pay'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment