dashboard-shell-shell 3.0.5-test.5 → 3.0.5-test.50

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 (169) 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 +2 -2
  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 +5 -1
  11. package/assets/styles/themes/_light.scss +3 -3
  12. package/assets/styles/vendor/vue-select.scss +2 -1
  13. package/assets/translations/en-us.yaml +64 -0
  14. package/assets/translations/zh-hans.yaml +206 -21
  15. package/components/ButtonDropdown.vue +3 -1
  16. package/components/ClusterIconMenu.vue +1 -1
  17. package/components/CodeMirror.vue +6 -4
  18. package/components/ConsumptionGauge.vue +1 -1
  19. package/components/ContainerResourceLimit.vue +2 -2
  20. package/components/CruResource.vue +3 -2
  21. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +10 -7
  22. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +1 -1
  23. package/components/Drawer/ResourceDetailDrawer/index.vue +3 -2
  24. package/components/ExplorerMembers.vue +10 -1
  25. package/components/GlobalRoleBindings.vue +69 -114
  26. package/components/PodSecurityAdmission.vue +1 -1
  27. package/components/PromptRemove.vue +23 -1
  28. package/components/RelatedResources.vue +3 -0
  29. package/components/Resource/Detail/Metadata/index.vue +1 -0
  30. package/components/Resource/Detail/TitleBar/Top.vue +2 -0
  31. package/components/Resource/Detail/TitleBar/composables.ts +16 -1
  32. package/components/Resource/Detail/TitleBar/index.vue +42 -23
  33. package/components/ResourceDetail/Masthead/index.vue +1 -1
  34. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  35. package/components/ResourceDetail/Masthead/legacy.vue +8 -7
  36. package/components/ResourceDetail/legacy.vue +15 -15
  37. package/components/ResourceList/Masthead.vue +13 -17
  38. package/components/ResourceTable.vue +16 -0
  39. package/components/SideNav.vue +21 -21
  40. package/components/SingleClusterInfo.vue +2 -1
  41. package/components/SortableTable/THead.vue +46 -1
  42. package/components/SortableTable/index.vue +55 -19
  43. package/components/Tabbed/index.vue +7 -2
  44. package/components/auth/Principal.vue +16 -8
  45. package/components/auth/RoleDetailEdit.vue +11 -7
  46. package/components/breadcrumb/index.vue +15 -236
  47. package/components/form/ArrayList.vue +164 -147
  48. package/components/form/ArrayListGrouped.vue +5 -3
  49. package/components/form/ChangePassword.vue +1 -1
  50. package/components/form/ClusterAppearance.vue +4 -3
  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 +3 -1
  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 +60 -41
  63. package/components/form/Members/MembershipEditor.vue +4 -4
  64. package/components/form/Members/ProjectMembershipEditor.vue +1 -1
  65. package/components/form/NameNsDescription.vue +4 -2
  66. package/components/form/Networking.vue +6 -9
  67. package/components/form/NodeAffinity.vue +29 -28
  68. package/components/form/PodAffinity.vue +23 -23
  69. package/components/form/Probe.vue +15 -11
  70. package/components/form/ProjectMemberEditor.vue +66 -48
  71. package/components/form/ResourceQuota/Namespace.vue +4 -4
  72. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  73. package/components/form/ResourceQuota/Project.vue +4 -4
  74. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  75. package/components/form/ResourceSelector.vue +1 -1
  76. package/components/form/Security.vue +1 -3
  77. package/components/form/Select.vue +7 -1
  78. package/components/form/ServiceNameSelect.vue +2 -5
  79. package/components/form/ServicePorts.vue +149 -75
  80. package/components/form/Tolerations.vue +13 -9
  81. package/components/form/ValueFromResource.vue +110 -96
  82. package/components/formatter/WorkloadHealthScale.vue +4 -3
  83. package/components/nav/Group.vue +6 -0
  84. package/components/nav/Header.vue +17 -137
  85. package/components/nav/NamespaceFilter.vue +15 -21
  86. package/components/nav/TopLevelMenu.vue +99 -125
  87. package/components/nav/Type.vue +11 -3
  88. package/config/menuRouteMap.js +10 -0
  89. package/config/product/explorer.js +32 -10
  90. package/config/product/manager.js +28 -17
  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/dialog/RollbackWorkloadDialog.vue +1 -1
  95. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  96. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  97. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  98. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  99. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  100. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  101. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  102. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  103. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  104. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  105. package/edit/configmap.vue +4 -0
  106. package/edit/networking.k8s.io.ingress/Certificate.vue +14 -5
  107. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  108. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  109. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  110. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  111. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  112. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  113. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  114. package/edit/persistentvolume/index.vue +3 -1
  115. package/edit/persistentvolumeclaim.vue +2 -0
  116. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +1 -1
  117. package/edit/secret/index.vue +2 -2
  118. package/edit/service.vue +4 -1
  119. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  120. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  121. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  122. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  123. package/edit/workload/Job.vue +31 -34
  124. package/edit/workload/Upgrading.vue +5 -5
  125. package/edit/workload/index.vue +19 -15
  126. package/edit/workload/storage/Mount.vue +1 -0
  127. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  128. package/edit/workload/storage/azureDisk.vue +14 -10
  129. package/edit/workload/storage/azureFile.vue +9 -7
  130. package/edit/workload/storage/csi/index.vue +6 -9
  131. package/edit/workload/storage/emptyDir.vue +7 -5
  132. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  133. package/edit/workload/storage/hostPath.vue +7 -5
  134. package/edit/workload/storage/nfs.vue +8 -6
  135. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  136. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  137. package/edit/workload/storage/secret.vue +9 -6
  138. package/edit/workload/storage/vsphereVolume.vue +11 -7
  139. package/initialize/app-extended.js +7 -1
  140. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
  141. package/mixins/create-edit-view/impl.js +10 -0
  142. package/models/provisioning.cattle.io.cluster.js +19 -18
  143. package/models/workload.js +2 -2
  144. package/package.json +1 -1
  145. package/pages/account/index.vue +96 -115
  146. package/pages/auth/login.vue +1 -1
  147. package/pages/auth/setup.vue +36 -17
  148. package/pages/c/_cluster/auth/roles/index.vue +65 -8
  149. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  150. package/pages/c/_cluster/explorer/index.vue +2 -1
  151. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  152. package/pages/home.vue +55 -13
  153. package/pkg/tsconfig.json +9 -9
  154. package/pkg/vue.config.js +1 -1
  155. package/plugins/dashboard-store/actions.js +1 -1
  156. package/plugins/dashboard-store/resource-class.js +28 -27
  157. package/rancher-components/Banner/Banner.vue +14 -2
  158. package/rancher-components/Form/Radio/RadioGroup.vue +9 -1
  159. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  160. package/scripts/build-pkg.sh +18 -23
  161. package/scripts/publish-shell.sh +1 -1
  162. package/store/i18n.js +1 -0
  163. package/store/type-map.js +1 -3
  164. package/types/shell/index.d.ts +12 -30
  165. package/utils/error.js +26 -4
  166. package/utils/errorTranslate.json +390 -6
  167. package/utils/errorTranslateNew.json +39 -0
  168. package/utils/roleFiltering.js +33 -0
  169. package/vue.config.js +1 -1
