@liujitcn/kratos-taro-app-system 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/README.md +1 -1
- package/dist/build.mjs +2 -2
- package/dist/module.mjs +54 -6
- package/package.json +3 -3
- package/src/api/base/v1/ai_knowledge.ts +25 -0
- package/src/locales/en-US.json +13 -1
- package/src/locales/ja-JP.json +13 -1
- package/src/locales/zh-CN.json +13 -1
- package/src/locales/zh-TW.json +13 -1
- package/src/pages.ts +2 -2
- package/src/rpc/base/v1/ai_knowledge.ts +33 -0
- package/src/rpc/base/v1/ai_message.ts +1 -1
- package/src/rpc/base/v1/ai_provider.ts +1 -1
- package/src/rpc/base/v1/ai_search.ts +1 -1
- package/src/rpc/base/v1/ai_session.ts +1 -1
- package/src/rpc/base/v1/ai_tool.ts +1 -1
- package/src/rpc/base/v1/notification.ts +1 -1
- package/src/rpc/google/protobuf/empty.ts +1 -1
- package/src/rpc/google/protobuf/timestamp.ts +1 -1
- package/src/views/pages/my/my.scss +28 -109
- package/src/views/pages/my/my.tsx +62 -49
- package/src/views/pagesMember/ai/components/Composer.tsx +52 -3
- package/src/views/pagesMember/ai/components/KnowledgePicker.tsx +58 -0
- package/src/views/pagesMember/ai/components/SessionDrawer.tsx +8 -5
- package/src/views/pagesMember/ai/components/WelcomePanel.tsx +7 -4
- package/src/views/pagesMember/ai/components/composer.scss +28 -23
- package/src/views/pagesMember/ai/components/knowledge-picker.scss +139 -0
- package/src/views/pagesMember/ai/components/model-picker.scss +24 -18
- package/src/views/pagesMember/ai/components/session-drawer.scss +44 -22
- package/src/views/pagesMember/ai/components/welcome-panel.scss +28 -17
- package/src/views/pagesMember/ai/index.scss +35 -72
- package/src/views/pagesMember/ai/index.tsx +47 -14
- package/src/views/pagesMember/message/detail.tsx +43 -25
- package/src/views/pagesMember/message/index.tsx +107 -98
- package/src/views/pagesMember/message/message.scss +78 -179
- package/src/views/pagesMember/profile/profile.scss +43 -99
- package/src/views/pagesMember/profile/profile.tsx +68 -48
- package/src/views/pagesMember/settings/components/PasswordVerifyDialog.scss +14 -13
- package/src/views/pagesMember/settings/settings.scss +27 -68
- package/src/views/pagesMember/settings/settings.tsx +161 -36
|
@@ -1,135 +1,79 @@
|
|
|
1
1
|
.profile-viewport {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
2
|
min-height: 100vh;
|
|
5
|
-
background
|
|
6
|
-
|
|
7
|
-
background-repeat: no-repeat;
|
|
3
|
+
background: var(--kratos-bg-gradient);
|
|
4
|
+
color: var(--kratos-color-text);
|
|
8
5
|
}
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
/* k-page-nav 自带安全区顶部内边距,这里只补水平与底部 */
|
|
8
|
+
.profile-content {
|
|
9
|
+
padding: 0 32px calc(40px + env(safe-area-inset-bottom));
|
|
12
10
|
}
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
justify-content: center;
|
|
19
|
-
color: #fff;
|
|
20
|
-
font-size: 16PX;
|
|
21
|
-
font-weight: 500;
|
|
12
|
+
/* 头像卡 */
|
|
13
|
+
.profile-id {
|
|
14
|
+
margin-top: 8px;
|
|
15
|
+
padding: 36px 30px;
|
|
22
16
|
}
|
|
23
17
|
|
|
24
|
-
.profile-
|
|
25
|
-
position: absolute;
|
|
26
|
-
left: 0;
|
|
27
|
-
bottom: 0;
|
|
18
|
+
.profile-id__main {
|
|
28
19
|
display: flex;
|
|
29
|
-
width: 40PX;
|
|
30
|
-
height: 40PX;
|
|
31
20
|
align-items: center;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
font-size: 30PX;
|
|
21
|
+
gap: 24px;
|
|
22
|
+
min-width: 0;
|
|
35
23
|
}
|
|
36
24
|
|
|
37
|
-
.profile-
|
|
38
|
-
|
|
39
|
-
width: 100%;
|
|
40
|
-
height: 260px;
|
|
41
|
-
align-items: center;
|
|
42
|
-
justify-content: center;
|
|
43
|
-
text-align: center;
|
|
25
|
+
.profile-id__meta {
|
|
26
|
+
min-width: 0;
|
|
44
27
|
}
|
|
45
28
|
|
|
46
|
-
.profile-
|
|
47
|
-
width:
|
|
48
|
-
height:
|
|
49
|
-
border-radius:
|
|
50
|
-
background-color: #eee;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.profile-avatar__text {
|
|
54
|
-
display: block;
|
|
55
|
-
padding-top: 20px;
|
|
56
|
-
color: #fff;
|
|
57
|
-
font-size: 26px;
|
|
58
|
-
line-height: 1;
|
|
29
|
+
.profile-av-img {
|
|
30
|
+
width: 100%;
|
|
31
|
+
height: 100%;
|
|
32
|
+
border-radius: 22px;
|
|
59
33
|
}
|
|
60
34
|
|
|
35
|
+
/* 表单卡 */
|
|
61
36
|
.profile-form {
|
|
62
|
-
|
|
37
|
+
margin-top: 24px;
|
|
38
|
+
padding: 10px 28px 28px;
|
|
63
39
|
}
|
|
64
40
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
border-radius: 10px;
|
|
69
|
-
background-color: #fff;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.profile-form__item {
|
|
73
|
-
display: flex;
|
|
74
|
-
height: 96px;
|
|
75
|
-
padding: 25px 10px;
|
|
76
|
-
border-bottom: 1px solid #ddd;
|
|
77
|
-
background-color: #fff;
|
|
78
|
-
color: #333;
|
|
79
|
-
font-size: 28px;
|
|
80
|
-
line-height: 46px;
|
|
81
|
-
|
|
82
|
-
&:last-child {
|
|
83
|
-
border: 0;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.profile-label {
|
|
88
|
-
width: 180px;
|
|
89
|
-
color: #333;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.profile-account {
|
|
93
|
-
color: #666;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.profile-placeholder {
|
|
97
|
-
color: #808080;
|
|
41
|
+
/* 子项字段包在 Picker 中会命中 :first-child,恢复分隔线 */
|
|
42
|
+
.profile-field--sub {
|
|
43
|
+
border-top: 1PX solid var(--kratos-color-border);
|
|
98
44
|
}
|
|
99
45
|
|
|
100
46
|
.profile-input {
|
|
101
|
-
display: block;
|
|
102
47
|
flex: 1;
|
|
103
|
-
height: 46px;
|
|
48
|
+
min-height: 46px;
|
|
104
49
|
}
|
|
105
50
|
|
|
106
|
-
.profile-
|
|
107
|
-
|
|
51
|
+
.profile-radios {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-wrap: wrap;
|
|
54
|
+
justify-content: flex-end;
|
|
55
|
+
gap: 24px;
|
|
108
56
|
}
|
|
109
57
|
|
|
110
|
-
.profile-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
font-size: 30px;
|
|
116
|
-
line-height: 80px;
|
|
117
|
-
text-align: center;
|
|
118
|
-
background-color: #27ba9b;
|
|
58
|
+
.profile-radio {
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
color: var(--kratos-color-text);
|
|
62
|
+
font-size: 25px;
|
|
119
63
|
}
|
|
120
64
|
|
|
121
65
|
.profile-auth-button {
|
|
122
66
|
height: 60px;
|
|
123
|
-
padding: 0 20px;
|
|
124
67
|
margin: 0;
|
|
125
|
-
|
|
126
|
-
border
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
68
|
+
padding: 0 24px;
|
|
69
|
+
border: 1PX solid var(--kratos-color-border-accent);
|
|
70
|
+
border-radius: 999px;
|
|
71
|
+
background: var(--kratos-color-primary-soft);
|
|
72
|
+
color: var(--kratos-color-primary);
|
|
73
|
+
font-size: 24px;
|
|
74
|
+
line-height: 58px;
|
|
131
75
|
|
|
132
76
|
&::after {
|
|
133
|
-
border:
|
|
77
|
+
border: none;
|
|
134
78
|
}
|
|
135
79
|
}
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
import Taro, { useLoad } from '@tarojs/taro'
|
|
13
13
|
import { useEffect, useRef, useState } from 'react'
|
|
14
14
|
import defaultAvatar from '@liujitcn/kratos-taro-app-core/static/images/avatar.png'
|
|
15
|
-
import navigatorBackground from '@liujitcn/kratos-taro-app-core/static/images/navigator_bg.png'
|
|
16
15
|
import { defAuthService } from '@liujitcn/kratos-taro-app-core/api/system/app/v1/auth'
|
|
17
16
|
import { defBaseDictService } from '@liujitcn/kratos-taro-app-core/api/system/app/v1/base_dict'
|
|
18
17
|
import type { BaseDictForm_DictItem } from '@liujitcn/kratos-taro-app-core/rpc/system/app/v1/base_dict'
|
|
@@ -23,6 +22,7 @@ import {
|
|
|
23
22
|
navigateToLogin,
|
|
24
23
|
uploadFile,
|
|
25
24
|
useI18n,
|
|
25
|
+
useThemeStore,
|
|
26
26
|
useUserStore,
|
|
27
27
|
} from '@liujitcn/kratos-taro-app-core'
|
|
28
28
|
import './profile.scss'
|
|
@@ -33,7 +33,8 @@ const ID_CODE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9-]{0,63}$/
|
|
|
33
33
|
|
|
34
34
|
/** 用户个人资料编辑页。 */
|
|
35
35
|
export default function ProfilePage() {
|
|
36
|
-
const {
|
|
36
|
+
const { t } = useI18n()
|
|
37
|
+
const themeStore = useThemeStore()
|
|
37
38
|
const [userInfo, setUserInfo] = useState<UserProfileForm>({
|
|
38
39
|
user_name: '',
|
|
39
40
|
nick_name: '',
|
|
@@ -48,7 +49,6 @@ export default function ProfilePage() {
|
|
|
48
49
|
const submittingRef = useRef(false)
|
|
49
50
|
const navigateBackTimerRef = useRef<ReturnType<typeof setTimeout>>()
|
|
50
51
|
const ensureAuthenticated = useUserStore((state) => state.ensureAuthenticated)
|
|
51
|
-
const safeTop = Taro.getWindowInfo().safeArea?.top || 0
|
|
52
52
|
const idTypeOptions = [
|
|
53
53
|
{ label: t('system.profile.id_type.unspecified'), value: BaseUserIDType.BASE_USER_ID_TYPE_UNSPECIFIED },
|
|
54
54
|
{ label: t('system.profile.id_type.id_card'), value: BaseUserIDType.BASE_USER_ID_TYPE_ID_CARD },
|
|
@@ -63,10 +63,6 @@ export default function ProfilePage() {
|
|
|
63
63
|
]
|
|
64
64
|
const idTypeIndex = Math.max(0, idTypeOptions.findIndex((item) => item.value === userInfo.id_type))
|
|
65
65
|
|
|
66
|
-
useEffect(() => {
|
|
67
|
-
void Taro.setNavigationBarTitle({ title: t('system.profile.title') })
|
|
68
|
-
}, [locale, t])
|
|
69
|
-
|
|
70
66
|
useEffect(() => {
|
|
71
67
|
return () => {
|
|
72
68
|
if (navigateBackTimerRef.current) clearTimeout(navigateBackTimerRef.current)
|
|
@@ -153,44 +149,63 @@ export default function ProfilePage() {
|
|
|
153
149
|
}
|
|
154
150
|
|
|
155
151
|
return (
|
|
156
|
-
<View
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
152
|
+
<View
|
|
153
|
+
className={`profile-viewport ${themeStore.theme === 'light' ? 'theme-light' : 'theme-dark'}`}
|
|
154
|
+
>
|
|
155
|
+
<View className='profile-content'>
|
|
156
|
+
<View className={`k-page-nav ${process.env.TARO_ENV === 'weapp' ? 'k-page-nav--weapp' : ''}`}>
|
|
157
|
+
<View
|
|
158
|
+
className='k-page-nav__back'
|
|
159
|
+
aria-label={t('common.action.back')}
|
|
160
|
+
onClick={() => void Taro.navigateBack()}
|
|
161
|
+
/>
|
|
162
|
+
<View className='k-page-nav__title'>{t('system.profile.title')}</View>
|
|
163
|
+
<View className='k-page-nav__side' aria-hidden />
|
|
165
164
|
</View>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
165
|
+
|
|
166
|
+
<View className='k-glass k-glass--lit k-pfx profile-id' onClick={() => void onAvatarChange()}>
|
|
167
|
+
<View className='k-cnr k-cnr--tl' aria-hidden />
|
|
168
|
+
<View className='k-cnr k-cnr--br' aria-hidden />
|
|
169
|
+
<View className='profile-id__main'>
|
|
170
|
+
<View className='k-pfx__av'>
|
|
171
|
+
<Image className='profile-av-img' src={userInfo.avatar ? formatSrc(userInfo.avatar) : defaultAvatar} mode='aspectFill' />
|
|
172
|
+
</View>
|
|
173
|
+
<View className='profile-id__meta'>
|
|
174
|
+
<View className='k-pfx__nm'>{userInfo.nick_name || t('system.profile.title')}</View>
|
|
175
|
+
<View className='k-pfx__ac'>{userInfo.user_name}</View>
|
|
176
|
+
</View>
|
|
177
|
+
</View>
|
|
178
|
+
<View className='k-pfx__ent'>{t('system.profile.avatar_change')}</View>
|
|
179
|
+
</View>
|
|
180
|
+
|
|
181
|
+
<View className='k-glass profile-form'>
|
|
182
|
+
<View className='k-phd'>
|
|
183
|
+
<View className='k-phd__title'>{t('system.profile.title')}</View>
|
|
184
|
+
</View>
|
|
185
|
+
|
|
169
186
|
{userInfo.user_name ? (
|
|
170
|
-
<View className='
|
|
171
|
-
<Text className='
|
|
172
|
-
<Text className='
|
|
187
|
+
<View className='k-field'>
|
|
188
|
+
<Text className='k-field__k'>{t('system.profile.account')}</Text>
|
|
189
|
+
<Text className='k-field__v'>{userInfo.user_name}</Text>
|
|
173
190
|
</View>
|
|
174
191
|
) : null}
|
|
175
192
|
{process.env.TARO_ENV === 'weapp' ? (
|
|
176
|
-
<View className='
|
|
177
|
-
<Text className='
|
|
178
|
-
|
|
179
|
-
{userInfo.phone
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
)}
|
|
184
|
-
</View>
|
|
193
|
+
<View className='k-field'>
|
|
194
|
+
<Text className='k-field__k'>{t('system.profile.mobile')}</Text>
|
|
195
|
+
{userInfo.phone ? (
|
|
196
|
+
<Text className='k-field__v'>{userInfo.phone}</Text>
|
|
197
|
+
) : (
|
|
198
|
+
<Button className='profile-auth-button' openType='getPhoneNumber' onGetPhoneNumber={onGetPhoneNumber}>{t('system.profile.phone_authorization')}</Button>
|
|
199
|
+
)}
|
|
185
200
|
</View>
|
|
186
201
|
) : null}
|
|
187
|
-
<View className='
|
|
188
|
-
<Text className='
|
|
189
|
-
<Input className='profile-input' placeholder={t('system.profile.nick_name_placeholder')} value={userInfo.nick_name} onInput={(event) => setUserInfo((current) => ({ ...current, nick_name: event.detail.value }))} />
|
|
202
|
+
<View className='k-field'>
|
|
203
|
+
<Text className='k-field__k'>{t('system.profile.nick_name')}</Text>
|
|
204
|
+
<Input className='k-field__v profile-input' placeholder={t('system.profile.nick_name_placeholder')} value={userInfo.nick_name} onInput={(event) => setUserInfo((current) => ({ ...current, nick_name: event.detail.value }))} />
|
|
190
205
|
</View>
|
|
191
|
-
<View className='
|
|
192
|
-
<Text className='
|
|
193
|
-
<Input className='profile-input' type='text' placeholder={t('system.profile.email_placeholder')} value={userInfo.email} onInput={(event) => setUserInfo((current) => ({ ...current, email: event.detail.value }))} />
|
|
206
|
+
<View className='k-field'>
|
|
207
|
+
<Text className='k-field__k'>{t('system.profile.email')}</Text>
|
|
208
|
+
<Input className='k-field__v profile-input' type='text' placeholder={t('system.profile.email_placeholder')} value={userInfo.email} onInput={(event) => setUserInfo((current) => ({ ...current, email: event.detail.value }))} />
|
|
194
209
|
</View>
|
|
195
210
|
<Picker
|
|
196
211
|
mode='selector'
|
|
@@ -198,28 +213,33 @@ export default function ProfilePage() {
|
|
|
198
213
|
value={idTypeIndex}
|
|
199
214
|
onChange={(event) => setUserInfo((current) => ({ ...current, id_type: idTypeOptions[Number(event.detail.value)]?.value ?? BaseUserIDType.BASE_USER_ID_TYPE_UNSPECIFIED }))}
|
|
200
215
|
>
|
|
201
|
-
<View className='profile-
|
|
202
|
-
<Text className='
|
|
203
|
-
<Text className='
|
|
216
|
+
<View className='k-field profile-field--sub'>
|
|
217
|
+
<Text className='k-field__k'>{t('system.profile.id_type')}</Text>
|
|
218
|
+
<Text className='k-field__v'>{idTypeOptions[idTypeIndex]?.label}</Text>
|
|
204
219
|
</View>
|
|
205
220
|
</Picker>
|
|
206
|
-
<View className='
|
|
207
|
-
<Text className='
|
|
208
|
-
<Input className='profile-input' type='text' placeholder={t('system.profile.id_code_placeholder')} value={userInfo.id_code} onInput={(event) => setUserInfo((current) => ({ ...current, id_code: event.detail.value }))} />
|
|
221
|
+
<View className='k-field'>
|
|
222
|
+
<Text className='k-field__k'>{t('system.profile.id_code')}</Text>
|
|
223
|
+
<Input className='k-field__v profile-input' type='text' placeholder={t('system.profile.id_code_placeholder')} value={userInfo.id_code} onInput={(event) => setUserInfo((current) => ({ ...current, id_code: event.detail.value }))} />
|
|
209
224
|
</View>
|
|
210
|
-
<View className='
|
|
211
|
-
<Text className='
|
|
212
|
-
<RadioGroup onChange={(event) => setUserInfo((current) => ({ ...current, gender: Number(event.detail.value) }))}>
|
|
225
|
+
<View className='k-field'>
|
|
226
|
+
<Text className='k-field__k'>{t('system.profile.gender')}</Text>
|
|
227
|
+
<RadioGroup className='profile-radios' onChange={(event) => setUserInfo((current) => ({ ...current, gender: Number(event.detail.value) }))}>
|
|
213
228
|
{genderList.map((item) => (
|
|
214
229
|
<Label className='profile-radio' key={item.value}>
|
|
215
|
-
<Radio
|
|
230
|
+
<Radio
|
|
231
|
+
value={item.value}
|
|
232
|
+
color={themeStore.theme === 'light' ? '#039e8c' : '#28f0d4'}
|
|
233
|
+
checked={userInfo.gender === Number(item.value)}
|
|
234
|
+
/>
|
|
216
235
|
{item.label}
|
|
217
236
|
</Label>
|
|
218
237
|
))}
|
|
219
238
|
</RadioGroup>
|
|
220
239
|
</View>
|
|
240
|
+
|
|
241
|
+
<Button className='k-save' onClick={() => void onSubmit()}>{t('common.action.save')}</Button>
|
|
221
242
|
</View>
|
|
222
|
-
<Button className='profile-form__button' onClick={() => void onSubmit()}>{t('common.action.save')}</Button>
|
|
223
243
|
</View>
|
|
224
244
|
</View>
|
|
225
245
|
)
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
max-width: 680px;
|
|
18
18
|
overflow: hidden;
|
|
19
19
|
border-radius: 16px;
|
|
20
|
-
background-color:
|
|
20
|
+
background-color: var(--kratos-color-surface-solid);
|
|
21
21
|
box-shadow: 0 20px 64px rgba(0, 0, 0, 0.2);
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -26,18 +26,18 @@
|
|
|
26
26
|
align-items: center;
|
|
27
27
|
justify-content: space-between;
|
|
28
28
|
padding: 28px 32px;
|
|
29
|
-
border-bottom:
|
|
29
|
+
border-bottom: 1PX solid var(--kratos-color-border);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
.mfa-bind-dialog__title {
|
|
33
|
-
color:
|
|
33
|
+
color: var(--kratos-color-text);
|
|
34
34
|
font-size: 34px;
|
|
35
35
|
font-weight: 600;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.mfa-bind-dialog__close {
|
|
39
39
|
padding: 0 8px;
|
|
40
|
-
color:
|
|
40
|
+
color: var(--kratos-color-text-muted);
|
|
41
41
|
font-size: 42px;
|
|
42
42
|
line-height: 1;
|
|
43
43
|
}
|
|
@@ -53,16 +53,17 @@
|
|
|
53
53
|
.mfa-bind-dialog__label {
|
|
54
54
|
display: block;
|
|
55
55
|
margin-bottom: 12px;
|
|
56
|
-
color:
|
|
56
|
+
color: var(--kratos-color-text);
|
|
57
57
|
font-size: 28px;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
.mfa-bind-dialog__input {
|
|
61
61
|
width: 100%;
|
|
62
62
|
padding: 20px 24px;
|
|
63
|
-
color:
|
|
63
|
+
color: var(--kratos-color-text);
|
|
64
64
|
font-size: 30px;
|
|
65
|
-
border:
|
|
65
|
+
border: 1PX solid var(--kratos-color-border);
|
|
66
|
+
background-color: var(--kratos-color-surface-2);
|
|
66
67
|
border-radius: 8px;
|
|
67
68
|
box-sizing: border-box;
|
|
68
69
|
}
|
|
@@ -83,7 +84,7 @@
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
.mfa-bind-dialog__error {
|
|
86
|
-
color:
|
|
87
|
+
color: var(--kratos-color-danger);
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
.mfa-bind-dialog__footer {
|
|
@@ -105,17 +106,17 @@
|
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
.mfa-bind-dialog__button--cancel {
|
|
108
|
-
color:
|
|
109
|
-
background-color:
|
|
109
|
+
color: var(--kratos-color-text-muted);
|
|
110
|
+
background-color: var(--kratos-color-track);
|
|
110
111
|
}
|
|
111
112
|
|
|
112
113
|
.mfa-bind-dialog__button--confirm {
|
|
113
|
-
color:
|
|
114
|
-
background-color:
|
|
114
|
+
color: var(--kratos-color-on-primary);
|
|
115
|
+
background-color: var(--kratos-color-primary);
|
|
115
116
|
}
|
|
116
117
|
|
|
117
118
|
.mfa-bind-dialog__button--danger {
|
|
118
|
-
background-color:
|
|
119
|
+
background-color: var(--kratos-color-danger);
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
.mfa-bind-dialog__button[disabled] {
|
|
@@ -1,82 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
min-height:
|
|
3
|
-
|
|
4
|
-
background-color: #f4f4f4;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.settings-list {
|
|
8
|
-
padding: 0 20px;
|
|
9
|
-
margin-bottom: 20px;
|
|
10
|
-
border-radius: 10px;
|
|
11
|
-
background-color: #fff;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.settings-item {
|
|
15
|
-
position: relative;
|
|
16
|
-
padding-left: 10px;
|
|
17
|
-
border-top: 1px solid #ddd;
|
|
18
|
-
border-radius: 0;
|
|
19
|
-
color: #333;
|
|
20
|
-
font-size: 30px;
|
|
21
|
-
line-height: 90px;
|
|
22
|
-
text-align: left;
|
|
23
|
-
background-color: #fff;
|
|
24
|
-
|
|
25
|
-
&:first-child {
|
|
26
|
-
border: 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
&::after {
|
|
30
|
-
border: 0;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.settings-arrow::before {
|
|
35
|
-
content: '›';
|
|
36
|
-
position: absolute;
|
|
37
|
-
top: 50%;
|
|
38
|
-
right: 5px;
|
|
39
|
-
color: #ccc;
|
|
40
|
-
font-size: 36px;
|
|
41
|
-
transform: translateY(-50%);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.settings-action {
|
|
45
|
-
margin-top: 40px;
|
|
46
|
-
color: #333;
|
|
47
|
-
font-size: 32px;
|
|
48
|
-
line-height: 90px;
|
|
49
|
-
text-align: center;
|
|
1
|
+
page {
|
|
2
|
+
min-height: 100%;
|
|
3
|
+
background-color: #eef3f8;
|
|
50
4
|
}
|
|
51
5
|
|
|
52
|
-
.settings-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
padding
|
|
6
|
+
.settings-viewport {
|
|
7
|
+
min-height: 100vh;
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
padding: 0 32px calc(40px + env(safe-area-inset-bottom));
|
|
10
|
+
background: var(--kratos-bg-gradient);
|
|
56
11
|
}
|
|
57
12
|
|
|
58
|
-
.settings-
|
|
59
|
-
|
|
13
|
+
.settings-content {
|
|
14
|
+
padding-bottom: 20px;
|
|
60
15
|
}
|
|
61
16
|
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
padding-right: 42px;
|
|
17
|
+
/* 行图标图片尺寸(挂在 .k-set-row__icon 内的 Image 上) */
|
|
18
|
+
.settings-row__icon {
|
|
19
|
+
width: 38px;
|
|
20
|
+
height: 38px;
|
|
67
21
|
}
|
|
68
22
|
|
|
69
|
-
.
|
|
70
|
-
|
|
23
|
+
/* 行尾值文本截断(配合全局 .k-set-row__value 使用) */
|
|
24
|
+
.settings-row__value {
|
|
25
|
+
min-width: 0;
|
|
26
|
+
max-width: 45%;
|
|
71
27
|
overflow: hidden;
|
|
72
|
-
color: #888;
|
|
73
|
-
font-size: 26px;
|
|
74
28
|
text-overflow: ellipsis;
|
|
75
29
|
white-space: nowrap;
|
|
76
30
|
}
|
|
77
31
|
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
32
|
+
/* 小程序 Button 皮肤为 .k-set-row:去掉原生边框,保留箭头 ::after */
|
|
33
|
+
.settings-row--button {
|
|
34
|
+
line-height: normal;
|
|
35
|
+
|
|
36
|
+
&::after {
|
|
37
|
+
position: static;
|
|
38
|
+
border-left: 0;
|
|
39
|
+
border-bottom: 0;
|
|
40
|
+
}
|
|
82
41
|
}
|