@wenle_2523097/agri-map 1.0.0

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/dist/index.css ADDED
@@ -0,0 +1,1604 @@
1
+ @charset "UTF-8";
2
+ /**
3
+ * 样式主入口
4
+ * @description 统一导出所有样式
5
+ */
6
+ /**
7
+ * 编辑工具栏公共样式
8
+ * @description 通过 mixin 实现可复用的工具栏样式
9
+ */
10
+ /**
11
+ * 工具栏基础样式 mixin
12
+ * @param prefix - 类名前缀
13
+ * @param primary-color - 主色调(可选,默认 #1677ff)
14
+ */
15
+ /**
16
+ * 工具栏深色主题 mixin
17
+ * @param prefix - 类名前缀
18
+ * @param primary-color - 主色调(可选,默认 #66bb6a 深色主题绿色)
19
+ */
20
+ /**
21
+ * Leaflet 深色主题样式
22
+ * @description 为 Leaflet 地图组件提供深色主题支持
23
+ * 当 .leaflet-container 上设置 data-theme="dark" 时自动生效
24
+ */
25
+ .leaflet-container[data-theme=dark] .leaflet-popup-content-wrapper {
26
+ background: #1f1f1f !important;
27
+ color: #e0e0e0 !important;
28
+ box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4) !important;
29
+ }
30
+ .leaflet-container[data-theme=dark] .leaflet-popup-content {
31
+ color: #e0e0e0 !important;
32
+ }
33
+ .leaflet-container[data-theme=dark] .leaflet-popup-tip {
34
+ background: #1f1f1f !important;
35
+ box-shadow: none !important;
36
+ }
37
+ .leaflet-container[data-theme=dark] .leaflet-popup-close-button {
38
+ color: #a0a0a0 !important;
39
+ }
40
+ .leaflet-container[data-theme=dark] .leaflet-popup-close-button:hover {
41
+ color: #fff !important;
42
+ }
43
+ .leaflet-container[data-theme=dark] .leaflet-tooltip {
44
+ background: #1f1f1f !important;
45
+ color: #e0e0e0 !important;
46
+ border-color: #444 !important;
47
+ box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4) !important;
48
+ }
49
+ .leaflet-container[data-theme=dark] .leaflet-tooltip.leaflet-zoom-animated {
50
+ background-color: #1f1f1f !important;
51
+ }
52
+ .leaflet-container[data-theme=dark] .leaflet-tooltip .marker-popup {
53
+ background: transparent !important;
54
+ }
55
+ .leaflet-container[data-theme=dark] .leaflet-tooltip-left::before {
56
+ border-left-color: #1f1f1f !important;
57
+ }
58
+ .leaflet-container[data-theme=dark] .leaflet-tooltip-right::before {
59
+ border-right-color: #1f1f1f !important;
60
+ }
61
+ .leaflet-container[data-theme=dark] .leaflet-tooltip-top::before {
62
+ border-top-color: #1f1f1f !important;
63
+ }
64
+ .leaflet-container[data-theme=dark] .leaflet-tooltip-bottom::before {
65
+ border-bottom-color: #1f1f1f !important;
66
+ }
67
+ .leaflet-container[data-theme=dark] .leaflet-control-zoom {
68
+ background: #1f1f1f !important;
69
+ border-color: #333 !important;
70
+ }
71
+ .leaflet-container[data-theme=dark] .leaflet-control-zoom a {
72
+ background: #1f1f1f !important;
73
+ color: #e0e0e0 !important;
74
+ border-color: #333 !important;
75
+ }
76
+ .leaflet-container[data-theme=dark] .leaflet-control-zoom a:hover {
77
+ background: #3a3a3a !important;
78
+ }
79
+ .leaflet-container[data-theme=dark] .leaflet-control-attribution {
80
+ background: rgba(0, 0, 0, 0.5) !important;
81
+ color: #a0a0a0 !important;
82
+ }
83
+ .leaflet-container[data-theme=dark] .leaflet-control-attribution a {
84
+ color: #66bb6a !important;
85
+ }
86
+
87
+ [data-theme=dark] .leaflet-popup-content-wrapper {
88
+ background: #1f1f1f !important;
89
+ color: #e0e0e0 !important;
90
+ box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4) !important;
91
+ }
92
+ [data-theme=dark] .leaflet-popup-content {
93
+ color: #e0e0e0 !important;
94
+ }
95
+ [data-theme=dark] .leaflet-popup-tip {
96
+ background: #1f1f1f !important;
97
+ }
98
+ [data-theme=dark] .leaflet-popup-close-button {
99
+ color: #a0a0a0 !important;
100
+ }
101
+ [data-theme=dark] .leaflet-popup-close-button:hover {
102
+ color: #fff !important;
103
+ }
104
+ [data-theme=dark] .leaflet-tooltip {
105
+ background: #1f1f1f !important;
106
+ color: #e0e0e0 !important;
107
+ border-color: #444 !important;
108
+ box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4) !important;
109
+ }
110
+ [data-theme=dark] .leaflet-tooltip.leaflet-zoom-animated {
111
+ background-color: #1f1f1f !important;
112
+ }
113
+ [data-theme=dark] .leaflet-tooltip .marker-popup {
114
+ background: transparent !important;
115
+ }
116
+ [data-theme=dark] .leaflet-tooltip-left::before {
117
+ border-left-color: #1f1f1f !important;
118
+ }
119
+ [data-theme=dark] .leaflet-tooltip-right::before {
120
+ border-right-color: #1f1f1f !important;
121
+ }
122
+ [data-theme=dark] .leaflet-tooltip-top::before {
123
+ border-top-color: #1f1f1f !important;
124
+ }
125
+ [data-theme=dark] .leaflet-tooltip-bottom::before {
126
+ border-bottom-color: #1f1f1f !important;
127
+ }
128
+ [data-theme=dark] .leaflet-control-zoom {
129
+ background: #1f1f1f !important;
130
+ border-color: #333 !important;
131
+ }
132
+ [data-theme=dark] .leaflet-control-zoom a {
133
+ background: #1f1f1f !important;
134
+ color: #e0e0e0 !important;
135
+ border-color: #333 !important;
136
+ }
137
+ [data-theme=dark] .leaflet-control-zoom a:hover {
138
+ background: #3a3a3a !important;
139
+ }
140
+ [data-theme=dark] .leaflet-control-attribution {
141
+ background: rgba(0, 0, 0, 0.5) !important;
142
+ color: #a0a0a0 !important;
143
+ }
144
+ [data-theme=dark] .leaflet-control-attribution a {
145
+ color: #66bb6a !important;
146
+ }
147
+
148
+ /**
149
+ * 双向标尺样式 - L型布局
150
+ * 覆盖整个地图窗口,标尺贴边显示
151
+ */
152
+ /**
153
+ * 公共变量
154
+ * @description 定义全局可复用的 SCSS 变量
155
+ */
156
+ /**
157
+ * 双向标尺样式 - L型布局
158
+ * 覆盖整个地图窗口,标尺贴边显示
159
+ */
160
+ /**
161
+ * 公共 Mixins
162
+ * @description 定义全局可复用的 SCSS mixins
163
+ */
164
+ /**
165
+ * 主题感知背景色
166
+ * @param $property CSS 属性名
167
+ */
168
+ /**
169
+ * 控件基础样式
170
+ */
171
+ /**
172
+ * 文本截断
173
+ */
174
+ /**
175
+ * Flex 居中
176
+ */
177
+ /**
178
+ * 绝对定位填充
179
+ */
180
+ /**
181
+ * 清除默认按钮样式
182
+ */
183
+ .leaflet-control-dual-scale {
184
+ position: absolute;
185
+ top: 0;
186
+ left: 0;
187
+ right: 0;
188
+ bottom: 0;
189
+ width: 100%;
190
+ height: 100%;
191
+ background: transparent !important;
192
+ margin: 0 !important;
193
+ padding: 0;
194
+ pointer-events: none;
195
+ z-index: 500;
196
+ float: none;
197
+ clear: none;
198
+ border: none !important;
199
+ box-shadow: none !important;
200
+ outline: none !important;
201
+ --control-bg: rgba(255, 255, 255, 0.85);
202
+ --control-text: #333;
203
+ }
204
+
205
+ .leaflet-control-dual-scale:hover,
206
+ .leaflet-control-dual-scale:focus,
207
+ .leaflet-control-dual-scale:active {
208
+ background: transparent !important;
209
+ border: none !important;
210
+ box-shadow: none !important;
211
+ outline: none !important;
212
+ }
213
+
214
+ .scale {
215
+ position: absolute;
216
+ top: 10px;
217
+ left: 10px;
218
+ right: 0;
219
+ bottom: 0;
220
+ width: calc(100% - 20px);
221
+ height: calc(100% - 20px);
222
+ pointer-events: none;
223
+ --tick-interval: 50px;
224
+ --scale-color: rgba(51, 51, 51, 0.7);
225
+ }
226
+ .scale::before, .scale::after {
227
+ content: "";
228
+ position: absolute;
229
+ z-index: 501;
230
+ pointer-events: none;
231
+ }
232
+ .scale::before {
233
+ width: 5px;
234
+ height: 100%;
235
+ left: 0;
236
+ top: 0;
237
+ border-left: 2px solid var(--scale-color);
238
+ transform: rotateX(180deg);
239
+ background: repeating-linear-gradient(180deg, transparent, transparent var(--tick-interval), var(--scale-color), var(--scale-color) calc(var(--tick-interval) + 2px));
240
+ }
241
+ .scale::after {
242
+ width: 100%;
243
+ height: 5px;
244
+ bottom: 0px;
245
+ left: 0;
246
+ border-bottom: 2px solid var(--scale-color);
247
+ background: repeating-linear-gradient(90deg, transparent, transparent var(--tick-interval), var(--scale-color), var(--scale-color) calc(var(--tick-interval) + 2px));
248
+ }
249
+
250
+ .scale-text {
251
+ position: absolute;
252
+ bottom: 12px;
253
+ left: 12px;
254
+ z-index: 502;
255
+ background-color: var(--control-bg);
256
+ padding: 2px 8px;
257
+ color: var(--control-text);
258
+ font-size: 12px;
259
+ font-weight: 500;
260
+ border-radius: 3px;
261
+ pointer-events: none;
262
+ width: calc(var(--tick-interval) - 2px);
263
+ min-width: 58px !important;
264
+ text-align: center;
265
+ box-sizing: border-box;
266
+ }
267
+
268
+ /* 缩放控件 - 固定左下角 */
269
+ .zoom-control {
270
+ position: absolute;
271
+ z-index: 501;
272
+ display: inline-flex;
273
+ flex-direction: column;
274
+ pointer-events: none;
275
+ border-radius: 6px;
276
+ overflow: hidden;
277
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
278
+ background: transparent;
279
+ bottom: 50px;
280
+ left: 30px;
281
+ }
282
+
283
+ .zoom-control:hover {
284
+ background: transparent;
285
+ }
286
+
287
+ .zoom-btn {
288
+ width: 32px;
289
+ height: 32px;
290
+ border: none;
291
+ background: var(--control-bg);
292
+ background-color: var(--control-bg);
293
+ color: var(--control-text);
294
+ font-size: 20px;
295
+ font-weight: bold;
296
+ cursor: pointer;
297
+ display: flex;
298
+ align-items: center;
299
+ justify-content: center;
300
+ transition: background-color 0.2s ease;
301
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
302
+ pointer-events: auto;
303
+ box-shadow: none;
304
+ outline: none;
305
+ }
306
+
307
+ .zoom-btn:last-of-type {
308
+ border-bottom: none;
309
+ }
310
+
311
+ .zoom-btn:hover {
312
+ background: rgba(255, 255, 255, 0.95);
313
+ background-color: rgba(255, 255, 255, 0.95);
314
+ box-shadow: none;
315
+ outline: none;
316
+ }
317
+
318
+ .zoom-btn:focus {
319
+ box-shadow: none;
320
+ outline: none;
321
+ }
322
+
323
+ .zoom-level {
324
+ width: 32px;
325
+ height: 28px;
326
+ display: flex;
327
+ align-items: center;
328
+ justify-content: center;
329
+ background: var(--control-bg);
330
+ background-color: var(--control-bg);
331
+ color: var(--control-text);
332
+ font-size: 12px;
333
+ font-weight: 600;
334
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
335
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
336
+ }
337
+
338
+ /* 深色主题 */
339
+ .leaflet-control-dual-scale.dark {
340
+ --control-bg: rgba(0, 0, 0, 0.7);
341
+ --control-text: #fff;
342
+ }
343
+
344
+ .leaflet-control-dual-scale.dark .scale {
345
+ --scale-color: rgba(255, 255, 255, 0.7);
346
+ }
347
+
348
+ .leaflet-control-dual-scale.dark .scale::before,
349
+ .leaflet-control-dual-scale.dark .scale::after {
350
+ border-color: var(--scale-color);
351
+ }
352
+
353
+ .leaflet-control-dual-scale.dark .scale-text {
354
+ color: var(--control-text);
355
+ background-color: var(--control-bg);
356
+ }
357
+
358
+ .leaflet-control-dual-scale.dark .zoom-control {
359
+ background: transparent;
360
+ }
361
+
362
+ .leaflet-control-dual-scale.dark .zoom-btn {
363
+ background: var(--control-bg);
364
+ background-color: var(--control-bg);
365
+ color: var(--control-text);
366
+ border-bottom-color: rgba(255, 255, 255, 0.2);
367
+ box-shadow: none;
368
+ outline: none;
369
+ }
370
+
371
+ .leaflet-control-dual-scale.dark .zoom-btn:hover {
372
+ background: rgba(0, 0, 0, 0.85);
373
+ background-color: rgba(0, 0, 0, 0.85);
374
+ box-shadow: none;
375
+ outline: none;
376
+ }
377
+
378
+ .leaflet-control-dual-scale.dark .zoom-btn:focus {
379
+ box-shadow: none;
380
+ outline: none;
381
+ }
382
+
383
+ .leaflet-control-dual-scale.dark .zoom-level {
384
+ background: var(--control-bg);
385
+ background-color: var(--control-bg);
386
+ color: var(--control-text);
387
+ border-top-color: rgba(255, 255, 255, 0.2);
388
+ border-bottom-color: rgba(255, 255, 255, 0.2);
389
+ }
390
+
391
+ /**
392
+ * 双向标尺样式 - L型布局
393
+ * 覆盖整个地图窗口,标尺贴边显示
394
+ */
395
+ /**
396
+ * 样式主入口
397
+ * @description 统一导出所有样式
398
+ */
399
+ /**
400
+ * Irrigation 组件样式
401
+ */
402
+ .irrigation-line {
403
+ transition: stroke 0.2s;
404
+ outline: none !important;
405
+ }
406
+ .irrigation-line--selected {
407
+ stroke: #1677ff !important;
408
+ filter: drop-shadow(0 0 6px rgba(22, 119, 255, 0.5));
409
+ }
410
+ .irrigation-line--editing {
411
+ stroke: #1677ff !important;
412
+ filter: drop-shadow(0 0 8px rgba(22, 119, 255, 0.7));
413
+ }
414
+ .irrigation-line--preview {
415
+ stroke-dasharray: 10, 10;
416
+ animation: irrigation-dash 1s linear infinite;
417
+ }
418
+
419
+ .leaflet-container .irrigation-interactive {
420
+ outline: none !important;
421
+ }
422
+ .leaflet-container path.irrigation-interactive {
423
+ outline: none !important;
424
+ }
425
+
426
+ @keyframes irrigation-dash {
427
+ to {
428
+ stroke-dashoffset: -20;
429
+ }
430
+ }
431
+ .irrigation-distance-label-wrapper {
432
+ background: transparent !important;
433
+ border: none !important;
434
+ }
435
+
436
+ .irrigation-distance-label {
437
+ background: transparent;
438
+ color: #fff;
439
+ font-size: 14px;
440
+ font-weight: 600;
441
+ padding: 0;
442
+ white-space: nowrap;
443
+ pointer-events: none;
444
+ text-shadow: -1px -1px 0 #1E90FF, 1px -1px 0 #1E90FF, -1px 1px 0 #1E90FF, 1px 1px 0 #1E90FF, 0 0 3px rgba(30, 144, 255, 0.5);
445
+ }
446
+
447
+ /* 进水口/出水口标记样式 */
448
+ .irrigation-port-wrapper {
449
+ background: transparent !important;
450
+ border: none !important;
451
+ }
452
+
453
+ .irrigation-port {
454
+ position: relative;
455
+ display: flex;
456
+ flex-direction: column;
457
+ align-items: center;
458
+ transition: transform 0.1s;
459
+ }
460
+ .irrigation-port svg {
461
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
462
+ transition: transform 0.2s;
463
+ }
464
+ .irrigation-port:hover svg {
465
+ transform: scale(1.15);
466
+ }
467
+ .irrigation-port__label {
468
+ position: absolute;
469
+ top: calc(100% + 4px);
470
+ left: 50%;
471
+ margin-top: 4px;
472
+ padding: 2px 8px;
473
+ font-size: 12px;
474
+ font-weight: 500;
475
+ color: #fff;
476
+ background: rgba(0, 0, 0, 0.75);
477
+ border-radius: 4px;
478
+ white-space: nowrap;
479
+ opacity: 0;
480
+ transition: opacity 0.2s;
481
+ pointer-events: none;
482
+ z-index: 10;
483
+ }
484
+ .irrigation-port:hover .irrigation-port__label {
485
+ opacity: 1;
486
+ }
487
+
488
+ .irrigation-port--inlet svg {
489
+ /* 进水口蓝色 - 颜色已在 SVG 中设置 */
490
+ filter: drop-shadow(0 0 4px rgba(30, 144, 255, 0.5));
491
+ }
492
+
493
+ .irrigation-port--outlet svg {
494
+ /* 出水口绿色 - 颜色已在 SVG 中设置 */
495
+ filter: drop-shadow(0 0 4px rgba(82, 196, 26, 0.5));
496
+ }
497
+
498
+ .irrigation-edit-toolbar {
499
+ position: absolute;
500
+ bottom: 20px;
501
+ left: 50%;
502
+ transform: translateX(-50%);
503
+ z-index: 1000;
504
+ padding: 0;
505
+ border-radius: 8px;
506
+ display: flex;
507
+ align-items: center;
508
+ gap: 12px;
509
+ }
510
+ .irrigation-edit-toolbar__button-group {
511
+ display: inline-flex;
512
+ border-radius: 6px;
513
+ overflow: hidden;
514
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
515
+ background: #fff;
516
+ }
517
+ .irrigation-edit-toolbar__button {
518
+ display: inline-flex;
519
+ align-items: center;
520
+ justify-content: center;
521
+ gap: 6px;
522
+ padding: 6px 14px;
523
+ font-size: 14px;
524
+ border: none;
525
+ border-right: 1px solid #e5e5e5;
526
+ background: transparent;
527
+ cursor: pointer;
528
+ transition: all 0.2s;
529
+ color: rgba(0, 0, 0, 0.88);
530
+ margin: 0;
531
+ }
532
+ .irrigation-edit-toolbar__button svg {
533
+ width: 16px;
534
+ height: 16px;
535
+ flex-shrink: 0;
536
+ }
537
+ .irrigation-edit-toolbar__button:last-child {
538
+ border-right: none;
539
+ }
540
+ .irrigation-edit-toolbar__button:hover:not(:disabled) {
541
+ color: #1E90FF;
542
+ background: rgba(30, 144, 255, 0.04);
543
+ }
544
+ .irrigation-edit-toolbar__button:disabled {
545
+ background: transparent;
546
+ color: rgba(0, 0, 0, 0.25);
547
+ cursor: not-allowed;
548
+ }
549
+ .irrigation-edit-toolbar__button:disabled svg {
550
+ opacity: 0.5;
551
+ }
552
+ .irrigation-edit-toolbar__button--primary {
553
+ background: #1E90FF;
554
+ color: #fff;
555
+ }
556
+ .irrigation-edit-toolbar__button--primary:hover:not(:disabled) {
557
+ background: #47a4ff;
558
+ }
559
+ .irrigation-edit-toolbar__button--danger {
560
+ color: #ff4d4f;
561
+ }
562
+ .irrigation-edit-toolbar__button--danger:hover:not(:disabled) {
563
+ background: #ff4d4f;
564
+ color: #fff;
565
+ }
566
+ .irrigation-edit-toolbar__button--disabled {
567
+ opacity: 0.5;
568
+ cursor: not-allowed;
569
+ }
570
+ .irrigation-edit-toolbar__button--active {
571
+ background: #1E90FF;
572
+ border-color: #1E90FF;
573
+ color: #fff;
574
+ }
575
+ .irrigation-edit-toolbar__icon {
576
+ display: inline-flex;
577
+ align-items: center;
578
+ justify-content: center;
579
+ width: 16px;
580
+ height: 16px;
581
+ }
582
+ .irrigation-edit-toolbar__label {
583
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
584
+ }
585
+
586
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button-group,
587
+ [data-theme=dark] .irrigation-edit-toolbar__button-group {
588
+ background: #1f1f1f;
589
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
590
+ }
591
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button,
592
+ [data-theme=dark] .irrigation-edit-toolbar__button {
593
+ color: #e0e0e0;
594
+ border-right-color: #333;
595
+ }
596
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button:hover:not(:disabled),
597
+ [data-theme=dark] .irrigation-edit-toolbar__button:hover:not(:disabled) {
598
+ color: #1E90FF;
599
+ background: rgba(30, 144, 255, 0.1);
600
+ }
601
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button:disabled,
602
+ [data-theme=dark] .irrigation-edit-toolbar__button:disabled {
603
+ color: rgba(255, 255, 255, 0.3);
604
+ }
605
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button--primary,
606
+ [data-theme=dark] .irrigation-edit-toolbar__button--primary {
607
+ background: #1E90FF;
608
+ color: #1a1a1a;
609
+ }
610
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button--primary:hover:not(:disabled),
611
+ [data-theme=dark] .irrigation-edit-toolbar__button--primary:hover:not(:disabled) {
612
+ background: #47a4ff;
613
+ }
614
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button--danger,
615
+ [data-theme=dark] .irrigation-edit-toolbar__button--danger {
616
+ color: #ff7875;
617
+ }
618
+ .leaflet-container[data-theme=dark] .irrigation-edit-toolbar__button--danger:hover:not(:disabled),
619
+ [data-theme=dark] .irrigation-edit-toolbar__button--danger:hover:not(:disabled) {
620
+ background: #ff4d4f;
621
+ color: #fff;
622
+ }
623
+
624
+ /**
625
+ * 双向标尺样式 - L型布局
626
+ * 覆盖整个地图窗口,标尺贴边显示
627
+ */
628
+ /**
629
+ * 样式主入口
630
+ * @description 统一导出所有样式
631
+ */
632
+ /**
633
+ * Marker 组件样式
634
+ * 包含图标动画效果
635
+ */
636
+ .marker-icon-wrapper {
637
+ background: transparent !important;
638
+ border: none !important;
639
+ }
640
+ .marker-icon-wrapper.marker-icon-wrapper--selected .marker-icon-inner {
641
+ filter: drop-shadow(0 0 8px rgba(24, 144, 255, 0.8));
642
+ }
643
+ .marker-icon-wrapper.marker-icon-wrapper--editing .marker-icon-inner {
644
+ filter: drop-shadow(0 0 10px rgba(22, 119, 255, 0.9));
645
+ }
646
+ .marker-icon-wrapper.marker-icon-wrapper--movable {
647
+ cursor: move;
648
+ }
649
+
650
+ .marker-icon-inner {
651
+ display: block;
652
+ background-size: 100% 2400%;
653
+ background-repeat: no-repeat;
654
+ background-position: center top;
655
+ }
656
+ .marker-icon-inner.icon-point {
657
+ background-image: url("./icon/marker/point.png");
658
+ }
659
+ .marker-icon-inner.icon-position {
660
+ background-image: url("./icon/marker/position.png");
661
+ }
662
+ .marker-icon-inner.icon-position-red {
663
+ background-image: url("./icon/marker/position-red.png");
664
+ }
665
+ .marker-icon-inner.icon-drone {
666
+ background-image: url("./icon/marker/drone.png");
667
+ }
668
+ .marker-icon-inner.icon-down {
669
+ background-image: url("./icon/marker/down.png");
670
+ }
671
+ .marker-icon-inner.icon-marker-red {
672
+ background: #e53935 !important;
673
+ background-size: 100% 100% !important;
674
+ border-radius: 50% 50% 50% 0;
675
+ transform: rotate(-45deg);
676
+ position: relative;
677
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35), inset 0 0 0 3px #ffffff;
678
+ }
679
+ .marker-icon-inner.icon-marker-red::after {
680
+ content: "";
681
+ position: absolute;
682
+ width: 14px;
683
+ height: 14px;
684
+ background: white;
685
+ border-radius: 50%;
686
+ top: 50%;
687
+ left: 50%;
688
+ transform: translate(-50%, -50%);
689
+ }
690
+ .marker-icon-inner.icon-marker-blue {
691
+ background: #1e88e5 !important;
692
+ background-size: 100% 100% !important;
693
+ border-radius: 50% 50% 50% 0;
694
+ transform: rotate(-45deg);
695
+ position: relative;
696
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35), inset 0 0 0 3px #ffffff;
697
+ }
698
+ .marker-icon-inner.icon-marker-blue::after {
699
+ content: "";
700
+ position: absolute;
701
+ width: 14px;
702
+ height: 14px;
703
+ background: white;
704
+ border-radius: 50%;
705
+ top: 50%;
706
+ left: 50%;
707
+ transform: translate(-50%, -50%);
708
+ }
709
+ .marker-icon-inner.icon-marker-green {
710
+ background: #43a047 !important;
711
+ background-size: 100% 100% !important;
712
+ border-radius: 50% 50% 50% 0;
713
+ transform: rotate(-45deg);
714
+ position: relative;
715
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35), inset 0 0 0 3px #ffffff;
716
+ }
717
+ .marker-icon-inner.icon-marker-green::after {
718
+ content: "";
719
+ position: absolute;
720
+ width: 14px;
721
+ height: 14px;
722
+ background: white;
723
+ border-radius: 50%;
724
+ top: 50%;
725
+ left: 50%;
726
+ transform: translate(-50%, -50%);
727
+ }
728
+ .marker-icon-inner.icon-marker-orange {
729
+ background: #fb8c00 !important;
730
+ background-size: 100% 100% !important;
731
+ border-radius: 50% 50% 50% 0;
732
+ transform: rotate(-45deg);
733
+ position: relative;
734
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35), inset 0 0 0 3px #ffffff;
735
+ }
736
+ .marker-icon-inner.icon-marker-orange::after {
737
+ content: "";
738
+ position: absolute;
739
+ width: 14px;
740
+ height: 14px;
741
+ background: white;
742
+ border-radius: 50%;
743
+ top: 50%;
744
+ left: 50%;
745
+ transform: translate(-50%, -50%);
746
+ }
747
+ .marker-icon-inner.icon-marker-yellow {
748
+ background: #fdd835 !important;
749
+ background-size: 100% 100% !important;
750
+ border-radius: 50% 50% 50% 0;
751
+ transform: rotate(-45deg);
752
+ position: relative;
753
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3), inset 0 0 0 3px #333333;
754
+ }
755
+ .marker-icon-inner.icon-marker-yellow::after {
756
+ content: "";
757
+ position: absolute;
758
+ width: 14px;
759
+ height: 14px;
760
+ background: #333333;
761
+ border-radius: 50%;
762
+ top: 50%;
763
+ left: 50%;
764
+ transform: translate(-50%, -50%);
765
+ }
766
+ .marker-icon-inner.animated {
767
+ background-size: 100% 2400%;
768
+ animation-name: play;
769
+ animation-duration: 1s;
770
+ animation-iteration-count: infinite;
771
+ background-position: 0px 0px;
772
+ }
773
+
774
+ @keyframes marker-pulse {
775
+ 0%, 100% {
776
+ transform: rotate(-45deg) scale(1);
777
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35), inset 0 0 0 3px currentColor;
778
+ }
779
+ 50% {
780
+ transform: rotate(-45deg) scale(1.15);
781
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.45), inset 0 0 0 3px currentColor;
782
+ }
783
+ }
784
+ .marker-icon-inner.icon-marker-red.animated,
785
+ .marker-icon-inner.icon-marker-blue.animated,
786
+ .marker-icon-inner.icon-marker-green.animated,
787
+ .marker-icon-inner.icon-marker-orange.animated,
788
+ .marker-icon-inner.icon-marker-yellow.animated {
789
+ animation: marker-pulse 1.5s ease-in-out infinite;
790
+ }
791
+
792
+ .marker-icon-inner.marker-custom-icon.animated,
793
+ .marker-icon-inner.marker-svg-icon.animated {
794
+ animation: custom-icon-bounce 1.5s ease-in-out infinite;
795
+ }
796
+
797
+ @keyframes custom-icon-bounce {
798
+ 0%, 100% {
799
+ transform: translateY(0);
800
+ }
801
+ 50% {
802
+ transform: translateY(-6px);
803
+ }
804
+ }
805
+ @keyframes marker-play {
806
+ from {
807
+ background-position: center top;
808
+ }
809
+ to {
810
+ background-position: center bottom;
811
+ }
812
+ }
813
+ @keyframes play {
814
+ 0% {
815
+ background-position: center top;
816
+ }
817
+ 100% {
818
+ background-position: center bottom;
819
+ }
820
+ }
821
+ .leaflet-marker-icon.animated-marker .marker-icon {
822
+ width: 42px;
823
+ height: 42px;
824
+ }
825
+
826
+ .marker-popup {
827
+ min-width: 120px;
828
+ }
829
+ .marker-popup strong {
830
+ font-size: 14px;
831
+ color: #333;
832
+ }
833
+ .marker-popup p {
834
+ margin: 8px 0 0;
835
+ font-size: 12px;
836
+ color: #666;
837
+ }
838
+
839
+ .marker-create-mode {
840
+ cursor: crosshair !important;
841
+ }
842
+
843
+ .marker-icon-wrapper--temp {
844
+ cursor: move;
845
+ }
846
+ .marker-icon-wrapper--temp:hover {
847
+ cursor: move;
848
+ }
849
+
850
+ .marker-edit-toolbar {
851
+ position: absolute;
852
+ bottom: 20px;
853
+ left: 50%;
854
+ transform: translateX(-50%);
855
+ z-index: 1000;
856
+ padding: 0;
857
+ border-radius: 8px;
858
+ display: flex;
859
+ align-items: center;
860
+ gap: 12px;
861
+ }
862
+ .marker-edit-toolbar__button-group {
863
+ display: inline-flex;
864
+ border-radius: 6px;
865
+ overflow: hidden;
866
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
867
+ background: #fff;
868
+ }
869
+ .marker-edit-toolbar__button {
870
+ display: inline-flex;
871
+ align-items: center;
872
+ justify-content: center;
873
+ gap: 6px;
874
+ padding: 6px 14px;
875
+ font-size: 14px;
876
+ border: none;
877
+ border-right: 1px solid #e5e5e5;
878
+ background: transparent;
879
+ cursor: pointer;
880
+ transition: all 0.2s;
881
+ color: rgba(0, 0, 0, 0.88);
882
+ margin: 0;
883
+ }
884
+ .marker-edit-toolbar__button svg {
885
+ width: 16px;
886
+ height: 16px;
887
+ flex-shrink: 0;
888
+ }
889
+ .marker-edit-toolbar__button:last-child {
890
+ border-right: none;
891
+ }
892
+ .marker-edit-toolbar__button:hover:not(:disabled) {
893
+ color: #1677ff;
894
+ background: rgba(22, 119, 255, 0.04);
895
+ }
896
+ .marker-edit-toolbar__button:disabled {
897
+ background: transparent;
898
+ color: rgba(0, 0, 0, 0.25);
899
+ cursor: not-allowed;
900
+ }
901
+ .marker-edit-toolbar__button:disabled svg {
902
+ opacity: 0.5;
903
+ }
904
+ .marker-edit-toolbar__button--primary {
905
+ background: #1677ff;
906
+ color: #fff;
907
+ }
908
+ .marker-edit-toolbar__button--primary:hover:not(:disabled) {
909
+ background: #3f8fff;
910
+ }
911
+ .marker-edit-toolbar__button--danger {
912
+ color: #ff4d4f;
913
+ }
914
+ .marker-edit-toolbar__button--danger:hover:not(:disabled) {
915
+ background: #ff4d4f;
916
+ color: #fff;
917
+ }
918
+ .marker-edit-toolbar__button--disabled {
919
+ opacity: 0.5;
920
+ cursor: not-allowed;
921
+ }
922
+ .marker-edit-toolbar__button--active {
923
+ background: #1677ff;
924
+ border-color: #1677ff;
925
+ color: #fff;
926
+ }
927
+ .marker-edit-toolbar__icon {
928
+ display: inline-flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ width: 16px;
932
+ height: 16px;
933
+ }
934
+ .marker-edit-toolbar__label {
935
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
936
+ }
937
+
938
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button-group,
939
+ [data-theme=dark] .marker-edit-toolbar__button-group {
940
+ background: #1f1f1f;
941
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
942
+ }
943
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button,
944
+ [data-theme=dark] .marker-edit-toolbar__button {
945
+ color: #e0e0e0;
946
+ border-right-color: #333;
947
+ }
948
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button:hover:not(:disabled),
949
+ [data-theme=dark] .marker-edit-toolbar__button:hover:not(:disabled) {
950
+ color: #66bb6a;
951
+ background: rgba(102, 187, 106, 0.1);
952
+ }
953
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button:disabled,
954
+ [data-theme=dark] .marker-edit-toolbar__button:disabled {
955
+ color: rgba(255, 255, 255, 0.3);
956
+ }
957
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button--primary,
958
+ [data-theme=dark] .marker-edit-toolbar__button--primary {
959
+ background: #66bb6a;
960
+ color: #1a1a1a;
961
+ }
962
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button--primary:hover:not(:disabled),
963
+ [data-theme=dark] .marker-edit-toolbar__button--primary:hover:not(:disabled) {
964
+ background: #82c886;
965
+ }
966
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button--danger,
967
+ [data-theme=dark] .marker-edit-toolbar__button--danger {
968
+ color: #ff7875;
969
+ }
970
+ .leaflet-container[data-theme=dark] .marker-edit-toolbar__button--danger:hover:not(:disabled),
971
+ [data-theme=dark] .marker-edit-toolbar__button--danger:hover:not(:disabled) {
972
+ background: #ff4d4f;
973
+ color: #fff;
974
+ }
975
+
976
+ .marker-icon-wrapper--movable {
977
+ cursor: move !important;
978
+ }
979
+ .marker-icon-wrapper--movable:hover {
980
+ filter: brightness(1.1);
981
+ }
982
+ .marker-icon-wrapper--movable:active {
983
+ filter: brightness(0.95);
984
+ }
985
+
986
+ .marker-icon-wrapper--editing {
987
+ filter: drop-shadow(0 0 8px rgba(22, 119, 255, 0.6));
988
+ }
989
+
990
+ [data-theme=dark] .marker-popup strong {
991
+ color: #e0e0e0;
992
+ }
993
+ [data-theme=dark] .marker-popup p {
994
+ color: #a0a0a0;
995
+ }
996
+ [data-theme=dark] .marker-icon-inner.icon-marker-red, [data-theme=dark] .marker-icon-inner.icon-marker-blue, [data-theme=dark] .marker-icon-inner.icon-marker-green, [data-theme=dark] .marker-icon-inner.icon-marker-orange {
997
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.5), inset 0 0 0 3px rgba(255, 255, 255, 0.9);
998
+ }
999
+ [data-theme=dark] .marker-icon-inner.icon-marker-yellow {
1000
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.5), inset 0 0 0 3px rgba(255, 255, 255, 0.9);
1001
+ }
1002
+ [data-theme=dark] .marker-icon-inner.icon-marker-yellow::after {
1003
+ background: rgba(255, 255, 255, 0.9);
1004
+ }
1005
+
1006
+ /**
1007
+ * 双向标尺样式 - L型布局
1008
+ * 覆盖整个地图窗口,标尺贴边显示
1009
+ */
1010
+ /**
1011
+ * Notification 组件样式
1012
+ */
1013
+ .notification-container {
1014
+ position: absolute;
1015
+ bottom: 20px;
1016
+ right: 20px;
1017
+ z-index: 1100;
1018
+ display: flex;
1019
+ flex-direction: column;
1020
+ gap: 12px;
1021
+ max-width: 360px;
1022
+ }
1023
+
1024
+ .notification {
1025
+ display: flex;
1026
+ align-items: flex-start;
1027
+ padding: 12px 16px;
1028
+ background: #fff;
1029
+ border-radius: 8px;
1030
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1031
+ animation: notification-slide-in 0.3s ease-out;
1032
+ position: relative;
1033
+ overflow: hidden;
1034
+ min-height: 64px;
1035
+ }
1036
+ .notification--closing {
1037
+ animation: notification-slide-out 0.3s ease-in forwards;
1038
+ }
1039
+ .notification--info .notification__icon {
1040
+ background: #e6f4ff;
1041
+ color: #1677ff;
1042
+ }
1043
+ .notification--success .notification__icon {
1044
+ background: #f6ffed;
1045
+ color: #52c41a;
1046
+ }
1047
+ .notification--warning .notification__icon {
1048
+ background: #fffbe6;
1049
+ color: #faad14;
1050
+ }
1051
+ .notification--error .notification__icon {
1052
+ background: #fff2f0;
1053
+ color: #ff4d4f;
1054
+ }
1055
+ .notification__icon {
1056
+ width: 20px;
1057
+ height: 20px;
1058
+ border-radius: 50%;
1059
+ display: flex;
1060
+ align-items: center;
1061
+ justify-content: center;
1062
+ font-size: 10px;
1063
+ font-weight: bold;
1064
+ flex-shrink: 0;
1065
+ margin-right: 10px;
1066
+ }
1067
+ .notification__content {
1068
+ flex: 1;
1069
+ font-size: 14px;
1070
+ color: rgba(0, 0, 0, 0.88);
1071
+ line-height: 1.5;
1072
+ word-break: break-word;
1073
+ display: flex;
1074
+ flex-direction: column;
1075
+ justify-content: center;
1076
+ min-height: 40px;
1077
+ }
1078
+ .notification__title {
1079
+ font-weight: 600;
1080
+ color: rgba(0, 0, 0, 0.95);
1081
+ margin-bottom: 4px;
1082
+ }
1083
+ .notification__message {
1084
+ color: rgba(0, 0, 0, 0.65);
1085
+ white-space: pre-wrap;
1086
+ }
1087
+
1088
+ @keyframes notification-slide-in {
1089
+ from {
1090
+ opacity: 0;
1091
+ transform: translateY(100%);
1092
+ }
1093
+ to {
1094
+ opacity: 1;
1095
+ transform: translateY(0);
1096
+ }
1097
+ }
1098
+ @keyframes notification-slide-out {
1099
+ from {
1100
+ opacity: 1;
1101
+ transform: translateY(0);
1102
+ }
1103
+ to {
1104
+ opacity: 0;
1105
+ transform: translateY(100%);
1106
+ }
1107
+ }
1108
+ .leaflet-container[data-theme=dark] .notification,
1109
+ [data-theme=dark] .notification {
1110
+ background: #1f1f1f;
1111
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
1112
+ }
1113
+ .leaflet-container[data-theme=dark] .notification--info .notification__icon,
1114
+ [data-theme=dark] .notification--info .notification__icon {
1115
+ background: rgba(22, 119, 255, 0.2);
1116
+ color: #69b1ff;
1117
+ }
1118
+ .leaflet-container[data-theme=dark] .notification--success .notification__icon,
1119
+ [data-theme=dark] .notification--success .notification__icon {
1120
+ background: rgba(82, 196, 26, 0.2);
1121
+ color: #95de64;
1122
+ }
1123
+ .leaflet-container[data-theme=dark] .notification--warning .notification__icon,
1124
+ [data-theme=dark] .notification--warning .notification__icon {
1125
+ background: rgba(250, 173, 20, 0.2);
1126
+ color: #ffc53d;
1127
+ }
1128
+ .leaflet-container[data-theme=dark] .notification--error .notification__icon,
1129
+ [data-theme=dark] .notification--error .notification__icon {
1130
+ background: rgba(255, 77, 79, 0.2);
1131
+ color: #ff7875;
1132
+ }
1133
+ .leaflet-container[data-theme=dark] .notification__content,
1134
+ [data-theme=dark] .notification__content {
1135
+ color: #e0e0e0;
1136
+ }
1137
+ .leaflet-container[data-theme=dark] .notification__title,
1138
+ [data-theme=dark] .notification__title {
1139
+ color: #f0f0f0;
1140
+ }
1141
+ .leaflet-container[data-theme=dark] .notification__message,
1142
+ [data-theme=dark] .notification__message {
1143
+ color: #a0a0a0;
1144
+ }
1145
+
1146
+ /**
1147
+ * 双向标尺样式 - L型布局
1148
+ * 覆盖整个地图窗口,标尺贴边显示
1149
+ */
1150
+ /**
1151
+ * 样式主入口
1152
+ * @description 统一导出所有样式
1153
+ */
1154
+ /**
1155
+ * PlotLayer 组件样式
1156
+ */
1157
+ .overlay-text {
1158
+ text-anchor: middle;
1159
+ dominant-baseline: middle;
1160
+ fill: black;
1161
+ font-weight: bold;
1162
+ font-family: Arial, sans-serif;
1163
+ stroke: white;
1164
+ stroke-width: 0.5;
1165
+ paint-order: stroke;
1166
+ text-shadow: -1px -1px 0 white, 1px -1px 0 white, -1px 1px 0 white, 1px 1px 0 white;
1167
+ transform-origin: center;
1168
+ }
1169
+
1170
+ .plot-edit-toolbar {
1171
+ position: absolute;
1172
+ bottom: 20px;
1173
+ left: 50%;
1174
+ transform: translateX(-50%);
1175
+ z-index: 1000;
1176
+ padding: 0;
1177
+ border-radius: 8px;
1178
+ display: flex;
1179
+ align-items: center;
1180
+ gap: 12px;
1181
+ }
1182
+ .plot-edit-toolbar__button-group {
1183
+ display: inline-flex;
1184
+ border-radius: 6px;
1185
+ overflow: hidden;
1186
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
1187
+ background: #fff;
1188
+ }
1189
+ .plot-edit-toolbar__button {
1190
+ display: inline-flex;
1191
+ align-items: center;
1192
+ justify-content: center;
1193
+ gap: 6px;
1194
+ padding: 6px 14px;
1195
+ font-size: 14px;
1196
+ border: none;
1197
+ border-right: 1px solid #e5e5e5;
1198
+ background: transparent;
1199
+ cursor: pointer;
1200
+ transition: all 0.2s;
1201
+ color: rgba(0, 0, 0, 0.88);
1202
+ margin: 0;
1203
+ }
1204
+ .plot-edit-toolbar__button svg {
1205
+ width: 16px;
1206
+ height: 16px;
1207
+ flex-shrink: 0;
1208
+ }
1209
+ .plot-edit-toolbar__button:last-child {
1210
+ border-right: none;
1211
+ }
1212
+ .plot-edit-toolbar__button:hover:not(:disabled) {
1213
+ color: #1677ff;
1214
+ background: rgba(22, 119, 255, 0.04);
1215
+ }
1216
+ .plot-edit-toolbar__button:disabled {
1217
+ background: transparent;
1218
+ color: rgba(0, 0, 0, 0.25);
1219
+ cursor: not-allowed;
1220
+ }
1221
+ .plot-edit-toolbar__button:disabled svg {
1222
+ opacity: 0.5;
1223
+ }
1224
+ .plot-edit-toolbar__button--primary {
1225
+ background: #1677ff;
1226
+ color: #fff;
1227
+ }
1228
+ .plot-edit-toolbar__button--primary:hover:not(:disabled) {
1229
+ background: #3f8fff;
1230
+ }
1231
+ .plot-edit-toolbar__button--danger {
1232
+ color: #ff4d4f;
1233
+ }
1234
+ .plot-edit-toolbar__button--danger:hover:not(:disabled) {
1235
+ background: #ff4d4f;
1236
+ color: #fff;
1237
+ }
1238
+ .plot-edit-toolbar__button--disabled {
1239
+ opacity: 0.5;
1240
+ cursor: not-allowed;
1241
+ }
1242
+ .plot-edit-toolbar__button--active {
1243
+ background: #1677ff;
1244
+ border-color: #1677ff;
1245
+ color: #fff;
1246
+ }
1247
+ .plot-edit-toolbar__icon {
1248
+ display: inline-flex;
1249
+ align-items: center;
1250
+ justify-content: center;
1251
+ width: 16px;
1252
+ height: 16px;
1253
+ }
1254
+ .plot-edit-toolbar__label {
1255
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
1256
+ }
1257
+
1258
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button-group,
1259
+ [data-theme=dark] .plot-edit-toolbar__button-group {
1260
+ background: #1f1f1f;
1261
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
1262
+ }
1263
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button,
1264
+ [data-theme=dark] .plot-edit-toolbar__button {
1265
+ color: #e0e0e0;
1266
+ border-right-color: #333;
1267
+ }
1268
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button:hover:not(:disabled),
1269
+ [data-theme=dark] .plot-edit-toolbar__button:hover:not(:disabled) {
1270
+ color: #66bb6a;
1271
+ background: rgba(102, 187, 106, 0.1);
1272
+ }
1273
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button:disabled,
1274
+ [data-theme=dark] .plot-edit-toolbar__button:disabled {
1275
+ color: rgba(255, 255, 255, 0.3);
1276
+ }
1277
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button--primary,
1278
+ [data-theme=dark] .plot-edit-toolbar__button--primary {
1279
+ background: #66bb6a;
1280
+ color: #1a1a1a;
1281
+ }
1282
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button--primary:hover:not(:disabled),
1283
+ [data-theme=dark] .plot-edit-toolbar__button--primary:hover:not(:disabled) {
1284
+ background: #82c886;
1285
+ }
1286
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button--danger,
1287
+ [data-theme=dark] .plot-edit-toolbar__button--danger {
1288
+ color: #ff7875;
1289
+ }
1290
+ .leaflet-container[data-theme=dark] .plot-edit-toolbar__button--danger:hover:not(:disabled),
1291
+ [data-theme=dark] .plot-edit-toolbar__button--danger:hover:not(:disabled) {
1292
+ background: #ff4d4f;
1293
+ color: #fff;
1294
+ }
1295
+
1296
+ .plot-polygon--movable {
1297
+ cursor: move !important;
1298
+ }
1299
+ .plot-polygon--movable:hover {
1300
+ filter: brightness(1.1);
1301
+ }
1302
+ .plot-polygon--movable:active {
1303
+ filter: brightness(0.95);
1304
+ }
1305
+
1306
+ /**
1307
+ * 双向标尺样式 - L型布局
1308
+ * 覆盖整个地图窗口,标尺贴边显示
1309
+ */
1310
+ /**
1311
+ * 样式主入口
1312
+ * @description 统一导出所有样式
1313
+ */
1314
+ /**
1315
+ * Road 组件样式
1316
+ */
1317
+ .road-line {
1318
+ transition: stroke 0.2s;
1319
+ outline: none !important;
1320
+ }
1321
+ .road-line--selected {
1322
+ stroke: #1677ff !important;
1323
+ filter: drop-shadow(0 0 6px rgba(22, 119, 255, 0.5));
1324
+ }
1325
+ .road-line--editing {
1326
+ stroke: #1677ff !important;
1327
+ filter: drop-shadow(0 0 8px rgba(22, 119, 255, 0.7));
1328
+ }
1329
+ .road-line--preview {
1330
+ stroke-dasharray: 10, 10;
1331
+ animation: road-dash 1s linear infinite;
1332
+ }
1333
+
1334
+ .leaflet-container .leaflet-interactive {
1335
+ outline: none !important;
1336
+ }
1337
+ .leaflet-container path.leaflet-interactive {
1338
+ outline: none !important;
1339
+ }
1340
+
1341
+ @keyframes road-dash {
1342
+ to {
1343
+ stroke-dashoffset: -20;
1344
+ }
1345
+ }
1346
+ .road-vertex-wrapper {
1347
+ background: transparent !important;
1348
+ border: none !important;
1349
+ }
1350
+
1351
+ .road-vertex {
1352
+ width: 12px;
1353
+ height: 12px;
1354
+ background: #1677ff;
1355
+ border: 2px solid #fff;
1356
+ border-radius: 50%;
1357
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
1358
+ cursor: move;
1359
+ transition: transform 0.15s, box-shadow 0.15s;
1360
+ }
1361
+ .road-vertex:hover {
1362
+ transform: scale(1.3);
1363
+ box-shadow: 0 3px 8px rgba(22, 119, 255, 0.5);
1364
+ }
1365
+ .road-vertex--temp {
1366
+ background: #52c41a;
1367
+ border-color: #fff;
1368
+ animation: road-vertex-pulse 1.5s ease-in-out infinite;
1369
+ }
1370
+
1371
+ @keyframes road-vertex-pulse {
1372
+ 0%, 100% {
1373
+ box-shadow: 0 0 0 0 rgba(82, 196, 26, 0.4);
1374
+ }
1375
+ 50% {
1376
+ box-shadow: 0 0 0 8px rgba(82, 196, 26, 0);
1377
+ }
1378
+ }
1379
+ .road-tooltip {
1380
+ min-width: 100px;
1381
+ }
1382
+ .road-tooltip strong {
1383
+ font-size: 14px;
1384
+ color: #333;
1385
+ display: block;
1386
+ }
1387
+ .road-tooltip span {
1388
+ font-size: 12px;
1389
+ color: #666;
1390
+ margin-top: 4px;
1391
+ display: block;
1392
+ }
1393
+
1394
+ .road-distance-label-wrapper {
1395
+ background: transparent !important;
1396
+ border: none !important;
1397
+ }
1398
+
1399
+ .road-distance-label {
1400
+ background: transparent;
1401
+ color: #fff;
1402
+ font-size: 14px;
1403
+ font-weight: 600;
1404
+ padding: 0;
1405
+ white-space: nowrap;
1406
+ pointer-events: none;
1407
+ text-shadow: -1px -1px 0 #333, 1px -1px 0 #333, -1px 1px 0 #333, 1px 1px 0 #333, 0 0 3px rgba(0, 0, 0, 0.5);
1408
+ }
1409
+
1410
+ .road-edit-toolbar {
1411
+ position: absolute;
1412
+ bottom: 20px;
1413
+ left: 50%;
1414
+ transform: translateX(-50%);
1415
+ z-index: 1000;
1416
+ padding: 0;
1417
+ border-radius: 8px;
1418
+ display: flex;
1419
+ align-items: center;
1420
+ gap: 12px;
1421
+ }
1422
+ .road-edit-toolbar__button-group {
1423
+ display: inline-flex;
1424
+ border-radius: 6px;
1425
+ overflow: hidden;
1426
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
1427
+ background: #fff;
1428
+ }
1429
+ .road-edit-toolbar__button {
1430
+ display: inline-flex;
1431
+ align-items: center;
1432
+ justify-content: center;
1433
+ gap: 6px;
1434
+ padding: 6px 14px;
1435
+ font-size: 14px;
1436
+ border: none;
1437
+ border-right: 1px solid #e5e5e5;
1438
+ background: transparent;
1439
+ cursor: pointer;
1440
+ transition: all 0.2s;
1441
+ color: rgba(0, 0, 0, 0.88);
1442
+ margin: 0;
1443
+ }
1444
+ .road-edit-toolbar__button svg {
1445
+ width: 16px;
1446
+ height: 16px;
1447
+ flex-shrink: 0;
1448
+ }
1449
+ .road-edit-toolbar__button:last-child {
1450
+ border-right: none;
1451
+ }
1452
+ .road-edit-toolbar__button:hover:not(:disabled) {
1453
+ color: #8B4513;
1454
+ background: rgba(139, 69, 19, 0.04);
1455
+ }
1456
+ .road-edit-toolbar__button:disabled {
1457
+ background: transparent;
1458
+ color: rgba(0, 0, 0, 0.25);
1459
+ cursor: not-allowed;
1460
+ }
1461
+ .road-edit-toolbar__button:disabled svg {
1462
+ opacity: 0.5;
1463
+ }
1464
+ .road-edit-toolbar__button--primary {
1465
+ background: #8B4513;
1466
+ color: #fff;
1467
+ }
1468
+ .road-edit-toolbar__button--primary:hover:not(:disabled) {
1469
+ background: #af5718;
1470
+ }
1471
+ .road-edit-toolbar__button--danger {
1472
+ color: #ff4d4f;
1473
+ }
1474
+ .road-edit-toolbar__button--danger:hover:not(:disabled) {
1475
+ background: #ff4d4f;
1476
+ color: #fff;
1477
+ }
1478
+ .road-edit-toolbar__button--disabled {
1479
+ opacity: 0.5;
1480
+ cursor: not-allowed;
1481
+ }
1482
+ .road-edit-toolbar__button--active {
1483
+ background: #8B4513;
1484
+ border-color: #8B4513;
1485
+ color: #fff;
1486
+ }
1487
+ .road-edit-toolbar__icon {
1488
+ display: inline-flex;
1489
+ align-items: center;
1490
+ justify-content: center;
1491
+ width: 16px;
1492
+ height: 16px;
1493
+ }
1494
+ .road-edit-toolbar__label {
1495
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
1496
+ }
1497
+
1498
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button-group,
1499
+ [data-theme=dark] .road-edit-toolbar__button-group {
1500
+ background: #1f1f1f;
1501
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
1502
+ }
1503
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button,
1504
+ [data-theme=dark] .road-edit-toolbar__button {
1505
+ color: #e0e0e0;
1506
+ border-right-color: #333;
1507
+ }
1508
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button:hover:not(:disabled),
1509
+ [data-theme=dark] .road-edit-toolbar__button:hover:not(:disabled) {
1510
+ color: #8B4513;
1511
+ background: rgba(139, 69, 19, 0.1);
1512
+ }
1513
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button:disabled,
1514
+ [data-theme=dark] .road-edit-toolbar__button:disabled {
1515
+ color: rgba(255, 255, 255, 0.3);
1516
+ }
1517
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button--primary,
1518
+ [data-theme=dark] .road-edit-toolbar__button--primary {
1519
+ background: #8B4513;
1520
+ color: #1a1a1a;
1521
+ }
1522
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button--primary:hover:not(:disabled),
1523
+ [data-theme=dark] .road-edit-toolbar__button--primary:hover:not(:disabled) {
1524
+ background: #af5718;
1525
+ }
1526
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button--danger,
1527
+ [data-theme=dark] .road-edit-toolbar__button--danger {
1528
+ color: #ff7875;
1529
+ }
1530
+ .leaflet-container[data-theme=dark] .road-edit-toolbar__button--danger:hover:not(:disabled),
1531
+ [data-theme=dark] .road-edit-toolbar__button--danger:hover:not(:disabled) {
1532
+ background: #ff4d4f;
1533
+ color: #fff;
1534
+ }
1535
+
1536
+ /**
1537
+ * 天地图图层样式
1538
+ * 使用 SVG 滤镜实现主题色切换
1539
+ */
1540
+ .leaflet-container.dark-theme {
1541
+ background-color: #1a2a3a !important;
1542
+ }
1543
+ .leaflet-container.dark-theme .leaflet-tile-pane,
1544
+ .leaflet-container.dark-theme .leaflet-objects-pane,
1545
+ .leaflet-container.dark-theme .leaflet-overlay-pane,
1546
+ .leaflet-container.dark-theme .leaflet-shadow-pane,
1547
+ .leaflet-container.dark-theme .leaflet-marker-pane,
1548
+ .leaflet-container.dark-theme .leaflet-tooltip-pane,
1549
+ .leaflet-container.dark-theme .leaflet-popup-pane,
1550
+ .leaflet-container.dark-theme .leaflet-map-pane {
1551
+ background-color: transparent;
1552
+ }
1553
+ .leaflet-container.dark-theme .leaflet-tile-pane {
1554
+ background-color: #1a2a3a !important;
1555
+ }
1556
+ .leaflet-container.dark-theme .leaflet-tile-container {
1557
+ background-color: #1a2a3a !important;
1558
+ }
1559
+ .leaflet-container.dark-theme .leaflet-layer {
1560
+ background-color: #1a2a3a !important;
1561
+ }
1562
+ .leaflet-container.dark-theme .leaflet-tile {
1563
+ filter: url("#tianditu-dark-filter");
1564
+ background-color: transparent !important;
1565
+ box-shadow: none !important;
1566
+ outline: none !important;
1567
+ border: none !important;
1568
+ }
1569
+ .leaflet-container.dark-theme .leaflet-zoom-animated {
1570
+ background-color: transparent !important;
1571
+ }
1572
+
1573
+ .tianditu-tile-pane--dark {
1574
+ background-color: #1a2a3a !important;
1575
+ }
1576
+ .tianditu-tile-pane--dark .leaflet-tile {
1577
+ filter: url("#tianditu-dark-filter");
1578
+ background-color: transparent !important;
1579
+ box-shadow: none !important;
1580
+ outline: none !important;
1581
+ border: none !important;
1582
+ }
1583
+
1584
+ .tianditu-tile-container--dark {
1585
+ background-color: #1a2a3a !important;
1586
+ }
1587
+ .tianditu-tile-container--dark .leaflet-tile {
1588
+ filter: url("#tianditu-dark-filter");
1589
+ background-color: transparent !important;
1590
+ }
1591
+
1592
+ .leaflet-control-attribution.leaflet-control {
1593
+ bottom: 12px;
1594
+ right: 10px;
1595
+ padding: 2px 10px;
1596
+ border-radius: 4px;
1597
+ }
1598
+ .leaflet-control-attribution.leaflet-control a:first-child {
1599
+ display: none;
1600
+ }
1601
+ .leaflet-control-attribution.leaflet-control a:first-child + span {
1602
+ display: none;
1603
+ }
1604
+ /*# sourceMappingURL=index.css.map */