Преглед изворни кода

1.测评历史添加智能测评历史记录列表和详情功能

王鹏鹏 пре 2 година
родитељ
комит
959f6d25eb
22 измењених фајлова са 863 додато и 14 уклоњено
  1. 5 0
      baselib/src/main/java/com/yingyangfly/baselib/router/RouterUrlCommon.kt
  2. 6 0
      home/src/main/AndroidManifest.xml
  3. 32 0
      home/src/main/java/com/yingyangfly/home/adapter/OtherEvaluationHistoryAdapter.kt
  4. 24 0
      home/src/main/java/com/yingyangfly/home/adapter/OtherReviewResultDetailAdapter.kt
  5. 9 0
      home/src/main/java/com/yingyangfly/home/entity/GetSelectAnswerRecordBean.kt
  6. 10 0
      home/src/main/java/com/yingyangfly/home/entity/GetSelectAnswerRecordDetailBean.kt
  7. 39 0
      home/src/main/java/com/yingyangfly/home/entity/SelectAnswerRecordBean.kt
  8. 39 0
      home/src/main/java/com/yingyangfly/home/entity/SelectAnswerRecordDetailBean.kt
  9. 79 4
      home/src/main/java/com/yingyangfly/home/evaluation/EvaluationHistoryActivity.kt
  10. 21 0
      home/src/main/java/com/yingyangfly/home/evaluation/EvaluationHistoryViewModel.kt
  11. 93 0
      home/src/main/java/com/yingyangfly/home/evaluation/detail/OtherReviewResultDetailActivity.kt
  12. 32 0
      home/src/main/java/com/yingyangfly/home/evaluation/detail/OtherReviewResultDetailViewModel.kt
  13. 9 9
      home/src/main/java/com/yingyangfly/home/net/HomeApiService.kt
  14. 6 0
      home/src/main/manifest/AndroidManifest.xml
  15. 6 0
      home/src/main/res/drawable/bg_other_evaluation_history.xml
  16. 6 0
      home/src/main/res/drawable/bg_other_evaluation_result.xml
  17. 9 0
      home/src/main/res/drawable/bg_other_evaluation_top_results.xml
  18. 94 0
      home/src/main/res/layout/activity_evaluation_history.xml
  19. 198 0
      home/src/main/res/layout/activity_other_review_result_detail.xml
  20. 73 0
      home/src/main/res/layout/item_other_evaluation_history.xml
  21. 62 0
      home/src/main/res/layout/item_other_review_result_detail.xml
  22. 11 1
      home/src/main/res/values/strings.xml

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

@@ -224,4 +224,9 @@ object RouterUrlCommon {
      * 游戏结算
      */
     const val gameSettlement = "/game/settlement"
+
+    /**
+     * 其他测评报告
+     */
+    const val otherReviewResultDetail = "/otherReviewResultDetail/otherReviewResultDetail"
 }

+ 6 - 0
home/src/main/AndroidManifest.xml

@@ -42,6 +42,12 @@
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
 
+        <activity
+            android:name="com.yingyangfly.home.evaluation.detail.OtherReviewResultDetailActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
         <service
             android:name="com.yingyangfly.home.updater.service.DownloadService"
             android:exported="false" />

+ 32 - 0
home/src/main/java/com/yingyangfly/home/adapter/OtherEvaluationHistoryAdapter.kt

@@ -0,0 +1,32 @@
+package com.yingyangfly.home.adapter
+
+import android.annotation.SuppressLint
+import com.yingyang.home.R
+import com.yingyang.home.databinding.ItemOtherEvaluationHistoryBinding
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.home.entity.SelectAnswerRecord
+
+/**
+ * 测评历史adapter
+ */
+class OtherEvaluationHistoryAdapter(override val layoutId: Int = R.layout.item_other_evaluation_history) :
+    BaseDataBindingAdapter<SelectAnswerRecord, ItemOtherEvaluationHistoryBinding>() {
+
+    var onClickListener: ((bean: SelectAnswerRecord) -> Unit)? = null
+
+    @SuppressLint("SetTextI18n")
+    override fun onBindViewHolder(
+        binding: ItemOtherEvaluationHistoryBinding, item: SelectAnswerRecord, position: Int
+    ) {
+        binding.data = item
+        if (position % 2 == 0) {
+            binding.evaluationLayout.setBackgroundResource(R.drawable.bg_other_evaluation_result)
+        } else {
+            binding.evaluationLayout.setBackgroundResource(R.drawable.bg_other_evaluation_history)
+        }
+        binding.tvDetails.setOnSingleClickListener {
+            onClickListener?.invoke(item)
+        }
+    }
+}

