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-…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...