dashboard-shell-shell 3.0.5-test.9 → 3.0.5-tsh-rh02

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 (213) hide show
  1. package/assets/brand/csp/favicon.png +0 -0
  2. package/assets/icons/iconfont.css +4 -1
  3. package/assets/iconsNew/demo.css +539 -0
  4. package/assets/iconsNew/demo.css:Zone.Identifier +0 -0
  5. package/assets/iconsNew/demo_index.html +303 -0
  6. package/assets/iconsNew/demo_index.html:Zone.Identifier +0 -0
  7. package/assets/iconsNew/iconfont.css +43 -0
  8. package/assets/iconsNew/iconfont.css:Zone.Identifier +0 -0
  9. package/assets/iconsNew/iconfont.js +1 -0
  10. package/assets/iconsNew/iconfont.js:Zone.Identifier +0 -0
  11. package/assets/iconsNew/iconfont.json +44 -0
  12. package/assets/iconsNew/iconfont.json:Zone.Identifier +0 -0
  13. package/assets/iconsNew/iconfont.ttf +0 -0
  14. package/assets/iconsNew/iconfont.ttf:Zone.Identifier +0 -0
  15. package/assets/iconsNew/iconfont.woff +0 -0
  16. package/assets/iconsNew/iconfont.woff2 +0 -0
  17. package/assets/iconsNew/iconfont.woff2:Zone.Identifier +0 -0
  18. package/assets/iconsNew/iconfont.woff:Zone.Identifier +0 -0
  19. package/assets/images/login-logo.svg +9 -19
  20. package/assets/images/login-logo1.svg +9 -0
  21. package/assets/images/logo.svg +11 -0
  22. package/assets/images/pl/dark/logo.png +0 -0
  23. package/assets/images/pl/logo.svg +11 -0
  24. package/assets/styles/all.scss +23 -3
  25. package/assets/styles/app.scss +1 -0
  26. package/assets/styles/base/_helpers.scss +1 -1
  27. package/assets/styles/base/_variables.scss +2 -2
  28. package/assets/styles/fonts/_icons.scss +3 -2
  29. package/assets/styles/global/_button.scss +1 -1
  30. package/assets/styles/global/_form.scss +1 -0
  31. package/assets/styles/global/_select.scss +1 -1
  32. package/assets/styles/global/_tooltip.scss +5 -1
  33. package/assets/styles/themes/_light.scss +3 -3
  34. package/assets/styles/vendor/vue-select.scss +2 -1
  35. package/assets/translations/en-us.yaml +67 -0
  36. package/assets/translations/zh-hans.yaml +226 -24
  37. package/components/ButtonDropdown.vue +3 -1
  38. package/components/ClusterIconMenu.vue +1 -1
  39. package/components/CodeMirror.vue +6 -4
  40. package/components/ConsumptionGauge.vue +1 -1
  41. package/components/ContainerResourceLimit.vue +2 -2
  42. package/components/CruResource.vue +3 -2
  43. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +22 -19
  44. package/components/Drawer/ResourceDetailDrawer/index.vue +3 -3
  45. package/components/ExplorerMembers.vue +10 -1
  46. package/components/GlobalRoleBindings.vue +69 -114
  47. package/components/PodSecurityAdmission.vue +1 -1
  48. package/components/PromptRemove.vue +23 -1
  49. package/components/RelatedResources.vue +3 -0
  50. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  51. package/components/Resource/Detail/TitleBar/index.vue +37 -24
  52. package/components/ResourceDetail/Masthead/index.vue +1 -1
  53. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  54. package/components/ResourceDetail/Masthead/legacy.vue +8 -7
  55. package/components/ResourceDetail/legacy.vue +15 -15
  56. package/components/ResourceList/Masthead.vue +16 -15
  57. package/components/ResourceTable.vue +16 -0
  58. package/components/SideNav.vue +21 -21
  59. package/components/SingleClusterInfo.vue +2 -1
  60. package/components/SortableTable/THead.vue +46 -1
  61. package/components/SortableTable/index.vue +54 -18
  62. package/components/Tabbed/index.vue +6 -1
  63. package/components/actionButton/index.vue +649 -0
  64. package/components/auth/Principal.vue +16 -8
  65. package/components/auth/RoleDetailEdit.vue +11 -7
  66. package/components/breadcrumb/index.vue +13 -210
  67. package/components/form/ArrayList.vue +164 -147
  68. package/components/form/ArrayListGrouped.vue +5 -3
  69. package/components/form/ChangePassword.vue +1 -1
  70. package/components/form/ClusterAppearance.vue +4 -3
  71. package/components/form/Command.vue +4 -5
  72. package/components/form/Conditions.vue +15 -1
  73. package/components/form/Footer.vue +1 -0
  74. package/components/form/HealthCheck.vue +0 -2
  75. package/components/form/HookOption.vue +87 -58
  76. package/components/form/InputWithSelect.vue +8 -7
  77. package/components/form/KeyValue.vue +20 -2
  78. package/components/form/LabeledSelect.vue +3 -1
  79. package/components/form/Labels.vue +2 -2
  80. package/components/form/MatchExpressions.vue +4 -4
  81. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  82. package/components/form/Members/ClusterPermissionsEditor.vue +60 -41
  83. package/components/form/Members/MembershipEditor.vue +4 -4
  84. package/components/form/Members/ProjectMembershipEditor.vue +1 -1
  85. package/components/form/NameNsDescription.vue +3 -2
  86. package/components/form/Networking.vue +6 -9
  87. package/components/form/NodeAffinity.vue +29 -28
  88. package/components/form/PodAffinity.vue +23 -23
  89. package/components/form/Probe.vue +15 -11
  90. package/components/form/ProjectMemberEditor.vue +66 -48
  91. package/components/form/ResourceQuota/Namespace.vue +4 -4
  92. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  93. package/components/form/ResourceQuota/Project.vue +4 -4
  94. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  95. package/components/form/ResourceSelector.vue +1 -1
  96. package/components/form/SecretSelector.vue +24 -23
  97. package/components/form/Security.vue +1 -3
  98. package/components/form/Select.vue +7 -1
  99. package/components/form/ServiceNameSelect.vue +2 -5
  100. package/components/form/ServicePorts.vue +149 -75
  101. package/components/form/Tolerations.vue +13 -9
  102. package/components/form/ValueFromResource.vue +110 -96
  103. package/components/formatter/WorkloadHealthScale.vue +4 -3
  104. package/components/nav/Group.vue +8 -1
  105. package/components/nav/Header.vue +51 -174
  106. package/components/nav/NamespaceFilter.vue +14 -19
  107. package/components/nav/TopLevelMenu.vue +101 -134
  108. package/components/nav/Type.vue +11 -3
  109. package/config/menuRouteMap.js +10 -0
  110. package/config/product/explorer.js +32 -10
  111. package/config/product/manager.js +28 -17
  112. package/config/product/uiplugins.js +13 -10
  113. package/config/router/navigation-guards/index.js +61 -3
  114. package/detail/node.vue +28 -23
  115. package/dialog/AddCustomBadgeDialog.vue +17 -9
  116. package/dialog/RollbackWorkloadDialog.vue +1 -1
  117. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  118. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  119. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  120. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  121. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  122. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  123. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  124. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  125. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  126. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  127. package/edit/configmap.vue +4 -0
  128. package/edit/logging-flow/index.vue +1 -2
  129. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +3 -3
  130. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +19 -19
  131. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +23 -23
  132. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +19 -19
  133. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +14 -14
  134. package/edit/logging.banzaicloud.io.output/providers/forward.vue +12 -12
  135. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +23 -23
  136. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +6 -6
  137. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +10 -10
  138. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +8 -8
  139. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +17 -17
  140. package/edit/logging.banzaicloud.io.output/providers/logz.vue +7 -7
  141. package/edit/logging.banzaicloud.io.output/providers/loki.vue +12 -12
  142. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +3 -3
  143. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +14 -14
  144. package/edit/logging.banzaicloud.io.output/providers/redis.vue +6 -6
  145. package/edit/logging.banzaicloud.io.output/providers/s3.vue +23 -23
  146. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +13 -13
  147. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +2 -2
  148. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +54 -54
  149. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +32 -8
  150. package/edit/monitoring.coreos.com.alertmanagerconfig/types/dingding.vue +32 -0
  151. package/edit/monitoring.coreos.com.alertmanagerconfig/types/message.vue +52 -0
  152. package/edit/monitoring.coreos.com.alertmanagerconfig/types/snmp.vue +45 -0
  153. package/edit/monitoring.coreos.com.alertmanagerconfig/types/work.vue +31 -0
  154. package/edit/networking.k8s.io.ingress/Certificate.vue +14 -5
  155. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  156. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  157. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  158. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  159. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  160. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  161. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  162. package/edit/persistentvolume/index.vue +3 -1
  163. package/edit/persistentvolumeclaim.vue +2 -0
  164. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +1 -1
  165. package/edit/secret/index.vue +2 -2
  166. package/edit/service.vue +4 -1
  167. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  168. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  169. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  170. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  171. package/edit/workload/Job.vue +31 -34
  172. package/edit/workload/Upgrading.vue +5 -5
  173. package/edit/workload/index.vue +19 -15
  174. package/edit/workload/storage/Mount.vue +1 -0
  175. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  176. package/edit/workload/storage/azureDisk.vue +14 -10
  177. package/edit/workload/storage/azureFile.vue +9 -7
  178. package/edit/workload/storage/csi/index.vue +6 -9
  179. package/edit/workload/storage/emptyDir.vue +7 -5
  180. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  181. package/edit/workload/storage/hostPath.vue +7 -5
  182. package/edit/workload/storage/nfs.vue +8 -6
  183. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  184. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  185. package/edit/workload/storage/secret.vue +9 -6
  186. package/edit/workload/storage/vsphereVolume.vue +11 -7
  187. package/initialize/app-extended.js +7 -1
  188. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
  189. package/mixins/create-edit-view/impl.js +10 -0
  190. package/models/provisioning.cattle.io.cluster.js +19 -18
  191. package/models/workload.js +2 -2
  192. package/package.json +1 -1
  193. package/pages/account/index.vue +93 -58
  194. package/pages/auth/setup.vue +36 -17
  195. package/pages/c/_cluster/auth/roles/index.vue +27 -3
  196. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  197. package/pages/c/_cluster/explorer/index.vue +2 -1
  198. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  199. package/pages/home.vue +55 -13
  200. package/plugins/dashboard-store/actions.js +1 -1
  201. package/rancher-components/Banner/Banner.vue +14 -2
  202. package/rancher-components/Form/Radio/RadioGroup.vue +9 -1
  203. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  204. package/scripts/build-pkg.sh +18 -23
  205. package/scripts/publish-shell.sh +1 -1
  206. package/store/i18n.js +1 -0
  207. package/store/index.js +4 -4
  208. package/store/type-map.js +0 -2
  209. package/types/shell/index.d.ts +8 -0
  210. package/utils/error.js +23 -3
  211. package/utils/errorTranslate.json +402 -8
  212. package/utils/errorTranslateNew.json +39 -0
  213. package/utils/roleFiltering.js +33 -0
