Commit Graph

373 Commits

Author SHA1 Message Date
jft0m
96eca07ff2 Merge branch 'Wei-Shaw:main' into main 2025-10-13 11:32:02 +08:00
Wesley Liddick
2215b0acd8 Merge pull request #555 from DokiDoki1103/fix/ccr-account-modal-dark-theme [skip ci]
fix: 修复 CCR 账户弹窗暗黑主题失效问题
2025-10-13 11:25:33 +08:00
shaw
f302c94d3c docs: 移除claude code使用droid api相关文档 2025-10-13 10:51:06 +08:00
shaw
cea6f976b9 fix: 修复批量编辑模式下专属账号修改的问题 2025-10-13 09:16:13 +08:00
jft0m
44a7a61f14 Merge branch 'Wei-Shaw:main' into main 2025-10-12 22:51:22 +08:00
jft0m
ad64bd3c51 feat: 改善登录表单的可访问性和自动填充支持
- 为所有表单字段添加 id 和 name 属性
- 添加 autocomplete 属性支持浏览器自动填充
- 使用 for 属性正确关联 label 和 input
- 优化代码格式符合 Prettier 规范

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 14:50:07 +00:00
shaw
692abbc4f8 Merge branch 'fix/remove-horizontal-scrollbar-accounts-page' into dev 2025-10-12 21:00:24 +08:00
DokiDoki1103
a2844e802a fix: 修复 CCR 账户弹窗暗黑主题失效问题
- 为全局 modal 和 modal-content 添加暗黑模式样式
- 在 CcrAccountForm 组件中使用 Tailwind 暗黑模式类替代 scoped style
- 优化关闭按钮在暗黑模式下的显示效果

此修复确保 CCR 账户添加/编辑弹窗在暗黑模式下正确显示深色背景和样式,与其他界面元素保持一致的用户体验。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 20:59:41 +08:00
DokiDoki1103
e6d9a46b98 fix: 移除账户管理页面的横向滚动条
- 移除 .table-container 的 overflow-x: auto 样式
- 清理重复的样式定义
- 修复账户管理页面在某些情况下出现不必要横向滚动条的问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 20:49:00 +08:00
shaw
2fa1b0b1dc fix: 优化创建apikey成功弹窗 2025-10-12 19:59:01 +08:00
shaw
40b7c68694 fix: 修复账号过期时间的一系列bug 2025-10-12 18:35:05 +08:00
shaw
a3dacbccd0 refactor: 编辑账户时隐藏过期时间表单,使用独立编辑弹窗
## 问题分析
编辑账户时显示过期时间表单存在以下问题:

1. **相对时间 vs 绝对时间冲突**:
   - 下拉框提供相对时间选项(30天、90天等)
   - 实际存储的是绝对时间(如 2025-02-15)
   - 过了1天后,无法准确对应原来的"30天"选项

2. **用户体验混乱**:
   - 设置了30天过期,编辑时下拉框显示"永不过期"
   - 无法准确回显用户当初的选择
   - 容易误导用户

3. **功能重复**:
   - 已有独立的AccountExpiryEditModal弹窗专门编辑过期时间
   - 该弹窗使用绝对时间显示,更清晰准确

## 解决方案
仅在编辑模式下隐藏过期时间表单:
- 创建账户时:保留过期时间表单(相对时间设置合理)
- 编辑账户时:隐藏过期时间表单,引导用户使用独立的编辑弹窗

## 实现细节
在两处过期时间表单添加 v-if="!isEdit" 条件:
- 第645行:OAuth添加方式的表单
- 第2116行:手动添加方式的表单

## 用户流程改进
- 创建账户:可以快速选择相对过期时间(30天、90天等)
- 编辑账户:在列表中点击"编辑到期时间"按钮 → 使用独立弹窗编辑
- 弹窗优势:显示当前绝对过期时间、支持快捷延期、实时预览新时间

文件: web/admin-spa/src/components/accounts/AccountForm.vue:645,2116
2025-10-12 14:04:16 +08:00
shaw
62e457932e fix: 修复账户编辑时过期时间不回显的问题
## 问题描述
在账户编辑页面,虽然过期时间已保存并在列表中正确显示,但点击编辑时:
- expireDuration 和 customExpireDate 字段为空
- 导致过期时间选择器显示为空白状态

