dashboard-shell-shell 0.0.4 → 0.0.1000000000001124
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.
- package/assets/images/action.svg +6 -0
- package/assets/styles/base/_mixins.scss +1 -1
- package/assets/styles/global/_button.scss +17 -10
- package/assets/styles/global/_form.scss +2 -2
- package/assets/styles/global/_labeled-input.scss +6 -3
- package/assets/styles/global/_select.scss +5 -6
- package/assets/styles/global/_tooltip.scss +8 -1
- package/assets/styles/themes/_dark.scss +2 -0
- package/assets/styles/themes/_light.scss +5 -2
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/components/ActionDropdown.vue +1 -0
- package/components/ActionMenuShell.vue +6 -1
- package/components/BrandImage.vue +21 -0
- package/components/ClusterIconMenu.vue +1 -1
- package/components/CodeMirror.vue +1 -0
- package/components/CruResource.vue +1 -0
- package/components/CruResourceFooter.vue +1 -1
- package/components/IndentedPanel.vue +4 -10
- package/components/PromptRemove.vue +2 -2
- package/components/ResourceDetail/Masthead.vue +161 -232
- package/components/ResourceDetail/index.vue +20 -1
- package/components/ResourceList/Masthead-btn.vue +225 -0
- package/components/ResourceList/Masthead.vue +96 -68
- package/components/ResourceList/ResourceLoadingIndicator.vue +5 -2
- package/components/ResourceTable.vue +64 -1
- package/components/SideNav.vue +24 -17
- package/components/SortableTable/THead.vue +6 -0
- package/components/SortableTable/index.vue +474 -366
- package/components/Tabbed/index.vue +4 -5
- package/components/auth/Principal.vue +3 -2
- package/components/auth/RoleDetailEdit.vue +56 -3
- package/components/auth/SelectPrincipal.vue +1 -0
- package/components/form/BannerSettings.vue +18 -16
- package/components/form/ChangePassword.vue +4 -4
- package/components/form/ColorInput.vue +32 -8
- package/components/form/Footer.vue +1 -1
- package/components/form/InputWithSelect.vue +2 -0
- package/components/form/KeyValue.vue +31 -7
- package/components/form/LabeledSelect.vue +178 -178
- package/components/form/Members/ClusterPermissionsEditor.vue +1 -2
- package/components/form/Members/MembershipEditor.vue +1 -1
- package/components/form/NameNsDescription.vue +24 -11
- package/components/form/Password.vue +6 -2
- package/components/form/Select.vue +2 -2
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +45 -24
- package/components/nav/Header.vue +103 -14
- package/components/nav/HeaderPageActionMenu.vue +1 -0
- package/components/nav/TopLevelMenu.vue +63 -23
- package/components/nav/Type.vue +24 -5
- package/composables/useClickOutside.ts +1 -1
- package/config/product/auth.js +1 -1
- package/config/product/explorer.js +1 -1
- package/config/product/settings.js +10 -10
- package/detail/management.cattle.io.user.vue +1 -0
- package/edit/management.cattle.io.user.vue +17 -4
- package/list/management.cattle.io.user.vue +23 -12
- package/list/provisioning.cattle.io.cluster.vue +6 -7
- package/mixins/brand.js +17 -0
- package/package.json +1 -1
- package/pages/auth/login.vue +8 -22
- package/pages/c/_cluster/auth/roles/index.vue +48 -14
- package/pages/c/_cluster/settings/banners.vue +164 -101
- package/pages/c/_cluster/settings/brand.vue +338 -301
- package/pages/c/_cluster/settings/performance.vue +53 -38
- package/pages/home.vue +64 -8
- package/pages/prefs.vue +23 -21
- package/rancher-components/Banner/Banner.vue +4 -0
- package/rancher-components/Card/Card.vue +3 -6
- package/rancher-components/Form/Checkbox/Checkbox.vue +3 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +4 -2
- package/rancher-components/Form/Radio/RadioButton.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +0 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +3 -2
- package/rancher-components/RcDropdown/types.ts +1 -0
- package/scripts/typegen.sh +0 -1
- package/store/i18n.js +5 -5
- package/store/prefs.js +1 -1
- package/store/type-map.js +2 -1
- package/utils/router.js +1 -1
- package/types/resources/fleet.d.ts +0 -57
- package/types/resources/pod-security-admission.ts +0 -36
- package/types/resources/settings.d.ts +0 -93
- package/types/resources/userPreferences.d.ts +0 -13
package/package.json
CHANGED
package/pages/auth/login.vue
CHANGED
|
@@ -328,15 +328,9 @@ export default {
|
|
|
328
328
|
{{ `${vendor} - ${t('login.login')}` }}
|
|
329
329
|
</TabTitle> -->
|
|
330
330
|
<div class="row gutless mb-20">
|
|
331
|
-
<!-- <img :src="imgLeft" alt="" class="col span-7"/> -->
|
|
332
331
|
<div class="col span-7 img-left"></div>
|
|
333
332
|
<div class="col span-5 p-20">
|
|
334
|
-
|
|
335
|
-
{{ t('login.howdy') }}
|
|
336
|
-
</p>
|
|
337
|
-
<h1 class="text-center login-welcome">
|
|
338
|
-
{{ t('login.welcome', {vendor}) }}
|
|
339
|
-
</h1> -->
|
|
333
|
+
|
|
340
334
|
<div class="logo-login" :style="{ 'marginBottom': errorToDisplay? '0px': '30px'}">
|
|
341
335
|
<img
|
|
342
336
|
src="../../assets/images/login-logo.svg"
|
|
@@ -353,18 +347,6 @@ export default {
|
|
|
353
347
|
:label="errorToDisplay"
|
|
354
348
|
color="error"
|
|
355
349
|
/>
|
|
356
|
-
<!-- <h4
|
|
357
|
-
v-else-if="loggedOut"
|
|
358
|
-
class="text-success text-center"
|
|
359
|
-
>
|
|
360
|
-
{{ loggedOutSuccessMsg }}
|
|
361
|
-
</h4>
|
|
362
|
-
<h4
|
|
363
|
-
v-else-if="timedOut"
|
|
364
|
-
class="text-error text-center"
|
|
365
|
-
>
|
|
366
|
-
{{ t('login.loginAgain') }}
|
|
367
|
-
</h4> -->
|
|
368
350
|
</div>
|
|
369
351
|
<div
|
|
370
352
|
v-if="firstLogin"
|
|
@@ -537,9 +519,9 @@ export default {
|
|
|
537
519
|
v-if="showLocaleSelector && hasMultipleLocales && !isHarvester"
|
|
538
520
|
class="locale-selector"
|
|
539
521
|
>
|
|
540
|
-
<LocaleSelector
|
|
522
|
+
<!-- <LocaleSelector
|
|
541
523
|
mode="login"
|
|
542
|
-
/>
|
|
524
|
+
/> -->
|
|
543
525
|
</div>
|
|
544
526
|
<div class="copyright">Copyright 2019-2025 HCI</div>
|
|
545
527
|
</div>
|
|
@@ -548,6 +530,9 @@ export default {
|
|
|
548
530
|
</template>
|
|
549
531
|
|
|
550
532
|
<style lang="scss" scoped>
|
|
533
|
+
.login-username {
|
|
534
|
+
|
|
535
|
+
}
|
|
551
536
|
.login {
|
|
552
537
|
overflow: hidden;
|
|
553
538
|
padding: 0px 10%;
|
|
@@ -664,7 +649,7 @@ export default {
|
|
|
664
649
|
}
|
|
665
650
|
&:deep() .addon{
|
|
666
651
|
position: absolute;
|
|
667
|
-
top: 16px;
|
|
652
|
+
top: 16px !important;
|
|
668
653
|
right: 24px;
|
|
669
654
|
}
|
|
670
655
|
}
|
|
@@ -682,6 +667,7 @@ export default {
|
|
|
682
667
|
height: 50px;
|
|
683
668
|
padding-left: 50px;
|
|
684
669
|
font-size: 14px;
|
|
670
|
+
color: #333;
|
|
685
671
|
background-color: #fff;
|
|
686
672
|
}
|
|
687
673
|
}
|
|
@@ -160,17 +160,6 @@ export default {
|
|
|
160
160
|
{{ t('auth.roleTemplate') }}
|
|
161
161
|
</h1>
|
|
162
162
|
</div>
|
|
163
|
-
<div class="actions-container">
|
|
164
|
-
<div class="actions">
|
|
165
|
-
<router-link
|
|
166
|
-
v-if="canCreate"
|
|
167
|
-
:to="createLocation"
|
|
168
|
-
class="btn role-primary"
|
|
169
|
-
>
|
|
170
|
-
{{ createLabel }}
|
|
171
|
-
</router-link>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
163
|
</header>
|
|
175
164
|
<Tabbed>
|
|
176
165
|
<Tab
|
|
@@ -182,7 +171,22 @@ export default {
|
|
|
182
171
|
<ResourceTable
|
|
183
172
|
:schema="tabs[GLOBAL].schema"
|
|
184
173
|
:rows="globalResources"
|
|
185
|
-
|
|
174
|
+
:main-button-visible="true"
|
|
175
|
+
>
|
|
176
|
+
<template #extraActions>
|
|
177
|
+
<div class="actions-container">
|
|
178
|
+
<div class="actions">
|
|
179
|
+
<router-link
|
|
180
|
+
v-if="canCreate"
|
|
181
|
+
:to="createLocation"
|
|
182
|
+
class="btn role-primary"
|
|
183
|
+
>
|
|
184
|
+
{{ createLabel }}
|
|
185
|
+
</router-link>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
</template>
|
|
189
|
+
</ResourceTable>
|
|
186
190
|
</Tab>
|
|
187
191
|
|
|
188
192
|
<Tab
|
|
@@ -195,7 +199,22 @@ export default {
|
|
|
195
199
|
:schema="tabs[CLUSTER].schema"
|
|
196
200
|
:headers="tabs[CLUSTER].headers"
|
|
197
201
|
:rows="clusterResources"
|
|
198
|
-
|
|
202
|
+
:main-button-visible="true"
|
|
203
|
+
>
|
|
204
|
+
<template #extraActions>
|
|
205
|
+
<div class="actions-container">
|
|
206
|
+
<div class="actions">
|
|
207
|
+
<router-link
|
|
208
|
+
v-if="canCreate"
|
|
209
|
+
:to="createLocation"
|
|
210
|
+
class="btn role-primary"
|
|
211
|
+
>
|
|
212
|
+
{{ createLabel }}
|
|
213
|
+
</router-link>
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
</template>
|
|
217
|
+
</ ResourceTable>
|
|
199
218
|
</Tab>
|
|
200
219
|
|
|
201
220
|
<Tab
|
|
@@ -208,7 +227,22 @@ export default {
|
|
|
208
227
|
:schema="tabs[PROJECT].schema"
|
|
209
228
|
:headers="tabs[PROJECT].headers"
|
|
210
229
|
:rows="namespaceResources"
|
|
211
|
-
|
|
230
|
+
:main-button-visible="true"
|
|
231
|
+
>
|
|
232
|
+
<template #extraActions>
|
|
233
|
+
<div class="actions-container">
|
|
234
|
+
<div class="actions">
|
|
235
|
+
<router-link
|
|
236
|
+
v-if="canCreate"
|
|
237
|
+
:to="createLocation"
|
|
238
|
+
class="btn role-primary"
|
|
239
|
+
>
|
|
240
|
+
{{ createLabel }}
|
|
241
|
+
</router-link>
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
</template>
|
|
245
|
+
</ ResourceTable>
|
|
212
246
|
</Tab>
|
|
213
247
|
</Tabbed>
|
|
214
248
|
</div>
|
|
@@ -195,129 +195,177 @@ export default {
|
|
|
195
195
|
</script>
|
|
196
196
|
|
|
197
197
|
<template>
|
|
198
|
+
|
|
199
|
+
<!-- 如果正在获取数据,显示加载组件 -->
|
|
198
200
|
<Loading v-if="$fetchState.pending" />
|
|
199
|
-
|
|
201
|
+
|
|
202
|
+
<!-- 否则显示主要内容 -->
|
|
203
|
+
<div style="padding: 20px 20px 100px;" v-else>
|
|
204
|
+
<!-- 页面主标题 -->
|
|
200
205
|
<h1 class="mb-20">
|
|
201
206
|
{{ t('banner.label') }}
|
|
202
207
|
</h1>
|
|
203
208
|
<div>
|
|
209
|
+
|
|
210
|
+
<!-- 描述标签 -->
|
|
204
211
|
<label class="text-label">
|
|
205
212
|
{{ t(`advancedSettings.descriptions.${ 'ui-banners' }`, {}, true) }}
|
|
206
213
|
</label>
|
|
207
214
|
|
|
208
|
-
<!--
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
215
|
+
<!-- ===============================
|
|
216
|
+
Header Banner(页头横幅设置)
|
|
217
|
+
=============================== -->
|
|
218
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
219
|
+
<h2 class="mb-20 setting-title">
|
|
220
|
+
{{ t('banner.headerBanner') }}
|
|
221
|
+
|
|
222
|
+
<!-- 如果是单独配置的横幅,则显示锁图标 -->
|
|
223
|
+
<i
|
|
224
|
+
v-if="!!uiBannerIndividual.bannerHeader"
|
|
225
|
+
class="icon icon-lock"
|
|
226
|
+
/>
|
|
227
|
+
</h2>
|
|
228
|
+
|
|
229
|
+
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
230
|
+
<div
|
|
212
231
|
v-if="!!uiBannerIndividual.bannerHeader"
|
|
213
|
-
class="
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
>
|
|
220
|
-
<Banner
|
|
221
|
-
color="warning"
|
|
222
|
-
class="mt-0"
|
|
223
|
-
:label="t('banner.individualSetting', {name: 'ui-banner-header'}, true)"
|
|
224
|
-
/>
|
|
225
|
-
</div>
|
|
226
|
-
<div class="row mb-20">
|
|
227
|
-
<div class="col span-6">
|
|
228
|
-
<Checkbox
|
|
229
|
-
:disabled="!!uiBannerIndividual.bannerHeader"
|
|
230
|
-
:value="bannerVal.showHeader === 'true'"
|
|
231
|
-
:label="t('banner.showHeader')"
|
|
232
|
-
:mode="mode"
|
|
233
|
-
@update:value="e=> bannerVal.showHeader=e.toString()"
|
|
232
|
+
class="row mb-10"
|
|
233
|
+
>
|
|
234
|
+
<Banner
|
|
235
|
+
color="warning"
|
|
236
|
+
class="mt-0"
|
|
237
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-header'}, true)"
|
|
234
238
|
/>
|
|
235
239
|
</div>
|
|
236
|
-
</div>
|
|
237
|
-
<BannerSettings
|
|
238
|
-
v-model:value="bannerVal"
|
|
239
|
-
banner-type="bannerHeader"
|
|
240
|
-
:mode="headerMode"
|
|
241
|
-
/>
|
|
242
240
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
:
|
|
241
|
+
<!-- 是否显示 Header Banner 的开关 -->
|
|
242
|
+
<div class="row mb-20">
|
|
243
|
+
<div class="col span-6">
|
|
244
|
+
<Checkbox
|
|
245
|
+
:disabled="!!uiBannerIndividual.bannerHeader"
|
|
246
|
+
:value="bannerVal.showHeader === 'true'"
|
|
247
|
+
:label="t('banner.showHeader')"
|
|
248
|
+
:mode="mode"
|
|
249
|
+
@update:value="e=> bannerVal.showHeader=e.toString()"
|
|
250
|
+
/>
|
|
251
|
+
</div>
|
|
252
|
+
</div>
|
|
253
|
+
|
|
254
|
+
<!-- 头部横幅的详细设置组件 -->
|
|
255
|
+
<BannerSettings
|
|
256
|
+
v-model:value="bannerVal"
|
|
257
|
+
banner-type="bannerHeader"
|
|
258
|
+
:mode="headerMode"
|
|
259
259
|
/>
|
|
260
260
|
</div>
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
261
|
+
<!-- ===============================
|
|
262
|
+
Footer Banner(页脚横幅设置)
|
|
263
|
+
=============================== -->
|
|
264
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
265
|
+
<h2 class="mb-20 setting-title">
|
|
266
|
+
{{ t('banner.footerBanner') }}
|
|
267
|
+
|
|
268
|
+
<!-- 如果是单独配置的横幅,则显示锁图标 -->
|
|
269
|
+
<i
|
|
270
|
+
v-if="!!uiBannerIndividual.bannerFooter"
|
|
271
|
+
class="icon icon-lock"
|
|
272
|
+
/>
|
|
273
|
+
</h2>
|
|
274
|
+
|
|
275
|
+
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
276
|
+
<div
|
|
277
|
+
v-if="!!uiBannerIndividual.bannerFooter"
|
|
278
|
+
class="row mb-10"
|
|
279
|
+
>
|
|
280
|
+
<Banner
|
|
281
|
+
color="warning"
|
|
282
|
+
class="mt-0"
|
|
283
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-footer'}, true)"
|
|
269
284
|
/>
|
|
270
285
|
</div>
|
|
271
|
-
</div>
|
|
272
|
-
<BannerSettings
|
|
273
|
-
v-model:value="bannerVal"
|
|
274
|
-
banner-type="bannerFooter"
|
|
275
|
-
:mode="footerMode"
|
|
276
|
-
/>
|
|
277
286
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
:
|
|
287
|
+
<!-- 是否显示 Footer Banner 的开关 -->
|
|
288
|
+
<div class="row">
|
|
289
|
+
<div class="col span-6">
|
|
290
|
+
<Checkbox
|
|
291
|
+
:disabled="!!uiBannerIndividual.bannerFooter"
|
|
292
|
+
:value="bannerVal.showFooter === 'true'"
|
|
293
|
+
:label="t('banner.showFooter')"
|
|
294
|
+
:mode="mode"
|
|
295
|
+
@update:value="e=>bannerVal.showFooter = e.toString()"
|
|
296
|
+
/>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
<!-- 页脚横幅的详细设置组件 -->
|
|
301
|
+
<BannerSettings
|
|
302
|
+
v-model:value="bannerVal"
|
|
303
|
+
banner-type="bannerFooter"
|
|
304
|
+
:mode="footerMode"
|
|
294
305
|
/>
|
|
295
306
|
</div>
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
307
|
+
|
|
308
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
309
|
+
<!-- ===============================
|
|
310
|
+
Consent Banner(登录界面同意横幅设置)
|
|
311
|
+
=============================== -->
|
|
312
|
+
<h2 class="mb-20 setting-title">
|
|
313
|
+
{{ t('banner.loginScreenBanner') }}
|
|
314
|
+
<i
|
|
315
|
+
v-if="!!uiBannerIndividual.bannerConsent"
|
|
316
|
+
class="icon icon-lock"
|
|
317
|
+
/>
|
|
318
|
+
</h2>
|
|
319
|
+
|
|
320
|
+
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
321
|
+
<div
|
|
322
|
+
v-if="!!uiBannerIndividual.bannerConsent"
|
|
323
|
+
class="row mb-10"
|
|
324
|
+
>
|
|
325
|
+
<Banner
|
|
326
|
+
color="warning"
|
|
327
|
+
class="mt-0"
|
|
328
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-login-consent'}, true)"
|
|
304
329
|
/>
|
|
305
330
|
</div>
|
|
331
|
+
|
|
332
|
+
<!-- 是否显示 Consent Banner 的开关 -->
|
|
333
|
+
<div class="row mb-20">
|
|
334
|
+
<div class="col span-6">
|
|
335
|
+
<Checkbox
|
|
336
|
+
:disabled="!!uiBannerIndividual.bannerConsent"
|
|
337
|
+
:value="bannerVal.showConsent === 'true'"
|
|
338
|
+
:label="t('banner.showConsent')"
|
|
339
|
+
:mode="mode"
|
|
340
|
+
@update:value="e => bannerVal.showConsent = e.toString()"
|
|
341
|
+
/>
|
|
342
|
+
</div>
|
|
343
|
+
</div>
|
|
344
|
+
|
|
345
|
+
<!-- 登录界面同意横幅的详细设置组件 -->
|
|
346
|
+
<BannerSettings
|
|
347
|
+
v-model:value="bannerVal"
|
|
348
|
+
banner-type="bannerConsent"
|
|
349
|
+
:mode="consentMode"
|
|
350
|
+
/>
|
|
351
|
+
</div>
|
|
352
|
+
|
|
353
|
+
<!-- ===============================
|
|
354
|
+
登录错误通知设置
|
|
355
|
+
=============================== -->
|
|
356
|
+
<div class="mt-20" style="padding: 20px;border: 1px solid var(--nav-border);">
|
|
357
|
+
<h2 class="mb-20 setting-title">
|
|
358
|
+
{{ t('notifications.loginError.header') }}
|
|
359
|
+
</h2>
|
|
360
|
+
<NotificationSettings
|
|
361
|
+
v-model:value="bannerVal.loginError"
|
|
362
|
+
:mode="mode"
|
|
363
|
+
:label="t('notifications.loginError.messageLabel')"
|
|
364
|
+
/>
|
|
306
365
|
</div>
|
|
307
|
-
<BannerSettings
|
|
308
|
-
v-model:value="bannerVal"
|
|
309
|
-
banner-type="bannerConsent"
|
|
310
|
-
:mode="consentMode"
|
|
311
|
-
/>
|
|
312
|
-
<h2 class="mt-40 mb-40">
|
|
313
|
-
{{ t('notifications.loginError.header') }}
|
|
314
|
-
</h2>
|
|
315
|
-
<NotificationSettings
|
|
316
|
-
v-model:value="bannerVal.loginError"
|
|
317
|
-
:mode="mode"
|
|
318
|
-
:label="t('notifications.loginError.messageLabel')"
|
|
319
|
-
/>
|
|
320
366
|
</div>
|
|
367
|
+
|
|
368
|
+
<!-- 全局错误提示 -->
|
|
321
369
|
<template
|
|
322
370
|
v-for="(err, i) in errors"
|
|
323
371
|
:key="i"
|
|
@@ -327,9 +375,11 @@ export default {
|
|
|
327
375
|
:label="err"
|
|
328
376
|
/>
|
|
329
377
|
</template>
|
|
330
|
-
|
|
378
|
+
|
|
379
|
+
<!-- 编辑模式下显示“应用”按钮 -->
|
|
380
|
+
<div class="action-btn" v-if="mode === 'edit'">
|
|
331
381
|
<AsyncButton
|
|
332
|
-
class="pull-right
|
|
382
|
+
class="pull-right"
|
|
333
383
|
mode="apply"
|
|
334
384
|
@click="save"
|
|
335
385
|
/>
|
|
@@ -338,6 +388,16 @@ export default {
|
|
|
338
388
|
</template>
|
|
339
389
|
|
|
340
390
|
<style scoped lang='scss'>
|
|
391
|
+
.action-btn {
|
|
392
|
+
padding: 10px 30px;
|
|
393
|
+
position: fixed;
|
|
394
|
+
bottom: 0;
|
|
395
|
+
left: 0;
|
|
396
|
+
width: 100%;
|
|
397
|
+
background: var(--body-bg);
|
|
398
|
+
border-top: 1px solid var(--nav-border);
|
|
399
|
+
}
|
|
400
|
+
|
|
341
401
|
.overlay {
|
|
342
402
|
width: 100%;
|
|
343
403
|
height: 100%;
|
|
@@ -353,6 +413,9 @@ export default {
|
|
|
353
413
|
h2.setting-title {
|
|
354
414
|
align-items: center;
|
|
355
415
|
display: flex;
|
|
416
|
+
height: 40px;
|
|
417
|
+
line-height: 40px;
|
|
418
|
+
font-size: 14px;
|
|
356
419
|
|
|
357
420
|
> i {
|
|
358
421
|
padding-left: 5px;
|