/** * TalkingQ Platform - Privacy (PII) Page */ registerPage('privacy', function(container) { container.innerHTML = `
PII 脱敏规则
GDPR/COPPA
数据保留
PII 自动脱敏配置
自动识别并脱敏对话中的个人敏感信息
全局启用
${[ { name: '姓名', example: '张三 → ***', enabled: true }, { name: '手机号', example: '138****8888', enabled: true }, { name: 'IP 地址', example: '192.168.x.x', enabled: true }, { name: '身份证号', example: '330102****1234', enabled: true }, { name: '家庭住址', example: '北京市朝阳区*** → [地址已脱敏]', enabled: true }, { name: '银行卡号', example: '6222****1234', enabled: false }, ].map(r => `
${r.name}
${r.example}
`).join('')}
PII 规则接口:GET /api/v1/privacy/pii-rules · PUT /api/v1/privacy/pii-rules/{id}。 脱敏事件通过 pii_detected / pii_masked 事件上报。
COPPA 合规(儿童隐私保护)
${[ { label: '用户年龄验证', enabled: true }, { label: '家长知情同意收集', enabled: true }, { label: '禁止收集13岁以下精确位置', enabled: true }, { label: '行为追踪限制', enabled: true }, { label: '数据最小化原则', enabled: true }, ].map(i => `
${i.label}
`).join('')}
✅ COPPA 合规状态:已合规
GDPR 数据权利
${[ { label: '知情权(提供隐私政策)', enabled: true }, { label: '访问权(数据导出)', enabled: true }, { label: '更正权', enabled: true }, { label: '删除权(被遗忘权)', enabled: true }, { label: '数据可携带权', enabled: false }, ].map(i => `
${i.label}
`).join('')}
⚠️ 数据可携带权尚未完整实现
数据保留策略
${[ { type: '对话记录 (Sessions)', period: '180', unit: '天' }, { type: '设备日志 (Device Logs)', period: '90', unit: '天' }, { type: 'Bad Case 数据', period: '365', unit: '天' }, { type: 'OTA 升级记录', period: '365', unit: '天' }, { type: '审计日志 (Audit Logs)', period: '730', unit: '天' }, { type: 'PII 脱敏日志', period: '30', unit: '天' }, ].map(p => `
${p.type} ${p.unit}
`).join('')}
`; lucide.createIcons({ elements: [container] }); container.querySelectorAll('#privacyTabs .tab-item').forEach(tab => { tab.addEventListener('click', () => { container.querySelectorAll('#privacyTabs .tab-item').forEach(t => t.classList.remove('active')); tab.classList.add('active'); container.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active')); container.querySelector(`#tab-${tab.dataset.tab}`)?.classList.add('active'); }); }); }); /** * TalkingQ Platform - Settings Page */ registerPage('settings', function(container) { container.innerHTML = `
租户信息
API Keys
通知配置
集成
租户基本信息
API Keys
${[ { name: 'Backend Service Key', key: 'tq_live_****a3f2', scope: '全部权限', created: '2026-01-01', used: '2分钟前' }, { name: 'Analytics Read-only', key: 'tq_ro_****c8e1', scope: '只读', created: '2026-03-15', used: '今天' }, ].map(k => ` `).join('')}
名称Key(部分)权限创建时间最后使用操作
${k.name} ${k.key} ${k.scope} ${k.created} ${k.used}
API Key 接口:GET /api/v1/settings/api-keys · POST /api/v1/settings/api-keys
通知配置
${[ { label: '设备离线告警', enabled: true }, { label: 'OTA 升级失败告警', enabled: true }, { label: 'Bad Case 严重问题告警', enabled: true }, { label: 'API 超时告警', enabled: false }, { label: '每日数据报告', enabled: true }, ].map(n => `
${n.label}
`).join('')}
${[ { name: '腾讯云 ASR', icon: '🔵', status: 'connected' }, { name: '腾讯云 TTS', icon: '🔵', status: 'connected' }, { name: 'OpenAI', icon: '⚫', status: 'disconnected' }, { name: '阿里云 OSS', icon: '🟠', status: 'connected' }, { name: 'Kafka', icon: '🟡', status: 'connected' }, { name: 'ClickHouse', icon: '🔴', status: 'disconnected' }, ].map(i => `
${i.icon}
${i.name}
${i.status === 'connected' ? '已连接' : '未连接'}
`).join('')}
`; lucide.createIcons({ elements: [container] }); container.querySelectorAll('#settingsTabs .tab-item').forEach(tab => { tab.addEventListener('click', () => { container.querySelectorAll('#settingsTabs .tab-item').forEach(t => t.classList.remove('active')); tab.classList.add('active'); container.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active')); container.querySelector(`#stab-${tab.dataset.tab}`)?.classList.add('active'); }); }); container.querySelector('#createKeyBtn')?.addEventListener('click', () => { createModal({ title: '创建 API Key', content: `
`, onConfirm: async () => { await API.settings.createApiKey({ name: '新 API Key' }); Toast.success('API Key 创建成功,请妥善保存'); }, confirmText: '创建', }); }); });