vue3+vite+axios+ElementPlus+ElLoading简易封装

news2024/9/25 5:24:21

1.安装按需加载element-plus需要的依赖包

pnpm install element-plus
pnpm install axios
# 按需自动导入
pnpm install -D unplugin-vue-components unplugin-auto-import
# 自动导入element-plus样式
pnpm install -D vite-plugin-style-import

2.修改jsconfig.json

{
  "compilerOptions": {
    "paths": {
      "@/*": ["./src/*"]
    },
    "types": ["element-plus/global"] // 增加element-plus组件标签代码提示
  },
  "exclude": ["node_modules", "dist"]
}

3.修改vite.config.js

import { fileURLToPath, URL } from "node:url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import {
  createStyleImportPlugin,
  ElementPlusResolve,
} from "vite-plugin-style-import";

export default defineConfig({
  plugins: [
    vue(), // element-plus组件自动引入
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
    // element-plus反馈组件样式自动引入
    createStyleImportPlugin({
      resolves: [ElementPlusResolve()],
      libs: [
        {
          libraryName: "element-plus",
          esModule: true,
          resolveStyle: (name) => {
            return `element-plus/theme-chalk/${name}.css`;
          },
        },
      ],
    }),
  ],
  // 加了这个配置后, 可以在任意组件中访问到scss全局变量
  css: {
    preprocessorOptions: {
      scss: {
        javascriptEnabled: true,
        additionalData: '@import "./src/assets/css/variable.scss";',
      },
    },
  },

  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
});

4.axios二次封装

// /src/utils/request.js  - 对axios的简易封装
import axios from "axios";
import { ElLoading } from "element-plus";
import { getItem } from "@/utils/storage";
// 默认loading为false
const DEFAULT_LOADING = false;

// 保证当一个页面中有多个请求时, loading只显示一次
let loadingCount = 0;
let loadingInstrance = null;

function startLoading() {
  if (loadingCount === 0) {
    loadingInstrance = ElLoading.service({
      lock: true,
      text: "正在加载...",
      background: "rgba(0, 0, 0, 0.5)",
    });
  }
  loadingCount++;
}

function endLoading() {
  if (loadingCount > 0) {
    loadingCount--;
    if (loadingCount === 0) {
      loadingInstrance.close();
    }
  }
}

const request = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  timeout: 10000,
});

