dashboard-shell-shell 3.0.2-test.20250913 → 3.0.5-logTest.2
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/brand/csp/favicon.png +0 -0
- package/assets/data/aws-regions.json +3 -0
- package/assets/icons/demo.css:Zone.Identifier +0 -0
- package/assets/icons/demo_index.html:Zone.Identifier +0 -0
- package/assets/icons/iconfont.css +4 -1
- package/assets/icons/iconfont.css:Zone.Identifier +0 -0
- package/assets/icons/iconfont.js:Zone.Identifier +0 -0
- package/assets/icons/iconfont.json:Zone.Identifier +0 -0
- package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
- package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
- package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
- package/assets/iconsNew/demo.css +539 -0
- package/assets/iconsNew/demo.css:Zone.Identifier +0 -0
- package/assets/iconsNew/demo_index.html +303 -0
- package/assets/iconsNew/demo_index.html:Zone.Identifier +0 -0
- package/assets/iconsNew/iconfont.css +43 -0
- package/assets/iconsNew/iconfont.css:Zone.Identifier +0 -0
- package/assets/iconsNew/iconfont.js +1 -0
- package/assets/iconsNew/iconfont.js:Zone.Identifier +0 -0
- package/assets/iconsNew/iconfont.json +44 -0
- package/assets/iconsNew/iconfont.json:Zone.Identifier +0 -0
- package/assets/iconsNew/iconfont.ttf +0 -0
- package/assets/iconsNew/iconfont.ttf:Zone.Identifier +0 -0
- package/assets/iconsNew/iconfont.woff +0 -0
- package/assets/iconsNew/iconfont.woff2 +0 -0
- package/assets/iconsNew/iconfont.woff2:Zone.Identifier +0 -0
- package/assets/iconsNew/iconfont.woff:Zone.Identifier +0 -0
- package/assets/images/icons/document.svg +3 -0
- package/assets/images/key.svg +17 -0
- package/assets/images/pl/dark/logo.png +0 -0
- package/assets/images/providers/sks.svg +1 -0
- package/assets/images/vendor/cognito.svg +1 -0
- package/assets/styles/all.scss +23 -3
- package/assets/styles/app.scss +4 -0
- package/assets/styles/base/_basic.scss +10 -0
- package/assets/styles/base/_helpers.scss +1 -1
- package/assets/styles/base/_spacing.scss +29 -0
- package/assets/styles/base/_variables.scss +21 -15
- package/assets/styles/fonts/_icons.scss +3 -2
- package/assets/styles/global/_button.scss +8 -8
- package/assets/styles/global/_form.scss +1 -0
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/global/_select.scss +1 -1
- package/assets/styles/global/_tooltip.scss +9 -5
- package/assets/styles/themes/_dark.scss +30 -0
- package/assets/styles/themes/_light.scss +85 -5
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +886 -105
- package/assets/translations/zh-hans.yaml +298 -25
- package/chart/__tests__/S3.test.ts +2 -1
- package/chart/monitoring/index.vue +1 -1
- package/cloud-credential/gcp.vue +9 -1
- package/components/ActionDropdown.vue +1 -1
- package/components/ActionMenuShell.vue +3 -7
- package/components/AppModal.vue +9 -28
- package/components/AsyncButton.vue +2 -0
- package/components/BrandImage.vue +0 -21
- package/components/ButtonDropdown.vue +3 -1
- package/components/Certificates.vue +5 -0
- package/components/ClusterIconMenu.vue +1 -1
- package/components/CodeMirror.vue +9 -7
- package/components/CommunityLinks.vue +3 -58
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/ConsumptionGauge.vue +1 -1
- package/components/ContainerResourceLimit.vue +2 -2
- package/components/CopyToClipboard.vue +15 -0
- package/components/CruResource.vue +106 -18
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +115 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +64 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +124 -0
- package/components/ExplorerMembers.vue +28 -4
- package/components/ExplorerProjectsNamespaces.vue +46 -29
- package/components/FilterPanel.vue +156 -0
- package/components/FixedBanner.vue +19 -5
- package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
- package/components/GlobalRoleBindings.vue +69 -114
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +19 -35
- package/components/KeyValueView.vue +1 -1
- package/components/LandingPagePreference.vue +2 -0
- package/components/Loading.vue +1 -1
- package/components/LocaleSelector.vue +10 -2
- package/components/PaginatedResourceTable.vue +53 -1
- package/components/PodSecurityAdmission.vue +2 -2
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +38 -7
- package/components/PromptRemove.vue +28 -2
- package/components/PromptRestore.vue +22 -44
- package/components/RelatedResources.vue +7 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
- package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
- package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
- package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
- package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
- package/components/Resource/Detail/Card/Scaler.vue +89 -0
- package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
- package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
- package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
- package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
- package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
- package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
- package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
- package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
- package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
- package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
- package/components/Resource/Detail/Card/index.vue +56 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
- package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
- package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +72 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +138 -0
- package/components/Resource/Detail/Metadata/KeyValue.vue +144 -0
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
- package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
- package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
- package/components/Resource/Detail/Metadata/Rectangle.vue +34 -0
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
- package/components/Resource/Detail/Metadata/composables.ts +81 -0
- package/components/Resource/Detail/Metadata/index.vue +90 -0
- package/components/Resource/Detail/Page.vue +37 -0
- package/components/Resource/Detail/PercentageBar.vue +40 -0
- package/components/Resource/Detail/ResourceRow.vue +138 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/SpacedRow.vue +14 -0
- package/components/Resource/Detail/StatusBar.vue +59 -0
- package/components/Resource/Detail/StatusRow.vue +61 -0
- package/components/Resource/Detail/TitleBar/Title.vue +15 -0
- package/components/Resource/Detail/TitleBar/Top.vue +16 -0
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
- package/components/Resource/Detail/TitleBar/composables.ts +61 -0
- package/components/Resource/Detail/TitleBar/index.vue +302 -0
- package/components/Resource/Detail/Top/index.vue +34 -0
- package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +240 -169
- package/components/ResourceDetail/__tests__/index.test.ts +135 -0
- package/components/ResourceDetail/index.vue +75 -575
- package/components/ResourceDetail/legacy.vue +580 -0
- package/components/ResourceList/Masthead.vue +74 -29
- package/components/ResourceList/index.vue +3 -2
- package/components/ResourceTable.vue +75 -85
- package/components/ResourceYaml.vue +15 -2
- package/components/RichTranslation.vue +106 -0
- package/components/SideNav.vue +21 -21
- package/components/SingleClusterInfo.vue +2 -1
- package/components/SlideInPanelManager.vue +116 -14
- package/components/SortableTable/THead.vue +46 -1
- package/components/SortableTable/index.vue +66 -22
- package/components/SortableTable/paging.js +15 -16
- package/components/SortableTable/selection.js +22 -10
- package/components/StateDot/index.vue +28 -0
- package/components/StatusBadge.vue +6 -4
- package/components/SubtleLink.vue +25 -0
- package/components/Tabbed/index.vue +43 -22
- package/components/Wizard.vue +16 -3
- package/components/YamlEditor.vue +1 -2
- package/components/__tests__/AsyncButton.test.ts +39 -0
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/CruResource.test.ts +63 -0
- package/components/__tests__/FilterPanel.test.ts +81 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/__tests__/PromptModal.test.ts +146 -0
- package/components/__tests__/PromptRestore.test.ts +1 -65
- package/components/__tests__/RichTranslation.test.ts +115 -0
- package/components/auth/AuthBanner.vue +15 -14
- package/components/auth/Principal.vue +50 -19
- package/components/auth/RoleDetailEdit.vue +55 -11
- package/components/auth/login/ldap.vue +2 -2
- package/components/auth/login/oidc.vue +6 -1
- package/components/breadcrumb/index.vue +119 -0
- package/components/fleet/FleetApplications.vue +174 -0
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +123 -0
- package/components/fleet/FleetIntro.vue +58 -28
- package/components/fleet/FleetNoWorkspaces.vue +5 -1
- package/components/fleet/FleetOCIStorageSecret.vue +171 -0
- package/components/fleet/FleetRepos.vue +37 -80
- package/components/fleet/FleetResources.vue +69 -27
- package/components/fleet/FleetSummary.vue +26 -51
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
- package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/Empty.vue +73 -0
- package/components/fleet/dashboard/ResourceCard.vue +184 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
- package/components/fleet/dashboard/ResourceDetails.vue +194 -0
- package/components/fleet/dashboard/ResourcePanel.vue +384 -0
- package/components/form/ArrayList.vue +187 -142
- package/components/form/ArrayListGrouped.vue +5 -3
- package/components/form/BannerSettings.vue +117 -50
- package/components/form/ChangePassword.vue +4 -2
- package/components/form/ClusterAppearance.vue +4 -3
- package/components/form/ColorInput.vue +35 -6
- package/components/form/Command.vue +4 -5
- package/components/form/Conditions.vue +15 -1
- package/components/form/FileImageSelector.vue +1 -1
- package/components/form/Footer.vue +11 -4
- package/components/form/HealthCheck.vue +0 -2
- package/components/form/HookOption.vue +87 -58
- package/components/form/InputWithSelect.vue +8 -7
- package/components/form/KeyValue.vue +112 -53
- package/components/form/LabeledSelect.vue +76 -55
- package/components/form/Labels.vue +92 -22
- package/components/form/MatchExpressions.vue +59 -12
- package/components/form/Members/ClusterMembershipEditor.vue +1 -1
- package/components/form/Members/ClusterPermissionsEditor.vue +60 -41
- package/components/form/Members/MembershipEditor.vue +4 -4
- package/components/form/Members/ProjectMembershipEditor.vue +1 -1
- package/components/form/NameNsDescription.vue +15 -10
- package/components/form/Networking.vue +30 -28
- package/components/form/NodeAffinity.vue +29 -28
- package/components/form/NotificationSettings.vue +15 -1
- package/components/form/PodAffinity.vue +23 -23
- package/components/form/Probe.vue +15 -11
- package/components/form/ProjectMemberEditor.vue +66 -48
- package/components/form/ResourceLabeledSelect.vue +22 -8
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
- package/components/form/ResourceQuota/Project.vue +4 -4
- package/components/form/ResourceQuota/ProjectRow.vue +36 -30
- package/components/form/ResourceSelector.vue +28 -24
- package/components/form/ResourceTabs/index.vue +7 -1
- package/components/form/SSHKnownHosts/index.vue +14 -11
- package/components/form/SecretSelector.vue +40 -23
- package/components/form/Security.vue +1 -3
- package/components/form/Select.vue +64 -27
- package/components/form/SelectOrCreateAuthSecret.vue +6 -3
- package/components/form/ServiceNameSelect.vue +2 -5
- package/components/form/ServicePorts.vue +149 -75
- package/components/form/SimpleSecretSelector.vue +17 -4
- package/components/form/Taints.vue +23 -3
- package/components/form/Tolerations.vue +13 -9
- package/components/form/UnitInput.vue +21 -0
- package/components/form/ValueFromResource.vue +136 -110
- package/components/form/WorkloadPorts.vue +143 -123
- package/components/form/__tests__/ArrayList.test.ts +32 -0
- package/components/form/__tests__/ColorInput.test.ts +35 -0
- package/components/form/__tests__/KeyValue.test.ts +36 -0
- package/components/form/__tests__/LabeledSelect.test.ts +79 -2
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Networking.test.ts +116 -0
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
- package/components/form/__tests__/Select.test.ts +37 -1
- package/components/form/__tests__/UnitInput.test.ts +23 -1
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
- package/components/formatter/ClusterLink.vue +5 -8
- package/components/formatter/Description.vue +30 -0
- package/components/formatter/FleetApplicationClustersReady.vue +77 -0
- package/components/formatter/FleetApplicationSource.vue +79 -0
- package/components/formatter/FleetSummaryGraph.vue +7 -0
- package/components/formatter/PodImages.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +5 -4
- package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
- package/components/formatter/__tests__/LiveDate.test.ts +10 -2
- package/components/google/AccountAccess.vue +209 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +13 -1
- package/components/nav/Header.vue +44 -179
- package/components/nav/NamespaceFilter.vue +126 -75
- package/components/nav/NotificationCenter/Notification.vue +484 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/components/nav/TopLevelMenu.helper.ts +55 -34
- package/components/nav/TopLevelMenu.vue +110 -125
- package/components/nav/Type.vue +15 -4
- package/components/nav/WindowManager/ContainerLogs.vue +87 -61
- package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
- package/components/nav/WindowManager/index.vue +3 -2
- package/components/templates/default.vue +0 -3
- package/components/templates/plain.vue +0 -3
- package/composables/drawer.ts +26 -0
- package/composables/focusTrap.ts +3 -3
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useI18n.ts +12 -11
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +22 -11
- package/config/menuRouteMap.js +10 -0
- package/config/pagination-table-headers.js +8 -1
- package/config/private-label.js +0 -1
- package/config/product/auth.js +20 -3
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +80 -26
- package/config/product/fleet.js +77 -17
- package/config/product/manager.js +29 -46
- package/config/product/settings.js +23 -11
- package/config/product/uiplugins.js +13 -10
- package/config/query-params.js +16 -1
- package/config/roles.ts +2 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/navigation-guards/index.js +16 -20
- package/config/router/routes.js +65 -31
- package/config/secret.ts +15 -0
- package/config/settings.ts +33 -16
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +91 -30
- package/config/types.js +18 -7
- package/config/version.js +1 -1
- package/core/plugin-helpers.ts +3 -2
- package/core/plugin.ts +32 -7
- package/core/types.ts +25 -7
- package/detail/catalog.cattle.io.app.vue +5 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/fleet.cattle.io.bundle.vue +70 -6
- package/detail/fleet.cattle.io.cluster.vue +28 -15
- package/detail/fleet.cattle.io.gitrepo.vue +11 -2
- package/detail/fleet.cattle.io.helmop.vue +157 -0
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/namespace.vue +0 -3
- package/detail/node.vue +48 -39
- package/detail/pod.vue +2 -2
- package/detail/provisioning.cattle.io.cluster.vue +16 -50
- package/detail/service.vue +10 -2
- package/detail/workload/index.vue +48 -39
- package/dialog/AddCustomBadgeDialog.vue +17 -10
- package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
- package/dialog/AddonConfigConfirmationDialog.vue +1 -1
- package/dialog/AssignToDialog.vue +176 -0
- package/dialog/ChangePasswordDialog.vue +106 -0
- package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
- package/dialog/DisableAuthProviderDialog.vue +101 -0
- package/dialog/DrainNode.vue +1 -1
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +87 -66
- package/dialog/FeatureFlagListDialog.vue +288 -0
- package/dialog/ForceMachineRemoveDialog.vue +1 -1
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/HelmOpForceUpdateDialog.vue +132 -0
- package/{components/Import.vue → dialog/ImportDialog.vue} +8 -13
- package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
- package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
- package/dialog/MoveNamespaceDialog.vue +157 -0
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/dialog/RedeployWorkloadDialog.vue +164 -0
- package/dialog/RollbackWorkloadDialog.vue +1 -1
- package/dialog/RotateEncryptionKeyDialog.vue +10 -30
- package/dialog/ScalePoolDownDialog.vue +1 -1
- package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
- package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
- package/dialog/WechatDialog.vue +57 -0
- package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +15 -34
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
- package/edit/__tests__/service.test.ts +2 -1
- package/edit/auth/ldap/__tests__/config.test.ts +14 -0
- package/edit/auth/ldap/config.vue +24 -0
- package/edit/auth/oidc.vue +159 -93
- package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +7 -2
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
- package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
- package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
- package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +12 -2
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +70 -256
- package/edit/fleet.cattle.io.helmop.vue +786 -0
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +2 -2
- package/edit/logging.banzaicloud.io.output/index.vue +2 -1
- package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +8 -9
- package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +19 -19
- package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +23 -23
- package/edit/logging.banzaicloud.io.output/providers/datadog.vue +19 -19
- package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +14 -14
- package/edit/logging.banzaicloud.io.output/providers/forward.vue +12 -12
- package/edit/logging.banzaicloud.io.output/providers/gcs.vue +23 -23
- package/edit/logging.banzaicloud.io.output/providers/gelf.vue +6 -6
- package/edit/logging.banzaicloud.io.output/providers/kafka.vue +10 -10
- package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +8 -8
- package/edit/logging.banzaicloud.io.output/providers/logdna.vue +17 -17
- package/edit/logging.banzaicloud.io.output/providers/logz.vue +7 -7
- package/edit/logging.banzaicloud.io.output/providers/loki.vue +12 -12
- package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +3 -3
- package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +14 -14
- package/edit/logging.banzaicloud.io.output/providers/redis.vue +6 -6
- package/edit/logging.banzaicloud.io.output/providers/s3.vue +23 -23
- package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +13 -13
- package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +2 -2
- package/edit/logging.banzaicloud.io.output/providers/syslog.vue +54 -54
- package/edit/management.cattle.io.fleetworkspace.vue +44 -10
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +3 -3
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +2 -4
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/Certificate.vue +25 -8
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
- package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
- package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
- package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +37 -0
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +6 -17
- package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +69 -73
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +10 -16
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +24 -32
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +7 -2
- package/edit/persistentvolumeclaim.vue +2 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +69 -2
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
- package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
- package/edit/provisioning.cattle.io.cluster/rke2.vue +535 -428
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +49 -40
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/basic.vue +1 -0
- package/edit/secret/index.vue +129 -17
- package/edit/service.vue +21 -30
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +14 -9
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
- package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
- package/edit/workload/Job.vue +31 -34
- package/edit/workload/Upgrading.vue +5 -5
- package/edit/workload/index.vue +32 -32
- package/edit/workload/mixins/workload.js +0 -2
- package/edit/workload/storage/Mount.vue +1 -0
- package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
- package/edit/workload/storage/azureDisk.vue +14 -10
- package/edit/workload/storage/azureFile.vue +9 -7
- package/edit/workload/storage/csi/index.vue +6 -9
- package/edit/workload/storage/emptyDir.vue +7 -5
- package/edit/workload/storage/gcePersistentDisk.vue +9 -7
- package/edit/workload/storage/hostPath.vue +7 -5
- package/edit/workload/storage/nfs.vue +8 -6
- package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
- package/edit/workload/storage/secret.vue +9 -6
- package/edit/workload/storage/vsphereVolume.vue +11 -7
- package/initialize/app-extended.js +7 -1
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/fleet.cattle.io.gitrepo.vue +1 -1
- package/list/fleet.cattle.io.helmop.vue +108 -0
- package/list/harvesterhci.io.management.cluster.vue +0 -17
- package/list/management.cattle.io.feature.vue +4 -288
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
- package/list/management.cattle.io.user.vue +13 -20
- package/list/namespace.vue +6 -2
- package/list/node.vue +2 -0
- package/list/projectsecret.vue +345 -0
- package/list/secret.vue +109 -0
- package/list/workload.vue +6 -2
- package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/machine-config/vmwarevsphere.vue +7 -17
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/auth-config.js +8 -1
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/impl.js +20 -1
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/preset.js +100 -0
- package/mixins/resource-fetch-api-pagination.js +73 -44
- package/mixins/resource-fetch.js +18 -8
- package/mixins/resource-table-watch.js +45 -0
- package/mixins/vue-select-overrides.js +1 -4
- package/models/__tests__/chart.test.ts +296 -0
- package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
- package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
- package/models/__tests__/node.test.ts +7 -63
- package/models/__tests__/workload.test.ts +1 -0
- package/models/chart.js +157 -2
- package/models/cluster/node.js +2 -1
- package/models/cluster.js +32 -2
- package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +297 -0
- package/models/fleet.cattle.io.bundle.js +9 -8
- package/models/fleet.cattle.io.cluster.js +21 -4
- package/models/fleet.cattle.io.gitrepo.js +46 -382
- package/models/fleet.cattle.io.helmop.js +202 -0
- package/models/management.cattle.io.authconfig.js +1 -0
- package/models/management.cattle.io.cluster.js +0 -20
- package/models/management.cattle.io.feature.js +7 -1
- package/models/management.cattle.io.fleetworkspace.js +14 -1
- package/models/management.cattle.io.node.js +7 -22
- package/models/management.cattle.io.nodepool.js +12 -0
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/management.cattle.io.setting.js +0 -1
- package/models/namespace.js +12 -1
- package/models/provisioning.cattle.io.cluster.js +79 -115
- package/models/secret.js +157 -2
- package/models/service.js +28 -9
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +93 -53
- package/package.json +6 -5
- package/pages/about.vue +17 -61
- package/pages/account/index.vue +105 -116
- package/pages/auth/login.vue +2 -3
- package/pages/auth/setup.vue +36 -17
- package/pages/auth/verify.vue +13 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
- package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
- package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +57 -0
- package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
- package/pages/c/_cluster/apps/charts/index.vue +501 -468
- package/pages/c/_cluster/apps/charts/install.vue +0 -1
- package/pages/c/_cluster/auth/roles/index.vue +72 -44
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
- package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +16 -4
- package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
- package/pages/c/_cluster/explorer/tools/index.vue +6 -6
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/__tests__/index.test.ts +720 -0
- package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
- package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
- package/pages/c/_cluster/fleet/application/create.vue +341 -0
- package/pages/c/_cluster/fleet/application/index.vue +139 -0
- package/pages/c/_cluster/fleet/graph/config.js +277 -0
- package/pages/c/_cluster/fleet/index.vue +866 -328
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/settings/banners.vue +56 -2
- package/pages/c/_cluster/settings/brand.vue +2 -1
- package/pages/c/_cluster/settings/performance.vue +7 -26
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
- package/pages/c/_cluster/uiplugins/index.vue +98 -55
- package/pages/explorer/resource/detail/configmap.vue +42 -0
- package/pages/explorer/resource/detail/projectsecret.vue +9 -0
- package/pages/explorer/resource/detail/secret.vue +63 -0
- package/pages/home.vue +63 -117
- package/pages/prefs.vue +0 -1
- package/pages/support/index.vue +4 -6
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/clean-html.js +2 -0
- package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
- package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
- package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
- package/plugins/dashboard-store/actions.js +213 -56
- package/plugins/dashboard-store/getters.js +112 -24
- package/plugins/dashboard-store/mutations.js +61 -12
- package/plugins/dashboard-store/normalize.js +29 -19
- package/plugins/dashboard-store/resource-class.js +105 -21
- package/plugins/steve/__tests__/getters.test.ts +19 -12
- package/plugins/steve/__tests__/steve-class.test.ts +1 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +324 -1
- package/plugins/steve/actions.js +37 -24
- package/plugins/steve/getters.js +47 -12
- package/plugins/steve/resourceWatcher.js +10 -3
- package/plugins/steve/steve-class.js +5 -0
- package/plugins/steve/steve-pagination-utils.ts +225 -43
- package/plugins/steve/subscribe.js +418 -53
- package/plugins/steve/worker/web-worker.advanced.js +5 -1
- package/public/favicon.png +0 -0
- package/public/index.html +1 -1
- package/rancher-components/BadgeState/BadgeState.vue +33 -52
- package/rancher-components/Banner/Banner.test.ts +51 -3
- package/rancher-components/Banner/Banner.vue +53 -10
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -9
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +21 -3
- package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
- package/rancher-components/Form/Radio/RadioButton.vue +21 -5
- package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +90 -39
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +4 -0
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +22 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +32 -2
- package/rancher-components/RcButton/RcButton.vue +1 -1
- package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
- package/rancher-components/RcDropdown/RcDropdown.vue +6 -0
- package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -55
- package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +69 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +93 -0
- package/rancher-components/RcDropdown/index.ts +2 -0
- package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
- package/rancher-components/RcDropdown/useDropdownItem.ts +92 -0
- package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
- package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
- package/rancher-components/RcItemCard/index.ts +2 -0
- package/rancher-components/StringList/StringList.vue +1 -1
- package/scripts/build-pkg.sh +18 -23
- package/scripts/extension/publish +1 -1
- package/scripts/publish-shell.sh +1 -1
- package/static/loading-indicator.html +1 -1
- package/store/action-menu.js +26 -56
- package/store/auth.js +3 -0
- package/store/catalog.js +85 -25
- package/store/features.js +0 -1
- package/store/growl.js +97 -8
- package/store/i18n.js +5 -1
- package/store/index.js +48 -18
- package/store/notifications.ts +426 -0
- package/store/prefs.js +2 -8
- package/store/slideInPanel.ts +6 -0
- package/store/type-map.js +35 -20
- package/store/type-map.utils.ts +49 -6
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +60 -1
- package/types/kube/kube-api.ts +34 -0
- package/types/notifications/index.ts +74 -0
- package/types/resources/fleet.d.ts +43 -0
- package/types/resources/pod-security-admission.ts +36 -0
- package/types/resources/settings.d.ts +107 -0
- package/types/resources/userPreferences.d.ts +13 -0
- package/types/shell/index.d.ts +949 -741
- package/types/store/dashboard-store.types.ts +57 -4
- package/types/store/pagination.types.ts +41 -9
- package/types/store/subscribe.types.ts +50 -0
- package/utils/__mocks__/tabbable.js +13 -0
- package/utils/__tests__/back-off.test.ts +354 -0
- package/utils/__tests__/create-yaml.test.ts +235 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/kontainer.test.ts +19 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +41 -6
- package/utils/back-off.ts +176 -0
- package/utils/cluster.js +24 -20
- package/utils/create-yaml.js +103 -9
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/error.js +26 -9
- package/utils/errorTranslate.json +410 -6
- package/utils/errorTranslateNew.json +39 -0
- package/utils/fleet-types.ts +0 -0
- package/utils/fleet.ts +204 -74
- package/utils/grafana.js +1 -0
- package/utils/kontainer.ts +3 -5
- package/utils/object.js +36 -12
- package/utils/pagination-utils.ts +50 -3
- package/utils/pagination-wrapper.ts +132 -50
- package/utils/perf-setting.utils.ts +28 -0
- package/utils/release-notes.ts +48 -0
- package/utils/roleFiltering.js +33 -0
- package/utils/selector-typed.ts +210 -0
- package/utils/selector.js +29 -6
- package/utils/settings.ts +4 -1
- package/utils/string.js +24 -0
- package/utils/style.ts +39 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +41 -8
- package/utils/v-sphere.ts +5 -1
- package/utils/validators/formRules/__tests__/index.test.ts +76 -6
- package/utils/validators/formRules/index.ts +99 -4
- package/utils/window.js +11 -7
- package/vue.config.js +1 -1
- package/.DS_Store +0 -0
- package/components/AssignTo.vue +0 -199
- package/components/DisableAuthProviderModal.vue +0 -115
- package/components/MoveModal.vue +0 -167
- package/components/PromptChangePassword.vue +0 -123
- package/components/ResourceList/Masthead-btn.vue +0 -225
- package/components/__tests__/ApplicationCard.test.ts +0 -27
- package/components/cards/ApplicationCard.vue +0 -145
- package/components/fleet/FleetBundleResources.vue +0 -86
- package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
- package/components/formatter/RKETemplateName.vue +0 -37
- package/config/product/legacy.js +0 -62
- package/config/secret.js +0 -14
- package/dialog/SaveAsRKETemplateDialog.vue +0 -139
- package/models/etcdbackup.js +0 -45
- package/pages/auth copy/login.vue +0 -595
- package/pages/auth copy/logout.vue +0 -47
- package/pages/auth copy/setup.vue +0 -523
- package/pages/auth copy/verify.vue +0 -203
- package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
package/components/SideNav.vue
CHANGED
|
@@ -244,31 +244,31 @@ export default {
|
|
|
244
244
|
|
|
245
245
|
replaceWith(this.groups, ...sortBy(out, ['weight:desc', 'label']));
|
|
246
246
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
247
|
+
|
|
248
|
+
if (sessionStorage.getItem('TOPLEVELPERMISSIONS') !== 'superadmin') {
|
|
249
|
+
// 递归过滤函数(根据 label)
|
|
250
|
+
this.groups = this.filterMenus(this.groups);
|
|
251
|
+
}
|
|
251
252
|
|
|
252
253
|
|
|
253
254
|
this.gettingGroups = false;
|
|
254
255
|
},
|
|
255
256
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
// },
|
|
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
272
|
|
|
273
273
|
getProductsGroups(out, loadProducts, namespaceMode, productMap) {
|
|
274
274
|
const clusterId = this.$store.getters['clusterId'];
|
|
@@ -436,7 +436,7 @@ export default {
|
|
|
436
436
|
:aria-label="t('nav.ariaLabel.sideNav')"
|
|
437
437
|
>
|
|
438
438
|
<div class="side-all-title">
|
|
439
|
-
{{ prod == 'Cloud' && currentCluster ? '控制台' : prod }}
|
|
439
|
+
{{ (prod == 'Cloud' || prod == 'Harvester') && currentCluster ? '控制台' : prod }}
|
|
440
440
|
</div>
|
|
441
441
|
|
|
442
442
|
<!-- Actual nav -->
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { computed } from 'vue';
|
|
2
|
+
import { computed, onBeforeUnmount, watch } from 'vue';
|
|
3
3
|
import { useStore } from 'vuex';
|
|
4
|
+
import {
|
|
5
|
+
DEFAULT_FOCUS_TRAP_OPTS,
|
|
6
|
+
useWatcherBasedSetupFocusTrapWithDestroyIncluded
|
|
7
|
+
} from '@shell/composables/focusTrap';
|
|
8
|
+
import { isEqual } from 'lodash';
|
|
9
|
+
import { useRouter } from 'vue-router';
|
|
4
10
|
|
|
5
11
|
const HEADER_HEIGHT = 55;
|
|
6
12
|
|
|
7
13
|
const store = useStore();
|
|
8
14
|
const isOpen = computed(() => store.getters['slideInPanel/isOpen']);
|
|
15
|
+
const isClosing = computed(() => store.getters['slideInPanel/isClosing']);
|
|
9
16
|
const currentComponent = computed(() => store.getters['slideInPanel/component']);
|
|
10
17
|
const currentProps = computed(() => store.getters['slideInPanel/componentProps']);
|
|
11
18
|
|
|
12
19
|
const panelTop = computed(() => {
|
|
20
|
+
// Some components like the ResourceDetailDrawer are designed to take up the full height of the viewport so we want to be able to specify the top.
|
|
21
|
+
if (currentProps?.value?.top) {
|
|
22
|
+
return currentProps?.value?.top;
|
|
23
|
+
}
|
|
24
|
+
|
|
13
25
|
const banner = document.getElementById('banner-header');
|
|
14
26
|
let height = HEADER_HEIGHT;
|
|
15
27
|
|
|
@@ -20,11 +32,92 @@ const panelTop = computed(() => {
|
|
|
20
32
|
return `${ height }px`;
|
|
21
33
|
});
|
|
22
34
|
|
|
23
|
-
|
|
35
|
+
// Some components like the ResourceDetailDrawer are designed to take up the full height of the viewport so we want to be able to specify the height.
|
|
36
|
+
const panelHeight = computed(() => (currentProps?.value?.height) ? (currentProps?.value?.height) : `calc(100vh - ${ panelTop?.value })`);
|
|
24
37
|
const panelWidth = computed(() => currentProps?.value?.width || '33%');
|
|
25
38
|
const panelRight = computed(() => (isOpen?.value ? '0' : `-${ panelWidth?.value }`));
|
|
26
39
|
|
|
27
|
-
const
|
|
40
|
+
const showHeader = computed(() => currentProps?.value?.showHeader ?? true);
|
|
41
|
+
const panelTitle = showHeader.value ? computed(() => currentProps?.value?.title || 'Details') : null;
|
|
42
|
+
const closeOnRouteChange = computed(() => {
|
|
43
|
+
const propsCloseOnRouteChange = currentProps?.value.closeOnRouteChange;
|
|
44
|
+
|
|
45
|
+
if (!propsCloseOnRouteChange) {
|
|
46
|
+
return ['name', 'params', 'hash', 'query'];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return propsCloseOnRouteChange;
|
|
50
|
+
});
|
|
51
|
+
const router = useRouter();
|
|
52
|
+
|
|
53
|
+
watch(
|
|
54
|
+
/**
|
|
55
|
+
* trigger focus trap
|
|
56
|
+
*/
|
|
57
|
+
() => currentProps?.value?.triggerFocusTrap,
|
|
58
|
+
(neu) => {
|
|
59
|
+
if (neu) {
|
|
60
|
+
const opts = {
|
|
61
|
+
...DEFAULT_FOCUS_TRAP_OPTS,
|
|
62
|
+
/**
|
|
63
|
+
* will return focus to the first iterable node of this container select
|
|
64
|
+
*/
|
|
65
|
+
setReturnFocus: () => {
|
|
66
|
+
const returnFocusSelector = currentProps?.value?.returnFocusSelector;
|
|
67
|
+
|
|
68
|
+
if (returnFocusSelector && !document.querySelector(returnFocusSelector)) {
|
|
69
|
+
console.warn('SlideInPanelManager: cannot find elem with "returnFocusSelector", returning focus to main view'); // eslint-disable-line no-console
|
|
70
|
+
|
|
71
|
+
return '.dashboard-root';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return returnFocusSelector || '.dashboard-root';
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
useWatcherBasedSetupFocusTrapWithDestroyIncluded(
|
|
79
|
+
() => {
|
|
80
|
+
if (currentProps?.value?.focusTrapWatcherBasedVariable) {
|
|
81
|
+
return currentProps.value.focusTrapWatcherBasedVariable;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return isOpen?.value && !isClosing?.value;
|
|
85
|
+
},
|
|
86
|
+
'#slide-in-panel-manager',
|
|
87
|
+
opts,
|
|
88
|
+
false
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
watch(
|
|
95
|
+
() => router?.currentRoute?.value,
|
|
96
|
+
(newValue, oldValue) => {
|
|
97
|
+
if (!isOpen?.value) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (closeOnRouteChange.value.includes('name') && !isEqual(newValue?.name, oldValue?.name)) {
|
|
102
|
+
closePanel();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (closeOnRouteChange.value.includes('params') && !isEqual(newValue?.params, oldValue?.params)) {
|
|
106
|
+
closePanel();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (closeOnRouteChange.value.includes('hash') && !isEqual(newValue?.hash, oldValue?.hash)) {
|
|
110
|
+
closePanel();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (closeOnRouteChange.value.includes('query') && !isEqual(newValue?.query, oldValue?.query)) {
|
|
114
|
+
closePanel();
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
{ deep: true }
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
onBeforeUnmount(closePanel);
|
|
28
121
|
|
|
29
122
|
function closePanel() {
|
|
30
123
|
store.commit('slideInPanel/close');
|
|
@@ -33,7 +126,10 @@ function closePanel() {
|
|
|
33
126
|
|
|
34
127
|
<template>
|
|
35
128
|
<Teleport to="#slides">
|
|
36
|
-
<div
|
|
129
|
+
<div
|
|
130
|
+
id="slide-in-panel-manager"
|
|
131
|
+
@keydown.escape="closePanel"
|
|
132
|
+
>
|
|
37
133
|
<div
|
|
38
134
|
v-show="isOpen"
|
|
39
135
|
data-testid="slide-in-glass"
|
|
@@ -41,20 +137,27 @@ function closePanel() {
|
|
|
41
137
|
:class="{ 'slide-in-glass-open': isOpen }"
|
|
42
138
|
@click="closePanel"
|
|
43
139
|
/>
|
|
44
|
-
<
|
|
140
|
+
<aside
|
|
45
141
|
class="slide-in"
|
|
46
142
|
:class="{ 'slide-in-open': isOpen }"
|
|
47
|
-
:style="{
|
|
143
|
+
:style="{
|
|
144
|
+
width: panelWidth,
|
|
145
|
+
right: panelRight,
|
|
146
|
+
top: panelTop,
|
|
147
|
+
height: panelHeight,
|
|
148
|
+
}"
|
|
48
149
|
>
|
|
49
|
-
<div
|
|
150
|
+
<div
|
|
151
|
+
v-if="showHeader"
|
|
152
|
+
class="header"
|
|
153
|
+
>
|
|
50
154
|
<div class="title">
|
|
51
155
|
{{ panelTitle }}
|
|
52
156
|
</div>
|
|
53
157
|
<i
|
|
54
158
|
class="icon icon-close"
|
|
55
159
|
data-testid="slide-in-close"
|
|
56
|
-
:
|
|
57
|
-
tabindex="0"
|
|
160
|
+
:tabindex="isOpen ? 0 : -1"
|
|
58
161
|
@click="closePanel"
|
|
59
162
|
/>
|
|
60
163
|
</div>
|
|
@@ -67,7 +170,7 @@ function closePanel() {
|
|
|
67
170
|
class="dynamic-panel-content"
|
|
68
171
|
/>
|
|
69
172
|
</div>
|
|
70
|
-
</
|
|
173
|
+
</aside>
|
|
71
174
|
</div>
|
|
72
175
|
</Teleport>
|
|
73
176
|
</template>
|
|
@@ -80,12 +183,11 @@ function closePanel() {
|
|
|
80
183
|
left: 0;
|
|
81
184
|
height: 100vh;
|
|
82
185
|
width: 100vw;
|
|
186
|
+
z-index: z-index('slide-in');
|
|
83
187
|
}
|
|
84
188
|
.slide-in-glass-open {
|
|
85
|
-
background
|
|
189
|
+
background: var(--overlay-bg);
|
|
86
190
|
display: block;
|
|
87
|
-
opacity: 0.5;
|
|
88
|
-
z-index: 1000;
|
|
89
191
|
}
|
|
90
192
|
|
|
91
193
|
.slide-in {
|
|
@@ -93,10 +195,10 @@ function closePanel() {
|
|
|
93
195
|
flex-direction: column;
|
|
94
196
|
position: fixed;
|
|
95
197
|
top: 0;
|
|
96
|
-
z-index: 2000;
|
|
97
198
|
transition: right 0.5s ease;
|
|
98
199
|
border-left: 1px solid var(--border);
|
|
99
200
|
background-color: var(--body-bg);
|
|
201
|
+
z-index: calc(z-index('slide-in') + 1);
|
|
100
202
|
}
|
|
101
203
|
|
|
102
204
|
.slide-in-open {
|
|
@@ -208,9 +208,54 @@ export default {
|
|
|
208
208
|
return null;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
+
// 创建英文到中文的映射
|
|
212
|
+
const tooltipMap = {
|
|
213
|
+
'The minimum number of pods that must be available': '必须可用的 Pod 最小数量',
|
|
214
|
+
'The maximum number of pods that may be unavailable': '允许不可用的 Pod 最大数量',
|
|
215
|
+
'Calculated number of pods that may be disrupted at this time': '当前允许中断的 Pod 数量',
|
|
216
|
+
'Request represents a minimum amount of cpu/memory that a container may consume': 'Request 表示容器必须保证的最小 CPU/内存资源量',
|
|
217
|
+
'Limits control the maximum amount of cpu/memory that a container may use independent of contention on the node': 'Limits 控制容器可使用的 CPU/内存最大资源量,该限制与节点上的资源竞争情况无关',
|
|
218
|
+
'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object': '如果引用对象的一部分而不是整个对象,则此字符串应包含有效的JSON/Go字段访问语句,例如desiredState.manifest.containers[2]。例如,如果对象引用指向pod中的一个容器,则其值为:“spec.containers{name}”(其中“name”表示触发事件的容器的名称),或者如果没有指定容器名称,则为“spec.containers[2]”(此pod中索引为2的容器)。选择此语法只是为了有一些定义良好的方式来引用对象的一部分',
|
|
219
|
+
'The number of times this event has occurred': '此事件发生的次数',
|
|
220
|
+
'The component reporting this event. Should be a short machine understandable string': '用于报告此事件的组件名称,应为简短且可被程序识别的字符串',
|
|
221
|
+
'The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)': '事件首次被记录的时间。(服务器接收时间为TypeMeta。)',
|
|
222
|
+
'Information when was the last time the job was successfully scheduled': '上次成功调度的任务信息',
|
|
223
|
+
'The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron': '以 Cron 格式表示的调度,详见 https://en.wikipedia.org/wiki/Cron',
|
|
224
|
+
'The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready': '运行该守护 Pod 且至少有一个 Pod 就绪的节点数量',
|
|
225
|
+
'The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/': '运行至少一个守护 Pod 且应运行该 Pod 的节点数量。详情:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/',
|
|
226
|
+
'The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/': '应运行该守护 Pod 的节点总数(含已正确运行的节点)。详情:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/',
|
|
227
|
+
'Number of the pod with ready state': '就绪 Pod 数量',
|
|
228
|
+
'Total number of non-terminated pods targeted by this deployment that have the desired template spec': '该 Deployment 管理的符合模板规范的未终止 Pod 总数',
|
|
229
|
+
'Total number of available pods (ready for at least minReadySeconds) targeted by this deployment': '该 Deployment 管理的可用 Pod 数(至少就绪 minReadySeconds 秒)',
|
|
230
|
+
'The number of pods which reached phase Succeeded. The value increases monotonically for a given spec. However, it may decrease in reaction to scale down of elastic indexed jobs': '已完成(Succeeded)的 Pod 数量,通常单调增加,但弹性索引 Job 缩减时可能减少。',
|
|
231
|
+
'The aggregate readiness state of this pod for accepting traffic': 'Pod 接收流量的就绪状态',
|
|
232
|
+
'The number of times the containers in this pod have been restarted and when the last container in this pod has restarted': 'Pod 容器重启次数及最后重启时间',
|
|
233
|
+
'podIP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated': 'Pod 分配的 IP 地址(集群内可路由),未分配时为空。',
|
|
234
|
+
'phase represents the current phase of PersistentVolumeClaim': 'phase 表示 PersistentVolumeClaim 的当前阶段',
|
|
235
|
+
'volumeName is the binding reference to the PersistentVolume backing this claim': 'volumeName是支持此声明的持久卷的绑定引用',
|
|
236
|
+
'capacity represents the actual resources of the underlying volume': 'capacity 表示底层卷的实际资源',
|
|
237
|
+
'accessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1': '卷的实际访问模式(支撑该 PVC)。详情:https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1',
|
|
238
|
+
'StorageClass of the pvc': 'PVC 的存储类',
|
|
239
|
+
'VolumeAttributesClass of the pvc': 'PVC 的卷属性类',
|
|
240
|
+
'volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec': 'PVC 卷模式,未指定时默认为 Filesystem',
|
|
241
|
+
'Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace': '选择此 NetworkPolicy 作用的 Pod。所选 Pod 会应用所有 ingress 规则。多个 NetworkPolicy 可选择同一 Pod 集合,其 ingress 规则会叠加。该字段必填,空 podSelector 匹配命名空间内所有 Pod。',
|
|
242
|
+
'CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.Populated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata ': '对象创建时间的时间戳(UTC,RFC3339 格式),表示对象创建时的服务器时间。 系统自动填充,仅可读,客户端不可设置,不保证跨操作的先后顺序。列表对象该字段为 null。 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata',
|
|
243
|
+
'The time at which the most recent occurrence of this event was recorded': '事件最近记录时间',
|
|
244
|
+
};
|
|
245
|
+
|
|
211
246
|
const exists = this.$store.getters['i18n/exists'];
|
|
212
247
|
|
|
213
|
-
|
|
248
|
+
// 如果 tooltip 是语言包键名
|
|
249
|
+
if (exists(col.tooltip)) {
|
|
250
|
+
return this.t(col.tooltip);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// 如果 tooltip 是英文文本,使用映射
|
|
254
|
+
if (tooltipMap[col.tooltip]) {
|
|
255
|
+
return tooltipMap[col.tooltip];
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return col.tooltip; // 回退到原始文本
|
|
214
259
|
},
|
|
215
260
|
}
|
|
216
261
|
|
|
@@ -27,8 +27,6 @@ import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
|
|
|
27
27
|
import ActionMenu from '@shell/components/ActionMenuShell.vue';
|
|
28
28
|
import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
|
|
29
29
|
import ActionDropdownShell from '@shell/components/ActionDropdownShell.vue';
|
|
30
|
-
import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
|
|
31
|
-
import MastheadBtn from '@shell/components/ResourceList/Masthead-btn.vue'
|
|
32
30
|
|
|
33
31
|
// Uncomment for table performance debugging
|
|
34
32
|
// import tableDebug from './debug';
|
|
@@ -383,6 +381,16 @@ export default {
|
|
|
383
381
|
type: String,
|
|
384
382
|
default: ''
|
|
385
383
|
},
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Usually the manual refresh button is controlled via isTooManyItemsToAutoUpdate
|
|
387
|
+
*
|
|
388
|
+
* However this is singular on page. In some places there's more than one...
|
|
389
|
+
*/
|
|
390
|
+
hideManualRefreshButton: {
|
|
391
|
+
type: Boolean,
|
|
392
|
+
default: false
|
|
393
|
+
},
|
|
386
394
|
isBanner: {
|
|
387
395
|
// Show isBanner input to filter rows
|
|
388
396
|
type: Boolean,
|
|
@@ -646,6 +654,14 @@ export default {
|
|
|
646
654
|
namespaces() {
|
|
647
655
|
return this.$store.getters['activeNamespaceCache'];
|
|
648
656
|
},
|
|
657
|
+
|
|
658
|
+
// 正确的总数显示
|
|
659
|
+
totalCount() {
|
|
660
|
+
if (this.externalPaginationEnabled && this.externalPaginationResult) {
|
|
661
|
+
return this.externalPaginationResult.total || this.externalPaginationResult.count || 0;
|
|
662
|
+
}
|
|
663
|
+
return this.rows ? this.rows.length : 0;
|
|
664
|
+
},
|
|
649
665
|
|
|
650
666
|
initalLoad() {
|
|
651
667
|
return !!(!this.isLoading && !this._didinit && this.rows?.length);
|
|
@@ -876,6 +892,14 @@ export default {
|
|
|
876
892
|
// this.$router.replace(route);
|
|
877
893
|
// }
|
|
878
894
|
// },
|
|
895
|
+
// 设置当前页码
|
|
896
|
+
setPage(pageNum) {
|
|
897
|
+
if (pageNum >= 1 && pageNum <= this.totalPages) {
|
|
898
|
+
this.page = pageNum;
|
|
899
|
+
this.inputPage = ''; // 清空输入框
|
|
900
|
+
this.debouncedPaginationChanged();
|
|
901
|
+
}
|
|
902
|
+
},
|
|
879
903
|
onTableScroll(table, e) {
|
|
880
904
|
// 记录最后滚动的距离
|
|
881
905
|
let lastScrollTop = 0;
|
|
@@ -1066,12 +1090,22 @@ export default {
|
|
|
1066
1090
|
if ( col.labelKey ) {
|
|
1067
1091
|
return this.t(col.labelKey, undefined, true);
|
|
1068
1092
|
} else if ( col.label ) {
|
|
1069
|
-
|
|
1093
|
+
// 判断 label 是否为中文
|
|
1094
|
+
if (this.isChinese(col.label)) {
|
|
1095
|
+
return col.label;
|
|
1096
|
+
} else {
|
|
1097
|
+
return this.t(`tableHeaders.${col.label.replace(/\s+/g, '').toLowerCase()}`, undefined, true);
|
|
1098
|
+
}
|
|
1070
1099
|
}
|
|
1071
1100
|
|
|
1072
1101
|
return ucFirst(col.name);
|
|
1073
1102
|
},
|
|
1074
1103
|
|
|
1104
|
+
// 判断字符串是否包含中文
|
|
1105
|
+
isChinese(str) {
|
|
1106
|
+
return /[\u4e00-\u9fa5]/.test(str);
|
|
1107
|
+
},
|
|
1108
|
+
|
|
1075
1109
|
valueFor(row, col, isLabel) {
|
|
1076
1110
|
if (typeof col.value === 'function') {
|
|
1077
1111
|
return col.value(row);
|
|
@@ -1251,15 +1285,15 @@ export default {
|
|
|
1251
1285
|
>
|
|
1252
1286
|
<!-- 主标题和过滤器区域 -->
|
|
1253
1287
|
<div
|
|
1254
|
-
:class="{'titled': $slots.title && $slots.title.length, 'mb-40': isFilterLabel}"
|
|
1255
|
-
class="sortable-table-header
|
|
1288
|
+
:class="{'titled': $slots.title && $slots.title.length, 'mb-40': isFilterLabel }"
|
|
1289
|
+
class="sortable-table-header"
|
|
1256
1290
|
>
|
|
1257
1291
|
<slot name="title" />
|
|
1258
1292
|
|
|
1259
1293
|
<!-- 顶部功能行区域 -->
|
|
1260
1294
|
<div
|
|
1261
1295
|
v-if="showHeaderRow"
|
|
1262
|
-
class="fixed-header-table-actions"
|
|
1296
|
+
class="fixed-header-table-actions mb-20"
|
|
1263
1297
|
:class="{button: !!$slots['header-button'], 'advanced-filtering': hasAdvancedFiltering, }"
|
|
1264
1298
|
style="display: flex;"
|
|
1265
1299
|
>
|
|
@@ -1272,6 +1306,8 @@ export default {
|
|
|
1272
1306
|
style="max-height: 32px;"
|
|
1273
1307
|
>
|
|
1274
1308
|
|
|
1309
|
+
<slot name="search-main-button" />
|
|
1310
|
+
|
|
1275
1311
|
<!-- 已应用的高级筛选 -->
|
|
1276
1312
|
<ul
|
|
1277
1313
|
v-if="hasAdvancedFiltering"
|
|
@@ -1359,9 +1395,6 @@ export default {
|
|
|
1359
1395
|
<slot name="header-button" />
|
|
1360
1396
|
|
|
1361
1397
|
<div style="display: flex;">
|
|
1362
|
-
|
|
1363
|
-
<slot name="search-main-button" />
|
|
1364
|
-
|
|
1365
1398
|
<!-- 搜索输入框 -->
|
|
1366
1399
|
<input
|
|
1367
1400
|
v-if="search"
|
|
@@ -1390,14 +1423,18 @@ export default {
|
|
|
1390
1423
|
|
|
1391
1424
|
</div>
|
|
1392
1425
|
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1426
|
+
<div style="display: flex;">
|
|
1427
|
+
<slot name="header-button-left" />
|
|
1428
|
+
|
|
1429
|
+
<!-- 中间区域插槽 -->
|
|
1430
|
+
<div
|
|
1431
|
+
v-if="!hasAdvancedFiltering && $slots['header-middle']"
|
|
1432
|
+
class="middle"
|
|
1433
|
+
style="margin-left: 10px;"
|
|
1434
|
+
>
|
|
1435
|
+
<slot name="header-middle" />
|
|
1436
|
+
</div>
|
|
1437
|
+
</div>
|
|
1401
1438
|
</div>
|
|
1402
1439
|
</div>
|
|
1403
1440
|
|
|
@@ -1833,7 +1870,7 @@ export default {
|
|
|
1833
1870
|
class="paging"
|
|
1834
1871
|
>
|
|
1835
1872
|
<div style="height: 100%; align-content: center;">
|
|
1836
|
-
共 {{
|
|
1873
|
+
共 {{ totalCount ? totalCount : 0 }} 条
|
|
1837
1874
|
</div>
|
|
1838
1875
|
|
|
1839
1876
|
<button
|
|
@@ -2178,7 +2215,7 @@ export default {
|
|
|
2178
2215
|
border-collapse: collapse;
|
|
2179
2216
|
min-width: 400px;
|
|
2180
2217
|
border-radius: 5px 5px 0 0;
|
|
2181
|
-
border-bottom: 1px solid var(--border);
|
|
2218
|
+
border-bottom: 1px solid var(--border) !important;
|
|
2182
2219
|
/* outline: 1px solid var(--border); */
|
|
2183
2220
|
background: var(--sortable-table-bg);
|
|
2184
2221
|
border-radius: 4px;
|
|
@@ -2193,6 +2230,9 @@ export default {
|
|
|
2193
2230
|
td {
|
|
2194
2231
|
padding: 8px 5px;
|
|
2195
2232
|
border: 0;
|
|
2233
|
+
white-space: normal;
|
|
2234
|
+
word-break: break-all;
|
|
2235
|
+
overflow-wrap: break-word;
|
|
2196
2236
|
|
|
2197
2237
|
&:first-child {
|
|
2198
2238
|
padding-left: 10px;
|
|
@@ -2209,8 +2249,9 @@ export default {
|
|
|
2209
2249
|
|
|
2210
2250
|
tbody {
|
|
2211
2251
|
tr {
|
|
2212
|
-
border-bottom: 1px solid var(--sortable-table-top-divider);
|
|
2252
|
+
border-bottom: 1px solid var(--sortable-table-top-divider) !important;
|
|
2213
2253
|
background-color: var(--sortable-table-row-bg);
|
|
2254
|
+
height: 60px;
|
|
2214
2255
|
|
|
2215
2256
|
&.main-row.has-sub-row {
|
|
2216
2257
|
border-bottom: 0;
|
|
@@ -2274,6 +2315,7 @@ export default {
|
|
|
2274
2315
|
|
|
2275
2316
|
&:first-child {
|
|
2276
2317
|
border-bottom: 2px solid var(--sortable-table-row-bg);
|
|
2318
|
+
height: 40px;
|
|
2277
2319
|
}
|
|
2278
2320
|
|
|
2279
2321
|
&:not(:first-child) {
|
|
@@ -2650,13 +2692,15 @@ export default {
|
|
|
2650
2692
|
|
|
2651
2693
|
.pageSelect{
|
|
2652
2694
|
&:deep() .vs__actions:after{
|
|
2653
|
-
padding-top: 10px;
|
|
2695
|
+
// padding-top: 10px;
|
|
2696
|
+
display: flex;
|
|
2697
|
+
align-items: center;
|
|
2654
2698
|
}
|
|
2655
2699
|
}
|
|
2656
2700
|
.sort-table-div{
|
|
2657
2701
|
width:100%;
|
|
2658
2702
|
white-space:nowrap;
|
|
2659
|
-
overflow-x: auto;
|
|
2703
|
+
// overflow-x: auto;
|
|
2660
2704
|
}
|
|
2661
2705
|
|
|
2662
2706
|
/* 滚动阴影左边 */
|
|
@@ -51,6 +51,21 @@ export default {
|
|
|
51
51
|
return this.$store.getters['i18n/t'](this.pagingLabel, opt);
|
|
52
52
|
},
|
|
53
53
|
|
|
54
|
+
perPage() {
|
|
55
|
+
let out = this.rowsPerPage || 0;
|
|
56
|
+
|
|
57
|
+
if ( out <= 0 ) {
|
|
58
|
+
out = parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// This should ideally never happen, but the preference value could be invalid, so return something...
|
|
62
|
+
if ( out <= 0 ) {
|
|
63
|
+
out = 10;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return out;
|
|
67
|
+
},
|
|
68
|
+
|
|
54
69
|
pagedRows() {
|
|
55
70
|
if (this.externalPaginationEnabled) {
|
|
56
71
|
return this.rows;
|
|
@@ -91,22 +106,6 @@ export default {
|
|
|
91
106
|
},
|
|
92
107
|
|
|
93
108
|
methods: {
|
|
94
|
-
// getPerPage() {
|
|
95
|
-
// // perPage can not change while the list is displayed
|
|
96
|
-
// let out = this.rowsPerPage || 0;
|
|
97
|
-
|
|
98
|
-
// if ( out <= 0 ) {
|
|
99
|
-
// out = parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || 0;
|
|
100
|
-
// }
|
|
101
|
-
|
|
102
|
-
// // This should ideally never happen, but the preference value could be invalid, so return something...
|
|
103
|
-
// if ( out <= 0 ) {
|
|
104
|
-
// out = 10;
|
|
105
|
-
// }
|
|
106
|
-
|
|
107
|
-
// return out;
|
|
108
|
-
// },
|
|
109
|
-
|
|
110
109
|
|
|
111
110
|
setgetPerPage(num) {
|
|
112
111
|
this.setPage(1);
|
|
@@ -127,25 +127,38 @@ export default {
|
|
|
127
127
|
},
|
|
128
128
|
|
|
129
129
|
watch: {
|
|
130
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Handle changes to the page (SSP enabled)
|
|
132
|
+
*/
|
|
133
|
+
externalPaginationResult() {
|
|
134
|
+
// Handle changes to the page (SSP enabled)
|
|
135
|
+
this.pageChanged(this.pagedRows);
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Handle changes to the page (SSP disabled)
|
|
140
|
+
*/
|
|
131
141
|
pagedRows() {
|
|
132
|
-
|
|
133
|
-
|
|
142
|
+
this.pageChanged(this.pagedRows);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
134
145
|
|
|
135
|
-
|
|
146
|
+
methods: {
|
|
147
|
+
/**
|
|
148
|
+
* Remove items that are in the selection but no longer in the table.
|
|
149
|
+
*/
|
|
150
|
+
pageChanged(page) {
|
|
136
151
|
const toRemove = [];
|
|
137
152
|
|
|
138
153
|
for (const node of this.selectedRows) {
|
|
139
|
-
if (!
|
|
154
|
+
if (!page.includes(node) ) {
|
|
140
155
|
toRemove.push(node);
|
|
141
156
|
}
|
|
142
157
|
}
|
|
143
158
|
|
|
144
159
|
this.update([], toRemove);
|
|
145
|
-
}
|
|
146
|
-
},
|
|
160
|
+
},
|
|
147
161
|
|
|
148
|
-
methods: {
|
|
149
162
|
onToggleAll(value) {
|
|
150
163
|
if ( value ) {
|
|
151
164
|
this.update(this.pagedRows, []);
|
|
@@ -331,7 +344,6 @@ export default {
|
|
|
331
344
|
return;
|
|
332
345
|
}
|
|
333
346
|
|
|
334
|
-
e.preventDefault();
|
|
335
347
|
e.stopPropagation();
|
|
336
348
|
|
|
337
349
|
this.prevNode = node;
|
|
@@ -531,7 +543,7 @@ export default {
|
|
|
531
543
|
},
|
|
532
544
|
|
|
533
545
|
clearSelection() {
|
|
534
|
-
this.update([], this.selectedRows);
|
|
546
|
+
this.update([], [...this.selectedRows]);
|
|
535
547
|
},
|
|
536
548
|
|
|
537
549
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { StateColor, stateColorCssVar } from '@shell/utils/style';
|
|
3
|
+
import { computed } from 'vue';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
color: StateColor;
|
|
7
|
+
size?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const props = withDefaults(defineProps<Props>(), { size: '8px' });
|
|
11
|
+
const backgroundColor = computed(() => stateColorCssVar(props.color));
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<span class="state-dot" />
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<style lang="scss" scoped>
|
|
19
|
+
.state-dot {
|
|
20
|
+
display: inline-block;
|
|
21
|
+
|
|
22
|
+
width: v-bind('props.size');
|
|
23
|
+
height: v-bind('props.size');
|
|
24
|
+
|
|
25
|
+
border-radius: 50%;
|
|
26
|
+
background-color: v-bind('backgroundColor');
|
|
27
|
+
}
|
|
28
|
+
</style>
|