@nywqs/scada-engine 1.1.10 → 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -51
- package/dist/scada-engine.css +1 -1
- package/dist/scada-engine.es.js +6 -3
- package/dist/scada-engine.umd.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
基于 AntV X6 + Vue 3 的自研 SCADA 组态引擎
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 特性
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
7
|
+
- 可视化编辑器:拖拽式组态界面设计
|
|
8
|
+
- 丰富组件库:内置基础图形、IoT组件、图表等
|
|
9
|
+
- 数据绑定:支持设备数据点绑定和实时更新
|
|
10
|
+
- 事件系统:灵活的事件配置和交互响应
|
|
11
|
+
- TypeScript:完整的类型定义支持
|
|
12
|
+
- 响应式:基于 Vue 3 Composition API
|
|
13
|
+
- 动画引擎:支持节点和连线动画效果
|
|
14
|
+
- 预览模式:支持编辑模式和预览模式切换
|
|
13
15
|
|
|
14
|
-
##
|
|
16
|
+
## 安装
|
|
15
17
|
|
|
16
18
|
```bash
|
|
17
19
|
npm install @nywqs/scada-engine
|
|
@@ -29,7 +31,7 @@ yarn add @nywqs/scada-engine
|
|
|
29
31
|
npm install vue@^3.4.0 vue-router@^4.6.0 @antv/x6@^2.18.0 echarts@^5.5.0 pinia@^2.1.0
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
##
|
|
34
|
+
## 快速开始
|
|
33
35
|
|
|
34
36
|
### 全局注册
|
|
35
37
|
|
|
@@ -69,26 +71,50 @@ const handleNodeUpdate = (data: any) => {
|
|
|
69
71
|
</script>
|
|
70
72
|
```
|
|
71
73
|
|
|
72
|
-
##
|
|
74
|
+
## 组件列表
|
|
73
75
|
|
|
74
76
|
### 核心组件
|
|
75
77
|
|
|
76
|
-
- `ScadaCanvas
|
|
77
|
-
- `PropertyPanel
|
|
78
|
-
- `ComponentLibrary
|
|
79
|
-
- `CanvasConfigPanel
|
|
80
|
-
- `Header
|
|
81
|
-
- `PreviewView` - 预览视图
|
|
78
|
+
- `ScadaCanvas`:画布组件(核心),支持编辑和预览模式
|
|
79
|
+
- `PropertyPanel`:属性面板,配置节点和连线属性
|
|
80
|
+
- `ComponentLibrary`:组件库面板,拖拽添加组件
|
|
81
|
+
- `CanvasConfigPanel`:画布配置面板
|
|
82
|
+
- `Header`:顶部工具栏
|
|
82
83
|
|
|
83
84
|
### 辅助组件
|
|
84
85
|
|
|
85
|
-
- `BindingCard
|
|
86
|
-
- `EventCard
|
|
87
|
-
- `BasicPropertiesTab
|
|
88
|
-
- `
|
|
89
|
-
- `
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
- `BindingCard`:数据绑定卡片,配置设备数据点绑定
|
|
87
|
+
- `EventCard`:事件配置卡片,配置交互事件
|
|
88
|
+
- `BasicPropertiesTab`:基础属性标签页
|
|
89
|
+
- `DataPropertiesTab`:数据属性标签页
|
|
90
|
+
- `EdgePropertiesTab`:连线属性标签页
|
|
91
|
+
- `AttributeConfigDialog`:属性配置对话框
|
|
92
|
+
- `CustomCodeDialog`:自定义代码对话框
|
|
93
|
+
- `DevicePointSelector`:设备数据点选择器
|
|
94
|
+
- `MappingConfigurator`:映射配置器
|
|
95
|
+
- `WorkflowSelectorDialog`:流程选择对话框
|
|
96
|
+
|
|
97
|
+
### 内置组件库
|
|
98
|
+
|
|
99
|
+
#### 基础组件(basic)
|
|
100
|
+
- 矩形(rect)
|
|
101
|
+
- 圆形(circle)
|
|
102
|
+
- 文本(text)
|
|
103
|
+
|
|
104
|
+
#### IoT组件(iot)
|
|
105
|
+
- 仪表盘(gauge):支持ECharts仪表盘展示
|
|
106
|
+
- 指示灯(light):支持开关状态指示
|
|
107
|
+
- 开关(switch):支持设备控制
|
|
108
|
+
|
|
109
|
+
#### 画布配置
|
|
110
|
+
- 画布尺寸:支持多种预设尺寸(1920x1080、1366x768等)
|
|
111
|
+
- 背景设置:支持颜色、图片背景
|
|
112
|
+
- 网格配置:支持网格显示、类型、大小设置
|
|
113
|
+
- 缩放控制:支持画布缩放
|
|
114
|
+
- 参考线:支持对齐参考线
|
|
115
|
+
- 磁吸功能:支持节点磁吸对齐
|
|
116
|
+
|
|
117
|
+
## API
|
|
92
118
|
|
|
93
119
|
### ScadaCanvas 组件 API
|
|
94
120
|
|
|
@@ -254,7 +280,7 @@ import type {
|
|
|
254
280
|
} from '@nywqs/scada-engine'
|
|
255
281
|
```
|
|
256
282
|
|
|
257
|
-
##
|
|
283
|
+
## 使用示例
|
|
258
284
|
|
|
259
285
|
### 完整编辑器应用
|
|
260
286
|
|
|
@@ -323,27 +349,27 @@ const handlePreview = () => {
|
|
|
323
349
|
|
|
324
350
|
本软件默认在底部显示版权信息。如需隐藏或修改版权信息,必须获取授权码。
|
|
325
351
|
|
|
326
|
-
####
|
|
352
|
+
#### 获取授权码
|
|
327
353
|
|
|
328
|
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
354
|
+
**联系作者**
|
|
355
|
+
- 邮箱:nywqs@outlook.com
|
|
356
|
+
- 电话:18637762001
|
|
331
357
|
|
|
332
|
-
|
|
358
|
+
**使用授权码生成工具**
|
|
333
359
|
|
|
334
360
|
打开项目根目录下的 `authcode-generator.html` 文件,在浏览器中生成授权码:
|
|
335
361
|
|
|
336
362
|
```bash
|
|
337
|
-
#
|
|
363
|
+
# 打开授权码生成工具
|
|
338
364
|
open authcode-generator.html # macOS
|
|
339
365
|
start authcode-generator.html # Windows
|
|
340
366
|
xdg-open authcode-generator.html # Linux
|
|
341
367
|
|
|
342
|
-
#
|
|
368
|
+
# 或使用命令行工具(Node.js)
|
|
343
369
|
node src/utils/authkey_tool.js <公司名称>
|
|
344
370
|
```
|
|
345
371
|
|
|
346
|
-
####
|
|
372
|
+
#### 使用授权码
|
|
347
373
|
|
|
348
374
|
```vue
|
|
349
375
|
<template>
|
|
@@ -353,7 +379,7 @@ node src/utils/authkey_tool.js <公司名称>
|
|
|
353
379
|
</template>
|
|
354
380
|
```
|
|
355
381
|
|
|
356
|
-
####
|
|
382
|
+
#### 自定义 Footer 信息(需授权)
|
|
357
383
|
|
|
358
384
|
```vue
|
|
359
385
|
<template>
|
|
@@ -368,26 +394,53 @@ node src/utils/authkey_tool.js <公司名称>
|
|
|
368
394
|
</template>
|
|
369
395
|
```
|
|
370
396
|
|
|
371
|
-
|
|
372
|
-
-
|
|
373
|
-
-
|
|
374
|
-
-
|
|
397
|
+
**授权模式说明**
|
|
398
|
+
- 不提供 authCode:显示默认版权信息
|
|
399
|
+
- 有效 authCode + 无 customFooter:隐藏 Footer
|
|
400
|
+
- 有效 authCode + customFooter:显示自定义 Footer
|
|
375
401
|
|
|
376
|
-
|
|
402
|
+
**授权信息解密**
|
|
377
403
|
|
|
378
|
-
授权码采用
|
|
404
|
+
授权码采用 AES-256-CBC + OpenSSL 格式加密,可解密出:
|
|
379
405
|
- 公司/授权名称
|
|
380
406
|
- 有效期(可选)
|
|
381
407
|
- 机器码绑定(可选)
|
|
382
408
|
|
|
383
409
|
控制台会输出授权验证信息:
|
|
384
410
|
```javascript
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
411
|
+
授权验证成功
|
|
412
|
+
授权公司: leoncheng
|
|
413
|
+
有效期至: 2026-12-17
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## 预览模式
|
|
417
|
+
|
|
418
|
+
ScadaCanvas 组件支持预览模式,用于在运行时展示组态画面:
|
|
419
|
+
|
|
420
|
+
```vue
|
|
421
|
+
<template>
|
|
422
|
+
<ScadaCanvas
|
|
423
|
+
:preview-mode="true"
|
|
424
|
+
:auth-code="authCode"
|
|
425
|
+
/>
|
|
426
|
+
</template>
|
|
427
|
+
|
|
428
|
+
<script setup lang="ts">
|
|
429
|
+
import { ref, onMounted } from 'vue'
|
|
430
|
+
import { ScadaCanvas } from '@nywqs/scada-engine'
|
|
431
|
+
|
|
432
|
+
const authCode = ref('your-auth-code')
|
|
433
|
+
|
|
434
|
+
// 预览模式特性:
|
|
435
|
+
// 1. 隐藏编辑工具栏和组件库
|
|
436
|
+
// 2. 禁止节点移动和编辑
|
|
437
|
+
// 3. 仅显示画布和组件
|
|
438
|
+
// 4. 支持动画自动播放
|
|
439
|
+
// 5. 支持实时数据更新
|
|
440
|
+
</script>
|
|
388
441
|
```
|
|
389
442
|
|
|
390
|
-
##
|
|
443
|
+
## 开发
|
|
391
444
|
|
|
392
445
|
```bash
|
|
393
446
|
# 克隆项目
|
|
@@ -403,7 +456,7 @@ npm run dev
|
|
|
403
456
|
npm run build:lib
|
|
404
457
|
```
|
|
405
458
|
|
|
406
|
-
##
|
|
459
|
+
## 发布到 npm
|
|
407
460
|
|
|
408
461
|
```bash
|
|
409
462
|
# 1. 登录 npm
|
|
@@ -422,17 +475,33 @@ npm version major # 主版本 1.0.0 -> 2.0.0
|
|
|
422
475
|
npm publish
|
|
423
476
|
```
|
|
424
477
|
|
|
425
|
-
##
|
|
478
|
+
## 版本管理建议
|
|
479
|
+
|
|
480
|
+
- patch (1.0.x):Bug 修复、小改进
|
|
481
|
+
- minor (1.x.0):新功能、向后兼容
|
|
482
|
+
- major (x.0.0):破坏性更新、重大重构
|
|
483
|
+
|
|
484
|
+
## 版本历史
|
|
485
|
+
|
|
486
|
+
### 1.1.11 (2025-12-30)
|
|
487
|
+
- 修复预览按钮事件触发问题
|
|
488
|
+
- 优化路由跳转逻辑
|
|
489
|
+
- 添加详细调试日志
|
|
490
|
+
|
|
491
|
+
### 1.1.10 (2025-12-30)
|
|
492
|
+
- 添加预览事件支持
|
|
493
|
+
- 优化事件触发机制
|
|
426
494
|
|
|
427
|
-
|
|
428
|
-
-
|
|
429
|
-
-
|
|
495
|
+
### 1.0.0
|
|
496
|
+
- 初始版本发布
|
|
497
|
+
- 基础组态编辑功能
|
|
498
|
+
- 支持基础组件和IoT组件
|
|
430
499
|
|
|
431
|
-
##
|
|
500
|
+
## 贡献
|
|
432
501
|
|
|
433
502
|
欢迎提交 Issue 和 Pull Request!
|
|
434
503
|
|
|
435
|
-
##
|
|
504
|
+
## 许可协议
|
|
436
505
|
|
|
437
506
|
**版权所有 © 2025 leoncheng**
|
|
438
507
|
|
|
@@ -445,7 +514,7 @@ npm publish
|
|
|
445
514
|
|
|
446
515
|
如需商业使用,请联系作者获取授权。
|
|
447
516
|
|
|
448
|
-
##
|
|
517
|
+
## 作者
|
|
449
518
|
|
|
450
519
|
**leoncheng**
|
|
451
520
|
|
package/dist/scada-engine.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-scada-theme] .scada-header[data-v-9bbedc41]{height:60px;background:#16213e;display:flex;align-items:center;justify-content:space-between;padding:0 32px;border-bottom:1px solid #0f3460;gap:24px}[data-scada-theme] .header-left[data-v-9bbedc41]{display:flex;align-items:center;gap:12px;flex-shrink:0}[data-scada-theme] .logo[data-v-9bbedc41]{font-size:20px;font-weight:600;margin:0;color:#e2e8f0}[data-scada-theme] .version[data-v-9bbedc41]{font-size:12px;color:#64748b;padding:2px 8px;background:#0f172a;border-radius:4px}[data-scada-theme] .header-center[data-v-9bbedc41]{flex:1;display:flex;justify-content:center;align-items:center}[data-scada-theme] .header-right[data-v-9bbedc41]{display:flex;align-items:center;gap:12px;flex-shrink:0}[data-scada-theme] .tool-group[data-v-9bbedc41]{display:flex;gap:8px}[data-scada-theme] .header-btn[data-v-9bbedc41]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s;font-size:13px}[data-scada-theme] .header-btn[data-v-9bbedc41]:hover{background:#1e3a5f;border-color:#3b82f6;transform:translateY(-1px)}[data-scada-theme] .header-btn .icon[data-v-9bbedc41]{font-size:16px}[data-scada-theme] .tip[data-v-9bbedc41]{font-size:13px;color:#94a3b8}[data-scada-theme] .divider[data-v-9bbedc41]{width:1px;height:32px;background:#334155;margin:0 12px}[data-scada-theme] .toolbar-btn[data-v-9bbedc41]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;font-size:16px}[data-scada-theme] .toolbar-btn[data-v-9bbedc41]:hover{background:#1e3a5f;border-color:#3b82f6}[data-scada-theme] .toolbar-btn .icon[data-v-9bbedc41]{font-size:16px}[data-scada-theme] .toolbar-btn .icon-svg[data-v-9bbedc41]{width:18px;height:18px;display:block}[data-scada-theme] .canvas-info[data-v-9bbedc41]{display:flex;align-items:center;gap:16px}[data-scada-theme] .info-text[data-v-9bbedc41]{font-size:12px;color:#64748b}[data-scada-theme] .component-library[data-v-92bb4e17]{width:260px;height:100%;background:#1e293b;border-right:1px solid #0f3460;display:flex;flex-direction:column;overflow:hidden}[data-scada-theme] .library-header[data-v-92bb4e17]{padding:16px;line-height:50px;text-align:center;border-bottom:1px solid #0f3460}[data-scada-theme] .library-header h3[data-v-92bb4e17]{margin:0;font-size:16px;font-weight:600;color:#e2e8f0}[data-scada-theme] .library-content[data-v-92bb4e17]{flex:1;overflow-y:auto;padding:16px}[data-scada-theme] .component-section[data-v-92bb4e17]{margin-bottom:24px}[data-scada-theme] .component-section[data-v-92bb4e17]:last-child{margin-bottom:0}[data-scada-theme] .section-title[data-v-92bb4e17]{font-size:13px;color:#94a3b8;margin:0 0 12px;font-weight:600}[data-scada-theme] .component-grid[data-v-92bb4e17]{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}[data-scada-theme] .component-item[data-v-92bb4e17]{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 8px;background:#0f172a;border:1px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .component-item[data-v-92bb4e17]:hover{background:#1e3a5f;border-color:#3b82f6;transform:translateY(-2px);box-shadow:0 4px 8px #3b82f64d}[data-scada-theme] .component-item[data-v-92bb4e17]:active{transform:translateY(0)}[data-scada-theme] .component-icon[data-v-92bb4e17]{font-size:24px;color:#e2e8f0}[data-scada-theme] .component-name[data-v-92bb4e17]{font-size:12px;color:#cbd5e1;font-weight:500}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar{width:8px}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .canvas-area[data-v-a869f6aa]{flex:1;display:flex;align-items:center;justify-content:center;background:#0f172a;overflow:auto;position:relative}[data-scada-theme] .canvas-container[data-v-a869f6aa]{position:relative;border:2px solid #334155;box-shadow:0 4px 12px #0000004d;transition:transform .2s ease}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar{width:8px;height:8px}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .canvas-config-panel[data-v-f309895b]{width:100%;height:100%;background:#1e293b;display:flex;flex-direction:column;overflow:hidden}[data-scada-theme] .panel-header[data-v-f309895b]{padding:16px;border-bottom:1px solid #0f3460}[data-scada-theme] .panel-header h3[data-v-f309895b]{margin:0;font-size:16px;font-weight:600;color:#e2e8f0}[data-scada-theme] .panel-content[data-v-f309895b]{flex:1;overflow-y:auto;padding:16px}[data-scada-theme] .config-section[data-v-f309895b]{margin-bottom:24px}[data-scada-theme] .config-section[data-v-f309895b]:last-child{margin-bottom:0}[data-scada-theme] .section-title[data-v-f309895b]{font-size:13px;color:#94a3b8;margin:0 0 12px;font-weight:600}[data-scada-theme] .config-item[data-v-f309895b]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}[data-scada-theme] .config-item label[data-v-f309895b]{font-size:13px;color:#cbd5e1;flex-shrink:0}[data-scada-theme] .config-select[data-v-f309895b]{width:160px;padding:6px 12px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;font-size:13px}[data-scada-theme] .config-number[data-v-f309895b]{width:80px;padding:6px 12px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;text-align:center;font-size:13px}[data-scada-theme] .config-color[data-v-f309895b]{width:50px;height:32px;border:1px solid #334155;border-radius:4px;cursor:pointer;background:#0f172a}[data-scada-theme] .slider-group[data-v-f309895b]{display:flex;align-items:center;gap:8px;flex:1;max-width:160px}[data-scada-theme] .config-slider[data-v-f309895b]{flex:1}[data-scada-theme] .value-display[data-v-f309895b]{font-size:12px;color:#94a3b8;min-width:30px;text-align:right}[data-scada-theme] .number-input-group[data-v-f309895b]{display:flex;gap:4px}[data-scada-theme] .adjust-btn[data-v-f309895b]{width:32px;height:32px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;font-size:14px}[data-scada-theme] .adjust-btn[data-v-f309895b]:hover{background:#1e3a5f;border-color:#3b82f6}[data-scada-theme] .upload-btn[data-v-f309895b]{width:50px;height:32px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .2s}[data-scada-theme] .upload-btn[data-v-f309895b]:hover{background:#1e3a5f;border-color:#3b82f6}[data-scada-theme] .image-upload[data-v-f309895b]{display:flex;gap:8px}[data-scada-theme] .clear-btn[data-v-f309895b]{width:32px;height:32px;background:#dc2626;color:#fff;border:1px solid #991b1b;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s}[data-scada-theme] .clear-btn[data-v-f309895b]:hover{background:#b91c1c;border-color:#7f1d1d}[data-scada-theme] .switch[data-v-f309895b]{position:relative;display:inline-block;width:48px;height:24px}[data-scada-theme] .switch input[data-v-f309895b]{opacity:0;width:0;height:0}[data-scada-theme] .switch .slider[data-v-f309895b]{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#475569;transition:.3s;border-radius:24px}[data-scada-theme] .switch .slider[data-v-f309895b]:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;transition:.3s;border-radius:50%}[data-scada-theme] .switch input:checked+.slider[data-v-f309895b]{background-color:#3b82f6}[data-scada-theme] .switch input:checked+.slider[data-v-f309895b]:before{transform:translate(24px)}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar{width:8px}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .tab-pane[data-v-def84c5f]{animation:fadeIn-def84c5f .2s}@keyframes fadeIn-def84c5f{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .property-section[data-v-def84c5f]{margin-bottom:16px}[data-scada-theme] .property-section h4[data-v-def84c5f]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:600}[data-scada-theme] .property-item[data-v-def84c5f]{margin-bottom:12px}[data-scada-theme] .property-item-inline[data-v-def84c5f]{display:flex;align-items:center;gap:8px;margin-bottom:8px}[data-scada-theme] .property-item-inline[data-v-def84c5f]:has(.checkbox-wrapper){justify-content:flex-start}[data-scada-theme] .property-item-inline label[data-v-def84c5f]{flex-shrink:0;width:70px;font-size:11px;color:#cbd5e1;margin-bottom:0}[data-scada-theme] .property-item-inline input[data-v-def84c5f],[data-scada-theme] .property-item-inline select[data-v-def84c5f]{flex:1;min-width:0;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item-inline .checkbox-wrapper[data-v-def84c5f]{flex:0 0 auto}[data-scada-theme] .property-item-inline input[data-v-def84c5f]:focus,[data-scada-theme] .property-item-inline select[data-v-def84c5f]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item-inline input[data-v-def84c5f]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-item-inline .color-input-wrapper[data-v-def84c5f]{flex:1;display:flex;align-items:center;gap:6px}[data-scada-theme] .property-item-inline .color-input-wrapper input[type=color][data-v-def84c5f]{width:40px;height:28px;padding:2px;border:1px solid #334155;border-radius:4px;background:#0f172a;cursor:pointer;transition:all .2s}[data-scada-theme] .property-item-inline .color-input-wrapper .color-value[data-v-def84c5f]{flex:1;min-width:0;font-size:11px;color:#94a3b8;font-family:monospace}[data-scada-theme] .property-item-inline .checkbox-wrapper[data-v-def84c5f]{flex:1;display:flex;align-items:center;gap:6px;padding:0}[data-scada-theme] .property-item label[data-v-def84c5f]{display:block;font-size:12px;color:#cbd5e1;margin-bottom:6px}[data-scada-theme] .property-item input[data-v-def84c5f]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .property-item input[data-v-def84c5f]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .property-item input[data-v-def84c5f]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-row[data-v-def84c5f]{display:grid;grid-template-columns:1fr 1fr;gap:8px}[data-scada-theme] .color-input-wrapper[data-v-def84c5f]{display:flex;align-items:center;gap:8px}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]{width:50px;height:36px;padding:2px;border:1px solid #334155;border-radius:4px;background:#0f172a;cursor:pointer;transition:all .2s}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]:hover{border-color:#3b82f6}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]::-webkit-color-swatch-wrapper{padding:0}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]::-webkit-color-swatch{border:none;border-radius:2px}[data-scada-theme] .color-value[data-v-def84c5f]{flex:1;font-size:12px;color:#94a3b8;font-family:monospace}[data-scada-theme] .checkbox-wrapper[data-v-def84c5f]{display:inline-flex;align-items:center;gap:6px}[data-scada-theme] .checkbox-wrapper input[type=checkbox][data-v-def84c5f]{width:16px;height:16px;cursor:pointer;accent-color:#3b82f6;pointer-events:auto!important;-webkit-appearance:auto!important;-moz-appearance:auto!important;appearance:auto!important;opacity:1!important;z-index:1!important;position:relative!important;flex-shrink:0}[data-scada-theme] .checkbox-label[data-v-def84c5f]{font-size:12px;color:#cbd5e1;white-space:nowrap}[data-scada-theme] select[data-v-def84c5f]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:pointer;transition:all .2s}[data-scada-theme] select[data-v-def84c5f]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] select option[data-v-def84c5f]{background:#0f172a;color:#e2e8f0}[data-scada-theme] .property-hint[data-v-def84c5f]{display:block;font-size:11px;color:#64748b;margin-top:2px;font-weight:400}[data-scada-theme] .tab-pane[data-v-5b515f8a]{animation:fadeIn-5b515f8a .2s}@keyframes fadeIn-5b515f8a{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .property-section[data-v-5b515f8a]{margin-bottom:16px}[data-scada-theme] .property-section h4[data-v-5b515f8a]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:600}[data-scada-theme] .property-item-inline[data-v-5b515f8a]{display:flex;align-items:center;gap:8px;margin-bottom:8px}[data-scada-theme] .property-item-inline label[data-v-5b515f8a]{flex-shrink:0;width:70px;font-size:11px;color:#cbd5e1;margin-bottom:0}[data-scada-theme] .property-item-inline input[data-v-5b515f8a],[data-scada-theme] .property-item-inline select[data-v-5b515f8a]{flex:1;min-width:0;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item-inline input[data-v-5b515f8a]:focus,[data-scada-theme] .property-item-inline select[data-v-5b515f8a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item-inline input[data-v-5b515f8a]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-item-inline .checkbox-wrapper[data-v-5b515f8a]{flex:1;display:flex;align-items:center;gap:6px;padding:0}[data-scada-theme] .checkbox-wrapper input[type=checkbox][data-v-5b515f8a]{width:18px;height:18px;cursor:pointer;accent-color:#3b82f6}[data-scada-theme] .checkbox-label[data-v-5b515f8a]{font-size:12px;color:#cbd5e1}[data-scada-theme] .edge-properties-tab[data-v-e47f1784]{padding:0}[data-scada-theme] .property-section[data-v-e47f1784]{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #334155}[data-scada-theme] .property-section[data-v-e47f1784]:last-child{border-bottom:none;margin-bottom:0}[data-scada-theme] .section-title[data-v-e47f1784]{font-size:13px;font-weight:600;color:#e2e8f0;margin:0 0 12px;padding:0}[data-scada-theme] .property-item[data-v-e47f1784]{margin-bottom:12px}[data-scada-theme] .property-item[data-v-e47f1784]:last-child{margin-bottom:0}[data-scada-theme] .property-label[data-v-e47f1784]{display:block;font-size:12px;color:#94a3b8;margin-bottom:6px;font-weight:500}[data-scada-theme] .color-input-wrapper[data-v-e47f1784]{display:flex;gap:8px;align-items:center}[data-scada-theme] .color-input[data-v-e47f1784]{width:40px;height:32px;border:1px solid #475569;border-radius:4px;cursor:pointer;background:#1e293b;padding:2px}[data-scada-theme] .color-input[data-v-e47f1784]::-webkit-color-swatch-wrapper{padding:0}[data-scada-theme] .color-input[data-v-e47f1784]::-webkit-color-swatch{border:none;border-radius:2px}[data-scada-theme] .color-text[data-v-e47f1784]{flex:1;height:32px;background:#1e293b;border:1px solid #475569;border-radius:4px;padding:0 12px;color:#e2e8f0;font-size:12px;font-family:Consolas,monospace}[data-scada-theme] .color-text[data-v-e47f1784]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .number-input-wrapper[data-v-e47f1784]{display:flex;align-items:center;gap:8px}[data-scada-theme] .property-input[data-v-e47f1784]{flex:1;height:32px;background:#1e293b;border:1px solid #475569;border-radius:4px;padding:0 12px;color:#e2e8f0;font-size:12px}[data-scada-theme] .property-input[data-v-e47f1784]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .input-unit[data-v-e47f1784]{font-size:12px;color:#64748b;min-width:24px}[data-scada-theme] .property-select[data-v-e47f1784]{width:100%;height:32px;background:#1e293b;border:1px solid #475569;border-radius:4px;padding:0 12px;color:#e2e8f0;font-size:12px;cursor:pointer}[data-scada-theme] .property-select[data-v-e47f1784]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .slider-wrapper[data-v-e47f1784]{display:flex;align-items:center;gap:12px}[data-scada-theme] .property-slider[data-v-e47f1784]{flex:1;height:4px;background:#334155;border-radius:2px;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-scada-theme] .property-slider[data-v-e47f1784]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;background:#3b82f6;border-radius:50%;cursor:pointer}[data-scada-theme] .property-slider[data-v-e47f1784]::-moz-range-thumb{width:14px;height:14px;background:#3b82f6;border-radius:50%;border:none;cursor:pointer}[data-scada-theme] .slider-value[data-v-e47f1784]{font-size:12px;color:#94a3b8;min-width:40px;text-align:right}[data-scada-theme] .delete-btn[data-v-e47f1784]{width:100%;height:36px;background:#dc2626;border:none;border-radius:4px;color:#fff;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .delete-btn[data-v-e47f1784]:hover{background:#b91c1c}[data-scada-theme] .delete-btn[data-v-e47f1784]:active{transform:scale(.98)}[data-scada-theme] .event-card[data-v-af7c633a]{background:#0f172a;border:1px solid #334155;border-radius:6px;padding:12px;transition:all .2s}[data-scada-theme] .event-card[data-v-af7c633a]:hover{border-color:#3b82f6}[data-scada-theme] .event-card-header[data-v-af7c633a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #1e293b;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s}[data-scada-theme] .event-card-header[data-v-af7c633a]:hover{background:#3b82f60d;margin:-4px -8px 8px;padding:4px 8px 12px;border-radius:4px}[data-scada-theme] .header-left[data-v-af7c633a]{display:flex;align-items:center;gap:8px}[data-scada-theme] .collapse-icon[data-v-af7c633a]{font-size:10px;color:#64748b;transition:transform .2s;display:inline-block;width:12px}[data-scada-theme] .event-title[data-v-af7c633a]{font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-remove[data-v-af7c633a]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;line-height:1;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-af7c633a]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .event-card-body[data-v-af7c633a]{animation:slideDown-af7c633a .2s ease-out}@keyframes slideDown-af7c633a{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:2000px}}[data-scada-theme] .event-field[data-v-af7c633a]{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}[data-scada-theme] .event-field[data-v-af7c633a]:last-child{margin-bottom:0}[data-scada-theme] .event-field label[data-v-af7c633a]{font-size:12px;color:#cbd5e1;font-weight:500}[data-scada-theme] .event-field input[data-v-af7c633a],[data-scada-theme] .event-field select[data-v-af7c633a],[data-scada-theme] .event-field textarea[data-v-af7c633a]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .event-field input[data-v-af7c633a]:focus,[data-scada-theme] .event-field select[data-v-af7c633a]:focus,[data-scada-theme] .event-field textarea[data-v-af7c633a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .section-title[data-v-af7c633a]{font-size:12px;color:#94a3b8;margin-top:12px;margin-bottom:8px;font-weight:500}[data-scada-theme] .section-title[data-v-af7c633a]:first-child{margin-top:0}[data-scada-theme] .field-hint[data-v-af7c633a]{font-size:11px;color:#64748b;margin-top:2px}[data-scada-theme] .condition-config[data-v-af7c633a]{display:flex;flex-direction:column;gap:8px;margin-top:8px;padding:12px;background:#1e293b;border-radius:4px}[data-scada-theme] .condition-label[data-v-af7c633a]{font-size:12px;color:#cbd5e1}[data-scada-theme] .condition-select[data-v-af7c633a],[data-scada-theme] .condition-input[data-v-af7c633a]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .condition-select[data-v-af7c633a]:focus,[data-scada-theme] .condition-input[data-v-af7c633a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .config-section[data-v-af7c633a]{margin-top:16px;padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .btn-config[data-v-af7c633a]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;cursor:pointer;font-size:13px;transition:all .2s}[data-scada-theme] .btn-config[data-v-af7c633a]:hover{background:#334155;border-color:#3b82f6}[data-scada-theme] .selected-workflow-info[data-v-af7c633a]{margin-top:12px;padding:12px;background:#1e293b;border-radius:4px}[data-scada-theme] .info-row[data-v-af7c633a]{display:flex;align-items:center;gap:8px;margin-bottom:12px}[data-scada-theme] .info-label[data-v-af7c633a]{font-size:12px;color:#94a3b8}[data-scada-theme] .info-value[data-v-af7c633a]{font-size:13px;color:#10b981;font-weight:500}[data-scada-theme] .modal-overlay[data-v-7884b850]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn-7884b850 .2s ease-out}@keyframes fadeIn-7884b850{0%{opacity:0}to{opacity:1}}[data-scada-theme] .modal-container[data-v-7884b850]{width:800px;max-width:90vw;max-height:85vh;background:#0f172a;border-radius:8px;box-shadow:0 20px 60px #00000080;display:flex;flex-direction:column;animation:slideUp-7884b850 .3s ease-out}@keyframes slideUp-7884b850{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .modal-header[data-v-7884b850]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .modal-header h3[data-v-7884b850]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-7884b850]{width:32px;height:32px;background:transparent;border:none;border-radius:4px;color:#94a3b8;font-size:20px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-close[data-v-7884b850]:hover{background:#1e293b;color:#e2e8f0}[data-scada-theme] .device-point-selector[data-v-7884b850]{display:grid;grid-template-columns:1fr 1.5fr;gap:12px;height:500px;padding:16px 24px;overflow:hidden}[data-scada-theme] .modal-footer[data-v-7884b850]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-7884b850],[data-scada-theme] .btn-confirm[data-v-7884b850]{padding:8px 24px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:none}[data-scada-theme] .btn-cancel[data-v-7884b850]{background:#1e293b;color:#e2e8f0}[data-scada-theme] .btn-cancel[data-v-7884b850]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-7884b850]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-7884b850]:hover{background:#2563eb}[data-scada-theme] .btn-confirm[data-v-7884b850]:disabled{background:#334155;color:#64748b;cursor:not-allowed}[data-scada-theme] .device-list-panel[data-v-7884b850],[data-scada-theme] .point-list-panel[data-v-7884b850]{display:flex;flex-direction:column;background:#1e293b;border:1px solid #334155;border-radius:6px;overflow:hidden}[data-scada-theme] .panel-header[data-v-7884b850]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#334155;border-bottom:1px solid #475569}[data-scada-theme] .panel-header h4[data-v-7884b850]{margin:0;font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .device-count[data-v-7884b850],[data-scada-theme] .point-count[data-v-7884b850]{font-size:12px;color:#94a3b8;background:#1e293b;padding:2px 8px;border-radius:10px}[data-scada-theme] .search-box[data-v-7884b850]{padding:12px 16px;border-bottom:1px solid #334155}[data-scada-theme] .search-input[data-v-7884b850]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .search-input[data-v-7884b850]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .search-input[data-v-7884b850]::placeholder{color:#64748b}[data-scada-theme] .device-list[data-v-7884b850],[data-scada-theme] .point-list[data-v-7884b850]{flex:1;overflow-y:auto;padding:8px}[data-scada-theme] .device-item[data-v-7884b850]{display:flex;justify-content:space-between;align-items:center;padding:12px;margin-bottom:4px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s}[data-scada-theme] .device-item[data-v-7884b850]:hover{background:#1e293b;border-color:#3b82f6}[data-scada-theme] .device-item.active[data-v-7884b850]{background:#3b82f61a;border-color:#3b82f6}[data-scada-theme] .device-item.offline[data-v-7884b850]{opacity:.6}[data-scada-theme] .device-info[data-v-7884b850]{flex:1}[data-scada-theme] .device-name[data-v-7884b850]{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:500;color:#e2e8f0;margin-bottom:4px}[data-scada-theme] .status-dot[data-v-7884b850]{width:8px;height:8px;border-radius:50%;background:#64748b}[data-scada-theme] .status-dot.online[data-v-7884b850]{background:#10b981;box-shadow:0 0 8px #10b98180}[data-scada-theme] .status-dot.offline[data-v-7884b850]{background:#64748b}[data-scada-theme] .status-dot.error[data-v-7884b850]{background:#ef4444;box-shadow:0 0 8px #ef444480}[data-scada-theme] .device-meta[data-v-7884b850]{display:flex;gap:12px;font-size:11px;color:#94a3b8}[data-scada-theme] .device-code[data-v-7884b850]{font-family:monospace}[data-scada-theme] .device-arrow[data-v-7884b850]{font-size:18px;color:#64748b;transition:all .2s}[data-scada-theme] .device-item:hover .device-arrow[data-v-7884b850]{color:#3b82f6;transform:translate(2px)}[data-scada-theme] .point-item[data-v-7884b850]{padding:12px;margin-bottom:4px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s}[data-scada-theme] .point-item[data-v-7884b850]:hover{background:#1e293b;border-color:#3b82f6}[data-scada-theme] .point-item.active[data-v-7884b850]{background:#3b82f61a;border-color:#3b82f6}[data-scada-theme] .point-item.disabled[data-v-7884b850]{opacity:.5;cursor:not-allowed}[data-scada-theme] .point-info[data-v-7884b850]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .point-name[data-v-7884b850]{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:500;color:#e2e8f0}[data-scada-theme] .access-mode[data-v-7884b850]{font-size:10px;padding:2px 6px;border-radius:3px;font-weight:400}[data-scada-theme] .access-mode.read[data-v-7884b850]{background:#3b82f633;color:#60a5fa}[data-scada-theme] .access-mode.write[data-v-7884b850]{background:#ef444433;color:#f87171}[data-scada-theme] .access-mode.readWrite[data-v-7884b850]{background:#10b98133;color:#34d399}[data-scada-theme] .point-meta[data-v-7884b850]{display:flex;gap:12px;font-size:11px;color:#94a3b8}[data-scada-theme] .point-code[data-v-7884b850]{font-family:monospace}[data-scada-theme] .point-unit[data-v-7884b850]{color:#3b82f6}[data-scada-theme] .point-type[data-v-7884b850]{background:#334155;padding:2px 6px;border-radius:3px}[data-scada-theme] .point-value[data-v-7884b850]{font-size:12px;color:#94a3b8}[data-scada-theme] .point-value .value[data-v-7884b850]{color:#e2e8f0;font-weight:500;margin:0 4px}[data-scada-theme] .quality[data-v-7884b850]{font-size:10px;padding:2px 6px;border-radius:3px;margin-left:8px}[data-scada-theme] .quality.good[data-v-7884b850]{background:#10b98133;color:#34d399}[data-scada-theme] .quality.bad[data-v-7884b850]{background:#ef444433;color:#f87171}[data-scada-theme] .quality.uncertain[data-v-7884b850]{background:#f59e0b33;color:#fbbf24}[data-scada-theme] .empty-hint[data-v-7884b850]{text-align:center;padding:40px 20px;color:#64748b;font-size:13px}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar{width:6px}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar-track,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar-track{background:#0f172a}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar-thumb,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar-thumb:hover,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar-thumb:hover{background:#475569}[data-scada-theme] .modal-overlay[data-v-ef9e0ee1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn-ef9e0ee1 .2s ease-out}@keyframes fadeIn-ef9e0ee1{0%{opacity:0}to{opacity:1}}[data-scada-theme] .modal-container[data-v-ef9e0ee1]{width:600px;max-width:90vw;max-height:85vh;background:#0f172a;border-radius:8px;box-shadow:0 20px 60px #00000080;display:flex;flex-direction:column;animation:slideUp-ef9e0ee1 .3s ease-out}@keyframes slideUp-ef9e0ee1{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .modal-header[data-v-ef9e0ee1]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .modal-header h3[data-v-ef9e0ee1]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-ef9e0ee1]{width:32px;height:32px;background:transparent;border:none;border-radius:4px;color:#94a3b8;font-size:20px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-close[data-v-ef9e0ee1]:hover{background:#1e293b;color:#e2e8f0}[data-scada-theme] .modal-footer[data-v-ef9e0ee1]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-ef9e0ee1],[data-scada-theme] .btn-confirm[data-v-ef9e0ee1]{padding:8px 24px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:none}[data-scada-theme] .btn-cancel[data-v-ef9e0ee1]{background:#1e293b;color:#e2e8f0}[data-scada-theme] .btn-cancel[data-v-ef9e0ee1]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-ef9e0ee1]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-ef9e0ee1]:hover{background:#2563eb}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]{max-height:60vh;overflow-y:auto;padding:20px 24px;display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-item[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .config-item label[data-v-ef9e0ee1]{font-size:12px;color:#cbd5e1;font-weight:500}[data-scada-theme] .required[data-v-ef9e0ee1]{color:#ef4444;margin-left:2px}[data-scada-theme] .field-hint[data-v-ef9e0ee1]{font-size:11px;color:#64748b;margin-top:4px;line-height:1.4}[data-scada-theme] .field-hint.error[data-v-ef9e0ee1]{color:#ef4444}[data-scada-theme] .config-item select[data-v-ef9e0ee1],[data-scada-theme] .config-item input[data-v-ef9e0ee1]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .config-item select[data-v-ef9e0ee1]:focus,[data-scada-theme] .config-item input[data-v-ef9e0ee1]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .unit-config[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .checkbox-label[data-v-ef9e0ee1]{display:flex;align-items:center;gap:8px;font-size:13px;color:#cbd5e1;cursor:pointer}[data-scada-theme] .checkbox-label input[type=checkbox][data-v-ef9e0ee1]{width:auto;cursor:pointer}[data-scada-theme] .custom-unit[data-v-ef9e0ee1]{margin-left:24px}[data-scada-theme] .custom-unit input[data-v-ef9e0ee1]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .custom-unit input[data-v-ef9e0ee1]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .mapping-details[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:12px;padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .range-rules[data-v-ef9e0ee1],[data-scada-theme] .enum-mappings[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .range-rule[data-v-ef9e0ee1],[data-scada-theme] .enum-mapping[data-v-ef9e0ee1]{display:flex;align-items:center;gap:8px}[data-scada-theme] .range-rule input[data-v-ef9e0ee1],[data-scada-theme] .enum-mapping input[data-v-ef9e0ee1]{flex:1;padding:6px 10px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px}[data-scada-theme] .range-rule input[data-v-ef9e0ee1]:first-child,[data-scada-theme] .range-rule input[data-v-ef9e0ee1]:nth-child(3){max-width:80px}[data-scada-theme] .range-separator[data-v-ef9e0ee1],[data-scada-theme] .range-arrow[data-v-ef9e0ee1],[data-scada-theme] .enum-arrow[data-v-ef9e0ee1]{color:#64748b;font-size:14px;flex-shrink:0}[data-scada-theme] .btn-remove-rule[data-v-ef9e0ee1]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}[data-scada-theme] .btn-remove-rule[data-v-ef9e0ee1]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .btn-add-rule[data-v-ef9e0ee1]{padding:8px 16px;background:#334155;border:1px dashed #475569;border-radius:4px;color:#94a3b8;font-size:12px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-add-rule[data-v-ef9e0ee1]:hover{background:#3b82f6;border-color:#3b82f6;color:#fff;border-style:solid}[data-scada-theme] .mapping-preview[data-v-ef9e0ee1]{padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .mapping-preview label[data-v-ef9e0ee1]{display:block;font-size:12px;color:#94a3b8;margin-bottom:8px}[data-scada-theme] .preview-content[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .preview-item[data-v-ef9e0ee1]{display:flex;align-items:center;gap:8px;padding:6px 10px;background:#1e293b;border-radius:4px;font-size:12px}[data-scada-theme] .preview-input[data-v-ef9e0ee1]{color:#94a3b8;font-family:monospace}[data-scada-theme] .preview-arrow[data-v-ef9e0ee1]{color:#64748b;font-size:12px}[data-scada-theme] .preview-output[data-v-ef9e0ee1]{color:#3b82f6;font-weight:500}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar{width:6px}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar-track{background:#0f172a}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar-thumb:hover{background:#475569}[data-scada-theme] .event-card[data-v-3731c19a]{background:#0f172a;border:1px solid #334155;border-radius:6px;padding:12px;transition:all .2s}[data-scada-theme] .event-card[data-v-3731c19a]:hover{border-color:#3b82f6}[data-scada-theme] .event-card-header[data-v-3731c19a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #1e293b;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s}[data-scada-theme] .event-card-header[data-v-3731c19a]:hover{background:#3b82f60d;margin:-4px -8px 8px;padding:4px 8px 12px;border-radius:4px}[data-scada-theme] .header-left[data-v-3731c19a]{display:flex;align-items:center;gap:8px}[data-scada-theme] .collapse-icon[data-v-3731c19a]{font-size:10px;color:#64748b;transition:transform .2s;display:inline-block;width:12px}[data-scada-theme] .event-title[data-v-3731c19a]{font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-remove[data-v-3731c19a]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;line-height:1;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-3731c19a]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .event-card-body[data-v-3731c19a]{animation:slideDown-3731c19a .2s ease-out}@keyframes slideDown-3731c19a{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:2000px}}[data-scada-theme] .property-item[data-v-3731c19a]{margin-bottom:12px}[data-scada-theme] .property-item[data-v-3731c19a]:last-child{margin-bottom:0}[data-scada-theme] .property-item label[data-v-3731c19a]{display:block;font-size:12px;color:#cbd5e1;margin-bottom:6px}[data-scada-theme] .property-item select[data-v-3731c19a]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .property-item select[data-v-3731c19a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .point-selector-trigger[data-v-3731c19a]{display:flex;justify-content:space-between;align-items:center;width:100%;padding:10px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;min-height:42px}[data-scada-theme] .point-selector-trigger[data-v-3731c19a]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .selected-point[data-v-3731c19a]{flex:1;display:flex;flex-direction:column;gap:4px}[data-scada-theme] .point-main[data-v-3731c19a]{display:flex;align-items:center;gap:8px;font-size:13px}[data-scada-theme] .device-name[data-v-3731c19a]{color:#94a3b8;font-size:12px}[data-scada-theme] .point-name[data-v-3731c19a]{color:#e2e8f0;font-weight:500}[data-scada-theme] .point-details[data-v-3731c19a]{display:flex;gap:8px;font-size:11px;color:#64748b}[data-scada-theme] .point-code[data-v-3731c19a]{font-family:monospace}[data-scada-theme] .point-unit[data-v-3731c19a]{color:#3b82f6}[data-scada-theme] .placeholder[data-v-3731c19a]{color:#64748b;font-size:13px}[data-scada-theme] .selector-arrow[data-v-3731c19a]{font-size:18px;color:#64748b;transition:all .2s}[data-scada-theme] .point-selector-trigger:hover .selector-arrow[data-v-3731c19a]{color:#3b82f6;transform:translate(2px)}[data-scada-theme] .mapping-trigger[data-v-3731c19a]{display:flex;justify-content:space-between;align-items:center;width:100%;padding:10px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;min-height:42px}[data-scada-theme] .mapping-trigger[data-v-3731c19a]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .mapping-summary[data-v-3731c19a]{flex:1;display:flex;flex-direction:column;gap:4px}[data-scada-theme] .mapping-type-label[data-v-3731c19a]{font-size:13px;color:#e2e8f0;font-weight:500}[data-scada-theme] .mapping-detail[data-v-3731c19a]{font-size:11px;color:#64748b}[data-scada-theme] .mapping-trigger .placeholder[data-v-3731c19a]{color:#64748b;font-size:13px}[data-scada-theme] .mapping-trigger:hover .selector-arrow[data-v-3731c19a]{color:#3b82f6;transform:translate(2px)}[data-scada-theme] .dialog-overlay[data-v-90af9944]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn-90af9944 .2s}@keyframes fadeIn-90af9944{0%{opacity:0}to{opacity:1}}[data-scada-theme] .dialog-content[data-v-90af9944]{background:#1e293b;border-radius:8px;width:90%;max-width:800px;box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #0000004d;animation:slideUp-90af9944 .3s}@keyframes slideUp-90af9944{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .dialog-header[data-v-90af9944]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-90af9944]{font-size:18px;font-weight:600;color:#e2e8f0;margin:0}[data-scada-theme] .btn-close[data-v-90af9944]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-90af9944]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-90af9944]{padding:24px;max-height:60vh;overflow-y:auto}[data-scada-theme] .btn-add-group[data-v-90af9944]{width:100%;padding:10px 16px;background:#1e293b;border:1px dashed #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:14px;transition:all .2s;margin-bottom:16px}[data-scada-theme] .btn-add-group[data-v-90af9944]:hover{background:#334155;border-color:#3b82f6;color:#e2e8f0}[data-scada-theme] .attribute-group[data-v-90af9944]{margin-bottom:12px;padding:16px;background:#0f172a;border-radius:4px;border:1px solid #334155}[data-scada-theme] .group-row[data-v-90af9944]{display:grid;grid-template-columns:1.5fr 2fr auto;gap:12px;align-items:end}[data-scada-theme] .group-field[data-v-90af9944]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .group-field label[data-v-90af9944]{font-size:12px;color:#94a3b8;font-weight:500}[data-scada-theme] .group-field input[data-v-90af9944],[data-scada-theme] .group-field select[data-v-90af9944]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .group-field input[data-v-90af9944]:focus,[data-scada-theme] .group-field select[data-v-90af9944]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .group-field-value .color-input-wrapper[data-v-90af9944]{display:flex;align-items:center;gap:8px}[data-scada-theme] .group-field-value .color-input-wrapper input[type=color][data-v-90af9944]{width:60px;height:36px}[data-scada-theme] .color-value[data-v-90af9944]{flex:1;font-size:12px;color:#94a3b8;font-family:monospace}[data-scada-theme] .btn-delete-group[data-v-90af9944]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;transition:all .2s}[data-scada-theme] .btn-delete-group[data-v-90af9944]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .empty-hint[data-v-90af9944]{font-size:12px;color:#64748b;text-align:center;padding:16px;background:#0f172a;border-radius:4px;margin-bottom:12px}[data-scada-theme] .dialog-footer[data-v-90af9944]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-90af9944],[data-scada-theme] .btn-confirm[data-v-90af9944]{padding:8px 20px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-cancel[data-v-90af9944]{background:transparent;border:1px solid #475569;color:#cbd5e1}[data-scada-theme] .btn-cancel[data-v-90af9944]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-90af9944]{background:#3b82f6;border:1px solid #3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-90af9944]:hover{background:#2563eb;border-color:#2563eb}[data-scada-theme] .dialog-overlay[data-v-add3567b]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn-add3567b .2s}@keyframes fadeIn-add3567b{0%{opacity:0}to{opacity:1}}[data-scada-theme] .dialog-large[data-v-add3567b]{max-width:1200px;height:80vh;display:flex;flex-direction:column}[data-scada-theme] .dialog-content[data-v-add3567b]{background:#1e293b;border-radius:8px;width:90%;box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #0000004d;animation:slideUp-add3567b .3s}@keyframes slideUp-add3567b{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .dialog-header[data-v-add3567b]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-add3567b]{font-size:18px;font-weight:600;color:#e2e8f0;margin:0}[data-scada-theme] .btn-close[data-v-add3567b]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-add3567b]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body-split[data-v-add3567b]{display:grid;grid-template-columns:1fr 1fr;gap:20px;flex:1;overflow:hidden;padding:24px}[data-scada-theme] .code-editor-section[data-v-add3567b]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .code-textarea-full[data-v-add3567b]{flex:1;resize:none;height:100%!important}[data-scada-theme] .code-textarea[data-v-add3567b]{width:100%;padding:12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;font-family:Consolas,Monaco,Courier New,monospace;line-height:1.6;transition:all .2s}[data-scada-theme] .code-textarea[data-v-add3567b]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .section-header[data-v-add3567b]{display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .section-header label[data-v-add3567b]{font-size:14px;color:#cbd5e1;font-weight:600}[data-scada-theme] .preview-status[data-v-add3567b]{font-size:13px;font-weight:500}[data-scada-theme] .status-success[data-v-add3567b]{color:#10b981}[data-scada-theme] .status-error[data-v-add3567b]{color:#ef4444}[data-scada-theme] .btn-test[data-v-add3567b]{padding:6px 16px;background:#10b981;border:1px solid #10b981;border-radius:4px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}[data-scada-theme] .btn-test[data-v-add3567b]:hover{background:#059669;border-color:#059669}[data-scada-theme] .code-preview-section[data-v-add3567b]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .preview-canvas[data-v-add3567b]{flex:1;background:#0f172a;border:1px solid #334155;border-radius:4px;overflow:hidden;display:flex;flex-direction:column}[data-scada-theme] .node-preview[data-v-add3567b]{flex:1;position:relative;min-height:300px}[data-scada-theme] .console-output[data-v-add3567b]{max-height:150px;background:#020617;border-top:1px solid #334155;padding:12px;overflow-y:auto}[data-scada-theme] .console-title[data-v-add3567b]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:500}[data-scada-theme] .console-logs[data-v-add3567b]{display:flex;flex-direction:column;gap:4px}[data-scada-theme] .preview-empty[data-v-add3567b]{display:flex;align-items:center;justify-content:center;height:100%;color:#64748b;font-size:14px;text-align:center;padding:20px}[data-scada-theme] .preview-error-box[data-v-add3567b]{padding:20px;height:100%;overflow-y:auto}[data-scada-theme] .error-title[data-v-add3567b]{font-size:13px;color:#ef4444;margin-bottom:12px;font-weight:500}[data-scada-theme] .preview-node-container[data-v-add3567b]{height:100%;display:flex;flex-direction:column}[data-scada-theme] .log-item[data-v-add3567b]{font-family:Consolas,Monaco,monospace;font-size:12px;color:#e2e8f0;margin-bottom:4px;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .log-item[data-v-add3567b]:last-child{margin-bottom:0}[data-scada-theme] .error-message[data-v-add3567b]{background:#450a0a;border:1px solid #7f1d1d;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:12px;color:#fca5a5;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .dialog-footer[data-v-add3567b]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-add3567b],[data-scada-theme] .btn-confirm[data-v-add3567b]{padding:8px 20px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-cancel[data-v-add3567b]{background:transparent;border:1px solid #475569;color:#cbd5e1}[data-scada-theme] .btn-cancel[data-v-add3567b]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-add3567b]{background:#3b82f6;border:1px solid #3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-add3567b]:hover{background:#2563eb;border-color:#2563eb}[data-scada-theme] .dialog-overlay[data-v-c9a88e33]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:10000}[data-scada-theme] .dialog-container[data-v-c9a88e33]{width:600px;max-height:80vh;background:#1e293b;border-radius:8px;display:flex;flex-direction:column;overflow:hidden}[data-scada-theme] .dialog-header[data-v-c9a88e33]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-c9a88e33]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-c9a88e33]{width:32px;height:32px;background:transparent;border:none;border-radius:4px;color:#94a3b8;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}[data-scada-theme] .btn-close[data-v-c9a88e33]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-c9a88e33]{flex:1;overflow-y:auto;padding:20px 24px}[data-scada-theme] .empty-state[data-v-c9a88e33]{text-align:center;padding:40px 20px;color:#64748b}[data-scada-theme] .empty-state p[data-v-c9a88e33]{margin:8px 0;font-size:14px}[data-scada-theme] .empty-state .hint[data-v-c9a88e33]{font-size:12px;color:#475569}[data-scada-theme] .workflow-list[data-v-c9a88e33]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .workflow-item[data-v-c9a88e33]{display:flex;justify-content:space-between;align-items:center;padding:16px;background:#0f172a;border:2px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .workflow-item[data-v-c9a88e33]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .workflow-item.selected[data-v-c9a88e33]{border-color:#10b981;background:#10b9811a}[data-scada-theme] .workflow-info[data-v-c9a88e33]{flex:1}[data-scada-theme] .workflow-name[data-v-c9a88e33]{font-size:15px;font-weight:500;color:#e2e8f0;margin-bottom:6px}[data-scada-theme] .workflow-meta[data-v-c9a88e33]{display:flex;gap:12px;font-size:12px;color:#64748b}[data-scada-theme] .workflow-id[data-v-c9a88e33]{color:#94a3b8}[data-scada-theme] .workflow-date[data-v-c9a88e33]{color:#64748b}[data-scada-theme] .workflow-actions[data-v-c9a88e33]{display:flex;gap:8px}[data-scada-theme] .btn-icon[data-v-c9a88e33]{width:32px;height:32px;background:transparent;border:1px solid #334155;border-radius:4px;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;transition:all .2s}[data-scada-theme] .btn-icon[data-v-c9a88e33]:hover{background:#334155;border-color:#3b82f6}[data-scada-theme] .dialog-footer[data-v-c9a88e33]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-secondary[data-v-c9a88e33],[data-scada-theme] .btn-primary[data-v-c9a88e33]{padding:8px 16px;border-radius:4px;font-size:14px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-secondary[data-v-c9a88e33]{background:transparent;border:1px solid #475569;color:#e2e8f0}[data-scada-theme] .btn-secondary[data-v-c9a88e33]:hover{background:#334155;border-color:#64748b}[data-scada-theme] .btn-primary[data-v-c9a88e33]{background:#10b981;border:1px solid #10b981;color:#fff}[data-scada-theme] .btn-primary[data-v-c9a88e33]:hover{background:#059669;border-color:#059669}[data-scada-theme] .btn-primary[data-v-c9a88e33]:disabled{background:#334155;border-color:#334155;color:#64748b;cursor:not-allowed}[data-scada-theme] .property-panel[data-v-7d3281c0]{width:300px;height:100%;background:#1e293b;border-left:1px solid #0f3460;overflow-y:auto}[data-scada-theme] .empty-state[data-v-7d3281c0]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;color:#64748b;text-align:center;padding:24px}[data-scada-theme] .empty-state p[data-v-7d3281c0]{font-size:16px;margin-bottom:8px}[data-scada-theme] .empty-state .hint[data-v-7d3281c0]{font-size:12px;color:#475569}[data-scada-theme] .properties[data-v-7d3281c0]{padding:12px}[data-scada-theme] .panel-title[data-v-7d3281c0]{font-size:15px;font-weight:600;color:#e2e8f0;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #334155}[data-scada-theme] .property-section[data-v-7d3281c0]{margin-bottom:16px}[data-scada-theme] .property-section h4[data-v-7d3281c0]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:600}[data-scada-theme] .hint-text[data-v-7d3281c0]{font-size:12px;color:#64748b;margin-bottom:12px;line-height:1.5}[data-scada-theme] .empty-hint[data-v-7d3281c0]{display:flex;justify-content:center;align-items:center;padding:24px 16px;color:#64748b;font-size:12px;text-align:center;background:#0f172a;border-radius:4px;margin-bottom:10px}[data-scada-theme] .property-item[data-v-7d3281c0]{margin-bottom:10px}[data-scada-theme] .property-item label[data-v-7d3281c0]{display:block;font-size:11px;color:#cbd5e1;margin-bottom:4px}[data-scada-theme] .property-item input[data-v-7d3281c0]{width:100%;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item input[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item input[data-v-7d3281c0]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-item select[data-v-7d3281c0],[data-scada-theme] .property-item textarea[data-v-7d3281c0]{width:100%;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item select[data-v-7d3281c0]:focus,[data-scada-theme] .property-item textarea[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item textarea[data-v-7d3281c0]{resize:vertical;min-height:50px;font-family:Consolas,Monaco,monospace}[data-scada-theme] .property-row[data-v-7d3281c0]{display:grid;grid-template-columns:1fr 1fr;gap:8px}[data-scada-theme] .color-input-wrapper[data-v-7d3281c0]{display:flex;align-items:center;gap:8px}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]{width:50px;height:36px;padding:2px;border:1px solid #334155;border-radius:4px;background:#0f172a;cursor:pointer;transition:all .2s}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]:hover{border-color:#3b82f6}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]::-webkit-color-swatch-wrapper{padding:0}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]::-webkit-color-swatch{border:none;border-radius:2px}[data-scada-theme] .color-value[data-v-7d3281c0]{flex:1;font-size:12px;color:#94a3b8;font-family:monospace}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar{width:8px}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .tabs[data-v-7d3281c0]{display:flex;gap:3px;margin-bottom:12px;padding:3px;background:#0f172a;border-radius:5px}[data-scada-theme] .tab-btn[data-v-7d3281c0]{flex:1;padding:6px 10px;background:transparent;border:none;color:#94a3b8;cursor:pointer;font-size:12px;font-weight:500;border-radius:4px;transition:all .2s}[data-scada-theme] .tab-btn[data-v-7d3281c0]:hover{color:#cbd5e1;background:#1e293b}[data-scada-theme] .tab-btn.active[data-v-7d3281c0]{color:#fff;background:#3b82f6}[data-scada-theme] .tab-content[data-v-7d3281c0]{min-height:0}[data-scada-theme] .tab-pane[data-v-7d3281c0]{animation:fadeIn-7d3281c0 .2s}@keyframes fadeIn-7d3281c0{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown-7d3281c0{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:2000px}}[data-scada-theme] .section-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}[data-scada-theme] .section-header h4[data-v-7d3281c0]{margin:0}[data-scada-theme] .btn-add[data-v-7d3281c0]{padding:5px 10px;background:#3b82f6;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:11px;font-weight:500;transition:all .2s}[data-scada-theme] .btn-add[data-v-7d3281c0]:hover{background:#2563eb}[data-scada-theme] .event-list[data-v-7d3281c0]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .event-card[data-v-7d3281c0]{background:#0f172a;border:1px solid #334155;border-radius:5px;padding:10px;transition:all .2s}[data-scada-theme] .event-card[data-v-7d3281c0]:hover{border-color:#3b82f6}[data-scada-theme] .event-card-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid #1e293b;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s}[data-scada-theme] .event-card-header[data-v-7d3281c0]:hover{background:#3b82f60d;margin:-4px -6px 6px;padding:4px 6px 10px;border-radius:4px}[data-scada-theme] .header-left[data-v-7d3281c0]{display:flex;align-items:center;gap:6px}[data-scada-theme] .collapse-icon[data-v-7d3281c0]{font-size:9px;color:#64748b;transition:transform .2s;display:inline-block;width:10px}[data-scada-theme] .event-type-label[data-v-7d3281c0]{font-size:12px;font-weight:500;color:#e2e8f0}[data-scada-theme] .event-action-badge[data-v-7d3281c0]{font-size:10px;padding:2px 6px;background:#3b82f6;color:#fff;border-radius:8px}[data-scada-theme] .event-card-body[data-v-7d3281c0]{animation:slideDown-7d3281c0 .2s ease-out}[data-scada-theme] .event-index[data-v-7d3281c0]{font-size:12px;font-weight:600;color:#3b82f6}[data-scada-theme] .btn-remove[data-v-7d3281c0]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;line-height:1;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-7d3281c0]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .event-field[data-v-7d3281c0]{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}[data-scada-theme] .event-field[data-v-7d3281c0]:last-child{margin-bottom:0}[data-scada-theme] .event-field label[data-v-7d3281c0]{font-size:11px;color:#cbd5e1;font-weight:500}[data-scada-theme] .event-field input[data-v-7d3281c0],[data-scada-theme] .event-field select[data-v-7d3281c0],[data-scada-theme] .event-field textarea[data-v-7d3281c0]{width:100%;padding:6px 10px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .event-field input[data-v-7d3281c0]:focus,[data-scada-theme] .event-field select[data-v-7d3281c0]:focus,[data-scada-theme] .event-field textarea[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .field-hint[data-v-7d3281c0]{font-size:11px;color:#64748b;margin-top:2px}[data-scada-theme] .condition-group[data-v-7d3281c0]{background:#1e293b;border-radius:4px;padding:12px;margin-bottom:12px}[data-scada-theme] .config-section[data-v-7d3281c0]{margin-top:16px;padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .section-title[data-v-7d3281c0]{font-size:12px;color:#94a3b8;margin-top:12px;margin-bottom:8px;font-weight:500}[data-scada-theme] .section-title[data-v-7d3281c0]:first-child{margin-top:0}[data-scada-theme] .btn-config[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;cursor:pointer;font-size:13px;transition:all .2s}[data-scada-theme] .btn-config[data-v-7d3281c0]:hover{background:#334155;border-color:#3b82f6}[data-scada-theme] .condition-config[data-v-7d3281c0]{display:flex;flex-direction:column;gap:8px;margin-top:8px;padding:12px;background:#1e293b;border-radius:4px}[data-scada-theme] .condition-label[data-v-7d3281c0]{font-size:12px;color:#cbd5e1}[data-scada-theme] .condition-select[data-v-7d3281c0],[data-scada-theme] .condition-input[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .condition-select[data-v-7d3281c0]:focus,[data-scada-theme] .condition-input[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .event-title[data-v-7d3281c0]{font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .trigger-rule-select[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:pointer;transition:all .2s}[data-scada-theme] .trigger-rule-select[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .trigger-rule-select[data-v-7d3281c0]:hover{border-color:#475569}[data-scada-theme] .code-textarea[data-v-7d3281c0]{width:100%;padding:12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;font-family:Consolas,Monaco,Courier New,monospace;resize:vertical;min-height:120px;line-height:1.6;transition:all .2s}[data-scada-theme] .code-textarea[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .dialog-overlay[data-v-7d3281c0]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn-7d3281c0 .2s}[data-scada-theme] .dialog-content[data-v-7d3281c0]{background:#1e293b;border-radius:8px;width:90%;max-width:800px;box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #0000004d;animation:slideUp-7d3281c0 .3s}[data-scada-theme] .dialog-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-7d3281c0]{font-size:18px;font-weight:600;color:#e2e8f0;margin:0}[data-scada-theme] .btn-close[data-v-7d3281c0]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-7d3281c0]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-7d3281c0]{padding:24px;max-height:60vh;overflow-y:auto}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar{width:8px}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .btn-add-group[data-v-7d3281c0]{width:100%;padding:10px 16px;background:#1e293b;border:1px dashed #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:14px;transition:all .2s;margin-bottom:16px}[data-scada-theme] .btn-add-group[data-v-7d3281c0]:hover{background:#334155;border-color:#3b82f6;color:#e2e8f0}[data-scada-theme] .attribute-group[data-v-7d3281c0]{margin-bottom:12px;padding:16px;background:#0f172a;border-radius:4px;border:1px solid #334155}[data-scada-theme] .group-row[data-v-7d3281c0]{display:grid;grid-template-columns:1.5fr 2fr auto;gap:12px;align-items:end}[data-scada-theme] .group-field[data-v-7d3281c0]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .group-field label[data-v-7d3281c0]{font-size:12px;color:#94a3b8;font-weight:500}[data-scada-theme] .group-field input[data-v-7d3281c0],[data-scada-theme] .group-field select[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .group-field input[data-v-7d3281c0]:focus,[data-scada-theme] .group-field select[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .group-field-value .color-input-wrapper[data-v-7d3281c0]{display:flex;align-items:center;gap:8px}[data-scada-theme] .group-field-value .color-input-wrapper input[type=color][data-v-7d3281c0]{width:60px;height:36px}[data-scada-theme] .btn-delete-group[data-v-7d3281c0]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;transition:all .2s}[data-scada-theme] .btn-delete-group[data-v-7d3281c0]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .dialog-large[data-v-7d3281c0]{max-width:1200px;height:80vh;display:flex;flex-direction:column}[data-scada-theme] .dialog-body-split[data-v-7d3281c0]{display:grid;grid-template-columns:1fr 1fr;gap:20px;flex:1;overflow:hidden}[data-scada-theme] .code-editor-section[data-v-7d3281c0]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .code-textarea-full[data-v-7d3281c0]{flex:1;resize:none;height:100%!important}[data-scada-theme] .section-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .section-header label[data-v-7d3281c0]{font-size:14px;color:#cbd5e1;font-weight:600}[data-scada-theme] .preview-status[data-v-7d3281c0]{font-size:13px;font-weight:500}[data-scada-theme] .status-success[data-v-7d3281c0]{color:#10b981}[data-scada-theme] .status-error[data-v-7d3281c0]{color:#ef4444}[data-scada-theme] .btn-test[data-v-7d3281c0]{padding:6px 16px;background:#10b981;border:1px solid #10b981;border-radius:4px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}[data-scada-theme] .btn-test[data-v-7d3281c0]:hover{background:#059669;border-color:#059669}[data-scada-theme] .btn-clear[data-v-7d3281c0]{padding:4px 12px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:12px;transition:all .2s}[data-scada-theme] .btn-clear[data-v-7d3281c0]:hover{background:#334155;color:#cbd5e1}[data-scada-theme] .code-preview-section[data-v-7d3281c0]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .preview-canvas[data-v-7d3281c0]{flex:1;background:#0f172a;border:1px solid #334155;border-radius:4px;overflow:hidden;display:flex;flex-direction:column}[data-scada-theme] .node-preview[data-v-7d3281c0]{flex:1;position:relative;min-height:300px}[data-scada-theme] .console-output[data-v-7d3281c0]{max-height:150px;background:#020617;border-top:1px solid #334155;padding:12px;overflow-y:auto}[data-scada-theme] .console-title[data-v-7d3281c0]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:500}[data-scada-theme] .console-logs[data-v-7d3281c0]{display:flex;flex-direction:column;gap:4px}[data-scada-theme] .preview-empty[data-v-7d3281c0]{display:flex;align-items:center;justify-content:center;height:100%;color:#64748b;font-size:14px;text-align:center;padding:20px}[data-scada-theme] .preview-error-box[data-v-7d3281c0]{padding:20px;height:100%;overflow-y:auto}[data-scada-theme] .error-title[data-v-7d3281c0]{font-size:13px;color:#ef4444;margin-bottom:12px;font-weight:500}[data-scada-theme] .preview-node-container[data-v-7d3281c0]{height:100%;display:flex;flex-direction:column}[data-scada-theme] .log-item[data-v-7d3281c0]{font-family:Consolas,Monaco,monospace;font-size:12px;color:#e2e8f0;margin-bottom:4px;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .log-item[data-v-7d3281c0]:last-child{margin-bottom:0}[data-scada-theme] .error-message[data-v-7d3281c0]{background:#450a0a;border:1px solid #7f1d1d;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:12px;color:#fca5a5;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .dialog-footer[data-v-7d3281c0]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-7d3281c0],[data-scada-theme] .btn-confirm[data-v-7d3281c0]{padding:8px 20px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-cancel[data-v-7d3281c0]{background:transparent;border:1px solid #475569;color:#cbd5e1}[data-scada-theme] .btn-cancel[data-v-7d3281c0]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-7d3281c0]{background:#3b82f6;border:1px solid #3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-7d3281c0]:hover{background:#2563eb;border-color:#2563eb}@keyframes slideUp-7d3281c0{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .scada-footer[data-v-52b6d4b1]{height:32px;background:#1e293b;border-top:1px solid #0f3460;display:flex;align-items:center;padding:0 32px;flex-shrink:0}[data-scada-theme] .footer-content[data-v-52b6d4b1]{width:100%;display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .footer-left[data-v-52b6d4b1],[data-scada-theme] .footer-right[data-v-52b6d4b1]{display:flex;align-items:center;gap:12px}[data-scada-theme] .copyright[data-v-52b6d4b1],[data-scada-theme] .license[data-v-52b6d4b1]{font-size:12px;color:#94a3b8!important}[data-scada-theme] .divider[data-v-52b6d4b1]{color:#475569!important;font-size:12px}[data-scada-theme] .contact-item[data-v-52b6d4b1]{display:flex;align-items:center;gap:4px}[data-scada-theme] .contact-item .icon[data-v-52b6d4b1]{font-size:12px}[data-scada-theme] .contact-item .text[data-v-52b6d4b1]{font-size:12px;color:#94a3b8!important}[data-scada-theme] .contact-item .text[data-v-52b6d4b1]:hover{color:#3b82f6!important;cursor:pointer}[data-scada-theme] .authorized-icon[data-v-52b6d4b1]{font-size:14px;margin-right:6px}[data-scada-theme] .authorized-text[data-v-52b6d4b1]{font-size:12px;color:#10b981!important;font-weight:500}[data-scada-theme] .expiry-text[data-v-52b6d4b1]{font-size:12px;color:#94a3b8!important}[data-scada-theme] .element-selector-overlay[data-v-882704dd]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}[data-scada-theme] .element-selector-dialog[data-v-882704dd]{width:600px;max-height:80vh;background:#1e293b;border-radius:8px;display:flex;flex-direction:column;box-shadow:0 4px 24px #0000004d}[data-scada-theme] .dialog-header[data-v-882704dd]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-882704dd]{margin:0;font-size:16px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-882704dd]{width:28px;height:28px;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-882704dd]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-882704dd]{flex:1;padding:20px;display:flex;flex-direction:column;gap:16px;overflow:hidden}[data-scada-theme] .search-box input[data-v-882704dd]{width:100%;padding:10px 14px;background:#0f172a;border:1px solid #334155;border-radius:6px;color:#e2e8f0;font-size:14px}[data-scada-theme] .search-box input[data-v-882704dd]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .element-list[data-v-882704dd]{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:8px}[data-scada-theme] .element-item[data-v-882704dd]{display:flex;align-items:center;gap:12px;padding:12px;background:#0f172a;border:2px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .element-item[data-v-882704dd]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .element-item.active[data-v-882704dd]{border-color:#3b82f6;background:#3b82f61a}[data-scada-theme] .element-icon[data-v-882704dd]{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:#3b82f61a;border-radius:6px;font-size:20px;flex-shrink:0}[data-scada-theme] .element-info[data-v-882704dd]{flex:1}[data-scada-theme] .element-name[data-v-882704dd]{font-size:14px;font-weight:500;color:#e2e8f0;margin-bottom:4px}[data-scada-theme] .element-type[data-v-882704dd]{font-size:12px;color:#94a3b8}[data-scada-theme] .element-check[data-v-882704dd]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:#3b82f6;border-radius:50%;color:#fff;font-size:14px;font-weight:700}[data-scada-theme] .empty-state[data-v-882704dd]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#64748b;padding:40px 20px}[data-scada-theme] .empty-state p[data-v-882704dd]{margin:0;font-size:14px}[data-scada-theme] .empty-hint[data-v-882704dd]{margin-top:8px;font-size:12px;color:#475569}[data-scada-theme] .dialog-footer[data-v-882704dd]{display:flex;justify-content:flex-end;gap:12px;padding:16px 20px;border-top:1px solid #334155}[data-scada-theme] .btn-secondary[data-v-882704dd],[data-scada-theme] .btn-primary[data-v-882704dd]{padding:8px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-secondary[data-v-882704dd]{background:#334155;color:#e2e8f0}[data-scada-theme] .btn-secondary[data-v-882704dd]:hover{background:#475569}[data-scada-theme] .btn-primary[data-v-882704dd]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-primary[data-v-882704dd]:hover{background:#2563eb}[data-scada-theme] .btn-primary[data-v-882704dd]:disabled{background:#475569;cursor:not-allowed;opacity:.5}[data-scada-theme] .node-config[data-v-fa65eb56]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-fa65eb56]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-fa65eb56]{font-size:13px;color:#94a3b8}[data-scada-theme] .element-selector[data-v-fa65eb56]{display:flex;gap:8px}[data-scada-theme] .element-selector input[data-v-fa65eb56]{flex:1;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:not-allowed}[data-scada-theme] .btn-select[data-v-fa65eb56]{padding:8px 16px;background:#3b82f6;color:#fff;border:none;border-radius:4px;font-size:13px;cursor:pointer;transition:all .2s;white-space:nowrap}[data-scada-theme] .btn-select[data-v-fa65eb56]:hover{background:#2563eb}[data-scada-theme] .element-info[data-v-fa65eb56]{font-size:12px;color:#10b981;margin-top:-4px}[data-scada-theme] .config-group input[data-v-fa65eb56],[data-scada-theme] .config-group textarea[data-v-fa65eb56],[data-scada-theme] .config-group select[data-v-fa65eb56]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-fa65eb56]:focus,[data-scada-theme] .config-group textarea[data-v-fa65eb56]:focus,[data-scada-theme] .config-group select[data-v-fa65eb56]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .node-config[data-v-42e029d4]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-42e029d4]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-42e029d4]{font-size:13px;color:#94a3b8}[data-scada-theme] .element-selector[data-v-42e029d4]{display:flex;gap:8px}[data-scada-theme] .element-selector input[data-v-42e029d4]{flex:1;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:not-allowed}[data-scada-theme] .btn-select[data-v-42e029d4]{padding:8px 16px;background:#3b82f6;color:#fff;border:none;border-radius:4px;font-size:13px;cursor:pointer;transition:all .2s;white-space:nowrap}[data-scada-theme] .btn-select[data-v-42e029d4]:hover{background:#2563eb}[data-scada-theme] .element-info[data-v-42e029d4]{font-size:12px;color:#10b981;margin-top:-4px}[data-scada-theme] .config-group input[data-v-42e029d4],[data-scada-theme] .config-group textarea[data-v-42e029d4],[data-scada-theme] .config-group select[data-v-42e029d4]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-42e029d4]:focus,[data-scada-theme] .config-group textarea[data-v-42e029d4]:focus,[data-scada-theme] .config-group select[data-v-42e029d4]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .node-config[data-v-15975920]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-15975920]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-15975920]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-15975920],[data-scada-theme] .config-group textarea[data-v-15975920],[data-scada-theme] .config-group select[data-v-15975920]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-15975920]:focus,[data-scada-theme] .config-group textarea[data-v-15975920]:focus,[data-scada-theme] .config-group select[data-v-15975920]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .branches-section[data-v-15975920]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .section-header[data-v-15975920]{display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .section-header label[data-v-15975920]{font-size:13px;color:#94a3b8;font-weight:500}[data-scada-theme] .btn-add[data-v-15975920]{padding:4px 12px;background:#3b82f6;color:#fff;border:none;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-add[data-v-15975920]:hover{background:#2563eb}[data-scada-theme] .branch-list[data-v-15975920]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .branch-item[data-v-15975920]{background:#0f172a;border:1px solid #334155;border-radius:6px;padding:12px}[data-scada-theme] .branch-header[data-v-15975920]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}[data-scada-theme] .branch-number[data-v-15975920]{font-size:12px;color:#3b82f6;font-weight:500}[data-scada-theme] .btn-remove[data-v-15975920]{width:20px;height:20px;background:#ef4444;color:#fff;border:none;border-radius:50%;font-size:16px;line-height:1;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-15975920]:hover{background:#dc2626}[data-scada-theme] .branch-config[data-v-15975920]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-row[data-v-15975920]{display:flex;flex-direction:column;gap:4px}[data-scada-theme] .config-row label[data-v-15975920]{font-size:12px;color:#94a3b8}[data-scada-theme] .config-row input[data-v-15975920],[data-scada-theme] .config-row select[data-v-15975920]{padding:6px 10px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px}[data-scada-theme] .config-row input[data-v-15975920]:focus,[data-scada-theme] .config-row select[data-v-15975920]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .default-branch-label[data-v-15975920]{font-size:12px;color:#94a3b8;text-align:center;padding:8px;background:#1e293b;border-radius:4px}[data-scada-theme] .node-config[data-v-4c312eea]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-4c312eea]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-4c312eea]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-4c312eea],[data-scada-theme] .config-group textarea[data-v-4c312eea],[data-scada-theme] .config-group select[data-v-4c312eea]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-4c312eea]:focus,[data-scada-theme] .config-group textarea[data-v-4c312eea]:focus,[data-scada-theme] .config-group select[data-v-4c312eea]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .config-group textarea[data-v-4c312eea]{resize:vertical;font-family:Consolas,Monaco,monospace}[data-scada-theme] .node-config[data-v-f7115383]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-f7115383]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-f7115383]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group textarea[data-v-f7115383]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;resize:vertical;font-family:Consolas,Monaco,monospace}[data-scada-theme] .config-group textarea[data-v-f7115383]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .code-hint[data-v-f7115383]{padding:12px;background:#3b82f61a;border-left:3px solid #3b82f6;border-radius:4px}[data-scada-theme] .code-hint p[data-v-f7115383]{margin:0 0 8px;font-size:13px;color:#94a3b8;font-weight:500}[data-scada-theme] .code-hint ul[data-v-f7115383]{margin:0;padding-left:20px}[data-scada-theme] .code-hint li[data-v-f7115383]{font-size:12px;color:#64748b;margin-bottom:4px}[data-scada-theme] .node-config[data-v-323381bc]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-323381bc]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-323381bc]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-323381bc],[data-scada-theme] .config-group select[data-v-323381bc]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-323381bc]:focus,[data-scada-theme] .config-group select[data-v-323381bc]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .node-config[data-v-d102fb63]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-d102fb63]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-d102fb63]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-d102fb63],[data-scada-theme] .config-group select[data-v-d102fb63]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-d102fb63]:focus,[data-scada-theme] .config-group select[data-v-d102fb63]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .timer-hint[data-v-d102fb63]{padding:12px;background:#faad141a;border-left:3px solid #faad14;border-radius:4px}[data-scada-theme] .timer-hint p[data-v-d102fb63]{margin:0;font-size:12px;color:#94a3b8}[data-scada-theme] .timer-hint.warning[data-v-d102fb63]{background:#ef44441a;border-left-color:#ef4444}[data-scada-theme] .property-panel[data-v-8304acbc]{width:300px;background:#1e293b;border-left:1px solid #334155;display:flex;flex-direction:column}[data-scada-theme] .property-panel h3[data-v-8304acbc]{margin:0;padding:16px;font-size:14px;font-weight:600;color:#e2e8f0;border-bottom:1px solid #334155}[data-scada-theme] .property-content[data-v-8304acbc]{padding:16px;display:flex;flex-direction:column;gap:16px;overflow-y:auto}[data-scada-theme] .property-group[data-v-8304acbc]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .property-group label[data-v-8304acbc]{font-size:13px;color:#94a3b8}[data-scada-theme] .property-group input[data-v-8304acbc],[data-scada-theme] .property-group textarea[data-v-8304acbc],[data-scada-theme] .property-group select[data-v-8304acbc]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .property-group input[data-v-8304acbc]:focus,[data-scada-theme] .property-group textarea[data-v-8304acbc]:focus,[data-scada-theme] .property-group select[data-v-8304acbc]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .property-group input[data-v-8304acbc]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-empty[data-v-8304acbc]{flex:1;display:flex;align-items:center;justify-content:center;color:#64748b;font-size:13px}[data-scada-theme] .divider[data-v-8304acbc]{height:1px;background:#334155;margin:8px 0}[data-scada-theme] .toolbar[data-v-b3e0a4fc]{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;background:#1e293b;border-bottom:1px solid #334155}[data-scada-theme] .toolbar-left[data-v-b3e0a4fc]{display:flex;align-items:center;gap:24px}[data-scada-theme] .toolbar-left h2[data-v-b3e0a4fc]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .toolbar-right[data-v-b3e0a4fc]{display:flex;gap:12px}[data-scada-theme] .btn-secondary[data-v-b3e0a4fc],[data-scada-theme] .btn-primary[data-v-b3e0a4fc]{padding:8px 16px;border:none;border-radius:4px;font-size:14px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-secondary[data-v-b3e0a4fc]{background:#334155;color:#e2e8f0}[data-scada-theme] .btn-secondary[data-v-b3e0a4fc]:hover{background:#475569}[data-scada-theme] .btn-primary[data-v-b3e0a4fc]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-primary[data-v-b3e0a4fc]:hover{background:#2563eb}[data-scada-theme] .btn-close[data-v-b3e0a4fc]{width:36px;height:36px;padding:0;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;margin-left:8px}[data-scada-theme] .btn-close[data-v-b3e0a4fc]:hover{background:#475569;border-color:#64748b;color:#e2e8f0}[data-scada-theme] .close-icon[data-v-b3e0a4fc]{font-size:24px;line-height:1}[data-scada-theme] .menu-overlay[data-v-aa6fccf8]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0000004d;z-index:999}[data-scada-theme] .add-node-menu[data-v-aa6fccf8]{position:fixed;z-index:1000;background:#1e293b;border:1px solid #334155;border-radius:8px;box-shadow:0 4px 12px #0000004d;min-width:280px;max-width:320px}[data-scada-theme] .menu-header[data-v-aa6fccf8]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #334155;color:#e2e8f0;font-size:14px;font-weight:600}[data-scada-theme] .btn-close[data-v-aa6fccf8]{width:24px;height:24px;background:transparent;border:none;color:#94a3b8;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-aa6fccf8]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .menu-list[data-v-aa6fccf8]{padding:8px}[data-scada-theme] .menu-item[data-v-aa6fccf8]{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .menu-item[data-v-aa6fccf8]:hover{background:#334155}[data-scada-theme] .menu-item-icon[data-v-aa6fccf8]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:6px;font-size:18px;flex-shrink:0}[data-scada-theme] .node-icon-getProperty[data-v-aa6fccf8]{background:#1890ff1a}[data-scada-theme] .node-icon-setProperty[data-v-aa6fccf8]{background:#13c2c21a}[data-scada-theme] .node-icon-condition[data-v-aa6fccf8]{background:#faad141a}[data-scada-theme] .node-icon-httpRequest[data-v-aa6fccf8]{background:#722ed11a}[data-scada-theme] .node-icon-customCode[data-v-aa6fccf8]{background:#eb2f961a}[data-scada-theme] .node-icon-timer[data-v-aa6fccf8]{background:#52c41a1a}[data-scada-theme] .node-icon-clearTimer[data-v-aa6fccf8]{background:#ff4d4f1a}[data-scada-theme] .menu-item-info[data-v-aa6fccf8]{flex:1}[data-scada-theme] .menu-item-name[data-v-aa6fccf8]{font-size:14px;color:#e2e8f0;font-weight:500}[data-scada-theme] .menu-item-desc[data-v-aa6fccf8]{font-size:12px;color:#94a3b8;margin-top:2px}[data-scada-theme] .workflow-editor[data-v-649349a2]{display:flex;flex-direction:column;height:100vh;background:#0f172a;color:#e2e8f0}[data-scada-theme] .editor-main[data-v-649349a2]{display:flex;flex:1;overflow:hidden}[data-scada-theme] .canvas-area[data-v-649349a2]{flex:1;position:relative;overflow:hidden;background:#0f172a}[data-scada-theme] #workflow-container[data-v-649349a2]{width:100%;height:100%}[data-scada-theme] .workflow-dialog-overlay[data-v-4e7f6ab7]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;z-index:9999;display:flex;align-items:center;justify-content:center}[data-scada-theme] .workflow-dialog[data-v-4e7f6ab7]{width:100vw;height:100vh;background:#0f172a;overflow:hidden}.scada-layout[data-v-da3eb2e7]{width:100%;height:100%;min-height:100vh;display:flex;flex-direction:column;background:#1a1a2e}[data-scada-theme] .scada-canvas-container[data-v-da3eb2e7]{flex:1;display:flex;background:#0f172a;overflow:hidden;min-height:0}[data-scada-theme][data-v-da3eb2e7] .x6-node-selected{outline:2px solid #3b82f6;outline-offset:2px;box-shadow:0 0 0 4px #3b82f626,0 0 12px #3b82f64d;transition:outline .15s ease,box-shadow .15s ease}[data-scada-theme][data-v-da3eb2e7] .x6-node-selected rect,[data-scada-theme][data-v-da3eb2e7] .x6-node-selected circle,[data-scada-theme][data-v-da3eb2e7] .x6-node-selected ellipse{filter:brightness(1.05)}.scada-toast{position:fixed;top:20px;left:50%;transform:translate(-50%) translateY(-100px);padding:12px 24px;border-radius:6px;color:#fff;font-size:14px;font-weight:500;box-shadow:0 4px 12px #0000004d;z-index:9999;opacity:0;transition:all .3s ease;pointer-events:none}.scada-toast.show{transform:translate(-50%) translateY(0);opacity:1}.scada-toast-success{background:linear-gradient(135deg,#10b981,#059669)}.scada-toast-error{background:linear-gradient(135deg,#ef4444,#dc2626)}.scada-toast-warning{background:linear-gradient(135deg,#f59e0b,#d97706)}@keyframes edge-flow-da3eb2e7{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}[data-scada-theme][data-v-da3eb2e7] .x6-edge path{transition:stroke .3s ease,stroke-width .3s ease}[data-scada-theme][data-v-da3eb2e7] .edge-flow-slow{animation:edge-flow-da3eb2e7 4s linear infinite}[data-scada-theme][data-v-da3eb2e7] .edge-flow-normal{animation:edge-flow-da3eb2e7 2s linear infinite}[data-scada-theme][data-v-da3eb2e7] .edge-flow-fast{animation:edge-flow-da3eb2e7 1s linear infinite}.scada-layout[data-scada-theme=dark]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important;color:#e2e8f0!important;font-size:14px!important;line-height:1.5!important;box-sizing:border-box!important;margin:0!important;padding:0!important;border:none!important;display:flex!important;flex-direction:column!important;flex:1!important;width:100%!important;height:100%!important;min-height:100vh!important;background:#1a1a2e!important;overflow:hidden!important;position:relative!important}.scada-layout[data-scada-theme=dark] *,.scada-layout[data-scada-theme=dark] *:before,.scada-layout[data-scada-theme=dark] *:after{box-sizing:border-box!important;margin:0;padding:0}.scada-layout[data-scada-theme=dark]>*{box-sizing:border-box!important}.scada-layout[data-scada-theme=dark]>.scada-header,.scada-layout[data-scada-theme=dark]>.scada-footer{color:#e2e8f0!important;margin:0!important}.scada-layout[data-scada-theme=dark] .property-panel>.panel-header,.scada-layout[data-scada-theme=dark] .component-library>.library-header,.scada-layout[data-scada-theme=dark] .canvas-config-panel>.config-header{color:#e2e8f0!important;margin:0!important;padding:0!important}.scada-layout[data-scada-theme=dark] .scada-header h1,.scada-layout[data-scada-theme=dark] .scada-header h2,.scada-layout[data-scada-theme=dark] .scada-header h3,.scada-layout[data-scada-theme=dark] .scada-header h4{color:#e2e8f0!important;margin:0!important;padding:0!important;font-weight:600!important}.scada-layout[data-scada-theme=dark] .canvas-area input:not([class*=ant-]):not([type=range]):not([type=color]):not([type=checkbox]),.scada-layout[data-scada-theme=dark] .canvas-area select:not([class*=ant-]),.scada-layout[data-scada-theme=dark] .canvas-area textarea:not([class*=ant-]),.scada-layout[data-scada-theme=dark] .canvas-area button:not([class*=ant-]){-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;outline:none!important;border:none!important;background:none!important;margin:0!important;padding:0!important;color:inherit!important;font-family:inherit!important;font-size:inherit!important}.scada-layout[data-scada-theme=dark] .canvas-area label,.scada-layout[data-scada-theme=dark] .canvas-area span,.scada-layout[data-scada-theme=dark] .canvas-area p,.scada-layout[data-scada-theme=dark] .canvas-area div{color:inherit!important;font-family:inherit!important;line-height:normal!important}.scada-layout[data-scada-theme] ::-webkit-scrollbar{width:8px;height:8px}.scada-layout[data-scada-theme] ::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}.scada-layout[data-scada-theme] ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}.scada-layout[data-scada-theme] ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}.scada-layout[data-scada-theme] ::-webkit-scrollbar-corner{background:#0f172a}.scada-layout .x6-node-selected rect{stroke:#3b82f6!important;stroke-width:2!important;filter:drop-shadow(0 0 8px rgba(59,130,246,.6))!important}.scada-layout .x6-edge-selected path{stroke:#3b82f6!important;stroke-width:3!important}.scada-layout .x6-widget-selection-box{border:2px solid #3b82f6!important;background-color:#3b82f61a!important}.scada-layout[data-scada-theme] input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:4px;background:linear-gradient(90deg,#475569,#334155);border-radius:2px;outline:none;opacity:.9;transition:opacity .2s}.scada-layout[data-scada-theme] input[type=range]:hover{opacity:1}.scada-layout[data-scada-theme] input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;background:#8b5cf6;border-radius:50%;cursor:pointer;border:2px solid #0f172a;box-shadow:0 0 8px #8b5cf699;transition:all .2s}.scada-layout[data-scada-theme] input[type=range]::-webkit-slider-thumb:hover{background:#a78bfa;box-shadow:0 0 12px #8b5cf6cc;transform:scale(1.1)}.scada-layout[data-scada-theme] input[type=range]::-moz-range-thumb{width:16px;height:16px;background:#8b5cf6;border-radius:50%;cursor:pointer;border:2px solid #0f172a;box-shadow:0 0 8px #8b5cf699;transition:all .2s}.scada-layout[data-scada-theme] input[type=range]::-moz-range-thumb:hover{background:#a78bfa;box-shadow:0 0 12px #8b5cf6cc;transform:scale(1.1)}
|
|
1
|
+
[data-scada-theme] .scada-header[data-v-9bbedc41]{height:60px;background:#16213e;display:flex;align-items:center;justify-content:space-between;padding:0 32px;border-bottom:1px solid #0f3460;gap:24px}[data-scada-theme] .header-left[data-v-9bbedc41]{display:flex;align-items:center;gap:12px;flex-shrink:0}[data-scada-theme] .logo[data-v-9bbedc41]{font-size:20px;font-weight:600;margin:0;color:#e2e8f0}[data-scada-theme] .version[data-v-9bbedc41]{font-size:12px;color:#64748b;padding:2px 8px;background:#0f172a;border-radius:4px}[data-scada-theme] .header-center[data-v-9bbedc41]{flex:1;display:flex;justify-content:center;align-items:center}[data-scada-theme] .header-right[data-v-9bbedc41]{display:flex;align-items:center;gap:12px;flex-shrink:0}[data-scada-theme] .tool-group[data-v-9bbedc41]{display:flex;gap:8px}[data-scada-theme] .header-btn[data-v-9bbedc41]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s;font-size:13px}[data-scada-theme] .header-btn[data-v-9bbedc41]:hover{background:#1e3a5f;border-color:#3b82f6;transform:translateY(-1px)}[data-scada-theme] .header-btn .icon[data-v-9bbedc41]{font-size:16px}[data-scada-theme] .tip[data-v-9bbedc41]{font-size:13px;color:#94a3b8}[data-scada-theme] .divider[data-v-9bbedc41]{width:1px;height:32px;background:#334155;margin:0 12px}[data-scada-theme] .toolbar-btn[data-v-9bbedc41]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;font-size:16px}[data-scada-theme] .toolbar-btn[data-v-9bbedc41]:hover{background:#1e3a5f;border-color:#3b82f6}[data-scada-theme] .toolbar-btn .icon[data-v-9bbedc41]{font-size:16px}[data-scada-theme] .toolbar-btn .icon-svg[data-v-9bbedc41]{width:18px;height:18px;display:block}[data-scada-theme] .canvas-info[data-v-9bbedc41]{display:flex;align-items:center;gap:16px}[data-scada-theme] .info-text[data-v-9bbedc41]{font-size:12px;color:#64748b}[data-scada-theme] .component-library[data-v-92bb4e17]{width:260px;height:100%;background:#1e293b;border-right:1px solid #0f3460;display:flex;flex-direction:column;overflow:hidden}[data-scada-theme] .library-header[data-v-92bb4e17]{padding:16px;line-height:50px;text-align:center;border-bottom:1px solid #0f3460}[data-scada-theme] .library-header h3[data-v-92bb4e17]{margin:0;font-size:16px;font-weight:600;color:#e2e8f0}[data-scada-theme] .library-content[data-v-92bb4e17]{flex:1;overflow-y:auto;padding:16px}[data-scada-theme] .component-section[data-v-92bb4e17]{margin-bottom:24px}[data-scada-theme] .component-section[data-v-92bb4e17]:last-child{margin-bottom:0}[data-scada-theme] .section-title[data-v-92bb4e17]{font-size:13px;color:#94a3b8;margin:0 0 12px;font-weight:600}[data-scada-theme] .component-grid[data-v-92bb4e17]{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}[data-scada-theme] .component-item[data-v-92bb4e17]{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 8px;background:#0f172a;border:1px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .component-item[data-v-92bb4e17]:hover{background:#1e3a5f;border-color:#3b82f6;transform:translateY(-2px);box-shadow:0 4px 8px #3b82f64d}[data-scada-theme] .component-item[data-v-92bb4e17]:active{transform:translateY(0)}[data-scada-theme] .component-icon[data-v-92bb4e17]{font-size:24px;color:#e2e8f0}[data-scada-theme] .component-name[data-v-92bb4e17]{font-size:12px;color:#cbd5e1;font-weight:500}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar{width:8px}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .library-content[data-v-92bb4e17]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .canvas-area[data-v-a869f6aa]{flex:1;display:flex;align-items:center;justify-content:center;background:#0f172a;overflow:auto;position:relative}[data-scada-theme] .canvas-container[data-v-a869f6aa]{position:relative;border:2px solid #334155;box-shadow:0 4px 12px #0000004d;transition:transform .2s ease}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar{width:8px;height:8px}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .canvas-area[data-v-a869f6aa]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .canvas-config-panel[data-v-f309895b]{width:100%;height:100%;background:#1e293b;display:flex;flex-direction:column;overflow:hidden}[data-scada-theme] .panel-header[data-v-f309895b]{padding:16px;border-bottom:1px solid #0f3460}[data-scada-theme] .panel-header h3[data-v-f309895b]{margin:0;font-size:16px;font-weight:600;color:#e2e8f0}[data-scada-theme] .panel-content[data-v-f309895b]{flex:1;overflow-y:auto;padding:16px}[data-scada-theme] .config-section[data-v-f309895b]{margin-bottom:24px}[data-scada-theme] .config-section[data-v-f309895b]:last-child{margin-bottom:0}[data-scada-theme] .section-title[data-v-f309895b]{font-size:13px;color:#94a3b8;margin:0 0 12px;font-weight:600}[data-scada-theme] .config-item[data-v-f309895b]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}[data-scada-theme] .config-item label[data-v-f309895b]{font-size:13px;color:#cbd5e1;flex-shrink:0}[data-scada-theme] .config-select[data-v-f309895b]{width:160px;padding:6px 12px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;font-size:13px}[data-scada-theme] .config-number[data-v-f309895b]{width:80px;padding:6px 12px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;text-align:center;font-size:13px}[data-scada-theme] .config-color[data-v-f309895b]{width:50px;height:32px;border:1px solid #334155;border-radius:4px;cursor:pointer;background:#0f172a}[data-scada-theme] .slider-group[data-v-f309895b]{display:flex;align-items:center;gap:8px;flex:1;max-width:160px}[data-scada-theme] .config-slider[data-v-f309895b]{flex:1}[data-scada-theme] .value-display[data-v-f309895b]{font-size:12px;color:#94a3b8;min-width:30px;text-align:right}[data-scada-theme] .number-input-group[data-v-f309895b]{display:flex;gap:4px}[data-scada-theme] .adjust-btn[data-v-f309895b]{width:32px;height:32px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;font-size:14px}[data-scada-theme] .adjust-btn[data-v-f309895b]:hover{background:#1e3a5f;border-color:#3b82f6}[data-scada-theme] .upload-btn[data-v-f309895b]{width:50px;height:32px;background:#0f172a;color:#e2e8f0;border:1px solid #334155;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;transition:all .2s}[data-scada-theme] .upload-btn[data-v-f309895b]:hover{background:#1e3a5f;border-color:#3b82f6}[data-scada-theme] .image-upload[data-v-f309895b]{display:flex;gap:8px}[data-scada-theme] .clear-btn[data-v-f309895b]{width:32px;height:32px;background:#dc2626;color:#fff;border:1px solid #991b1b;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .2s}[data-scada-theme] .clear-btn[data-v-f309895b]:hover{background:#b91c1c;border-color:#7f1d1d}[data-scada-theme] .switch[data-v-f309895b]{position:relative;display:inline-block;width:48px;height:24px}[data-scada-theme] .switch input[data-v-f309895b]{opacity:0;width:0;height:0}[data-scada-theme] .switch .slider[data-v-f309895b]{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#475569;transition:.3s;border-radius:24px}[data-scada-theme] .switch .slider[data-v-f309895b]:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;transition:.3s;border-radius:50%}[data-scada-theme] .switch input:checked+.slider[data-v-f309895b]{background-color:#3b82f6}[data-scada-theme] .switch input:checked+.slider[data-v-f309895b]:before{transform:translate(24px)}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar{width:8px}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .panel-content[data-v-f309895b]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .tab-pane[data-v-def84c5f]{animation:fadeIn-def84c5f .2s}@keyframes fadeIn-def84c5f{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .property-section[data-v-def84c5f]{margin-bottom:16px}[data-scada-theme] .property-section h4[data-v-def84c5f]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:600}[data-scada-theme] .property-item[data-v-def84c5f]{margin-bottom:12px}[data-scada-theme] .property-item-inline[data-v-def84c5f]{display:flex;align-items:center;gap:8px;margin-bottom:8px}[data-scada-theme] .property-item-inline[data-v-def84c5f]:has(.checkbox-wrapper){justify-content:flex-start}[data-scada-theme] .property-item-inline label[data-v-def84c5f]{flex-shrink:0;width:70px;font-size:11px;color:#cbd5e1;margin-bottom:0}[data-scada-theme] .property-item-inline input[data-v-def84c5f],[data-scada-theme] .property-item-inline select[data-v-def84c5f]{flex:1;min-width:0;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item-inline .checkbox-wrapper[data-v-def84c5f]{flex:0 0 auto}[data-scada-theme] .property-item-inline input[data-v-def84c5f]:focus,[data-scada-theme] .property-item-inline select[data-v-def84c5f]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item-inline input[data-v-def84c5f]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-item-inline .color-input-wrapper[data-v-def84c5f]{flex:1;display:flex;align-items:center;gap:6px}[data-scada-theme] .property-item-inline .color-input-wrapper input[type=color][data-v-def84c5f]{width:40px;height:28px;padding:2px;border:1px solid #334155;border-radius:4px;background:#0f172a;cursor:pointer;transition:all .2s}[data-scada-theme] .property-item-inline .color-input-wrapper .color-value[data-v-def84c5f]{flex:1;min-width:0;font-size:11px;color:#94a3b8;font-family:monospace}[data-scada-theme] .property-item-inline .checkbox-wrapper[data-v-def84c5f]{flex:1;display:flex;align-items:center;gap:6px;padding:0}[data-scada-theme] .property-item label[data-v-def84c5f]{display:block;font-size:12px;color:#cbd5e1;margin-bottom:6px}[data-scada-theme] .property-item input[data-v-def84c5f]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .property-item input[data-v-def84c5f]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .property-item input[data-v-def84c5f]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-row[data-v-def84c5f]{display:grid;grid-template-columns:1fr 1fr;gap:8px}[data-scada-theme] .color-input-wrapper[data-v-def84c5f]{display:flex;align-items:center;gap:8px}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]{width:50px;height:36px;padding:2px;border:1px solid #334155;border-radius:4px;background:#0f172a;cursor:pointer;transition:all .2s}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]:hover{border-color:#3b82f6}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]::-webkit-color-swatch-wrapper{padding:0}[data-scada-theme] .color-input-wrapper input[type=color][data-v-def84c5f]::-webkit-color-swatch{border:none;border-radius:2px}[data-scada-theme] .color-value[data-v-def84c5f]{flex:1;font-size:12px;color:#94a3b8;font-family:monospace}[data-scada-theme] .checkbox-wrapper[data-v-def84c5f]{display:inline-flex;align-items:center;gap:6px}[data-scada-theme] .checkbox-wrapper input[type=checkbox][data-v-def84c5f]{width:16px;height:16px;cursor:pointer;accent-color:#3b82f6;pointer-events:auto!important;-webkit-appearance:auto!important;-moz-appearance:auto!important;appearance:auto!important;opacity:1!important;z-index:1!important;position:relative!important;flex-shrink:0}[data-scada-theme] .checkbox-label[data-v-def84c5f]{font-size:12px;color:#cbd5e1;white-space:nowrap}[data-scada-theme] select[data-v-def84c5f]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:pointer;transition:all .2s}[data-scada-theme] select[data-v-def84c5f]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] select option[data-v-def84c5f]{background:#0f172a;color:#e2e8f0}[data-scada-theme] .property-hint[data-v-def84c5f]{display:block;font-size:11px;color:#64748b;margin-top:2px;font-weight:400}[data-scada-theme] .tab-pane[data-v-5b515f8a]{animation:fadeIn-5b515f8a .2s}@keyframes fadeIn-5b515f8a{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .property-section[data-v-5b515f8a]{margin-bottom:16px}[data-scada-theme] .property-section h4[data-v-5b515f8a]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:600}[data-scada-theme] .property-item-inline[data-v-5b515f8a]{display:flex;align-items:center;gap:8px;margin-bottom:8px}[data-scada-theme] .property-item-inline label[data-v-5b515f8a]{flex-shrink:0;width:70px;font-size:11px;color:#cbd5e1;margin-bottom:0}[data-scada-theme] .property-item-inline input[data-v-5b515f8a],[data-scada-theme] .property-item-inline select[data-v-5b515f8a]{flex:1;min-width:0;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item-inline input[data-v-5b515f8a]:focus,[data-scada-theme] .property-item-inline select[data-v-5b515f8a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item-inline input[data-v-5b515f8a]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-item-inline .checkbox-wrapper[data-v-5b515f8a]{flex:1;display:flex;align-items:center;gap:6px;padding:0}[data-scada-theme] .checkbox-wrapper input[type=checkbox][data-v-5b515f8a]{width:18px;height:18px;cursor:pointer;accent-color:#3b82f6}[data-scada-theme] .checkbox-label[data-v-5b515f8a]{font-size:12px;color:#cbd5e1}[data-scada-theme] .edge-properties-tab[data-v-e47f1784]{padding:0}[data-scada-theme] .property-section[data-v-e47f1784]{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #334155}[data-scada-theme] .property-section[data-v-e47f1784]:last-child{border-bottom:none;margin-bottom:0}[data-scada-theme] .section-title[data-v-e47f1784]{font-size:13px;font-weight:600;color:#e2e8f0;margin:0 0 12px;padding:0}[data-scada-theme] .property-item[data-v-e47f1784]{margin-bottom:12px}[data-scada-theme] .property-item[data-v-e47f1784]:last-child{margin-bottom:0}[data-scada-theme] .property-label[data-v-e47f1784]{display:block;font-size:12px;color:#94a3b8;margin-bottom:6px;font-weight:500}[data-scada-theme] .color-input-wrapper[data-v-e47f1784]{display:flex;gap:8px;align-items:center}[data-scada-theme] .color-input[data-v-e47f1784]{width:40px;height:32px;border:1px solid #475569;border-radius:4px;cursor:pointer;background:#1e293b;padding:2px}[data-scada-theme] .color-input[data-v-e47f1784]::-webkit-color-swatch-wrapper{padding:0}[data-scada-theme] .color-input[data-v-e47f1784]::-webkit-color-swatch{border:none;border-radius:2px}[data-scada-theme] .color-text[data-v-e47f1784]{flex:1;height:32px;background:#1e293b;border:1px solid #475569;border-radius:4px;padding:0 12px;color:#e2e8f0;font-size:12px;font-family:Consolas,monospace}[data-scada-theme] .color-text[data-v-e47f1784]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .number-input-wrapper[data-v-e47f1784]{display:flex;align-items:center;gap:8px}[data-scada-theme] .property-input[data-v-e47f1784]{flex:1;height:32px;background:#1e293b;border:1px solid #475569;border-radius:4px;padding:0 12px;color:#e2e8f0;font-size:12px}[data-scada-theme] .property-input[data-v-e47f1784]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .input-unit[data-v-e47f1784]{font-size:12px;color:#64748b;min-width:24px}[data-scada-theme] .property-select[data-v-e47f1784]{width:100%;height:32px;background:#1e293b;border:1px solid #475569;border-radius:4px;padding:0 12px;color:#e2e8f0;font-size:12px;cursor:pointer}[data-scada-theme] .property-select[data-v-e47f1784]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .slider-wrapper[data-v-e47f1784]{display:flex;align-items:center;gap:12px}[data-scada-theme] .property-slider[data-v-e47f1784]{flex:1;height:4px;background:#334155;border-radius:2px;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-scada-theme] .property-slider[data-v-e47f1784]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;background:#3b82f6;border-radius:50%;cursor:pointer}[data-scada-theme] .property-slider[data-v-e47f1784]::-moz-range-thumb{width:14px;height:14px;background:#3b82f6;border-radius:50%;border:none;cursor:pointer}[data-scada-theme] .slider-value[data-v-e47f1784]{font-size:12px;color:#94a3b8;min-width:40px;text-align:right}[data-scada-theme] .delete-btn[data-v-e47f1784]{width:100%;height:36px;background:#dc2626;border:none;border-radius:4px;color:#fff;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .delete-btn[data-v-e47f1784]:hover{background:#b91c1c}[data-scada-theme] .delete-btn[data-v-e47f1784]:active{transform:scale(.98)}[data-scada-theme] .event-card[data-v-af7c633a]{background:#0f172a;border:1px solid #334155;border-radius:6px;padding:12px;transition:all .2s}[data-scada-theme] .event-card[data-v-af7c633a]:hover{border-color:#3b82f6}[data-scada-theme] .event-card-header[data-v-af7c633a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #1e293b;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s}[data-scada-theme] .event-card-header[data-v-af7c633a]:hover{background:#3b82f60d;margin:-4px -8px 8px;padding:4px 8px 12px;border-radius:4px}[data-scada-theme] .header-left[data-v-af7c633a]{display:flex;align-items:center;gap:8px}[data-scada-theme] .collapse-icon[data-v-af7c633a]{font-size:10px;color:#64748b;transition:transform .2s;display:inline-block;width:12px}[data-scada-theme] .event-title[data-v-af7c633a]{font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-remove[data-v-af7c633a]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;line-height:1;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-af7c633a]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .event-card-body[data-v-af7c633a]{animation:slideDown-af7c633a .2s ease-out}@keyframes slideDown-af7c633a{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:2000px}}[data-scada-theme] .event-field[data-v-af7c633a]{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}[data-scada-theme] .event-field[data-v-af7c633a]:last-child{margin-bottom:0}[data-scada-theme] .event-field label[data-v-af7c633a]{font-size:12px;color:#cbd5e1;font-weight:500}[data-scada-theme] .event-field input[data-v-af7c633a],[data-scada-theme] .event-field select[data-v-af7c633a],[data-scada-theme] .event-field textarea[data-v-af7c633a]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .event-field input[data-v-af7c633a]:focus,[data-scada-theme] .event-field select[data-v-af7c633a]:focus,[data-scada-theme] .event-field textarea[data-v-af7c633a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .section-title[data-v-af7c633a]{font-size:12px;color:#94a3b8;margin-top:12px;margin-bottom:8px;font-weight:500}[data-scada-theme] .section-title[data-v-af7c633a]:first-child{margin-top:0}[data-scada-theme] .field-hint[data-v-af7c633a]{font-size:11px;color:#64748b;margin-top:2px}[data-scada-theme] .condition-config[data-v-af7c633a]{display:flex;flex-direction:column;gap:8px;margin-top:8px;padding:12px;background:#1e293b;border-radius:4px}[data-scada-theme] .condition-label[data-v-af7c633a]{font-size:12px;color:#cbd5e1}[data-scada-theme] .condition-select[data-v-af7c633a],[data-scada-theme] .condition-input[data-v-af7c633a]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .condition-select[data-v-af7c633a]:focus,[data-scada-theme] .condition-input[data-v-af7c633a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .config-section[data-v-af7c633a]{margin-top:16px;padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .btn-config[data-v-af7c633a]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;cursor:pointer;font-size:13px;transition:all .2s}[data-scada-theme] .btn-config[data-v-af7c633a]:hover{background:#334155;border-color:#3b82f6}[data-scada-theme] .selected-workflow-info[data-v-af7c633a]{margin-top:12px;padding:12px;background:#1e293b;border-radius:4px}[data-scada-theme] .info-row[data-v-af7c633a]{display:flex;align-items:center;gap:8px;margin-bottom:12px}[data-scada-theme] .info-label[data-v-af7c633a]{font-size:12px;color:#94a3b8}[data-scada-theme] .info-value[data-v-af7c633a]{font-size:13px;color:#10b981;font-weight:500}[data-scada-theme] .modal-overlay[data-v-7884b850]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn-7884b850 .2s ease-out}@keyframes fadeIn-7884b850{0%{opacity:0}to{opacity:1}}[data-scada-theme] .modal-container[data-v-7884b850]{width:800px;max-width:90vw;max-height:85vh;background:#0f172a;border-radius:8px;box-shadow:0 20px 60px #00000080;display:flex;flex-direction:column;animation:slideUp-7884b850 .3s ease-out}@keyframes slideUp-7884b850{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .modal-header[data-v-7884b850]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .modal-header h3[data-v-7884b850]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-7884b850]{width:32px;height:32px;background:transparent;border:none;border-radius:4px;color:#94a3b8;font-size:20px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-close[data-v-7884b850]:hover{background:#1e293b;color:#e2e8f0}[data-scada-theme] .device-point-selector[data-v-7884b850]{display:grid;grid-template-columns:1fr 1.5fr;gap:12px;height:500px;padding:16px 24px;overflow:hidden}[data-scada-theme] .modal-footer[data-v-7884b850]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-7884b850],[data-scada-theme] .btn-confirm[data-v-7884b850]{padding:8px 24px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:none}[data-scada-theme] .btn-cancel[data-v-7884b850]{background:#1e293b;color:#e2e8f0}[data-scada-theme] .btn-cancel[data-v-7884b850]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-7884b850]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-7884b850]:hover{background:#2563eb}[data-scada-theme] .btn-confirm[data-v-7884b850]:disabled{background:#334155;color:#64748b;cursor:not-allowed}[data-scada-theme] .device-list-panel[data-v-7884b850],[data-scada-theme] .point-list-panel[data-v-7884b850]{display:flex;flex-direction:column;background:#1e293b;border:1px solid #334155;border-radius:6px;overflow:hidden}[data-scada-theme] .panel-header[data-v-7884b850]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#334155;border-bottom:1px solid #475569}[data-scada-theme] .panel-header h4[data-v-7884b850]{margin:0;font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .device-count[data-v-7884b850],[data-scada-theme] .point-count[data-v-7884b850]{font-size:12px;color:#94a3b8;background:#1e293b;padding:2px 8px;border-radius:10px}[data-scada-theme] .search-box[data-v-7884b850]{padding:12px 16px;border-bottom:1px solid #334155}[data-scada-theme] .search-input[data-v-7884b850]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .search-input[data-v-7884b850]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .search-input[data-v-7884b850]::placeholder{color:#64748b}[data-scada-theme] .device-list[data-v-7884b850],[data-scada-theme] .point-list[data-v-7884b850]{flex:1;overflow-y:auto;padding:8px}[data-scada-theme] .device-item[data-v-7884b850]{display:flex;justify-content:space-between;align-items:center;padding:12px;margin-bottom:4px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s}[data-scada-theme] .device-item[data-v-7884b850]:hover{background:#1e293b;border-color:#3b82f6}[data-scada-theme] .device-item.active[data-v-7884b850]{background:#3b82f61a;border-color:#3b82f6}[data-scada-theme] .device-item.offline[data-v-7884b850]{opacity:.6}[data-scada-theme] .device-info[data-v-7884b850]{flex:1}[data-scada-theme] .device-name[data-v-7884b850]{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:500;color:#e2e8f0;margin-bottom:4px}[data-scada-theme] .status-dot[data-v-7884b850]{width:8px;height:8px;border-radius:50%;background:#64748b}[data-scada-theme] .status-dot.online[data-v-7884b850]{background:#10b981;box-shadow:0 0 8px #10b98180}[data-scada-theme] .status-dot.offline[data-v-7884b850]{background:#64748b}[data-scada-theme] .status-dot.error[data-v-7884b850]{background:#ef4444;box-shadow:0 0 8px #ef444480}[data-scada-theme] .device-meta[data-v-7884b850]{display:flex;gap:12px;font-size:11px;color:#94a3b8}[data-scada-theme] .device-code[data-v-7884b850]{font-family:monospace}[data-scada-theme] .device-arrow[data-v-7884b850]{font-size:18px;color:#64748b;transition:all .2s}[data-scada-theme] .device-item:hover .device-arrow[data-v-7884b850]{color:#3b82f6;transform:translate(2px)}[data-scada-theme] .point-item[data-v-7884b850]{padding:12px;margin-bottom:4px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s}[data-scada-theme] .point-item[data-v-7884b850]:hover{background:#1e293b;border-color:#3b82f6}[data-scada-theme] .point-item.active[data-v-7884b850]{background:#3b82f61a;border-color:#3b82f6}[data-scada-theme] .point-item.disabled[data-v-7884b850]{opacity:.5;cursor:not-allowed}[data-scada-theme] .point-info[data-v-7884b850]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .point-name[data-v-7884b850]{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:500;color:#e2e8f0}[data-scada-theme] .access-mode[data-v-7884b850]{font-size:10px;padding:2px 6px;border-radius:3px;font-weight:400}[data-scada-theme] .access-mode.read[data-v-7884b850]{background:#3b82f633;color:#60a5fa}[data-scada-theme] .access-mode.write[data-v-7884b850]{background:#ef444433;color:#f87171}[data-scada-theme] .access-mode.readWrite[data-v-7884b850]{background:#10b98133;color:#34d399}[data-scada-theme] .point-meta[data-v-7884b850]{display:flex;gap:12px;font-size:11px;color:#94a3b8}[data-scada-theme] .point-code[data-v-7884b850]{font-family:monospace}[data-scada-theme] .point-unit[data-v-7884b850]{color:#3b82f6}[data-scada-theme] .point-type[data-v-7884b850]{background:#334155;padding:2px 6px;border-radius:3px}[data-scada-theme] .point-value[data-v-7884b850]{font-size:12px;color:#94a3b8}[data-scada-theme] .point-value .value[data-v-7884b850]{color:#e2e8f0;font-weight:500;margin:0 4px}[data-scada-theme] .quality[data-v-7884b850]{font-size:10px;padding:2px 6px;border-radius:3px;margin-left:8px}[data-scada-theme] .quality.good[data-v-7884b850]{background:#10b98133;color:#34d399}[data-scada-theme] .quality.bad[data-v-7884b850]{background:#ef444433;color:#f87171}[data-scada-theme] .quality.uncertain[data-v-7884b850]{background:#f59e0b33;color:#fbbf24}[data-scada-theme] .empty-hint[data-v-7884b850]{text-align:center;padding:40px 20px;color:#64748b;font-size:13px}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar{width:6px}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar-track,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar-track{background:#0f172a}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar-thumb,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}[data-scada-theme] .device-list[data-v-7884b850]::-webkit-scrollbar-thumb:hover,[data-scada-theme] .point-list[data-v-7884b850]::-webkit-scrollbar-thumb:hover{background:#475569}[data-scada-theme] .modal-overlay[data-v-ef9e0ee1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn-ef9e0ee1 .2s ease-out}@keyframes fadeIn-ef9e0ee1{0%{opacity:0}to{opacity:1}}[data-scada-theme] .modal-container[data-v-ef9e0ee1]{width:600px;max-width:90vw;max-height:85vh;background:#0f172a;border-radius:8px;box-shadow:0 20px 60px #00000080;display:flex;flex-direction:column;animation:slideUp-ef9e0ee1 .3s ease-out}@keyframes slideUp-ef9e0ee1{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .modal-header[data-v-ef9e0ee1]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .modal-header h3[data-v-ef9e0ee1]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-ef9e0ee1]{width:32px;height:32px;background:transparent;border:none;border-radius:4px;color:#94a3b8;font-size:20px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-close[data-v-ef9e0ee1]:hover{background:#1e293b;color:#e2e8f0}[data-scada-theme] .modal-footer[data-v-ef9e0ee1]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-ef9e0ee1],[data-scada-theme] .btn-confirm[data-v-ef9e0ee1]{padding:8px 24px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:none}[data-scada-theme] .btn-cancel[data-v-ef9e0ee1]{background:#1e293b;color:#e2e8f0}[data-scada-theme] .btn-cancel[data-v-ef9e0ee1]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-ef9e0ee1]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-ef9e0ee1]:hover{background:#2563eb}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]{max-height:60vh;overflow-y:auto;padding:20px 24px;display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-item[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .config-item label[data-v-ef9e0ee1]{font-size:12px;color:#cbd5e1;font-weight:500}[data-scada-theme] .required[data-v-ef9e0ee1]{color:#ef4444;margin-left:2px}[data-scada-theme] .field-hint[data-v-ef9e0ee1]{font-size:11px;color:#64748b;margin-top:4px;line-height:1.4}[data-scada-theme] .field-hint.error[data-v-ef9e0ee1]{color:#ef4444}[data-scada-theme] .config-item select[data-v-ef9e0ee1],[data-scada-theme] .config-item input[data-v-ef9e0ee1]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .config-item select[data-v-ef9e0ee1]:focus,[data-scada-theme] .config-item input[data-v-ef9e0ee1]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .unit-config[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .checkbox-label[data-v-ef9e0ee1]{display:flex;align-items:center;gap:8px;font-size:13px;color:#cbd5e1;cursor:pointer}[data-scada-theme] .checkbox-label input[type=checkbox][data-v-ef9e0ee1]{width:auto;cursor:pointer}[data-scada-theme] .custom-unit[data-v-ef9e0ee1]{margin-left:24px}[data-scada-theme] .custom-unit input[data-v-ef9e0ee1]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .custom-unit input[data-v-ef9e0ee1]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .mapping-details[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:12px;padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .range-rules[data-v-ef9e0ee1],[data-scada-theme] .enum-mappings[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .range-rule[data-v-ef9e0ee1],[data-scada-theme] .enum-mapping[data-v-ef9e0ee1]{display:flex;align-items:center;gap:8px}[data-scada-theme] .range-rule input[data-v-ef9e0ee1],[data-scada-theme] .enum-mapping input[data-v-ef9e0ee1]{flex:1;padding:6px 10px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px}[data-scada-theme] .range-rule input[data-v-ef9e0ee1]:first-child,[data-scada-theme] .range-rule input[data-v-ef9e0ee1]:nth-child(3){max-width:80px}[data-scada-theme] .range-separator[data-v-ef9e0ee1],[data-scada-theme] .range-arrow[data-v-ef9e0ee1],[data-scada-theme] .enum-arrow[data-v-ef9e0ee1]{color:#64748b;font-size:14px;flex-shrink:0}[data-scada-theme] .btn-remove-rule[data-v-ef9e0ee1]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}[data-scada-theme] .btn-remove-rule[data-v-ef9e0ee1]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .btn-add-rule[data-v-ef9e0ee1]{padding:8px 16px;background:#334155;border:1px dashed #475569;border-radius:4px;color:#94a3b8;font-size:12px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-add-rule[data-v-ef9e0ee1]:hover{background:#3b82f6;border-color:#3b82f6;color:#fff;border-style:solid}[data-scada-theme] .mapping-preview[data-v-ef9e0ee1]{padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .mapping-preview label[data-v-ef9e0ee1]{display:block;font-size:12px;color:#94a3b8;margin-bottom:8px}[data-scada-theme] .preview-content[data-v-ef9e0ee1]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .preview-item[data-v-ef9e0ee1]{display:flex;align-items:center;gap:8px;padding:6px 10px;background:#1e293b;border-radius:4px;font-size:12px}[data-scada-theme] .preview-input[data-v-ef9e0ee1]{color:#94a3b8;font-family:monospace}[data-scada-theme] .preview-arrow[data-v-ef9e0ee1]{color:#64748b;font-size:12px}[data-scada-theme] .preview-output[data-v-ef9e0ee1]{color:#3b82f6;font-weight:500}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar{width:6px}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar-track{background:#0f172a}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}[data-scada-theme] .mapping-configurator[data-v-ef9e0ee1]::-webkit-scrollbar-thumb:hover{background:#475569}[data-scada-theme] .event-card[data-v-3731c19a]{background:#0f172a;border:1px solid #334155;border-radius:6px;padding:12px;transition:all .2s}[data-scada-theme] .event-card[data-v-3731c19a]:hover{border-color:#3b82f6}[data-scada-theme] .event-card-header[data-v-3731c19a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #1e293b;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s}[data-scada-theme] .event-card-header[data-v-3731c19a]:hover{background:#3b82f60d;margin:-4px -8px 8px;padding:4px 8px 12px;border-radius:4px}[data-scada-theme] .header-left[data-v-3731c19a]{display:flex;align-items:center;gap:8px}[data-scada-theme] .collapse-icon[data-v-3731c19a]{font-size:10px;color:#64748b;transition:transform .2s;display:inline-block;width:12px}[data-scada-theme] .event-title[data-v-3731c19a]{font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-remove[data-v-3731c19a]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;line-height:1;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-3731c19a]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .event-card-body[data-v-3731c19a]{animation:slideDown-3731c19a .2s ease-out}@keyframes slideDown-3731c19a{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:2000px}}[data-scada-theme] .property-item[data-v-3731c19a]{margin-bottom:12px}[data-scada-theme] .property-item[data-v-3731c19a]:last-child{margin-bottom:0}[data-scada-theme] .property-item label[data-v-3731c19a]{display:block;font-size:12px;color:#cbd5e1;margin-bottom:6px}[data-scada-theme] .property-item select[data-v-3731c19a]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .property-item select[data-v-3731c19a]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .point-selector-trigger[data-v-3731c19a]{display:flex;justify-content:space-between;align-items:center;width:100%;padding:10px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;min-height:42px}[data-scada-theme] .point-selector-trigger[data-v-3731c19a]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .selected-point[data-v-3731c19a]{flex:1;display:flex;flex-direction:column;gap:4px}[data-scada-theme] .point-main[data-v-3731c19a]{display:flex;align-items:center;gap:8px;font-size:13px}[data-scada-theme] .device-name[data-v-3731c19a]{color:#94a3b8;font-size:12px}[data-scada-theme] .point-name[data-v-3731c19a]{color:#e2e8f0;font-weight:500}[data-scada-theme] .point-details[data-v-3731c19a]{display:flex;gap:8px;font-size:11px;color:#64748b}[data-scada-theme] .point-code[data-v-3731c19a]{font-family:monospace}[data-scada-theme] .point-unit[data-v-3731c19a]{color:#3b82f6}[data-scada-theme] .placeholder[data-v-3731c19a]{color:#64748b;font-size:13px}[data-scada-theme] .selector-arrow[data-v-3731c19a]{font-size:18px;color:#64748b;transition:all .2s}[data-scada-theme] .point-selector-trigger:hover .selector-arrow[data-v-3731c19a]{color:#3b82f6;transform:translate(2px)}[data-scada-theme] .mapping-trigger[data-v-3731c19a]{display:flex;justify-content:space-between;align-items:center;width:100%;padding:10px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;cursor:pointer;transition:all .2s;min-height:42px}[data-scada-theme] .mapping-trigger[data-v-3731c19a]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .mapping-summary[data-v-3731c19a]{flex:1;display:flex;flex-direction:column;gap:4px}[data-scada-theme] .mapping-type-label[data-v-3731c19a]{font-size:13px;color:#e2e8f0;font-weight:500}[data-scada-theme] .mapping-detail[data-v-3731c19a]{font-size:11px;color:#64748b}[data-scada-theme] .mapping-trigger .placeholder[data-v-3731c19a]{color:#64748b;font-size:13px}[data-scada-theme] .mapping-trigger:hover .selector-arrow[data-v-3731c19a]{color:#3b82f6;transform:translate(2px)}[data-scada-theme] .dialog-overlay[data-v-90af9944]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn-90af9944 .2s}@keyframes fadeIn-90af9944{0%{opacity:0}to{opacity:1}}[data-scada-theme] .dialog-content[data-v-90af9944]{background:#1e293b;border-radius:8px;width:90%;max-width:800px;box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #0000004d;animation:slideUp-90af9944 .3s}@keyframes slideUp-90af9944{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .dialog-header[data-v-90af9944]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-90af9944]{font-size:18px;font-weight:600;color:#e2e8f0;margin:0}[data-scada-theme] .btn-close[data-v-90af9944]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-90af9944]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-90af9944]{padding:24px;max-height:60vh;overflow-y:auto}[data-scada-theme] .btn-add-group[data-v-90af9944]{width:100%;padding:10px 16px;background:#1e293b;border:1px dashed #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:14px;transition:all .2s;margin-bottom:16px}[data-scada-theme] .btn-add-group[data-v-90af9944]:hover{background:#334155;border-color:#3b82f6;color:#e2e8f0}[data-scada-theme] .attribute-group[data-v-90af9944]{margin-bottom:12px;padding:16px;background:#0f172a;border-radius:4px;border:1px solid #334155}[data-scada-theme] .group-row[data-v-90af9944]{display:grid;grid-template-columns:1.5fr 2fr auto;gap:12px;align-items:end}[data-scada-theme] .group-field[data-v-90af9944]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .group-field label[data-v-90af9944]{font-size:12px;color:#94a3b8;font-weight:500}[data-scada-theme] .group-field input[data-v-90af9944],[data-scada-theme] .group-field select[data-v-90af9944]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .group-field input[data-v-90af9944]:focus,[data-scada-theme] .group-field select[data-v-90af9944]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .group-field-value .color-input-wrapper[data-v-90af9944]{display:flex;align-items:center;gap:8px}[data-scada-theme] .group-field-value .color-input-wrapper input[type=color][data-v-90af9944]{width:60px;height:36px}[data-scada-theme] .color-value[data-v-90af9944]{flex:1;font-size:12px;color:#94a3b8;font-family:monospace}[data-scada-theme] .btn-delete-group[data-v-90af9944]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;transition:all .2s}[data-scada-theme] .btn-delete-group[data-v-90af9944]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .empty-hint[data-v-90af9944]{font-size:12px;color:#64748b;text-align:center;padding:16px;background:#0f172a;border-radius:4px;margin-bottom:12px}[data-scada-theme] .dialog-footer[data-v-90af9944]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-90af9944],[data-scada-theme] .btn-confirm[data-v-90af9944]{padding:8px 20px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-cancel[data-v-90af9944]{background:transparent;border:1px solid #475569;color:#cbd5e1}[data-scada-theme] .btn-cancel[data-v-90af9944]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-90af9944]{background:#3b82f6;border:1px solid #3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-90af9944]:hover{background:#2563eb;border-color:#2563eb}[data-scada-theme] .dialog-overlay[data-v-add3567b]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn-add3567b .2s}@keyframes fadeIn-add3567b{0%{opacity:0}to{opacity:1}}[data-scada-theme] .dialog-large[data-v-add3567b]{max-width:1200px;height:80vh;display:flex;flex-direction:column}[data-scada-theme] .dialog-content[data-v-add3567b]{background:#1e293b;border-radius:8px;width:90%;box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #0000004d;animation:slideUp-add3567b .3s}@keyframes slideUp-add3567b{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .dialog-header[data-v-add3567b]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-add3567b]{font-size:18px;font-weight:600;color:#e2e8f0;margin:0}[data-scada-theme] .btn-close[data-v-add3567b]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-add3567b]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body-split[data-v-add3567b]{display:grid;grid-template-columns:1fr 1fr;gap:20px;flex:1;overflow:hidden;padding:24px}[data-scada-theme] .code-editor-section[data-v-add3567b]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .code-textarea-full[data-v-add3567b]{flex:1;resize:none;height:100%!important}[data-scada-theme] .code-textarea[data-v-add3567b]{width:100%;padding:12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;font-family:Consolas,Monaco,Courier New,monospace;line-height:1.6;transition:all .2s}[data-scada-theme] .code-textarea[data-v-add3567b]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .section-header[data-v-add3567b]{display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .section-header label[data-v-add3567b]{font-size:14px;color:#cbd5e1;font-weight:600}[data-scada-theme] .preview-status[data-v-add3567b]{font-size:13px;font-weight:500}[data-scada-theme] .status-success[data-v-add3567b]{color:#10b981}[data-scada-theme] .status-error[data-v-add3567b]{color:#ef4444}[data-scada-theme] .btn-test[data-v-add3567b]{padding:6px 16px;background:#10b981;border:1px solid #10b981;border-radius:4px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}[data-scada-theme] .btn-test[data-v-add3567b]:hover{background:#059669;border-color:#059669}[data-scada-theme] .code-preview-section[data-v-add3567b]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .preview-canvas[data-v-add3567b]{flex:1;background:#0f172a;border:1px solid #334155;border-radius:4px;overflow:hidden;display:flex;flex-direction:column}[data-scada-theme] .node-preview[data-v-add3567b]{flex:1;position:relative;min-height:300px}[data-scada-theme] .console-output[data-v-add3567b]{max-height:150px;background:#020617;border-top:1px solid #334155;padding:12px;overflow-y:auto}[data-scada-theme] .console-title[data-v-add3567b]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:500}[data-scada-theme] .console-logs[data-v-add3567b]{display:flex;flex-direction:column;gap:4px}[data-scada-theme] .preview-empty[data-v-add3567b]{display:flex;align-items:center;justify-content:center;height:100%;color:#64748b;font-size:14px;text-align:center;padding:20px}[data-scada-theme] .preview-error-box[data-v-add3567b]{padding:20px;height:100%;overflow-y:auto}[data-scada-theme] .error-title[data-v-add3567b]{font-size:13px;color:#ef4444;margin-bottom:12px;font-weight:500}[data-scada-theme] .preview-node-container[data-v-add3567b]{height:100%;display:flex;flex-direction:column}[data-scada-theme] .log-item[data-v-add3567b]{font-family:Consolas,Monaco,monospace;font-size:12px;color:#e2e8f0;margin-bottom:4px;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .log-item[data-v-add3567b]:last-child{margin-bottom:0}[data-scada-theme] .error-message[data-v-add3567b]{background:#450a0a;border:1px solid #7f1d1d;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:12px;color:#fca5a5;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .dialog-footer[data-v-add3567b]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-add3567b],[data-scada-theme] .btn-confirm[data-v-add3567b]{padding:8px 20px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-cancel[data-v-add3567b]{background:transparent;border:1px solid #475569;color:#cbd5e1}[data-scada-theme] .btn-cancel[data-v-add3567b]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-add3567b]{background:#3b82f6;border:1px solid #3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-add3567b]:hover{background:#2563eb;border-color:#2563eb}[data-scada-theme] .dialog-overlay[data-v-c9a88e33]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:10000}[data-scada-theme] .dialog-container[data-v-c9a88e33]{width:600px;max-height:80vh;background:#1e293b;border-radius:8px;display:flex;flex-direction:column;overflow:hidden}[data-scada-theme] .dialog-header[data-v-c9a88e33]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-c9a88e33]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-c9a88e33]{width:32px;height:32px;background:transparent;border:none;border-radius:4px;color:#94a3b8;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}[data-scada-theme] .btn-close[data-v-c9a88e33]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-c9a88e33]{flex:1;overflow-y:auto;padding:20px 24px}[data-scada-theme] .empty-state[data-v-c9a88e33]{text-align:center;padding:40px 20px;color:#64748b}[data-scada-theme] .empty-state p[data-v-c9a88e33]{margin:8px 0;font-size:14px}[data-scada-theme] .empty-state .hint[data-v-c9a88e33]{font-size:12px;color:#475569}[data-scada-theme] .workflow-list[data-v-c9a88e33]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .workflow-item[data-v-c9a88e33]{display:flex;justify-content:space-between;align-items:center;padding:16px;background:#0f172a;border:2px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .workflow-item[data-v-c9a88e33]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .workflow-item.selected[data-v-c9a88e33]{border-color:#10b981;background:#10b9811a}[data-scada-theme] .workflow-info[data-v-c9a88e33]{flex:1}[data-scada-theme] .workflow-name[data-v-c9a88e33]{font-size:15px;font-weight:500;color:#e2e8f0;margin-bottom:6px}[data-scada-theme] .workflow-meta[data-v-c9a88e33]{display:flex;gap:12px;font-size:12px;color:#64748b}[data-scada-theme] .workflow-id[data-v-c9a88e33]{color:#94a3b8}[data-scada-theme] .workflow-date[data-v-c9a88e33]{color:#64748b}[data-scada-theme] .workflow-actions[data-v-c9a88e33]{display:flex;gap:8px}[data-scada-theme] .btn-icon[data-v-c9a88e33]{width:32px;height:32px;background:transparent;border:1px solid #334155;border-radius:4px;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;transition:all .2s}[data-scada-theme] .btn-icon[data-v-c9a88e33]:hover{background:#334155;border-color:#3b82f6}[data-scada-theme] .dialog-footer[data-v-c9a88e33]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-secondary[data-v-c9a88e33],[data-scada-theme] .btn-primary[data-v-c9a88e33]{padding:8px 16px;border-radius:4px;font-size:14px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-secondary[data-v-c9a88e33]{background:transparent;border:1px solid #475569;color:#e2e8f0}[data-scada-theme] .btn-secondary[data-v-c9a88e33]:hover{background:#334155;border-color:#64748b}[data-scada-theme] .btn-primary[data-v-c9a88e33]{background:#10b981;border:1px solid #10b981;color:#fff}[data-scada-theme] .btn-primary[data-v-c9a88e33]:hover{background:#059669;border-color:#059669}[data-scada-theme] .btn-primary[data-v-c9a88e33]:disabled{background:#334155;border-color:#334155;color:#64748b;cursor:not-allowed}[data-scada-theme] .property-panel[data-v-7d3281c0]{width:300px;height:100%;background:#1e293b;border-left:1px solid #0f3460;overflow-y:auto}[data-scada-theme] .empty-state[data-v-7d3281c0]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:200px;color:#64748b;text-align:center;padding:24px}[data-scada-theme] .empty-state p[data-v-7d3281c0]{font-size:16px;margin-bottom:8px}[data-scada-theme] .empty-state .hint[data-v-7d3281c0]{font-size:12px;color:#475569}[data-scada-theme] .properties[data-v-7d3281c0]{padding:12px}[data-scada-theme] .panel-title[data-v-7d3281c0]{font-size:15px;font-weight:600;color:#e2e8f0;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #334155}[data-scada-theme] .property-section[data-v-7d3281c0]{margin-bottom:16px}[data-scada-theme] .property-section h4[data-v-7d3281c0]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:600}[data-scada-theme] .hint-text[data-v-7d3281c0]{font-size:12px;color:#64748b;margin-bottom:12px;line-height:1.5}[data-scada-theme] .empty-hint[data-v-7d3281c0]{display:flex;justify-content:center;align-items:center;padding:24px 16px;color:#64748b;font-size:12px;text-align:center;background:#0f172a;border-radius:4px;margin-bottom:10px}[data-scada-theme] .property-item[data-v-7d3281c0]{margin-bottom:10px}[data-scada-theme] .property-item label[data-v-7d3281c0]{display:block;font-size:11px;color:#cbd5e1;margin-bottom:4px}[data-scada-theme] .property-item input[data-v-7d3281c0]{width:100%;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item input[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item input[data-v-7d3281c0]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-item select[data-v-7d3281c0],[data-scada-theme] .property-item textarea[data-v-7d3281c0]{width:100%;padding:6px 10px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .property-item select[data-v-7d3281c0]:focus,[data-scada-theme] .property-item textarea[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .property-item textarea[data-v-7d3281c0]{resize:vertical;min-height:50px;font-family:Consolas,Monaco,monospace}[data-scada-theme] .property-row[data-v-7d3281c0]{display:grid;grid-template-columns:1fr 1fr;gap:8px}[data-scada-theme] .color-input-wrapper[data-v-7d3281c0]{display:flex;align-items:center;gap:8px}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]{width:50px;height:36px;padding:2px;border:1px solid #334155;border-radius:4px;background:#0f172a;cursor:pointer;transition:all .2s}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]:hover{border-color:#3b82f6}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]::-webkit-color-swatch-wrapper{padding:0}[data-scada-theme] .color-input-wrapper input[type=color][data-v-7d3281c0]::-webkit-color-swatch{border:none;border-radius:2px}[data-scada-theme] .color-value[data-v-7d3281c0]{flex:1;font-size:12px;color:#94a3b8;font-family:monospace}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar{width:8px}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .property-panel[data-v-7d3281c0]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .tabs[data-v-7d3281c0]{display:flex;gap:3px;margin-bottom:12px;padding:3px;background:#0f172a;border-radius:5px}[data-scada-theme] .tab-btn[data-v-7d3281c0]{flex:1;padding:6px 10px;background:transparent;border:none;color:#94a3b8;cursor:pointer;font-size:12px;font-weight:500;border-radius:4px;transition:all .2s}[data-scada-theme] .tab-btn[data-v-7d3281c0]:hover{color:#cbd5e1;background:#1e293b}[data-scada-theme] .tab-btn.active[data-v-7d3281c0]{color:#fff;background:#3b82f6}[data-scada-theme] .tab-content[data-v-7d3281c0]{min-height:0}[data-scada-theme] .tab-pane[data-v-7d3281c0]{animation:fadeIn-7d3281c0 .2s}@keyframes fadeIn-7d3281c0{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown-7d3281c0{0%{opacity:0;max-height:0;overflow:hidden}to{opacity:1;max-height:2000px}}[data-scada-theme] .section-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}[data-scada-theme] .section-header h4[data-v-7d3281c0]{margin:0}[data-scada-theme] .btn-add[data-v-7d3281c0]{padding:5px 10px;background:#3b82f6;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:11px;font-weight:500;transition:all .2s}[data-scada-theme] .btn-add[data-v-7d3281c0]:hover{background:#2563eb}[data-scada-theme] .event-list[data-v-7d3281c0]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .event-card[data-v-7d3281c0]{background:#0f172a;border:1px solid #334155;border-radius:5px;padding:10px;transition:all .2s}[data-scada-theme] .event-card[data-v-7d3281c0]:hover{border-color:#3b82f6}[data-scada-theme] .event-card-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid #1e293b;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s}[data-scada-theme] .event-card-header[data-v-7d3281c0]:hover{background:#3b82f60d;margin:-4px -6px 6px;padding:4px 6px 10px;border-radius:4px}[data-scada-theme] .header-left[data-v-7d3281c0]{display:flex;align-items:center;gap:6px}[data-scada-theme] .collapse-icon[data-v-7d3281c0]{font-size:9px;color:#64748b;transition:transform .2s;display:inline-block;width:10px}[data-scada-theme] .event-type-label[data-v-7d3281c0]{font-size:12px;font-weight:500;color:#e2e8f0}[data-scada-theme] .event-action-badge[data-v-7d3281c0]{font-size:10px;padding:2px 6px;background:#3b82f6;color:#fff;border-radius:8px}[data-scada-theme] .event-card-body[data-v-7d3281c0]{animation:slideDown-7d3281c0 .2s ease-out}[data-scada-theme] .event-index[data-v-7d3281c0]{font-size:12px;font-weight:600;color:#3b82f6}[data-scada-theme] .btn-remove[data-v-7d3281c0]{width:24px;height:24px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;line-height:1;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-7d3281c0]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .event-field[data-v-7d3281c0]{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}[data-scada-theme] .event-field[data-v-7d3281c0]:last-child{margin-bottom:0}[data-scada-theme] .event-field label[data-v-7d3281c0]{font-size:11px;color:#cbd5e1;font-weight:500}[data-scada-theme] .event-field input[data-v-7d3281c0],[data-scada-theme] .event-field select[data-v-7d3281c0],[data-scada-theme] .event-field textarea[data-v-7d3281c0]{width:100%;padding:6px 10px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px;transition:all .2s}[data-scada-theme] .event-field input[data-v-7d3281c0]:focus,[data-scada-theme] .event-field select[data-v-7d3281c0]:focus,[data-scada-theme] .event-field textarea[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f61a}[data-scada-theme] .field-hint[data-v-7d3281c0]{font-size:11px;color:#64748b;margin-top:2px}[data-scada-theme] .condition-group[data-v-7d3281c0]{background:#1e293b;border-radius:4px;padding:12px;margin-bottom:12px}[data-scada-theme] .config-section[data-v-7d3281c0]{margin-top:16px;padding:12px;background:#0f172a;border-radius:4px}[data-scada-theme] .section-title[data-v-7d3281c0]{font-size:12px;color:#94a3b8;margin-top:12px;margin-bottom:8px;font-weight:500}[data-scada-theme] .section-title[data-v-7d3281c0]:first-child{margin-top:0}[data-scada-theme] .btn-config[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;cursor:pointer;font-size:13px;transition:all .2s}[data-scada-theme] .btn-config[data-v-7d3281c0]:hover{background:#334155;border-color:#3b82f6}[data-scada-theme] .condition-config[data-v-7d3281c0]{display:flex;flex-direction:column;gap:8px;margin-top:8px;padding:12px;background:#1e293b;border-radius:4px}[data-scada-theme] .condition-label[data-v-7d3281c0]{font-size:12px;color:#cbd5e1}[data-scada-theme] .condition-select[data-v-7d3281c0],[data-scada-theme] .condition-input[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .condition-select[data-v-7d3281c0]:focus,[data-scada-theme] .condition-input[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .event-title[data-v-7d3281c0]{font-size:14px;font-weight:600;color:#e2e8f0}[data-scada-theme] .trigger-rule-select[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:pointer;transition:all .2s}[data-scada-theme] .trigger-rule-select[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .trigger-rule-select[data-v-7d3281c0]:hover{border-color:#475569}[data-scada-theme] .code-textarea[data-v-7d3281c0]{width:100%;padding:12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;font-family:Consolas,Monaco,Courier New,monospace;resize:vertical;min-height:120px;line-height:1.6;transition:all .2s}[data-scada-theme] .code-textarea[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .dialog-overlay[data-v-7d3281c0]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn-7d3281c0 .2s}[data-scada-theme] .dialog-content[data-v-7d3281c0]{background:#1e293b;border-radius:8px;width:90%;max-width:800px;box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #0000004d;animation:slideUp-7d3281c0 .3s}[data-scada-theme] .dialog-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-7d3281c0]{font-size:18px;font-weight:600;color:#e2e8f0;margin:0}[data-scada-theme] .btn-close[data-v-7d3281c0]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-7d3281c0]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-7d3281c0]{padding:24px;max-height:60vh;overflow-y:auto}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar{width:8px}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}[data-scada-theme] .dialog-body[data-v-7d3281c0]::-webkit-scrollbar-corner{background:#0f172a}[data-scada-theme] .btn-add-group[data-v-7d3281c0]{width:100%;padding:10px 16px;background:#1e293b;border:1px dashed #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:14px;transition:all .2s;margin-bottom:16px}[data-scada-theme] .btn-add-group[data-v-7d3281c0]:hover{background:#334155;border-color:#3b82f6;color:#e2e8f0}[data-scada-theme] .attribute-group[data-v-7d3281c0]{margin-bottom:12px;padding:16px;background:#0f172a;border-radius:4px;border:1px solid #334155}[data-scada-theme] .group-row[data-v-7d3281c0]{display:grid;grid-template-columns:1.5fr 2fr auto;gap:12px;align-items:end}[data-scada-theme] .group-field[data-v-7d3281c0]{display:flex;flex-direction:column;gap:6px}[data-scada-theme] .group-field label[data-v-7d3281c0]{font-size:12px;color:#94a3b8;font-weight:500}[data-scada-theme] .group-field input[data-v-7d3281c0],[data-scada-theme] .group-field select[data-v-7d3281c0]{width:100%;padding:8px 12px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;transition:all .2s}[data-scada-theme] .group-field input[data-v-7d3281c0]:focus,[data-scada-theme] .group-field select[data-v-7d3281c0]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}[data-scada-theme] .group-field-value .color-input-wrapper[data-v-7d3281c0]{display:flex;align-items:center;gap:8px}[data-scada-theme] .group-field-value .color-input-wrapper input[type=color][data-v-7d3281c0]{width:60px;height:36px}[data-scada-theme] .btn-delete-group[data-v-7d3281c0]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:18px;transition:all .2s}[data-scada-theme] .btn-delete-group[data-v-7d3281c0]:hover{background:#ef4444;border-color:#ef4444;color:#fff}[data-scada-theme] .dialog-large[data-v-7d3281c0]{max-width:1200px;height:80vh;display:flex;flex-direction:column}[data-scada-theme] .dialog-body-split[data-v-7d3281c0]{display:grid;grid-template-columns:1fr 1fr;gap:20px;flex:1;overflow:hidden}[data-scada-theme] .code-editor-section[data-v-7d3281c0]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .code-textarea-full[data-v-7d3281c0]{flex:1;resize:none;height:100%!important}[data-scada-theme] .section-header[data-v-7d3281c0]{display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .section-header label[data-v-7d3281c0]{font-size:14px;color:#cbd5e1;font-weight:600}[data-scada-theme] .preview-status[data-v-7d3281c0]{font-size:13px;font-weight:500}[data-scada-theme] .status-success[data-v-7d3281c0]{color:#10b981}[data-scada-theme] .status-error[data-v-7d3281c0]{color:#ef4444}[data-scada-theme] .btn-test[data-v-7d3281c0]{padding:6px 16px;background:#10b981;border:1px solid #10b981;border-radius:4px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;transition:all .2s}[data-scada-theme] .btn-test[data-v-7d3281c0]:hover{background:#059669;border-color:#059669}[data-scada-theme] .btn-clear[data-v-7d3281c0]{padding:4px 12px;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;font-size:12px;transition:all .2s}[data-scada-theme] .btn-clear[data-v-7d3281c0]:hover{background:#334155;color:#cbd5e1}[data-scada-theme] .code-preview-section[data-v-7d3281c0]{display:flex;flex-direction:column;gap:12px;height:100%}[data-scada-theme] .preview-canvas[data-v-7d3281c0]{flex:1;background:#0f172a;border:1px solid #334155;border-radius:4px;overflow:hidden;display:flex;flex-direction:column}[data-scada-theme] .node-preview[data-v-7d3281c0]{flex:1;position:relative;min-height:300px}[data-scada-theme] .console-output[data-v-7d3281c0]{max-height:150px;background:#020617;border-top:1px solid #334155;padding:12px;overflow-y:auto}[data-scada-theme] .console-title[data-v-7d3281c0]{font-size:12px;color:#94a3b8;margin-bottom:8px;font-weight:500}[data-scada-theme] .console-logs[data-v-7d3281c0]{display:flex;flex-direction:column;gap:4px}[data-scada-theme] .preview-empty[data-v-7d3281c0]{display:flex;align-items:center;justify-content:center;height:100%;color:#64748b;font-size:14px;text-align:center;padding:20px}[data-scada-theme] .preview-error-box[data-v-7d3281c0]{padding:20px;height:100%;overflow-y:auto}[data-scada-theme] .error-title[data-v-7d3281c0]{font-size:13px;color:#ef4444;margin-bottom:12px;font-weight:500}[data-scada-theme] .preview-node-container[data-v-7d3281c0]{height:100%;display:flex;flex-direction:column}[data-scada-theme] .log-item[data-v-7d3281c0]{font-family:Consolas,Monaco,monospace;font-size:12px;color:#e2e8f0;margin-bottom:4px;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .log-item[data-v-7d3281c0]:last-child{margin-bottom:0}[data-scada-theme] .error-message[data-v-7d3281c0]{background:#450a0a;border:1px solid #7f1d1d;border-radius:4px;padding:12px;font-family:Consolas,Monaco,monospace;font-size:12px;color:#fca5a5;white-space:pre-wrap;word-break:break-all}[data-scada-theme] .dialog-footer[data-v-7d3281c0]{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid #334155}[data-scada-theme] .btn-cancel[data-v-7d3281c0],[data-scada-theme] .btn-confirm[data-v-7d3281c0]{padding:8px 20px;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-cancel[data-v-7d3281c0]{background:transparent;border:1px solid #475569;color:#cbd5e1}[data-scada-theme] .btn-cancel[data-v-7d3281c0]:hover{background:#334155}[data-scada-theme] .btn-confirm[data-v-7d3281c0]{background:#3b82f6;border:1px solid #3b82f6;color:#fff}[data-scada-theme] .btn-confirm[data-v-7d3281c0]:hover{background:#2563eb;border-color:#2563eb}@keyframes slideUp-7d3281c0{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}[data-scada-theme] .scada-footer[data-v-52b6d4b1]{height:32px;background:#1e293b;border-top:1px solid #0f3460;display:flex;align-items:center;padding:0 32px;flex-shrink:0}[data-scada-theme] .footer-content[data-v-52b6d4b1]{width:100%;display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .footer-left[data-v-52b6d4b1],[data-scada-theme] .footer-right[data-v-52b6d4b1]{display:flex;align-items:center;gap:12px}[data-scada-theme] .copyright[data-v-52b6d4b1],[data-scada-theme] .license[data-v-52b6d4b1]{font-size:12px;color:#94a3b8!important}[data-scada-theme] .divider[data-v-52b6d4b1]{color:#475569!important;font-size:12px}[data-scada-theme] .contact-item[data-v-52b6d4b1]{display:flex;align-items:center;gap:4px}[data-scada-theme] .contact-item .icon[data-v-52b6d4b1]{font-size:12px}[data-scada-theme] .contact-item .text[data-v-52b6d4b1]{font-size:12px;color:#94a3b8!important}[data-scada-theme] .contact-item .text[data-v-52b6d4b1]:hover{color:#3b82f6!important;cursor:pointer}[data-scada-theme] .authorized-icon[data-v-52b6d4b1]{font-size:14px;margin-right:6px}[data-scada-theme] .authorized-text[data-v-52b6d4b1]{font-size:12px;color:#10b981!important;font-weight:500}[data-scada-theme] .expiry-text[data-v-52b6d4b1]{font-size:12px;color:#94a3b8!important}[data-scada-theme] .element-selector-overlay[data-v-882704dd]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000}[data-scada-theme] .element-selector-dialog[data-v-882704dd]{width:600px;max-height:80vh;background:#1e293b;border-radius:8px;display:flex;flex-direction:column;box-shadow:0 4px 24px #0000004d}[data-scada-theme] .dialog-header[data-v-882704dd]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #334155}[data-scada-theme] .dialog-header h3[data-v-882704dd]{margin:0;font-size:16px;font-weight:600;color:#e2e8f0}[data-scada-theme] .btn-close[data-v-882704dd]{width:28px;height:28px;background:transparent;border:none;color:#94a3b8;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-882704dd]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .dialog-body[data-v-882704dd]{flex:1;padding:20px;display:flex;flex-direction:column;gap:16px;overflow:hidden}[data-scada-theme] .search-box input[data-v-882704dd]{width:100%;padding:10px 14px;background:#0f172a;border:1px solid #334155;border-radius:6px;color:#e2e8f0;font-size:14px}[data-scada-theme] .search-box input[data-v-882704dd]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .element-list[data-v-882704dd]{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:8px}[data-scada-theme] .element-item[data-v-882704dd]{display:flex;align-items:center;gap:12px;padding:12px;background:#0f172a;border:2px solid #334155;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .element-item[data-v-882704dd]:hover{border-color:#3b82f6;background:#1e293b}[data-scada-theme] .element-item.active[data-v-882704dd]{border-color:#3b82f6;background:#3b82f61a}[data-scada-theme] .element-icon[data-v-882704dd]{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:#3b82f61a;border-radius:6px;font-size:20px;flex-shrink:0}[data-scada-theme] .element-info[data-v-882704dd]{flex:1}[data-scada-theme] .element-name[data-v-882704dd]{font-size:14px;font-weight:500;color:#e2e8f0;margin-bottom:4px}[data-scada-theme] .element-type[data-v-882704dd]{font-size:12px;color:#94a3b8}[data-scada-theme] .element-check[data-v-882704dd]{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:#3b82f6;border-radius:50%;color:#fff;font-size:14px;font-weight:700}[data-scada-theme] .empty-state[data-v-882704dd]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#64748b;padding:40px 20px}[data-scada-theme] .empty-state p[data-v-882704dd]{margin:0;font-size:14px}[data-scada-theme] .empty-hint[data-v-882704dd]{margin-top:8px;font-size:12px;color:#475569}[data-scada-theme] .dialog-footer[data-v-882704dd]{display:flex;justify-content:flex-end;gap:12px;padding:16px 20px;border-top:1px solid #334155}[data-scada-theme] .btn-secondary[data-v-882704dd],[data-scada-theme] .btn-primary[data-v-882704dd]{padding:8px 20px;border:none;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-secondary[data-v-882704dd]{background:#334155;color:#e2e8f0}[data-scada-theme] .btn-secondary[data-v-882704dd]:hover{background:#475569}[data-scada-theme] .btn-primary[data-v-882704dd]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-primary[data-v-882704dd]:hover{background:#2563eb}[data-scada-theme] .btn-primary[data-v-882704dd]:disabled{background:#475569;cursor:not-allowed;opacity:.5}[data-scada-theme] .node-config[data-v-fa65eb56]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-fa65eb56]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-fa65eb56]{font-size:13px;color:#94a3b8}[data-scada-theme] .element-selector[data-v-fa65eb56]{display:flex;gap:8px}[data-scada-theme] .element-selector input[data-v-fa65eb56]{flex:1;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:not-allowed}[data-scada-theme] .btn-select[data-v-fa65eb56]{padding:8px 16px;background:#3b82f6;color:#fff;border:none;border-radius:4px;font-size:13px;cursor:pointer;transition:all .2s;white-space:nowrap}[data-scada-theme] .btn-select[data-v-fa65eb56]:hover{background:#2563eb}[data-scada-theme] .element-info[data-v-fa65eb56]{font-size:12px;color:#10b981;margin-top:-4px}[data-scada-theme] .config-group input[data-v-fa65eb56],[data-scada-theme] .config-group textarea[data-v-fa65eb56],[data-scada-theme] .config-group select[data-v-fa65eb56]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-fa65eb56]:focus,[data-scada-theme] .config-group textarea[data-v-fa65eb56]:focus,[data-scada-theme] .config-group select[data-v-fa65eb56]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .node-config[data-v-42e029d4]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-42e029d4]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-42e029d4]{font-size:13px;color:#94a3b8}[data-scada-theme] .element-selector[data-v-42e029d4]{display:flex;gap:8px}[data-scada-theme] .element-selector input[data-v-42e029d4]{flex:1;padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;cursor:not-allowed}[data-scada-theme] .btn-select[data-v-42e029d4]{padding:8px 16px;background:#3b82f6;color:#fff;border:none;border-radius:4px;font-size:13px;cursor:pointer;transition:all .2s;white-space:nowrap}[data-scada-theme] .btn-select[data-v-42e029d4]:hover{background:#2563eb}[data-scada-theme] .element-info[data-v-42e029d4]{font-size:12px;color:#10b981;margin-top:-4px}[data-scada-theme] .config-group input[data-v-42e029d4],[data-scada-theme] .config-group textarea[data-v-42e029d4],[data-scada-theme] .config-group select[data-v-42e029d4]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-42e029d4]:focus,[data-scada-theme] .config-group textarea[data-v-42e029d4]:focus,[data-scada-theme] .config-group select[data-v-42e029d4]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .node-config[data-v-15975920]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-15975920]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-15975920]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-15975920],[data-scada-theme] .config-group textarea[data-v-15975920],[data-scada-theme] .config-group select[data-v-15975920]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-15975920]:focus,[data-scada-theme] .config-group textarea[data-v-15975920]:focus,[data-scada-theme] .config-group select[data-v-15975920]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .branches-section[data-v-15975920]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .section-header[data-v-15975920]{display:flex;justify-content:space-between;align-items:center}[data-scada-theme] .section-header label[data-v-15975920]{font-size:13px;color:#94a3b8;font-weight:500}[data-scada-theme] .btn-add[data-v-15975920]{padding:4px 12px;background:#3b82f6;color:#fff;border:none;border-radius:4px;font-size:12px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-add[data-v-15975920]:hover{background:#2563eb}[data-scada-theme] .branch-list[data-v-15975920]{display:flex;flex-direction:column;gap:12px}[data-scada-theme] .branch-item[data-v-15975920]{background:#0f172a;border:1px solid #334155;border-radius:6px;padding:12px}[data-scada-theme] .branch-header[data-v-15975920]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}[data-scada-theme] .branch-number[data-v-15975920]{font-size:12px;color:#3b82f6;font-weight:500}[data-scada-theme] .btn-remove[data-v-15975920]{width:20px;height:20px;background:#ef4444;color:#fff;border:none;border-radius:50%;font-size:16px;line-height:1;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}[data-scada-theme] .btn-remove[data-v-15975920]:hover{background:#dc2626}[data-scada-theme] .branch-config[data-v-15975920]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-row[data-v-15975920]{display:flex;flex-direction:column;gap:4px}[data-scada-theme] .config-row label[data-v-15975920]{font-size:12px;color:#94a3b8}[data-scada-theme] .config-row input[data-v-15975920],[data-scada-theme] .config-row select[data-v-15975920]{padding:6px 10px;background:#1e293b;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:12px}[data-scada-theme] .config-row input[data-v-15975920]:focus,[data-scada-theme] .config-row select[data-v-15975920]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .default-branch-label[data-v-15975920]{font-size:12px;color:#94a3b8;text-align:center;padding:8px;background:#1e293b;border-radius:4px}[data-scada-theme] .node-config[data-v-4c312eea]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-4c312eea]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-4c312eea]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-4c312eea],[data-scada-theme] .config-group textarea[data-v-4c312eea],[data-scada-theme] .config-group select[data-v-4c312eea]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-4c312eea]:focus,[data-scada-theme] .config-group textarea[data-v-4c312eea]:focus,[data-scada-theme] .config-group select[data-v-4c312eea]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .config-group textarea[data-v-4c312eea]{resize:vertical;font-family:Consolas,Monaco,monospace}[data-scada-theme] .node-config[data-v-f7115383]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-f7115383]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-f7115383]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group textarea[data-v-f7115383]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px;resize:vertical;font-family:Consolas,Monaco,monospace}[data-scada-theme] .config-group textarea[data-v-f7115383]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .code-hint[data-v-f7115383]{padding:12px;background:#3b82f61a;border-left:3px solid #3b82f6;border-radius:4px}[data-scada-theme] .code-hint p[data-v-f7115383]{margin:0 0 8px;font-size:13px;color:#94a3b8;font-weight:500}[data-scada-theme] .code-hint ul[data-v-f7115383]{margin:0;padding-left:20px}[data-scada-theme] .code-hint li[data-v-f7115383]{font-size:12px;color:#64748b;margin-bottom:4px}[data-scada-theme] .node-config[data-v-323381bc]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-323381bc]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-323381bc]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-323381bc],[data-scada-theme] .config-group select[data-v-323381bc]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-323381bc]:focus,[data-scada-theme] .config-group select[data-v-323381bc]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .node-config[data-v-d102fb63]{display:flex;flex-direction:column;gap:16px}[data-scada-theme] .config-group[data-v-d102fb63]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .config-group label[data-v-d102fb63]{font-size:13px;color:#94a3b8}[data-scada-theme] .config-group input[data-v-d102fb63],[data-scada-theme] .config-group select[data-v-d102fb63]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .config-group input[data-v-d102fb63]:focus,[data-scada-theme] .config-group select[data-v-d102fb63]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .timer-hint[data-v-d102fb63]{padding:12px;background:#faad141a;border-left:3px solid #faad14;border-radius:4px}[data-scada-theme] .timer-hint p[data-v-d102fb63]{margin:0;font-size:12px;color:#94a3b8}[data-scada-theme] .timer-hint.warning[data-v-d102fb63]{background:#ef44441a;border-left-color:#ef4444}[data-scada-theme] .property-panel[data-v-8304acbc]{width:300px;background:#1e293b;border-left:1px solid #334155;display:flex;flex-direction:column}[data-scada-theme] .property-panel h3[data-v-8304acbc]{margin:0;padding:16px;font-size:14px;font-weight:600;color:#e2e8f0;border-bottom:1px solid #334155}[data-scada-theme] .property-content[data-v-8304acbc]{padding:16px;display:flex;flex-direction:column;gap:16px;overflow-y:auto}[data-scada-theme] .property-group[data-v-8304acbc]{display:flex;flex-direction:column;gap:8px}[data-scada-theme] .property-group label[data-v-8304acbc]{font-size:13px;color:#94a3b8}[data-scada-theme] .property-group input[data-v-8304acbc],[data-scada-theme] .property-group textarea[data-v-8304acbc],[data-scada-theme] .property-group select[data-v-8304acbc]{padding:8px 12px;background:#0f172a;border:1px solid #334155;border-radius:4px;color:#e2e8f0;font-size:13px}[data-scada-theme] .property-group input[data-v-8304acbc]:focus,[data-scada-theme] .property-group textarea[data-v-8304acbc]:focus,[data-scada-theme] .property-group select[data-v-8304acbc]:focus{outline:none;border-color:#3b82f6}[data-scada-theme] .property-group input[data-v-8304acbc]:disabled{opacity:.5;cursor:not-allowed}[data-scada-theme] .property-empty[data-v-8304acbc]{flex:1;display:flex;align-items:center;justify-content:center;color:#64748b;font-size:13px}[data-scada-theme] .divider[data-v-8304acbc]{height:1px;background:#334155;margin:8px 0}[data-scada-theme] .toolbar[data-v-b3e0a4fc]{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;background:#1e293b;border-bottom:1px solid #334155}[data-scada-theme] .toolbar-left[data-v-b3e0a4fc]{display:flex;align-items:center;gap:24px}[data-scada-theme] .toolbar-left h2[data-v-b3e0a4fc]{margin:0;font-size:18px;font-weight:600;color:#e2e8f0}[data-scada-theme] .toolbar-right[data-v-b3e0a4fc]{display:flex;gap:12px}[data-scada-theme] .btn-secondary[data-v-b3e0a4fc],[data-scada-theme] .btn-primary[data-v-b3e0a4fc]{padding:8px 16px;border:none;border-radius:4px;font-size:14px;cursor:pointer;transition:all .2s}[data-scada-theme] .btn-secondary[data-v-b3e0a4fc]{background:#334155;color:#e2e8f0}[data-scada-theme] .btn-secondary[data-v-b3e0a4fc]:hover{background:#475569}[data-scada-theme] .btn-primary[data-v-b3e0a4fc]{background:#3b82f6;color:#fff}[data-scada-theme] .btn-primary[data-v-b3e0a4fc]:hover{background:#2563eb}[data-scada-theme] .btn-close[data-v-b3e0a4fc]{width:36px;height:36px;padding:0;background:transparent;border:1px solid #475569;border-radius:4px;color:#94a3b8;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;margin-left:8px}[data-scada-theme] .btn-close[data-v-b3e0a4fc]:hover{background:#475569;border-color:#64748b;color:#e2e8f0}[data-scada-theme] .close-icon[data-v-b3e0a4fc]{font-size:24px;line-height:1}[data-scada-theme] .menu-overlay[data-v-aa6fccf8]{position:fixed;top:0;left:0;right:0;bottom:0;background:#0000004d;z-index:999}[data-scada-theme] .add-node-menu[data-v-aa6fccf8]{position:fixed;z-index:1000;background:#1e293b;border:1px solid #334155;border-radius:8px;box-shadow:0 4px 12px #0000004d;min-width:280px;max-width:320px}[data-scada-theme] .menu-header[data-v-aa6fccf8]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #334155;color:#e2e8f0;font-size:14px;font-weight:600}[data-scada-theme] .btn-close[data-v-aa6fccf8]{width:24px;height:24px;background:transparent;border:none;color:#94a3b8;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s}[data-scada-theme] .btn-close[data-v-aa6fccf8]:hover{background:#334155;color:#e2e8f0}[data-scada-theme] .menu-list[data-v-aa6fccf8]{padding:8px}[data-scada-theme] .menu-item[data-v-aa6fccf8]{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:6px;cursor:pointer;transition:all .2s}[data-scada-theme] .menu-item[data-v-aa6fccf8]:hover{background:#334155}[data-scada-theme] .menu-item-icon[data-v-aa6fccf8]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:6px;font-size:18px;flex-shrink:0}[data-scada-theme] .node-icon-getProperty[data-v-aa6fccf8]{background:#1890ff1a}[data-scada-theme] .node-icon-setProperty[data-v-aa6fccf8]{background:#13c2c21a}[data-scada-theme] .node-icon-condition[data-v-aa6fccf8]{background:#faad141a}[data-scada-theme] .node-icon-httpRequest[data-v-aa6fccf8]{background:#722ed11a}[data-scada-theme] .node-icon-customCode[data-v-aa6fccf8]{background:#eb2f961a}[data-scada-theme] .node-icon-timer[data-v-aa6fccf8]{background:#52c41a1a}[data-scada-theme] .node-icon-clearTimer[data-v-aa6fccf8]{background:#ff4d4f1a}[data-scada-theme] .menu-item-info[data-v-aa6fccf8]{flex:1}[data-scada-theme] .menu-item-name[data-v-aa6fccf8]{font-size:14px;color:#e2e8f0;font-weight:500}[data-scada-theme] .menu-item-desc[data-v-aa6fccf8]{font-size:12px;color:#94a3b8;margin-top:2px}[data-scada-theme] .workflow-editor[data-v-649349a2]{display:flex;flex-direction:column;height:100vh;background:#0f172a;color:#e2e8f0}[data-scada-theme] .editor-main[data-v-649349a2]{display:flex;flex:1;overflow:hidden}[data-scada-theme] .canvas-area[data-v-649349a2]{flex:1;position:relative;overflow:hidden;background:#0f172a}[data-scada-theme] #workflow-container[data-v-649349a2]{width:100%;height:100%}[data-scada-theme] .workflow-dialog-overlay[data-v-4e7f6ab7]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;z-index:9999;display:flex;align-items:center;justify-content:center}[data-scada-theme] .workflow-dialog[data-v-4e7f6ab7]{width:100vw;height:100vh;background:#0f172a;overflow:hidden}.scada-layout[data-v-f7126c68]{width:100%;height:100%;min-height:100vh;display:flex;flex-direction:column;background:#1a1a2e}[data-scada-theme] .scada-canvas-container[data-v-f7126c68]{flex:1;display:flex;background:#0f172a;overflow:hidden;min-height:0}[data-scada-theme][data-v-f7126c68] .x6-node-selected{outline:2px solid #3b82f6;outline-offset:2px;box-shadow:0 0 0 4px #3b82f626,0 0 12px #3b82f64d;transition:outline .15s ease,box-shadow .15s ease}[data-scada-theme][data-v-f7126c68] .x6-node-selected rect,[data-scada-theme][data-v-f7126c68] .x6-node-selected circle,[data-scada-theme][data-v-f7126c68] .x6-node-selected ellipse{filter:brightness(1.05)}.scada-toast{position:fixed;top:20px;left:50%;transform:translate(-50%) translateY(-100px);padding:12px 24px;border-radius:6px;color:#fff;font-size:14px;font-weight:500;box-shadow:0 4px 12px #0000004d;z-index:9999;opacity:0;transition:all .3s ease;pointer-events:none}.scada-toast.show{transform:translate(-50%) translateY(0);opacity:1}.scada-toast-success{background:linear-gradient(135deg,#10b981,#059669)}.scada-toast-error{background:linear-gradient(135deg,#ef4444,#dc2626)}.scada-toast-warning{background:linear-gradient(135deg,#f59e0b,#d97706)}@keyframes edge-flow-f7126c68{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}[data-scada-theme][data-v-f7126c68] .x6-edge path{transition:stroke .3s ease,stroke-width .3s ease}[data-scada-theme][data-v-f7126c68] .edge-flow-slow{animation:edge-flow-f7126c68 4s linear infinite}[data-scada-theme][data-v-f7126c68] .edge-flow-normal{animation:edge-flow-f7126c68 2s linear infinite}[data-scada-theme][data-v-f7126c68] .edge-flow-fast{animation:edge-flow-f7126c68 1s linear infinite}.scada-layout[data-scada-theme=dark]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif!important;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important;color:#e2e8f0!important;font-size:14px!important;line-height:1.5!important;box-sizing:border-box!important;margin:0!important;padding:0!important;border:none!important;display:flex!important;flex-direction:column!important;flex:1!important;width:100%!important;height:100%!important;min-height:100vh!important;background:#1a1a2e!important;overflow:hidden!important;position:relative!important}.scada-layout[data-scada-theme=dark] *,.scada-layout[data-scada-theme=dark] *:before,.scada-layout[data-scada-theme=dark] *:after{box-sizing:border-box!important;margin:0;padding:0}.scada-layout[data-scada-theme=dark]>*{box-sizing:border-box!important}.scada-layout[data-scada-theme=dark]>.scada-header,.scada-layout[data-scada-theme=dark]>.scada-footer{color:#e2e8f0!important;margin:0!important}.scada-layout[data-scada-theme=dark] .property-panel>.panel-header,.scada-layout[data-scada-theme=dark] .component-library>.library-header,.scada-layout[data-scada-theme=dark] .canvas-config-panel>.config-header{color:#e2e8f0!important;margin:0!important;padding:0!important}.scada-layout[data-scada-theme=dark] .scada-header h1,.scada-layout[data-scada-theme=dark] .scada-header h2,.scada-layout[data-scada-theme=dark] .scada-header h3,.scada-layout[data-scada-theme=dark] .scada-header h4{color:#e2e8f0!important;margin:0!important;padding:0!important;font-weight:600!important}.scada-layout[data-scada-theme=dark] .canvas-area input:not([class*=ant-]):not([type=range]):not([type=color]):not([type=checkbox]),.scada-layout[data-scada-theme=dark] .canvas-area select:not([class*=ant-]),.scada-layout[data-scada-theme=dark] .canvas-area textarea:not([class*=ant-]),.scada-layout[data-scada-theme=dark] .canvas-area button:not([class*=ant-]){-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;outline:none!important;border:none!important;background:none!important;margin:0!important;padding:0!important;color:inherit!important;font-family:inherit!important;font-size:inherit!important}.scada-layout[data-scada-theme=dark] .canvas-area label,.scada-layout[data-scada-theme=dark] .canvas-area span,.scada-layout[data-scada-theme=dark] .canvas-area p,.scada-layout[data-scada-theme=dark] .canvas-area div{color:inherit!important;font-family:inherit!important;line-height:normal!important}.scada-layout[data-scada-theme] ::-webkit-scrollbar{width:8px;height:8px}.scada-layout[data-scada-theme] ::-webkit-scrollbar-track{background:#0f172a;border-radius:4px}.scada-layout[data-scada-theme] ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#475569,#334155);border-radius:4px;border:2px solid #0f172a;transition:background .2s}.scada-layout[data-scada-theme] ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#3b82f6,#2563eb)}.scada-layout[data-scada-theme] ::-webkit-scrollbar-corner{background:#0f172a}.scada-layout .x6-node-selected rect{stroke:#3b82f6!important;stroke-width:2!important;filter:drop-shadow(0 0 8px rgba(59,130,246,.6))!important}.scada-layout .x6-edge-selected path{stroke:#3b82f6!important;stroke-width:3!important}.scada-layout .x6-widget-selection-box{border:2px solid #3b82f6!important;background-color:#3b82f61a!important}.scada-layout[data-scada-theme] input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:4px;background:linear-gradient(90deg,#475569,#334155);border-radius:2px;outline:none;opacity:.9;transition:opacity .2s}.scada-layout[data-scada-theme] input[type=range]:hover{opacity:1}.scada-layout[data-scada-theme] input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;background:#8b5cf6;border-radius:50%;cursor:pointer;border:2px solid #0f172a;box-shadow:0 0 8px #8b5cf699;transition:all .2s}.scada-layout[data-scada-theme] input[type=range]::-webkit-slider-thumb:hover{background:#a78bfa;box-shadow:0 0 12px #8b5cf6cc;transform:scale(1.1)}.scada-layout[data-scada-theme] input[type=range]::-moz-range-thumb{width:16px;height:16px;background:#8b5cf6;border-radius:50%;cursor:pointer;border:2px solid #0f172a;box-shadow:0 0 8px #8b5cf699;transition:all .2s}.scada-layout[data-scada-theme] input[type=range]::-moz-range-thumb:hover{background:#a78bfa;box-shadow:0 0 12px #8b5cf6cc;transform:scale(1.1)}
|
package/dist/scada-engine.es.js
CHANGED
|
@@ -12096,7 +12096,10 @@ const je = new gp(), hp = {
|
|
|
12096
12096
|
}
|
|
12097
12097
|
}, S.readAsText(w);
|
|
12098
12098
|
}, re = () => {
|
|
12099
|
-
if (!t)
|
|
12099
|
+
if (console.log("🎬 [ScadaCanvas] handlePreview 被调用"), !t) {
|
|
12100
|
+
console.error("⚠️ [ScadaCanvas] graph 不存在");
|
|
12101
|
+
return;
|
|
12102
|
+
}
|
|
12100
12103
|
const b = {
|
|
12101
12104
|
cells: t.toJSON().cells,
|
|
12102
12105
|
config: {
|
|
@@ -12106,7 +12109,7 @@ const je = new gp(), hp = {
|
|
|
12106
12109
|
grid: ae.getConfig().grid
|
|
12107
12110
|
}
|
|
12108
12111
|
};
|
|
12109
|
-
p0(at.SCADA_PREVIEW_DATA, b), n("preview");
|
|
12112
|
+
p0(at.SCADA_PREVIEW_DATA, b), console.log("✅ [ScadaCanvas] 数据已保存到 sessionStorage"), console.log("📤 [ScadaCanvas] 即将触发 preview 事件"), n("preview"), console.log("✅ [ScadaCanvas] preview 事件已触发");
|
|
12110
12113
|
}, ue = () => {
|
|
12111
12114
|
a.value = !0;
|
|
12112
12115
|
}, ie = () => {
|
|
@@ -12368,7 +12371,7 @@ const je = new gp(), hp = {
|
|
|
12368
12371
|
}, null, 8, ["visible", "scada-graph"]))
|
|
12369
12372
|
]));
|
|
12370
12373
|
}
|
|
12371
|
-
}), yp = /* @__PURE__ */ ce(bp, [["__scopeId", "data-v-
|
|
12374
|
+
}), yp = /* @__PURE__ */ ce(bp, [["__scopeId", "data-v-f7126c68"]]), Cp = {
|
|
12372
12375
|
ScadaCanvas: yp,
|
|
12373
12376
|
PropertyPanel: go,
|
|
12374
12377
|
Header: Q0,
|
package/dist/scada-engine.umd.js
CHANGED
|
@@ -50,4 +50,4 @@
|
|
|
50
50
|
`;if(N+=f.map(w=>" • "+w).join(`
|
|
51
51
|
`),N+=`
|
|
52
52
|
|
|
53
|
-
是否继续保存?`,!confirm(N))return}const C=prompt("请输入流程名称:","未命名流程");if(!C||!C.trim())return;const b=n.toJSON(),A=n.getNodes().map(N=>({id:N.id,shape:N.shape,position:N.getPosition(),size:N.getSize(),attrs:N.getAttrs(),data:N.getData()})),$=n.getEdges().map(N=>({id:N.id,source:N.getSourceCellId(),target:N.getTargetCellId(),attrs:N.getAttrs(),data:N.getData()})),B={id:"workflow_"+Date.now(),name:C.trim(),data:{...b,nodes:A,edges:$},createdAt:Date.now(),updatedAt:Date.now()};try{const N=localStorage.getItem("saved-workflows"),w=N?JSON.parse(N):[];w.push(B),localStorage.setItem("saved-workflows",JSON.stringify(w)),alert("✓ 流程保存成功!"),console.log("流程已保存:",B)}catch(N){console.error("保存流程失败:",N),alert("保存失败,请重试")}};e.onMounted(()=>{a(),window.addEventListener("resize",d)});const d=()=>{!n||!r.value||n.resize(r.value.clientWidth,r.value.clientHeight)};return e.onBeforeUnmount(()=>{window.removeEventListener("resize",d);const p=f=>{if(f.key==="Delete"||f.key==="Backspace"){if(!n)return;const C=n.getSelectedCells();C.length&&(f.preventDefault(),n.removeCells(C),l.value&&C.includes(l.value.cell)&&(l.value=null))}};document.removeEventListener("keydown",p),n&&n.dispose()}),(p,f)=>(e.openBlock(),e.createElementBlock("div",K1,[e.createVNode(O1,{"show-close":g.showClose,onClear:u,onValidate:k,onSave:V,onClose:f[0]||(f[0]=C=>p.$emit("close"))},null,8,["show-close"]),e.createElementVNode("div",J1,[e.createElementVNode("div",Z1,[e.createElementVNode("div",{id:"workflow-container",ref_key:"containerRef",ref:r},null,512)]),e.createVNode(R1,{"selected-cell":l.value,"onUpdate:label":i},null,8,["selected-cell"])]),e.createVNode(X1,{visible:E.value,position:c.value,"node-types":o.value,onClose:f[1]||(f[1]=C=>E.value=!1),onSelect:m},null,8,["visible","position","node-types"])]))}}),[["__scopeId","data-v-649349a2"]]),ep={key:0,class:"workflow-dialog-overlay"},tp={class:"workflow-dialog"},op=re(e.defineComponent({__name:"WorkflowDialog",props:{visible:{type:Boolean},scadaGraph:{default:null}},emits:["update:visible","close"],setup(g,{emit:h}){const o=g,r=h;e.watch(()=>o.visible,E=>{E?document.body.style.overflow="hidden":document.body.style.overflow=""});const n=()=>{r("update:visible",!1),r("close")},l=E=>{E.key==="Escape"&&o.visible&&n()};return typeof window<"u"&&window.addEventListener("keydown",l),(E,c)=>g.visible?(e.openBlock(),e.createElementBlock("div",ep,[e.createElementVNode("div",tp,[e.createVNode(Q1,{"scada-graph":g.scadaGraph,"show-close":!0,onClose:n},null,8,["scada-graph"])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-4e7f6ab7"]]);class np{constructor(){Ue(this,"animations",new Map)}startAnimation(h,o){if(!h||o.type==="none")return;this.stopAnimation(h.id);const r=h.id;let n=null;switch(o.type){case"blink":n=this.createBlinkAnimation(h,o);break;case"scale":n=this.createScaleAnimation(h,o);break;case"rotate":n=this.createRotateAnimation(h,o);break;case"float":n=this.createFloatAnimation(h,o);break;case"pulse":n=this.createPulseAnimation(h,o);break}n&&this.animations.set(r,n)}stopAnimation(h){const o=this.animations.get(h);o&&(o.stop&&o.stop(),o.intervalId&&clearInterval(o.intervalId),this.animations.delete(h))}createBlinkAnimation(h,o){const r=h.getAttrByPath("body/opacity")||1;let n=!0;const l=setInterval(()=>{n=!n,h.setAttrByPath("body/opacity",n?r:.2),o.loop||(clearInterval(l),h.setAttrByPath("body/opacity",r))},o.duration/2);return{intervalId:l,stop:()=>{clearInterval(l),h.setAttrByPath("body/opacity",r)}}}createScaleAnimation(h,o){const r=h.getSize();let n=!0;const l=.05;let E=1;const c=setInterval(()=>{n?(E+=l,E>=1.2&&(n=!1)):(E-=l,E<=.8&&(n=!0)),h.resize(r.width*E,r.height*E),!o.loop&&E>=.99&&E<=1.01&&(clearInterval(c),h.resize(r.width,r.height))},o.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),h.resize(r.width,r.height)}}}createRotateAnimation(h,o){let r=0;const n=360/(o.duration/50),l=setInterval(()=>{r=(r+n)%360,h.rotate(r,{absolute:!0}),!o.loop&&r>=360&&(clearInterval(l),h.rotate(0,{absolute:!0}))},50);return{intervalId:l,stop:()=>{clearInterval(l),h.rotate(0,{absolute:!0})}}}createFloatAnimation(h,o){const r=h.position();let n=!0;const l=2;let E=r.y;const c=setInterval(()=>{n?(E-=l,E<=r.y-10&&(n=!1)):(E+=l,E>=r.y+10&&(n=!0)),h.position(r.x,E),!o.loop&&Math.abs(E-r.y)<1&&(clearInterval(c),h.position(r.x,r.y))},o.duration/40);return{intervalId:c,stop:()=>{clearInterval(c),h.position(r.x,r.y)}}}createPulseAnimation(h,o){const r=h.getAttrByPath("body/fill"),n=h.getAttrByPath("body/stroke");let l=0,E=!0;const c=setInterval(()=>{E?(l+=.1,l>=1&&(E=!1)):(l-=.1,l<=0&&(E=!0)),h.setAttrByPath("body/opacity",.5+l*.5),!o.loop&&l<=.05&&(clearInterval(c),h.setAttrByPath("body/fill",r),h.setAttrByPath("body/stroke",n),h.setAttrByPath("body/opacity",1))},o.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),h.setAttrByPath("body/fill",r),h.setAttrByPath("body/stroke",n),h.setAttrByPath("body/opacity",1)}}}clearAll(){this.animations.forEach((h,o)=>{this.stopAnimation(o)}),this.animations.clear()}}const ke=new np,ap={class:"scada-layout","data-scada-theme":"dark"},rp={class:"scada-canvas-container"},Xo=re(e.defineComponent({name:"ScadaCanvas",inheritAttrs:!0,__name:"ScadaCanvas",props:{authCode:{default:""},customFooter:{default:void 0},previewMode:{type:Boolean,default:!1},onSave:{type:Function,default:void 0}},emits:["preview"],setup(g,{expose:h,emit:o}){const r=g,n=o,l=e.ref(null),E=e.ref(null),c=e.ref(null),x=e.ref(0),s=e.ref(null),a=e.ref(!1);let t=null;e.onMounted(()=>{var G,P;if(!((G=l.value)!=null&&G.containerRef))return;const v=J.getConfig();ge.Graph.registerEdge("animated-edge",{inherit:"edge",markup:[{tagName:"path",selector:"line",attrs:{fill:"none"}},{tagName:"path",selector:"wrap",attrs:{fill:"none",stroke:"transparent",strokeWidth:20}},{tagName:"circle",selector:"circle"}],attrs:{line:{connection:!0,stroke:"#10b981",strokeWidth:2,targetMarker:{name:"block",width:8,height:6}},wrap:{connection:!0,strokeLinecap:"round",strokeLinejoin:"round"}}},!0);const D=l.value.containerRef,_=v.size.width,F=v.size.height;if((q=>{D.style.width=`${_}px`,D.style.height=`${F}px`,D.style.transform=`scale(${q})`,D.style.transformOrigin="center center"})(v.zoom.scale),t=new ge.Graph({container:D,width:_,height:F,background:v.background.image?{color:v.background.color||"#1e293b",image:v.background.image,size:v.background.size||"cover",repeat:v.background.repeat||"no-repeat",position:"center"}:{color:v.background.color||"#1e293b"},grid:v.grid.enabled?{size:v.grid.size,visible:!0,type:v.grid.type||"dot",args:{color:v.grid.color||"#475569",thickness:1}}:!1,interacting:{nodeMovable:!r.previewMode},panning:{enabled:!0,modifiers:"shift"},mousewheel:{enabled:!0,modifiers:["ctrl","meta"]},connecting:{router:{name:"orth",args:{padding:10}},connector:{name:"rounded",args:{radius:8}},snap:v.magnetism.enabled?{radius:v.magnetism.threshold||10}:!1,allowBlank:!1,allowLoop:!1,allowNode:!1,allowEdge:!1,highlight:!0,createEdge(){return t.createEdge({shape:"animated-edge",zIndex:0})},validateConnection({targetMagnet:q}){return!!q}}}),r.previewMode||t.use(new Gt.Selection({enabled:!0,movable:!0,rubberband:!0,showNodeSelectionBox:!1,showEdgeSelectionBox:!1,multiple:!0,pointerEvents:"none"})),v.guides.enabled&&t.use(new nn.Snapline({enabled:!0,sharp:!0,clean:!0})),!r.previewMode){const q=eo(Ie.SCADA_EDITOR_DATA);if(((P=q==null?void 0:q.cells)==null?void 0:P.length)>0)try{const X=q.cells.map(te=>{var se;return te.position&&typeof te.position=="object"&&(typeof te.position.x!="number"||typeof te.position.y!="number")&&(te.position={x:100,y:100}),(te.shape==="edge"||te.shape==="animated-edge")&&(te.router==="manhattan"||((se=te.router)==null?void 0:se.name)==="manhattan")&&(te.router={name:"orth",args:{padding:10}}),te});t.fromJSON({cells:X}),t.getEdges().forEach(te=>{var ne;const se=te.getData();(ne=se==null?void 0:se.animation)!=null&&ne.enabled&&p(te,se.animation)})}catch(X){console.error("恢复画布数据失败,清空缓存:",X),sessionStorage.removeItem(Ie.SCADA_EDITOR_DATA)}}t.on("selection:changed",({selected:q})=>{var te,se;const X=q?q.filter(ne=>ne.isNode()):[];if(x.value=X.length,q&&q.length>0){const ne=q[0];if(ne.isNode())E.value=ne,c.value=null;else if(ne.isEdge()){c.value=ne,E.value=null;const ie=ne.getAttrs();ne.data={...ne.data,originalAttrs:ie},ne.attr("line/stroke","#3b82f6")}}else{if(c.value&&((te=c.value.data)!=null&&te.originalAttrs)){const ne=c.value.data.originalAttrs;c.value.attr("line/stroke",((se=ne.line)==null?void 0:se.stroke)||"#10b981")}E.value=null,c.value=null}}),t.on("edge:click",({edge:q})=>{t.select(q)}),t.on("blank:click",()=>{c.value=null,E.value=null}),t.on("node:change:position",()=>{}),t.on("node:change:size",()=>{}),t.on("node:change:data",({node:q})=>{const X=q.getData();if(X.animation)if(X.animation.enabled===!0){const te={type:X.animation.type||"none",duration:X.animation.duration||1e3,loop:X.animation.loop!==!1};ke.startAnimation(q,te)}else ke.stopAnimation(q.id)}),t.on("edge:change:data",({edge:q})=>{const X=q.getData();X!=null&&X.animation&&p(q,X.animation)});const L=q=>{if(q.key==="Delete"&&t){if(E.value){const X=E.value.id;ke.stopAnimation(X),t.removeNode(X),E.value=null}else if(c.value){const X=c.value.id;t.removeEdge(X),c.value=null}}};document.addEventListener("keydown",L),e.onUnmounted(()=>{document.removeEventListener("keydown",L)})}),e.onUnmounted(()=>{if(t){ke.clearAll();const v={cells:t.toJSON().cells};ot(Ie.SCADA_EDITOR_DATA,v),t.dispose()}}),e.watch(()=>J.getConfig(),v=>{var _;if(!t)return;v.background.image?t.drawBackground({color:v.background.color||"#1e293b",image:v.background.image,size:v.background.size||"cover",repeat:v.background.repeat||"no-repeat",position:"center"}):t.drawBackground({color:v.background.color||"#1e293b"});const D=(_=l.value)==null?void 0:_.containerRef;D&&(D.style.transform=`scale(${v.zoom.scale})`,D.style.transformOrigin="center center",t.resize(v.size.width,v.size.height),D.style.width=`${v.size.width}px`,D.style.height=`${v.size.height}px`),v.grid.enabled?(t.drawGrid({type:v.grid.type||"dot",args:{color:v.grid.color||"#475569",thickness:1}}),t.showGrid()):t.hideGrid(),v.grid.enabled&&v.grid.size&&t.setGridSize(v.grid.size),t.translate(v.offset.x,v.offset.y)},{deep:!0});const i=e.ref({}),m=(v,D)=>(i.value[v]||(i.value[v]=0),i.value[v]++,`${D}_${i.value[v]}`),u=v=>{var P,q,X,te;if(!t)return;const D=Pe.getComponent(v);if(!D){console.error(`未找到组件配置: ${v}`);return}const _=m(v,D.metadata.name),F={enabled:!1,type:"none",duration:1e3,loop:!0},H=ao(50,50,400,300),L={x:H.x,y:H.y,shape:D.shape,width:D.width,height:D.height,label:D.label,attrs:D.attrs,ports:D.ports,data:{...D.data,componentType:v,componentName:_,props:D.props,animation:F,originalStroke:((q=(P=D.attrs)==null?void 0:P.body)==null?void 0:q.stroke)||"#2563eb",originalStrokeWidth:((te=(X=D.attrs)==null?void 0:X.body)==null?void 0:te.strokeWidth)||2}},G=t.addNode(L);t.cleanSelection(),t.select(G)},y=v=>{if(E.value&&(v.attrs&&Object.keys(v.attrs).forEach(D=>{const _=v.attrs[D];typeof _=="object"?Object.keys(_).forEach(F=>{E.value.attr(`${D}/${F}`,_[F])}):E.value.attr(D,_)}),v.position&&(typeof v.position.x=="number"&&typeof v.position.y=="number"?E.value.setPosition(v.position):console.error("position 数据格式错误:",v.position)),v.size&&(typeof v.size.width=="number"&&typeof v.size.height=="number"?E.value.setSize(v.size):console.error("size 数据格式错误:",v.size)),v.data)){const D={...v.data};delete D.position,delete D.size,E.value.store.set("data",D)}},k=()=>{if(!E.value||!t)return;const v=E.value.id;ke.stopAnimation(v),t.removeNode(v),E.value=null},V=v=>{if(c.value){if(v.attrs){Object.keys(v.attrs).forEach(_=>{const F=v.attrs[_];typeof F=="object"?Object.keys(F).forEach(H=>{var L,G;c.value.attr(`${_}/${H}`,F[H]),(G=(L=c.value.data)==null?void 0:L.originalAttrs)!=null&&G[_]&&(c.value.data.originalAttrs[_][H]=F[H])}):c.value.attr(_,F)});const D=c.value.getAttrs();c.value.data={...c.value.data,originalAttrs:D},c.value.attr("line/stroke","#3b82f6")}v.router&&c.value.setRouter(v.router),v.connector&&c.value.setConnector(v.connector),v.animation&&p(c.value,v.animation),v.data&&c.value.setData({...c.value.data,...v.data})}},d=()=>{!c.value||!t||(t.removeEdge(c.value.id),c.value=null)},p=(v,D)=>{if(!v||typeof v.attr!="function"){console.warn("applyEdgeAnimation: edge 对象无效",v);return}if(!D||!D.enabled){v.attr("line/strokeDasharray",void 0),typeof v.removeAttr=="function"&&v.removeAttr("line/class"),v.attr("circle",void 0),typeof v.stopTransition=="function"&&v.stopTransition("attrs/circle/atConnectionRatio");return}const _=D.duration||2e3;v.attr("circle",{r:4,atConnectionRatio:0,fill:{type:"radialGradient",stops:[{offset:"0%",color:"#FFF"},{offset:"100%",color:v.attr("line/stroke")||"#10b981"}]},stroke:v.attr("line/stroke")||"#10b981",strokeWidth:1});const F=()=>{v.attr("circle/atConnectionRatio",0,{silent:!0}),v.transition("attrs/circle/atConnectionRatio",1,{delay:0,duration:_,timing:"linear",complete:()=>{F()}})};F()},f=()=>{t&&confirm("确定要清空画布吗?")&&(ke.clearAll(),t.clearCells(),E.value=null,to(Ie.SCADA_EDITOR_DATA))},C=()=>{if(!t)return;const v=J.getConfig().zoom.scale,D=Math.min(5,v+.1);J.setZoom(D)},b=()=>{if(!t)return;const v=J.getConfig().zoom.scale,D=Math.max(.1,v-.1);J.setZoom(D)},A=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.min(...v.map(_=>_.getPosition().x));v.forEach(_=>{_.setPosition({x:D,y:_.getPosition().y})})},$=()=>{if(!t)return;const v=t.getSelectedCells().filter(F=>F.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=v.map(F=>F.getPosition().x+F.getSize().width/2),_=D.reduce((F,H)=>F+H,0)/D.length;v.forEach(F=>{const H=_-F.getSize().width/2;F.setPosition({x:H,y:F.getPosition().y})})},S=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.max(...v.map(_=>_.getPosition().x+_.getSize().width));v.forEach(_=>{const F=D-_.getSize().width;_.setPosition({x:F,y:_.getPosition().y})})},B=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.min(...v.map(_=>_.getPosition().y));v.forEach(_=>{_.setPosition({x:_.getPosition().x,y:D})})},N=()=>{if(!t)return;const v=t.getSelectedCells().filter(F=>F.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=v.map(F=>F.getPosition().y+F.getSize().height/2),_=D.reduce((F,H)=>F+H,0)/D.length;v.forEach(F=>{const H=_-F.getSize().height/2;F.setPosition({x:F.getPosition().x,y:H})})},w=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.max(...v.map(_=>_.getPosition().y+_.getSize().height));v.forEach(_=>{const F=D-_.getSize().height;_.setPosition({x:_.getPosition().x,y:F})})},I=()=>{if(!t)return;const v=t.getSelectedCells().filter(G=>G.isNode());if(v.length<3){le("请选择至少三个节点","warning");return}const D=v.sort((G,P)=>G.getPosition().x-P.getPosition().x),_=D[0],L=(D[D.length-1].getPosition().x-_.getPosition().x)/(D.length-1);D.forEach((G,P)=>{if(P===0||P===D.length-1)return;const q=_.getPosition().x+L*P;G.setPosition({x:q,y:G.getPosition().y})})},R=()=>{if(!t)return;const v=t.getSelectedCells().filter(G=>G.isNode());if(v.length<3){le("请选择至少三个节点","warning");return}const D=v.sort((G,P)=>G.getPosition().y-P.getPosition().y),_=D[0],L=(D[D.length-1].getPosition().y-_.getPosition().y)/(D.length-1);D.forEach((G,P)=>{if(P===0||P===D.length-1)return;const q=_.getPosition().y+L*P;G.setPosition({x:G.getPosition().x,y:q})})},O=async()=>{if(!t){le("画布未初始化","error");return}try{if(console.log("[ScadaCanvas] handleSave 被调用"),console.log("[ScadaCanvas] props.onSave:",r.onSave),r.onSave){console.log("[ScadaCanvas] 调用自定义 onSave 回调"),await r.onSave(),console.log("[ScadaCanvas] 自定义 onSave 回调执行完成");return}console.log("[ScadaCanvas] 没有自定义回调,执行默认下载");const v={version:"1.0.0",timestamp:new Date().toISOString(),config:{size:J.getConfig().size,background:J.getConfig().background,grid:J.getConfig().grid,guides:J.getConfig().guides,magnetism:J.getConfig().magnetism,zoom:J.getConfig().zoom},cells:t.toJSON().cells},D=new Blob([JSON.stringify(v,null,2)],{type:"application/json"}),_=URL.createObjectURL(D),F=document.createElement("a"),H=`scada-canvas-${new Date().getTime()}.json`;F.href=_,F.download=H,F.click(),URL.revokeObjectURL(_),le("保存成功","success")}catch(v){console.error("保存失败",v),le("保存失败,请查看控制台","error")}},j=()=>{s.value&&s.value.click()},Z=v=>{var H;const _=(H=v.target.files)==null?void 0:H[0];if(!_){le("请选择文件","error");return}const F=new FileReader;F.onload=L=>{var G;try{const P=JSON.parse((G=L.target)==null?void 0:G.result);if(!P.cells){le("无效的JSON文件格式","error");return}if(!confirm("导入将清空当前画布,是否继续?"))return;if(t){if(t.clearCells(),t.fromJSON({cells:P.cells}),t.getEdges().forEach(q=>{var te;const X=q.getData();(te=X==null?void 0:X.animation)!=null&&te.enabled&&p(q,X.animation)}),P.config&&J.updateConfig(P.config),P.workflows&&Array.isArray(P.workflows)&&P.workflows.length>0)try{const q=localStorage.getItem("saved-workflows"),X=q?JSON.parse(q):[];let te=0,se=0;P.workflows.forEach(ne=>{const ie=X.findIndex(Ee=>Ee.id===ne.id);ie>=0?(X[ie]={...ne,updatedAt:Date.now()},se++):(X.push(ne),te++)}),localStorage.setItem("saved-workflows",JSON.stringify(X)),le(`导入成功 画布已加载,流程: 新增${te}个,更新${se}个`,"success")}catch(q){console.error("导入流程数据失败:",q),le("画布导入成功, 但流程数据导入失败","warning")}else le("导入成功","success");s.value&&(s.value.value="")}}catch(P){console.error("导入失败",P),le("导入失败,JSON格式错误","error"),s.value&&(s.value.value="")}},F.readAsText(_)},ee=()=>{if(!t)return;const v={cells:t.toJSON().cells,config:{width:J.getConfig().size.width,height:J.getConfig().size.height,background:J.getConfig().background,grid:J.getConfig().grid}};ot(Ie.SCADA_PREVIEW_DATA,v),n("preview")},ae=()=>{a.value=!0},oe=()=>{if(!t){le("画布未初始化","error");return}try{const v={version:"1.0.0",timestamp:at(rt()),config:{size:J.getConfig().size,background:J.getConfig().background,grid:J.getConfig().grid,guides:J.getConfig().guides,magnetism:J.getConfig().magnetism,zoom:J.getConfig().zoom},cells:t.toJSON().cells,nodes:t.getNodes().map(F=>({id:F.id,type:F.shape,position:F.getPosition(),size:F.getSize(),label:F.attr("label/text"),data:F.getData()})),edges:t.getEdges().map(F=>({id:F.id,source:F.getSourceCellId(),target:F.getTargetCellId()})),workflows:[]},D=new Set;if(t.getNodes().forEach(F=>{const H=F.getData();H!=null&&H.events&&Array.isArray(H.events)&&H.events.forEach(L=>{var G;L.action==="callProcess"&&((G=L.params)!=null&&G.processId)&&D.add(L.params.processId)})}),D.size>0)try{const F=localStorage.getItem("saved-workflows");if(F){const H=JSON.parse(F);v.workflows=H.filter(L=>D.has(L.id))}}catch(F){console.error("加载流程数据失败:",F)}const _=oo(v,"scada-export");le(`已导出为 ${_}`,"success")}catch(v){console.error("导出失败",v),le("导出失败,请查看控制台","error")}};return h({save:O,import:j,export:oe,preview:ee,workflow:ae,zoomIn:C,zoomOut:b,clearAll:f,alignLeft:A,alignCenter:$,alignRight:S,alignTop:B,alignMiddle:N,alignBottom:w,distributeHorizontal:I,distributeVertical:R,addNode:u,updateNode:y,deleteNode:k,getSelectedNode:()=>E.value,selectNode:v=>{if(!t)return!1;const D=t.getCellById(v);return D?(t.select(D),!0):!1},clearSelection:()=>{t&&(t.unselect(t.getSelectedCells()),E.value=null)},getGraph:()=>t,getCanvasData:()=>t?{version:"1.0.0",timestamp:at(rt()),config:J.getConfig(),cells:t.toJSON().cells,nodes:t.getNodes().map(v=>({id:v.id,type:v.shape,position:v.getPosition(),size:v.getSize(),label:v.attr("label/text"),data:v.getData()})),edges:t.getEdges().map(v=>({id:v.id,source:v.getSourceCellId(),target:v.getTargetCellId()}))}:null,loadCanvasData:v=>{if(!t)return!1;try{return t.clearCells(),t.fromJSON({cells:v.cells}),v.config&&J.updateConfig(v.config),t.getEdges().forEach(D=>{var F;const _=D.getData();(F=_==null?void 0:_.animation)!=null&&F.enabled&&p(D,_.animation)}),!0}catch(D){return console.error("加载画布数据失败:",D),!1}},getAllNodes:()=>t?t.getNodes().map(v=>({id:v.id,type:v.shape,position:v.getPosition(),size:v.getSize(),label:v.attr("label/text"),data:v.getData()})):[],getNodeById:v=>{if(!t)return null;const D=t.getCellById(v);if(!D||!D.isNode())return null;const _=D;return{id:_.id,type:_.shape,position:_.getPosition(),size:_.getSize(),label:_.attr("label/text"),data:_.getData()}},getConfigManager:()=>J,updateCanvasConfig:v=>{J.updateConfig(v)},setZoom:v=>{J.setZoom(v)},setCanvasSize:(v,D)=>{J.updateSize({width:v,height:D})},setBackgroundColor:v=>{J.updateBackground({color:v})},getAnimationEngine:()=>ke}),(v,D)=>(e.openBlock(),e.createElementBlock("div",ap,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Ge,{key:0,"selected-nodes-count":x.value,onSave:O,onImport:j,onWorkflow:ae,onPreview:ee,onExport:oe,onZoomIn:C,onZoomOut:b,onClearAll:f,onAlignLeft:A,onAlignCenter:$,onAlignRight:S,onAlignTop:B,onAlignMiddle:N,onAlignBottom:w,onDistributeHorizontal:I,onDistributeVertical:R},null,8,["selected-nodes-count"])),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"fileInputRef",ref:s,type:"file",accept:".json",style:{display:"none"},onChange:Z},null,544)),e.createElementVNode("div",rp,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Xe,{key:0,onAddComponent:u})),e.createVNode(Kn,{ref_key:"canvasAreaRef",ref:l},null,512),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(lt,{key:1,ref:"propertyPanelRef","selected-node":E.value,"selected-edge":c.value,onUpdateNode:y,onDeleteNode:k,onUpdateEdge:V,onDeleteEdge:d},null,8,["selected-node","selected-edge"]))]),e.createVNode(Ed,{"auth-code":g.authCode,"custom-footer":g.customFooter},null,8,["auth-code","custom-footer"]),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(op,{key:2,visible:a.value,"onUpdate:visible":D[0]||(D[0]=_=>a.value=_),"scada-graph":e.unref(t),onClose:D[1]||(D[1]=_=>a.value=!1)},null,8,["visible","scada-graph"]))]))}}),[["__scopeId","data-v-da3eb2e7"]]),lp={ScadaCanvas:Xo,PropertyPanel:lt,Header:Ge,ComponentLibrary:Xe,CanvasConfigPanel:Ye,BindingCard:Qe,EventCard:Je,BasicPropertiesTab:Ke,AttributeConfigDialog:et,CustomCodeDialog:tt},Yo=g=>{Object.entries(lp).forEach(([h,o])=>{g.component(h,o)})},sp={install:Yo,version:"1.0.0"};U.AttributeConfigDialog=et,U.BasicComponents=wn,U.BasicPropertiesTab=Ke,U.BindingCard=Qe,U.CanvasConfigPanel=Ye,U.ComponentLibrary=Xe,U.CustomCodeDialog=tt,U.EventCard=Je,U.Header=Ge,U.IoTComponents=Sn,U.PropertyPanel=lt,U.STORAGE_KEYS=Ie,U.ScadaCanvas=Xo,U.animationEngine=ke,U.canvasConfigItems=zn,U.canvasConfigManager=J,U.componentRegistry=Pe,U.default=sp,U.defaultCanvasConfig=je,U.exportToJSON=oo,U.formatTimestamp=at,U.generateEventId=no,U.generateNodeId=dc,U.generateUniqueId=nt,U.getCurrentTimestamp=rt,U.install=Yo,U.loadFromLocal=ic,U.loadFromSession=eo,U.randomPosition=ao,U.removeFromLocal=cc,U.removeFromSession=to,U.saveToLocal=sc,U.saveToSession=ot,U.showMessage=le,U.sizePresetMap=Re,Object.defineProperties(U,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
53
|
+
是否继续保存?`,!confirm(N))return}const C=prompt("请输入流程名称:","未命名流程");if(!C||!C.trim())return;const b=n.toJSON(),A=n.getNodes().map(N=>({id:N.id,shape:N.shape,position:N.getPosition(),size:N.getSize(),attrs:N.getAttrs(),data:N.getData()})),$=n.getEdges().map(N=>({id:N.id,source:N.getSourceCellId(),target:N.getTargetCellId(),attrs:N.getAttrs(),data:N.getData()})),B={id:"workflow_"+Date.now(),name:C.trim(),data:{...b,nodes:A,edges:$},createdAt:Date.now(),updatedAt:Date.now()};try{const N=localStorage.getItem("saved-workflows"),w=N?JSON.parse(N):[];w.push(B),localStorage.setItem("saved-workflows",JSON.stringify(w)),alert("✓ 流程保存成功!"),console.log("流程已保存:",B)}catch(N){console.error("保存流程失败:",N),alert("保存失败,请重试")}};e.onMounted(()=>{a(),window.addEventListener("resize",d)});const d=()=>{!n||!r.value||n.resize(r.value.clientWidth,r.value.clientHeight)};return e.onBeforeUnmount(()=>{window.removeEventListener("resize",d);const p=f=>{if(f.key==="Delete"||f.key==="Backspace"){if(!n)return;const C=n.getSelectedCells();C.length&&(f.preventDefault(),n.removeCells(C),l.value&&C.includes(l.value.cell)&&(l.value=null))}};document.removeEventListener("keydown",p),n&&n.dispose()}),(p,f)=>(e.openBlock(),e.createElementBlock("div",K1,[e.createVNode(O1,{"show-close":g.showClose,onClear:u,onValidate:k,onSave:V,onClose:f[0]||(f[0]=C=>p.$emit("close"))},null,8,["show-close"]),e.createElementVNode("div",J1,[e.createElementVNode("div",Z1,[e.createElementVNode("div",{id:"workflow-container",ref_key:"containerRef",ref:r},null,512)]),e.createVNode(R1,{"selected-cell":l.value,"onUpdate:label":i},null,8,["selected-cell"])]),e.createVNode(X1,{visible:E.value,position:c.value,"node-types":o.value,onClose:f[1]||(f[1]=C=>E.value=!1),onSelect:m},null,8,["visible","position","node-types"])]))}}),[["__scopeId","data-v-649349a2"]]),ep={key:0,class:"workflow-dialog-overlay"},tp={class:"workflow-dialog"},op=re(e.defineComponent({__name:"WorkflowDialog",props:{visible:{type:Boolean},scadaGraph:{default:null}},emits:["update:visible","close"],setup(g,{emit:h}){const o=g,r=h;e.watch(()=>o.visible,E=>{E?document.body.style.overflow="hidden":document.body.style.overflow=""});const n=()=>{r("update:visible",!1),r("close")},l=E=>{E.key==="Escape"&&o.visible&&n()};return typeof window<"u"&&window.addEventListener("keydown",l),(E,c)=>g.visible?(e.openBlock(),e.createElementBlock("div",ep,[e.createElementVNode("div",tp,[e.createVNode(Q1,{"scada-graph":g.scadaGraph,"show-close":!0,onClose:n},null,8,["scada-graph"])])])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-4e7f6ab7"]]);class np{constructor(){Ue(this,"animations",new Map)}startAnimation(h,o){if(!h||o.type==="none")return;this.stopAnimation(h.id);const r=h.id;let n=null;switch(o.type){case"blink":n=this.createBlinkAnimation(h,o);break;case"scale":n=this.createScaleAnimation(h,o);break;case"rotate":n=this.createRotateAnimation(h,o);break;case"float":n=this.createFloatAnimation(h,o);break;case"pulse":n=this.createPulseAnimation(h,o);break}n&&this.animations.set(r,n)}stopAnimation(h){const o=this.animations.get(h);o&&(o.stop&&o.stop(),o.intervalId&&clearInterval(o.intervalId),this.animations.delete(h))}createBlinkAnimation(h,o){const r=h.getAttrByPath("body/opacity")||1;let n=!0;const l=setInterval(()=>{n=!n,h.setAttrByPath("body/opacity",n?r:.2),o.loop||(clearInterval(l),h.setAttrByPath("body/opacity",r))},o.duration/2);return{intervalId:l,stop:()=>{clearInterval(l),h.setAttrByPath("body/opacity",r)}}}createScaleAnimation(h,o){const r=h.getSize();let n=!0;const l=.05;let E=1;const c=setInterval(()=>{n?(E+=l,E>=1.2&&(n=!1)):(E-=l,E<=.8&&(n=!0)),h.resize(r.width*E,r.height*E),!o.loop&&E>=.99&&E<=1.01&&(clearInterval(c),h.resize(r.width,r.height))},o.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),h.resize(r.width,r.height)}}}createRotateAnimation(h,o){let r=0;const n=360/(o.duration/50),l=setInterval(()=>{r=(r+n)%360,h.rotate(r,{absolute:!0}),!o.loop&&r>=360&&(clearInterval(l),h.rotate(0,{absolute:!0}))},50);return{intervalId:l,stop:()=>{clearInterval(l),h.rotate(0,{absolute:!0})}}}createFloatAnimation(h,o){const r=h.position();let n=!0;const l=2;let E=r.y;const c=setInterval(()=>{n?(E-=l,E<=r.y-10&&(n=!1)):(E+=l,E>=r.y+10&&(n=!0)),h.position(r.x,E),!o.loop&&Math.abs(E-r.y)<1&&(clearInterval(c),h.position(r.x,r.y))},o.duration/40);return{intervalId:c,stop:()=>{clearInterval(c),h.position(r.x,r.y)}}}createPulseAnimation(h,o){const r=h.getAttrByPath("body/fill"),n=h.getAttrByPath("body/stroke");let l=0,E=!0;const c=setInterval(()=>{E?(l+=.1,l>=1&&(E=!1)):(l-=.1,l<=0&&(E=!0)),h.setAttrByPath("body/opacity",.5+l*.5),!o.loop&&l<=.05&&(clearInterval(c),h.setAttrByPath("body/fill",r),h.setAttrByPath("body/stroke",n),h.setAttrByPath("body/opacity",1))},o.duration/20);return{intervalId:c,stop:()=>{clearInterval(c),h.setAttrByPath("body/fill",r),h.setAttrByPath("body/stroke",n),h.setAttrByPath("body/opacity",1)}}}clearAll(){this.animations.forEach((h,o)=>{this.stopAnimation(o)}),this.animations.clear()}}const ke=new np,ap={class:"scada-layout","data-scada-theme":"dark"},rp={class:"scada-canvas-container"},Xo=re(e.defineComponent({name:"ScadaCanvas",inheritAttrs:!0,__name:"ScadaCanvas",props:{authCode:{default:""},customFooter:{default:void 0},previewMode:{type:Boolean,default:!1},onSave:{type:Function,default:void 0}},emits:["preview"],setup(g,{expose:h,emit:o}){const r=g,n=o,l=e.ref(null),E=e.ref(null),c=e.ref(null),x=e.ref(0),s=e.ref(null),a=e.ref(!1);let t=null;e.onMounted(()=>{var G,P;if(!((G=l.value)!=null&&G.containerRef))return;const v=J.getConfig();ge.Graph.registerEdge("animated-edge",{inherit:"edge",markup:[{tagName:"path",selector:"line",attrs:{fill:"none"}},{tagName:"path",selector:"wrap",attrs:{fill:"none",stroke:"transparent",strokeWidth:20}},{tagName:"circle",selector:"circle"}],attrs:{line:{connection:!0,stroke:"#10b981",strokeWidth:2,targetMarker:{name:"block",width:8,height:6}},wrap:{connection:!0,strokeLinecap:"round",strokeLinejoin:"round"}}},!0);const D=l.value.containerRef,_=v.size.width,F=v.size.height;if((q=>{D.style.width=`${_}px`,D.style.height=`${F}px`,D.style.transform=`scale(${q})`,D.style.transformOrigin="center center"})(v.zoom.scale),t=new ge.Graph({container:D,width:_,height:F,background:v.background.image?{color:v.background.color||"#1e293b",image:v.background.image,size:v.background.size||"cover",repeat:v.background.repeat||"no-repeat",position:"center"}:{color:v.background.color||"#1e293b"},grid:v.grid.enabled?{size:v.grid.size,visible:!0,type:v.grid.type||"dot",args:{color:v.grid.color||"#475569",thickness:1}}:!1,interacting:{nodeMovable:!r.previewMode},panning:{enabled:!0,modifiers:"shift"},mousewheel:{enabled:!0,modifiers:["ctrl","meta"]},connecting:{router:{name:"orth",args:{padding:10}},connector:{name:"rounded",args:{radius:8}},snap:v.magnetism.enabled?{radius:v.magnetism.threshold||10}:!1,allowBlank:!1,allowLoop:!1,allowNode:!1,allowEdge:!1,highlight:!0,createEdge(){return t.createEdge({shape:"animated-edge",zIndex:0})},validateConnection({targetMagnet:q}){return!!q}}}),r.previewMode||t.use(new Gt.Selection({enabled:!0,movable:!0,rubberband:!0,showNodeSelectionBox:!1,showEdgeSelectionBox:!1,multiple:!0,pointerEvents:"none"})),v.guides.enabled&&t.use(new nn.Snapline({enabled:!0,sharp:!0,clean:!0})),!r.previewMode){const q=eo(Ie.SCADA_EDITOR_DATA);if(((P=q==null?void 0:q.cells)==null?void 0:P.length)>0)try{const X=q.cells.map(te=>{var se;return te.position&&typeof te.position=="object"&&(typeof te.position.x!="number"||typeof te.position.y!="number")&&(te.position={x:100,y:100}),(te.shape==="edge"||te.shape==="animated-edge")&&(te.router==="manhattan"||((se=te.router)==null?void 0:se.name)==="manhattan")&&(te.router={name:"orth",args:{padding:10}}),te});t.fromJSON({cells:X}),t.getEdges().forEach(te=>{var ne;const se=te.getData();(ne=se==null?void 0:se.animation)!=null&&ne.enabled&&p(te,se.animation)})}catch(X){console.error("恢复画布数据失败,清空缓存:",X),sessionStorage.removeItem(Ie.SCADA_EDITOR_DATA)}}t.on("selection:changed",({selected:q})=>{var te,se;const X=q?q.filter(ne=>ne.isNode()):[];if(x.value=X.length,q&&q.length>0){const ne=q[0];if(ne.isNode())E.value=ne,c.value=null;else if(ne.isEdge()){c.value=ne,E.value=null;const ie=ne.getAttrs();ne.data={...ne.data,originalAttrs:ie},ne.attr("line/stroke","#3b82f6")}}else{if(c.value&&((te=c.value.data)!=null&&te.originalAttrs)){const ne=c.value.data.originalAttrs;c.value.attr("line/stroke",((se=ne.line)==null?void 0:se.stroke)||"#10b981")}E.value=null,c.value=null}}),t.on("edge:click",({edge:q})=>{t.select(q)}),t.on("blank:click",()=>{c.value=null,E.value=null}),t.on("node:change:position",()=>{}),t.on("node:change:size",()=>{}),t.on("node:change:data",({node:q})=>{const X=q.getData();if(X.animation)if(X.animation.enabled===!0){const te={type:X.animation.type||"none",duration:X.animation.duration||1e3,loop:X.animation.loop!==!1};ke.startAnimation(q,te)}else ke.stopAnimation(q.id)}),t.on("edge:change:data",({edge:q})=>{const X=q.getData();X!=null&&X.animation&&p(q,X.animation)});const L=q=>{if(q.key==="Delete"&&t){if(E.value){const X=E.value.id;ke.stopAnimation(X),t.removeNode(X),E.value=null}else if(c.value){const X=c.value.id;t.removeEdge(X),c.value=null}}};document.addEventListener("keydown",L),e.onUnmounted(()=>{document.removeEventListener("keydown",L)})}),e.onUnmounted(()=>{if(t){ke.clearAll();const v={cells:t.toJSON().cells};ot(Ie.SCADA_EDITOR_DATA,v),t.dispose()}}),e.watch(()=>J.getConfig(),v=>{var _;if(!t)return;v.background.image?t.drawBackground({color:v.background.color||"#1e293b",image:v.background.image,size:v.background.size||"cover",repeat:v.background.repeat||"no-repeat",position:"center"}):t.drawBackground({color:v.background.color||"#1e293b"});const D=(_=l.value)==null?void 0:_.containerRef;D&&(D.style.transform=`scale(${v.zoom.scale})`,D.style.transformOrigin="center center",t.resize(v.size.width,v.size.height),D.style.width=`${v.size.width}px`,D.style.height=`${v.size.height}px`),v.grid.enabled?(t.drawGrid({type:v.grid.type||"dot",args:{color:v.grid.color||"#475569",thickness:1}}),t.showGrid()):t.hideGrid(),v.grid.enabled&&v.grid.size&&t.setGridSize(v.grid.size),t.translate(v.offset.x,v.offset.y)},{deep:!0});const i=e.ref({}),m=(v,D)=>(i.value[v]||(i.value[v]=0),i.value[v]++,`${D}_${i.value[v]}`),u=v=>{var P,q,X,te;if(!t)return;const D=Pe.getComponent(v);if(!D){console.error(`未找到组件配置: ${v}`);return}const _=m(v,D.metadata.name),F={enabled:!1,type:"none",duration:1e3,loop:!0},H=ao(50,50,400,300),L={x:H.x,y:H.y,shape:D.shape,width:D.width,height:D.height,label:D.label,attrs:D.attrs,ports:D.ports,data:{...D.data,componentType:v,componentName:_,props:D.props,animation:F,originalStroke:((q=(P=D.attrs)==null?void 0:P.body)==null?void 0:q.stroke)||"#2563eb",originalStrokeWidth:((te=(X=D.attrs)==null?void 0:X.body)==null?void 0:te.strokeWidth)||2}},G=t.addNode(L);t.cleanSelection(),t.select(G)},y=v=>{if(E.value&&(v.attrs&&Object.keys(v.attrs).forEach(D=>{const _=v.attrs[D];typeof _=="object"?Object.keys(_).forEach(F=>{E.value.attr(`${D}/${F}`,_[F])}):E.value.attr(D,_)}),v.position&&(typeof v.position.x=="number"&&typeof v.position.y=="number"?E.value.setPosition(v.position):console.error("position 数据格式错误:",v.position)),v.size&&(typeof v.size.width=="number"&&typeof v.size.height=="number"?E.value.setSize(v.size):console.error("size 数据格式错误:",v.size)),v.data)){const D={...v.data};delete D.position,delete D.size,E.value.store.set("data",D)}},k=()=>{if(!E.value||!t)return;const v=E.value.id;ke.stopAnimation(v),t.removeNode(v),E.value=null},V=v=>{if(c.value){if(v.attrs){Object.keys(v.attrs).forEach(_=>{const F=v.attrs[_];typeof F=="object"?Object.keys(F).forEach(H=>{var L,G;c.value.attr(`${_}/${H}`,F[H]),(G=(L=c.value.data)==null?void 0:L.originalAttrs)!=null&&G[_]&&(c.value.data.originalAttrs[_][H]=F[H])}):c.value.attr(_,F)});const D=c.value.getAttrs();c.value.data={...c.value.data,originalAttrs:D},c.value.attr("line/stroke","#3b82f6")}v.router&&c.value.setRouter(v.router),v.connector&&c.value.setConnector(v.connector),v.animation&&p(c.value,v.animation),v.data&&c.value.setData({...c.value.data,...v.data})}},d=()=>{!c.value||!t||(t.removeEdge(c.value.id),c.value=null)},p=(v,D)=>{if(!v||typeof v.attr!="function"){console.warn("applyEdgeAnimation: edge 对象无效",v);return}if(!D||!D.enabled){v.attr("line/strokeDasharray",void 0),typeof v.removeAttr=="function"&&v.removeAttr("line/class"),v.attr("circle",void 0),typeof v.stopTransition=="function"&&v.stopTransition("attrs/circle/atConnectionRatio");return}const _=D.duration||2e3;v.attr("circle",{r:4,atConnectionRatio:0,fill:{type:"radialGradient",stops:[{offset:"0%",color:"#FFF"},{offset:"100%",color:v.attr("line/stroke")||"#10b981"}]},stroke:v.attr("line/stroke")||"#10b981",strokeWidth:1});const F=()=>{v.attr("circle/atConnectionRatio",0,{silent:!0}),v.transition("attrs/circle/atConnectionRatio",1,{delay:0,duration:_,timing:"linear",complete:()=>{F()}})};F()},f=()=>{t&&confirm("确定要清空画布吗?")&&(ke.clearAll(),t.clearCells(),E.value=null,to(Ie.SCADA_EDITOR_DATA))},C=()=>{if(!t)return;const v=J.getConfig().zoom.scale,D=Math.min(5,v+.1);J.setZoom(D)},b=()=>{if(!t)return;const v=J.getConfig().zoom.scale,D=Math.max(.1,v-.1);J.setZoom(D)},A=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.min(...v.map(_=>_.getPosition().x));v.forEach(_=>{_.setPosition({x:D,y:_.getPosition().y})})},$=()=>{if(!t)return;const v=t.getSelectedCells().filter(F=>F.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=v.map(F=>F.getPosition().x+F.getSize().width/2),_=D.reduce((F,H)=>F+H,0)/D.length;v.forEach(F=>{const H=_-F.getSize().width/2;F.setPosition({x:H,y:F.getPosition().y})})},S=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.max(...v.map(_=>_.getPosition().x+_.getSize().width));v.forEach(_=>{const F=D-_.getSize().width;_.setPosition({x:F,y:_.getPosition().y})})},B=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.min(...v.map(_=>_.getPosition().y));v.forEach(_=>{_.setPosition({x:_.getPosition().x,y:D})})},N=()=>{if(!t)return;const v=t.getSelectedCells().filter(F=>F.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=v.map(F=>F.getPosition().y+F.getSize().height/2),_=D.reduce((F,H)=>F+H,0)/D.length;v.forEach(F=>{const H=_-F.getSize().height/2;F.setPosition({x:F.getPosition().x,y:H})})},w=()=>{if(!t)return;const v=t.getSelectedCells().filter(_=>_.isNode());if(v.length<2){le("请选择至少两个节点","warning");return}const D=Math.max(...v.map(_=>_.getPosition().y+_.getSize().height));v.forEach(_=>{const F=D-_.getSize().height;_.setPosition({x:_.getPosition().x,y:F})})},I=()=>{if(!t)return;const v=t.getSelectedCells().filter(G=>G.isNode());if(v.length<3){le("请选择至少三个节点","warning");return}const D=v.sort((G,P)=>G.getPosition().x-P.getPosition().x),_=D[0],L=(D[D.length-1].getPosition().x-_.getPosition().x)/(D.length-1);D.forEach((G,P)=>{if(P===0||P===D.length-1)return;const q=_.getPosition().x+L*P;G.setPosition({x:q,y:G.getPosition().y})})},R=()=>{if(!t)return;const v=t.getSelectedCells().filter(G=>G.isNode());if(v.length<3){le("请选择至少三个节点","warning");return}const D=v.sort((G,P)=>G.getPosition().y-P.getPosition().y),_=D[0],L=(D[D.length-1].getPosition().y-_.getPosition().y)/(D.length-1);D.forEach((G,P)=>{if(P===0||P===D.length-1)return;const q=_.getPosition().y+L*P;G.setPosition({x:G.getPosition().x,y:q})})},O=async()=>{if(!t){le("画布未初始化","error");return}try{if(console.log("[ScadaCanvas] handleSave 被调用"),console.log("[ScadaCanvas] props.onSave:",r.onSave),r.onSave){console.log("[ScadaCanvas] 调用自定义 onSave 回调"),await r.onSave(),console.log("[ScadaCanvas] 自定义 onSave 回调执行完成");return}console.log("[ScadaCanvas] 没有自定义回调,执行默认下载");const v={version:"1.0.0",timestamp:new Date().toISOString(),config:{size:J.getConfig().size,background:J.getConfig().background,grid:J.getConfig().grid,guides:J.getConfig().guides,magnetism:J.getConfig().magnetism,zoom:J.getConfig().zoom},cells:t.toJSON().cells},D=new Blob([JSON.stringify(v,null,2)],{type:"application/json"}),_=URL.createObjectURL(D),F=document.createElement("a"),H=`scada-canvas-${new Date().getTime()}.json`;F.href=_,F.download=H,F.click(),URL.revokeObjectURL(_),le("保存成功","success")}catch(v){console.error("保存失败",v),le("保存失败,请查看控制台","error")}},j=()=>{s.value&&s.value.click()},Z=v=>{var H;const _=(H=v.target.files)==null?void 0:H[0];if(!_){le("请选择文件","error");return}const F=new FileReader;F.onload=L=>{var G;try{const P=JSON.parse((G=L.target)==null?void 0:G.result);if(!P.cells){le("无效的JSON文件格式","error");return}if(!confirm("导入将清空当前画布,是否继续?"))return;if(t){if(t.clearCells(),t.fromJSON({cells:P.cells}),t.getEdges().forEach(q=>{var te;const X=q.getData();(te=X==null?void 0:X.animation)!=null&&te.enabled&&p(q,X.animation)}),P.config&&J.updateConfig(P.config),P.workflows&&Array.isArray(P.workflows)&&P.workflows.length>0)try{const q=localStorage.getItem("saved-workflows"),X=q?JSON.parse(q):[];let te=0,se=0;P.workflows.forEach(ne=>{const ie=X.findIndex(Ee=>Ee.id===ne.id);ie>=0?(X[ie]={...ne,updatedAt:Date.now()},se++):(X.push(ne),te++)}),localStorage.setItem("saved-workflows",JSON.stringify(X)),le(`导入成功 画布已加载,流程: 新增${te}个,更新${se}个`,"success")}catch(q){console.error("导入流程数据失败:",q),le("画布导入成功, 但流程数据导入失败","warning")}else le("导入成功","success");s.value&&(s.value.value="")}}catch(P){console.error("导入失败",P),le("导入失败,JSON格式错误","error"),s.value&&(s.value.value="")}},F.readAsText(_)},ee=()=>{if(console.log("🎬 [ScadaCanvas] handlePreview 被调用"),!t){console.error("⚠️ [ScadaCanvas] graph 不存在");return}const v={cells:t.toJSON().cells,config:{width:J.getConfig().size.width,height:J.getConfig().size.height,background:J.getConfig().background,grid:J.getConfig().grid}};ot(Ie.SCADA_PREVIEW_DATA,v),console.log("✅ [ScadaCanvas] 数据已保存到 sessionStorage"),console.log("📤 [ScadaCanvas] 即将触发 preview 事件"),n("preview"),console.log("✅ [ScadaCanvas] preview 事件已触发")},ae=()=>{a.value=!0},oe=()=>{if(!t){le("画布未初始化","error");return}try{const v={version:"1.0.0",timestamp:at(rt()),config:{size:J.getConfig().size,background:J.getConfig().background,grid:J.getConfig().grid,guides:J.getConfig().guides,magnetism:J.getConfig().magnetism,zoom:J.getConfig().zoom},cells:t.toJSON().cells,nodes:t.getNodes().map(F=>({id:F.id,type:F.shape,position:F.getPosition(),size:F.getSize(),label:F.attr("label/text"),data:F.getData()})),edges:t.getEdges().map(F=>({id:F.id,source:F.getSourceCellId(),target:F.getTargetCellId()})),workflows:[]},D=new Set;if(t.getNodes().forEach(F=>{const H=F.getData();H!=null&&H.events&&Array.isArray(H.events)&&H.events.forEach(L=>{var G;L.action==="callProcess"&&((G=L.params)!=null&&G.processId)&&D.add(L.params.processId)})}),D.size>0)try{const F=localStorage.getItem("saved-workflows");if(F){const H=JSON.parse(F);v.workflows=H.filter(L=>D.has(L.id))}}catch(F){console.error("加载流程数据失败:",F)}const _=oo(v,"scada-export");le(`已导出为 ${_}`,"success")}catch(v){console.error("导出失败",v),le("导出失败,请查看控制台","error")}};return h({save:O,import:j,export:oe,preview:ee,workflow:ae,zoomIn:C,zoomOut:b,clearAll:f,alignLeft:A,alignCenter:$,alignRight:S,alignTop:B,alignMiddle:N,alignBottom:w,distributeHorizontal:I,distributeVertical:R,addNode:u,updateNode:y,deleteNode:k,getSelectedNode:()=>E.value,selectNode:v=>{if(!t)return!1;const D=t.getCellById(v);return D?(t.select(D),!0):!1},clearSelection:()=>{t&&(t.unselect(t.getSelectedCells()),E.value=null)},getGraph:()=>t,getCanvasData:()=>t?{version:"1.0.0",timestamp:at(rt()),config:J.getConfig(),cells:t.toJSON().cells,nodes:t.getNodes().map(v=>({id:v.id,type:v.shape,position:v.getPosition(),size:v.getSize(),label:v.attr("label/text"),data:v.getData()})),edges:t.getEdges().map(v=>({id:v.id,source:v.getSourceCellId(),target:v.getTargetCellId()}))}:null,loadCanvasData:v=>{if(!t)return!1;try{return t.clearCells(),t.fromJSON({cells:v.cells}),v.config&&J.updateConfig(v.config),t.getEdges().forEach(D=>{var F;const _=D.getData();(F=_==null?void 0:_.animation)!=null&&F.enabled&&p(D,_.animation)}),!0}catch(D){return console.error("加载画布数据失败:",D),!1}},getAllNodes:()=>t?t.getNodes().map(v=>({id:v.id,type:v.shape,position:v.getPosition(),size:v.getSize(),label:v.attr("label/text"),data:v.getData()})):[],getNodeById:v=>{if(!t)return null;const D=t.getCellById(v);if(!D||!D.isNode())return null;const _=D;return{id:_.id,type:_.shape,position:_.getPosition(),size:_.getSize(),label:_.attr("label/text"),data:_.getData()}},getConfigManager:()=>J,updateCanvasConfig:v=>{J.updateConfig(v)},setZoom:v=>{J.setZoom(v)},setCanvasSize:(v,D)=>{J.updateSize({width:v,height:D})},setBackgroundColor:v=>{J.updateBackground({color:v})},getAnimationEngine:()=>ke}),(v,D)=>(e.openBlock(),e.createElementBlock("div",ap,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Ge,{key:0,"selected-nodes-count":x.value,onSave:O,onImport:j,onWorkflow:ae,onPreview:ee,onExport:oe,onZoomIn:C,onZoomOut:b,onClearAll:f,onAlignLeft:A,onAlignCenter:$,onAlignRight:S,onAlignTop:B,onAlignMiddle:N,onAlignBottom:w,onDistributeHorizontal:I,onDistributeVertical:R},null,8,["selected-nodes-count"])),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"fileInputRef",ref:s,type:"file",accept:".json",style:{display:"none"},onChange:Z},null,544)),e.createElementVNode("div",rp,[r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Xe,{key:0,onAddComponent:u})),e.createVNode(Kn,{ref_key:"canvasAreaRef",ref:l},null,512),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(lt,{key:1,ref:"propertyPanelRef","selected-node":E.value,"selected-edge":c.value,onUpdateNode:y,onDeleteNode:k,onUpdateEdge:V,onDeleteEdge:d},null,8,["selected-node","selected-edge"]))]),e.createVNode(Ed,{"auth-code":g.authCode,"custom-footer":g.customFooter},null,8,["auth-code","custom-footer"]),r.previewMode?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(op,{key:2,visible:a.value,"onUpdate:visible":D[0]||(D[0]=_=>a.value=_),"scada-graph":e.unref(t),onClose:D[1]||(D[1]=_=>a.value=!1)},null,8,["visible","scada-graph"]))]))}}),[["__scopeId","data-v-f7126c68"]]),lp={ScadaCanvas:Xo,PropertyPanel:lt,Header:Ge,ComponentLibrary:Xe,CanvasConfigPanel:Ye,BindingCard:Qe,EventCard:Je,BasicPropertiesTab:Ke,AttributeConfigDialog:et,CustomCodeDialog:tt},Yo=g=>{Object.entries(lp).forEach(([h,o])=>{g.component(h,o)})},sp={install:Yo,version:"1.0.0"};U.AttributeConfigDialog=et,U.BasicComponents=wn,U.BasicPropertiesTab=Ke,U.BindingCard=Qe,U.CanvasConfigPanel=Ye,U.ComponentLibrary=Xe,U.CustomCodeDialog=tt,U.EventCard=Je,U.Header=Ge,U.IoTComponents=Sn,U.PropertyPanel=lt,U.STORAGE_KEYS=Ie,U.ScadaCanvas=Xo,U.animationEngine=ke,U.canvasConfigItems=zn,U.canvasConfigManager=J,U.componentRegistry=Pe,U.default=sp,U.defaultCanvasConfig=je,U.exportToJSON=oo,U.formatTimestamp=at,U.generateEventId=no,U.generateNodeId=dc,U.generateUniqueId=nt,U.getCurrentTimestamp=rt,U.install=Yo,U.loadFromLocal=ic,U.loadFromSession=eo,U.randomPosition=ao,U.removeFromLocal=cc,U.removeFromSession=to,U.saveToLocal=sc,U.saveToSession=ot,U.showMessage=le,U.sizePresetMap=Re,Object.defineProperties(U,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|