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,12 @@
import { InjectionKey, ObjectDirective, Ref } from "vue";
//#region ../../packages/hooks/use-forward-ref/index.d.ts
type ForwardRefSetter = <T>(el: T) => void;
type ForwardRefInjectionContext = {
setForwardRef: ForwardRefSetter;
};
declare const FORWARD_REF_INJECTION_KEY: InjectionKey<ForwardRefInjectionContext>;
declare const useForwardRef: <T>(forwardRef: Ref<T | null>) => void;
declare const useForwardRefDirective: (setForwardRef: ForwardRefSetter) => ObjectDirective;
//#endregion
export { FORWARD_REF_INJECTION_KEY, ForwardRefInjectionContext, useForwardRef, useForwardRefDirective };
+30
View File
@@ -0,0 +1,30 @@
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../_virtual/_rolldown/runtime.js");
let vue = require("vue");
//#region ../../packages/hooks/use-forward-ref/index.ts
const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef");
const useForwardRef = (forwardRef) => {
const setForwardRef = ((el) => {
forwardRef.value = el;
});
(0, vue.provide)(FORWARD_REF_INJECTION_KEY, { setForwardRef });
};
const useForwardRefDirective = (setForwardRef) => {
return {
mounted(el) {
setForwardRef(el);
},
updated(el) {
setForwardRef(el);
},
unmounted() {
setForwardRef(null);
}
};
};
//#endregion
exports.FORWARD_REF_INJECTION_KEY = FORWARD_REF_INJECTION_KEY;
exports.useForwardRef = useForwardRef;
exports.useForwardRefDirective = useForwardRefDirective;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","names":[],"sources":["../../../../../packages/hooks/use-forward-ref/index.ts"],"sourcesContent":["import { provide } from 'vue'\n\nimport type { InjectionKey, ObjectDirective, Ref } from 'vue'\n\ntype ForwardRefSetter = <T>(el: T) => void\n\nexport type ForwardRefInjectionContext = {\n setForwardRef: ForwardRefSetter\n}\n\nexport const FORWARD_REF_INJECTION_KEY: InjectionKey<ForwardRefInjectionContext> =\n Symbol('elForwardRef')\n\nexport const useForwardRef = <T>(forwardRef: Ref<T | null>) => {\n const setForwardRef = ((el: T) => {\n forwardRef.value = el\n }) as ForwardRefSetter\n\n provide(FORWARD_REF_INJECTION_KEY, {\n setForwardRef,\n })\n}\n\nexport const useForwardRefDirective = (\n setForwardRef: ForwardRefSetter\n): ObjectDirective => {\n return {\n mounted(el) {\n setForwardRef(el)\n },\n updated(el) {\n setForwardRef(el)\n },\n unmounted() {\n setForwardRef(null)\n },\n }\n}\n"],"mappings":";;;;AAUA,MAAa,4BACX,OAAO,eAAe;AAExB,MAAa,iBAAoB,eAA8B;CAC7D,MAAM,kBAAkB,OAAU;EAChC,WAAW,QAAQ;;CAGrB,CAAA,GAAA,IAAA,SAAQ,2BAA2B,EACjC,eACD,CAAC;;AAGJ,MAAa,0BACX,kBACoB;CACpB,OAAO;EACL,QAAQ,IAAI;GACV,cAAc,GAAG;;EAEnB,QAAQ,IAAI;GACV,cAAc,GAAG;;EAEnB,YAAY;GACV,cAAc,KAAK;;EAEtB"}