Sfoglia il codice sorgente

1.添加测评module

王鹏鹏 2 anni fa
parent
commit
cf0b4dc48d
38 ha cambiato i file con 1351 aggiunte e 2 eliminazioni
  1. 5 0
      baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt
  2. 18 0
      evaluation/src/main/AndroidManifest.xml
  3. 42 0
      evaluation/src/main/java/com/yingyangfly/evaluation/adapter/EvaluationHistoryAdapter.kt
  4. 52 0
      evaluation/src/main/java/com/yingyangfly/evaluation/adapter/EvaluationHistoryItemAdapter.kt
  5. 31 0
      evaluation/src/main/java/com/yingyangfly/evaluation/adapter/ReviewResultDetailAdapter.kt
  6. 20 0
      evaluation/src/main/java/com/yingyangfly/evaluation/adapter/SubdimensionalDetailAdapter.kt
  7. 96 0
      evaluation/src/main/java/com/yingyangfly/evaluation/detail/ReviewResultDetailActivity.kt
  8. 28 0
      evaluation/src/main/java/com/yingyangfly/evaluation/detail/ReviewResultDetailViewModel.kt
  9. 30 0
      evaluation/src/main/java/com/yingyangfly/evaluation/entity/EvaluationHistoryBean.kt
  10. 8 0
      evaluation/src/main/java/com/yingyangfly/evaluation/entity/FindReviewResultBean.kt
  11. 25 0
      evaluation/src/main/java/com/yingyangfly/evaluation/entity/ReviewResultDetailBean.kt
  12. 121 0
      evaluation/src/main/java/com/yingyangfly/evaluation/history/EvaluationHistoryActivity.kt
  13. 31 0
      evaluation/src/main/java/com/yingyangfly/evaluation/history/EvaluationHistoryViewModel.kt
  14. 4 2
      evaluation/src/main/java/com/yingyangfly/evaluation/hospital/HospitalActivity.kt
  15. 14 0
      evaluation/src/main/java/com/yingyangfly/evaluation/net/EvaluationApiService.kt
  16. 25 0
      evaluation/src/main/java/com/yingyangfly/evaluation/otherevaluation/OtherEvaluationActivity.kt
  17. 18 0
      evaluation/src/main/manifest/AndroidManifest.xml
  18. 9 0
      evaluation/src/main/res/drawable/bg_evaluation_date.xml
  19. 10 0
      evaluation/src/main/res/drawable/bg_evaluation_history.xml
  20. 7 0
      evaluation/src/main/res/drawable/bg_evaluation_result.xml
  21. 7 0
      evaluation/src/main/res/drawable/bg_evaluation_top_results.xml
  22. 12 0
      evaluation/src/main/res/drawable/bg_left_selected_professional_evaluation.xml
  23. 5 0
      evaluation/src/main/res/drawable/bg_left_selected_professional_evaluation_result.xml
  24. 12 0
      evaluation/src/main/res/drawable/bg_left_unselected_professional_evaluation.xml
  25. 9 0
      evaluation/src/main/res/drawable/bg_results_content.xml
  26. 12 0
      evaluation/src/main/res/drawable/bg_right_selected_professional_evaluation.xml
  27. 5 0
      evaluation/src/main/res/drawable/bg_right_selected_professional_evaluation_result.xml
  28. 12 0
      evaluation/src/main/res/drawable/bg_right_unselected_professional_evaluation.xml
  29. 9 0
      evaluation/src/main/res/drawable/bg_top_results.xml
  30. 249 0
      evaluation/src/main/res/layout/activity_evaluation_history.xml
  31. 1 0
      evaluation/src/main/res/layout/activity_hospital.xml
  32. 13 0
      evaluation/src/main/res/layout/activity_other_evaluation.xml
  33. 197 0
      evaluation/src/main/res/layout/activity_review_result_detail.xml
  34. 32 0
      evaluation/src/main/res/layout/item_evaluation_history.xml
  35. 92 0
      evaluation/src/main/res/layout/item_evaluation_history_item.xml
  36. 43 0
      evaluation/src/main/res/layout/item_review_result_detail.xml
  37. 47 0
      evaluation/src/main/res/layout/item_subdimensional_detail.xml
  38. BIN
      evaluation/src/main/res/mipmap-xxhdpi/icon_uniform_background.png

+ 5 - 0
baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt

@@ -45,4 +45,9 @@ object RouterUrlCommon {
      * 测评报告
      */
     const val reviewResultDetail = "/reviewresultdetail/reviewresultdetail"
+
+    /**
+     * 其他测评功能页面
+     */
+    const val otherEvaluation = "/other/evaluation"
 }

+ 18 - 0
evaluation/src/main/AndroidManifest.xml