## 根本原因
AccountForm.vue 的 form 初始化时:
- expiresAt 正确读取了 props.account?.expiresAt
- 但 expireDuration 和 customExpireDate 都初始化为空字符串
- 缺少从 expiresAt 反向初始化这两个字段的逻辑

## 修复方案
修改 form 初始化逻辑(第 3443-3457 行):
- expireDuration: 如果存在 expiresAt,设置为 'custom'
- customExpireDate: 如果存在 expiresAt,转换为 datetime-local 格式 (YYYY-MM-DDTHH:mm)
- expiresAt: 保持原有逻辑不变

## 技术细节
使用 IIFE (立即执行函数) 在 reactive 对象初始化时计算初始值:
```javascript
expireDuration: (() => {
  if (props.account?.expiresAt) return 'custom'
  return ''
})()
```

## 测试验证
-  编辑已设置过期时间的账户,过期时间正确回显
-  编辑未设置过期时间的账户,显示为永不过期
-  AccountExpiryEditModal 组件已有正确的初始化逻辑,无需修改

文件: web/admin-spa/src/components/accounts/AccountForm.vue:3443-3457
2025-10-12 13:56:26 +08:00
shaw
a84f344df6 Merge PR #541: 添加账户订阅到期时间管理功能 + 修复核心过期检查逻辑
## 原PR功能
-  后端添加subscriptionExpiresAt字段支持
-  前端提供到期时间设置界面(快捷选项 + 自定义日期)
-  账户列表显示到期状态(已过期🔴/即将过期🟠/永不过期)
-  新增AccountExpiryEditModal.vue编辑弹窗组件
-  支持创建和更新账户时设置到期时间
-  完整支持暗黑模式

## 🔧 关键修复(本次提交)
原PR缺少核心过期检查逻辑,过期账户仍会被调度使用。本次合并时添加了:

1. **新增isAccountNotExpired()方法**:
   - 检查账户subscriptionExpiresAt字段
   - 未设置过期时间视为永不过期
   - 添加debug日志记录过期账户

2. **在selectAvailableAccount()中添加过期检查**:
   - 过滤逻辑中集成this.isAccountNotExpired(account)
   - 确保过期账户不被选择

3. **在selectAccountForApiKey()中添加过期检查**:
   - 绑定账户检查中添加过期验证
   - 共享池过滤中添加过期验证

## 🗑️ 清理工作
- 移除了不应提交的account_expire_feature.md评审文档(756行)

## 技术细节
- API层使用expiresAt,存储层使用subscriptionExpiresAt
- 存储格式:ISO 8601 (UTC)
- 空值表示:null表示永不过期
- 时区处理:后端UTC,前端自动转换本地时区

作者: mrlitong (原PR) + Claude Code (修复)
PR: https://github.com/Wei-Shaw/claude-relay-service/pull/541
2025-10-12 13:42:57 +08:00
shaw
8e415f8ff8 Merge PR #545: 常用模型增加deepseek-chat;修复修改时默认选择白名单
- Claude Console类型账户默认白名单模型增加deepseek-chat模型
- 修复白名单模式下的初始化逻辑:
  * 白名单模式:正确设置allowedModels用于显示勾选的模型
  * 同时保留modelMappings以便用户切换到映射模式时有初始数据
  * 映射模式:只设置modelMappings,不填充allowedModels
- 增加代码注释,清晰说明不同模式的数据设置逻辑

作者: looksgood
PR: https://github.com/Wei-Shaw/claude-relay-service/pull/545
2025-10-12 13:34:10 +08:00
jft0m
44c6be129b Merge branch 'Wei-Shaw:main' into main 2025-10-12 09:28:12 +08:00
litongtongxue
c8c337099e Merge upstream/main into feature/account-expiry-management
解决与 upstream/main 的代码冲突:
- 保留账户到期时间 (expiresAt) 功能
- 采用 buildProxyPayload() 函数重构代理配置
- 同步最新的 Droid 平台功能和修复

