console.log("✅ 语音 + 文字插件已运行"); // ========= 1. 浏览器能力检测 ========= const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; const supportSpeech = !!SpeechRecognition; // ========= 2. 创建控制面板 ========= const panel = document.createElement("div"); panel.style.cssText = ` position: fixed; bottom: 24px; right: 24px; z-index: 999999; background: white; border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,.15); padding: 10px; width: 220px; font-size: 14px; `; panel.innerHTML = `
支持语音 / 回车文字指令
`; document.body.appendChild(panel); // ========= 3. 父菜单展开函数 ========= function expandParentMenu(span) { const subMenu = span.closest(".el-sub-menu"); if (subMenu) { const title = subMenu.querySelector(".el-sub-menu__title"); if (title && !subMenu.classList.contains("is-opened")) { title.click(); // 展开父菜单 console.log("📂 已展开父菜单"); } } } // ========= 4. 路由跳转函数 ========= function goToRoute(route) { // 直接修改 hash window.location.hash = route; console.log("✅ 已跳转到路由:", route); } // ========= 5. 指令解析(文字/语音共用) ========= function handleCommand(text) { console.log("📥 收到指令:", text); // 找菜单 DOM const span = [...document.querySelectorAll("span")] .find(el => el.innerText.trim() === text); if (text.includes("添加设备")) { // 展开父菜单(如果存在) span && expandParentMenu(span); // 路由跳转 goToRoute("/添加设备/添加设备"); return; } if (text.includes("设备")) { span && expandParentMenu(span); goToRoute("/设备管理"); return; } alert("未识别指令:" + text); } // ========= 6. 文字输入支持 ========= const input = panel.querySelector("#voiceTextInput"); input.addEventListener("keydown", (e) => { if (e.key === "Enter") { const value = input.value.trim(); if (value) { handleCommand(value); input.value = ""; } } }); // ========= 7. 语音识别支持 ========= let recognition; if (supportSpeech) { recognition = new SpeechRecognition(); recognition.lang = "zh-CN"; recognition.continuous = false; recognition.interimResults = false; recognition.onresult = (event) => { const text = event.results[0][0].transcript.trim(); handleCommand(text); }; recognition.onerror = (event) => { console.error("语音识别错误", event.error); }; panel.querySelector("#voiceBtn").onclick = () => { recognition.start(); }; } else { panel.querySelector("#voiceBtn").disabled = true; panel.querySelector("#voiceBtn").innerText = "❌"; } // ========= 8. 快捷键 Alt+V 支持语音 ========= document.addEventListener("keydown", (e) => { if (e.altKey && e.key.toLowerCase() === "v") { if (supportSpeech && recognition) recognition.start(); } });