@@ -14,6 +14,24 @@
             android:launchMode="singleTask"
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
+
+        <activity
+            android:name=".otherevaluation.OtherEvaluationActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
+        <activity
+            android:name=".history.EvaluationHistoryActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
+        <activity
+            android:name=".detail.ReviewResultDetailActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
     </application>
 
 </manifest>

+ 42 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/adapter/EvaluationHistoryAdapter.kt

@@ -0,0 +1,42 @@
+package com.yingyangfly.evaluation.adapter
+
+import android.annotation.SuppressLint
+import android.text.TextUtils
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.databinding.ItemEvaluationHistoryBinding
+import com.yingyangfly.evaluation.entity.EvaluationHistoryBean
+import com.yingyangfly.evaluation.entity.EvaluationHistoryBeanSubListItem
+
+/**
+ * 测评历史adapter
+ */
+class EvaluationHistoryAdapter(override val layoutId: Int = R.layout.item_evaluation_history) :
+    BaseDataBindingAdapter<EvaluationHistoryBean, ItemEvaluationHistoryBinding>() {
+
+    var onClickListener: ((bean: EvaluationHistoryBeanSubListItem) -> Unit)? = null
+    @SuppressLint("SetTextI18n")
+    override fun onBindViewHolder(
+        binding: ItemEvaluationHistoryBinding, item: EvaluationHistoryBean, position: Int
+    ) {
+        binding.tvDate.text = "测评任务编号:" + if (item.isNullOrEmpty().not()) {
+            val data = item[0]
+            if (data != null && TextUtils.isEmpty(data.reviewTaskId).not()) {
+                data.reviewTaskId
+            } else {
+                ""
+            }
+        } else {
+            ""
+        }
+
+        val evaluationHistoryItemAdapter = EvaluationHistoryItemAdapter()
+        evaluationHistoryItemAdapter.onClickListener = {
+            onClickListener?.invoke(it)
+        }
+        if (item.isNullOrEmpty().not()) {
+            evaluationHistoryItemAdapter.setData(item)
+        }
+        binding.rvEvaluation.adapter = evaluationHistoryItemAdapter
+    }
+}

+ 52 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/adapter/EvaluationHistoryItemAdapter.kt

@@ -0,0 +1,52 @@
+package com.yingyangfly.evaluation.adapter
+
+import android.text.TextUtils
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.databinding.ItemEvaluationHistoryItemBinding
+import com.yingyangfly.evaluation.entity.EvaluationHistoryBeanSubListItem
+
+/**
+ * 测评结果adapter
+ */
+class EvaluationHistoryItemAdapter(override val layoutId: Int = R.layout.item_evaluation_history_item) :
+    BaseDataBindingAdapter<EvaluationHistoryBeanSubListItem, ItemEvaluationHistoryItemBinding>() {
+
+    var onClickListener: ((bean: EvaluationHistoryBeanSubListItem) -> Unit)? = null
+
+    override fun onBindViewHolder(
+        binding: ItemEvaluationHistoryItemBinding,
+        item: EvaluationHistoryBeanSubListItem,
+        position: Int
+    ) {
+        binding.data = item
+        binding.tvReferenceValue.text =
+            if (item.result != null && TextUtils.isEmpty(item.result.referenceValue).not()) {
+                item.result.referenceValue
+            } else {
+                ""
+            }
+        binding.tvReviewScore.text =
+            if (item.result != null && TextUtils.isEmpty(item.result.reviewScore).not()) {
+                item.result.reviewScore
+            } else {
+                ""
+            }
+
+        binding.tvResult.text =
+            if (item.result != null && TextUtils.isEmpty(item.result.result).not()) {
+                item.result.result
+            } else {
+                ""
+            }
+        if (position % 2 == 0) {
+            binding.evaluationLayout.setBackgroundResource(R.drawable.bg_evaluation_result)
+        } else {
+            binding.evaluationLayout.setBackgroundResource(R.drawable.bg_evaluation_history)
+        }
+        binding.tvDetails.setOnSingleClickListener {
+            onClickListener?.invoke(item)
+        }
+    }
+}

+ 31 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/adapter/ReviewResultDetailAdapter.kt

@@ -0,0 +1,31 @@
+package com.yingyangfly.evaluation.adapter
+
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.databinding.ItemReviewResultDetailBinding
+import com.yingyangfly.evaluation.entity.ReviewResultDetailBean
+
+/**
+ * 测评报告adapter
+ */
+class ReviewResultDetailAdapter(override val layoutId: Int = R.layout.item_review_result_detail) :
+    BaseDataBindingAdapter<ReviewResultDetailBean, ItemReviewResultDetailBinding>() {
+
+    override fun onBindViewHolder(
+        binding: ItemReviewResultDetailBinding,
+        item: ReviewResultDetailBean,
+        position: Int
+    ) {
+        binding.data = item
+        val subdimensionalDetailAdapter = SubdimensionalDetailAdapter()
+        binding.rvReport.adapter = subdimensionalDetailAdapter
+        if (item.list.isNullOrEmpty().not()) {
+            subdimensionalDetailAdapter.setData(item.list)
+        }
+        if (position % 2 == 0) {
+            binding.detailLayout.setBackgroundResource(R.drawable.bg_evaluation_result)
+        } else {
+            binding.detailLayout.setBackgroundResource(R.color.transparent)
+        }
+    }
+}

