dashboard-shell-shell 3.0.5-test.5 → 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 (212) 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 +25 -43
  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 +8 -56
  18. package/assets/styles/themes/_dark.scss +0 -3
  19. package/assets/styles/themes/_light.scss +43 -66
  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 -452
  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/CopyToClipboard.vue +0 -15
  34. package/components/CruResource.vue +8 -9
  35. package/components/CruResourceFooter.vue +2 -2
  36. package/components/DashboardOptions.vue +17 -29
  37. package/components/Drawer/Chrome.vue +2 -2
  38. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +23 -23
  39. package/components/Drawer/ResourceDetailDrawer/index.vue +2 -2
  40. package/components/ExplorerMembers.vue +3 -18
  41. package/components/ExplorerProjectsNamespaces.vue +5 -19
  42. package/components/GlobalRoleBindings.vue +48 -112
  43. package/components/GrafanaDashboard.vue +4 -4
  44. package/components/GrowlManager.vue +1 -3
  45. package/components/HardwareResourceGauge.vue +3 -39
  46. package/components/IndentedPanel.vue +10 -4
  47. package/components/InfoBox.vue +3 -3
  48. package/components/InputOrDisplay.vue +2 -28
  49. package/components/LabelValue.vue +1 -20
  50. package/components/ModalWithCard.vue +3 -12
  51. package/components/PodSecurityAdmission.vue +1 -1
  52. package/components/PromptModal.vue +1 -1
  53. package/components/PromptRemove.vue +11 -30
  54. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +3 -1
  55. package/components/Resource/Detail/Metadata/KeyValue.vue +4 -8
  56. package/components/Resource/Detail/Metadata/index.vue +1 -2
  57. package/components/Resource/Detail/TitleBar/Title.vue +3 -4
  58. package/components/Resource/Detail/TitleBar/index.vue +24 -103
  59. package/components/ResourceDetail/Masthead/legacy.vue +38 -181
  60. package/components/ResourceDetail/legacy.vue +14 -32
  61. package/components/ResourceList/Masthead.vue +54 -226
  62. package/components/ResourceList/ResourceLoadingIndicator.vue +2 -5
  63. package/components/ResourceTable.vue +2 -24
  64. package/components/SideNav.vue +20 -74
  65. package/components/SortableTable/THead.vue +3 -33
  66. package/components/SortableTable/index.vue +464 -1017
  67. package/components/SortableTable/paging.js +16 -26
  68. package/components/SortableTable/selection.js +2 -2
  69. package/components/Tabbed/Tab.vue +3 -3
  70. package/components/Tabbed/index.vue +30 -48
  71. package/components/YamlEditor.vue +1 -0
  72. package/components/auth/Principal.vue +13 -37
  73. package/components/auth/RoleDetailEdit.vue +7 -58
  74. package/components/auth/SelectPrincipal.vue +0 -1
  75. package/components/form/ArrayList.vue +33 -41
  76. package/components/form/ArrayListGrouped.vue +2 -10
  77. package/components/form/ArrayListSelect.vue +1 -1
  78. package/components/form/BannerSettings.vue +59 -64
  79. package/components/form/ChangePassword.vue +4 -4
  80. package/components/form/ColorInput.vue +8 -32
  81. package/components/form/Footer.vue +8 -11
  82. package/components/form/InputWithSelect.vue +5 -8
  83. package/components/form/KeyValue.vue +7 -47
  84. package/components/form/LabeledSelect.vue +242 -214
  85. package/components/form/Labels.vue +3 -3
  86. package/components/form/MatchExpressions.vue +7 -24
  87. package/components/form/Members/ClusterPermissionsEditor.vue +2 -1
  88. package/components/form/Members/MembershipEditor.vue +1 -1
  89. package/components/form/NameNsDescription.vue +20 -59
  90. package/components/form/Password.vue +7 -16
  91. package/components/form/PodAffinity.vue +5 -4
  92. package/components/form/ResourceQuota/Namespace.vue +4 -4
  93. package/components/form/ResourceQuota/NamespaceRow.vue +17 -18
  94. package/components/form/ResourceQuota/Project.vue +4 -4
  95. package/components/form/ResourceQuota/ProjectRow.vue +6 -3
  96. package/components/form/Select.vue +2 -5
  97. package/components/form/SimpleSecretSelector.vue +9 -29
  98. package/components/form/Taints.vue +1 -2
  99. package/components/form/UnitInput.vue +3 -8
  100. package/components/form/WorkloadPorts.vue +123 -143
  101. package/components/formatter/BadgeStateFormatter.vue +5 -8
  102. package/components/formatter/LiveDate.vue +3 -3
  103. package/components/nav/Favorite.vue +1 -5
  104. package/components/nav/Group.vue +99 -132
  105. package/components/nav/Header.vue +27 -124
  106. package/components/nav/HeaderPageActionMenu.vue +0 -1
  107. package/components/nav/NamespaceFilter.vue +15 -19
  108. package/components/nav/TopLevelMenu.vue +119 -182
  109. package/components/nav/Type.vue +41 -63
  110. package/composables/useClickOutside.ts +1 -1
  111. package/config/private-label.js +11 -15
  112. package/config/product/auth.js +7 -17
  113. package/config/product/settings.js +9 -19
  114. package/config/settings.ts +0 -28
  115. package/config/table-headers.js +2 -3
  116. package/dialog/ForceMachineRemoveDialog.vue +2 -2
  117. package/dialog/ScalePoolDownDialog.vue +2 -2
  118. package/edit/management.cattle.io.user.vue +4 -17
  119. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
  120. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
  121. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +12 -36
  122. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  123. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
  124. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
  125. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
  126. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
  127. package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
  128. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
  129. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
  130. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
  131. package/edit/namespace.vue +2 -1
  132. package/edit/token.vue +12 -31
  133. package/edit/workload/index.vue +4 -4
  134. package/list/management.cattle.io.setting.vue +13 -22
  135. package/list/management.cattle.io.user.vue +3 -7
  136. package/list/namespace.vue +0 -3
  137. package/list/provisioning.cattle.io.cluster.vue +7 -6
  138. package/mixins/brand.js +0 -17
  139. package/package.json +1 -1
  140. package/pages/account/index.vue +25 -79
  141. package/pages/auth/login.vue +52 -220
  142. package/pages/auth/setup.vue +19 -142
  143. package/pages/c/_cluster/_product/namespaces.vue +5 -5
  144. package/pages/c/_cluster/auth/roles/index.vue +1 -19
  145. package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
  146. package/pages/c/_cluster/settings/banners.vue +102 -174
  147. package/pages/c/_cluster/settings/brand.vue +302 -350
  148. package/pages/c/_cluster/settings/performance.vue +38 -61
  149. package/pages/home.vue +30 -70
  150. package/pages/prefs.vue +25 -27
  151. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  152. package/public/index.html +4 -4
  153. package/rancher-components/BadgeState/BadgeState.vue +55 -38
  154. package/rancher-components/Banner/Banner.vue +8 -12
  155. package/rancher-components/Card/Card.vue +8 -7
  156. package/rancher-components/Form/Checkbox/Checkbox.vue +0 -4
  157. package/rancher-components/Form/LabeledInput/LabeledInput.vue +3 -42
  158. package/rancher-components/Form/Radio/RadioButton.vue +11 -35
  159. package/rancher-components/Form/Radio/RadioGroup.vue +5 -13
  160. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +3 -3
  161. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +0 -1
  162. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +4 -12
  163. package/rancher-components/RcDropdown/RcDropdown.vue +7 -35
  164. package/rancher-components/RcDropdown/RcDropdownItem.vue +2 -2
  165. package/rancher-components/RcDropdown/RcDropdownMenu.vue +6 -12
  166. package/rancher-components/RcDropdown/types.ts +0 -1
  167. package/rancher-components/StringList/StringList.vue +1 -1
  168. package/static/favicon.ico +0 -0
  169. package/static/favicon.png +0 -0
  170. package/static/loading-indicator.html +3 -3
  171. package/store/i18n.js +2 -5
  172. package/store/modal.ts +3 -3
  173. package/store/prefs.js +4 -11
  174. package/store/type-map.js +2 -32
  175. package/types/shell/index.d.ts +67 -74
  176. package/utils/error.js +8 -87
  177. package/utils/router.js +0 -21
  178. package/utils/select.js +3 -26
  179. package/utils/string.js +5 -8
  180. package/utils/title.ts +1 -1
  181. package/assets/icons/demo.css +0 -539
  182. package/assets/icons/demo.css:Zone.Identifier +0 -0
  183. package/assets/icons/demo_index.html +0 -1131
  184. package/assets/icons/demo_index.html:Zone.Identifier +0 -0
  185. package/assets/icons/iconfont.css +0 -216
  186. package/assets/icons/iconfont.css:Zone.Identifier +0 -0
  187. package/assets/icons/iconfont.js +0 -1
  188. package/assets/icons/iconfont.js:Zone.Identifier +0 -0
  189. package/assets/icons/iconfont.json +0 -324
  190. package/assets/icons/iconfont.json:Zone.Identifier +0 -0
  191. package/assets/icons/iconfont.ttf +0 -0
  192. package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
  193. package/assets/icons/iconfont.woff +0 -0
  194. package/assets/icons/iconfont.woff2 +0 -0
  195. package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
  196. package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
  197. package/assets/images/API.svg +0 -3
  198. package/assets/images/action.svg +0 -6
  199. package/assets/images/login/password.svg +0 -20
  200. package/assets/images/login/user.svg +0 -6
  201. package/assets/images/login-bg.png +0 -0
  202. package/assets/images/login-left.png +0 -0
  203. package/assets/images/login-logo.svg +0 -19
  204. package/assets/images/logo.png +0 -0
  205. package/assets/images/pl/logo.png +0 -0
  206. package/assets/images/promp-yellow.svg +0 -5
  207. package/assets/images/user.png +0 -0
  208. package/assets/styles/all.scss +0 -63
  209. package/components/DotState.vue +0 -84
  210. package/components/breadcrumb/index.vue +0 -340
  211. package/pages/account/pri.vue +0 -229
  212. package/utils/errorTranslate.json +0 -1336
