# 2026-04-28 工作记录

## 搜索页面条码识别 bug 修复

- 修复搜索页面 `res.data.orders` → `res.data.all_orders`（工单和采购订单列表API返回字段名均为 `all_orders`）
- 搜索页添加条码格式识别：`wo:ID`→工单、`item:ID`→物品、`warehouse:ID`→容器、`po:ID`→采购订单
- 容器跳转用 `uni.$emit('barcode-navigate-container')` + `switchTab`（tabBar页面不能 navigateTo）
- 搜索页添加扫码按钮（📷）
- App端扫码：`uni.getSetting` 仅小程序支持，App端需用 `plus.android` 检查权限
- 条件编译：`#ifdef APP-PLUS`、`#ifdef MP-WEIXIN`、`#ifdef H5` 分平台处理

## download_app 改造

- `download.php`：改为扫描 `__DIR__/../` 根目录下的所有 `.apk`，用 `filemtime()` 取最新，不再依赖文件名格式
- `index.php`：版本信息同时显示文件名和修改时间

## 订单详情页打印功能

- `order-detail.vue` 右上角添加打印按钮 🖨
- 点击后用 LcPrinter 插件打印：标题（加粗大字）/ 备注 / 状态 / 创建日期 / 条形码 `po:ID`（height=4，barcodeType=73）
- 条件编译 `#ifdef APP-PLUS`，非 App 端 toast 提示不支持
- 订单详情页补充 `order.Styles`（样式）字段显示，插在"链接"和"备注"之间，与 web 端对齐
- 同步修正打印函数第三行：原打印"状态"→改为打印 `Styles`（样式）

## 打印初始化代码补全

- 在以下四个页面的打印函数中统一加入初始化代码（`initPrinter` + `setConcentration` + `setLineSpacing`），参照 `printer-test.vue` 写法：
  - `order-detail.vue` → `printOrder()`
  - `show-workorder.vue` → `printWorkOrder()`
  - `item-detail.vue` → `printItem()`
  - `warehouse.vue` → `printContainer()`

## 用户登录失败日志表

- `apiUsers.go` 新增 `TabUserLoginFailLog` 表结构：记录 `username`、`userID`、`IP`、`userAgent`、`reason`（password_error / user_not_found）、`count`（连续失败次数）、`created_at`、`updated_at`
- `InitUsersRouter` 中新增 `AutoMigrate(&TabUserLoginFailLog{})`
- 登录成功时清除该用户失败记录；密码错误和用户不存在时调用 `recordLoginFail()` 记录/更新失败日志（24小时内累计次数）
- `recordLoginFail()` 在 `TabUserLoginFailLog` 结构体后定义
