"frontend/src/views/vscode:/vscode.git/clone" did not exist on "87f4ed591e9f779c3c19f6d49c129466c93f78fc"
- 29 Dec, 2025 10 commits
-
-
shaw authored
- 使用 Teleport 将 Select 下拉菜单渲染到 body,避免 driver.js 遮罩层阻挡 - 添加 pointer-events 和 @click.stop 确保下拉选项可点击 - 移除 useOnboardingTour 中无效的 Select 组件处理代码 - 清理未使用的 CSS 样式和 console 调试语句 - 简化 Select 组件在引导期间的交互逻辑
-
shaw authored
删除开发过程中遗留的未使用文件: - TourDescription.vue: 未被使用的结构化描述组件 - useTourStepDescription.ts: 步骤key映射,引用的组件从未创建 - TourStepDescriptions/: 空的组件目录 当前实现通过 i18n + HTML 字符串直接提供描述内容,无需这些文件。
-
IanShaw027 authored
-
IanShaw027 authored
1. 移除重复的"不再提示"按钮 - 只保留右上角的关闭按钮(X) - 简化用户操作,避免混淆 2. 移除退出确认框 - 点击关闭按钮直接退出并标记为已看过 - ESC 键也直接退出,不再弹出确认框 - 提升用户体验,减少打扰 3. 修复 Select 下拉菜单被遮挡问题 - 增加被高亮元素的下拉菜单 z-index - 确保下拉菜单在引导 popover 之上显示 - 解决步骤 5/21 (平台选择) 无法操作的问题
-
IanShaw027 authored
修复 Gemini 审查发现的潜在问题,并增强新手引导功能: 1. 简易模式下完全禁用新手引导 - useOnboardingTour: 添加 isSimpleMode 判断,简易模式下不自动启动 - 只在标准模式的管理员第一次加载时自动弹出 2. 动态过滤简易模式相关步骤 - steps.ts: getAdminSteps 添加 isSimpleMode 参数 - 简易模式下自动过滤分组管理和账号分组选择步骤 - 避免引导找不到被隐藏的元素 3. 优化引导按钮显示条件 - AppHeader: 添加 showOnboardingButton computed - 只在标准模式的管理员下显示"重新开始引导"按钮 - 非管理员或简易模式下不显示按钮 4. 确保引导只在首次自动弹出 - 关闭后不再自动出现 - 只能从右上角手动重新打开
-
IanShaw027 authored
- 添加 Guide 组件和引导步骤配置 - 实现 useOnboardingTour 和 useTourStepDescription composables - 添加 onboarding store 管理引导状态 - 更新多个视图和组件以支持引导功能 - 添加国际化支持(中英文) - 删除旧的实现指南文档
-
shaw authored
-
shaw authored
- 移除 api_contract_test.go 中的 SettingKeySimpleMode 引用 - 移除期望响应中的 simple_mode 字段 - 修复 NewSettingHandler 调用参数数量
-
shaw authored
移除与 PR #66 冲突的旧版简易模式实现(commit 7d4b7dee)。 新版简易模式通过 run_mode 配置文件/环境变量控制,无需数据库设置。 后端变更: - 移除 SettingKeySimpleMode 常量 - 移除 SystemSettings/PublicSettings 中的 SimpleMode 字段 - 移除 setting_handler 中的简易模式切换逻辑 - 移除 userService 依赖(不再需要自动设置管理员并发数) 前端变更: - 移除 appStore.simpleMode 状态 - 移除设置页面的"使用模式"设置区块 - 移除 GroupsView 中的简易模式相关逻辑 - 移除相关国际化文案
-
shaw authored
- Remove unused simpleMode variable in AppSidebar.vue - Add run_mode to AuthResponse.user type definition
-
- 28 Dec, 2025 25 commits
-
-
IanShaw027 authored
**问题**: 1. login/register 未处理 run_mode,导致 authStore.runMode 不更新 2. 侧边栏使用 simpleMode.value,与路由守卫的 authStore.isSimpleMode 不一致 **修复**: 1. 在 login() 和 register() 中提取并设置 run_mode 2. 统一侧边栏使用 authStore.isSimpleMode **影响**: - 路由守卫现在可以正确工作 - 前端UI状态与后端配置保持一致 - 登录/注册后立即生效,无需刷新
-
IanShaw027 authored
由于简易模式会自动创建3个默认分组(anthropic-default, openai-default, gemini-default), 需要更新测试用例的预期数量: - TestList: 期望5个分组(3个默认 + 2个测试) - TestListActive: 期望4个活跃分组(3个默认 + 1个测试) - TestListActiveByPlatform: 期望2个Anthropic分组(1个默认 + 1个测试) - TestListWithFilters_Platform: 期望2个OpenAI分组(1个默认 + 1个测试)
-
IanShaw027 authored
**问题**: - 使用 toISOString() 格式化日期导致UTC时区问题 - 在UTC+8时区凌晨时,日期会显示为前一天 - 日期范围初始化在 onMounted 中导致重复渲染和请求 **修复**: - 统一使用本地时区格式化日期 - 在变量声明时就初始化日期范围,避免延迟初始化 - 移除 initializeDateRange() 函数,直接在声明时设置正确值 - 添加 formatLocalDate() 辅助函数统一日期格式化逻辑 **影响范围**: - 用户仪表盘 (DashboardView) - 管理员仪表盘 (admin/DashboardView) - 用户使用记录 (UsageView) - 管理员使用记录 (admin/UsageView) **效果**: - 日期范围正确包含当天数据 - 避免页面加载时的重复请求 - 改善用户体验,减少不必要的重新渲染
-
IanShaw027 authored
**功能概述**: 实现简易模式(Simple Mode),为个人用户和小团队提供简化的使用体验,隐藏复杂的分组、订阅、配额等概念。 **后端改动**: 1. 配置系统 - 新增 run_mode 配置项(standard/simple) - 支持环境变量 RUN_MODE - 默认值为 standard 2. 数据库初始化 - 自动创建3个默认分组:anthropic-default、openai-default、gemini-default - 默认分组配置:无并发限制、active状态、非独占 - 幂等性保证:重复启动不会重复创建 3. 账号管理 - 创建账号时自动绑定对应平台的默认分组 - 如果未指定分组,自动查找并绑定默认分组 **前端改动**: 1. 状态管理 - authStore 新增 isSimpleMode 计算属性 - 从后端API获取并同步运行模式 2. UI隐藏 - 侧边栏:隐藏分组管理、订阅管理、兑换码菜单 - 账号管理页面:隐藏分组列 - 创建/编辑账号对话框:隐藏分组选择器 3. 路由守卫 - 限制访问分组、订阅、兑换码相关页面 - 访问受限页面时自动重定向到仪表板 **配置示例**: ```yaml run_mode: simple run_mode: standard ``` **影响范围**: - 后端:配置、数据库迁移、账号服务 - 前端:认证状态、路由、UI组件 - 部署:配置文件示例 **兼容性**: - 简易模式和标准模式可无缝切换 - 不需要数据迁移 - 现有数据不受影响
-
shaw authored
- 添加 OpenAI/Gemini 平台的 baseUrlHint 和 apiKeyHint 国际化文案 - 修改 CreateAccountModal 和 EditAccountModal 根据平台显示正确提示 - 将重复的平台判断逻辑抽取为 computed 属性,优化代码结构
-
shaw authored
问题: 1. WindowStats 与 API 响应一起缓存 10 分钟,导致费用数据更新延迟 2. 当 5h 窗口未激活(ResetsAt 为空)时,FiveHour 为 nil,导致所有窗口的 WindowStats 都无法显示 修复: - 分离缓存:API 响应缓存 10 分钟,窗口统计独立缓存 1 分钟 - RemainingSeconds 每次请求时实时计算 - FiveHour 对象始终创建(即使 ResetsAt 为空) - addWindowStats 增强防护,支持 FiveHour 为 nil 时仍处理其他窗口
-
shaw authored
API 响应新增 simple_mode 字段,同步更新测试期望值
-
shaw authored
- 测试文件添加第三个参数 userService(nil) - Handler 添加 userService 空指针检查,防止测试环境 panic
-
shaw authored
- 修改下拉框宽度策略为 min-w-full w-max max-w-[300px],允许自动扩展 - 添加 left-0 确保下拉框左对齐 - 为选项标签添加 flex-1 min-w-0 text-left 确保正确布局
-
shaw authored
新增简单模式设置,适合个人使用场景: - 隐藏多用户管理相关菜单(用户管理、兑换码等) - 自动关闭用户注册功能 - 管理员并发数自动设为无限制(99999) - 侧边栏根据模式动态调整菜单项 同时优化分组页面的"专属分组"功能,添加帮助提示说明使用场景
-
shaw authored
-
Wesley Liddick authored
-
IanShaw027 authored
- 移除未使用的 hasExpandableActions 计算属性 - 移除未使用的 toggleActionsExpanded 函数 - 修复 TypeScript 类型检查错误
-
IanShaw027 authored
- 移除操作列表头的展开/折叠按钮和图标 - 该功能已被操作列内的'更多'按钮替代 - 保留底层的展开/收起逻辑供'更多'按钮使用
-
IanShaw027 authored
- 修复RedeemView订阅刷新失败导致流程中断的问题 将订阅刷新隔离到独立try/catch,失败时仅显示警告 - 修复DataTable resize事件监听器泄漏问题 确保添加和移除使用同一个回调引用 - 修复订阅状态缓存导致强制刷新失效的问题 force=true时绕过activePromise缓存,clear()清空缓存 - 修复图表主题切换后颜色不更新的问题 添加图表ref并在主题切换时调用update()方法
-
IanShaw027 authored
- 在 Dashboard 页面加载时强制刷新订阅状态 - 在兑换订阅卡密后立即刷新订阅状态 - 清理订阅轮询相关注释
-
IanShaw027 authored
-
IanShaw027 authored
- DataTable组件操作列自适应 - 优化各种Modal弹窗 - 统一API调用方式(AbortSignal) - 添加全局订阅状态管理 - 优化各管理视图的交互和布局 - 修复国际化翻译问题
-
yangjianbo authored
- apiKeyService.GetByKey(...) 返回的“找不到 API key”在这个项目里通常会被翻译成业务错误(比如 service.ErrApiKeyNotFound 这类 ApplicationError),而不是直接把 gorm.ErrRecordNotFound 透传到中 间件层。 - 因此你在中间件里用 errors.Is(err, gorm.ErrRecordNotFound) 去判断“无效 key”,很容易匹配不到(尤其 是:后面加 Redis 缓存、换存储实现、或测试里用 stub repo 时,根本不会出现 gorm 的错误)。 - 匹配不到时就会走到 500 Failed to validate API key,导致无效 API key 被错误地当成服务端故障返回 500(应该是 401)。 修复思路:中间件不要依赖 gorm 的错误,改成判断业务层错误,例如: if errors.Is(err, service.ErrApiKeyNotFound) { abortWithGoogleError(c, 401, "Invalid API key") return } 如果你把 GetByKey 的“not found”统一封装成业务错误,这样才不会被底层实现(gorm/redis/mock)影响。 -
程序猿MT authored
-
shaw authored
使用 `id -u` 替代 `$EUID` 进行 root 权限检查。 `$EUID` 是 bash 内置变量,在通过 pipe 执行脚本时可能不可靠。
-
shaw authored
问题:当分配订阅天数过大时,expires_at 年份可能超过 9999, 导致 time.Time JSON 序列化失败(RFC 3339 要求年份 <= 9999), 使后台无法显示和删除异常数据。 修复: - handler 层添加 validity_days 最大值验证(max=36500,即100年) - service 层添加 MaxValidityDays 和 MaxExpiresAt 双重保护 - 启动时自动修复已存在的异常数据(expires_at > 2099年)
-
shaw authored
-
shaw authored
-
noreply authored
Implement deferred batch update mechanism to reduce database load: - Add DeferredService for batching account last_used_at updates - Add TimingWheelService for efficient recurring task scheduling - Integrate with GatewayService and OpenAIGatewayService - Implement BatchUpdateLastUsed repository method using CASE...WHEN SQL - Fix golangci-lint error: Replace interface{} with any Benefits: - Reduces database writes by batching updates (10-second intervals) - Improves request throughput by deferring non-critical updates - Maintains accurate account usage tracking for scheduling
-
- 27 Dec, 2025 5 commits
-
-
程序猿MT authored
-
-
yangjianbo authored
问题:仪表盘“最近用量”调用 /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
-
程序猿MT authored
feat 增加 caddy 示例安全反向代理
-
程序猿MT authored
-