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

loginApi

import request from "@/utils/request";
import { AxiosPromise } from "axios";
import { CaptchaResult, LoginData, LoginResult } from "./types";/*** 登录API** @param data {LoginData}* @returns*/
export function loginApi(data: LoginData): AxiosPromise<LoginResult> {const formData = new FormData();formData.append("username", data.username);formData.append("password", data.password);formData.append("captchaId", data.captchaId as string);formData.append("captchaCode", data.captchaCode as string);formData.append("grant_type", "password");return request({url: "/youlai-auth/oauth2/token",method: "post",data: formData,headers: {"Content-Type": "multipart/form-data",Authorization: "Basic bWFsbC1hZG1pbjoxMjM0NTY=", // 客户端信息Base64明文:mall-admin:123456},});
}

这段代码定义了一个名为loginApi的函数,它用于处理用户登录的API请求。函数接收一个LoginData类型的参数data,并返回一个AxiosPromise<LoginResult>类型的对象。下面是详细的解释:

  1. import request from "@/utils/request";:这行代码从@/utils/request模块中导入了一个名为request的函数。这个函数可能是用来发送HTTP请求的工具函数。

  2. import { AxiosPromise } from "axios";:从axios库中导入了AxiosPromise类型,这是用来表示一个返回值是AxiosPromise类型的函数的返回值类型。

  3. import { CaptchaResult, LoginData, LoginResult } from "./types";:从当前目录下的types模块中导入了三个类型:CaptchaResultLoginDataLoginResult。这些类型可能用于类型检查,以确保传入的数据和返回的结果符合预期的格式。

  4. export function loginApi(data: LoginData): AxiosPromise<LoginResult> { ... }:定义了一个名为loginApi的导出函数,它接收一个LoginData类型的参数data,并返回一个AxiosPromise<LoginResult>类型的对象。

  5. 在函数体内部,首先创建了一个FormData对象:const formData = new FormData();FormData是一个用于构建表单数据的类,可以方便地添加键值对。

  6. 接下来,使用formData.append(key, value)方法向formData对象中添加了四个键值对,分别是用户名、密码、验证码ID和验证码代码。这些数据是从传入的data参数中获取的。

  7. formData.append("grant_type", "password");:向表单数据中添加了一个固定的键值对,键为"grant_type",值为"password"。这表明登录授权类型是密码类型。

  8. return request({ ... });:最后,函数通过调用之前导入的request函数发起一个POST请求到URL"/youlai-auth/oauth2/token"。请求的方法是"post",请求体是之前构建的表单数据formData。同时设置了请求头,其中包含了内容类型为多部分表单数据("Content-Type": "multipart/form-data")和基础认证信息(Authorization: "Basic bWFsbC1hZG1pbjoxMjM0NTY=")。这里的认证信息是一个Base64编码的字符串,解码后是客户端ID和密钥的组合,例如:“mall-admin:123456”。

总结来说,loginApi函数用于通过POST请求发送用户的登录信息(包括用户名、密码、验证码等),并返回一个包含登录结果的Promise对象。

request.ts

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 accessToken = localStorage.getItem("accessToken");if (accessToken) {config.headers.Authorization = accessToken;}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: "确定",cancelButtonText: "取消",type: "warning",}).then(() => {const userStore = useUserStoreHook();userStore.resetToken().then(() => {location.reload();});});} else {ElMessage.error(msg || "系统出错");}}return Promise.reject(error.message);}
);// 导出 axios 实例
export default service;

相关文章:

loginApi

