【信贷后台管理系统之axios的二次封装(四)】

news2024/7/6 18:53:37

文章目录

  • 一、axios的二次封装
  • 二、配置后端接口地址
  • 三、登录接口api联调
  • 四、贷款申请接口api编写联调


一、axios的二次封装

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
src下新建utils,新建request.js用来封装axios
控制台安装axios依赖
在这里插入图片描述
在request.js文件里引入axios,router
requeset.js文件代码如下:

import axios from 'axios'

import router from '@/router'

import { Notification,Message} from "element-ui";

const requset = axios.create(
    {
        // 添加api前缀
        baseURL:'/api',
        // 请求过期时间
        timeout:5000
    }
)

// 请求拦截器
requset.interceptors.request.use(config=>{
    // 给header添加token
    let token = localStorage.getItem('token')
    if(token){
        config.headers.token = token
    }
    return config
})

// 响应拦截器
requset.interceptors.response.use(
    response=>{
        // 后端状态码20000表示成功
        if(response?.data?.code === 20000){
            // 后端返回的结构没有统一,兼容处理一下
            if (typeof response?.data?.data === 'string')
                Message.success(response?.data?.data)
            if (typeof response?.data?.data?.info === 'string')
                Message.success(response?.data?.data?.info)
            return response
        }else if(response?.data?.code === 603){
            // 603表示token失效
            Notification.error({
                title:'错误',
                message:'token失效,请重新登录'
            })
            // 替换到登录页面
            let url = window.location.href.split('/')
            if (url[url.length - 1] !== 'login'){
                router.replace('/login')
            }
        }else{
            if(response?.status !== 200){
                Notification.error({
                    title:'错误',
                    message:'响应错误'
                })
            }
        }
        return response
    }
)
export default requset


二、配置后端接口地址

在vue.config.js里,设置代理服务器

三、登录接口api联调

src下新建api文件,user.js,引入封装的reques(axios的二次封装),登录后可以打印20000数据,打印出token,然后将token加上
在这里插入图片描述

user.js代码如下:

import request from "@/utils/request";

export const  doLogin=(user)=>{
    return request.post('/user/login',{
        account:user.username,
        password:user.pass
    })
}

接口api文件写好后,到LoginView.vue文件引入import {doLogin} from "@/api/user";引入后进行调用
在这里插入图片描述
LoginView.vue代码如下

<template>
  <div class="login-box">
    <div class="login-input-box">
      <h1>信贷后台管理系统</h1>
      <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="70px" class="demo-ruleForm">
        <el-form-item label="用户名" prop="username">
          <el-input  v-model="ruleForm.username" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="pass">
          <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>

</template>

<script >
import {doLogin} from "@/api/user";

export default {
  data(){
    // 密码校验,长度不小于8位且不大于20位字符,必须包含大写字母,小写字母,数字和特殊符号
    // var ISPWD =/^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*,\._\+(){}])[0-9a-zA-Z!@#$%^&*,\\._\+(){}]{8,20}$/;
    // // 密码校验
    // const validatePass = (rule, value, callback) =>{
    //   if (!ISPWD.test(this.registerForm.password)) {
    //     callback(new Error("用户密码必须包含大写字母、小写字母、数字和特殊符号"));
    //   } else {
    //     callback();
    //   }
    // }

    // const validatePass = (rule,value,callback){
    //   if(this.ruleForm.pass === '') {
    //     callback(new Error('请输入密码'))
    //   }else if(this.ruleForm.pass.length < 6){
    //     callback(new Error('密码长度不能小于6'))
    //   }else{
    //     callback();
    //   }
    // },
    return{
      ruleForm: {
        username:'',
        pass:'',
      },
      rules:{
        username: [
          {required:true,trigger:'blur',message:'请输入用户名'}
        ],
        pass:[
          {required:true,trigger:'blur',validator:this.validatePass},
        ],
      },
    };
  },

  methods:{
    // 校验规则
    validatePass(rule,value,callback){
      if (value === ""){
        callback(new Error("请输入密码"));
      }else if (value.length < 6){
        callback(new Error("密码不能小于6位数"));
      }else{
        callback();
      }

    },
    submitForm(){
      // 验证规则
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          this.login(this.ruleForm);
        }else{
          return false;
        }
      });
    },
    async login(form){
      console.log(form);
      let res = await doLogin(form);
      if(res.data.code === 20000){
        if(res?.data?.data?.token){
          localStorage.setItem("token",res.data?.data?.token);
        }
        this.$router.replace("/home");
}
    },
  },
};

