dongliang
5e5c44cacd
fix: 红点改为直接显示,不依赖diffStats
...
diffStats方案因lastStats竞态反复失败。
改为:有pending通知→所有未ack的卡片直接显示红点。
点了哪个消哪个,简单可靠无竞态。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 19:31:51 +09:30
dongliang
93a31e76a3
fix: 修根因——EventBus加buffer防事件丢失+恢复正确架构
...
根因:SharedFlow(replay=0,extraBufferCapacity=0)导致emit挂起,
多个collector竞争时事件丢失。之前的补丁越改越乱。
修复:
1. EventBus: extraBufferCapacity=64,emit不再阻塞
2. 恢复正确架构:
- MainActivity: 监听MQTT type=1→NotificationManager→横幅
- NotificationManager: 处理后emit NewTaskArrived
- HomeFragment: 监听NewTaskArrived→红点+统计
3. StatusBarView: 电池位置恢复原位,默认电量-1,主动查询系统电量
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 19:23:01 +09:30
dongliang
329ddc505e
fix: MainActivity多余大括号导致编译失败
...
第71行有多余的},导致类提前关闭,后续代码变成顶级声明。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 18:52:06 +09:30
dongliang
0f6385a9fe
fix: 红点不显示——SharedFlow(replay=0)事件竞争
...
根因:EventBus用MutableSharedFlow(replay=0,buffer=0),
MainActivity和HomeFragment同时collect,NewTaskArrived
中间事件在emit时挂起(无缓冲),HomeFragment收不到。
修复:去掉NewTaskArrived中间事件,HomeFragment直接在
MqttMessageReceived type=1中处理:
1. 调 notificationManager.onNewTaskMessage()
2. 直接调 activity.showNotificationBanner() 显示横幅
3. fetchStatistics(checkDots=true) 刷新红点
架构简化:
- MainActivity不再监听MQTT type=1(去掉observeMqttMessages)
- NotificationManager不再emit事件(去掉EventBus依赖)
- 去抖合并后通过回调onPendingCountChanged通知UI
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 18:48:05 +09:30
dongliang
73af1cbfa9
fix: lastStats为null时红点兜底显示
...
问题:首次加载时fetchStatistics()异步未返回,lastStats为null。
此时收到通知→diffStats(null,data)→emptySet()→无红点。
修复:lastStats为null时,有pending通知则对所有有值的分类
显示红点(兜底策略,宁多勿漏)。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 18:02:32 +09:30
dongliang
e6c218d830
refactor: 红点统一管理(activeDotCards+renderDots)+ 去掉提示条
...
按矩阵验证的19个场景统一重写通知逻辑:
核心改动:
- activeDotCards 集合累积管理红点,只增不减(除显式操作)
- renderDots() 统一渲染,不在各处单独设 visibility
- 去掉提示条(用户反馈不好看)
场景覆盖:
- 场景1-2: 首页连续收到不同分类通知 → activeDotCards累积 ✅
- 场景3: 点横幅 → consumeAll+activeDotCards清空 ✅
- 场景4-5: 点红点 → activeDotCards移除对应+renderDots ✅
- 场景7: 所有红点点完 → 自动consumeAll清理 ✅
- 场景11-16: 非首页 → preNotificationStats精确diffStats→补充activeDotCards ✅
- 场景18: 全部查看后新通知 → consumeAll已重置,新通知正常累积 ✅
- 场景19: 列表中又来通知 → 返回后onResume补充新红点,不覆盖已ack的 ✅
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 17:47:52 +09:30
dongliang
f785be91a6
feat: 电池显示电量数值 + 充电闪电标识
...
1. 电池图标右侧显示"75%"电量百分比(白色60%透明度)
2. 充电中在电池壳内显示⚡ 闪电标识
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 17:20:56 +09:30
dongliang
58ef336df4
fix: 用通知前快照精确显示红点(区分首页/非首页场景)
...
问题:非首页返回时,onViewCreated已覆盖lastStats,
导致diffStats对比不出差异,红点要么全显要么不显。
修复:
1. NotificationManager新增preNotificationStats
- 首条通知到达时保存当前lastStats快照
- consumeAll时清除
- 不会被onViewCreated的fetchStatistics覆盖
2. HomeFragment.onResume用preNotificationStats做精确diffStats
- 有快照→fetchStatisticsForDots(baseline, acknowledged)
- 只给变化且未查看的分类显示红点
- 无快照→降级为全显(未查看的)
场景验证:
- 首页收到通知→当场diffStats→红点精确 ✅
- 首页点红点→对应消除,其他保留 ✅
- 首页点通知→consumeAll→返回后全部消除 ✅
- 非首页返回→preNotificationStats对比→红点精确 ✅
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 16:59:56 +09:30
dongliang
a00d5abd51
fix: 点击红点卡片后扣减通知数+不恢复已查看红点
...
1. NotificationManager新增:
- acknowledgedCards: 记录已查看的分类
- cardIncrements: 记录每个分类的新增任务数
- acknowledgeCard(): 标记分类已查看
- pendingCount扣除已查看分类的增量
2. HomeFragment:
- 点击卡片→acknowledgeCard→红点消失+提示条数量减少
- onResume只恢复未查看分类的红点
- pendingCount=0时清除所有提示
- fetchStatistics记录每个分类的增量用于扣减
3. consumeAll重置所有状态(acknowledgedCards+cardIncrements)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 16:50:47 +09:30
dongliang
6418c2f36f
feat: 新任务提示条 + 按taskIds直接加载
...
1. 首页新增"有N条新任务 点击查看"提示条
- pendingCount>0 时显示,点击/查看后消失
- 和红点共存:提示条=统一入口,红点=分类提示
2. TaskListFragment 通知模式
- 有 filterTaskIds 时跳过 queryTaskIds
- 直接按 taskId 构建列表,调 lookTaskDetail 加载详情
- 不受 status 筛选限制,跨状态任务都能显示
3. 横幅/提示条共用 navigateToNewTasks()
- 1个任务→跳详情,多个→跳列表
- 跳转后清除红点+提示条+pendingTaskIds
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 16:42:09 +09:30
dongliang
463ff1373d
fix: onResume红点改为直接显示,不依赖diffStats
...
问题:onViewCreated先于onResume执行,fetchStatistics已将
lastStats更新为新值,onResume的diffStats对比不出差异→无红点。
修复:pendingCount>0时直接显示所有红点,不走diffStats对比。
已确定有新任务,不需要再对比哪个卡片变了。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 16:19:34 +09:30
dongliang
2fd8b7f80d
fix: 返回首页时补显示红点
...
HomeFragment暂停时(在任务详情页等)收到的NewTaskArrived事件会丢失,
返回首页后红点不显示。onResume中检查pendingCount,补刷统计和红点。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 15:52:16 +09:30
dongliang
379d784f70
fix: 去抖改为暂存合并,不丢弃消息
...
问题:多条MQTT消息同时到达(间隔<1s),去抖直接丢弃后续消息。
旧版是延迟处理而非丢弃。
修复:
- 去抖窗口内的消息暂存到pendingJsons
- 1s后延迟任务统一处理暂存消息(只加ID,不重复震动)
- 合并后统一发一次NewTaskArrived事件更新横幅
- MainActivity改为监听NewTaskArrived事件显示横幅
时序示例:
t=0ms: 消息1(A) → 立即处理, pendingTaskIds=[A], 横幅"1条"
t=100ms: 消息2(B) → 暂存
t=200ms: 消息3(C) → 暂存
t=1000ms: 延迟任务 → 处理B+C, pendingTaskIds=[A,B,C], 横幅"3条"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 15:27:06 +09:30
dongliang
1ffdefc887
fix: 通知累积+点击跳转修复
...
Bug 1: setupBannerClick每次事件覆盖onClick,丢失之前累积的taskIds
修复: 点击时从notificationManager.pendingTaskIds取所有累积ID
Bug 2: 多任务点击跳到接单池全量列表,无法区分新旧
修复: TaskListFragment支持taskIds参数过滤,只显示通知中的任务
Bug 3: allIds.toLongArray()编译错误(List<String>无此方法)
修复: mapNotNull{toLongOrNull()}.toLongArray()
nav_main.xml: taskListFragment新增taskIds可选参数(long[]nullable)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 15:15:33 +09:30
dongliang
47e8ed0776
test: 消息通知+考勤模块单元测试
...
NotificationManagerTest (15条):
- 去抖: 首条处理/1s内重复过滤/触发震动亮屏
- 解析: 直接id/taskArr数组/data数组/无id忽略/畸形json不崩溃
- 去重: 相同taskId不重复添加
- 消费: consumeAll清空/consumeByTaskId移除单条/不存在id不崩溃
- 红点: 全增/单增/无变化/减少/null旧值
AttendanceStatusTest (2条):
- 实际API返回JSON解析验证(设备验证数据)
- 字段缺失时默认值
PunchButtonMatrixTest (3条):
- 未打卡→上班按钮
- 已上班未下班→下班按钮
- 已上班已下班→撤销+下班
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 13:58:31 +09:30
dongliang
881cfeb3b6
fix: 静态检查修复(访问权限+生命周期清理)
...
1. MainActivity.notificationBanner 改为非 private
(HomeFragment 需访问设置点击回调,原 private 编译报错)
2. HomeFragment.onDestroyView 补充清理 bannerView.onClick
(避免 Fragment 销毁后回调泄漏)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 13:54:48 +09:30
dongliang
dd3905b743
feat: 消息通知模块(横幅+红点+跳转)
...
MQTT type=1 新任务推送 → 震动+亮屏+顶部蓝色横幅+卡片红点。
新增:
- NotificationManager: 去抖1s+内存存储taskIds+统计对比红点
- NotificationBannerView: Activity层横幅(滑入/10s倒计时/点击)
- AppEvent.NewTaskArrived: 携带taskIds和count
集成:
- MainActivity: 监听MQTT type=1→NotificationManager→横幅
- HomeFragment: 监听NewTaskArrived→刷新统计+对比红点+横幅点击跳转
- page_main.xml: 3个卡片各加红点角标(FrameLayout包裹)
- nav_main.xml: 新增action_home_to_taskDetail
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 13:48:04 +09:30
dongliang
e7fa7b3b1d
feat: 蓝牙扫描与iBeacon模块
...
核心功能:
- BleScanner: BLE扫描封装,SCAN_MODE_LOW_POWER低功耗
- IBeaconParser: 从ScanRecord解析UUID/Major/Minor/TxPower
- BluetoothScanManager: 状态机管理常规/特殊双模式
- 常规模式:周期扫描→上报API→检查新任务
- 特殊模式:RSSI采样→均值判定→任务匹配→唤醒屏幕
- 设备过滤:名称含RFstar + 功率0<p<=100
集成:
- HomeFragment: MQTT type=4更新蓝牙参数,type=5控制启停
- 解绑时停止扫描
- 电量同步给扫描管理器
新增6文件,修改2文件。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 12:06:59 +09:30
dongliang
866063b21c
feat: MQTT动态更新nfcOpenTime + 物理返回键触发NFC打卡
...
1. MQTT type=4: 解析nfcOpenTime参数,动态更新NFC超时时间
2. 物理返回键: 已绑定用户按返回键→展开面板+自动开始打卡
面板已展开时按返回键→收回面板
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 11:26:57 +09:30
dongliang
ecd3090a74
fix: AttendanceStatus补充workStatus/workAtStatus字段
...
API实际返回验证通过,核心字段完全匹配:
onPunchState/offPunchState/actualOnTime/actualOffTime
补充workStatus和workAtStatus避免Gson解析警告。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 11:14:53 +09:30
dongliang
15b7b438e4
fix: 考勤面板字体全面加大加粗(老年用户适配)
...
时间: 48sp→60sp bold
状态文字: 16sp→22sp bold
NFC提示: 18sp→22sp bold
按钮文字: 20sp→26sp bold,高度56dp→64dp
撤销文字: 18sp→22sp bold
面板padding稍微收紧(28→24dp)腾出更多内容空间
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 10:47:48 +09:30
dongliang
4d91c84c6b
fix: 去掉撤销打卡确认弹窗,直接执行+Toast提示
...
撤销是低频操作,二次确认多余。点击直接调API,
成功后Toast"撤销成功",失败Toast错误信息。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 10:43:41 +09:30
dongliang
3d2261c809
feat: 考勤面板UI优化(5项改进)
...
1. 打卡状态文字:显示"已上班 07:02"/"已下班 17:05"
2. NFC扫描倒计时:显示"请贴近信标(8s)"
3. 底部收回指示条:灰色短横线,点击可收回面板
4. 药丸形按钮:大圆角28dp + 蓝色渐变(源码#4CBAF1→#339AFB)
5. 撤销按钮主次分明:窄灰底红字(0.4) + 宽蓝色下班(0.6)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-29 10:27:40 +09:30
dongliang
1b9015e9ce
fix: 读到卡后不播NFC关闭音效,只播打卡结果音效
...
读到卡时closeNfc()播放close_punch.mp3,紧接着API成功播放
punch_success.mp3,两个音效都含"打卡"语音导致听起来报了两次。
改为读到卡后静默关闭NFC硬件,只播打卡成功/失败音效。
NFC关闭音效只在超时和手动取消时播放。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:29:39 +09:30
dongliang
638f999f67
fix: NFC读卡后先回调再退出,不能先stopScan
...
stopScan()会cancel自己所在的协程,导致后面的
withContext(Main){callback}永远执行不到。
改为先回调,再return@launch退出循环。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:26:23 +09:30
dongliang
8afffc5fec
fix: NFC读到卡号后立即停止轮询,避免重复回调
...
轮询每1秒读一次sysfs,卡片还贴着时会再次读到卡号,
导致回调触发两次→API调两次→音效播放两次。
读到有效卡号后立即stopScan()+return,只触发一次回调。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:23:16 +09:30
dongliang
c318dbdfa5
fix: 去掉面板日期 + 修复NFC全零卡号误触发
...
1. 面板去掉日期显示,只保留时间
2. FiseNfcController读到全零卡号(无卡贴近)时不触发回调,
避免拿无效nfcId调API导致直接失败
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:17:57 +09:30
dongliang
b274012019
fix: 下拉手势改用Activity.dispatchTouchEvent检测
...
前两种方案(SwipeDownLayout.onInterceptTouchEvent、
RecyclerView.OnItemTouchListener)均无法检测到下拉。
改用Activity.dispatchTouchEvent——触摸事件链最顶层,
在任何View处理之前就能看到所有触摸事件,不可能被拦截。
HomeFragment注册回调,onDestroyView时清理避免泄漏。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:13:46 +09:30
dongliang
68f3b2d890
fix: 下拉手势改用RecyclerView.OnItemTouchListener
...
SwipeDownLayout的onInterceptTouchEvent方案仍无法检测到下拉。
改用ViewPager2内部RecyclerView的addOnItemTouchListener,
这是RecyclerView专门提供的触摸观察接口,在RecyclerView
处理事件之前通知listener,保证能看到所有触摸事件。
使用rawY避免坐标系问题,阈值60px(约45dp@120dpi)。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:09:48 +09:30
dongliang
6021171a40
fix: 修复下拉手势无响应,改用自定义SwipeDownLayout
...
ViewPager2内部RecyclerView会拦截触摸事件,导致setOnTouchListener
和GestureDetector都收不到下拉手势。
改用SwipeDownLayout(自定义FrameLayout),在onInterceptTouchEvent中
检测下拉——事件到达子View之前就能观察到,原理同SwipeRefreshLayout。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 21:03:03 +09:30
dongliang
97a3054db2
feat: 考勤打卡模块(NFC)重新开发
...
基于新方法论(11层源码分析+独立评审)重新开发考勤打卡功能:
- 首页下拉展开打卡面板,点击按钮开启NFC贴卡打卡
- 支持上班打卡、下班打卡、撤销打卡
- NFC超时自动关闭,音效反馈(4种planId)
- MQTT type=5 上下班状态推送处理
- 按钮状态矩阵:onPunchState×offPunchState决定显示
新增: AttendanceStatus / PunchApi / PunchViewModel / PunchPanelView
修改: NetworkModule / HomeFragment / fragment_home.xml
删除: AttendanceInfo(被AttendanceStatus替代)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 20:57:17 +09:30
dongliang
98de3f0b46
revert: 删除考勤打卡模块代码,准备重新开发
...
删除:PunchStatus.kt, PunchApi.kt, PunchFragment.kt, fragment_punch.xml
恢复:HomeFragment(去掉下拉手势/PunchApi/工作状态处理)
恢复:fragment_home.xml(去掉pullDownArea覆盖层)
恢复:nav_main.xml(去掉action_home_to_punch)
恢复:NetworkModule(去掉PunchApi提供者)
考勤模块将按NFC打卡流程重新从需求开始设计开发。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 20:23:00 +09:30
dongliang
e44a25e841
fix: 去掉打卡确认弹窗 + NFC日志排查
...
- 去掉"确定上班打卡?"确认弹窗,NFC读到卡号直接提交
- 添加NFC开启/扫描日志便于排查无反应问题
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 20:13:48 +09:30
dongliang
5a5c8bfaa0
fix: 考勤页面交互全面优化
...
1. 半屏下拉面板(不是全屏页面)
2. 去掉状态文字,按钮即状态
3. 点击空白收回面板
4. 增加时间+日期显示(每秒更新)
5. NFC开启时播放语音+振动(planId=8开启/planId=4成功/planId=7失败)
6. NFC扫描时按钮变"NFC扫描中..."(不弹窗)
7. 点击扫描中的按钮可取消扫描
8. 10秒超时自动关闭+振动提示
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 20:04:42 +09:30
dongliang
d9ee5f2059
fix: 考勤页面优化
...
1. 下拉区域扩大到上半屏(140dp),只拦截垂直不拦截水平
2. 考勤页布局优化:居中考勤状态+按钮+低耗电提示
3. 按钮固定宽度250dp,更美观
4. 添加上滑返回手势(考勤页上滑回首页)
5. 去掉底部"上滑返回"文字(已有手势)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 19:53:04 +09:30
dongliang
b59fee4bb7
feat: 考勤功能补全
...
1. 首页加载时检查工作状态(fetchWorkState)
2. MQTT type=4 工作状态推送处理(上班→亮屏,下班→关NFC+熄屏)
3. PunchStatus 增加打卡时间字段(onPunchTime/offPunchTime)
4. 考勤页显示打卡时间("已上班 07:02"/"已下班 17:05")
5. 首页注入 PunchApi/ScreenController/NfcController
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 19:30:29 +09:30
dongliang
967b001d46
feat: 考勤改为NFC打卡(替代蓝牙)
...
- API: onAndOffPunch → nfcOnAndOffPunch(v1.2.5新增)
- 参数: {beaconMacs, punchType} → {nfcId, punchType}
- 流程: 点按钮→开NFC→贴信标读卡→提交
- 10秒超时自动关闭NFC
- 离开页面自动关闭NFC
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 19:23:48 +09:30
dongliang
2d5726db9a
fix: 下拉手势改为在状态栏区域检测(避免ViewPager2拦截)
...
状态栏区域扩大为40dp触摸区,在此区域检测下拉手势进入考勤页
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 18:38:17 +09:30
dongliang
c812b9ee1a
feat: 考勤打卡模块(新方法论首个验证模块)
...
基于分析产出物开发(discovery-map考勤章节+baseline/05流程6):
- PunchFragment 3种状态(未上班/已上班/已下班)
- PunchApi 3个接口(getAttendance/onAndOffPunch/revokePunch)
- PunchStatus 数据类(字段名基于分析,非猜测)
- 上班打卡:蓝牙识别1.5s→确认弹窗→API
- 下班打卡:蓝牙识别1.5s→直接提交→低耗电模式
- 撤销打卡:确认弹窗→API→恢复
- 首页下拉手势→考勤页
- 蓝牙用模拟MAC,后续对接
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 18:34:36 +09:30
dongliang
b7a1b2683f
feat: 提示弹窗按原型图V3重设计
...
- 圆形图标背景(85dp):成功绿/错误红/警告橙 15%透明
- 标题 28sp(原22sp)
- 描述 20sp(原15sp)
- 倒计时 18sp
- 整体居中,大字醒目
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 13:58:09 +09:30
dongliang
4abe073ef1
fix: 修复已打卡乱码+巡检场景样式优化
...
1. 已打卡文字去掉损坏的emoji,改为纯文字"已打卡"
2. 巡检场景:● 绿色实心圆=已打卡,○ 灰色空心圆=未打卡
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 13:47:42 +09:30
dongliang
bf71075adf
feat: 待完成页面按任务类型区分显示
...
普通任务(type 0/1/2/3/4):地点+备注+打卡时间+指引块"任务进行中"→完成任务
巡检任务(type 5):场景打卡清单(✅ 已打卡/❌ 未打卡)+进度(2/5)→开启打卡
新增:InspectScene 数据类,TaskDetail.taskInspectScenes 类型化
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 13:39:50 +09:30
dongliang
7f06cdc9d1
fix: 任务页3项优化
...
1. 标题栏固定顶部不随内容滚动
2. 底部按钮高度缩小(padding 21→13dp)字体加大(24→28sp)
3. 待完成页面改为:地点+备注+打卡时间+绿色指引块"任务进行中,完成工作后点击下方按钮"
按钮文字改为"完成任务"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 13:29:33 +09:30
dongliang
d7b61bf0fa
fix: 任务页全面放大字体+显示截止时间
...
字体放大:任务名34sp, 地点24sp, 时间22sp, 积分26sp, 备注20sp
指引块标题24sp, 说明20sp, 打卡确认44sp
新增截止时间和要求完成时间显示(待抢单状态)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 13:22:41 +09:30
dongliang
2f0fc675d2
feat: 任务页面按原型图V3适老化重设计
...
按状态显示不同布局:
- 待抢单:任务名+地点+时间+积分+备注 → 帮助决策
- 待打卡(有场景):任务名+备注+指引块(去哪+怎么做) → 两段式指引
- 待打卡(无场景):任务名+绿色引导块 → 正向说明
- 待完成:任务名+备注+打卡时间大字确认 → 安心感
标题栏三栏:返回+状态名+页码
新增指引块drawable(orange/blue/green/note)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 13:09:04 +09:30
dongliang
354a2ab124
fix: 任务页面优化老年人布局
...
- 去掉左右标签行(ConfigRow),改为全部居中展示
- 状态标签顶部居中带pill背景色
- 任务名 30sp 最大最醒目
- 地点 22sp 蓝色
- 时间信息合并显示(派单+截止+要求完成)
- 积分 24sp 橙色(0分时隐藏)
- 操作按钮 24sp 更大
- 返回按钮 40dp 更大触摸区
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 12:24:21 +09:30
dongliang
b691b432fb
feat: 任务详情补充缺失字段
...
新增显示:
- 状态标签(彩色文字:待抢单/待打卡/进行中/已完成)
- 截止时间(expireTime)
- 预计完成时间(preFinishTime,指派任务)
- 上报人(createName,type 3/4 时显示)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 12:13:21 +09:30
dongliang
29ca1bc7c8
fix: 操作后列表为空时自动返回上一页(和旧版一致)
...
首次加载为空→显示"暂无任务",操作后列表为空→自动popBackStack
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 12:08:14 +09:30
dongliang
b29e68e87f
fix: 操作按钮逻辑按taskType+status组合判断
...
- type 2(指派): 无抢单步骤,直接从status3开始
- type 5(巡检): status4是NFC打卡(非确认完成),无抢单无完成
- type 0/1/3/4: 完整流程(抢单→打卡→完成)
- 抽取 setupPunchButton/setupCompleteButton/showBackButton 方法
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 11:00:50 +09:30
dongliang
a25675c5b2
fix: 去掉任务详情页中的分段控件tab,腾出更多内容空间
...
标题栏直接显示状态名+任务进度(如"接单池 第1/50个")
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-28 10:55:16 +09:30