Feature/design frontend#6146
Conversation
- Add BaseUrlHasVersionPrefix/StripVersionPrefix helpers in relay/common - Auto-strip /v1 from requestURL when baseURL already contains version prefix - Normalize version prefix in path-to-relay-mode matching - Update channel billing, models fetch, upstream sync, video proxy to use GetFullRequestURL - Update deepseek, moonshot, openai, perplexity, siliconflow adaptors
- Add RoleOperatorAdmin (5) between common user and admin - Update backend auth middleware and API router for role-based access - Adjust user controller to support promote/demote with specific roles - Update frontend roles, sidebar config, and user management UI - Add i18n translations for operator admin across all locales
- Add docker-deploy skill documentation - Add PROJECT_FEATURE_SPEC.md for feature planning - Add AGENTS.md files across backend modules - Add design/ directory with HTML mockups and assets - Add docs/issue-analysis/ for bug tracking
- Redesign all major features (channels, keys, models, users, wallet, profile, playground, subscriptions, redemption-codes, usage-logs, system-settings) - Refactor shared UI components (badge, button, card, input, table, sidebar) - Update layout header and section page layout to match new design language - Add new components: channels-stats, plans-grid, self-subscriptions-table, settings-category-tabs, users-stats - Revamp auth pages (sign-in, error pages) with new visual style - Update theme tokens and CSS variables to align with design system - Refresh dashboard overview with new stat cards and layout - Rename and reorganize component exports
…ile layout - Refine multi-key-manage-dialog interactions - Improve table UX across channels, api-keys, models, users
…y translation
- Wrap hardcoded strings in profile page with t() calls
(Profile, Change Avatar, Login QR Code, Basic Info, Security,
OAuth Bindings, Username, Display Name, Email, Group, Sidebar Settings)
- Add i18n keys for weekday abbreviations in checkin calendar (Su-Fr)
- Restore 'Successfully created {{count}} API Key(s)' key lost during i18n sync
- Update all locale files (en, zh, fr, ja, ru, vi)
- Redirect root route / to /dashboard/overview
- Introduce third frontend theme 'enterprise' alongside default and classic - Backend: embed enterprise dist assets in main.go, update theme-aware file system (common/embed-file-system.go) and web router to serve enterprise theme - Backend: accept 'enterprise' in theme validation (constants, option controller, system-info-section) - Classic frontend: upgrade theme switch from single button to Select dropdown supporting all three themes (OtherSetting.jsx) - Default frontend: add 'Enterprise Style' option in system settings - I18n: add 'Enterprise Style' / '切换前端主题' keys across all locales - Dockerfile: copy enterprise/package.json in both builder stages - web/package.json: add enterprise to workspaces
后端变更: - Dockerfile: 新增 enterprise 前端构建 stage - controller/token.go: 新增 TransferToken API(密钥转移) - model/token.go: 实现 TransferToken 逻辑,同步更新日志与配额数据 - controller/user.go: 用户相关接口优化 - common/database.go: 数据库连接配置调整 - model/main.go: 数据模型字段优化 - router/api-router.go: 注册密钥转移路由 前端变更: - API Keys: 新增转移对话框、批量操作、API 校验 - Users: 优化数据表行操作 - Usage Logs: 优化列表展示与筛选 - i18n: 更新多语言翻译(en/zh/fr/ja/ru/vi)
在 form.onSubmit 和 button.onClick 中添加 isSubmittingRef.current 外层检查,确保第二次快速点击进不到 form.handleSubmit 验证逻辑。 - api-keys-mutate-drawer: 添加外层守卫(form + button 双路径) - users-mutate-drawer: 添加外层守卫 + 修复 password early return 未重置 ref - model-mutate-drawer: 添加外层守卫 - channel-mutate-drawer: 添加外层守卫 + 修复5处 validation early return 未重置 ref - create-deployment-drawer: mutate() → mutateAsync() + 外层守卫 根因:form.handleSubmit 为 async 函数,React 19 并发模式下两次快速点击 可使两个 async handler 同时进入验证阶段。Base UI 的 disabled 使用 aria-disabled(非原生 disabled),CSS pointer-events:none 不阻止事件传播。 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
sonner 2.0.7 tightened its package.json exports field, removing the ./dist/index.mjs subpath that src/lib/sonner.ts relied on. The resolve.alias in rsbuild.config.ts that mapped 'sonner' → the dedup wrapper also caused a circular-import trap, preventing a simple import path swap. Remove the sonner alias from rsbuild.config.ts and migrate all import sites from 'sonner' to '@/lib/sonner' so they go through the dedup wrapper explicitly. The wrapper itself now imports directly from the real 'sonner' package (the only subpath still exported). Also remove web/enterprise theme (superseded by web/default).
|
Important Review skippedToo many files! This PR contains 310 files, which is 160 over the limit of 150. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (310)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Important
📝 变更描述 / Description
(简述:做了什么?为什么这样改能生效?请基于你对代码逻辑的理解来写,避免粘贴未经整理的内容)
🚀 变更类型 / Type of change
🔗 关联任务 / Related Issue
✅ 提交前检查项 / Checklist
Bug fix,我已提交或关联对应 Issue,且不会将设计取舍、预期不一致或理解偏差直接归类为 bug。📸 运行证明 / Proof of Work
(请在此粘贴截图、关键日志或测试报告,以证明变更生效)