feat(计费): 支持账号计费倍率快照与统计展示
- 新增 accounts.rate_multiplier(默认 1.0,允许 0) - 使用 usage_logs.account_rate_multiplier 记录倍率快照,避免历史回算 - 统计/导出/管理端展示账号口径费用(total_cost * account_rate_multiplier)
This commit is contained in:
@@ -459,7 +459,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Concurrency & Priority -->
|
||||
<div class="grid grid-cols-2 gap-4 border-t border-gray-200 pt-4 dark:border-dark-600">
|
||||
<div class="grid grid-cols-2 gap-4 border-t border-gray-200 pt-4 dark:border-dark-600 lg:grid-cols-3">
|
||||
<div>
|
||||
<div class="mb-3 flex items-center justify-between">
|
||||
<label
|
||||
@@ -516,6 +516,36 @@
|
||||
aria-labelledby="bulk-edit-priority-label"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3 flex items-center justify-between">
|
||||
<label
|
||||
id="bulk-edit-rate-multiplier-label"
|
||||
class="input-label mb-0"
|
||||
for="bulk-edit-rate-multiplier-enabled"
|
||||
>
|
||||
{{ t('admin.accounts.billingRateMultiplier') }}
|
||||
</label>
|
||||
<input
|
||||
v-model="enableRateMultiplier"
|
||||
id="bulk-edit-rate-multiplier-enabled"
|
||||
type="checkbox"
|
||||
aria-controls="bulk-edit-rate-multiplier"
|
||||
class="rounded border-gray-300 text-primary-600 focus:ring-primary-500"
|
||||
/>
|
||||
</div>
|
||||
<input
|
||||
v-model.number="rateMultiplier"
|
||||
id="bulk-edit-rate-multiplier"
|
||||
type="number"
|
||||
min="0"
|
||||
step="0.01"
|
||||
:disabled="!enableRateMultiplier"
|
||||
class="input"
|
||||
:class="!enableRateMultiplier && 'cursor-not-allowed opacity-50'"
|
||||
aria-labelledby="bulk-edit-rate-multiplier-label"
|
||||
/>
|
||||
<p class="input-hint">{{ t('admin.accounts.billingRateMultiplierHint') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Status -->
|
||||
@@ -655,6 +685,7 @@ const enableInterceptWarmup = ref(false)
|
||||
const enableProxy = ref(false)
|
||||
const enableConcurrency = ref(false)
|
||||
const enablePriority = ref(false)
|
||||
const enableRateMultiplier = ref(false)
|
||||
const enableStatus = ref(false)
|
||||
const enableGroups = ref(false)
|
||||
|
||||
@@ -670,6 +701,7 @@ const interceptWarmupRequests = ref(false)
|
||||
const proxyId = ref<number | null>(null)
|
||||
const concurrency = ref(1)
|
||||
const priority = ref(1)
|
||||
const rateMultiplier = ref(1)
|
||||
const status = ref<'active' | 'inactive'>('active')
|
||||
const groupIds = ref<number[]>([])
|
||||
|
||||
@@ -863,6 +895,10 @@ const buildUpdatePayload = (): Record<string, unknown> | null => {
|
||||
updates.priority = priority.value
|
||||
}
|
||||
|
||||
if (enableRateMultiplier.value) {
|
||||
updates.rate_multiplier = rateMultiplier.value
|
||||
}
|
||||
|
||||
if (enableStatus.value) {
|
||||
updates.status = status.value
|
||||
}
|
||||
@@ -923,6 +959,7 @@ const handleSubmit = async () => {
|
||||
enableProxy.value ||
|
||||
enableConcurrency.value ||
|
||||
enablePriority.value ||
|
||||
enableRateMultiplier.value ||
|
||||
enableStatus.value ||
|
||||
enableGroups.value
|
||||
|
||||
@@ -977,6 +1014,7 @@ watch(
|
||||
enableProxy.value = false
|
||||
enableConcurrency.value = false
|
||||
enablePriority.value = false
|
||||
enableRateMultiplier.value = false
|
||||
enableStatus.value = false
|
||||
enableGroups.value = false
|
||||
|
||||
@@ -991,6 +1029,7 @@ watch(
|
||||
proxyId.value = null
|
||||
concurrency.value = 1
|
||||
priority.value = 1
|
||||
rateMultiplier.value = 1
|
||||
status.value = 'active'
|
||||
groupIds.value = []
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user