Commit Graph

152 Commits

Author SHA1 Message Date
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
dongliang
5dfbd627f2 fix: TaskDetailFragment 使用新字段名(displayName/positionText/pointText/sendTime)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-28 10:49:58 +09:30
dongliang
9598976566 fix: TaskDetail 字段对齐服务端实际返回
- name(非taskName), sendTime(非beginTime), taskPositions(数组非字符串)
- point 改为 Double(服务端返回0.0)
- hasPosition 从 taskPositions 判断(服务端无此字段)
- 新增 displayName/positionText/pointText 辅助属性
- displayDetail 使用实际字段名

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-28 10:45:18 +09:30
dongliang
5e2d71c25d feat: 任务列表改为单任务全屏展示+上下滑切换(方案B,和旧版一致)
核心改动:
- queryTaskIds 获取ID列表 → lookTaskDetail 获取当前任务详情
- 上滑下一个、下滑上一个任务
- 顶部显示"第X/Y个任务"
- 派单时间+任务名(带类型前缀)+地点+派单号+积分+协作人+描述
- 底部固定操作按钮(抢单/打卡/完成)
- 操作成功后刷新列表+详情
- 空状态+Loading状态

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-28 10:34:44 +09:30
dongliang
aea7b349b8 fix: 任务卡片显示name字段(queryTaskIds返回name不是taskName)
TaskItem 新增 name 字段 + displayName 属性(优先name其次taskName)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 21:25:53 +09:30
dongliang
a455c82b59 fix: queryTaskIds 和 lookTaskDetail 改为 POST
服务端所有任务接口都要求 POST,GET 返回 405

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 21:18:21 +09:30
dongliang
52949f4e3f fix: 任务列表改用 queryTaskIds 接口(旧版实际使用的接口)
pageList 返回空body,改为 queryTaskIds GET 请求

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 21:15:15 +09:30
dongliang
4a3fbb6be6 fix: 处理服务端返回空body(Content-Length:0)
服务端无数据时返回200但body为空,Gson抛EOFException。
捕获EOFException视为Success(null)而非网络错误。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 21:05:58 +09:30
dongliang
aec33ee3e1 fix: UnbindInterceptor 改用 peekBody 防止消费响应体
source.request() 在空body/非JSON响应时会导致后续Gson解析失败。
改用 peekBody(1024) 安全读取副本。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 20:47:53 +09:30
dongliang
2d0a4d94ae fix: pageList 接口改为 POST(服务端返回405 GET不支持)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 20:38:27 +09:30
dongliang
c0059efa16 fix: 防止重复导航崩溃 - 跳转前检查当前是否在homeFragment
HomeFragment的View不随导航销毁,快捷区点击事件仍会触发。
在非homeFragment时跳过导航。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 20:34:56 +09:30
dongliang
1056386af8 feat: 任务管理模块 - 列表+详情+抢单/打卡/完成
新增:
- TaskListFragment 分段控件+RecyclerView+下拉刷新
- TaskDetailFragment 信息展示+底部固定操作按钮(foot-btn)
- TaskListAdapter 任务卡片适配器
- TaskItem/TaskDetail 数据类
- TaskApi 新增5个接口(pageList/detail/grab/assign/complete)
- 分段控件/底部按钮/状态标签 drawable

修改:
- nav_main.xml 添加参数和action
- HomeFragment 快捷区点击→任务列表(传tableStatus)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 20:19:35 +09:30
dongliang
7a777e28a6 fix: 状态栏固定在顶部,不随ViewPager2滑动
- 状态栏从两个子页面移到fragment_home.xml顶层
- ViewPager2在状态栏下方滑动
- HomeFragment只维护一个固定statusBar引用

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 19:47:31 +09:30
dongliang
2df2cd0cc2 fix: 设置页数据不显示 - 直接操作inflate好的View
之前通过ViewPager2内部查找ViewHolder,但Page0未创建时找不到。
改为直接保存inflate好的configPageView引用,数据填充不依赖ViewPager2。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 19:39:47 +09:30
dongliang
c86e44f264 fix: ViewPager2 子页面设置 match_parent LayoutParams
ViewPager2 要求子页面必须填满,inflate 时未指定 parent 导致 LayoutParams 丢失。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:42:50 +09:30
dongliang
e07a2242a9 feat: 首页与应用壳模块
新增:
- StatusBarView 自定义状态栏(圆点+信号条+电池壳,按原型图V3)
- ViewPager2 左右滑动(设置页/主页,默认主页)
- 主页:时钟+日期+快捷区3卡片(对接statisticsNew API)
- 设置页:圆形头像+用户信息+设备信息+调试模式
- TaskApi 接口(统计+考勤)
- HomePagerAdapter(View方式,避免Fragment嵌套)
- 页面指示器+快捷区卡片背景drawable