</script>

<style lagn="scss" scoped>
.login-box{
  display: flex;   /* div可成为flex容器*/
  justify-content: center;  /*上面贴着父元素,居于中间*/
  align-items: center;  /* 左侧贴着父元素,把项目位置调整到中间 */
  height: 100vh; /* 元素撑开和屏幕一致*/
  background-image: url("../assets/login-background.jpg");
  background-size: cover;
}
.login-input-box{
  width: 650px;
  height: 320px;
  background-color: #fff;
  text-align: center;
  padding: 40px 40px 12px 12px;
}
.el-button{
  width: 600px;
}
.el-input{
  width: 600px;
  margin-bottom: 16px;
}
::v-deep .el-input_inner{
  background: #e5e5e5;
}
</style>

在request.js里的请求拦截器添加个token
在这里插入图片描述

四、贷款申请接口api编写联调

在src下新建api文件,该文件下新建loan.js,引入request
loan.js代码如下

import requset from "@/utils/request";
export const createLoan =(data)=>{
    return requset({
        url:'/loan/create',
        method:'POST',
        data
    })
}

在src文件的views的loan文件下的IndexView.vue文件里引入并使用
引入import {createLoan} from "@/api/loan";
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1564509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Set a Light 3D Studio:探索光影艺术的全新维度mac/win中文版

Set a Light 3D Studio 是一款领先的三维建模和渲染软件&#xff0c;它将设计师、艺术家和摄影师的创意想法转化为生动逼真的三维场景。这款软件以其强大的功能和直观的界面&#xff0c;成为行业内众多专业人士的首 选工具。 set.a.light 3D STUDIO中文版软件获取 在Set a Lig…

unity shader学习练笔日记(一)