+ 20 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/adapter/SubdimensionalDetailAdapter.kt

@@ -0,0 +1,20 @@
+package com.yingyangfly.evaluation.adapter
+
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.databinding.ItemSubdimensionalDetailBinding
+import com.yingyangfly.evaluation.entity.ResultDetailBean
+
+/**
+ * 测评报告子维度adapter
+ */
+class SubdimensionalDetailAdapter(override val layoutId: Int = R.layout.item_subdimensional_detail) :
+    BaseDataBindingAdapter<ResultDetailBean, ItemSubdimensionalDetailBinding>() {
+    override fun onBindViewHolder(
+        binding: ItemSubdimensionalDetailBinding,
+        item: ResultDetailBean,
+        position: Int
+    ) {
+        binding.data = item
+    }
+}

+ 96 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/detail/ReviewResultDetailActivity.kt

@@ -0,0 +1,96 @@
+package com.yingyangfly.evaluation.detail
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.view.MotionEvent
+import android.view.View
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.yingyangfly.baselib.ext.getEndAnimation
+import com.yingyangfly.baselib.ext.getScaleAnimation
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.adapter.ReviewResultDetailAdapter
+import com.yingyangfly.evaluation.databinding.ActivityReviewResultDetailBinding
+import com.yingyangfly.evaluation.entity.ReviewResultDetailBean
+
+/**
+ * 测评报告
+ */
+@Route(path = RouterUrlCommon.reviewResultDetail)
+class ReviewResultDetailActivity :
+    BaseMVVMActivity<ActivityReviewResultDetailBinding, ReviewResultDetailViewModel>(),
+    View.OnTouchListener {
+
+    private var reviewTaskId = ""
+    private val adapter by lazy { ReviewResultDetailAdapter() }
+    private var reviewResultDetailBeans = mutableListOf<ReviewResultDetailBean>()
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        reviewTaskId = intent.getStringExtra("url") ?: ""
+        super.onCreate(savedInstanceState)
+    }
+
+    override fun initViews() {
+        binding {
+            rvResult.adapter = adapter
+            adapter.setData(reviewResultDetailBeans)
+        }
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    override fun initListener() {
+        binding {
+            layoutHead.setOnTouchListener(this@ReviewResultDetailActivity)
+        }
+    }
+
+    override fun initData() {
+
+    }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    /**
+     * 获取测评报告详情
+     */
+    private fun loadData() {
+        viewModel.findReviewResultDetail(reviewTaskId, fail = {
+            it.toast()
+        }, success = {
+            reviewResultDetailBeans.clear()
+            if (it.isNullOrEmpty().not()) {
+                reviewResultDetailBeans.addAll(it!!)
+            }
+            adapter.showEmptyView = reviewResultDetailBeans.isEmpty()
+            adapter.setData(reviewResultDetailBeans)
+        })
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    override fun onTouch(v: View, event: MotionEvent): Boolean {
+        when (event.action) {
+            MotionEvent.ACTION_DOWN -> {
+                if (v.id == R.id.layoutHead) {
+                    v.startAnimation(getScaleAnimation())
+                }
+            }
+            MotionEvent.ACTION_UP -> {
+                v.startAnimation(getEndAnimation())
+                if (v.id == R.id.layoutHead) {
+                    finish()
+                }
+            }
+            MotionEvent.ACTION_CANCEL -> {
+                if (v.id == R.id.layoutHead) {
+                    v.startAnimation(getEndAnimation())
+                }
+            }
+        }
+        return true
+    }
+}

+ 28 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/detail/ReviewResultDetailViewModel.kt

@@ -0,0 +1,28 @@
+package com.yingyangfly.evaluation.detail
+
+import com.yingyangfly.baselib.mvvm.BaseViewModel
+import com.yingyangfly.baselib.net.XUtils
+import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.evaluation.entity.ReviewResultDetailBean
+import com.yingyangfly.evaluation.net.EVALUATION_API
+import com.yingyangfly.evaluation.entity.FindReviewResultBean
+
+class ReviewResultDetailViewModel : BaseViewModel() {
+
+    /**
+     * 获取报告
+     */
+    fun findReviewResultDetail(
+        id: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: List<ReviewResultDetailBean>?) -> Unit)? = null,
+    ) = launchFlow(true) {
+        val requestBean = FindReviewResultBean().apply {
+            reviewTaskId = id
+        }
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        EVALUATION_API.findReviewResultDetail(body)
+    }.runUI(
+        success, fail
+    )
+}

+ 30 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/entity/EvaluationHistoryBean.kt

