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();
}
});