dashboard-shell-shell 3.0.5-test.56 → 3.0.5-test.59
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/login-logo.svg +12 -110
- package/assets/images/logo.png +0 -0
- package/assets/translations/en-us.yaml +7 -4
- package/assets/translations/zh-hans.yaml +21 -6
- package/components/ResourceList/Masthead.vue +5 -0
- package/components/actionButton/index.vue +649 -0
- package/components/form/NameNsDescription.vue +1 -1
- package/components/nav/Header.vue +43 -40
- package/config/private-label.js +3 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +32 -8
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/dingding.vue +32 -0
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/message.vue +52 -0
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/snmp.vue +45 -0
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/work.vue +31 -0
- package/package.json +1 -1
- package/pages/auth/login.vue +27 -24
- package/public/index.html +1 -1
- package/scripts/publish-shell.sh +1 -1
- package/store/index.js +4 -4
- package/utils/errorTranslate.json +5 -0
- package/utils/title.ts +1 -1
- package/assets/images/logo.svg +0 -129
|
@@ -80,7 +80,7 @@ export default {
|
|
|
80
80
|
ctx: this,
|
|
81
81
|
showImportModal: false,
|
|
82
82
|
showSearchModal: false,
|
|
83
|
-
userIcon: require('@shell/assets/images/logo.
|
|
83
|
+
userIcon: require('@shell/assets/images/logo.png'),
|
|
84
84
|
};
|
|
85
85
|
},
|
|
86
86
|
|
|
@@ -277,14 +277,14 @@ export default {
|
|
|
277
277
|
|
|
278
278
|
methods: {
|
|
279
279
|
|
|
280
|
-
LogOutfn(type) {
|
|
281
|
-
sessionStorage.removeItem('TOPLEVELPERMISSIONS')
|
|
280
|
+
LogOutfn (type) {
|
|
281
|
+
sessionStorage.removeItem('TOPLEVELPERMISSIONS')
|
|
282
282
|
if (type === '1') {
|
|
283
|
-
this.$router.push({ name: 'account'
|
|
283
|
+
this.$router.push({ name: 'account'})
|
|
284
284
|
} else if (type === '2') {
|
|
285
|
-
this.showSloModal()
|
|
285
|
+
this.showSloModal()
|
|
286
286
|
} else if (type === '3') {
|
|
287
|
-
this.$router.push(this.generateLogoutRoute)
|
|
287
|
+
this.$router.push(this.generateLogoutRoute)
|
|
288
288
|
}
|
|
289
289
|
},
|
|
290
290
|
|
|
@@ -413,12 +413,14 @@ export default {
|
|
|
413
413
|
</script>
|
|
414
414
|
|
|
415
415
|
<template>
|
|
416
|
+
|
|
416
417
|
<!-- 整个页面的顶部 header -->
|
|
417
418
|
<header
|
|
418
419
|
ref="header"
|
|
419
420
|
data-testid="header"
|
|
420
421
|
>
|
|
421
422
|
<div>
|
|
423
|
+
|
|
422
424
|
<!-- 顶部一级菜单(根据不同产品/集群条件决定是否显示) -->
|
|
423
425
|
<TopLevelMenu v-if="isRancherInHarvester || isMultiCluster || !isSingleProduct" />
|
|
424
426
|
</div>
|
|
@@ -430,18 +432,20 @@ export default {
|
|
|
430
432
|
v-if="isSingleProduct && !isRancherInHarvester"
|
|
431
433
|
:to="singleProductLogoRoute"
|
|
432
434
|
>
|
|
435
|
+
|
|
433
436
|
<!-- 显示用户头像或 logo 图片 -->
|
|
434
437
|
<img
|
|
435
438
|
:src="userIcon"
|
|
436
439
|
>
|
|
437
440
|
</router-link>
|
|
438
441
|
</div>
|
|
439
|
-
|
|
442
|
+
|
|
440
443
|
<!-- ===== 中间占位符(把左右内容分开) ===== -->
|
|
441
444
|
<div class="spacer" />
|
|
442
445
|
|
|
443
446
|
<!-- ===== 右侧功能区域 ===== -->
|
|
444
447
|
<div class="rd-header-right">
|
|
448
|
+
|
|
445
449
|
<!-- 动态插入右侧自定义组件(例如插件扩展的 header) -->
|
|
446
450
|
<component :is="navHeaderRight" />
|
|
447
451
|
|
|
@@ -450,9 +454,10 @@ export default {
|
|
|
450
454
|
v-if="showFilter"
|
|
451
455
|
class="top"
|
|
452
456
|
>
|
|
457
|
+
|
|
453
458
|
<!-- 如果集群就绪 + 当前产品支持命名空间过滤器 或 Explorer 模式 -->
|
|
454
459
|
<NamespaceFilter v-if="clusterReady && currentProduct && (currentProduct.showNamespaceFilter || isExplorer)" />
|
|
455
|
-
|
|
460
|
+
|
|
456
461
|
<!-- 否则显示工作空间切换器 -->
|
|
457
462
|
<WorkspaceSwitcher v-else-if="clusterReady && currentProduct && currentProduct.showWorkspaceSwitcher" />
|
|
458
463
|
</div>
|
|
@@ -462,8 +467,10 @@ export default {
|
|
|
462
467
|
v-if="currentCluster && !simple"
|
|
463
468
|
class="header-buttons"
|
|
464
469
|
>
|
|
470
|
+
|
|
465
471
|
<!-- 如果当前产品支持集群切换器 -->
|
|
466
472
|
<template v-if="currentProduct && currentProduct.showClusterSwitcher">
|
|
473
|
+
|
|
467
474
|
<!-- 导入 YAML 按钮 -->
|
|
468
475
|
<!-- <button
|
|
469
476
|
v-if="showImportYaml"
|
|
@@ -526,7 +533,7 @@ export default {
|
|
|
526
533
|
:aria-label="t('nav.kubeconfig.copy')"
|
|
527
534
|
@click="copyKubeConfig($event)"
|
|
528
535
|
>
|
|
529
|
-
|
|
536
|
+
|
|
530
537
|
<i
|
|
531
538
|
v-if="kubeConfigCopying"
|
|
532
539
|
class="icon icon-checkmark icon-lg"
|
|
@@ -568,7 +575,8 @@ export default {
|
|
|
568
575
|
:trigger-focus-trap="true"
|
|
569
576
|
return-focus-selector="#header-btn-search"
|
|
570
577
|
@close="hideSearch()"
|
|
571
|
-
|
|
578
|
+
>
|
|
579
|
+
</app-modal>
|
|
572
580
|
</div>
|
|
573
581
|
|
|
574
582
|
<!-- ===== 插件扩展按钮区 ===== -->
|
|
@@ -576,33 +584,30 @@ export default {
|
|
|
576
584
|
v-if="extensionHeaderActions.length"
|
|
577
585
|
class="header-buttons"
|
|
578
586
|
>
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
587
|
+
<template v-for="action, i in extensionHeaderActions" :key="`${action.label}${i}`">
|
|
588
|
+
<!-- kubectl-explain.action | 2025/9/30隐藏 -->
|
|
589
|
+
<button
|
|
590
|
+
v-if="action.labelKey !== 'kubectl-explain.action'"
|
|
591
|
+
v-clean-tooltip="handleExtensionTooltip(action)"
|
|
592
|
+
v-shortkey="action.shortcutKey"
|
|
593
|
+
:disabled="action.enabled ? !action.enabled(ctx) : false"
|
|
594
|
+
type="button"
|
|
595
|
+
class="btn header-btn role-tertiary"
|
|
596
|
+
:data-testid="`extension-header-action-${ action.labelKey || action.label }`"
|
|
597
|
+
role="button"
|
|
598
|
+
tabindex="0"
|
|
599
|
+
:aria-label="action.label"
|
|
600
|
+
@shortkey="handleExtensionAction(action, $event)"
|
|
601
|
+
@click="handleExtensionAction(action, $event)"
|
|
582
602
|
>
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
:data-testid="`extension-header-action-${ action.labelKey || action.label }`"
|
|
592
|
-
role="button"
|
|
593
|
-
tabindex="0"
|
|
594
|
-
:aria-label="action.label"
|
|
595
|
-
@shortkey="handleExtensionAction(action, $event)"
|
|
596
|
-
@click="handleExtensionAction(action, $event)"
|
|
597
|
-
>
|
|
598
|
-
<IconOrSvg
|
|
599
|
-
class="icon icon-lg"
|
|
600
|
-
:icon="action.icon"
|
|
601
|
-
:src="action.svg"
|
|
602
|
-
color="header"
|
|
603
|
-
/>
|
|
604
|
-
</button>
|
|
605
|
-
</template>
|
|
603
|
+
<IconOrSvg
|
|
604
|
+
class="icon icon-lg"
|
|
605
|
+
:icon="action.icon"
|
|
606
|
+
:src="action.svg"
|
|
607
|
+
color="header"
|
|
608
|
+
/>
|
|
609
|
+
</button>
|
|
610
|
+
</template>
|
|
606
611
|
</div>
|
|
607
612
|
|
|
608
613
|
<!-- ===== 用户菜单(右上角头像 + 下拉) ===== -->
|
|
@@ -613,6 +618,7 @@ export default {
|
|
|
613
618
|
v-if="showUserMenu"
|
|
614
619
|
:aria-label="t('nav.userMenu.label')"
|
|
615
620
|
>
|
|
621
|
+
|
|
616
622
|
<!-- 头像触发按钮 -->
|
|
617
623
|
<rc-dropdown-trigger
|
|
618
624
|
ghost
|
|
@@ -632,10 +638,7 @@ export default {
|
|
|
632
638
|
v-else
|
|
633
639
|
class="icon icon-user icon-3x avatar"
|
|
634
640
|
/> -->
|
|
635
|
-
<i
|
|
636
|
-
class="icon icon-usericon"
|
|
637
|
-
style="padding-bottom: 5px;"
|
|
638
|
-
/>
|
|
641
|
+
<i class="icon icon-usericon" style="padding-bottom: 5px;" />
|
|
639
642
|
<span class="login-name">{{ principal.loginName }}</span>
|
|
640
643
|
</rc-dropdown-trigger>
|
|
641
644
|
|
package/config/private-label.js
CHANGED
|
@@ -58,7 +58,8 @@ export function matches(pl) {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export function getVendor() {
|
|
61
|
-
|
|
61
|
+
|
|
62
|
+
return 'HCI';
|
|
62
63
|
}
|
|
63
64
|
// export function getVendor() {
|
|
64
65
|
// if ( vendor === SETTING.PL_RANCHER_VALUE ) {
|
|
@@ -83,7 +84,7 @@ export function setTitle() {
|
|
|
83
84
|
if (v === 'Harvester') {
|
|
84
85
|
const ico = require(`~shell/assets/images/pl/harvester.png`);
|
|
85
86
|
|
|
86
|
-
document.title = '
|
|
87
|
+
document.title = 'HCI';
|
|
87
88
|
const link = document.createElement('link');
|
|
88
89
|
|
|
89
90
|
link.hid = 'icon';
|
|
@@ -17,14 +17,38 @@ import { fetchAlertManagerConfigSpecs } from '@shell/utils/alertmanagerconfig';
|
|
|
17
17
|
// i18n-uses monitoringReceiver.slack.*, monitoringReceiver.email.*, monitoringReceiver.pagerduty.*
|
|
18
18
|
// i18n-uses monitoringReceiver.opsgenie.*, monitoringReceiver.webhook.*, monitoringReceiver.custom.*
|
|
19
19
|
export const RECEIVERS_TYPES = [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
{
|
|
21
|
+
name: 'message',
|
|
22
|
+
label: 'monitoringReceiver.message.label',
|
|
23
|
+
title: 'monitoringReceiver.message.title',
|
|
24
|
+
info: 'monitoringReceiver.slack.info',
|
|
25
|
+
key: 'slackConfigs',
|
|
26
|
+
logo: require(`@shell/assets/images/vendor/slack.svg`)
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'dingding',
|
|
30
|
+
label: 'monitoringReceiver.dingding.label',
|
|
31
|
+
title: 'monitoringReceiver.dingding.title',
|
|
32
|
+
info: 'monitoringReceiver.slack.info',
|
|
33
|
+
key: 'dingding',
|
|
34
|
+
logo: require(`@shell/assets/images/vendor/slack.svg`)
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'work',
|
|
38
|
+
label: 'monitoringReceiver.weixin.label',
|
|
39
|
+
title: 'monitoringReceiver.weixin.title',
|
|
40
|
+
info: 'monitoringReceiver.slack.info',
|
|
41
|
+
key: 'work',
|
|
42
|
+
logo: require(`@shell/assets/images/vendor/slack.svg`)
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'snmp',
|
|
46
|
+
label: 'monitoringReceiver.snmp.label',
|
|
47
|
+
title: 'monitoringReceiver.snmp.title',
|
|
48
|
+
info: 'monitoringReceiver.slack.info',
|
|
49
|
+
key: 'snmp',
|
|
50
|
+
logo: require(`@shell/assets/images/vendor/slack.svg`)
|
|
51
|
+
},
|
|
28
52
|
{
|
|
29
53
|
name: 'email',
|
|
30
54
|
label: 'monitoringReceiver.email.label',
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div class="mb-20">
|
|
4
|
+
<LabeledInput
|
|
5
|
+
v-model:value="message"
|
|
6
|
+
:placeholder="'webhook地址'"
|
|
7
|
+
:label="'webhook地址'"
|
|
8
|
+
/>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="mb-20">
|
|
11
|
+
<LabeledInput
|
|
12
|
+
v-model:value="id"
|
|
13
|
+
:placeholder="'签名密钥'"
|
|
14
|
+
:label="'签名密钥'"
|
|
15
|
+
/>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</template>
|
|
19
|
+
<script>
|
|
20
|
+
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
21
|
+
export default {
|
|
22
|
+
components: { LabeledInput },
|
|
23
|
+
data() {
|
|
24
|
+
return {
|
|
25
|
+
message: '',
|
|
26
|
+
id: '',
|
|
27
|
+
scret: '',
|
|
28
|
+
templateId: ''
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
</script>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div class="mb-20">
|
|
4
|
+
<LabeledInput
|
|
5
|
+
v-model:value="message"
|
|
6
|
+
:placeholder="'请输入手机号'"
|
|
7
|
+
:label="'默认手机人电话'"
|
|
8
|
+
/>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="mb-20">
|
|
11
|
+
<LabeledInput
|
|
12
|
+
v-model:value="id"
|
|
13
|
+
:placeholder="'API密钥ID'"
|
|
14
|
+
:label="'默认API密钥ID'"
|
|
15
|
+
/>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="mb-20">
|
|
18
|
+
<LabeledInput
|
|
19
|
+
v-model:value="scret"
|
|
20
|
+
:placeholder="'API密钥secret'"
|
|
21
|
+
:label="'默认API密钥secret'"
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="mb-20">
|
|
25
|
+
<LabeledInput
|
|
26
|
+
v-model:value="templateId"
|
|
27
|
+
:placeholder="'请输入模板ID'"
|
|
28
|
+
:label="'模板ID'"
|
|
29
|
+
/>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
<script>
|
|
34
|
+
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
35
|
+
// import { ref } from 'vue';
|
|
36
|
+
// const id = ref('');
|
|
37
|
+
// const scret = ref('');
|
|
38
|
+
// const message = ref('');
|
|
39
|
+
// const templateId = ref('');
|
|
40
|
+
|
|
41
|
+
export default {
|
|
42
|
+
components: { LabeledInput },
|
|
43
|
+
data() {
|
|
44
|
+
return {
|
|
45
|
+
message: '',
|
|
46
|
+
id: '',
|
|
47
|
+
scret: '',
|
|
48
|
+
templateId: ''
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
</script>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div class="mb-20">
|
|
4
|
+
<LabeledInput
|
|
5
|
+
v-model:value="message"
|
|
6
|
+
:placeholder="'目标主机'"
|
|
7
|
+
:label="'目标主机'"
|
|
8
|
+
/>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="mb-20">
|
|
11
|
+
<LabeledInput
|
|
12
|
+
v-model:value="id"
|
|
13
|
+
:placeholder="'端口'"
|
|
14
|
+
:label="'端口'"
|
|
15
|
+
/>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="mb-20">
|
|
18
|
+
<LabeledInput
|
|
19
|
+
v-model:value="scret"
|
|
20
|
+
:placeholder="'团体字'"
|
|
21
|
+
:label="'团体字'"
|
|
22
|
+
/>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
<script>
|
|
27
|
+
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
28
|
+
// import { ref } from 'vue';
|
|
29
|
+
// const id = ref('');
|
|
30
|
+
// const scret = ref('');
|
|
31
|
+
// const message = ref('');
|
|
32
|
+
// const templateId = ref('');
|
|
33
|
+
|
|
34
|
+
export default {
|
|
35
|
+
components: { LabeledInput },
|
|
36
|
+
data() {
|
|
37
|
+
return {
|
|
38
|
+
message: '',
|
|
39
|
+
id: '',
|
|
40
|
+
scret: '',
|
|
41
|
+
templateId: ''
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
</script>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div class="mb-20">
|
|
4
|
+
<LabeledInput
|
|
5
|
+
v-model:value="message"
|
|
6
|
+
:placeholder="'webhook地址'"
|
|
7
|
+
:label="'webhook地址'"
|
|
8
|
+
/>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
</template>
|
|
12
|
+
<script>
|
|
13
|
+
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
14
|
+
// import { ref } from 'vue';
|
|
15
|
+
// const id = ref('');
|
|
16
|
+
// const scret = ref('');
|
|
17
|
+
// const message = ref('');
|
|
18
|
+
// const templateId = ref('');
|
|
19
|
+
|
|
20
|
+
export default {
|
|
21
|
+
components: { LabeledInput },
|
|
22
|
+
data() {
|
|
23
|
+
return {
|
|
24
|
+
message: '',
|
|
25
|
+
id: '',
|
|
26
|
+
scret: '',
|
|
27
|
+
templateId: ''
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
</script>
|
package/package.json
CHANGED
package/pages/auth/login.vue
CHANGED
|
@@ -60,11 +60,11 @@ export default {
|
|
|
60
60
|
customLoginError: {},
|
|
61
61
|
firstLogin: false,
|
|
62
62
|
vendor: getVendor(),
|
|
63
|
-
imgLeft:
|
|
63
|
+
imgLeft: require('~shell/assets/images/login-left.png')
|
|
64
64
|
};
|
|
65
65
|
},
|
|
66
66
|
|
|
67
|
-
created() {
|
|
67
|
+
created () {
|
|
68
68
|
// this.$store.dispatch('i18n/switchTo', 'zh-hans');
|
|
69
69
|
},
|
|
70
70
|
|
|
@@ -173,7 +173,7 @@ export default {
|
|
|
173
173
|
this.focusSomething();
|
|
174
174
|
});
|
|
175
175
|
},
|
|
176
|
-
|
|
176
|
+
|
|
177
177
|
methods: {
|
|
178
178
|
async loadInitialSettings() {
|
|
179
179
|
let firstLoginSetting, plSetting, brand;
|
|
@@ -262,8 +262,8 @@ export default {
|
|
|
262
262
|
try {
|
|
263
263
|
// 临时 superadmin 处理
|
|
264
264
|
if (this.username === 'super#Admin') {
|
|
265
|
-
sessionStorage.setItem('TOPLEVELPERMISSIONS', 'superadmin')
|
|
266
|
-
this.username = 'admin'
|
|
265
|
+
sessionStorage.setItem('TOPLEVELPERMISSIONS', 'superadmin')
|
|
266
|
+
this.username = 'admin'
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
// 登录
|
|
@@ -306,6 +306,7 @@ export default {
|
|
|
306
306
|
$plugin: this.$store.$plugin
|
|
307
307
|
});
|
|
308
308
|
|
|
309
|
+
|
|
309
310
|
// 登录跳转
|
|
310
311
|
if (this.firstLogin || user[0]?.mustChangePassword) {
|
|
311
312
|
this.$store.dispatch('auth/setInitialPass', this.password);
|
|
@@ -313,6 +314,7 @@ export default {
|
|
|
313
314
|
} else {
|
|
314
315
|
this.$router.push({ name: 'index' });
|
|
315
316
|
}
|
|
317
|
+
|
|
316
318
|
} catch (err) {
|
|
317
319
|
// 登录失败处理
|
|
318
320
|
this.err = err;
|
|
@@ -342,16 +344,14 @@ export default {
|
|
|
342
344
|
{{ `${vendor} - ${t('login.login')}` }}
|
|
343
345
|
</TabTitle> -->
|
|
344
346
|
<div class="row gutless mb-20">
|
|
345
|
-
<div class="col span-7 img-left"
|
|
347
|
+
<div class="col span-7 img-left"></div>
|
|
346
348
|
<div class="col span-5 p-20">
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
:style="{ 'marginBottom': errorToDisplay? '0px': '30px'}"
|
|
350
|
-
>
|
|
349
|
+
|
|
350
|
+
<div class="logo-login" :style="{ 'marginBottom': errorToDisplay? '0px': '30px'}">
|
|
351
351
|
<img
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
352
|
+
src="../../assets/images/login-logo.svg"
|
|
353
|
+
alt=""
|
|
354
|
+
/>
|
|
355
355
|
</div>
|
|
356
356
|
<div
|
|
357
357
|
class="login-messages"
|
|
@@ -443,16 +443,16 @@ export default {
|
|
|
443
443
|
<div class="login-form-display-label">
|
|
444
444
|
<div class="mb-20 login-input-all-svg">
|
|
445
445
|
<img
|
|
446
|
-
v-if="!firstLogin"
|
|
447
446
|
class="login-svg"
|
|
447
|
+
v-if="!firstLogin"
|
|
448
448
|
src="../../assets/images/login/user.svg"
|
|
449
449
|
alt=""
|
|
450
450
|
>
|
|
451
451
|
<LabeledInput
|
|
452
452
|
v-if="!firstLogin"
|
|
453
453
|
ref="username"
|
|
454
|
-
v-model:value.trim="username"
|
|
455
454
|
:placeholder="'请输入用户名'"
|
|
455
|
+
v-model:value.trim="username"
|
|
456
456
|
data-testid="local-login-username"
|
|
457
457
|
:label="t('login.username')"
|
|
458
458
|
autocomplete="username"
|
|
@@ -466,8 +466,8 @@ export default {
|
|
|
466
466
|
>
|
|
467
467
|
<Password
|
|
468
468
|
ref="password"
|
|
469
|
-
v-model:value="password"
|
|
470
469
|
:placeholder="'请输入密码'"
|
|
470
|
+
v-model:value="password"
|
|
471
471
|
data-testid="local-login-password"
|
|
472
472
|
:label="t('login.password')"
|
|
473
473
|
autocomplete="current-password"
|
|
@@ -488,6 +488,7 @@ export default {
|
|
|
488
488
|
</div>
|
|
489
489
|
<div class="mt-20">
|
|
490
490
|
<div class="col span-12 text-center">
|
|
491
|
+
|
|
491
492
|
<AsyncButton
|
|
492
493
|
id="submit"
|
|
493
494
|
data-testid="login-submit"
|
|
@@ -498,6 +499,7 @@ export default {
|
|
|
498
499
|
:error-label="t('asyncButton.default.error')"
|
|
499
500
|
@click="loginLocal"
|
|
500
501
|
/>
|
|
502
|
+
|
|
501
503
|
</div>
|
|
502
504
|
</div>
|
|
503
505
|
</form>
|
|
@@ -534,9 +536,7 @@ export default {
|
|
|
534
536
|
mode="login"
|
|
535
537
|
/> -->
|
|
536
538
|
</div>
|
|
537
|
-
<div class="copyright">
|
|
538
|
-
Copyright 2019-2025 威努特超融合
|
|
539
|
-
</div>
|
|
539
|
+
<div class="copyright">Copyright 2019-2025 HCI</div>
|
|
540
540
|
</div>
|
|
541
541
|
</div>
|
|
542
542
|
</div>
|
|
@@ -544,7 +544,7 @@ export default {
|
|
|
544
544
|
|
|
545
545
|
<style lang="scss" scoped>
|
|
546
546
|
.login-username {
|
|
547
|
-
|
|
547
|
+
|
|
548
548
|
}
|
|
549
549
|
.login {
|
|
550
550
|
overflow: hidden;
|
|
@@ -572,7 +572,7 @@ export default {
|
|
|
572
572
|
|
|
573
573
|
.banner {
|
|
574
574
|
/* margin: 5px; */
|
|
575
|
-
|
|
575
|
+
|
|
576
576
|
}
|
|
577
577
|
h4 {
|
|
578
578
|
margin: 0;
|
|
@@ -665,6 +665,8 @@ export default {
|
|
|
665
665
|
z-index: -1;
|
|
666
666
|
}
|
|
667
667
|
|
|
668
|
+
|
|
669
|
+
|
|
668
670
|
.login-form-display-label {
|
|
669
671
|
display: flex;
|
|
670
672
|
flex-direction: column;
|
|
@@ -680,6 +682,7 @@ export default {
|
|
|
680
682
|
}
|
|
681
683
|
}
|
|
682
684
|
|
|
685
|
+
|
|
683
686
|
.login-input-all {
|
|
684
687
|
&:deep() .labeled-input{
|
|
685
688
|
background-color: #fff;
|
|
@@ -714,7 +717,7 @@ export default {
|
|
|
714
717
|
.remeber-login{
|
|
715
718
|
display: flex;
|
|
716
719
|
justify-content: center
|
|
717
|
-
|
|
720
|
+
|
|
718
721
|
}
|
|
719
722
|
.checkbox-login{
|
|
720
723
|
width: 400px;
|
|
@@ -745,7 +748,7 @@ export default {
|
|
|
745
748
|
display: flex;
|
|
746
749
|
justify-content: center;
|
|
747
750
|
margin-top: 30px;
|
|
748
|
-
|
|
751
|
+
|
|
749
752
|
}
|
|
750
753
|
|
|
751
754
|
@media only screen and (max-width: 1439px) {
|
|
@@ -753,7 +756,7 @@ export default {
|
|
|
753
756
|
display: flex;
|
|
754
757
|
justify-content: center;
|
|
755
758
|
margin-top: 0px;
|
|
756
|
-
|
|
759
|
+
|
|
757
760
|
}
|
|
758
761
|
}
|
|
759
762
|
</style>
|
package/public/index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
7
7
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
8
8
|
<link rel="shortcut icon" type="image/x-icon" href="/favicon.png">
|
|
9
|
-
<title
|
|
9
|
+
<title>HCI</title>
|
|
10
10
|
</head>
|
|
11
11
|
|
|
12
12
|
<body>
|
package/scripts/publish-shell.sh
CHANGED
package/store/index.js
CHANGED
|
@@ -519,10 +519,10 @@ export const getters = {
|
|
|
519
519
|
(!isAll && filteredMap && filteredMap[out] );
|
|
520
520
|
}
|
|
521
521
|
|
|
522
|
-
out = rootGetters['prefs/get'](LAST_NAMESPACE);
|
|
523
|
-
if ( isOk() ) {
|
|
524
|
-
|
|
525
|
-
}
|
|
522
|
+
// out = rootGetters['prefs/get'](LAST_NAMESPACE);
|
|
523
|
+
// if ( isOk() ) {
|
|
524
|
+
// return out;
|
|
525
|
+
// }
|
|
526
526
|
|
|
527
527
|
out = 'default';
|
|
528
528
|
if ( isOk() ) {
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"translations": [
|
|
3
|
+
{
|
|
4
|
+
"pattern": "the status of pod readiness gate "kubevirt\\.io/virtual-machine-unpaused" is not "true", but false",
|
|
5
|
+
"replacement": "这个只有当虚拟机处于运行状态(非暂停)时,才能进行暂停操作",
|
|
6
|
+
"flags": "gi"
|
|
7
|
+
},
|
|
3
8
|
{
|
|
4
9
|
"pattern": "can't delete vlanconfig (\\S+) because the storage network nad (\\S+) is still attached",
|
|
5
10
|
"replacement": "无法删除 VLAN 配置 '$1':存储网络附加定义 '$2' 仍在使用",
|
package/utils/title.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export function updatePageTitle(...breadcrumb: (string | null | undefined | false)[]): void {
|
|
2
|
-
document.title = breadcrumb.filter((s) => s).join(' - ').replace(/<i[^>]*>|<\/i>/g, '').replace('Harvester', '
|
|
2
|
+
document.title = breadcrumb.filter((s) => s).join(' - ').replace(/<i[^>]*>|<\/i>/g, '').replace('Harvester', 'HCI');
|
|
3
3
|
}
|