@@ -0,0 +1,30 @@
+package com.yingyangfly.evaluation.entity
+
+class EvaluationHistoryBean : ArrayList<EvaluationHistoryBeanSubListItem>()
+
+data class EvaluationHistoryBeanSubListItem(
+    val createBy: String,
+    val createTime: String,
+    val id: String,
+    val limit: Int,
+    val orgCode: Any,
+    val orgName: String,
+    val page: Int,
+    val result: EvaluationHistoryResult,
+    val reviewId: Any,
+    val reviewTaskId: String,
+    val reviewTaskName: String,
+    val status: String,
+    val type: String,
+    val updateBy: Any,
+    val updateTime: Any,
+    val userId: String,
+    val reviewTime: String
+)
+
+data class EvaluationHistoryResult(
+    val referenceValue: String,
+    val result: String,
+    val reviewContent: String,
+    val reviewScore: String
+)

+ 8 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/entity/FindReviewResultBean.kt

@@ -0,0 +1,8 @@
+package com.yingyangfly.evaluation.entity
+
+/**
+ * 查询测评结果
+ */
+class FindReviewResultBean {
+    var reviewTaskId = ""
+}

+ 25 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/entity/ReviewResultDetailBean.kt

@@ -0,0 +1,25 @@
+package com.yingyangfly.evaluation.entity
+
+import android.text.TextUtils
+
+/**
+ * 测评报告bean
+ */
+data class ReviewResultDetailBean(
+    val list: List<ResultDetailBean>,
+    val type: String
+)
+
+class ResultDetailBean(
+    val reviewType: String,
+    val score: String,
+    val scoreRange: String
+) {
+    fun getScoreRangeInfo(): String {
+        return if (TextUtils.isEmpty(scoreRange)) {
+            ""
+        } else {
+            "0-$scoreRange"
+        }
+    }
+}

+ 121 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/history/EvaluationHistoryActivity.kt

@@ -0,0 +1,121 @@
+package com.yingyangfly.evaluation.history
+
+import android.annotation.SuppressLint
+import android.text.TextUtils
+import android.util.Log
+import android.view.MotionEvent
+import android.view.View
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.yingyangfly.baselib.ext.getEndAnimation
+import com.yingyangfly.baselib.ext.getScaleAnimation
+import com.yingyangfly.baselib.ext.toast
+import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.JumpUtil
+import com.yingyangfly.evaluation.R
+import com.yingyangfly.evaluation.adapter.EvaluationHistoryAdapter
+import com.yingyangfly.evaluation.databinding.ActivityEvaluationHistoryBinding
+import com.yingyangfly.evaluation.entity.EvaluationHistoryBean
+
+
+/**
+ * 历史记录测评
+ */
+@Route(path = RouterUrlCommon.evaluationHistory)
+class EvaluationHistoryActivity :
+    BaseMVVMActivity<ActivityEvaluationHistoryBinding, EvaluationHistoryViewModel>(),
+    View.OnTouchListener {
+
+    private var results = mutableListOf<EvaluationHistoryBean>()
+    private val adapter by lazy { EvaluationHistoryAdapter() }
+
+    override fun initViews() {
+        binding {
+            rvResult.adapter = adapter
+            adapter.setData(results)
+            adapter.onClickListener = {
+                if (TextUtils.equals("0", it.status)) {
+                    "请完成测评,再查看报告详情哦!".toast()
+                } else {
+                    JumpUtil.jumpActivityWithUrl(
+                        RouterUrlCommon.reviewResultDetail, it.id, mContext
+                    )
+                }
+            }
+        }
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    override fun initListener() {
+        binding {
+            layoutHead.setOnTouchListener(this@EvaluationHistoryActivity)
+            radioEvaluation.setOnCheckedChangeListener { group, checkedId ->
+                if (checkedId == R.id.radioProfessionalEvaluation) {
+                    getReviewTaskHistoryList()
+                } else if (checkedId == R.id.radioOtherEvaluation) {
+                    getOtherReviewTaskHistory()
+                }
+            }
+        }
+    }
+
+    override fun initData() {
+
+    }
+
+    override fun onResume() {
+        super.onResume()
+        getReviewTaskHistoryList()
+    }
+
+    private fun getOtherReviewTaskHistory() {
+        Log.e("wpp", "获取其他测评历史记录")
+
+    }
+
+    /**
+     * 加载数据
+     */
+    private fun getReviewTaskHistoryList() {
+        Log.e("wpp", "获取专业测评历史记录")
+        results.clear()
+        viewModel.getReviewTaskHistoryList(fail = {
+            it.toast()
+        }, success = {
+            results.clear()
+            it?.let {
+                if (it.isNullOrEmpty().not()) {
+                    results.addAll(it)
+                }
+            }
+            adapter.setData(results)
+        })
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    override fun onTouch(v: View, event: MotionEvent): Boolean {
+        when (event.action) {
+            MotionEvent.ACTION_DOWN -> {
+                if (v.id == R.id.layoutHead) {
+                    v.startAnimation(getScaleAnimation())
+                }
+            }
+
+            MotionEvent.ACTION_UP -> {
+                v.startAnimation(getEndAnimation())
+                when (v.id) {
+                    R.id.layoutHead -> {
+                        finish()
+                    }
+                }
+            }
+
+            MotionEvent.ACTION_CANCEL -> {
+                if (v.id == R.id.layoutHead) {
+                    v.startAnimation(getEndAnimation())
+                }
+            }
+        }
+        return true
+    }
+}

+ 31 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/history/EvaluationHistoryViewModel.kt

@@ -0,0 +1,31 @@
+package com.yingyangfly.evaluation.history
+
+import com.yingyangfly.baselib.bean.EvaluationPagingBean
+import com.yingyangfly.baselib.mvvm.BaseViewModel
+import com.yingyangfly.baselib.net.XUtils
+import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.evaluation.entity.EvaluationHistoryBean
+import com.yingyangfly.evaluation.net.EVALUATION_API
+
+/**
+ * @author 王鹏鹏
+ * @description 工作台页面ViewModel
+ */
+class EvaluationHistoryViewModel : BaseViewModel() {
+
+    /**
+     * 获取测评历史
+     */
+    fun getReviewTaskHistoryList(
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: List<EvaluationHistoryBean>?) -> Unit)? = null,
+    ) = launchFlow(true) {
+        val requestBean = EvaluationPagingBean().apply {
+            status = "1"
+        }
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        EVALUATION_API.getReviewTaskHistoryList(body)
+    }.runUI(
+        success, fail
+    )
+}

