yangjianbo
|
a8c173f043
|
Merge branch 'main' of https://github.com/mt21625457/aicodex2api
|
2025-12-27 23:09:11 +08:00 |
|
yangjianbo
|
97ab649d16
|
fix(仪表盘): 修复最近用量查询日期参数格式
问题:仪表盘“最近用量”调用 /usage 时传入完整 ISO 时间戳(含时分秒/时区),后端 start_date/end_date 仅接受 YYYY-MM-DD,导致请求参数校验失败,页面无法正常展示最近用量。
解决:
- loadRecentUsage 改为传入 YYYY-MM-DD(从 toISOString() 取日期部分),与后端参数格式约定保持一致
- 补充注释说明:后端会将 end_date 扩展到当日结束时间,以及 toISOString() 为 UTC 可能带来的统计口径差异
- 同步修正 usageAPI.getByDateRange 的参数注释,避免后续误用
验证:npm -C frontend run build
|
2025-12-27 23:08:38 +08:00 |
|
程序猿MT
|
d3e73f1260
|
feat: 增加caddy 安全配置示例 (#57)
feat 增加 caddy 示例安全反向代理
|
2025-12-27 21:36:26 +08:00 |
|
程序猿MT
|
f3da4b202e
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 21:32:08 +08:00 |
|
yangjianbo
|
530f6ad81c
|
feat: 增加caddy 安全配置示例
|
2025-12-27 21:31:06 +08:00 |
|
yangjianbo
|
3252c378aa
|
feat 增加 caddy 示例安全反向代理
|
2025-12-27 21:30:14 +08:00 |
|
shaw
|
b5ca6a654c
|
Merge branch 'main' of github.com:Wei-Shaw/sub2api
# Conflicts:
|
2025-12-27 21:16:29 +08:00 |
|
shaw
|
94749b12ac
|
chore: 调整deploy说明以及取消postgres端口暴露
|
2025-12-27 21:14:08 +08:00 |
|
IanShaw
|
523fa9f71e
|
fix(frontend): 修复用户仪表板日期格式错误导致请求失败 (#55)
修复 loadRecentUsage 函数中日期格式问题,将 ISO 完整格式改为 YYYY-MM-DD 格式,与后端 API 期望一致。
|
2025-12-27 21:09:43 +08:00 |
|
shaw
|
54636781ea
|
Merge branch 'feature/datatable-enhancements'
|
2025-12-27 21:00:37 +08:00 |
|
shaw
|
5187db5ee5
|
fix(frontend): 修复DataTable无限循环和i18n邮箱解析错误
- 修复DataTable组件watch监听actionsExpanded导致的无限循环卡死问题
- 为AccountsView和UsersView添加actionsCount属性启用操作列展开功能
- 修复i18n翻译中邮箱地址的@符号未转义导致的编译错误
|
2025-12-27 21:00:26 +08:00 |
|
shaw
|
0b9c4ae69e
|
fix: 修复claude setup token授权效期短的问题
|
2025-12-27 20:42:00 +08:00 |
|
shaw
|
0d5a8a95c8
|
fix: 修复claude token刷新失效的问题
|
2025-12-27 20:13:39 +08:00 |
|
IanShaw027
|
9cd97c9e1d
|
fix(frontend): 统一账号编辑弹窗宽度与新增弹窗保持一致
问题:
- 编辑账号弹窗使用size='lg'
- 新增账号弹窗使用size='xl'
- 两者宽度不一致,体验不统一
修复:
- 将EditAccountModal的size从lg改为xl
- 与CreateAccountModal保持一致
|
2025-12-27 20:13:29 +08:00 |
|
IanShaw027
|
d521191e87
|
fix(frontend): 修复i18n翻译中的Invalid linked format错误
问题:
- admin/settings页面无法访问,报错'Invalid linked format'
- vue-i18n解析器将{'@'}误认为链接格式语法
修复:
- 将zh.ts和en.ts中的{'@'}替换为直接的@字符
- 影响范围:代理配置相关的翻译字符串
|
2025-12-27 20:11:13 +08:00 |
|
IanShaw027
|
fd78993b91
|
feat(frontend): DataTable组件增强 - 操作列宽度自适应和列数自适应padding
新增功能:
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,原始值)
- 让表格在列数较多时更紧凑,提升空间利用率
|
2025-12-27 20:02:10 +08:00 |
|
程序猿MT
|
937b1fb05d
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 20:01:56 +08:00 |
|
shaw
|
80cce858cb
|
fix(frontend): 修复添加账号弹窗宽度和tooltip被截断问题
- 将弹窗尺寸从 lg 改为 xl,增加内容显示空间
- 修复 AI Studio tooltip 被弹窗边界截断的问题
- 调整定位从 left-0 改为 right-0
- 减小宽度从 w-[28rem] 改为 w-80
- 提高 z-index 确保正确显示
|
2025-12-27 17:04:38 +08:00 |
|
程序猿MT
|
7bdb0e6b12
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 16:48:31 +08:00 |
|
shaw
|
0743652d92
|
Merge branch 'feature/ui-and-backend-improvements'
|
2025-12-27 16:33:57 +08:00 |
|
IanShaw027
|
96bec5c9b1
|
fix(test): 实现GetUserStatsAggregated方法以支持新的统计查询
- 在stubUsageLogRepo中实现GetUserStatsAggregated方法
- 根据userLogs计算统计数据而不是返回错误
- 修复类型转换问题(int转int64)
|
2025-12-27 16:20:59 +08:00 |
|
IanShaw027
|
cfeb6b8b14
|
fix(test): 添加缺失的GetUserStatsAggregated方法
|
2025-12-27 16:15:32 +08:00 |
|
IanShaw027
|
481310dea0
|
fix(test): 修复CI测试失败
- 修复gofmt格式问题
- 为stubUsageLogRepo添加缺失的GetApiKeyStatsAggregated方法
|
2025-12-27 16:12:06 +08:00 |
|
IanShaw027
|
ea2821d11d
|
refactor(frontend): 优化用户视图和设置向导
- 改进API密钥管理界面
- 优化用户使用统计视图
- 完善初始化设置向导
|
2025-12-27 16:05:36 +08:00 |
|
IanShaw027
|
7a0de1765f
|
refactor(frontend): 优化管理后台视图
- 改进账户管理视图
- 优化分组管理界面
- 完善代理管理功能
- 增强兑换码管理
- 改进订阅管理视图
- 优化使用统计展示
- 完善用户管理界面
|
2025-12-27 16:05:16 +08:00 |
|
程序猿MT
|
17c3cb2403
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 16:05:11 +08:00 |
|
IanShaw027
|
35b1bc3753
|
refactor(frontend): 优化格式化工具函数
- 改进数据格式化逻辑
- 增强工具函数可读性
|
2025-12-27 16:04:56 +08:00 |
|
IanShaw027
|
8d38788672
|
feat(frontend): 更新国际化翻译
- 新增英文翻译条目
- 完善中文翻译内容
- 改进多语言支持
|
2025-12-27 16:04:35 +08:00 |
|
IanShaw027
|
c615a4264d
|
refactor(frontend): 优化通用组件
- 改进ConfirmDialog对话框组件
- 增强DataTable表格组件功能和响应式布局
- 优化EmptyState空状态组件
- 完善SubscriptionProgressMini订阅进度组件
|
2025-12-27 16:04:16 +08:00 |
|
IanShaw027
|
227d506c53
|
feat(backend): 增强使用统计和API密钥功能
- 优化使用统计处理逻辑
- 增强API密钥仓储层功能
- 改进账户使用服务
- 完善API契约测试覆盖
|
2025-12-27 16:03:57 +08:00 |
|
IanShaw027
|
36a86e9ab4
|
perf(backend): 优化数据库查询性能
- 合并多个独立查询为单个SQL查询
- 减少数据库往返次数
- 提升仪表板统计数据获取效率
|
2025-12-27 16:03:37 +08:00 |
|
shaw
|
f133b051dc
|
fix: 修复TG通知workflow语法错误
- 移除if条件中对secrets的直接引用(GitHub Actions不支持)
- 改用shell脚本内部检查环境变量是否存在
|
2025-12-27 16:03:13 +08:00 |
|
shaw
|
7af1bdbf4c
|
chore: workflow增加TG频道更新通知
|
2025-12-27 15:55:09 +08:00 |
|
shaw
|
016d7ef645
|
feat: 增强前端clipboard功能
|
2025-12-27 15:16:52 +08:00 |
|
shaw
|
f1e47291cd
|
fix: 修复账号更新时分组绑定操作顺序导致的数据不一致问题
原逻辑先执行 Update 再验证 GroupIDs,如果验证失败会导致账号已更新但返回错误。
现改为先验证分组是否存在,再执行 Update 和 BindGroups。
|
2025-12-27 14:57:43 +08:00 |
|
shaw
|
d7e9ae38e4
|
Merge PR #49: feat: cc/codex/gemini 增加账号重试功能
|
2025-12-27 13:59:00 +08:00 |
|
程序猿MT
|
88be981afc
|
feat: (#47)
golang 1.24-> 1.25
node 20 -> node 24
具体提升请查看官方文档
Co-authored-by: yangjianbo <yangjianbo@leagsoft.com>
|
2025-12-27 13:56:14 +08:00 |
|
IanShaw
|
3f92a43170
|
test: 完善 UsageLogRepo 测试 stub 的过滤逻辑 (#50)
|
2025-12-27 13:53:47 +08:00 |
|
shaw
|
2101f1d1c8
|
fix: 修复claude OAuth账户刷新token失败的bug
|
2025-12-27 13:50:35 +08:00 |
|
daodao97
|
f0f920e49f
|
feat: cc/codex/gemini 增加账号重试
|
2025-12-27 12:27:47 +08:00 |
|
daodao97
|
95583fce83
|
feat: cc/codex support account retry
|
2025-12-27 12:05:38 +08:00 |
|
程序猿MT
|
a413fa3b17
|
Merge branch 'Wei-Shaw:main' into main
|
2025-12-27 10:58:30 +08:00 |
|
yangjianbo
|
3a8dbf5a99
|
feat:
golang 1.24-> 1.25
node 20 -> node 24
具体提升请查看官方文档
|
2025-12-27 10:57:53 +08:00 |
|
IanShaw
|
254f12543c
|
feat(frontend): 前端界面优化与使用统计功能增强 (#46)
* 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 方法调用
|
2025-12-27 10:50:25 +08:00 |
|
IanShaw
|
cf8a64528c
|
fix: 修复 Gemini API 认证和 /responses 端点路由问题 (#45)
* 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 在远程服务器上断开连接的问题
根本原因:
在 6c469b4 提交中添加了 /responses 路由,但未同步更新前端嵌入中间件
的 API 白名单,导致该路由被拦截并返回 index.html 而非 API 响应。
|
2025-12-27 10:50:15 +08:00 |
|
shaw
|
2b79c4e8b7
|
chore: home页面更新gemini为已支持
|
2025-12-26 23:13:00 +08:00 |
|
shaw
|
429f38d0c9
|
Merge PR #37: Add Gemini OAuth and Messages Compat Support
|
2025-12-26 22:42:34 +08:00 |
|
IanShaw027
|
2714be99a9
|
feat(test): 添加 Gemini 双响应格式支持
添加对两种 Gemini 响应格式的支持:
- AI Studio: `{"candidates": [...]}`
- Gemini CLI: `{"response": {"candidates": [...]}}`
通过 unwrap 逻辑自动检测并适配两种格式,确保账号测试功能
对所有 Gemini 账号类型都能正常工作。
合并 PR #43 的剩余功能到 PR #37
|
2025-12-26 22:31:12 +08:00 |
|
IanShaw027
|
d851818035
|
fix(lint): 修复 gofmt 格式问题
修复 golangci-lint 检查失败的问题:
- gemini_token_provider.go: 删除 import 后多余空行
- gemini_token_refresher.go: 删除 import 后多余空行
Fixes CI golangci-lint check for PR #37
|
2025-12-26 22:24:22 +08:00 |
|
IanShaw027
|
576bf4639c
|
refactor: 统一使用 mergeMap 函数提升代码一致性
根据 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 实现相同)
|
2025-12-26 22:15:15 +08:00 |
|