dashboard-shell-shell 1.0.1000000117 → 1.0.1000000118
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/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +1 -1
- package/assets/styles/global/_button.scss +10 -17
- package/assets/styles/global/_form.scss +2 -2
- package/assets/styles/global/_labeled-input.scss +2 -6
- package/assets/styles/global/_select.scss +7 -6
- package/assets/styles/global/_table.scss +2 -3
- package/assets/styles/global/_tooltip.scss +1 -8
- package/assets/styles/themes/_dark.scss +0 -2
- package/assets/styles/themes/_light.scss +2 -5
- package/assets/styles/vendor/vue-select.scss +1 -2
- package/assets/translations/en-us.yaml +3 -1
- package/assets/translations/zh-hans.yaml +28 -51
- package/components/ActionDropdown.vue +0 -1
- package/components/ActionMenuShell.vue +3 -6
- package/components/BrandImage.vue +0 -22
- package/components/ClusterIconMenu.vue +1 -1
- package/components/CodeMirror.vue +0 -1
- package/components/CruResource.vue +1 -1
- package/components/CruResourceFooter.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +24 -4
- package/components/GlobalRoleBindings.vue +48 -112
- package/components/IndentedPanel.vue +10 -4
- package/components/PromptRemove.vue +3 -3
- package/components/ResourceDetail/Masthead.vue +242 -190
- package/components/ResourceDetail/index.vue +5 -20
- package/components/ResourceList/Masthead.vue +84 -146
- package/components/ResourceList/ResourceLoadingIndicator.vue +2 -5
- package/components/ResourceTable.vue +1 -76
- package/components/SideNav.vue +29 -66
- package/components/SortableTable/THead.vue +0 -6
- package/components/SortableTable/index.vue +388 -481
- package/components/Tabbed/index.vue +5 -4
- package/components/auth/Principal.vue +2 -3
- package/components/auth/RoleDetailEdit.vue +5 -58
- package/components/auth/SelectPrincipal.vue +0 -1
- package/components/form/BannerSettings.vue +16 -18
- package/components/form/ChangePassword.vue +4 -4
- package/components/form/ColorInput.vue +8 -32
- package/components/form/Footer.vue +1 -1
- package/components/form/InputWithSelect.vue +0 -2
- package/components/form/KeyValue.vue +7 -31
- package/components/form/LabeledSelect.vue +178 -178
- package/components/form/Members/ClusterPermissionsEditor.vue +2 -1
- package/components/form/Members/MembershipEditor.vue +1 -1
- package/components/form/NameNsDescription.vue +11 -24
- package/components/form/Password.vue +2 -6
- package/components/form/ResourceQuota/Namespace.vue +1 -1
- package/components/form/ResourceQuota/NamespaceRow.vue +10 -13
- package/components/form/ResourceQuota/ProjectRow.vue +1 -0
- package/components/form/Select.vue +2 -2
- package/components/nav/Favorite.vue +1 -5
- package/components/nav/Group.vue +23 -69
- package/components/nav/Header.vue +17 -82
- package/components/nav/HeaderPageActionMenu.vue +0 -1
- package/components/nav/NamespaceFilter.vue +3 -0
- package/components/nav/TopLevelMenu.vue +119 -182
- package/components/nav/Type.vue +11 -48
- package/components/rancherResourceDetail/Masthead.vue +769 -0
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
- package/components/rancherResourceDetail/index.vue +591 -0
- package/components/rancherResourceList/Masthead.vue +375 -0
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
- package/components/rancherResourceList/index.vue +307 -0
- package/components/rancherResourceList/resource-list.config.js +7 -0
- package/components/rancherResourceTable.vue +783 -0
- package/components/rancherSortableTable/THead.vue +561 -0
- package/components/rancherSortableTable/actions.js +153 -0
- package/components/rancherSortableTable/advanced-filtering.js +272 -0
- package/components/rancherSortableTable/debug.js +117 -0
- package/components/rancherSortableTable/filtering.js +290 -0
- package/components/rancherSortableTable/grouping.js +48 -0
- package/components/rancherSortableTable/index.vue +2712 -0
- package/components/rancherSortableTable/paging.js +155 -0
- package/components/rancherSortableTable/selection.js +629 -0
- package/components/rancherSortableTable/sortable-config.ts +4 -0
- package/components/rancherSortableTable/sorting.js +129 -0
- package/composables/useClickOutside.ts +1 -1
- package/config/product/auth.js +7 -16
- package/config/product/explorer.js +1 -1
- package/config/product/settings.js +8 -17
- package/config/settings.ts +0 -28
- package/edit/management.cattle.io.user.vue +4 -17
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/token.vue +1 -1
- package/list/harvesterhci.io.management.cluster.vue +0 -17
- package/list/management.cattle.io.setting.vue +13 -22
- package/list/management.cattle.io.user.vue +14 -25
- package/list/provisioning.cattle.io.cluster.vue +7 -6
- package/mixins/brand.js +0 -17
- package/package.json +1 -1
- package/pages/auth/login.vue +29 -84
- package/pages/c/_cluster/auth/roles/index.vue +14 -61
- package/pages/c/_cluster/settings/banners.vue +101 -174
- package/pages/c/_cluster/settings/brand.vue +301 -348
- package/pages/c/_cluster/settings/performance.vue +38 -61
- package/pages/home.vue +21 -70
- package/pages/prefs.vue +23 -25
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/promptRemove/mixin/roleDeletionCheck.js +2 -2
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +0 -0
- package/scripts/extension/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +0 -0
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +0 -0
- package/scripts/publish-shell.sh +60 -86
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/typegen.sh +28 -44
- package/store/i18n.js +5 -5
- package/store/prefs.js +5 -17
- package/store/type-map.js +1 -2
- package/types/cloud-shell/index.d.ts +11014 -0
- package/types/shell/index.d.ts +1 -1
- package/utils/error.js +0 -4
- package/utils/router.js +3 -3
- package/vue.config.js +6 -1
- package/assets/images/action.svg +0 -6
- package/assets/images/pl/logo.png +0 -0
- /package/components/{ResourceList → rancherResourceList}/Masthead-btn.vue +0 -0
package/pages/auth/login.vue
CHANGED
|
@@ -33,7 +33,6 @@ import Loading from '@shell/components/Loading';
|
|
|
33
33
|
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
34
34
|
import TabTitle from '@shell/components/TabTitle.vue';
|
|
35
35
|
import { harvester2cloud } from '@shell/utils/router'
|
|
36
|
-
import { AFTER_LOGIN_ROUTE } from '@shell/store/prefs';
|
|
37
36
|
|
|
38
37
|
export default {
|
|
39
38
|
name: 'Login',
|
|
@@ -65,10 +64,6 @@ export default {
|
|
|
65
64
|
};
|
|
66
65
|
},
|
|
67
66
|
|
|
68
|
-
created () {
|
|
69
|
-
this.$store.dispatch('i18n/switchTo', 'zh-hans');
|
|
70
|
-
},
|
|
71
|
-
|
|
72
67
|
computed: {
|
|
73
68
|
...mapGetters(['isSingleProduct']),
|
|
74
69
|
...mapGetters({ t: 'i18n/t', hasMultipleLocales: 'i18n/hasMultipleLocales' }),
|
|
@@ -174,7 +169,7 @@ export default {
|
|
|
174
169
|
this.focusSomething();
|
|
175
170
|
});
|
|
176
171
|
},
|
|
177
|
-
|
|
172
|
+
|
|
178
173
|
methods: {
|
|
179
174
|
async loadInitialSettings() {
|
|
180
175
|
let firstLoginSetting, plSetting, brand;
|
|
@@ -261,13 +256,6 @@ export default {
|
|
|
261
256
|
|
|
262
257
|
async loginLocal(buttonCb) {
|
|
263
258
|
try {
|
|
264
|
-
// 临时 superadmin 处理
|
|
265
|
-
if (this.username === 'super#Admin') {
|
|
266
|
-
sessionStorage.setItem('TOPLEVELPERMISSIONS', 'superadmin')
|
|
267
|
-
this.username = 'admin'
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// 登录
|
|
271
259
|
await this.$store.dispatch('auth/login', {
|
|
272
260
|
provider: 'local',
|
|
273
261
|
body: {
|
|
@@ -276,7 +264,6 @@ export default {
|
|
|
276
264
|
}
|
|
277
265
|
});
|
|
278
266
|
|
|
279
|
-
// 获取当前用户信息
|
|
280
267
|
const user = await this.$store.dispatch('rancher/findAll', {
|
|
281
268
|
type: NORMAN.USER,
|
|
282
269
|
opt: { url: '/v3/users?me=true', load: _MULTI }
|
|
@@ -307,51 +294,13 @@ export default {
|
|
|
307
294
|
$plugin: this.$store.$plugin
|
|
308
295
|
});
|
|
309
296
|
|
|
310
|
-
// 等待集群列表加载完成,确保 defaultClusterId 可用
|
|
311
|
-
await this.$store.dispatch('loadManagement'); // 确保管理模块初始化
|
|
312
|
-
const clusterId = this.$store.getters['defaultClusterId'];
|
|
313
|
-
|
|
314
|
-
let userRoute = {
|
|
315
|
-
name: 'c-cluster-product-resource',
|
|
316
|
-
params: {
|
|
317
|
-
cluster: '_',
|
|
318
|
-
product: 'auth',
|
|
319
|
-
resource: 'management.cattle.io.user',
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// 构造 Harvester 路由
|
|
324
|
-
let harvesterRoute = null;
|
|
325
|
-
|
|
326
|
-
if (clusterId) {
|
|
327
|
-
harvesterRoute = {
|
|
328
|
-
name: 'c-cluster-product-resource',
|
|
329
|
-
params: {
|
|
330
|
-
cluster: clusterId,
|
|
331
|
-
product: 'harvesterManager',
|
|
332
|
-
resource: 'harvesterhci.io.management.cluster'
|
|
333
|
-
}
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
// 写入 AFTER_LOGIN_ROUTE(复用页面设置登录首页逻辑)
|
|
337
|
-
await this.$store.dispatch('prefs/set', {
|
|
338
|
-
key: AFTER_LOGIN_ROUTE,
|
|
339
|
-
value: harvesterRoute || userRoute
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
// 登录跳转
|
|
346
297
|
if (this.firstLogin || user[0]?.mustChangePassword) {
|
|
347
298
|
this.$store.dispatch('auth/setInitialPass', this.password);
|
|
348
299
|
this.$router.push({ name: 'auth-setup' });
|
|
349
300
|
} else {
|
|
350
|
-
this.$router.push(
|
|
301
|
+
this.$router.push({ name: 'index' });
|
|
351
302
|
}
|
|
352
|
-
|
|
353
303
|
} catch (err) {
|
|
354
|
-
// 登录失败处理
|
|
355
304
|
this.err = err;
|
|
356
305
|
this.timedOut = null;
|
|
357
306
|
this.loggedOut = null;
|
|
@@ -379,9 +328,15 @@ export default {
|
|
|
379
328
|
{{ `${vendor} - ${t('login.login')}` }}
|
|
380
329
|
</TabTitle> -->
|
|
381
330
|
<div class="row gutless mb-20">
|
|
331
|
+
<!-- <img :src="imgLeft" alt="" class="col span-7"/> -->
|
|
382
332
|
<div class="col span-7 img-left"></div>
|
|
383
333
|
<div class="col span-5 p-20">
|
|
384
|
-
|
|
334
|
+
<!-- <p class="text-center">
|
|
335
|
+
{{ t('login.howdy') }}
|
|
336
|
+
</p>
|
|
337
|
+
<h1 class="text-center login-welcome">
|
|
338
|
+
{{ t('login.welcome', {vendor}) }}
|
|
339
|
+
</h1> -->
|
|
385
340
|
<div class="logo-login" :style="{ 'marginBottom': errorToDisplay? '0px': '30px'}">
|
|
386
341
|
<img
|
|
387
342
|
src="../../assets/images/login-logo.svg"
|
|
@@ -398,10 +353,23 @@ export default {
|
|
|
398
353
|
:label="errorToDisplay"
|
|
399
354
|
color="error"
|
|
400
355
|
/>
|
|
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> -->
|
|
401
368
|
</div>
|
|
402
369
|
<div
|
|
403
370
|
v-if="firstLogin"
|
|
404
371
|
class="first-login-message pl-10 pr-10"
|
|
372
|
+
:class="{'mt-30': !hasLoginMessage}"
|
|
405
373
|
data-testid="first-login-message"
|
|
406
374
|
>
|
|
407
375
|
<t
|
|
@@ -423,7 +391,7 @@ export default {
|
|
|
423
391
|
/>
|
|
424
392
|
</li>
|
|
425
393
|
<li>
|
|
426
|
-
<CopyCode
|
|
394
|
+
<CopyCode>
|
|
427
395
|
docker logs <u>container-id</u> 2>&1 | grep "Bootstrap Password:"
|
|
428
396
|
</CopyCode>
|
|
429
397
|
</li>
|
|
@@ -443,7 +411,7 @@ export default {
|
|
|
443
411
|
/>
|
|
444
412
|
</div>
|
|
445
413
|
<br>
|
|
446
|
-
<CopyCode
|
|
414
|
+
<CopyCode>
|
|
447
415
|
{{ kubectlCmd }}
|
|
448
416
|
</CopyCode>
|
|
449
417
|
<br>
|
|
@@ -457,6 +425,7 @@ export default {
|
|
|
457
425
|
|
|
458
426
|
<div
|
|
459
427
|
v-if="(!hasLocal || (hasLocal && !showLocal)) && providers.length"
|
|
428
|
+
:class="{'mt-30': !hasLoginMessage}"
|
|
460
429
|
>
|
|
461
430
|
<component
|
|
462
431
|
:is="providerComponents[idx]"
|
|
@@ -473,6 +442,7 @@ export default {
|
|
|
473
442
|
<template v-if="hasLocal">
|
|
474
443
|
<form
|
|
475
444
|
v-if="showLocal"
|
|
445
|
+
:class="{'mt-30': !hasLoginMessage}"
|
|
476
446
|
@submit.prevent
|
|
477
447
|
>
|
|
478
448
|
<div class="login-form-display-label">
|
|
@@ -567,9 +537,9 @@ export default {
|
|
|
567
537
|
v-if="showLocaleSelector && hasMultipleLocales && !isHarvester"
|
|
568
538
|
class="locale-selector"
|
|
569
539
|
>
|
|
570
|
-
|
|
540
|
+
<LocaleSelector
|
|
571
541
|
mode="login"
|
|
572
|
-
/>
|
|
542
|
+
/>
|
|
573
543
|
</div>
|
|
574
544
|
<div class="copyright">Copyright 2019-2025 HCI</div>
|
|
575
545
|
</div>
|
|
@@ -578,9 +548,6 @@ export default {
|
|
|
578
548
|
</template>
|
|
579
549
|
|
|
580
550
|
<style lang="scss" scoped>
|
|
581
|
-
.login-username {
|
|
582
|
-
|
|
583
|
-
}
|
|
584
551
|
.login {
|
|
585
552
|
overflow: hidden;
|
|
586
553
|
padding: 0px 10%;
|
|
@@ -624,15 +591,6 @@ export default {
|
|
|
624
591
|
}
|
|
625
592
|
|
|
626
593
|
.first-login-message {
|
|
627
|
-
background-color: rgba(160, 160, 160, 0.17);
|
|
628
|
-
color: #fff;
|
|
629
|
-
box-sizing: border-box;
|
|
630
|
-
padding: 10px 0;
|
|
631
|
-
margin: 0 auto;
|
|
632
|
-
margin-top: -20px;
|
|
633
|
-
width: 400px;
|
|
634
|
-
height: 40%;
|
|
635
|
-
overflow-y: scroll;
|
|
636
594
|
.banner {
|
|
637
595
|
margin-bottom: 0;
|
|
638
596
|
border-left: 0;
|
|
@@ -642,12 +600,6 @@ export default {
|
|
|
642
600
|
padding: 0;
|
|
643
601
|
}
|
|
644
602
|
}
|
|
645
|
-
ul {
|
|
646
|
-
list-style: none;
|
|
647
|
-
li{
|
|
648
|
-
margin-bottom: 10px;
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
603
|
}
|
|
652
604
|
}
|
|
653
605
|
|
|
@@ -712,7 +664,7 @@ export default {
|
|
|
712
664
|
}
|
|
713
665
|
&:deep() .addon{
|
|
714
666
|
position: absolute;
|
|
715
|
-
top: 16px
|
|
667
|
+
top: 16px;
|
|
716
668
|
right: 24px;
|
|
717
669
|
}
|
|
718
670
|
}
|
|
@@ -730,16 +682,9 @@ export default {
|
|
|
730
682
|
height: 50px;
|
|
731
683
|
padding-left: 50px;
|
|
732
684
|
font-size: 14px;
|
|
733
|
-
color: #333;
|
|
734
685
|
background-color: #fff;
|
|
735
686
|
}
|
|
736
687
|
}
|
|
737
|
-
.login-input-all-svg{
|
|
738
|
-
&:deep() .addon {
|
|
739
|
-
top: 15px !important;
|
|
740
|
-
right: 12px !important;
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
688
|
.login-svg{
|
|
744
689
|
position: absolute;
|
|
745
690
|
top: 12px;
|
|
@@ -156,11 +156,20 @@ export default {
|
|
|
156
156
|
<div v-else>
|
|
157
157
|
<header>
|
|
158
158
|
<div class="title">
|
|
159
|
-
<div class="excram-list">用户 & 认证 / <span style="color: #1890FF;">角色模板</span></div>
|
|
160
159
|
<h1 class="m-0">
|
|
161
160
|
{{ t('auth.roleTemplate') }}
|
|
162
161
|
</h1>
|
|
163
|
-
|
|
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>
|
|
164
173
|
</div>
|
|
165
174
|
</header>
|
|
166
175
|
<Tabbed>
|
|
@@ -173,22 +182,7 @@ export default {
|
|
|
173
182
|
<ResourceTable
|
|
174
183
|
:schema="tabs[GLOBAL].schema"
|
|
175
184
|
:rows="globalResources"
|
|
176
|
-
|
|
177
|
-
>
|
|
178
|
-
<template #extraActions>
|
|
179
|
-
<div class="actions-container">
|
|
180
|
-
<div class="actions">
|
|
181
|
-
<router-link
|
|
182
|
-
v-if="canCreate"
|
|
183
|
-
:to="createLocation"
|
|
184
|
-
class="btn role-primary"
|
|
185
|
-
>
|
|
186
|
-
{{ createLabel }}
|
|
187
|
-
</router-link>
|
|
188
|
-
</div>
|
|
189
|
-
</div>
|
|
190
|
-
</template>
|
|
191
|
-
</ResourceTable>
|
|
185
|
+
/>
|
|
192
186
|
</Tab>
|
|
193
187
|
|
|
194
188
|
<Tab
|
|
@@ -201,22 +195,7 @@ export default {
|
|
|
201
195
|
:schema="tabs[CLUSTER].schema"
|
|
202
196
|
:headers="tabs[CLUSTER].headers"
|
|
203
197
|
:rows="clusterResources"
|
|
204
|
-
|
|
205
|
-
>
|
|
206
|
-
<template #extraActions>
|
|
207
|
-
<div class="actions-container">
|
|
208
|
-
<div class="actions">
|
|
209
|
-
<router-link
|
|
210
|
-
v-if="canCreate"
|
|
211
|
-
:to="createLocation"
|
|
212
|
-
class="btn role-primary"
|
|
213
|
-
>
|
|
214
|
-
{{ createLabel }}
|
|
215
|
-
</router-link>
|
|
216
|
-
</div>
|
|
217
|
-
</div>
|
|
218
|
-
</template>
|
|
219
|
-
</ ResourceTable>
|
|
198
|
+
/>
|
|
220
199
|
</Tab>
|
|
221
200
|
|
|
222
201
|
<Tab
|
|
@@ -229,34 +208,8 @@ export default {
|
|
|
229
208
|
:schema="tabs[PROJECT].schema"
|
|
230
209
|
:headers="tabs[PROJECT].headers"
|
|
231
210
|
:rows="namespaceResources"
|
|
232
|
-
|
|
233
|
-
>
|
|
234
|
-
<template #extraActions>
|
|
235
|
-
<div class="actions-container">
|
|
236
|
-
<div class="actions">
|
|
237
|
-
<router-link
|
|
238
|
-
v-if="canCreate"
|
|
239
|
-
:to="createLocation"
|
|
240
|
-
class="btn role-primary"
|
|
241
|
-
>
|
|
242
|
-
{{ createLabel }}
|
|
243
|
-
</router-link>
|
|
244
|
-
</div>
|
|
245
|
-
</div>
|
|
246
|
-
</template>
|
|
247
|
-
</ ResourceTable>
|
|
211
|
+
/>
|
|
248
212
|
</Tab>
|
|
249
213
|
</Tabbed>
|
|
250
214
|
</div>
|
|
251
215
|
</template>
|
|
252
|
-
|
|
253
|
-
<style lang="scss" scoped>
|
|
254
|
-
|
|
255
|
-
.excram-list{
|
|
256
|
-
font-size: 14px;
|
|
257
|
-
line-height: 22px;
|
|
258
|
-
margin-bottom: 20px;
|
|
259
|
-
font-family: 'Microsoft YaHei';
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
</style>
|
|
@@ -195,180 +195,129 @@ export default {
|
|
|
195
195
|
</script>
|
|
196
196
|
|
|
197
197
|
<template>
|
|
198
|
-
|
|
199
|
-
<!-- 如果正在获取数据,显示加载组件 -->
|
|
200
198
|
<Loading v-if="$fetchState.pending" />
|
|
201
|
-
|
|
202
|
-
<!-- 否则显示主要内容 -->
|
|
203
|
-
<div style="padding: 20px 20px 100px;" v-else>
|
|
204
|
-
|
|
205
|
-
<!-- 面包屑 -->
|
|
206
|
-
<div class="excram-list">全局设置 / <span style="color: #1890FF;">横幅</span></div>
|
|
207
|
-
<!-- 页面主标题 -->
|
|
199
|
+
<div v-else>
|
|
208
200
|
<h1 class="mb-20">
|
|
209
201
|
{{ t('banner.label') }}
|
|
210
202
|
</h1>
|
|
211
203
|
<div>
|
|
212
|
-
|
|
213
|
-
<!-- 描述标签 -->
|
|
214
204
|
<label class="text-label">
|
|
215
205
|
{{ t(`advancedSettings.descriptions.${ 'ui-banners' }`, {}, true) }}
|
|
216
206
|
</label>
|
|
217
207
|
|
|
218
|
-
<!--
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
<h2 class="mb-20 setting-title">
|
|
223
|
-
{{ t('banner.headerBanner') }}
|
|
224
|
-
|
|
225
|
-
<!-- 如果是单独配置的横幅,则显示锁图标 -->
|
|
226
|
-
<i
|
|
227
|
-
v-if="!!uiBannerIndividual.bannerHeader"
|
|
228
|
-
class="icon icon-lock"
|
|
229
|
-
/>
|
|
230
|
-
</h2>
|
|
231
|
-
|
|
232
|
-
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
233
|
-
<div
|
|
208
|
+
<!-- Header Settings -->
|
|
209
|
+
<h2 class="mt-40 mb-10 setting-title">
|
|
210
|
+
{{ t('banner.headerBanner') }}
|
|
211
|
+
<i
|
|
234
212
|
v-if="!!uiBannerIndividual.bannerHeader"
|
|
235
|
-
class="
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
<div class="col span-6">
|
|
247
|
-
<Checkbox
|
|
248
|
-
:disabled="!!uiBannerIndividual.bannerHeader"
|
|
249
|
-
:value="bannerVal.showHeader === 'true'"
|
|
250
|
-
:label="t('banner.showHeader')"
|
|
251
|
-
:mode="mode"
|
|
252
|
-
@update:value="e=> bannerVal.showHeader=e.toString()"
|
|
253
|
-
/>
|
|
254
|
-
</div>
|
|
255
|
-
</div>
|
|
256
|
-
|
|
257
|
-
<!-- 头部横幅的详细设置组件 -->
|
|
258
|
-
<BannerSettings
|
|
259
|
-
v-model:value="bannerVal"
|
|
260
|
-
banner-type="bannerHeader"
|
|
261
|
-
:mode="headerMode"
|
|
213
|
+
class="icon icon-lock"
|
|
214
|
+
/>
|
|
215
|
+
</h2>
|
|
216
|
+
<div
|
|
217
|
+
v-if="!!uiBannerIndividual.bannerHeader"
|
|
218
|
+
class="row mb-10"
|
|
219
|
+
>
|
|
220
|
+
<Banner
|
|
221
|
+
color="warning"
|
|
222
|
+
class="mt-0"
|
|
223
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-header'}, true)"
|
|
262
224
|
/>
|
|
263
225
|
</div>
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
<i
|
|
273
|
-
v-if="!!uiBannerIndividual.bannerFooter"
|
|
274
|
-
class="icon icon-lock"
|
|
275
|
-
/>
|
|
276
|
-
</h2>
|
|
277
|
-
|
|
278
|
-
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
279
|
-
<div
|
|
280
|
-
v-if="!!uiBannerIndividual.bannerFooter"
|
|
281
|
-
class="row mb-10"
|
|
282
|
-
>
|
|
283
|
-
<Banner
|
|
284
|
-
color="warning"
|
|
285
|
-
class="mt-0"
|
|
286
|
-
:label="t('banner.individualSetting', {name: 'ui-banner-footer'}, true)"
|
|
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()"
|
|
287
234
|
/>
|
|
288
235
|
</div>
|
|
236
|
+
</div>
|
|
237
|
+
<BannerSettings
|
|
238
|
+
v-model:value="bannerVal"
|
|
239
|
+
banner-type="bannerHeader"
|
|
240
|
+
:mode="headerMode"
|
|
241
|
+
/>
|
|
289
242
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
banner-type="bannerFooter"
|
|
307
|
-
:mode="footerMode"
|
|
243
|
+
<!-- Footer settings -->
|
|
244
|
+
<h2 class="mt-40 mb-10 setting-title">
|
|
245
|
+
{{ t('banner.footerBanner') }}
|
|
246
|
+
<i
|
|
247
|
+
v-if="!!uiBannerIndividual.bannerFooter"
|
|
248
|
+
class="icon icon-lock"
|
|
249
|
+
/>
|
|
250
|
+
</h2>
|
|
251
|
+
<div
|
|
252
|
+
v-if="!!uiBannerIndividual.bannerFooter"
|
|
253
|
+
class="row mb-10"
|
|
254
|
+
>
|
|
255
|
+
<Banner
|
|
256
|
+
color="warning"
|
|
257
|
+
class="mt-0"
|
|
258
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-footer'}, true)"
|
|
308
259
|
/>
|
|
309
260
|
</div>
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
v-if="!!uiBannerIndividual.bannerConsent"
|
|
319
|
-
class="icon icon-lock"
|
|
261
|
+
<div class="row mb-20">
|
|
262
|
+
<div class="col span-6">
|
|
263
|
+
<Checkbox
|
|
264
|
+
:disabled="!!uiBannerIndividual.bannerFooter"
|
|
265
|
+
:value="bannerVal.showFooter === 'true'"
|
|
266
|
+
:label="t('banner.showFooter')"
|
|
267
|
+
:mode="mode"
|
|
268
|
+
@update:value="e=>bannerVal.showFooter = e.toString()"
|
|
320
269
|
/>
|
|
321
|
-
</h2>
|
|
322
|
-
|
|
323
|
-
<!-- 如果是单独配置,提示用户这是个独立设置 -->
|
|
324
|
-
<div
|
|
325
|
-
v-if="!!uiBannerIndividual.bannerConsent"
|
|
326
|
-
class="row mb-10"
|
|
327
|
-
>
|
|
328
|
-
<Banner
|
|
329
|
-
color="warning"
|
|
330
|
-
class="mt-0"
|
|
331
|
-
:label="t('banner.individualSetting', {name: 'ui-banner-login-consent'}, true)"
|
|
332
|
-
/>
|
|
333
|
-
</div>
|
|
334
|
-
|
|
335
|
-
<!-- 是否显示 Consent Banner 的开关 -->
|
|
336
|
-
<div class="row mb-20">
|
|
337
|
-
<div class="col span-6">
|
|
338
|
-
<Checkbox
|
|
339
|
-
:disabled="!!uiBannerIndividual.bannerConsent"
|
|
340
|
-
:value="bannerVal.showConsent === 'true'"
|
|
341
|
-
:label="t('banner.showConsent')"
|
|
342
|
-
:mode="mode"
|
|
343
|
-
@update:value="e => bannerVal.showConsent = e.toString()"
|
|
344
|
-
/>
|
|
345
|
-
</div>
|
|
346
270
|
</div>
|
|
347
|
-
|
|
348
|
-
<!-- 登录界面同意横幅的详细设置组件 -->
|
|
349
|
-
<BannerSettings
|
|
350
|
-
v-model:value="bannerVal"
|
|
351
|
-
banner-type="bannerConsent"
|
|
352
|
-
:mode="consentMode"
|
|
353
|
-
/>
|
|
354
271
|
</div>
|
|
272
|
+
<BannerSettings
|
|
273
|
+
v-model:value="bannerVal"
|
|
274
|
+
banner-type="bannerFooter"
|
|
275
|
+
:mode="footerMode"
|
|
276
|
+
/>
|
|
355
277
|
|
|
356
|
-
<!--
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
278
|
+
<!-- Consent settings -->
|
|
279
|
+
<h2 class="mt-40 mb-10 setting-title">
|
|
280
|
+
{{ t('banner.loginScreenBanner') }}
|
|
281
|
+
<i
|
|
282
|
+
v-if="!!uiBannerIndividual.bannerConsent"
|
|
283
|
+
class="icon icon-lock"
|
|
284
|
+
/>
|
|
285
|
+
</h2>
|
|
286
|
+
<div
|
|
287
|
+
v-if="!!uiBannerIndividual.bannerConsent"
|
|
288
|
+
class="row mb-10"
|
|
289
|
+
>
|
|
290
|
+
<Banner
|
|
291
|
+
color="warning"
|
|
292
|
+
class="mt-0"
|
|
293
|
+
:label="t('banner.individualSetting', {name: 'ui-banner-login-consent'}, true)"
|
|
367
294
|
/>
|
|
368
295
|
</div>
|
|
296
|
+
<div class="row mb-20">
|
|
297
|
+
<div class="col span-6">
|
|
298
|
+
<Checkbox
|
|
299
|
+
:disabled="!!uiBannerIndividual.bannerConsent"
|
|
300
|
+
:value="bannerVal.showConsent === 'true'"
|
|
301
|
+
:label="t('banner.showConsent')"
|
|
302
|
+
:mode="mode"
|
|
303
|
+
@update:value="e => bannerVal.showConsent = e.toString()"
|
|
304
|
+
/>
|
|
305
|
+
</div>
|
|
306
|
+
</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
|
+
/>
|
|
369
320
|
</div>
|
|
370
|
-
|
|
371
|
-
<!-- 全局错误提示 -->
|
|
372
321
|
<template
|
|
373
322
|
v-for="(err, i) in errors"
|
|
374
323
|
:key="i"
|
|
@@ -378,11 +327,9 @@ export default {
|
|
|
378
327
|
:label="err"
|
|
379
328
|
/>
|
|
380
329
|
</template>
|
|
381
|
-
|
|
382
|
-
<!-- 编辑模式下显示“应用”按钮 -->
|
|
383
|
-
<div class="action-btn" v-if="mode === 'edit'">
|
|
330
|
+
<div v-if="mode === 'edit'">
|
|
384
331
|
<AsyncButton
|
|
385
|
-
class="pull-right"
|
|
332
|
+
class="pull-right mt-20"
|
|
386
333
|
mode="apply"
|
|
387
334
|
@click="save"
|
|
388
335
|
/>
|
|
@@ -391,16 +338,6 @@ export default {
|
|
|
391
338
|
</template>
|
|
392
339
|
|
|
393
340
|
<style scoped lang='scss'>
|
|
394
|
-
.action-btn {
|
|
395
|
-
padding: 10px 30px;
|
|
396
|
-
position: fixed;
|
|
397
|
-
bottom: 0;
|
|
398
|
-
left: 0;
|
|
399
|
-
width: 100%;
|
|
400
|
-
background: var(--body-bg);
|
|
401
|
-
border-top: 1px solid var(--nav-border);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
341
|
.overlay {
|
|
405
342
|
width: 100%;
|
|
406
343
|
height: 100%;
|
|
@@ -416,19 +353,9 @@ export default {
|
|
|
416
353
|
h2.setting-title {
|
|
417
354
|
align-items: center;
|
|
418
355
|
display: flex;
|
|
419
|
-
height: 40px;
|
|
420
|
-
line-height: 40px;
|
|
421
|
-
font-size: 14px;
|
|
422
356
|
|
|
423
357
|
> i {
|
|
424
358
|
padding-left: 5px;
|
|
425
359
|
}
|
|
426
360
|
}
|
|
427
|
-
|
|
428
|
-
.excram-list{
|
|
429
|
-
font-size: 14px;
|
|
430
|
-
line-height: 22px;
|
|
431
|
-
margin-bottom: 20px;
|
|
432
|
-
font-family: 'Microsoft YaHei';
|
|
433
|
-
}
|
|
434
361
|
</style>
|