dashboard-shell-shell 3.0.5-test.12 → 3.0.5-test.14

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 (88) hide show
  1. package/assets/icons/iconfont.css +4 -1
  2. package/assets/images/pl/dark/logo.png +0 -0
  3. package/assets/styles/global/_select.scss +1 -1
  4. package/assets/styles/global/_tooltip.scss +5 -1
  5. package/assets/translations/zh-hans.yaml +5 -4
  6. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +22 -19
  7. package/components/ExplorerMembers.vue +10 -1
  8. package/components/GlobalRoleBindings.vue +1 -58
  9. package/components/Resource/Detail/TitleBar/index.vue +26 -23
  10. package/components/ResourceDetail/Masthead/index.vue +1 -1
  11. package/components/ResourceDetail/Masthead/latest.vue +1 -1
  12. package/components/ResourceDetail/Masthead/legacy.vue +4 -4
  13. package/components/SortableTable/index.vue +2 -2
  14. package/components/Tabbed/index.vue +5 -1
  15. package/components/auth/Principal.vue +8 -3
  16. package/components/auth/RoleDetailEdit.vue +1 -1
  17. package/components/form/ArrayList.vue +163 -147
  18. package/components/form/Command.vue +4 -5
  19. package/components/form/Footer.vue +1 -0
  20. package/components/form/HealthCheck.vue +0 -2
  21. package/components/form/HookOption.vue +83 -58
  22. package/components/form/InputWithSelect.vue +8 -7
  23. package/components/form/KeyValue.vue +16 -2
  24. package/components/form/Labels.vue +1 -1
  25. package/components/form/MatchExpressions.vue +3 -4
  26. package/components/form/NameNsDescription.vue +1 -1
  27. package/components/form/Networking.vue +0 -1
  28. package/components/form/NodeAffinity.vue +29 -28
  29. package/components/form/PodAffinity.vue +19 -21
  30. package/components/form/Probe.vue +15 -11
  31. package/components/form/ResourceQuota/NamespaceRow.vue +1 -1
  32. package/components/form/ResourceQuota/Project.vue +1 -1
  33. package/components/form/ResourceQuota/ProjectRow.vue +1 -1
  34. package/components/form/ResourceSelector.vue +1 -1
  35. package/components/form/ServiceNameSelect.vue +1 -3
  36. package/components/form/ServicePorts.vue +149 -75
  37. package/components/form/Tolerations.vue +12 -9
  38. package/components/form/ValueFromResource.vue +110 -96
  39. package/components/nav/NamespaceFilter.vue +14 -19
  40. package/components/nav/TopLevelMenu.vue +98 -125
  41. package/config/router/navigation-guards/index.js +52 -3
  42. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  43. package/edit/autoscaling.horizontalpodautoscaler/index.vue +3 -1
  44. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  45. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  46. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  47. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  48. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  49. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  50. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  51. package/edit/networking.k8s.io.ingress/Certificate.vue +7 -5
  52. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  53. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  54. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  55. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -3
  56. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  57. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +12 -11
  58. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  59. package/edit/secret/index.vue +2 -2
  60. package/edit/service.vue +4 -1
  61. package/edit/storage.k8s.io.storageclass/index.vue +10 -8
  62. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  63. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  64. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  65. package/edit/workload/Job.vue +27 -29
  66. package/edit/workload/Upgrading.vue +3 -3
  67. package/edit/workload/index.vue +2 -2
  68. package/edit/workload/storage/Mount.vue +1 -0
  69. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  70. package/edit/workload/storage/azureDisk.vue +14 -10
  71. package/edit/workload/storage/azureFile.vue +9 -7
  72. package/edit/workload/storage/csi/index.vue +6 -9
  73. package/edit/workload/storage/emptyDir.vue +7 -5
  74. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  75. package/edit/workload/storage/hostPath.vue +7 -5
  76. package/edit/workload/storage/nfs.vue +8 -6
  77. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  78. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +18 -15
  79. package/edit/workload/storage/secret.vue +9 -6
  80. package/edit/workload/storage/vsphereVolume.vue +11 -7
  81. package/initialize/app-extended.js +7 -1
  82. package/package.json +1 -1
  83. package/pages/account/index.vue +90 -56
  84. package/pages/home.vue +3 -4
  85. package/rancher-components/Banner/Banner.vue +4 -1
  86. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +31 -2
  87. package/store/i18n.js +1 -0
  88. package/utils/errorTranslate.json +82 -2
