dashboard-shell-shell 1.0.1000000117 → 1.0.1000000118

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 (124) hide show
  1. package/assets/styles/base/_functions.scss +0 -0
  2. package/assets/styles/base/_mixins.scss +1 -1
  3. package/assets/styles/global/_button.scss +10 -17
  4. package/assets/styles/global/_form.scss +2 -2
  5. package/assets/styles/global/_labeled-input.scss +2 -6
  6. package/assets/styles/global/_select.scss +7 -6
  7. package/assets/styles/global/_table.scss +2 -3
  8. package/assets/styles/global/_tooltip.scss +1 -8
  9. package/assets/styles/themes/_dark.scss +0 -2
  10. package/assets/styles/themes/_light.scss +2 -5
  11. package/assets/styles/vendor/vue-select.scss +1 -2
  12. package/assets/translations/en-us.yaml +3 -1
  13. package/assets/translations/zh-hans.yaml +28 -51
  14. package/components/ActionDropdown.vue +0 -1
  15. package/components/ActionMenuShell.vue +3 -6
  16. package/components/BrandImage.vue +0 -22
  17. package/components/ClusterIconMenu.vue +1 -1
  18. package/components/CodeMirror.vue +0 -1
  19. package/components/CruResource.vue +1 -1
  20. package/components/CruResourceFooter.vue +1 -1
  21. package/components/ExplorerProjectsNamespaces.vue +24 -4
  22. package/components/GlobalRoleBindings.vue +48 -112
  23. package/components/IndentedPanel.vue +10 -4
  24. package/components/PromptRemove.vue +3 -3
  25. package/components/ResourceDetail/Masthead.vue +242 -190
  26. package/components/ResourceDetail/index.vue +5 -20
  27. package/components/ResourceList/Masthead.vue +84 -146
  28. package/components/ResourceList/ResourceLoadingIndicator.vue +2 -5
  29. package/components/ResourceTable.vue +1 -76
  30. package/components/SideNav.vue +29 -66
  31. package/components/SortableTable/THead.vue +0 -6
  32. package/components/SortableTable/index.vue +388 -481
  33. package/components/Tabbed/index.vue +5 -4
  34. package/components/auth/Principal.vue +2 -3
  35. package/components/auth/RoleDetailEdit.vue +5 -58
  36. package/components/auth/SelectPrincipal.vue +0 -1
  37. package/components/form/BannerSettings.vue +16 -18
  38. package/components/form/ChangePassword.vue +4 -4
  39. package/components/form/ColorInput.vue +8 -32
  40. package/components/form/Footer.vue +1 -1
  41. package/components/form/InputWithSelect.vue +0 -2
  42. package/components/form/KeyValue.vue +7 -31
  43. package/components/form/LabeledSelect.vue +178 -178
  44. package/components/form/Members/ClusterPermissionsEditor.vue +2 -1
  45. package/components/form/Members/MembershipEditor.vue +1 -1
  46. package/components/form/NameNsDescription.vue +11 -24
  47. package/components/form/Password.vue +2 -6
  48. package/components/form/ResourceQuota/Namespace.vue +1 -1
  49. package/components/form/ResourceQuota/NamespaceRow.vue +10 -13
  50. package/components/form/ResourceQuota/ProjectRow.vue +1 -0
  51. package/components/form/Select.vue +2 -2
  52. package/components/nav/Favorite.vue +1 -5
  53. package/components/nav/Group.vue +23 -69
  54. package/components/nav/Header.vue +17 -82
  55. package/components/nav/HeaderPageActionMenu.vue +0 -1
  56. package/components/nav/NamespaceFilter.vue +3 -0
  57. package/components/nav/TopLevelMenu.vue +119 -182
  58. package/components/nav/Type.vue +11 -48
  59. package/components/rancherResourceDetail/Masthead.vue +769 -0
  60. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
  61. package/components/rancherResourceDetail/index.vue +591 -0
  62. package/components/rancherResourceList/Masthead.vue +375 -0
  63. package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
  64. package/components/rancherResourceList/index.vue +307 -0
  65. package/components/rancherResourceList/resource-list.config.js +7 -0
  66. package/components/rancherResourceTable.vue +783 -0
  67. package/components/rancherSortableTable/THead.vue +561 -0
  68. package/components/rancherSortableTable/actions.js +153 -0
  69. package/components/rancherSortableTable/advanced-filtering.js +272 -0
  70. package/components/rancherSortableTable/debug.js +117 -0
  71. package/components/rancherSortableTable/filtering.js +290 -0
  72. package/components/rancherSortableTable/grouping.js +48 -0
  73. package/components/rancherSortableTable/index.vue +2712 -0
  74. package/components/rancherSortableTable/paging.js +155 -0
  75. package/components/rancherSortableTable/selection.js +629 -0
  76. package/components/rancherSortableTable/sortable-config.ts +4 -0
  77. package/components/rancherSortableTable/sorting.js +129 -0
  78. package/composables/useClickOutside.ts +1 -1
  79. package/config/product/auth.js +7 -16
  80. package/config/product/explorer.js +1 -1
  81. package/config/product/settings.js +8 -17
  82. package/config/settings.ts +0 -28
  83. package/edit/management.cattle.io.user.vue +4 -17
  84. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  85. package/edit/token.vue +1 -1
  86. package/list/harvesterhci.io.management.cluster.vue +0 -17
  87. package/list/management.cattle.io.setting.vue +13 -22
  88. package/list/management.cattle.io.user.vue +14 -25
  89. package/list/provisioning.cattle.io.cluster.vue +7 -6
  90. package/mixins/brand.js +0 -17
  91. package/package.json +1 -1
  92. package/pages/auth/login.vue +29 -84
  93. package/pages/c/_cluster/auth/roles/index.vue +14 -61
  94. package/pages/c/_cluster/settings/banners.vue +101 -174
  95. package/pages/c/_cluster/settings/brand.vue +301 -348
  96. package/pages/c/_cluster/settings/performance.vue +38 -61
  97. package/pages/home.vue +21 -70
  98. package/pages/prefs.vue +23 -25
  99. package/pkg/tsconfig.json +9 -9
  100. package/pkg/vue.config.js +1 -1
  101. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  102. package/scripts/clean +0 -0
  103. package/scripts/extension/bundle +0 -0
  104. package/scripts/extension/helm/scripts/package +0 -0
  105. package/scripts/extension/helm/scripts/patch +0 -0
  106. package/scripts/extension/helm/scripts/version +0 -0
  107. package/scripts/extension/helmpatch +0 -0
  108. package/scripts/extension/parse-tag-name +0 -0
  109. package/scripts/extension/publish +0 -0
  110. package/scripts/publish-shell.sh +60 -86
  111. package/scripts/serve-pkgs +0 -0
  112. package/scripts/sync-shell-deps +0 -0
  113. package/scripts/typegen.sh +28 -44
  114. package/store/i18n.js +5 -5
  115. package/store/prefs.js +5 -17
  116. package/store/type-map.js +1 -2
  117. package/types/cloud-shell/index.d.ts +11014 -0
  118. package/types/shell/index.d.ts +1 -1
  119. package/utils/error.js +0 -4
  120. package/utils/router.js +3 -3
  121. package/vue.config.js +6 -1
  122. package/assets/images/action.svg +0 -6
  123. package/assets/images/pl/logo.png +0 -0
  124. /package/components/{ResourceList → rancherResourceList}/Masthead-btn.vue +0 -0
