fdb2 1.0.39 → 1.0.40

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.
Files changed (63) hide show
  1. package/README.md +2 -1
  2. package/dist/public/explorer.css +403 -380
  3. package/dist/public/explorer.js +1294 -737
  4. package/dist/public/index.js +242 -16
  5. package/dist/public/layout.js +1 -1
  6. package/dist/scripts/verify-db-support.cjs +239 -0
  7. package/dist/server/core/dialect.d.ts +9 -0
  8. package/dist/server/core/dialect.d.ts.map +1 -1
  9. package/dist/server/core/dialect.js +24 -9
  10. package/dist/server/core/dialect.js.map +1 -1
  11. package/dist/server/core/dialect.ts +29 -9
  12. package/dist/server/core/schema/__tests__/ddl-emitter.test.ts +7 -3
  13. package/dist/server/core/schema/ddl-emitter.d.ts.map +1 -1
  14. package/dist/server/core/schema/ddl-emitter.js +32 -12
  15. package/dist/server/core/schema/ddl-emitter.js.map +1 -1
  16. package/dist/server/core/schema/ddl-emitter.ts +34 -11
  17. package/dist/server/index.d.ts.map +1 -1
  18. package/dist/server/index.js +83 -6
  19. package/dist/server/index.js.map +1 -1
  20. package/dist/server/index.ts +87 -6
  21. package/dist/server/model/ddl-spec.d.ts +9 -0
  22. package/dist/server/model/ddl-spec.d.ts.map +1 -1
  23. package/dist/server/model/ddl-spec.ts +9 -0
  24. package/dist/server/service/connection.service.d.ts +8 -0
  25. package/dist/server/service/connection.service.d.ts.map +1 -1
  26. package/dist/server/service/connection.service.js +75 -17
  27. package/dist/server/service/connection.service.js.map +1 -1
  28. package/dist/server/service/connection.service.ts +74 -17
  29. package/dist/server/service/database/base.service.d.ts +45 -0
  30. package/dist/server/service/database/base.service.d.ts.map +1 -1
  31. package/dist/server/service/database/base.service.js +120 -7
  32. package/dist/server/service/database/base.service.js.map +1 -1
  33. package/dist/server/service/database/base.service.ts +143 -8
  34. package/dist/server/service/database/cockroachdb.service.d.ts +9 -0
  35. package/dist/server/service/database/cockroachdb.service.d.ts.map +1 -1
  36. package/dist/server/service/database/cockroachdb.service.js +67 -56
  37. package/dist/server/service/database/cockroachdb.service.js.map +1 -1
  38. package/dist/server/service/database/cockroachdb.service.ts +66 -57
  39. package/dist/server/service/database/database.service.d.ts +3 -221
  40. package/dist/server/service/database/database.service.d.ts.map +1 -1
  41. package/dist/server/service/database/database.service.js +66 -24
  42. package/dist/server/service/database/database.service.js.map +1 -1
  43. package/dist/server/service/database/database.service.ts +69 -23
  44. package/dist/server/service/database/mongodb.service.d.ts +58 -3
  45. package/dist/server/service/database/mongodb.service.d.ts.map +1 -1
  46. package/dist/server/service/database/mongodb.service.js +251 -54
  47. package/dist/server/service/database/mongodb.service.js.map +1 -1
  48. package/dist/server/service/database/mongodb.service.ts +275 -60
  49. package/dist/server/service/database/mssql.service.d.ts +8 -0
  50. package/dist/server/service/database/mssql.service.d.ts.map +1 -1
  51. package/dist/server/service/database/mssql.service.js +41 -36
  52. package/dist/server/service/database/mssql.service.js.map +1 -1
  53. package/dist/server/service/database/mssql.service.ts +45 -40
  54. package/dist/server/service/database/oracle.service.d.ts +24 -0
  55. package/dist/server/service/database/oracle.service.d.ts.map +1 -1
  56. package/dist/server/service/database/oracle.service.js +146 -106
  57. package/dist/server/service/database/oracle.service.js.map +1 -1
  58. package/dist/server/service/database/oracle.service.ts +145 -105
  59. package/dist/server/service/database/sqlite.service.js +1 -1
  60. package/dist/server/service/database/sqlite.service.js.map +1 -1
  61. package/dist/server/service/database/sqlite.service.ts +1 -1
  62. package/package.json +8 -8
  63. package/scripts/verify-db-support.cjs +239 -0
@@ -321,14 +321,14 @@
321
321
  }
322
322
  }
323
323
 