@@ -213,4 +213,7 @@ src: url('iconfont.woff2?t=1753758703852') format('woff2'),
213
213
  }
214
214
  .icon-mingming:before {
215
215
  content: "\e62c";
216
- }
216
+ }
217
+ .icon-default:before {
218
+ content: "\e61c";
219
+ }
Binary file
@@ -56,7 +56,7 @@
56
56
 
57
57
  .vs__dropdown-toggle{
58
58
  border: solid var(--border-width) var(--input-border);
59
- height: 32px;
59
+ height: 30px;
60
60
  }
61
61
  // .vs__dropdown-toggle,
62
62
  .vs__dropdown-toggle > * {
@@ -147,7 +147,7 @@
147
147
  }
148
148
 
149
149
  .v-popper__popper.v-popper--theme-dropdown {
150
- border-radius: 4px;
150
+ border-radius: 0px;
151
151
  z-index: z-index('tooltip');
152
152
  border: 1px solid #d9d9d9 !important;
153
153
 
@@ -157,6 +157,10 @@
157
157
  }
158
158
  }
159
159
  }
160
+ .v-popper__popper .v-popper__arrow-container {
161
+ display: none;
162
+ }
163
+
160
164
 
161
165
  .v-popper {
162
166
  display: inline;
@@ -216,7 +216,7 @@ product:
216
216
  backup: Rancher 备份
217
217
  cis: CIS Benchmark
218
218
  ecm: Cluster Manager
219
- explorer: 集群浏览器
219
+ explorer: 控制台
220
220
  fleet: 持续交付
221
221
  longhorn: Longhorn
222
222
  manager: 集群管理
@@ -5642,6 +5642,7 @@ tableHeaders:
5642
5642
  volume: 卷
5643
5643
  volumeMode: 卷模式
5644
5644
  weight: 权重
5645
+ action: 操作
5645
5646
  target:
5646
5647
  router:
5647
5648
  label: 路由
@@ -6161,7 +6162,7 @@ workload:
6161
6162
  replicas: 副本数量
6162
6163
  showTabs: '显示高级选项'
6163
6164
  scheduling:
6164
- activeDeadlineSeconds: 判定 Pod 是否活跃的截止时间
6165
+ activeDeadlineSeconds: 判定Pod是否活跃的截止时间
6165
6166
  activeDeadlineSecondsTip: 系统将 Pod 判定为失败,并终止其关联容器前的等待时长
6166
6167
  affinity:
6167
6168
  addNodeSelector: 添加节点选择器
@@ -6331,7 +6332,7 @@ workload:
6331
6332
  pod: Pod 是你可以在 Kubernetes 中创建和管理的最小可部署计算单元。Pod 是一个或多个容器,具有共享的存储和网络资源以及运行容器的规范。
6332
6333
  upgrading:
6333
6334
  activeDeadlineSeconds:
6334
- label: 判定 Pod 是否活跃的截止时间
6335
+ label: 判定Pod是否活跃的截止时间
6335
6336
  tip: 系统将 Pod 判定为失败,并终止其关联容器前的等待时长
6336
6337
  concurrencyPolicy:
6337
6338
  label: 并发
@@ -6482,7 +6483,7 @@ typeDescription:
6482
6483
  kubevirt.io.virtualmachine: 云虚拟机是一种安全可靠、弹性可伸缩的云计算服务器,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。
6483
6484
  harvesterhci.io.volume: 虚拟磁盘具有高性能和低时延的特点,支持随机读写,可以像使用物理硬盘一样,在虚拟机上进行格式化并建立文件系统来使用块存储。
6484
6485
  harvesterhci.io.volumesnapshot: 虚拟磁盘快照功能通过捕获虚拟磁盘在特定时间点的状态,生成增量副本,支持快速回滚磁盘状态,为测试验证、容灾恢复提供高效解决方案
6485
- harvesterhci.io.virtualmachinebackup: 虚拟机备份功能通过创建包含磁盘数据、配置信息的完整副本,支持跨环境恢复及长期数据保护,为系统故障或灾难提供可靠容灾方案。
6486
+ harvesterhci.io.virtualmachinebackup: 虚拟机备份恢复功能通过创建包含磁盘数据、配置信息的完整副本,支持跨环境恢复及长期数据保护,为系统故障或灾难提供可靠容灾方案。
6486
6487
  harvesterhci.io.schedulevmbackup: 虚拟机备份策略功能通过创建定时任务,对虚拟机进行完整备份或增量快照,为用户提供自动化的数据备份和容灾方案。
6487
6488
  harvesterhci.io.vmsnapshot: 虚拟机快照功能通过捕获特定时间点的系统状态,支持快速恢复虚拟机状态,为数据备份与系统调试提供灵活解决方案。
6488
6489
  harvesterhci.io.keypair: SSH密钥对是一种安全便捷的登录认证方式,您可以实现免密码远程登录,并在无需人工干预的情况下进行安全的自动化操作,实现服务器配置和应用程序部署的自动化。
@@ -16,25 +16,19 @@ 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>
@@ -45,6 +39,15 @@ const i18n = useI18n(store);
45
39
  max-width: 100%;
46
40
  width: 100%;
47
41
  position: relative;
42
+ // Handle the loading indicator
43
+ :deep() .overlay-content-mode {
44
+ left: 0;
45
+ top: 0;
46
+ }
47
+
48
+ :deep() .cru-resource-footer {
49
+ display: none;
50
+ }
48
51
  }
