- 顶栏 TenantDropdown 替换为 ProjectDropdown(新建 widget)
- 进入时拉 /system/project/simple-list;仅当本地 projectId 不在列表时
才回退到首项,避免静默改写用户选择
- 空列表不渲染,避免出现永远空下拉
- 新增"物联运维"按钮,走 OAuth2 authorization code 流程跳 IoT 前端
- state 使用 crypto.randomUUID() / getRandomValues() 生成(CSRF 防护)
- VITE_IOT_BASE_URL 未配置时按钮隐藏,不再硬编码兜底 URL
- 使用原生 <button disabled> 替代 <a role="button">,修复可访问性
- 新增 /sso-callback 回调页 + /system/sso/callback API
- 挂载后立即 history.replaceState 清 code/state,避免二次 exchange
- API 层做 snake_case → camelCase 映射,统一前端风格
- 文档化 redirectUri 必须与 OAuth2 客户端 redirectUris 白名单一致
- authStore 新增 ssoLogin,与 authLogin 抽取共用 postAuthSuccess
- token 为空直接抛错,fetchUserInfo 失败回滚 token 避免 401 循环
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Effects 目录
effects 目录专门用于存放与轻微耦合相关的代码和逻辑。如果你的包具有以下特点,建议将其放置在 effects 目录下:
- 状态管理:使用状态管理框架
pinia,并包含处理副作用(如异步操作、API 调用)的部分。 - 用户偏好设置:使用
@vben-core/preferences处理用户偏好设置,涉及本地存储或浏览器缓存逻辑(如使用localStorage)。 - 导航和路由:处理导航、页面跳转等场景,需要管理路由变化的逻辑。
- 组件库依赖:包含与特定组件库紧密耦合或依赖大型仓库的部分。
通过将相关代码归类到 effects 目录,可以使项目结构更加清晰,便于维护和扩展。