+ 24 - 0
home/src/main/java/com/yingyangfly/home/adapter/OtherReviewResultDetailAdapter.kt

@@ -0,0 +1,24 @@
+package com.yingyangfly.home.adapter
+
+import com.yingyang.home.R
+import com.yingyang.home.databinding.ItemOtherReviewResultDetailBinding
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.home.entity.SelectAnswerRecordDetail
+
+/**
+ * 测评报告adapter
+ */
+class OtherReviewResultDetailAdapter(override val layoutId: Int = R.layout.item_other_review_result_detail) :
+    BaseDataBindingAdapter<SelectAnswerRecordDetail, ItemOtherReviewResultDetailBinding>() {
+
+    override fun onBindViewHolder(
+        binding: ItemOtherReviewResultDetailBinding, item: SelectAnswerRecordDetail, position: Int
+    ) {
+        binding.data = item
+        if (position % 2 == 0) {
+            binding.evaluationLayout.setBackgroundResource(R.drawable.bg_other_evaluation_result)
+        } else {
+            binding.evaluationLayout.setBackgroundResource(R.drawable.bg_other_evaluation_history)
+        }
+    }
+}

+ 9 - 0
home/src/main/java/com/yingyangfly/home/entity/GetSelectAnswerRecordBean.kt

@@ -0,0 +1,9 @@
+package com.yingyangfly.home.entity
+
+/**
+ * 查询问卷记录接口
+ */
+class GetSelectAnswerRecordBean {
+    var limit: String = ""
+    var page: Int = 0
+}

+ 10 - 0
home/src/main/java/com/yingyangfly/home/entity/GetSelectAnswerRecordDetailBean.kt

@@ -0,0 +1,10 @@
+package com.yingyangfly.home.entity
+
+/**
+ * 获取其他测评信息详情
+ */
+class GetSelectAnswerRecordDetailBean {
+    var limit: Int = 0
+    var page: Int = 0
+    var recordId: String = ""
+}

+ 39 - 0
home/src/main/java/com/yingyangfly/home/entity/SelectAnswerRecordBean.kt

@@ -0,0 +1,39 @@
+package com.yingyangfly.home.entity
+
+/**
+ * 其他测评历史记录
+ */
+data class SelectAnswerRecordBean(
+    val countId: Any,
+    val current: Int,
+    val maxLimit: Any,
+    val optimizeCountSql: Boolean,
+    val orders: List<Any>,
+    val pages: Int,
+    val records: List<SelectAnswerRecord>,
+    val searchCount: Boolean,
+    val size: Int,
+    val total: Int
+)
+
+data class SelectAnswerRecord(
+    val appUserId: String,
+    val createBy: String,
+    val createTime: String,
+    val examinationId: String,
+    val examinationTitle: String,
+    val id: String,
+    val limit: Int,
+    val orgCode: String,
+    val orgName: String,
+    val page: Int,
+    val questionId: String,
+    val questionOptionId: String,
+    val questionOptionName: String,
+    val questionScore: Int,
+    val questionTitle: String,
+    val recordId: String,
+    val updateBy: String,
+    val updateTime: String,
+    val usedTime: String
+)

+ 39 - 0
home/src/main/java/com/yingyangfly/home/entity/SelectAnswerRecordDetailBean.kt

