lvmeng
4a2abf6eec
feat(form): 重构净菜包装表单实现动态字段和提交功能
...
- 移除固定 DTO 类型,改用 Map<String, Any> 接收 API 参数
- 实现动态表单字段配置,支持净菜和餐品两种包装类型
- 添加下拉选项动态加载和自动填充溯源码功能
- 实现表单验证和通用提交逻辑
- 添加回调版本的数据加载方法提高性能
- 优化字段绑定和值映射机制
2026-06-01 16:51:47 +08:00
lvmeng
5d6df58e46
feat(form): 实现餐品净菜包装表单功能
...
- 新增 CHILDREN 字段类型支持动态子列表
- 实现包含食材的嵌套表单结构
- 添加餐品包装相关字段配置
- 集成下拉选项和日期选择器组件
- 创建食材行适配器处理子列表渲染
- 更新表单布局和样式资源文件
2026-06-01 14:18:16 +08:00
lvmeng
c4a2105737
feat(form): 新增净菜包装功能并优化表单字段类型
...
- 添加 CleanPackActivity 页面用于净菜包装表单
- 将 NUMBER 字段类型拆分为 INTEGER 和 DECIMAL 类型
- 更新 FormFieldAdapter 适配新的字段类型
- 在 HomeV2Activity 中添加跳转到净菜包装页面的功能
- 创建 ApiServiceV2、NetViewModelV2 和 RemoteRepositoryV2 处理新接口
- 添加营养相关模型类和分页组件
- 在 AndroidManifest.xml 中注册新 Activity
2026-06-01 11:21:04 +08:00
lvmeng
d7a1b75fef
feat(app): 添加 HomeV2Activity 并移除设备角色相关功能
...
- 在 AndroidManifest.xml 中注册新的 HomeV2Activity 页面
- 移除 BaseApp 中的设备角色判断和秤服务相关初始化代码
- 添加蓝色和橙色渐变按钮背景资源文件
- 修改 InitActivity 默认跳转至 HomeV2Activity 页面
- 移除与设备角色相关的路由逻辑代码
2026-06-01 10:42:47 +08:00
lvmeng
11963b8b12
feat(form): 添加动态表单组件和下拉选择功能
...
- 新增 FormField 数据模型定义五种字段类型(文本、数字、下拉、日期、固定值)
- 实现 FormFieldAdapter 适配器支持动态表单渲染和数据绑定
- 添加 DropdownPopup 弹窗组件和 DropdownAdapter 适配器
- 新增多个圆角背景资源文件(bg_gray_radius10、bg_white_radius10_stroke 等)
- 在 Common.kt 中添加 hideKeyboard 扩展函数用于隐藏软键盘
- 创建 DictType 数据模型用于字典类型数据传输
- 添加表单项和下拉项的布局文件(list_item_form_field、list_item_dropdown 等)
2026-06-01 10:19:07 +08:00
lvmeng
80d80e7e63
chore(utils): 注释掉 DecimalAdapter 类的实现代码
...
- 将整个 DecimalAdapter 类及其相关导入语句注释掉
- 包含 write 和 read 方法的完整实现都被注释
- 相关的包声明和使用方式注释也一并被注释掉
2026-05-25 18:01:18 +08:00
lvmeng and Claude Sonnet 4.6
2d88ce1479
refactor(scale): 修复线程安全、生命周期与连接管理问题
...
- ScaleWebSocketServer:三个状态 Map 改为 ConcurrentHashMap,connectionCount 改为 AtomicInteger
- ScaleServiceManager:新增 serviceScope 统一管理协程生命周期,新增 @Volatile isStarted 防重复启动
- ScaleWebSocketClient:doConnect 写入新连接前先 close() 旧连接,防止 TCP 资源泄漏
- MdnsDiscoveryManager:移除 isResolving 上多余的 @Volatile 注解
- MasterScaleActivity:全限定类名改为 import + 短类名
- WeightUtil:删除 WeightListenerImpl 中注释掉的调试代码
- scale包架构分析.md:同步更新架构文档,已修复问题压缩为汇总表
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 17:20:15 +08:00
lvmeng and Claude Sonnet 4.6
d580040c55
feat(fragment): 上传失败时透传接口错误原因至 toast 提示
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 18:17:26 +08:00
lvmeng and Claude Sonnet 4.6
00bf478185
feat(fragment): 新增默认减重配置功能
...
- SpTool 新增 configWeight 属性,持久化存储默认减重克数
- 新增 WeightConfigFragment 及对应布局,支持数字输入和回填
- SingleFragmentActivity 注册 WEIGHT_CONFIG 页面类型
- SettingActivity 在食材采集下方新增减重配置入口
- PrepareFoodActivity 打开时从 SpTool.configWeight 初始化 initialWeight
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-19 16:39:38 +08:00
lvmeng
ea79e584f3
refactor(utils): 简化 toast 扩展函数实现
...
- 移除多余的 null 检查代码块
- 删除已注释的旧版 toast 实现
- 简化条件判断语法
- 保留 ToastUtil 统一调用方式
2026-05-19 15:38:52 +08:00
lvmeng
1140d6bf91
refactor(ui): 提取 WeightUtil.getStateStr 统一秤状态文案,量程溢出时红色背景提示
2026-05-19 15:25:03 +08:00
lvmeng
f3dbb3fe68
Merge remote-tracking branch 'origin/dev_260316_新设备' into dev_260316_新设备
2026-05-19 14:55:18 +08:00
mazengfei
dc91cdfa2e
超量显示改为量程溢出
2026-05-19 14:42:29 +08:00
mazengfei
a6ce3a1ed3
超量显示改为量程溢出
2026-05-19 14:41:51 +08:00
lvmeng
292fdade81
feat(ui): 添加用料明细预览功能和清空数据确认对话框
...
- 在 SubmitFoodActivity 中添加右侧图标显示并实现点击打开用料明细预览弹窗
- 新增 GoodsPreviewDialog 用于展示底部弹出的用料明细列表
- 创建 GoodsPreviewAdapter 和相关布局文件实现用料列表展示
- 添加 ic_list_view 图标用于右上角按钮
- 在 VectorCollectionFragment 中为清空数据按钮添加确认对话框
- 优化 WeightUtil 工具类添加可用性检查避免异常调用
2026-05-19 11:15:33 +08:00
lvmeng
aa539d87d0
fix(base): 修复Loading弹窗管理和超时机制
...
- 添加了Loading超时自动关闭功能,默认15秒超时
- 实现了Activity销毁时只关闭自己的Loading,防止误关其他页面
- 优化了Loading重复显示时的节流处理,避免ANR问题
- 在BaseActivity中增加了showLoading方法的超时参数支持
- 为图片上传等长时间操作添加了60秒超时兜底机制
- 增加了相关日志便于调试Loading的显示和关闭流程
2026-05-18 18:11:26 +08:00
lvmeng
e570707216
fix(seasoning): 移除调试用的空布局点击事件
...
- 注释掉loadMockData()方法调用
- 防止生产环境中误触加载模拟数据功能
2026-05-18 16:12:18 +08:00
lvmeng
87ca6abe1b
fix(init): 解决Activity启动时序竞态问题
...
- 将finish()调用延迟到下一帧执行,避免与LaunchActivityItem事务竞态
- 修复"Activity client record must not be null"偶发崩溃问题
- 将goSampling方法改为suspend函数确保协程串行执行
- 保证startActivity在finish()之前完成,防止页面跳转失败
2026-05-18 16:05:26 +08:00
lvmeng
28784fa7c1
feat(db): 为数据库调试页面添加多字段动态筛选功能
...
- 在 CookFoodDao、CookFoodGoodsDao、SeasoningDao 和 SeasoningSlotDao 中添加 RawQuery 支持
- 为各数据访问对象添加动态条件分页查询和统计方法
- 在 DbRepository 中扩展动态查询相关方法
- 在 DbViewModel 中实现 DbInspectFilter 数据类和 buildQueries 动态 SQL 构建逻辑
- 更新 DbInspectFragment 添加筛选字段配置和 UI 生成逻辑
- 重构筛选条件收集和查询流程,支持精确匹配和模糊搜索
- 修改刷新按钮为查询按钮,更新 Tab 切换时的筛选框重建逻辑
- 调整设置页面标题从"设备设置"改为"设置"
2026-05-18 15:52:46 +08:00
lvmeng
df01312577
feat(resources): 添加网格和列表布局图标资源
...
- 添加 ic_layout_grid.xml 矢量图标文件
- 添加 ic_layout_list.xml 矢量图标文件
- 配置图标尺寸为 24x24 dp
- 设置视口宽度和高度为 24
- 定义灰色填充颜色 #6666
- 实现网格布局图标的路径数据
- 实现列表布局图标的路径数据
2026-05-18 14:18:32 +08:00
lvmeng
7d3cb27b6e
fix(ui): 修复调料列表布局切换功能
...
- 将布局容器从 LinearLayout 改为 FrameLayout 以支持更好的定位控制
- 调整标题文本的尺寸和对齐方式,设置固定高度 50dp
- 更新切换按钮的内边距并调整其在父容器中的位置
- 更改切换按钮的图标资源名称从 ic_switch_box 为 ic_layout_list
- 优化布局切换逻辑,图标始终显示目标布局样式
- 在切换时动态更新按钮图标以反映当前布局模式
2026-05-18 14:17:59 +08:00
lvmeng and Claude Sonnet 4.6
ef6a29ffb0
fix(food): 修复并发竞态、双重刷新及搜索态丢失问题
...
- FoodListFragment:添加 currentJob 取消机制,防止快速切换时旧请求覆盖新数据
- FoodListFragment:缓存 currentFoodName,返回二级页面后 onResume 复用搜索词
- CookingModeActivity:RadioGroup+RadioButton 替换为 LinearLayout+CheckedTextView
- CookingModeActivity:新增 selectTab() 统一管理选中态,内置幂等保护
- CookingModeActivity:重构 onNewIntent,消除切换餐次时 getDishList 被双重调用的问题
- VectorCollectionFragment:Error/Success 消费后重置 StateFlow,防止 replay 导致 toast 重复弹出
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-18 12:09:21 +08:00
lvmeng
d7f9fb05fb
fix(food): 修复菜品列表刷新和净材对话框显示问题
...
- 在 Fragment 初始化时启用下拉刷新功能
- 将数据加载逻辑移至 onResume 方法中并添加异常处理
- 添加 onHiddenChanged 回调以在 Fragment 显示时重新加载数据
- 更新净材对话框为空时的提示文本和按钮样式
2026-05-18 11:49:57 +08:00
lvmeng
d9cfd3007d
fix(ui): 修复搜索列表状态管理和界面交互问题
...
- 添加了 clipToOutline 和 foreground 属性以改善列表项视觉效果
- 修复了 UiState 处理中未重置商品列表状态的问题
- 优化了 searchFood 方法中的状态重置逻辑,避免重复调用
- 修复了空视图点击监听器设置时机,确保在状态视图挂载完成后添加监听器
- 移除了重复的搜索调用,解决因 setText 触发的多次搜索问题
2026-05-18 09:43:42 +08:00
lvmeng
c1f52c6337
fix(vector): 解决食材搜索列表状态管理问题
...
- 添加 resetGoodsListState 方法重置商品列表状态
- 添加 UiState.Error 状态处理并显示错误提示
- 搜索前重置商品列表状态避免状态残留
- 更新空数据显示文本为更明确的提示信息
- 点击空布局时触发重新搜索功能
2026-05-18 09:03:45 +08:00
lvmeng
5723209614
feat(app): 添加测试设备支持和芯片布局优化
...
- 在 BaseApp 中根据 BuildConfig.IS_TEST_DEVICE 配置设备 ID
- 更新 build.gradle 配置 IS_TEST_DEVICE 构建字段
- 添加 x86_64 架构支持用于 Windows 模拟器调试
- 优化 RawMaterialsDialogUtils 中的 Chip 布局和测量逻辑
- 在 WeightUtil 中添加架构检查避免非 ARM 设备崩溃
- 实现秤 SDK 可用性检测和异常处理机制
2026-05-15 17:16:00 +08:00
lvmeng
d080ca0690
refactor(setting): 优化设置页面适配器点击事件处理
...
- 移除旧的直接点击监听器实现
- 集成防抖动点击事件处理机制
- 使用新的点击事件委托方式提升用户体验
- 改进适配器初始化逻辑结构
2026-05-15 15:21:44 +08:00
lvmeng and Claude Sonnet 4.6
1024d82958
refactor(ui): 将设置页面由多个 LinearLayout 重构为 RecyclerView 实现
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-15 15:18:26 +08:00
lvmeng
8b19da2710
style(ui): 调整收藏食物页面界面样式
...
- 添加 dp 扩展函数导入用于尺寸转换
- 为删除图标设置左右 25dp 内边距以改善视觉效果
2026-05-15 14:52:28 +08:00
lvmeng and Claude Sonnet 4.6
25167829cc
feat(ui): 在已采集食材页添加清除全部数据功能
...
- ObjectBox 新增 removeAll() 方法清除所有向量数据
- DbViewModel 新增 clearAllCollectedFood() 方法并刷新列表
- CollectedFoodActivity 右上角添加垃圾桶图标,点击通过 CommonDialog 二次确认后清除
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-15 14:38:40 +08:00
lvmeng
e38f19ac1b
refactor(dialog): 移除食材搜索对话框中的测试代码
...
- 删除 buildMockGoodsList 扩展函数及相关导入
- 移除 FoodSearchDialog 中的假数据点击事件监听器
- 移除 VectorCollectionFragment 中的假数据填充逻辑
- 优化 RawMaterialsDialogUtils 中的 Chip 样式配置
- 清理相关文件的无用导入声明
2026-05-15 14:28:36 +08:00
lvmeng
ada83b64e6
refactor(dialog): 优化 CommonDialog 代码质量
...
- 修复 setPositiveButton 中 lambda 隐式参数 it 被遮蔽的问题
- 提取 isMaster 为局部变量,消除重复计算
- addContentView 挂载前先 removeAllViews(),防止重复添加
2026-05-15 11:56:50 +08:00
lvmeng
d3f02620af
refactor(db): 将 entity 包拆分为 db/entity(数据库实体)和 model(数据模型)
...
- 新建 db/entity 包,迁入 4 个 Room 实体类:CookFoodEntity、CookFoodGoodsEntity、SeasoningEntity、SeasoningSlotEntity
- 新建 model 包,迁入 7 个普通数据模型:FoodRecord、GoodsItem、CookFoodDTO、CookFoodGoodsDTO、GoodsNameQueryDTO、CollectedFoodItem、DataBean
- 删除原 entity 包
- 更新全部引用文件的 import 路径(共 33 个文件)
2026-05-15 11:46:37 +08:00
lvmeng
deb03a0c37
refactor(base): 重构基础组件和数据库访问层
...
- 修复 BaseActivity 中 rightIconActon 方法名拼写错误
- 重命名 appViewModel 为 dbViewModel 以统一数据库访问实例
- 优化 BaseApp 中的共享偏好设置获取逻辑
- 移除 GlobalData 中硬编码的应用ID和SDK密钥
- 重命名 NetworkUtils 为 NetworkUtil 并增强网络连接检测
- 重构 RemoteRepository 中的API调用方法结构
- 在多个Activity和Fragment中统一使用dbViewModel替代appViewModel
- 优化食品列表合并烹饪中条目的逻辑处理
- 调整文件上传时的媒体类型定义
- 清理注释和代码结构以提高可维护性
2026-05-15 11:24:44 +08:00
lvmeng
b562694665
fix(ui): 修复子设备调料数据有时不显示的问题
...
将 observeScaleData 中的 collectLatest 改为 collect,
避免多个秤数据并发到来时 block 被取消导致 ts 已记录但
rawWeightMap 未更新,造成后续数据被永久跳过的竞态问题。
2026-05-15 10:14:48 +08:00
lvmeng
64586175ff
fix(ui): 修复烹饪模式页面意图处理问题
...
- 移除了多余的空值检查操作符以简化代码
- 注释掉未使用的 isCooking 变量
- 使用 getOrNull 安全访问 fragmentList 避免越界异常
- 简化了 getIntentExtra 的调用方式
2026-05-15 09:55:51 +08:00
lvmeng
e8431de53d
refactor(ui): 将搜索框清空职责从getDishList移至调用方,修复下拉刷新误清输入框问题
2026-05-15 09:55:08 +08:00
lvmeng
4ccd4eaad0
fix(global): 将秤生命周期提升至进程级,修复子设备空白页和秤停止响应问题
...
- WeightUtil 初始化移至 BaseApp.onCreate(),通过 ActivityLifecycleCallbacks
在最后一个 Activity 销毁时才调用 stopContinuousRead()
- InitActivity 删除 WeightUtil 的初始化/停止调用
- startNextPage() 跳转完成后执行 finish(),防止 InitActivity 残留任务栈
导致返回时出现空白页,及被系统回收时触发 onDestroy 意外停止秤读取
2026-05-15 08:43:43 +08:00
lvmeng
b44f4aae5a
refactor(food): 统一商品数据模型字段映射逻辑
...
- 在 FoodSearchDialog 中添加 oldGoodsId 字段赋值逻辑
- 在 VectorCollectionFragment 中统一商品 ID 映射处理
- 将 goodsId 字段更新为 materId 的值或空字符串
- 保留原始 goodsId 值到 oldGoodsId 字段用于回溯
- 简化代码中的循环变量引用方式
2026-05-14 15:42:07 +08:00
lvmeng
fee9598689
fix(ui): 修复初始化页面导航状态和设置页面跳转逻辑
...
- 在InitActivity中重写onNewIntent方法以重置导航状态
- 移除SettingActivity中的无用toast导入
- 简化SubmitFoodActivity启动语法
- 将设置页面清除数据后的跳转目标从HomeActivity改为InitActivity
2026-05-14 15:32:39 +08:00
lvmeng
b24435744c
feat(setting): 添加测试调料拿取功能并优化界面交互
...
- 在设置页面添加测试调料拿取入口并实现跳转功能
- 优化食材搜索对话框的网格布局管理器初始化逻辑
- 为未识别食材对话框添加重新识别和取消回调处理
- 优化准备食材页面标题文字显示效果
- 修复调料切换按钮点击防抖处理
2026-05-14 15:23:34 +08:00
lvmeng
a257b03b9d
refactor(sampling): 移除注释代码
2026-05-14 14:37:07 +08:00
lvmeng
89fff7c2b0
refactor(ui): 重构采样模式界面和数据处理逻辑
...
- 将 RadioButton 替换为 CheckedTextView 并调整布局结构
- 添加安全索引访问避免数组越界异常
- 优化数据库查询方法增加回调版本
- 更新崩溃处理器重启目标页面
- 添加单按钮对话框支持
- 优化采样模式页面数据加载和刷新逻辑
- 调整重量计算和数据处理流程
- 修复页面跳转和数据传递问题
2026-05-14 14:24:25 +08:00
lvmeng
6392b76ac2
fix(cooking): 解决搜索框内容清除和称重逻辑问题
...
- 在 CookingModeActivity 中添加 clearSearchText 方法用于清除搜索框内容
- 在 FoodListFragment 中添加协程调度器导入并实现空搜索时自动清除功能
- 在 SubmitFoodActivity 中新增初始重量和初始化状态变量
- 修改称重清零逻辑,清零后重置初始重量为 0
- 实现净重计算逻辑,使用秤读数减去初始重量得到实际净重
- 更新重量显示逻辑,使用净重数值进行单位转换和显示
2026-05-14 09:54:56 +08:00
lvmeng and Claude Sonnet 4.6
8398bd4fd3
fix(global): App 启动时恢复本地保存的环境地址
...
- SpTool 新增 baseUrl 属性,统一管理环境地址的持久化读写
- EnvSwitchDialog 改用 SpTool.baseUrl 保存,移除直接调用 SpTool.put
- BaseApp.onCreate 启动时读取 SpTool.baseUrl 并赋值给 GlobalData.appBaseUrl
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 18:13:09 +08:00
lvmeng and Claude Sonnet 4.6
535da33aab
refactor(fragment): 改用回调方式查询菜品列表,修复刷新卡死问题
...
- FoodListFragment 改用 searchFoodListWithCallback 替代 SharedFlow collect,
彻底解决下拉/上拉因数据相同导致不触发的问题
- NetViewModel 新增 searchFoodListWithCallback 回调版本
- CookingModeActivity loadFragment 改为 show/hide 方式,切换餐次不重建 Fragment
- 修复数据为空时未调用 finishRefresh 导致加载动画卡死的问题
- 新增 fragment-ktx 依赖,支持 by viewModels()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 17:54:59 +08:00
lvmeng and Claude Sonnet 4.6
120f5432de
refactor(fragment): FoodListFragment 独立持有 NetViewModel
...
每个 FoodListFragment 通过 by viewModels() 持有独立的 NetViewModel 实例,
searchFoodState 各自隔离,不再共享 Activity 的 netViewModel。
- 删除 pendingDinnerType 字段及餐次过滤逻辑
- initObserver 改为收 Fragment 自身的 netViewModel.searchFoodState
- getDishList 直接调 netViewModel.searchFoodList,不再经由 Activity 中转
- CookingModeActivity 删除 getFoodList() 透传方法
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 17:24:31 +08:00
lvmeng and Claude Sonnet 4.6
61d11c6a78
fix/feat: 修复数据不稳定弹窗重复弹出 & 新增切换环境功能
...
fix: FoodRecognizeActivity 数据不稳定时弹窗会重复弹出
- 持有 unstableDialog 引用,通过 isShowing 防止重复弹出
feat: 新增切换环境功能(测试/UAT/生产)
- GlobalData 新增 KEY_BASE_URL,修正 UAT 端口为 8083
- SettingActivity 开发模式下显示「切换环境」入口
- 新增 EnvSwitchDialog 及其布局文件
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 17:18:30 +08:00
lvmeng and Claude Sonnet 4.6
301f470274
fix(fragment): 修复切换餐次时数据串台问题
...
三个餐次 Fragment 共享同一个 searchFoodState,导致早餐的本地数据会被错误合并到午餐/晚餐列表中。
修复方案:
- 新增 pendingDinnerType 字段记录本次请求对应的餐次
- 响应回来时比对餐次,忽略非本 Fragment 发起的请求结果
- 确保每个 Fragment 只处理自己发起的请求数据
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 17:16:34 +08:00
lvmeng and Claude Sonnet 4.6
67d64848de
feat(activity): 搜索菜品直接刷新列表,切换餐次自动清空搜索框
...
- jumpSearch 改为调用 FoodListFragment.getDishList(foodName),不再跳转 FoodSearchActivity
- 切换餐次时清空输入框,用 isClearingByTabSwitch 标志避免重复请求
- 手动清空输入框时自动触发查全部数据
- FoodListFragment.getDishList 新增 foodName 参数,支持按名称过滤
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 16:22:46 +08:00