/* 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 = '';
}).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] 多平台/会员/数字人 就绪');
})();