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

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 (198) hide show
  1. package/assets/brand/harvester/favicon.png +0 -0
  2. package/assets/brand/suse/favicon.png +0 -0
  3. package/assets/images/pl/half-logo.svg +23 -2
  4. package/assets/images/pl/harvester.png +0 -0
  5. package/assets/styles/app.scss +0 -4
  6. package/assets/styles/base/_basic.scss +2 -2
  7. package/assets/styles/base/_mixins.scss +1 -1
  8. package/assets/styles/base/_typography.scss +1 -2
  9. package/assets/styles/base/_variables.scss +4 -11
  10. package/assets/styles/global/_button.scss +27 -45
  11. package/assets/styles/global/_columns.scss +1 -3
  12. package/assets/styles/global/_form.scss +13 -45
  13. package/assets/styles/global/_labeled-input.scss +26 -54
  14. package/assets/styles/global/_layout.scss +3 -8
  15. package/assets/styles/global/_select.scss +17 -25
  16. package/assets/styles/global/_table.scss +1 -7
  17. package/assets/styles/global/_tooltip.scss +6 -54
  18. package/assets/styles/themes/_dark.scss +0 -3
  19. package/assets/styles/themes/_light.scss +42 -63
  20. package/assets/styles/vendor/vue-select.scss +9 -22
  21. package/assets/translations/en-us.yaml +4 -28
  22. package/assets/translations/zh-hans.yaml +189 -376
  23. package/components/ActionDropdown.vue +1 -2
  24. package/components/ActionMenu.vue +2 -2
  25. package/components/ActionMenuShell.vue +0 -2
  26. package/components/AppModal.vue +5 -46
  27. package/components/BrandImage.vue +0 -1
  28. package/components/ButtonDropdown.vue +4 -26
  29. package/components/ButtonMultiAction.vue +0 -1
  30. package/components/ClusterIconMenu.vue +1 -1
  31. package/components/CodeMirror.vue +6 -20
  32. package/components/ConsumptionGauge.vue +5 -24
  33. package/components/CruResource.vue +8 -9
  34. package/components/CruResourceFooter.vue +2 -2
  35. package/components/DashboardOptions.vue +17 -29
  36. package/components/ExplorerProjectsNamespaces.vue +5 -19
  37. package/components/GlobalRoleBindings.vue +48 -112
  38. package/components/GrafanaDashboard.vue +4 -4
  39. package/components/GrowlManager.vue +1 -3
  40. package/components/HardwareResourceGauge.vue +3 -39
  41. package/components/IndentedPanel.vue +10 -4
  42. package/components/InfoBox.vue +3 -3
  43. package/components/InputOrDisplay.vue +2 -28
  44. package/components/LabelValue.vue +1 -20
  45. package/components/ModalWithCard.vue +3 -12
  46. package/components/PodSecurityAdmission.vue +1 -1
  47. package/components/PromptModal.vue +1 -1
  48. package/components/PromptRemove.vue +11 -30
  49. package/components/ResourceDetail/Masthead/legacy.vue +38 -181
  50. package/components/ResourceDetail/legacy.vue +13 -29
  51. package/components/ResourceList/Masthead.vue +54 -226
  52. package/components/ResourceList/ResourceLoadingIndicator.vue +2 -5
  53. package/components/ResourceTable.vue +2 -24
  54. package/components/SideNav.vue +20 -74
  55. package/components/SortableTable/THead.vue +3 -33
  56. package/components/SortableTable/index.vue +464 -1017
  57. package/components/SortableTable/paging.js +16 -26
  58. package/components/SortableTable/selection.js +2 -2
  59. package/components/Tabbed/Tab.vue +3 -3
  60. package/components/Tabbed/index.vue +29 -47
  61. package/components/YamlEditor.vue +1 -0
  62. package/components/auth/Principal.vue +12 -36
  63. package/components/auth/RoleDetailEdit.vue +7 -58
  64. package/components/auth/SelectPrincipal.vue +0 -1
  65. package/components/form/ArrayList.vue +33 -41
  66. package/components/form/ArrayListGrouped.vue +2 -10
  67. package/components/form/ArrayListSelect.vue +1 -1
  68. package/components/form/BannerSettings.vue +59 -64
  69. package/components/form/ChangePassword.vue +4 -4
  70. package/components/form/ColorInput.vue +8 -32
  71. package/components/form/Footer.vue +8 -11
  72. package/components/form/InputWithSelect.vue +5 -8
  73. package/components/form/KeyValue.vue +7 -47
  74. package/components/form/LabeledSelect.vue +241 -212
  75. package/components/form/Labels.vue +3 -3
  76. package/components/form/MatchExpressions.vue +7 -24
  77. package/components/form/Members/ClusterPermissionsEditor.vue +2 -1
  78. package/components/form/Members/MembershipEditor.vue +1 -1
  79. package/components/form/NameNsDescription.vue +20 -59
  80. package/components/form/Password.vue +7 -16
  81. package/components/form/PodAffinity.vue +5 -4
  82. package/components/form/ResourceQuota/Namespace.vue +4 -4
  83. package/components/form/ResourceQuota/NamespaceRow.vue +17 -18
  84. package/components/form/ResourceQuota/Project.vue +4 -4
  85. package/components/form/ResourceQuota/ProjectRow.vue +6 -3
  86. package/components/form/Select.vue +2 -5
  87. package/components/form/SimpleSecretSelector.vue +9 -29
  88. package/components/form/UnitInput.vue +3 -8
  89. package/components/formatter/BadgeStateFormatter.vue +5 -8
  90. package/components/formatter/LiveDate.vue +3 -3
  91. package/components/nav/Favorite.vue +1 -5
  92. package/components/nav/Group.vue +99 -132
  93. package/components/nav/Header.vue +27 -124
  94. package/components/nav/HeaderPageActionMenu.vue +0 -1
  95. package/components/nav/NamespaceFilter.vue +15 -19
  96. package/components/nav/TopLevelMenu.vue +119 -182
  97. package/components/nav/Type.vue +41 -63
  98. package/composables/useClickOutside.ts +1 -1
  99. package/config/private-label.js +11 -15
  100. package/config/product/auth.js +7 -17
  101. package/config/product/settings.js +9 -19
  102. package/config/settings.ts +0 -28
  103. package/config/table-headers.js +2 -3
  104. package/dialog/ForceMachineRemoveDialog.vue +2 -2
  105. package/dialog/ScalePoolDownDialog.vue +2 -2
  106. package/edit/management.cattle.io.user.vue +4 -17
  107. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
  108. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
  109. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +12 -36
  110. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  111. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
  112. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
  113. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
  114. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
  115. package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
  116. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
  117. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
  118. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
  119. package/edit/namespace.vue +2 -1
  120. package/edit/token.vue +12 -31
  121. package/edit/workload/index.vue +1 -1
  122. package/list/management.cattle.io.setting.vue +13 -22
  123. package/list/management.cattle.io.user.vue +3 -7
  124. package/list/namespace.vue +0 -3
  125. package/list/provisioning.cattle.io.cluster.vue +7 -6
  126. package/mixins/brand.js +0 -17
  127. package/package.json +1 -1
  128. package/pages/account/index.vue +12 -74
  129. package/pages/auth/login.vue +51 -214
  130. package/pages/auth/setup.vue +19 -142
  131. package/pages/c/_cluster/_product/namespaces.vue +4 -4
  132. package/pages/c/_cluster/auth/roles/index.vue +1 -19
  133. package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
  134. package/pages/c/_cluster/settings/banners.vue +102 -174
  135. package/pages/c/_cluster/settings/brand.vue +302 -350
  136. package/pages/c/_cluster/settings/performance.vue +38 -61
  137. package/pages/home.vue +30 -70
  138. package/pages/prefs.vue +25 -27
  139. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  140. package/public/index.html +4 -4
  141. package/rancher-components/BadgeState/BadgeState.vue +4 -6
  142. package/rancher-components/Banner/Banner.vue +8 -12
  143. package/rancher-components/Card/Card.vue +8 -7
  144. package/rancher-components/Form/Checkbox/Checkbox.vue +0 -4
  145. package/rancher-components/Form/LabeledInput/LabeledInput.vue +3 -42
  146. package/rancher-components/Form/Radio/RadioButton.vue +11 -35
  147. package/rancher-components/Form/Radio/RadioGroup.vue +5 -13
  148. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +3 -3
  149. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +0 -1
  150. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +4 -12
  151. package/rancher-components/RcDropdown/RcDropdown.vue +7 -35
  152. package/rancher-components/RcDropdown/RcDropdownItem.vue +2 -2
  153. package/rancher-components/RcDropdown/RcDropdownMenu.vue +4 -9
  154. package/rancher-components/RcDropdown/types.ts +0 -1
  155. package/rancher-components/StringList/StringList.vue +1 -1
  156. package/static/favicon.ico +0 -0
  157. package/static/favicon.png +0 -0
  158. package/static/loading-indicator.html +3 -3
  159. package/store/i18n.js +2 -2
  160. package/store/modal.ts +3 -3
  161. package/store/prefs.js +4 -11
  162. package/store/type-map.js +2 -32
  163. package/types/shell/index.d.ts +67 -74
  164. package/utils/error.js +8 -87
  165. package/utils/router.js +0 -21
  166. package/utils/select.js +3 -26
  167. package/utils/string.js +5 -8
  168. package/utils/title.ts +1 -1
  169. package/assets/icons/demo.css +0 -539
  170. package/assets/icons/demo.css:Zone.Identifier +0 -0
  171. package/assets/icons/demo_index.html +0 -1131
  172. package/assets/icons/demo_index.html:Zone.Identifier +0 -0
  173. package/assets/icons/iconfont.css +0 -216
  174. package/assets/icons/iconfont.css:Zone.Identifier +0 -0
  175. package/assets/icons/iconfont.js +0 -1
  176. package/assets/icons/iconfont.js:Zone.Identifier +0 -0
  177. package/assets/icons/iconfont.json +0 -324
  178. package/assets/icons/iconfont.json:Zone.Identifier +0 -0
  179. package/assets/icons/iconfont.ttf +0 -0
  180. package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
  181. package/assets/icons/iconfont.woff +0 -0
  182. package/assets/icons/iconfont.woff2 +0 -0
  183. package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
  184. package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
  185. package/assets/images/API.svg +0 -3
  186. package/assets/images/action.svg +0 -6
  187. package/assets/images/login/password.svg +0 -20
  188. package/assets/images/login/user.svg +0 -6
  189. package/assets/images/login-bg.png +0 -0
  190. package/assets/images/login-left.png +0 -0
  191. package/assets/images/login-logo.svg +0 -19
  192. package/assets/images/logo.png +0 -0
  193. package/assets/images/pl/logo.png +0 -0
  194. package/assets/images/promp-yellow.svg +0 -5
  195. package/assets/images/user.png +0 -0
  196. package/assets/styles/all.scss +0 -63
  197. package/components/DotState.vue +0 -84
  198. package/utils/errorTranslate.json +0 -1336
