Files
BYW-VoiceHub/server/api/admin/kugou/status.get.ts
T
Henry_Du 381f3debf1 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 图标与上述入口配套。
2026-09-19 13:40:59 +08:00

52 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { db } from '~/drizzle/db'
import { systemSettings } from '~/drizzle/schema'
import { kuGouFetch } from '~~/server/services/kugouService'
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 query = getQuery(event)
const base = String(query.baseUrl || '').trim()
if (base && !/^https?:\/\//i.test(base)) {
throw createError({ statusCode: 400, message: 'baseUrl 需要是合法的 http(s) URL' })
}
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 || ''
let serviceOk: boolean
let serviceMessage: string
let loginStatus: any = null
try {
const r = await kuGouFetch('/login/status', { timestamp: Date.now() })
loginStatus = r
serviceOk = Number((r as any)?.status ?? 0) === 1 || !!((r as any)?.data?.profile || (r as any)?.data?.account)
serviceMessage = serviceOk ? '服务在线,且账号已绑定登录' : 'sidecar 在线,但酷狗账号未登录'
} catch (e: any) {
serviceOk = false
serviceMessage =
'无法连接 sidecar (' + usedBase + '):' + (e?.message || String(e))
}
return {
ok: true,
service: {
baseUrl: usedBase,
serviceOk,
serviceMessage,
loginStatus,
},
bound: {
hasToken: !!settings?.kugouAdminToken,
hasCookie: !!settings?.kugouAdminCookie,
boundAt: settings?.kugouAdminBoundAt || null,
user: settings?.kugouAdminUser || null,
},
}
})