import request from "/utils/request"; import { AxiosPromise } from "axios"; import { CaptchaResult, LoginData, LoginResult } from "./types";/*** 登录API** param data {LoginData}* returns*/ export function loginApi(data: LoginD…...

【RAG检索增强生成】Ollama+AnythingLLM本地搭建RAG大模型私有知识库

目录 前言一、Ollama&#xff1a;革新性的本地LLM服务工具1.核心优势2.技术亮点 二、AnythingLLM 概览1.核心特性2.技术生态支持 三、搭建本地智能知识库1. Ollama的安装启航2. AnythingLLM的安装对接3. AnythingLLM的配置精调4. 工作区与文档管理5. 聊天与检索的智能交互 四、…...

【wiki知识库】08.添加用户登录功能--前端Vue部分修改

&#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 目录 &#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 一、今日目标 二、前端Vue模块的修改 2.1 the-header组件 2.2 store工具 2.3 router路由配置修改 一、今日目标 上篇文章…...

写给非机器学习人员的 embedding 入门

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

Oracle【plsql编写九九乘法表】

九九乘法表 DECLAREi NUMBER : 1;j NUMBER : 1; BEGINFOR i IN 1 .. 9LOOPFOR j IN 1 .. iLOOPDBMS_OUTPUT.put (i || * || j || || i * j || );END LOOP;DBMS_OUTPUT.put_line ( );END LOOP; END;输出结果...

ansible安装K8s

部署Kubernetes (k8s) 集群使用Ansible是一个常见的自动化解决方案。下面我将提供一个基本的步骤概述和所需的命令&#xff0c;用于在CentOS 7.8上使用Ansible部署k8s集群&#xff0c;包括Master节点和Worker节点&#xff08;Web和DB节点&#xff09;。 步骤 1: 准备环境 确保所…...

restful传值

GetMapping 普通的get请求 后端&#xff1a; restfule的get请求 通过/asd/123这种方式get请求传入后端 前端 url: /system/role/deptTree/ roleId / tenantId, method: get后端PathVariable从path上取对应的值 通过 GetMapping(value "/deptTree/{roleId}/{tenan…...

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…...

硅步千里:如何入行?——之入行成为软件开发者

无论何时&#xff0c;你是否有遇到这样的场景&#xff08;在自己从未涉足过的行业或领域&#xff0c;现在需要自己去这个行业或领域学习探索&#xff0c;最初的目标是熟悉行业&#xff0c;快速融入进去&#xff0c;很多时候&#xff0c;我们只是了解了个大概&#xff0c;并没能…...

Sandbox: rsync.samba(80134) deny(1) file-write-create

Xcode15运行报错:Sandbox: rsync.samba(80134) deny(1) file-write-create/xxx/xxx 如下图: 解决办法: Build Settings 搜索 sandbox&#xff0c;把 Build Options 中的 User Script Sandboxing改为 NO...

lvs的dr模式综合实践

目录 ​编辑虚拟机准备工作 ​编辑​编辑​编辑 配置过程 配置client主机 配置router主机 配置lvs主机&#xff08;vip使用环回来创建&#xff09; 配置server1主机&#xff08;vip使用环回来创建&#xff09; 配置server2主机&#xff08;vip使用环回来创建&#xff0…...

什么是自然语言处理

自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能&#xff08;AI&#xff09;的一个子领域&#xff0c;涉及计算机与人类语言的交互。它的目标是让计算机能够理解、分析、生成和操作自然语言&#xff0c;从而实现与人类的有效沟通。 自然语言处…...

快速理解互联网中的常用名词

并发与并行 并发&#xff1a;任务交替执行&#xff0c;伪并行&#xff0c;涉及CPU时间片和上下文切换。并行&#xff1a;任务真正同时执行&#xff0c;需要多核处理器&#xff0c;无上下文切换。 并发量&#xff08;Concurrency&#xff09; 概念&#xff1a;服务端程序单位…...

统计接口调用耗时_黑白名单配置

黑名单配置 黑名单就是那些被禁止访问的URL创建自定义过滤器 BlackListUrlFilter&#xff0c;并配置黑名单地址列表blacklistUrl如果有其他需求&#xff0c;还可以实现自定义规则的过滤器来满足特定的过滤要求 /*** 黑名单过滤器** author canghe*/ Component public class B…...

树莓派4 AV没有视频输出

使用AV接口输出&#xff0c;没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite&#xff1a; dtoverlayvc4-kms-v3d,composite默认情况下&#xff0c;输出 NTSC 复合视频。要选择不同的模式&#xff0c;请在…...

短信群发平台:解决短信验证码接收问题的5大策略

在享受数字化服务时&#xff0c;如APP注册或网站登录&#xff0c;若遇到短信验证码无法接收的困扰&#xff0c;无疑会增添不少烦恼。为了帮助您迅速解决这一问题&#xff0c;我们精心总结了以下十大原因及对应的解决方法&#xff0c;助您顺畅完成验证流程。 一、优化网络环境 …...

WebSocket 初体验:构建实时通信应用

WebSocket是一种在客户端和服务器之间建立持久连接的协议&#xff0c;它允许双方进行双向通信&#xff0c;从而实现低延迟的数据交换。WebSocket非常适合需要实时交互的应用场景&#xff0c;比如聊天应用、在线游戏、实时数据分析等。 WebSocket简介 什么是WebSocket&#xf…...

LISA: Reasoning Segmentation via Large Language Model

发表时间&#xff1a;CVPR 2024 论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2024/papers/Lai_LISA_Reasoning_Segmentation_via_Large_Language_Model_CVPR_2024_paper.pdf 作者单位&#xff1a;CUHK Motivation&#xff1a;尽管感知系统近年来取得了显…...

企业发展与数字化转型:创新驱动未来增长的关键策略

引言 在当今全球化和信息化高度融合的时代&#xff0c;数字化转型已经成为企业寻求增长和保持竞争优势的关键战略。随着技术的飞速进步&#xff0c;数字化不仅改变了商业模式和市场格局&#xff0c;还深刻影响了企业的内部运作和外部生态系统。大数据、人工智能、物联网等新兴技…...

如何选择适合自己的编程语言,为什么R是非计算机专业数据分析的最佳选择,五大点告诉你

在如今的数据驱动世界中&#xff0c;编程语言已成为希望在行业中进行数据分析的专业人士不可或缺的技能。对于非计算机专业背景的学者和学生来说&#xff0c;选择适合自己的编程语言可能看似困难。本文将探讨为什么对于那些需要进行本科生论文、研究生论文、或者发表学术成果的…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...