13 Commits
Author SHA1 Message Date
zhang96110 1bda91b93e fix: 修复consumableImport.js路由级authMiddleware拦截所有/api请求的问题
consumableImport.js挂载在/api根路径,使用router.use(authMiddleware)
会拦截所有/api/*请求(包括公开路由如/api/auth/login),
导致登录等公开接口返回401。

修复方案:移除router.use(authMiddleware),改为在每个具体路由上
单独添加authMiddleware中间件。
2026-04-02 03:35:23 +00:00
zhang96110 dc20bdba1f fix: 修复14个中等问题(安全+稳定性)
后端安全修复:
- devices.js: page/pageSize parseInt+范围限制、CSV导入path.basename防路径遍历
- tickets.js: CSV导出收集所有metadata key、评价限制completed状态
- users.js: 重置密码加权限检查(仅管理员或本人)
- systemSettings.js: Boolean改显式判断(修复false存储为true)
- inventory.js: 空数组Array.isArray检查(修复无法清空目标机房)
- statistics.js: 在线率改用runningDevices计算
- operationLogs.js: DATE()改strftime兼容SQLite
- devicePorts.js: 端口更新白名单过滤(防修改portId/deviceId)
- server.js: 生产环境禁用sync alter

前端修复:
- api/index.js: 401优先React Router导航(保留SPA状态)
- Scene.jsx: useFrame仅target变化时更新(减少不必要矩阵计算)
- vite.config.mjs: 移除Vue插件残留(unplugin-vue-components)
2026-04-02 03:10:06 +00:00
zhang96110 ea67951dd4 fix: 移除扫码入库下拉框的 status=active 过滤,显示全部耗材 2026-04-01 09:34:20 +00:00
zhang96110 f1aa887b6b fix: 修复 fetchAllConsumablesForScan 初始化顺序导致的 ReferenceError 2026-04-01 09:23:05 +00:00
zhang96110 9d29599210 fix: 修复耗材扫码入库下拉框数据不全和搜索报错
- 新增 allConsumablesForScan 获取全部活跃耗材,解决下拉框只显示分页数据
- Select 改用 optionFilterProp=label 替代 option.children.toLowerCase() 修复 TypeError
2026-04-01 09:20:48 +00:00
zhang96110 9c0007a817 fix: 修复创建耗材时手动填写库存被空SN列表覆盖为0的bug
- 空snList不再覆盖currentStock
- 有SN时取手动库存与SN数量的较大值,允许后续补扫
2026-04-01 09:08:19 +00:00
zhang96110 00cdd481d4 fix: 修复设备管理页面前后端分页混合导致的数据闪烁问题
- 移除 append/loadMore 模式,改为纯后端分页
- 删除前端 slice useEffect,翻页时只调用后端请求
- 清理 loadMoreRef/hasMoreRef/deviceLoadingMore 等无用变量
- 删除 currentPageDevices state,allDevices 即当前页数据
2026-04-01 07:44:57 +00:00
zhang96110 de7da77c11 fix: 修复后端12个+前端5个高优先级问题
后端:
- devices.js: 修复 newRackId 重复声明、批量移动加事务、ID生成改MAX聚合
- tickets.js: 添加工单状态机校验、req.body白名单过滤
- roles.js: init-roles 添加 authMiddleware
- backup.js: 备份列表只读4KB头部,压缩文件超1MB跳过
- consumables.js: SN查询改用数据库LIKE替代全表扫描
- consumableRecords.js: 出入库加 SELECT FOR UPDATE 行级锁
- inventory.js: not_found 状态判断从 abnormal if 内移到 else if
- idleDevices.js: 删除重复的 batch-restore 路由定义(182行)
- cables.js: 接线冲突检测增加反向端口检查

前端:
- AuthContext.jsx: 初始化时调用 fetchProfile 验证token、Error提取message
- api/index.js: backupAPI.download 返回Promise、checkAdmin改POST
- Login.jsx: checkIsFirstUser 静默处理错误
- DeviceManagement.jsx: 导出 currentPage scope 使用 currentPageDevices
2026-04-01 07:27:19 +00:00
zhang96110 1d7a83bbe8 fix: 修复盘盈设备页面 res.data 多取一层导致 TypeError 崩溃 2026-04-01 06:31:56 +00:00
zhang96110 3ce7ea40de fix: 修复加密失效、权限失效、盘点页面崩溃等问题
- secureStorage.js: 移除硬编码密钥,改为运行时动态生成密钥
- AuthContext.jsx: 修复 hasPermission() 始终返回 true 的权限失效问题
- auth.js: 登录接口返回用户角色信息,支持前端权限判断
- InventoryManagement.jsx: 修复 res.data 多取一层导致 TypeError 崩溃
2026-04-01 06:26:03 +00:00
zhang96110 6eda3ae1f2 fix(security): 修复多个严重安全漏洞和运行时崩溃
- devices.js: 修复 hasRoomField 重复 const 声明导致模块加载失败
- devices.js: 修复 batch-status 路由 affectedCount 未定义导致崩溃
- devices.js: 修复 sequelize.literal SQL 注入,转义 LIKE 通配符和字段名
- server.js: 修复 initializeApp() 未 await 导致服务器在初始化前接收请求
- backup.js: 添加 resolveBackupPath() 防止路径遍历攻击(6处)
- inventory.js: 用 bulkCreate 替代原始 SQL 拼接,消除 SQL 注入
- systemSettings.js: 添加全局 authMiddleware,修复敏感操作无认证
- dangerousOperations.js: 添加全局认证,修复日志清理功能完全不可用
- background.js: 添加文件名安全检查、扩展名白名单、路径校验
2026-04-01 06:02:55 +00:00
zhang96110 fa26964cbb fix(frontend): 给全局 axios 实例添加 Token 拦截器修复多页面列表加载失败
- 16 个页面文件 100+ 处直接使用 axios 而非封装的 api 实例
- 导致请求不携带 Token,后端返回 401 列表加载失败
- 给全局 axios 默认实例添加请求/响应拦截器自动附加 Token
2026-04-01 04:51:24 +00:00
zhang96110 fa65eecf5e fix(devices): 修复 batch-status 路由 affectedCount 未定义导致崩溃
- 添加缺失的 Device.update() 调用,实际执行批量状态更新
- 定义 affectedCount 变量,解决 ReferenceError 崩溃问题
- 修复前 PUT /batch-status 必定抛出 500 错误
2026-04-01 03:31:42 +00:00