登录
This commit is contained in:
@ -26,7 +26,7 @@ export const fetchLogOut = (params = {}) => {
|
|||||||
// 导出一个名为fetchProfileInfo的函数,用于获取用户信息
|
// 导出一个名为fetchProfileInfo的函数,用于获取用户信息
|
||||||
export const fetchProfileInfo = (params = {}) => {
|
export const fetchProfileInfo = (params = {}) => {
|
||||||
// 使用Http.put方法,向/v1/me接口发送put请求,并将params作为参数传递
|
// 使用Http.put方法,向/v1/me接口发送put请求,并将params作为参数传递
|
||||||
return Http.put('/v1/me', params);
|
return Http.get('/v1/me', params);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 导出一个函数,用于获取编辑手机号的验证码
|
// 导出一个函数,用于获取编辑手机号的验证码
|
||||||
|
|||||||
@ -30,14 +30,7 @@ export default function setupUserLoginInfoGuard(router: Router) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
clearAllLocalStorage();
|
clearAllLocalStorage();
|
||||||
// todo 跳转回登录鉴权页,当前为mock路由地址
|
next({ name: 'UserLogin' }); // 添加缺失的next调用
|
||||||
next({
|
|
||||||
name: 'auth',
|
|
||||||
query: {
|
|
||||||
redirect: to.name,
|
|
||||||
...to.query,
|
|
||||||
} as LocationQueryRaw,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +1,92 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
|
|
||||||
|
interface UserInfo {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
head_image: String;
|
||||||
|
current_enterprise_id: number;
|
||||||
|
mobile: string;
|
||||||
|
// 添加其他用户属性...
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CompanyInfo {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
// 添加其他公司属性...
|
||||||
|
}
|
||||||
|
|
||||||
interface UserState {
|
interface UserState {
|
||||||
token: String;
|
token: string;
|
||||||
|
userInfo: UserInfo | null;
|
||||||
|
companyInfo: CompanyInfo | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUserStore = defineStore('user', {
|
export const useUserStore = defineStore('user', {
|
||||||
state: (): UserState => ({
|
state: (): UserState => ({
|
||||||
token: localStorage.getItem('accessToken') || '',
|
token: localStorage.getItem('accessToken') || '',
|
||||||
|
userInfo: null,
|
||||||
|
companyInfo: null,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
getters: {},
|
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
setToken(token: String) {
|
setToken(token: String) {
|
||||||
const _token = `Bearer ${token}`;
|
const _token = `Bearer ${token}`;
|
||||||
this.token = _token;
|
this.token = _token;
|
||||||
localStorage.setItem('accessToken', _token);
|
localStorage.setItem('accessToken', _token);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 存储用户信息
|
||||||
|
setUserInfo(userInfo: UserInfo | null) {
|
||||||
|
this.userInfo = userInfo;
|
||||||
|
if (userInfo) {
|
||||||
|
localStorage.setItem('userInfo', JSON.stringify(userInfo));
|
||||||
|
} else {
|
||||||
|
localStorage.removeItem('userInfo');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取用户信息
|
||||||
|
getUserInfo(): UserInfo | null {
|
||||||
|
const userInfoStr = localStorage.getItem('userInfo');
|
||||||
|
if (userInfoStr) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(userInfoStr);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('解析用户信息失败:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 存储公司信息
|
||||||
|
setCompanyInfo(companyInfo: CompanyInfo | null) {
|
||||||
|
this.companyInfo = companyInfo;
|
||||||
|
if (companyInfo) {
|
||||||
|
localStorage.setItem('companyInfo', JSON.stringify(companyInfo));
|
||||||
|
} else {
|
||||||
|
localStorage.removeItem('companyInfo');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取公司信息
|
||||||
|
getCompanyInfo(): CompanyInfo | null {
|
||||||
|
const companyInfoStr = localStorage.getItem('companyInfo');
|
||||||
|
if (companyInfoStr) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(companyInfoStr);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('解析公司信息失败:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除 token
|
||||||
deleteToken() {
|
deleteToken() {
|
||||||
this.token = '';
|
this.token = '';
|
||||||
localStorage.removeItem('accessToken');
|
localStorage.removeItem('accessToken');
|
||||||
},
|
},
|
||||||
async getUserInfo() {
|
|
||||||
// todo 调用获取用户信息接口,当前用mock数据表示
|
|
||||||
// AMessage.success(`当前用户角色为:ENTERPRISE`);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -16,6 +16,8 @@ export async function handleUserLogin() {
|
|||||||
handleUserHome();
|
handleUserHome();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 首页
|
// 首页
|
||||||
export function handleUserHome() {
|
export function handleUserHome() {
|
||||||
router.push({ name: 'Home' });
|
router.push({ name: 'Home' });
|
||||||
|
|||||||
@ -522,6 +522,12 @@ function reset() {
|
|||||||
const emit = defineEmits(['submit']);
|
const emit = defineEmits(['submit']);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'PuzzleVerification',
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.vue-puzzle-vcode {
|
.vue-puzzle-vcode {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|||||||
@ -121,7 +121,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import PuzzleVerification from './components/PuzzleVerification.vue';
|
import PuzzleVerification from './components/PuzzleVerification.vue';
|
||||||
import { fetchLoginCaptCha, fetchAuthorizationsCaptcha } from '@/api/all/login';
|
import { fetchLoginCaptCha, fetchAuthorizationsCaptcha, fetchProfileInfo } from '@/api/all/login';
|
||||||
import { ref, reactive, onUnmounted, computed } from 'vue';
|
import { ref, reactive, onUnmounted, computed } from 'vue';
|
||||||
import { useUserStore } from '@/stores';
|
import { useUserStore } from '@/stores';
|
||||||
import { handleUserLogin } from '@/utils/user';
|
import { handleUserLogin } from '@/utils/user';
|
||||||
@ -137,10 +137,10 @@ const visible = ref(false);
|
|||||||
const hasGetCode = ref(false);
|
const hasGetCode = ref(false);
|
||||||
const submitting = ref(false);
|
const submitting = ref(false);
|
||||||
const hasCheck = ref(false);
|
const hasCheck = ref(false);
|
||||||
const mobileNumber = ref('13616544933');
|
const mobileNumber = ref('');
|
||||||
const selectedAccount = ref(0);
|
const selectedAccount = ref(0);
|
||||||
|
|
||||||
const accounts = ref([{ name: '灵机用户291094' }, { name: '灵机用户291094' }]);
|
const accounts = ref([]);
|
||||||
|
|
||||||
const loginForm = reactive({
|
const loginForm = reactive({
|
||||||
mobile: '',
|
mobile: '',
|
||||||
@ -213,6 +213,7 @@ const clearError = (field: string) => {
|
|||||||
|
|
||||||
const handleOk = () => {
|
const handleOk = () => {
|
||||||
visible.value = false;
|
visible.value = false;
|
||||||
|
handleUserLogin();
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
@ -254,6 +255,27 @@ const handleVerificationSubmit = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取用户信息
|
||||||
|
const getProfileInfo = async () => {
|
||||||
|
const { code, data } = await fetchProfileInfo();
|
||||||
|
if (code === 200) {
|
||||||
|
userStore.setUserInfo(data);
|
||||||
|
let enterprises = data['enterprises'];
|
||||||
|
mobileNumber.value = data['mobile'];
|
||||||
|
accounts.value = enterprises;
|
||||||
|
if (enterprises.length > 0) {
|
||||||
|
if (enterprises.length == 1) {
|
||||||
|
let enterprise = enterprises[0];
|
||||||
|
userStore.setCompanyInfo(enterprise);
|
||||||
|
handleUserLogin();
|
||||||
|
} else {
|
||||||
|
// 多个企业时候需要弹窗让用户选择企业
|
||||||
|
visible.value = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 提交表单
|
// 提交表单
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (disabledSubmitBtn.value) return;
|
if (disabledSubmitBtn.value) return;
|
||||||
@ -268,15 +290,13 @@ const handleSubmit = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
submitting.value = true;
|
submitting.value = true;
|
||||||
|
|
||||||
const { code, data } = await fetchAuthorizationsCaptcha(loginForm);
|
const { code, data } = await fetchAuthorizationsCaptcha(loginForm);
|
||||||
|
|
||||||
if (code === 200) {
|
if (code === 200) {
|
||||||
// 处理登录成功逻辑
|
// 处理登录成功逻辑
|
||||||
AMessage.success(isLogin.value ? '登录成功' : '注册成功');
|
AMessage.success(isLogin.value ? '登录成功' : '注册成功');
|
||||||
userStore.setToken(data.access_token);
|
userStore.setToken(data.access_token);
|
||||||
|
getProfileInfo();
|
||||||
handleUserLogin();
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// 错误信息会显示在输入框下方
|
// 错误信息会显示在输入框下方
|
||||||
|
|||||||
Reference in New Issue
Block a user