|
|
|
|
@ -573,17 +573,29 @@ async function openStudentDemo() {
|
|
|
|
|
if (!selectedTeachingClass.value) return;
|
|
|
|
|
const child = window.open("/student-demo", "_blank");
|
|
|
|
|
if (!child) { proxy?.$modal?.msgError?.("浏览器拦截了演示窗口,请允许弹窗后重试"); return; }
|
|
|
|
|
let ticket = "";
|
|
|
|
|
let childReady = false;
|
|
|
|
|
const cleanup = () => window.removeEventListener("message", listener);
|
|
|
|
|
const sendTicket = () => {
|
|
|
|
|
if (!childReady || !ticket) return;
|
|
|
|
|
child.postMessage({ type: "STUDENT_DEMO_TICKET", ticket }, window.location.origin);
|
|
|
|
|
cleanup();
|
|
|
|
|
};
|
|
|
|
|
const listener = (event) => {
|
|
|
|
|
if (event.origin !== window.location.origin || event.source !== child || event.data?.type !== "STUDENT_DEMO_READY") return;
|
|
|
|
|
childReady = true;
|
|
|
|
|
sendTicket();
|
|
|
|
|
};
|
|
|
|
|
window.addEventListener("message", listener);
|
|
|
|
|
const timeout = window.setTimeout(cleanup, 60 * 1000);
|
|
|
|
|
try {
|
|
|
|
|
const res = await createStudentDemoSession(selectedTeachingClassId.value);
|
|
|
|
|
const ticket = res?.data?.ticket;
|
|
|
|
|
const listener = (event) => {
|
|
|
|
|
if (event.origin !== window.location.origin || event.source !== child || event.data?.type !== "STUDENT_DEMO_READY") return;
|
|
|
|
|
child.postMessage({ type: "STUDENT_DEMO_TICKET", ticket }, window.location.origin);
|
|
|
|
|
window.removeEventListener("message", listener);
|
|
|
|
|
};
|
|
|
|
|
window.addEventListener("message", listener);
|
|
|
|
|
window.setTimeout(() => window.removeEventListener("message", listener), 60 * 1000);
|
|
|
|
|
ticket = res?.data?.ticket || "";
|
|
|
|
|
if (!ticket) throw new Error("missing demo ticket");
|
|
|
|
|
sendTicket();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
window.clearTimeout(timeout);
|
|
|
|
|
cleanup();
|
|
|
|
|
child.close();
|
|
|
|
|
proxy?.$modal?.msgError?.("无法创建学生端讲解会话");
|
|
|
|
|
}
|
|
|
|
|
|