编写 loading、加密解密 发布NPM依赖包,并实施落地使用

这篇具有很好参考价值的文章主要介绍了编写 loading、加密解密 发布NPM依赖包,并实施落地使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你的 Loading

开箱即可用的 loading,
说明:vue3-loading 是一个方便在 Vue 3 项目中使用的加载指示器组件的 npm 插件。它允许您轻松地在项目中添加加载动画,提升用户体验。

🌍 安装

npm install vue3-loading-plug

🛹 演示地址:

http://project.webcats.cn/bx/43924/16191

🛹 使用方法

说明:

内置两种loading 【可自行配置】

​ Loading 是 大loading 可以用于刷新项目页面、路由跳转 。在路由中引入一次 即可全局生效,极简配置

​ smallLoading 是小圆圈 loading,一般用于接口请求展示。可以请求拦截器中开启,全局接口生效,极简配置

在你的主应用程序入口文件(例如 main.js)中,导入并使用 loading :

import Loading from "vue3-loading-plug";
app.use(Loading).mount("#app");

如果是 ts 请在 global.d.ts 加入 类型

declare module "vue3-loading-plug";

router

router.beforeEach((to, from, next) => {
  if (to.meta.loading) app.config.globalProperties.$Loading.showLoading();
    next();
});

router.afterEach((to) => {
  if (to.meta.loading) app.config.globalProperties.$Loading.hideLoading();
});

scrvies


// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么?
    app.config.globalProperties.$smallLoading.showLoading();
    return config;
  },
  (error) => {
    // 对请求错误做些什么?
    app.config.globalProperties.$smallLoading.hideLoading();
    return Promise.reject(error);
  }
);

// 封装错误提示函数 (Token过期、网络链接错误等)
const tipError = (value: string, title: string) => {
  ElMessageBox.alert(value, title, {
    confirmButtonText: "重新登录",
    type: "warning",
  }).then(() => {
    // Session.clear(); // 清除临时缓存
    // 清除cookie
    document.cookie.split(";").forEach(fnction (c) {
      document.cookie = c
        .replace(/^ +/, "")
        .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/");
    });
    window.location.reload(); // 刷新页面
  });
};

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么? 这里只返回成功响应数据!
    app.config.globalProperties.$smallLoading.hideLoading();
    return response.data;
  },
  (error) => {
    // 对响应错误数据做点什么?这里只显示错误消息!
    app.config.globalProperties.$smallLoading.hideLoading();
    /* 
			axios.isCancel(error) 是 Axios 库中的一个方法,用于判断一个错误对象是否是由于请求取消导致的。
			当使用 axios.CancelToken 取消请求时,会抛出一个带有一个 message 属性的错误对象。
			axios.isCancel(error) 的作用就是判断这个错误对象的类型,如果是由请求取消导致的错误,则返回 true,否则返回 false。
		    console.log('打印cancelToken.cancel('xxx')传入来的值', error.message);
	    */
    if (axios.isCancel(error)) {
      ElMessage.error(error.message); // 显示错误消息
    } else {
      // 不是由请求取消导致的错误

      let errorMessage; // 错误提示变量
      const statusData = error.response?.data; // 错误data数据

      const describeForNameMap = [
        [
          () => error.message.indexOf("timeout") !== -1,
          () => (errorMessage = "网络超时 🤖"),
        ],
        [
          () => error.message === "Network Error",
          () => (errorMessage = "网络连接错误 🤪"),
        ],
        [
          () => statusData.code === 100010011,
          () => {
            // 100010011 token过期
            errorMessage = statusData.message;
            tipError(errorMessage, "登录过期");
          },
        ],
        // 否则 显示错误消息
        [() => statusData, () => (errorMessage = statusData.message)],
      ];
      // 获取符合条件的子数组
      const getDescribe = describeForNameMap.find((item) => item[0]());
      // 执行子数组中的函数
      getDescribe && getDescribe[1]();
      ElMessage.error(errorMessage); // 显示错误消息
    }
  }
);

// 导出 service将其命名为axios , 同时还导出了一个名为cancelToken的变量(取消请求)
export { service as axios, cancelToken };

你的 Pinia 加密插件

你的 Pinia 加密插件是一个基于 Pinia 的实用工具,用于在 Vue.js 应用程序中加密和解密敏感数据。它提供了一种简单且安全的方式来保护你的数据。

🌍 安装

你可以使用 npm 或 yarn 安装插件:

pnpm i vue3-encryption-plugin

🛹 使用方法

在你的主应用程序入口文件(例如 main.js)中,导入并使用 Pinia store 以及加密插件:

// main.js
import { createApp } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
import EncryptionPlugin from "vue3-encryption-plugin";

const app = createApp(App);

const pinia = createPinia();
app.use(pinia);

// 注册加密插件并提供自定义的密钥(可选)例如,随机的字符串
app.use(EncryptionPlugin, { key: "your-custom-secret-key" });

app.mount("#app");

🤖 加密和解密

一旦你设置了插件,你就可以在组件中使用 $encrypt 和 $decrypt 方法:

第一种: getCurrentInstance()

<!-- YourComponent.vue -->
  import {  getCurrentInstance } from 'vue';
  setup(){
     // 获取当前组件的上下文,下面两种方式都能获取到组件的上下文。
     const { ctx }  = getCurrentInstance();  //  方式一,这种方式只能在开发环境下使用,生产环境 下的ctx将访问不到
     const { proxy }: any = getCurrentInstance();  //  方式二,此方法在开发环境以及生产环境下都能到组件上下文对象(推荐)
     // ctx 中包含了组件中由ref和reactive创建的响应式数据对象,以及以下对象及方法;
     proxy.$attrs
     proxy.$data
     proxy.$el
     proxy.$emit
     proxy.$forceUpdate
     proxy.$nextTick
     proxy.$options
     proxy.$parent
     proxy.$props
     proxy.$refs
     proxy.$root
     proxy.$slots
     proxy.$watch
  }

