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
abf5de69
"frontend/src/api/vscode:/vscode.git/clone" did not exist on "d648811233195e2b8bed25c7c9d63d96f99284a5"
Commit
abf5de69
authored
Feb 12, 2026
by
yangjianbo
Browse files
Merge branch 'main' into test
parents
7582dc53
174d7c77
Changes
63
Hide whitespace changes
Inline
Side-by-side
frontend/src/i18n/locales/zh.ts
View file @
abf5de69
...
@@ -865,8 +865,8 @@ export default {
...
@@ -865,8 +865,8 @@ export default {
editUser
:
'
编辑用户
'
,
editUser
:
'
编辑用户
'
,
deleteUser
:
'
删除用户
'
,
deleteUser
:
'
删除用户
'
,
deleteConfirmMessage
:
"
确定要删除用户 '{email}' 吗?此操作无法撤销。
"
,
deleteConfirmMessage
:
"
确定要删除用户 '{email}' 吗?此操作无法撤销。
"
,
searchPlaceholder
:
'
搜索用户
邮箱
或
用户名
、
备注
、支持模糊查询
...
'
,
searchPlaceholder
:
'
邮箱
/
用户名
/
备注
/API Key 模糊搜索
...
'
,
searchUsers
:
'
搜索用户
邮箱
或
用户名
、
备注
、支持模糊查询
'
,
searchUsers
:
'
邮箱
/
用户名
/
备注
/API Key 模糊搜索
'
,
roleFilter
:
'
角色筛选
'
,
roleFilter
:
'
角色筛选
'
,
allRoles
:
'
全部角色
'
,
allRoles
:
'
全部角色
'
,
allStatus
:
'
全部状态
'
,
allStatus
:
'
全部状态
'
,
...
@@ -1936,7 +1936,15 @@ export default {
...
@@ -1936,7 +1936,15 @@ export default {
authCodeHint
:
'
您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别
'
,
authCodeHint
:
'
您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别
'
,
failedToGenerateUrl
:
'
生成 Antigravity 授权链接失败
'
,
failedToGenerateUrl
:
'
生成 Antigravity 授权链接失败
'
,
missingExchangeParams
:
'
缺少 code / session_id / state
'
,
missingExchangeParams
:
'
缺少 code / session_id / state
'
,
failedToExchangeCode
:
'
Antigravity 授权码兑换失败
'
failedToExchangeCode
:
'
Antigravity 授权码兑换失败
'
,
// Refresh Token auth
refreshTokenAuth
:
'
手动输入 RT
'
,
refreshTokenDesc
:
'
输入您已有的 Antigravity Refresh Token,支持批量输入(每行一个),系统将自动验证并创建账号。
'
,
refreshTokenPlaceholder
:
'
粘贴您的 Antigravity Refresh Token...
\n
支持多个,每行一个
'
,
validating
:
'
验证中...
'
,
validateAndCreate
:
'
验证并创建账号
'
,
pleaseEnterRefreshToken
:
'
请输入 Refresh Token
'
,
failedToValidateRT
:
'
验证 Refresh Token 失败
'
}
}
},
},
// Gemini specific (platform-wide)
// Gemini specific (platform-wide)
...
@@ -2315,7 +2323,7 @@ export default {
...
@@ -2315,7 +2323,7 @@ export default {
allStatus
:
'
全部状态
'
,
allStatus
:
'
全部状态
'
,
unused
:
'
未使用
'
,
unused
:
'
未使用
'
,
used
:
'
已使用
'
,
used
:
'
已使用
'
,
searchCodes
:
'
搜索兑换码...
'
,
searchCodes
:
'
搜索兑换码
或邮箱
...
'
,
exportCsv
:
'
导出 CSV
'
,
exportCsv
:
'
导出 CSV
'
,
deleteAllUnused
:
'
删除全部未使用
'
,
deleteAllUnused
:
'
删除全部未使用
'
,
deleteCodeConfirm
:
'
确定要删除此兑换码吗?此操作无法撤销。
'
,
deleteCodeConfirm
:
'
确定要删除此兑换码吗?此操作无法撤销。
'
,
...
@@ -3572,6 +3580,7 @@ export default {
...
@@ -3572,6 +3580,7 @@ export default {
custom
:
'
自定义
'
,
custom
:
'
自定义
'
,
code
:
'
状态码
'
,
code
:
'
状态码
'
,
body
:
'
消息体
'
,
body
:
'
消息体
'
,
skipMonitoring
:
'
跳过监控
'
,
// Columns
// Columns
columns
:
{
columns
:
{
...
@@ -3616,6 +3625,8 @@ export default {
...
@@ -3616,6 +3625,8 @@ export default {
passthroughBody
:
'
透传上游错误信息
'
,
passthroughBody
:
'
透传上游错误信息
'
,
customMessage
:
'
自定义错误信息
'
,
customMessage
:
'
自定义错误信息
'
,
customMessagePlaceholder
:
'
返回给客户端的错误信息...
'
,
customMessagePlaceholder
:
'
返回给客户端的错误信息...
'
,
skipMonitoring
:
'
跳过运维监控记录
'
,
skipMonitoringHint
:
'
开启后,匹配此规则的错误不会被记录到运维监控中
'
,
enabled
:
'
启用此规则
'
enabled
:
'
启用此规则
'
},
},
...
...
frontend/src/utils/url.ts
View file @
abf5de69
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
*/
*/
type
SanitizeOptions
=
{
type
SanitizeOptions
=
{
allowRelative
?:
boolean
allowRelative
?:
boolean
allowDataUrl
?:
boolean
}
}
export
function
sanitizeUrl
(
value
:
string
,
options
:
SanitizeOptions
=
{}):
string
{
export
function
sanitizeUrl
(
value
:
string
,
options
:
SanitizeOptions
=
{}):
string
{
...
@@ -18,6 +19,11 @@ export function sanitizeUrl(value: string, options: SanitizeOptions = {}): strin
...
@@ -18,6 +19,11 @@ export function sanitizeUrl(value: string, options: SanitizeOptions = {}): strin
return
trimmed
return
trimmed
}
}
// 允许 data:image/ 开头的 data URL(仅限图片类型)
if
(
options
.
allowDataUrl
&&
trimmed
.
startsWith
(
'
data:image/
'
))
{
return
trimmed
}
// 只接受绝对 URL,不使用 base URL 来避免相对路径被解析为当前域名
// 只接受绝对 URL,不使用 base URL 来避免相对路径被解析为当前域名
// 检查是否以 http:// 或 https:// 开头
// 检查是否以 http:// 或 https:// 开头
if
(
!
trimmed
.
match
(
/^https
?
:
\/\/
/i
))
{
if
(
!
trimmed
.
match
(
/^https
?
:
\/\/
/i
))
{
...
...
frontend/src/views/admin/RedeemView.vue
View file @
abf5de69
...
@@ -117,9 +117,9 @@
...
@@ -117,9 +117,9 @@
</span>
</span>
</
template
>
</
template
>
<
template
#cell-used_by=
"{ value }"
>
<
template
#cell-used_by=
"{ value
, row
}"
>
<span
class=
"text-sm text-gray-500 dark:text-dark-400"
>
<span
class=
"text-sm text-gray-500 dark:text-dark-400"
>
{{
value
?
t
(
'
admin.redeem.userPrefix
'
,
{
id
:
value
}
)
:
'
-
'
}}
{{
row
.
user
?.
email
||
(
value
?
t
(
'
admin.redeem.userPrefix
'
,
{
id
:
value
}
)
:
'
-
'
)
}}
<
/span
>
<
/span
>
<
/template
>
<
/template
>
...
...
Prev
1
2
3
4
Next
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