📱 扫码登录管理后台
请打开 hmoob 语音采集小程序,进入 我的》管理后台》扫码登录PC后台,扫一扫下方二维码
正在生成二维码...
{{ qrStatus === 'pending' ? '🔄 等待手机扫码确认...' :
qrStatus === 'expired' ? '❌ 二维码已过期,请刷新' : '' }}
🔄 刷新二维码
hmoob录音数据管理
🔍 用户信息调试面板(URL 加 ?debugUser=1 显示此面板)
🔄 重新拉取 /api/user/info
token (前10位+末尾): {{ tokenPreview }}
userInfo 反应式对象:
{{ debugUserInfoReactive }}
displayNickname: {{ JSON.stringify(displayNickname) }} displayRole: {{ JSON.stringify(displayRole) }}
avatarUrl (原始): {{ JSON.stringify(userInfo.avatarUrl) }}
/api/user/info 原始响应 JSON:
{{ debugUserInfoRaw }}
👥 在线用户
{{ stats.total || 0 }}总录音数
{{ stats.pending || 0 }}待审核
{{ stats.pass || 0 }}合格
{{ stats.fail || 0 }}不合格
💡
点击选中录音行,按键盘 空格 键即可快速播放该行音频
{{ scope.row.user_name || '用户' + scope.row.user_id }}
ID: {{ scope.row.user_id }}
{{ scope.row.id }}
{{ scope.row.sentence_text || scope.row.sentence || '-' }}
{{ scope.row.status === 'pending' ? '待审核' : scope.row.status === 'pass' ? '合格' : '不合格' }}
✅ 通过
❌ 驳回
✏️ 编辑
🗑️ 删除
{{ tlStats.total || 0 }}总语料数
{{ tlStats.pending || 0 }}待审核
{{ tlStats.pass || 0 }}已通过
{{ tlStats.fail || 0 }}不合格
{{ (scope.row.user && scope.row.user.nickname) ? scope.row.user.nickname : ('用户' + scope.row.user_id) }}
ID: {{ scope.row.user_id }}
{{ scope.row.hm_std || '-' }}
{{ scope.row.hm_hh || '-' }}
{{ scope.row.chinese || '-' }}
{{ scope.row.status === 'pending' ? '待审核' : scope.row.status === 'pass' ? '通过' : '驳回' }}
✅ 通过
❌ 驳回
✏️ 编辑
🗑️ 删除
{{ vcStats.total || 0 }}筛选后录音数
{{ vcStats.pending || 0 }}待审核
{{ vcStats.pass || 0 }}合格
{{ vcStats.fail || 0 }}不合格
用户:
苗族分类:
全部
待审核
合格
不合格
🔍 搜索
📦 训练包导出
导出录音状态:
📦 导出全部训练包
👤 按当前用户导出
🌱 按当前苗族分类导出
⚠️ 训练推荐仅导出合格(pass)录音
{{ scope.row.user_name || ('用户' + scope.row.user_id) }}
ID: {{ scope.row.user_id }} · {{ scope.row.user_category }}
{{ scope.row.sentence_text || '-' }}
{{ scope.row.status === 'pending' ? '待审核' : scope.row.status === 'pass' ? '合格' : '不合格' }}
{{ scope.row.created_at }}
{{ scope.row.nickname || ('用户' + scope.row.user_id) }}
ID: {{ scope.row.user_id }}
{{ roleLabel(scope.row.role) }}
{{ isRecentlyActive(scope.row.last_active) ? '活跃中' : ('空闲 ' + minutesAgo(scope.row.last_active) + 'm') }}
{{ formatTime(scope.row.login_at) }}
{{ formatTime(scope.row.last_active) }}
{{ scope.row.login_ip }}
-
{{ parseUA(scope.row.user_agent) }}
-
👢 踢下线
📌 下方三处正文框直接写 HTML(小程序端用 <rich-text> 渲染)。可用的安全标签:p/div/span/br/strong/em/h1~h6/ul/ol/li/a/blockquote/hr/code。
📌 想让段落样式和系统默认一致:段落包成 <p class="para">...</p>;引用块用 <blockquote>;蓝色加粗高亮用 <span class="highlight">。
📌 偷懒:点每个正文框右上角的「🧱 插入一段 / 💬 插入引用 / ✨ 插入列表 / 🔗 插入链接」按钮,现成模板直接改。
头部信息
📖 项目介绍
🧱 插入段落
💬 插入引用
✨ 插入列表
🔗 插入链接
💎 插入高亮
🖼️ 上传图片
👥 团队
🧱 插入段落
✨ 插入列表
🔗 插入链接
🖼️ 上传图片
📜 隐私政策
🧱 插入段落
💬 插入引用
✨ 插入列表
🖼️ 上传图片
📱 实时预览(小程序端效果近似)
LOGO
{{ aboutForm.app_name || 'Hmoob-语音采集' }}
版本 {{ aboutForm.version || '1.0.0' }}
{{ aboutForm.intro_title || '📖 项目介绍' }}
{{ aboutForm.intro_poem }}
{{ aboutPreviewExpanded ? '收起全文 ▲' : '展开全文 ▼' }}
{{ aboutForm.intro_highlight }}
{{ aboutForm.team_title || '👥 团队' }}
{{ aboutForm.privacy_title || '📜 隐私政策' }}
{{ aboutForm.copyright || '© 2026 Hmoob-语音采集' }}
今日请求量
{{ auditSummary.today ?? 0 }}
00:00 ~ 当前
最近 24h 请求量
{{ auditSummary['24h_total'] ?? 0 }}
含所有已登录 + 未登录公开接口
最近 24h 服务器错误
{{ auditSummary['24h_5xx'] ?? 0 }}
状态码 ≥ 500 的次数
最近 24h 慢请求
{{ auditSummary['24h_slow1s'] ?? 0 }}
耗时 ≥ 1 秒的次数
🔢 状态码分布(24h)
{{ r.status }}
{{ r.cnt }} 次
暂无数据
🏃 最慢接口 Top 10(24h 平均耗时)
{{ r.method }}
{{ r.path || '-' }}
{{ r.avg_ms }} ms
调用 {{ r.cnt }} 次 · 峰值 {{ r.max_ms }} ms
暂无数据
🌟 最活跃用户 & 🆕 24h 新用户
{{ (r.nickname||'?').charAt(0) }}
{{ r.nickname || '未命名' }}
UID {{ r.user_id }} · {{ r.role }}
{{ r.cnt }} 次
暂无数据
{{ (r.nickname||'?').charAt(0) }}
{{ r.nickname || '未命名' }}
UID {{ r.user_id }} · {{ r.role }}
首次:{{ formatTime(r.first_at) }}
最近 24h 没有首次登录的新用户
查询
重置
共 {{ auditTotal }} 条记录
{{ formatTime(s.row.created_at) }}
{{ (s.row.nickname||'?').charAt(0) }}
{{ s.row.nickname || '未命名' }}
UID {{ s.row.user_id }} · {{ s.row.role || '-' }}
未登录
{{ s.row.ip }}
-
{{ s.row.method }}
{{ s.row.path || '-' }}
{{ s.row.status }}
{{ s.row.status }}
{{ s.row.status }}
{{ s.row.status }}
{{ s.row.cost_ms }} ms
详情
{ auditPageSize = s; auditPage = 1; loadAccessLogs(); }">
📢 首页 bar(寄语 + 公告)统一配置
顶部 sub-tab:💭 寄语(全局保底,无公告时显示)/ 📣 公告(可推送全部用户 / 指定用户,达到阶段/奖励制度等场景)
寄语:当没有任何公告命中当前用户时,首页就会展示这一条(建议写温暖、激励的句子,支持 emoji)。
🔄 重新加载
💾 保存寄语
📱 效果预览(无公告时用户看到的样子)
“
{{ bulletinPreviewQuote || '您的每一句发音,都是给下一代做的回响' }}
”
🌏 全部用户
👤 指定用户
{{ row.kind }}
#{{ row.target_user_id }}
-
{{ row.content }}
{{ row.effective_at ? (String(row.effective_at).slice(0,16)) : '不限开始' }}
~
{{ row.expire_at ? (String(row.expire_at).slice(0,16)) : '不限结束' }}
✅ 立即生效 · 永不失效
启用
停用
编辑
删除
📱 首页 bar 预览(手机端)
📣
{{ bulletinPreviewItems[bulletinPreviewIndex]?.content || bulletinPreviewQuote }}
NEW
“
{{ bulletinPreviewItems[bulletinPreviewIndex]?.content || bulletinPreviewQuote || '您的每一句发音,都是给下一代做的回响' }}
”
💭 寄语
‹
{{ bulletinPreviewIndex + 1 }} / {{ bulletinPreviewItems.length }}
›
💡 展示优先级规则:
① 指定给我的公告 → ② 全局公告(按优先级倒序)
③ 若上面都没有 → 显示「💭 寄语」
🎯 奖励制度 / 达到阶段提示:用「📣 新建公告」选类型就能推。
🧑🤝🧑 苗族支系分类
小程序「完善资料」页「请问您是哪种苗族?」的下拉框就来自这里。排序号小的靠前;停用的分类不会给新用户选,但已选过的用户仍保留。
🔄 刷新
➕ 新增分类
{{ row.name }}
启用中
已停用
创建:{{ String(row.created_at || '-').slice(0,16) }}
更新:{{ String(row.updated_at || '-').slice(0,16) }}
编辑
删除
💡 提示:如果已有用户选择了某个分类,删除按钮会被拒绝(提示引用人数),改为「停用」即可。
💡 重命名分类:直接点编辑改名称 → 保存时系统会自动把所有用户的旧分类名同步改成新名称。
📱 小程序「完善资料」页效果预览
请输入昵称
请问您是哪种苗族?
*必填
点击查看下一个选中样式 ➡️