@@ -0,0 +1,39 @@
+package com.yingyangfly.home.entity
+
+/**
+ * 获取其他测评报告bean
+ */
+data class SelectAnswerRecordDetailBean(
+    val countId: Any,
+    val current: Int,
+    val maxLimit: Any,
+    val optimizeCountSql: Boolean,
+    val orders: List<Any>,
+    val pages: Int,
+    val records: List<SelectAnswerRecordDetail>,
+    val searchCount: Boolean,
+    val size: Int,
+    val total: Int
+)
+
+data class SelectAnswerRecordDetail(
+    val appUserId: String,
+    val createBy: String,
+    val createTime: String,
+    val examinationId: String,
+    val examinationTitle: String,
+    val id: String,
+    val limit: Int,
+    val orgCode: String,
+    val orgName: String,
+    val page: Int,
+    val questionId: String,
+    val questionOptionId: String,
+    val questionOptionName: String,
+    val questionScore: String,
+    val questionTitle: String,
+    val recordId: String,
+    val updateBy: String,
+    val updateTime: String,
+    val usedTime: String
+)

+ 79 - 4
home/src/main/java/com/yingyangfly/home/evaluation/EvaluationHistoryActivity.kt

@@ -10,12 +10,15 @@ import com.yingyang.home.R
 import com.yingyang.home.databinding.ActivityEvaluationHistoryBinding
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
+import com.yingyangfly.baselib.ext.show
 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.home.adapter.EvaluationHistoryAdapter
+import com.yingyangfly.home.adapter.OtherEvaluationHistoryAdapter
 import com.yingyangfly.home.entity.EvaluationHistoryBean
+import com.yingyangfly.home.entity.SelectAnswerRecord
 
 /**
  * 历史记录测评
@@ -25,11 +28,29 @@ class EvaluationHistoryActivity :
     BaseMVVMActivity<ActivityEvaluationHistoryBinding, EvaluationHistoryViewModel>(),
     View.OnTouchListener {
 
+    /**
+     * 其他测评
+     */
+    private var page = 0
+    private val otherEvaluationHistoryAdapter by lazy { OtherEvaluationHistoryAdapter() }
+    private var selectAnswerRecord = mutableListOf<SelectAnswerRecord>()
+    private var jumpType: String = ""
+
     private var results = mutableListOf<EvaluationHistoryBean>()
     private val adapter by lazy { EvaluationHistoryAdapter() }
 
     override fun initViews() {
         binding {
+            swipeOtherResult.setEnableLoadMore(true)
+            swipeOtherResult.setEnableRefresh(true)
+            rvOtherResult.adapter = otherEvaluationHistoryAdapter
+            otherEvaluationHistoryAdapter.setData(selectAnswerRecord)
+            otherEvaluationHistoryAdapter.onClickListener = {
+                JumpUtil.jumpActivityWithUrl(
+                    RouterUrlCommon.otherReviewResultDetail, it.recordId, mContext
+                )
+            }
+
             rvResult.adapter = adapter
             adapter.setData(results)
             adapter.onClickListener = {
@@ -50,11 +71,20 @@ class EvaluationHistoryActivity :
             layoutHead.setOnTouchListener(this@EvaluationHistoryActivity)
             radioEvaluation.setOnCheckedChangeListener { group, checkedId ->
                 if (checkedId == R.id.radioProfessionalEvaluation) {
+                    showEvaluationsView(false)
                     getReviewTaskHistoryList()
                 } else if (checkedId == R.id.radioOtherEvaluation) {
-                    getOtherReviewTaskHistory()
+                    showEvaluationsView(true)
+                    getOtherReviewTaskHistory(true, true)
                 }
             }
+            swipeOtherResult.setOnRefreshListener {
+                getOtherReviewTaskHistory(true, false)
+            }
+
+            swipeOtherResult.setOnLoadMoreListener {
+                getOtherReviewTaskHistory(false, false)
+            }
         }
     }
 
@@ -67,11 +97,34 @@ class EvaluationHistoryActivity :
         getReviewTaskHistoryList()
     }
 
