vue2使用若依框架動態新增tab頁并存儲之前的tab頁的操作

1. 應用場景:

? ? ? ?點擊歷史記錄,要比較兩個tab頁的內容時,需要做到切換tab頁來回看左右對數據對比。

2.開發難點

若依項目正常是把路由配置到菜單管理里,都是設定好的。不過它也給我們寫好了動態新增tab頁的方,需要我們自己來實現

3.實現方式

1.首先在utils/index.js里添加以下代碼
// 動態路由管理
export function addDynamicRoute(router, routeConfig) {console.log(router,'router');const { name, path, component, title } = routeConfig; // 移除了parentPath,因為動態路由將直接作為Layout的子路由// Vue Router 3.x 使用 router.options.routes 來查找現有路由const routeExists = router.options.routes.some(route => {// 檢查頂級路由或其children中是否存在相同name的路由if (route.name === name) return true;if (route.children) {return route.children.some(child => child.name === name);}return false;});if (routeExists) {console.warn(`Route with name '${name}' already exists. Skipping addition.`);return null; // 表示沒有添加新路由}// 創建動態路由,包裝在Layout中const dynamicRoute = {path: path,component: () => import('@/platformLayout'), // 使用Layout作為父組件children: [{path: '', // 空路徑,表示匹配父路徑 /crm/quotation/snapshot/:snapshotIdname: name,component: component, // 這將是 snapshotComponent 包裝器meta: {title: title,noCache: true // 不緩存,確保每次都能加載最新數據}}]};// 添加到路由 - Vue Router 3.x 使用 addRoutesrouter.addRoutes([dynamicRoute]);return dynamicRoute;
}// 生成唯一的路由名稱
export function generateRouteName(snapshotName, snapshotId) {return `snapshot_${snapshotId}_${Date.now()}`;
}// 生成快照路由路徑
export function generateSnapshotPath(snapshotId) {return `/crm/quotation/snapshot/${snapshotId}`;
}
2.接著我們查看plugins/tab.js文件。若依已經為我們寫好了添加tab頁簽的方法
  // 添加tab頁簽openPage(title, url, params) {var obj = { path: url, meta: { title: title } }store.dispatch('tagsView/addView', obj);return router.push({ path: url, query: params });},
3. 在需要創建新的頁面的方法中使用

第一步:引入我們需要的方法

import { addDynamicRoute, generateRouteName, generateSnapshotPath } from '@/utils/index';
import tab from '@/plugins/tab';

第二步: 在用到的方法里實現

注:import('./preSale.vue') 因為是要比較兩個頁面,所以頁面是一樣的,我們直接復用當前頁面。

detailObj? 是我這個頁面需要用到的參數?historyId是記錄當前tab頁面用的,因為路由跳轉回去之后默認是跳轉到首頁。?routeName是生成路由的name;?snapshotId為了生成生成唯一的路由名稱以及拼接路由query參數??? ? ? title: `歷史快照-${snapshotName}`, 可以寫自己要生成路由的名字parentPath: '/crm/quotation' 是路由前綴路徑

   // 創建快照路由querySnapshot(val) {const detailObj = this.options.find(item => item.value == val);this.openSnapshotRoute(detailObj);}, openSnapshotRoute(snapshotData) {const snapshotId = snapshotData.snapId;const snapshotName = snapshotData.snapName;const routeName = generateRouteName(snapshotName, snapshotId);const routePath = generateSnapshotPath(snapshotId);// 創建快照組件const snapshotComponent = {template: `<div class="snapshot-view"><preSale :value="true":row.sync="snapshotData"type='1':historyDisabled="true"@input="handleClose"       /></div>`,data() {return {snapshotData: snapshotData}},methods: {handleClose() {   this.$router.go(-1);}},mounted() {console.log(this.snapshotData);},components: {'preSale': () => import('./preSale.vue')}};// 添加動態路由addDynamicRoute(this.$router, {name: routeName,path: routePath,component: snapshotComponent,title: `歷史快照-${snapshotName}`,parentPath: '/crm/quotation'});// 跳轉到新路由并創建tab頁面tab.openPage(`歷史快照-${snapshotName}`, routePath, { snapshotId: snapshotId, historyId: this.historyId });},
4.效果展示

5. 實現歷史緩存tab的方法

1.既然點擊tab默認打開的是首頁index頁面。那么就在index頁面使用路由守衛的方法來監聽上一個路由傳過來的值

2 實現方式

data(){
return{
}
},beforeRouteEnter(to,from,next){if (from.query.historyId) {next(vm => {getDetailPre(from.query.historyId).then((response) => {vm.preSaleData = response.data;vm.opportunityOptions = [vm.preSaleData].map(item=>{return{...item,value:item.opportunityId,label:item.opportunityName}});});vm.preSaleVisable = true;})}else{next()}},

