dashboard-shell-shell 3.0.5-test.4 → 3.0.5-test.40

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 (163) hide show
  1. package/assets/brand/csp/favicon.png +0 -0
  2. package/assets/icons/iconfont.css +4 -1
  3. package/assets/images/pl/dark/logo.png +0 -0
  4. package/assets/styles/all.scss +23 -3
  5. package/assets/styles/base/_variables.scss +5 -5
  6. package/assets/styles/fonts/_icons.scss +3 -2
  7. package/assets/styles/global/_button.scss +8 -8
  8. package/assets/styles/global/_form.scss +1 -0
  9. package/assets/styles/global/_select.scss +1 -1
  10. package/assets/styles/global/_tooltip.scss +9 -5
  11. package/assets/styles/themes/_light.scss +6 -4
  12. package/assets/styles/vendor/vue-select.scss +2 -1
  13. package/assets/translations/en-us.yaml +59 -0
  14. package/assets/translations/zh-hans.yaml +168 -15
  15. package/components/ActionDropdown.vue +1 -1
  16. package/components/ButtonDropdown.vue +3 -1
  17. package/components/CodeMirror.vue +6 -4
  18. package/components/ContainerResourceLimit.vue +2 -2
  19. package/components/CopyToClipboard.vue +15 -0
  20. package/components/Drawer/Chrome.vue +2 -2
  21. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +30 -27
  22. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
  23. package/components/Drawer/ResourceDetailDrawer/index.vue +5 -4
  24. package/components/ExplorerMembers.vue +28 -4
  25. package/components/GlobalRoleBindings.vue +51 -112
  26. package/components/PodSecurityAdmission.vue +2 -2
  27. package/components/RelatedResources.vue +3 -0
  28. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +1 -3
  29. package/components/Resource/Detail/Metadata/KeyValue.vue +8 -4
  30. package/components/Resource/Detail/Metadata/index.vue +3 -1
  31. package/components/Resource/Detail/TitleBar/Title.vue +4 -3
  32. package/components/Resource/Detail/TitleBar/Top.vue +2 -0
  33. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  34. package/components/Resource/Detail/TitleBar/index.vue +123 -25
  35. package/components/ResourceDetail/Masthead/index.vue +1 -1
  36. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  37. package/components/ResourceDetail/Masthead/legacy.vue +8 -7
  38. package/components/ResourceDetail/legacy.vue +18 -16
  39. package/components/ResourceList/Masthead.vue +13 -17
  40. package/components/ResourceTable.vue +10 -0
  41. package/components/SideNav.vue +21 -21
  42. package/components/SortableTable/THead.vue +46 -1
  43. package/components/SortableTable/index.vue +40 -20
  44. package/components/Tabbed/index.vue +6 -1
  45. package/components/auth/Principal.vue +10 -5
  46. package/components/auth/RoleDetailEdit.vue +11 -7
  47. package/components/breadcrumb/index.vue +119 -0
  48. package/components/form/ArrayList.vue +164 -147
  49. package/components/form/ArrayListGrouped.vue +5 -3
  50. package/components/form/ChangePassword.vue +1 -1
  51. package/components/form/Command.vue +4 -5
  52. package/components/form/Conditions.vue +15 -1
  53. package/components/form/Footer.vue +1 -0
  54. package/components/form/HealthCheck.vue +0 -2
  55. package/components/form/HookOption.vue +87 -58
  56. package/components/form/InputWithSelect.vue +8 -7
  57. package/components/form/KeyValue.vue +20 -2
  58. package/components/form/LabeledSelect.vue +6 -3
  59. package/components/form/Labels.vue +2 -2
  60. package/components/form/MatchExpressions.vue +4 -4
  61. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  62. package/components/form/Members/ClusterPermissionsEditor.vue +31 -28
  63. package/components/form/Members/MembershipEditor.vue +2 -2
  64. package/components/form/NameNsDescription.vue +1 -1
  65. package/components/form/Networking.vue +6 -9
  66. package/components/form/NodeAffinity.vue +29 -28
  67. package/components/form/PodAffinity.vue +23 -23
  68. package/components/form/Probe.vue +15 -11
  69. package/components/form/ProjectMemberEditor.vue +28 -25
  70. package/components/form/ResourceQuota/Namespace.vue +4 -4
  71. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  72. package/components/form/ResourceQuota/Project.vue +4 -4
  73. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  74. package/components/form/ResourceSelector.vue +1 -1
  75. package/components/form/Security.vue +1 -3
  76. package/components/form/Select.vue +7 -1
  77. package/components/form/ServiceNameSelect.vue +2 -5
  78. package/components/form/ServicePorts.vue +149 -75
  79. package/components/form/Taints.vue +2 -1
  80. package/components/form/Tolerations.vue +13 -9
  81. package/components/form/ValueFromResource.vue +110 -96
  82. package/components/form/WorkloadPorts.vue +143 -123
  83. package/components/formatter/WorkloadHealthScale.vue +4 -3
  84. package/components/nav/Group.vue +6 -0
  85. package/components/nav/Header.vue +7 -4
  86. package/components/nav/NamespaceFilter.vue +15 -21
  87. package/components/nav/TopLevelMenu.vue +99 -125
  88. package/components/nav/Type.vue +11 -3
  89. package/config/menuRouteMap.js +10 -0
  90. package/config/product/explorer.js +31 -9
  91. package/config/router/navigation-guards/index.js +61 -3
  92. package/detail/node.vue +28 -23
  93. package/dialog/AddCustomBadgeDialog.vue +17 -9
  94. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  95. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  96. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  97. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  98. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  99. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  100. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  101. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  102. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  103. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  104. package/edit/configmap.vue +4 -0
  105. package/edit/networking.k8s.io.ingress/Certificate.vue +14 -5
  106. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  107. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  108. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  109. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  110. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  111. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  112. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  113. package/edit/persistentvolume/index.vue +3 -1
  114. package/edit/persistentvolumeclaim.vue +2 -0
  115. package/edit/secret/index.vue +2 -2
  116. package/edit/service.vue +4 -1
  117. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  118. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  119. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  120. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  121. package/edit/workload/Job.vue +31 -34
  122. package/edit/workload/Upgrading.vue +5 -5
  123. package/edit/workload/index.vue +22 -18
  124. package/edit/workload/storage/Mount.vue +1 -0
  125. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  126. package/edit/workload/storage/azureDisk.vue +14 -10
  127. package/edit/workload/storage/azureFile.vue +9 -7
  128. package/edit/workload/storage/csi/index.vue +6 -9
  129. package/edit/workload/storage/emptyDir.vue +7 -5
  130. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  131. package/edit/workload/storage/hostPath.vue +7 -5
  132. package/edit/workload/storage/nfs.vue +8 -6
  133. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  134. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  135. package/edit/workload/storage/secret.vue +9 -6
  136. package/edit/workload/storage/vsphereVolume.vue +11 -7
  137. package/initialize/app-extended.js +7 -1
  138. package/models/provisioning.cattle.io.cluster.js +19 -18
  139. package/package.json +1 -1
  140. package/pages/account/index.vue +90 -118
  141. package/pages/account/pri.vue +229 -0
  142. package/pages/auth/login.vue +6 -1
  143. package/pages/auth/setup.vue +36 -17
  144. package/pages/c/_cluster/_product/namespaces.vue +1 -1
  145. package/pages/c/_cluster/auth/roles/index.vue +38 -5
  146. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  147. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  148. package/pages/home.vue +3 -4
  149. package/pkg/tsconfig.json +9 -9
  150. package/pkg/vue.config.js +1 -1
  151. package/plugins/dashboard-store/resource-class.js +28 -27
  152. package/rancher-components/BadgeState/BadgeState.vue +33 -52
  153. package/rancher-components/Banner/Banner.vue +4 -1
  154. package/rancher-components/Form/Radio/RadioGroup.vue +9 -1
  155. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  156. package/rancher-components/RcDropdown/RcDropdownMenu.vue +8 -7
  157. package/scripts/publish-shell.sh +1 -1
  158. package/store/i18n.js +4 -0
  159. package/store/type-map.js +1 -3
  160. package/types/shell/index.d.ts +4 -30
  161. package/utils/error.js +3 -1
  162. package/utils/errorTranslate.json +366 -2
  163. package/vue.config.js +1 -1