+ 4 - 2
evaluation/src/main/java/com/yingyangfly/evaluation/hospital/HospitalActivity.kt

@@ -1,6 +1,7 @@
 package com.yingyangfly.evaluation.hospital
 
 import android.annotation.SuppressLint
+import android.os.Build
 import android.text.TextUtils
 import android.view.MotionEvent
 import android.view.View
@@ -38,6 +39,7 @@ class HospitalActivity : BaseTvMVVMActivity<ActivityHospitalBinding, HospitalVie
     private var reviewTaskId = ""
     private var taskId = ""
 
+    @SuppressLint("SetTextI18n")
     override fun initViews() {
         imageList.add(str1)
         imageList.add(str2)
@@ -46,7 +48,7 @@ class HospitalActivity : BaseTvMVVMActivity<ActivityHospitalBinding, HospitalVie
         adapterGuide = GuidePageAdapter(imageList, mContext)
         binding.guide.addBannerLifecycleObserver(this)?.setAdapter(adapterGuide)?.indicator =
             RectangleIndicator(mContext)
-
+        binding.tvSnCode.text = "终端号:" + Build.SERIAL
     }
 
     @SuppressLint("ClickableViewAccessibility")
@@ -85,7 +87,7 @@ class HospitalActivity : BaseTvMVVMActivity<ActivityHospitalBinding, HospitalVie
                     }
 
                     R.id.otherEvaluationsLayout -> {
-                        JumpUtil.jumpActivity(RouterUrlCommon.mocaEvaluation)
+                        JumpUtil.jumpActivity(RouterUrlCommon.otherEvaluation)
                     }
 
                     R.id.mocaLayout -> {

+ 14 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/net/EvaluationApiService.kt

@@ -2,6 +2,8 @@ package com.yingyangfly.evaluation.net
 
 import com.yingyangfly.baselib.db.QuestionsBean
 import com.yingyangfly.baselib.net.BaseResp
+import com.yingyangfly.evaluation.entity.EvaluationHistoryBean
+import com.yingyangfly.evaluation.entity.ReviewResultDetailBean
 import com.yingyangfly.evaluation.entity.ReviewTaskListBean
 import okhttp3.RequestBody
 import retrofit2.http.Body
@@ -27,4 +29,16 @@ interface EvaluationApiService {
     @POST("large-screen/logout")
     suspend fun largeLogout(): BaseResp<String>
 
+    /**
+     * 获取测评任务
+     */
+    @POST("app/reviewTask/his")
+    suspend fun getReviewTaskHistoryList(@Body requestBody: RequestBody): BaseResp<List<EvaluationHistoryBean>>
+
+    /**
+     * 测评报告详情
+     */
+    @POST("app/review/findReviewResultDetail")
+    suspend fun findReviewResultDetail(@Body requestBody: RequestBody): BaseResp<List<ReviewResultDetailBean>>
+
 }

+ 25 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/otherevaluation/OtherEvaluationActivity.kt

@@ -0,0 +1,25 @@
+package com.yingyangfly.evaluation.otherevaluation
+
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.yingyangfly.baselib.base.BaseTvActivity
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.evaluation.databinding.ActivityOtherEvaluationBinding
+
+/**
+ * 其他测评功能页面
+ */
+@Route(path = RouterUrlCommon.otherEvaluation)
+class OtherEvaluationActivity : BaseTvActivity<ActivityOtherEvaluationBinding>() {
+
+    override fun initViews() {
+
+    }
+
+    override fun initListener() {
+
+    }
+
+    override fun initData() {
+
+    }
+}

+ 18 - 0
evaluation/src/main/manifest/AndroidManifest.xml

@@ -15,6 +15,24 @@
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
 
+        <activity
+            android:name=".otherevaluation.OtherEvaluationActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
+        <activity
+            android:name=".history.EvaluationHistoryActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
+        <activity
+            android:name=".detail.ReviewResultDetailActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
     </application>
 
 </manifest>

+ 9 - 0
evaluation/src/main/res/drawable/bg_evaluation_date.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:topLeftRadius="@dimen/divider_28px"
+        android:topRightRadius="@dimen/divider_28px" />
+    <solid android:color="@color/color_FF4A76FF" />
+</shape>

+ 10 - 0
evaluation/src/main/res/drawable/bg_evaluation_history.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:bottomLeftRadius="@dimen/divider_28px"
+        android:bottomRightRadius="@dimen/divider_28px" />
+
+    <solid android:color="@color/color_FFE6ECFF" />
+</shape>

+ 7 - 0
evaluation/src/main/res/drawable/bg_evaluation_result.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners android:topRightRadius="@dimen/divider_28px" />
+    <solid android:color="@color/color_FFCFD9FF" />
+</shape>

+ 7 - 0
evaluation/src/main/res/drawable/bg_evaluation_top_results.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners android:radius="@dimen/divider_20px" />
+    <solid android:color="@color/color_FF4A76FF" />
+</shape>

+ 12 - 0
evaluation/src/main/res/drawable/bg_left_selected_professional_evaluation.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:bottomLeftRadius="@dimen/divider_12px"
+        android:topLeftRadius="@dimen/divider_12px" />
+    <stroke
+        android:width="@dimen/divider_2px"
+        android:color="@android:color/white" />
+    <solid android:color="@android:color/white" />
+</shape>

+ 5 - 0
evaluation/src/main/res/drawable/bg_left_selected_professional_evaluation_result.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingDefaultResource,ResourceName">
+    <item android:drawable="@drawable/bg_left_selected_professional_evaluation" android:state_checked="true" />
+    <item android:drawable="@drawable/bg_left_unselected_professional_evaluation" android:state_checked="false" />
+</selector>

+ 12 - 0
evaluation/src/main/res/drawable/bg_left_unselected_professional_evaluation.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:bottomLeftRadius="@dimen/divider_12px"
+        android:topLeftRadius="@dimen/divider_12px" />
+    <stroke
+        android:width="@dimen/divider_2px"
+        android:color="@android:color/white" />
+    <solid android:color="@android:color/transparent" />
+</shape>

+ 9 - 0
evaluation/src/main/res/drawable/bg_results_content.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:bottomLeftRadius="@dimen/divider_20px"
+        android:bottomRightRadius="@dimen/divider_20px" />
+    <solid android:color="@color/color_FFE6ECFF" />
+</shape>

+ 12 - 0
evaluation/src/main/res/drawable/bg_right_selected_professional_evaluation.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:bottomRightRadius="@dimen/divider_12px"
+        android:topRightRadius="@dimen/divider_12px" />
+    <stroke
+        android:width="@dimen/divider_2px"
+        android:color="@android:color/white" />
+    <solid android:color="@android:color/white" />
+</shape>

+ 5 - 0
evaluation/src/main/res/drawable/bg_right_selected_professional_evaluation_result.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingDefaultResource,ResourceName">
+    <item android:drawable="@drawable/bg_right_selected_professional_evaluation" android:state_checked="true" />
+    <item android:drawable="@drawable/bg_right_unselected_professional_evaluation" android:state_checked="false" />
+</selector>

+ 12 - 0
evaluation/src/main/res/drawable/bg_right_unselected_professional_evaluation.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:bottomRightRadius="@dimen/divider_12px"
+        android:topRightRadius="@dimen/divider_12px" />
+    <stroke
+        android:width="@dimen/divider_2px"
+        android:color="@android:color/white" />
+    <solid android:color="@android:color/transparent" />
+</shape>

+ 9 - 0
evaluation/src/main/res/drawable/bg_top_results.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+    <corners
+        android:topLeftRadius="@dimen/divider_20px"
+        android:topRightRadius="@dimen/divider_20px" />
+    <solid android:color="@color/color_FF4A76FF" />
+</shape>

+ 249 - 0
evaluation/src/main/res/layout/activity_evaluation_history.xml

@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <import type="com.yingyangfly.baselib.utils.User" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        style="@style/layout_properties_specify_width_geight"
+        android:background="@mipmap/icon_uniform_background">
+
+        <LinearLayout
+            android:id="@+id/layoutHead"
+            style="@style/back_layout"
+            tools:ignore="MissingConstraints">
+
+            <androidx.appcompat.widget.AppCompatImageView style="@style/back_image" />
+
+            <androidx.appcompat.widget.AppCompatTextView style="@style/back_text" />
+        </LinearLayout>
+
+        <RadioGroup
+            android:id="@+id/radioEvaluation"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_36px"
+            android:gravity="center"
+            android:orientation="horizontal"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <RadioButton
+                android:id="@+id/radioProfessionalEvaluation"
+                android:layout_width="@dimen/divider_195px"
+                android:layout_height="@dimen/divider_55px"
+                android:background="@drawable/bg_left_selected_professional_evaluation_result"
+                android:button="@null"
+                android:checked="true"
+                android:gravity="center"
+                android:text="@string/professional_evaluation"
+                android:textColor="@color/selector_radio_evaluation_color"
+                android:textSize="@dimen/divider_24px" />
+
+            <RadioButton
+                android:id="@+id/radioOtherEvaluation"
+                android:layout_width="@dimen/divider_195px"
+                android:layout_height="@dimen/divider_55px"
+                android:background="@drawable/bg_right_selected_professional_evaluation_result"
+                android:button="@null"
+                android:gravity="center"
+                android:text="@string/other_evaluations"
+                android:textColor="@color/selector_radio_evaluation_color"
+                android:textSize="@dimen/divider_24px" />
+        </RadioGroup>
+
+        <com.google.android.material.card.MaterialCardView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_marginStart="@dimen/divider_22px"
+            android:layout_marginTop="@dimen/divider_29px"
+            android:layout_marginEnd="@dimen/divider_22px"
+            android:layout_marginBottom="@dimen/divider_18px"
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardBackgroundColor="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_28px"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/radioEvaluation">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvName"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_38px"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:text='@{"姓名:"+User.INSTANCE.name}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    app:layout_constraintEnd_toStartOf="@+id/tvSex"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvSex"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:text='@{"性别:"+User.INSTANCE.userSex}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    app:layout_constraintEnd_toStartOf="@+id/tvAge"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toEndOf="@+id/tvName"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvAge"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:text='@{"年龄:"+User.INSTANCE.userAge}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    app:layout_constraintEnd_toStartOf="@+id/tvNumber"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toEndOf="@+id/tvSex"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvNumber"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:layout_marginEnd="@dimen/divider_37px"
+                    android:text='@{"编号:"+User.INSTANCE.userId}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    android:visibility="gone"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toEndOf="@+id/tvAge"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <LinearLayout
+                    android:id="@+id/tvTitleTag"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/divider_71px"
+                    android:layout_marginStart="@dimen/divider_34px"
+                    android:layout_marginTop="@dimen/divider_23px"
+                    android:layout_marginEnd="@dimen/divider_37px"
+                    android:background="@drawable/bg_evaluation_top_results"
+                    android:orientation="horizontal"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvName">
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1.8"
+                        android:gravity="center"
+                        android:text="@string/task_name"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/assessment_type"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/score"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/reference_value"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="2"
+                        android:gravity="center"
+                        android:text="@string/assessment_date"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/evaluate_result"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    android:layout_marginStart="@dimen/divider_34px"
+                    android:layout_marginEnd="@dimen/divider_37px"
+                    android:layout_marginBottom="@dimen/divider_36px"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvTitleTag">
+
+                    <androidx.recyclerview.widget.RecyclerView
+                        android:id="@+id/rvResult"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+                </LinearLayout>
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </com.google.android.material.card.MaterialCardView>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</layout>

+ 1 - 0
evaluation/src/main/res/layout/activity_hospital.xml

@@ -215,6 +215,7 @@
             app:layout_constraintStart_toStartOf="parent" />
 
         <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvSnCode"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginEnd="@dimen/divider_31px"

+ 13 - 0
evaluation/src/main/res/layout/activity_other_evaluation.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</layout>

+ 197 - 0
evaluation/src/main/res/layout/activity_review_result_detail.xml

@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <import type="com.yingyangfly.baselib.utils.User" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        style="@style/layout_properties_specify_width_geight"
+        android:background="@mipmap/icon_uniform_background">
+
+        <LinearLayout
+            android:id="@+id/layoutHead"
+            style="@style/back_layout"
+            tools:ignore="MissingConstraints">
+
+            <androidx.appcompat.widget.AppCompatImageView style="@style/back_image" />
+
+            <androidx.appcompat.widget.AppCompatTextView style="@style/back_text" />
+        </LinearLayout>
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvTitle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/divider_32px"
+            android:text="@string/evaluation_report"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_34px"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.google.android.material.card.MaterialCardView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_marginStart="@dimen/divider_34px"
+            android:layout_marginTop="@dimen/divider_29px"
+            android:layout_marginEnd="@dimen/divider_37px"
+            android:layout_marginBottom="@dimen/divider_36px"
+            android:theme="@style/Theme.MaterialComponents.NoActionBar"
+            app:cardBackgroundColor="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_28px"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tvTitle">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvName"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="@dimen/divider_38px"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:text='@{"姓名:"+User.INSTANCE.name}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    app:layout_constraintEnd_toStartOf="@+id/tvSex"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvSex"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:text='@{"性别:"+User.INSTANCE.userSex}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    app:layout_constraintEnd_toStartOf="@+id/tvAge"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toEndOf="@+id/tvName"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvAge"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:text='@{"年龄:"+User.INSTANCE.userAge}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    app:layout_constraintEnd_toStartOf="@+id/tvNumber"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toEndOf="@+id/tvSex"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvNumber"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_33px"
+                    android:layout_marginEnd="@dimen/divider_37px"
+                    android:text='@{"编号:"+User.INSTANCE.userId}'
+                    android:textColor="@color/color_FF333333"
+                    android:textSize="@dimen/divider_24px"
+                    android:textStyle="bold"
+                    android:visibility="gone"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintHorizontal_chainStyle="spread"
+                    app:layout_constraintHorizontal_weight="1"
+                    app:layout_constraintStart_toEndOf="@+id/tvAge"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <LinearLayout
+                    android:id="@+id/tvTitleTag"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/divider_71px"
+                    android:layout_marginStart="@dimen/divider_34px"
+                    android:layout_marginTop="@dimen/divider_23px"
+                    android:layout_marginEnd="@dimen/divider_37px"
+                    android:background="@drawable/bg_top_results"
+                    android:orientation="horizontal"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvName">
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="@dimen/divider_160px"
+                        android:layout_height="match_parent"
+                        android:gravity="center"
+                        android:text="@string/dimension"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/subdimensional"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/score"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                    <androidx.appcompat.widget.AppCompatTextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center"
+                        android:text="@string/score_range"
+                        android:textColor="@android:color/white"
+                        android:textSize="@dimen/divider_24px"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    android:layout_marginStart="@dimen/divider_34px"
+                    android:layout_marginEnd="@dimen/divider_37px"
+                    android:layout_marginBottom="@dimen/divider_36px"
+                    android:background="@drawable/bg_results_content"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvTitleTag">
+
+                    <androidx.recyclerview.widget.RecyclerView
+                        android:id="@+id/rvResult"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+                </LinearLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </com.google.android.material.card.MaterialCardView>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 32 - 0
evaluation/src/main/res/layout/item_evaluation_history.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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"
+    tools:ignore="ResourceName">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/divider_20px"
+        android:orientation="vertical">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvDate"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/divider_37px"
+            android:background="@drawable/bg_evaluation_date"
+            android:gravity="center"
+            android:paddingStart="@dimen/divider_45px"
+            android:paddingEnd="@dimen/divider_45px"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_24px" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rvEvaluation"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+
+    </LinearLayout>
+
+</layout>

+ 92 - 0
evaluation/src/main/res/layout/item_evaluation_history_item.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyangfly.evaluation.entity.EvaluationHistoryBeanSubListItem" />
+    </data>
+
+    <LinearLayout
+        android:id="@+id/evaluationLayout"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/divider_98px"
+        android:orientation="horizontal">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1.8"
+            android:gravity="center"
+            android:text="@{data.reviewTaskName}"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@{data.type}"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvReviewScore"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvReferenceValue"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvDate"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="2"
+            android:gravity="center"
+            android:text="@{data.reviewTime}"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvResult"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvDetails"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@string/report_details"
+            android:textColor="@color/color_FF333333"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+    </LinearLayout>
+</layout>

+ 43 - 0
evaluation/src/main/res/layout/item_review_result_detail.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyangfly.evaluation.entity.ReviewResultDetailBean" />
+
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/detailLayout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tvType"
+            android:layout_width="@dimen/divider_160px"
+            android:layout_height="@dimen/divider_98px"
+            android:gravity="center"
+            android:text="@{data.type}"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rvReport"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/tvType"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 47 - 0
evaluation/src/main/res/layout/item_subdimensional_detail.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyangfly.evaluation.entity.ResultDetailBean" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/divider_98px"
+        android:orientation="horizontal">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@{data.reviewType}"
+            android:textColor="@color/color_FF333333"
+            android:textSize="@dimen/divider_24px" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@{data.score}"
+            android:textColor="@color/color_FF333333"
+            android:textSize="@dimen/divider_24px" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="@{data.getScoreRangeInfo()}"
+            android:textColor="@color/color_FF333333"
+            android:textSize="@dimen/divider_24px" />
+
+    </LinearLayout>
+
+</layout>

BIN
evaluation/src/main/res/mipmap-xxhdpi/icon_uniform_background.png