dashboard-shell-shell 3.0.5-test.6 → 3.0.5-test.61

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 (353) hide show
  1. package/assets/brand/csp/favicon.png +0 -0
  2. package/assets/brand/harvester/favicon.png +0 -0
  3. package/assets/brand/suse/favicon.png +0 -0
  4. package/assets/icons/demo.css +539 -0
  5. package/assets/icons/demo.css:Zone.Identifier +0 -0
  6. package/assets/icons/demo_index.html +1131 -0
  7. package/assets/icons/demo_index.html:Zone.Identifier +0 -0
  8. package/assets/icons/iconfont.css +219 -0
  9. package/assets/icons/iconfont.css:Zone.Identifier +0 -0
  10. package/assets/icons/iconfont.js +1 -0
  11. package/assets/icons/iconfont.js:Zone.Identifier +0 -0
  12. package/assets/icons/iconfont.json +324 -0
  13. package/assets/icons/iconfont.json:Zone.Identifier +0 -0
  14. package/assets/icons/iconfont.ttf +0 -0
  15. package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
  16. package/assets/icons/iconfont.woff +0 -0
  17. package/assets/icons/iconfont.woff2 +0 -0
  18. package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
  19. package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
  20. package/assets/iconsNew/demo.css +539 -0
  21. package/assets/iconsNew/demo.css:Zone.Identifier +0 -0
  22. package/assets/iconsNew/demo_index.html +303 -0
  23. package/assets/iconsNew/demo_index.html:Zone.Identifier +0 -0
  24. package/assets/iconsNew/iconfont.css +43 -0
  25. package/assets/iconsNew/iconfont.css:Zone.Identifier +0 -0
  26. package/assets/iconsNew/iconfont.js +1 -0
  27. package/assets/iconsNew/iconfont.js:Zone.Identifier +0 -0
  28. package/assets/iconsNew/iconfont.json +44 -0
  29. package/assets/iconsNew/iconfont.json:Zone.Identifier +0 -0
  30. package/assets/iconsNew/iconfont.ttf +0 -0
  31. package/assets/iconsNew/iconfont.ttf:Zone.Identifier +0 -0
  32. package/assets/iconsNew/iconfont.woff +0 -0
  33. package/assets/iconsNew/iconfont.woff2 +0 -0
  34. package/assets/iconsNew/iconfont.woff2:Zone.Identifier +0 -0
  35. package/assets/iconsNew/iconfont.woff:Zone.Identifier +0 -0
  36. package/assets/images/API.svg +3 -0
  37. package/assets/images/action.svg +6 -0
  38. package/assets/images/login/password.svg +20 -0
  39. package/assets/images/login/user.svg +6 -0
  40. package/assets/images/login-bg.png +0 -0
  41. package/assets/images/login-left.png +0 -0
  42. package/assets/images/login-logo.svg +44 -0
  43. package/assets/images/logo.png +0 -0
  44. package/assets/images/logo.svg +47 -0
  45. package/assets/images/pl/dark/logo.png +0 -0
  46. package/assets/images/pl/half-logo.svg +2 -23
  47. package/assets/images/pl/harvester.png +0 -0
  48. package/assets/images/pl/logo.png +0 -0
  49. package/assets/images/promp-yellow.svg +5 -0
  50. package/assets/images/user.png +0 -0
  51. package/assets/styles/all.scss +83 -0
  52. package/assets/styles/app.scss +5 -0
  53. package/assets/styles/base/_basic.scss +2 -2
  54. package/assets/styles/base/_helpers.scss +1 -1
  55. package/assets/styles/base/_mixins.scss +1 -1
  56. package/assets/styles/base/_typography.scss +2 -1
  57. package/assets/styles/base/_variables.scss +14 -7
  58. package/assets/styles/fonts/_icons.scss +3 -2
  59. package/assets/styles/global/_button.scss +44 -26
  60. package/assets/styles/global/_columns.scss +3 -1
  61. package/assets/styles/global/_form.scss +46 -13
  62. package/assets/styles/global/_labeled-input.scss +54 -26
  63. package/assets/styles/global/_layout.scss +8 -3
  64. package/assets/styles/global/_select.scss +25 -17
  65. package/assets/styles/global/_table.scss +7 -1
  66. package/assets/styles/global/_tooltip.scss +60 -8
  67. package/assets/styles/themes/_dark.scss +3 -0
  68. package/assets/styles/themes/_light.scss +69 -46
  69. package/assets/styles/vendor/vue-select.scss +24 -10
  70. package/assets/translations/en-us.yaml +92 -4
  71. package/assets/translations/zh-hans.yaml +668 -206
  72. package/components/ActionDropdown.vue +2 -1
  73. package/components/ActionMenu.vue +2 -2
  74. package/components/ActionMenuShell.vue +2 -0
  75. package/components/AppModal.vue +46 -5
  76. package/components/BrandImage.vue +1 -0
  77. package/components/ButtonDropdown.vue +28 -4
  78. package/components/ButtonMultiAction.vue +1 -0
  79. package/components/ClusterIconMenu.vue +2 -2
  80. package/components/CodeMirror.vue +26 -10
  81. package/components/ConsumptionGauge.vue +24 -5
  82. package/components/ContainerResourceLimit.vue +2 -2
  83. package/components/CopyToClipboard.vue +15 -0
  84. package/components/CruResource.vue +12 -10
  85. package/components/CruResourceFooter.vue +2 -2
  86. package/components/DashboardOptions.vue +29 -17
  87. package/components/DotState.vue +84 -0
  88. package/components/Drawer/Chrome.vue +2 -2
  89. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +30 -27
  90. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
  91. package/components/Drawer/ResourceDetailDrawer/index.vue +5 -4
  92. package/components/ExplorerMembers.vue +28 -4
  93. package/components/ExplorerProjectsNamespaces.vue +19 -5
  94. package/components/GlobalRoleBindings.vue +23 -4
  95. package/components/GrafanaDashboard.vue +4 -4
  96. package/components/GrowlManager.vue +3 -1
  97. package/components/HardwareResourceGauge.vue +39 -3
  98. package/components/IndentedPanel.vue +4 -10
  99. package/components/InfoBox.vue +3 -3
  100. package/components/InputOrDisplay.vue +28 -2
  101. package/components/LabelValue.vue +20 -1
  102. package/components/ModalWithCard.vue +12 -3
  103. package/components/PodSecurityAdmission.vue +2 -2
  104. package/components/PromptModal.vue +1 -1
  105. package/components/PromptRemove.vue +53 -12
  106. package/components/RelatedResources.vue +3 -0
  107. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +1 -3
  108. package/components/Resource/Detail/Metadata/KeyValue.vue +8 -4
  109. package/components/Resource/Detail/Metadata/index.vue +3 -1
  110. package/components/Resource/Detail/TitleBar/Title.vue +4 -3
  111. package/components/Resource/Detail/TitleBar/Top.vue +2 -0
  112. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  113. package/components/Resource/Detail/TitleBar/index.vue +125 -27
  114. package/components/ResourceDetail/Masthead/index.vue +1 -1
  115. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  116. package/components/ResourceDetail/Masthead/legacy.vue +183 -39
  117. package/components/ResourceDetail/legacy.vue +47 -29
  118. package/components/ResourceList/Masthead.vue +222 -54
  119. package/components/ResourceList/ResourceLoadingIndicator.vue +5 -2
  120. package/components/ResourceTable.vue +40 -2
  121. package/components/SideNav.vue +74 -20
  122. package/components/SingleClusterInfo.vue +2 -1
  123. package/components/SortableTable/THead.vue +79 -4
  124. package/components/SortableTable/index.vue +1053 -464
  125. package/components/SortableTable/paging.js +26 -16
  126. package/components/SortableTable/selection.js +2 -2
  127. package/components/Tabbed/Tab.vue +3 -3
  128. package/components/Tabbed/index.vue +53 -30
  129. package/components/YamlEditor.vue +0 -1
  130. package/components/auth/Principal.vue +51 -19
  131. package/components/auth/RoleDetailEdit.vue +69 -14
  132. package/components/auth/SelectPrincipal.vue +1 -0
  133. package/components/breadcrumb/index.vue +119 -0
  134. package/components/form/ArrayList.vue +177 -152
  135. package/components/form/ArrayListGrouped.vue +13 -3
  136. package/components/form/ArrayListSelect.vue +1 -1
  137. package/components/form/BannerSettings.vue +64 -59
  138. package/components/form/ChangePassword.vue +5 -5
  139. package/components/form/ClusterAppearance.vue +4 -3
  140. package/components/form/ColorInput.vue +32 -8
  141. package/components/form/Command.vue +4 -5
  142. package/components/form/Conditions.vue +15 -1
  143. package/components/form/Footer.vue +12 -8
  144. package/components/form/HealthCheck.vue +0 -2
  145. package/components/form/HookOption.vue +87 -58
  146. package/components/form/InputWithSelect.vue +8 -4
  147. package/components/form/KeyValue.vue +66 -8
  148. package/components/form/LabeledSelect.vue +216 -242
  149. package/components/form/Labels.vue +4 -4
  150. package/components/form/MatchExpressions.vue +28 -11
  151. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  152. package/components/form/Members/ClusterPermissionsEditor.vue +61 -43
  153. package/components/form/Members/MembershipEditor.vue +4 -4
  154. package/components/form/Members/ProjectMembershipEditor.vue +1 -1
  155. package/components/form/NameNsDescription.vue +62 -22
  156. package/components/form/Networking.vue +6 -9
  157. package/components/form/NodeAffinity.vue +29 -28
  158. package/components/form/Password.vue +16 -7
  159. package/components/form/PodAffinity.vue +24 -25
  160. package/components/form/Probe.vue +15 -11
  161. package/components/form/ProjectMemberEditor.vue +66 -48
  162. package/components/form/ResourceQuota/Namespace.vue +4 -4
  163. package/components/form/ResourceQuota/NamespaceRow.vue +26 -23
  164. package/components/form/ResourceQuota/Project.vue +4 -4
  165. package/components/form/ResourceQuota/ProjectRow.vue +38 -35
  166. package/components/form/ResourceSelector.vue +1 -1
  167. package/components/form/SecretSelector.vue +24 -23
  168. package/components/form/Security.vue +1 -3
  169. package/components/form/Select.vue +12 -3
  170. package/components/form/ServiceNameSelect.vue +2 -5
  171. package/components/form/ServicePorts.vue +149 -75
  172. package/components/form/SimpleSecretSelector.vue +29 -9
  173. package/components/form/Taints.vue +2 -1
  174. package/components/form/Tolerations.vue +13 -9
  175. package/components/form/UnitInput.vue +8 -3
  176. package/components/form/ValueFromResource.vue +110 -96
  177. package/components/form/WorkloadPorts.vue +143 -123
  178. package/components/formatter/BadgeStateFormatter.vue +8 -5
  179. package/components/formatter/LiveDate.vue +3 -3
  180. package/components/formatter/WorkloadHealthScale.vue +4 -3
  181. package/components/nav/Favorite.vue +5 -1
  182. package/components/nav/Group.vue +139 -99
  183. package/components/nav/Header.vue +138 -164
  184. package/components/nav/HeaderPageActionMenu.vue +1 -0
  185. package/components/nav/NamespaceFilter.vue +34 -36
  186. package/components/nav/TopLevelMenu.vue +62 -25
  187. package/components/nav/Type.vue +73 -43
  188. package/composables/useClickOutside.ts +1 -1
  189. package/config/menuRouteMap.js +10 -0
  190. package/config/private-label.js +14 -11
  191. package/config/product/auth.js +17 -7
  192. package/config/product/explorer.js +32 -10
  193. package/config/product/manager.js +28 -17
  194. package/config/product/settings.js +19 -9
  195. package/config/product/uiplugins.js +13 -10
  196. package/config/router/navigation-guards/index.js +61 -3
  197. package/config/settings.ts +28 -0
  198. package/config/table-headers.js +3 -2
  199. package/detail/node.vue +28 -23
  200. package/dialog/AddCustomBadgeDialog.vue +17 -9
  201. package/dialog/ForceMachineRemoveDialog.vue +2 -2
  202. package/dialog/RollbackWorkloadDialog.vue +1 -1
  203. package/dialog/ScalePoolDownDialog.vue +2 -2
  204. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  205. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  206. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  207. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  208. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  209. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  210. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  211. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  212. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  213. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  214. package/edit/configmap.vue +4 -0
  215. package/edit/logging-flow/index.vue +1 -2
  216. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +3 -3
  217. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +19 -19
  218. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +23 -23
  219. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +19 -19
  220. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +14 -14
  221. package/edit/logging.banzaicloud.io.output/providers/forward.vue +12 -12
  222. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +23 -23
  223. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +6 -6
  224. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +10 -10
  225. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +8 -8
  226. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +17 -17
  227. package/edit/logging.banzaicloud.io.output/providers/logz.vue +7 -7
  228. package/edit/logging.banzaicloud.io.output/providers/loki.vue +12 -12
  229. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +3 -3
  230. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +14 -14
  231. package/edit/logging.banzaicloud.io.output/providers/redis.vue +6 -6
  232. package/edit/logging.banzaicloud.io.output/providers/s3.vue +23 -23
  233. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +13 -13
  234. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +2 -2
  235. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +54 -54
  236. package/edit/management.cattle.io.user.vue +17 -4
  237. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
  238. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +50 -26
  239. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
  240. package/edit/monitoring.coreos.com.alertmanagerconfig/types/dingding.vue +32 -0
  241. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  242. package/edit/monitoring.coreos.com.alertmanagerconfig/types/message.vue +52 -0
  243. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
  244. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
  245. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
  246. package/edit/monitoring.coreos.com.alertmanagerconfig/types/snmp.vue +45 -0
  247. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
  248. package/edit/monitoring.coreos.com.alertmanagerconfig/types/work.vue +31 -0
  249. package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
  250. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
  251. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
  252. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
  253. package/edit/namespace.vue +1 -2
  254. package/edit/networking.k8s.io.ingress/Certificate.vue +14 -5
  255. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  256. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  257. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  258. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  259. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  260. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  261. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  262. package/edit/persistentvolume/index.vue +3 -1
  263. package/edit/persistentvolumeclaim.vue +2 -0
  264. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +1 -1
  265. package/edit/secret/index.vue +2 -2
  266. package/edit/service.vue +4 -1
  267. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  268. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  269. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  270. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  271. package/edit/token.vue +31 -12
  272. package/edit/workload/Job.vue +31 -34
  273. package/edit/workload/Upgrading.vue +5 -5
  274. package/edit/workload/index.vue +22 -18
  275. package/edit/workload/storage/Mount.vue +1 -0
  276. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  277. package/edit/workload/storage/azureDisk.vue +14 -10
  278. package/edit/workload/storage/azureFile.vue +9 -7
  279. package/edit/workload/storage/csi/index.vue +6 -9
  280. package/edit/workload/storage/emptyDir.vue +7 -5
  281. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  282. package/edit/workload/storage/hostPath.vue +7 -5
  283. package/edit/workload/storage/nfs.vue +8 -6
  284. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  285. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  286. package/edit/workload/storage/secret.vue +9 -6
  287. package/edit/workload/storage/vsphereVolume.vue +11 -7
  288. package/initialize/app-extended.js +7 -1
  289. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
  290. package/list/management.cattle.io.setting.vue +22 -13
  291. package/list/management.cattle.io.user.vue +7 -3
  292. package/list/namespace.vue +3 -0
  293. package/list/provisioning.cattle.io.cluster.vue +6 -7
  294. package/mixins/brand.js +17 -0
  295. package/mixins/create-edit-view/impl.js +10 -0
  296. package/models/provisioning.cattle.io.cluster.js +19 -18
  297. package/models/workload.js +2 -2
  298. package/package.json +1 -1
  299. package/pages/account/index.vue +93 -58
  300. package/pages/account/pri.vue +229 -0
  301. package/pages/auth/login.vue +216 -51
  302. package/pages/auth/setup.vue +175 -33
  303. package/pages/c/_cluster/_product/namespaces.vue +5 -5
  304. package/pages/c/_cluster/auth/roles/index.vue +83 -8
  305. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  306. package/pages/c/_cluster/explorer/index.vue +2 -1
  307. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  308. package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
  309. package/pages/c/_cluster/settings/banners.vue +174 -102
  310. package/pages/c/_cluster/settings/brand.vue +350 -302
  311. package/pages/c/_cluster/settings/performance.vue +61 -38
  312. package/pages/home.vue +119 -37
  313. package/pages/prefs.vue +27 -25
  314. package/pkg/tsconfig.json +9 -9
  315. package/pkg/vue.config.js +1 -1
  316. package/plugins/dashboard-store/actions.js +1 -1
  317. package/plugins/dashboard-store/resource-class.js +28 -27
  318. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  319. package/public/index.html +4 -4
  320. package/rancher-components/BadgeState/BadgeState.vue +38 -55
  321. package/rancher-components/Banner/Banner.vue +25 -9
  322. package/rancher-components/Card/Card.vue +7 -8
  323. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
  324. package/rancher-components/Form/LabeledInput/LabeledInput.vue +42 -3
  325. package/rancher-components/Form/Radio/RadioButton.vue +35 -11
  326. package/rancher-components/Form/Radio/RadioGroup.vue +22 -6
  327. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +3 -3
  328. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -0
  329. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +41 -4
  330. package/rancher-components/RcDropdown/RcDropdown.vue +35 -7
  331. package/rancher-components/RcDropdown/RcDropdownItem.vue +2 -2
  332. package/rancher-components/RcDropdown/RcDropdownMenu.vue +12 -6
  333. package/rancher-components/RcDropdown/types.ts +1 -0
  334. package/rancher-components/StringList/StringList.vue +1 -1
  335. package/scripts/build-pkg.sh +18 -23
  336. package/scripts/publish-shell.sh +1 -1
  337. package/static/favicon.ico +0 -0
  338. package/static/favicon.png +0 -0
  339. package/static/loading-indicator.html +3 -3
  340. package/store/i18n.js +6 -2
  341. package/store/modal.ts +3 -3
  342. package/store/prefs.js +11 -4
  343. package/store/type-map.js +30 -2
  344. package/types/shell/index.d.ts +86 -97
  345. package/utils/error.js +109 -8
  346. package/utils/errorTranslate.json +1740 -0
  347. package/utils/errorTranslateNew.json +39 -0
  348. package/utils/roleFiltering.js +33 -0
  349. package/utils/router.js +21 -0
  350. package/utils/select.js +26 -3
  351. package/utils/string.js +8 -5
  352. package/utils/title.ts +1 -1
  353. package/vue.config.js +1 -1