@@ -170,7 +170,7 @@ export default {
170
170
  >
171
171
  <template #column-headers>
172
172
  <div class="box mb-0">
173
- <div class="column-headers row" style="width: 95%;">
173
+ <div class="column-headers row" :style="{ width: isView ? '100%' : 'calc(100% - 100px)'}">
174
174
  <div class="col span-6">
175
175
  <label class="text-label">{{ t('membershipEditor.user') }}</label>
176
176
  </div>
@@ -181,7 +181,7 @@ export default {
181
181
  </div>
182
182
  </template>
183
183
  <template #columns="{row, i}">
184
- <div class="columns row">
184
+ <div style="width: 100%;" class="columns row">
185
185
  <div class="col span-6">
186
186
  <Principal
187
187
  :value="row.value.principalId"
@@ -191,7 +191,7 @@ export default {
191
191
  :data-testid="`role-item-${i}`"
192
192
  class="col span-6 role"
193
193
  >
194
- {{ row.value.roleDisplay }}
194
+ {{ $store.getters['i18n/withFallback'](`customConversion.${row.value.roleDisplay}`, row.value.roleDisplay) }}
195
195
  </div>
196
196
  </div>
197
197
  </template>
@@ -206,7 +206,7 @@ export default {
206
206
  </button>
207
207
  </template>
208
208
  <template #remove-button="{remove, i}">
209
- <span v-if="(isCreate && i === 0) || isView" />
209
+ <div style="width: 100px;" v-if="(isCreate && i === 0) || isView" />
210
210
  <button
211
211
  v-else
212
212
  type="button"
@@ -58,6 +58,6 @@ export default {
58
58
  :type="NORMAN.PROJECT_ROLE_TEMPLATE_BINDING"
59
59
  :mode="mode"
60
60
  parent-key="projectId"
61
- :parent-id="parentId"
61
+ :parent-id="parentId"
62
62
  />
63
63
  </template>
@@ -256,7 +256,7 @@ export default {
256
256
  const options = namespaces
257
257
  .map((namespace) => ({ nameDisplay: namespace, id: namespace }))
258
258
  .map(props.namespaceMapper || ((obj) => ({
259
- label: obj.nameDisplay,
259
+ label: obj.nameDisplay.replace('harvester', 'cloud'),
260
260
  value: obj.id,
261
261
  })));
262
262
 
@@ -514,7 +514,9 @@ export default {
514
514
  </div>
515
515
 
516
516
  <!-- 自定义插槽,可插入额外内容 -->
517
- <slot name="customize" />
517
+ <div :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'">
518
+ <slot name="customize" />
519
+ </div>
518
520
  <!-- <div
519
521
  v-show="!descriptionHidden"
520
522
  :data-testid="componentTestid + '-description'"
@@ -160,7 +160,7 @@ export default {
160
160
  <div>
161
161
  <div>
162
162
  <h3>{{ t('workload.container.titles.networkSettings') }}</h3>
163
- <div class="row mb-20">
163
+ <div class="row">
164
164
  <div class="col span-6">
165
165
  <LabeledSelect
166
166
  v-model:value="networkMode"
@@ -205,12 +205,11 @@ export default {
205
205
  </div>
206
206
  </div>
207
207
  </div>
208
- <div class="spacer" />
209
208
 
210
- <div>
209
+ <div class="mt-20">
211
210
  <h3>{{ t('workload.networking.dns') }}</h3>
212
211
  <div class="row">
213
- <div class="col span-6">
212
+ <div class="span-6">
214
213
  <ArrayList
215
214
  key="dnsNameservers"
216
215
  v-model:value="nameservers"
@@ -222,7 +221,7 @@ export default {
222
221
  @update:value="update"
223
222
  />
224
223
  </div>
225
- <div class="col span-6">
224
+ <div class="span-6">
226
225
  <ArrayList
227
226
  key="dnsSearches"
228
227
  v-model:value="searches"
@@ -236,9 +235,8 @@ export default {
236
235
  </div>
237
236
  </div>
238
237
  </div>
239
- <div class="spacer" />
240
238
 
241
- <div class="mt-20">
239
+ <div>
242
240
  <div class="row">
243
241
  <KeyValue
244
242
  v-model:value="options"
@@ -254,9 +252,8 @@ export default {
254
252
  />
255
253
  </div>
256
254
  </div>
257
- <div class="spacer" />
258
255
 
259
- <div class="row mt-20">
256
+ <div class="row mt-40">
260
257
  <div class="col span-12">
261
258
  <KeyValue
262
259
  key="hostAliases"
@@ -210,33 +210,31 @@ export default {
210
210
  @remove="remove"
211
211
  >
212
212
  <template #default="props">
213
- <div class="row">
214
- <div class="col span-9">
215
- <LabeledSelect
216
- :options="affinityOptions"
217
- :value="priorityDisplay(props.row.value)"
218
- :label="t('workload.scheduling.affinity.priority')"
219
- :mode="mode"
220
- :data-testid="`node-affinity-priority-index${props.i}`"
221
- @update:value="(changePriority(props.row.value))"
222
- />
223
- </div>
224
- <div
225
- v-if="'weight' in props.row.value"
226
- class="col span-3"
227
- >
228
- <LabeledInput
229
- v-model:value.number="props.row.value.weight"
230
- :mode="mode"
231
- type="number"
232
- min="1"
233
- max="100"
234
- :label="t('workload.scheduling.affinity.weight.label')"
235
- :placeholder="t('workload.scheduling.affinity.weight.placeholder')"
236
- :data-testid="`node-affinity-weight-index${props.i}`"
237
- @update:value="update"
238
- />
239
- </div>
213
+ <div class="col">
214
+ <LabeledSelect
215
+ :options="affinityOptions"
216
+ :value="priorityDisplay(props.row.value)"
217
+ :label="t('workload.scheduling.affinity.priority')"
218
+ :mode="mode"
219
+ :data-testid="`node-affinity-priority-index${props.i}`"
220
+ @update:value="(changePriority(props.row.value))"
221
+ />
222
+ </div>
223
+ <div
224
+ v-if="'weight' in props.row.value"
225
+ class="col"
226
+ >
227
+ <LabeledInput
228
+ v-model:value.number="props.row.value.weight"
229
+ :mode="mode"
230
+ type="number"
231
+ min="1"
232
+ max="100"
233
+ :label="t('workload.scheduling.affinity.weight.label')"
234
+ :placeholder="t('workload.scheduling.affinity.weight.placeholder')"
235
+ :data-testid="`node-affinity-weight-index${props.i}`"
236
+ @update:value="update"
237
+ />
240
238
  </div>
241
239
  <MatchExpressions
242
240
  :value="matchingSelectorDisplay ? props.row.value : props.row.value.matchExpressions"
@@ -254,5 +252,8 @@ export default {
254
252
  </div>
255
253
  </template>
256
254
 
257
- <style>
255
+ <style lang="scss" scoped>
256
+ .weight_input{
257
+ margin-left: 10px;
258
+ }
258
259
  </style>
@@ -370,27 +370,25 @@ export default {
370
370
  @remove="remove"
371
371
  >
372
372
  <template #default="props">
373
- <div class="row mt-20">
374
- <div class="col span-6">
375
- <LabeledSelect
376
- :mode="mode"
377
- :options="[t('workload.scheduling.affinity.affinityOption'),t('workload.scheduling.affinity.antiAffinityOption')]"
378
- :value="props.row.value._anti ?t('workload.scheduling.affinity.antiAffinityOption') :t('workload.scheduling.affinity.affinityOption') "
379
- :label="t('workload.scheduling.affinity.type')"
380
- :data-testid="`pod-affinity-type-index${props.i}`"
381
- @update:value="props.row.value._anti = !props.row.value._anti"
382
- />
383
- </div>
384
- <div class="col span-6">
385
- <LabeledSelect
386
- :mode="mode"
387
- :options="[t('workload.scheduling.affinity.preferred'),t('workload.scheduling.affinity.required')]"
388
- :value="priorityDisplay(props.row.value)"
389
- :label="t('workload.scheduling.affinity.priority')"
390
- :data-testid="`pod-affinity-priority-index${props.i}`"
391
- @update:value="changePriority(props.row.value, props.i)"
392
- />
393
- </div>
373
+ <div class="col">
374
+ <LabeledSelect
375
+ :mode="mode"
376
+ :options="[t('workload.scheduling.affinity.affinityOption'),t('workload.scheduling.affinity.antiAffinityOption')]"
377
+ :value="props.row.value._anti ?t('workload.scheduling.affinity.antiAffinityOption') :t('workload.scheduling.affinity.affinityOption') "
378
+ :label="t('workload.scheduling.affinity.type')"
379
+ :data-testid="`pod-affinity-type-index${props.i}`"
380
+ @update:value="props.row.value._anti = !props.row.value._anti"
381
+ />
382
+ </div>
383
+ <div class="col">
384
+ <LabeledSelect
385
+ :mode="mode"
386
+ :options="[t('workload.scheduling.affinity.preferred'),t('workload.scheduling.affinity.required')]"
387
+ :value="priorityDisplay(props.row.value)"
388
+ :label="t('workload.scheduling.affinity.priority')"
389
+ :data-testid="`pod-affinity-priority-index${props.i}`"
390
+ @update:value="changePriority(props.row.value, props.i)"
391
+ />
394
392
  </div>
395
393
  <div class="row mb-20">
396
394
  <RadioGroup
@@ -438,7 +436,7 @@ export default {
438
436
  @update:value="e=>updateLabelSelector(e, props)"
439
437
  />
440
438
  <div class="row mt-20">
441
- <div class="col span-6">
439
+ <div class="col">
442
440
  <LabeledSelect
443
441
  v-if="hasNodes"
444
442
  v-model:value="props.row.value.topologyKey"
@@ -466,9 +464,11 @@ export default {
466
464
  @update:value="update"
467
465
  />
468
466
  </div>
467
+ </div>
468
+ <div class="row">
469
469
  <div
470
470
  v-if="'weight' in props.row.value"
471
- class="col span-6"
471
+ class="col"
472
472
  >
473
473
  <LabeledInput
474
474
  v-model:value.number="props.row.value.weight"
@@ -160,7 +160,7 @@ export default {
160
160
  <div class="row">
161
161
  <div
162
162
  data-testid="input-probe-kind"
163
- class="col span-11-of-23"
163
+ class="span-9-of-23"
164
164
  >
165
165
  <LabeledSelect
166
166
  v-model:value="kind"
@@ -240,7 +240,7 @@ export default {
240
240
  </div>
241
241
  </div>
242
242
 
243
- <div class="col span-1-of-13">
243
+ <div class="span-1-of-13">
244
244
  <hr
245
245
  v-if="kind && kind!=='none'"
246
246
  :style="{'position':'relative', 'margin':'0px'}"
@@ -252,12 +252,12 @@ export default {
252
252
  <!-- none -->
253
253
  <div
254
254
  v-if="!isNone"
255
- class="col span-11-of-23"
255
+ class="span-11-of-23 ml-30"
256
256
  >
257
257
  <div class="row">
258
258
  <div
259
259
  data-testid="input-probe-periodSeconds"
260
- class="col span-4"
260
+ class="col"
261
261
  >
262
262
  <UnitInput
263
263
  v-model:value="probe.periodSeconds"
@@ -269,9 +269,12 @@ export default {
269
269
  @update:value="update"
270
270
  />
271
271
  </div>
272
+ </div>
273
+
274
+ <div class="row">
272
275
  <div
273
276
  data-testid="input-probe-initialDelaySeconds"
274
- class="col span-4"
277
+ class="col"
275
278
  >
276
279
  <UnitInput
277
280
  v-model:value="probe.initialDelaySeconds"
@@ -283,9 +286,11 @@ export default {
283
286
  @update:value="update"
284
287
  />
285
288
  </div>
289
+ </div>
290
+ <div class="row">
286
291
  <div
287
292
  data-testid="input-probe-timeoutSeconds"
288
- class="col span-4"
293
+ class="col"
289
294
  >
290
295
  <UnitInput
291
296
  v-model:value="probe.timeoutSeconds"
@@ -299,12 +304,10 @@ export default {
299
304
  </div>
300
305
  </div>
301
306
 
302
- <div class="spacer-small" />
303
-
304
307
  <div class="row">
305
308
  <div
306
309
  data-testid="input-probe-successThreshold"
307
- class="col span-6"
310
+ class="col"
308
311
  >
309
312
  <LabeledInput
310
313
  v-model:value.number="probe.successThreshold"
@@ -316,9 +319,11 @@ export default {
316
319
  @update:value="update"
317
320
  />
318
321
  </div>
322
+ </div>
323
+ <div class="row">
319
324
  <div
320
325
  data-testid="input-probe-failureThreshold"
321
- class="col span-6"
326
+ class="col"
322
327
  >
323
328
  <LabeledInput
324
329
  v-model:value.number="probe.failureThreshold"
@@ -333,7 +338,6 @@ export default {
333
338
  </div>
334
339
 
335
340
  <template v-if="kind === 'HTTP' || kind === 'HTTPS'">
336
- <div class="spacer-small" />
337
341
 
338
342
  <div class="row">
339
343
  <div class="col span-12">
@@ -166,29 +166,44 @@ export default {
166
166
  value: this.purifyOption(role.id),
167
167
  }));
168
168
 
169
- return [
170
- {
171
- label: this.t('projectMembers.projectPermissions.owner.label'),
172
- description: this.t('projectMembers.projectPermissions.owner.description'),
173
- value: 'owner'
174
- },
175
- {
176
- label: this.t('projectMembers.projectPermissions.member.label'),
177
- description: this.t('projectMembers.projectPermissions.member.description'),
178
- value: 'member'
179
- },
180
- {
181
- label: this.t('projectMembers.projectPermissions.readOnly.label'),
182
- description: this.t('projectMembers.projectPermissions.readOnly.description'),
183
- value: 'read-only'
184
- },
185
- ...customRoles,
186
- {
187
- label: this.t('projectMembers.projectPermissions.custom.label'),
188
- description: this.t('projectMembers.projectPermissions.custom.description'),
189
- value: 'custom'
190
- }
191
- ];
169
+ let optionList = [{
170
+ label: this.t('members.clusterPermissions.project-tenant.label'),
171
+ description: this.t('members.clusterPermissions.project-tenant.description'),
172
+ value: 'project-tenant'
173
+ }];
174
+
175
+ if (sessionStorage.getItem('TOPLEVELPERMISSIONS') === 'superadmin') {
176
+ optionList = [
177
+ {
178
+ label: this.t('members.clusterPermissions.project-tenant.label'),
179
+ description: this.t('members.clusterPermissions.project-tenant.description'),
180
+ value: 'project-tenant'
181
+ },
182
+ {
183
+ label: this.t('projectMembers.projectPermissions.owner.label'),
184
+ description: this.t('projectMembers.projectPermissions.owner.description'),
185
+ value: 'owner'
186
+ },
187
+ {
188
+ label: this.t('projectMembers.projectPermissions.member.label'),
189
+ description: this.t('projectMembers.projectPermissions.member.description'),
190
+ value: 'member'
191
+ },
192
+ {
193
+ label: this.t('projectMembers.projectPermissions.readOnly.label'),
194
+ description: this.t('projectMembers.projectPermissions.readOnly.description'),
195
+ value: 'read-only'
196
+ },
197
+ ...customRoles,
198
+ {
199
+ label: this.t('projectMembers.projectPermissions.custom.label'),
200
+ description: this.t('projectMembers.projectPermissions.custom.description'),
201
+ value: 'custom'
202
+ }
203
+ ];
204
+ }
205
+
206
+ return optionList
192
207
  },
193
208
  customPermissionsUpdate() {
194
209
  return this.customPermissions.reduce((acc, customPermissionsItem) => {
@@ -284,33 +299,36 @@ export default {
284
299
  </div>
285
300
  </template>
286
301
  <template v-slot:body>
287
- <RadioGroup
288
- v-model:value="value.permissionGroup"
289
- data-testid="permission-options"
290
- :options="options"
291
- name="permission-group"
292
- />
293
- <div
294
- v-if="value.permissionGroup === 'custom'"
295
- class="custom-permissions ml-20 mt-10"
296
- :class="{'two-column': useTwoColumnsForCustom}"
297
- >
302
+ <div style="max-height: 250px; overflow: auto;">
303
+ <RadioGroup
304
+ v-model:value="value.permissionGroup"
305
+ data-testid="permission-options"
306
+ :options="options"
307
+ :flexDirection="'column'"
308
+ name="permission-group"
309
+ />
298
310
  <div
299
- v-for="(permission, i) in customPermissionsUpdate"
300
- :key="i"
311
+ v-if="value.permissionGroup === 'custom'"
312
+ class="custom-permissions ml-20 mt-10"
313
+ :class="{'two-column': useTwoColumnsForCustom}"
301
314
  >
302
- <Checkbox
303
- v-model:value="permission.value"
304
- :data-testid="`custom-permission-${i}`"
305
- :disabled="permission.locked"
306
- class="mb-5"
307
- :label="permission.label"
308
- />
309
- <i
310
- v-if="permission.locked"
311
- v-clean-tooltip="permission.tooltip"
312
- class="icon icon-lock icon-fw"
313
- />
315
+ <div
316
+ v-for="(permission, i) in customPermissionsUpdate"
317
+ :key="i"
318
+ >
319
+ <Checkbox
320
+ v-model:value="permission.value"
321
+ :data-testid="`custom-permission-${i}`"
322
+ :disabled="permission.locked"
323
+ class="mb-5"
324
+ :label="permission.label"
325
+ />
326
+ <i
327
+ v-if="permission.locked"
328
+ v-clean-tooltip="permission.tooltip"
329
+ class="icon icon-lock icon-fw"
330
+ />
331
+ </div>
314
332
  </div>
315
333
  </div>
316
334
  </template>
@@ -72,13 +72,13 @@ export default {
72
72
  <template>
73
73
  <div>
74
74
  <div class="headers mb-10">
75
- <div style="width: 400px;">
75
+ <div style="width: 450px;">
76
76
  <label>{{ t('resourceQuota.headers.resourceType') }}</label>
77
77
  </div>
78
- <div style="width: 400px;">
78
+ <div style="width: 450px;">
79
79
  <label>{{ t('resourceQuota.headers.projectResourceAvailability') }}</label>
80
80
  </div>
81
- <div style="width: 500px;">
81
+ <div style="width: 450px;">
82
82
  <label>{{ t('resourceQuota.headers.limit') }}</label>
83
83
  </div>
84
84
  </div>
@@ -101,7 +101,7 @@ export default {
101
101
  .headers {
102
102
  display: flex;
103
103
  flex-direction: row;
104
- justify-content: space-between;
104
+ justify-content: left;
105
105
  align-items: center;
106
106
  border-bottom: 1px solid var(--border);
107
107
  height: 30px;
@@ -175,13 +175,15 @@ export default {
175
175
  v-if="typeOption"
176
176
  class="rowNew"
177
177
  >
178
- <Select
179
- :mode="mode"
180
- :value="type"
181
- :disabled="true"
182
- :options="types"
183
- />
184
- <div class="resource-availability">
178
+ <div style="width: 450px;">
179
+ <Select
180
+ :mode="mode"
181
+ :value="type"
182
+ :disabled="true"
183
+ :options="types"
184
+ />
185
+ </div>
186
+ <div style="width: 450px;" class="resource-availability">
185
187
  <PercentageBar
186
188
  v-clean-tooltip="tooltip"
187
189
  class="percentage-bar"
@@ -190,7 +192,7 @@ export default {
190
192
  :color-stops="{'100': '--primary'}"
191
193
  />
192
194
  </div>
193
- <div style="width: 500px;">
195
+ <div style="width: 450px;">
194
196
  <UnitInput
195
197
  :value="value.limit[type]"
196
198
  :mode="mode"
@@ -212,7 +214,7 @@ export default {
212
214
  .rowNew {
213
215
  margin-bottom: 10px;
214
216
  display: flex;
215
- justify-content: space-between;
217
+ justify-content: left;
216
218
 
217
219
  & > * {
218
220
  width: 400px;
@@ -57,14 +57,14 @@ export default {
57
57
  </script>
58
58
  <template>
59
59
  <div>
60
- <div style="justify-content: right;" class="headers mb-10">
61
- <div style="width: 400px;">
60
+ <div style="justify-content: left;" class="headers mb-10">
61
+ <div style="width: 450px;">
62
62
  <label>{{ t('resourceQuota.headers.resourceType') }}</label>
63
63
  </div>
64
- <div style="width: 400px;">
64
+ <div style="width: 450px;">
65
65
  <label>{{ t('resourceQuota.headers.projectLimit') }}</label>
66
66
  </div>
67
- <div style="width: 400px;">
67
+ <div style="width: 450px;">
68
68
  <label>{{ t('resourceQuota.headers.namespaceDefaultLimit') }}</label>
69
69
  </div>
70
70
  </div>
@@ -72,41 +72,47 @@ export default {
72
72
  v-if="typeOption"
73
73
  class="rowNew"
74
74
  >
75
- <Select
76
- :value="type"
77
- :mode="mode"
78
- :options="types"
79
- data-testid="projectrow-type-input"
80
- @update:value="updateType($event)"
81
- />
82
- <UnitInput
83
- :value="resourceQuotaLimit[type]"
84
- :mode="mode"
85
- :placeholder="typeOption.placeholder"
86
- :increment="typeOption.increment"
87
- :input-exponent="typeOption.inputExponent"
88
- :base-unit="typeOption.baseUnit"
89
- :output-modifier="true"
90
- data-testid="projectrow-project-quota-input"
91
- @update:value="updateQuotaLimit('resourceQuota', type, $event)"
92
- />
93
- <UnitInput
94
- :value="namespaceDefaultResourceQuotaLimit[type]"
95
- :mode="mode"
96
- :placeholder="typeOption.placeholder"
97
- :increment="typeOption.increment"
98
- :input-exponent="typeOption.inputExponent"
99
- :base-unit="typeOption.baseUnit"
100
- :output-modifier="true"
101
- data-testid="projectrow-namespace-quota-input"
102
- @update:value="updateQuotaLimit('namespaceDefaultResourceQuota', type, $event)"
103
- />
75
+ <div style="width: 450px;">
76
+ <Select
77
+ :value="type"
78
+ :mode="mode"
79
+ :options="types"
80
+ data-testid="projectrow-type-input"
81
+ @update:value="updateType($event)"
82
+ />
83
+ </div>
84
+ <div style="width: 450px;">
85
+ <UnitInput
86
+ :value="resourceQuotaLimit[type]"
87
+ :mode="mode"
88
+ :placeholder="typeOption.placeholder"
89
+ :increment="typeOption.increment"
90
+ :input-exponent="typeOption.inputExponent"
91
+ :base-unit="typeOption.baseUnit"
92
+ :output-modifier="true"
93
+ data-testid="projectrow-project-quota-input"
94
+ @update:value="updateQuotaLimit('resourceQuota', type, $event)"
95
+ />
96
+ </div>
97
+ <div style="width: 450px;">
98
+ <UnitInput
99
+ :value="namespaceDefaultResourceQuotaLimit[type]"
100
+ :mode="mode"
101
+ :placeholder="typeOption.placeholder"
102
+ :increment="typeOption.increment"
103
+ :input-exponent="typeOption.inputExponent"
104
+ :base-unit="typeOption.baseUnit"
105
+ :output-modifier="true"
106
+ data-testid="projectrow-namespace-quota-input"
107
+ @update:value="updateQuotaLimit('namespaceDefaultResourceQuota', type, $event)"
108
+ />
109
+ </div>
104
110
  </div>
105
111
  </template>
106
112
 
107
113
  <style lang='scss' scoped>
108
114
  .rowNew {
109
115
  display: flex;
110
- justify-content: space-between;
116
+ justify-content: left;
111
117
  }
112
118
  </style>