- 27 Dec, 2025 25 commits
-
-
IanShaw027 authored
新增功能: 1. 操作列宽度自适应 - checkActionsColumnWidth 方法:智能检测操作按钮是否超出列宽 - 临时展开所有按钮测量实际宽度 - 计算包含gap的总宽度 - 与可用宽度对比,自动显示/隐藏"展开"按钮 - 新增 actionsCount prop: - 用于快速判断是否需要展开功能 - 避免DOM查询带来的性能开销 2. 列数自适应padding - getAdaptivePaddingClass 方法:根据列数动态调整内边距 - ≥10列 → px-2 (8px) - ≥7列 → px-3 (12px) - ≥5列 → px-4 (16px) - <5列 → px-6 (24px,原始值) - 让表格在列数较多时更紧凑,提升空间利用率 -
shaw authored
- 将弹窗尺寸从 lg 改为 xl,增加内容显示空间 - 修复 AI Studio tooltip 被弹窗边界截断的问题 - 调整定位从 left-0 改为 right-0 - 减小宽度从 w-[28rem] 改为 w-80 - 提高 z-index 确保正确显示
-
shaw authored
-
IanShaw027 authored
- 在stubUsageLogRepo中实现GetUserStatsAggregated方法 - 根据userLogs计算统计数据而不是返回错误 - 修复类型转换问题(int转int64)
-
IanShaw027 authored
-
IanShaw027 authored
- 修复gofmt格式问题 - 为stubUsageLogRepo添加缺失的GetApiKeyStatsAggregated方法
-
IanShaw027 authored
- 改进API密钥管理界面 - 优化用户使用统计视图 - 完善初始化设置向导
-
IanShaw027 authored
- 改进账户管理视图 - 优化分组管理界面 - 完善代理管理功能 - 增强兑换码管理 - 改进订阅管理视图 - 优化使用统计展示 - 完善用户管理界面
-
IanShaw027 authored
- 改进数据格式化逻辑 - 增强工具函数可读性
-
IanShaw027 authored
- 新增英文翻译条目 - 完善中文翻译内容 - 改进多语言支持
-
IanShaw027 authored
- 改进ConfirmDialog对话框组件 - 增强DataTable表格组件功能和响应式布局 - 优化EmptyState空状态组件 - 完善SubscriptionProgressMini订阅进度组件
-
IanShaw027 authored
- 优化使用统计处理逻辑 - 增强API密钥仓储层功能 - 改进账户使用服务 - 完善API契约测试覆盖
-
IanShaw027 authored
- 合并多个独立查询为单个SQL查询 - 减少数据库往返次数 - 提升仪表板统计数据获取效率
-
shaw authored
- 移除if条件中对secrets的直接引用(GitHub Actions不支持) - 改用shell脚本内部检查环境变量是否存在
-
shaw authored
-
shaw authored
-
shaw authored
原逻辑先执行 Update 再验证 GroupIDs,如果验证失败会导致账号已更新但返回错误。 现改为先验证分组是否存在,再执行 Update 和 BindGroups。
-
shaw authored
-
程序猿MT authored
golang 1.24-> 1.25 node 20 -> node 24 具体提升请查看官方文档 Co-authored-by:yangjianbo <yangjianbo@leagsoft.com>
-
IanShaw authored
-
shaw authored
-
daodao97 authored
-
daodao97 authored
-
IanShaw authored
* feat(frontend): 前端界面优化与使用统计功能增强 主要改动: 1. 表格布局统一优化 - 新增 TablePageLayout 通用布局组件 - 统一所有管理页面的表格样式和交互 - 优化 DataTable、Pagination、Select 等通用组件 2. 使用统计功能增强 - 管理端: 添加完整的筛选和显示功能 - 用户端: 完善 API Key 列显示 - 后端: 优化使用统计数据结构和查询 3. 账户组件优化 - 优化 AccountStatsModal、AccountUsageCell 等组件 - 统一进度条和统计显示样式 4. 其他改进 - 完善中英文国际化 - 统一页面样式和交互体验 - 优化各视图页面的响应式布局 * fix(test): 修复 stubUsageLogRepo.ListWithFilters 测试 stub 测试用例 GET /api/v1/usage 返回 500 是因为 stub 方法未实现, 现在正确返回基于 UserID 过滤的日志数据。 * feat(frontend): 统一日期时间显示格式 **主要改动**: 1. 增强 utils/format.ts: - 新增 formatDateOnly() - 格式: YYYY-MM-DD - 新增 formatDateTime() - 格式: YYYY-MM-DD HH:mm:ss 2. 全局替换视图中的格式化函数: - 移除各视图中的自定义 formatDate 函数 - 统一导入使用 @/utils/format 中的函数 - created_at/updated_at 使用 formatDateTime - expires_at 使用 formatDateOnly 3. 受影响的视图 (8个): - frontend/src/views/user/KeysView.vue - frontend/src/views/user/DashboardView.vue - frontend/src/views/user/UsageView.vue - frontend/src/views/user/RedeemView.vue - frontend/src/views/admin/UsersView.vue - frontend/src/views/admin/UsageView.vue - frontend/src/views/admin/RedeemView.vue - frontend/src/views/admin/SubscriptionsView.vue **效果**: - 日期统一显示为 YYYY-MM-DD - 时间统一显示为 YYYY-MM-DD HH:mm:ss - 提升可维护性,避免格式不一致 * fix(frontend): 补充遗漏的时间格式化统一 **补充修复**(基于 code review 发现的遗漏): 1. 增强 utils/format.ts: - 新增 formatTime() - 格式: HH:mm 2. 修复 4 个遗漏的文件: - src/views/admin/UsersView.vue * 删除 formatExpiresAt(),改用 formatDateTime() * 修复订阅过期时间 tooltip 显示格式不一致问题 - src/views/user/ProfileView.vue * 删除 formatMemberSince(),改用 formatDate(date, 'YYYY-MM') * 统一会员起始时间显示格式 - src/views/user/SubscriptionsView.vue * 修改 formatExpirationDate() 使用 formatDateOnly() * 保留天数计算逻辑 - src/components/account/AccountStatusIndicator.vue * 删除本地 formatTime(),改用 utils/format 中的统一函数 * 修复 rate limit 和 overload 重置时间显示 **验证**: - TypeScript 类型检查通过 ✓ - 前端构建成功 ✓ - 所有剩余的 toLocaleString() 都是数字格式化,属于正确用法 ✓ **效果**: - 订阅过期时间统一为 YYYY-MM-DD HH:mm:ss - 会员起始时间统一为 YYYY-MM - 重置时间统一为 HH:mm - 消除所有不规范的原生 locale 方法调用 -
IanShaw authored
* fix(middleware): 修复 Gemini API Key 认证中间件用户上下文类型错误 修复了 ApiKeyAuthWithSubscriptionGoogle 中间件中设置用户上下文时的类型错误。 **问题:** - 中间件直接设置 `apiKey.User` 对象到上下文 - 导致 handler 中获取 `AuthSubject` 时类型断言失败 - 所有 Gemini v1beta 端点返回 500 "User context not found" **修复:** - 改为设置 `AuthSubject` 结构体,与 `api_key_auth.go` 保持一致 - 添加 `ContextKeyUserRole` 设置以完整支持角色检查 **影响范围:** - Gemini v1beta API 端点 (generateContent, streamGenerateContent) - 使用 Google API Key 认证的所有请求 **测试:** - 验证 Gemini CLI 调用成功返回 200 - 确认用户上下文正确传递到 handler * fix(web): 修复 /responses 端点被前端中间件拦截的问题 - 将 /responses 路径添加到 API 白名单,防止其被当作前端路由处理 - 修复 /responses 端点返回 HTML 而非 API 响应的 BUG - 解决 codex CLI stream 在远程服务器上断开连接的问题 根本原因: 在 6c469b42 提交中添加了 /responses 路由,但未同步更新前端嵌入中间件 的 API 白名单,导致该路由被拦截并返回 index.html 而非 API 响应。
-
- 26 Dec, 2025 15 commits
-
-
shaw authored
-
shaw authored
-
IanShaw027 authored
添加对两种 Gemini 响应格式的支持: - AI Studio: `{"candidates": [...]}` - Gemini CLI: `{"response": {"candidates": [...]}}` 通过 unwrap 逻辑自动检测并适配两种格式,确保账号测试功能 对所有 Gemini 账号类型都能正常工作。 合并 PR #43 的剩余功能到 PR #37 -
IanShaw027 authored
修复 golangci-lint 检查失败的问题: - gemini_token_provider.go: 删除 import 后多余空行 - gemini_token_refresher.go: 删除 import 后多余空行 Fixes CI golangci-lint check for PR #37
-
IanShaw027 authored
根据 Gemini CLI 代码审查建议: ## 修改内容 - 将 Gemini OAuth 同步中的 `mergeJSONB` 调用替换为 `mergeMap` - 删除不再使用的 `mergeJSONB` 函数定义 ## 原因 - 其他平台(OpenAI、Anthropic)的账户同步都使用 `mergeMap` - `mergeJSONB` 是为旧的 `model.JSONB` 类型设计,与重构后的架构不一致 - 统一函数命名提高代码可读性和可维护性 ## 影响范围 - backend/internal/service/crs_sync_service.go (4处替换) - backend/internal/service/account.go (删除 mergeJSONB 函数) ## 验证 ✓ 编译通过 ✓ 功能逻辑无变化(mergeMap 和 mergeJSONB 实现相同)
-
IanShaw027 authored
## 主要修改 1. **移除 model 包引用** - 删除所有 `internal/model` 包的 import - 使用 service 包中的类型定义(Account, Platform常量等) 2. **修复类型转换** - JSONB → map[string]any - 添加 mergeJSONB 辅助函数 - 添加 Account.IsGemini() 方法 3. **更新中间件调用** - GetUserFromContext → GetAuthSubjectFromContext - 适配新的并发控制签名(传递 ID 和 Concurrency 而不是完整对象) 4. **修复 handler 层** - 更新 gemini_v1beta_handler.go - 修正 billing 检查和 usage 记录 ## 影响范围 - backend/internal/service/gemini_*.go - backend/internal/service/account_test_service.go - backend/internal/service/crs_sync_service.go - backend/internal/handler/gemini_v1beta_handler.go - backend/internal/handler/gateway_handler.go - backend/internal/handler/admin/account_handler.go
-
IanShaw027 authored
- 删除 backend/internal/model/account.go 符合重构方向 - 合并最新的项目结构重构 - 包含 SSE 格式解析修复 - 更新依赖和配置文件
-
September999999999 authored
- 卸载时自动删除 .installed 安装锁文件 - 新增 --purge 参数支持完全清理(包括配置目录) - 交互模式下增加是否删除配置目录的确认提示 - 支持中英文消息
-
shaw authored
-
shaw authored
-
shaw authored
修复 PR #36 合并后部分 admin handler 直接返回 service 层对象导致 JSON 字段名为 PascalCase 而非期望的 snake_case 问题。 修复内容: - account_handler: Refresh 接口添加 dto.AccountFromService - openai_oauth_handler: RefreshAccountToken/CreateAccountFromOAuth 添加 dto 转换 - subscription_handler: BulkAssign 添加 dto.BulkAssignResultFromService - usage_handler: List 接口添加 dto.UsageLogFromService 转换 - 新增 dto.BulkAssignResult 类型和对应的 mapper 函数
-
shaw authored
-
ianshaw authored
部分上游 API 返回的 SSE 格式不符合标准规范: - 标准格式: `data: {...}`(冒号后有空格) - 非标准格式: `data:{...}`(冒号后无空格) 使用预编译正则 `^data:\s*` 统一处理两种格式。 -
shaw authored
-
Forest authored
-