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.
- package/assets/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +1 -1
- package/assets/styles/global/_button.scss +10 -17
- package/assets/styles/global/_form.scss +2 -2
- package/assets/styles/global/_labeled-input.scss +2 -6
- package/assets/styles/global/_select.scss +7 -6
- package/assets/styles/global/_table.scss +2 -3
- package/assets/styles/global/_tooltip.scss +1 -8
- package/assets/styles/themes/_dark.scss +0 -2
- package/assets/styles/themes/_light.scss +2 -5
- package/assets/styles/vendor/vue-select.scss +1 -2
- package/assets/translations/en-us.yaml +3 -1
- package/assets/translations/zh-hans.yaml +28 -51
- package/components/ActionDropdown.vue +0 -1
- package/components/ActionMenuShell.vue +3 -6
- package/components/BrandImage.vue +0 -22
- package/components/ClusterIconMenu.vue +1 -1
- package/components/CodeMirror.vue +0 -1
- package/components/CruResource.vue +1 -1
- package/components/CruResourceFooter.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +24 -4
- package/components/GlobalRoleBindings.vue +48 -112
- package/components/IndentedPanel.vue +10 -4
- package/components/PromptRemove.vue +3 -3
- package/components/ResourceDetail/Masthead.vue +242 -190
- package/components/ResourceDetail/index.vue +5 -20
- package/components/ResourceList/Masthead.vue +84 -146
- package/components/ResourceList/ResourceLoadingIndicator.vue +2 -5
- package/components/ResourceTable.vue +1 -76
- package/components/SideNav.vue +29 -66
- package/components/SortableTable/THead.vue +0 -6
- package/components/SortableTable/index.vue +388 -481
- package/components/Tabbed/index.vue +5 -4
- package/components/auth/Principal.vue +2 -3
- package/components/auth/RoleDetailEdit.vue +5 -58
- package/components/auth/SelectPrincipal.vue +0 -1
- package/components/form/BannerSettings.vue +16 -18
- package/components/form/ChangePassword.vue +4 -4
- package/components/form/ColorInput.vue +8 -32
- package/components/form/Footer.vue +1 -1
- package/components/form/InputWithSelect.vue +0 -2
- package/components/form/KeyValue.vue +7 -31
- package/components/form/LabeledSelect.vue +178 -178
- package/components/form/Members/ClusterPermissionsEditor.vue +2 -1
- package/components/form/Members/MembershipEditor.vue +1 -1
- package/components/form/NameNsDescription.vue +11 -24
- package/components/form/Password.vue +2 -6
- package/components/form/ResourceQuota/Namespace.vue +1 -1
- package/components/form/ResourceQuota/NamespaceRow.vue +10 -13
- package/components/form/ResourceQuota/ProjectRow.vue +1 -0
- package/components/form/Select.vue +2 -2
- package/components/nav/Favorite.vue +1 -5
- package/components/nav/Group.vue +23 -69
- package/components/nav/Header.vue +17 -82
- package/components/nav/HeaderPageActionMenu.vue +0 -1
- package/components/nav/NamespaceFilter.vue +3 -0
- package/components/nav/TopLevelMenu.vue +119 -182
- package/components/nav/Type.vue +11 -48
- package/components/rancherResourceDetail/Masthead.vue +769 -0
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
- package/components/rancherResourceDetail/index.vue +591 -0
- package/components/rancherResourceList/Masthead.vue +375 -0
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
- package/components/rancherResourceList/index.vue +307 -0
- package/components/rancherResourceList/resource-list.config.js +7 -0
- package/components/rancherResourceTable.vue +783 -0
- package/components/rancherSortableTable/THead.vue +561 -0
- package/components/rancherSortableTable/actions.js +153 -0
- package/components/rancherSortableTable/advanced-filtering.js +272 -0
- package/components/rancherSortableTable/debug.js +117 -0
- package/components/rancherSortableTable/filtering.js +290 -0
- package/components/rancherSortableTable/grouping.js +48 -0
- package/components/rancherSortableTable/index.vue +2712 -0
- package/components/rancherSortableTable/paging.js +155 -0
- package/components/rancherSortableTable/selection.js +629 -0
- package/components/rancherSortableTable/sortable-config.ts +4 -0
- package/components/rancherSortableTable/sorting.js +129 -0
- package/composables/useClickOutside.ts +1 -1
- package/config/product/auth.js +7 -16
- package/config/product/explorer.js +1 -1
- package/config/product/settings.js +8 -17
- package/config/settings.ts +0 -28
- package/edit/management.cattle.io.user.vue +4 -17
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/token.vue +1 -1
- package/list/harvesterhci.io.management.cluster.vue +0 -17
- package/list/management.cattle.io.setting.vue +13 -22
- package/list/management.cattle.io.user.vue +14 -25
- package/list/provisioning.cattle.io.cluster.vue +7 -6
- package/mixins/brand.js +0 -17
- package/package.json +1 -1
- package/pages/auth/login.vue +29 -84
- package/pages/c/_cluster/auth/roles/index.vue +14 -61
- package/pages/c/_cluster/settings/banners.vue +101 -174
- package/pages/c/_cluster/settings/brand.vue +301 -348
- package/pages/c/_cluster/settings/performance.vue +38 -61
- package/pages/home.vue +21 -70
- package/pages/prefs.vue +23 -25
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/promptRemove/mixin/roleDeletionCheck.js +2 -2
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +0 -0
- package/scripts/extension/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +0 -0
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +0 -0
- package/scripts/publish-shell.sh +60 -86
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/typegen.sh +28 -44
- package/store/i18n.js +5 -5
- package/store/prefs.js +5 -17
- package/store/type-map.js +1 -2
- package/types/cloud-shell/index.d.ts +11014 -0
- package/types/shell/index.d.ts +1 -1
- package/utils/error.js +0 -4
- package/utils/router.js +3 -3
- package/vue.config.js +6 -1
- package/assets/images/action.svg +0 -6
- package/assets/images/pl/logo.png +0 -0
- /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.
|
|
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
|
|
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
|
-
<!--
|
|
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="
|
|
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="
|
|
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
|
-
</
|
|
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
|
|
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
|
-
</
|
|
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
|
|
846
|
-
<!-- 多集群应用 -->
|
|
809
|
+
<!-- MULTI CLUSTER APPS -->
|
|
810
|
+
<div class="category">
|
|
847
811
|
<template v-if="multiClusterApps.length">
|
|
848
|
-
<
|
|
849
|
-
|
|
850
|
-
|
|
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
|
-
<
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
<
|
|
859
|
-
|
|
860
|
-
|
|
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
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1151
|
+
fill: var(--link);
|
|
1215
1152
|
}
|
|
1216
1153
|
|
|
1217
1154
|
.top-menu-icon {
|
package/components/nav/Type.vue
CHANGED
|
@@ -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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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 }} <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
|
|
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
|
|
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)
|
|
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
|
-
|
|
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
|
|
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>
|