1、简单顶点/片元着色器 Shader "Unity Shaders Study/Day One/Simple Shader" {Properties{//声明一个Color类型的属性_Color ("Color Tint", Color) (1.0, 1.0, 1.0, 1.0)}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag//在CG代码…

【Go】十八、管道

文章目录 1、管道2、管道的定义3、管道的关闭4、管道的遍历5、管道 协程6、只读、只写管道7、管道的阻塞8、select 1、管道 channel本质是一个队列&#xff0c;先进先出自身线程安全&#xff0c;多协程访问时&#xff0c;不用加锁&#xff0c;channel本身就是线程安全的一个s…

OpenCV 笔记(28):图像降噪算法——中值滤波、高斯滤波

1. 图像噪声 图像降噪(Image Denoising)是指从图像中去除噪声的过程&#xff0c;目的是提高图像质量&#xff0c;增强图像的视觉效果。 图像噪声是指图像中不希望出现的随机亮度或颜色变化&#xff0c;通常会降低图像的清晰度和可辨识度&#xff0c;以及会降低图像的质量并使图…

DFS:深搜+回溯+剪枝解决排列、子集问题

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、全排列I . - 力扣&#xff08;LeetCode&#xff09; class Solution { public://全局变量vector<vector<int>> ret;vector<int> path;bool check[6];vector<vector<int>> perm…

【NLP】LLM 和 RAG

在这里&#xff0c;我描述了我在过去几年中关于 RAG 系统如何发展的主要经验。分享 Naive RAG、Advanced RAG 和 Modular RAG 框架之间的区别。总结了高云帆等人发表的一篇出色的RAG 技术调查论文的关键见解。 什么是 RAG 框架&#xff1f; OpenAI的GPT系列、Meta的LLama系列…

InterliJ IDEA基本设置

安装好idea后&#xff0c;将软件打开&#xff0c;可以进行基础设置 1.打开软件&#xff0c;先安装插件-汉化包&#xff08;不推荐&#xff0c;最好使用英文版&#xff09;&#xff0c;本次我们使用汉化版本完成基本设置&#xff0c;后期希望大家适应英文版的开发环境。&#x…

Databend 开源周报第 138 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持多表插入 …

一次MySQL事务的旅程:Buffer Pool, Binlog, Redo Log揭秘

MySQL中的各种Buffer和Log以及表空间 MySQL中一次事务涉及了各种Buffer,Log和表空间&#xff0c;主要涉及&#xff1a;Buffer Pool, Binlog, Undo Log, Redo Log以及表空间。 我们来探讨下。 Buffer Pool Buffer Pool主要存放在内存中&#xff0c;它是一个缓存区域&#xf…

论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

文章目录 RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection问题笛卡尔坐标结构图Meta-Kernel Convolution RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection 论文&#xff1a;https://arxiv.org/pdf/2103.10039.pdf 代码&…

Python 与机器学习,在服务器使用过程中,常用的 Linux 命令包括哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 本博客旨在分享在实际开发过程中&#xff0c;开发者需要了解并熟练运用的 Linux 操作系统常用命令。Linux 作为一种操作系统&#xff0c;与 Windows 或 MacOS 并驾齐驱&#xff0c;尤其在服务器和开发环…

【Node.js从基础到高级运用】二十一、使用child_process模块创建子进程

引言 在Node.js中&#xff0c;child_process模块是一个提供了创建和管理子进程的能力的核心模块。通过使用child_process模块&#xff0c;Node.js可以执行系统命令、运行其他脚本或应用程序&#xff0c;实现与Node.js进程的并行处理。 child_process模块提供了几种创建子进程的…

环信IM集成教程——Web端UIKit快速集成与消息发送

写在前面&#xff1a; 千呼万唤始出来&#xff0c;环信Web端终于出UIKit了&#xff01;&#x1f389;&#x1f389;&#x1f389; 文档地址&#xff1a;https://doc.easemob.com/uikit/chatuikit/web/chatuikit_overview.html 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开…

Docker:探索容器化技术,重塑云计算时代应用交付与管理

一&#xff0c;引言 在云计算时代&#xff0c;随着开发者逐步将应用迁移至云端以减轻硬件管理负担&#xff0c;软件配置与环境一致性问题日益凸显。Docker的横空出世&#xff0c;恰好为软件开发者带来了全新的解决方案&#xff0c;它革新了软件的打包、分发和管理方式&#xff…

聚观早报 | 蔚来推出油车置换补贴;iPhone 16 Pro细节曝光

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月02日消息 蔚来推出油车置换补贴 iPhone 16 Pro细节曝光 小米SU7创始版第二轮追加开售 OpenAI将在日本设立办事…

OSPF中配置静态路由实验简述

静态路由协议和OSPF&#xff08;开放最短路径优先&#xff09;协议是两种常见的路由协议&#xff0c;它们在路由选择和网络管理方面有一些区别。他们可以共存。 静态路由协议需要手动配置路由表&#xff0c;不会自动适应网络拓扑变化&#xff0c;适用于小型网络或者网络拓扑变化…

图神经网络:处理非欧几里得数据的新视角

目录 1. 引言 2.图数据与图神经网络基础 3.GNN模型详解 4.应用案例 4.1. 社交网络分析 4.2. 化学分子性质预测 5.总结 1. 引言 非欧几里得数据指的是那些不遵循传统欧几里得空间几何规则的数据。在欧几里得空间中&#xff0c;数据点之间的距离和形状可以通过标准的几何度…

书生·浦语大模型(学习笔记-1)

一、大模型的发展 模型与通用人工智能&#xff08;AGI&#xff09;&#xff0c;大模型通常被视为发展通用人工智能的重要途径。AI研究从专用模型向通用模型转变&#xff0c;在过去的一二十年中&#xff0c;研究重点在于针对特定任务的专用模型。专用模型的已经再多个领域取得显…

试过了,ChatGPT确实不用注册就可以使用了!

看到官网说不用登录也可以直接使用ChatGPT 我们来试一下 直接打开官网 默认是直接进入了chatgpt3.5的聊天界面 之前是默认进的登录页面 聊一下试试 直接回复了&#xff0c;目前属于未登录状态&#xff0c;挺好&#xff01; 来试下ChatGPT4 跳转到了登录页面 目前来看gpt4还…

时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测

时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算法】…