export const COMMANDS = [ { key: "首页", menu: "首页", route: "/首页" }, { key: "添加设备", menu: "添加设备", route: "/添加设备/添加设备" }, { key: "监控中心", menu: "监控中心", route: "/监控中心/监控中心" }, { key: "摄像头管理", menu: "摄像头管理", route: "/云视频管理/摄像头管理" }, { key: "云视频监控", menu: "云视频监控", route: "/云视频监控/云视频监控" }, { key: "GIS监控", menu: "GIS监控", route: "/GIS管理/GIS监控" }, { key: "我的流量", menu: "我的流量", route: "/资源管理/我的流量" }, { key: "我的资源", menu: "我的资源", route: "/资源管理/我的资源" }, { key: "我的订单", menu: "我的订单", route: "/资源管理/我的订单" }, { key: "仪表积分", menu: "仪表积分", route: "/资源管理/仪表积分" }, { key: "报警设置", menu: "报警设置", route: "/报警管理/报警设置" }, { key: "报警通知", menu: "报警通知", route: "/报警管理/报警通知" }, { key: "报警记录", menu: "报警记录", route: "/报警管理/报警记录" }, { key: "基础报表", menu: "基础报表", route: "/报表管理/基础报表" }, { key: "高级报表配置", menu: "高级报表配置", route: "/报表管理/高级报表配置" }, { key: "高级报表", menu: "高级报表", route: "/报表管理/高级报表" }, { key: "应用场景", menu: "应用场景", route: "/仪表管理/应用场景" }, { key: "仪表管理", menu: "仪表管理", route: "/仪表管理/仪表管理" }, { key: "虚拟仪表", menu: "虚拟仪表", route: "/仪表管理/虚拟仪表" }, { key: "物位监测", menu: "物位监测", route: "/场景管理/物位监测/物位监测" }, { key: "物位监测配置", menu: "物位监测配置", route: "/场景管理/物位监测/物位监测配置" }, { key: "车间看板", menu: "车间看板", route: "/场景管理/车间看板/车间看板" }, { key: "车间看板配置", menu: "车间看板配置", route: "/场景管理/车间看板/车间看板配置" }, { key: "能源结算", menu: "能源结算", route: "/场景管理/能源抄表/能源结算" }, { key: "能源结算配置", menu: "能源结算配置", route: "/场景管理/能源抄表/能源结算配置" }, { key: "多租户能源结算", menu: "多租户能源结算", route: "/场景管理/多租户结算/多租户能源结算" }, { key: "租户管理", menu: "租户管理", route: "/场景管理/多租户结算/租户管理" }, { key: "计价方式管理", menu: "计价方式管理", route: "/场景管理/多租户结算/计价方式管理" }, { key: "单染缸印染结算", menu: "单染缸印染结算", route: "/场景管理/印染结算/单染缸印染结算" }, { key: "多染缸印染结算", menu: "多染缸印染结算", route: "/场景管理/印染结算/多染缸印染结算" }, { key: "染缸能耗一览表", menu: "染缸能耗一览表", route: "/场景管理/印染结算/染缸能耗一览表" }, { key: "印染结算配置", menu: "印染结算配置", route: "/场景管理/印染结算/印染结算配置" }, { key: "尘埃粒子车间", menu: "尘埃粒子车间", route: "/场景管理/尘埃粒子/尘埃粒子车间" }, { key: "洁净度一览表", menu: "洁净度一览表", route: "/场景管理/尘埃粒子/洁净度一览表" }, { key: "尘埃粒子配置", menu: "尘埃粒子配置", route: "/场景管理/尘埃粒子/尘埃粒子配置" }, { key: "消息管理", menu: "消息管理", route: "/系统管理/消息管理" }, { key: "数据服务", menu: "数据服务", route: "/系统管理/数据服务" }, { key: "数据下云", menu: "数据下云", route: "/系统管理/数据下云" }, ]; function waitForElement(selector, callback, timeout = 5000) { const start = Date.now(); const timer = setInterval(() => { const el = document.querySelector(selector); if (el) { clearInterval(timer); callback(el); } else if (Date.now() - start > timeout) { clearInterval(timer); console.warn("等待元素超时:", selector); } }, 200); } /** * 自动化填写和点击逻辑 */ function autoFillAndSubmit(value) { // 1. 等待输入框出现 (针对 Element Plus 使用 .el-input__inner) // 提示:如果有多个框,可改用 'input[placeholder*="上云码"]' 增加精度 waitForElement('.el-input__inner', (input) => { console.log("🔍 已定位输入框,开始填充:", value); // 填写内容 input.value = value; // 关键:手动触发事件以同步 Vue 的双向绑定 (v-model) input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); // 2. 自动点击“确认”按钮 (通常类名为 el-button--primary) const submitBtn = document.querySelector('.el-button--primary'); if (submitBtn) { setTimeout(() => { submitBtn.click(); console.log("✅ 自动化流程已触发提交"); }, 600); } }); } export function expandParentMenu(span) { const subMenu = span.closest(".el-sub-menu"); if (subMenu && !subMenu.classList.contains("is-opened")) { const title = subMenu.querySelector(".el-sub-menu__title"); if (title) title.click(); } } export function handleCommand(aiResult) { if (!aiResult || aiResult === "UNKNOWN") return; console.log("🚀 收到结构化指令:", aiResult); // 使用正则解析 XML 标签内容 const cmdMatch = aiResult.match(/([\s\S]*?)<\/cmd>/); const argMatch = aiResult.match(/([\s\S]*?)<\/arg>/); const key = cmdMatch ? cmdMatch[1].trim() : null; const arg = argMatch ? argMatch[1].trim() : null; if (!key) { console.warn("未能解析出有效的 标签"); return; } // 在命令库中寻找匹配项 const command = COMMANDS.find(c => c.key === key) || COMMANDS.find(c => key.includes(c.key)); if (command) { // 第一步:查找菜单并跳转 const allSpans = Array.from(document.querySelectorAll("span")); let span = allSpans.find(el => el.innerText.trim() === command.menu); if (span) { expandParentMenu(span); span.click(); window.location.hash = command.route; // 第二步:如果有参数(如设备号),启动后续填充流程 if (arg) { console.log(`⏳ 检测到参数,准备自动填充: ${arg}`); autoFillAndSubmit(arg); } } else { // 容错:如果没找到菜单元素,依然尝试直接跳转路由 console.log("未发现菜单 DOM,尝试直接通过路由跳转"); window.location.hash = command.route; if (arg) autoFillAndSubmit(arg); } } else { console.warn("未匹配到标准库指令:", key); } }