Add SmartUp account pool parameter configuration

This commit is contained in:
SmartUp Developer
2026-07-04 11:59:21 +08:00
parent 0cce5d53fe
commit 5a20e792fe
5 changed files with 229 additions and 21 deletions
+9 -1
View File
@@ -370,6 +370,8 @@ export interface SetConcurrencyItem {
account_name: string | null
old_concurrency: number | null
target_concurrency: number
old_pool_mode?: boolean | null
target_pool_mode?: boolean | null
status: string
message: string
}
@@ -414,7 +416,13 @@ export const websitesApi = {
api.post<{ success: boolean; message: string; items: CleanupInvalidAccountsItem[] }>(`/api/websites/${id}/accounts/cleanup-invalid/preview`),
cleanupExecute: (id: number) =>
api.post<{ success: boolean; message: string; items: CleanupInvalidAccountsItem[] }>(`/api/websites/${id}/accounts/cleanup-invalid/execute`),
setConcurrency: (id: number, data: { concurrency: number }) =>
setConcurrency: (id: number, data: {
concurrency: number
configure_pool_mode?: boolean
pool_mode?: boolean
pool_mode_retry_count?: number
pool_mode_retry_status_codes?: number[]
}) =>
api.post<{ success: boolean; message: string; items: SetConcurrencyItem[] }>(`/api/websites/${id}/accounts/set-concurrency`, data),
syncUpstreamModels: (id: number) =>
api.post<{ success: boolean; message: string; items: SyncUpstreamModelsItem[] }>(`/api/websites/${id}/accounts/sync-upstream-models`),
+85 -9
View File
@@ -169,9 +169,9 @@
text
:disabled="!selectedWebsite"
@click="openConcurrencyDialog"
title="一键设置当前网站已导入账号的并发数"
title="一键设置当前网站已导入账号的并发和上游池参数"
>
设置账号并发
设置账号参数
</el-button>
<el-button
size="small"
@@ -894,10 +894,10 @@
</template>
</el-dialog>
<!-- 设置账号并发数弹窗 -->
<!-- 设置账号数弹窗 -->
<el-dialog
v-model="concurrencyDialog"
title="一键设置账号并发数"
title="一键设置账号数"
width="850px"
destroy-on-close
>
@@ -910,8 +910,8 @@
style="margin-bottom: 15px;"
>
<div style="font-size: 13px; line-height: 1.5;">
该操作将<strong>仅修改由 SmartUp 导入并绑定到当前网站的账号并发数</strong>不会影响任何由目标站手工创建的其他账号<br />
如果目标站接口支持批量更新bulk-update系统将一次性批量设置否则将自动退回至逐个请求更新模式
该操作将<strong>仅修改由 SmartUp 导入并绑定到当前网站的账号</strong>不会影响任何由目标站手工创建的其他账号<br />
只设置并发时优先使用批量更新启用上游池参数时会逐个合并账号凭据避免覆盖已有 base_url / key 等字段
</div>
</el-alert>
@@ -928,6 +928,42 @@
请输入 1 1000 之间的并发值推荐设置为 100
</div>
</el-form-item>
<el-form-item label="上游池模式">
<div style="display:flex;align-items:center;gap:12px;flex-wrap:wrap">
<el-switch
v-model="configurePoolMode"
active-text="写入上游池参数"
inactive-text="不修改"
/>
<el-button size="small" text :disabled="!configurePoolMode" @click="applyPoolModePreset">套用保守预设</el-button>
</div>
<div style="font-size: 12px; color: var(--el-text-color-secondary); margin-top: 5px;">
适用于账号背后是上游池/中转池的场景保守预设pool_mode=true重试 1 状态码 429/502/503/529
</div>
</el-form-item>
<template v-if="configurePoolMode">
<el-form-item label="启用 pool_mode">
<el-switch v-model="poolModeEnabled" />
</el-form-item>
<el-form-item label="重试次数">
<el-input-number
v-model="poolModeRetryCount"
:min="0"
:max="10"
style="width: 200px;"
/>
</el-form-item>
<el-form-item label="重试状态码">
<el-input
v-model="poolModeRetryStatusCodes"
placeholder="429,502,503,529"
style="max-width: 360px;"
/>
<div style="font-size: 12px; color: var(--el-text-color-secondary); margin-top: 5px;">
用逗号或空格分隔关闭 pool_mode 时会清空同账号重试状态码
</div>
</el-form-item>
</template>
</el-form>
</div>
@@ -946,6 +982,13 @@
</template>
</el-table-column>
<el-table-column prop="target_concurrency" label="目标并发" width="110" align="center" />
<el-table-column label="Pool Mode" width="120" align="center">
<template #default="{ row }">
<span v-if="row.target_pool_mode === true">开启</span>
<span v-else-if="row.target_pool_mode === false">关闭</span>
<span v-else class="text-muted">未修改</span>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag v-if="row.status === 'success'" type="success" size="small">成功</el-tag>
@@ -1236,6 +1279,10 @@ const concurrencyDialog = ref(false)
const concurrencyExecuting = ref(false)
const concurrencyHasExecuted = ref(false)
const targetConcurrency = ref(100)
const configurePoolMode = ref(true)
const poolModeEnabled = ref(true)
const poolModeRetryCount = ref(1)
const poolModeRetryStatusCodes = ref('429,502,503,529')
const concurrencyMessage = ref('')
const concurrencyResults = ref<SetConcurrencyItem[]>([])
@@ -1986,18 +2033,43 @@ async function executeCleanup() {
function openConcurrencyDialog() {
if (!selectedWebsite.value) return
targetConcurrency.value = 100
applyPoolModePreset()
concurrencyHasExecuted.value = false
concurrencyResults.value = []
concurrencyMessage.value = ''
concurrencyDialog.value = true
}
function applyPoolModePreset() {
configurePoolMode.value = true
poolModeEnabled.value = true
poolModeRetryCount.value = 1
poolModeRetryStatusCodes.value = '429,502,503,529'
}
function parsePoolModeRetryStatusCodes() {
const seen = new Set<number>()
poolModeRetryStatusCodes.value
.split(/[,\s]+/)
.map(part => Number(part.trim()))
.forEach(code => {
if (Number.isInteger(code) && code >= 100 && code <= 599) {
seen.add(code)
}
})
return [...seen].sort((a, b) => a - b)
}
async function submitSetConcurrency() {
if (!selectedWebsite.value) return
const retryStatusCodes = poolModeEnabled.value ? parsePoolModeRetryStatusCodes() : []
const confirmMessage = configurePoolMode.value
? `确认将当前网站中由 SmartUp 导入账号的并发数设置为 ${targetConcurrency.value},并写入上游池参数?`
: `确认将当前网站中由 SmartUp 导入账号的并发数一键设置为 ${targetConcurrency.value}`
try {
await ElMessageBox.confirm(
`确认将当前网站中由 SmartUp 导入账号的并发数一键设置为 ${targetConcurrency.value}`,
'确认修改并发数',
confirmMessage,
'确认修改账号参数',
{ type: 'warning' }
)
} catch {
@@ -2007,7 +2079,11 @@ async function submitSetConcurrency() {
concurrencyExecuting.value = true
try {
const res = await websitesApi.setConcurrency(selectedWebsite.value.id, {
concurrency: targetConcurrency.value
concurrency: targetConcurrency.value,
configure_pool_mode: configurePoolMode.value,
pool_mode: poolModeEnabled.value,
pool_mode_retry_count: poolModeRetryCount.value,
pool_mode_retry_status_codes: retryStatusCodes,
})
concurrencyMessage.value = res.data.message
concurrencyResults.value = res.data.items