From bf71075adff85edfb335db162d6a1098fbb83c0d Mon Sep 17 00:00:00 2001 From: dongliang Date: Tue, 28 Apr 2026 13:39:50 +0930 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BE=85=E5=AE=8C=E6=88=90=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=8C=89=E4=BB=BB=E5=8A=A1=E7=B1=BB=E5=9E=8B=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 普通任务(type 0/1/2/3/4):地点+备注+打卡时间+指引块"任务进行中"→完成任务 巡检任务(type 5):场景打卡清单(✅已打卡/❌未打卡)+进度(2/5)→开启打卡 新增:InspectScene 数据类,TaskDetail.taskInspectScenes 类型化 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../xiaoqu/watch/data/task/InspectScene.kt | 19 ++++++ .../com/xiaoqu/watch/data/task/TaskDetail.kt | 4 +- .../xiaoqu/watch/ui/task/TaskListFragment.kt | 66 +++++++++++++++---- .../main/res/layout/fragment_task_list.xml | 28 ++++++++ 4 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/com/xiaoqu/watch/data/task/InspectScene.kt diff --git a/app/src/main/java/com/xiaoqu/watch/data/task/InspectScene.kt b/app/src/main/java/com/xiaoqu/watch/data/task/InspectScene.kt new file mode 100644 index 0000000..83ad688 --- /dev/null +++ b/app/src/main/java/com/xiaoqu/watch/data/task/InspectScene.kt @@ -0,0 +1,19 @@ +package com.xiaoqu.watch.data.task + +import com.google.gson.annotations.SerializedName + +/** + * 巡检场景数据类 + * 对应 taskInspectScenes 数组中的元素 + */ +data class InspectScene( + /** 场景名称 */ + @SerializedName("name") val name: String = "", + /** 是否已打卡(1=已打卡,0=未打卡) */ + @SerializedName("isCheck") val isCheck: Int = 0, + /** 场景状态 */ + @SerializedName("status") val status: Int = 0 +) { + /** 是否已完成打卡 */ + val checked: Boolean get() = isCheck == 1 +} diff --git a/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt b/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt index fa80066..d924ea8 100644 --- a/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt +++ b/app/src/main/java/com/xiaoqu/watch/data/task/TaskDetail.kt @@ -34,8 +34,8 @@ data class TaskDetail( @SerializedName("finishTime") val finishTime: String? = null, /** 打卡地点列表(非空=有场景打卡) */ @SerializedName("taskPositions") val taskPositions: List? = null, - /** 巡检场景列表(taskType=5) */ - @SerializedName("taskInspectScenes") val taskInspectScenes: List? = null, + /** 巡检场景列表(taskType=5,含打卡状态) */ + @SerializedName("taskInspectScenes") val taskInspectScenes: List? = null, /** 协作人状态:1=有协作人 */ @SerializedName("userStatus") val userStatus: Int = 0, /** 协作人列表 */ diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt index f07f305..ec708a6 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt @@ -228,6 +228,8 @@ class TaskListFragment : BaseFragment() { binding.blockHowTo.visibility = View.GONE binding.blockNoScene.visibility = View.GONE binding.blockInProgress.visibility = View.GONE + binding.blockInspect.visibility = View.GONE + binding.sceneList.removeAllViews() // 按状态显示不同内容 when (detail.status) { @@ -274,23 +276,22 @@ class TaskListFragment : BaseFragment() { // ===== 进行中/待完成:地点+打卡时间+完成指引 ===== 4 -> { - // 地点(提醒在哪里工作) - if (detail.hasPosition) { - binding.tvPosition.text = "📍 ${detail.positionText}" - binding.tvPosition.visibility = View.VISIBLE - } - - // 备注 - showNote(detail) - - // 打卡时间(如果有) - if (!detail.confirmTime.isNullOrEmpty()) { + if (detail.taskType == 5) { + // ===== 巡检任务:显示场景打卡清单 ===== + showInspectScenes(detail) + } else { + // ===== 普通任务:地点+打卡时间+完成指引 ===== + if (detail.hasPosition) { + binding.tvPosition.text = "\uD83D\uDCCD ${detail.positionText}" + binding.tvPosition.visibility = View.VISIBLE + } + showNote(detail) + if (!detail.confirmTime.isNullOrEmpty()) { binding.tvCheckinTime.text = "��� ${detail.confirmTime} 已打卡" binding.tvCheckinTime.visibility = View.VISIBLE + } + binding.blockInProgress.visibility = View.VISIBLE } - - // 绿色指引块:任务进行中+完成指引 - binding.blockInProgress.visibility = View.VISIBLE } // ===== 其他状态 ===== @@ -316,6 +317,43 @@ class TaskListFragment : BaseFragment() { } } + /** + * 显示巡检场景打卡清单(taskType=5,status=4) + * 每个场景一行:✅ 已打卡 / ❌ 未打卡 + */ + private fun showInspectScenes(detail: TaskDetail) { + val scenes = detail.taskInspectScenes + if (scenes.isNullOrEmpty()) { + binding.blockInProgress.visibility = View.VISIBLE + return + } + + val checkedCount = scenes.count { it.checked } + val totalCount = scenes.size + + // 标题:打卡进度 2/5 + binding.tvInspectTitle.text = "打卡进度 $checkedCount/$totalCount" + binding.blockInspect.visibility = View.VISIBLE + + // 动态添加场景行 + binding.sceneList.removeAllViews() + for (scene in scenes) { + val tv = android.widget.TextView(requireContext()).apply { + text = if (scene.checked) { + " \u2705 ${scene.name}" + } else { + " \u274C ${scene.name}" + } + textSize = 22f + setTextColor(requireContext().getColor( + if (scene.checked) R.color.success else R.color.text_secondary + )) + setPadding(0, 8, 0, 8) + } + binding.sceneList.addView(tv) + } + } + /** * 根据 taskType + status 设置底部操作按钮 * diff --git a/app/src/main/res/layout/fragment_task_list.xml b/app/src/main/res/layout/fragment_task_list.xml index b1736f7..250b28d 100644 --- a/app/src/main/res/layout/fragment_task_list.xml +++ b/app/src/main/res/layout/fragment_task_list.xml @@ -263,6 +263,34 @@ + + + + + + + + + + +