@liujitcn/kratos-taro-app-core 0.0.78 → 0.0.80
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/dist/build.mjs +4 -2
- package/package.json +1 -1
- package/src/components/BootstrapStatus.scss +3 -3
- package/src/components/BootstrapStatus.tsx +3 -1
- package/src/components/KratosTabBar.scss +32 -13
- package/src/components/KratosTabBar.tsx +34 -3
- package/src/components/MfaRecoveryCodesDialog.scss +11 -10
- package/src/components/MfaSetupPanel.scss +4 -4
- package/src/components/PasswordVerifyDialog.scss +21 -21
- package/src/navigation.ts +6 -3
- package/src/pages.ts +4 -2
- package/src/rpc/base/v1/config.ts +1 -1
- package/src/rpc/base/v1/file.ts +1 -1
- package/src/rpc/base/v1/language.ts +1 -1
- package/src/rpc/base/v1/login.ts +1 -1
- package/src/rpc/base/v1/mcp.ts +1 -1
- package/src/rpc/base/v1/mfa.ts +1 -1
- package/src/rpc/base/v1/oauth.ts +1 -1
- package/src/rpc/base/v1/secret_crypto.ts +1 -1
- package/src/rpc/base/v1/sse.ts +1 -1
- package/src/rpc/common/v1/common.ts +1 -1
- package/src/rpc/common/v1/types.ts +1 -1
- package/src/rpc/google/protobuf/empty.ts +1 -1
- package/src/rpc/google/protobuf/struct.ts +2 -2
- package/src/rpc/google/protobuf/wrappers.ts +1 -1
- package/src/rpc/system/app/v1/auth.ts +1 -1
- package/src/rpc/system/app/v1/base_area.ts +1 -1
- package/src/rpc/system/app/v1/base_dict.ts +1 -1
- package/src/rpc/system/app/v1/base_menu.ts +1 -1
- package/src/rpc/system/common/v1/common.ts +1 -1
- package/src/stores/index.ts +1 -0
- package/src/stores/theme.ts +108 -0
- package/src/styles/base.scss +90 -5
- package/src/styles/components.scss +765 -0
- package/src/utils/http.ts +3 -0
- package/src/utils/index.ts +19 -0
- package/src/utils/navigation.ts +12 -0
- package/src/views/pages/index/index.scss +69 -73
- package/src/views/pages/index/index.tsx +50 -34
- package/src/views/pages/login/login.scss +109 -142
- package/src/views/pages/login/login.tsx +142 -82
- package/src/views/pages/login/protocal.scss +14 -14
- package/src/views/pages/login/protocal.tsx +16 -3
- package/src/views/pages/webview/webview.scss +6 -5
- package/src/views/pages/webview/webview.tsx +3 -1
package/dist/build.mjs
CHANGED
|
@@ -11,8 +11,10 @@ var corePages = {
|
|
|
11
11
|
navigationBarTitleText: ""
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
-
"pages/login/login": {
|
|
15
|
-
|
|
14
|
+
"pages/login/login": {
|
|
15
|
+
style: { navigationStyle: "custom", navigationBarTitleText: "" }
|
|
16
|
+
},
|
|
17
|
+
"pages/login/protocal": { style: { navigationStyle: "custom", navigationBarTitleText: "" } },
|
|
16
18
|
"pages/webview/webview": { style: { navigationBarTitleText: "" } },
|
|
17
19
|
"pages/status/index": {
|
|
18
20
|
style: {
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
justify-content: center;
|
|
6
6
|
flex-direction: column;
|
|
7
7
|
padding: 48px;
|
|
8
|
-
background:
|
|
8
|
+
background: var(--kratos-bg-gradient);
|
|
9
9
|
box-sizing: border-box;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.bootstrap-status__title {
|
|
19
|
-
color:
|
|
19
|
+
color: var(--kratos-color-text);
|
|
20
20
|
font-size: 32px;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
.bootstrap-status__detail {
|
|
24
24
|
margin-top: 16px;
|
|
25
|
-
color:
|
|
25
|
+
color: var(--kratos-color-text-muted);
|
|
26
26
|
font-size: 24px;
|
|
27
27
|
text-align: center;
|
|
28
28
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Image, Text, View } from '@tarojs/components'
|
|
2
2
|
import './BootstrapStatus.scss'
|
|
3
3
|
import { useI18n } from '../locales'
|
|
4
|
+
import { useThemeStore } from '../stores'
|
|
4
5
|
|
|
5
6
|
/** 启动状态组件参数。 */
|
|
6
7
|
export interface BootstrapStatusProps {
|
|
@@ -11,8 +12,9 @@ export interface BootstrapStatusProps {
|
|
|
11
12
|
/** 全屏启动状态。 */
|
|
12
13
|
export function BootstrapStatus({ title, detail }: BootstrapStatusProps) {
|
|
13
14
|
const { t } = useI18n()
|
|
15
|
+
const themeStore = useThemeStore()
|
|
14
16
|
return (
|
|
15
|
-
<View className=
|
|
17
|
+
<View className={`bootstrap-status ${themeStore.theme === 'light' ? 'theme-light' : 'theme-dark'}`}>
|
|
16
18
|
<Image
|
|
17
19
|
className='bootstrap-status__logo'
|
|
18
20
|
src='/static/images/logo_icon.png'
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
.kratos-tab-bar {
|
|
2
|
-
--kratos-tab-bar-color: #
|
|
3
|
-
--kratos-tab-bar-active-color: #
|
|
2
|
+
--kratos-tab-bar-color: var(--kratos-color-text-dim, #4e6378);
|
|
3
|
+
--kratos-tab-bar-active-color: var(--kratos-color-primary, #28f0d4);
|
|
4
4
|
|
|
5
5
|
position: fixed;
|
|
6
|
-
right:
|
|
7
|
-
bottom:
|
|
8
|
-
left:
|
|
6
|
+
right: 20px;
|
|
7
|
+
bottom: env(safe-area-inset-bottom);
|
|
8
|
+
left: 20px;
|
|
9
9
|
z-index: 999;
|
|
10
10
|
box-sizing: border-box;
|
|
11
11
|
display: flex;
|
|
12
|
-
height:
|
|
13
|
-
padding
|
|
14
|
-
border
|
|
15
|
-
|
|
12
|
+
height: 104px;
|
|
13
|
+
padding: 0 8px;
|
|
14
|
+
border: 1PX solid var(--kratos-color-border-accent, rgba(120, 230, 215, 0.16));
|
|
15
|
+
border-radius: 30px;
|
|
16
|
+
background: var(--kratos-dock-bg, rgba(10, 18, 30, 0.72));
|
|
17
|
+
box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45);
|
|
18
|
+
backdrop-filter: blur(32px);
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
.kratos-tab-bar__item {
|
|
@@ -22,12 +25,25 @@
|
|
|
22
25
|
align-items: center;
|
|
23
26
|
justify-content: center;
|
|
24
27
|
flex-direction: column;
|
|
25
|
-
transform: translateY(clamp(1PX, env(safe-area-inset-bottom), 7PX));
|
|
26
28
|
color: var(--kratos-tab-bar-color);
|
|
27
29
|
font-size: 10PX;
|
|
28
30
|
line-height: 12PX;
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
/* 设计稿:激活项顶部霓虹发光条 */
|
|
34
|
+
.kratos-tab-bar__item--active::before {
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: 0;
|
|
37
|
+
left: 50%;
|
|
38
|
+
width: 26px;
|
|
39
|
+
height: 3px;
|
|
40
|
+
border-radius: 3px;
|
|
41
|
+
background: var(--kratos-tab-bar-active-color);
|
|
42
|
+
box-shadow: 0 0 12px var(--kratos-tab-bar-active-color);
|
|
43
|
+
content: '';
|
|
44
|
+
transform: translateX(-50%);
|
|
45
|
+
}
|
|
46
|
+
|
|
31
47
|
.kratos-tab-bar__icon {
|
|
32
48
|
width: 28PX;
|
|
33
49
|
height: 28PX;
|
|
@@ -65,7 +81,7 @@
|
|
|
65
81
|
height: 7PX;
|
|
66
82
|
border-right: 2PX solid var(--kratos-tab-bar-color);
|
|
67
83
|
border-bottom: 2PX solid var(--kratos-tab-bar-color);
|
|
68
|
-
background:
|
|
84
|
+
background: var(--kratos-dock-bg, rgba(10, 18, 30, 0.72));
|
|
69
85
|
content: '';
|
|
70
86
|
transform: rotate(45deg);
|
|
71
87
|
}
|
|
@@ -87,6 +103,8 @@
|
|
|
87
103
|
|
|
88
104
|
.kratos-tab-bar__text--active {
|
|
89
105
|
color: var(--kratos-tab-bar-active-color);
|
|
106
|
+
font-weight: 700;
|
|
107
|
+
text-shadow: 0 0 12px currentColor;
|
|
90
108
|
}
|
|
91
109
|
|
|
92
110
|
.kratos-tab-bar__badge {
|
|
@@ -96,7 +114,8 @@
|
|
|
96
114
|
width: 10PX;
|
|
97
115
|
height: 10PX;
|
|
98
116
|
box-sizing: border-box;
|
|
99
|
-
border: 2PX solid
|
|
117
|
+
border: 2PX solid var(--kratos-dock-bg, rgba(10, 18, 30, 0.72));
|
|
100
118
|
border-radius: 50%;
|
|
101
|
-
background: #
|
|
119
|
+
background: var(--kratos-color-danger, #ff4d6d);
|
|
120
|
+
box-shadow: 0 0 12px var(--kratos-color-danger, #ff4d6d);
|
|
102
121
|
}
|
|
@@ -2,6 +2,7 @@ import { Image, Text, View } from '@tarojs/components'
|
|
|
2
2
|
import { resolveModuleIcon, resolveStaticView } from '../module'
|
|
3
3
|
import { APP_MENU_ROOT_ID, navigateAppRoute, useAppMenuBadges, useAppNavigation } from '../navigation'
|
|
4
4
|
import { useI18n } from '../locales'
|
|
5
|
+
import { useThemeStore } from '../stores'
|
|
5
6
|
import { resolveRootMenuId } from '../navigation-tree.mjs'
|
|
6
7
|
import './KratosTabBar.scss'
|
|
7
8
|
|
|
@@ -10,11 +11,36 @@ export interface KratosTabBarProps {
|
|
|
10
11
|
route: string
|
|
11
12
|
}
|
|
12
13
|
|
|
14
|
+
/** 设计稿导航坞线稿图标(viewKey → SVG path)。 */
|
|
15
|
+
const TAB_ICON_PATHS: Record<string, string> = {
|
|
16
|
+
HOME: 'M3 11 12 3l9 8M5 10v10h14V10',
|
|
17
|
+
APP_ANALYTIC: 'M4 20V10M10 20V4M16 20v-7M21 20H3',
|
|
18
|
+
APP_REPORT: 'M6 4h9l5 5v11H6zM14 4v5h5',
|
|
19
|
+
MESSAGE_INBOX: 'M4 5h16v12H8l-4 4z',
|
|
20
|
+
PROFILE_HOME: 'M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM4 21c0-4 3.5-6 8-6s8 2 8 6',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** 按设计稿线稿生成随主题与激活态取色的图标地址,未知 viewKey 返回空串走后端图标兜底。 */
|
|
24
|
+
const tabIconSrc = (viewKey: string, active: boolean, theme: string): string => {
|
|
25
|
+
const path = TAB_ICON_PATHS[viewKey]
|
|
26
|
+
if (!path) return ''
|
|
27
|
+
const color = active
|
|
28
|
+
? theme === 'light'
|
|
29
|
+
? '#039e8c'
|
|
30
|
+
: '#28f0d4'
|
|
31
|
+
: theme === 'light'
|
|
32
|
+
? '#9aabbb'
|
|
33
|
+
: '#4e6378'
|
|
34
|
+
const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="${path}"/></svg>`
|
|
35
|
+
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`
|
|
36
|
+
}
|
|
37
|
+
|
|
13
38
|
/** 根据动态菜单显示的自绘 TabBar。 */
|
|
14
39
|
export function KratosTabBar({ route }: KratosTabBarProps) {
|
|
15
40
|
const menus = useAppNavigation((state) => state.menus)
|
|
16
41
|
const tabBar = useAppNavigation((state) => state.tabBar)
|
|
17
42
|
const { t } = useI18n()
|
|
43
|
+
const themeStore = useThemeStore()
|
|
18
44
|
|
|
19
45
|
/** 按稳定 viewKey 优先取界面语言标签,未配置的菜单回退后端标题。 */
|
|
20
46
|
const tabBarTitleKeys: Record<string, string> = {
|
|
@@ -35,14 +61,19 @@ export function KratosTabBar({ route }: KratosTabBarProps) {
|
|
|
35
61
|
if (!activeMenu || !tabBar.length) return null
|
|
36
62
|
|
|
37
63
|
return (
|
|
38
|
-
<View
|
|
64
|
+
<View
|
|
65
|
+
className={`kratos-tab-bar ${
|
|
66
|
+
themeStore.theme === 'light' ? 'theme-light' : 'theme-dark'
|
|
67
|
+
}`}
|
|
68
|
+
>
|
|
39
69
|
{tabBar.map((item) => {
|
|
40
70
|
const active = activeMenu.id === item.id
|
|
41
|
-
const
|
|
71
|
+
const designIcon = tabIconSrc(item.viewKey, active, themeStore.theme)
|
|
72
|
+
const icon = designIcon || resolveModuleIcon(active && item.selectedIcon ? item.selectedIcon : item.icon)
|
|
42
73
|
return (
|
|
43
74
|
<View
|
|
44
75
|
key={item.id}
|
|
45
|
-
className='kratos-tab-bar__item'
|
|
76
|
+
className={`kratos-tab-bar__item${active ? ' kratos-tab-bar__item--active' : ''}`}
|
|
46
77
|
onClick={() => navigateAppRoute(item.path)}
|
|
47
78
|
>
|
|
48
79
|
{icon ? (
|
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
.mfa-recovery-dialog__panel {
|
|
13
13
|
width: min(100%, 640px);
|
|
14
14
|
overflow: hidden;
|
|
15
|
-
background-color:
|
|
15
|
+
background-color: var(--kratos-color-surface-solid);
|
|
16
16
|
border-radius: 16px;
|
|
17
17
|
box-shadow: 0 20px 64px rgb(0 0 0 / 20%);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
.mfa-recovery-dialog__header {
|
|
21
21
|
padding: 28px 32px;
|
|
22
|
-
border-bottom:
|
|
22
|
+
border-bottom: 1PX solid var(--kratos-color-border);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
.mfa-recovery-dialog__title {
|
|
26
|
-
color:
|
|
26
|
+
color: var(--kratos-color-text);
|
|
27
27
|
font-size: 34px;
|
|
28
28
|
font-weight: 600;
|
|
29
29
|
}
|
|
@@ -38,10 +38,11 @@
|
|
|
38
38
|
min-height: 220px;
|
|
39
39
|
margin-bottom: 16px;
|
|
40
40
|
padding: 20px 24px;
|
|
41
|
-
color:
|
|
41
|
+
color: var(--kratos-color-text);
|
|
42
42
|
font-size: 30px;
|
|
43
43
|
line-height: 1.6;
|
|
44
|
-
border:
|
|
44
|
+
border: 1PX solid var(--kratos-color-border);
|
|
45
|
+
background-color: var(--kratos-color-surface-2);
|
|
45
46
|
border-radius: 8px;
|
|
46
47
|
overflow-wrap: anywhere;
|
|
47
48
|
white-space: pre-wrap;
|
|
@@ -53,10 +54,10 @@
|
|
|
53
54
|
height: 58px;
|
|
54
55
|
margin: 0;
|
|
55
56
|
padding: 0 18px;
|
|
56
|
-
color:
|
|
57
|
+
color: var(--kratos-color-primary);
|
|
57
58
|
font-size: 24px;
|
|
58
59
|
line-height: 58px;
|
|
59
|
-
background-color:
|
|
60
|
+
background-color: var(--kratos-color-primary-soft);
|
|
60
61
|
border: 0;
|
|
61
62
|
border-radius: 8px;
|
|
62
63
|
}
|
|
@@ -69,7 +70,7 @@
|
|
|
69
70
|
.mfa-recovery-dialog__warning {
|
|
70
71
|
display: block;
|
|
71
72
|
margin-top: 12px;
|
|
72
|
-
color:
|
|
73
|
+
color: var(--kratos-color-warning);
|
|
73
74
|
font-size: 24px;
|
|
74
75
|
line-height: 1.5;
|
|
75
76
|
}
|
|
@@ -85,10 +86,10 @@
|
|
|
85
86
|
height: 72px;
|
|
86
87
|
margin: 0;
|
|
87
88
|
padding: 0 24px;
|
|
88
|
-
color:
|
|
89
|
+
color: var(--kratos-color-on-primary);
|
|
89
90
|
font-size: 28px;
|
|
90
91
|
line-height: 72px;
|
|
91
|
-
background-color:
|
|
92
|
+
background-color: var(--kratos-color-primary);
|
|
92
93
|
border: 0;
|
|
93
94
|
border-radius: 8px;
|
|
94
95
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
.mfa-setup-panel__uri-text {
|
|
16
16
|
flex: 1;
|
|
17
17
|
min-width: 0;
|
|
18
|
-
color:
|
|
18
|
+
color: var(--kratos-color-text-muted);
|
|
19
19
|
font-size: 24px;
|
|
20
20
|
line-height: 1.5;
|
|
21
21
|
overflow-wrap: anywhere;
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
height: 58px;
|
|
31
31
|
margin: 0;
|
|
32
32
|
padding: 0;
|
|
33
|
-
color:
|
|
34
|
-
background:
|
|
33
|
+
color: var(--kratos-color-primary);
|
|
34
|
+
background: var(--kratos-color-primary-soft);
|
|
35
35
|
border: 0;
|
|
36
36
|
border-radius: 8px;
|
|
37
37
|
}
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
.mfa-setup-panel__copy-front {
|
|
67
67
|
right: 0;
|
|
68
68
|
bottom: 0;
|
|
69
|
-
background:
|
|
69
|
+
background: var(--kratos-color-primary-soft);
|
|
70
70
|
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
max-width: 640px;
|
|
19
19
|
overflow: hidden;
|
|
20
20
|
border-radius: 16px;
|
|
21
|
-
background-color:
|
|
21
|
+
background-color: var(--kratos-color-surface-solid);
|
|
22
22
|
box-shadow: 0 20px 64px rgba(0, 0, 0, 0.2);
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -27,18 +27,18 @@
|
|
|
27
27
|
align-items: center;
|
|
28
28
|
justify-content: space-between;
|
|
29
29
|
padding: 28px 32px;
|
|
30
|
-
border-bottom:
|
|
30
|
+
border-bottom: 1PX solid var(--kratos-color-border);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
.password-verify-dialog__title {
|
|
34
|
-
color:
|
|
34
|
+
color: var(--kratos-color-text);
|
|
35
35
|
font-size: 34px;
|
|
36
36
|
font-weight: 600;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
.password-verify-dialog__close {
|
|
40
40
|
padding: 0 8px;
|
|
41
|
-
color:
|
|
41
|
+
color: var(--kratos-color-text-muted);
|
|
42
42
|
font-size: 42px;
|
|
43
43
|
line-height: 1;
|
|
44
44
|
}
|
|
@@ -55,14 +55,14 @@
|
|
|
55
55
|
|
|
56
56
|
.password-verify-dialog__description {
|
|
57
57
|
margin-bottom: 24px;
|
|
58
|
-
color:
|
|
58
|
+
color: var(--kratos-color-text-muted);
|
|
59
59
|
font-size: 26px;
|
|
60
60
|
line-height: 1.6;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
.password-verify-dialog__label {
|
|
64
64
|
margin-bottom: 12px;
|
|
65
|
-
color:
|
|
65
|
+
color: var(--kratos-color-text);
|
|
66
66
|
font-size: 28px;
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -73,19 +73,19 @@
|
|
|
73
73
|
height: 84px;
|
|
74
74
|
margin: 0;
|
|
75
75
|
padding: 0 24px;
|
|
76
|
-
color:
|
|
76
|
+
color: var(--kratos-color-text) !important;
|
|
77
77
|
font-size: 30px;
|
|
78
78
|
line-height: 84px;
|
|
79
79
|
text-align: left;
|
|
80
|
-
background:
|
|
81
|
-
border:
|
|
80
|
+
background: var(--kratos-color-surface-2);
|
|
81
|
+
border: 1PX solid var(--kratos-color-border);
|
|
82
82
|
border-radius: 8px;
|
|
83
83
|
outline: none;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
.password-verify-dialog__error {
|
|
87
87
|
margin-top: 10px;
|
|
88
|
-
color:
|
|
88
|
+
color: var(--kratos-color-danger);
|
|
89
89
|
font-size: 24px;
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -119,14 +119,14 @@
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
.password-verify-dialog__button--cancel {
|
|
122
|
-
color:
|
|
123
|
-
-webkit-text-fill-color:
|
|
124
|
-
background-color:
|
|
122
|
+
color: var(--kratos-color-text-muted) !important;
|
|
123
|
+
-webkit-text-fill-color: var(--kratos-color-text-muted);
|
|
124
|
+
background-color: var(--kratos-color-track);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
.password-verify-dialog__button--confirm {
|
|
128
|
-
color:
|
|
129
|
-
background-color:
|
|
128
|
+
color: var(--kratos-color-on-primary);
|
|
129
|
+
background-color: var(--kratos-color-primary);
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
.password-verify-dialog__button[disabled] {
|
|
@@ -134,13 +134,13 @@
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
.password-verify-dialog__button--cancel[disabled] {
|
|
137
|
-
color:
|
|
138
|
-
-webkit-text-fill-color:
|
|
139
|
-
background-color:
|
|
137
|
+
color: var(--kratos-color-text-muted) !important;
|
|
138
|
+
-webkit-text-fill-color: var(--kratos-color-text-muted);
|
|
139
|
+
background-color: var(--kratos-color-track);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
.password-verify-dialog__button--confirm[disabled] {
|
|
143
|
-
color:
|
|
144
|
-
-webkit-text-fill-color:
|
|
145
|
-
background-color:
|
|
143
|
+
color: var(--kratos-color-on-primary) !important;
|
|
144
|
+
-webkit-text-fill-color: var(--kratos-color-on-primary);
|
|
145
|
+
background-color: var(--kratos-color-primary);
|
|
146
146
|
}
|
package/src/navigation.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { resolveStaticView } from './module'
|
|
|
6
6
|
import { matchLogicalPath, parseLogicalQuery } from './navigation-pattern.mjs'
|
|
7
7
|
import { buildMenuTree } from './navigation-tree.mjs'
|
|
8
8
|
import { hasValidToken } from './utils/auth'
|
|
9
|
-
import {
|
|
9
|
+
import { redirectToLogin } from './utils/navigation'
|
|
10
10
|
import { getCurrentLocale, t } from './locales'
|
|
11
11
|
import { useSettingStore } from './stores'
|
|
12
12
|
|
|
@@ -270,8 +270,9 @@ export function navigateAppRoute(rawRoute: string, options: { replace?: boolean
|
|
|
270
270
|
launchAppStatus('NOT_FOUND')
|
|
271
271
|
return
|
|
272
272
|
}
|
|
273
|
+
// 守卫拦截用替换式跳转:登录页顶掉当前页,返回时不再弹回被拦截的页面形成循环。
|
|
273
274
|
if (resolved.menu.access === 'AUTHENTICATED' && !hasValidToken()) {
|
|
274
|
-
|
|
275
|
+
redirectToLogin(`/pages/bootstrap/index?route=${encodeURIComponent(rawRoute)}`)
|
|
275
276
|
return
|
|
276
277
|
}
|
|
277
278
|
if (resolved.menu.access === 'GUEST_ONLY' && hasValidToken()) {
|
|
@@ -327,7 +328,9 @@ function navigateTabRoute(url: string): void {
|
|
|
327
328
|
if (tabNavigationTarget === targetRoute) tabNavigationTarget = undefined
|
|
328
329
|
}
|
|
329
330
|
if (process.env.TARO_ENV === 'h5') {
|
|
330
|
-
void Taro.
|
|
331
|
+
void Taro.redirectTo({ url }).then(release, () => {
|
|
332
|
+
void Taro.reLaunch({ url }).then(release, release)
|
|
333
|
+
})
|
|
331
334
|
return
|
|
332
335
|
}
|
|
333
336
|
if (nativeTabViewKeys.some((viewKey) => resolveStaticView(viewKey) === targetRoute)) {
|
package/src/pages.ts
CHANGED
|
@@ -9,8 +9,10 @@ export const corePages: Record<string, KratosTaroPageConfig> = {
|
|
|
9
9
|
navigationBarTitleText: '',
|
|
10
10
|
},
|
|
11
11
|
},
|
|
12
|
-
'pages/login/login': {
|
|
13
|
-
|
|
12
|
+
'pages/login/login': {
|
|
13
|
+
style: { navigationStyle: 'custom', navigationBarTitleText: '' },
|
|
14
|
+
},
|
|
15
|
+
'pages/login/protocal': { style: { navigationStyle: 'custom', navigationBarTitleText: '' } },
|
|
14
16
|
'pages/webview/webview': { style: { navigationBarTitleText: '' } },
|
|
15
17
|
'pages/status/index': {
|
|
16
18
|
style: {
|
package/src/rpc/base/v1/file.ts
CHANGED
package/src/rpc/base/v1/login.ts
CHANGED
package/src/rpc/base/v1/mcp.ts
CHANGED
package/src/rpc/base/v1/mfa.ts
CHANGED
package/src/rpc/base/v1/oauth.ts
CHANGED
package/src/rpc/base/v1/sse.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.
|
|
3
|
+
// protoc-gen-ts_proto v2.7.7
|
|
4
4
|
// protoc unknown
|
|
5
5
|
// source: google/protobuf/struct.proto
|
|
6
6
|
|
|
@@ -47,7 +47,7 @@ export interface Struct_FieldsEntry {
|
|
|
47
47
|
*/
|
|
48
48
|
export interface Value {
|
|
49
49
|
/** The kind of value. */
|
|
50
|
-
kind
|
|
50
|
+
kind?:
|
|
51
51
|
| //
|
|
52
52
|
/** Represents a null value. */
|
|
53
53
|
{ $case: "null_value"; null_value: NullValue }
|
package/src/stores/index.ts
CHANGED