【项目五】用户记录数据交互


在这里插入图片描述

axios的封装

// 一、导入模块:切记cnpm i axios -S
import axios from "axios";
import router from "@/router";
import { Loading, Message } from "element-ui";

// 二、创建axios实例
const request = axios.create({
  // baseURL: "/api",
  // .env 全局默认配置文件,不论什么环境都会加载合并
  // .env.development 开发环境下的配置文件  cnpm run serve
  // .env.production 生产环境下的配置文件   cnpm run build
  baseURL: process.env.VUE_APP_URL,
  timeout: 5000,
  headers: {
    // 意味着:后期post请求 body: '参数名=数据&...&参数名=数据
    "content-type": "application/x-www-form-urlencoded",
  },
});

// 三、拦截器
let loadingInstance = null;
let ajax = {};
request.interceptors.request.use(
  (config) => {
    // loading
    loadingInstance = Loading.service({ fullscreen: true });
    // token
    let token =
      localStorage.getItem("token") || "9201591ba0eb36c8abaea2854274f5082";
    config.headers.token = token;
    // cancelToken
    if (ajax[config.url]) {
      ajax[config.url].cancel("Operation canceled by the user.");
      delete ajax[config.url];
    }
    ajax[config.url] = axios.CancelToken.source();
    config.cancelToken = ajax[config.url].token;

    return config;
  },
  (error) => Promise.reject(error)
);
request.interceptors.response.use(
  (response) => {
    // close loading
    if (loadingInstance) loadingInstance.close();

    // 403
    if (response.data.meta.state == 403) {
      Message.error("无权访问,跳转中...");
      router.push("/login");
      return;
    }
    // TOKEN过期
    if (response.data.meta.msg.includes("TOKEN过期")) {
      Message.error("TOKEN过期,请重新登录...");
      router.push("/login");
      // TODO. 调用store去清除登录数据
      return;
    }
    // 过滤.data.data
    return response.data;
  },
  (error) => {
    // 失败响应
    let errorObj = JSON.parse(JSON.stringify(error));

    // 关闭Loading
    if (loadingInstance) loadingInstance.close();
    // 判断失败原因
    if (errorObj.message.includes("timeout")) {
      Message.error("网络繁忙,请刷新后重试...");
    } else if (errorObj.message.includes("404")) {
      Message.error("大兄弟,接口地址写错了 404...");
    } else if (errorObj.message.includes("canceled")) {
      console.log("重复点击取消...", errorObj);
    } else {
      // 邮件报警
      // 错误原因   error.message
      // 错误数据   请求的接口地址、当前访问的路由 JSON.stringify(error)  数据编码方式等
      // 用户信息    h5
      // 浏览器信息  ua
      let email = "15021459079@163.com";
      let title = "千锋云直播B2C管理系统异常通知";
      let userinfo = `${localStorage.getItem("uname")}${localStorage.getItem(
        "roleName"
      )}`;
      let ua = navigator.userAgent;
      let message = error.message;
      let errorinfo = JSON.stringify(error);
      fetch("http://kg.zhaodashen.cn/mt/admin/email.jsp", {
        method: "post",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
        },
        body: `email=${email}&title=${title}&userinfo=${userinfo}&ua=${ua}&message=${message}&errorinfo=${errorinfo}`,
      }).then((res) => {
        console.log(res);
      });
    }
    return Promise.reject(error);
  }
);

// 四、导出
export default request;

table的数据请求

历史数据接口的封装使用
在这里插入图片描述
在页面中的使用
1 先倒入
在这里插入图片描述2 讲接口参数写出对象方便后期的分页调用

   params: {
        pagenum: "1",
        pagesize: "5",
        start_time: "",
        end_time: "",
        uname: "",
      },

在这里插入图片描述

分页

    handleCurrentChange(val) {
      this.params.pagenum = val;
      this.init(this.params);
    },

搜索框

      <el-input v-model="params.uname">
        <el-button slot="append" icon="el-icon-search" @click="init(params)">
        </el-button>
      </el-input>

日期搜索

1 保存时间变量
2 监听time 发生变化就请求接口

  watch: {
    time(newTime, oldTime) {
      console.log(newTime, oldTime);
      if (newTime != null && newTime.length === 2) {
        this.params.start_time = newTime[0];
        this.params.end_time = newTime[1];
        this.init();
      } else {
        this.params.start_time = "";
        this.params.end_time = "";
        this.init();
      }
    },
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱玩亚索的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值