49
52
  .config-tab {
50
53
 
@@ -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
@@ -361,12 +365,13 @@ export default {
361
365
  v-trim-whitespace
362
366
  class="group-tab"
363
367
  >
368
+
364
369
  <div
365
370
  v-clean-html="getProjectLabel(group)"
366
371
  class="project-name"
367
372
  />
368
373
  </div>
369
- <div class="right">
374
+ <div class="right" style="margin-right: 80px;">
370
375
  <button
371
376
  v-if="canEditProjectMembers"
372
377
  type="button"
@@ -460,8 +465,12 @@ export default {
460
465
  & :deep() .group-bar{
461
466
  display: flex;
462
467
  justify-content: space-between;
468
+ align-items: center;
463
469
  }
464
470
  }
471
+ .role-secondary.btn-sm:focus, .role-secondary.btn-sm.focused{
472
+ border: 1px solid #d7d7d7;
473
+ }
465
474
  .cluster-add {
466
475
  justify-content: flex-end;
467
476
  }
@@ -333,7 +333,7 @@ export default {
333
333
 
334
334
  <div v-else>
335
335
  <form v-if="selectedRoles">
336
- <template v-if="topLevelPermissions && topLevelPermissions !== 'superadmin'">
336
+ <template>
337
337
  <div
338
338
  v-for="(sortedRole, roleType) in sortedRoles"
339
339
  :key="roleType"
@@ -389,63 +389,6 @@ export default {
389
389
  </Card>
390
390
  </div>
391
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>
410
- </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>
449
392
  </form>
450
393
  </div>
451
394
  </template>
@@ -38,7 +38,6 @@ export interface TitleBarProps {
38
38
  showViewOptions?: boolean;
39
39
 
40
40
  onShowConfiguration?: (returnFocusSelector: string) => void;
41
- value?: any;
42
41
  parentRouteOverride?: string;
43
42
  }
44
43
 
@@ -47,9 +46,10 @@ const showConfigurationIcon = require(`@shell/assets/images/icons/document.svg`)
47
46
 
48
47
  <script setup lang="ts">
49
48
  const {
50
- parentRouteOverride, value, resource, resourceTypeLabel, resourceTo, resourceName, description, badge, showViewOptions, onShowConfiguration,
49
+ parentRouteOverride, resource, resourceTypeLabel, resourceTo, resourceName, description, badge, showViewOptions, onShowConfiguration,
51
50
  } = defineProps<TitleBarProps>();
52
51
 
52
+
53
53
  const store = useStore();
54
54
  const i18n = useI18n(store);
55
55
  const router = useRouter();
@@ -61,8 +61,6 @@ const showConfigurationReturnFocusSelector = computed(() => `[data-testid="${ sh
61
61
 
62
62
  const configTabProps = useDefaultConfigTabProps(resource);
63
63
 
64
- console.log(configTabProps, ' configTabProps---------------------------------1');
65
-
66
64
 
67
65
  const currentView = ref(router?.currentRoute?.value?.query?.as || _CONFIG);
68
66
  const viewOptions = computed(() => {
@@ -84,39 +82,32 @@ const viewOptions = computed(() => {
84
82
 
85
83
  const Svg = require('~shell/assets/images/API.svg')
86
84
 
87
- const parent = computed(() =>{
88
- const displayName = value?.parentNameOverride || store.getters['type-map/labelFor'](schema);
85
+ const parent = computed(() => {
86
+
89
87
  const product = store.getters['currentProduct'].name;
90
88
 
91
89
  const defaultLocation = {
92
- name: 'c-cluster-product-resource',
90
+ name: 'c-cluster-product-resource',
93
91
  params: {
94
- resource: resource,
92
+ resource,
95
93
  product,
96
94
  }
97
95
  };
98
96
 
99
- const location = value?.parentLocationOverride || defaultLocation;
97
+ const location = resource?.parentLocationOverride || defaultLocation;
100
98
 
101
99
  if (parentRouteOverride) {
102
100
  location.name = parentRouteOverride;
103
101
  }
104
102
 
105
- const out = {
106
- location
107
- };
108
-
109
- return out;
110
- })
103
+ return { location };
104
+ });
111
105
 
112
106
  const menuIcon = computed(() => {
113
107
  const product = store.getters['productId'];
114
-
115
- const resources = parent?.location?.params?.resource || ''
116
-
117
- return store.getters['type-map/groupsForVirTypes'](product, resources);
118
- })
119
-
108
+ const resources = parent.value.location?.params?.resource || '';
109
+ return store.getters['type-map/groupsForVirTypes'](product, resources) || 'default menuIcon';
110
+ });
120
111
 
121
112
  watch(
122
113
  () => currentView.value,
@@ -131,7 +122,7 @@ watch(
131
122
  <breadcrumb :resource="resource"/>
132
123
  <Top>
133
124
  <Title class="title">
134
- <span v-if="menuIcon && parentRouteOverride === 'account' && resource=== 'token'" class="detailIcon-span">
125
+ <span class="detailIcon-span">
135
126
  <img
136
127
  v-if="parentRouteOverride === 'account' && resource=== 'token'"
137
128
  :src="Svg"
@@ -189,7 +180,7 @@ watch(
189
180
  :options="viewOptions"
190
181
  />
191
182
  <RcButton
192
- v-if="onShowConfiguration"
183
+ v-if="onShowConfiguration && configTabProps"
193
184
  :data-testid="showConfigurationDataTestId"
194
185
  class="show-configuration"
195
186
  :primary="true"
@@ -222,6 +213,7 @@ watch(
222
213
  </template>
223
214
 
224
215
  <style lang="scss" scoped>
216
+
225
217
  .detailIcon-span{
226
218
  width: 24px;
227
219
  height: 24px;
@@ -230,6 +222,17 @@ watch(
230
222
  background: var(--primary);
231
223
  margin-right: 10px;
232
224
  }
225
+ .detailIcon{
226
+ position: absolute;
227
+ color: #fff;
228
+ font-size: 38px;
229
+ left: 4px;
230
+ top: -2px;
231
+ }
232
+
233
+ .detailIcon-span-title{
234
+ font-weight: bold;
235
+ }
233
236
  .resourceTypeLabelCls {
234
237
  font-weight: 700;
235
238
  }
@@ -60,6 +60,6 @@ const showLatestMasthead = computed(() => isNewDetailPageEnabled.value && isView
60
60
  <style lang="scss" scoped>
61
61
  .new.state-banner {
62
62
  margin: 0;
63
- margin-top: 16px;
63
+ margin-bottom: 20px;
64
64
  }
65
65
  </style>
@@ -39,6 +39,6 @@ const bannerProps = useResourceDetailBannerProps(props.value);
39
39
  <style lang="scss" scoped>
40
40
  .new.state-banner {
41
41
  margin: 0;
42
- margin-top: 16px;
42
+ margin-bottom: 20px;
43
43
  }
44
44
  </style>
@@ -254,7 +254,7 @@ export default {
254
254
  },
255
255
 
256
256
  parent() {
257
- const displayName = this.value?.parentNameOverride || this.$store.getters['type-map/labelFor'](this.schema);
257
+ let displayName = this.value?.parentNameOverride || this.$store.getters['type-map/labelFor'](this.schema);
258
258
  const product = this.$store.getters['currentProduct'].name;
259
259
 
260
260
  const defaultLocation = {
@@ -443,7 +443,7 @@ export default {
443
443
 
444
444
  const resources = this.location?.params?.resource || ''
445
445
 
446
- return this.$store.getters['type-map/groupsForVirTypes'](product, resources);
446
+ return this.$store.getters['type-map/groupsForVirTypes'](product, resources) || 'default menuIcon';
447
447
  },
448
448
 
449
449
  location() {
@@ -506,7 +506,7 @@ export default {
506
506
  <span>/</span>
507
507
  </span>
508
508
  <span class="excram-last-name">
509
- {{ (realMode === 'view'? '查看': realMode === 'edit' ? '编辑':'创建') + parent.displayName }}
509
+ {{ (realMode === 'view'? '查看': realMode === 'edit' ? '编辑':'创建') + parent?.displayName }}
510
510
  </span>
511
511
  </div>
512
512
  <header>
@@ -530,7 +530,7 @@ export default {
530
530
  :class="'icon-'+ menuIcon + ' detailIcon'"
531
531
  />
532
532
  </span>
533
- <span class="detailIcon-span-title">{{ realMode=== 'create'? '创建': '' }}{{ parent.displayName }}{{ realMode=== 'create'? '': '名称:' }}</span>
533
+ <span class="detailIcon-span-title">{{ realMode=== 'create'? '创建': '' }}{{ parent?.displayName }}{{ realMode=== 'create'? '': '名称:' }}</span>
534
534
  <span v-if="realMode !== 'create'">
535
535
  <span v-if="value.detailPageHeaderActionOverride && value.detailPageHeaderActionOverride(realMode)">{{ value.detailPageHeaderActionOverride(realMode) }}</span>
536
536
  <t
@@ -1841,7 +1841,7 @@ export default {
1841
1841
  class="paging"
1842
1842
  >
1843
1843
  <div style="height: 100%; align-content: center;">
1844
- 共 {{ filteredRows.length }} 条
1844
+ 共 {{ filteredRows ? filteredRows.length : 0 }} 条
1845
1845
  </div>
1846
1846
 
1847
1847
  <button
@@ -2217,7 +2217,7 @@ export default {
2217
2217
 
2218
2218
  tbody {
2219
2219
  tr {
2220
- border-bottom: 1px solid var(--sortable-table-top-divider);
2220
+ border-bottom: 1px solid var(--sortable-table-top-divider) !important;
2221
2221
  background-color: var(--sortable-table-row-bg);
2222
2222
 
2223
2223
  &.main-row.has-sub-row {
@@ -384,7 +384,7 @@ export default {
384
384
 
385
385
  &.horizontal {
386
386
  border: solid thin var(--border);
387
- border-bottom: 0;
387
+ // border-bottom: 0;
388
388
  display: flex;
389
389
  flex-direction: row;
390
390
 
@@ -504,6 +504,8 @@ margin: 0px -20px;
504
504
  display: flex;
505
505
  border-bottom:1px solid #d7d7d7;
506
506
  padding: 0 0 0 20px;
507
+ overflow: auto;
508
+ overflow-y: hidden;
507
509
  /* flex: 1 0; */
508
510
  /* flex-direction: column; */
509
511
 
@@ -571,6 +573,8 @@ margin: 0px -20px;
571
573
  li {
572
574
  display: flex;
573
575
  flex: 1;
576
+ border-left: 1px solid var(--border);
577
+ border-right: 1px solid var(--border);
574
578
 
575
579
  .btn {
576
580
  flex: 1 1;
@@ -20,7 +20,11 @@ export default {
20
20
  isShowPass: {
21
21
  type: Boolean,
22
22
  default: false,
23
- }
23
+ },
24
+ userLogoSize: {
25
+ type: Number,
26
+ default: 20,
27
+ },
24
28
  },
25
29
 
26
30
  async fetch() {
@@ -90,8 +94,9 @@ export default {
90
94
  </template>
91
95
 
92
96
  <template v-else-if="principal">
93
- <div class="avatar">
97
+ <div :style="userLogoSize === 79 ? { width: '287px' } : {}" class="avatar">
94
98
  <img
99
+ :style="{ width: userLogoSize + 'px', height: userLogoSize + 'px' }"
95
100
  src="@shell/assets/images/user.png"
96
101
  :class="{'round': principal.roundAvatar}"
97
102
  :alt="t('principal.alt.avatar')"
@@ -209,7 +214,7 @@ export default {
209
214
  .avatar {
210
215
  /* grid-area: avatar;
211
216
  text-align: center; */
212
- width: 287px;
217
+ // width: 287px;
213
218
  display: flex;
214
219
  justify-content: center;
215
220
  align-items: center;
@@ -152,7 +152,7 @@ export default {
152
152
  });
153
153
  }
154
154
 
155
- if (this.value?.metadata?.name && !this.value.displayName) {
155
+ if (this.value?.metadata?.name && !this.value?.displayName) {
156
156
  this.value['displayName'] = this.value.metadata.name;
157
157
  }
158
158