修改:
- HomeFragment 重写为ViewPager2容器
- NetworkModule 添加TaskApi提供者
- styles.xml 添加ConfigRow/Label/Value样式

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:37:06 +09:30
dongliang
e6d5d6fe8a fix: 回滚二维码到iPhone风格(静默区1格+圆角12%)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:05:55 +09:30
dongliang
a7622da05a fix: 二维码静默区2格+圆角8%,防止裁切定位角
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:02:35 +09:30
dongliang
6e201923b7 fix: 二维码静默区改为0,修复圆角不对称
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:00:32 +09:30
dongliang
c244011c96 fix: 恢复二维码为iPhone风格整体圆角裁剪(12%)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:57:41 +09:30
dongliang
30f7ac1206 fix: 重写圆角二维码渲染
- 使用独立 Paint 对象,修复颜色问题
- 模块大小固定 16px,圆角 35%
- 白色圆角背景 + 黑色圆角模块
- 模块间 10% 缝隙

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:49:22 +09:30
dongliang
2ec738e3a4 feat: 二维码圆角风格 - 每个模块都是圆角矩形
- 白色背景圆角 8%
- 每个黑色模块圆角 30%
- 模块间有微小缝隙,更精致
- 自动裁剪 ZXing 空白边距

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:45:51 +09:30
dongliang
c048c27751 fix: 二维码圆角加大(6%→12%)参照iPhone风格
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:42:30 +09:30
dongliang
b9a84cb48c feat: 二维码添加圆角效果
使用 Canvas + PorterDuff 裁剪,6%圆角半径

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:39:01 +09:30
dongliang
3271e704d6 fix: 缩小二维码白色边框(静默区 4格→1格)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:34:15 +09:30
dongliang
4bd0f82ce9 fix: SplashFragment 绑定检查时正确存入用户数据到 UserPrefs
API返回Success时解析用户信息并存入,而不是直接跳首页。
userId<=0时视为未绑定,导航到二维码页。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:28:32 +09:30
dongliang
df2e36da91 fix: Retrofit @Body 参数改为 HashMap 修复泛型擦除问题
Map<String, Any> 在 Kotlin 编译后变为 Map<String, ?>, Retrofit 不支持通配符类型。
改为 HashMap<String, Any> 是具体类,不存在泛型擦除问题。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 17:04:39 +09:30
dongliang
d06bf11b95 feat: 绑定页UI对齐原型图V3
- 二维码页面:标题移到上方,白色圆角背景框,说明文字居中
- 新增配对中Loading状态(spinner + "正在配对…")
- 颜色值对齐原型图(blue=#3B9EFF, green=#4ADE80, orange=#FFB340, red=#FF6B6B)
- 新增 bg_qr_frame.xml 白色圆角背景

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 16:46:59 +09:30
dongliang
cd49471a15 fix: 移除 HomeFragment 中残留的 mqttManager 引用
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 16:32:04 +09:30
dongliang
1b61abb380 feat: 设备绑定与配对模块
新增:
- SplashFragment 启动分发(初始化+绑定检查+导航到Home或Bind)
- BindFragment 二维码配对页面(ZXing生成QR码+MQTT绑定监听)
- WatchBindInfo 绑定信息数据类

修改:
- nav_main.xml startDestination改为SplashFragment,添加导航action
- HomeFragment 移除初始化逻辑到Splash,添加MQTT解绑处理
- CommonApi getWatchByImei返回类型改为WatchBindInfo

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 16:23:37 +09:30
dongliang
a3c1f1d632 feat: MQTT通信模块 - TCP连接+消息分发
新增:
- MqttConfig MQTT连接配置(TCP:1883, 心跳120s, 自动重连)
- MqttManager 连接管理器(连接/订阅3个Topic/消息解析/EventBus分发)
- AppEvent 新增 MqttConnected/MqttDisconnected/MqttMessageReceived

修改:
- build.gradle.kts MQTT_URL改为MQTT_HOST(TCP不需要路径)
- EnvConfig 适配MQTT_HOST
- HomeFragment 连接MQTT并显示连接状态

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 15:59:26 +09:30
dongliang
977c2dd0d2 fix: updateStatus 添加 try-catch 防止系统关机时 DeadSystemException
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 15:07:22 +09:30
dongliang
fb884ea816 feat: 应用初始化模块 - 崩溃恢复与时间更新
新增:
- CrashHandler 崩溃日志记录+杀进程(系统自动重启Launcher)

修改:
- WatchApplication 注册 CrashHandler
- NavBarHelper 新增 updateTime() 方法
- HomeFragment 添加每秒时间更新定时器

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 14:56:23 +09:30