編寫 loading、加密解密 發布NPM依賴包,并實施落地使用

你的 Loading

開箱即可用的 loading,
說明:vue3-loading 是一個方便在 Vue 3 項目中使用的加載指示器組件的 npm 插件。它允許您輕松地在項目中添加加載動畫,提升用戶體驗。

目錄

  • 你的 Loading
  • 🌍 安裝
    • 🛹 演示地址:
    • 🛹 使用方法
    • 說明:
  • 你的 Pinia 加密插件
    • 🌍 安裝
    • 🛹 使用方法
    • 🤖 加密和解密

🌍 安裝

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(); // 清除臨時緩存// 清除cookiedocument.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.$attrsproxy.$dataproxy.$elproxy.$emitproxy.$forceUpdateproxy.$nextTickproxy.$optionsproxy.$parentproxy.$propsproxy.$refsproxy.$rootproxy.$slotsproxy.$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: 頁面使用

<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>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# WPF 無焦點自動獲取USB 二維碼掃碼槍內容,包含中文

C# WPF 無焦點自動獲取USB 二維碼掃碼槍內容&#xff0c;包含中文 前言項目背景 需要預知的知識實現方案第一步 安裝鍵盤鉤子第二步 獲取輸入的值第3 步 解決中文亂碼問題分析解決思路工具函數 結束 前言 USB接口的掃碼槍基本就相當于一個電腦外設&#xff0c;等同于一個快速輸…

Oracle Data Redaction與Data Pump

如果表定義了Redaction Policy&#xff0c;導出時數據會脫敏嗎&#xff1f;本文解答這個問題。 按照Oracle文檔Advanced Security Guide第13章&#xff0c;13.6.5的Tutorial&#xff0c;假設表HR.jobs定義了Redaction Policy。 假設HR用戶被授予了訪問目錄對象的權限&#xf…

Unity引擎使用InteriorCubeMap采樣制作假室內效果

Unity引擎制作假室內效果 大家好&#xff0c;我是阿趙。 ??這次來介紹一種使用CubeMap做假室內效果的方式。這種技術名叫InteriorCubeMap&#xff0c;是UE引擎自帶的節點效果。我這里是在Unity引擎里面的實現。 一、效果展示 這個假室內效果&#xff0c;要動態看才能看出效…

柏睿向量數據庫Rapids VectorDB賦能企業級大模型構建及智能應用

ChatGPT的問世,在為沉寂已久的人工智能重新注入活力的同時,也把長期默默無聞的向量數據庫推上舞臺。今年4月以來,全球已有4家知名向量數據庫公司先后獲得融資,更加印證了向量數據庫在AI大模型時代的價值。 什么是向量數據庫? 在認識向量數據庫前,先來了解一下最常見的關…

【業務功能篇62】Spring boot maven多模塊打包時子模塊報錯問題

程序包 com.xxx.common.utils不存在或者xxx找不到符號 我們項目中一般都是會分成多個module模塊&#xff0c;做到解耦&#xff0c;方便后續做微服務拆分模塊&#xff0c;可以直接就每個模塊進行打包拎出來執行部署這樣就會有模塊之間的調用&#xff0c;比如API模塊會被Service…

【SpringBoot】SpringBoot獲取不到用戶真實IP怎么辦

文章目錄 前言問題原因解決方案修改Nginx配置文件SpringBoot代碼實現 前言 項目部署后發現服務端無法獲取到客戶端真實的IP地址&#xff0c;這是怎么回事呢&#xff1f;給我都整懵逼了&#xff0c;經過短暫的思考&#xff0c;我發現了問題的真兇&#xff0c;那就是我們使用了N…

Vue基礎

Vue基礎 Vue應用 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><!-- 開發環境版本 --><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head&g…