主要改动:
- AccountForm.vue: 整合到期时间字段和新的 proxy 处理方式
- 合并 upstream 的 Droid 多 API Key 支持等新特性

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 00:55:25 +08:00
shaw
26894f485b feat: droid账号增加apikey数量显示 2025-10-11 23:05:48 +08:00
shaw
0b2610842a feat: droid apikey异常自动移除 2025-10-11 22:39:41 +08:00
shaw
53dee11a10 feat: droid的apikey模式适配多种更新方式 2025-10-11 22:15:38 +08:00
liangjie.wanglj
c81ec34ad8 常用模型增加deepseek-chat;修复修改时默认选择白名单 2025-10-11 18:53:41 +08:00
shaw
4a925e2f8b docs: 更新droid部分内容 2025-10-11 12:37:37 +08:00
shaw
a6f5876eca fix: 修复droid类型账号类型显示 2025-10-11 11:48:20 +08:00
shaw
6c2ef2eef3 fix: 修复droid账号更新丢失apikey的问题 2025-10-11 11:23:24 +08:00
shaw
19fa518e65 fix: 修复droid追加和代理代理IP提交异常的问题 2025-10-11 10:50:26 +08:00
litongtongxue
a82dcebd7b feat: 添加账户订阅到期时间管理功能
## 新增功能
- 支持为 Claude 账户设置订阅到期时间
- 前端提供到期时间选择器(快捷选项 + 自定义日期)
- 账户列表显示到期状态(已过期/即将过期/永不过期)
- 新增独立的到期时间编辑弹窗组件

## 技术变更
- 后端新增 subscriptionExpiresAt 字段存储
- 前端使用 expiresAt 字段进行交互
- 支持创建、编辑、显示完整流程

## 包含文件
- src/routes/admin.js: POST/PUT 端点支持 expiresAt 字段
- src/services/claudeAccountService.js: 存储和返回到期时间
- web/admin-spa/src/components/accounts/AccountForm.vue: 表单添加到期时间选择
- web/admin-spa/src/views/AccountsView.vue: 列表显示和编辑功能
- web/admin-spa/src/components/accounts/AccountExpiryEditModal.vue: 新增编辑弹窗
- account_expire_feature.md: 代码评审报告和优化建议

## 注意事项
⚠️ 本次提交包含初步实现,详细的优化建议请查看 account_expire_feature.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-11 01:05:21 +08:00
jft0m
1c80970aef Merge branch 'Wei-Shaw:main' into main 2025-10-10 21:37:18 +08:00
shaw
c9ad287587 docs: 更新droid教程部分 2025-10-10 21:06:02 +08:00
shaw
14e54c0473 docs: 更新Droid 使用教程 2025-10-10 17:34:53 +08:00
shaw
5165d6c536 Merge branch 'fix/tutorial-dark-theme' into merge-pr523 2025-10-10 16:38:45 +08:00
shaw
e209a23ae7 Merge branch 'pr-532' into merge-pr523 2025-10-10 16:37:35 +08:00
shaw
b28631e737 Merge branch 'pr-523' into merge-pr523 2025-10-10 16:34:29 +08:00
shaw
fad9e52c98 feat: Droid平台支持多apikey添加 2025-10-10 16:09:15 +08:00
shaw
1811290c0b feat: 优化droid类型账号oauth流程 2025-10-10 15:36:50 +08:00
shaw
42db271848 feat: droid平台账户数据统计及调度能力 2025-10-10 15:13:45 +08:00
litong.41
6b1062caa6 feat: 优化API Key复制功能,支持一键复制环境变量配置
- 修改"复制 API Key"按钮为"复制配置信息"
- 复制内容包含 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN
- 用户无需手动拼接,可直接粘贴使用
- 支持自定义 BASE_URL 配置(通过 VITE_API_BASE_PREFIX 环境变量)
- 自动从浏览器地址获取 BASE_URL(无自定义配置时)
2025-10-10 14:27:16 +08:00
litongtongxue
75804f4c2e fix(web): 修复使用教程页面暗色主题样式问题
- 优化按钮激活态在暗色模式下的视觉效果
- 修复所有提示框(info/success/warning)的暗色样式
- 增强文本对比度,提升可读性(标题/正文/辅助文本)
- 改进代码块在暗色模式下的边框和背景
- 修复 FAQ 折叠面板的暗色主题适配
- 保持玻璃态效果和响应式设计

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 02:20:22 +08:00
shaw
2fc84a6aca feat: 新增Droid cli支持 2025-10-09 23:05:09 +08:00
shaw
4de2ea3d17 feat: api-keys页面增加窗口限制进度显示 2025-10-09 08:57:05 +08:00
於林涛
705bd7611c Merge remote-tracking branch 'upstream/main'
# Conflicts:
#	src/routes/api.js
2025-10-08 19:34:17 +08:00
sususu98
786a62e2e3 feat(账户表单): 添加模型限制模式切换功能
支持在白名单模式和映射模式之间切换,白名单模式允许通过复选框选择支持的模型,映射模式保留原有的模型映射功能

