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
@@ -142,10 +142,9 @@ export default {
142
142
  :to="{ name: 'c-cluster-auth-user.retention'}"
143
143
  class="btn role-link btn-sm btn-user-retention"
144
144
  data-testid="router-link-user-retention"
145
- style="text-align: left;min-width: auto !important;width: auto;"
146
145
  >
147
- <!-- <i class="icon icon-gear" />
148
- {{ t('user.retention.button.label') }} -->
146
+ <i class="icon icon-gear" />
147
+ {{ t('user.retention.button.label') }}
149
148
  </router-link>
150
149
  </template>
151
150
  </Masthead>
@@ -172,11 +171,8 @@ export default {
172
171
 
173
172
  <style lang="scss">
174
173
  .btn-user-retention {
175
- display: block;
174
+ display: flex;
176
175
  gap: 0.25rem;
177
176
  padding: 0;
178
177
  }
179
- .btn-user-retention:hover {
180
- color: #333 !important;
181
- }
182
178
  </style>
@@ -42,9 +42,6 @@ export default {
42
42
  headers() {
43
43
  const headersFromSchema = this.$store.getters['type-map/headersFor'](this.schema);
44
44
 
45
- [headersFromSchema[0], headersFromSchema[1]] = [headersFromSchema[1], headersFromSchema[0]];
46
- headersFromSchema[0].width = '200px';
47
- headersFromSchema[1].width = '100px';
48
45
  // harvester is reusing this namespace.js to render ns page, we need to make sure harvester backend support quota schema to show this column.
49
46
  if (this.hasHarvesterResourceQuotaSchema && Array.isArray(headersFromSchema) && headersFromSchema.length > 1) {
50
47
  const columnIdx = headersFromSchema.length - 1;
@@ -307,18 +307,19 @@ export default {
307
307
  <router-link
308
308
  v-if="row.mgmt && row.mgmt.isReady && !row.hasError"
309
309
  data-testid="cluster-manager-list-explore-management"
310
+ class="btn btn-sm role-secondary"
310
311
  :to="{name: 'c-cluster', params: {cluster: row.mgmt.id}}"
311
312
  >
312
- <a href="javascript:;">
313
- {{ t('cluster.explore') }}
314
- </a>
313
+ {{ t('cluster.explore') }}
315
314
  </router-link>
316
- <span
317
- data-testid="cluster-manager-list-explore"
315
+ <button
318
316
  v-else
317
+ data-testid="cluster-manager-list-explore"
318
+ :disabled="true"
319
+ class="btn btn-sm role-secondary"
319
320
  >
320
321
  {{ t('cluster.explore') }}
321
- </span>
322
+ </button>
322
323
  </template>
323
324
  </ResourceTable>
324
325
  </div>
package/mixins/brand.js CHANGED
@@ -175,24 +175,7 @@ export default {
175
175
  const vars = createCssVars(color, this.theme, name);
176
176
 
177
177
  for (const prop in vars) {
178
-
179
178
  document.body.style.setProperty(prop, vars[prop]);
180
-
181
- // 主色调hover值动态
182
- if (prop === '--primary-hover-bg') {
183
- // 如果是你要设置透明度的变量,比如 hover
184
- let value = '#E8F4FF';
185
- if (vars[prop]) {
186
- const match = vars[prop].match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
187
- if (match) {
188
- const [_, r, g, b] = match;
189
- value = `rgba(${r}, ${g}, ${b}, 0.15)`;
190
- }
191
- }
192
-
193
- document.body.style.setProperty('--nav-hover-color', vars[prop]);
194
- document.body.style.setProperty('--nav-active', value);
195
- }
196
179
  }
197
180
  },
198
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dashboard-shell-shell",
3
- "version": "3.0.5-test.4",
3
+ "version": "3.0.5-test.6",
4
4
  "description": "Rancher Dashboard Shell",
5
5
  "repository": "https://github.com/rancherlabs/dashboard",
6
6
  "license": "Apache-2.0",
@@ -151,37 +151,21 @@ export default {
151
151
  <template>
152
152
  <Loading v-if="$fetchState.pending" />
153
153
  <div v-else>
154
- <!-- <BackLink :link="backLink" />
154
+ <BackLink :link="backLink" />
155
155
  <h1>
156
156
  <TabTitle breadcrumb="vendor-only">
157
157
  {{ t('accountAndKeys.title') }}
158
158
  </TabTitle>
159
- </h1> -->
160
- <div class="api-key-title mb-20">
161
- {{ t('accountAndKeys.title') }}
162
- </div>
159
+ </h1>
163
160
 
164
- <!-- <h2 v-t="'accountAndKeys.account.title'" /> -->
161
+ <h2 v-t="'accountAndKeys.account.title'" />
165
162
  <div class="account">
166
- <div class="account-title">
167
- {{ t('accountAndKeys.account.title') }}
168
- </div>
169
163
  <Principal
170
164
  :value="principal.id"
171
165
  :use-muted="false"
172
166
  :show-labels="true"
173
- :isShowPass="true"
174
- >
175
- <template #edit>
176
- <span
177
- v-if="canChangePassword"
178
- class="edit-pass-txt"
179
- @click="$refs.promptChangePassword.show(true)"
180
- >修改
181
- </span>
182
- </template>
183
- </Principal>
184
- <!-- <div>
167
+ />
168
+ <div>
185
169
  <button
186
170
  v-if="canChangePassword"
187
171
  role="button"
@@ -193,20 +177,13 @@ export default {
193
177
  >
194
178
  {{ t("accountAndKeys.account.change") }}
195
179
  </button>
196
- </div> -->
180
+ </div>
197
181
  </div>
198
182
 
199
- <!-- <hr role="none"> -->
200
- <div
201
- style=" border: 1px solid #d7d7d7;padding: 20px 20px 0px 20px;"
202
- class="mt-20">
183
+ <hr role="none">
203
184
  <div class="keys-header">
204
185
  <div>
205
- <!-- <h2 v-t="'accountAndKeys.apiKeys.title'" /> -->
206
- <div
207
- v-t="'accountAndKeys.apiKeys.title'"
208
- class="account-title mb-20"
209
- />
186
+ <h2 v-t="'accountAndKeys.apiKeys.title'" />
210
187
  <div class="api-url">
211
188
  <span>{{ t("accountAndKeys.apiKeys.apiEndpoint") }}</span>
212
189
  <CopyToClipboardText
@@ -228,7 +205,7 @@ export default {
228
205
  </div>
229
206
  <div
230
207
  v-if="apiKeySchema"
231
- class="keys mb-20"
208
+ class="keys"
232
209
  >
233
210
  <ResourceTable
234
211
  :schema="apiKeySchema"
@@ -239,20 +216,7 @@ export default {
239
216
  :search="true"
240
217
  :row-actions="true"
241
218
  :table-actions="true"
242
- >
243
- <template #header-right>
244
- <button
245
- v-if="apiKeySchema"
246
- role="button"
247
- :aria-label="t('accountAndKeys.apiKeys.add.label')"
248
- class="btn role-primary add mb-20"
249
- data-testid="account_create_api_keys"
250
- @click="addKey"
251
- >
252
- {{ t('accountAndKeys.apiKeys.add.label') }}
253
- </button>
254
- </template>
255
- </ResourceTable>
219
+ />
256
220
  </div>
257
221
  <div v-else>
258
222
  <Banner
@@ -261,7 +225,6 @@ export default {
261
225
  />
262
226
  </div>
263
227
  </div>
264
- </div>
265
228
  </template>
266
229
 
267
230
  <style lang='scss' scoped>
@@ -270,12 +233,8 @@ export default {
270
233
  }
271
234
 
272
235
  .account {
273
- /* display: flex;
274
- justify-content: space-between */
275
- border: 1px solid #D7D7D7;
276
- padding: 20px;
277
- box-sizing: border-box;
278
-
236
+ display: flex;
237
+ justify-content: space-between
279
238
  }
280
239
 
281
240
  .keys-header {
@@ -288,10 +247,8 @@ export default {
288
247
  .keys {
289
248
  display: flex;
290
249
  flex-direction: column;
291
- margin-top: 20px;
292
250
  .add {
293
251
  align-self: flex-end;
294
- margin-left: 10px
295
252
  }
296
253
  }
297
254
 
@@ -302,23 +259,4 @@ export default {
302
259
  margin-right: 6px;
303
260
  }
304
261
  }
305
- .api-key-title{
306
- font-size: 26px;
307
- /* line-height: 20px; */
308
- font-weight: 400;
309
- }
310
-
311
- .edit-pass-txt{
312
- cursor: pointer;
313
- color: var(--primary);
314
- }
315
-
316
- .table-account{
317
- border: 1px solid #d7d7d7;
318
- }
319
- .account-title{
320
- font-size: 14px;
321
- line-height: 19px;
322
- margin-bottom: 16px;
323
- }
324
262
  </style>
@@ -58,8 +58,7 @@ export default {
58
58
  providerComponents: [],
59
59
  customLoginError: {},
60
60
  firstLogin: false,
61
- vendor: getVendor(),
62
- imgLeft: require('~shell/assets/images/login-left.png')
61
+ vendor: getVendor()
63
62
  };
64
63
  },
65
64
 
@@ -255,13 +254,6 @@ export default {
255
254
 
256
255
  async loginLocal(buttonCb) {
257
256
  try {
258
- // 临时 superadmin 处理
259
- if (this.username === 'super#Admin') {
260
- sessionStorage.setItem('TOPLEVELPERMISSIONS', 'superadmin')
261
- this.username = 'admin'
262
- }
263
-
264
- // 登录
265
257
  await this.$store.dispatch('auth/login', {
266
258
  provider: 'local',
267
259
  body: {
@@ -270,7 +262,6 @@ export default {
270
262
  }
271
263
  });
272
264
 
273
- // 获取当前用户信息
274
265
  const user = await this.$store.dispatch('rancher/findAll', {
275
266
  type: NORMAN.USER,
276
267
  opt: { url: '/v3/users?me=true', load: _MULTI }
@@ -301,17 +292,13 @@ export default {
301
292
  $plugin: this.$store.$plugin
302
293
  });
303
294
 
304
-
305
- // 登录跳转
306
295
  if (this.firstLogin || user[0]?.mustChangePassword) {
307
296
  this.$store.dispatch('auth/setInitialPass', this.password);
308
297
  this.$router.push({ name: 'auth-setup' });
309
298
  } else {
310
299
  this.$router.push({ name: 'index' });
311
300
  }
312
-
313
301
  } catch (err) {
314
- // 登录失败处理
315
302
  this.err = err;
316
303
  this.timedOut = null;
317
304
  this.loggedOut = null;
@@ -332,22 +319,20 @@ export default {
332
319
  v-else
333
320
  class="main-layout login"
334
321
  >
335
- <!-- <TabTitle
322
+ <TabTitle
336
323
  :show-child="false"
337
324
  :breadcrumb="false"
338
325
  >
339
326
  {{ `${vendor} - ${t('login.login')}` }}
340
- </TabTitle> -->
327
+ </TabTitle>
341
328
  <div class="row gutless mb-20">
342
- <div class="col span-7 img-left"></div>
343
- <div class="col span-5 p-20">
344
-
345
- <div class="logo-login" :style="{ 'marginBottom': errorToDisplay? '0px': '30px'}">
346
- <img
347
- src="../../assets/images/login-logo.svg"
348
- alt=""
349
- />
350
- </div>
329
+ <div class="col span-6 p-20">
330
+ <p class="text-center">
331
+ {{ t('login.howdy') }}
332
+ </p>
333
+ <h1 class="text-center login-welcome">
334
+ {{ t('login.welcome', {vendor}) }}
335
+ </h1>
351
336
  <div
352
337
  class="login-messages"
353
338
  data-testid="login__messages"
@@ -358,10 +343,23 @@ export default {
358
343
  :label="errorToDisplay"
359
344
  color="error"
360
345
  />
346
+ <h4
347
+ v-else-if="loggedOut"
348
+ class="text-success text-center"
349
+ >
350
+ {{ loggedOutSuccessMsg }}
351
+ </h4>
352
+ <h4
353
+ v-else-if="timedOut"
354
+ class="text-error text-center"
355
+ >
356
+ {{ t('login.loginAgain') }}
357
+ </h4>
361
358
  </div>
362
359
  <div
363
360
  v-if="firstLogin"
364
361
  class="first-login-message pl-10 pr-10"
362
+ :class="{'mt-30': !hasLoginMessage}"
365
363
  data-testid="first-login-message"
366
364
  >
367
365
  <t
@@ -383,7 +381,7 @@ export default {
383
381
  />
384
382
  </li>
385
383
  <li>
386
- <CopyCode style="background-color: #68686850;border: none;">
384
+ <CopyCode>
387
385
  docker logs <u>container-id</u> 2&gt;&amp;1 | grep "Bootstrap Password:"
388
386
  </CopyCode>
389
387
  </li>
@@ -403,7 +401,7 @@ export default {
403
401
  />
404
402
  </div>
405
403
  <br>
406
- <CopyCode style="background-color: #68686850;border: none;">
404
+ <CopyCode>
407
405
  {{ kubectlCmd }}
408
406
  </CopyCode>
409
407
  <br>
@@ -417,6 +415,7 @@ export default {
417
415
 
418
416
  <div
419
417
  v-if="(!hasLocal || (hasLocal && !showLocal)) && providers.length"
418
+ :class="{'mt-30': !hasLoginMessage}"
420
419
  >
421
420
  <component
422
421
  :is="providerComponents[idx]"
@@ -433,35 +432,23 @@ export default {
433
432
  <template v-if="hasLocal">
434
433
  <form
435
434
  v-if="showLocal"
435
+ :class="{'mt-30': !hasLoginMessage}"
436
436
  @submit.prevent
437
437
  >
438
- <div class="login-form-display-label">
439
- <div class="mb-20 login-input-all-svg">
440
- <img
441
- class="login-svg"
442
- v-if="!firstLogin"
443
- src="../../assets/images/login/user.svg"
444
- alt=""
445
- >
438
+ <div class="span-6 offset-3">
439
+ <div class="mb-20">
446
440
  <LabeledInput
447
441
  v-if="!firstLogin"
448
442
  ref="username"
449
- :placeholder="'请输入用户名'"
450
443
  v-model:value.trim="username"
451
444
  data-testid="local-login-username"
452
445
  :label="t('login.username')"
453
446
  autocomplete="username"
454
447
  />
455
448
  </div>
456
- <div class="login-input-all-svg">
457
- <img
458
- class="login-svg"
459
- src="../../assets/images/login/password.svg"
460
- alt=""
461
- >
449
+ <div class="">
462
450
  <Password
463
451
  ref="password"
464
- :placeholder="'请输入密码'"
465
452
  v-model:value="password"
466
453
  data-testid="local-login-password"
467
454
  :label="t('login.password')"
@@ -469,21 +456,8 @@ export default {
469
456
  />
470
457
  </div>
471
458
  </div>
472
- <div
473
- v-if="!firstLogin"
474
- class="mt-20 remeber-login"
475
- >
476
- <div class="checkbox-login">
477
- <Checkbox
478
- v-model:value="remember"
479
- :label="t('login.remember.label')"
480
- type="checkbox"
481
- />
482
- </div>
483
- </div>
484
459
  <div class="mt-20">
485
460
  <div class="col span-12 text-center">
486
-
487
461
  <AsyncButton
488
462
  id="submit"
489
463
  data-testid="login-submit"
@@ -494,7 +468,16 @@ export default {
494
468
  :error-label="t('asyncButton.default.error')"
495
469
  @click="loginLocal"
496
470
  />
497
-
471
+ <div
472
+ v-if="!firstLogin"
473
+ class="mt-20"
474
+ >
475
+ <Checkbox
476
+ v-model:value="remember"
477
+ :label="t('login.remember.label')"
478
+ type="checkbox"
479
+ />
480
+ </div>
498
481
  </div>
499
482
  </div>
500
483
  </form>
@@ -527,23 +510,24 @@ export default {
527
510
  v-if="showLocaleSelector && hasMultipleLocales && !isHarvester"
528
511
  class="locale-selector"
529
512
  >
530
- <!-- <LocaleSelector
513
+ <LocaleSelector
531
514
  mode="login"
532
- /> -->
515
+ />
533
516
  </div>
534
- <div class="copyright">Copyright 2019-2025 HCI</div>
535
517
  </div>
518
+ <BrandImage
519
+ class="col span-6 landscape"
520
+ data-testid="login-landscape__img"
521
+ file-name="login-landscape.svg"
522
+ :alt="t('login.landscapeAlt')"
523
+ />
536
524
  </div>
537
525
  </div>
538
526
  </template>
539
527
 
540
528
  <style lang="scss" scoped>
541
- .login-username {
542
-
543
- }
544
529
  .login {
545
530
  overflow: hidden;
546
- padding: 0px 10%;
547
531
  position: relative; // Used to keep the locale selector positioned correctly
548
532
 
549
533
  .row {
@@ -566,33 +550,21 @@ export default {
566
550
  align-items: center;
567
551
 
568
552
  .banner {
569
- /* margin: 5px; */
570
-
553
+ margin: 5px;
571
554
  }
572
555
  h4 {
573
556
  margin: 0;
574
557
  }
575
558
  &--hasContent {
576
- /* min-height: 70px; */
577
- /* margin-left: 20px; */
559
+ min-height: 70px;
578
560
  }
579
561
 
580
562
  .text-error, .banner {
581
- max-width: 400px;
582
- justify-content: center;
563
+ max-width: 80%;
583
564
  }
584
565
  }
585
566
 
586
567
  .first-login-message {
587
- background-color: rgba(160, 160, 160, 0.17);
588
- color: #fff;
589
- box-sizing: border-box;
590
- padding: 10px 0;
591
- margin: 0 auto;
592
- margin-top: -20px;
593
- width: 400px;
594
- height: 40%;
595
- overflow-y: scroll;
596
568
  .banner {
597
569
  margin-bottom: 0;
598
570
  border-left: 0;
@@ -602,12 +574,6 @@ export default {
602
574
  padding: 0;
603
575
  }
604
576
  }
605
- ul {
606
- list-style: none;
607
- li{
608
- margin-bottom: 10px;
609
- }
610
- }
611
577
  }
612
578
  }
613
579
 
@@ -620,138 +586,9 @@ export default {
620
586
  height: 100%;
621
587
  place-content: center;
622
588
  }
623
- &>.span-5{
624
- height: 53%;
625
- background-color: rgba(68, 68, 68, 0.17);
626
- position: relative;
627
- }
628
589
  }
629
590
  .locale-selector {
630
591
  position: absolute;
631
592
  bottom: 30px;
632
593
  }
633
-
634
- .login::before {
635
- content: "";
636
- position: absolute;
637
- top: 0;
638
- left: 0;
639
- width: 100%;
640
- height: 100%;
641
- background-image:url('../../assets/images/login-bg.png');
642
- background-size: cover;
643
- background-position: 100%;
644
- z-index: -2;
645
- }
646
- .img-left{
647
- height: 53%;
648
- position: relative;
649
- }
650
- .img-left::before{
651
- content: "";
652
- position: absolute;
653
- top: 0;
654
- left: 0;
655
- width: 100%;
656
- height: 100%;
657
- background-image:url('../../assets/images/login-left.png');
658
- background-size: cover;
659
- background-position: 50%;
660
- z-index: -1;
661
- }
662
-
663
-
664
-
665
- .login-form-display-label {
666
- display: flex;
667
- flex-direction: column;
668
- align-items: center;
669
- &:deep() label{
670
- display: none;
671
- width: 0px;
672
- }
673
- &:deep() .addon{
674
- position: absolute;
675
- top: 16px !important;
676
- right: 24px;
677
- }
678
- }
679
-
680
-
681
- .login-input-all {
682
- &:deep() .labeled-input{
683
- background-color: #fff;
684
- }
685
- }
686
-
687
- .login-input-all-svg{
688
- position: relative;
689
- &:deep() INPUT{
690
- height: 50px;
691
- padding-left: 50px;
692
- font-size: 14px;
693
- color: #333;
694
- background-color: #fff;
695
- }
696
- }
697
- .login-input-all-svg{
698
- &:deep() .addon {
699
- top: 15px !important;
700
- right: 12px !important;
701
- }
702
- }
703
- .login-svg{
704
- position: absolute;
705
- top: 12px;
706
- left: 15px;
707
- width: 24px;
708
- z-index: 1;
709
-
710
- }
711
-
712
- .remeber-login{
713
- display: flex;
714
- justify-content: center
715
-
716
- }
717
- .checkbox-login{
718
- width: 400px;
719
- display: flex;
720
- justify-content: flex-end;
721
- }
722
- .gutless {
723
- &:deep() button{
724
- width: 400px;
725
- height: 50px !important;
726
- border-radius: 4px;
727
- font-size: 14px;
728
- }
729
- }
730
- :deep() .checkbox-label{
731
- color: #fff;
732
- }
733
- .copyright{
734
- color: #fff;
735
- /* font-size: 14px; */
736
- line-height: 15px;
737
- position: absolute;
738
- left: 36%;
739
- width: 100%;
740
- bottom: 10px;
741
- }
742
- .logo-login{
743
- display: flex;
744
- justify-content: center;
745
- margin-top: 30px;
746
-
747
- }
748
-
749
- @media only screen and (max-width: 1439px) {
750
- .logo-login{
751
- display: flex;
752
- justify-content: center;
753
- margin-top: 0px;
754
-
755
- }
756
- }
757
594
  </style>