Files
ops2/.workbuddy/memory/2026-04-28.md
T
2026-04-28 18:13:44 +08:00

61 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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=4barcodeType=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` 元信息,路由守卫拦截非管理员访问