function handClick() {
	console.log(
		"!这里输出 🚀 ==>:",
		proxy.$encryptionPlugin.encryptData({ name: "zk", age: 26})
	);
	console.log(
		"!这里输出 🚀 ==>:",
		proxy.$encryptionPlugin.decryptData(
			"U2FsdGVkX1/PBDHn2pyLPAf6DmolvylM2QEIDhcf5I3WQWhOh19eos0uZfdbzdDP"
		)
	);
}

第二种 injict (推荐)

1:src / types / global.d.ts 定义类型

// 加密解密
declare interface EncryptionPlugin {
	encryptData: <T>(data: T) => string;
	decryptData: <T>(encryptedData: string) => T;
}

如果你使用 eslint 请在 .eslintrc.cjs 文件中添加

	globals: {
		// 以下是全局变量 eslint 不会报'EncryptionPlugin' is not defined.eslint (no-undef)
		EncryptionPlugin: "readonly",
         $encryptionPlugin: "readonly",
	},

2: 页面使用文章来源地址https://www.toymoban.com/news/detail-651630.html

<script setup lang="ts">
import { inject } from 'vue';

// 使用 inject 函数获取 encryptionPlugin
const encryptionPlugin = inject("encryptionPlugin") as EncryptionPlugin;

function handClick() {
	// 现在你可以在你的组件中使用 encryptData 和 decryptData 方法了
	const encryptedData = encryptionPlugin.encryptData("Hello World");
	const decryptedData = encryptionPlugin.decryptData(encryptedData);
	console.log("加密 🚀 ==>:", encryptedData);
	console.log("解密 🚀 ==>:", decryptedData);
}
</script>

到了这里,关于编写 loading、加密解密 发布NPM依赖包,并实施落地使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用Base64加密算法将数据加密解密

    Base64准确来说并不像是一种加密算法,而更像是一种编码标准。 我们知道现在最为流行的编码标准就是ASCLL,它用八个二进制位(一个char的大小)表示了127个字符,任何二进制序列都可以用这127个字符表示出来。 而Base64则是用6个二进制位表示了64个字符,也就是说,任何的

    2024年04月09日
    浏览(66)
  • java和js实现前端加密后端解密,后端加密前端解密(Base64)

    目录 1.前端加密后端解密 2.后端加密前端解密 在前端和后端数据传输时,常常涉及到隐私数据的传输(例如用户名和密码),这时,我们就需要对隐私数据进行加密解密 1.前端加密后端解密         1.1 前端jquery实现         1.2后端 2.后端加密前端解密         2.1后端加密

    2024年02月16日
    浏览(41)
  • 【图像加密解密】区块链的前提下扩散图像加密解密(含直方图)【含Matlab源码 4120期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年03月22日
    浏览(34)
  • Java 常用加密解密

    常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES 非对称加密 常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用) Hash算法 常见的H

    2024年01月16日
    浏览(35)
  • jasypt加密解密

    1. 导入依赖 2. yml配置 导入依赖后,就可以进行jasypt的加密配置 进行完上面操作,就可以在需要加密的地方进行配置了。 比如,配置数据库的账号密码,使用格式 ENC(加密后的密码) 进行加密。 但是如何获取这些加密值呢?接下来写一个加密解密的工具类。 3. 加密解密工具类

    2024年02月11日
    浏览(36)
  • c# 文本加密解密

    在C#中实现加密功能,您可以使用.NET框架提供的System.Security.Cryptography命名空间下的多种加密算法类。这里我将给出一个使用AES(Advanced Encryption Standard)对称加密算法的简单示例: 这个例子展示了如何使用AES加密和解密字符串。注意在实际应用中,密钥应通过安全的方式存储

    2024年01月16日
    浏览(36)
  • 前端AES加密解密

    前端经常会遇到这种接口和参数需要加密的情况,目前用的最多的就是aes加密了。以下就是操作步骤。以下方式适用各个前端框架,请自行根据框架修改对应语法 1.安装 CryptoJS 这个库就是用来加密的核心,直接打开项目终端,输入 npm install crypto-js --save 2. 新建 crypto.js 在 @/

    2024年02月13日
    浏览(44)
  • base64加密解密

    base64加密解密过程 Base64会使用一串固定编码: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 加密过程 想要使用Base64加密,原文长度必须是3的倍数。如果原文不是3的倍数就填充其他符号来凑足成3的倍数; 1,将明文对照以ACSSI码表转换成一个8位二进制数; 2,将转换后的数

    2024年02月04日
    浏览(41)
  • SQLite加密解密

    微信聊天记录导出(2020新版) Android数据库加解密逆向分析(三)——微信数据库密码破解 微备份 论坛讨论 转自windwos 安装 pysqlcipher3 下载 pysqlcipher 去https://pypi.org/search/?q=pysqlciphero=下载pysqlcipher3 1.2.0文件 安装python 推荐安装 python3.7 日常使用够了,不要追求新出来的版本,不太

    2024年02月09日
    浏览(30)
  • Go 加密解密数据(对称)

    如果Web应用足够简单,数据的安全性没有那么严格的要求,那么可以采用一种比较简单的加解密方法是 base64 ,这种方式实现起来比较简单,Go语言的 base64 包已经很好的支持了这个,请看下面的例子: Go语言的 crypto 里面支持对称加密的高级加解密包有: crypto/aes 包:AES(Adv

    2024年02月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包