324
- .connection-detail[data-v-0f93f920] {
324
+ .connection-detail[data-v-c8b33172] {
325
325
  padding: 10px;
326
326
  display: flex;
327
327
  flex-direction: column;
328
328
  height: 100%;
329
329
  gap: 10px;
330
330
  }
331
- .connection-header[data-v-0f93f920] {
331
+ .connection-header[data-v-c8b33172] {
332
332
  display: flex;
333
333
  justify-content: space-between;
334
334
  align-items: center;
@@ -338,12 +338,12 @@
338
338
  border-radius: 6px;
339
339
  border: 1px solid var(--db-border);
340
340
  }
341
- .connection-info[data-v-0f93f920] {
341
+ .connection-info[data-v-c8b33172] {
342
342
  display: flex;
343
343
  align-items: center;
344
344
  gap: 12px;
345
345
  }
346
- .connection-avatar[data-v-0f93f920] {
346
+ .connection-avatar[data-v-c8b33172] {
347
347
  width: 34px;
348
348
  height: 34px;
349
349
  display: flex;
@@ -354,48 +354,48 @@
354
354
  border: 1px solid var(--db-border);
355
355
  flex-shrink: 0;
356
356
  }
357
- .db-logo[data-v-0f93f920] {
357
+ .db-logo[data-v-c8b33172] {
358
358
  font-size: 13px;
359
359
  font-weight: 700;
360
360
  letter-spacing: 0.02em;
361
361
  color: var(--db-gray-dark);
362
362
  }
363
- .db-mysql[data-v-0f93f920] {
363
+ .db-mysql[data-v-c8b33172] {
364
364
  background-color: #4CAF50;
365
365
  color: var(--db-on-accent);
366
366
  }
367
- .db-postgres[data-v-0f93f920] {
367
+ .db-postgres[data-v-c8b33172] {
368
368
  background-color: #336791;
369
369
  color: var(--db-on-accent);
370
370
  }
371
- .db-mssql[data-v-0f93f920] {
371
+ .db-mssql[data-v-c8b33172] {
372
372
  background-color: #0078d4;
373
373
  color: var(--db-on-accent);
374
374
  }
375
- .db-sqlite[data-v-0f93f920] {
375
+ .db-sqlite[data-v-c8b33172] {
376
376
  background-color: #003B57;
377
377
  color: var(--db-on-accent);
378
378
  }
379
- .db-oracle[data-v-0f93f920] {
379
+ .db-oracle[data-v-c8b33172] {
380
380
  background-color: #F80000;
381
381
  color: var(--db-on-accent);
382
382
  }
383
- .connection-meta[data-v-0f93f920] {
383
+ .connection-meta[data-v-c8b33172] {
384
384
  display: flex;
385
385
  flex-direction: column;
386
386
  gap: 4px;
387
387
  }
388
- .connection-name[data-v-0f93f920] {
388
+ .connection-name[data-v-c8b33172] {
389
389
  margin: 0;
390
390
  font-size: 15px;
391
391
  font-weight: 600;
392
392
  }
393
- .connection-type-info[data-v-0f93f920] {
393
+ .connection-type-info[data-v-c8b33172] {
394
394
  display: flex;
395
395
  align-items: center;
396
396
  gap: 8px;
397
397
  }
398
- .db-type[data-v-0f93f920] {
398
+ .db-type[data-v-c8b33172] {
399
399
  padding: 1px 7px;
400
400
  border-radius: 999px;
401
401
  background-color: var(--db-primary-bg);
@@ -403,30 +403,30 @@
403
403
  font-weight: 500;
404
404
  color: var(--db-primary-color);
405
405
  }
406
- .connection-status[data-v-0f93f920] {
406
+ .connection-status[data-v-c8b33172] {
407
407
  display: flex;
408
408
  align-items: center;
409
409
  gap: 6px;
410
410
  font-size: 12px;
411
411
  color: var(--db-text-muted);
412
412
  }
413
- .status-dot[data-v-0f93f920] {
413
+ .status-dot[data-v-c8b33172] {
414
414
  width: 7px;
415
415
  height: 7px;
416
416
  border-radius: 50%;
417
417
  background-color: var(--db-gray-dark);
418
418
  }
419
- .status-online .status-dot[data-v-0f93f920] {
419
+ .status-online .status-dot[data-v-c8b33172] {
420
420
  background-color: #28a745;
421
421
  }
422
- .status-offline .status-dot[data-v-0f93f920] {
422
+ .status-offline .status-dot[data-v-c8b33172] {
423
423
  background-color: #dc3545;
424
424
  }
425
- .status-testing .status-dot[data-v-0f93f920] {
425
+ .status-testing .status-dot[data-v-c8b33172] {
426
426
  background-color: #ffc107;
427
- animation: pulse-0f93f920 1s infinite;
427
+ animation: pulse-c8b33172 1s infinite;
428
428
  }
429
- @keyframes pulse-0f93f920 {
429
+ @keyframes pulse-c8b33172 {
430
430
  0%, 100% {
431
431
  opacity: 1;
432
432
  }
@@ -434,15 +434,15 @@
434
434
  opacity: 0.5;
435
435
  }
436
436
  }
437
- .connection-actions[data-v-0f93f920] {
437
+ .connection-actions[data-v-c8b33172] {
438
438
  display: flex;
439
439
  gap: 8px;
440
440
  }
441
- .connection-details-panel[data-v-0f93f920] {
441
+ .connection-details-panel[data-v-c8b33172] {
442
442
  margin-bottom: 0;
443
- animation: fadeIn-0f93f920 0.3s ease;
443
+ animation: fadeIn-c8b33172 0.3s ease;
444
444
  }
445
- .section-title[data-v-0f93f920] {
445
+ .section-title[data-v-c8b33172] {
446
446
  margin: 0 0 10px 0;
447
447
  font-size: 13px;
448
448
  font-weight: 600;
@@ -453,7 +453,7 @@
453
453
  padding-bottom: 6px;
454
454
  border-bottom: 1px solid var(--db-border);
455
455
  }
456
- @keyframes fadeIn-0f93f920 {
456
+ @keyframes fadeIn-c8b33172 {
457
457
  from {
458
458
  opacity: 0;
459
459
  transform: translateY(-10px);
@@ -463,17 +463,17 @@ to {
463
463
  transform: translateY(0);
464
464
  }
465
465
  }
466
- .detail-card[data-v-0f93f920] {
466
+ .detail-card[data-v-c8b33172] {
467
467
  border: 1px solid var(--db-border);
468
468
  border-radius: 6px;
469
469
  overflow: hidden;
470
470
  }
471
- .card-header[data-v-0f93f920] {
471
+ .card-header[data-v-c8b33172] {
472
472
  padding: 10px;
473
473
  background-color: var(--db-bg-soft);
474
474
  border-bottom: 1px solid var(--db-border);
475
475
  }
476
- .card-title[data-v-0f93f920] {
476
+ .card-title[data-v-c8b33172] {
477
477
  margin: 0;
478
478
  font-size: 13px;
479
479
  font-weight: 600;
@@ -481,16 +481,16 @@ to {
481
481
  align-items: center;
482
482
  gap: 8px;
483
483
  }
484
- .card-body[data-v-0f93f920] {
484
+ .card-body[data-v-c8b33172] {
485
485
  padding: 10px;
486
486
  }
487
- .info-grid[data-v-0f93f920] {
487
+ .info-grid[data-v-c8b33172] {
488
488
  display: grid;
489
489
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
490
490
  gap: 8px;
491
491
  margin-bottom: 0;
492
492
  }
493
- .info-item[data-v-0f93f920] {
493
+ .info-item[data-v-c8b33172] {
494
494
  display: flex;
495
495
  flex-direction: column;
496
496
  gap: 2px;
@@ -500,33 +500,33 @@ to {
500
500
  transition: background-color 0.15s ease;
501
501
  border: 1px solid var(--db-border);
502
502
  }
503
- .info-item[data-v-0f93f920]:hover {
503
+ .info-item[data-v-c8b33172]:hover {
504
504
  background-color: var(--db-bg-soft2);
505
505
  }
506
- .info-label[data-v-0f93f920] {
506
+ .info-label[data-v-c8b33172] {
507
507
  font-size: 10px;
508
508
  font-weight: 600;
509
509
  color: var(--db-text-muted);
510
510
  text-transform: uppercase;
511
511
  letter-spacing: 0.04em;
512
512
  }
513
- .info-value[data-v-0f93f920] {
513
+ .info-value[data-v-c8b33172] {
514
514
  font-size: 12px;
515
515
  font-weight: 500;
516
516
  color: var(--db-dark-color);
517
517
  }
518
- .db-type-badge[data-v-0f93f920] {
518
+ .db-type-badge[data-v-c8b33172] {
519
519
  padding: 1px 7px;
520
520
  border-radius: 999px;
521
521
  font-size: 11px;
522
522
  font-weight: 500;
523
523
  }
524
- .stats-grid[data-v-0f93f920] {
524
+ .stats-grid[data-v-c8b33172] {
525
525
  display: grid;
526
526
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
527
527
  gap: 8px;
528
528
  }
529
- .stat-item[data-v-0f93f920] {
529
+ .stat-item[data-v-c8b33172] {
530
530
  text-align: left;
531
531
  padding: 8px;
532
532
  background-color: var(--db-bg-soft);
@@ -534,31 +534,31 @@ to {
534
534
  transition: background-color 0.15s ease;
535
535
  border: 1px solid var(--db-border);
536
536
  }
537
- .stat-item[data-v-0f93f920]:hover {
537
+ .stat-item[data-v-c8b33172]:hover {
538
538
  background-color: var(--db-bg-soft2);
539
539
  }
540
- .stat-value[data-v-0f93f920] {
540
+ .stat-value[data-v-c8b33172] {
541
541
  font-size: 15px;
542
542
  font-weight: 600;
543
543
  line-height: 1.25;
544
544
  color: var(--db-dark-color);
545
545
  }
546
- .stat-label[data-v-0f93f920] {
546
+ .stat-label[data-v-c8b33172] {
547
547
  font-size: 11px;
548
548
  color: var(--db-text-muted);
549
549
  margin-top: 2px;
550
550
  }
551
- .quick-actions[data-v-0f93f920] {
551
+ .quick-actions[data-v-c8b33172] {
552
552
  margin-bottom: 0;
553
553
  padding: 10px 12px;
554
554
  background-color: var(--db-bg-soft2);
555
555
  border-radius: 6px;
556
556
  border: 1px solid var(--db-border);
557
557
  }
558
- .actions-header[data-v-0f93f920] {
558
+ .actions-header[data-v-c8b33172] {
559
559
  margin-bottom: 8px;
560
560
  }
561
- .actions-title[data-v-0f93f920] {
561
+ .actions-title[data-v-c8b33172] {
562
562
  margin: 0;
563
563
  font-size: 13px;
564
564
  font-weight: 600;
@@ -566,12 +566,12 @@ to {
566
566
  align-items: center;
567
567
  gap: 8px;
568
568
  }
569
- .actions-grid[data-v-0f93f920] {
569
+ .actions-grid[data-v-c8b33172] {
570
570
  display: grid;
571
571
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
572
572
  gap: 6px;
573
573
  }
574
- .action-btn[data-v-0f93f920] {
574
+ .action-btn[data-v-c8b33172] {
575
575
  display: flex;
576
576
  flex-direction: row;
577
577
  align-items: center;
@@ -585,20 +585,20 @@ to {
585
585
  transition: background-color 0.15s ease, border-color 0.15s ease;
586
586
  color: var(--db-text-body);
587
587
  }
588
- .action-btn[data-v-0f93f920]:hover {
588
+ .action-btn[data-v-c8b33172]:hover {
589
589
  background-color: var(--db-bg-soft2);
590
590
  border-color: var(--db-primary-color);
591
591
  }
592
- .action-icon[data-v-0f93f920] {
592
+ .action-icon[data-v-c8b33172] {
593
593
  font-size: 14px;
594
594
  color: var(--db-primary-color);
595
595
  }
596
- .action-text[data-v-0f93f920] {
596
+ .action-text[data-v-c8b33172] {
597
597
  font-size: 12px;
598
598
  font-weight: 500;
599
599
  color: var(--db-text-body);
600
600
  }
601
- .connection-tabs[data-v-0f93f920] {
601
+ .connection-tabs[data-v-c8b33172] {
602
602
  border: 1px solid var(--db-border);
603
603
  border-radius: 6px;
604
604
  flex: 1;
@@ -608,13 +608,13 @@ to {
608
608
  overflow:hidden 裁掉且不出现滚动条,必须显式允许收缩 */
609
609
  min-height: 0;
610
610
  }
611
- .nav-tabs[data-v-0f93f920] {
611
+ .nav-tabs[data-v-c8b33172] {
612
612
  border-bottom: 1px solid var(--db-border);
613
613
  background-color: var(--db-gray-light);
614
614
  padding: 0 4px;
615
615
  gap: 0;
616
616
  }
617
- .nav-link[data-v-0f93f920] {
617
+ .nav-link[data-v-c8b33172] {
618
618
  border: none;
619
619
  border-radius: 0;
620
620
  padding: 6px 12px;
@@ -623,23 +623,23 @@ to {
623
623
  transition: color 0.15s ease, background-color 0.15s ease;
624
624
  color: var(--db-text-muted);
625
625
  }
626
- .nav-link[data-v-0f93f920]:hover {
626
+ .nav-link[data-v-c8b33172]:hover {
627
627
  background-color: var(--db-bg-soft);
628
628
  color: var(--db-dark-color);
629
629
  }
630
- .nav-link.active[data-v-0f93f920] {
630
+ .nav-link.active[data-v-c8b33172] {
631
631
  background-color: transparent;
632
632
  color: var(--db-primary-color);
633
633
  border-bottom: 2px solid var(--db-primary-color);
634
634
  }
635
- .tab-content[data-v-0f93f920] {
635
+ .tab-content[data-v-c8b33172] {
636
636
  flex: 1;
637
637
  display: flex;
638
638
  flex-direction: column;
639
639
  overflow: hidden;
640
640
  min-height: 0;
641
641
  }
642
- .tab-panel[data-v-0f93f920] {
642
+ .tab-panel[data-v-c8b33172] {
643
643
  padding: 0;
644
644
  flex: 1;
645
645
  display: flex;
@@ -647,7 +647,7 @@ to {
647
647
  overflow: hidden;
648
648
  min-height: 0;
649
649
  }
650
- .databases-section[data-v-0f93f920] {
650
+ .databases-section[data-v-c8b33172] {
651
651
  display: flex;
652
652
  flex-direction: column;
653
653
  gap: 10px;
@@ -655,13 +655,13 @@ to {
655
655
  overflow: hidden;
656
656
  min-height: 0;
657
657
  }
658
- .section-header[data-v-0f93f920] {
658
+ .section-header[data-v-c8b33172] {
659
659
  display: flex;
660
660
  justify-content: flex-end;
661
661
  align-items: center;
662
662
  gap: 8px;
663
663
  }
664
- .db-search[data-v-0f93f920] {
664
+ .db-search[data-v-c8b33172] {
665
665
  display: flex;
666
666
  align-items: center;
667
667
  gap: 6px;
@@ -672,16 +672,16 @@ to {
672
672
  background: var(--db-bg-soft);
673
673
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
674
674
  }
675
- .db-search[data-v-0f93f920]:focus-within {
675
+ .db-search[data-v-c8b33172]:focus-within {
676
676
  border-color: var(--db-primary-color);
677
677
  box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.15);
678
678
  }
679
- .db-search > i[data-v-0f93f920] {
679
+ .db-search > i[data-v-c8b33172] {
680
680
  font-size: 12px;
681
681
  color: var(--db-gray-dark);
682
682
  flex-shrink: 0;
683
683
  }
684
- .db-search-input[data-v-0f93f920] {
684
+ .db-search-input[data-v-c8b33172] {
685
685
  border: none;
686
686
  outline: none;
687
687
  background: transparent;
@@ -691,11 +691,11 @@ to {
691
691
  width: 150px;
692
692
  padding: 0;
693
693
  }
694
- .db-search-input[data-v-0f93f920]::placeholder {
694
+ .db-search-input[data-v-c8b33172]::placeholder {
695
695
  color: var(--db-gray-dark);
696
696
  opacity: 0.8;
697
697
  }
698
- .db-refresh-btn[data-v-0f93f920] {
698
+ .db-refresh-btn[data-v-c8b33172] {
699
699
  display: inline-flex;
700
700
  align-items: center;
701
701
  justify-content: center;
@@ -709,22 +709,22 @@ to {
709
709
  cursor: pointer;
710
710
  transition: all 0.15s ease;
711
711
  }
712
- .db-refresh-btn[data-v-0f93f920]:hover:not(:disabled) {
712
+ .db-refresh-btn[data-v-c8b33172]:hover:not(:disabled) {
713
713
  color: var(--db-primary-color);
714
714
  border-color: var(--db-primary-color);
715
715
  background: var(--db-primary-bg);
716
716
  }
717
- .db-refresh-btn[data-v-0f93f920]:disabled {
717
+ .db-refresh-btn[data-v-c8b33172]:disabled {
718
718
  opacity: 0.6;
719
719
  cursor: default;
720
720
  }
721
- .databases-list[data-v-0f93f920] {
721
+ .databases-list[data-v-c8b33172] {
722
722
  flex: 1;
723
723
  min-height: 0;
724
724
  overflow-y: auto;
725
725
  padding-right: 8px;
726
726
  }
727
- .loading-state[data-v-0f93f920] {
727
+ .loading-state[data-v-c8b33172] {
728
728
  display: flex;
729
729
  flex-direction: column;
730
730
  align-items: center;
@@ -732,7 +732,7 @@ to {
732
732
  padding: 28px 16px;
733
733
  gap: 10px;
734
734
  }
735
- .empty-state[data-v-0f93f920] {
735
+ .empty-state[data-v-c8b33172] {
736
736
  display: flex;
737
737
  flex-direction: column;
738
738
  align-items: center;
@@ -741,21 +741,21 @@ to {
741
741
  gap: 10px;
742
742
  text-align: center;
743
743
  }
744
- .empty-state i[data-v-0f93f920] {
744
+ .empty-state i[data-v-c8b33172] {
745
745
  font-size: 28px;
746
746
  color: var(--db-text-faint);
747
747
  }
748
- .empty-state p[data-v-0f93f920] {
748
+ .empty-state p[data-v-c8b33172] {
749
749
  margin: 0;
750
750
  color: var(--db-text-muted);
751
751
  font-size: 12px;
752
752
  }
753
- .databases-list-simple[data-v-0f93f920] {
753
+ .databases-list-simple[data-v-c8b33172] {
754
754
  display: grid;
755
755
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
756
756
  gap: 6px;
757
757
  }
758
- .database-item[data-v-0f93f920] {
758
+ .database-item[data-v-c8b33172] {
759
759
  display: flex;
760
760
  flex-direction: row;
761
761
  align-items: center;
@@ -768,16 +768,16 @@ to {
768
768
  transition: background-color 0.15s ease, border-color 0.15s ease;
769
769
  text-align: left;
770
770
  }
771
- .database-item[data-v-0f93f920]:hover {
771
+ .database-item[data-v-c8b33172]:hover {
772
772
  background: var(--db-bg-soft2);
773
773
  border-color: var(--db-primary-color);
774
774
  }
775
- .database-item-icon[data-v-0f93f920] {
775
+ .database-item-icon[data-v-c8b33172] {
776
776
  font-size: 12px;
777
777
  color: var(--db-primary-color);
778
778
  flex-shrink: 0;
779
779
  }
780
- .database-item-name[data-v-0f93f920] {
780
+ .database-item-name[data-v-c8b33172] {
781
781
  flex: 1;
782
782
  font-size: 12px;
783
783
  font-weight: 500;
@@ -787,17 +787,17 @@ to {
787
787
  white-space: nowrap;
788
788
  min-width: 0;
789
789
  }
790
- .database-item-actions[data-v-0f93f920] {
790
+ .database-item-actions[data-v-c8b33172] {
791
791
  display: flex;
792
792
  gap: 4px;
793
793
  flex-shrink: 0;
794
794
  opacity: 0.55;
795
795
  transition: opacity 0.15s ease;
796
796
  }
797
- .database-item:hover .database-item-actions[data-v-0f93f920] {
797
+ .database-item:hover .database-item-actions[data-v-c8b33172] {
798
798
  opacity: 1;
799
799
  }
800
- .database-item-actions .btn[data-v-0f93f920] {
800
+ .database-item-actions .btn[data-v-c8b33172] {
801
801
  padding: 1px 5px;
802
802
  font-size: 12px;
803
803
  line-height: 1.3;
@@ -805,11 +805,11 @@ to {
805
805
  background: transparent;
806
806
  color: var(--db-darker-color);
807
807
  }
808
- .database-item-actions .btn[data-v-0f93f920]:hover {
808
+ .database-item-actions .btn[data-v-c8b33172]:hover {
809
809
  color: var(--db-primary-color);
810
810
  background: var(--db-bg-soft2);
811
811
  }
812
- .sql-section[data-v-0f93f920] {
812
+ .sql-section[data-v-c8b33172] {
813
813
  display: flex;
814
814
  flex-direction: column;
815
815
  gap: 16px;
@@ -817,12 +817,12 @@ to {
817
817
  overflow: hidden;
818
818
  min-height: 0;
819
819
  }
820
- .sql-header[data-v-0f93f920] {
820
+ .sql-header[data-v-c8b33172] {
821
821
  display: flex;
822
822
  justify-content: space-between;
823
823
  align-items: center;
824
824
  }
825
- .sql-title[data-v-0f93f920] {
825
+ .sql-title[data-v-c8b33172] {
826
826
  margin: 0;
827
827
  font-size: 16px;
828
828
  font-weight: 600;
@@ -830,7 +830,7 @@ to {
830
830
  align-items: center;
831
831
  gap: 8px;
832
832
  }
833
- .sql-db-info[data-v-0f93f920] {
833
+ .sql-db-info[data-v-c8b33172] {
834
834
  display: flex;
835
835
  align-items: center;
836
836
  gap: 8px;
@@ -838,56 +838,56 @@ to {
838
838
 
839
839
  /* 响应式设计 */
840
840
  @media (max-width: 768px) {
841
- .connection-header[data-v-0f93f920] {
841
+ .connection-header[data-v-c8b33172] {
842
842
  flex-direction: column;
843
843
  align-items: flex-start;
844
844
  gap: 16px;
845
845
  }
846
- .connection-actions[data-v-0f93f920] {
846
+ .connection-actions[data-v-c8b33172] {
847
847
  align-self: flex-end;
848
848
  }
849
- .connection-cards[data-v-0f93f920] {
849
+ .connection-cards[data-v-c8b33172] {
850
850
  grid-template-columns: 1fr;
851
851
  }
852
- .info-grid[data-v-0f93f920] {
852
+ .info-grid[data-v-c8b33172] {
853
853
  grid-template-columns: 1fr;
854
854
  }
855
- .stats-grid[data-v-0f93f920] {
855
+ .stats-grid[data-v-c8b33172] {
856
856
  grid-template-columns: repeat(2, 1fr);
857
857
  }
858
- .actions-grid[data-v-0f93f920] {
858
+ .actions-grid[data-v-c8b33172] {
859
859
  grid-template-columns: repeat(2, 1fr);
860
860
  }
861
- .databases-list-simple[data-v-0f93f920] {
861
+ .databases-list-simple[data-v-c8b33172] {
862
862
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
863
863
  gap: 6px;
864
864
  }
865
- .database-item[data-v-0f93f920] {
865
+ .database-item[data-v-c8b33172] {
866
866
  padding: 6px 8px;
867
867
  }
868
- .database-item-icon[data-v-0f93f920] {
868
+ .database-item-icon[data-v-c8b33172] {
869
869
  font-size: 14px;
870
870
  }
871
- .database-item-name[data-v-0f93f920] {
871
+ .database-item-name[data-v-c8b33172] {
872
872
  font-size: 12px;
873
873
  }
874
- .nav-link[data-v-0f93f920] {
874
+ .nav-link[data-v-c8b33172] {
875
875
  padding: 10px 16px;
876
876
  font-size: 13px;
877
877
  }
878
878
  }
879
879
 
880
880
  /* 日志弹窗 */
881
- .logs-state[data-v-0f93f920] {
881
+ .logs-state[data-v-c8b33172] {
882
882
  padding: 24px;
883
883
  text-align: center;
884
884
  color: var(--db-text-muted);
885
885
  }
886
- .logs-table-wrap[data-v-0f93f920] {
886
+ .logs-table-wrap[data-v-c8b33172] {
887
887
  max-height: 60vh;
888
888
  overflow: auto;
889
889
  }
890
- .logs-table-wrap td[data-v-0f93f920] {
890
+ .logs-table-wrap td[data-v-c8b33172] {
891
891
  max-width: 320px;
892
892
  white-space: nowrap;
893
893
  overflow: hidden;
@@ -895,14 +895,14 @@ to {
895
895
  font-size: 12px;
896
896
  }
897
897
 
898
- .section-title[data-v-5fb24ab7] {
898
+ .section-title[data-v-6c4a9ebd] {
899
899
  color: var(--db-text-body);
900
900
  font-weight: 600;
901
901
  border-bottom: 2px solid var(--db-border-soft);
902
902
  padding-bottom: 0.5rem;
903
903
  margin-bottom: 1rem;
904
904
  }
905
- .sql-preview[data-v-5fb24ab7] {
905
+ .sql-preview[data-v-6c4a9ebd] {
906
906
  font-family: 'Courier New', Consolas, monospace;
907
907
  font-size: 0.875rem;
908
908
  line-height: 1.5;
@@ -918,44 +918,57 @@ to {
918
918
  white-space: pre-wrap;
919
919
  word-break: break-all;
920
920
  }
921
- .table th[data-v-5fb24ab7] {
921
+ .table th[data-v-6c4a9ebd] {
922
922
  font-size: 0.875rem;
923
923
  font-weight: 600;
924
924
  }
925
- .table td[data-v-5fb24ab7] {
925
+ .table td[data-v-6c4a9ebd] {
926
926
  padding: 0!important;
927
927
  }
928
- .table .form-control[data-v-5fb24ab7], .table .form-select[data-v-5fb24ab7] {
928
+ .table .form-control[data-v-6c4a9ebd], .table .form-select[data-v-6c4a9ebd] {
929
929
  border: none;
930
930
  border-radius: 0;
931
931
  box-shadow: none;
932
932
  }
933
- .form-control-sm[data-v-5fb24ab7], .form-select-sm[data-v-5fb24ab7] {
933
+ .form-control-sm[data-v-6c4a9ebd], .form-select-sm[data-v-6c4a9ebd] {
934
934
  font-size: 0.875rem;
935
935
  }
936
- .modal-content[data-v-5fb24ab7] {
936
+ .modal-content[data-v-6c4a9ebd] {
937
937
  max-height: 90vh;
938
938
  overflow-y: auto;
939
939
  }
940
- .modal-body[data-v-5fb24ab7] {
940
+ .modal-body[data-v-6c4a9ebd] {
941
941
  max-height: calc(90vh - 120px);
942
942
  overflow-y: auto;
943
943
  }
944
- .input-group-sm .form-control[data-v-5fb24ab7] {
944
+ .input-group-sm .form-control[data-v-6c4a9ebd] {
945
945
  border-radius: 0;
946
946
  }
947
- .input-group-sm .form-control[data-v-5fb24ab7]:first-child {
947
+ .input-group-sm .form-control[data-v-6c4a9ebd]:first-child {
948
948
  border-top-left-radius: 0.25rem;
949
949
  border-bottom-left-radius: 0.25rem;
950
950
  }
951
- .input-group-sm .form-control[data-v-5fb24ab7]:last-child {
951
+ .input-group-sm .form-control[data-v-6c4a9ebd]:last-child {
952
952
  border-top-right-radius: 0.25rem;
953
953
  border-bottom-right-radius: 0.25rem;
954
954
  }
955
- .text-muted[data-v-5fb24ab7] {
955
+ .text-muted[data-v-6c4a9ebd] {
956
956
  color: var(--db-text-muted) !important;
957
957
  }
958
958
 
959
+ .result-json[data-v-ba41948d] {
960
+ max-height: 420px;
961
+ overflow: auto;
962
+ margin: 0;
963
+ padding: 8px 10px;
964
+ font-size: 12px;
965
+ line-height: 1.5;
966
+ background: rgba(128, 128, 128, 0.08);
967
+ border-radius: 4px;
968
+ white-space: pre-wrap;
969
+ word-break: break-all;
970
+ }
971
+
959
972
  .db-tools[data-v-4c55e089] {
960
973
  background: var(--db-surface);
961
974
  border-radius: 8px;
@@ -1213,7 +1226,7 @@ to {
1213
1226
  background: var(--db-text-faint);
1214
1227
  }
1215
1228
 
1216
- .database-detail[data-v-82eeefa1] {
1229
+ .database-detail[data-v-cd43f64d] {
1217
1230
  width: 100%;
1218
1231
  height: 100%;
1219
1232
  display: flex;
@@ -1221,7 +1234,7 @@ to {
1221
1234
  }
1222
1235
 
1223
1236
  /* SQL 面板直接铺满 tab 内容区(内边距由 .tab-content 统一提供) */
1224
- .sql-executor-section[data-v-82eeefa1] {
1237
+ .sql-executor-section[data-v-cd43f64d] {
1225
1238
  margin: 0;
1226
1239
  padding: 0;
1227
1240
  background-color: transparent;
@@ -1232,7 +1245,7 @@ to {
1232
1245
  }
1233
1246
 
1234
1247
  /* 加载状态样式 */
1235
- .loading-state[data-v-82eeefa1] {
1248
+ .loading-state[data-v-cd43f64d] {
1236
1249
  display: flex;
1237
1250
  flex-direction: column;
1238
1251
  align-items: center;
@@ -1240,31 +1253,31 @@ to {
1240
1253
  padding: 24px 0;
1241
1254
  color: var(--db-text-muted);
1242
1255
  }
1243
- .loading-state .spinner-border[data-v-82eeefa1] {
1256
+ .loading-state .spinner-border[data-v-cd43f64d] {
1244
1257
  margin-bottom: 10px;
1245
1258
  color: var(--db-primary-color);
1246
1259
  }
1247
- .loading-state p[data-v-82eeefa1] {
1260
+ .loading-state p[data-v-cd43f64d] {
1248
1261
  margin: 0;
1249
1262
  font-size: 12px;
1250
1263
  }
1251
- .database-header[data-v-82eeefa1] {
1264
+ .database-header[data-v-cd43f64d] {
1252
1265
  padding: 8px 12px;
1253
1266
  background: var(--db-bg-soft2);
1254
1267
  border-bottom: 1px solid var(--db-border);
1255
1268
  }
1256
- .database-header-content[data-v-82eeefa1] {
1269
+ .database-header-content[data-v-cd43f64d] {
1257
1270
  display: flex;
1258
1271
  justify-content: space-between;
1259
1272
  align-items: center;
1260
1273
  gap: 1rem;
1261
1274
  }
1262
- .database-info[data-v-82eeefa1] {
1275
+ .database-info[data-v-cd43f64d] {
1263
1276
  display: flex;
1264
1277
  align-items: center;
1265
1278
  gap: 0.625rem;
1266
1279
  }
1267
- .database-icon[data-v-82eeefa1] {
1280
+ .database-icon[data-v-cd43f64d] {
1268
1281
  width: 34px;
1269
1282
  height: 34px;
1270
1283
  background: var(--db-primary-bg);
@@ -1277,19 +1290,19 @@ to {
1277
1290
  font-size: 1rem;
1278
1291
  flex-shrink: 0;
1279
1292
  }
1280
- .database-meta h4[data-v-82eeefa1] {
1293
+ .database-meta h4[data-v-cd43f64d] {
1281
1294
  margin: 0 0 0.25rem 0;
1282
1295
  font-size: 0.9375rem;
1283
1296
  color: var(--db-dark-color);
1284
1297
  font-weight: 600;
1285
1298
  }
1286
- .connection-info[data-v-82eeefa1] {
1299
+ .connection-info[data-v-cd43f64d] {
1287
1300
  display: flex;
1288
1301
  align-items: center;
1289
1302
  gap: 0.375rem;
1290
1303
  font-size: 0.75rem;
1291
1304
  }
1292
- .connection-info .crumb[data-v-82eeefa1] {
1305
+ .connection-info .crumb[data-v-cd43f64d] {
1293
1306
  display: inline-flex;
1294
1307
  align-items: center;
1295
1308
  padding: 0;
@@ -1297,20 +1310,20 @@ to {
1297
1310
  font-size: 0.75rem;
1298
1311
  transition: color 0.15s ease;
1299
1312
  }
1300
- .connection-info .crumb-link[data-v-82eeefa1] {
1313
+ .connection-info .crumb-link[data-v-cd43f64d] {
1301
1314
  cursor: pointer;
1302
1315
  background: transparent;
1303
1316
  color: var(--db-primary-color);
1304
1317
  }
1305
- .connection-info .crumb-link[data-v-82eeefa1]:hover {
1318
+ .connection-info .crumb-link[data-v-cd43f64d]:hover {
1306
1319
  color: var(--db-primary-light);
1307
1320
  text-decoration: underline;
1308
1321
  }
1309
- .connection-info .crumb-current[data-v-82eeefa1] {
1322
+ .connection-info .crumb-current[data-v-cd43f64d] {
1310
1323
  font-weight: 500;
1311
1324
  color: var(--db-text-muted);
1312
1325
  }
1313
- .connection-name[data-v-82eeefa1] {
1326
+ .connection-name[data-v-cd43f64d] {
1314
1327
  background: transparent;
1315
1328
  color: var(--db-primary-color);
1316
1329
  padding: 0;
@@ -1318,7 +1331,7 @@ to {
1318
1331
  font-size: 0.75rem;
1319
1332
  font-weight: 500;
1320
1333
  }
1321
- .connection-type[data-v-82eeefa1] {
1334
+ .connection-type[data-v-cd43f64d] {
1322
1335
  background: var(--db-primary-bg);
1323
1336
  color: var(--db-primary-color);
1324
1337
  padding: 1px 7px;
@@ -1326,39 +1339,39 @@ to {
1326
1339
  font-size: 0.6875rem;
1327
1340
  font-weight: 500;
1328
1341
  }
1329
- .database-stats[data-v-82eeefa1] {
1342
+ .database-stats[data-v-cd43f64d] {
1330
1343
  display: flex;
1331
1344
  gap: 1.5rem;
1332
1345
  }
1333
- .stat-item[data-v-82eeefa1] {
1346
+ .stat-item[data-v-cd43f64d] {
1334
1347
  text-align: right;
1335
1348
  }
1336
- .stat-value[data-v-82eeefa1] {
1349
+ .stat-value[data-v-cd43f64d] {
1337
1350
  font-size: 1rem;
1338
1351
  font-weight: 700;
1339
1352
  line-height: 1.2;
1340
1353
  color: var(--db-dark-color);
1341
1354
  margin-bottom: 0;
1342
1355
  }
1343
- .stat-label[data-v-82eeefa1] {
1356
+ .stat-label[data-v-cd43f64d] {
1344
1357
  font-size: 0.6875rem;
1345
1358
  color: var(--db-text-muted);
1346
1359
  font-weight: 400;
1347
1360
  }
1348
- .database-tabs[data-v-82eeefa1] {
1361
+ .database-tabs[data-v-cd43f64d] {
1349
1362
  flex: 1;
1350
1363
  overflow: hidden;
1351
1364
  display: flex;
1352
1365
  flex-direction: column;
1353
1366
  min-height: 0;
1354
1367
  }
1355
- .nav-tabs[data-v-82eeefa1] {
1368
+ .nav-tabs[data-v-cd43f64d] {
1356
1369
  background: var(--db-gray-light);
1357
1370
  border-bottom: 1px solid var(--db-border);
1358
1371
  padding: 0 0.5rem;
1359
1372
  gap: 0;
1360
1373
  }
1361
- .nav-link[data-v-82eeefa1] {
1374
+ .nav-link[data-v-cd43f64d] {
1362
1375
  border: none;
1363
1376
  background: transparent;
1364
1377
  color: var(--db-text-muted);
@@ -1367,36 +1380,36 @@ to {
1367
1380
  font-weight: 500;
1368
1381
  transition: color 0.15s ease, background-color 0.15s ease;
1369
1382
  }
1370
- .nav-link[data-v-82eeefa1]:hover {
1383
+ .nav-link[data-v-cd43f64d]:hover {
1371
1384
  color: var(--db-dark-color);
1372
1385
  background: var(--db-bg-soft);
1373
1386
  }
1374
- .nav-link.active[data-v-82eeefa1] {
1387
+ .nav-link.active[data-v-cd43f64d] {
1375
1388
  color: var(--db-primary-color);
1376
1389
  background: transparent;
1377
1390
  border-bottom: 2px solid var(--db-primary-color);
1378
1391
  }
1379
- .tab-content[data-v-82eeefa1] {
1392
+ .tab-content[data-v-cd43f64d] {
1380
1393
  overflow-y: auto;
1381
1394
  flex: 1;
1382
1395
  display: flex;
1383
1396
  flex-direction: column;
1384
1397
  min-height: 0;
1385
1398
  }
1386
- .tab-panel[data-v-82eeefa1] {
1399
+ .tab-panel[data-v-cd43f64d] {
1387
1400
  flex: 1;
1388
1401
  overflow-y: auto;
1389
1402
  display: flex;
1390
1403
  flex-direction: column;
1391
1404
  min-height: 0;
1392
1405
  }
1393
- .table-grid[data-v-82eeefa1] {
1406
+ .table-grid[data-v-cd43f64d] {
1394
1407
  display: grid;
1395
1408
  /* 最小列宽 240px + 12px 间距:避免窄卡片把表名挤成「t_ai_agent_...」这类过度截断 */
1396
1409
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
1397
1410
  gap: 12px;
1398
1411
  }
1399
- .table-card[data-v-82eeefa1] {
1412
+ .table-card[data-v-cd43f64d] {
1400
1413
  background: var(--db-bg-soft2);
1401
1414
  border: 1px solid var(--db-border);
1402
1415
  border-radius: 6px;
@@ -1404,12 +1417,12 @@ to {
1404
1417
  transition: border-color 0.15s ease, background-color 0.15s ease;
1405
1418
  cursor: pointer;
1406
1419
  }
1407
- .table-card[data-v-82eeefa1]:hover {
1420
+ .table-card[data-v-cd43f64d]:hover {
1408
1421
  border-color: var(--db-primary-color);
1409
1422
  background: var(--db-bg-soft);
1410
1423
  box-shadow: none;
1411
1424
  }
1412
- .card-header[data-v-82eeefa1] {
1425
+ .card-header[data-v-cd43f64d] {
1413
1426
  background: var(--db-bg-soft);
1414
1427
  /* 右侧预留编辑按钮的常驻空间(约 32px):按钮绝对定位不占 flex 位,
1415
1428
  用 padding 留白让表名/引擎名不会被按钮盖住,也不必为按钮压缩表名宽度 */
@@ -1422,7 +1435,7 @@ to {
1422
1435
 
1423
1436
  /* 卡片图标与引擎徽标统一收敛为中性灰:
1424
1437
  密集网格里高饱和的绿/蓝会互相干扰,改为描边+浅灰后表名才是视觉主角 */
1425
- .table-icon[data-v-82eeefa1] {
1438
+ .table-icon[data-v-cd43f64d] {
1426
1439
  width: 22px;
1427
1440
  height: 22px;
1428
1441
  font-size: 0.75rem;
@@ -1435,17 +1448,17 @@ to {
1435
1448
  color: var(--db-text-faint);
1436
1449
  flex-shrink: 0;
1437
1450
  }
1438
- .table-info[data-v-82eeefa1] {
1451
+ .table-info[data-v-cd43f64d] {
1439
1452
  flex: 1;
1440
1453
  min-width: 0; /* 允许子元素截断 */
1441
1454
  }
1442
- .table-name-wrapper[data-v-82eeefa1] {
1455
+ .table-name-wrapper[data-v-cd43f64d] {
1443
1456
  display: flex;
1444
1457
  align-items: center;
1445
1458
  gap: 0.375rem;
1446
1459
  margin-bottom: 0;
1447
1460
  }
1448
- .table-name[data-v-82eeefa1] {
1461
+ .table-name[data-v-cd43f64d] {
1449
1462
  font-size: 0.8125rem;
1450
1463
  font-weight: 500;
1451
1464
  color: var(--db-dark-color);
@@ -1454,7 +1467,7 @@ to {
1454
1467
  text-overflow: ellipsis;
1455
1468
  min-width: 0;
1456
1469
  }
1457
- .table-engine[data-v-82eeefa1] {
1470
+ .table-engine[data-v-cd43f64d] {
1458
1471
  font-size: 0.625rem;
1459
1472
  /* 引擎名是次要信息:去掉高饱和底色,仅留浅灰文字 */
1460
1473
  color: var(--db-text-faint);
@@ -1463,7 +1476,7 @@ to {
1463
1476
  border-radius: 999px;
1464
1477
  flex-shrink: 0;
1465
1478
  }
1466
- .table-comment-header[data-v-82eeefa1] {
1479
+ .table-comment-header[data-v-cd43f64d] {
1467
1480
  font-size: 0.6875rem;
1468
1481
  color: var(--db-text-muted);
1469
1482
  white-space: nowrap;
@@ -1472,14 +1485,14 @@ to {
1472
1485
  }
1473
1486
 
1474
1487
  /* 卡片正文:标签在上、数值在下 */
1475
- .card-body[data-v-82eeefa1] {
1488
+ .card-body[data-v-cd43f64d] {
1476
1489
  padding: 8px;
1477
1490
  display: flex;
1478
1491
  flex-direction: column;
1479
1492
  align-items: stretch;
1480
1493
  gap: 8px;
1481
1494
  }
1482
- .table-stats[data-v-82eeefa1] {
1495
+ .table-stats[data-v-cd43f64d] {
1483
1496
  display: flex;
1484
1497
  align-items: flex-start;
1485
1498
  gap: 1.25rem;
@@ -1487,7 +1500,7 @@ to {
1487
1500
  flex-wrap: wrap;
1488
1501
  min-width: 0;
1489
1502
  }
1490
- .stat[data-v-82eeefa1] {
1503
+ .stat[data-v-cd43f64d] {
1491
1504
  display: flex;
1492
1505
  flex-direction: column;
1493
1506
  align-items: flex-start;
@@ -1495,16 +1508,16 @@ to {
1495
1508
  }
1496
1509
 
1497
1510
  /* 卡片内的统计字号覆盖(不影响顶部数据库统计的大号数字) */
1498
- .table-card .stat-label[data-v-82eeefa1] {
1511
+ .table-card .stat-label[data-v-cd43f64d] {
1499
1512
  font-size: 0.6875rem;
1500
1513
  color: var(--db-text-muted);
1501
1514
  }
1502
- .table-card .stat-value[data-v-82eeefa1] {
1515
+ .table-card .stat-value[data-v-cd43f64d] {
1503
1516
  font-size: 0.9375rem;
1504
1517
  font-weight: 600;
1505
1518
  color: var(--db-dark-color);
1506
1519
  }
1507
- .table-comment[data-v-82eeefa1] {
1520
+ .table-comment[data-v-cd43f64d] {
1508
1521
  font-size: 0.8125rem;
1509
1522
  color: var(--db-text-muted);
1510
1523
  font-style: italic;
@@ -1514,14 +1527,14 @@ to {
1514
1527
 
1515
1528
  /* 编辑按钮常驻右上角:绝对定位,不参与 flex 排版,
1516
1529
  因此不会像内联那样挤压表名(表名可用满 header 内容区宽度)。 */
1517
- .table-actions[data-v-82eeefa1] {
1530
+ .table-actions[data-v-cd43f64d] {
1518
1531
  position: absolute;
1519
1532
  top: 4px;
1520
1533
  right: 4px;
1521
1534
  display: flex;
1522
1535
  gap: 0.375rem;
1523
1536
  }
1524
- .table-actions .btn[data-v-82eeefa1] {
1537
+ .table-actions .btn[data-v-cd43f64d] {
1525
1538
  width: 22px;
1526
1539
  height: 22px;
1527
1540
  padding: 0;
@@ -1535,12 +1548,12 @@ to {
1535
1548
  background: transparent;
1536
1549
  color: var(--db-primary-color);
1537
1550
  }
1538
- .table-actions .btn[data-v-82eeefa1]:hover {
1551
+ .table-actions .btn[data-v-cd43f64d]:hover {
1539
1552
  background: var(--db-primary-bg);
1540
1553
  color: var(--db-primary-color);
1541
1554
  border-color: var(--db-primary-color);
1542
1555
  }
1543
- .empty-state[data-v-82eeefa1] {
1556
+ .empty-state[data-v-cd43f64d] {
1544
1557
  display: flex;
1545
1558
  flex-direction: column;
1546
1559
  align-items: center;
@@ -1551,39 +1564,39 @@ to {
1551
1564
  text-align: center;
1552
1565
  font-size: 0.8125rem;
1553
1566
  }
1554
- .empty-state i[data-v-82eeefa1] {
1567
+ .empty-state i[data-v-cd43f64d] {
1555
1568
  font-size: 1.5rem;
1556
1569
  margin-bottom: 0;
1557
1570
  opacity: 0.5;
1558
1571
  }
1559
1572
 
1560
1573
  /* 视图和存储过程卡片样式 */
1561
- .views-grid[data-v-82eeefa1], .procedures-grid[data-v-82eeefa1] {
1574
+ .views-grid[data-v-cd43f64d], .procedures-grid[data-v-cd43f64d] {
1562
1575
  display: grid;
1563
1576
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
1564
1577
  gap: 8px;
1565
1578
  }
1566
- .view-card[data-v-82eeefa1], .procedure-card[data-v-82eeefa1] {
1579
+ .view-card[data-v-cd43f64d], .procedure-card[data-v-cd43f64d] {
1567
1580
  background: var(--db-bg-soft2);
1568
1581
  border: 1px solid var(--db-border);
1569
1582
  border-radius: 6px;
1570
1583
  overflow: hidden;
1571
1584
  transition: border-color 0.15s ease, background-color 0.15s ease;
1572
1585
  }
1573
- .view-card[data-v-82eeefa1]:hover, .procedure-card[data-v-82eeefa1]:hover {
1586
+ .view-card[data-v-cd43f64d]:hover, .procedure-card[data-v-cd43f64d]:hover {
1574
1587
  border-color: var(--db-primary-color);
1575
1588
  background: var(--db-bg-soft);
1576
1589
  box-shadow: none;
1577
1590
  transform: none;
1578
1591
  }
1579
- .view-card .card-header[data-v-82eeefa1], .procedure-card .card-header[data-v-82eeefa1] {
1592
+ .view-card .card-header[data-v-cd43f64d], .procedure-card .card-header[data-v-cd43f64d] {
1580
1593
  background: var(--db-bg-soft);
1581
1594
  padding: 8px 10px;
1582
1595
  display: flex;
1583
1596
  align-items: center;
1584
1597
  gap: 0.5rem;
1585
1598
  }
1586
- .view-icon[data-v-82eeefa1], .procedure-icon[data-v-82eeefa1] {
1599
+ .view-icon[data-v-cd43f64d], .procedure-icon[data-v-cd43f64d] {
1587
1600
  width: 26px;
1588
1601
  height: 26px;
1589
1602
  font-size: 0.8125rem;
@@ -1595,37 +1608,37 @@ to {
1595
1608
  color: var(--db-info-color);
1596
1609
  flex-shrink: 0;
1597
1610
  }
1598
- .procedure-icon[data-v-82eeefa1] {
1611
+ .procedure-icon[data-v-cd43f64d] {
1599
1612
  background: var(--db-warning-bg);
1600
1613
  color: var(--db-warning-color);
1601
1614
  }
1602
- .view-name[data-v-82eeefa1], .procedure-name[data-v-82eeefa1] {
1615
+ .view-name[data-v-cd43f64d], .procedure-name[data-v-cd43f64d] {
1603
1616
  font-size: 0.8125rem;
1604
1617
  font-weight: 500;
1605
1618
  color: var(--db-dark-color);
1606
1619
  margin-bottom: 0.125rem;
1607
1620
  }
1608
- .view-comment[data-v-82eeefa1], .procedure-comment[data-v-82eeefa1] {
1621
+ .view-comment[data-v-cd43f64d], .procedure-comment[data-v-cd43f64d] {
1609
1622
  font-size: 0.6875rem;
1610
1623
  color: var(--db-text-muted);
1611
1624
  margin-bottom: 0.375rem;
1612
1625
  line-height: 1.4;
1613
1626
  }
1614
- .procedure-type[data-v-82eeefa1] {
1627
+ .procedure-type[data-v-cd43f64d] {
1615
1628
  display: flex;
1616
1629
  gap: 0.25rem;
1617
1630
  flex-wrap: wrap;
1618
1631
  }
1619
- .view-card .card-body[data-v-82eeefa1], .procedure-card .card-body[data-v-82eeefa1] {
1632
+ .view-card .card-body[data-v-cd43f64d], .procedure-card .card-body[data-v-cd43f64d] {
1620
1633
  padding: 8px 10px;
1621
1634
  }
1622
- .view-actions[data-v-82eeefa1], .procedure-actions[data-v-82eeefa1] {
1635
+ .view-actions[data-v-cd43f64d], .procedure-actions[data-v-cd43f64d] {
1623
1636
  display: flex;
1624
1637
  gap: 0.375rem;
1625
1638
  }
1626
1639
 
1627
1640
  /* 操作栏:无底色无边框,只是一行工具按钮(对齐 VSCode 插件的 Create Table / Refresh) */
1628
- .views-actions[data-v-82eeefa1], .procedures-actions[data-v-82eeefa1], .tables-actions[data-v-82eeefa1] {
1641
+ .views-actions[data-v-cd43f64d], .procedures-actions[data-v-cd43f64d], .tables-actions[data-v-cd43f64d] {
1629
1642
  display: flex;
1630
1643
  gap: 0.375rem;
1631
1644
  margin-bottom: 10px;
@@ -1635,27 +1648,27 @@ to {
1635
1648
  }
1636
1649
 
1637
1650
  /* 模态框样式 */
1638
- .modal-dialog[data-v-82eeefa1] {
1651
+ .modal-dialog[data-v-cd43f64d] {
1639
1652
  margin-top: 10vh;
1640
1653
  }
1641
- .modal-content[data-v-82eeefa1] {
1654
+ .modal-content[data-v-cd43f64d] {
1642
1655
  border-radius: 12px;
1643
1656
  border: none;
1644
1657
  box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
1645
1658
  }
1646
- .modal-header[data-v-82eeefa1] {
1659
+ .modal-header[data-v-cd43f64d] {
1647
1660
  border-bottom: 1px solid var(--db-gray-medium);
1648
1661
  padding: 1rem 1.5rem;
1649
1662
  }
1650
- .modal-title[data-v-82eeefa1] {
1663
+ .modal-title[data-v-cd43f64d] {
1651
1664
  margin: 0;
1652
1665
  font-weight: 600;
1653
1666
  color: var(--db-dark-color);
1654
1667
  }
1655
- .modal-body[data-v-82eeefa1] {
1668
+ .modal-body[data-v-cd43f64d] {
1656
1669
  padding: 1.5rem;
1657
1670
  }
1658
- .modal-footer[data-v-82eeefa1] {
1671
+ .modal-footer[data-v-cd43f64d] {
1659
1672
  border-top: 1px solid var(--db-gray-medium);
1660
1673
  padding: 1rem 1.5rem;
1661
1674
  display: flex;
@@ -1663,84 +1676,94 @@ to {
1663
1676
  gap: 0.5rem;
1664
1677
  }
1665
1678
 
1666
- .modal[data-v-d9b3ed26] {
1679
+ .modal[data-v-248fb70e] {
1667
1680
  background-color: rgba(0, 0, 0, 0.5);
1668
1681
  }
1669
- .modal-dialog[data-v-d9b3ed26] {
1682
+ .modal-dialog[data-v-248fb70e] {
1670
1683
  max-width: 800px;
1671
1684
  }
1672
- .form-label[data-v-d9b3ed26] {
1685
+ .form-label[data-v-248fb70e] {
1673
1686
  font-weight: 500;
1674
1687
  color: var(--db-text-body);
1675
1688
  }
1676
- .form-control[data-v-d9b3ed26], .form-select[data-v-d9b3ed26] {
1689
+ .form-control[data-v-248fb70e], .form-select[data-v-248fb70e] {
1677
1690
  border: 1px solid var(--db-border-light);
1678
1691
  border-radius: 6px;
1679
1692
  }
1680
- .form-control[data-v-d9b3ed26]:focus, .form-select[data-v-d9b3ed26]:focus {
1693
+ .form-control[data-v-248fb70e]:focus, .form-select[data-v-248fb70e]:focus {
1681
1694
  border-color: #3b82f6;
1682
1695
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
1683
1696
  }
1684
- .modal-header[data-v-d9b3ed26] {
1697
+ .modal-header[data-v-248fb70e] {
1685
1698
  background: linear-gradient(135deg, var(--db-light-color) 0%, var(--db-gray-light) 100%);
1686
1699
  border-bottom: 1px solid var(--db-border);
1687
1700
  }
1688
- .modal-title[data-v-d9b3ed26] {
1701
+ .modal-title[data-v-248fb70e] {
1689
1702
  color: var(--db-dark-color);
1690
1703
  font-weight: 600;
1691
1704
  }
1692
- .modal-footer[data-v-d9b3ed26] {
1705
+ .modal-footer[data-v-248fb70e] {
1693
1706
  background: var(--db-light-color);
1694
1707
  border-top: 1px solid var(--db-border);
1695
1708
  }
1696
- .text-danger[data-v-d9b3ed26] {
1709
+ .text-danger[data-v-248fb70e] {
1697
1710
  color: #ef4444;
1698
1711
  }
1699
- .text-muted[data-v-d9b3ed26] {
1712
+ .text-muted[data-v-248fb70e] {
1700
1713
  color: var(--db-text-muted);
1701
1714
  font-size: 0.875rem;
1702
1715
  }
1703
- .json-editor .text-muted[data-v-d9b3ed26] {
1716
+ .json-editor .text-muted[data-v-248fb70e] {
1704
1717
  font-size: 0.75rem;
1705
1718
  }
1706
- .json-editor[data-v-d9b3ed26] .cm-editor {
1719
+ .json-editor[data-v-248fb70e] .cm-editor {
1707
1720
  height: 100%;
1708
1721
  }
1709
1722
 
1710
- .table-data-grid[data-v-f6763da8] {
1723
+ /* 文档 JSON 编辑器:限高可滚动,与列级 JSON 编辑器一致的 CodeMirror 外观 */
1724
+ .doc-json-editor[data-v-248fb70e] {
1725
+ max-height: 340px;
1726
+ overflow: auto;
1727
+ border-radius: 4px;
1728
+ }
1729
+ .doc-json-editor[data-v-248fb70e] .cm-editor {
1730
+ background: var(--db-bg-soft, transparent);
1731
+ }
1732
+
1733
+ .table-data-grid[data-v-87baf68d] {
1711
1734
  display: flex;
1712
1735
  flex-direction: column;
1713
1736
  height: 100%;
1714
1737
  }
1715
- .data-grid-wrapper[data-v-f6763da8] {
1738
+ .data-grid-wrapper[data-v-87baf68d] {
1716
1739
  flex: 1;
1717
1740
  overflow: hidden;
1718
1741
  }
1719
- .column-header-custom[data-v-f6763da8] {
1742
+ .column-header-custom[data-v-87baf68d] {
1720
1743
  display: flex;
1721
1744
  flex-direction: column;
1722
1745
  cursor: pointer;
1723
1746
  user-select: none;
1724
1747
  }
1725
- .header-main[data-v-f6763da8] {
1748
+ .header-main[data-v-87baf68d] {
1726
1749
  display: flex;
1727
1750
  align-items: center;
1728
1751
  }
1729
- .column-name[data-v-f6763da8] {
1752
+ .column-name[data-v-87baf68d] {
1730
1753
  font-weight: 600;
1731
1754
  }
1732
- .header-sub[data-v-f6763da8] {
1755
+ .header-sub[data-v-87baf68d] {
1733
1756
  display: flex;
1734
1757
  align-items: center;
1735
1758
  margin-top: 2px;
1736
1759
  max-width: 150px; /* 限制子标题区域的最大宽度 */
1737
1760
  }
1738
- .column-type[data-v-f6763da8] {
1761
+ .column-type[data-v-87baf68d] {
1739
1762
  font-size: 0.7rem;
1740
1763
  line-height: 1;
1741
1764
  flex-shrink: 0; /* 防止类型被压缩 */
1742
1765
  }
1743
- .column-comment[data-v-f6763da8] {
1766
+ .column-comment[data-v-87baf68d] {
1744
1767
  font-size: 0.7rem;
1745
1768
  line-height: 1;
1746
1769
  opacity: 0.8;
@@ -1749,104 +1772,104 @@ to {
1749
1772
  text-overflow: ellipsis;
1750
1773
  flex: 1; /* 允许注释占据剩余空间并截断 */
1751
1774
  }
1752
- .cell-value[data-v-f6763da8] {
1775
+ .cell-value[data-v-87baf68d] {
1753
1776
  max-width: 300px;
1754
1777
  overflow: hidden;
1755
1778
  text-overflow: ellipsis;
1756
1779
  white-space: nowrap;
1757
1780
  }
1758
- .grid-footer-bar[data-v-f6763da8] {
1781
+ .grid-footer-bar[data-v-87baf68d] {
1759
1782
  background: var(--db-bg-soft2);
1760
1783
  border-top: 1px solid var(--db-border);
1761
1784
  padding: 6px 12px;
1762
1785
  }
1763
- .footer-pagination[data-v-f6763da8] .pagination {
1786
+ .footer-pagination[data-v-87baf68d] .pagination {
1764
1787
  margin-bottom: 0;
1765
1788
  }
1766
1789
 
1767
- .table-detail[data-v-aefb7a86] {
1790
+ .table-detail[data-v-ee741fc9] {
1768
1791
  width: 100%;
1769
1792
  height: 100%;
1770
1793
  display: flex;
1771
1794
  flex-direction: column;
1772
1795
  }
1773
- .table-header[data-v-aefb7a86] {
1796
+ .table-header[data-v-ee741fc9] {
1774
1797
  background-color: var(--db-bg-soft2);
1775
1798
  border-bottom: 1px solid var(--db-border);
1776
1799
  padding: 8px 12px;
1777
1800
  }
1778
- .table-header-content[data-v-aefb7a86] {
1801
+ .table-header-content[data-v-ee741fc9] {
1779
1802
  display: flex;
1780
1803
  justify-content: space-between;
1781
1804
  align-items: center;
1782
1805
  }
1783
- .table-info[data-v-aefb7a86] {
1806
+ .table-info[data-v-ee741fc9] {
1784
1807
  display: flex;
1785
1808
  align-items: center;
1786
1809
  gap: 10px;
1787
1810
  }
1788
- .table-icon[data-v-aefb7a86] {
1811
+ .table-icon[data-v-ee741fc9] {
1789
1812
  font-size: 20px;
1790
1813
  color: var(--db-primary-color);
1791
1814
  }
1792
- .table-meta[data-v-aefb7a86] {
1815
+ .table-meta[data-v-ee741fc9] {
1793
1816
  display: flex;
1794
1817
  flex-direction: column;
1795
1818
  gap: 2px;
1796
1819
  }
1797
- .table-name[data-v-aefb7a86] {
1820
+ .table-name[data-v-ee741fc9] {
1798
1821
  margin: 0;
1799
1822
  font-size: 0.9375rem;
1800
1823
  font-weight: 600;
1801
1824
  }
1802
- .table-breadcrumb[data-v-aefb7a86] {
1825
+ .table-breadcrumb[data-v-ee741fc9] {
1803
1826
  display: flex;
1804
1827
  align-items: center;
1805
1828
  gap: 6px;
1806
1829
  font-size: 0.75rem;
1807
1830
  color: var(--db-text-muted);
1808
1831
  }
1809
- .table-breadcrumb .crumb[data-v-aefb7a86] {
1832
+ .table-breadcrumb .crumb[data-v-ee741fc9] {
1810
1833
  display: inline-flex;
1811
1834
  align-items: center;
1812
1835
  padding: 0;
1813
1836
  border-radius: 0;
1814
1837
  transition: color 0.15s ease;
1815
1838
  }
1816
- .table-breadcrumb .crumb-link[data-v-aefb7a86] {
1839
+ .table-breadcrumb .crumb-link[data-v-ee741fc9] {
1817
1840
  cursor: pointer;
1818
1841
  color: var(--db-primary-color);
1819
1842
  }
1820
- .table-breadcrumb .crumb-link[data-v-aefb7a86]:hover {
1843
+ .table-breadcrumb .crumb-link[data-v-ee741fc9]:hover {
1821
1844
  background-color: transparent;
1822
1845
  color: var(--db-primary-light);
1823
1846
  text-decoration: underline;
1824
1847
  }
1825
- .table-breadcrumb .crumb-current[data-v-aefb7a86] {
1848
+ .table-breadcrumb .crumb-current[data-v-ee741fc9] {
1826
1849
  font-weight: 500;
1827
1850
  color: var(--db-text-muted);
1828
1851
  }
1829
- .table-stats[data-v-aefb7a86] {
1852
+ .table-stats[data-v-ee741fc9] {
1830
1853
  display: flex;
1831
1854
  gap: 14px;
1832
1855
  }
1833
- .stat-item[data-v-aefb7a86] {
1856
+ .stat-item[data-v-ee741fc9] {
1834
1857
  display: flex;
1835
1858
  flex-direction: column;
1836
1859
  align-items: flex-end;
1837
1860
  gap: 0;
1838
1861
  }
1839
- .stat-value[data-v-aefb7a86] {
1862
+ .stat-value[data-v-ee741fc9] {
1840
1863
  font-size: 0.9375rem;
1841
1864
  font-weight: 600;
1842
1865
  line-height: 1.25;
1843
1866
  color: var(--db-dark-color);
1844
1867
  }
1845
- .stat-label[data-v-aefb7a86] {
1868
+ .stat-label[data-v-ee741fc9] {
1846
1869
  font-size: 0.6875rem;
1847
1870
  color: var(--db-text-muted);
1848
1871
  }
1849
- .table-toolbar[data-v-aefb7a86] {
1872
+ .table-toolbar[data-v-ee741fc9] {
1850
1873
  display: flex;
1851
1874
  justify-content: space-between;
1852
1875
  align-items: center;
@@ -1854,29 +1877,29 @@ to {
1854
1877
  background-color: var(--db-bg-soft2);
1855
1878
  border-bottom: 1px solid var(--db-border);
1856
1879
  }
1857
- .toolbar-left[data-v-aefb7a86] {
1880
+ .toolbar-left[data-v-ee741fc9] {
1858
1881
  display: flex;
1859
1882
  gap: 6px;
1860
1883
  align-items: center;
1861
1884
  }
1862
- .toolbar-right[data-v-aefb7a86] {
1885
+ .toolbar-right[data-v-ee741fc9] {
1863
1886
  display: flex;
1864
1887
  gap: 6px;
1865
1888
  align-items: center;
1866
1889
  }
1867
- .table-tabs[data-v-aefb7a86] {
1890
+ .table-tabs[data-v-ee741fc9] {
1868
1891
  flex: 1;
1869
1892
  display: flex;
1870
1893
  flex-direction: column;
1871
1894
  overflow: hidden;
1872
1895
  }
1873
- .nav-tabs[data-v-aefb7a86] {
1896
+ .nav-tabs[data-v-ee741fc9] {
1874
1897
  border-bottom: 1px solid var(--db-border);
1875
1898
  background-color: var(--db-gray-light);
1876
1899
  flex-shrink: 0;
1877
1900
  padding: 0 6px;
1878
1901
  }
1879
- .nav-tabs .nav-link[data-v-aefb7a86] {
1902
+ .nav-tabs .nav-link[data-v-ee741fc9] {
1880
1903
  color: var(--db-text-muted);
1881
1904
  border: none;
1882
1905
  border-bottom: 2px solid transparent;
@@ -1885,17 +1908,17 @@ to {
1885
1908
  font-size: 12px;
1886
1909
  font-weight: 500;
1887
1910
  }
1888
- .nav-tabs .nav-link[data-v-aefb7a86]:hover {
1911
+ .nav-tabs .nav-link[data-v-ee741fc9]:hover {
1889
1912
  background-color: var(--db-bg-soft);
1890
1913
  border-bottom-color: var(--db-border-light);
1891
1914
  color: var(--db-dark-color);
1892
1915
  }
1893
- .nav-tabs .nav-link.active[data-v-aefb7a86] {
1916
+ .nav-tabs .nav-link.active[data-v-ee741fc9] {
1894
1917
  background-color: transparent;
1895
1918
  border-bottom-color: var(--db-primary-color);
1896
1919
  color: var(--db-primary-color);
1897
1920
  }
1898
- .tab-content[data-v-aefb7a86] {
1921
+ .tab-content[data-v-ee741fc9] {
1899
1922
  flex: 1;
1900
1923
  overflow: auto;
1901
1924
  padding: 10px 12px;
@@ -1903,43 +1926,43 @@ to {
1903
1926
  display: flex;
1904
1927
  flex-direction: column;
1905
1928
  }
1906
- .tab-panel[data-v-aefb7a86] {
1929
+ .tab-panel[data-v-ee741fc9] {
1907
1930
  flex: 1;
1908
1931
  display: flex;
1909
1932
  flex-direction: column;
1910
1933
  height: 100%;
1911
1934
  overflow: auto;
1912
1935
  }
1913
- .data-content[data-v-aefb7a86] {
1936
+ .data-content[data-v-ee741fc9] {
1914
1937
  height: 100%;
1915
1938
  display: flex;
1916
1939
  flex-direction: column;
1917
1940
  }
1918
- .data-content.loading[data-v-aefb7a86] {
1941
+ .data-content.loading[data-v-ee741fc9] {
1919
1942
  opacity: 0.7;
1920
1943
  pointer-events: none;
1921
1944
  }
1922
- .table-responsive[data-v-aefb7a86] {
1945
+ .table-responsive[data-v-ee741fc9] {
1923
1946
  flex: 1;
1924
1947
  overflow: auto;
1925
1948
  }
1926
- .column-header[data-v-aefb7a86] {
1949
+ .column-header[data-v-ee741fc9] {
1927
1950
  position: relative;
1928
1951
  }
1929
- .column-key[data-v-aefb7a86] {
1952
+ .column-key[data-v-ee741fc9] {
1930
1953
  position: absolute;
1931
1954
  top: -5px;
1932
1955
  right: -15px;
1933
1956
  color: var(--db-primary-color);
1934
1957
  font-size: 0.75rem;
1935
1958
  }
1936
- .cell-value[data-v-aefb7a86] {
1959
+ .cell-value[data-v-ee741fc9] {
1937
1960
  max-width: 200px;
1938
1961
  overflow: hidden;
1939
1962
  text-overflow: ellipsis;
1940
1963
  white-space: nowrap;
1941
1964
  }
1942
- .loading-state[data-v-aefb7a86] {
1965
+ .loading-state[data-v-ee741fc9] {
1943
1966
  display: flex;
1944
1967
  flex-direction: column;
1945
1968
  align-items: center;
@@ -1947,7 +1970,7 @@ to {
1947
1970
  height: 200px;
1948
1971
  gap: 10px;
1949
1972
  }
1950
- .empty-state[data-v-aefb7a86] {
1973
+ .empty-state[data-v-ee741fc9] {
1951
1974
  display: flex;
1952
1975
  flex-direction: column;
1953
1976
  align-items: center;
@@ -1956,86 +1979,86 @@ to {
1956
1979
  gap: 10px;
1957
1980
  color: var(--db-text-muted);
1958
1981
  }
1959
- .empty-state i[data-v-aefb7a86] {
1982
+ .empty-state i[data-v-ee741fc9] {
1960
1983
  font-size: 28px;
1961
1984
  opacity: 0.5;
1962
1985
  }
1963
- .pagination-nav[data-v-aefb7a86] {
1986
+ .pagination-nav[data-v-ee741fc9] {
1964
1987
  margin-top: 10px;
1965
1988
  border-top: 1px solid var(--db-border);
1966
1989
  padding-top: 10px;
1967
1990
  }
1968
- .pagination-container[data-v-aefb7a86] {
1991
+ .pagination-container[data-v-ee741fc9] {
1969
1992
  display: flex;
1970
1993
  align-items: center;
1971
1994
  justify-content: space-between;
1972
1995
  flex-wrap: wrap;
1973
1996
  gap: 10px;
1974
1997
  }
1975
- .pagination-info[data-v-aefb7a86] {
1998
+ .pagination-info[data-v-ee741fc9] {
1976
1999
  font-size: 0.75rem;
1977
2000
  color: var(--db-text-muted);
1978
2001
  }
1979
- .page-size-selector[data-v-aefb7a86] {
2002
+ .page-size-selector[data-v-ee741fc9] {
1980
2003
  display: flex;
1981
2004
  align-items: center;
1982
2005
  gap: 5px;
1983
2006
  }
1984
- .page-jump[data-v-aefb7a86] {
2007
+ .page-jump[data-v-ee741fc9] {
1985
2008
  display: flex;
1986
2009
  align-items: center;
1987
2010
  gap: 5px;
1988
2011
  }
1989
- .structure-actions[data-v-aefb7a86] {
2012
+ .structure-actions[data-v-ee741fc9] {
1990
2013
  display: flex;
1991
2014
  gap: 6px;
1992
2015
  margin-bottom: 10px;
1993
2016
  }
1994
- .structure-table[data-v-aefb7a86], .indexes-table[data-v-aefb7a86], .relations-table[data-v-aefb7a86] {
2017
+ .structure-table[data-v-ee741fc9], .indexes-table[data-v-ee741fc9], .relations-table[data-v-ee741fc9] {
1995
2018
  overflow: auto;
1996
2019
  }
1997
- .structure-table table[data-v-aefb7a86], .indexes-table table[data-v-aefb7a86], .relations-table table[data-v-aefb7a86] {
2020
+ .structure-table table[data-v-ee741fc9], .indexes-table table[data-v-ee741fc9], .relations-table table[data-v-ee741fc9] {
1998
2021
  width: 100%;
1999
2022
  }
2000
- .sql-section[data-v-aefb7a86] {
2023
+ .sql-section[data-v-ee741fc9] {
2001
2024
  height: 100%;
2002
2025
  }
2003
2026
 
2004
2027
  /* 响应式设计 */
2005
2028
  @media (max-width: 768px) {
2006
- .table-header-content[data-v-aefb7a86] {
2029
+ .table-header-content[data-v-ee741fc9] {
2007
2030
  flex-direction: column;
2008
2031
  align-items: flex-start;
2009
2032
  gap: 15px;
2010
2033
  }
2011
- .table-stats[data-v-aefb7a86] {
2034
+ .table-stats[data-v-ee741fc9] {
2012
2035
  width: 100%;
2013
2036
  justify-content: space-around;
2014
2037
  }
2015
- .table-toolbar[data-v-aefb7a86] {
2038
+ .table-toolbar[data-v-ee741fc9] {
2016
2039
  flex-direction: column;
2017
2040
  align-items: stretch;
2018
2041
  gap: 10px;
2019
2042
  }
2020
- .toolbar-left[data-v-aefb7a86], .toolbar-right[data-v-aefb7a86] {
2043
+ .toolbar-left[data-v-ee741fc9], .toolbar-right[data-v-ee741fc9] {
2021
2044
  justify-content: center;
2022
2045
  }
2023
- .pagination-container[data-v-aefb7a86] {
2046
+ .pagination-container[data-v-ee741fc9] {
2024
2047
  flex-direction: column;
2025
2048
  align-items: flex-start;
2026
2049
  gap: 15px;
2027
2050
  }
2028
- .pagination[data-v-aefb7a86] {
2051
+ .pagination[data-v-ee741fc9] {
2029
2052
  width: 100%;
2030
2053
  justify-content: center;
2031
2054
  }
2032
2055
  }
2033
2056
 
2034
- .database-explorer[data-v-e2c2b105] {
2057
+ .database-explorer[data-v-eb8894a1] {
2035
2058
  height: 100vh;
2036
2059
  min-height: 600px;
2037
2060
  }
2038
- .explorer-layout[data-v-e2c2b105] {
2061
+ .explorer-layout[data-v-eb8894a1] {
2039
2062
  display: flex;
2040
2063
  height: 100%;
2041
2064
  background: var(--db-surface);
@@ -2043,7 +2066,7 @@ to {
2043
2066
  }
2044
2067
 
2045
2068
  /* 左侧边栏 */
2046
- .explorer-sidebar[data-v-e2c2b105] {
2069
+ .explorer-sidebar[data-v-eb8894a1] {
2047
2070
  width: 264px;
2048
2071
  flex-shrink: 0;
2049
2072
  border-right: 1px solid var(--db-border);
@@ -2051,19 +2074,19 @@ to {
2051
2074
  flex-direction: column;
2052
2075
  background: var(--db-gray-light);
2053
2076
  }
2054
- .sidebar-content[data-v-e2c2b105] {
2077
+ .sidebar-content[data-v-eb8894a1] {
2055
2078
  flex: 1;
2056
2079
  overflow-y: auto;
2057
2080
  padding: 0.5rem 0;
2058
2081
  display: flex;
2059
2082
  flex-direction: column;
2060
2083
  }
2061
- .tree-container[data-v-e2c2b105] {
2084
+ .tree-container[data-v-eb8894a1] {
2062
2085
  flex: 1;
2063
2086
  }
2064
2087
 
2065
2088
  /* 工具信息样式 - 固定在左下角 */
2066
- .sidebar-tool-info[data-v-e2c2b105] {
2089
+ .sidebar-tool-info[data-v-eb8894a1] {
2067
2090
  padding: 0.5rem 0.625rem;
2068
2091
  border-top: 1px solid var(--db-border);
2069
2092
  background: transparent;
@@ -2073,10 +2096,10 @@ to {
2073
2096
  cursor: pointer;
2074
2097
  transition: background-color 0.15s ease;
2075
2098
  }
2076
- .sidebar-tool-info[data-v-e2c2b105]:hover {
2099
+ .sidebar-tool-info[data-v-eb8894a1]:hover {
2077
2100
  background: var(--db-bg-soft);
2078
2101
  }
2079
- .tool-logo[data-v-e2c2b105] {
2102
+ .tool-logo[data-v-eb8894a1] {
2080
2103
  width: 24px;
2081
2104
  height: 24px;
2082
2105
  border-radius: 4px;
@@ -2088,22 +2111,22 @@ to {
2088
2111
  font-size: 0.8125rem;
2089
2112
  flex-shrink: 0;
2090
2113
  }
2091
- .tool-details[data-v-e2c2b105] {
2114
+ .tool-details[data-v-eb8894a1] {
2092
2115
  flex: 1;
2093
2116
  display: flex;
2094
2117
  flex-direction: column;
2095
2118
  gap: 0.125rem;
2096
2119
  }
2097
- .tool-name[data-v-e2c2b105] {
2120
+ .tool-name[data-v-eb8894a1] {
2098
2121
  font-size: 0.875rem;
2099
2122
  font-weight: 600;
2100
2123
  color: var(--db-black);
2101
2124
  }
2102
- .tool-description[data-v-e2c2b105] {
2125
+ .tool-description[data-v-eb8894a1] {
2103
2126
  font-size: 0.75rem;
2104
2127
  color: var(--db-darker-color);
2105
2128
  }
2106
- .sidebar-header[data-v-e2c2b105] {
2129
+ .sidebar-header[data-v-eb8894a1] {
2107
2130
  padding: 0.5rem 0.625rem;
2108
2131
  border-bottom: 1px solid var(--db-border);
2109
2132
  background: transparent;
@@ -2111,7 +2134,7 @@ to {
2111
2134
  justify-content: space-between;
2112
2135
  align-items: center;
2113
2136
  }
2114
- .sidebar-title[data-v-e2c2b105] {
2137
+ .sidebar-title[data-v-eb8894a1] {
2115
2138
  margin: 0;
2116
2139
  font-size: 0.6875rem;
2117
2140
  font-weight: 600;
@@ -2122,14 +2145,14 @@ to {
2122
2145
  align-items: center;
2123
2146
  gap: 0.375rem;
2124
2147
  }
2125
- .sidebar-title i[data-v-e2c2b105] {
2148
+ .sidebar-title i[data-v-eb8894a1] {
2126
2149
  color: var(--db-text-muted);
2127
2150
  }
2128
- .sidebar-actions[data-v-e2c2b105] {
2151
+ .sidebar-actions[data-v-eb8894a1] {
2129
2152
  display: flex;
2130
2153
  gap: 0.25rem;
2131
2154
  }
2132
- .sidebar-actions .btn[data-v-e2c2b105] {
2155
+ .sidebar-actions .btn[data-v-eb8894a1] {
2133
2156
  padding: 0.15rem 0.4rem;
2134
2157
  font-size: 0.75rem;
2135
2158
  border: 1px solid var(--db-border);
@@ -2138,49 +2161,49 @@ to {
2138
2161
  border-radius: 4px;
2139
2162
  transition: all 0.15s ease;
2140
2163
  }
2141
- .sidebar-actions .btn[data-v-e2c2b105]:hover {
2164
+ .sidebar-actions .btn[data-v-eb8894a1]:hover {
2142
2165
  background-color: var(--db-bg-soft);
2143
2166
  border-color: var(--db-border-light);
2144
2167
  color: var(--db-dark-color);
2145
2168
  }
2146
- .sidebar-actions .btn-outline-primary[data-v-e2c2b105] {
2169
+ .sidebar-actions .btn-outline-primary[data-v-eb8894a1] {
2147
2170
  border-color: var(--db-border);
2148
2171
  color: var(--db-text-muted);
2149
2172
  }
2150
- .sidebar-actions .btn-outline-primary[data-v-e2c2b105]:hover {
2173
+ .sidebar-actions .btn-outline-primary[data-v-eb8894a1]:hover {
2151
2174
  background-color: var(--db-primary-bg);
2152
2175
  border-color: var(--db-primary-color);
2153
2176
  color: var(--db-primary-color);
2154
2177
  }
2155
- .sidebar-actions .btn-outline-success[data-v-e2c2b105] {
2178
+ .sidebar-actions .btn-outline-success[data-v-eb8894a1] {
2156
2179
  border-color: var(--db-border);
2157
2180
  color: var(--db-text-muted);
2158
2181
  }
2159
- .sidebar-actions .btn-outline-success[data-v-e2c2b105]:hover {
2182
+ .sidebar-actions .btn-outline-success[data-v-eb8894a1]:hover {
2160
2183
  background-color: var(--db-success-bg);
2161
2184
  border-color: var(--db-accent-color);
2162
2185
  color: var(--db-accent-color);
2163
2186
  }
2164
- .sidebar-content[data-v-e2c2b105] {
2187
+ .sidebar-content[data-v-eb8894a1] {
2165
2188
  flex: 1;
2166
2189
  overflow-y: auto;
2167
2190
  padding: 0.25rem 0;
2168
2191
  }
2169
2192
 
2170
2193
  /* 树形结构 */
2171
- .tree-container[data-v-e2c2b105] {
2194
+ .tree-container[data-v-eb8894a1] {
2172
2195
  font-size: 0.8125rem;
2173
2196
  user-select: none;
2174
2197
  }
2175
- .tree-node[data-v-e2c2b105] {
2198
+ .tree-node[data-v-eb8894a1] {
2176
2199
  margin-bottom: 0;
2177
2200
  }
2178
- .tree-children[data-v-e2c2b105] {
2201
+ .tree-children[data-v-eb8894a1] {
2179
2202
  margin-left: 0.5rem;
2180
2203
  border-left: 1px solid var(--db-border);
2181
2204
  padding-left: 0.375rem;
2182
2205
  }
2183
- .node-content[data-v-e2c2b105] {
2206
+ .node-content[data-v-eb8894a1] {
2184
2207
  display: flex;
2185
2208
  align-items: center;
2186
2209
  padding: 0.175rem 0.5rem;
@@ -2191,7 +2214,7 @@ to {
2191
2214
  border-radius: 4px;
2192
2215
  gap: 0.125rem;
2193
2216
  }
2194
- .node-expand[data-v-e2c2b105] {
2217
+ .node-expand[data-v-eb8894a1] {
2195
2218
  width: 14px;
2196
2219
  height: 14px;
2197
2220
  display: flex;
@@ -2200,29 +2223,29 @@ to {
2200
2223
  flex-shrink: 0;
2201
2224
  margin-right: 0.125rem;
2202
2225
  }
2203
- .node-expand i[data-v-e2c2b105] {
2226
+ .node-expand i[data-v-eb8894a1] {
2204
2227
  font-size: 0.625rem;
2205
2228
  color: var(--db-text-muted);
2206
2229
  transition: transform 0.15s ease;
2207
2230
  }
2208
- .node-expand i.expanded[data-v-e2c2b105] {
2231
+ .node-expand i.expanded[data-v-eb8894a1] {
2209
2232
  transform: rotate(90deg);
2210
2233
  }
2211
- .node-main[data-v-e2c2b105] {
2234
+ .node-main[data-v-eb8894a1] {
2212
2235
  display: flex;
2213
2236
  align-items: center;
2214
2237
  flex: 1;
2215
2238
  min-width: 0;
2216
2239
  }
2217
- .node-content[data-v-e2c2b105]:hover {
2240
+ .node-content[data-v-eb8894a1]:hover {
2218
2241
  background-color: var(--db-bg-soft);
2219
2242
  }
2220
- .tree-node.selected .node-content[data-v-e2c2b105] {
2243
+ .tree-node.selected .node-content[data-v-eb8894a1] {
2221
2244
  background-color: var(--db-primary-bg);
2222
2245
  color: var(--db-dark-color);
2223
2246
  box-shadow: none;
2224
2247
  }
2225
- .tree-node.selected .node-content[data-v-e2c2b105]::before {
2248
+ .tree-node.selected .node-content[data-v-eb8894a1]::before {
2226
2249
  content: '';
2227
2250
  position: absolute;
2228
2251
  left: 0;
@@ -2232,42 +2255,42 @@ to {
2232
2255
  background: var(--db-primary-color);
2233
2256
  border-radius: 2px 0 0 2px;
2234
2257
  }
2235
- .node-icon[data-v-e2c2b105] {
2258
+ .node-icon[data-v-eb8894a1] {
2236
2259
  width: 16px;
2237
2260
  display: flex;
2238
2261
  justify-content: center;
2239
2262
  flex-shrink: 0;
2240
2263
  margin-right: 0.375rem;
2241
2264
  }
2242
- .node-icon i[data-v-e2c2b105] {
2265
+ .node-icon i[data-v-eb8894a1] {
2243
2266
  font-size: 0.8125rem;
2244
2267
  color: var(--db-text-muted);
2245
2268
  }
2246
- .node-label[data-v-e2c2b105] {
2269
+ .node-label[data-v-eb8894a1] {
2247
2270
  flex: 1;
2248
2271
  display: flex;
2249
2272
  align-items: center;
2250
2273
  gap: 0.375rem;
2251
2274
  min-width: 0;
2252
2275
  }
2253
- .connection-name[data-v-e2c2b105],
2254
- .database-name[data-v-e2c2b105],
2255
- .table-name[data-v-e2c2b105] {
2276
+ .connection-name[data-v-eb8894a1],
2277
+ .database-name[data-v-eb8894a1],
2278
+ .table-name[data-v-eb8894a1] {
2256
2279
  font-weight: 400;
2257
2280
  white-space: nowrap;
2258
2281
  overflow: hidden;
2259
2282
  text-overflow: ellipsis;
2260
2283
  line-height: 1.4;
2261
2284
  }
2262
- .tree-node.selected .connection-name[data-v-e2c2b105],
2263
- .tree-node.selected .database-name[data-v-e2c2b105],
2264
- .tree-node.selected .table-name[data-v-e2c2b105] {
2285
+ .tree-node.selected .connection-name[data-v-eb8894a1],
2286
+ .tree-node.selected .database-name[data-v-eb8894a1],
2287
+ .tree-node.selected .table-name[data-v-eb8894a1] {
2265
2288
  font-weight: 500;
2266
2289
  }
2267
2290
 
2268
2291
  /* 类型 / 行数说明:走 VSCode 树的「描述文字」样式,浅灰无底色,减少噪声 */
2269
- .connection-type[data-v-e2c2b105],
2270
- .table-info[data-v-e2c2b105] {
2292
+ .connection-type[data-v-eb8894a1],
2293
+ .table-info[data-v-eb8894a1] {
2271
2294
  font-size: 0.6875rem;
2272
2295
  color: var(--db-text-faint);
2273
2296
  background-color: transparent;
@@ -2276,21 +2299,21 @@ to {
2276
2299
  font-weight: 400;
2277
2300
  white-space: nowrap;
2278
2301
  }
2279
- .tree-node.selected .connection-type[data-v-e2c2b105],
2280
- .tree-node.selected .table-info[data-v-e2c2b105] {
2302
+ .tree-node.selected .connection-type[data-v-eb8894a1],
2303
+ .tree-node.selected .table-info[data-v-eb8894a1] {
2281
2304
  background-color: transparent;
2282
2305
  color: var(--db-text-muted);
2283
2306
  }
2284
- .node-actions[data-v-e2c2b105] {
2307
+ .node-actions[data-v-eb8894a1] {
2285
2308
  display: flex;
2286
2309
  gap: 0.125rem;
2287
2310
  opacity: 0;
2288
2311
  transition: opacity 0.15s ease;
2289
2312
  }
2290
- .node-content:hover .node-actions[data-v-e2c2b105] {
2313
+ .node-content:hover .node-actions[data-v-eb8894a1] {
2291
2314
  opacity: 1;
2292
2315
  }
2293
- .btn-icon[data-v-e2c2b105] {
2316
+ .btn-icon[data-v-eb8894a1] {
2294
2317
  padding: 0;
2295
2318
  background: transparent;
2296
2319
  border: none;
@@ -2302,138 +2325,138 @@ to {
2302
2325
  width: 18px;
2303
2326
  height: 18px;
2304
2327
  }
2305
- .btn-icon[data-v-e2c2b105]:hover {
2328
+ .btn-icon[data-v-eb8894a1]:hover {
2306
2329
  background-color: var(--db-bg-soft);
2307
2330
  }
2308
- .btn-icon i[data-v-e2c2b105] {
2331
+ .btn-icon i[data-v-eb8894a1] {
2309
2332
  font-size: 0.6875rem;
2310
2333
  color: var(--db-text-muted);
2311
2334
  }
2312
- .tree-node.selected .btn-icon[data-v-e2c2b105]:hover {
2335
+ .tree-node.selected .btn-icon[data-v-eb8894a1]:hover {
2313
2336
  background-color: var(--db-bg-soft);
2314
2337
  }
2315
- .tree-node.selected .btn-icon i[data-v-e2c2b105] {
2338
+ .tree-node.selected .btn-icon i[data-v-eb8894a1] {
2316
2339
  color: var(--db-text-muted);
2317
2340
  }
2318
- .tree-node.selected .btn-icon:hover i[data-v-e2c2b105] {
2341
+ .tree-node.selected .btn-icon:hover i[data-v-eb8894a1] {
2319
2342
  color: var(--db-dark-color);
2320
2343
  }
2321
- .btn-icon-danger[data-v-e2c2b105]:hover {
2344
+ .btn-icon-danger[data-v-eb8894a1]:hover {
2322
2345
  background-color: var(--db-danger-bg);
2323
2346
  }
2324
- .btn-icon-danger:hover i[data-v-e2c2b105] {
2347
+ .btn-icon-danger:hover i[data-v-eb8894a1] {
2325
2348
  color: #dc2626;
2326
2349
  }
2327
- .node-spinner[data-v-e2c2b105] {
2350
+ .node-spinner[data-v-eb8894a1] {
2328
2351
  display: flex;
2329
2352
  align-items: center;
2330
2353
  justify-content: center;
2331
2354
  }
2332
- .spinner-border-sm[data-v-e2c2b105] {
2355
+ .spinner-border-sm[data-v-eb8894a1] {
2333
2356
  width: 1rem;
2334
2357
  height: 1rem;
2335
2358
  border-width: 0.15em;
2336
2359
  }
2337
2360
 
2338
2361
  /* 连接节点样式 */
2339
- .connection-content[data-v-e2c2b105] {
2362
+ .connection-content[data-v-eb8894a1] {
2340
2363
  font-weight: 500;
2341
2364
  color: var(--db-text-body);
2342
2365
  }
2343
- .connection-content[data-v-e2c2b105]:hover {
2366
+ .connection-content[data-v-eb8894a1]:hover {
2344
2367
  background-color: var(--db-bg-soft);
2345
2368
  }
2346
- .tree-node.selected .connection-content[data-v-e2c2b105] {
2369
+ .tree-node.selected .connection-content[data-v-eb8894a1] {
2347
2370
  background-color: var(--db-primary-bg);
2348
2371
  color: var(--db-dark-color);
2349
2372
  }
2350
2373
 
2351
2374
  /* 数据库节点样式 */
2352
- .database-content[data-v-e2c2b105] {
2375
+ .database-content[data-v-eb8894a1] {
2353
2376
  color: var(--db-text-body);
2354
2377
  }
2355
- .database-content[data-v-e2c2b105]:hover {
2378
+ .database-content[data-v-eb8894a1]:hover {
2356
2379
  background-color: var(--db-bg-soft);
2357
2380
  }
2358
- .tree-node.selected .database-content[data-v-e2c2b105] {
2381
+ .tree-node.selected .database-content[data-v-eb8894a1] {
2359
2382
  background-color: var(--db-primary-bg);
2360
2383
  color: var(--db-dark-color);
2361
2384
  }
2362
2385
 
2363
2386
  /* 表节点样式 */
2364
- .table-content[data-v-e2c2b105] {
2387
+ .table-content[data-v-eb8894a1] {
2365
2388
  color: var(--db-text-body);
2366
2389
  }
2367
- .table-content[data-v-e2c2b105]:hover {
2390
+ .table-content[data-v-eb8894a1]:hover {
2368
2391
  background-color: var(--db-bg-soft);
2369
2392
  }
2370
- .tree-node.selected .table-content[data-v-e2c2b105] {
2393
+ .tree-node.selected .table-content[data-v-eb8894a1] {
2371
2394
  background-color: var(--db-primary-bg);
2372
2395
  color: var(--db-dark-color);
2373
2396
  }
2374
2397
 
2375
2398
  /* 数据库品牌色彩 */
2376
- .db-mysql[data-v-e2c2b105] {
2399
+ .db-mysql[data-v-eb8894a1] {
2377
2400
  color: #00758f !important;
2378
2401
  background: #00758f;
2379
2402
  -webkit-background-clip: text;
2380
2403
  -webkit-text-fill-color: transparent;
2381
2404
  }
2382
- .db-mysql-bg[data-v-e2c2b105] { background: #00758f;
2405
+ .db-mysql-bg[data-v-eb8894a1] { background: #00758f;
2383
2406
  }
2384
- .db-postgres[data-v-e2c2b105] {
2407
+ .db-postgres[data-v-eb8894a1] {
2385
2408
  color: #336791 !important;
2386
2409
  background: #336791;
2387
2410
  -webkit-background-clip: text;
2388
2411
  -webkit-text-fill-color: transparent;
2389
2412
  }
2390
- .db-postgres-bg[data-v-e2c2b105] { background: #336791;
2413
+ .db-postgres-bg[data-v-eb8894a1] { background: #336791;
2391
2414
  }
2392
- .db-sqlite[data-v-e2c2b105] {
2415
+ .db-sqlite[data-v-eb8894a1] {
2393
2416
  color: #003b57 !important;
2394
2417
  background: #003b57;
2395
2418
  -webkit-background-clip: text;
2396
2419
  -webkit-text-fill-color: transparent;
2397
2420
  }
2398
- .db-sqlite-bg[data-v-e2c2b105] { background: #003b57;
2421
+ .db-sqlite-bg[data-v-eb8894a1] { background: #003b57;
2399
2422
  }
2400
- .db-mssql[data-v-e2c2b105] {
2423
+ .db-mssql[data-v-eb8894a1] {
2401
2424
  color: #cc2927 !important;
2402
2425
  background: #cc2927;
2403
2426
  -webkit-background-clip: text;
2404
2427
  -webkit-text-fill-color: transparent;
2405
2428
  }
2406
- .db-mssql-bg[data-v-e2c2b105] { background: #cc2927;
2429
+ .db-mssql-bg[data-v-eb8894a1] { background: #cc2927;
2407
2430
  }
2408
- .db-oracle[data-v-e2c2b105] {
2431
+ .db-oracle[data-v-eb8894a1] {
2409
2432
  color: #f80000 !important;
2410
2433
  background: #f80000;
2411
2434
  -webkit-background-clip: text;
2412
2435
  -webkit-text-fill-color: transparent;
2413
2436
  }
2414
- .db-oracle-bg[data-v-e2c2b105] { background: #f80000;
2437
+ .db-oracle-bg[data-v-eb8894a1] { background: #f80000;
2415
2438
  }
2416
- .db-default[data-v-e2c2b105] {
2439
+ .db-default[data-v-eb8894a1] {
2417
2440
  color: var(--db-text-muted) !important;
2418
2441
  background: linear-gradient(135deg, var(--db-text-muted), var(--db-gray-dark));
2419
2442
  -webkit-background-clip: text;
2420
2443
  -webkit-text-fill-color: transparent;
2421
2444
  }
2422
- .db-default-bg[data-v-e2c2b105] { background: linear-gradient(135deg, var(--db-text-muted), var(--db-gray-dark));
2445
+ .db-default-bg[data-v-eb8894a1] { background: linear-gradient(135deg, var(--db-text-muted), var(--db-gray-dark));
2423
2446
  }
2424
- .tree-node.selected .db-mysql[data-v-e2c2b105],
2425
- .tree-node.selected .db-postgres[data-v-e2c2b105],
2426
- .tree-node.selected .db-sqlite[data-v-e2c2b105],
2427
- .tree-node.selected .db-mssql[data-v-e2c2b105],
2428
- .tree-node.selected .db-oracle[data-v-e2c2b105],
2429
- .tree-node.selected .db-default[data-v-e2c2b105] {
2447
+ .tree-node.selected .db-mysql[data-v-eb8894a1],
2448
+ .tree-node.selected .db-postgres[data-v-eb8894a1],
2449
+ .tree-node.selected .db-sqlite[data-v-eb8894a1],
2450
+ .tree-node.selected .db-mssql[data-v-eb8894a1],
2451
+ .tree-node.selected .db-oracle[data-v-eb8894a1],
2452
+ .tree-node.selected .db-default[data-v-eb8894a1] {
2430
2453
  color: var(--db-on-accent) !important;
2431
2454
  background: none;
2432
2455
  -webkit-text-fill-color: var(--db-on-accent);
2433
2456
  }
2434
2457
 
2435
2458
  /* 数据库Logo图标 */
2436
- .db-logo[data-v-e2c2b105] {
2459
+ .db-logo[data-v-eb8894a1] {
2437
2460
  width: 16px;
2438
2461
  height: 16px;
2439
2462
  border-radius: 3px;
@@ -2445,33 +2468,33 @@ to {
2445
2468
  line-height: 1;
2446
2469
  color: var(--db-on-accent);
2447
2470
  }
2448
- .db-logo-mysql[data-v-e2c2b105] {
2471
+ .db-logo-mysql[data-v-eb8894a1] {
2449
2472
  background: #00758f;
2450
2473
  border: 1px solid #004d61;
2451
2474
  }
2452
- .db-logo-postgres[data-v-e2c2b105] {
2475
+ .db-logo-postgres[data-v-eb8894a1] {
2453
2476
  background: #336791;
2454
2477
  border: 1px solid #244566;
2455
2478
  }
2456
- .db-logo-sqlite[data-v-e2c2b105] {
2479
+ .db-logo-sqlite[data-v-eb8894a1] {
2457
2480
  background: #003b57;
2458
2481
  border: 1px solid #002939;
2459
2482
  }
2460
- .db-logo-mssql[data-v-e2c2b105] {
2483
+ .db-logo-mssql[data-v-eb8894a1] {
2461
2484
  background: #cc2927;
2462
2485
  border: 1px solid #8b1f1d;
2463
2486
  }
2464
- .db-logo-oracle[data-v-e2c2b105] {
2487
+ .db-logo-oracle[data-v-eb8894a1] {
2465
2488
  background: #f80000;
2466
2489
  border: 1px solid #b30000;
2467
2490
  }
2468
- .db-logo-default[data-v-e2c2b105] {
2491
+ .db-logo-default[data-v-eb8894a1] {
2469
2492
  background: linear-gradient(135deg, var(--db-text-muted), var(--db-gray-dark));
2470
2493
  border: 1px solid var(--db-darker-color);
2471
2494
  }
2472
2495
 
2473
2496
  /* 右侧主内容 */
2474
- .explorer-main[data-v-e2c2b105] {
2497
+ .explorer-main[data-v-eb8894a1] {
2475
2498
  flex: 1;
2476
2499
  display: flex;
2477
2500
  flex-direction: column;
@@ -2480,24 +2503,24 @@ to {
2480
2503
  }
2481
2504
 
2482
2505
  /* 详情组件容器 */
2483
- .explorer-main[data-v-e2c2b105] > * {
2506
+ .explorer-main[data-v-eb8894a1] > * {
2484
2507
  flex: 1;
2485
2508
  display: flex;
2486
2509
  flex-direction: column;
2487
2510
  height: 100%;
2488
2511
  }
2489
- .content-tabs[data-v-e2c2b105] {
2512
+ .content-tabs[data-v-eb8894a1] {
2490
2513
  flex: 1;
2491
2514
  display: flex;
2492
2515
  flex-direction: column;
2493
2516
  height: 100%;
2494
2517
  }
2495
- .nav-tabs[data-v-e2c2b105] {
2518
+ .nav-tabs[data-v-eb8894a1] {
2496
2519
  background: var(--db-light-color);
2497
2520
  border-bottom: 1px solid var(--db-gray-medium);
2498
2521
  padding: 0 1rem;
2499
2522
  }
2500
- .nav-link[data-v-e2c2b105] {
2523
+ .nav-link[data-v-eb8894a1] {
2501
2524
  border: none;
2502
2525
  background: transparent;
2503
2526
  color: var(--db-darker-color);
@@ -2505,16 +2528,16 @@ to {
2505
2528
  font-weight: 500;
2506
2529
  transition: all 0.2s ease;
2507
2530
  }
2508
- .nav-link[data-v-e2c2b105]:hover {
2531
+ .nav-link[data-v-eb8894a1]:hover {
2509
2532
  color: #667eea;
2510
2533
  background: rgba(102, 126, 234, 0.1);
2511
2534
  }
2512
- .nav-link.active[data-v-e2c2b105] {
2535
+ .nav-link.active[data-v-eb8894a1] {
2513
2536
  color: #667eea;
2514
2537
  background: var(--db-surface);
2515
2538
  border-bottom: 2px solid #667eea;
2516
2539
  }
2517
- .tab-content[data-v-e2c2b105] {
2540
+ .tab-content[data-v-eb8894a1] {
2518
2541
  flex: 1;
2519
2542
  overflow-y: auto;
2520
2543
  padding: 1.25rem;
@@ -2522,15 +2545,15 @@ to {
2522
2545
  }
2523
2546
 
2524
2547
  /* 概览样式 */
2525
- .overview-section[data-v-e2c2b105] {
2548
+ .overview-section[data-v-eb8894a1] {
2526
2549
  padding: 1rem 0;
2527
2550
  }
2528
- .info-cards[data-v-e2c2b105] {
2551
+ .info-cards[data-v-eb8894a1] {
2529
2552
  display: grid;
2530
2553
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2531
2554
  gap: 0.75rem;
2532
2555
  }
2533
- .info-card[data-v-e2c2b105] {
2556
+ .info-card[data-v-eb8894a1] {
2534
2557
  background: linear-gradient(135deg, var(--db-light-color) 0%, var(--db-border) 100%);
2535
2558
  border-radius: 8px;
2536
2559
  padding: 0.875rem;
@@ -2539,7 +2562,7 @@ to {
2539
2562
  gap: 0.75rem;
2540
2563
  border: 1px solid var(--db-gray-medium);
2541
2564
  }
2542
- .card-icon[data-v-e2c2b105] {
2565
+ .card-icon[data-v-eb8894a1] {
2543
2566
  width: 36px;
2544
2567
  height: 36px;
2545
2568
  background: var(--db-primary-color);
@@ -2550,13 +2573,13 @@ to {
2550
2573
  color: var(--db-on-accent);
2551
2574
  font-size: 1rem;
2552
2575
  }
2553
- .card-content h6[data-v-e2c2b105] {
2576
+ .card-content h6[data-v-eb8894a1] {
2554
2577
  margin: 0 0 0.25rem 0;
2555
2578
  color: var(--db-darker-color);
2556
2579
  font-size: 0.8125rem;
2557
2580
  font-weight: 500;
2558
2581
  }
2559
- .card-value[data-v-e2c2b105] {
2582
+ .card-value[data-v-eb8894a1] {
2560
2583
  margin: 0;
2561
2584
  color: var(--db-dark-color);
2562
2585
  font-weight: 600;
@@ -2564,12 +2587,12 @@ to {
2564
2587
  }
2565
2588
 
2566
2589
  /* 表格网格 */
2567
- .table-grid[data-v-e2c2b105] {
2590
+ .table-grid[data-v-eb8894a1] {
2568
2591
  display: grid;
2569
2592
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
2570
2593
  gap: 0.75rem;
2571
2594
  }
2572
- .table-card[data-v-e2c2b105] {
2595
+ .table-card[data-v-eb8894a1] {
2573
2596
  background: var(--db-surface);
2574
2597
  border: 1px solid var(--db-gray-medium);
2575
2598
  border-radius: 8px;
@@ -2577,18 +2600,18 @@ to {
2577
2600
  cursor: pointer;
2578
2601
  transition: all 0.2s ease;
2579
2602
  }
2580
- .table-card[data-v-e2c2b105]:hover {
2603
+ .table-card[data-v-eb8894a1]:hover {
2581
2604
  border-color: var(--db-primary-color);
2582
2605
  box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
2583
2606
  transform: translateY(-2px);
2584
2607
  }
2585
- .table-card .card-header[data-v-e2c2b105] {
2608
+ .table-card .card-header[data-v-eb8894a1] {
2586
2609
  display: flex;
2587
2610
  align-items: center;
2588
2611
  gap: 0.5rem;
2589
2612
  margin-bottom: 0.5rem;
2590
2613
  }
2591
- .table-icon[data-v-e2c2b105] {
2614
+ .table-icon[data-v-eb8894a1] {
2592
2615
  width: 28px;
2593
2616
  height: 28px;
2594
2617
  background: var(--db-accent-color);
@@ -2598,37 +2621,37 @@ to {
2598
2621
  justify-content: center;
2599
2622
  color: var(--db-on-accent);
2600
2623
  }
2601
- .table-name[data-v-e2c2b105] {
2624
+ .table-name[data-v-eb8894a1] {
2602
2625
  font-weight: 600;
2603
2626
  color: var(--db-dark-color);
2604
2627
  }
2605
- .table-stats[data-v-e2c2b105] {
2628
+ .table-stats[data-v-eb8894a1] {
2606
2629
  display: flex;
2607
2630
  gap: 0.75rem;
2608
2631
  margin-bottom: 0.5rem;
2609
2632
  }
2610
- .stat[data-v-e2c2b105] {
2633
+ .stat[data-v-eb8894a1] {
2611
2634
  display: flex;
2612
2635
  flex-direction: column;
2613
2636
  gap: 0.25rem;
2614
2637
  }
2615
- .stat-label[data-v-e2c2b105] {
2638
+ .stat-label[data-v-eb8894a1] {
2616
2639
  font-size: 0.75rem;
2617
2640
  color: var(--db-darker-color);
2618
2641
  }
2619
- .stat-value[data-v-e2c2b105] {
2642
+ .stat-value[data-v-eb8894a1] {
2620
2643
  font-size: 0.875rem;
2621
2644
  font-weight: 600;
2622
2645
  color: var(--db-black);
2623
2646
  }
2624
- .table-comment[data-v-e2c2b105] {
2647
+ .table-comment[data-v-eb8894a1] {
2625
2648
  font-size: 0.75rem;
2626
2649
  color: var(--db-darker-color);
2627
2650
  font-style: italic;
2628
2651
  }
2629
2652
 
2630
2653
  /* 数据工具栏 */
2631
- .data-toolbar[data-v-e2c2b105] {
2654
+ .data-toolbar[data-v-eb8894a1] {
2632
2655
  display: flex;
2633
2656
  justify-content: space-between;
2634
2657
  align-items: center;
@@ -2637,16 +2660,16 @@ to {
2637
2660
  background: var(--db-light-color);
2638
2661
  border-radius: 8px;
2639
2662
  }
2640
- .toolbar-left[data-v-e2c2b105],
2641
- .toolbar-right[data-v-e2c2b105] {
2663
+ .toolbar-left[data-v-eb8894a1],
2664
+ .toolbar-right[data-v-eb8894a1] {
2642
2665
  display: flex;
2643
2666
  gap: 0.5rem;
2644
2667
  align-items: center;
2645
2668
  }
2646
2669
 
2647
2670
  /* 空状态 */
2648
- .empty-state[data-v-e2c2b105],
2649
- .default-state[data-v-e2c2b105] {
2671
+ .empty-state[data-v-eb8894a1],
2672
+ .default-state[data-v-eb8894a1] {
2650
2673
  display: flex;
2651
2674
  flex-direction: column;
2652
2675
  align-items: center;
@@ -2655,33 +2678,33 @@ to {
2655
2678
  color: var(--db-darker-color);
2656
2679
  text-align: center;
2657
2680
  }
2658
- .empty-icon[data-v-e2c2b105],
2659
- .default-icon[data-v-e2c2b105] {
2681
+ .empty-icon[data-v-eb8894a1],
2682
+ .default-icon[data-v-eb8894a1] {
2660
2683
  font-size: 1.75rem;
2661
2684
  margin-bottom: 0.5rem;
2662
2685
  opacity: 0.4;
2663
2686
  }
2664
- .empty-text h5[data-v-e2c2b105],
2665
- .default-content h5[data-v-e2c2b105] {
2687
+ .empty-text h5[data-v-eb8894a1],
2688
+ .default-content h5[data-v-eb8894a1] {
2666
2689
  color: var(--db-dark-color);
2667
2690
  margin-bottom: 0.5rem;
2668
2691
  }
2669
2692
 
2670
2693
  /* 响应式 */
2671
2694
  @media (max-width: 768px) {
2672
- .explorer-layout[data-v-e2c2b105] {
2695
+ .explorer-layout[data-v-eb8894a1] {
2673
2696
  flex-direction: column;
2674
2697
  }
2675
- .explorer-sidebar[data-v-e2c2b105] {
2698
+ .explorer-sidebar[data-v-eb8894a1] {
2676
2699
  width: 100%;
2677
2700
  height: 40vh;
2678
2701
  border-right: none;
2679
2702
  border-bottom: 1px solid var(--db-gray-medium);
2680
2703
  }
2681
- .info-cards[data-v-e2c2b105] {
2704
+ .info-cards[data-v-eb8894a1] {
2682
2705
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2683
2706
  }
2684
- .table-grid[data-v-e2c2b105] {
2707
+ .table-grid[data-v-eb8894a1] {
2685
2708
  grid-template-columns: 1fr;
2686
2709
  }
2687
2710
  }