@ganwei-web/ganwei-pc-cli 6.3.6 → 6.3.7

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 (17) hide show
  1. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/fonts/font/iconfont.css +7 -3
  2. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/fonts/font/iconfont.js +1 -1
  3. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/fonts/font/iconfont.json +7 -0
  4. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/fonts/font/iconfont.ttf +0 -0
  5. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/fonts/font/iconfont.woff +0 -0
  6. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/fonts/font/iconfont.woff2 +0 -0
  7. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/themes/dark-6-1.css +885 -877
  8. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/themes/green-6-1.css +8 -0
  9. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-index/public/static/themes/light-6-1.css +8 -0
  10. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-login/src/views/ssoLogin.vue +15 -11
  11. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-template/env.d.ts +6 -0
  12. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-template/public/static/themes/dark-6-1.css +887 -454
  13. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-template/public/static/themes/light-6-1.css +427 -0
  14. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-template/src/main.ts +2 -2
  15. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-template/src/utils/signalr.ts +49 -22
  16. package/ganwei-iotcenter-index-6.2.3/packages/ganwei-iotcenter-template/vite.config.ts +10 -0
  17. package/package.json +1 -1
@@ -94,11 +94,19 @@
94
94
  --frame-main-background-3: var(--gw-color-Neutrals22);
95
95
  /* 任务库 popover 背景 */
96
96
  --frame-main-background-4: var(--gw-color-Neutrals20);
97
+ --frame-main-background-primary: var(--gw-color-primary);
98
+ --frame-main-background-success: var(--gw-color-success);
99
+ --frame-main-background-waning: var(--gw-color-waning);
100
+ --frame-main-background-danger: var(--gw-color-danger);
97
101
  /* 主要字体色 */
98
102
  --frame-main-color: var(--gw-color-Neutrals2);
99
103
  /* 稍浅字体色 */
100
104
  --frame-main-color-1: var(--gw-color-Neutrals12);
101
105
  --frame-main-color-2: var(--gw-color-waning4);
106
+ --frame-main-color-primary: var(--gw-color-primary);
107
+ --frame-main-color-success: var(--gw-color-success);
108
+ --frame-main-color-waning: var(--gw-color-waning);
109
+ --frame-main-color-danger: var(--gw-color-danger);
102
110
  /* 主要边框色 */
103
111
  /* --bor-default => --border-color-2 =>*/
104
112
  --frame-main-border: var(--gw-color-Neutrals18);
@@ -460,4 +468,423 @@
460
468
  /* TaskPopper 组件样式 */
461
469
  --task-popper-background: var(--gw-color-Neutrals27);
462
470
  --task-popper-item-background: var(--gw-color-Neutrals28);
