注意点
- assets 文件夹:组件共用的静态资源
- CSS 中可以写 @(src别名) ==> ~@
- token 令牌需要持久化存储 ==> 本地存储
- 导航守卫
- 用户已经登录了,就不能再回到登录页,必须退出登录。
- 用户没登录,就不能访问 购物车 页面。
- 登录成功后,每个组件都需要获取相应用户的信息,该怎么做?
相关接口
export const reqGetCode = (phone) => requests({
url:`/user/passport/sendCode/${
phone}`,
method: "get"
});
export const reqUserRegister = (data) => requests({
url:'/user/passport/register',
method: "post",
data
});
export const reqUserLogin = (data)=>requests({
url:'/user/passport/login',
data,
method:'post'
});
export const reqUserInfo = () => requests({
url:'/user/passport/auth/getUserInfo',
method:'get'
});
export const reqLogout = ()=> requests({
url:'/user/passport/logout',
method:'get'
});
store/user/index.js
import {
reqGetCode, reqUserRegister, reqUserLogin, reqUserInfo,reqLogout } from "@/api";
import {
setToken, getToken, removeToken } from "@/utils/token";
const state = {
code: '',
token: getToken(),
userInfo: {
},
};
const mutations = {
GETCODE(state, data) {
state.code = data;
},
USERLOGIN(state, data) {
state.token = data;
},
GETUSERINFO(state, data) {
state.userInfo = data;
},
CLEAR(state, data){
state.token = '';
state.userInfo = {
};
removeToken();
}
};
const actions = {
async getCode({
commit }, phone) {
let result = await reqGetCode(phone);
if (result.code == 200) {
commit("GETCODE", result.data)
return 'ok'
} else {
return Promise.reject(new Error('faile'))
}
},
async userRegister({
commit }, user) {
let result = await reqUserRegister(user);
if (result.code == 200) {
return 'ok';
} else {
return Promise.reject(new Error('faile'))
}
},
async userLogin({
commit }, data) {
let result = await reqUserLogin(data);
if (result.code == 200) {
commit("USERLOGIN", result.data.token);
setToken(result.data.token)
return 'ok'
} else {
return Promise.reject(new Error('faile'));
}
},
async getUserInfo({
commit }) {
let result = await reqUserInfo();
if (result.code == 200) {
commit("GETUSERINFO", result.data);
return 'ok';
}else{
return Promise.reject(new Error('faile'));
}
},
async userLogout({
commit}){
let result = await reqLogout();
if(result.code == 200){
commit("CLEAR");
return 'ok';
}else{
return Promise.reject(new Error('faile'));
}
}
};
const getters = {
};
export default {
state,
mutations,
actions,
getters,
}
utils/token.js
export const setToken = (token) => {
localStorage.setItem("TOKEN",token)
}
export const getToken = () =>{
return localStorage.getItem("TOKEN")
}
export const removeToken = () =>{
return localStorage.removeItem("TOKEN")
}
Header.vue
<template>
......
<p v-if="!userName">
<span>请</span>