-    private fun getOtherReviewTaskHistory() {
-        Log.e("wpp", "获取其他测评历史记录")
-
+    /**
+     * 获取其他测评历史记录
+     */
+    private fun getOtherReviewTaskHistory(isRefresh: Boolean, isShowLoading: Boolean) {
+        if (isRefresh) {
+            page = 0
+            binding.swipeOtherResult.resetNoMoreData()
+        } else {
+            page++
+        }
+        viewModel.getSelectAnswerRecord(page, isShowLoading, fail = {
+            endRefresh()
+            it.toast()
+        }, success = {
+            endRefresh()
+            if (isRefresh) {
+                selectAnswerRecord.clear()
+            }
+            if (it != null && it.records.isNullOrEmpty().not()) {
+                selectAnswerRecord.addAll(it.records)
+            } else {
+                binding.swipeOtherResult.finishLoadMoreWithNoMoreData()
+            }
+            otherEvaluationHistoryAdapter.setData(selectAnswerRecord)
+        })
     }
 
+
     /**
      * 加载数据
      */
@@ -117,4 +170,26 @@ class EvaluationHistoryActivity :
         }
         return true
     }
+
+    /**
+     * 页面展示逻辑
+     */
+    private fun showEvaluationsView(isOtherEvaluations: Boolean) {
+        binding {
+            tvTitleTag.show(isOtherEvaluations.not())
+            resultLayout.show(isOtherEvaluations.not())
+            tvOtherTitleTag.show(isOtherEvaluations)
+            otherResultLayout.show(isOtherEvaluations)
+        }
+    }
+
+    /**
+     * 结束刷新
+     */
+    private fun endRefresh() {
+        binding {
+            swipeOtherResult.finishRefresh()
+            swipeOtherResult.finishLoadMore()
+        }
+    }
 }

+ 21 - 0
home/src/main/java/com/yingyangfly/home/evaluation/EvaluationHistoryViewModel.kt

@@ -5,6 +5,8 @@ import com.yingyangfly.baselib.mvvm.BaseViewModel
 import com.yingyangfly.baselib.net.XUtils
 import com.yingyangfly.baselib.utils.GsonUtil
 import com.yingyangfly.home.entity.EvaluationHistoryBean
+import com.yingyangfly.home.entity.GetSelectAnswerRecordBean
+import com.yingyangfly.home.entity.SelectAnswerRecordBean
 import com.yingyangfly.home.net.HOME_API
 
 /**
@@ -28,4 +30,23 @@ class EvaluationHistoryViewModel : BaseViewModel() {
     }.runUI(
         success, fail
     )
+
+    /**
+     * 获取测评历史
+     */
+    fun getSelectAnswerRecord(
+        index: Int,
+        isShowLoading: Boolean,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: SelectAnswerRecordBean?) -> Unit)? = null,
+    ) = launchFlow(isShowLoading) {
+        val requestBean = GetSelectAnswerRecordBean().apply {
+            page = index
+            limit = "10"
+        }
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        HOME_API.getSelectAnswerRecord(body)
+    }.runUI(
+        success, fail
+    )
 }

+ 93 - 0
home/src/main/java/com/yingyangfly/home/evaluation/detail/OtherReviewResultDetailActivity.kt

@@ -0,0 +1,93 @@
+package com.yingyangfly.home.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.yingyang.home.R
+import com.yingyang.home.databinding.ActivityOtherReviewResultDetailBinding
+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.detail.OtherReviewResultDetailViewModel
+import com.yingyangfly.home.adapter.OtherReviewResultDetailAdapter
+import com.yingyangfly.home.entity.SelectAnswerRecordDetail
+
+/**
+ * 测评报告
+ */
+@Route(path = RouterUrlCommon.otherReviewResultDetail)
+class OtherReviewResultDetailActivity :
+    BaseMVVMActivity<ActivityOtherReviewResultDetailBinding, OtherReviewResultDetailViewModel>(),
+    View.OnTouchListener {
+
+    private var recordId = ""
+    private val adapter by lazy { OtherReviewResultDetailAdapter() }
+    private var selectAnswerRecordDetail = mutableListOf<SelectAnswerRecordDetail>()
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        recordId = intent.getStringExtra("url") ?: ""
+        super.onCreate(savedInstanceState)
+    }
+
+    override fun initViews() {
+        binding {
+            rvResult.adapter = adapter
+            adapter.setData(selectAnswerRecordDetail)
+        }
+    }
+
+    @SuppressLint("ClickableViewAccessibility")
+    override fun initListener() {
+        binding {
+            layoutHead.setOnTouchListener(this@OtherReviewResultDetailActivity)
+        }
+    }
+
+    override fun initData() {
+        loadData()
+    }
+
+    /**
+     * 获取测评报告详情
+     */
+    private fun loadData() {
+        viewModel.selectAnswerRecordDetail(recordId, fail = {
+            it.toast()
+        }, success = {
+            selectAnswerRecordDetail.clear()
+            if (it != null && it.records.isNullOrEmpty().not()) {
+                selectAnswerRecordDetail.addAll(it.records)
+            }
+            adapter.setData(selectAnswerRecordDetail)
+        })
+    }
+
+    @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
+    }
+}