471
+
472
+
473
+ /* 旧版本样式 */
474
+ --color-primary: #000;
475
+ --color-text-primary: #333;
476
+ --color-text2: #595959;
477
+ --color-text1: #606266;
478
+ --input-btn-color: #d3d8e2;
479
+ --border-color-base: rgba(19, 18, 18, 0.171);
480
+ --background-color-base: #f2f3f5;
481
+ --background1: #f5f5f5;
482
+ --background2: #fff;
483
+ --inputbackground3: #fff;
484
+ --front-color: #fff;
485
+ --btn-background-primary: #fff;
486
+ --btn-color-primary: #262626;
487
+ --btn-color: #fff;
488
+ --control-background: #3875ff;
489
+ --btn-hover-primary: #2769c2;
490
+ --background-color-light: #f5f5f5;
491
+ --table-icon-edit-color: #346ae4;
492
+ --table-icon-del-color: #bf2533;
493
+ --success: #63e03f;
494
+ --alarm: #f22433;
495
+ --warning: #f5bb36;
496
+ --h-color: #5386bb;
497
+ --mask: rgba(0, 0, 0, 0.3);
498
+
499
+ --nav-bgColor: #0754aa;
500
+ --nav-bgColor1: #181c29;
501
+ --nav-bgColor2: transparent;
502
+ --nav-bgColor3: #2f3d4a;
503
+ --nav-bgColor4: #181c29;
504
+ --nav-bgColor5: #fff;
505
+ --nav-bgColor6: #eff4fe;
506
+ --nav-txColor: rgba(240, 244, 255, 0.56);
507
+ --nav-txColor1: #555;
508
+
509
+ --asideColor: #fff;
510
+
511
+ --nav-iconColor: #606266;
512
+ --nav-hoverBgColor: #181c29;
513
+ --nav-hoverTxColor: #f0f4ff;
514
+ --nav-hoverIconColor: #f0f4ff;
515
+ --nav-selBgColor: linear-gradient(to bottom right, #2e9bff, #1ecff7);
516
+ --nav-selBgColor2: #00b4ed;
517
+ --nav-selTxColor: #f0f4ff;
518
+ --nav-selIconColor: #f0f4ff;
519
+
520
+ --btn-bgColor: #3875ff;
521
+ --btn-bgColor1: #fff;
522
+ --btn-bgColor2: #f22433;
523
+ --btn-bgColor3: #fff;
524
+ --btn-bgColor4: #fff;
525
+ --btn-bgColor5: linear-gradient(to bottom right, #2e9bff, #1ecff7);
526
+ --btn-bgColor7: #eafaf4;
527
+ --btn-bgColor8: #fff;
528
+ --btn-bgColor9: #fff;
529
+ --btn-bgColor10: #ebefef;
530
+ --btn-disableBgColor: #0c79dd;
531
+ --btn-selectBgColor: #3875ff;
532
+ --btn-txColor: #606266;
533
+ --btn-txColor1: #3875ff;
534
+ --btn-txColor2: #262626;
535
+ --btn-txColor3: #fff;
536
+ --btn-txColor4: #f56c6c;
537
+ --btn-txColor5: #fff;
538
+ --btn-txColor6: #f22433;
539
+ --btn-bgColor6: #13c2c2;
540
+ --btn-txColor7: #313747;
541
+ --btn-txColor8: #2cd08c;
542
+ --btn-txColor9: #333333;
543
+ --btn-txColor10: #0987e5;
544
+ --btn-iconColor: #e6edff;
545
+ --btn-iconColor1: #d3d8e2;
546
+ --btn-iconColor2: #3875ff;
547
+ --btn-borderColor: #3875ff;
548
+ --btn-borderColor1: rgba(240, 244, 255, 0.16);
549
+ --btn-borderColor2: #e6e6e6;
550
+ --btn-borderColor3: #d5f6e8;
551
+ --btn-hoverBgColor: #fff;
552
+ --btn-hoverBgColor1: #ecf5ff;
553
+ --btn-hoverBgColor2: #2769c2;
554
+ --btn-hoverBgColor3: #253045;
555
+ --btn-hoverBgColor4: #409eff;
556
+ --btn-hoverBgColor5: linear-gradient(to bottom right, #1ecff7, #2e9bff);
557
+ --btn-hoverTXColor: #3875ff;
558
+ --btn-hoverTXColor1: #f0f4ff;
559
+ --btn-hoverBorColor: #264069;
560
+
561
+ --tab-bgColor: #f5f5f5;
562
+ --tab-bgColor2: #f5f5f5;
563
+ --tab-bgColor3: #2ba3fd;
564
+ --tab-bgColor4: #fff;
565
+ --tab-bgColor5: #f2f3f5;
566
+ --tab-bgColor6: #dbdee5;
567
+ --tab-bgColor7: transparent;
568
+ --tab-txColor: #333;
569
+ --tab-txColor1: rgba(51, 51, 51, 0.64);
570
+ --tab-txColor2: #333;
571
+ --tab-borderColor: #e1e3e6;
572
+ --tab-borderColor1: #eeeeee;
573
+ --tab-selBgColor: #fff;
574
+ --tab-selBgColor2: #fff;
575
+ --tab-selBgColor3: #fff;
576
+ --tab-selBgColor4: #1a90ff;
577
+ --tab-selBgColor5: #1a90ff;
578
+ --tab-selTXColor: #333;
579
+ --tab-selTXColor1: #ffffff;
580
+ --tab-hoverTXColor: #3875ff;
581
+ --tab-hoverBg: #fff;
582
+ --tab-actColor: #f5f7fa;
583
+
584
+ --input-bgColor: #fff;
585
+ --input-bgColor2: #919191;
586
+ --input-bgColor3: #fff;
587
+ --input-bgColor4: #fff;
588
+ --input-bgColor5: #fff;
589
+ --input-bgColor6: #f8f8f8;
590
+ --input-disabled-bgColor: #f8f8f8;
591
+ --input-btnBgColor3: #fff;
592
+ --input-btnBorColor: #e6e6e6;
593
+ --input-btnBgColor: #333;
594
+ --input-txColor: #d3d8e2;
595
+ --input-txColor1: #000;
596
+ --input-plaColor: #2d2e30;
597
+ --input-plaColor1: #8c8c8c;
598
+ --input-iconColor: #8f9091;
599
+ --input-iconColor1: #f0f4ff;
600
+ --input-borderColor: rgba(240, 244, 255, 0.16);
601
+ --input-borderColor1: rgba(235, 236, 240, 0.5);
602
+ --input-borderColor2: #e6e6e6;
603
+ --input-borderColor3: #e6e6e6;
604
+ --input-selBorColor: #3875ff;
605
+ --input-hoverBorColor: #8f9091;
606
+
607
+ --textarea-fontColor: #262626;
608
+ --textarea-backgroundColor: #fafafa;
609
+ --textarea-borderColor: #eee;
610
+
611
+ --txt-color-1: #3875ff;
612
+ --txt-color-2: #ff7a00;
613
+
614
+ --table-headerBgColor: #fafafa;
615
+ --table-headerBgColor2: #f2f6ff;
616
+ --table-txColor: #333;
617
+ --table-headerTXColor: #333;
618
+ --table-borderColor: #e6e6e6;
619
+ --table-rowBgColor: #fff;
620
+ --table-hoverRowBgColor: #e9f5fe;
621
+ --table-rowBgColor-strip: #fff;
622
+ --table-rowBgColor-strip2: #fff;
623
+ --table-iconEdit: #346ae4;
624
+ --table-iconDel: #bf2533;
625
+ --table-borderBottomColor: #fff;
626
+
627
+ --con-textColor1: #333;
628
+ --con-textColor2: #595959;
629
+ --con-textColor3: rgba(240, 244, 255, 0.64);
630
+ --con-textColor4: #606266;
631
+ --con-textColor5: rgba(240, 244, 255, 0.32);
632
+ --con-textColor6: rgba(240, 244, 255, 0.16);
633
+ --con-textColor7: rgba(240, 244, 255, 0.08);
634
+ --con-textColor8: #262626;
635
+ --con-textColor9: #262626;
636
+ --con-textColor10: #f0f4ff;
637
+ --con-textColor11: #409eff;
638
+ --con-textColor12: #0f283e;
639
+ --con-textColor13: linear-gradient(to top, #2c75d8, #61c5fe);
640
+ --con-textColor14: #0f283e;
641
+ --con-textColor15: #222222;
642
+ --con-textColor16: #999999;
643
+ --con-textColor17: #222222;
644
+ --con-textColor18: #777777;
645
+ --con-textColor19: #0f283e;
646
+ --con-textColor20: #666666;
647
+ --con-textColor21: #ff7700;
648
+ --con-textColor22: #0790ff;
649
+ --con-textColor23: #1c93fe;
650
+ --con-textColor24: #333333;
651
+ --con-textColor25: #666666;
652
+ --con-textColor26: #333333;
653
+ --con-textColor27: #333333;
654
+ --con-textColor28: #999999;
655
+ --con-textColor29: #0dbc00;
656
+ --con-bgColor1: #090f1a;
657
+ --con-bgColor2: #f5f5f5;
658
+ --con-bgColor3: #f5f5f5;
659
+ --con-bgColor4: #fff;
660
+ --con-bgColor5: #f5f5f5;
661
+ --con-bgColor5-1: #fff;
662
+ --con-bgColor6: #fff;
663
+ --con-bgColor6-1: #f9f9f9;
664
+ --con-bgColor7: #fff;
665
+ --con-bgColor8: #fff;
666
+ --con-bgColor9: #697073;
667
+ --con-bgColor10: #fff;
668
+ --con-bgColor11: #fff;
669
+ --con-bgColor12: #2ba3fd;
670
+ --con-bgColor13: linear-gradient(-43deg, rgba(39, 121, 230, 0.7) 4%, rgba(39, 176, 230, 0.9) 94%);
671
+ --con-bgColor14: linear-gradient(90deg, #104cb3, #16a6e2);
672
+ --con-bgColor15: #104cb3;
673
+ --con-bgColor16: transparent;
674
+ --con-bgColor17: #12202e;
675
+ --con-bgColor18: #fff;
676
+ --con-bgColor19: #fff;
677
+ --con-bgColor20: #fff;
678
+ --con-bgColor21: #f1f4f4;
679
+ --con-bgColor22: #f2f3f5;
680
+ --con-bgColor23: #f5f5f5;
681
+ --con-bgColor24: #f1f4f4;
682
+ --con-bgColor25: #dfdfdf;
683
+ --con-bgColor26: white;
684
+ --con-bgColor27: #f1f4f4;
685
+ --con-bgColor28: #f1f4f4;
686
+ --con-bgColor29: #ffffff;
687
+ --con-bgColor30: #efefef;
688
+ --con-bgColor31: #ffffff;
689
+ --con-borderColor: #e6e6e6;
690
+ --con-borderColor1: transparent;
691
+ --con-borderColor2: rgba(240, 244, 255, 0.08);
692
+ --con-borderColor3: #cccccc;
693
+ --con-borderColor4: #cccccc;
694
+ --con-borderColor5: #eeeeee;
695
+ --con-borderHoverColor: #c0c4cc;
696
+ --con-borderHoverColor2: #5d709b;
697
+
698
+ --con-themeColor: #3875ff;
699
+ --con-themeColor2: #2669ec;
700
+ --con-successColor: #63e03f;
701
+ --con-alarmColor: #f22433;
702
+ --con-alarmColor2: #f73231;
703
+ --con-warningColor: #f5bb36;
704
+
705
+ --border-color-1: #cccccc;
706
+ --border-color-2: #d9d9d9;
707
+ --border-color-3: #d9d9d9;
708
+ --border-color-4: #ffffff;
709
+ --border-color-5: #e6e6e6;
710
+ --bor-default: #e6e6e6;
711
+ --bor-primary: #3875ff;
712
+ --bor-danger: #f22433;
713
+ --bor-light: #fff;
714
+
715
+ --dialog-textColor1: #333;
716
+ --dialog-textColor2: rgba(0, 0, 0, 0.65);
717
+ --dialog-labelBgColor: #eee;
718
+ --dialog-bgColor: #fff;
719
+ --dialog-bgColor2: #f5f5f5;
720
+ --dialog-bgColor3: #fff;
721
+ --dialog-bgColor4: #fff;
722
+ --dialog-groupBgColor: #3875ff;
723
+ --dialog-groupBgColor2: #00b4ed;
724
+ --dialog-shadow: 0px 1px 6px 0px rgba(0, 0, 0, 0.2);
725
+
726
+ --tips-textColor1: #f0f4ff;
727
+ --tips-textColor2: rgba(240, 244, 255, 0.56);
728
+ --tips-bgColor: #252833;
729
+ --tips-text: #999999;
730
+
731
+ --sel-textColor: #f0f4ff;
732
+ --sel-bgColor: #0c0e14;
733
+ --sel-tagtextColor: #606266;
734
+ --sel-tagBgColor: #ebefef;
735
+ --sel-tagIconColor: #606266;
736
+
737
+ --dropdown-bgColor: #fff;
738
+ --dropdown-bgColor1: rgba(255, 255, 255, 0.8);
739
+
740
+ --page-textColor: #595959;
741
+ --page-textColor1: #888;
742
+ --page-borColor: #e6e6e6;
743
+ --page-bgColor: #3875ff;
744
+ --page-bgColor2: #ffffff;
745
+
746
+ --tree-bgColor: #fff;
747
+ --tree-bgColor1: #fff;
748
+ --tree-bgColor2: #fff;
749
+ --tree-bgColor3: #fff;
750
+ --tree-bgColor4: #f1efef;
751
+ --tree-bgColor5: #ffffff;
752
+ --tree-bgColor6: #f2f3f5;
753
+ --tree-bgColor7: #fff;
754
+ --tree-bgColor8: rgba(255, 255, 255, 0.5);
755
+ --tree-txColor: #595959;
756
+ --tree-txColor1: #606266;
757
+ --tree-iconColor: #979797;
758
+ --tree-selBgColor: #ffffff;
759
+ --tree-selBgColor1: #3875ff;
760
+ --tree-selTXColor: #fff;
761
+ --tree-linearColor: #8c8c8c;
762
+ --tree-borderColor: #e6e6e6;
763
+ --tree-borderColor1: #e6e6e6;
764
+ --tree-labelBg: #d9d9d9;
765
+
766
+ --radio-bgColor: #fff;
767
+ --radio-selectBg: #3875ff;
768
+ --radio-selectBorder: #fff;
769
+
770
+ --switch-bgColor: #d9d9d9;
771
+ --switch-bgColor1: #337cef;
772
+
773
+ --popover-bgColor: #fff;
774
+ --popover-bgColor2: #fff;
775
+ --popover-bgColor3: #fff;
776
+ --popover-txColor: #606266;
777
+ --popover-borderColor: #e6e6e6;
778
+ --popover-borderColor2: #595959;
779
+ --popover-borderColor3: #eee;
780
+ --popover-hoverBgColor: #f5f7fa;
781
+ --popover-hoverTXColor: #595959;
782
+
783
+ --scrollbar-bgColor: #e1e3e6;
784
+
785
+ --avater-textColor: #fff;
786
+ --avater-baColor: #c0c4cc;
787
+
788
+ --datePanelBg: #fff;
789
+ --timeHeaderColor: #333;
790
+ --pickerHeaderBg: #f2f3f5;
791
+ --iconBtnColor: #999;
792
+ --pickRangeBg: #dfe9ff;
793
+ --footerBtnColor: #666666;
794
+ --datePick-selectRangeBg: #f5f5f5;
795
+ --datePick-selectColor: #f0f4ff;
796
+ --timePick-hoverBg: #f5f7fa;
797
+
798
+ --noData-fontColor: #252833;
799
+ --noData-fontColor1: rgba(0, 0, 0, 0.65);
800
+
801
+ --fc-todayBg: #d9f5fe;
802
+
803
+ --radar-bgColor: #fcfdff;
804
+ --radar-title: #60a3ff;
805
+
806
+ --tag-title: #666666;
807
+ --tag-unit: #666666;
808
+ --tag-number1: #ff3a3a;
809
+ --tag-number2: #666666;
810
+ --tag-number3: #ff7700;
811
+ --tag-number4: #0dbc00;
812
+ --tag-number5: #999999;
813
+
814
+ --timeLine-default: #eeeeee;
815
+ --timeLine-infosBg: #f1f4f4;
816
+ --timeLine-dot1: #fff;
817
+ --timeLine-dotBorder1: #d7e3ff;
818
+ --timeLine-dotBorder2: #ccc;
819
+ --timeLine-line: #aeaeae;
820
+
821
+ --list-bgColor-1: #ffffff;
822
+ --list-bgColor-2: #f0f4ff;
823
+ --list-bgColor-3: #ffffff;
824
+ --list-labelBg: #f2f6ff;
825
+
826
+ --snapshots-bg: #fff;
827
+ --snapshots-bor: -webkit-linear-gradient(-40deg, transparent 0%, transparent 10%, transparent 90%, transparent 100%) 10;
828
+ --snapshot-bor: transparent;
829
+ --snapshot-bg: #fff;
830
+ --snapshot-bs: transparent;
831
+ --snapshot-number: #0f283e;
832
+
833
+ --splitline-bor1: #e7e7e7;
834
+ --splitline-bor2: #e7e7e7;
835
+
836
+ --notifyBg: #fff;
837
+ --notifytitle: #262626;
838
+ --notifytext: #606266;
839
+
840
+ --line-color: #bfbfbf;
841
+ --line-color-1: #ccc;
842
+ --line-finish: #3875ff;
843
+
844
+ --types-fc-opacity: #0f283e;
845
+ --types-fc-opacity2: #7d7d7d;
846
+ --types-fc-opacity3: #999999;
847
+ --types-fc: #0f283e;
848
+
849
+ --active-bg: #3875ff;
850
+ --active-fc: #fff;
851
+
852
+ --descriptions-bor: #ced9df;
853
+ --descriptions-fc: #0f283e;
854
+
855
+ --loadingBg: #7fa2f3;
856
+ --loading-bgColor: rgba(255, 255, 255, 0.9);
857
+
858
+ --img-color-1: linear-gradient(180deg, #f2f3f5 0%, #757d93 100%);
859
+ --img-color-2: #8b8f97;
860
+
861
+ --top-menu-bg: #eff4fe;
862
+ --top-menu-fc: #626d84;
863
+
864
+ --theme-hover: #e1e7eb;
865
+
866
+ --plugin-blue1: #0396ff;
867
+ --plugin-blue2: #2d94ff;
868
+ --plugin-bgColor1: #f9f9f9;
869
+ --plugin-bgColor2: #fff;
870
+ --plugin-bgColor3: #0396ff;
871
+ --plugin-bgColor4: #e8f3ff;
872
+ --plugin-bgColor5: #fff;
873
+ --plugin-radial-bgColor: #f9f9f9;
874
+ --plugin-tagColor1: #c6c6c6;
875
+ --plugin-tagColor2: #e6e6e6;
876
+ --plugin-tagColor3: #e8f3ff;
877
+ --plugin-tagColor4: #FFCB3E;
878
+ --plugin-borderColor1: #e3e3e3;
879
+ --plugin-text1: #f0f4ff;
880
+ --plugin-text2: #fff;
881
+ --plugin-titleColor1: #0e7cce;
882
+ --plugin-downloadColor: #000;
883
+
884
+ --allocation-menu-active-background: #3875ff;
885
+ --allocation-menu-active-color: white;
886
+
887
+
888
+
889
+
463
890
  }
@@ -50,14 +50,14 @@ async function initApp() {
50
50
  // Step 1: 加载权限列表
51
51
  // window.permissionList 由 index.html 中的 getUserPermissionList.js 自动挂载
52
52
  try {
53
- await (window as any).permissionList?.()
53
+ await window.permissionList?.()
54
54
  } catch (_) {
55
55
  // 降级处理:权限加载失败不阻断页面渲染
56
56
  }
57
57
 
58
58
  // Step 2: 注册 v-permission 指令
59
59
  // window.packageId / window.routeName 同样由脚手架 index.html 自动挂载
60
- app.use(permission, (window as any).packageId, (window as any).routeName)
60
+ app.use(permission, window.packageId, window.routeName)
61
61
 
62
62
  app.use(router).mount('#app')
63
63
  }
@@ -26,6 +26,8 @@ export interface SignalRConfig {
26
26
  reconnectDelay?: number
27
27
  /** 最大重连次数,默认 5 */
28
28
  maxReconnectAttempts?: number
29
+ /** 是否自动连接,默认 true */
30
+ autoConnect?: boolean
29
31
  }
30
32
 
31
33
  /**
@@ -73,7 +75,8 @@ export class SignalRManager {
73
75
  keepAliveInterval: config.keepAliveInterval || 500000000,
74
76
  autoReconnect: config.autoReconnect !== false,
75
77
  reconnectDelay: config.reconnectDelay || 3000,
76
- maxReconnectAttempts: config.maxReconnectAttempts || 5
78
+ maxReconnectAttempts: config.maxReconnectAttempts || 5,
79
+ autoConnect: config.autoConnect !== false
77
80
  }
78
81
  }
79
82
 
@@ -130,7 +133,7 @@ export class SignalRManager {
130
133
  this.connection.onclose((error) => {
131
134
  console.log('SignalR 连接断开:', error)
132
135
  this.setState(ConnectionState.Disconnected)
133
-
136
+
134
137
  // 自动重连
135
138
  if (this.config.autoReconnect) {
136
139
  this.handleReconnect()
@@ -194,7 +197,7 @@ export class SignalRManager {
194
197
  return
195
198
  } catch (error) {
196
199
  console.error(`SignalR 重连失败:`, error)
197
-
200
+
198
201
  if (this.reconnectAttempts < this.config.maxReconnectAttempts) {
199
202
  await this.sleep(this.config.reconnectDelay)
200
203
  }
@@ -253,14 +256,14 @@ export class SignalRManager {
253
256
  this.messageHandlers.delete(eventName)
254
257
  }
255
258
  }
256
-
259
+
257
260
  if (this.connection) {
258
261
  this.connection.off(eventName, callback as any)
259
262
  }
260
263
  } else {
261
264
  // 取消所有回调
262
265
  this.messageHandlers.delete(eventName)
263
-
266
+
264
267
  if (this.connection) {
265
268
  this.connection.off(eventName)
266
269
  }
@@ -319,7 +322,7 @@ export class SignalRManager {
319
322
  }
320
323
  this.connection = null
321
324
  }
322
-
325
+
323
326
  this.setState(ConnectionState.Disconnected)
324
327
  }
325
328
 
@@ -377,11 +380,11 @@ export class SignalRPool {
377
380
  */
378
381
  getOrCreate(config: SignalRConfig): SignalRManager {
379
382
  const key = config.path
380
-
383
+
381
384
  if (!this.connections.has(key)) {
382
385
  this.connections.set(key, new SignalRManager(config))
383
386
  }
384
-
387
+
385
388
  return this.connections.get(key)!
386
389
  }
387
390
 
@@ -408,11 +411,11 @@ export class SignalRPool {
408
411
  */
409
412
  async disconnectAll() {
410
413
  const promises: Promise<void>[] = []
411
-
414
+
412
415
  this.connections.forEach(connection => {
413
416
  promises.push(connection.destroy())
414
417
  })
415
-
418
+
416
419
  await Promise.all(promises)
417
420
  this.connections.clear()
418
421
  }
@@ -422,11 +425,11 @@ export class SignalRPool {
422
425
  */
423
426
  getAllStates(): Record<string, ConnectionState> {
424
427
  const states: Record<string, ConnectionState> = {}
425
-
428
+
426
429
  this.connections.forEach((connection, path) => {
427
430
  states[path] = connection.getState()
428
431
  })
429
-
432
+
430
433
  return states
431
434
  }
432
435
  }
@@ -445,17 +448,24 @@ export function useSignalR(config: SignalRConfig) {
445
448
  const isConnected = computed(() => state.value === ConnectionState.Connected)
446
449
 
447
450
  let unsubscribe: (() => void) | null = null
451
+ // 保存待注册的监听器(解决 autoConnect: false 时提前注册监听的问题)
452
+ const pendingHandlers: Array<{ eventName: string; callback: (data: any) => void }> = []
448
453
 
449
454
  const connect = async () => {
450
455
  if (!manager.value) {
451
456
  manager.value = createSignalR(config)
452
-
457
+
453
458
  // 监听状态变化
454
459
  unsubscribe = manager.value.onStateChange((newState) => {
455
460
  state.value = newState
456
461
  })
462
+
463
+ // 注册所有待注册的监听器
464
+ pendingHandlers.forEach(({ eventName, callback }) => {
465
+ manager.value!.on(eventName, callback)
466
+ })
457
467
  }
458
-
468
+
459
469
  await manager.value.connect()
460
470
  }
461
471
 
@@ -466,12 +476,27 @@ export function useSignalR(config: SignalRConfig) {
466
476
  }
467
477
 
468
478
  const on = (eventName: string, callback: (data: any) => void) => {
469
- if (!manager.value) {
470
- console.warn('SignalR 未初始化,请先调用 connect()')
471
- return () => {}
479
+ // 如果 manager 已存在,直接注册
480
+ if (manager.value) {
481
+ return manager.value.on(eventName, callback)
482
+ }
483
+
484
+ // 否则保存到待注册列表,等待 connect 时注册
485
+ pendingHandlers.push({ eventName, callback })
486
+
487
+ // 返回取消订阅函数
488
+ return () => {
489
+ const index = pendingHandlers.findIndex(
490
+ h => h.eventName === eventName && h.callback === callback
491
+ )
492
+ if (index > -1) {
493
+ pendingHandlers.splice(index, 1)
494
+ }
495
+ // 如果已经注册到 manager,也需要取消
496
+ if (manager.value) {
497
+ manager.value.off(eventName, callback)
498
+ }
472
499
  }
473
-
474
- return manager.value.on(eventName, callback)
475
500
  }
476
501
 
477
502
  const off = (eventName: string, callback?: Function) => {
@@ -493,9 +518,11 @@ export function useSignalR(config: SignalRConfig) {
493
518
  return manager.value.send(methodName, ...args)
494
519
  }
495
520
 
496
- // 自动连接
521
+ // 自动连接(根据配置)
497
522
  onMounted(() => {
498
- connect()
523
+ if (config.autoConnect !== false) {
524
+ connect()
525
+ }
499
526
  })
500
527
 
501
528
  // 自动断开
@@ -503,7 +530,7 @@ export function useSignalR(config: SignalRConfig) {
503
530
  if (unsubscribe) {
504
531
  unsubscribe()
505
532
  }
506
-
533
+
507
534
  if (manager.value) {
508
535
  manager.value.destroy()
509
536
  manager.value = null
@@ -180,6 +180,16 @@ export default ({ mode }) => {
180
180
  Referer: VITE_APP_TARGET_URL
181
181
  }
182
182
  },
183
+ "/file": {
184
+ target: VITE_APP_TARGET_URL,
185
+ changeOrigin: true,
186
+ secure: false,
187
+ ws: true,
188
+ rewrite: path => path.replace(/^\/file/, "/file"),
189
+ headers: {
190
+ Referer: VITE_APP_TARGET_URL
191
+ }
192
+ },
183
193
  },
184
194
  force: true, // 强制使依赖预构建
185
195
  hmr: {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ganwei-web/ganwei-pc-cli",
3
- "version": "6.3.6",
3
+ "version": "6.3.7",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",