@@ -80,7 +80,7 @@ export default {
80
80
  ctx: this,
81
81
  showImportModal: false,
82
82
  showSearchModal: false,
83
- userIcon: require('@shell/assets/images/logo.png'),
83
+ userIcon: require('@shell/assets/images/logo.svg'),
84
84
  };
85
85
  },
86
86
 
@@ -277,14 +277,14 @@ export default {
277
277
 
278
278
  methods: {
279
279
 
280
- LogOutfn (type) {
281
- sessionStorage.removeItem('TOPLEVELPERMISSIONS')
280
+ LogOutfn(type) {
281
+ sessionStorage.removeItem('TOPLEVELPERMISSIONS');
282
282
  if (type === '1') {
283
- this.$router.push({ name: 'account'})
283
+ this.$router.push({ name: 'account' });
284
284
  } else if (type === '2') {
285
- this.showSloModal()
285
+ this.showSloModal();
286
286
  } else if (type === '3') {
287
- this.$router.push(this.generateLogoutRoute)
287
+ this.$router.push(this.generateLogoutRoute);
288
288
  }
289
289
  },
290
290
 
@@ -413,160 +413,35 @@ export default {
413
413
  </script>
414
414
 
415
415
  <template>
416
-
417
416
  <!-- 整个页面的顶部 header -->
418
417
  <header
419
418
  ref="header"
420
419
  data-testid="header"
421
420
  >
422
421
  <div>
423
-
424
422
  <!-- 顶部一级菜单(根据不同产品/集群条件决定是否显示) -->
425
423
  <TopLevelMenu v-if="isRancherInHarvester || isMultiCluster || !isSingleProduct" />
426
424
  </div>
427
425
 
428
- <!-- <div
429
- class="menu-spacer"
430
- :class="{'isSingleProduct': isSingleProduct }"
431
- >
432
- <router-link
433
- v-if="isSingleProduct && !isRancherInHarvester"
434
- :to="singleProductLogoRoute"
435
- role="link"
436
- :alt="t('branding.logos.home')"
437
- >
438
- <BrandImage
439
- v-if="isSingleProduct.supportCustomLogo && isHarvester"
440
- class="side-menu-logo"
441
- file-name="harvester.svg"
442
- :support-custom-logo="true"
443
- :alt="t('branding.logos.label')"
444
- />
445
- <img
446
- v-else
447
- class="side-menu-logo"
448
- :src="isSingleProduct.logo"
449
- :alt="t('branding.logos.label')"
450
- >
451
- </router-link>
452
- </div>
453
-
454
- <div
455
- v-if="!simple"
456
- ref="product"
457
- class="product"
458
- >
459
- <div
460
- v-if="currentProduct && currentProduct.showClusterSwitcher"
461
- v-clean-tooltip="nameTooltip"
462
- class="cluster cluster-clipped"
463
- >
464
- <div
465
- v-if="isSingleProduct && !isRancherInHarvester"
466
- class="product-name"
467
- >
468
- <template v-if="isSingleProduct.supportCustomLogo">
469
- {{ vendor }}
470
- </template>
471
- <template v-else>
472
- {{ t(isSingleProduct.productNameKey) }}
473
- </template>
474
- </div>
475
- <template v-else>
476
- <ClusterProviderIcon
477
- v-if="currentCluster"
478
- :cluster="currentCluster"
479
- class="mr-10"
480
- :alt="t('branding.logos.label')"
481
- />
482
- <div
483
- v-if="currentCluster"
484
- ref="clusterName"
485
- class="cluster-name"
486
- >
487
- {{ currentCluster.spec.displayName }}
488
- </div>
489
- <ClusterBadge
490
- v-if="currentCluster"
491
- :cluster="currentCluster"
492
- class="ml-10"
493
- :alt="t('branding.logos.label')"
494
- />
495
- <div
496
- v-if="!currentCluster"
497
- class="simple-title"
498
- >
499
- <BrandImage
500
- class="side-menu-logo-img"
501
- file-name="rancher-logo.svg"
502
- :alt="t('branding.logos.label')"
503
- />
504
- </div>
505
- </template>
506
- </div>
507
- <div
508
- v-if="currentProduct && !currentProduct.showClusterSwitcher"
509
- class="cluster"
510
- >
511
- <img
512
- v-if="currentProduct.iconHeader"
513
- v-bind="$attrs"
514
- :src="currentProduct.iconHeader"
515
- class="cluster-os-logo mr-10"
516
- style="width: 44px; height: 36px;"
517
- :alt="t('branding.logos.label')"
518
- >
519
- <div class="product-name">
520
- {{ prod }}
521
- </div>
522
- </div>
523
- </div>
524
-
525
- <div
526
- v-else
527
- class="simple-title"
528
- >
529
- <div
530
- v-if="isSingleProduct"
531
- class="product-name"
532
- >
533
- {{ t(isSingleProduct.productNameKey) }}
534
- </div>
535
-
536
- <div
537
- v-else
538
- class="side-menu-logo"
539
- >
540
- <BrandImage
541
- class="side-menu-logo-img"
542
- data-testid="header__brand-img"
543
- file-name="rancher-logo.svg"
544
- :alt="t('branding.logos.label')"
545
- />
546
- </div>
547
- </div> -->
548
-
549
- <!-- ===== 左侧 logo 区域 ===== -->
426
+ <!-- ===== 左侧 logo 区域 ===== -->
550
427
  <div class="menu-spacer">
551
428
  <!-- 如果是单产品模式且不是 RancherInHarvester,就显示 logo 路由跳转 -->
552
429
  <router-link
553
430
  v-if="isSingleProduct && !isRancherInHarvester"
554
431
  :to="singleProductLogoRoute"
555
432
  >
556
-
557
433
  <!-- 显示用户头像或 logo 图片 -->
558
434
  <img
559
435
  :src="userIcon"
560
436
  >
561
437
  </router-link>
562
438
  </div>
563
-
439
+
564
440
  <!-- ===== 中间占位符(把左右内容分开) ===== -->
565
441
  <div class="spacer" />
566
442
 
567
443
  <!-- ===== 右侧功能区域 ===== -->
568
444
  <div class="rd-header-right">
569
-
570
445
  <!-- 动态插入右侧自定义组件(例如插件扩展的 header) -->
571
446
  <component :is="navHeaderRight" />
572
447
 
@@ -575,10 +450,9 @@ export default {
575
450
  v-if="showFilter"
576
451
  class="top"
577
452
  >
578
-
579
453
  <!-- 如果集群就绪 + 当前产品支持命名空间过滤器 或 Explorer 模式 -->
580
454
  <NamespaceFilter v-if="clusterReady && currentProduct && (currentProduct.showNamespaceFilter || isExplorer)" />
581
-
455
+
582
456
  <!-- 否则显示工作空间切换器 -->
583
457
  <WorkspaceSwitcher v-else-if="clusterReady && currentProduct && currentProduct.showWorkspaceSwitcher" />
584
458
  </div>
@@ -588,12 +462,10 @@ export default {
588
462
  v-if="currentCluster && !simple"
589
463
  class="header-buttons"
590
464
  >
591
-
592
465
  <!-- 如果当前产品支持集群切换器 -->
593
466
  <template v-if="currentProduct && currentProduct.showClusterSwitcher">
594
-
595
467
  <!-- 导入 YAML 按钮 -->
596
- <button
468
+ <!-- <button
597
469
  v-if="showImportYaml"
598
470
  v-clean-tooltip="t('nav.import')"
599
471
  :disabled="!importEnabled"
@@ -606,9 +478,9 @@ export default {
606
478
  @click="openImport()"
607
479
  >
608
480
  <i class="icon icon-upload icon-lg" />
609
- </button>
481
+ </button> -->
610
482
 
611
- <button
483
+ <!-- <button
612
484
  v-if="showKubeShell"
613
485
  id="btn-kubectl"
614
486
  v-clean-tooltip="t('nav.shellShortcut', {key: shellShortcut})"
@@ -623,10 +495,10 @@ export default {
623
495
  @click="currentCluster.openShell()"
624
496
  >
625
497
  <i class="icon icon-terminal icon-lg" />
626
- </button>
498
+ </button> -->
627
499
 
628
500
  <!-- 下载 kubeconfig 按钮 -->
629
- <button
501
+ <!-- <button
630
502
  v-if="showKubeConfig"
631
503
  v-clean-tooltip="t('nav.kubeconfig.download')"
632
504
  :disabled="!kubeConfigEnabled"
@@ -639,10 +511,10 @@ export default {
639
511
  @click="currentCluster.downloadKubeConfig()"
640
512
  >
641
513
  <i class="icon icon-file icon-lg" />
642
- </button>
514
+ </button> -->
643
515
 
644
516
  <!-- 复制 kubeconfig 按钮 -->
645
- <button
517
+ <!-- <button
646
518
  v-if="showCopyConfig"
647
519
  v-clean-tooltip="t('nav.kubeconfig.copy')"
648
520
  :disabled="!kubeConfigEnabled"
@@ -654,23 +526,22 @@ export default {
654
526
  :aria-label="t('nav.kubeconfig.copy')"
655
527
  @click="copyKubeConfig($event)"
656
528
  >
657
-
658
- <!-- 点击复制后显示对勾 -->
529
+
659
530
  <i
660
531
  v-if="kubeConfigCopying"
661
532
  class="icon icon-checkmark icon-lg"
662
533
  />
663
534
 
664
- <!-- 未复制状态显示复制图标 -->
665
535
  <i
666
536
  v-else
667
537
  class="icon icon-copy icon-lg"
668
538
  />
669
- </button>
539
+ </button> -->
670
540
  </template>
671
541
 
672
542
  <!-- 资源搜索按钮 -->
673
- <button
543
+ <!-- 2025/9/30 隐藏 -->
544
+ <!-- <button
674
545
  v-if="showSearch"
675
546
  id="header-btn-search"
676
547
  v-clean-tooltip="t('nav.resourceSearch.toolTip', {key: searchShortcut})"
@@ -685,7 +556,7 @@ export default {
685
556
  @click="openSearch()"
686
557
  >
687
558
  <i class="icon icon-search icon-lg" />
688
- </button>
559
+ </button> -->
689
560
 
690
561
  <!-- 搜索弹窗 -->
691
562
  <app-modal
@@ -697,8 +568,7 @@ export default {
697
568
  :trigger-focus-trap="true"
698
569
  return-focus-selector="#header-btn-search"
699
570
  @close="hideSearch()"
700
- >
701
- </app-modal>
571
+ />
702
572
  </div>
703
573
 
704
574
  <!-- ===== 插件扩展按钮区 ===== -->
@@ -706,28 +576,33 @@ export default {
706
576
  v-if="extensionHeaderActions.length"
707
577
  class="header-buttons"
708
578
  >
709
- <button
579
+ <template
710
580
  v-for="action, i in extensionHeaderActions"
711
581
  :key="`${action.label}${i}`"
712
- v-clean-tooltip="handleExtensionTooltip(action)"
713
- v-shortkey="action.shortcutKey"
714
- :disabled="action.enabled ? !action.enabled(ctx) : false"
715
- type="button"
716
- class="btn header-btn role-tertiary"
717
- :data-testid="`extension-header-action-${ action.labelKey || action.label }`"
718
- role="button"
719
- tabindex="0"
720
- :aria-label="action.label"
721
- @shortkey="handleExtensionAction(action, $event)"
722
- @click="handleExtensionAction(action, $event)"
723
582
  >
724
- <IconOrSvg
725
- class="icon icon-lg"
726
- :icon="action.icon"
727
- :src="action.svg"
728
- color="header"
729
- />
730
- </button>
583
+ <!-- kubectl-explain.action | 2025/9/30隐藏 -->
584
+ <button
585
+ v-if="action.labelKey !== 'kubectl-explain.action'"
586
+ v-clean-tooltip="handleExtensionTooltip(action)"
587
+ v-shortkey="action.shortcutKey"
588
+ :disabled="action.enabled ? !action.enabled(ctx) : false"
589
+ type="button"
590
+ class="btn header-btn role-tertiary"
591
+ :data-testid="`extension-header-action-${ action.labelKey || action.label }`"
592
+ role="button"
593
+ tabindex="0"
594
+ :aria-label="action.label"
595
+ @shortkey="handleExtensionAction(action, $event)"
596
+ @click="handleExtensionAction(action, $event)"
597
+ >
598
+ <IconOrSvg
599
+ class="icon icon-lg"
600
+ :icon="action.icon"
601
+ :src="action.svg"
602
+ color="header"
603
+ />
604
+ </button>
605
+ </template>
731
606
  </div>
732
607
 
733
608
  <!-- ===== 用户菜单(右上角头像 + 下拉) ===== -->
@@ -738,7 +613,6 @@ export default {
738
613
  v-if="showUserMenu"
739
614
  :aria-label="t('nav.userMenu.label')"
740
615
  >
741
-
742
616
  <!-- 头像触发按钮 -->
743
617
  <rc-dropdown-trigger
744
618
  ghost
@@ -758,7 +632,10 @@ export default {
758
632
  v-else
759
633
  class="icon icon-user icon-3x avatar"
760
634
  /> -->
761
- <i class="icon icon-usericon" style="padding-bottom: 5px;" />
635
+ <i
636
+ class="icon icon-usericon"
637
+ style="padding-bottom: 5px;"
638
+ />
762
639
  <span class="login-name">{{ principal.loginName }}</span>
763
640
  </rc-dropdown-trigger>
764
641
 
@@ -1021,7 +898,7 @@ export default {
1021
898
  border: none;
1022
899
  background: var(--header-btn-bg);
1023
900
  color: var(--header-btn-text);
1024
- padding: 0 15px 0 10px;
901
+ padding: 0 10px 0 10px;
1025
902
  line-height: 32px;
1026
903
  min-height: 32px;
1027
904
  width: 30px;
@@ -748,7 +748,7 @@ export default {
748
748
  data-testid="namespaces-values-label"
749
749
  class="ns-values"
750
750
  >
751
- {{ value[0].label }}
751
+ {{ value[0].label.replace('harvester', 'cloud') }}
752
752
  </div>
753
753
 
754
754
  <!-- All the selected namespaces -->
@@ -774,20 +774,18 @@ export default {
774
774
  :data-testid="`namespaces-value-${j}`"
775
775
  class="ns-value"
776
776
  >
777
- <div>{{ ns.label }}</div>
777
+ <div>{{ ns.label.replace('harvester', 'cloud') }}</div>
778
778
  <!-- block user from removing the last selection if ns forced filtering is on -->
779
- <RcButton
779
+ <i
780
780
  v-if="!namespaceFilterMode || value.length > 1"
781
781
  small
782
782
  ghost
783
- class="ns-chip-button"
783
+ class="ns-chip-button icon icon-close"
784
784
  :data-testid="`namespaces-values-close-${j}`"
785
785
  @click="removeOption(ns, $event)"
786
786
  @keydown.enter.space.stop="removeOption(ns, $event)"
787
787
  @mousedown="handleValueMouseDown(ns, $event)"
788
- >
789
- <i class="icon icon-close" />
790
- </RcButton>
788
+ />
791
789
  </div>
792
790
  </div>
793
791
 
@@ -836,19 +834,15 @@ export default {
836
834
  @click="focusFilter"
837
835
  @keydown="inputKeyHandler($event)"
838
836
  >
839
- <RcButton
837
+ <i
840
838
  v-if="hasFilter"
841
839
  small
842
840
  ghost
843
- class="ns-filter-clear"
841
+ class="ns-filter-clear icon icon-close"
844
842
  :aria-label="t('namespaceFilter.button.clearFilter')"
845
843
  @click="clearFilter"
846
844
  @keydown.enter.stop="clearFilter"
847
- >
848
- <i
849
- class="icon icon-close"
850
- />
851
- </RcButton>
845
+ />
852
846
  </div>
853
847
  <div
854
848
  v-if="namespaceFilterMode"
@@ -859,7 +853,7 @@ export default {
859
853
  class="icon icon-info"
860
854
  />
861
855
  </div>
862
- <RcButton
856
+ <div
863
857
  v-else
864
858
  small
865
859
  ghost
@@ -871,8 +865,9 @@ export default {
871
865
  >
872
866
  <i
873
867
  class="icon icon-close"
868
+ @click="clear()"
874
869
  />
875
- </RcButton>
870
+ </div>
876
871
  </div>
877
872
  <div class="ns-divider mt-0" />
878
873
  <div
@@ -889,12 +884,12 @@ export default {
889
884
  v-for="(opt, i) in cachedFiltered"
890
885
  :key="opt.id"
891
886
  >
892
- <hr
887
+ <div
893
888
  v-if="opt.kind === NAMESPACE_FILTER_KINDS.DIVIDER"
894
889
  role="separator"
895
890
  aria-orientation="horizontal"
896
891
  class="ns-divider"
897
- >
892
+ />
898
893
  <div
899
894
  v-else
900
895
  :id="opt.elementId"
@@ -919,7 +914,7 @@ export default {
919
914
  v-if="opt.kind === NAMESPACE_FILTER_KINDS.NAMESPACE"
920
915
  class="icon icon-folder"
921
916
  />
922
- <div>{{ opt.label }}</div>
917
+ <div>{{ opt.label.replace('harvester', 'cloud') }}</div>
923
918
  <i
924
919
  v-if="opt.selected"
925
920
  class="icon icon-checkmark"