vue axios封装,分页封装

自己练手用,防止忘记

在src下面新建utils文件夹,然后再新建request.js,然后开始封装

/**
 * ajax请求配置
 */
import axios from 'axios'
import { Message } from 'element-ui'

// axios默认配置
axios.defaults.timeout = 10000 // 超时时间
// axios.defaults.baseURL 请求地址前缀
// User地址
// axios.defaults.baseURL = 'http://127.0.0.1:8001'
// tools地址
// axios.defaults.baseURL = 'http://127.0.0.1:8088'
// 微服务地址
// axios.defaults.baseURL = '/api'
axios.defaults.baseURL = 'http://192.168.5.200:9090'

// 整理数据
axios.defaults.transformRequest = function(data) {
    data = JSON.stringify(data)
    return data
}

// 路由请求拦截
axios.interceptors.request.use(
    config => {
      // 判断 token 是否存在
      // var token = localStorage.getItem('token');
      // if (token) {
        // 在发起请求前,给所有请求添加请求头
        config.headers['Content-Type'] = 'application/json;charset=UTF-8'
        // config.headers.common['token'] = JSON.parse(token).token;
      // }
      return config;
    },
    error => {
        return Promise.reject(error.response)
    })

// 路由响应拦截
axios.interceptors.response.use(
    response => {
        if (response.data.success === false) {
            return Message.error(response.data.errDesc)
        } else {
            return response.data
        }
    },
    error => {
      if (error && error.response) {
          // 1.公共错误处理
          // 2.根据响应码具体处理
          switch (error.response.status) {
            case 400:
              error.message = '错误请求,错误代码:400'
              break;
            case 401:
              error.message = '未授权,请重新登录,错误代码:401'
              break;
            case 403:
              error.message = '拒绝访问,错误代码:403'
              break;
            case 404:
              error.message = '请求错误,未找到该资源,错误代码:404'
              // window.location.href = "/NotFound"
              break;
            case 405:
              error.message = '请求方法未允许,错误代码:405'
              break;
            case 408:
              error.message = '请求超时,错误代码:408'
              break;
            case 500:
              error.message = '服务器端出错,错误代码:500'
              break;
            case 501:
              error.message = '网络未实现,错误代码:501'
              break;
            case 502:
              error.message = '网络错误,错误代码:502'
              break;
            case 503:
              error.message = '服务不可用,错误代码:503'
              break;
            case 504:
              error.message = '网络超时,错误代码:504'
              break;
            case 505:
              error.message = 'http版本不支持该请求,错误代码:505'
              break;
            default:
              error.message = `连接错误${error.response.status}`
          }
        } else {
          // 超时处理
          if (JSON.stringify(error).includes('timeout')) {
            Message.error('服务器响应超时,请刷新当前页')
          }
          error.message('连接服务器失败')
        }

        Message.error(error.message)
      return Promise.reject(error.response) // 返回接口返回的错误信息
    })
export default axios

完成之后,在src目录下新建 api 文件夹,新建 authority.js(随便起的名称)

// 权限管理API  【菜单、角色、权限】
import request from '@/utils/request'

/**
 * 添加菜单
 * @param {*} data
 * @author 小道仙
 * @date 2020年2月19日
 */
export function addMenu(data) {
    return request({
        url: '/MRouting/getMOD_Stats',
        method: 'post',
        data
    })
}

/**
 * 菜单列表
 * @param {*} query
 * @author 小道仙
 * @date 2020年2月19日
 */
export function menuList(query) {
    return request({
        url: '/Mplan/Orderinfo',
        method: 'get',
        params: query
    })
}


export function getKvalue(query) {
    return request({
        url: '/MRouting/getMOD_Stats',
        method: 'get',
        params: query
    })
}

以上就封装完成

使用


