1、选择功能(创建时选择)
- TypeScript
- Vue Router
- Pinia
推荐博主文章:
- ESLint
- Prettier
2、选择VSCode插件
- Vue Language Features (Volar)
- TypeScript Vue Plugin (Volar)
- Vue VSCode Snippets
- ESLint
3、选择组件库
推荐 Element Plus
4、选择图标库
推荐 IconPark
5、选择字体
自用:iconfont字体库
6、选择网络请求库
推荐 axios
- 如何安装
- 拦截器封装(/src/http/index.ts):
/**
* 封装axios配置
* 包括axios实例化、拦截器、登录跳转、消息提示和错误处理
*/
import router from '@/router';
import axios from 'axios';
import { ElMessage } from 'element-plus';
// 枚举返回结果
enum msg{
"校验通过" = 200,
"请求异常" = 400,
"登录超时" = 401,
"密码错误" = 403,
"账号错误" = 404,
"服务器异常" = 500
}
/**
* 创建axios实例 + 基础配置
*/
const instance = axios.create({
baseURL: 'http://127.0.0.1:4523/m1/2301781-0-default',
timeout: 2000,
headers: {
"Content-Type": "application/json; charset=utf-8"
}
})
/**
* 请求拦截器
*/
instance.interceptors.request.use(config=>{
config.headers = config.headers || {};
// 添加token到请求头
config.headers.token = localStorage.getItem('token') || ''
console.log('请求参数:', config);
return config;
}, error => {
console.log('请求错误:', error);
return Promise.reject(error)
})
/**
* 响应拦截器
*/
instance.interceptors.response.use(res=>{
const code:number = res.data.code;
if (code != 200) {
// 消息提示
ElMessage({
showClose: true,
message: msg[code],
type: 'error',
center: true
})
// 登录过期:重置token,重定向至登录页
if (code == 401) {
localStorage.setItem('token', '');
router.push("/login")
}
return Promise.reject(res);
}
// 将token存储起来
if (res.data.data.token) {
localStorage.setItem('token', JSON.stringify(res.data.data.token));
}
console.log('响应结果:', res);
return res;
}, error=>{
console.log('响应错误:', error);
return Promise.reject(error);
})
// 导出实例
export default instance
- 接口请求定义(/src/http/api.ts)
/**
* 接口请求集合
*/
import instance from ".";
interface loginData {
identity: string,
userId: string,
password: string
}
export const login = (data: loginData) => instance({
url: "/loginVerify",
method: "post",
data
})