@@ -198,16 +198,14 @@ export default {
198
198
  <template>
199
199
  <Loading v-if="$fetchState.pending" />
200
200
  <div v-else>
201
- <!-- 面包屑 -->
202
- <div class="excram-list">全局设置 / <span style="color: #1890FF;">性能</span></div>
203
201
  <h1 class="mb-20">
204
202
  {{ t('performance.label') }}
205
203
  </h1>
206
204
  <div>
207
- <div class="ui-perf-setting pb-40">
208
- <!-- 闲置状态 -->
209
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
210
- <h2 class="mb-20">{{ t('performance.inactivity.title') }}</h2>
205
+ <div class="ui-perf-setting">
206
+ <!-- Inactivity -->
207
+ <div class="mt-20">
208
+ <h2>{{ t('performance.inactivity.title') }}</h2>
211
209
  <p>{{ t('performance.inactivity.description') }}</p>
212
210
  <Checkbox
213
211
  v-model:value="value.inactivity.enabled"
@@ -234,21 +232,21 @@ export default {
234
232
  />
235
233
  </div>
236
234
  </div>
237
- <!-- WebSocket 通知 -->
238
- <div class="mb-40 p-20" style="border: 1px solid var(--nav-border);">
239
- <h2 class="mb-20">{{ t('performance.websocketNotification.label') }}</h2>
235
+ <!-- Websocket Notifications -->
236
+ <div class="mt-40">
237
+ <h2>{{ t('performance.websocketNotification.label') }}</h2>
240
238
  <p>{{ t('performance.websocketNotification.description') }}</p>
241
239
  <Checkbox
242
240
  v-model:value="value.disableWebsocketNotification"
243
241
  :mode="mode"
244
242
  :label="t('performance.websocketNotification.checkboxLabel')"
245
- class="mt-10"
243
+ class="mt-10 mb-20"
246
244
  :primary="true"
247
245
  />
248
246
  </div>
249
247
  <!-- Server Side Pagination -->
250
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
251
- <h2 class="mb-20" id="ssp-setting">
248
+ <div class="mt-20">
249
+ <h2 id="ssp-setting">
252
250
  {{ t('performance.serverPagination.label') }}
253
251
  </h2>
254
252
  <p>{{ t('performance.serverPagination.description') }}</p>
@@ -269,9 +267,9 @@ export default {
269
267
  />
270
268
  </Collapse>
271
269
  </div>
272
- <!-- 增量加载 -->
273
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
274
- <h2 class="mb-20">{{ t('performance.incrementalLoad.label') }}</h2>
270
+ <!-- Incremental Loading -->
271
+ <div class="mt-20">
272
+ <h2>{{ t('performance.incrementalLoad.label') }}</h2>
275
273
  <Banner
276
274
  color="warning"
277
275
  >
@@ -301,9 +299,9 @@ export default {
301
299
  />
302
300
  </div>
303
301
  </div>
304
- <!-- 手动刷新 -->
305
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
306
- <h2 class="mb-20" v-t="'performance.manualRefresh.label'" />
302
+ <!-- Enable manual refresh list views -->
303
+ <div class="mt-40">
304
+ <h2 v-t="'performance.manualRefresh.label'" />
307
305
  <Banner
308
306
  color="warning"
309
307
  >
@@ -333,9 +331,9 @@ export default {
333
331
  />
334
332
  </div>
335
333
  </div>
336
- <!-- 资源垃圾回收 -->
337
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
338
- <h2 class="mb-20" v-t="'performance.gc.label'" />
334
+ <!-- Enable GC of resources from store -->
335
+ <div class="mt-40">
336
+ <h2 v-t="'performance.gc.label'" />
339
337
  <Banner
340
338
  color="warning"
341
339
  >
@@ -414,9 +412,9 @@ export default {
414
412
  </div>
415
413
  </div>
416
414
  </div>
417
- <!-- 要求资源组/项目过滤 -->
418
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
419
- <h2 class="mb-20">{{ t('performance.nsFiltering.label') }}</h2>
415
+ <!-- Force NS filter -->
416
+ <div class="mt-40">
417
+ <h2>{{ t('performance.nsFiltering.label') }}</h2>
420
418
  <Banner
421
419
  color="warning"
422
420
  >
@@ -432,9 +430,9 @@ export default {
432
430
  @update:value="compatibleWarning('forceNsFilterV2', $event)"
433
431
  />
434
432
  </div>
435
- <!-- Websocket Web Worker -->
436
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
437
- <h2 class="mb-20">{{ t('performance.advancedWorker.label') }}</h2>
433
+ <!-- Advanced Websocket Worker -->
434
+ <div class="mt-20">
435
+ <h2>{{ t('performance.advancedWorker.label') }}</h2>
438
436
  <Banner
439
437
  color="warning"
440
438
  >
@@ -460,10 +458,10 @@ export default {
460
458
  :label="err"
461
459
  />
462
460
  </template>
463
- <div class="action-btn" v-if="mode === 'edit'">
461
+ <div v-if="mode === 'edit'">
464
462
  <AsyncButton
465
463
  data-testid="performance__save-btn"
466
- class="pull-right"
464
+ class="pull-right mt-20"
467
465
  mode="apply"
468
466
  :disabled="!canSave"
469
467
  @click="save"
@@ -473,17 +471,6 @@ export default {
473
471
  </template>
474
472
 
475
473
  <style scoped lang='scss'>
476
- .action-btn {
477
- padding: 10px 30px;
478
- position: fixed;
479
- bottom: 0;
480
- left: 0;
481
- width: 100%;
482
- background: var(--body-bg);
483
- border-top: 1px solid var(--nav-border);
484
- }
485
-
486
-
487
474
  .overlay {
488
475
  width: 100%;
489
476
  height: 100%;
@@ -493,27 +480,17 @@ export default {
493
480
  background-color: var(--overlay-bg);
494
481
  z-index: 1;
495
482
  }
496
- .ui-perf-setting {
497
- P {
498
- line-height: 1.25;
499
- margin-bottom: 10px;
500
- }
483
+ .ui-perf-setting {
484
+ P {
485
+ line-height: 1.25;
486
+ margin-bottom: 10px;
487
+ }
501
488
 
502
- .underline {
503
- text-decoration: underline;
489
+ .underline {
490
+ text-decoration: underline;
491
+ }
492
+ }
493
+ .input {
494
+ max-width: 25%;
504
495
  }
505
- }
506
- .input {
507
- max-width: 25%;
508
- }
509
- h2{
510
- font-size: 14px;
511
- }
512
-
513
- .excram-list{
514
- font-size: 14px;
515
- line-height: 22px;
516
- margin-bottom: 20px;
517
- font-family: 'Microsoft YaHei';
518
- }
519
496
  </style>
package/pages/home.vue CHANGED
@@ -62,12 +62,7 @@ export default defineComponent({
62
62
  query: { [MODE]: _IMPORT }
63
63
  };
64
64
 
65
- const topLevelPermissions = sessionStorage.getItem('TOPLEVELPERMISSIONS') || ''
66
-
67
- const topLevelPermissionsVis = topLevelPermissions && topLevelPermissions === 'superadmin'
68
-
69
65
  return {
70
- topLevelPermissionsVis,
71
66
  HIDE_HOME_PAGE_CARDS,
72
67
  // Page actions don't change on the Home Page
73
68
  pageActions: [
@@ -478,26 +473,17 @@ export default defineComponent({
478
473
  </script>
479
474
 
480
475
  <template>
481
- <!-- 当 managementReady 为 true 时才显示首页内容 -->
482
476
  <div
483
477
  v-if="managementReady"
484
478
  class="home-page"
485
479
  >
486
-
487
- <!-- 页签标题组件,不显示子页面标题和面包屑 -->
488
480
  <TabTitle
489
- v-if="topLevelPermissionsVis"
490
481
  :show-child="false"
491
482
  :breadcrumb="false"
492
483
  >
493
-
494
- <!-- 页面标题:{vendor} - 首页 -->
495
484
  {{ `${vendor} - ${t('landing.homepage')}` }}
496
485
  </TabTitle>
497
-
498
- <!-- 首页欢迎横幅 -->
499
486
  <BannerGraphic
500
- v-if="topLevelPermissionsVis"
501
487
  :small="true"
502
488
  :title="t('landing.welcomeToRancher', {vendor})"
503
489
  :pref="HIDE_HOME_PAGE_CARDS"
@@ -505,24 +491,13 @@ export default defineComponent({
505
491
  data-testid="home-banner-graphic"
506
492
  />
507
493
  <IndentedPanel class="mt-20 mb-20">
508
-
509
- <!-- 主面板布局 -->
510
494
  <div class="row home-panels">
511
495
  <div class="col main-panel">
512
- <h2 class="mb-20">
513
- {{ t('landing.clusters.title') }}
514
- </h2>
515
-
516
- <!-- 集群列表面板 -->
517
496
  <div class="row panel">
518
-
519
- <!-- 如果是多集群模式(mcm = multi-cluster management) -->
520
497
  <div
521
498
  v-if="mcm"
522
499
  class="col span-12"
523
500
  >
524
-
525
- <!-- 分页资源表格 -->
526
501
  <PaginatedResourceTable
527
502
  v-if="provClusterSchema"
528
503
  :schema="provClusterSchema"
@@ -542,17 +517,27 @@ export default defineComponent({
542
517
  :fetchSecondaryResources="fetchSecondaryResources"
543
518
  :fetchPageSecondaryResources="fetchPageSecondaryResources"
544
519
  >
545
-
546
- <!-- 表头中间:管理、导入、创建按钮 -->
520
+ <template #header-left>
521
+ <div class="row table-heading">
522
+ <h2 class="mb-0">
523
+ {{ t('landing.clusters.title') }}
524
+ </h2>
525
+ <BadgeState
526
+ v-if="clusterCount"
527
+ :label="clusterCount.toString()"
528
+ color="role-tertiary ml-20 mr-20"
529
+ />
530
+ </div>
531
+ </template>
547
532
  <template
548
533
  v-if="canCreateCluster || !!provClusterSchema"
549
- #header-right
534
+ #header-middle
550
535
  >
551
- <div v-if="topLevelPermissionsVis" class="table-heading">
536
+ <div class="table-heading">
552
537
  <router-link
553
538
  v-if="!!provClusterSchema"
554
539
  :to="manageLocation"
555
- class="btn btn-sm role-primary"
540
+ class="btn btn-sm role-secondary"
556
541
  data-testid="cluster-management-manage-button"
557
542
  role="button"
558
543
  :aria-label="t('cluster.manageAction')"
@@ -584,8 +569,6 @@ export default defineComponent({
584
569
  </router-link>
585
570
  </div>
586
571
  </template>
587
-
588
- <!-- 列渲染:集群名称 -->
589
572
  <template #col:name="{row}">
590
573
  <td class="col-name">
591
574
  <div class="list-cluster-name">
@@ -593,8 +576,6 @@ export default defineComponent({
593
576
  v-if="row.mgmt"
594
577
  class="cluster-name"
595
578
  >
596
-
597
- <!-- 如果集群就绪且无错误,跳转到集群 Explorer 页面 -->
598
579
  <router-link
599
580
  v-if="row.mgmt.isReady && !row.hasError"
600
581
  :to="{ name: 'c-cluster-explorer', params: { cluster: row.mgmt.id }}"
@@ -603,17 +584,18 @@ export default defineComponent({
603
584
  >
604
585
  {{ row.nameDisplay }}
605
586
  </router-link>
606
-
607
- <!-- 否则只显示名称 -->
608
587
  <span v-else>{{ row.nameDisplay }}</span>
609
588
  <i
610
589
  v-if="row.unavailableMachines"
611
590
  v-clean-tooltip="row.unavailableMachines"
612
591
  class="conditions-alert-icon icon-alert icon"
613
592
  />
593
+ <i
594
+ v-if="row.isRke1"
595
+ v-clean-tooltip="t('cluster.rke1Unsupported')"
596
+ class="rke1-unsupported-icon icon-warning icon"
597
+ />
614
598
  </p>
615
-
616
- <!-- 集群描述 -->
617
599
  <p
618
600
  v-if="row.description"
619
601
  class="cluster-description"
@@ -623,8 +605,6 @@ export default defineComponent({
623
605
  </div>
624
606
  </td>
625
607
  </template>
626
-
627
- <!-- 列渲染:Kubernetes 版本 + 架构 -->
628
608
  <template #col:kubernetesVersion="{row}">
629
609
  <td class="col-name">
630
610
  <span>
@@ -638,8 +618,6 @@ export default defineComponent({
638
618
  </div>
639
619
  </td>
640
620
  </template>
641
-
642
- <!-- 列渲染:CPU 核数 -->
643
621
  <template #col:cpu="{row}">
644
622
  <td v-if="row.mgmt && cpuAllocatable(row.mgmt)">
645
623
  {{ `${cpuAllocatable(row.mgmt)} ${t('landing.clusters.cores', {count:cpuAllocatable(row.mgmt) })}` }}
@@ -648,8 +626,6 @@ export default defineComponent({
648
626
  &mdash;
649
627
  </td>
650
628
  </template>
651
-
652
- <!-- 列渲染:内存 -->
653
629
  <template #col:memory="{row}">
654
630
  <td v-if="row.mgmt && memoryAllocatable(row.mgmt) && !memoryAllocatable(row.mgmt).match(/^0 [a-zA-z]/)">
655
631
  {{ memoryAllocatable(row.mgmt) }}
@@ -658,20 +634,16 @@ export default defineComponent({
658
634
  &mdash;
659
635
  </td>
660
636
  </template>
661
-
662
- <!-- 列渲染:探索按钮 -->
663
- <template #cell:explorer="{row}">
637
+ <!-- <template #cell:explorer="{row}">
664
638
  <router-link v-if="row && row.isReady" class="btn btn-sm role-primary" :to="{name: 'c-cluster', params: {cluster: row.id}}">
665
639
  {{ t('landing.clusters.explore') }}
666
640
  </router-link>
667
641
  <button v-else :disabled="true" class="btn btn-sm role-primary">
668
642
  {{ t('landing.clusters.explore') }}
669
643
  </button>
670
- </template>
644
+ </template> -->
671
645
  </PaginatedResourceTable>
672
646
  </div>
673
-
674
- <!-- 单集群模式 -->
675
647
  <div
676
648
  v-else
677
649
  class="col span-12"
@@ -680,8 +652,7 @@ export default defineComponent({
680
652
  </div>
681
653
  </div>
682
654
  </div>
683
- <!-- 右侧社区链接面板 -->
684
- <!-- <CommunityLinks class="col span-3 side-panel" /> -->
655
+ <CommunityLinks class="col span-3 side-panel" />
685
656
  </div>
686
657
  </IndentedPanel>
687
658
  </div>
@@ -707,29 +678,13 @@ export default defineComponent({
707
678
  }
708
679
  }
709
680
 
710
- .set-login-page, .whats-new {
711
- > :deep() .banner__content {
712
- display: flex;
713
-
714
- > div {
715
- flex: 1;
716
- }
717
- > a {
718
- align-self: flex-end;
719
- }
720
- }
721
- }
722
-
723
- .banner.set-login-page {
724
- border: 1px solid var(--border);
725
- }
726
681
  .table-heading {
727
682
  align-items: center;
728
683
  display: flex;
729
684
  height: 39px;
730
685
 
731
686
  & > a {
732
- margin-right: 10px;
687
+ margin-left: 10px;
733
688
  }
734
689
  }
735
690
  .panel:not(:first-child) {
@@ -760,7 +715,7 @@ export default defineComponent({
760
715
  align-items: center;
761
716
 
762
717
  // Ensure long cluster names truncate with ellipsis
763
- > A {
718
+ > A, > span {
764
719
  overflow: hidden;
765
720
  text-overflow: ellipsis;
766
721
  }
@@ -777,6 +732,11 @@ export default defineComponent({
777
732
  color: var(--error);
778
733
  margin-left: 4px;
779
734
  }
735
+
736
+ .rke1-unsupported-icon {
737
+ color: var(--warning);
738
+ margin-left: 4px;
739
+ }
780
740
  }
781
741
 
782
742
  // Hide the side-panel showing links when the screen is small
package/pages/prefs.vue CHANGED
@@ -17,7 +17,6 @@ import LabeledSelect from '@shell/components/form/LabeledSelect';
17
17
  import { addObject } from '@shell/utils/array';
18
18
  import LocaleSelector from '@shell/components/LocaleSelector';
19
19
  import TabTitle from '@shell/components/TabTitle';
20
- import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
21
20
 
22
21
  export default {
23
22
  components: {
@@ -44,7 +43,7 @@ export default {
44
43
  ...mapGetters({ hasMultipleLocales: 'i18n/hasMultipleLocales' }),
45
44
 
46
45
  isHarvester() {
47
- return this.isSingleProduct?.productName === HARVESTER;
46
+ return this.isSingleProduct?.productName === 'harvester';
48
47
  },
49
48
 
50
49
  theme: {
@@ -190,13 +189,11 @@ export default {
190
189
  <!-- Language -->
191
190
  <div
192
191
  v-if="hasMultipleLocales && !isHarvester"
193
- class="mb-20 p-20 pb-0"
194
- style="border: 1px solid var(--nav-border);"
192
+ class="mt-10 mb-10"
195
193
  >
196
194
  <h4
197
195
  id="prefs-language"
198
196
  v-t="'prefs.language'"
199
- class="pb-20"
200
197
  />
201
198
  <div class="row">
202
199
  <div class="col span-4">
@@ -208,35 +205,36 @@ export default {
208
205
  </div>
209
206
  </div>
210
207
  <!-- Theme -->
211
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
212
- <h4 v-t="'prefs.theme.label'" class="mb-20" />
208
+ <div class="mt-10 mb-10">
209
+ <h4 v-t="'prefs.theme.label'" />
213
210
  <ButtonGroup
214
211
  v-model:value="theme"
215
212
  data-testid="prefs__themeOptions"
216
213
  :options="themeOptions"
217
214
  />
218
- <!-- <div class="mt-10">
215
+ <div class="mt-10">
219
216
  <t
220
217
  k="prefs.theme.autoDetail"
221
218
  :pm="pm"
222
219
  :am="am"
223
220
  />
224
- </div> -->
221
+ </div>
225
222
  </div>
226
223
  <!-- Login landing page -->
227
224
  <div
228
225
  v-if="!isSingleProduct"
229
- class="mb-20 p-20"
230
- style="border: 1px solid var(--nav-border);"
226
+ class="mt-10 mb-10"
231
227
  >
232
- <h4 v-t="'prefs.landing.label'" class="mb-20" />
228
+ <hr role="none">
229
+ <h4 v-t="'prefs.landing.label'" />
233
230
  <LandingPagePreference
234
231
  data-testid="prefs__landingPagePreference"
235
232
  />
236
233
  </div>
237
234
  <!-- Display Settings -->
238
- <div class="mb-20 p-20" style="border: 1px solid var(--nav-border);">
239
- <h4 v-t="'prefs.displaySettings.title'" class="mb-20" />
235
+ <div class="mt-10 mb-10">
236
+ <hr role="none">
237
+ <h4 v-t="'prefs.displaySettings.title'" />
240
238
  <p class="set-landing-leadin">
241
239
  {{ t('prefs.displaySettings.detail', {}, raw=true) }}
242
240
  </p>
@@ -277,10 +275,10 @@ export default {
277
275
  <!-- Confirmation setting -->
278
276
  <div
279
277
  v-if="!isSingleProduct"
280
- class="col adv-features mb-20 p-20"
281
- style="border: 1px solid var(--nav-border);"
278
+ class="col adv-features mt-10 mb-10"
282
279
  >
283
- <h4 v-t="'prefs.confirmationSetting.title'" class="mb-20" />
280
+ <hr role="none">
281
+ <h4 v-t="'prefs.confirmationSetting.title'" />
284
282
  <Checkbox
285
283
  v-model:value="scalingDownPrompt"
286
284
  data-testid="prefs__scalingDownPrompt"
@@ -289,8 +287,9 @@ export default {
289
287
  />
290
288
  </div>
291
289
  <!-- Advanced Features -->
292
- <div class="col adv-features mb-20 p-20" style="border: 1px solid var(--nav-border);">
293
- <h4 v-t="'prefs.advFeatures.title'" class="mb-20" />
290
+ <div class="col adv-features mt-10 mb-10">
291
+ <hr role="none">
292
+ <h4 v-t="'prefs.advFeatures.title'" />
294
293
  <Checkbox
295
294
  v-model:value="viewInApi"
296
295
  data-testid="prefs__viewInApi"
@@ -326,13 +325,15 @@ export default {
326
325
  <Checkbox
327
326
  v-model:value="pluginDeveloper"
328
327
  :label="t('prefs.advFeatures.pluginDeveloper', {}, true)"
328
+ :tooltip="t('prefs.advFeatures.pluginDeveloperTooltip')"
329
329
  class="mt-20"
330
330
  />
331
331
  </template>
332
332
  </div>
333
333
  <!-- YAML editor key mapping -->
334
- <div class="col mb-20 p-20" style="border: 1px solid var(--nav-border);">
335
- <h4 v-t="'prefs.keymap.label'" class="mb-20" />
334
+ <div class="col mt-10 mb-10">
335
+ <hr role="none">
336
+ <h4 v-t="'prefs.keymap.label'" />
336
337
  <ButtonGroup
337
338
  v-model:value="keymap"
338
339
  data-testid="prefs__keymapOptions"
@@ -342,10 +343,10 @@ export default {
342
343
  <!-- Helm Charts -->
343
344
  <div
344
345
  v-if="!isSingleProduct"
345
- class="col mb-40 p-20"
346
- style="border: 1px solid var(--nav-border);"
346
+ class="col mt-10 mb-40"
347
347
  >
348
- <h4 v-t="'prefs.helm.label'" class="mb-20" />
348
+ <hr role="none">
349
+ <h4 v-t="'prefs.helm.label'" />
349
350
  <ButtonGroup
350
351
  v-model:value="showPreRelease"
351
352
  data-testid="prefs__helmOptions"
@@ -364,7 +365,4 @@ export default {
364
365
  max-width: 80vw;
365
366
  color: var(--input-label);
366
367
  }
367
- h4{
368
- font-size: 14px;
369
- }
370
368
  </style>
@@ -92,10 +92,10 @@ export default {
92
92
  this.info = '';
93
93
  this.warning = this.t('rbac.globalRoles.usersBound', { count: uniqueUsersWithBinds.size });
94
94
  } else {
95
- this.info = this.t('rbac.globalRoles.notBound');
95
+ this.info = this.t('rbac.globalRoles.notBound', null, true);
96
96
  }
97
97
  } else {
98
- this.info = this.t('rbac.globalRoles.notBound');
98
+ this.info = this.t('rbac.globalRoles.notBound', null, true);
99
99
  }
100
100
  } catch (e) {
101
101
  this.info = this.t('rbac.globalRoles.unableToCheck');
package/public/index.html CHANGED
@@ -6,7 +6,7 @@
6
6
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
7
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
8
8
  <link rel="shortcut icon" type="image/x-icon" href="/favicon.png">
9
- <title>HCI</title>
9
+ <title>Rancher</title>
10
10
  </head>
11
11
 
12
12
  <body>
@@ -49,11 +49,11 @@
49
49
 
50
50
  .initial-load-spinner {
51
51
  animation: initial-load-animate 1s infinite linear;
52
- background-color: transparent;
52
+ background-color: var(--loading-bg-color);
53
53
  box-sizing: border-box;
54
- border: 5px solid #1890FF;
54
+ border: 5px solid #008ACF;
55
55
  border-radius: 50%;
56
- border-top-color: transparent;
56
+ border-top-color: #00B2E2;
57
57
  display: inline-block;
58
58
  height: 80px;
59
59
  margin: 0 auto;
@@ -1,6 +1,5 @@
1
1
  <script lang="ts">
2
2
  import { PropType, defineComponent } from 'vue';
3
- import { mapGetters } from 'vuex';
4
3
 
5
4
  interface Badge {
6
5
  stateBackground: string;
@@ -48,15 +47,12 @@ export default defineComponent({
48
47
  },
49
48
 
50
49
  computed: {
51
- ...mapGetters({ t: 'i18n/t' }),
52
50
  bg(): string | null {
53
51
  return this.value?.stateBackground || this.color;
54
52
  },
55
53
 
56
54
  msg(): string | null {
57
- let text = this.value?.stateDisplay || this.label;
58
- let zhText = this.t(`stateLabel.${ text }`)
59
- return zhText ? zhText : text
55
+ return this.value?.stateDisplay || this.label;
60
56
  }
61
57
  }
62
58
  });
@@ -68,7 +64,9 @@ export default defineComponent({
68
64
  v-if="icon"
69
65
  class="icon"
70
66
  :class="{[icon]: true, 'mr-5': !!msg}"
71
- />{{ msg }}
67
+ />
68
+ <span class="msg">{{ msg }}</span>
69
+ <slot name="content-right" />
72
70
  </span>
73
71
  </template>
74
72