+ 32 - 0
home/src/main/java/com/yingyangfly/home/evaluation/detail/OtherReviewResultDetailViewModel.kt

@@ -0,0 +1,32 @@
+package com.yingyangfly.evaluation.detail
+
+import android.util.Log
+import com.yingyangfly.baselib.mvvm.BaseViewModel
+import com.yingyangfly.baselib.net.XUtils
+import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.home.entity.GetSelectAnswerRecordDetailBean
+import com.yingyangfly.home.entity.SelectAnswerRecordDetailBean
+import com.yingyangfly.home.net.HOME_API
+
+class OtherReviewResultDetailViewModel : BaseViewModel() {
+
+    /**
+     * 获取报告
+     */
+    fun selectAnswerRecordDetail(
+        id: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: SelectAnswerRecordDetailBean?) -> Unit)? = null,
+    ) = launchFlow(true) {
+        val requestBean = GetSelectAnswerRecordDetailBean().apply {
+            recordId = id
+            page = 0
+            limit = 99999
+        }
+        Log.e("wpp", GsonUtil.GsonString(requestBean))
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        HOME_API.selectAnswerRecordDetail(body)
+    }.runUI(
+        success, fail
+    )
+}

+ 9 - 9
home/src/main/java/com/yingyangfly/home/net/HomeApiService.kt

@@ -78,12 +78,6 @@ interface HomeApiService {
     @POST("app/game/replay")
     suspend fun gameReplay(@Query("id") id: String): BaseResp<Any>
 
-    /**
-     * 退出登录
-     */
-    @POST("app/logout")
-    suspend fun logout(): BaseResp<String>
-
     /**
      * 获取测评任务
      */
@@ -91,9 +85,15 @@ interface HomeApiService {
     suspend fun getReviewTaskHistoryList(@Body requestBody: RequestBody): BaseResp<List<EvaluationHistoryBean>>
 
     /**
-     * 退出登录
+     * 查询问卷记录接口
+     */
+    @POST("questionRecord/selectAnswerRecord")
+    suspend fun getSelectAnswerRecord(@Body requestBody: RequestBody): BaseResp<SelectAnswerRecordBean>
+
+    /**
+     * 其他测评报告详情
      */
-    @POST("large-screen/logout")
-    suspend fun largeLogout(): BaseResp<String>
+    @POST("questionRecord/selectAnswerRecordDetail")
+    suspend fun selectAnswerRecordDetail(@Body requestBody: RequestBody): BaseResp<SelectAnswerRecordDetailBean>
 
 }

+ 6 - 0
home/src/main/manifest/AndroidManifest.xml

@@ -38,6 +38,12 @@
             android:screenOrientation="landscape"
             android:windowSoftInputMode="adjustResize|adjustPan" />
 
+        <activity
+            android:name="com.yingyangfly.home.evaluation.detail.OtherReviewResultDetailActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:screenOrientation="landscape"
+            android:windowSoftInputMode="adjustResize|adjustPan" />
+
         <service
             android:name="com.yingyangfly.home.updater.service.DownloadService"
             android:exported="false" />

+ 6 - 0
home/src/main/res/drawable/bg_other_evaluation_history.xml

@@ -0,0 +1,6 @@
+<?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">
+    <solid android:color="@color/color_FFE6ECFF" />
+</shape>

+ 6 - 0
home/src/main/res/drawable/bg_other_evaluation_result.xml

@@ -0,0 +1,6 @@
+<?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">
+    <solid android:color="@color/color_FFCFD9FF" />
+</shape>

+ 9 - 0
home/src/main/res/drawable/bg_other_evaluation_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>

+ 94 - 0
home/src/main/res/layout/activity_evaluation_history.xml

@@ -225,11 +225,13 @@
                 </LinearLayout>
 
                 <LinearLayout
+                    android:id="@+id/resultLayout"
                     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:orientation="vertical"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
@@ -242,6 +244,98 @@
                         app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
                 </LinearLayout>
 
+                <LinearLayout
+                    android:id="@+id/tvOtherTitleTag"
+                    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_other_evaluation_top_results"
+                    android:orientation="horizontal"
+                    android:visibility="gone"
+                    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/id"
+                        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.5"
+                        android:gravity="center"
+                        android:text="@string/title_data"
+                        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/evaluation_time"
+                        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/create_time"
+                        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:id="@+id/otherResultLayout"
+                    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:orientation="vertical"
+                    android:visibility="gone"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvOtherTitleTag">
+
+                    <com.scwang.smartrefresh.layout.SmartRefreshLayout
+                        android:id="@+id/swipeOtherResult"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent">
+
+                        <androidx.recyclerview.widget.RecyclerView
+                            android:id="@+id/rvOtherResult"
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
+
+                    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
+                </LinearLayout>
             </androidx.constraintlayout.widget.ConstraintLayout>
         </com.google.android.material.card.MaterialCardView>
     </androidx.constraintlayout.widget.ConstraintLayout>

+ 198 - 0
home/src/main/res/layout/activity_other_review_result_detail.xml

@@ -0,0 +1,198 @@
+<?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="wrap_content"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1.5"
+                        android:gravity="center"
+                        android:text="@string/id"
+                        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/title_data"
+                        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/problem_options"
+                        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>

+ 73 - 0
home/src/main/res/layout/item_other_evaluation_history.xml

@@ -0,0 +1,73 @@
+<?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.home.entity.SelectAnswerRecord" />
+    </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.recordId}"
+            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.5"
+            android:gravity="center"
+            android:text="@{data.examinationTitle}"
+            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:text="@{data.usedTime}"
+            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:text="@{data.createTime}"
+            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/answer_details"
+            android:textColor="@color/color_FF333333"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+    </LinearLayout>
+</layout>