@@ -34,8 +34,8 @@ export default {
34
34
  uiBannerLightSetting: fetchOrCreateSetting(this.$store, SETTING.BANNER_LIGHT, ''),
35
35
  uiLoginBackgroundDarkSetting: fetchOrCreateSetting(this.$store, SETTING.LOGIN_BACKGROUND_DARK, ''),
36
36
  uiLoginBackgroundLightSetting: fetchOrCreateSetting(this.$store, SETTING.LOGIN_BACKGROUND_LIGHT, ''),
37
- uiColorSetting: fetchOrCreateSetting(this.$store, SETTING.PRIMARY_COLOR, 'rgb(24, 144, 255)'),
38
- uiLinkColorSetting: fetchOrCreateSetting(this.$store, SETTING.LINK_COLOR, 'rgb(24, 144, 255)'),
37
+ uiColorSetting: fetchOrCreateSetting(this.$store, SETTING.PRIMARY_COLOR, ''),
38
+ uiLinkColorSetting: fetchOrCreateSetting(this.$store, SETTING.LINK_COLOR, ''),
39
39
  uiFaviconSetting: fetchOrCreateSetting(this.$store, SETTING.FAVICON, ''),
40
40
  });
41
41
 
@@ -249,358 +249,329 @@ export default {
249
249
 
250
250
  <template>
251
251
  <Loading v-if="$fetchState.pending" />
252
- <div v-else style="padding-bottom:60px;">
253
-
254
- <!-- 面包屑 -->
255
- <div class="excram-list">全局设置 / <span style="color: #1890FF;">界面</span></div>
252
+ <div v-else>
256
253
  <h1 class="mb-20">
257
254
  <TabTitle>{{ t('branding.label') }}</TabTitle>
258
255
  </h1>
259
- <div style="margin-bottom: 16px;">用于统一配置系统形象与视觉主题,可管理登录页与操作界面的Logo、背景、色彩等核心元素,实现全局自定义UI界面。</div>
260
- <div data-v-d7fbd5e8="" style="width: 110%; height: 1px; background-color: rgb(215, 215, 215); margin-bottom: 16px; margin-left: -20px; margin-right: -20px;"></div>
261
256
  <TypeDescription resource="branding" />
262
257
  <div>
263
- <!-- 系统名称 -->
264
- <div class="row">
265
- <div class="mb-20 pl-20 pt-20" style="border: 1px solid var(--nav-border);width: 100%;">
266
- <h3 class="mb-20">系统名称</h3>
267
- <div class="col span-6">
268
- <LabeledInput
269
- v-model:value="uiPLSetting.value"
270
- :label="'名称'"
258
+ <div class="row mb-20">
259
+ <div class="col span-6">
260
+ <LabeledInput
261
+ v-model:value="uiPLSetting.value"
262
+ :label="t('branding.uiPL.label')"
263
+ :mode="mode"
264
+ :maxlength="100"
265
+ />
266
+ </div>
267
+ </div>
268
+ <h3 class="mt-20 mb-5 pb-5">
269
+ {{ t('branding.logos.label') }}
270
+ </h3>
271
+ <label class="text-label">
272
+ {{ t('branding.logos.tip', {}, true) }}
273
+ </label>
274
+
275
+ <div class="row mt-10 mb-20">
276
+ <Checkbox
277
+ v-model:value="customizeLogo"
278
+ :label="t('branding.logos.useCustom')"
279
+ :mode="mode"
280
+ />
281
+ </div>
282
+
283
+ <div
284
+ v-if="customizeLogo"
285
+ class="row mb-20"
286
+ >
287
+ <div class="col preview-container logo span-6">
288
+ <div class="mb-10">
289
+ <FileImageSelector
290
+ :byte-limit="20000"
291
+ :read-as-data-url="true"
292
+ class="role-secondary"
293
+ :label="t('branding.logos.uploadLight')"
294
+ :mode="mode"
295
+ accept="image/jpeg,image/png,image/svg+xml"
296
+ @error="setError"
297
+ @update:value="updateBranding($event, 'uiLogoLight')"
298
+ />
299
+ </div>
300
+ <SimpleBox
301
+ v-if="uiLogoLight || uiLogoDark"
302
+ class="theme-light mb-10"
303
+ >
304
+ <label class="text-muted">{{ t('branding.logos.lightPreview') }}</label>
305
+ <img
306
+ class="img-preview"
307
+ data-testid="branding-logo-light-preview"
308
+ :src="uiLogoLight ? uiLogoLight : uiLogoDark"
309
+ >
310
+ </SimpleBox>
311
+ </div>
312
+ <div class="col preview-container logo span-6">
313
+ <div class="mb-10">
314
+ <FileImageSelector
315
+ :byte-limit="20000"
316
+ :read-as-data-url="true"
317
+ class="role-secondary"
318
+ :label="t('branding.logos.uploadDark')"
271
319
  :mode="mode"
272
- :maxlength="100"
320
+ accept="image/jpeg,image/png,image/svg+xml"
321
+ @error="setError"
322
+ @update:value="updateBranding($event, 'uiLogoDark')"
273
323
  />
274
324
  </div>
325
+ <SimpleBox
326
+ v-if="uiLogoDark || uiLogoLight"
327
+ class="theme-dark mb-10"
328
+ >
329
+ <label class="text-muted">{{ t('branding.logos.darkPreview') }}</label>
330
+ <img
331
+ class="img-preview"
332
+ data-testid="branding-logo-dark-preview"
333
+ :src="uiLogoDark ? uiLogoDark : uiLogoLight"
334
+ >
335
+ </SimpleBox>
275
336
  </div>
276
337
  </div>
277
338
 
278
- <!-- Logo -->
279
- <div class="mb-20 pl-20" style="border: 1px solid var(--nav-border);">
280
- <h3 class="mt-20 mb-20">
281
- {{ t('branding.logos.label') }}
282
- </h3>
283
- <label class="text-label">
284
- {{ t('branding.logos.tip', {}, true) }}
285
- </label>
286
-
287
- <div class="row mt-10 mb-20">
288
- <Checkbox
289
- v-model:value="customizeLogo"
290
- :label="t('branding.logos.useCustom')"
291
- :mode="mode"
292
- />
293
- </div>
294
-
295
- <div
296
- v-if="customizeLogo"
297
- class="row mb-20"
298
- >
299
- <div class="col preview-container logo span-6">
300
- <div class="mb-10">
301
- <FileImageSelector
302
- :byte-limit="20000"
303
- :read-as-data-url="true"
304
- class="role-secondary"
305
- :label="t('branding.logos.uploadLight')"
306
- :mode="mode"
307
- accept="image/jpeg,image/png,image/svg+xml"
308
- @error="setError"
309
- @update:value="updateBranding($event, 'uiLogoLight')"
310
- />
311
- </div>
312
- <SimpleBox
313
- v-if="uiLogoLight || uiLogoDark"
314
- class="theme-light mb-10"
315
- >
316
- <label class="text-muted">{{ t('branding.logos.lightPreview') }}</label>
317
- <img
318
- class="img-preview"
319
- data-testid="branding-logo-light-preview"
320
- :src="uiLogoLight ? uiLogoLight : uiLogoDark"
321
- >
322
- </SimpleBox>
339
+ <h3 class="mt-20 mb-5 pb-5">
340
+ {{ t('branding.banner.label') }}
341
+ </h3>
342
+ <label class="text-label">
343
+ {{ t('branding.banner.tip', {}, true) }}
344
+ </label>
345
+
346
+ <div class="row mt-10 mb-20">
347
+ <Checkbox
348
+ v-model:value="customizeBanner"
349
+ :label="t('branding.banner.useCustom')"
350
+ :mode="mode"
351
+ />
352
+ </div>
353
+
354
+ <div
355
+ v-if="customizeBanner"
356
+ class="row mb-20"
357
+ >
358
+ <div class="col preview-container banner span-6">
359
+ <div class="mb-10">
360
+ <FileImageSelector
361
+ :byte-limit="200000"
362
+ :read-as-data-url="true"
363
+ class="role-secondary"
364
+ :label="t('branding.banner.uploadLight')"
365
+ :mode="mode"
366
+ accept="image/jpeg,image/png,image/svg+xml"
367
+ @error="setError"
368
+ @update:value="updateBranding($event, 'uiBannerLight')"
369
+ />
323
370
  </div>
324
- <div class="col preview-container logo span-6">
325
- <div class="mb-10">
326
- <FileImageSelector
327
- :byte-limit="20000"
328
- :read-as-data-url="true"
329
- class="role-secondary"
330
- :label="t('branding.logos.uploadDark')"
331
- :mode="mode"
332
- accept="image/jpeg,image/png,image/svg+xml"
333
- @error="setError"
334
- @update:value="updateBranding($event, 'uiLogoDark')"
335
- />
336
- </div>
337
- <SimpleBox
338
- v-if="uiLogoDark || uiLogoLight"
339
- class="theme-dark mb-10"
371
+ <SimpleBox
372
+ v-if="uiBannerLight || uiBannerDark"
373
+ class="theme-light mb-10"
374
+ >
375
+ <label class="text-muted">{{ t('branding.banner.lightPreview') }}</label>
376
+ <img
377
+ class="img-preview"
378
+ data-testid="branding-banner-light-preview"
379
+ :src="uiBannerLight ? uiBannerLight : uiBannerDark"
340
380
  >
341
- <label class="text-muted">{{ t('branding.logos.darkPreview') }}</label>
342
- <img
343
- class="img-preview"
344
- data-testid="branding-logo-dark-preview"
345
- :src="uiLogoDark ? uiLogoDark : uiLogoLight"
346
- >
347
- </SimpleBox>
381
+ </SimpleBox>
382
+ </div>
383
+ <div class="col preview-container banner span-6">
384
+ <div class="mb-10">
385
+ <FileImageSelector
386
+ :byte-limit="200000"
387
+ :read-as-data-url="true"
388
+ class="role-secondary"
389
+ :label="t('branding.banner.uploadDark')"
390
+ :mode="mode"
391
+ accept="image/jpeg,image/png,image/svg+xml"
392
+ @error="setError"
393
+ @update:value="updateBranding($event, 'uiBannerDark')"
394
+ />
348
395
  </div>
396
+ <SimpleBox
397
+ v-if="uiBannerDark || uiBannerLight"
398
+ class="theme-dark mb-10"
399
+ >
400
+ <label class="text-muted">{{ t('branding.banner.darkPreview') }}</label>
401
+ <img
402
+ class="img-preview"
403
+ data-testid="branding-banner-dark-preview"
404
+ :src="uiBannerDark ? uiBannerDark : uiBannerLight"
405
+ >
406
+ </SimpleBox>
349
407
  </div>
350
408
  </div>
351
409
 
352
- <!-- Banner -->
353
- <div class="mb-20 pl-20" style="border: 1px solid var(--nav-border);">
354
- <h3 class="mt-20 mb-20">
355
- {{ t('branding.banner.label') }}
356
- </h3>
357
- <label class="text-label">
358
- {{ t('branding.banner.tip', {}, true) }}
359
- </label>
360
-
361
- <div class="row mt-10 mb-20">
362
- <Checkbox
363
- v-model:value="customizeBanner"
364
- :label="t('branding.banner.useCustom')"
365
- :mode="mode"
366
- />
367
- </div>
368
-
369
- <div
370
- v-if="customizeBanner"
371
- class="row mb-20"
372
- >
373
- <div class="col preview-container banner span-6">
374
- <div class="mb-10">
375
- <FileImageSelector
376
- :byte-limit="200000"
377
- :read-as-data-url="true"
378
- class="role-secondary"
379
- :label="t('branding.banner.uploadLight')"
380
- :mode="mode"
381
- accept="image/jpeg,image/png,image/svg+xml"
382
- @error="setError"
383
- @update:value="updateBranding($event, 'uiBannerLight')"
384
- />
385
- </div>
386
- <SimpleBox
387
- v-if="uiBannerLight || uiBannerDark"
388
- class="theme-light mb-10"
389
- >
390
- <label class="text-muted">{{ t('branding.banner.lightPreview') }}</label>
391
- <img
392
- class="img-preview"
393
- data-testid="branding-banner-light-preview"
394
- :src="uiBannerLight ? uiBannerLight : uiBannerDark"
395
- >
396
- </SimpleBox>
397
- </div>
398
- <div class="col preview-container banner span-6">
399
- <div class="mb-10">
400
- <FileImageSelector
401
- :byte-limit="200000"
402
- :read-as-data-url="true"
403
- class="role-secondary"
404
- :label="t('branding.banner.uploadDark')"
405
- :mode="mode"
406
- accept="image/jpeg,image/png,image/svg+xml"
407
- @error="setError"
408
- @update:value="updateBranding($event, 'uiBannerDark')"
409
- />
410
- </div>
411
- <SimpleBox
412
- v-if="uiBannerDark || uiBannerLight"
413
- class="theme-dark mb-10"
414
- >
415
- <label class="text-muted">{{ t('branding.banner.darkPreview') }}</label>
416
- <img
417
- class="img-preview"
418
- data-testid="branding-banner-dark-preview"
419
- :src="uiBannerDark ? uiBannerDark : uiBannerLight"
420
- >
421
- </SimpleBox>
422
- </div>
423
- </div>
424
- </div>
425
-
426
- <!-- Login Background -->
427
- <div class="mb-20 pl-20" style="border: 1px solid var(--nav-border);">
428
- <h3 class="mt-20 mb-20">
429
- {{ t('branding.loginBackground.label') }}
430
- </h3>
431
- <label class="text-label">
432
- {{ t('branding.loginBackground.tip', {}, true) }}
433
- </label>
434
-
435
- <div class="row mt-10 mb-20">
436
- <Checkbox
437
- v-model:value="customizeLoginBackground"
438
- :label="t('branding.loginBackground.useCustom')"
439
- :mode="mode"
440
- />
441
- </div>
442
-
443
- <div
444
- v-if="customizeLoginBackground"
445
- class="row mb-20"
446
- >
447
- <div class="col preview-container login-background span-6">
448
- <div class="mb-10">
449
- <FileImageSelector
450
- :byte-limit="200000"
451
- :read-as-data-url="true"
452
- class="role-secondary"
453
- :label="t('branding.loginBackground.uploadLight')"
454
- :mode="mode"
455
- accept="image/jpeg,image/png,image/svg+xml"
456
- @error="setError"
457
- @update:value="updateBranding($event, 'uiLoginBackgroundLight')"
458
- />
459
- </div>
460
- <SimpleBox
461
- v-if="uiLoginBackgroundLight || uiLoginBackgroundDark"
462
- class="theme-light mb-10"
463
- >
464
- <label class="text-muted">{{ t('branding.loginBackground.lightPreview') }}</label>
465
- <img
466
- class="img-preview"
467
- data-testid="branding-login-background-light-preview"
468
- :src="uiLoginBackgroundLight ? uiLoginBackgroundLight : uiLoginBackgroundDark"
469
- >
470
- </SimpleBox>
471
- </div>
472
- <div class="col preview-container login-background span-6">
473
- <div class="mb-10">
474
- <FileImageSelector
475
- :byte-limit="200000"
476
- :read-as-data-url="true"
477
- class="role-secondary"
478
- :label="t('branding.loginBackground.uploadDark')"
479
- :mode="mode"
480
- accept="image/jpeg,image/png,image/svg+xml"
481
- @error="setError"
482
- @update:value="updateBranding($event, 'uiLoginBackgroundDark')"
483
- />
484
- </div>
485
- <SimpleBox
486
- v-if="uiLoginBackgroundDark || uiLoginBackgroundLight"
487
- class="theme-dark mb-10"
488
- >
489
- <label class="text-muted">{{ t('branding.loginBackground.darkPreview') }}</label>
490
- <img
491
- class="img-preview"
492
- data-testid="branding-login-background-dark-preview"
493
- :src="uiLoginBackgroundDark ? uiLoginBackgroundDark : uiLoginBackgroundLight"
494
- >
495
- </SimpleBox>
496
- </div>
497
- </div>
498
- </div>
499
-
500
- <!-- 网站图标 -->
501
- <div class="mb-20 pl-20" style="border: 1px solid var(--nav-border);">
502
- <h3 class="mt-20 mb-20">
503
- {{ t('branding.favicon.label') }}
504
- </h3>
505
- <label class="text-label">
506
- {{ t('branding.favicon.tip', {}, true) }}
507
- </label>
508
-
509
- <div class="row mt-10 mb-20">
510
- <Checkbox
511
- v-model:value="customizeFavicon"
512
- :label="t('branding.favicon.useCustom')"
513
- :mode="mode"
514
- />
515
- </div>
516
-
517
- <div
518
- v-if="customizeFavicon"
519
- class="row mb-20"
520
- >
521
- <div class="col favicon-container span-12">
522
- <div class="mb-10">
523
- <FileImageSelector
524
- :byte-limit="20000"
525
- :read-as-data-url="true"
526
- class="role-secondary"
527
- :label="t('branding.favicon.upload')"
528
- :mode="mode"
529
- accept="image/jpeg,image/png,image/svg+xml"
530
- @error="setError"
531
- @update:value="updateBranding($event, 'uiFavicon')"
532
- />
533
- </div>
534
- <SimpleBox v-if="uiFavicon">
535
- <label class="text-muted">{{ t('branding.favicon.preview') }}</label>
536
- <img
537
- class="favicon-preview"
538
- data-testid="branding-favicon-preview"
539
- :src="uiFavicon"
540
- >
541
- </SimpleBox>
542
- </div>
543
- </div>
544
- </div>
545
-
546
- <!-- 主题色 -->
547
- <div class="mb-20 pl-20 pb-20" style="border: 1px solid var(--nav-border);">
548
- <h3 class="mt-20 mb-20">
549
- {{ t('branding.color.label') }}
550
- </h3>
551
- <label class="text-label">
552
- {{ t('branding.color.tip', {}, true) }}
553
- </label>
554
- <div class="row mt-20">
555
- <Checkbox
556
- v-model:value="customizeColor"
557
- :label="t('branding.color.useCustom')"
558
- :mode="mode"
559
- />
560
- </div>
561
- <div
562
- v-if="customizeColor"
563
- class="row mt-20 mb-20"
564
- >
565
- <ColorInput
566
- v-model:value="uiColor"
567
- component-testid="primary"
568
- />
569
- </div>
570
- </div>
571
-
572
- <!-- 链接颜色 -->
573
- <div class="mb-20 pl-20 pb-20" style="border: 1px solid var(--nav-border);">
574
- <h3 class="mt-20 mb-20">
575
- {{ t('branding.linkColor.label') }}
576
- </h3>
577
- <label class="text-label">
578
- {{ t('branding.linkColor.tip', {}, true) }}
579
- </label>
580
- <div class="row mt-20">
581
- <Checkbox
582
- v-model:value="customizeLinkColor"
583
- :label="t('branding.linkColor.useCustom')"
410
+ <h3 class="mt-20 mb-5 pb-5">
411
+ {{ t('branding.loginBackground.label') }}
412
+ </h3>
413
+ <label class="text-label">
414
+ {{ t('branding.loginBackground.tip', {}, true) }}
415
+ </label>
416
+
417
+ <div class="row mt-10 mb-20">
418
+ <Checkbox
419
+ v-model:value="customizeLoginBackground"
420
+ :label="t('branding.loginBackground.useCustom')"
421
+ :mode="mode"
422
+ />
423
+ </div>
424
+
425
+ <div
426
+ v-if="customizeLoginBackground"
427
+ class="row mb-20"
428
+ >
429
+ <div class="col preview-container login-background span-6">
430
+ <div class="mb-10">
431
+ <FileImageSelector
432
+ :byte-limit="200000"
433
+ :read-as-data-url="true"
434
+ class="role-secondary"
435
+ :label="t('branding.loginBackground.uploadLight')"
584
436
  :mode="mode"
437
+ accept="image/jpeg,image/png,image/svg+xml"
438
+ @error="setError"
439
+ @update:value="updateBranding($event, 'uiLoginBackgroundLight')"
585
440
  />
586
441
  </div>
587
- <div
588
- v-if="customizeLinkColor"
589
- class="row mt-20 mb-20"
442
+ <SimpleBox
443
+ v-if="uiLoginBackgroundLight || uiLoginBackgroundDark"
444
+ class="theme-light mb-10"
590
445
  >
591
- <ColorInput
592
- v-model:value="uiLinkColor"
593
- class="col"
594
- component-testid="link"
446
+ <label class="text-muted">{{ t('branding.loginBackground.lightPreview') }}</label>
447
+ <img
448
+ class="img-preview"
449
+ data-testid="branding-login-background-light-preview"
450
+ :src="uiLoginBackgroundLight ? uiLoginBackgroundLight : uiLoginBackgroundDark"
451
+ >
452
+ </SimpleBox>
453
+ </div>
454
+ <div class="col preview-container login-background span-6">
455
+ <div class="mb-10">
456
+ <FileImageSelector
457
+ :byte-limit="200000"
458
+ :read-as-data-url="true"
459
+ class="role-secondary"
460
+ :label="t('branding.loginBackground.uploadDark')"
461
+ :mode="mode"
462
+ accept="image/jpeg,image/png,image/svg+xml"
463
+ @error="setError"
464
+ @update:value="updateBranding($event, 'uiLoginBackgroundDark')"
595
465
  />
596
- <span class="col link-example">
597
- <a :style="customLinkColor">
598
- {{ t('branding.linkColor.example') }}
599
- </a>
600
- </span>
601
466
  </div>
467
+ <SimpleBox
468
+ v-if="uiLoginBackgroundDark || uiLoginBackgroundLight"
469
+ class="theme-dark mb-10"
470
+ >
471
+ <label class="text-muted">{{ t('branding.loginBackground.darkPreview') }}</label>
472
+ <img
473
+ class="img-preview"
474
+ data-testid="branding-login-background-dark-preview"
475
+ :src="uiLoginBackgroundDark ? uiLoginBackgroundDark : uiLoginBackgroundLight"
476
+ >
477
+ </SimpleBox>
602
478
  </div>
479
+ </div>
480
+
481
+ <h3 class="mt-20 mb-5 pb-5">
482
+ {{ t('branding.favicon.label') }}
483
+ </h3>
484
+ <label class="text-label">
485
+ {{ t('branding.favicon.tip', {}, true) }}
486
+ </label>
487
+
488
+ <div class="row mt-10 mb-20">
489
+ <Checkbox
490
+ v-model:value="customizeFavicon"
491
+ :label="t('branding.favicon.useCustom')"
492
+ :mode="mode"
493
+ />
494
+ </div>
603
495
 
496
+ <div
497
+ v-if="customizeFavicon"
498
+ class="row mb-20"
499
+ >
500
+ <div class="col favicon-container span-12">
501
+ <div class="mb-10">
502
+ <FileImageSelector
503
+ :byte-limit="20000"
504
+ :read-as-data-url="true"
505
+ class="role-secondary"
506
+ :label="t('branding.favicon.upload')"
507
+ :mode="mode"
508
+ accept="image/jpeg,image/png,image/svg+xml"
509
+ @error="setError"
510
+ @update:value="updateBranding($event, 'uiFavicon')"
511
+ />
512
+ </div>
513
+ <SimpleBox v-if="uiFavicon">
514
+ <label class="text-muted">{{ t('branding.favicon.preview') }}</label>
515
+ <img
516
+ class="favicon-preview"
517
+ data-testid="branding-favicon-preview"
518
+ :src="uiFavicon"
519
+ >
520
+ </SimpleBox>
521
+ </div>
522
+ </div>
523
+
524
+ <h3 class="mt-40 mb-5 pb-0">
525
+ {{ t('branding.color.label') }}
526
+ </h3>
527
+ <label class="text-label">
528
+ {{ t('branding.color.tip', {}, true) }}
529
+ </label>
530
+ <div class="row mt-20">
531
+ <Checkbox
532
+ v-model:value="customizeColor"
533
+ :label="t('branding.color.useCustom')"
534
+ :mode="mode"
535
+ />
536
+ </div>
537
+ <div
538
+ v-if="customizeColor"
539
+ class="row mt-20 mb-20"
540
+ >
541
+ <ColorInput
542
+ v-model:value="uiColor"
543
+ component-testid="primary"
544
+ />
545
+ </div>
546
+
547
+ <h3 class="mt-40 mb-5 pb-0">
548
+ {{ t('branding.linkColor.label') }}
549
+ </h3>
550
+ <label class="text-label">
551
+ {{ t('branding.linkColor.tip', {}, true) }}
552
+ </label>
553
+ <div class="row mt-20">
554
+ <Checkbox
555
+ v-model:value="customizeLinkColor"
556
+ :label="t('branding.linkColor.useCustom')"
557
+ :mode="mode"
558
+ />
559
+ </div>
560
+ <div
561
+ v-if="customizeLinkColor"
562
+ class="row mt-20 mb-20"
563
+ >
564
+ <ColorInput
565
+ v-model:value="uiLinkColor"
566
+ class="col"
567
+ component-testid="link"
568
+ />
569
+ <span class="col link-example">
570
+ <a :style="customLinkColor">
571
+ {{ t('branding.linkColor.example') }}
572
+ </a>
573
+ </span>
574
+ </div>
604
575
  </div>
605
576
  <template
606
577
  v-for="(err, i) in errors"
@@ -611,10 +582,10 @@ export default {
611
582
  :label="err"
612
583
  />
613
584
  </template>
614
- <div class="action-btn" v-if="mode === 'edit'">
585
+ <div v-if="mode === 'edit'">
615
586
  <AsyncButton
616
587
  component-testid="branding-apply"
617
- class="pull-right"
588
+ class="pull-right mt-20"
618
589
  mode="apply"
619
590
  @click="save"
620
591
  />
@@ -623,16 +594,6 @@ export default {
623
594
  </template>
624
595
 
625
596
  <style scoped lang='scss'>
626
- .action-btn {
627
- padding: 10px 30px;
628
- position: fixed;
629
- bottom: 0;
630
- left: 0;
631
- width: 100%;
632
- background: var(--body-bg);
633
- border-top: 1px solid var(--nav-border);
634
- }
635
-
636
597
  .link-example {
637
598
  display: flex;
638
599
  align-content: center;
@@ -684,13 +645,4 @@ export default {
684
645
  left: 10px;
685
646
  }
686
647
  }
687
- h3 {
688
- font-size: 14px;
689
- }
690
- .excram-list{
691
- font-size: 14px;
692
- line-height: 22px;
693
- margin-bottom: 20px;
694
- font-family: 'Microsoft YaHei';
695
- }
696
648
  </style>