/* v24: 手机全屏操作台(桌面 studio_card 同链路移植)
1) mksOpenModule(item) —— 应用市场卡片全屏入口(按 type 分发)
2) 模仿创作/爆款二创/解析提取/PPT 制作 —— 桌面同字段表单 + 上传
3) 执行器 mksRun —— dispatch(frontend_content_coordinator_agent, task_type:'studio_card')
4) API Key 管理(Bearer user_token = 带用户身份生成)
5) 其他类型(studio/resources/url/chat) 先行引导
命名统一 mks 前缀,避免与旧全局函数冲突。 */
(function () {
'use strict';
if (window.__mobV24) return;
window.__mobV24 = true;
var API = 'https://api-gateway.duoweiying.cn';
function $(id) { return document.getElementById(id); }
function uidV24() {
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 escH(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]; }); }
function mksTip(t) {
try { var o = $('mksTip'); if (o) o.remove(); var d = document.createElement('div'); d.id = 'mksTip';
d.style.cssText = 'position:fixed;left:50%;bottom:120px;transform:translateX(-50%);z-index:48000;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(); }, 2600); } catch (e) {}
}
/* ============ 全屏操作台壳 ============ */
var MKS = {}; // 跨步骤临时存储(上传 URL 等)
function mksOpen(title, bodyHtml) {
mksClose();
var p = document.createElement('div');
p.id = 'mksPage';
p.style.cssText = 'position:fixed;inset:0;z-index:45000;background:#f1f5f9;display:flex;flex-direction:column;';
p.innerHTML =
'
' +
'
' +
'
' + escH(title) + '
' +
'';
document.body.appendChild(p);
$('mksBack').onclick = function () { mksClose(); };
$('mksBody').innerHTML = bodyHtml;
return $('mksBody');
}
function mksClose() { var p = $('mksPage'); if (p) p.remove(); }
function mksField(label, inner) {
return '' + label + '
' + inner + '
';
}
function mksInput(id, ph, type) {
return '';
}
function mksSelect(id, opts) {
return '';
}
function mksArea(id, ph) {
return '';
}
/* WR-551: 上传按钮此前给 input 强制 capture=environment -> 手机上只能直接开相机,
无法从相册/文件里选视频,用户就传不了素材做「模仿/二创/解析」。
现改为:默认「选择文件」(不带 capture,手机弹选择器:相册/文件/相机) + 额外一个「拍照/录像」。 */
function mksUploadBtn(acc, kind, key, label) {
var _cam = (kind === 'video' || kind === 'image');
return '' +
'' +
(_cam ? '' : '') +
'未上传
' +
'';
}
/* WR-562k16: 内嵌素材区勾选回调(写 MKS, 与上传后等价) */
window.mksSetFile = function (key, url, name) {
try {
if (!url) return;
MKS[key] = url;
var sp = $('mksUp_' + key);
if (sp) { sp.textContent = '\u2705 已选用:' + String(name || '').substring(0, 18); sp.style.color = '#16a34a'; }
mksTip('\u2705 已选用「文件管理」里的素材');
} catch (e) {}
};
function mksBtn(id, label, color) {
return '';
}
function mksResult() {
return '';
}
/* WR-562k14 从文件管理选择: 直接复用「我的 → 文件管理」里的素材(同一份数据),
不再只能重新上传。选中后写进 MKS[key], 与 mksUp 上传后的效果完全一致。 */
/* WR-562k15: 与「我的 → 文件管理」完全同源(并集: file_records + 素材库 + 生成的视频),
选中后写进 MKS[key], 与 mksUp 上传后的效果完全一致。 */
window.mksPickFiles = function (kind, key) {
try {
if (!window.wrChoose) { mksTip('页面需刷新后才能使用(缺少选择器组件)'); return; }
var cat = (kind === 'video') ? 'video' : (kind === 'image') ? 'image' : (kind === 'document') ? 'document' : '';
mksTip('\u23f3 正在读取「文件管理」…');
var jobs = [];
jobs.push(fetch(API + '/api/files/list?user_id=' + encodeURIComponent(uidV24()) +
'&category=' + encodeURIComponent(cat) + '&page_size=100&_t=' + Date.now())
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) { return ((d && d.files) || []).map(function (x) {
return { name: String(x.file_name || '文件'), folder: x.folder || '', size: x.file_size || 0, url: String(x.file_url || x.url || '') };
}); }).catch(function () { return []; }));
jobs.push(fetch(API + '/ai-army/materials?user_id=' + encodeURIComponent(uidV24()) +
(cat ? ('&material_type=' + encodeURIComponent(cat)) : '') + '&limit=100&_t=' + Date.now())
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) { return ((d && (d.data || d.materials || d.items)) || []).map(function (m) {
return { name: String(m.name || m.filename || '文件'), folder: '', size: m.file_size || 0, url: String(m.url || m.file_path || '') };
}); }).catch(function () { return []; }));
if (kind === 'video') {
jobs.push(fetch(API + '/ai-army/user-resources?user_id=' + encodeURIComponent(uidV24()) + '&types=video&_t=' + Date.now())
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) { return ((d && d.video) || []).map(function (v) {
return { name: String(v.title || ('视频_' + String(v.id || ''))), folder: '', size: 0, url: mksAbs(v.url) };
}); }).catch(function () { return []; }));
}
Promise.all(jobs)
.then(function (lists) {
var items = [], seen = {};
lists.forEach(function (l) { (l || []).forEach(function (x) {
if (!x || !x.url) return;
if (seen[x.url]) return;
seen[x.url] = 1; items.push(x);
}); });
if (!items.length) {
mksTip('「文件管理」里还没有可用的' + (kind === 'video' ? '视频' : kind === 'image' ? '图片' : '文件') + ',请先到文件管理上传素材');
return;
}
var opts = items.slice(0, 80).map(function (x) {
var sz = x.size ? (Math.round(x.size / 1048576 * 10) / 10) + 'MB' : '';
var fd = x.folder ? ('📁' + x.folder + ' ') : '';
return { label: String(x.name || '文件'), hint: fd + sz, value: String(x.url) };
});
return window.wrChoose('从「文件管理」选择素材(共 ' + opts.length + ' 个)', opts).then(function (v) {
if (!v) return;
MKS[key] = v;
var sp = $('mksUp_' + key);
if (sp) { sp.textContent = '\u2705 已从文件管理选择'; sp.style.color = '#16a34a'; }
mksTip('\u2705 已从文件管理选择素材');
});
})
.catch(function () { mksTip('读取「文件管理」失败,请重试'); });
} catch (e) {}
};
window.mksUp = function (kind, key, mode) {
try {
var old = $('mksFile'); if (old) old.remove();
var i = document.createElement('input'); i.id = 'mksFile'; i.type = 'file';
i.accept = kind === 'video' ? 'video/*' : (kind === 'document' ? '.doc,.docx,.md,.txt,.pdf,.ppt,.pptx' : 'image/*');
if (mode === 'camera' && (kind === 'video' || kind === 'image')) { i.setAttribute('capture', 'environment'); i.capture = 'environment'; } /* WR-551: 只有拍照/录像才强制相机 */
i.style.display = 'none';
document.body.appendChild(i);
i.onchange = function () {
var f = i.files && i.files[0]; if (!f) return;
mksTip('⏳ 上传中…');
var fd = new FormData(); fd.append('file', f);
fetch(API + '/ai-army/upload?user_id=' + encodeURIComponent(uidV24()) + '&material_type=' + kind, { method: 'POST', body: fd })
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) {
var url = d && (d.url || (d.data && d.data.url) || d.file_path);
if (!url) { mksTip('上传失败,请重试'); return; }
MKS[key] = url;
var sp = $('mksUp_' + key);
if (sp) { sp.textContent = '✅ 已上传'; sp.style.color = '#16a34a'; }
mksTip('✅ 上传成功');
}).catch(function () { mksTip('上传网络错误'); });
};
i.click();
} catch (e) {}
};
/* ===== WR-529C: 出片结果渲染 + 素材上下文 + 任务轮询 ===== */
function mksAbs(u) {
u = String(u || '');
if (!u) return u;
var low = u.toLowerCase();
if (low.indexOf('http') === 0 || low.indexOf('//') === 0 || low.indexOf('data:') === 0 || low.indexOf('blob:') === 0) return u;
if (u.charAt(0) === '/') return 'https://console.duoweiying.cn' + u;
return u;
}
function mksIsVideo(s) {
s = String(s || '').toLowerCase().split('?')[0];
return /.mp4$|.mov$|.webm$|.m4v$|.avi$|.mkv$/.test(s);
}
function mksMats(keys) {
var ks = keys || ['ref', 'avatar_img', 'ref2', 'ref3', 'ppt', 'v', 'p', 'm'];
var out = [];
for (var i = 0; i < ks.length; i++) {
var u = MKS[ks[i]];
if (!u) continue;
var s = String(u);
out.push({ url: s, name: ks[i], kind: mksIsVideo(s) ? 'video' : 'image', role: 'material' });
}
return out;
}
function mksFindVideos(d) {
var out = [], seen = {};
function push(v) {
if (typeof v === 'string' && v) { var u = mksAbs(v); if (!seen[u]) { seen[u] = 1; out.push(u); } }
else if (v && typeof v === 'object' && v.url) push(v.url);
}
try {
var r = (d && d.result) || {}, rd = r.data || {}, gd = (d && d.data) || {};
push(d && d.video_url); push(r.video_url); push(rd.video_url); push(gd.video_url);
var arrs = [gd.videos, gd.video_urls, rd.videos, rd.video_urls, r.videos];
for (var i = 0; i < arrs.length; i++) { if (Object.prototype.toString.call(arrs[i]) === '[object Array]') arrs[i].forEach(push); }
} catch (e) {}
return out;
}
function mksShowResult(box, txt, d) {
var vids = mksFindVideos(d);
var html = escH(String(txt || '').substring(0, 4000));
if (vids.length) {
html += vids.map(function (u) {
return '' +
'
' +
'' +
'' +
'
';
}).join('');
html += '成片已自动归档到「我的 → 文件管理 → 视频」。
';
}
var needConfirm = !!(d && (d.needs_confirm || (d.result && d.result.data && d.result.data.needs_confirm)));
if (needConfirm) {
html += '' +
'' +
'
';
}
box.style.display = 'block';
box.innerHTML = html;
try { box.setAttribute('data-txt', String(txt || '').substring(0, 1500)); } catch (e) {}
try { box.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } catch (e) {}
box.onclick = function (e) {
var tg = e.target || {};
var sv = tg.getAttribute && tg.getAttribute('data-save');
var sh = tg.getAttribute && tg.getAttribute('data-share');
var cf = tg.getAttribute && tg.getAttribute('data-cf');
if (cf) { if (window.mksRun) window.mksRun(cf, mksMats(), 'video_generation'); return; }
if (sv) mksDownload(sv, '成片.mp4');
else if (sh) mksShare(sh);
};
var tid = (d && (d.task_id || (d.result && d.result.task_id) || (d.data && d.data.task_id))) || '';
if (!vids.length && tid) mksPollTask(tid, box, 0);
}
function mksDownload(url, name) {
mksTip('⏳ 保存中…');
fetch(url).then(function (r) { return r.blob(); }).then(function (b) {
var a = document.createElement('a');
a.href = URL.createObjectURL(b);
a.download = String(name || 'video.mp4').replace(/[^0-9A-Za-z._-]/g, '_');
document.body.appendChild(a); a.click(); a.remove();
setTimeout(function () { try { URL.revokeObjectURL(a.href); } catch (e) {} }, 4000);
mksTip('💾 已保存');
}).catch(function () { mksTip('保存失败,请长按视频另存'); });
}
function mksShare(url) {
try { if (navigator.share) { navigator.share({ title: 'AI 成片', url: url }); return; } } catch (e) {}
try { navigator.clipboard.writeText(url).then(function () { mksTip('🔗 链接已复制'); }, function () { mksTip(url); }); }
catch (e) { mksTip(url); }
}
function mksPollTask(tid, box, tries) {
tries = tries || 0;
if (!tid || tries > 90) return;
fetch(API + '/ai-army/tasks/' + encodeURIComponent(tid) + '?_t=' + Date.now())
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) {
if (mksFindVideos(d).length) { mksShowResult(box, '✅ 出片完成', d); return; }
var st = String((d && (d.status || (d.data && d.data.status))) || '');
if (st === 'failed') { mksShowResult(box, '❌ 出片失败:' + String((d && (d.error || d.message)) || '').substring(0, 300), d); return; }
box.style.display = 'block';
box.innerHTML = '⏳ 出片中(第 ' + (tries + 1) + ' 次轮询…)
' + escH(String(box.getAttribute('data-txt') || '').substring(0, 1200));
setTimeout(function () { mksPollTask(tid, box, tries + 1); }, 8000);
})
.catch(function () { setTimeout(function () { mksPollTask(tid, box, tries + 1); }, 8000); });
}
window.mksRun = function (promptTxt, mats, taskType) {
var _k = (window.__mksCurItem && window.__mksCurItem.id) || '';
if (window.dwyGateCheck) {
window.dwyGateCheck(_k, function (ok) { if (ok) { window.__mksRunRaw(promptTxt, mats, taskType); } });
return;
}
window.__mksRunRaw(promptTxt, mats, taskType);
};
window.__mksRunRaw = function (promptTxt, mats, taskType) {
var box = $('mksResult');
if (box) { box.style.display = 'block'; box.innerHTML = '⏳ AI 员工接收任务中…'; box.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }
fetch(API + '/ai-army/dispatch?agent_id=frontend_content_coordinator_agent', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ user_input: promptTxt, user_id: uidV24(), task_type: (taskType || 'chat'), ai_context: { materials: (mats || mksMats()) } }) })
.then(function (res) { return res.json().catch(function () { return {}; }); })
.then(function (d) {
var txt = '';
if (d && d.result) {
var rr = d.result;
txt = rr.reply || rr.response || rr.summary || rr.message || '';
if (!txt && rr.execution_results && rr.execution_results.length) txt = rr.execution_results.map(function (x) { return (x.summary || x.output || JSON.stringify(x)).substring(0, 400); }).join('\n\n');
if (!txt) txt = JSON.stringify(rr).substring(0, 800);
} else { txt = (d && d.message) || (d && d.response) || '任务已完成(详见通知中心/执行记录)'; }
if (box) { mksShowResult(box, txt, d); }
}).catch(function (e) { if (box) { box.style.display = 'block'; box.innerHTML = '执行失败:' + escH(e.message) + ''; } });
};
window.mksVal = function (id) { var el = $(id); return el ? el.value.trim() : ''; };
window.mksChk = function (id) { var el = $(id); return !!(el && el.checked); };
function mkExec(id, label, color) { return mksBtn(id, label, color); }
/* ============ 工具:模仿创作 ============ */
function openImitate() {
var b = mksOpen('🎭 模仿创作',
mksField('① 参考视频(可选:上传想模仿风格的视频)', mksUploadBtn('video', 'video', 'ref', '📁 上传视频')) +
mksField('② 数字人形象(可选:上传自己的形象照片,或选预设)', mksSelect('mkAvatar', ['商务专业人士', '知识讲师', '直播主播', '温柔女声解说', '磁性男声解说']) + '' + mksUploadBtn('image', 'image', 'avatar_img', '🖼️ 上传我的形象') + '
') +
mksField('③ 场景背景', mksSelect('mkScene', ['专业演播室', '简约办公室', '户外街景', '科技感纯色背景', '家居生活场景'])) +
mksField('④ 文案需求(必填)', mksArea('mkScript', '描述你想生成的视频内容/口播文案,例如:介绍一款智能保温杯的卖点,语气亲切…')) +
mkExec('mkRunI', '🚀 生成视频') + mksResult());
$('mkRunI').onclick = function () {
var s = mksVal('mkScript');
if (!s) { mksTip('请填写文案需求'); return; }
var ref = MKS.ref || '无参考视频';
mksRun('【模仿创作】请按以下需求生成视频内容方案(含分镜口播稿与画面建议):\n参考视频:' + String(ref).substring(0, 300) + '\n数字人形象:' + mksVal('mkAvatar') + '\n场景背景:' + mksVal('mkScene') + '\n文案需求:' + s);
};
}
/* ============ 工具:爆款二创 ============ */
function openRemake() {
mksOpen('🔥 爆款二创',
mksField('① 爆款视频来源', mksUploadBtn('video', 'video', 'ref2', '📁 上传视频') + '' + mksInput('mkRefUrl2', '或粘贴爆款视频链接') + '
') +
mksField('② 二创方向(可选)', mksInput('mkRemixDir', '如:改成搞笑风格 / 提炼干货要点 / 换个目标人群')) +
mksField('③ 数字人形象', mksSelect('mkAvatar2', ['商务专业人士', '知识讲师', '直播主播', '温柔女声解说', '磁性男声解说'])) +
'流程:解析视频 → 提取/优化文案 → 数字人演绎生成爆款二创视频
' +
mkExec('mkRunR', '🚀 解析并二创') + mksResult());
$('mkRunR').onclick = function () {
var ref = MKS.ref2 || mksVal('mkRefUrl2');
if (!ref) { mksTip('请上传爆款视频或粘贴链接'); return; }
mksRun('【爆款二创】请解析该爆款视频并产出二创执行方案:\n视频:' + String(ref).substring(0, 300) + '\n二创方向:' + (mksVal('mkRemixDir') || '保持原风格优化') + '\n数字人形象:' + mksVal('mkAvatar2') + '\n输出:原视频结构拆解 → 优化后口播文案 → 数字人演绎分镜脚本。');
};
}
/* ============ 工具:解析提取 ============ */
function openParse() {
mksOpen('🔍 解析提取',
mksField('① 选择视频', mksUploadBtn('video', 'video', 'ref3', '📁 上传视频') + '' + mksInput('mkRefUrl3', '或粘贴视频链接') + '
') +
'' +
'' +
'
' +
mkExec('mkRunP', '🚀 解析提取') + mksResult());
$('mkRunP').onclick = function () {
var ref = MKS.ref3 || mksVal('mkRefUrl3');
if (!ref) { mksTip('请上传视频或粘贴链接'); return; }
var p1 = mksChk('mkP1'), p2 = mksChk('mkP2'), p3 = mksChk('mkP3');
mksRun('【解析提取】请解析视频并输出结构化素材包:\n视频:' + String(ref).substring(0, 300) + '\n需要提取:' + [p1 ? '口播文案' : '', p2 ? '背景音乐建议' : '', p3 ? '画面/素材模板' : ''].filter(Boolean).join('、') + '\n文案请给出可直接使用的完整口播稿。', null, 'video_script');
};
}
/* ============ 工具:PPT 制作 ============ */
function openPpt() {
mksOpen('📑 PPT 制作',
mksField('① 上传资料文件(Word/Markdown/PDF/大纲,可选)', mksUploadBtn('document', 'document', 'ppt', '📎 上传文件')) +
mksField('② 描述 PPT 需求(必填:主题/页数/风格)', mksArea('mkPptReq', '例如:帮我做一份 15 页的产品发布会 PPT,主题是智能家居新品,风格简洁商务…')) +
mkExec('mkRunPPT', '🚀 生成 PPT') + mksResult());
$('mkRunPPT').onclick = function () {
var req = mksVal('mkPptReq');
if (!req) { mksTip('请描述 PPT 需求'); return; }
var f = MKS.ppt || '';
mksRun('【PPT制作】请基于以下资料与需求产出完整 PPT 大纲与每页要点(含封面/目录/内容页/结尾),并给出可执行页数建议:\n资料文件:' + (f ? String(f).substring(0, 300) : '无(按需求直接创作)') + '\n需求:' + req);
};
}
/* ============ API Key(Bearer=登录用户身份) ============ */
window.mksAPIKey = function () {
function token() { return localStorage.getItem('user_token') || localStorage.getItem('authToken') || ''; }
function list() {
var box = $('mksKeyList'); if (!box) return;
box.innerHTML = '加载中…
';
var tk = token();
if (!tk) { box.innerHTML = '请先登录后再管理 API Key(密钥将绑定您的账户用于计费)
'; return; }
fetch(API + '/user/apikeys/allocations', { headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + tk } })
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) {
var keys = (d && (d.data || d.keys)) || [];
if (!keys.length) { box.innerHTML = '暂无 API Key
点击下方「生成新 Key」(自动绑定当前账号与计费)
'; return; }
box.innerHTML = keys.map(function (k) {
return '' +
'
' + escH(k.key_name || 'Key') + '
' +
'
' + escH(k.one_api_key || 'sk-***') + '
' +
'
额度 ' + (k.quota_limit || 0) + ' · 已用 ' + (k.quota_used || 0) + '' +
'
';
}).join('');
}).catch(function (e) { box.innerHTML = '加载失败:' + escH(e.message) + '
'; });
}
window.mksKeyCopy = function (k) {
if (navigator.clipboard) { navigator.clipboard.writeText(k || '').then(function () { mksTip('✅ 已复制'); }).catch(function () { mksTip('复制失败,请长按手动复制'); }); }
else mksTip(k || '');
};
window.mksKeyCreate = function () {
var tk = token();
if (!tk) { mksTip('请先登录'); return; }
var nm = mksVal('mksKeyName');
mksTip('⏳ 正在生成…');
fetch(API + '/user/apikeys/allocations', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + tk }, body: JSON.stringify({ key_name: nm || '手机端 Key', quota_limit: 10000 }) })
.then(function (r) { return r.json().catch(function () { return {}; }); })
.then(function (d) {
var kd = (d && (d.data || d)) || {};
mksTip(kd.one_api_key ? '✅ 已生成(已绑定您的账号)' : '生成失败:' + ((d && d.message) || '请重试'));
list();
}).catch(function () { mksTip('网络错误'); });
};
mksOpen('🔑 API Key 管理',
'' +
'' + mksInput('mksKeyName', 'Key 名称(可选)') +
'
' +
'· Key 通过当前登录账号生成,自动绑定用户 ID 用于计费与鉴权
· 复制后在第三方工具/API 调用中使用,额度 10000 次/Key
');
list();
};
/* ============ 分发入口(市场卡片/☰ 调用) ============ */
// 20260909 修复:注册表改为顶层立即挂出(此前在函数体内赋值,需等本函数被调用;
// 分发器被 v26f 接管后本函数永不被调 → __mksV24Map 恒为空 → 4 操作台丢失)
window.__mksV24Map = {
imitate_create: openImitate, remake_create: openRemake, parse_extract: openParse, ppt_maker: openPpt,
tool_api_key: function () { window.mksAPIKey(); }
};
window.mksOpenModule = function (item) {
var id = item && item.id;
if (!id) return;
window.__mksCurItem = item; // WR-530: 供派发前门禁预检取卡片能力键
var M2 = window.__mksV24Map || {};
if (M2[id]) { M2[id](); return; }
if (id === 'digital_human' || (item && item.url && String(item.url).indexOf('http') === 0)) {
var u = (item && item.url) || '';
try {
var c = false; if (window.wrConfirm) { window.wrConfirm('「' + (item.name || id) + '」为独立页面,是否在新窗口打开?', { title: '打开外链' }).then(function (ok) { if (ok) try { window.open(item.url, '_blank'); } catch (e) {} }); return; } c = confirm('「' + (item.name || id) + '」为独立页面,是否在新窗口打开?');
if (c && u) window.open(u, '_blank');
} catch (e) {}
return;
}
if (item && item.type === 'resources') {
mksOpen('📚 ' + (item.name || id),
'「' + escH(item.name || id) + '」是素材/文件资源管理
请先使用底部导航或对话页完成内容,再回来查看
' +
'');
return;
}
if (item && item.type === 'chat') {
mksClose();
var pref = (item && item.url) || ('我想使用【' + (item.name || id) + '】,请帮我:');
var inp = $('chat-input');
if (inp) { inp.value = pref; }
try { if (typeof window.switchTab === 'function') window.switchTab('home'); } catch (e) {}
try { if (typeof window.sendMessage === 'function') setTimeout(function () { window.sendMessage(); }, 300); } catch (e) {}
return;
}
/* studio 等其余类型:先走对话引导(桌面场景版式正在分批接入) */
mksClose();
var inp2 = $('chat-input');
if (inp2) { inp2.value = '我想使用【' + (item.name || id) + '】,请帮我:'; try { inp2.focus(); } catch (e) {} }
mksTip('「' + (item.name || id) + '」请描述具体需求,AI 会为你执行');
};
console.log('[MobV24] 全屏操作台就绪(模仿/二创/解析/PPT/APIKey)');
})();