@@ -14,6 +14,18 @@ export default {
14
14
 
15
15
  name: 'MastheadResourceList',
16
16
 
17
+ mounted() {
18
+ this.observeWidth()
19
+ },
20
+
21
+ beforeUnmount() {
22
+ if (this.resizeObserver) {
23
+ this.resizeObserver.disconnect()
24
+ this.resizeObserver = null
25
+ }
26
+ this.$store.commit('type-map/setActionsWidth', 0) // 销毁时清空或回到默认值
27
+ },
28
+
17
29
  components: {
18
30
  Favorite,
19
31
  TypeDescription,
@@ -79,7 +91,12 @@ export default {
79
91
  componentTestid: {
80
92
  type: String,
81
93
  default: 'masthead'
82
- }
94
+ },
95
+
96
+ mainButtonVisible: {
97
+ type: Boolean,
98
+ default: true
99
+ },
83
100
  },
84
101
 
85
102
  data() {
@@ -95,10 +112,16 @@ export default {
95
112
  query: { [AS]: _YAML },
96
113
  };
97
114
 
115
+ const tabList = ['集群配置'];
116
+
117
+ const description = ''
98
118
  return {
99
119
  formRoute,
100
120
  yamlRoute,
101
121
  hasEditComponent,
122
+ tabList,
123
+ description,
124
+ resizeObserver: null
102
125
  };
103
126
  },
104
127
 
@@ -125,6 +148,65 @@ export default {
125
148
 
126
149
  return this.$store.getters['type-map/labelFor'](this.schema, 99);
127
150
  },
151
+ _descriptionDisplay() {
152
+ const key = this.$route.path.split('/').pop();
153
+
154
+ return this.$store.getters['i18n/t'](`typeDescription."${ key.toLowerCase() }"`);
155
+ },
156
+ demoDisplay() {
157
+
158
+ const product = this.$store.getters['productId'];
159
+ const productId = this.$store.getters['type-map/groupForBasicType'](this.$store.getters['productId'], this._createLocation?.params?.resource);
160
+ console.log(product, 'product')
161
+ console.log(productId, 'productId')
162
+ console.log(this._createLocation?.params?.resource, 'this._createLocation?.params?.resource')
163
+
164
+ const parts = productId?.split('::') || [];
165
+ const newString = 'root';
166
+
167
+ if (!parts) {
168
+ if (this.$route.path.includes('/c/local/explorer/secret')) {
169
+ parts = ['storage']
170
+ }
171
+ }
172
+
173
+ const breadcrumbList = {
174
+ 'harvesterhci.io.management.cluster': {
175
+ origin: 'Harvester 集群',
176
+ bread: ['虚拟化管理'],
177
+ },
178
+ 'management.cattle.io.user': {
179
+ origin: '用户',
180
+ bread: ['用户 & 认证'],
181
+ },
182
+ 'management.cattle.io.setting':{
183
+ origin: '基础设置',
184
+ bread: ['全局设置'],
185
+ },
186
+ 'management.cattle.io.feature':{
187
+ origin: '功能开关',
188
+ bread: ['全局设置'],
189
+ },
190
+ }
191
+ const resourcePath = this.$route.params.resource || ''
192
+
193
+ const breadcrumb = []
194
+ if (breadcrumbList[resourcePath] && Object.keys(breadcrumbList[resourcePath]).length > 0) {
195
+ breadcrumb.push(...breadcrumbList[resourcePath].bread)
196
+ return breadcrumb
197
+ } else {
198
+ if (!parts?.includes(newString)) {
199
+ parts?.unshift(newString); // 将字符串添加到数组第一位
200
+ }
201
+
202
+ const partsEn = parts?.map((item) => {
203
+ return this.$store.getters['i18n/t'](`typeLabel."${ item.toLowerCase() }"`);
204
+ });
205
+
206
+ return partsEn;
207
+ }
208
+
209
+ },
128
210
 
129
211
  _isYamlCreatable() {
130
212
  if ( this.isYamlCreatable !== null) {
@@ -165,88 +247,174 @@ export default {
165
247
 
166
248
  return this.createButtonLabel || this.t('resourceList.head.create');
167
249
  },
250
+ },
251
+
252
+ methods: {
253
+ observeWidth() {
254
+ const el = this.$refs.actionsContainer
255
+ if (!el) return
256
+
257
+ // 创建 ResizeObserver
258
+ this.resizeObserver = new ResizeObserver((entries) => {
259
+ for (const entry of entries) {
260
+ const width = entry?.contentRect?.width && entry.contentRect.width > 0 ? entry.contentRect.width + 10 : 0
261
+
262
+ this.$store.commit('type-map/setActionsWidth', width)
263
+ }
264
+ })
265
+
266
+ // 开始监听
267
+ this.resizeObserver.observe(el)
268
+ }
168
269
  }
169
270
  };
170
271
  </script>
171
272
 
172
273
  <template>
173
274
  <header class="with-subheader">
174
- <slot name="typeDescription">
175
- <TypeDescription :resource="resource" />
176
- </slot>
177
- <div class="title">
178
- <h1 class="m-0">
179
- <TabTitle>{{ _typeDisplay }}</TabTitle> <Favorite
180
- v-if="isExplorer"
181
- :resource="favoriteResource || resource"
182
- />
183
- </h1>
184
- <ResourceLoadingIndicator
185
- v-if="showIncrementalLoadingIndicator"
186
- :resources="loadResources"
187
- :indeterminate="loadIndeterminate"
188
- />
189
- </div>
190
- <div class="sub-header">
191
- <slot name="subHeader">
192
- <!--Slot content-->
193
- </slot>
194
- </div>
195
- <div class="actions-container">
196
- <slot name="actions">
197
- <div class="actions">
198
- <slot name="extraActions" />
199
-
200
- <slot name="createButton">
201
- <router-link
202
- v-if="hasEditComponent && _isCreatable"
203
- :to="_createLocation"
204
- class="btn role-primary"
205
- :data-testid="componentTestid+'-create'"
206
- >
207
- {{ _createButtonlabel }}
208
- </router-link>
209
- <router-link
210
- v-else-if="_isYamlCreatable"
211
- :to="_yamlCreateLocation"
212
- class="btn role-primary"
213
- :data-testid="componentTestid+'-create-yaml'"
275
+ <div style="display: flex;width: 100%;">
276
+ <div style="flex: 1;">
277
+ <!-- 标题区域 -->
278
+ <div class="title">
279
+ <div class="excram-list">
280
+ <span
281
+ v-for="(item,index) in demoDisplay"
282
+ :key="index"
214
283
  >
215
- {{ t("resourceList.head.createFromYaml") }}
216
- </router-link>
217
- </slot>
284
+ <span v-if="item">{{ item }}</span>
285
+ <span v-if="item">/</span>
286
+ </span>
287
+ <span class="excram-last-name">{{ _typeDisplay }}</span>
288
+ </div>
289
+ <h1 style="display: flex;align-items: center;" class="m-0 descrip-name">
290
+ <TabTitle>{{ _typeDisplay }}</TabTitle>
291
+ <!-- 子标题区域 -->
292
+ <div class="sub-header">
293
+ <slot name="subHeader">
294
+ <!--Slot content-->
295
+ </slot>
296
+ </div>
297
+
298
+ <!-- <Favorite
299
+ v-if="isExplorer"
300
+ :resource="favoriteResource || resource"
301
+ /> -->
302
+
303
+ <ResourceLoadingIndicator
304
+ style="margin-left: 10px;"
305
+ v-if="showIncrementalLoadingIndicator"
306
+ :resources="loadResources"
307
+ :indeterminate="loadIndeterminate"
308
+ />
309
+ </h1>
310
+
311
+ <!-- 插槽:typeDescription,用于插入类型描述组件 -->
312
+ <div v-if="_descriptionDisplay" class="masthod-title-description">
313
+ {{ _descriptionDisplay }}
314
+ </div>
315
+
218
316
  </div>
219
- </slot>
317
+
318
+
319
+ </div>
320
+
321
+ <!-- 操作按钮区域 -->
322
+ <div
323
+ ref="actionsContainer"
324
+ v-if="!(tabList.includes(_typeDisplay))"
325
+ class="actions-container actions-positioning"
326
+ style="min-height: 32px;align-self: flex-end;"
327
+ >
328
+ <slot name="actions">
329
+ <div class="actions">
330
+ <slot name="extraActions" />
331
+
332
+ <slot name="createButton">
333
+ <router-link
334
+ v-if="hasEditComponent && _isCreatable"
335
+ :to="_createLocation"
336
+ class="btn role-primary"
337
+ :data-testid="componentTestid+'-create'"
338
+ >
339
+ {{ _createButtonlabel }}
340
+ </router-link>
341
+ <router-link
342
+ v-else-if="_isYamlCreatable"
343
+ :to="_yamlCreateLocation"
344
+ class="btn role-primary"
345
+ :data-testid="componentTestid+'-create-yaml'"
346
+ >
347
+ {{ t("resourceList.head.createFromYaml") }}
348
+ </router-link>
349
+ </slot>
350
+ </div>
351
+ </slot>
352
+ </div>
220
353
  </div>
354
+ <div
355
+ v-if="!(tabList.includes(_typeDisplay))"
356
+ style="width: 110%;height: 1px;background-color: #D7D7D7;margin-top: 16px;margin-left: -20px;margin-right: -20px;"
357
+ />
221
358
  </header>
222
359
  </template>
223
360
 
224
361
  <style lang="scss" scoped>
225
362
  .title {
226
- align-items: center;
227
- display: flex;
363
+ /* align-items: center;
364
+ display: flex; */
228
365
  h1 {
229
366
  margin: 0;
230
367
  }
231
368
  }
232
369
 
233
370
  header {
234
- margin-bottom: 20px;
371
+ /* margin-bottom: 20px; */
235
372
  }
236
373
 
237
374
  header.with-subheader {
238
- grid-template-areas:
375
+ /* grid-template-areas:
239
376
  'type-banner type-banner'
240
377
  'title actions'
241
378
  'sub-header sub-header'
242
- 'state-banner state-banner';
379
+ 'state-banner state-banner'; */
380
+ position: relative;
381
+ display: flex;
382
+ margin-bottom: 16px;
383
+ flex-direction: column;
384
+ }
385
+ .excram-list{
386
+ font-size: 14px;
387
+ line-height: 22px;
388
+ margin-bottom: 20px;
389
+ font-family: 'Microsoft YaHei';
390
+ }
391
+ .excram-last-name{
392
+ color: var(--primary);
393
+ }
394
+ .descrip-name{
395
+ font-size: 26px;
396
+ font-family: 'Microsoft YaHei';
397
+ }
398
+ .masthod-title-description{
399
+ font-family: 'Microsoft YaHei';
400
+ margin-top: 20px;
401
+ }
402
+ .actions-container{
403
+ /* display: flex; */
404
+ /* margin-left: 0px; */
243
405
  }
244
406
 
245
407
  .sub-header {
246
- grid-area: sub-header;
247
-
248
- a {
249
- display: inline-block;
408
+ font-size: 16px;
409
+ margin-left: 5px;
410
+ .btn {
411
+ text-align: left !important;
250
412
  }
251
413
  }
414
+
415
+ .actions-positioning {
416
+ position: absolute;
417
+ bottom: -48px;
418
+ z-index: 15;
419
+ }
252
420
  </style>
@@ -77,7 +77,7 @@ export default {
77
77
  <template>
78
78
  <div
79
79
  v-if="count && !haveAll"
80
- class="ml-10 resource-loading-indicator"
80
+ class="resource-loading-indicator"
81
81
  >
82
82
  <div class="inner">
83
83
  <div class="resource-loader">
@@ -118,10 +118,12 @@ export default {
118
118
  .resource-loader {
119
119
  padding: 1px 10px;
120
120
  width: max-content;
121
+ height: 20px;
121
122
 
122
123
  .rl-fg, .rl-bg {
123
- align-content: center;
124
124
  display: flex;
125
+ align-content: center;
126
+ font-size: 12px;
125
127
 
126
128
  > i {
127
129
  font-size: 18px;
@@ -129,6 +131,7 @@ export default {
129
131
  }
130
132
 
131
133
  > span {
134
+ margin-top: 2px;
132
135
  margin-left: 5px;
133
136
  }
134
137
  }
@@ -55,6 +55,12 @@ export default {
55
55
  ],
56
56
 
57
57
  props: {
58
+ searchPlaceholder: {
59
+ // search框内的输入提示
60
+ type: String,
61
+ default: '名称'
62
+ },
63
+
58
64
  schema: {
59
65
  type: Object,
60
66
  default: null,
@@ -258,6 +264,10 @@ export default {
258
264
  },
259
265
 
260
266
  computed: {
267
+ actionsWidth() {
268
+ return this.$store.getters['type-map/actionsWidth'] // 从 getter 里拿
269
+ },
270
+
261
271
  options() {
262
272
  return this.$store.getters[`type-map/optionsFor`](this.schema, this.externalPaginationEnabled);
263
273
  },
@@ -454,6 +464,11 @@ export default {
454
464
  const namespaceGroupable = this.$store.getters['isMultipleNamespaces'] && this.isNamespaced;
455
465
  const customGroupable = !!this.options?.listGroups?.length;
456
466
 
467
+ // sshkey去掉分组按钮
468
+ if(this.parsedPagingParams.singularLabel === 'SSH Key' || this.parsedPagingParams.singularLabel === '负载均衡器'){
469
+ return false
470
+ }
471
+
457
472
  return namespaceGroupable || customGroupable || this.groupOptions?.length;
458
473
  }
459
474
 
@@ -617,6 +632,7 @@ export default {
617
632
  :headers="_headers"
618
633
  :rows="filteredRows"
619
634
  :loading="loading"
635
+ :search-placeholder="searchPlaceholder"
620
636
  :alt-loading="altLoading"
621
637
  :group-by="computedGroupBy"
622
638
  :group="group"
@@ -646,6 +662,11 @@ export default {
646
662
  @group-value-change="group = $event"
647
663
  @enter="handleEnterKeyPress"
648
664
  >
665
+
666
+ <template #search-main-button>
667
+ <div :style="{ width: actionsWidth + 'px' }"></div>
668
+ </template>
669
+
649
670
  <template
650
671
  v-if="showGrouping && _groupOptions.length > 1"
651
672
  #header-middle
@@ -655,6 +676,7 @@ export default {
655
676
  <ButtonGroup
656
677
  v-model:value="group"
657
678
  :options="_groupOptions"
679
+ v-if="parsedPagingParams.singularLabel !== 'PCI设备'"
658
680
  />
659
681
  </template>
660
682
 
@@ -667,6 +689,22 @@ export default {
667
689
  />
668
690
  </template>
669
691
 
692
+ <template
693
+ v-if="showGrouping"
694
+ #header-button-left
695
+ >
696
+ <slot
697
+ name="header-button-left"
698
+ />
699
+ </template>
700
+
701
+ <template #banner>
702
+ <slot
703
+ name="banner"
704
+ />
705
+ </template>
706
+
707
+
670
708
  <template
671
709
  v-if="externalPaginationEnabled"
672
710
  #watch-controls
@@ -707,11 +745,11 @@ export default {
707
745
  class="hide"
708
746
  @shortkey="keyAction('edit')"
709
747
  />
710
- <button
748
+ <!-- <button
711
749
  v-shortkey.once="['y']"
712
750
  class="hide"
713
751
  @shortkey="keyAction('yaml')"
714
- />
752
+ /> -->
715
753
  <button
716
754
  v-if="_showBulkActions"
717
755
  v-shortkey.once="['del']"
@@ -20,6 +20,9 @@ import { TYPE_MODES } from '@shell/store/type-map';
20
20
  import { NAME as NAVLINKS } from '@shell/config/product/navlinks';
21
21
  import Group from '@shell/components/nav/Group';
22
22
  import LocaleSelector from '@shell/components/LocaleSelector';
23
+ import { cloud2harvesterhci, harvester2cloud } from '@shell/utils/router';
24
+ import { NORMAN } from '@shell/config/types';
25
+
23
26
 
24
27
  export default {
25
28
  name: 'SideNav',
@@ -112,10 +115,14 @@ export default {
112
115
 
113
116
  computed: {
114
117
  ...mapState(['managementReady', 'clusterReady']),
115
- ...mapGetters(['isStandaloneHarvester', 'productId', 'clusterId', 'currentProduct', 'rootProduct', 'isSingleProduct', 'namespaceMode', 'isExplorer', 'isVirtualCluster']),
118
+ ...mapGetters(['isStandaloneHarvester', 'productId', 'clusterId', 'currentProduct', 'rootProduct', 'currentCluster', 'isSingleProduct', 'namespaceMode', 'isExplorer', 'isVirtualCluster']),
116
119
  ...mapGetters({ locale: 'i18n/selectedLocaleLabel', hasMultipleLocales: 'i18n/hasMultipleLocales' }),
117
120
  ...mapGetters('type-map', ['activeProducts']),
118
121
 
122
+ principal() {
123
+ return this.$store.getters['rancher/byId'](NORMAN.PRINCIPAL, this.$store.getters['auth/principalId']) || {};
124
+ },
125
+
119
126
  favoriteTypes: mapPref(FAVORITE_TYPES),
120
127
 
121
128
  supportLink() {
@@ -184,6 +191,12 @@ export default {
184
191
  allNavLinksIds() {
185
192
  return this.allNavLinks.map((a) => a.id);
186
193
  },
194
+
195
+ prod() {
196
+ const name = this.rootProduct.name;
197
+
198
+ return this.$store.getters['i18n/withFallback'](`product."${ name }"`, null, ucFirst(name));
199
+ },
187
200
  },
188
201
 
189
202
  methods: {
@@ -231,9 +244,32 @@ export default {
231
244
 
232
245
  replaceWith(this.groups, ...sortBy(out, ['weight:desc', 'label']));
233
246
 
247
+
248
+ if (sessionStorage.getItem('TOPLEVELPERMISSIONS') !== 'superadmin') {
249
+ // 递归过滤函数(根据 label)
250
+ this.groups = this.filterMenus(this.groups);
251
+ }
252
+
253
+
234
254
  this.gettingGroups = false;
235
255
  },
236
256
 
257
+ filterMenus(menus) {
258
+ return menus.filter(item => item.name !== 'inUse' && item.name !== 'apps') // 过滤掉顶层 inUse 和 apps
259
+ // .map(item => {
260
+ // let newItem = { ...item };
261
+ // if (newItem.children) {
262
+ // // 过滤掉 children 里的 "资源大盘"
263
+ // newItem.children = newItem.children.filter(
264
+ // child => child.label !== '资源大盘'
265
+ // );
266
+ // // 递归处理剩下的 children
267
+ // newItem.children = filterMenus(newItem.children);
268
+ // }
269
+ // return newItem;
270
+ // });
271
+ },
272
+
237
273
  getProductsGroups(out, loadProducts, namespaceMode, productMap) {
238
274
  const clusterId = this.$store.getters['clusterId'];
239
275
  const currentType = this.$route.params.resource || '';
@@ -399,30 +435,37 @@ export default {
399
435
  role="navigation"
400
436
  :aria-label="t('nav.ariaLabel.sideNav')"
401
437
  >
438
+ <div class="side-all-title">
439
+ {{ (prod == 'Cloud' || prod == 'Harvester') && currentCluster ? '控制台' : prod }}
440
+ </div>
441
+
402
442
  <!-- Actual nav -->
403
443
  <div class="nav">
404
444
  <template
405
- v-for="(g) in groups"
406
- :key="g.name"
445
+ v-for="(g) in groups"
446
+ :key="g.name"
407
447
  >
408
- <Group
409
- ref="groups"
410
- id-prefix=""
411
- class="package"
412
- :group="g"
413
- :can-collapse="!g.isRoot"
414
- :show-header="!g.isRoot"
415
- @selected="groupSelected($event)"
416
- @expand="groupSelected($event)"
417
- />
448
+ <template v-if="principal.loginName && principal.loginName !== 'admin' && g.label === 'RBAC'">
449
+ </template>
450
+ <template v-else>
451
+ <Group
452
+ ref="groups"
453
+ id-prefix=""
454
+ class="package"
455
+ :group="g"
456
+ :can-collapse="!g.isRoot"
457
+ :show-header="!g.isRoot"
458
+ @selected="groupSelected($event)"
459
+ @expand="groupSelected($event)"
460
+ />
461
+ </template>
418
462
  </template>
419
463
  </div>
420
464
  <!-- SideNav footer area (seems to be tied to harvester) -->
421
- <div
465
+ <!-- <div
422
466
  v-if="showProductFooter"
423
467
  class="footer"
424
468
  >
425
- <!-- support link -->
426
469
  <router-link
427
470
  :to="supportLink"
428
471
  class="pull-right"
@@ -431,7 +474,6 @@ export default {
431
474
  >
432
475
  {{ t('nav.support', {hasSupport: true}) }}
433
476
  </router-link>
434
- <!-- version number -->
435
477
  <span
436
478
  v-clean-tooltip="{content: displayVersion, placement: 'top'}"
437
479
  class="clip version text-muted"
@@ -439,15 +481,14 @@ export default {
439
481
  {{ displayVersion }}
440
482
  </span>
441
483
 
442
- <!-- locale selector -->
443
484
  <LocaleSelector
444
485
  v-if="isSingleProduct && hasMultipleLocales && !isStandaloneHarvester"
445
486
  mode="login"
446
487
  :show-icon="false"
447
488
  />
448
- </div>
489
+ </div> -->
449
490
  <!-- SideNav footer alternative -->
450
- <div
491
+ <!-- <div
451
492
  v-else
452
493
  class="version text-muted flex"
453
494
  >
@@ -468,13 +509,14 @@ export default {
468
509
  (Harvester-{{ harvesterVersion }})
469
510
  </span>
470
511
  </template>
471
- </div>
512
+ </div> -->
472
513
  </nav>
473
514
  </template>
474
515
 
475
516
  <style lang="scss" scoped>
476
517
  .side-nav {
477
518
  display: flex;
519
+ z-index: 10;
478
520
  flex-direction: column;
479
521
  .nav {
480
522
  flex: 1;
@@ -494,6 +536,9 @@ export default {
494
536
 
495
537
  A { padding-left: 0; }
496
538
  }
539
+ :deep() A:not(.menuRouterLink){
540
+ height: 50px;
541
+ }
497
542
 
498
543
  .tools {
499
544
  display: flex;
@@ -569,4 +614,13 @@ export default {
569
614
  display: flex;
570
615
  }
571
616
 
617
+
618
+ .side-all-title{
619
+ height: 50px;
620
+ line-height: 50px;
621
+ font-size: 16px;
622
+ color: #7f7f7f;
623
+ padding-left: 21px;
624
+ font-weight: bold;
625
+ }
572
626
  </style>
@@ -148,7 +148,8 @@ export default {
148
148
  :to="clusterToolsLink"
149
149
  class="cluster-link"
150
150
  >
151
- {{ t('nav.clusterTools') }}
151
+ <!-- 禅道 3539 隐藏集群工具 -->
152
+ <!-- {{ t('nav.clusterTools') }} -->
152
153
  </router-link>
153
154
  </div>
154
155
  </div>