request.interceptors.request.use(
  (config) => {
    const token = getItem("token");
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }

    config.showLoading = config.showLoading ?? DEFAULT_LOADING;

    config.showLoading && startLoading();

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

request.interceptors.response.use(
  (res) => {
    res.config.showLoading && endLoading();
    return res.data;
  },
  (error) => {
    error.config.showLoading && endLoading();
    return Promise.reject(error);
  }
);

export default request;

5.api的封装

// src/apis/index.js
import request from "@/utils/request";

export function getMessage() {
  return request({
    url: "https://api.uomg.com/api/rand.qinghua",
    showLoading: true, // showLoading为true时, 该接口就会出现加载中动画
  });
}

6.api的使用

<!-- App.vue -->
<template>
  <h2>{{ message }}</h2>
  <el-button @click="handleGetMessage"> 获取消息 </el-button>
</template>

<script setup>
import { ref } from "vue";
import { getMessage } from "@/apis";
const message = ref("");
const handleGetMessage = async () => {
  const res = await getMessage();
  message.value = res.content;
};
handleGetMessage();
</script>

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

[贪心] 区间选点问题

905. 区间选点 - AcWing题库 思路&#xff1a;就是将所有区间按照右端点排序&#xff0c; 然后选取一些区间的右端点 代码&#xff1a; #include <iostream> #include <algorithm> #include <vector> using namespace std; const int N 100010;typedef p…

银行函证工作操作指引

银行函证工作操作指引 根据《关于加快推进银行函证规范化、集约化、数字化建设的通知》&#xff08;财会〔2022〕39号&#xff09;等文件要求&#xff0c;中国注册会计师协会和中国银行业协会制定了《银行函证工作操作指引》&#xff0c;对银行函证工作中的具体事项予以进一步明…

一款AI工作流项目:phidatahq/phidata

一款AI工作流项目&#xff1a;phidatahq/phidata 构建和测试功能强大的 AI 工作流程。该项目提供了一个工作流平台,可以结合大型语言模型(LLM)和各种工具,扩展模型的实用性和应用范围。[1][4][5] 开发各种 AI 助手应用,如客服聊天机器人、数据分析工具、研究助手等。phidata 提…

API接口接入电商平台通过商品链接URL、商品ID抓取淘宝taobao评论数据key接入示例

要接入淘宝taobao评论数据&#xff0c;你需要先注册一个API账号并获取相应的ApiKey和ApiSecret。接下来&#xff0c;你可以使用Python的requests库来调用API接口。 以下是一个示例代码&#xff1a; # coding:utf-8 """ Compatible for python2.x and python3.…

学习笔记:【QC】Android Q - phone 模块

一、phone init 流程图 二、phone MO 流程图 三、phone MT 流程图 四、Log分析(MO_qcril_hal_分析) 1、RILJ请求dial enqueue进队列&#xff0c;QCRIL-hal pop出来处理&#xff0c;最后还是调用qmi_client_send_msg_async发送给modem 11-07 17:29:23.598 2758 2758 D RILJ …

51. 【Android教程】JSON 数据解析

在上一节我们学习了 xml 数据格式&#xff0c;如果你觉得 xml 的数据比较冗余&#xff0c;标签、属性等等定义过于复杂&#xff0c;那么这一节我们将继续学习另一种更精简、更高效的数据格式—— Json。它广泛的运用于数据持久化以及网络传输中&#xff0c;这一节我们一起学习 …

Anaconda删除虚拟环境目录pkgs和envs|conda瘦身

这个文件夹里面是专门放不同环境中的包的&#xff0c;只是没有区分环境&#xff0c;都混在一起了&#xff0c; 一般在想要删除一个虚拟环境&#xff0c;除了在命令行中输入conda remove -n your_env_name(虚拟环境名称) --all 然后在envs中删除虚拟环境的文件夹&#xff0c; 还…

RedHat7端口操作/RedHat7开启和关闭防火墙/RedHat7防火墙常用操作常用命令

1、查看当前那些端口被放行了 firewall-cmd --list-port 2、开放指定端口 firewall-cmd --zonepublic --add-port8000/tcp --permanent 3、关闭指定的端口 firewall-cmd --zonepublic --remove-port3306/tcp --permanent 4、重载防火墙配置&#xff0c;让新加入的端口生效…

CTF-WEB(MISC)

安全攻防知识——CTF之MISC - 知乎 CTF之MISC杂项从入门到放弃_ctf杂项 你的名字-CSDN博客 CTF MICS笔记总结_archpr 掩码攻击-CSDN博客 一、图片隐写 CTF杂项---文件类型识别、分离、合并、隐写_ctf图片分离-CSDN博客 EXIF&#xff08;Exchangeable Image File&#xff09;是…

【学习AI-相关路程-工具使用-自我学习-NVIDIA-cuda-工具安装 (1)】

【学习AI-相关路程-工具使用-自我学习-NVIDIA-cuda &#xff08;1&#xff09;】 1、前言2、环境配置1、对于jetson orin nx 的cuda环境2、对于Ubuntu 20.04下cuda环境 3、自我总结-安装流程1、在ubuntu下&#xff0c;如果想使用cuda平台&#xff0c;应该注意什么 和 都安装什么…

企业开发基础--数据库

今天完成了数据库学习的全部内容&#xff0c;在事务&#xff0c;索引&#xff0c;范式中要有个人逻辑上的理解&#xff0c;也算是卡着点完成了大多数预期&#xff0c;还有一个Java游戏未完成&#xff0c;会后续补上。 之后的一周要完成34道数据库练习题以及JDBC&#xff0c;学…

台式电脑如何找ip地址和端口

随着互联网的深入发展和广泛应用&#xff0c;每台连接到网络的设备都需要一个独特的标识来确保数据传输的准确与高效。对于台式电脑来说&#xff0c;这个标识就是IP地址&#xff0c;而端口则是数据进出的通道。了解如何查找自己台式电脑的IP地址和端口&#xff0c;不仅有助于日…

森林消防泵:守护绿色生命线的无声战士/恒峰智慧科技

在广袤无垠的森林中&#xff0c;生命的绿色如同一块巨大的调色板&#xff0c;为世界增添了无尽的生机与活力。然而&#xff0c;这美丽的画卷也可能因一场突如其来的火灾而瞬间破碎。因此&#xff0c;有一群默默无闻的消防人员&#xff0c;他们配备的是一台台强大的森林消防泵&a…

LeetCode763:划分字母区间

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 …

C#知识|上位机UI设计-详情窗体设计思路及流程(实例)

哈喽,你好啊,我是雷工! 上两节练习记录了登录窗体和主窗体的实现过程,本节继续练习内容窗体的实现,以下为练习笔记。 01 详情窗体效果展示: 02 添加窗体并设置属性 在之前练习项目的基础上添加一个Windows窗体,设置名称为:FrmIPManage.cs 设置窗体的边框和标题栏的外…

母婴店运用商城小程序店铺的效果是什么

母婴市场规模高&#xff0c;还可与不少行业无缝衔接&#xff0c;尤其是以90后、00后为主的年轻人&#xff0c;在备孕生育和婴儿护理前后等整体流程往往不惜重金且时间长&#xff0c;母婴用品无疑是必需品&#xff0c;商家需要多方面拓展全面的客户及打通场景随时消费路径。 运…

YUM源仓库部署和NFS共享存储服务

一.YUM源仓库部署 1.YUM 概述 &#xff08;1&#xff09;是基于RPM软件包构建的软件更新机制 &#xff08;2&#xff09;可以自动解决依赖关系 &#xff08;3&#xff09;所有软件包有集中的YUM软件仓库提供 2.准备YUM源 &#xff08;1&#xff09;软件仓库的提供方式&…

CMakeLists.txt语法规则:提供信息的变量说明一

一. 简介 前面几篇文章学习了 CMakeLists.txt语法中 部分常用命令。 接下来学习CMakeLists.txt语法中部分常用变量&#xff0c;变量也是 cmake 中的一个重头戏&#xff0c;cmake 提供了很多内置变量。每一个变量都有它自己的含义&#xff0c;可以通过如下链接地址查询到所有…

大模型的概念与特点

在人工智能的浩瀚星空中&#xff0c;大模型犹如一颗璀璨的明星&#xff0c;引领着技术发展的方向。它们以巨大的参数规模和复杂的计算结构&#xff0c;展现出前所未有的智能潜力。本小节将从大模型的基本概念出发&#xff0c;逐步深入解析其发展历程、特点、分类以及泛化与微调…

【数据库原理及应用】期末复习汇总高校期末真题试卷03

试卷 一、选择题 1 数据库中存储的基本对象是_____。 A 数字 B 记录 C 元组 D 数据 2 下列不属于数据库管理系统主要功能的是_____。 A 数据定义 B 数据组织、存储和管理 C 数据模型转化 D 数据操纵 3 下列不属于数据模型要素的是______。 A 数据结构 B 数据字典 C 数据操作 D…