2026-01-22 13:43:59 +08:00

138 lines
7.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 expandParentMenu(span) {
let parent = span.closest('li');
while (parent) {
if (parent.classList.contains('el-submenu')) {
const title = parent.querySelector('.el-submenu__title');
if (title && !parent.classList.contains('is-opened')) {
title.click();
}
}
parent = parent.parentElement.closest('li');
}
}
function autoFillAndSubmit(arg) {
if (!arg) return;
// 等待页面跳转和组件渲染
setTimeout(() => {
// 尝试寻找各种可能的输入框(针对 Element UI
const input = document.querySelector('input[placeholder*="编号"]') ||
document.querySelector('input[placeholder*="名称"]') ||
document.querySelector('.el-input__inner');
if (input) {
input.value = arg;
// 触发 input 事件让 Vue 监听到数据变化
input.dispatchEvent(new Event('input', { bubbles: true }));
// 寻找包含“添加”、“查询”
setTimeout(() => {
const buttons = Array.from(document.querySelectorAll('button'));
const submitBtn = buttons.find(btn =>
btn.innerText.includes("添加") ||
btn.innerText.includes("查询") ||
btn.innerText.includes("确认") ||
btn.classList.contains('el-button--primary')
);
if (submitBtn) {
submitBtn.click();
console.log("已自动点击按钮:", submitBtn.innerText);
}
}, 500);
}
}, 1200);
}
export function handleCommand(aiResult, uiRefs, voiceEnabled = false) {
if (typeof aiResult !== 'string' || aiResult === "UNKNOWN") return;
// 解析对话内容
const commMatch = aiResult.match(/<communication>([\s\S]*?)<\/communication>/);
if (commMatch && commMatch[1]) {
const speechText = commMatch[1].trim();
if (uiRefs && uiRefs.updateStatus) {
uiRefs.updateStatus(speechText);
}
// 语音播放判断
if (voiceEnabled) {
const utterance = new SpeechSynthesisUtterance(speechText);
utterance.lang = "zh-CN";
window.speechSynthesis.speak(utterance);
}
}
// 解析指令和参数
const cmdMatch = aiResult.match(/<cmd>([\s\S]*?)<\/cmd>/);
const argMatch = aiResult.match(/<arg>([\s\S]*?)<\/arg>/);
const key = cmdMatch ? cmdMatch[1].trim() : null;
const arg = argMatch ? argMatch[1].trim() : null;
if (key) {
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) {
autoFillAndSubmit(arg);
}
}
}
}