feat: 实现供水运营专题大屏BI可视化

- 新增OperationDashboard.vue全屏大屏组件
- 添加6个核心KPI指标卡片: 进水总量/出水总量/产销差率/营收额/平均水质/报警次数
- 实现6个ECharts图表: 供水趋势/水质分布/报警统计/管网空间/设备状态/营收分析
- 创建静态HTML版本operation-dashboard.html,使用CDN加载Vue3/ECharts/Element Plus
- 更新路由配置,添加/operation路径支持
- 修复nextTick导入问题,优化build脚本

🚧 开发者: bot_dev1
📝 任务: #38 [BI] 运营仪表盘 + 供水专题大屏
This commit is contained in:
2026-06-15 09:06:11 +08:00
parent 37bcc78eee
commit 85df71fc28
17426 changed files with 4091508 additions and 47 deletions
@@ -0,0 +1,6 @@
import { Ref } from "vue";
//#region ../../packages/hooks/use-prevent-global/index.d.ts
declare const usePreventGlobal: <E extends keyof DocumentEventMap>(indicator: Ref<boolean>, evt: E, cb: (e: DocumentEventMap[E]) => boolean) => void;
//#endregion
export { usePreventGlobal };
@@ -0,0 +1,19 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../_virtual/_rolldown/runtime.js");
let _vueuse_core = require("@vueuse/core");
let vue = require("vue");
//#region ../../packages/hooks/use-prevent-global/index.ts
const usePreventGlobal = (indicator, evt, cb) => {
const prevent = (e) => {
if (cb(e)) e.stopImmediatePropagation();
};
let stop = void 0;
(0, vue.watch)(() => indicator.value, (val) => {
if (val) stop = (0, _vueuse_core.useEventListener)(document, evt, prevent, true);
else stop?.();
}, { immediate: true });
};
//#endregion
exports.usePreventGlobal = usePreventGlobal;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","names":[],"sources":["../../../../../packages/hooks/use-prevent-global/index.ts"],"sourcesContent":["import { watch } from 'vue'\nimport { useEventListener } from '@vueuse/core'\n\nimport type { Ref } from 'vue'\n\nexport const usePreventGlobal = <E extends keyof DocumentEventMap>(\n indicator: Ref<boolean>,\n evt: E,\n cb: (e: DocumentEventMap[E]) => boolean\n) => {\n const prevent = (e: DocumentEventMap[E]) => {\n if (cb(e)) e.stopImmediatePropagation()\n }\n let stop: (() => void) | undefined = undefined\n watch(\n () => indicator.value,\n (val) => {\n if (val) {\n stop = useEventListener(document, evt, prevent, true)\n } else {\n stop?.()\n }\n },\n { immediate: true }\n )\n}\n"],"mappings":";;;;;AAKA,MAAa,oBACX,WACA,KACA,OACG;CACH,MAAM,WAAW,MAA2B;EAC1C,IAAI,GAAG,EAAE,EAAE,EAAE,0BAA0B;;CAEzC,IAAI,OAAiC,KAAA;CACrC,CAAA,GAAA,IAAA,aACQ,UAAU,QACf,QAAQ;EACP,IAAI,KACF,QAAA,GAAA,aAAA,kBAAwB,UAAU,KAAK,SAAS,KAAK;OAErD,QAAQ;IAGZ,EAAE,WAAW,MAAM,CACpB"}