登录
This commit is contained in:
@ -26,7 +26,7 @@ export const fetchLogOut = (params = {}) => {
|
||||
// 导出一个名为fetchProfileInfo的函数,用于获取用户信息
|
||||
export const fetchProfileInfo = (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 {
|
||||
clearAllLocalStorage();
|
||||
// todo 跳转回登录鉴权页,当前为mock路由地址
|
||||
next({
|
||||
name: 'auth',
|
||||
query: {
|
||||
redirect: to.name,
|
||||
...to.query,
|
||||
} as LocationQueryRaw,
|
||||
});
|
||||
next({ name: 'UserLogin' }); // 添加缺失的next调用
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,29 +1,92 @@
|
||||
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 {
|
||||
token: String;
|
||||
token: string;
|
||||
userInfo: UserInfo | null;
|
||||
companyInfo: CompanyInfo | null;
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore('user', {
|
||||
state: (): UserState => ({
|
||||
token: localStorage.getItem('accessToken') || '',
|
||||
userInfo: null,
|
||||
companyInfo: null,
|
||||
}),
|
||||
|
||||
getters: {},
|
||||
|
||||
actions: {
|
||||
setToken(token: String) {
|
||||
const _token = `Bearer ${token}`;
|
||||
this.token = _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() {
|
||||
this.token = '';
|
||||
localStorage.removeItem('accessToken');
|
||||
},
|
||||
async getUserInfo() {
|
||||
// todo 调用获取用户信息接口,当前用mock数据表示
|
||||
// AMessage.success(`当前用户角色为:ENTERPRISE`);
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@ -16,6 +16,8 @@ export async function handleUserLogin() {
|
||||
handleUserHome();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 首页
|
||||
export function handleUserHome() {
|
||||
router.push({ name: 'Home' });
|
||||
|
||||
@ -522,6 +522,12 @@ function reset() {
|
||||
const emit = defineEmits(['submit']);
|
||||
</script>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'PuzzleVerification',
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.vue-puzzle-vcode {
|
||||
position: fixed;
|
||||
|
||||
@ -121,7 +121,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
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 { useUserStore } from '@/stores';
|
||||
import { handleUserLogin } from '@/utils/user';
|
||||
@ -137,10 +137,10 @@ const visible = ref(false);
|
||||
const hasGetCode = ref(false);
|
||||
const submitting = ref(false);
|
||||
const hasCheck = ref(false);
|
||||
const mobileNumber = ref('13616544933');
|
||||
const mobileNumber = ref('');
|
||||
const selectedAccount = ref(0);
|
||||
|
||||
const accounts = ref([{ name: '灵机用户291094' }, { name: '灵机用户291094' }]);
|
||||
const accounts = ref([]);
|
||||
|
||||
const loginForm = reactive({
|
||||
mobile: '',
|
||||
@ -213,6 +213,7 @@ const clearError = (field: string) => {
|
||||
|
||||
const handleOk = () => {
|
||||
visible.value = false;
|
||||
handleUserLogin();
|
||||
};
|
||||
|
||||
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 () => {
|
||||
if (disabledSubmitBtn.value) return;
|
||||
@ -268,15 +290,13 @@ const handleSubmit = async () => {
|
||||
}
|
||||
|
||||
submitting.value = true;
|
||||
|
||||
const { code, data } = await fetchAuthorizationsCaptcha(loginForm);
|
||||
|
||||
if (code === 200) {
|
||||
// 处理登录成功逻辑
|
||||
AMessage.success(isLogin.value ? '登录成功' : '注册成功');
|
||||
userStore.setToken(data.access_token);
|
||||
|
||||
handleUserLogin();
|
||||
getProfileInfo();
|
||||
}
|
||||
} catch (error) {
|
||||
// 错误信息会显示在输入框下方
|
||||
|
||||
Reference in New Issue
Block a user