vue所有UI庫通用)tree-select 下拉多選(設置 maxTagPlaceholder 隱藏 tag 時顯示的內容,支持鼠標懸浮展示更多

如果可以實現記得點贊分享&#xff0c;謝謝老鐵&#xff5e; 1.需求描述 引用的下拉樹形結構支持多選&#xff0c;限制選中tag的個數&#xff0c;且超過制定個數&#xff0c;鼠標懸浮展示更多已選中。 2.先看下效果圖 3.實現思路 首先根據API文檔&#xff0c;先設置maxTagC…

【Docker】Docker network之bridge、host、none、container以及自定義網絡的詳細講解

&#x1f680;歡迎來到本文&#x1f680; &#x1f349;個人簡介&#xff1a;陳童學哦&#xff0c;目前學習C/C、算法、Python、Java等方向&#xff0c;一個正在慢慢前行的普通人。 &#x1f3c0;系列專欄&#xff1a;陳童學的日記 &#x1f4a1;其他專欄&#xff1a;CSTL&…

TCP/IP網絡江湖初探:物理層的奧秘與傳承(物理層上篇-基礎與本質)

〇、引言 在這個數字時代,計算機網絡如同廣袤的江湖,數據在其中暢游,信息傳遞成為了生活的常態。然而,在這個充滿虛擬奇觀的網絡江湖中,隱藏著一個不容忽視的存在,那就是物理層,這個江湖的基石。就如同江湖中的土地一樣,物理層作為計算機網絡的基礎,承載著數據的最初轉…

STM32 CubeMX (uart_IAP串口)簡單示例

STM32 CubeMX STM32 CubeMX &#xff08;串口IAP&#xff09; STM32 CubeMXIAP有什么用&#xff1f;整體思路 一、STM32 CubeMX 設置時鐘樹UART使能UART初始化設置 二、代碼部分文件移植![在這里插入圖片描述](https://img-blog.csdnimg.cn/0c4841d8328b4169a8833f15fe3d670c.p…

PHP Smarty中的緩存如何實現?

歡迎來到PHP Smarty的緩存世界&#xff01;這里是一個簡單的指南&#xff0c;幫助你理解如何在這個強大的模板引擎中啟用和配置緩存。 首先&#xff0c;讓我們先了解一下什么是緩存。簡單來說&#xff0c;緩存就是將需要花費大量時間處理的數據或資源存儲起來&#xff0c;以便…

2023/8/16總結

這幾天完成了私信的功能點&#xff0c;用websocket做的。 這是大概的界面&#xff0c;參考的是微信 用戶可以搜索好友&#xff1a; 如果不存在是下面這樣&#xff0c;存在就會在左邊的聊天里面顯示有這個人選項 發送消息 接下來需要把推薦算法給做了

文件IO編程 1 2

頭文件包含路徑 linux 操作系統分為兩大空間&#xff1a;用戶空間和內核空間 這樣劃分&#xff0c;是為了保護內核的核心組件&#xff0c;不被輕易訪問和修改 系統調用&#xff1a;安全的訪問內核空間 其核心是&#xff1a;函數API&#xff08;API&#xff1a;用戶編程接口&…

svn文章五:問題排查與修復 - 出了問題怎么辦?SVN故障排除與修復指南

文章五&#xff1a;問題排查與修復 - “出了問題怎么辦&#xff1f;SVN故障排除與修復指南” 概述&#xff1a;在使用SVN時&#xff0c;難免會遇到一些問題和錯誤。在這篇文章中&#xff0c;我們將教您如何進行故障排查和修復&#xff0c;保護您的SVN倉庫和數據安全。 1. 引言…

K8S系列文章之 Docker安裝使用Kafka

通過Docker拉取鏡像的方式進行安裝 照例先去DockerHub找一下鏡像源&#xff0c;看下官方提供的基本操作&#xff08;大部分時候官方教程比網上的要清晰一些&#xff0c;并且大部分教程可能也是翻譯的官方的操作步驟&#xff0c;所以直接看官方的就行&#xff09; 老實說Kafka…

“深入剖析JVM內部原理:解密Java虛擬機的奧秘“

標題&#xff1a;深入剖析JVM內部原理&#xff1a;解密Java虛擬機的奧秘 摘要&#xff1a;本文將深入探討Java虛擬機&#xff08;JVM&#xff09;的內部原理&#xff0c;包括其架構、內存管理、垃圾回收機制、即時編譯器等關鍵組成部分。通過解密JVM的奧秘&#xff0c;我們將更…

【Vue3】Vue3 UI 框架 | Element Plus —— 創建并優化表單

安裝 # NPM $ npm install element-plus --save // 或者&#xff08;下載慢切換國內鏡像&#xff09; $ npm install element-plus -S// 可以選擇性安裝 less npm install less less-loader -D // 可以選擇性配置 自動聯想src目錄Element Plus 的引入和注入 main.ts import…

解決VSCode CPU高占問題的方法

如果你也遇到VSCode的CPU占用過高的問題&#xff0c;可以嘗試使用官方自帶的插件Bisect&#xff08;擴展二分查找&#xff09;功能來查找具體是哪個擴展出了問題。 找到“糟糕”的擴展可能很容易&#xff0c;也可能很困難。 打開擴展視圖 ( CtrlShiftX )&#xff0c;禁用擴展&…

網絡:雜記

1. 完成鏈路認證后&#xff0c;STA會繼續發起鏈路服務協商&#xff0c;具體的協商是通過Association報文實現。 2. RSTP可以提高收斂速度的原因&#xff1a; RSTP的拓撲變化機制 Proposal/Agreement機制 根端口快速切換機制 邊緣端口的引入