feat(brand): 站点品牌名统一为「宝一外校园点歌系统」
站长要求全站一致(小程序端已单独提交)。本次只改**用户可见文案与默认值**: - 服务端默认值/兜底:system-settings-defaults、admin/system-settings(GET/POST)、 site-config.get、utils/siteUtils —— 原来是 'VoiceHub' / '校园广播站点歌系统' - 用户可见通知文案:MeoW 绑定验证码与标题、MeoW 测试通知、微信订阅测试通知 - 2FA 应用名(authenticator.keyuri)、WebAuthn rpName(出现在系统密钥弹窗里) - 网页版界面:首页副标题、后台侧栏品牌名、登录/注册/找回/改密标题与文案、 年度回顾(IntroSlide / ShareCard / 页面标题)、用户教程、通知发送预览、 API 密钥与数据库导入说明、酷狗 sidecar 说明、打印页脚与歌单卡片页脚、Logo alt **刻意不动**:localStorage/sessionStorage 的 `voicehub_*` 键、`voicehub:` 前缀的 STORAGE_KEY 与缓存/Redis 前缀、`window.voiceHubPlayer` 之类代码标识、MeoW 的 User-Agent、以及上游项目链接 `github.com/laoshuikaixue/VoiceHub`(那是对原项目的署名)。 注意:站点名**数据**(systemSettings.siteTitle)仍是你后台里设置的「宝一外校园点歌」, 代码只保证默认值与文案一致;要让全站显示完整名称,请在后台「站点配置 → 站点标题」 改成「宝一外校园点歌系统」。
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
<div class="info-content">
|
<div class="info-content">
|
||||||
<div class="logo-section">
|
<div class="logo-section">
|
||||||
<img
|
<img
|
||||||
alt="VoiceHub Logo"
|
alt="宝一外校园点歌系统 Logo"
|
||||||
class="brand-logo"
|
class="brand-logo"
|
||||||
:src="logo"
|
:src="logo"
|
||||||
width="160"
|
width="160"
|
||||||
@@ -14,11 +14,11 @@
|
|||||||
decoding="async"
|
decoding="async"
|
||||||
fetchpriority="high"
|
fetchpriority="high"
|
||||||
>
|
>
|
||||||
<h1 v-if="siteTitle" class="brand-title">{{ siteTitle || 'VoiceHub' }}</h1>
|
<h1 v-if="siteTitle" class="brand-title">宝一外校园点歌系统</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="isFirstLogin" class="welcome-message">
|
<div v-if="isFirstLogin" class="welcome-message">
|
||||||
<h2>欢迎使用VoiceHub</h2>
|
<h2>欢迎使用宝一外校园点歌系统</h2>
|
||||||
<p>为了保障您的账号安全,请设置一个新的密码</p>
|
<p>为了保障您的账号安全,请设置一个新的密码</p>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="security-message">
|
<div v-else class="security-message">
|
||||||
|
|||||||
@@ -343,7 +343,7 @@ const dynamicTitle = computed(() => {
|
|||||||
if (siteTitle && siteTitle.value) {
|
if (siteTitle && siteTitle.value) {
|
||||||
return `${currentPageTitle} | ${siteTitle.value}`
|
return `${currentPageTitle} | ${siteTitle.value}`
|
||||||
}
|
}
|
||||||
return `${currentPageTitle} | 校园广播站点歌系统`
|
return `${currentPageTitle} | 宝一外校园点歌系统`
|
||||||
})
|
})
|
||||||
|
|
||||||
// 监听activeTab变化,更新页面标题
|
// 监听activeTab变化,更新页面标题
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
fetchpriority="high"
|
fetchpriority="high"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<h1 class="form-title">{{ siteTitle ? siteTitle + ' | VoiceHub' : 'VoiceHub' }}</h1>
|
<h1 class="form-title">宝一外校园点歌系统</h1>
|
||||||
<div class="header-divider" />
|
<div class="header-divider" />
|
||||||
</div>
|
</div>
|
||||||
<div class="forgot-password-form">
|
<div class="forgot-password-form">
|
||||||
|
|||||||
+2
-2
@@ -6,7 +6,7 @@
|
|||||||
<div class="logo-section">
|
<div class="logo-section">
|
||||||
<NuxtLink class="logo-link" to="/">
|
<NuxtLink class="logo-link" to="/">
|
||||||
<img
|
<img
|
||||||
alt="VoiceHub Logo"
|
alt="宝一外校园点歌系统 Logo"
|
||||||
class="logo-image"
|
class="logo-image"
|
||||||
:src="logo"
|
:src="logo"
|
||||||
width="90"
|
width="90"
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
<div class="title-container">
|
<div class="title-container">
|
||||||
<h2 class="main-title">{{ siteTitle }}</h2>
|
<h2 class="main-title">{{ siteTitle }}</h2>
|
||||||
<div class="title-divider" />
|
<div class="title-divider" />
|
||||||
<span class="sub-title">VoiceHub 校园广播系统</span>
|
<span class="sub-title">宝一外校园点歌系统</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@
|
|||||||
fetchpriority="high"
|
fetchpriority="high"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<h1 class="form-title">{{ siteTitle ? siteTitle + ' | VoiceHub' : 'VoiceHub' }}</h1>
|
<h1 class="form-title">宝一外校园点歌系统</h1>
|
||||||
<div class="header-divider" />
|
<div class="header-divider" />
|
||||||
</div>
|
</div>
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
fetchpriority="high"
|
fetchpriority="high"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<h1 class="form-title">{{ siteTitle ? siteTitle + ' | VoiceHub' : 'VoiceHub' }}</h1>
|
<h1 class="form-title">宝一外校园点歌系统</h1>
|
||||||
<div class="header-divider" />
|
<div class="header-divider" />
|
||||||
</div>
|
</div>
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="review-page">
|
<div class="review-page">
|
||||||
<Head>
|
<Head>
|
||||||
<Title>我的年度回顾 - VoiceHub</Title>
|
<Title>我的年度回顾 - 宝一外校园点歌系统</Title>
|
||||||
<Meta name="theme-color" content="#000000" />
|
<Meta name="theme-color" content="#000000" />
|
||||||
<Meta
|
<Meta
|
||||||
name="viewport"
|
name="viewport"
|
||||||
|
|||||||
@@ -850,11 +850,11 @@ export default defineEventHandler(async (event) => {
|
|||||||
.values({
|
.values({
|
||||||
hideStudentInfo: updateData.hideStudentInfo ?? false,
|
hideStudentInfo: updateData.hideStudentInfo ?? false,
|
||||||
enablePlayTimeSelection: updateData.enablePlayTimeSelection ?? false,
|
enablePlayTimeSelection: updateData.enablePlayTimeSelection ?? false,
|
||||||
siteTitle: updateData.siteTitle ?? 'VoiceHub',
|
siteTitle: updateData.siteTitle ?? '宝一外校园点歌系统',
|
||||||
siteLogoUrl: updateData.siteLogoUrl ?? '/favicon.ico',
|
siteLogoUrl: updateData.siteLogoUrl ?? '/favicon.ico',
|
||||||
schoolLogoHomeUrl: updateData.schoolLogoHomeUrl ?? null,
|
schoolLogoHomeUrl: updateData.schoolLogoHomeUrl ?? null,
|
||||||
schoolLogoPrintUrl: updateData.schoolLogoPrintUrl ?? null,
|
schoolLogoPrintUrl: updateData.schoolLogoPrintUrl ?? null,
|
||||||
siteDescription: updateData.siteDescription ?? '校园广播站点歌系统 - 让你的声音被听见',
|
siteDescription: updateData.siteDescription ?? '宝一外校园点歌系统 - 让你的声音被听见',
|
||||||
siteVersion: updateData.siteVersion ?? null,
|
siteVersion: updateData.siteVersion ?? null,
|
||||||
submissionGuidelines:
|
submissionGuidelines:
|
||||||
updateData.submissionGuidelines ??
|
updateData.submissionGuidelines ??
|
||||||
|
|||||||
@@ -39,12 +39,12 @@ export default defineEventHandler(async (event) => {
|
|||||||
.insert(systemSettings)
|
.insert(systemSettings)
|
||||||
.values({
|
.values({
|
||||||
enablePlayTimeSelection: false,
|
enablePlayTimeSelection: false,
|
||||||
siteTitle: process.env.NUXT_PUBLIC_SITE_TITLE || 'VoiceHub',
|
siteTitle: process.env.NUXT_PUBLIC_SITE_TITLE || '宝一外校园点歌系统',
|
||||||
siteLogoUrl: process.env.NUXT_PUBLIC_SITE_LOGO || '/images/site-logo.png',
|
siteLogoUrl: process.env.NUXT_PUBLIC_SITE_LOGO || '/images/site-logo.png',
|
||||||
schoolLogoHomeUrl: '/images/school-logo-white.png',
|
schoolLogoHomeUrl: '/images/school-logo-white.png',
|
||||||
schoolLogoPrintUrl: '/images/school-logo-transparent.png',
|
schoolLogoPrintUrl: '/images/school-logo-transparent.png',
|
||||||
siteDescription:
|
siteDescription:
|
||||||
process.env.NUXT_PUBLIC_SITE_DESCRIPTION || '校园广播站点歌系统 - 让你的声音被听见',
|
process.env.NUXT_PUBLIC_SITE_DESCRIPTION || '宝一外校园点歌系统 - 让你的声音被听见',
|
||||||
siteVersion: process.env.NUXT_PUBLIC_SITE_VERSION || null,
|
siteVersion: process.env.NUXT_PUBLIC_SITE_VERSION || null,
|
||||||
submissionGuidelines: '请遵守校园规定,提交健康向上的歌曲。',
|
submissionGuidelines: '请遵守校园规定,提交健康向上的歌曲。',
|
||||||
icpNumber: null,
|
icpNumber: null,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
? body.data
|
? body.data
|
||||||
: buildTemplateData(conf || { id: templateId }, {
|
: buildTemplateData(conf || { id: templateId }, {
|
||||||
songTitle: '测试歌曲',
|
songTitle: '测试歌曲',
|
||||||
message: '这是一条来自 VoiceHub 的测试通知'
|
message: '这是一条来自宝一外校园点歌系统的测试通知'
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = await sendRawSubscribe(openid, templateId, data)
|
const result = await sendRawSubscribe(openid, templateId, data)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const { rpID } = getWebAuthnConfig(event)
|
const { rpID } = getWebAuthnConfig(event)
|
||||||
const rpName = 'VoiceHub'
|
const rpName = '宝一外校园点歌系统'
|
||||||
|
|
||||||
const options = await generateRegistrationOptions({
|
const options = await generateRegistrationOptions({
|
||||||
rpName,
|
rpName,
|
||||||
|
|||||||
@@ -133,8 +133,8 @@ export default defineEventHandler(async (event) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 发送验证码到 MeoW
|
// 发送验证码到 MeoW
|
||||||
const message = `VoiceHub 账号绑定验证码:${code}(5分钟内有效)`
|
const message = `宝一外校园点歌系统账号绑定验证码:${code}(5分钟内有效)`
|
||||||
const title = 'VoiceHub 账号绑定'
|
const title = '宝一外校园点歌系统账号绑定'
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 使用 GET 请求发送验证码
|
// 使用 GET 请求发送验证码
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ export default defineEventHandler(async (event) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 发送验证码到 MeoW
|
// 发送验证码到 MeoW
|
||||||
const message = `VoiceHub 账号绑定验证码:${verificationCode}`
|
const message = `宝一外校园点歌系统账号绑定验证码:${verificationCode}`
|
||||||
const title = 'VoiceHub 账号绑定'
|
const title = '宝一外校园点歌系统账号绑定'
|
||||||
|
|
||||||
// 使用 GET 请求发送验证码
|
// 使用 GET 请求发送验证码
|
||||||
const meowUrl = `https://api.chuckfang.com/${encodeURIComponent(nickname)}/${encodeURIComponent(title)}/${encodeURIComponent(message)}`
|
const meowUrl = `https://api.chuckfang.com/${encodeURIComponent(nickname)}/${encodeURIComponent(title)}/${encodeURIComponent(message)}`
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ export default defineEventHandler(async (event) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 发送测试通知
|
// 发送测试通知
|
||||||
const message = `这是来自 VoiceHub 的测试通知!您的账号 ${userData.username} 已成功绑定 MeoW。`
|
const message = `这是来自宝一外校园点歌系统的测试通知!您的账号 ${userData.username} 已成功绑定 MeoW。`
|
||||||
const title = 'VoiceHub 测试通知'
|
const title = '宝一外校园点歌系统测试通知'
|
||||||
|
|
||||||
const meowUrl = `https://api.chuckfang.com/${encodeURIComponent(userData.meowNickname)}/${encodeURIComponent(title)}/${encodeURIComponent(message)}`
|
const meowUrl = `https://api.chuckfang.com/${encodeURIComponent(userData.meowNickname)}/${encodeURIComponent(title)}/${encodeURIComponent(message)}`
|
||||||
|
|
||||||
|
|||||||
@@ -70,11 +70,11 @@ export default defineEventHandler(async (event) => {
|
|||||||
.insert(systemSettings)
|
.insert(systemSettings)
|
||||||
.values({
|
.values({
|
||||||
enablePlayTimeSelection: false,
|
enablePlayTimeSelection: false,
|
||||||
siteTitle: 'VoiceHub',
|
siteTitle: '宝一外校园点歌系统',
|
||||||
siteLogoUrl: '/images/site-logo.png',
|
siteLogoUrl: '/images/site-logo.png',
|
||||||
schoolLogoHomeUrl: '/images/school-logo-white.png',
|
schoolLogoHomeUrl: '/images/school-logo-white.png',
|
||||||
schoolLogoPrintUrl: '/images/school-logo-transparent.png',
|
schoolLogoPrintUrl: '/images/school-logo-transparent.png',
|
||||||
siteDescription: '校园广播站点歌系统 - 让你的声音被听见',
|
siteDescription: '宝一外校园点歌系统 - 让你的声音被听见',
|
||||||
siteVersion: process.env.NUXT_PUBLIC_SITE_VERSION || null,
|
siteVersion: process.env.NUXT_PUBLIC_SITE_VERSION || null,
|
||||||
submissionGuidelines: '请遵守校园规定,提交健康向上的歌曲。',
|
submissionGuidelines: '请遵守校园规定,提交健康向上的歌曲。',
|
||||||
icpNumber: '粤ICP备2025450093号',
|
icpNumber: '粤ICP备2025450093号',
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const secret = authenticator.generateSecret()
|
const secret = authenticator.generateSecret()
|
||||||
const otpauth = authenticator.keyuri(user.username, 'VoiceHub', secret)
|
const otpauth = authenticator.keyuri(user.username, '宝一外校园点歌系统', secret)
|
||||||
|
|
||||||
// 生成QR Code Data URL
|
// 生成QR Code Data URL
|
||||||
const qrCode = await QRCode.toDataURL(otpauth)
|
const qrCode = await QRCode.toDataURL(otpauth)
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ export async function sendWechatSubscribeToUser(
|
|||||||
const token = await getMiniAccessToken()
|
const token = await getMiniAccessToken()
|
||||||
if (!token) return { ok: false, skipped: 'no-access-token' }
|
if (!token) return { ok: false, skipped: 'no-access-token' }
|
||||||
|
|
||||||
const data = buildTemplateData(conf, Object.assign({ songTitle: 'VoiceHub' }, vars))
|
const data = buildTemplateData(conf, Object.assign({ songTitle: '宝一外校园点歌系统' }, vars))
|
||||||
return await postSubscribe(token, openid, conf.id, data, userId, kind)
|
return await postSubscribe(token, openid, conf.id, data, userId, kind)
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
console.error('[WeChatSubscribe] 发送异常:', err?.message)
|
console.error('[WeChatSubscribe] 发送异常:', err?.message)
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ export async function getSiteTitle(): Promise<string> {
|
|||||||
try {
|
try {
|
||||||
const settingsResult = await db.select().from(systemSettings).limit(1)
|
const settingsResult = await db.select().from(systemSettings).limit(1)
|
||||||
const settings = settingsResult[0]
|
const settings = settingsResult[0]
|
||||||
return settings?.siteTitle || process.env.NUXT_PUBLIC_SITE_TITLE || 'VoiceHub'
|
return settings?.siteTitle || process.env.NUXT_PUBLIC_SITE_TITLE || '宝一外校园点歌系统'
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取站点标题失败:', error)
|
console.error('获取站点标题失败:', error)
|
||||||
return 'VoiceHub'
|
return '宝一外校园点歌系统'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
export const SYSTEM_SETTINGS_DEFAULTS = {
|
export const SYSTEM_SETTINGS_DEFAULTS = {
|
||||||
siteTitle: '校园广播站点歌系统',
|
siteTitle: '宝一外校园点歌系统',
|
||||||
siteVersion: '1.7.1.0',
|
siteVersion: '1.7.1.0',
|
||||||
icpNumber: '粤ICP备2025450093号',
|
icpNumber: '粤ICP备2025450093号',
|
||||||
gonganNumber: '',
|
gonganNumber: '',
|
||||||
|
|||||||
Reference in New Issue
Block a user