# 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` 结构体后定义 ## apiWarehouse.go 查重完善 - `add_container` 接口:添加同层级容器 Title 查重(`parent_id` + `title` + `deleted_at IS NULL`),重复返回 `container_title_exist` - `add_item` 接口:已有查重逻辑(`Name` + `SerialNumber`)保持不变 ## 完善 updateSysAdminsCash 函数 - 原函数为空,现实现: 1. 查询 `admins` 用户组 ID 2. 查询该组所有成员的 `TabUserGroupBinds` 记录 3. 提取所有 `UserID` 更新到 `sysAdmins` 缓存切片 4. 组不存在或查询失败时清空缓存 ## Web 前端系统管理员入口 - 后端 `getinfo` 接口返回 `isSysAdmin` 布尔值(不再暴露完整管理员列表) - 后端新增 `POST /users/sysadmins` 接口,仅系统管理员可访问,返回完整 `sysAdmins` 数组 - 前端 `userStore`:`isSysAdmin` 改为 ref,直接从后端获取 - `AppHeader.vue` 用户菜单:当 `isSysAdmin` 为 true 时显示「系统管理」入口(琥珀色盾牌图标) - 新建 `SysAdminView.vue`:4 个标签页占位符(用户管理、用户组、登录日志、系统配置),页面内调用 `authApi.sysAdmins()` 获取管理员列表 - 路由 `/sysadmin`:添加 `requireSysAdmin` 元信息,路由守卫拦截非管理员访问