elementUI项目中,只弹一个【token过期提示】信息框的处理
关键代码
let msgArr = document.querySelectorAll('.token401Message')if (!msgArr.length) {Message({customClass: 'token401Message',message: response.data.msg,type: 'error',onClose: () => {msgArr = []}})}
完整代码
import axios from 'axios'
import { getToken } from '@/libs/util'
import { Message, Loading } from 'element-ui'
import store from '@/store'
import router from '@/router'
let loadingInstance = null // 记录页面中存在的loading
let loadingCount = 0 // 记录当前正在请求的数量
function showLoading(data) {if (loadingCount === 0) {loadingInstance = Loading.service({lock: true,background: 'rgba(255,255,255,.6)',text: data || ''})}loadingCount++
}function hideLoading() {let timer = setTimeout(() => {loadingCount--if (loadingInstance && loadingCount === 0) {loadingInstance.close()loadingInstance = nullclearTimeout(timer)timer = null}}, 0)
}
const instance = axios.create({// baseURL: baseUrl,timeout: 0,headers: {'Content-Type': 'application/json; charset=utf-8'},withCredentials: true
})
const no_need_to_refresh_token = ['/xxx', // 双因子登录'/xxx', // 验证码登录'/xxx', // 验证码登录获取验证码'/xxx', // 登录接口'/xxx', // 获取配置'/xxx', // 获取策略'/xxx' // 刷新token
]
// 添加请求拦截器
instance.interceptors.request.use(async config => {if (config.loadingShow) {showLoading()}if (getToken()) {config.headers.Authorization = getToken()config.headers['Tenant-ID'] = localStorage.getItem('tenantId')config.headers['UserId'] = localStorage.getItem('uesrId')// 排除双因子 验证码登录 ....if (no_need_to_refresh_token.every(item => config.url.indexOf(item) === -1)) {await store.dispatch('refreshToken')}}return config},error => {if (error.config.loadingShow) {hideLoading()}// 对请求错误做些什么return Promise.reject(error)}
)instance.interceptors.response.use(async response => {if (response.config.loadingShow) {hideLoading()}// token失效if (response.data.code === '401 UNAUTHORIZED') {router.replace({name: 'login',params: {clear: true}})// 只弹一个【token过期提示】信息框的处理let msgArr = document.querySelectorAll('.token401Message')if (!msgArr.length) {Message({customClass: 'token401Message',message: response.data.msg,type: 'error',onClose: () => {msgArr = []}})}return Promise.reject(new Error(response.data.msg || '请求错误'))}// 接口报错if (response.data.code &&(response.data.code !== 'SUCCESS' && response.data.code !== 'S1A00000') &&response.data.code !== '401 UNAUTHORIZED') {if (!response.request.responseURL.includes('account/verification')) {Message({message: response.data.msg,type: 'error'})return Promise.reject(new Error(response.data.msg || '请求错误'))}}return response},async error => {if (error.config.loadingShow || error === undefined) {hideLoading()}Message({message: error,type: 'error'})// 对响应错误做点什么return Promise.reject(error)}
)const http = {get: (path, data, config) =>instance.get(path, {params: data,...config}),delete: (path, data, config) =>instance.delete(path, {data: data,...config}),post: (path, data, config) => instance.post(path, data, config),put: (path, data, config) => instance.put(path, data, config)
}export default http
相关文章:
elementUI项目中,只弹一个【token过期提示】信息框的处理
关键代码 let msgArr document.querySelectorAll(.token401Message)if (!msgArr.length) {Message({customClass: token401Message,message: response.data.msg,type: error,onClose: () > {msgArr []}})} 完整代码 import axios from axios import { getToken } from…...
SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
文章目录 1、Servlet 容器与线程池管理1.1 线程池的作用1.2 线程池的配置 2、HTTP 请求的线程隔离2.1 请求上下文和会话信息2.2 多线程处理的隔离性 3、 ThreadLocal 和线程上下文隔离3.1ThreadLocal的使用3.2 保证线程隔离性 4、Async异步任务的线程隔离4.1 异步任务的线程池4…...
【LLM】25.1.11 Arxiv LLM论文速递
25.1.10 12:00 - 25.1.11 12:00 共更新36 篇 —第1篇---- Supervision policies can shape long-term risk management in general-purpose AI models 🔍 关键词: 通用型人工智能,风险管理,监督政策,模拟框架 PDF链接 摘要: 通…...
单片机实物成品-012 酒精监测
项目介绍 本项目以软硬件结合的方式,选择 C 语言作为程序硬件编码语言, 以 STM32 单片机作为核心控制板,在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测,且对高浓度酒精采取强制干预和紧急预警,并将数据通过…...
使用葡萄城+vue实现Excel
最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等,代码实在太多 有需要可留言 第一步:创建表头 请使用官网提供的网址:在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号,创建一个新的sheet页 默认新创建的she…...
【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
一、import导入css样式 在项目文件中创建一个common文件夹,下面创建一个css文件夹,里面放上style.css文件,编写的是公共样式,我们现在要在App.vue中引入该样式。 在App.vue中引入该样式,这样就会使样式全局生效&#…...
跟我学C++中级篇——字节序
一、什么是字节序 在谈字节序前讲个小故事,在小说《格列佛游记》中,有两派势力为了吃鸡蛋的时候儿到底是先打破大的一端还是打破小的一端展开了战争,而且这场战争持续了很久。后来,1980年,Danny Cohen在论文"On …...
Linux网络编程5——多路IO转接
一.TCP状态时序理解 1.TCP状态理解 **CLOSED:**表示初始状态。 **LISTEN:**该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 **SYN_SENT:**这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时…...
Redis常见
Redis 事务 什么是 Redis 事务? 你可以将 Redis 中的事务理解为:Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。 Redis 事务实际开发中使用的非常少,功能比…...
提升 PHP 编码效率的 10 个实用函数
PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP 提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。 以下列出了 10 个可以显著加快您的编码过程的 PHP 函数…...
设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...
golang之数据库操作
1.导入必要的包 import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动 ) 2.相关操作 连接数据库 使用sql.Open()函数进行数据库的连接 db, err : sql.Open("mysql", "user:passwordtcp(127.0.0.1:3306)/db…...
对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
近日,张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任,他将如何跟随 Apache SeaTunnel 社区迈向新的高度?让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己,包括职业背景、当前的工作…...
Mac 删除ABC 输入法
参考链接:百度安全验证 Mac下删除系统自带输入法ABC,正解!_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态,可以删除 ;可能会对DNS 输入有影响,但是可以通过复…...
《机器学习》之K-means聚类
目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…...
日常工作之 Elasticsearch 常用查询语句汇总
日常工作之 Elasticsearch 常用查询语句汇总 查询现有索引创建索引查询索引结构插入数据查询索引数据查看索引磁盘占用信息删除索引查看分词器分词结果指定查询数量指定条件查询数据迁移统计索引数据量更新数据 在使用 es 的过程中,总是会用到 es 的查询语句&#x…...
WeakAuras NES Script(lua)
WeakAuras NES Script 修星脚本字符串 脚本1:NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…...
JVM 触发类加载的条件有哪些?
目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时,先初始化父类 2.5、虚拟机启动时,初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…...
Android实战经验篇-增加系统分区
系列文章转如下链接: Android Display Graphics系列文章-汇总 Android实战经验篇-系列文章汇总 本文主要包括部分: 一、Android分区说明 1.1 系统分区查看 1.2 分区表修改 1.3 验证新分区 二、源码修改 2.1 generate_extra_images 2.2 fstab 2…...
深入学习 Python 量化编程
深入学习 Python 量化编程 第一章:Python 基础与量化编程环境搭建 1.1 安装必要的库 首先,你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库: pip install numpy pandas matplotlib yfinance backtrader scikit-…...
Brax环境封装指南:无缝集成Gym和DM_Env接口
Brax环境封装指南:无缝集成Gym和DM_Env接口 【免费下载链接】brax Massively parallel rigidbody physics simulation on accelerator hardware. 项目地址: https://gitcode.com/gh_mirrors/br/brax Brax是一个基于JAX的高性能物理模拟引擎,专为强…...
5分钟快速上手:AI视频生成工具完整指南
5分钟快速上手:AI视频生成工具完整指南 【免费下载链接】auto-video-generateor 自动视频生成器,给定主题,自动生成解说视频。用户输入主题文字,系统调用大语言模型生成故事或解说的文字,然后进一步调用语音合成接口生…...
SEO_中小企业低成本开展SEO推广的实用方案
引言:为什么中小企业需要SEO推广 在当今的互联网时代,中小企业如何在海量的网站中脱颖而出,吸引更多的潜在客户,这是一个迫切需要解决的问题。搜索引擎优化(SEO)推广是提升网站在搜索引擎上排名的重要手段…...
用AI辅助编程踩坑记:CH32V003驱动WS2812B,PWM+DMA配置避雷指南
CH32V003驱动WS2812B避坑实战:当AI生成的PWMDMA代码遇到现实 第一次尝试用AI辅助编写CH32V003驱动WS2812B的代码时,我天真地以为只要把芯片手册扔给AI就能得到完美运行的代码。直到LED灯带显示出诡异的彩虹乱码,我才意识到自己掉进了AI挖的多…...
Qwen3-4B写作大师效果惊艳:看它如何自动校验医学术语
Qwen3-4B写作大师效果惊艳:看它如何自动校验医学术语 1. 医疗写作的痛点与AI解决方案 医疗科普写作一直面临着专业性与可读性的双重挑战。传统AI写作工具在生成医疗内容时,往往会出现术语混用、逻辑断裂、关键信息遗漏等问题。这些问题不仅影响阅读体验…...
3大维度掌握Ryujinx:Switch模拟器从配置到优化的全流程指南
3大维度掌握Ryujinx:Switch模拟器从配置到优化的全流程指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx作为一款用C#编写的开源Switch模拟器,为玩家…...
【无人机】模拟无人机在一个移动地面车辆自主着陆垂直起降在受风力干扰和转子推力影响【含Matlab源码 15287期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
突破QQ音乐格式限制:QMCDecode全平台解决方案
突破QQ音乐格式限制:QMCDecode全平台解决方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果存…...
实战应用:基于快马AI构建openclaw101官网从登录到跳转的完整流程
今天想和大家分享一个基于InsCode(快马)平台实现的登录系统实战案例。这个项目模拟了openclaw101官网从登录到跳转的完整流程,特别适合想学习前后端交互的同学参考。 项目整体架构 这个登录系统采用经典的前后端分离设计。前端使用纯HTMLCSSJavaScript实现页面交互&…...
微信视频号直播数据捕获技术:从原理到实践的全方位解析
微信视频号直播数据捕获技术:从原理到实践的全方位解析 【免费下载链接】wxlivespy 微信视频号直播间弹幕信息抓取工具 项目地址: https://gitcode.com/gh_mirrors/wx/wxlivespy 一、技术原理:构建实时数据捕获的核心引擎 1.1 三层数据处理架构&…...