暂时没有限制专属绑定场景
2025-10-08 17:41:28 +08:00
shaw
9209f10fc3 Merge branch 'dev' of https://github.com/Wei-Shaw/claude-relay-service into dev 2025-10-07 15:25:26 +08:00
Wesley Liddick
642ea1a33a Merge pull request #511 from sususu98/dev
fix: 用户登录接口在开发环境 404 错误
2025-10-07 15:20:42 +08:00
litongtongxue
cac1b90d23 chore: 格式化代码符合 Prettier 规范 2025-10-07 14:44:25 +08:00
litongtongxue
454f366c50 fix: 修复日均费用计算逻辑
问题描述:
- 之前的日均费用计算是基于固定的30天窗口,而不是账户实际使用的天数
- 这导致新创建的账户显示的日均费用不准确

修复方案:
- 获取账户的创建时间(createdAt字段)
- 计算从账户创建到当前时间的实际天数
- 使用实际天数来计算日均费用(30天总费用 / 实际天数)
- 在前端显示实际使用天数,让用户了解计算基准

修改内容:
- 后端:在 /accounts/:accountId/usage-history 端点中添加实际天数计算逻辑
- 前端:在详情弹窗中显示基于实际使用天数的提示信息

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 11:27:29 +08:00
jft0m
5d7225b2eb feat: 添加 Opus 限流状态显示
- 在账户列表中显示 Opus 限流状态徽章
- 显示限流剩余时间(天/小时)
- 后端 API 添加 opusRateLimitedAt 和 opusRateLimitEndAt 字段
- 优化徽章样式,防止文字溢出
2025-10-06 15:49:28 +00:00
shaw
d44582dc31 feat: 适配claude新opus周限规则 2025-10-04 10:49:40 +08:00
sususu98
57e75cd526 fix: 用户登录接口在开发环境 404 错误
修复 user.js 中未使用 API_PREFIX 导致的路径问题。
  现在开发环境正确使用 /webapi 前缀进行代理转发。
2025-10-03 22:34:31 +08:00
wfunc
a3666e3a3e feat: add rate limit recovery webhook notifications
添加限流恢复的 webhook 通知功能,当账户从限流状态自动恢复时发送通知。

主要改进:

1. **新增通知类型** (webhookConfigService.js)
   - 添加 `rateLimitRecovery` 通知类型
   - 在配置获取和保存时自动合并默认通知类型
   - 确保新增的通知类型有默认值

2. **增强限流清理服务** (rateLimitCleanupService.js)
   - 改进自动停止账户的检测逻辑
   - 在 `finally` 块中确保 `clearedAccounts` 列表被重置,避免重复通知
   - 对自动停止的账户显式调用 `removeAccountRateLimit`
   - 为 Claude 和 Claude Console 账户添加 `autoStopped` 和 `needsAutoStopRecovery` 检测

3. **改进 Claude Console 限流移除** (claudeConsoleAccountService.js)
   - 检测并恢复因自动停止而禁用调度的账户
   - 清理过期的 `rateLimitAutoStopped` 标志
   - 增加详细的日志记录

4. **前端 UI 支持** (SettingsView.vue)
   - 在 Webhook 设置中添加"限流恢复"通知类型选项
   - 更新默认通知类型配置

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 23:54:30 +08:00
shaw
fe894cc07a docs: issue-501 2025-10-02 19:25:59 +08:00