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
e1c9016d
Commit
e1c9016d
authored
Feb 28, 2026
by
QTom
Browse files
feat: add RPM config to EditAccountModal
parent
953c5036
Changes
1
Show whitespace changes
Inline
Side-by-side
frontend/src/components/account/EditAccountModal.vue
View file @
e1c9016d
...
@@ -946,6 +946,56 @@
...
@@ -946,6 +946,56 @@
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<!--
RPM
Limit
-->
<
div
class
=
"
rounded-lg border border-gray-200 p-4 dark:border-dark-600
"
>
<
div
class
=
"
mb-3 flex items-center justify-between
"
>
<
div
>
<
label
class
=
"
input-label mb-0
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.label
'
)
}}
<
/label
>
<
p
class
=
"
mt-1 text-xs text-gray-500 dark:text-gray-400
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.hint
'
)
}}
<
/p
>
<
/div
>
<
button
type
=
"
button
"
@
click
=
"
rpmLimitEnabled = !rpmLimitEnabled
"
:
class
=
"
[
'relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',
rpmLimitEnabled ? 'bg-primary-600' : 'bg-gray-200 dark:bg-dark-600'
]
"
>
<
span
:
class
=
"
[
'pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out',
rpmLimitEnabled ? 'translate-x-5' : 'translate-x-0'
]
"
/>
<
/button
>
<
/div
>
<
div
v
-
if
=
"
rpmLimitEnabled
"
class
=
"
grid grid-cols-2 gap-4
"
>
<
div
>
<
label
class
=
"
input-label
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.baseRpm
'
)
}}
<
/label
>
<
input
v
-
model
.
number
=
"
baseRpm
"
type
=
"
number
"
min
=
"
1
"
step
=
"
1
"
class
=
"
input
"
:
placeholder
=
"
t('admin.accounts.quotaControl.rpmLimit.baseRpmPlaceholder')
"
/>
<
p
class
=
"
input-hint
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.baseRpmHint
'
)
}}
<
/p
>
<
/div
>
<
div
>
<
label
class
=
"
input-label
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.strategy
'
)
}}
<
/label
>
<
select
v
-
model
=
"
rpmStrategy
"
class
=
"
input
"
>
<
option
value
=
"
tiered
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.strategyTiered
'
)
}}
<
/option
>
<
option
value
=
"
sticky_exempt
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.strategyStickyExempt
'
)
}}
<
/option
>
<
/select
>
<
p
class
=
"
input-hint
"
>
{{
t
(
'
admin.accounts.quotaControl.rpmLimit.strategyHint
'
)
}}
<
/p
>
<
/div
>
<
/div
>
<
/div
>
<!--
TLS
Fingerprint
-->
<!--
TLS
Fingerprint
-->
<
div
class
=
"
rounded-lg border border-gray-200 p-4 dark:border-dark-600
"
>
<
div
class
=
"
rounded-lg border border-gray-200 p-4 dark:border-dark-600
"
>
<
div
class
=
"
flex items-center justify-between
"
>
<
div
class
=
"
flex items-center justify-between
"
>
...
@@ -1251,6 +1301,9 @@ const windowCostStickyReserve = ref<number | null>(null)
...
@@ -1251,6 +1301,9 @@ const windowCostStickyReserve = ref<number | null>(null)
const
sessionLimitEnabled
=
ref
(
false
)
const
sessionLimitEnabled
=
ref
(
false
)
const
maxSessions
=
ref
<
number
|
null
>
(
null
)
const
maxSessions
=
ref
<
number
|
null
>
(
null
)
const
sessionIdleTimeout
=
ref
<
number
|
null
>
(
null
)
const
sessionIdleTimeout
=
ref
<
number
|
null
>
(
null
)
const
rpmLimitEnabled
=
ref
(
false
)
const
baseRpm
=
ref
<
number
|
null
>
(
null
)
const
rpmStrategy
=
ref
<
string
>
(
'
tiered
'
)
const
tlsFingerprintEnabled
=
ref
(
false
)
const
tlsFingerprintEnabled
=
ref
(
false
)
const
sessionIdMaskingEnabled
=
ref
(
false
)
const
sessionIdMaskingEnabled
=
ref
(
false
)
const
cacheTTLOverrideEnabled
=
ref
(
false
)
const
cacheTTLOverrideEnabled
=
ref
(
false
)
...
@@ -1710,6 +1763,9 @@ function loadQuotaControlSettings(account: Account) {
...
@@ -1710,6 +1763,9 @@ function loadQuotaControlSettings(account: Account) {
sessionLimitEnabled
.
value
=
false
sessionLimitEnabled
.
value
=
false
maxSessions
.
value
=
null
maxSessions
.
value
=
null
sessionIdleTimeout
.
value
=
null
sessionIdleTimeout
.
value
=
null
rpmLimitEnabled
.
value
=
false
baseRpm
.
value
=
null
rpmStrategy
.
value
=
'
tiered
'
tlsFingerprintEnabled
.
value
=
false
tlsFingerprintEnabled
.
value
=
false
sessionIdMaskingEnabled
.
value
=
false
sessionIdMaskingEnabled
.
value
=
false
cacheTTLOverrideEnabled
.
value
=
false
cacheTTLOverrideEnabled
.
value
=
false
...
@@ -1733,6 +1789,13 @@ function loadQuotaControlSettings(account: Account) {
...
@@ -1733,6 +1789,13 @@ function loadQuotaControlSettings(account: Account) {
sessionIdleTimeout
.
value
=
account
.
session_idle_timeout_minutes
??
5
sessionIdleTimeout
.
value
=
account
.
session_idle_timeout_minutes
??
5
}
}
// RPM limit
if
(
account
.
base_rpm
!=
null
&&
account
.
base_rpm
>
0
)
{
rpmLimitEnabled
.
value
=
true
baseRpm
.
value
=
account
.
base_rpm
rpmStrategy
.
value
=
account
.
rpm_strategy
||
'
tiered
'
}
// Load TLS fingerprint setting
// Load TLS fingerprint setting
if
(
account
.
enable_tls_fingerprint
===
true
)
{
if
(
account
.
enable_tls_fingerprint
===
true
)
{
tlsFingerprintEnabled
.
value
=
true
tlsFingerprintEnabled
.
value
=
true
...
@@ -2043,6 +2106,16 @@ const handleSubmit = async () => {
...
@@ -2043,6 +2106,16 @@ const handleSubmit = async () => {
delete
newExtra
.
session_idle_timeout_minutes
delete
newExtra
.
session_idle_timeout_minutes
}
}
// RPM limit settings
if
(
rpmLimitEnabled
.
value
&&
baseRpm
.
value
!=
null
&&
baseRpm
.
value
>
0
)
{
newExtra
.
base_rpm
=
baseRpm
.
value
newExtra
.
rpm_strategy
=
rpmStrategy
.
value
}
else
{
delete
newExtra
.
base_rpm
delete
newExtra
.
rpm_strategy
delete
newExtra
.
rpm_sticky_buffer
}
// TLS fingerprint setting
// TLS fingerprint setting
if
(
tlsFingerprintEnabled
.
value
)
{
if
(
tlsFingerprintEnabled
.
value
)
{
newExtra
.
enable_tls_fingerprint
=
true
newExtra
.
enable_tls_fingerprint
=
true
...
...
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