AAEE86
|
e051ade27e
|
feat: 按最新使用时间排序API Keys
|
2025-10-14 01:05:22 +08:00 |
|
AAEE86
|
ea3ad2157f
|
fix: 优化API Key错误状态码的显示方式
|
2025-10-14 00:53:19 +08:00 |
|
AAEE86
|
1f9afc788b
|
feat: 添加Droid账户API Key管理功能
(cherry picked from commit 0cf3ca6c7eafcf28a2da7e8bfd6814b4883bb752)
|
2025-10-13 18:24:49 +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 |
|
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 |
|
shaw
|
2fa1b0b1dc
|
fix: 优化创建apikey成功弹窗
|
2025-10-12 19:59:01 +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 |
|
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
|
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
|
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 |
|
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 |
|
shaw
|
2fc84a6aca
|
feat: 新增Droid cli支持
|
2025-10-09 23:05:09 +08:00 |
|
sususu98
|
786a62e2e3
|
feat(账户表单): 添加模型限制模式切换功能
支持在白名单模式和映射模式之间切换,白名单模式允许通过复选框选择支持的模型,映射模式保留原有的模型映射功能
暂时没有限制专属绑定场景
|
2025-10-08 17:41:28 +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 |
|
shaw
|
d44582dc31
|
feat: 适配claude新opus周限规则
|
2025-10-04 10:49:40 +08:00 |
|
shaw
|
323f3ab6c4
|
style: api-stats布局优化
|
2025-09-28 15:43:37 +08:00 |
|
shaw
|
5e015e87e0
|
style: 优化api-stats布局
|
2025-09-28 14:54:24 +08:00 |
|
shaw
|
b123cc35c1
|
feat: api-stats页面查询专属账号会话窗口
|
2025-09-28 14:36:38 +08:00 |
|
shaw
|
e197fbdf80
|
Merge branch 'pr-485' into dev
|
2025-09-28 09:45:03 +08:00 |
|
shaw
|
ea28222c71
|
feat: 支持账号维度的数据统计
|
2025-09-27 22:55:06 +08:00 |
|
shaw
|
0b46eff4ed
|
style: 优化apikeys进度条显示
|
2025-09-27 19:40:55 +08:00 |
|
yaogdu
|
d1bbc71796
|
feat: 🎸 export csv from web and support hourly TTL of key
|
2025-09-27 14:11:54 +08:00 |
|
shaw
|
f9c397cc1f
|
feat: api-stats页面增加周限总限查询
|
2025-09-21 14:22:34 +08:00 |
|
shaw
|
3628bb2b7a
|
fix: 修复openai输入token计算问题
|
2025-09-20 21:43:48 +08:00 |
|
shaw
|
08c2b7a444
|
fix: 修复PR #458中的totalCostLimit功能问题
主要修复:
- 移除重复的totalUsageLimit字段,统一使用totalCostLimit
- 删除auth.js中重复的总费用限制检查逻辑
- 删除admin.js中重复的totalCostLimit验证代码
- 更新所有前端组件,移除totalUsageLimit引用
功能改进:
- 确保totalCostLimit作为永久累计费用限制正常工作
- 与dailyCostLimit(每日重置)功能互补
- 适用于预付费、一次性API Key场景
测试:
- 删除有逻辑错误的test-total-usage-limit.js
- 创建新的test-total-cost-limit.js验证功能正确性
- 所有测试通过,功能正常工作
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-09-20 17:37:20 +08:00 |
|
itzhan
|
ec28b66e7f
|
feat: 给key增加总用量限制
|
2025-09-19 21:57:24 +08:00 |
|
shaw
|
9c4dc714f8
|
Revert "Merge pull request #424 from Wangnov/feat/i18n"
This reverts commit 1d915d8327, reversing
changes made to 009f7c84f6.
|
2025-09-12 09:21:53 +08:00 |
|
Wangnov
|
99d72516ae
|
feat: 完成 AccountForm.vue 组件的国际化文本替换
- 将多个文本替换为 i18n 语言包中的键,以提升多语言支持和一致性。
- 更新了模型支持描述、用户代理描述、凭证文件描述等文本内容。
- 通过引入 i18n 键,增强了用户界面的可读性和可维护性。
|
2025-09-12 00:04:11 +08:00 |
|
Wangnov
|
e36bacfd6b
|
feat: 完成多个组件的国际化支持与文本替换
- 更新 AccountForm.vue 中的占位符文本为 i18n 语言包中的键
- 修改 ConfirmModal.vue 中的确认和取消按钮文本为 i18n 语言包中的键
- 更新 CustomDropdown.vue 中的占位符文本为 i18n 语言包中的键
- 修改 app.js 中的应用标题为英文版本
- 更新 router/index.js 中的日志输出为英文
- 在 accounts.js 和 apiKeys.js 中的错误处理信息中引入 i18n 键以提升多语言一致性
- 更新 dashboard.js 中的系统状态和错误日志为 i18n 键
- 在 DashboardView.vue 中的多个文本替换为 i18n 语言包中的键
|
2025-09-12 00:04:11 +08:00 |
|
Wangnov
|
d5b9f809b0
|
feat: 完成布局/仪表板/用户相关组件国际化与语言切换优化(TabBar/MainLayout/AppHeader、UsageTrend/ModelDistribution、User*、Common 组件、i18n/locale 增强)
|
2025-09-12 00:04:10 +08:00 |
|
Wangnov
|
97b94eeff9
|
feat: 完成web/admin-spa/src/components/apikeys的国际化并修复语法错误和警告
|
2025-09-12 00:03:05 +08:00 |
|
Wangnov
|
26d8c98c9d
|
feat: 完成UserUsageStatsModal和ChangeRoleModal组件国际化
- 添加用户使用统计模态框的完整国际化支持
* 时间选择器选项(最近24小时/7天/30天/90天)
* 统计卡片(请求数/输入Token/输出Token/总费用)
* API Keys表格表头和状态显示
* 使用趋势图表占位符和无数据状态
- 添加角色变更模态框的完整国际化支持
* 角色选择表单和描述文本
* 动态警告消息(授予/移除管理员权限)
* 按钮状态和成功提示消息
- 更新三种语言文件(zh-cn/en/zh-tw)添加新的翻译键值
- 集成Vue I18n组合式API支持动态参数替换
- 保持响应式翻译和用户体验的一致性
|
2025-09-12 00:03:03 +08:00 |
|
Wangnov
|
2de5191c05
|
feat: 完成三个核心组件的国际化实现
- 完成 GroupManagementModal.vue 组件国际化
* 添加分组管理相关的所有翻译键
* 实现创建、编辑、删除分组功能的多语言支持
- 完成 OAuthFlow.vue 组件国际化
* 支持 Claude、Gemini、OpenAI 三个平台的授权流程
* 修复模板中的语法错误(缺少引号)
* 保留技术性地址不进行翻译
- 完成 ProxyConfig.vue 组件国际化
* 添加代理配置相关的翻译键
* 支持 SOCKS5 和 HTTP 代理类型的多语言显示
- 更新语言文件
* 在 zh-cn.js、en.js、zh-tw.js 中添加所有新的翻译键
* 保持三种语言文件的同步
变更统计:6 文件修改,526 行新增,116 行删除
|
2025-09-12 00:03:03 +08:00 |
|
Wangnov
|
2b40552eab
|
feat: 完成AccountForm组件国际化的最终验证和修复
- 修复遗漏的API URL和API Key标签国际化
- 修复title属性的国际化(复制链接提示)
- 修复Claude Max/Pro订阅类型显示的国际化
- 修复剩余placeholder属性的国际化
- 完成系统性的多维度验证检查:
* ✅ 模板中的硬编码文本
* ✅ JavaScript中的字符串常量
* ✅ 特殊属性(title, placeholder等)
* ✅ 翻译键在三语言文件中的存在性
* ✅ 动态内容和条件渲染
现在AccountForm组件已真正实现完整的三语言国际化支持
|
2025-09-12 00:03:03 +08:00 |
|
Wangnov
|
30acf4a374
|
feat: 修复AccountForm组件中所有遗漏的国际化内容
- 添加60+个新的翻译键到三语言文件
- 国际化所有placeholder属性
- 国际化按钮文本和标签
- 国际化错误消息和验证提示
- 国际化OAuth步骤描述文本
- 国际化Claude功能描述和配置说明
- 确保三种语言完整覆盖所有UI文本
|
2025-09-12 00:03:03 +08:00 |
|