feat(channel): 模型标签输入 + $/MTok 价格单位 + 左开右闭区间 + i18n
- 模型输入改为标签列表(输入回车添加,支持粘贴批量导入) - 价格显示单位改为 $/MTok(每百万 token),提交时自动转换 - Token 模式增加图片输出价格字段(适配 Gemini 图片模型按 token 计费) - 区间边界改为左开右闭 (min, max],右边界包含 - 默认价格作为未命中区间时的回退价格 - 添加完整中英文 i18n 翻译
This commit is contained in:
@@ -335,6 +335,7 @@ export default {
|
||||
profile: 'Profile',
|
||||
users: 'Users',
|
||||
groups: 'Groups',
|
||||
channels: 'Channels',
|
||||
subscriptions: 'Subscriptions',
|
||||
accounts: 'Accounts',
|
||||
proxies: 'Proxies',
|
||||
@@ -1719,6 +1720,79 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
// Channel Management
|
||||
channels: {
|
||||
title: 'Channel Management',
|
||||
description: 'Manage channels and custom model pricing',
|
||||
searchChannels: 'Search channels...',
|
||||
createChannel: 'Create Channel',
|
||||
editChannel: 'Edit Channel',
|
||||
deleteChannel: 'Delete Channel',
|
||||
statusActive: 'Active',
|
||||
statusDisabled: 'Disabled',
|
||||
allStatus: 'All Status',
|
||||
groupsUnit: 'groups',
|
||||
pricingUnit: 'pricing rules',
|
||||
noChannelsYet: 'No Channels Yet',
|
||||
createFirstChannel: 'Create your first channel to manage model pricing',
|
||||
loadError: 'Failed to load channels',
|
||||
createSuccess: 'Channel created',
|
||||
updateSuccess: 'Channel updated',
|
||||
deleteSuccess: 'Channel deleted',
|
||||
createError: 'Failed to create channel',
|
||||
updateError: 'Failed to update channel',
|
||||
deleteError: 'Failed to delete channel',
|
||||
nameRequired: 'Please enter a channel name',
|
||||
deleteConfirm: 'Are you sure you want to delete channel "{name}"? This cannot be undone.',
|
||||
columns: {
|
||||
name: 'Name',
|
||||
description: 'Description',
|
||||
status: 'Status',
|
||||
groups: 'Groups',
|
||||
pricing: 'Pricing',
|
||||
createdAt: 'Created',
|
||||
actions: 'Actions'
|
||||
},
|
||||
billingMode: {
|
||||
token: 'Token',
|
||||
perRequest: 'Per Request',
|
||||
image: 'Image (Per Request)'
|
||||
},
|
||||
form: {
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter channel name',
|
||||
description: 'Description',
|
||||
descriptionPlaceholder: 'Optional description',
|
||||
status: 'Status',
|
||||
groups: 'Associated Groups',
|
||||
noGroupsAvailable: 'No groups available',
|
||||
inOtherChannel: 'In "{name}"',
|
||||
modelPricing: 'Model Pricing',
|
||||
models: 'Models',
|
||||
modelsPlaceholder: 'Type model name and press Enter. Supports wildcard *',
|
||||
modelInputHint: 'Press Enter to add. Supports paste and wildcard *.',
|
||||
billingMode: 'Billing Mode',
|
||||
defaultPrices: 'Default prices (fallback when no interval matches)',
|
||||
inputPrice: 'Input',
|
||||
outputPrice: 'Output',
|
||||
cacheWritePrice: 'Cache Write',
|
||||
cacheReadPrice: 'Cache Read',
|
||||
imageTokenPrice: 'Image Output',
|
||||
imageOutputPrice: 'Image Output Price',
|
||||
pricePlaceholder: 'Default',
|
||||
intervals: 'Context Intervals (optional)',
|
||||
addInterval: 'Add Interval',
|
||||
requestTiers: 'Request Tiers',
|
||||
imageTiers: 'Image Tiers (Per Request)',
|
||||
addTier: 'Add Tier',
|
||||
noTiersYet: 'No tiers yet. Click add to configure per-request pricing.',
|
||||
noPricingRules: 'No pricing rules yet. Click "Add" to create one.',
|
||||
perRequestPrice: 'Price per Request',
|
||||
tierLabel: 'Tier',
|
||||
resolution: 'Resolution'
|
||||
}
|
||||
},
|
||||
|
||||
// Subscriptions
|
||||
subscriptions: {
|
||||
title: 'Subscription Management',
|
||||
|
||||
@@ -335,6 +335,7 @@ export default {
|
||||
profile: '个人资料',
|
||||
users: '用户管理',
|
||||
groups: '分组管理',
|
||||
channels: '渠道管理',
|
||||
subscriptions: '订阅管理',
|
||||
accounts: '账号管理',
|
||||
proxies: 'IP管理',
|
||||
@@ -1799,6 +1800,79 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
// Channel Management
|
||||
channels: {
|
||||
title: '渠道管理',
|
||||
description: '管理渠道和自定义模型定价',
|
||||
searchChannels: '搜索渠道...',
|
||||
createChannel: '创建渠道',
|
||||
editChannel: '编辑渠道',
|
||||
deleteChannel: '删除渠道',
|
||||
statusActive: '启用',
|
||||
statusDisabled: '停用',
|
||||
allStatus: '全部状态',
|
||||
groupsUnit: '个分组',
|
||||
pricingUnit: '条定价',
|
||||
noChannelsYet: '暂无渠道',
|
||||
createFirstChannel: '创建第一个渠道来管理模型定价',
|
||||
loadError: '加载渠道列表失败',
|
||||
createSuccess: '渠道创建成功',
|
||||
updateSuccess: '渠道更新成功',
|
||||
deleteSuccess: '渠道删除成功',
|
||||
createError: '创建渠道失败',
|
||||
updateError: '更新渠道失败',
|
||||
deleteError: '删除渠道失败',
|
||||
nameRequired: '请输入渠道名称',
|
||||
deleteConfirm: '确定要删除渠道「{name}」吗?此操作不可撤销。',
|
||||
columns: {
|
||||
name: '名称',
|
||||
description: '描述',
|
||||
status: '状态',
|
||||
groups: '分组',
|
||||
pricing: '定价',
|
||||
createdAt: '创建时间',
|
||||
actions: '操作'
|
||||
},
|
||||
billingMode: {
|
||||
token: 'Token',
|
||||
perRequest: '按次',
|
||||
image: '图片(按次)'
|
||||
},
|
||||
form: {
|
||||
name: '名称',
|
||||
namePlaceholder: '输入渠道名称',
|
||||
description: '描述',
|
||||
descriptionPlaceholder: '可选描述',
|
||||
status: '状态',
|
||||
groups: '关联分组',
|
||||
noGroupsAvailable: '暂无可用分组',
|
||||
inOtherChannel: '已属于「{name}」',
|
||||
modelPricing: '模型定价',
|
||||
models: '模型列表',
|
||||
modelsPlaceholder: '输入模型名后按回车添加,支持通配符 *',
|
||||
modelInputHint: '按回车添加,支持粘贴批量导入,支持通配符 *',
|
||||
billingMode: '计费模式',
|
||||
defaultPrices: '默认价格(未命中区间时使用)',
|
||||
inputPrice: '输入',
|
||||
outputPrice: '输出',
|
||||
cacheWritePrice: '缓存写入',
|
||||
cacheReadPrice: '缓存读取',
|
||||
imageTokenPrice: '图片输出',
|
||||
imageOutputPrice: '图片输出价格',
|
||||
pricePlaceholder: '默认',
|
||||
intervals: '上下文区间定价(可选)',
|
||||
addInterval: '添加区间',
|
||||
requestTiers: '按次计费层级',
|
||||
imageTiers: '图片计费层级(按次)',
|
||||
addTier: '添加层级',
|
||||
noTiersYet: '暂无层级,点击添加配置按次计费价格',
|
||||
noPricingRules: '暂无定价规则,点击"添加"创建',
|
||||
perRequestPrice: '单次价格',
|
||||
tierLabel: '层级',
|
||||
resolution: '分辨率'
|
||||
}
|
||||
},
|
||||
|
||||
// Subscriptions Management
|
||||
subscriptions: {
|
||||
title: '订阅管理',
|
||||
|
||||
Reference in New Issue
Block a user