@@ -323,12 +323,12 @@ export default {
323
323
  }
324
324
 
325
325
  &.as-text-area .codemirror-container{
326
- min-height: 40px;
326
+ min-height: 32px !important;
327
327
  position: relative;
328
328
  display: block;
329
329
  box-sizing: border-box;
330
330
  width: 100%;
331
- padding: 10px;
331
+ padding: 8px 10px 0 10px !important;
332
332
  background-color: var(--input-bg);
333
333
  border-radius: var(--border-radius);
334
334
  border: solid var(--border-width) var(--input-border);
@@ -418,7 +418,7 @@ export default {
418
418
 
419
419
  .code-mirror {
420
420
  position: relative;
421
- margin-bottom: 20px;
421
+ margin-bottom: 0 !important;
422
422
 
423
423
  .escape-text {
424
424
  font-size: 12px;
@@ -498,5 +498,7 @@ export default {
498
498
  }
499
499
  }
500
500
  }
501
-
501
+ .CodeMirror-scroll {
502
+ min-height: 350px;
503
+ }
502
504
  </style>
@@ -177,7 +177,7 @@ export default {
177
177
  </div>
178
178
  </div>
179
179
 
180
- <div class="row mb-20">
180
+ <div class="row">
181
181
  <span class="col span-6">
182
182
  <UnitInput
183
183
  v-model:value="requestsCpu"
@@ -206,7 +206,7 @@ export default {
206
206
  </span>
207
207
  </div>
208
208
 
209
- <div class="row mb-20">
209
+ <div class="row">
210
210
  <span class="col span-6">
211
211
  <UnitInput
212
212
  v-model:value="limitsCpu"
@@ -42,3 +42,18 @@ export default {
42
42
  @click="clicked"
43
43
  />
44
44
  </template>
45
+
46
+ <style lang="scss"scoped>
47
+ button {
48
+ min-width: auto;
49
+ }
50
+
51
+ .bg-success{
52
+ background-color: var(--success-hover-text) !important;
53
+ color: #333 !important;
54
+ }
55
+ .bg-success:hover{
56
+ background-color: var(--success-hover-text) !important;
57
+ color: var(--primary) !important;
58
+ }
59
+ </style>
@@ -35,7 +35,7 @@ const ariaLabel = computed(() => i18n.t('component.drawer.chrome.ariaLabel.close
35
35
  </div>
36
36
  </slot>
37
37
  </div>
38
- <div class="body pp-4">
38
+ <div class="body">
39
39
  <slot name="body" />
40
40
  </div>
41
41
  <div class="footer pp-4">
@@ -93,7 +93,7 @@ const ariaLabel = computed(() => i18n.t('component.drawer.chrome.ariaLabel.close
93
93
  }
94
94
 
95
95
  .body {
96
- background-color: var(--drawer-body-bg);
96
+ background-color: var(--body-bg);
97
97
  flex: 1;
98
98
  overflow-y: scroll;
99
99
  }
@@ -16,38 +16,41 @@ const store = useStore();
16
16
  const i18n = useI18n(store);
17
17
  </script>
18
18
  <template>
19
- <Tab
20
- class="config-tab"
21
- name="config-tab"
22
- :label="i18n.t('component.drawer.resourceDetailDrawer.configTab.title')"
23
- >
24
- <div class="container">
25
- <component
26
- :is="props.component"
27
- :value="props.resource"
28
- :liveValue="props.resource"
29
- :resourceType="props.resourceType"
30
- :mode="_VIEW"
31
- :real-mode="_VIEW"
32
- :initial-value="props.resource"
33
- :use-tabbed-hash="false /* Have to disable hashing on child components or it modifies the url and closes the drawer */"
34
- as="config"
35
- />
36
- </div>
37
- </Tab>
19
+ <div class="container">
20
+ <component
21
+ :is="props.component"
22
+ :value="props.resource"
23
+ :liveValue="props.resource"
24
+ :resourceType="props.resourceType"
25
+ :mode="_VIEW"
26
+ :real-mode="_VIEW"
27
+ :initial-value="props.resource"
28
+ :use-tabbed-hash="false /* Have to disable hashing on child components or it modifies the url and closes the drawer */"
29
+ as="config"
30
+ />
31
+ </div>
38
32
  </template>
39
33
 
40
34
  <style lang="scss" scoped>
41
- .config-tab {
42
- .container {
43
- background-color: var(--body-bg);
44
- border-radius: var(--border-radius-md);
45
- padding: 16px;
46
- max-width: 100%;
47
- width: 100%;
48
- position: relative;
35
+ .container {
36
+ background-color: var(--body-bg);
37
+ border-radius: var(--border-radius-md);
38
+ padding: 20px;
39
+ max-width: 100%;
40
+ width: 100%;
41
+ position: relative;
42
+ // Handle the loading indicator
43
+ :deep() .overlay-content-mode {
44
+ left: 0;
45
+ top: 0;
49
46
  }
50
47
 
48
+ :deep() .cru-resource-footer {
49
+ display: none;
50
+ }
51
+ }
52
+ .config-tab {
53
+
51
54
  // Handle the loading indicator
52
55
  :deep() .overlay-content-mode {
53
56
  left: 0;
@@ -38,7 +38,7 @@ const yamlComponent: any = useTemplateRef('yaml');
38
38
  :deep() .codemirror-container {
39
39
  background-color: var(--body-bg);
40
40
  border-radius: var(--border-radius-md);
41
- padding: 16px;
41
+ padding: 20px;
42
42
 
43
43
  .CodeMirror, .CodeMirror-gutter {
44
44
  background-color: var(--body-bg);
@@ -3,7 +3,7 @@ import Drawer from '@shell/components/Drawer/Chrome.vue';
3
3
  import { useI18n } from '@shell/composables/useI18n';
4
4
  import { useStore } from 'vuex';
5
5
  import Tabbed from '@shell/components/Tabbed/index.vue';
6
- import YamlTab, { Props as YamlProps } from '@shell/components/Drawer/ResourceDetailDrawer/YamlTab.vue';
6
+ // import YamlTab, { Props as YamlProps } from '@shell/components/Drawer/ResourceDetailDrawer/YamlTab.vue';
7
7
  import { useDefaultConfigTabProps, useDefaultYamlTabProps } from '@shell/components/Drawer/ResourceDetailDrawer/composables';
8
8
  import ConfigTab from '@shell/components/Drawer/ResourceDetailDrawer/ConfigTab.vue';
9
9
  import { computed, ref } from 'vue';
@@ -27,6 +27,8 @@ const i18n = useI18n(store);
27
27
  const yamlTabProps = ref<YamlProps | null>(null);
28
28
  const configTabProps = useDefaultConfigTabProps(props.resource);
29
29
 
30
+ console.log(configTabProps, ' configTabProps---------------------------------2');
31
+
30
32
  useDefaultYamlTabProps(props.resource).then((props) => {
31
33
  yamlTabProps.value = props;
32
34
  });
@@ -85,10 +87,10 @@ const canEdit = computed(() => {
85
87
  v-if="configTabProps"
86
88
  v-bind="configTabProps"
87
89
  />
88
- <YamlTab
90
+ <!-- <YamlTab
89
91
  v-if="yamlTabProps"
90
92
  v-bind="yamlTabProps"
91
- />
93
+ /> -->
92
94
  </Tabbed>
93
95
  </template>
94
96
  <template #additional-actions>
@@ -116,7 +118,6 @@ const canEdit = computed(() => {
116
118
  border: none;
117
119
  border-top: 1px solid var(--border);
118
120
  padding: 0;
119
- padding-top: 24px;
120
121
  }
121
122
  }
122
123
  }
@@ -115,6 +115,10 @@ export default {
115
115
  labelKey: 'tableHeaders.role',
116
116
  value: 'roleTemplate.nameDisplay'
117
117
  },
118
+ {
119
+ name: '操作',
120
+ labelKey: 'tableHeaders.action',
121
+ },
118
122
  ],
119
123
  loadingProjectBindings: true,
120
124
  loadingClusterBindings: true
@@ -293,6 +297,7 @@ export default {
293
297
  :create-button-label="t('members.createActionLabel')"
294
298
  :is-creatable="false"
295
299
  :type-display="t('members.clusterAndProject')"
300
+
296
301
  />
297
302
  <Banner
298
303
  v-if="isLocal"
@@ -304,7 +309,7 @@ export default {
304
309
  name="cluster-membership"
305
310
  :label="t('members.clusterMembership')"
306
311
  >
307
- <div
312
+ <!-- <div
308
313
  v-if="canEditClusterMembers"
309
314
  class="row mb-10 cluster-add"
310
315
  >
@@ -314,7 +319,7 @@ export default {
314
319
  >
315
320
  {{ t('members.createActionLabel') }}
316
321
  </router-link>
317
- </div>
322
+ </div> -->
318
323
  <ResourceTable
319
324
  :schema="schema"
320
325
  :headers="headers"
@@ -325,7 +330,21 @@ export default {
325
330
  :loading="$fetchState.pending || !currentCluster || loadingClusterBindings"
326
331
  sub-search="subSearch"
327
332
  :sub-fields="['nameDisplay']"
328
- />
333
+ >
334
+ <template #header-right>
335
+ <div
336
+ v-if="canEditClusterMembers"
337
+ class="row mb-10 mr-10 cluster-add"
338
+ >
339
+ <router-link
340
+ :to="createLocation"
341
+ class="btn role-primary pull-right"
342
+ >
343
+ {{ t('members.createActionLabel') }}
344
+ </router-link>
345
+ </div>
346
+ </template>
347
+ </ResourceTable>
329
348
  </Tab>
330
349
  <Tab
331
350
  v-if="canManageProjectMembers && !isHarvester"
@@ -346,12 +365,13 @@ export default {
346
365
  v-trim-whitespace
347
366
  class="group-tab"
348
367
  >
368
+
349
369
  <div
350
370
  v-clean-html="getProjectLabel(group)"
351
371
  class="project-name"
352
372
  />
353
373
  </div>
354
- <div class="right">
374
+ <div class="right" style="margin-right: 80px;">
355
375
  <button
356
376
  v-if="canEditProjectMembers"
357
377
  type="button"
@@ -445,8 +465,12 @@ export default {
445
465
  & :deep() .group-bar{
446
466
  display: flex;
447
467
  justify-content: space-between;
468
+ align-items: center;
448
469
  }
449
470
  }
471
+ .role-secondary.btn-sm:focus, .role-secondary.btn-sm.focused{
472
+ border: 1px solid #d7d7d7;
473
+ }
450
474
  .cluster-add {
451
475
  justify-content: flex-end;
452
476
  }
@@ -103,17 +103,14 @@ export default {
103
103
  this.sortedRoles.global.push(...remainingGlobalRoles);
104
104
  // End sort of global roles
105
105
 
106
+ delete this.sortedRoles.builtin
107
+
106
108
  this.update();
107
109
  }
108
110
  } catch (e) { }
109
111
  },
110
112
  data() {
111
-
112
- const topLevelPermissions = sessionStorage.getItem('TOPLEVELPERMISSIONS') || ''
113
-
114
113
  return {
115
- topLevelPermissions,
116
-
117
114
  // This not only identifies global roles but the order here is the order we want to display them in the UI
118
115
  globalPermissions: [
119
116
  'admin',
@@ -333,119 +330,60 @@ export default {
333
330
 
334
331
  <div v-else>
335
332
  <form v-if="selectedRoles">
336
- <template v-if="topLevelPermissions && topLevelPermissions !== 'superadmin'">
337
- <div
338
- v-for="(sortedRole, roleType) in sortedRoles"
339
- :key="roleType"
340
- class="role-group mb-10"
333
+ <div
334
+ v-for="(sortedRole, roleType) in sortedRoles"
335
+ :key="roleType"
336
+ class="role-group mb-10"
337
+ >
338
+ <Card
339
+ v-if="Object.keys(sortedRole).length"
340
+ :show-highlight-border="false"
341
+ :show-actions="false"
341
342
  >
342
- <Card
343
- v-if="Object.keys(sortedRole).length"
344
- :show-highlight-border="false"
345
- :show-actions="false"
346
- >
347
- <template v-slot:title>
348
- <div class="type-title">
349
- <h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
350
- <div class="type-description">
351
- {{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
352
- </div>
343
+ <template v-slot:title>
344
+ <div class="type-title">
345
+ <h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
346
+ <div class="type-description">
347
+ {{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
353
348
  </div>
354
- </template>
355
- <template v-slot:body>
349
+ </div>
350
+ </template>
351
+ <template v-slot:body>
352
+ <div
353
+ class="checkbox-section"
354
+ :class="'checkbox-section--' + roleType"
355
+ >
356
356
  <div
357
- class="checkbox-section"
358
- :class="'checkbox-section--' + roleType"
357
+ v-for="(role, i) in sortedRoles[roleType]"
358
+ :key="i"
359
+ class="checkbox mb-10 mr-10"
359
360
  >
360
- <div
361
- v-for="(role, i) in sortedRoles[roleType]"
362
- :key="i"
363
- class="checkbox mb-10 mr-10"
361
+ <Checkbox
362
+ v-model:value="selectedRoles"
363
+ :value-when-true="role.id"
364
+ :disabled="!!assignOnlyRoles[role.id]"
365
+ :label="role.nameDisplay"
366
+ :description="role.descriptionDisplay"
367
+ :mode="mode"
368
+ :data-testId="'grb-checkbox-' + role.id"
369
+ @update:value="checkboxChanged"
364
370
  >
365
- <Checkbox
366
- v-model:value="selectedRoles"
367
- :value-when-true="role.id"
368
- :disabled="!!assignOnlyRoles[role.id]"
369
- :label="role.nameDisplay"
370
- :description="role.descriptionDisplay"
371
- :mode="mode"
372
- :data-testId="'grb-checkbox-' + role.id"
373
- @update:value="checkboxChanged"
374
- >
375
- <template #label>
376
- <div class="checkbox-label-slot">
377
- <span class="checkbox-label">{{ role.nameDisplay }}</span>
378
- <i
379
- v-if="!!assignOnlyRoles[role.id]"
380
- v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
381
- class="checkbox-info icon icon-info icon-lg"
382
- />
383
- </div>
384
- </template>
385
- </Checkbox>
386
- </div>
387
- </div>
388
- </template>
389
- </Card>
390
- </div>
391
- </template>
392
-
393
- <template v-else>
394
- <div
395
- v-for="(sortedRole, roleType) in { global: sortedRoles['global'] }"
396
- :key="roleType"
397
- class="role-group mb-10"
398
- >
399
- <Card
400
- v-if="Object.keys(sortedRole).length"
401
- :show-highlight-border="false"
402
- :show-actions="false"
403
- >
404
- <template v-slot:title>
405
- <div class="type-title">
406
- <h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
407
- <div class="type-description">
408
- {{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
409
- </div>
371
+ <template #label>
372
+ <div class="checkbox-label-slot">
373
+ <span class="checkbox-label">{{ role.nameDisplay }}</span>
374
+ <i
375
+ v-if="!!assignOnlyRoles[role.id]"
376
+ v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
377
+ class="checkbox-info icon icon-info icon-lg"
378
+ />
379
+ </div>
380
+ </template>
381
+ </Checkbox>
410
382
  </div>
411
- </template>
412
- <template v-slot:body>
413
- <div
414
- class="checkbox-section"
415
- :class="'checkbox-section--' + roleType"
416
- >
417
- <div
418
- v-for="(role, i) in sortedRoles[roleType]"
419
- :key="i"
420
- class="checkbox mb-10 mr-10"
421
- >
422
- <Checkbox
423
- v-model:value="selectedRoles"
424
- :value-when-true="role.id"
425
- :disabled="!!assignOnlyRoles[role.id]"
426
- :label="role.nameDisplay"
427
- :description="role.descriptionDisplay"
428
- :mode="mode"
429
- :data-testId="'grb-checkbox-' + role.id"
430
- @update:value="checkboxChanged"
431
- >
432
- <template #label>
433
- <div class="checkbox-label-slot">
434
- <span class="checkbox-label">{{ role.nameDisplay }}</span>
435
- <i
436
- v-if="!!assignOnlyRoles[role.id]"
437
- v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
438
- class="checkbox-info icon icon-info icon-lg"
439
- />
440
- </div>
441
- </template>
442
- </Checkbox>
443
- </div>
444
- </div>
445
- </template>
446
- </Card>
447
- </div>
448
- </template>
383
+ </div>
384
+ </template>
385
+ </Card>
386
+ </div>
449
387
  </form>
450
388
  </div>
451
389
  </template>
@@ -490,4 +428,5 @@ export default {
490
428
  }
491
429
  }
492
430
  }
431
+
493
432
  </style>
@@ -216,9 +216,9 @@ export default defineComponent({
216
216
  <div
217
217
  v-for="(psaControl, level, i) in psaControls"
218
218
  :key="i"
219
- class="row row--y-center mb-20"
219
+ class="row row--y-center"
220
220
  >
221
- <span class="col">
221
+ <span class="col span-1">
222
222
  <Checkbox
223
223
  v-if="!labelsAlwaysActive"
224
224
  v-model:value="psaControl.active"
@@ -175,5 +175,8 @@ export default {
175
175
  <template #cell:state="{row}">
176
176
  <BadgeState :value="row" />
177
177
  </template>
178
+ <template #cell:name="{row}">
179
+ <span>{{ row.name }}</span>
180
+ </template>
178
181
  </ResourceTable>
179
182
  </template>
@@ -89,12 +89,10 @@ const getRowValueId = (row:Row): string => `value-${ row.label }:${ row.value }`
89
89
  flex-direction: column;
90
90
 
91
91
  .row {
92
- margin-bottom: 8px;
93
-
92
+ min-height: 40px;
94
93
  .value {
95
94
  display: flex;
96
95
  flex-direction: row;
97
- align-items: center;
98
96
 
99
97
  &, & * {
100
98
  max-width: 100%;
@@ -53,13 +53,13 @@ const showConfigurationMoreFocusSelector = computed(() => `[data-testid="${ show
53
53
 
54
54
  <template>
55
55
  <div class="key-value">
56
- <div class="heading">
56
+ <div class="heading h40">
57
57
  <span class="title text-deemphasized">{{ propertyName }}</span>
58
58
  <span class="count">{{ rows.length }}</span>
59
59
  </div>
60
60
  <div
61
61
  v-if="visibleRows.length === 0"
62
- class="empty mmt-2 text-deemphasized"
62
+ class="empty text-deemphasized"
63
63
  >
64
64
  <div class="no-rows">
65
65
  {{ i18n.t('component.resource.detail.metadata.keyValue.noRows', {propertyName: lowercasePropertyName}) }}
@@ -78,7 +78,7 @@ const showConfigurationMoreFocusSelector = computed(() => `[data-testid="${ show
78
78
  <div
79
79
  v-for="row in visibleRows"
80
80
  :key="displayValue(row)"
81
- class="row"
81
+ class="row h40"
82
82
  >
83
83
  <Rectangle
84
84
  v-clean-tooltip="displayValue(row)"
@@ -104,18 +104,22 @@ const showConfigurationMoreFocusSelector = computed(() => `[data-testid="${ show
104
104
  display: flex;
105
105
  flex-direction: column;
106
106
  align-items: flex-start;
107
+
108
+ .h40 {
109
+ min-height: 40px;
110
+ }
107
111
 
108
112
  .count {
109
113
  margin-left: 24px;
110
114
  }
111
115
 
112
116
  .heading {
113
- margin-bottom: 8px;
114
117
  }
115
118
 
116
119
  .row {
117
120
  display: block;
118
121
  width: 100%;
122
+ line-height: 40px;
119
123
 
120
124
  &:not(:nth-child(2)) {
121
125
  margin-top: 4px;
@@ -31,10 +31,12 @@ const showBothEmpty = computed(() => labels.length === 0 && annotations.length =
31
31
 
32
32
  <template>
33
33
  <SpacedRow
34
- class="metadata ppb-3"
34
+ v-if="false"
35
+ class="metadata ppb-5"
35
36
  v-bind="$attrs"
36
37
  >
37
38
  <div
39
+ v-if="identifyingInformation?.length > 0"
38
40
  class="identifying-info"
39
41
  >
40
42
  <IdentifyingInformation :rows="identifyingInformation" />
@@ -1,14 +1,15 @@
1
1
  <template>
2
- <h1 class="title">
2
+ <div class="title">
3
3
  <slot name="default" />
4
- </h1>
4
+ </div>
5
5
  </template>
6
6
 
7
7
  <style lang="scss" scoped>
8
- h1.title {
8
+ .title {
9
9
  display: inline-block;
10
10
  align-items: center;
11
11
  display: flex;
12
12
  flex-direction: row;
13
+ font-size: 14px;
13
14
  }
14
15
  </style>
@@ -10,5 +10,7 @@
10
10
  flex-direction: row;
11
11
  justify-content: space-between;
12
12
  align-items: center;
13
+ height: 50px;
14
+ margin-bottom: 20px;
13
15
  }
14
16
  </style>
@@ -14,7 +14,22 @@ export const useDefaultTitleBarProps = (resource: any, resourceSubtype?: Ref<str
14
14
  const resourceSubtypeValue = toValue(resourceSubtype);
15
15
  const currentStore = store.getters['currentStore'](resourceValue.type);
16
16
  const schema = store.getters[`${ currentStore }/schemaFor`](resourceValue.type);
17
- const resourceTypeLabel = resourceValue.parentNameOverride || store.getters['type-map/labelFor'](schema);
17
+ let resourceTypeLabel = resourceValue.parentNameOverride || store.getters['type-map/labelFor'](schema);
18
+
19
+ // 转换为中文
20
+ const displayName_zh_hans: Record<string, string> = {
21
+ 'GlobalRole': '全局角色',
22
+ 'RoleTemplate': '集群角色',
23
+ }
24
+
25
+ if (displayName_zh_hans[resourceTypeLabel]) {
26
+ resourceTypeLabel = displayName_zh_hans[resourceTypeLabel]
27
+ }
28
+
29
+ if (resourceTypeLabel == '集群角色' && (route.query?.roleContext == 'NAMESPACE' || resource?.parentLocationOverride?.hash == '#NAMESPACE')) {
30
+ resourceTypeLabel = '项目或资源组角色'
31
+ }
32
+
18
33
  const resourceName = resourceSubtypeValue ? `${ resourceSubtypeValue } - ${ resourceValue.nameDisplay }` : resourceValue.nameDisplay;
19
34
  const resourceTo = resourceValue.listLocation || {
20
35
  name: 'c-cluster-product-resource',