|
|
@@ -1,10 +1,8 @@
|
|
|
import { reactive } from 'vue'
|
|
|
import { v4 } from 'uuid'
|
|
|
-import { encryptAES, decryptAES } from '@/utils/crypto'
|
|
|
import { timerTask } from '@/utils/timer'
|
|
|
import { ClientType } from '@/constants/client'
|
|
|
import { queryLoginId, login } from '@/services/api/account'
|
|
|
-import { sessionData, localData } from '@/stores/storage'
|
|
|
import { useLoginStore, useEnumStore, useErrorInfoStore, useUserStore, useFuturesStore, useAccountStore } from '@/stores'
|
|
|
import { checkToken, checkTokenLoop } from '@/business/common'
|
|
|
import service from '@/services'
|
|
|
@@ -12,7 +10,12 @@ import socket from '@/services/socket'
|
|
|
import eventBus from '@/services/bus'
|
|
|
import cryptojs from 'crypto-js'
|
|
|
|
|
|
-export function useLogin() {
|
|
|
+/**
|
|
|
+ * 登录业务模块
|
|
|
+ * @param persist 登录状态是否持久化
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+export function useLogin(persist = false) {
|
|
|
const enumStore = useEnumStore()
|
|
|
const errorInfoStore = useErrorInfoStore()
|
|
|
const loginStore = useLoginStore()
|
|
|
@@ -48,49 +51,40 @@ export function useLogin() {
|
|
|
checkTokenLoop()
|
|
|
}
|
|
|
|
|
|
- const loginAction = async (params: Proto.LoginReq) => {
|
|
|
- params.GUID = v4()
|
|
|
- await login(params).then((res) => {
|
|
|
- const encryptedData = encryptAES(JSON.stringify(params)) // 数据加密
|
|
|
- localData.setValue('autoLoginEncryptedData', encryptedData)
|
|
|
- loginStore.$setState((state) => {
|
|
|
- state.loginInfo = res
|
|
|
- })
|
|
|
- localStorage.setItem('thj_loginId', formData.LoginID) // 记住登录ID
|
|
|
- })
|
|
|
- await loadUserData()
|
|
|
- eventBus.$emit('LoginNotify') // 登录成功通知
|
|
|
- }
|
|
|
-
|
|
|
- // 自动登录
|
|
|
- const autoLogin = async () => {
|
|
|
- try {
|
|
|
- logining.value = true
|
|
|
- const encryptedData = localData.getValue('autoLoginEncryptedData')
|
|
|
- if (encryptedData) {
|
|
|
- const decryptedString = decryptAES(encryptedData)
|
|
|
- return await loginAction(JSON.parse(decryptedString))
|
|
|
- }
|
|
|
- return Promise.reject('自动登录失败')
|
|
|
- } finally {
|
|
|
- logining.value = false
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// 用户登录
|
|
|
- const userLogin = async (clientType: ClientType) => {
|
|
|
- logining.value = true
|
|
|
- formData.ClientType = clientType
|
|
|
+ const userLogin = async (autoLogin = false) => {
|
|
|
try {
|
|
|
- const params = { ...formData }
|
|
|
+ logining.value = true
|
|
|
await loadBaseData()
|
|
|
- await queryLoginId({
|
|
|
- username: formData.LoginID
|
|
|
- }).then((res) => {
|
|
|
- params.LoginID = res.data
|
|
|
- params.LoginPWD = cryptojs.SHA256(res.data + formData.LoginPWD).toString()
|
|
|
+ const payload = await new Promise<Proto.LoginReq>((resolve, reject) => {
|
|
|
+ if (autoLogin) {
|
|
|
+ const params = loginStore.getAutoLoginData()
|
|
|
+ if (params) {
|
|
|
+ resolve(params)
|
|
|
+ } else {
|
|
|
+ reject('自动登录失败')
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ queryLoginId({
|
|
|
+ username: formData.LoginID
|
|
|
+ }).then((res) => {
|
|
|
+ const params = { ...formData }
|
|
|
+ params.LoginID = res.data
|
|
|
+ params.LoginPWD = cryptojs.SHA256(res.data + formData.LoginPWD).toString()
|
|
|
+ resolve(params)
|
|
|
+ }).catch((err) => {
|
|
|
+ reject(err)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ payload.GUID = v4()
|
|
|
+ await login(payload).then(async (res) => {
|
|
|
+ loginStore.setLoginInfo(res, persist)
|
|
|
+ loginStore.setAutoLoginData(payload)
|
|
|
+ localStorage.setItem('thj_loginId', formData.LoginID) // 记住登录ID
|
|
|
+ await loadUserData()
|
|
|
+ eventBus.$emit('LoginNotify') // 登录成功通知
|
|
|
})
|
|
|
- return await loginAction(params)
|
|
|
} finally {
|
|
|
logining.value = false
|
|
|
}
|
|
|
@@ -100,19 +94,20 @@ export function useLogin() {
|
|
|
const userLogout = (callback?: () => void) => {
|
|
|
socket.closeAll()
|
|
|
timerTask.clearAll()
|
|
|
- sessionData.reset('loginInfo', 'userRoutes')
|
|
|
+ loginStore.clearAutoLoginData()
|
|
|
+ loginStore.clearLoginInfo()
|
|
|
callback && callback()
|
|
|
}
|
|
|
|
|
|
// 初始化业务数据
|
|
|
- const initBaseData = async (enableAutoLogin = false) => {
|
|
|
+ const initBaseData = async (autoLogin = false) => {
|
|
|
try {
|
|
|
logining.value = true
|
|
|
await loadBaseData()
|
|
|
if (token.value) {
|
|
|
await loadUserData()
|
|
|
- } else if (enableAutoLogin) {
|
|
|
- await autoLogin().catch(() => Promise.resolve())
|
|
|
+ } else if (autoLogin && loginStore.getAutoLoginData()) {
|
|
|
+ await userLogin(true)
|
|
|
}
|
|
|
} finally {
|
|
|
logining.value = false
|
|
|
@@ -123,7 +118,6 @@ export function useLogin() {
|
|
|
logining,
|
|
|
formData,
|
|
|
initBaseData,
|
|
|
- autoLogin,
|
|
|
userLogin,
|
|
|
userLogout,
|
|
|
}
|