?3. 重要的一點

需要在跳轉后的頁面監聽傳過來的值, 不然值賦值不上去

 watch: {row: {handler(newVal) {console.log(newVal);this.localRow = { ...newVal };this.localJsonRow = JSON.parse(JSON.stringify(newVal));this.localRow.exchange = newVal.exchange !== null ? newVal.exchange + '%' : '';},deep: true,immediate: true},'row.id': {handler(newVal) {this.getSnapshotPre(newVal);},deep: true,},historyDisabled: {handler(newVal) {this.disabled = newVal;this.operate = !newVal;},deep: true,immediate: true},},

4. 總結

?都是自己做項目的經驗,制作不易,如果可以幫助到你,點個關注再走吧謝謝

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

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

相關文章

論文閱讀-SelectiveStereo

文章目錄1 概述2 模塊2.1 SelectiveIGEV和IGEV的差異2.2 上下文空間注意力2.2.1 通道注意力2.2.2 空間注意力2.3 SRU3 效果參考資料1 概述 本文主要結合代碼對Selective的創新點進行針對性講解&#xff0c;相關的背景知識可以參考我寫的另兩篇文章論文閱讀-RaftStereo和論文閱…

深入分析神馬 M56S+ 202T 礦機參數與性能特點

引言在比特幣&#xff08;BTC&#xff09;和比特幣現金&#xff08;BCH&#xff09;等主流加密貨幣的挖掘過程中&#xff0c;礦機的選擇直接關系到挖礦的效率與收益。神馬 M56S 202T礦機是SHA-256算法的礦機&#xff0c;憑借其強大的算力和高效的能效比&#xff0c;成為了礦工們…

36.2Linux單總線驅動DS18B20實驗(詳細講解代碼)_csdn

想必看過我很多次博客的同學&#xff0c;都知道了編寫驅動的流程&#xff01; 這里我們還是按照以前的習慣來一步一步講解&#xff01; 單總線驅動&#xff0c;在F103和51單片機的裸機開發中是經常見的。 linux驅動代碼編寫實際上就是&#xff0c;端對端的編程&#xff01; 就是…

【雜類】應對 MySQL 處理短時間高并發的請求:緩存預熱

一、什么是緩存預熱&#xff1f;1. 核心概念??緩存預熱&#xff08;Cache Warm-up&#xff09;?? 是指在系統??正式對外提供服務之前??&#xff0c;或??某個高并發場景來臨之前??&#xff0c;??主動??將后續極有可能被訪問的熱點數據從數據庫&#xff08;MySQL…

點評項目(Redis中間件)第三部分短信登錄,查詢緩存

