af-mobile-client-vue3 1.2.15 → 1.2.16
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/package.json +113 -113
- package/src/api/user/index.ts +40 -40
- package/src/components/data/XCellList/index.vue +12 -2
- package/src/components/data/XCellListFilter/index.vue +14 -1
- package/src/components/data/XFormItem/index.vue +17 -1
- package/src/services/api/Login.ts +6 -6
- package/src/stores/modules/setting.ts +58 -62
- package/src/stores/modules/user.ts +231 -235
- package/src/styles/login.less +95 -112
- package/src/utils/queryFormDefaultRangePicker.ts +57 -57
- package/src/views/component/XCellListView/index.vue +56 -21
- package/src/views/component/XFormGroupView/index.vue +7 -4
- package/src/views/user/login/LoginForm.vue +250 -308
- package/vite.config.ts +108 -118
- package/certs/127.0.0.1+2-key.pem +0 -28
- package/certs/127.0.0.1+2.pem +0 -27
|
@@ -1,235 +1,231 @@
|
|
|
1
|
-
import type { RouteRecordRaw } from 'vue-router'
|
|
2
|
-
import { doLogout, login, OALogin } from '@af-mobile-client-vue3/api/user'
|
|
3
|
-
import router from '@af-mobile-client-vue3/router/index'
|
|
4
|
-
import { useSettingStore } from '@af-mobile-client-vue3/stores/modules/setting'
|
|
5
|
-
import {
|
|
6
|
-
ACCESS_TOKEN,
|
|
7
|
-
APP_LOGIN_KEY,
|
|
8
|
-
APP_PERMISSIONS_KEY,
|
|
9
|
-
APP_ROLES_KEY,
|
|
10
|
-
APP_ROUTES_KEY,
|
|
11
|
-
APP_WEB_CONFIG_KEY,
|
|
12
|
-
CURRENT_USER,
|
|
13
|
-
} from '@af-mobile-client-vue3/stores/mutation-type'
|
|
14
|
-
import crypto from '@af-mobile-client-vue3/utils/crypto'
|
|
15
|
-
import { indexedDB } from '@af-mobile-client-vue3/utils/indexedDB'
|
|
16
|
-
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
17
|
-
import { defineStore } from 'pinia'
|
|
18
|
-
import { ref } from 'vue'
|
|
19
|
-
|
|
20
|
-
const Storage = createStorage({ storage: localStorage })
|
|
21
|
-
|
|
22
|
-
export interface UserInfo {
|
|
23
|
-
id: number
|
|
24
|
-
username: string
|
|
25
|
-
password: string
|
|
26
|
-
name: string
|
|
27
|
-
avatar: string
|
|
28
|
-
functions: Array<any>
|
|
29
|
-
rolestr: string
|
|
30
|
-
f_operator: string
|
|
31
|
-
f_operatorid: string
|
|
32
|
-
f_orgid: string
|
|
33
|
-
f_orgname: string
|
|
34
|
-
f_depid: string
|
|
35
|
-
f_depname: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
interface IUserState {
|
|
39
|
-
token?: string
|
|
40
|
-
userInfo: UserInfo
|
|
41
|
-
lastUpdateTime: number
|
|
42
|
-
permissions: string[]
|
|
43
|
-
roles: [{ id: string, operation: string[] }]
|
|
44
|
-
routesConfig: Array<any>
|
|
45
|
-
single: Array<ExtraRouteRecordRaw>
|
|
46
|
-
login: any
|
|
47
|
-
tenantName: string
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
type ExtraRouteRecordRaw = RouteRecordRaw & {
|
|
51
|
-
delete: boolean
|
|
52
|
-
fullPath: string
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
interface LoginParams {
|
|
56
|
-
username: string
|
|
57
|
-
password: string
|
|
58
|
-
resourceName: string
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
interface WxParams {
|
|
62
|
-
unifiedCode: string
|
|
63
|
-
tenantName: string
|
|
64
|
-
loginMode: string
|
|
65
|
-
resourceName: string
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const useUserStore = defineStore('app-user', () => {
|
|
69
|
-
const userState = ref<IUserState>({
|
|
70
|
-
userInfo: null,
|
|
71
|
-
token: undefined,
|
|
72
|
-
lastUpdateTime: 0,
|
|
73
|
-
// 旧营收产品$login对象
|
|
74
|
-
login: undefined,
|
|
75
|
-
permissions: null,
|
|
76
|
-
roles: null,
|
|
77
|
-
routesConfig: null,
|
|
78
|
-
single: [],
|
|
79
|
-
tenantName: '',
|
|
80
|
-
} as IUserState)
|
|
81
|
-
const getUserInfo = () => {
|
|
82
|
-
return userState.value.userInfo || Storage.get(CURRENT_USER, {}) || {}
|
|
83
|
-
}
|
|
84
|
-
const getLogin = () => {
|
|
85
|
-
return userState.value.login || Storage.get(APP_LOGIN_KEY, []) || {}
|
|
86
|
-
}
|
|
87
|
-
const getPermissions = () => {
|
|
88
|
-
return userState.value.permissions || Storage.get(APP_PERMISSIONS_KEY, []) || []
|
|
89
|
-
}
|
|
90
|
-
const getRoles = () => {
|
|
91
|
-
return userState.value.roles || Storage.get(APP_ROLES_KEY, []) || []
|
|
92
|
-
}
|
|
93
|
-
const getRoutesConfig = () => {
|
|
94
|
-
return userState.value.routesConfig || Storage.get(APP_ROUTES_KEY, []) || []
|
|
95
|
-
}
|
|
96
|
-
const getToken = () => {
|
|
97
|
-
return userState.value.token || Storage.get(ACCESS_TOKEN, '') as string
|
|
98
|
-
}
|
|
99
|
-
const getLastUpdateTime = () => {
|
|
100
|
-
return userState.value.lastUpdateTime
|
|
101
|
-
}
|
|
102
|
-
const setToken = (token: string | undefined) => {
|
|
103
|
-
Storage.set(ACCESS_TOKEN, token)
|
|
104
|
-
}
|
|
105
|
-
const setUserInfo = (info: UserInfo | null) => {
|
|
106
|
-
userState.value.userInfo = info
|
|
107
|
-
userState.value.lastUpdateTime = new Date().getTime()
|
|
108
|
-
Storage.set(CURRENT_USER, info)
|
|
109
|
-
}
|
|
110
|
-
const setLogin = (login) => {
|
|
111
|
-
userState.value.login = login
|
|
112
|
-
Storage.set(APP_LOGIN_KEY, login)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const setTenantName = (setTenantName) => {
|
|
116
|
-
userState.value.tenantName = setTenantName
|
|
117
|
-
}
|
|
118
|
-
const getTenantName = () => {
|
|
119
|
-
return userState.value.tenantName
|
|
120
|
-
}
|
|
121
|
-
const setSingle = (page: ExtraRouteRecordRaw) => {
|
|
122
|
-
if (page.path && page.delete) {
|
|
123
|
-
// 删除
|
|
124
|
-
userState.value.single = userState.value.single.filter(item => item.fullPath !== page.path)
|
|
125
|
-
}
|
|
126
|
-
else if (userState.value.single.filter(item => item.meta.singlePage === page.meta.singlePage).length === 0) {
|
|
127
|
-
// 添加
|
|
128
|
-
userState.value.single.push(page)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
const setPermissions = (permissions: []) => {
|
|
132
|
-
userState.value.permissions = permissions
|
|
133
|
-
Storage.set(APP_PERMISSIONS_KEY, permissions)
|
|
134
|
-
}
|
|
135
|
-
const setRoles = (roles: [{ id: string, operation: string[] }]) => {
|
|
136
|
-
userState.value.roles = roles
|
|
137
|
-
Storage.set(APP_ROLES_KEY, roles)
|
|
138
|
-
}
|
|
139
|
-
const setRoutesConfig = (routesConfig: Array<any>) => {
|
|
140
|
-
userState.value.routesConfig = routesConfig
|
|
141
|
-
Storage.set(APP_ROUTES_KEY, routesConfig)
|
|
142
|
-
}
|
|
143
|
-
const Login = async (params: LoginParams) => {
|
|
144
|
-
try {
|
|
145
|
-
let data: any
|
|
146
|
-
const compatible = import.meta.env.VITE_APP_COMPATIBLE
|
|
147
|
-
if (compatible === 'OA') {
|
|
148
|
-
data = await OALogin(params)
|
|
149
|
-
// save token
|
|
150
|
-
setToken(params.password)
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
data = await login(params)
|
|
154
|
-
// save token
|
|
155
|
-
setToken(data.access_token)
|
|
156
|
-
// 第三方教培系统鉴权兼容
|
|
157
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
158
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
159
|
-
}
|
|
160
|
-
return Promise.resolve(data)
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
return Promise.reject(error)
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
const loginUnified = async (params: WxParams) => {
|
|
167
|
-
try {
|
|
168
|
-
const data: any = await login(params)
|
|
169
|
-
setToken(data.access_token)
|
|
170
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
171
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
172
|
-
return Promise.resolve(data)
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
return Promise.reject(error)
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const logout = async () => {
|
|
179
|
-
if (getToken) {
|
|
180
|
-
try {
|
|
181
|
-
await doLogout()
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
console.error('注销Token失败')
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
setToken(undefined)
|
|
188
|
-
setUserInfo(null)
|
|
189
|
-
Storage.remove(CURRENT_USER)
|
|
190
|
-
Storage.remove(ACCESS_TOKEN)
|
|
191
|
-
Storage.remove(APP_LOGIN_KEY)
|
|
192
|
-
Storage.remove(APP_PERMISSIONS_KEY)
|
|
193
|
-
Storage.remove(APP_ROLES_KEY)
|
|
194
|
-
Storage.remove(APP_ROUTES_KEY)
|
|
195
|
-
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
196
|
-
Storage.remove('LoginTicket')
|
|
197
|
-
await indexedDB.clearDB()
|
|
198
|
-
await useSettingStore().init()
|
|
199
|
-
try {
|
|
200
|
-
// 添加页面刷新
|
|
201
|
-
await router.replace('/login')
|
|
202
|
-
window.location.reload()
|
|
203
|
-
}
|
|
204
|
-
catch (e) {
|
|
205
|
-
console.error(e)
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
})
|
|
234
|
-
|
|
235
|
-
export default useUserStore
|
|
1
|
+
import type { RouteRecordRaw } from 'vue-router'
|
|
2
|
+
import { doLogout, login, OALogin } from '@af-mobile-client-vue3/api/user'
|
|
3
|
+
import router from '@af-mobile-client-vue3/router/index'
|
|
4
|
+
import { useSettingStore } from '@af-mobile-client-vue3/stores/modules/setting'
|
|
5
|
+
import {
|
|
6
|
+
ACCESS_TOKEN,
|
|
7
|
+
APP_LOGIN_KEY,
|
|
8
|
+
APP_PERMISSIONS_KEY,
|
|
9
|
+
APP_ROLES_KEY,
|
|
10
|
+
APP_ROUTES_KEY,
|
|
11
|
+
APP_WEB_CONFIG_KEY,
|
|
12
|
+
CURRENT_USER,
|
|
13
|
+
} from '@af-mobile-client-vue3/stores/mutation-type'
|
|
14
|
+
import crypto from '@af-mobile-client-vue3/utils/crypto'
|
|
15
|
+
import { indexedDB } from '@af-mobile-client-vue3/utils/indexedDB'
|
|
16
|
+
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
17
|
+
import { defineStore } from 'pinia'
|
|
18
|
+
import { ref } from 'vue'
|
|
19
|
+
|
|
20
|
+
const Storage = createStorage({ storage: localStorage })
|
|
21
|
+
|
|
22
|
+
export interface UserInfo {
|
|
23
|
+
id: number
|
|
24
|
+
username: string
|
|
25
|
+
password: string
|
|
26
|
+
name: string
|
|
27
|
+
avatar: string
|
|
28
|
+
functions: Array<any>
|
|
29
|
+
rolestr: string
|
|
30
|
+
f_operator: string
|
|
31
|
+
f_operatorid: string
|
|
32
|
+
f_orgid: string
|
|
33
|
+
f_orgname: string
|
|
34
|
+
f_depid: string
|
|
35
|
+
f_depname: string
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface IUserState {
|
|
39
|
+
token?: string
|
|
40
|
+
userInfo: UserInfo
|
|
41
|
+
lastUpdateTime: number
|
|
42
|
+
permissions: string[]
|
|
43
|
+
roles: [{ id: string, operation: string[] }]
|
|
44
|
+
routesConfig: Array<any>
|
|
45
|
+
single: Array<ExtraRouteRecordRaw>
|
|
46
|
+
login: any
|
|
47
|
+
tenantName: string
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type ExtraRouteRecordRaw = RouteRecordRaw & {
|
|
51
|
+
delete: boolean
|
|
52
|
+
fullPath: string
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface LoginParams {
|
|
56
|
+
username: string
|
|
57
|
+
password: string
|
|
58
|
+
resourceName: string
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface WxParams {
|
|
62
|
+
unifiedCode: string
|
|
63
|
+
tenantName: string
|
|
64
|
+
loginMode: string
|
|
65
|
+
resourceName: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const useUserStore = defineStore('app-user', () => {
|
|
69
|
+
const userState = ref<IUserState>({
|
|
70
|
+
userInfo: null,
|
|
71
|
+
token: undefined,
|
|
72
|
+
lastUpdateTime: 0,
|
|
73
|
+
// 旧营收产品$login对象
|
|
74
|
+
login: undefined,
|
|
75
|
+
permissions: null,
|
|
76
|
+
roles: null,
|
|
77
|
+
routesConfig: null,
|
|
78
|
+
single: [],
|
|
79
|
+
tenantName: '',
|
|
80
|
+
} as IUserState)
|
|
81
|
+
const getUserInfo = () => {
|
|
82
|
+
return userState.value.userInfo || Storage.get(CURRENT_USER, {}) || {}
|
|
83
|
+
}
|
|
84
|
+
const getLogin = () => {
|
|
85
|
+
return userState.value.login || Storage.get(APP_LOGIN_KEY, []) || {}
|
|
86
|
+
}
|
|
87
|
+
const getPermissions = () => {
|
|
88
|
+
return userState.value.permissions || Storage.get(APP_PERMISSIONS_KEY, []) || []
|
|
89
|
+
}
|
|
90
|
+
const getRoles = () => {
|
|
91
|
+
return userState.value.roles || Storage.get(APP_ROLES_KEY, []) || []
|
|
92
|
+
}
|
|
93
|
+
const getRoutesConfig = () => {
|
|
94
|
+
return userState.value.routesConfig || Storage.get(APP_ROUTES_KEY, []) || []
|
|
95
|
+
}
|
|
96
|
+
const getToken = () => {
|
|
97
|
+
return userState.value.token || Storage.get(ACCESS_TOKEN, '') as string
|
|
98
|
+
}
|
|
99
|
+
const getLastUpdateTime = () => {
|
|
100
|
+
return userState.value.lastUpdateTime
|
|
101
|
+
}
|
|
102
|
+
const setToken = (token: string | undefined) => {
|
|
103
|
+
Storage.set(ACCESS_TOKEN, token)
|
|
104
|
+
}
|
|
105
|
+
const setUserInfo = (info: UserInfo | null) => {
|
|
106
|
+
userState.value.userInfo = info
|
|
107
|
+
userState.value.lastUpdateTime = new Date().getTime()
|
|
108
|
+
Storage.set(CURRENT_USER, info)
|
|
109
|
+
}
|
|
110
|
+
const setLogin = (login) => {
|
|
111
|
+
userState.value.login = login
|
|
112
|
+
Storage.set(APP_LOGIN_KEY, login)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const setTenantName = (setTenantName) => {
|
|
116
|
+
userState.value.tenantName = setTenantName
|
|
117
|
+
}
|
|
118
|
+
const getTenantName = () => {
|
|
119
|
+
return userState.value.tenantName
|
|
120
|
+
}
|
|
121
|
+
const setSingle = (page: ExtraRouteRecordRaw) => {
|
|
122
|
+
if (page.path && page.delete) {
|
|
123
|
+
// 删除
|
|
124
|
+
userState.value.single = userState.value.single.filter(item => item.fullPath !== page.path)
|
|
125
|
+
}
|
|
126
|
+
else if (userState.value.single.filter(item => item.meta.singlePage === page.meta.singlePage).length === 0) {
|
|
127
|
+
// 添加
|
|
128
|
+
userState.value.single.push(page)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const setPermissions = (permissions: []) => {
|
|
132
|
+
userState.value.permissions = permissions
|
|
133
|
+
Storage.set(APP_PERMISSIONS_KEY, permissions)
|
|
134
|
+
}
|
|
135
|
+
const setRoles = (roles: [{ id: string, operation: string[] }]) => {
|
|
136
|
+
userState.value.roles = roles
|
|
137
|
+
Storage.set(APP_ROLES_KEY, roles)
|
|
138
|
+
}
|
|
139
|
+
const setRoutesConfig = (routesConfig: Array<any>) => {
|
|
140
|
+
userState.value.routesConfig = routesConfig
|
|
141
|
+
Storage.set(APP_ROUTES_KEY, routesConfig)
|
|
142
|
+
}
|
|
143
|
+
const Login = async (params: LoginParams) => {
|
|
144
|
+
try {
|
|
145
|
+
let data: any
|
|
146
|
+
const compatible = import.meta.env.VITE_APP_COMPATIBLE
|
|
147
|
+
if (compatible === 'OA') {
|
|
148
|
+
data = await OALogin(params)
|
|
149
|
+
// save token
|
|
150
|
+
setToken(params.password)
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
data = await login(params)
|
|
154
|
+
// save token
|
|
155
|
+
setToken(data.access_token)
|
|
156
|
+
// 第三方教培系统鉴权兼容
|
|
157
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
158
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
159
|
+
}
|
|
160
|
+
return Promise.resolve(data)
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return Promise.reject(error)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const loginUnified = async (params: WxParams) => {
|
|
167
|
+
try {
|
|
168
|
+
const data: any = await login(params)
|
|
169
|
+
setToken(data.access_token)
|
|
170
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
171
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
172
|
+
return Promise.resolve(data)
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
return Promise.reject(error)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const logout = async () => {
|
|
179
|
+
if (getToken) {
|
|
180
|
+
try {
|
|
181
|
+
await doLogout()
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
console.error('注销Token失败')
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
setToken(undefined)
|
|
188
|
+
setUserInfo(null)
|
|
189
|
+
Storage.remove(CURRENT_USER)
|
|
190
|
+
Storage.remove(ACCESS_TOKEN)
|
|
191
|
+
Storage.remove(APP_LOGIN_KEY)
|
|
192
|
+
Storage.remove(APP_PERMISSIONS_KEY)
|
|
193
|
+
Storage.remove(APP_ROLES_KEY)
|
|
194
|
+
Storage.remove(APP_ROUTES_KEY)
|
|
195
|
+
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
196
|
+
Storage.remove('LoginTicket')
|
|
197
|
+
await indexedDB.clearDB()
|
|
198
|
+
await useSettingStore().init()
|
|
199
|
+
try {
|
|
200
|
+
// 添加页面刷新
|
|
201
|
+
await router.replace('/login')
|
|
202
|
+
window.location.reload()
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
console.error(e)
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return {
|
|
210
|
+
Login,
|
|
211
|
+
loginUnified,
|
|
212
|
+
getToken,
|
|
213
|
+
getLastUpdateTime,
|
|
214
|
+
logout,
|
|
215
|
+
setUserInfo,
|
|
216
|
+
getUserInfo,
|
|
217
|
+
getLogin,
|
|
218
|
+
getPermissions,
|
|
219
|
+
getRoles,
|
|
220
|
+
getRoutesConfig,
|
|
221
|
+
setLogin,
|
|
222
|
+
setSingle,
|
|
223
|
+
setPermissions,
|
|
224
|
+
setRoles,
|
|
225
|
+
setRoutesConfig,
|
|
226
|
+
setTenantName,
|
|
227
|
+
getTenantName,
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
export default useUserStore
|
package/src/styles/login.less
CHANGED
|
@@ -1,112 +1,95 @@
|
|
|
1
|
-
html:not(.dark) {
|
|
2
|
-
.form {
|
|
3
|
-
.form_field {
|
|
4
|
-
:deep(.van-field__label) {
|
|
5
|
-
color: rgb(88, 88, 88);
|
|
6
|
-
}
|
|
7
|
-
:deep(.van-field__body) {
|
|
8
|
-
background: rgb(251, 251, 251);
|
|
9
|
-
box-shadow: inset 0 0 1px 0 rgba(0, 0, 0, 0.1);
|
|
10
|
-
color: rgb(71, 71, 71);
|
|
11
|
-
}
|
|
12
|
-
:deep(.van-cell) {
|
|
13
|
-
background: #ffffff;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
.extra_setting {
|
|
17
|
-
.extra_setting_for_remember_password {
|
|
18
|
-
color: rgb(88, 88, 88);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
.form {
|
|
24
|
-
width: 100%;
|
|
25
|
-
padding: 0 40px;
|
|
26
|
-
.form_field {
|
|
27
|
-
padding-right: 0;
|
|
28
|
-
padding-left: 0;
|
|
29
|
-
:deep(.van-field__label) {
|
|
30
|
-
opacity: 0.7;
|
|
31
|
-
font-size: 16px;
|
|
32
|
-
font-weight: 400;
|
|
33
|
-
line-height: 23px;
|
|
34
|
-
text-transform: uppercase;
|
|
35
|
-
text-indent: 10px;
|
|
36
|
-
}
|
|
37
|
-
:deep(.van-field__body) {
|
|
38
|
-
height: 40px;
|
|
39
|
-
border-radius: 5px;
|
|
40
|
-
font-size: 16px;
|
|
41
|
-
font-weight: 400;
|
|
42
|
-
padding: 8px 10px;
|
|
43
|
-
opacity: 0.6;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
.extra_setting {
|
|
47
|
-
font-size: 12px;
|
|
48
|
-
font-weight: 400;
|
|
49
|
-
line-height: 12px;
|
|
50
|
-
.extra_setting_for_remember_password {
|
|
51
|
-
opacity: 0.7;
|
|
52
|
-
span {
|
|
53
|
-
position: relative;
|
|
54
|
-
bottom: 3px;
|
|
55
|
-
left: 5px;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
.extra_setting_for_reset_password {
|
|
59
|
-
position: relative;
|
|
60
|
-
top: 2px;
|
|
61
|
-
opacity: 0.7;
|
|
62
|
-
color: rgb(56, 149, 250);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
.btn {
|
|
66
|
-
height: 50px;
|
|
67
|
-
:deep(.van-button__text) {
|
|
68
|
-
color: rgb(255, 255, 255);
|
|
69
|
-
font-size: 16px;
|
|
70
|
-
font-weight: 700;
|
|
71
|
-
line-height: 23px;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
.login_btn {
|
|
75
|
-
background: rgb(56, 149, 250);
|
|
76
|
-
margin-top: 104px;
|
|
77
|
-
}
|
|
78
|
-
.reset_btn {
|
|
79
|
-
margin: 24px 0;
|
|
80
|
-
}
|
|
81
|
-
.back_btn {
|
|
82
|
-
:deep(.van-button__text) {
|
|
83
|
-
color: rgb(56, 149, 250);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
:deep(.van-cell:after) {
|
|
87
|
-
border-bottom: none;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
.login_form {
|
|
91
|
-
margin-top: 65px;
|
|
92
|
-
}
|
|
93
|
-
.forget_password_form {
|
|
94
|
-
margin-top: 15px;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/* 使图标垂直居中 */
|
|
98
|
-
.wechat-login-btn .van-icon {
|
|
99
|
-
vertical-align: middle;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* 悬停效果 */
|
|
103
|
-
.wechat-login-btn:hover {
|
|
104
|
-
background-color: #06AD56 !important;
|
|
105
|
-
border-color: #06AD56 !important;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/* 点击效果 */
|
|
109
|
-
.wechat-login-btn:active {
|
|
110
|
-
background-color: #05994C !important;
|
|
111
|
-
border-color: #05994C !important;
|
|
112
|
-
}
|
|
1
|
+
html:not(.dark) {
|
|
2
|
+
.form {
|
|
3
|
+
.form_field {
|
|
4
|
+
:deep(.van-field__label) {
|
|
5
|
+
color: rgb(88, 88, 88);
|
|
6
|
+
}
|
|
7
|
+
:deep(.van-field__body) {
|
|
8
|
+
background: rgb(251, 251, 251);
|
|
9
|
+
box-shadow: inset 0 0 1px 0 rgba(0, 0, 0, 0.1);
|
|
10
|
+
color: rgb(71, 71, 71);
|
|
11
|
+
}
|
|
12
|
+
:deep(.van-cell) {
|
|
13
|
+
background: #ffffff;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
.extra_setting {
|
|
17
|
+
.extra_setting_for_remember_password {
|
|
18
|
+
color: rgb(88, 88, 88);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
.form {
|
|
24
|
+
width: 100%;
|
|
25
|
+
padding: 0 40px;
|
|
26
|
+
.form_field {
|
|
27
|
+
padding-right: 0;
|
|
28
|
+
padding-left: 0;
|
|
29
|
+
:deep(.van-field__label) {
|
|
30
|
+
opacity: 0.7;
|
|
31
|
+
font-size: 16px;
|
|
32
|
+
font-weight: 400;
|
|
33
|
+
line-height: 23px;
|
|
34
|
+
text-transform: uppercase;
|
|
35
|
+
text-indent: 10px;
|
|
36
|
+
}
|
|
37
|
+
:deep(.van-field__body) {
|
|
38
|
+
height: 40px;
|
|
39
|
+
border-radius: 5px;
|
|
40
|
+
font-size: 16px;
|
|
41
|
+
font-weight: 400;
|
|
42
|
+
padding: 8px 10px;
|
|
43
|
+
opacity: 0.6;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
.extra_setting {
|
|
47
|
+
font-size: 12px;
|
|
48
|
+
font-weight: 400;
|
|
49
|
+
line-height: 12px;
|
|
50
|
+
.extra_setting_for_remember_password {
|
|
51
|
+
opacity: 0.7;
|
|
52
|
+
span {
|
|
53
|
+
position: relative;
|
|
54
|
+
bottom: 3px;
|
|
55
|
+
left: 5px;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
.extra_setting_for_reset_password {
|
|
59
|
+
position: relative;
|
|
60
|
+
top: 2px;
|
|
61
|
+
opacity: 0.7;
|
|
62
|
+
color: rgb(56, 149, 250);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
.btn {
|
|
66
|
+
height: 50px;
|
|
67
|
+
:deep(.van-button__text) {
|
|
68
|
+
color: rgb(255, 255, 255);
|
|
69
|
+
font-size: 16px;
|
|
70
|
+
font-weight: 700;
|
|
71
|
+
line-height: 23px;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
.login_btn {
|
|
75
|
+
background: rgb(56, 149, 250);
|
|
76
|
+
margin-top: 104px;
|
|
77
|
+
}
|
|
78
|
+
.reset_btn {
|
|
79
|
+
margin: 24px 0;
|
|
80
|
+
}
|
|
81
|
+
.back_btn {
|
|
82
|
+
:deep(.van-button__text) {
|
|
83
|
+
color: rgb(56, 149, 250);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
:deep(.van-cell:after) {
|
|
87
|
+
border-bottom: none;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
.login_form {
|
|
91
|
+
margin-top: 65px;
|
|
92
|
+
}
|
|
93
|
+
.forget_password_form {
|
|
94
|
+
margin-top: 15px;
|
|
95
|
+
}
|