<script>
// 先导入
import { addMenu } from "@/api/authority.js";
import Pagings from "@/components/Pagination";
export default {
    data() {
        return {
            height: "",
            list: [],
            oAssEquipmentDto: {
                offset: 1,
                pageNumber: 5,
            },
            total: 1, //总条数
        };
    },
    components: {
        Pagings,
    },
    methods: {
        getAddMenu() {
            var that = this;
            var param = {
                Pname: "",
                pcode: "",
                pageIndex: that.oAssEquipmentDto.offset,
                pagenumber: that.oAssEquipmentDto.pageNumber,
            };
            addMenu(param).then((resp) => {
                that.list = JSON.parse(resp);
                that.total = parseInt(that.list[0].total)
            });
        },
        handleSizeChange(val) {
            this.oAssEquipmentDto.pageNumber = val;
            this.getAddMenu();
        },
        handleCurrentChange(val) {
            this.oAssEquipmentDto.offset = val;
            this.getAddMenu();
        },
    },
    created() {},
    mounted() {
        this.getAddMenu();
    },
};
</script>

目录结构

 封装分页

<template>
    <div class="pagetion">
        <el-pagination
            align="center"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            background
            :current-page="offset"
            :page-size="pageSize"
            :page-sizes="[10,20,30,40,50]"
            layout=" prev, pager, next, sizes,jumper"
            :total="total"
        ></el-pagination>
    </div>
</template>

<script type="text/ecmascript-6">
export default {
    data() {
        return {};
    },
    props: {
        total: {
            // 总条目数
            type: Number,
            default: 1, //默认值
        },
        pageSize: {
            //每页显示条目个数
            type: Number,
            default: 1,
        },
        offset: {
            //当前页数
            type: Number,
            default: 1,
        },
    },
    methods: {
        handleSizeChange(val) {
            //pageSize 改变时会触发
            this.$emit("handleSizeChangeSub", val);
        },
        handleCurrentChange(val) {
            //currentPage 改变时会触发
            this.$emit("handleCurrentChangeSub", val);
        },
    },
};
</script>

使用

<template>
    <div class="hello">
        <template>
            <el-table :data="list" border style="font-size: 10px" stripe :header-cell-style="{background:'#337AB7',color:'#ffffff',height:'30px'}">
                <el-table-column prop="pcode" label="产品编码"></el-table-column>
                <el-table-column prop="pname" label="产品名称"></el-table-column>
                <el-table-column prop="workcenter" label="短文本" width="180" align="center" :show-overflow-tooltip="true"
                ></el-table-column>
                <el-table-column prop="desc" label="物料描述" width="180" :show-overflow-tooltip="true"></el-table-column>
            </el-table>
            <Pagings
                :total="total" :offset="oAssEquipmentDto.offset"
                :pageSize="oAssEquipmentDto.pageNumber"
                @handleSizeChangeSub="handleSizeChange"
                @handleCurrentChangeSub="handleCurrentChange"
            ></Pagings>
        </template>
    </div>
</template>

<script>
import { addMenu } from "@/api/authority.js";
import Pagings from "@/components/Pagination";    // 导入分页组件
export default {
    data() {
        return {
            height: "",
            list: [],
            oAssEquipmentDto: {
                offset: 1,
                pageNumber: 5,
            },
            total: 1, //总条数
        };
    },
    components: {
        Pagings,
    },
    methods: {
        getAddMenu() {
            var that = this;
            var param = {
                Pname: "",
                pcode: "",
                pageIndex: that.oAssEquipmentDto.offset,
                pagenumber: that.oAssEquipmentDto.pageNumber,
            };
            addMenu(param).then((resp) => {
                that.list = JSON.parse(resp);
                that.total = parseInt(that.list[0].total)
            });
        },
        handleSizeChange(val) {
            this.oAssEquipmentDto.pageNumber = val;
            this.getAddMenu();
        },
        handleCurrentChange(val) {
            this.oAssEquipmentDto.offset = val;
            this.getAddMenu();
        },
    },
    created() {},
    mounted() {
        this.getAddMenu();
    },
};
</script>


<style scoped>
/deep/.el-table td,
.el-table th {
    padding: 0 0;
}
</style>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值