/* v26b: 多平台发布(账号绑定)/ 会员与充值 / 数字人播报台 —— 桌面同端点 */ (function () { 'use strict'; if (window.__mobV26B) return; window.__mobV26B = true; var API = 'https://api-gateway.duoweiying.cn'; var PLATS = { douyin: '抖音', kuaishou: '快手', bilibili: 'B站', xiaohongshu: '小红书', wechat_video: '视频号', wechat_oa: '公众号', tou_article: '头条号' }; function $(id) { return document.getElementById(id); } function uidV() { var u = null; try { u = JSON.parse(localStorage.getItem('user_info') || '{}'); } catch (e) {} return (u && (u.id || u.username)) || localStorage.getItem('user_id') || 'anonymous'; } function esc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]; }); } function tip(t) { try { var o = $('v26tip'); if (o) o.remove(); var d = document.createElement('div'); d.id = 'v26tip'; d.style.cssText = 'position:fixed;left:50%;bottom:120px;transform:translateX(-50%);z-index:49000;background:#0f172a;color:#fff;font-size:13px;padding:9px 16px;border-radius:18px;max-width:84%;text-align:center;'; d.textContent = t; document.body.appendChild(d); setTimeout(function () { d.remove(); }, 2400); } catch (e) {} } function openB(title, html) { closeB(); var p = document.createElement('div'); p.id = 'v26BPage'; p.style.cssText = 'position:fixed;inset:0;z-index:45000;background:#f1f5f9;display:flex;flex-direction:column;'; p.innerHTML = '
' + '' + '
' + esc(title) + '
' + '
'; document.body.appendChild(p); $('v26BBack').onclick = closeB; $('v26BBody').innerHTML = html; } function closeB() { var p = $('v26BPage'); if (p) p.remove(); } var HB = {}; /* ===== 多平台发布:账号绑定(桌面同 /api/platform-accounts) ===== */ HB.multi_platform = function () { openB('📡 多平台发布', '
绑定账号后由桌面自动化电脑员工代登录发布;密码 AES 加密存储,任何人(含客服)无法查看明文。也可直接在对话中说「把视频发布到抖音」。
' + '
' + '
添加平台账号
' + '' + '' + '' + '' + '
' + '
加载中…
'); function loadL() { var b = $('v26PList'); if (!b) return; if (uidV() === 'anonymous') { b.innerHTML = '
请先登录
'; return; } fetch(API + '/api/platform-accounts?owner_user_id=' + encodeURIComponent(uidV())).then(function (r) { return r.json().catch(function () { return {}; }); }) .then(function (d) { var items = (d && d.items) || []; if (!items.length) { b.innerHTML = '
还没有绑定账号
绑定后即可安排自动化发布
'; return; } b.innerHTML = items.map(function (it) { return '
' + '
' + esc(PLATS[it.platform] || it.platform) + ' · ' + esc(it.account_name) + '
' + '
' + esc(it.account_id) + (it.has_password ? ' · 密码已加密' : '') + (it.status === 'active' ? ' · 启用中' : ' · 停用') + '
' + '
'; }).join(''); }).catch(function () { b.innerHTML = '加载失败'; }); } window.v26Pdel = function (id) { if (window.wrConfirm) { window.wrConfirm('确认解绑?', { title: '解绑', okText: '解绑', okBg: '#e11d48' }); return; } if (!confirm('确认解绑?')) return; fetch(API + '/api/platform-accounts/' + encodeURIComponent(id) + '?owner_user_id=' + encodeURIComponent(uidV()), { method: 'DELETE' }) .then(function (r) { return r.json().catch(function () { return {}; }); }) .then(function (d) { tip((d && d.ok) ? '✅ 已解绑' : '解绑失败'); loadL(); }); }; $('v26PAdd').onclick = function () { var nm = $('v26Nm').value.trim(), lg = $('v26Lg').value.trim(), pw = $('v26Pw').value; if (!nm || !lg) { tip('请填写昵称与登录账号'); return; } fetch(API + '/api/platform-accounts', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ platform: $('v26Plat').value, owner_user_id: uidV(), account_name: nm, account_id: lg, password: pw }) }) .then(function (r) { return r.json().catch(function () { return {}; }); }) .then(function (d) { tip((d && d.ok) ? '✅ 账号已保存(加密)' : ('保存失败:' + ((d && (d.detail || d.message)) || '未知'))); if (d && d.ok) { $('v26Nm').value = ''; $('v26Lg').value = ''; $('v26Pw').value = ''; loadL(); } }); }; loadL(); }; /* ===== 会员与充值(与桌面/订阅站同步) ===== */ HB.membership = function () { openB('💎 会员与充值', '
加载中…
' + '💳 前往订阅/充值中心' + '
同一账户全端同步,充值实时到账(新开页面如未登录请用同账号登录)
'); var _sl = $('v26SubLink'); if (_sl) { _sl.onclick = function (ev) { ev.preventDefault(); var u = uidV(); window.open('https://ai.duoweiying.cn/static/web/recharge.html' + (u && u !== 'anonymous' ? '?u=' + encodeURIComponent(u) : ''), '_blank'); }; } fetch(API + '/api/user-settings/status?user_id=' + encodeURIComponent(uidV())).then(function (r) { return r.json().catch(function () { return {}; }); }) .then(function (d) { var st = d && (d.status || d.data || d), el = $('v26Vip'); if (!el) return; var bal = st && st.balance_yuan != null ? '¥' + Number(st.balance_yuan).toFixed(2) : '—'; var subs = (st && st.subscription) || [], sx = '无订阅'; if (subs && subs.length) { var s0 = subs[0]; sx = (s0.plan_name || s0.type || '订阅中') + (s0.status ? ' · ' + s0.status : '') + (s0.expire_at ? ' · 至 ' + String(s0.expire_at).substring(0, 10) : ''); } el.innerHTML = '
' + bal + '
余额
' + '
' + esc(sx) + '
订阅(同步桌面)
'; }).catch(function () {}); }; /* ===== 数字人播报台 ===== */ HB.digital_human = function () { openB('🤖 数字人播报', '
快速播报(完整数字人直播/形象工作台在独立页面)
' + '
① 播报文案(必填)
' + '
② 数字人形象
' + '
③ 场景背景
' + '' + '' + '🖥️ 打开完整数字人工作台 ›'); $('v26DhGo').onclick = function () { var t = $('v26DhT').value.trim(); if (!t) { tip('请输入播报文案'); return; } var box = $('v26Res'); if (box) { box.style.display = 'block'; box.innerHTML = '⏳ AI 员工接收任务中…'; } fetch(API + '/ai-army/dispatch?agent_id=frontend_content_coordinator_agent', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ user_input: '【数字人播报】请生成数字人口播视频方案(含分镜/画面/配音建议):\n文案:' + t + '\n形象:' + $('v26DhA').value + '\n场景:' + $('v26DhS').value, user_id: uidV(), task_type: 'studio_card' }) }) .then(function (r) { return r.json().catch(function () { return {}; }); }) .then(function (d) { var rr = d && d.result || {}; var txt = rr.reply || rr.response || rr.message || (d && d.message) || '任务已完成(详见通知中心)'; if (box) { box.style.display = 'block'; box.innerHTML = esc(String(txt).substring(0, 4000)); } }) .catch(function (e) { if (box) { box.style.display = 'block'; box.innerHTML = '执行失败:' + esc(e.message) + ''; } }); }; }; window.__mksV26B = HB; console.log('[MobV26b] 多平台/会员/数字人 就绪'); })();