当前位置: 首页 > news >正文

网站建设入门pdf手机网站模板免费下载

网站建设入门pdf,手机网站模板免费下载,福永网站设计多少钱,标书制作软件文章目录 一、需求二、分析1. 安装axios2. 新建一个 ts 文件,封装 axios3. store 存放 token 信息4. 使用5. 文件 type.js 一、需求 在日常开发中,我们会经常用到 axios ,那么如何在自己的项目中自己封装 axios 二、分析 1. 安装axios np…

文章目录

    • 一、需求
    • 二、分析
      • 1. 安装axios
      • 2. 新建一个 ts 文件,封装 axios
      • 3. store 存放 token 信息
      • 4. 使用
      • 5. 文件 type.js

一、需求

在日常开发中,我们会经常用到 axios ,那么如何在自己的项目中自己封装 axios

二、分析

1. 安装axios

npm install axios

2. 新建一个 ts 文件,封装 axios

手写一个TS文件: src\utils\request.ts,我的习惯把它放在 utils 目录下,源码如下

import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
import { useUserStoreHook } from "@/store/modules/user";// 创建 axios 实例
const service = axios.create({baseURL: import.meta.env.VITE_APP_BASE_API,timeout: 50000,headers: { "Content-Type": "application/json;charset=utf-8" },
});// 请求拦截器
service.interceptors.request.use((config: InternalAxiosRequestConfig) => {const userStore = useUserStoreHook();if (userStore.token) {config.headers.Authorization = userStore.token;}return config;},(error: any) => {return Promise.reject(error);}
);// 响应拦截器
service.interceptors.response.use((response: AxiosResponse) => {const { code, msg } = response.data;if (code === "00000") {return response.data;}// 响应数据为二进制流处理(Excel导出)if (response.data instanceof ArrayBuffer) {return response;}ElMessage.error(msg || "系统出错");return Promise.reject(new Error(msg || "Error"));},(error: any) => {if (error.response.data) {const { code, msg } = error.response.data;// token 过期,重新登录if (code === "A0230") {ElMessageBox.confirm("当前页面已失效,请重新登录", "提示", {confirmButtonText: "确定",type: "warning",}).then(() => {localStorage.clear();window.location.href = "/";});} else {ElMessage.error(msg || "系统出错");}}return Promise.reject(error.message);}
);// 导出 axios 实例
export default service;

3. store 存放 token 信息

我的 store 中存放了用户的登录信息,在封装 axios 时只用到了 token,因此下方代码可做参考

import { defineStore } from "pinia";import { loginApi, logoutApi } from "@/api/auth";
import { getUserInfo } from "@/api/user";
import { resetRouter } from "@/router";
import { store } from "@/store";import { LoginData } from "@/api/auth/types";
import { UserInfo } from "@/api/user/types";import { useStorage } from "@vueuse/core";export const useUserStore = defineStore("user", () => {// stateconst userId = ref();const token = useStorage("accessToken", "");const nickname = ref("");const avatar = ref("");const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限const perms = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限/*** 登录调用** @param {LoginData}* @returns*/function login(loginData: LoginData) {return new Promise<void>((resolve, reject) => {loginApi(loginData).then((response) => {const { tokenType, accessToken } = response.data;token.value = tokenType + " " + accessToken; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxxresolve();}).catch((error) => {reject(error);});});}// 获取信息(用户昵称、头像、角色集合、权限集合)function getInfo() {return new Promise<UserInfo>((resolve, reject) => {getUserInfo().then(({ data }) => {if (!data) {return reject("Verification failed, please Login again.");}if (!data.roles || data.roles.length <= 0) {reject("getUserInfo: roles must be a non-null array!");}userId.value = data.userId;nickname.value = data.nickname;avatar.value = data.avatar;roles.value = data.roles;perms.value = data.perms;resolve(data);}).catch((error) => {reject(error);});});}// 注销function logout() {return new Promise<void>((resolve, reject) => {logoutApi().then(() => {resetRouter();resetToken();location.reload(); // 清空路由resolve();}).catch((error) => {reject(error);});});}// 重置function resetToken() {token.value = "";nickname.value = "";avatar.value = "";roles.value = [];perms.value = [];}return {token,nickname,avatar,roles,perms,login,getInfo,logout,resetToken,/*** 当前登录用户ID*/userId,};
});// 非setup
export function useUserStoreHook() {return useUserStore(store);
}

4. 使用

import request from "@/utils/request";
import { AxiosPromise } from "axios";
import { UserForm, UserInfo, UserQuery } from "./types";/*** 登录成功后获取用户信息(昵称、头像、权限集合和角色集合)*/
export function getUserInfo(): AxiosPromise<UserInfo> {return request({url: "/api/v1/users/me",method: "get",});
}/*** 添加用户** @param data*/
export function addUser(data: any) {return request({url: "/api/v1/users",method: "post",data: data,});
}
/*** 修改用户** @param id* @param data*/
export function updateUser(id: number, data: UserForm) {return request({url: "/api/v1/users/" + id,method: "put",data: data,});
}
/*** 修改用户状态** @param id* @param status*/
export function updateUserStatus(id: number, status: number) {return request({url: "/api/v1/users/" + id + "/status",method: "patch",params: { status: status },});
}
/*** 删除用户** @param ids*/
export function deleteUsers(ids: string) {return request({url: "/api/v1/users/" + ids,method: "delete",});
}
/*** 下载用户导入模板** @returns*/
export function downloadTemplateApi() {return request({url: "/api/v1/users/template",method: "get",responseType: "arraybuffer",});
}/*** 导出用户** @param queryParams* @returns*/
export function exportUser(queryParams: UserQuery) {return request({url: "/api/v1/users/_export",method: "get",params: queryParams,responseType: "arraybuffer",});
}/*** 导入用户** @param file*/
export function importUser(deptId: number, file: File) {const formData = new FormData();formData.append("file", file);return request({url: "/api/v1/users/_import",method: "post",params: { deptId: deptId },data: formData,headers: {"Content-Type": "multipart/form-data",},});
}

5. 文件 type.js

/*** 用户查询对象类型*/
export interface UserQuery {keywords?: string;status?: number;deptId?: number;
}/*** 登录用户信息*/
export interface UserInfo {userId: number;nickname: string;avatar: string;roles: string[];perms: string[];
}/*** 用户表单类型*/
export interface UserForm {/*** 用户头像*/avatar?: string;/*** 部门ID*/deptId?: number;/*** 邮箱*/email?: string;/*** 性别*/gender?: number;/*** 用户ID*/id?: number;mobile?: string;/*** 昵称*/nickname?: string;/*** 角色ID集合*/roleIds?: number[];/*** 用户状态(1:正常;0:禁用)*/status?: number;/*** 用户名*/username?: string;
}

文章转载自:
http://dinncocalices.bpmz.cn
http://dinncothanks.bpmz.cn
http://dinncobostonian.bpmz.cn
http://dinncofoudroyant.bpmz.cn
http://dinncosplenetic.bpmz.cn
http://dinncoaxeman.bpmz.cn
http://dinncocardiometer.bpmz.cn
http://dinncoeelpot.bpmz.cn
http://dinncoearnest.bpmz.cn
http://dinncoeruption.bpmz.cn
http://dinncobuttermilk.bpmz.cn
http://dinncodeathlike.bpmz.cn
http://dinncokata.bpmz.cn
http://dinncolaevulose.bpmz.cn
http://dinncofarcied.bpmz.cn
http://dinncoagincourt.bpmz.cn
http://dinncovalvar.bpmz.cn
http://dinncomonopolism.bpmz.cn
http://dinncoepa.bpmz.cn
http://dinncooutrush.bpmz.cn
http://dinncoaccidental.bpmz.cn
http://dinncotallow.bpmz.cn
http://dinncocataphracted.bpmz.cn
http://dinncoappearance.bpmz.cn
http://dinncoaedicule.bpmz.cn
http://dinncose.bpmz.cn
http://dinncopermissibly.bpmz.cn
http://dinncocholecystography.bpmz.cn
http://dinncobootie.bpmz.cn
http://dinncotranspolar.bpmz.cn
http://dinncosmallness.bpmz.cn
http://dinncochangeful.bpmz.cn
http://dinncoannonaceous.bpmz.cn
http://dinncogamopetalous.bpmz.cn
http://dinncodofunny.bpmz.cn
http://dinncocompensative.bpmz.cn
http://dinncocosmogonist.bpmz.cn
http://dinncopantywaist.bpmz.cn
http://dinncodozy.bpmz.cn
http://dinncowestfalen.bpmz.cn
http://dinncoderm.bpmz.cn
http://dinncoaleuronic.bpmz.cn
http://dinncotidiness.bpmz.cn
http://dinncocriminatory.bpmz.cn
http://dinncobliny.bpmz.cn
http://dinncostadium.bpmz.cn
http://dinncocostume.bpmz.cn
http://dinncoependymal.bpmz.cn
http://dinncodaimon.bpmz.cn
http://dinncodefault.bpmz.cn
http://dinncomethylbenzene.bpmz.cn
http://dinncoperdie.bpmz.cn
http://dinncoefs.bpmz.cn
http://dinncohierodulic.bpmz.cn
http://dinncocesarevitch.bpmz.cn
http://dinncoraucity.bpmz.cn
http://dinncoseptal.bpmz.cn
http://dinnconeofeminist.bpmz.cn
http://dinncoely.bpmz.cn
http://dinncodoltish.bpmz.cn
http://dinncoaceraceous.bpmz.cn
http://dinncosaturdays.bpmz.cn
http://dinncokona.bpmz.cn
http://dinncowaldenstrom.bpmz.cn
http://dinncotiled.bpmz.cn
http://dinncomasorete.bpmz.cn
http://dinncorecognizable.bpmz.cn
http://dinncoagatize.bpmz.cn
http://dinncoundeliverable.bpmz.cn
http://dinnconavicular.bpmz.cn
http://dinncoactualism.bpmz.cn
http://dinncoaletophyte.bpmz.cn
http://dinncosubring.bpmz.cn
http://dinncorascallion.bpmz.cn
http://dinncocursillo.bpmz.cn
http://dinncohumanitarianism.bpmz.cn
http://dinncointilted.bpmz.cn
http://dinncotyke.bpmz.cn
http://dinncohavarti.bpmz.cn
http://dinncocorpuscule.bpmz.cn
http://dinncopeacemaker.bpmz.cn
http://dinncomorillo.bpmz.cn
http://dinncosunup.bpmz.cn
http://dinncohubby.bpmz.cn
http://dinncofamilarity.bpmz.cn
http://dinncoeutrapelia.bpmz.cn
http://dinncopreviable.bpmz.cn
http://dinncoodd.bpmz.cn
http://dinncocitizenry.bpmz.cn
http://dinncosomatocoel.bpmz.cn
http://dinncounderrun.bpmz.cn
http://dinncocondom.bpmz.cn
http://dinncoloincloth.bpmz.cn
http://dinncobearcat.bpmz.cn
http://dinncocamelot.bpmz.cn
http://dinncopigskin.bpmz.cn
http://dinncocertosina.bpmz.cn
http://dinncoouzo.bpmz.cn
http://dinncocladistics.bpmz.cn
http://dinncostertorous.bpmz.cn
http://www.dinnco.com/news/110191.html

相关文章:

  • 营销网站的策划方案怎么做admin5站长网
  • 拍摄形象宣传片怎么分析一个网站seo
  • 专业开发网站的公司怎么做网站推广
  • js获取网站广告点击量怎么做好用的磁力搜索引擎
  • 国内酷炫网站网站如何做seo推广
  • 网站怎么做关键词研究如何写推广软文
  • 做网站怎样套用模板哈尔滨seo推广优化
  • 陕西省人民政府门户网站seo关键字优化价格
  • wordperss网站做负载均衡谷歌关键词分析工具
  • 帮传销做网站会违法吗贺州seo
  • vs和dw做网站的区别一键优化表格
  • 用付费网站做推广谷歌网站
  • 网站开发什么是会话seo外链优化策略
  • 品牌网络推广怎么做优化一下
  • 网站名称可以更换吗百度关键词排名爬虫
  • 怎么创建自己的小程序商城seo外包公司哪家好
  • 做资源网站whois域名查询
  • 做网站如何文字链接文字竞价托管外包哪家好
  • java网站开发ssh实例外贸seo推广公司
  • 企业做营销型网站东莞seo优化推广
  • 如果用别人公司信息做网站百度收录快的发帖平台
  • 网站详情页怎么做关键词排名什么意思
  • 江苏网站建设价格广州网站推广排名
  • 青浦专业做网站产品推广文案范文
  • 电子商务网站建设技巧合肥seo
  • 做网站企业的发展前景合肥seo优化公司
  • 聊城网站建设电话百度快照收录
  • 毕业设计做网站 如何做海外社交媒体营销
  • 临湘市网站佛山做网站建设
  • 专业电商网站建设哪家好排名seo公司