Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
a88ee965
Unverified
Commit
a88ee965
authored
Feb 27, 2026
by
Wesley Liddick
Committed by
GitHub
Feb 27, 2026
Browse files
Merge pull request #665 from touwaeriol/fix/2k-image-default-pricing
fix: add 2K image default pricing at 1.5x base price
parents
3cc2f9bd
d1b684b7
Changes
3
Hide whitespace changes
Inline
Side-by-side
backend/internal/service/billing_service.go
View file @
a88ee965
...
...
@@ -543,7 +543,10 @@ func (s *BillingService) getDefaultImagePrice(model string, imageSize string) fl
basePrice
=
0.134
}
// 4K 尺寸翻倍
// 2K 尺寸 1.5 倍,4K 尺寸翻倍
if
imageSize
==
"2K"
{
return
basePrice
*
1.5
}
if
imageSize
==
"4K"
{
return
basePrice
*
2
}
...
...
backend/internal/service/billing_service_image_test.go
View file @
a88ee965
...
...
@@ -12,14 +12,14 @@ import (
func
TestCalculateImageCost_DefaultPricing
(
t
*
testing
.
T
)
{
svc
:=
&
BillingService
{}
// pricingService 为 nil,使用硬编码默认值
// 2K 尺寸,默认价格 $0.134
// 2K 尺寸,默认价格 $0.134
* 1.5 = $0.201
cost
:=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
1
,
nil
,
1.0
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
ActualCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
201
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
201
,
cost
.
ActualCost
,
0.0001
)
// 多张图片
cost
=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
3
,
nil
,
1.0
)
require
.
InDelta
(
t
,
0.
402
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
603
,
cost
.
TotalCost
,
0.0001
)
}
// TestCalculateImageCost_GroupCustomPricing 测试分组自定义价格
...
...
@@ -63,13 +63,13 @@ func TestCalculateImageCost_RateMultiplier(t *testing.T) {
// 费率倍数 1.5x
cost
:=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
1
,
nil
,
1.5
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
TotalCost
,
0.0001
)
// TotalCost
不变
require
.
InDelta
(
t
,
0.
2
01
,
cost
.
ActualCost
,
0.0001
)
// ActualCost = 0.
134
* 1.5
require
.
InDelta
(
t
,
0.
201
,
cost
.
TotalCost
,
0.0001
)
// TotalCost
= 0.134 * 1.5
require
.
InDelta
(
t
,
0.
3
01
5
,
cost
.
ActualCost
,
0.0001
)
// ActualCost = 0.
201
* 1.5
// 费率倍数 2.0x
cost
=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
2
,
nil
,
2.0
)
require
.
InDelta
(
t
,
0.
268
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
536
,
cost
.
ActualCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
402
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
804
,
cost
.
ActualCost
,
0.0001
)
}
// TestCalculateImageCost_ZeroCount 测试 imageCount=0
...
...
@@ -95,8 +95,8 @@ func TestCalculateImageCost_ZeroRateMultiplier(t *testing.T) {
svc
:=
&
BillingService
{}
cost
:=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
1
,
nil
,
0
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
ActualCost
,
0.0001
)
// 0 倍率当作 1.0 处理
require
.
InDelta
(
t
,
0.
201
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
201
,
cost
.
ActualCost
,
0.0001
)
// 0 倍率当作 1.0 处理
}
// TestGetImageUnitPrice_GroupPriorityOverDefault 测试分组价格优先于默认价格
...
...
@@ -127,9 +127,9 @@ func TestGetImageUnitPrice_PartialGroupConfig(t *testing.T) {
cost
:=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"1K"
,
1
,
groupConfig
,
1.0
)
require
.
InDelta
(
t
,
0.10
,
cost
.
TotalCost
,
0.0001
)
// 2K 回退默认价格 $0.
134
// 2K 回退默认价格 $0.
201 (1.5倍)
cost
=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
1
,
groupConfig
,
1.0
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
201
,
cost
.
TotalCost
,
0.0001
)
// 4K 回退默认价格 $0.268 (翻倍)
cost
=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"4K"
,
1
,
groupConfig
,
1.0
)
...
...
@@ -140,10 +140,10 @@ func TestGetImageUnitPrice_PartialGroupConfig(t *testing.T) {
func
TestGetDefaultImagePrice_FallbackHardcoded
(
t
*
testing
.
T
)
{
svc
:=
&
BillingService
{}
// pricingService 为 nil
// 1K
和 2K 使用相同的
默认价格 $0.134
// 1K 默认价格 $0.134
,2K 默认价格 $0.201 (1.5倍)
cost
:=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"1K"
,
1
,
nil
,
1.0
)
require
.
InDelta
(
t
,
0.134
,
cost
.
TotalCost
,
0.0001
)
cost
=
svc
.
CalculateImageCost
(
"gemini-3-pro-image"
,
"2K"
,
1
,
nil
,
1.0
)
require
.
InDelta
(
t
,
0.
134
,
cost
.
TotalCost
,
0.0001
)
require
.
InDelta
(
t
,
0.
201
,
cost
.
TotalCost
,
0.0001
)
}
frontend/src/views/admin/GroupsView.vue
View file @
a88ee965
...
...
@@ -459,7 +459,7 @@
step
=
"
0.001
"
min
=
"
0
"
class
=
"
input
"
placeholder
=
"
0.
134
"
placeholder
=
"
0.
201
"
/>
<
/div
>
<
div
>
...
...
@@ -1139,7 +1139,7 @@
step
=
"
0.001
"
min
=
"
0
"
class
=
"
input
"
placeholder
=
"
0.
134
"
placeholder
=
"
0.
201
"
/>
<
/div
>
<
div
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment