fix: 修复 Claude 周额度统计范围,从仅 Opus 扩展到全部 Claude 模型

- 将 isOpusModel 替换为 isClaudeFamilyModel,使周额度限制覆盖所有 Claude 系列模型
- 前端 ApiKeysView 新增 Claude 周限制进度条显示
- 修复"无任何限制"提示在有周限制时仍然显示的问题

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
yuanhaitao
2026-02-23 16:02:26 +08:00
parent d6ced986b6
commit 67a81e4941
4 changed files with 25 additions and 9 deletions

View File

@@ -9,7 +9,7 @@ const ClientValidator = require('../validators/clientValidator')
const ClaudeCodeValidator = require('../validators/clients/claudeCodeValidator')
const claudeRelayConfigService = require('../services/claudeRelayConfigService')
const { calculateWaitTimeStats } = require('../utils/statsHelper')
const { isOpusModel } = require('../utils/modelHelper')
const { isClaudeFamilyModel } = require('../utils/modelHelper')
// 工具函数
function sleep(ms) {
@@ -1256,7 +1256,7 @@ const authenticateApiKey = async (req, res, next) => {
const model = requestBody.model || ''
// 判断是否为 Claude 模型
if (isOpusModel(model)) {
if (isClaudeFamilyModel(model)) {
const weeklyOpusCost = validation.keyData.weeklyOpusCost || 0
if (weeklyOpusCost >= weeklyOpusCostLimit) {
@@ -1278,7 +1278,7 @@ const authenticateApiKey = async (req, res, next) => {
return res.status(402).json({
error: {
type: 'insufficient_quota',
message: `已达到 Opus 模型周费用限制 ($${weeklyOpusCostLimit})`,
message: `已达到 Claude 模型周费用限制 ($${weeklyOpusCostLimit})`,
code: 'weekly_opus_cost_limit_exceeded'
},
currentCost: weeklyOpusCost,

View File

@@ -4,7 +4,7 @@ const config = require('../../config/config')
const redis = require('../models/redis')
const logger = require('../utils/logger')
const serviceRatesService = require('./serviceRatesService')
const { isOpusModel } = require('../utils/modelHelper')
const { isClaudeFamilyModel } = require('../utils/modelHelper')
const ACCOUNT_TYPE_CONFIG = {
claude: { prefix: 'claude:account:' },
@@ -1649,7 +1649,7 @@ class ApiKeyService {
async recordOpusCost(keyId, ratedCost, realCost, model, accountType) {
try {
// 判断是否为 Claude 系列模型(包含 Bedrock 格式等)
if (!isOpusModel(model)) {
if (!isClaudeFamilyModel(model)) {
return
}

View File

@@ -2,7 +2,7 @@ const redis = require('../models/redis')
const logger = require('../utils/logger')
const pricingService = require('./pricingService')
const serviceRatesService = require('./serviceRatesService')
const { isOpusModel } = require('../utils/modelHelper')
const { isClaudeFamilyModel } = require('../utils/modelHelper')
function pad2(n) {
return String(n).padStart(2, '0')
@@ -151,7 +151,7 @@ class WeeklyClaudeCostInitService {
}
const keyId = match[1]
const model = match[2]
if (!isOpusModel(model)) {
if (!isClaudeFamilyModel(model)) {
continue
}
matchedClaudeKeys++