+ 62 - 0
home/src/main/res/layout/item_other_review_result_detail.xml

@@ -0,0 +1,62 @@
+<?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.home.entity.SelectAnswerRecordDetail" />
+
+    </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.5"
+            android:gravity="center"
+            android:text="@{data.recordId}"
+            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.questionTitle}"
+            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.questionOptionName}"
+            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.questionScore}"
+            android:textColor="@color/color_FF4A76FF"
+            android:textSize="@dimen/divider_24px"
+            android:textStyle="bold" />
+
+
+    </LinearLayout>
+</layout>

+ 11 - 1
home/src/main/res/values/strings.xml

@@ -67,5 +67,15 @@
     <string name="hospital_name" tools:ignore="ResourceName">首都医科大学宣武医院</string>
     <string name="exit_binding" tools:ignore="ResourceName">退出绑定</string>
     <string name="report_query" tools:ignore="ResourceName">报告查询</string>
-    <string name="other_evaluations" tools:ignore="ResourceName">其他测评</string>
+    <string name="other_evaluations" tools:ignore="ResourceName">智能测评</string>
+    <string name="evaluation_title" tools:ignore="ResourceName">测评标题</string>
+    <string name="evaluation_name" tools:ignore="ResourceName">题目</string>
+    <string name="evaluation_id" tools:ignore="ResourceName">试题ID</string>
+    <string name="evaluation_data_id" tools:ignore="ResourceName">题目ID</string>
+    <string name="evaluation_time" tools:ignore="ResourceName">答题时长</string>
+    <string name="id" tools:ignore="ResourceName">ID</string>
+    <string name="title_data" tools:ignore="ResourceName">标题</string>
+    <string name="create_time" tools:ignore="ResourceName">创建时间</string>
+    <string name="answer_details" tools:ignore="ResourceName">答题详情</string>
+    <string name="problem_options" tools:ignore="ResourceName">问题选项</string>
 </resources>