fix(admin+server): 酷狗 baseUrl 默认值移除 127.0.0.1 + 新增后台配置入口与推荐快捷地址

问题:容器内 SystemSettings.kugouApiBaseUrl 默认 http://127.0.0.1:3000 指向自己,sidecar 不可达。

修复:1) schema + migration 移除 kugouApiBaseUrl 默认值;kugouService + status API 兜底改空串(不再假设有 localhost),优先级 env(KUGOU_API_BASE) > DB。

2) 新增 POST /api/admin/kugou/settings:ADMIN+/SUPER 即时写 kugouApiBaseUrl 入库+刷新 CacheService。

3) KuGouImporter.client.vue 左栏新增 baseUrl 输入框(回车即存)+ 保存并测试按钮 + 两个推荐快捷按钮(容器宿主 http://172.19.0.1:3000、公网中继 https://bywmusic.bzw-hheb.top/kugou)+ 当前生效地址显式提示。

4) UI/Icon.vue 新增 server / globe / save 三个 SVG 图标与上述入口配套。
This commit is contained in:
2026-09-19 13:40:59 +08:00
parent 6b3a83ebeb
commit 381f3debf1
8 changed files with 143 additions and 6 deletions
+37
View File
@@ -0,0 +1,37 @@
import { eq } from 'drizzle-orm'
import { db } from '~/drizzle/db'
import { systemSettings } from '~/drizzle/schema'
import { CacheService } from '~~/server/services/cacheService'
export default defineEventHandler(async (event) => {
const user = event.context.user
if (!user) throw createError({ statusCode: 401, message: '未登录' })
if (!['ADMIN', 'SUPER_ADMIN'].includes(user.role))
throw createError({ statusCode: 403, message: '仅管理员可修改酷狗配置' })
const body = await readBody(event)
const baseUrl = String(body?.kugouApiBaseUrl || '').trim()
if (baseUrl && !/^https?:\/\//i.test(baseUrl)) {
throw createError({ statusCode: 400, message: 'kugouApiBaseUrl 需要是合法的 http(s) URL,留空表示禁用 sidecar' })
}
const rows = await db.select().from(systemSettings).limit(1)
const patch: Record<string, any> = {
kugouApiBaseUrl: baseUrl || null,
updatedAt: new Date(),
}
if (!rows[0]) {
await db.insert(systemSettings).values(patch)
} else {
await db.update(systemSettings).set(patch).where(eq(systemSettings.id, rows[0].id))
}
try {
const cs = CacheService.getInstance()
await cs.setSystemSettings?.({ ...(rows[0] || {}), ...patch })
} catch {}
return { ok: true, kugouApiBaseUrl: baseUrl || null }
})
+1 -1
View File
@@ -17,7 +17,7 @@ export default defineEventHandler(async (event) => {
const rows = await db.select().from(systemSettings).limit(1)
const settings = rows[0] as any
const usedBase = base || settings?.kugouApiBaseUrl || process.env.KUGOU_API_BASE || 'http://127.0.0.1:3000'
const usedBase = base || settings?.kugouApiBaseUrl || process.env.KUGOU_API_BASE || ''
let serviceOk: boolean
let serviceMessage: string
+1 -1
View File
@@ -23,6 +23,6 @@ export default defineEventHandler(async (event) => {
try {
const cs = CacheService.getInstance()
if (rows[0]) await cs.setSystemSettings?.({ ...rows[0], ...patch })
} catch (_) {}
} catch {}
return { ok: true }
})