可以直接看后面Redis實現功能的部分基于session實現短信登錄發送短信驗證碼前端請求樣式業務層代碼Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {Overridepublic Result sendCode(String phone, HttpSession se…

線性方程求解器的矩陣分裂

大概思路是對的&#xff0c;但是查老師可能會出現幻覺&#xff0c;小心食用 &#x1f603;這段代碼是在初始化迭代法求解器&#xff0c;構建迭代矩陣和分裂矩陣。以下是詳細解釋&#xff1a; if init_from_func or init_from_input:# 1. 存儲剛度矩陣self.stiff_p stiff_p# 2.…

【Beetle RP2350】雷達模塊 CEM5861G-M11 開發使用指南

一、硬件介紹 1、產品特點 Beetle RP2350【RP2350A_QFN60】是一款基于RP2350微控制器的高性能迷你開發板&#xff0c;雙核雙架構設計&#xff08;支持 Arm Cortex-M33或Hazard3 RISC-V內核&#xff09;為開發者提供靈活的性能配置。 雙核雙架構&#xff0c;性能自由切換 采…

高通Android 13 開機黑屏問題深度剖析與解決方案

1. 問題概述 在 Android 13 系統定制化開發過程中&#xff0c;開機流程的調試與優化頗具挑戰性。一個典型問題是&#xff1a;當開機動畫播放完畢后&#xff0c;設備會先出現數秒黑屏&#xff0c;然后才進入鎖屏界面。本文基于開機日志分析&#xff0c;結合實際項目經驗&#x…

騰訊推出AI CLI工具CodeBuddy,國內首家同時支持插件、IDE和CLI三種形態的AI編程工具廠商

2025年9月9日&#xff0c;騰訊正式推出自研AI CLI工具CodeBuddy code&#xff0c;成為國內首家同時支持插件、IDE和CLI三種形態的AI編程工具廠商。這一創新不僅填補了國內市場在全形態AI編程工具領域的空白&#xff0c;更以編碼時間縮短40%、AI生成代碼占比超50%的硬核數據&…

零基礎學習QT的第二天-組件基礎知識

組件聲明以及設置屬性 所有的組件的基類為&#xff1a;QtObject&#xff0c;在c中名稱為&#xff1a;QObject。 在qml和c名稱有所區別&#xff0c;例如在Qml中QtObject&#xff0c;在C會省略一個t(QObject) 聲明組件的方式&#xff1a; 組件名 {屬性名:值}在實際應用中&#xf…

像素圖生成小程序開發全解析:從圖片上傳到Excel圖紙

像素圖生成小程序開發全解析&#xff1a;從圖片上傳到Excel圖紙 前言 在數字化創作和工藝設計領域&#xff0c;像素圖生成工具具有廣泛的應用價值&#xff0c;無論是十字繡設計、LED燈陣布置還是復古游戲美術創作。本文將詳細解析一個功能完整的像素圖生成小程序的開發過程&…

mac-intel操作系統go-stock項目(股票分析工具)安裝與配置指南

1. 項目基礎介紹 go-stock 是一個基于Wails和NaiveUI開發的AI賦能股票分析工具。旨在為用戶提供自選股行情獲取、成本盈虧展示、漲跌報警推送等功能。它支持A股、港股、美股等市場&#xff0c;能夠進行市場整體或個股的情緒分析、K線技術指標分析等功能。所有數據均保存在本地…

spring-單例bean是線程安全的嗎

其中可修改的成員變量有線程不安全問題&#xff0c;不可修改的無狀態的 userService是沒有線程安全問題的 spring框架中有一個 Scope注解&#xff0c;默認的值就是singleton&#xff0c;單例的。 不是線程安全的&#xff0c;一般來說&#xff0c;我們在bean中注入的對象都是無狀…

CM1033系列 3串鋰電池保護IC - 高精度±25mV 內置延時 多型號可選(含鐵鋰)

1. 核心亮點 高精度多重保護&#xff1a;專為3串電池組設計&#xff0c;提供過充、過放、三級過流&#xff08;含短路&#xff09;、充電過流及斷線檢測等全方位保護&#xff0c;電壓檢測精度高達25mV。超低功耗&#xff1a;工作電流典型值僅7μA&#xff0c;休眠電流低至4μA&…

【第23話:定位建圖】SLAM后端優化方法詳解

SLAM 后端優化方法詳解 SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;后端優化是SLAM系統中的關鍵環節&#xff0c;負責對前端輸出的傳感器數據進行全局一致性優化&#xff0c;消除累積誤差。后端通常基于圖優化框架&#xff08;如g2o、GTSAM&#xff09…

MongoDB 備份與恢復終極指南:mongodump 和 mongorestore 深度實戰

MongoDB 備份與恢復終極指南&#xff1a;mongodump 和 mongorestore 深度實戰引言&#xff1a;數據守護者的使命第一部分&#xff1a;基礎概念與核心原理1.1 邏輯備份 vs. 物理備份&#xff1a;根本性的區別1.2 核心工具介紹第二部分&#xff1a;mongodump 備份實戰詳解2.1 基礎…

鴻蒙的“分布式架構”理念:未來操作系統的關鍵突破

一、引言&#xff1a;為什么需要分布式架構&#xff1f; 隨著移動互聯網的發展&#xff0c;智能設備不斷普及。用戶身邊可能同時擁有 手機、平板、PC、電視、手表、耳機、智能音箱、車機 等多種終端設備。 但現實中&#xff0c;我們常遇到以下問題&#xff1a; 不同設備系統割…

MySQL 事務管理與鎖機制:解決并發場景下的數據一致性問題

前言在電商下單、金融轉賬、庫存扣減等并發業務場景中&#xff0c;若不控制數據操作的原子性與隔離性&#xff0c;極易出現 “超賣”“重復扣款”“臟讀數據” 等問題。MySQL 的事務管理與鎖機制是解決這些問題的核心技術&#xff0c;也是后端開發者必須掌握的生產環境能力。本…

MySQL集群高可用架構

一、MySQL高可用之組復制&#xff08;MGR&#xff09;1.1 組復制核心特性與優勢MySQL Group Replication&#xff08;MGR&#xff09;是基于分布式一致性協議&#xff08;Paxos&#xff09;實現的高可用集群方案&#xff0c;核心特性包括&#xff1a;自動故障檢測與恢復&#x…

判別模型 VS 生成模型

1. 判別模型&#xff08;Discriminative Models&#xff09;判別模型直接學習輸入特征&#xff08;X&#xff09;與輸出標簽&#xff08;Y&#xff09;之間的映射關系&#xff0c;即直接對條件概率P(Y|X)進行建模。判別模型關注于如何區分不同類別的數據。特點&#xff1a;直接…