@@ -52,10 +52,7 @@ export default {
52
52
  helper.update(args);
53
53
  }
54
54
 
55
- const topLevelPermissions = sessionStorage.getItem('TOPLEVELPERMISSIONS') || ''
56
-
57
55
  return {
58
- topLevelPermissions,
59
56
  shown: false,
60
57
  displayVersion,
61
58
  fullVersion,
@@ -463,14 +460,12 @@ export default {
463
460
 
464
461
  <template>
465
462
  <div>
466
- <!-- ====================== 遮罩层(点击可关闭菜单) ====================== -->
463
+ <!-- Overlay -->
467
464
  <div
468
465
  v-if="shown"
469
466
  class="side-menu-glass"
470
467
  @click="hide()"
471
468
  />
472
-
473
- <!-- ====================== 菜单主容器(带淡入淡出过渡) ====================== -->
474
469
  <transition name="fade">
475
470
  <!-- Side menu -->
476
471
  <div
@@ -481,11 +476,8 @@ export default {
481
476
  role="navigation"
482
477
  :aria-label="t('nav.ariaLabel.topLevelMenu')"
483
478
  >
484
-
485
- <!-- ====================== 菜单头部(Logo + 菜单按钮) ====================== -->
479
+ <!-- Logo and name -->
486
480
  <div class="title">
487
-
488
- <!-- 菜单按钮(汉堡图标) -->
489
481
  <div
490
482
  data-testid="top-level-menu"
491
483
  :aria-label="t('nav.expandCollapseAppBar')"
@@ -496,8 +488,6 @@ export default {
496
488
  @keyup.space="toggle()"
497
489
  @click="toggle()"
498
490
  >
499
-
500
- <!-- 汉堡菜单SVG图标 -->
501
491
  <svg
502
492
  class="menu-icon"
503
493
  xmlns="http://www.w3.org/2000/svg"
@@ -510,22 +500,19 @@ export default {
510
500
  fill="none"
511
501
  /><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z" /></svg>
512
502
  </div>
513
-
514
- <!-- 品牌Logo -->
515
- <div v-if="topLevelPermissions && topLevelPermissions === 'superadmin'" class="side-menu-logo">
503
+ <div class="side-menu-logo">
516
504
  <BrandImage
517
505
  data-testid="side-menu__brand-img"
518
506
  :alt="t('nav.alt.mainMenuRancherLogo')"
519
- file-name="logo.png"
507
+ file-name="rancher-logo.svg"
520
508
  />
521
509
  </div>
522
510
  </div>
523
511
 
524
- <!-- ====================== 菜单内容区 ====================== -->
512
+ <!-- Menu body -->
525
513
  <div class="body">
526
- <div v-if="topLevelPermissions && topLevelPermissions === 'superadmin'">
527
-
528
- <!-- 首页按钮 -->
514
+ <div>
515
+ <!-- Home button -->
529
516
  <div @click="hide()">
530
517
  <router-link
531
518
  class="option cluster selector home"
@@ -533,8 +520,6 @@ export default {
533
520
  role="link"
534
521
  :aria-label="t('nav.ariaLabel.homePage')"
535
522
  >
536
-
537
- <!-- 首页图标 -->
538
523
  <svg
539
524
  v-clean-tooltip="getTooltipConfig(t('nav.home'))"
540
525
  class="top-menu-icon"
@@ -551,14 +536,12 @@ export default {
551
536
  </div>
552
537
  </router-link>
553
538
  </div>
554
-
555
- <!-- 集群搜索框 -->
539
+ <!-- Search bar -->
556
540
  <div
557
541
  v-if="showClusterSearch"
558
542
  class="clusters-search"
559
543
  >
560
544
  <div class="clusters-search-count">
561
- <!-- 当前搜索到的集群数量 -->
562
545
  <span>{{ clusterFilterCount }}</span>
563
546
  {{ t('nav.search.clusters') }}
564
547
  <i
@@ -577,14 +560,10 @@ export default {
577
560
  :tabindex="!shown ? -1 : 0"
578
561
  :aria-label="t('nav.search.ariaLabel')"
579
562
  >
580
-
581
- <!-- 搜索图标 -->
582
563
  <i
583
564
  class="magnifier icon icon-search"
584
565
  :class="{ active: clusterFilter }"
585
566
  />
586
-
587
- <!-- 清空按钮 -->
588
567
  <i
589
568
  v-if="clusterFilter"
590
569
  class="icon icon-close"
@@ -594,11 +573,9 @@ export default {
594
573
  </div>
595
574
  </div>
596
575
 
597
- <!-- ====================== Harvester 相关功能区 ====================== -->
576
+ <!-- Harvester extras -->
598
577
  <template v-if="hciApps.length">
599
578
  <div class="category" />
600
-
601
- <!-- 跳转 Harvester Dashboard -->
602
579
  <div>
603
580
  <a
604
581
  v-if="isRancherInHarvester"
@@ -614,8 +591,6 @@ export default {
614
591
  </div>
615
592
  </a>
616
593
  </div>
617
-
618
- <!-- Harvester 应用列表 -->
619
594
  <div
620
595
  v-for="(a, i) in appBar.hciApps"
621
596
  :key="i"
@@ -638,14 +613,14 @@ export default {
638
613
  </div>
639
614
  </template>
640
615
 
641
- <!-- ====================== 集群列表 ====================== -->
642
- <template v-if="topLevelPermissions && topLevelPermissions === 'superadmin' && !!allClustersCount">
616
+ <!-- Cluster menu -->
617
+ <template v-if="!!allClustersCount">
643
618
  <div
644
619
  ref="clusterList"
645
620
  class="clusters"
646
621
  :style="pinnedClustersHeight"
647
622
  >
648
- <!-- 已固定集群 -->
623
+ <!-- Pinned Clusters -->
649
624
  <div
650
625
  v-if="showPinClusters && pinFiltered.length"
651
626
  class="clustersPinned"
@@ -656,13 +631,11 @@ export default {
656
631
  :data-testid="`pinned-ready-cluster-${index}`"
657
632
  @click="hide()"
658
633
  >
659
-
660
- <!-- 可用集群按钮 -->
661
- <span
634
+ <button
662
635
  v-if="c.ready"
663
636
  v-shortkey.push="{windows: ['alt'], mac: ['option']}"
664
637
  :data-testid="`pinned-menu-cluster-${ c.id }`"
665
- class="clusterBtn cluster selector option"
638
+ class="cluster selector option"
666
639
  :class="{'active-menu-link': c.isMenuActive }"
667
640
  :to="c.clusterRoute"
668
641
  role="button"
@@ -692,9 +665,7 @@ export default {
692
665
  :cluster="c"
693
666
  :tab-order="shown ? 0 : -1"
694
667
  />
695
- </span>
696
-
697
- <!-- 不可用集群 -->
668
+ </button>
698
669
  <span
699
670
  v-else
700
671
  class="option cluster selector disabled"
@@ -723,8 +694,6 @@ export default {
723
694
  />
724
695
  </span>
725
696
  </div>
726
-
727
- <!-- 分割线 -->
728
697
  <div
729
698
  v-if="clustersFiltered.length > 0"
730
699
  class="category-title"
@@ -733,7 +702,7 @@ export default {
733
702
  </div>
734
703
  </div>
735
704
 
736
- <!-- 搜索结果集群列表 -->
705
+ <!-- Clusters Search result -->
737
706
  <div class="clustersList">
738
707
  <div
739
708
  v-for="(c, index) in appBar.clustersFiltered"
@@ -741,13 +710,11 @@ export default {
741
710
  :data-testid="`top-level-menu-cluster-${index}`"
742
711
  @click="hide()"
743
712
  >
744
-
745
- <!-- 可用集群 -->
746
- <span
713
+ <button
747
714
  v-if="c.ready"
748
715
  v-shortkey.push="{windows: ['alt'], mac: ['option']}"
749
716
  :data-testid="`menu-cluster-${ c.id }`"
750
- class="cluster selector option clusterBtn"
717
+ class="cluster selector option"
751
718
  :class="{'active-menu-link': c.isMenuActive }"
752
719
  :to="c.clusterRoute"
753
720
  role="button"
@@ -778,9 +745,7 @@ export default {
778
745
  :tab-order="shown ? 0 : -1"
779
746
  :cluster="c"
780
747
  />
781
- </span>
782
-
783
- <!-- 不可用集群 -->
748
+ </button>
784
749
  <span
785
750
  v-else
786
751
  class="option cluster selector disabled"
@@ -812,7 +777,7 @@ export default {
812
777
  </div>
813
778
  </div>
814
779
 
815
- <!-- 无匹配集群提示 -->
780
+ <!-- No clusters message -->
816
781
  <div
817
782
  v-if="clustersFiltered.length === 0 && searchActive"
818
783
  data-testid="top-level-menu-no-results"
@@ -822,7 +787,7 @@ export default {
822
787
  </div>
823
788
  </div>
824
789
 
825
- <!-- 查看所有集群按钮 -->
790
+ <!-- See all clusters -->
826
791
  <router-link
827
792
  v-if="allClustersCount > maxClustersToShow"
828
793
  class="clusters-all"
@@ -841,129 +806,104 @@ export default {
841
806
  </router-link>
842
807
  </template>
843
808
 
844
- <!-- ====================== 多集群应用区 ====================== -->
845
- <div :style="!(topLevelPermissions && topLevelPermissions === 'superadmin') ? { placeContent: 'flex-start', display: 'flex', flexDirection: 'column' } : {}" class="category">
846
- <!-- 多集群应用 -->
809
+ <!-- MULTI CLUSTER APPS -->
810
+ <div class="category">
847
811
  <template v-if="multiClusterApps.length">
848
- <template v-if="topLevelPermissions && topLevelPermissions === 'superadmin'">
849
- <div
850
- class="category-title"
812
+ <div
813
+ class="category-title"
814
+ >
815
+ <hr role="none">
816
+ <span>
817
+ {{ t('nav.categories.multiCluster') }}
818
+ </span>
819
+ </div>
820
+ <div
821
+ v-for="(a, i) in appBar.multiClusterApps"
822
+ :key="i"
823
+ @click="hide()"
824
+ >
825
+ <router-link
826
+ class="option"
827
+ :class="{'active-menu-link': a.isMenuActive }"
828
+ :to="a.to"
829
+ role="link"
830
+ :aria-label="`${t('nav.ariaLabel.multiClusterApps')} ${ a.label }`"
851
831
  >
852
- <hr role="none">
853
- <span>
854
- {{ t('nav.categories.multiCluster') }}
855
- </span>
856
- </div>
857
- <template v-for="(a, i) in appBar.multiClusterApps" :key="i">
858
- <div
859
- v-if="a.value === 'harvesterManager'"
860
- @click="hide()"
861
- >
862
- <router-link
863
- class="option"
864
- :class="{'active-menu-link': a.isMenuActive }"
865
- :to="a.to"
866
- role="link"
867
- :aria-label="`${t('nav.ariaLabel.multiClusterApps')} ${ a.label }`"
868
- >
869
- <IconOrSvg
870
- v-clean-tooltip="getTooltipConfig(a.label)"
871
- class="app-icon"
872
- :icon="a.icon"
873
- :src="a.svg"
874
- />
875
- <span class="option-link">{{ a.label }}</span>
876
- </router-link>
877
- </div>
878
- </template>
879
- </template>
880
- <template v-else>
881
- <template v-for="(a, i) in appBar.multiClusterApps" :key="i">
882
- <div
883
- v-if="a.value === 'harvesterManager'"
884
- @click="hide()"
885
- >
886
- <router-link
887
- class="option"
888
- :class="{'active-menu-link': a.isMenuActive }"
889
- :to="a.to"
890
- role="link"
891
- :aria-label="`${t('nav.ariaLabel.multiClusterApps')} ${ a.label }`"
892
- >
893
- <IconOrSvg
894
- v-clean-tooltip="getTooltipConfig(a.label)"
895
- class="app-icon"
896
- :icon="a.icon"
897
- :src="a.svg"
898
- />
899
- <span class="option-link">{{ a.label }}</span>
900
- </router-link>
901
- </div>
902
- </template>
903
- </template>
832
+ <IconOrSvg
833
+ v-clean-tooltip="getTooltipConfig(a.label)"
834
+ class="app-icon"
835
+ :icon="a.icon"
836
+ :src="a.svg"
837
+ />
838
+ <span class="option-link">{{ a.label }}</span>
839
+ </router-link>
840
+ </div>
904
841
  </template>
905
842
 
906
- <!-- 配置类应用 -->
907
- <div>
908
- <template v-if="configurationApps.length">
909
- <template v-if="topLevelPermissions && topLevelPermissions === 'superadmin'">
910
- <div
911
- class="category-title"
912
- >
913
- <hr role="none">
914
- <span>
915
- {{ t('nav.categories.configuration') }}
916
- </span>
917
- </div>
918
- <div
919
- v-for="(a, i) in appBar.configurationApps"
920
- :key="i"
921
- @click="hide()"
922
- >
923
- <router-link
924
- class="option"
925
- :class="{'active-menu-link': a.isMenuActive }"
926
- :to="a.to"
927
- role="link"
928
- :aria-label="`${t('nav.ariaLabel.configurationApps')} ${ a.label }`"
929
- >
930
- <IconOrSvg
931
- v-clean-tooltip="getTooltipConfig(a.label)"
932
- class="app-icon"
933
- :icon="a.icon"
934
- :src="a.svg"
935
- />
936
- <div>{{ a.label }}</div>
937
- </router-link>
938
- </div>
939
- </template>
940
- <template v-else>
941
- <template v-for="(a, i) in appBar.configurationApps" :key="i">
942
- <div
943
- v-if="a.value === 'settings' || a.value === 'auth'"
944
- @click="hide()"
945
- >
946
- <router-link
947
- class="option"
948
- :class="{'active-menu-link': a.isMenuActive }"
949
- :to="a.to"
950
- role="link"
951
- :aria-label="`${t('nav.ariaLabel.configurationApps')} ${ a.label }`"
952
- >
953
- <IconOrSvg
954
- v-clean-tooltip="getTooltipConfig(a.label)"
955
- class="app-icon"
956
- :icon="a.icon"
957
- :src="a.svg"
958
- />
959
- <div>{{ a.label }}</div>
960
- </router-link>
961
- </div>
962
- </template>
963
- </template>
964
- <div style="height: 40px;"></div>
965
- </template>
966
- </div>
843
+ <!-- Configuration apps menu -->
844
+ <template v-if="configurationApps.length">
845
+ <div
846
+ class="category-title"
847
+ >
848
+ <hr role="none">
849
+ <span>
850
+ {{ t('nav.categories.configuration') }}
851
+ </span>
852
+ </div>
853
+ <div
854
+ v-for="(a, i) in appBar.configurationApps"
855
+ :key="i"
856
+ @click="hide()"
857
+ >
858
+ <router-link
859
+ class="option"
860
+ :class="{'active-menu-link': a.isMenuActive }"
861
+ :to="a.to"
862
+ role="link"
863
+ :aria-label="`${t('nav.ariaLabel.configurationApps')} ${ a.label }`"
864
+ >
865
+ <IconOrSvg
866
+ v-clean-tooltip="getTooltipConfig(a.label)"
867
+ class="app-icon"
868
+ :icon="a.icon"
869
+ :src="a.svg"
870
+ />
871
+ <div>{{ a.label }}</div>
872
+ </router-link>
873
+ </div>
874
+ </template>
875
+ </div>
876
+ </div>
877
+
878
+ <!-- Footer -->
879
+ <div
880
+ class="footer"
881
+ >
882
+ <div
883
+ v-if="canEditSettings"
884
+ class="support"
885
+ @click="hide()"
886
+ >
887
+ <router-link
888
+ :to="{name: 'support'}"
889
+ role="link"
890
+ :aria-label="t('nav.ariaLabel.support')"
891
+ >
892
+ {{ t('nav.support', {hasSupport}) }}
893
+ </router-link>
894
+ </div>
895
+ <div
896
+ class="version"
897
+ :class="{'version-small': largeAboutText}"
898
+ @click="hide()"
899
+ >
900
+ <router-link
901
+ :to="{ name: 'about' }"
902
+ role="link"
903
+ :aria-label="t('nav.ariaLabel.about')"
904
+ >
905
+ {{ aboutText }}
906
+ </router-link>
967
907
  </div>
968
908
  </div>
969
909
  </div>
@@ -1022,10 +962,6 @@ export default {
1022
962
  $option-padding-left: 14px;
1023
963
  $option-height: $icon-size + $option-padding + $option-padding;
1024
964
 
1025
- .clusterBtn {
1026
- background-color: var(--nav-icon-badge-bg);
1027
- }
1028
-
1029
965
  .side-menu {
1030
966
  .menu {
1031
967
  position: absolute;
@@ -1122,6 +1058,7 @@ export default {
1122
1058
  flex: 1;
1123
1059
  display: flex;
1124
1060
  flex-direction: column;
1061
+ margin: 10px 0;
1125
1062
  width: 300px;
1126
1063
  overflow: auto;
1127
1064
 
@@ -1129,7 +1066,7 @@ export default {
1129
1066
  align-items: center;
1130
1067
  cursor: pointer;
1131
1068
  display: flex;
1132
- color: var(--primary);
1069
+ color: var(--link);
1133
1070
  font-size: 14px;
1134
1071
  height: $option-height;
1135
1072
  white-space: nowrap;
@@ -1139,7 +1076,7 @@ export default {
1139
1076
  border: none;
1140
1077
 
1141
1078
  .cluster-badge-logo-text {
1142
- color: var(--primary);
1079
+ color: var(--default-active-text);
1143
1080
  font-weight: 500;
1144
1081
  }
1145
1082
 
@@ -1211,7 +1148,7 @@ export default {
1211
1148
  .rancher-provider-icon,
1212
1149
  svg {
1213
1150
  margin-right: 16px;
1214
- fill: var(--primary);
1151
+ fill: var(--link);
1215
1152
  }
1216
1153
 
1217
1154
  .top-menu-icon {
@@ -109,7 +109,6 @@ export default {
109
109
  </script>
110
110
 
111
111
  <template>
112
- <!-- 当 type 有 route 时,渲染一个 Vue Router 自定义链接 -->
113
112
  <router-link
114
113
  v-if="type.route"
115
114
  :key="type.name"
@@ -117,24 +116,18 @@ export default {
117
116
  custom
118
117
  :to="type.route"
119
118
  >
120
-
121
- <!-- 导航项容器 -->
122
119
  <li
123
120
  class="child nav-type"
124
121
  :class="{'root': isRoot, [`depth-${depth}`]: true, 'router-link-active': isActive, 'router-link-exact-active': isExactActive}"
125
122
  @click="navigate"
126
123
  @keypress.enter="navigate"
127
124
  >
128
-
129
- <!-- 如果是精确匹配激活状态,则显示 TabTitle 组件 -->
130
125
  <TabTitle
131
126
  v-if="isExactActive"
132
127
  :show-child="false"
133
128
  >
134
129
  {{ type.labelKey ? t(type.labelKey) : (type.labelDisplay || type.label) }}
135
130
  </TabTitle>
136
-
137
- <!-- 链接主体 -->
138
131
  <a
139
132
  role="link"
140
133
  :aria-label="type.labelKey ? t(type.labelKey) : (type.labelDisplay || type.label)"
@@ -145,40 +138,30 @@ export default {
145
138
  @mouseenter="setNear(true)"
146
139
  @mouseleave="setNear(false)"
147
140
  >
148
- <!-- 文本标签:优先使用多语言 key -->
149
141
  <span
150
142
  v-if="type.labelKey"
151
143
  class="label"
152
144
  ><t :k="type.labelKey" /></span>
153
-
154
- <!-- 没有 labelKey 时,直接使用 HTML 文本 -->
155
- <div v-else style="display: flex; align-items: center;" class="labelKey_menu">
156
- <i v-if="!type.labelDisplay || (type.labelDisplay && type.labelDisplay.indexOf('</i>') === -1)" class="icon icon-fw icon-globe" style="color: var(--muted);width: 32px;text-align: left;"></i>
157
- <span
158
- v-clean-html="type.labelDisplay.replace('设置', '基础设置') || type.label"
159
- class="label"
160
- :class="{'no-icon': !type.icon}"
161
- />
162
- </div>
163
-
164
- <!-- 右侧附加信息(收藏按钮 / 命名空间图标 / 计数) -->
145
+ <span
146
+ v-else
147
+ v-clean-html="type.labelDisplay || type.label"
148
+ class="label"
149
+ :class="{'no-icon': !type.icon}"
150
+ />
165
151
  <!-- <span
166
152
  v-if="showFavorite || namespaceIcon || showCount"
167
153
  class="count"
168
154
  >
169
-
170
155
  <Favorite
171
156
  v-if="showFavorite"
172
157
  :resource="type.name"
173
158
  />
174
-
175
159
  <i
176
160
  v-if="namespaceIcon"
177
161
  class="icon icon-namespace"
178
162
  :class="{'ns-and-icon': showCount}"
179
163
  data-testid="type-namespaced"
180
164
  />
181
-
182
165
  <span
183
166
  v-if="showCount"
184
167
  data-testid="type-count"
@@ -187,8 +170,6 @@ export default {
187
170
  </a>
188
171
  </li>
189
172
  </router-link>
190
-
191
- <!-- 当 type 没有 route 但有外部 link 时 -->
192
173
  <li
193
174
  v-else-if="type.link"
194
175
  class="child nav-type nav-link"
@@ -204,8 +185,6 @@ export default {
204
185
  <span class="label">{{ type.label }}&nbsp;<i class="icon icon-external-link" /></span>
205
186
  </a>
206
187
  </li>
207
-
208
- <!-- 兜底情况:既没有 route,也没有 link -->
209
188
  <li v-else>
210
189
  {{ type }}?
211
190
  </li>
@@ -255,12 +234,12 @@ export default {
255
234
  A {
256
235
  display: grid;
257
236
  grid-template-areas: "label count";
258
- grid-template-columns: auto 20px;
237
+ grid-template-columns: auto auto;
259
238
  grid-column-gap: 5px;
260
239
  font-size: 14px;
261
240
  line-height: 24px;
262
241
  /* padding: 7.5px 7px 7.5px 10px; */
263
- padding: 0px 16px 0px 30px;
242
+ padding: 0px 16px 0px 40px;
264
243
  height: 50px;
265
244
  margin: 0 0 0 -3px;
266
245
  overflow: hidden;
@@ -269,7 +248,7 @@ export default {
269
248
  color: var(--body-text);
270
249
 
271
250
  &:hover {
272
- background: var(--nav-active) !important;
251
+ background: var(--nav-active);
273
252
  color: var(--nav-hover-color);
274
253
  /* background: var(--nav-hover); */
275
254
  text-decoration: none;
@@ -292,13 +271,13 @@ export default {
292
271
  font-size: 12px;
293
272
  text-align: right;
294
273
  justify-items: center;
295
- line-height: 50px;
274
+ padding-right: 4px;
296
275
  }
297
276
 
298
277
  &.nav-type:not(.depth-0) {
299
278
  A {
300
279
  font-size: 13px;
301
- padding: 5.5px 7px 5.5px 40px;
280
+ padding: 5.5px 7px 5.5px 10px;
302
281
  }
303
282
 
304
283
  ::v-deep .label I {
@@ -307,20 +286,4 @@ export default {
307
286
  }
308
287
  }
309
288
 
310
- .labelKey_menu{
311
- display: flex;
312
- align-items: center;
313
- }
314
- .labelKey_menu:hover{
315
- i{
316
- color: var(--nav-hover-color) !important;
317
- }
318
- }
319
- .router-link-active{
320
- .labelKey_menu{
321
- i{
322
- color: var(--nav-hover-color) !important;
323
- }
324
- }
325
- }
326
289
  </style>