欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Vue 3 中集成 mxGraph 圖形庫:從原理到工程實(shí)踐

Vue 3 中集成 mxGraph 圖形庫:從原理到工程實(shí)踐 1. 項(xiàng)目概述為什么在Vue項(xiàng)目中引入mxGraph如果你正在開發(fā)一個需要流程圖、拓?fù)鋱D、架構(gòu)圖或者任何形式圖編輯器的Vue應(yīng)用那么你大概率已經(jīng)聽說過或者正在尋找mxGraph。這個標(biāo)題“mxGraph使用(vue)”背后指向的是一個非常具體且高頻的工程需求如何在一個現(xiàn)代化的Vue前端框架中集成一個功能強(qiáng)大但稍顯“古老”的圖形繪制庫。mxGraph本身是一個用純JavaScript編寫的強(qiáng)大圖形庫它不像D3.js那樣偏重數(shù)據(jù)可視化也不像G6那樣是專門為圖分析而生它的核心定位是交互式圖形編輯。你可以把它想象成一個“Visio”或“ProcessOn”的底層引擎我們熟知的draw.io現(xiàn)diagrams.net就是基于它構(gòu)建的。這意味著當(dāng)你選擇mxGraph時你瞄準(zhǔn)的往往是需要用戶拖拽節(jié)點(diǎn)、連接邊、編輯樣式、甚至進(jìn)行復(fù)雜布局和導(dǎo)出圖像的場景比如工作流設(shè)計器、網(wǎng)絡(luò)拓?fù)涔芾?、UML建模工具等。然而mxGraph的官方文檔和示例大多基于原生JavaScript或老舊的架構(gòu)直接將其引入以數(shù)據(jù)驅(qū)動和組件化為核心的Vue 3或Vue 2項(xiàng)目會遇到不少水土不服的問題。核心矛盾在于mxGraph重度操作DOM而Vue的理念是聲明式渲染和虛擬DOM。粗暴地集成很容易導(dǎo)致狀態(tài)不同步、內(nèi)存泄漏或性能問題。因此這個“使用”二字遠(yuǎn)不止是npm install那么簡單它涵蓋了從項(xiàng)目初始化、核心對象生命周期管理、Vue響應(yīng)式數(shù)據(jù)與mxGraph內(nèi)部狀態(tài)同步到自定義節(jié)點(diǎn)、交互優(yōu)化、性能調(diào)優(yōu)等一系列工程化實(shí)踐。本文將從一個有多年圖形編輯器開發(fā)經(jīng)驗(yàn)的視角拆解在Vue中駕馭mxGraph的全過程分享那些官方文檔不會告訴你的“踩坑”經(jīng)驗(yàn)和最佳實(shí)踐目標(biāo)是讓你不僅能跑起來更能用得穩(wěn)、維護(hù)得好。2. 核心架構(gòu)設(shè)計與集成思路2.1 理解mxGraph的核心對象模型在動手寫代碼之前必須吃透mxGraph的幾個核心對象這是后續(xù)一切操作的基礎(chǔ)。mxGraph的模型可以類比為MVC模式mxGraphModel(模型)這是圖的數(shù)據(jù)核心。它管理著所有的mxCell單元格對象包括節(jié)點(diǎn)vertex和邊edge。所有對圖結(jié)構(gòu)的增刪改查最終都作用于Model。它負(fù)責(zé)維護(hù)數(shù)據(jù)的一致性并觸發(fā)變更事件。mxGraph(視圖/控制器)這是最主要的類繼承自mxEventSource。它持有mxGraphModel的引用并負(fù)責(zé)將模型渲染到指定的DOM容器中。同時它集成了大量的交互控制器處理鼠標(biāo)事件、連線、縮放等和視圖更新邏輯。你可以把它看作視圖和控制器合二為一。mxCell(單元格)圖中所有元素的基類。節(jié)點(diǎn)和邊都是mxCell。每個mxCell有value存儲業(yè)務(wù)數(shù)據(jù)、style樣式字符串、geometry位置和大小等關(guān)鍵屬性。mxEditor(編輯器)這是一個更上層的封裝包含了mxGraph、工具欄、菜單欄等提供了一個開箱即用的完整編輯器界面。對于深度定制項(xiàng)目我們通常直接使用mxGraph以便獲得更大的控制權(quán)。在Vue集成中我們的核心任務(wù)就是讓Vue的響應(yīng)式數(shù)據(jù)與mxGraphModel同步并讓Vue組件管理mxGraph實(shí)例的生命周期。2.2 Vue 3 Composition API 與 mxGraph 的集成模式對于Vue 3項(xiàng)目使用Composition API (script setup)是更清晰的選擇。我們的集成思路是創(chuàng)建一個可復(fù)用的Vue組件例如MxGraphContainer.vue在其內(nèi)部管理mxGraph實(shí)例。關(guān)鍵設(shè)計點(diǎn)單例與生命周期mxGraph實(shí)例必須在Vue組件的onMounted鉤子中創(chuàng)建并掛載到一個實(shí)際的DOM元素如一個div上。在onUnmounted鉤子中必須手動調(diào)用graph.destroy()來銷毀實(shí)例釋放內(nèi)存避免內(nèi)存泄漏。這是最容易忽略但至關(guān)重要的一步。響應(yīng)式數(shù)據(jù)橋接避免直接將Vue的ref或reactive對象賦值給mxCell的value。更穩(wěn)健的做法是將業(yè)務(wù)數(shù)據(jù)獨(dú)立存儲于Vue的響應(yīng)式狀態(tài)中然后建立一套映射關(guān)系。例如每個圖形元素有一個唯一的id對應(yīng)Vue狀態(tài)中的一個數(shù)據(jù)項(xiàng)。通過監(jiān)聽mxGraph的cellsAdded、cellsRemoved、cellValueChanged等事件來同步更新Vue狀態(tài)反之當(dāng)Vue狀態(tài)變化時通過mxGraph的APIgraph.getModel().setValue(cell, newValue)去更新對應(yīng)的單元格。樣式與主題mxGraph的樣式是通過字符串定義的例如shaperectangle;rounded1;fillColor#FFFFFF;strokeColor#000000;。我們可以在Vue中定義一套樣式常量或配置對象然后動態(tài)生成樣式字符串這樣便于統(tǒng)一管理主題。注意mxGraph內(nèi)部有自己的事件循環(huán)和渲染邏輯。切忌在Vue的模板或計算屬性中直接依賴mxGraph的內(nèi)部狀態(tài)進(jìn)行渲染這會導(dǎo)致難以調(diào)試的渲染錯誤。正確的模式是“Vue狀態(tài)為源mxGraph視圖為派生”。3. 從零開始在Vue 3項(xiàng)目中初始化mxGraph3.1 環(huán)境準(zhǔn)備與依賴安裝首先創(chuàng)建一個新的Vue 3項(xiàng)目如果已有項(xiàng)目則跳過。這里使用Vite作為構(gòu)建工具因?yàn)樗鼘ΜF(xiàn)代前端庫更友好。npm create vuelatest my-mxgraph-project # 按照提示選擇需要的特性建議加入TypeScript以獲得更好的類型提示。 cd my-mxgraph-project npm install接下來安裝mxGraph。需要注意的是mxGraph的主包mxgraph在NPM上提供的版本可能不是最新的且類型定義不完整。社區(qū)維護(hù)的types/mxgraph類型定義也已久未更新。更推薦使用從draw.io倉庫中構(gòu)建的版本或者直接使用其提供的ES模塊。一種相對可靠的方式是安裝mxgraph-jsnpm install mxgraph-js這個包提供了較新的版本和更好的模塊化支持。同時我們可以嘗試安裝社區(qū)類型包雖然不完美但能提供一些幫助npm install -D types/mxgraph3.2 構(gòu)建基礎(chǔ)繪圖容器組件我們創(chuàng)建一個src/components/MxGraphContainer.vue組件。template div classmxgraph-container !-- 工具欄區(qū)域 -- div classtoolbar button clickaddRectangle添加矩形/button button clickaddCircle添加圓形/button button clickconnectSelected連接選中項(xiàng)/button button clickgetGraphData獲取圖數(shù)據(jù)/button /div !-- 繪圖區(qū)域容器mxGraph將在此渲染 -- div refgraphContainerRef classgraph-view/div /div /template script setup langts import { ref, onMounted, onUnmounted, nextTick } from vue; // 注意mxgraph-js的導(dǎo)入方式可能因版本而異這里是一種常見方式 // 有時需要導(dǎo)入全局的 mx 對象或者從包中解構(gòu)所需模塊 import { mxGraph, mxGraphModel, mxCell, mxGeometry, mxConstants, mxEvent, mxUtils } from mxgraph-js; // 引用繪圖容器DOM const graphContainerRef refHTMLElement(); // mxGraph實(shí)例引用 let graph: mxGraph | null null; // 初始化圖 const initGraph () { if (!graphContainerRef.value) return; // 1. 禁用mxGraph的全局樣式注入避免污染項(xiàng)目樣式 (mxUtils as any).loadStylesheet () {}; // 2. 創(chuàng)建模型和圖形實(shí)例 const model new mxGraphModel(); graph new mxGraph(graphContainerRef.value, model); // 3. 配置基礎(chǔ)交互行為 // 允許連線 graph.setConnectable(true); // 允許單元格可移動、可調(diào)整大小 graph.setCellsMovable(true); graph.setCellsResizable(true); // 禁用默認(rèn)的右鍵上下文菜單 graph.setContextMenu(null); // 啟用選擇框 graph.setSelectionCellsHandler(true); // 4. 配置連線策略 // 設(shè)置創(chuàng)建新邊時是否在鼠標(biāo)釋放時彈出對話框編輯值。false為直接創(chuàng)建。 graph.connectionHandler.createTarget false; // 5. 添加一些示例單元格 addDefaultShapes(); // 6. 添加事件監(jiān)聽示例監(jiān)聽選擇變化 graph.getSelectionModel().addListener(mxEvent.CHANGE, (sender, evt) { const cells evt.getProperty(added); console.log(選中了單元格:, cells); }); }; // 添加默認(rèn)圖形用于演示 const addDefaultShapes () { if (!graph) return; const parent graph.getDefaultParent(); // 開始一個原子性的事務(wù)操作保證模型變更的一致性 graph.getModel().beginUpdate(); try { const v1 graph.insertVertex(parent, null, 節(jié)點(diǎn)A, 20, 20, 80, 40); const v2 graph.insertVertex(parent, null, 節(jié)點(diǎn)B, 200, 150, 80, 40); const v3 graph.insertVertex(parent, null, 節(jié)點(diǎn)C, 100, 300, 60, 60, shapeellipse;fillColor#FFCC00;); // 創(chuàng)建一條從v1到v2的邊 graph.insertEdge(parent, null, 關(guān)系1, v1, v2); } finally { // 結(jié)束事務(wù)這會觸發(fā)視圖重繪 graph.getModel().endUpdate(); } }; // 工具方法添加矩形 const addRectangle () { if (!graph) return; const parent graph.getDefaultParent(); graph.getModel().beginUpdate(); try { const x Math.random() * 400; const y Math.random() * 300; graph.insertVertex(parent, null, 新矩形, x, y, 100, 50); } finally { graph.getModel().endUpdate(); } }; // 工具方法添加圓形 const addCircle () { if (!graph) return; const parent graph.getDefaultParent(); graph.getModel().beginUpdate(); try { const x Math.random() * 400; const y Math.random() * 300; graph.insertVertex(parent, null, 新圓形, x, y, 60, 60, shapeellipse;fillColor#90EE90;); } finally { graph.getModel().endUpdate(); } }; // 工具方法連接當(dāng)前選中的兩個單元格 const connectSelected () { if (!graph) return; const selectionCells graph.getSelectionCells(); if (selectionCells.length 2) { const parent graph.getDefaultParent(); graph.getModel().beginUpdate(); try { graph.insertEdge(parent, null, 新連接, selectionCells[0], selectionCells[1]); } finally { graph.getModel().endUpdate(); } } else { alert(請精確選中兩個單元格進(jìn)行連接。); } }; // 工具方法獲取當(dāng)前圖的模型數(shù)據(jù)用于保存 const getGraphData () { if (!graph) return; const encoder new (mxCodec as any)(); const node encoder.encode(graph.getModel()); const xmlString mxUtils.getXml(node); console.log(Graph XML:, xmlString); // 可以將xmlString保存到后端或本地 return xmlString; }; // 生命周期 onMounted(() { // 等待DOM渲染完畢再初始化圖 nextTick(() { initGraph(); }); }); onUnmounted(() { // 銷毀mxGraph實(shí)例釋放內(nèi)存 if (graph) { graph.destroy(); graph null; } }); /script style scoped .mxgraph-container { width: 100%; height: 800px; border: 1px solid #ccc; display: flex; flex-direction: column; } .toolbar { padding: 10px; background: #f5f5f5; border-bottom: 1px solid #ddd; } .toolbar button { margin-right: 8px; padding: 6px 12px; } .graph-view { flex: 1; width: 100%; background-color: #fafafa; } /style這個組件已經(jīng)實(shí)現(xiàn)了一個最基礎(chǔ)的mxGraph編輯器一個繪圖區(qū)域幾個操作按鈕以及完整的創(chuàng)建、銷毀生命周期管理。你可以將其放入任意頁面中查看效果。4. 深度定制自定義單元格與業(yè)務(wù)數(shù)據(jù)綁定基礎(chǔ)集成只是第一步真正的挑戰(zhàn)在于讓mxGraph適應(yīng)你的業(yè)務(wù)邏輯。4.1 創(chuàng)建自定義業(yè)務(wù)節(jié)點(diǎn)假設(shè)我們需要一個代表“任務(wù)”的節(jié)點(diǎn)它有特定的圖標(biāo)、狀態(tài)顏色和自定義屬性。第一步定義Vue側(cè)的業(yè)務(wù)數(shù)據(jù)類型// types/task.ts export interface TaskCellData { id: string; name: string; type: task; status: pending | processing | completed; assignee?: string; // ... 其他業(yè)務(wù)字段 }第二步擴(kuò)展mxGraph的樣式和渲染可選高級定制對于簡單的定制通過style字符串即可。但為了更復(fù)雜的渲染如內(nèi)置圖標(biāo)、自定義HTML需要重寫mxShape或mxCellRenderer。這里展示通過樣式和重寫mxGraph.convertValueToString來實(shí)現(xiàn)。在初始化graph后添加以下配置// 在 initGraph 函數(shù)內(nèi)創(chuàng)建 graph 實(shí)例后 // 重寫 convertValueToString 方法用于自定義單元格的顯示文本 graph.convertValueToString function(cell: mxCell) { const value cell.getValue(); // 如果value是我們自定義的業(yè)務(wù)對象 if (value typeof value object name in value) { return value.name; // 顯示業(yè)務(wù)對象的name字段 } // 默認(rèn)行為 return mxGraph.prototype.convertValueToString.apply(this, [cell]); }; // 定義一個根據(jù)任務(wù)狀態(tài)獲取樣式字符串的函數(shù) const getTaskStyle (status: TaskCellData[status]) { const baseStyle shaperectangle;rounded1;whiteSpacewrap;html1;; const statusColor { pending: #FFE4B5, // 米色 processing: #87CEEB, // 天藍(lán)色 completed: #98FB98 // 淺綠色 }; return ${baseStyle}fillColor${statusColor[status]};strokeColor#333;fontSize12;; };第三步插入自定義業(yè)務(wù)節(jié)點(diǎn)創(chuàng)建一個專門的方法來添加任務(wù)節(jié)點(diǎn)。const addTaskNode (taskData: TaskCellData, x: number, y: number) { if (!graph) return null; const parent graph.getDefaultParent(); graph.getModel().beginUpdate(); try { // 將業(yè)務(wù)數(shù)據(jù)對象作為cell的value // 樣式根據(jù)業(yè)務(wù)數(shù)據(jù)動態(tài)生成 const style getTaskStyle(taskData.status); const vertex graph.insertVertex(parent, taskData.id, taskData, x, y, 120, 60, style); return vertex; } finally { graph.getModel().endUpdate(); } }; // 使用示例 const newTask: TaskCellData { id: task_${Date.now()}, name: 設(shè)計評審, type: task, status: processing, assignee: 張三 }; addTaskNode(newTask, 50, 50);現(xiàn)在節(jié)點(diǎn)顯示的文字是taskData.name顏色由status決定并且整個taskData對象都附著在單元格上。4.2 實(shí)現(xiàn)Vue與mxGraph數(shù)據(jù)的雙向同步這是集成的核心難點(diǎn)。目標(biāo)是在Vue中操作一個tasks數(shù)組圖形自動更新在圖形中拖拽、編輯節(jié)點(diǎn)tasks數(shù)組也同步更新。策略使用事件監(jiān)聽和中間映射。Vue - mxGraph當(dāng)tasks數(shù)組變化時增刪改通過一個方法如syncTasksToGraph計算差異調(diào)用mxGraph的APIinsertVertex,removeCells,setValue來更新圖形。mxGraph - Vue監(jiān)聽mxGraph的關(guān)鍵事件將變更同步回Vue狀態(tài)。addCells/removeCells- 更新tasks數(shù)組的增刪。change- 監(jiān)聽geometry位置/大小和value的變化。import { ref, watch } from vue; // Vue的響應(yīng)式狀態(tài) const tasks refTaskCellData[]([]); // 維護(hù)一個映射task.id - mxCell const cellMap refMapstring, mxCell(new Map()); // 監(jiān)聽tasks變化同步到圖形簡化示例需處理diff watch(tasks, (newTasks, oldTasks) { // 這里需要實(shí)現(xiàn)一個精細(xì)的diff算法來對比newTasks和oldTasks // 然后調(diào)用graph的API進(jìn)行增刪改 // 例如發(fā)現(xiàn)新增的task調(diào)用 addTaskNode // 發(fā)現(xiàn)刪除的task通過 cellMap 找到對應(yīng) cell調(diào)用 graph.removeCells([cell]) // 發(fā)現(xiàn)修改的task調(diào)用 graph.getModel().setValue(cell, newTaskData) }, { deep: true }); // 在initGraph中設(shè)置mxGraph事件監(jiān)聽 const setupGraphListeners () { if (!graph) return; const model graph.getModel(); // 監(jiān)聽任何單元格的變化 model.addListener(mxEvent.CHANGE, (sender, evt) { const changes evt.getProperty(edit).changes; changes.forEach((change: any) { if (change instanceof mxValueChange) { // 單元格的值發(fā)生變化 const cell change.cell; const newValue change.value; const taskId cell.getId(); // 更新Vue狀態(tài)中對應(yīng)的task const index tasks.value.findIndex(t t.id taskId); if (index -1 newValue) { tasks.value[index] { ...tasks.value[index], ...newValue }; } } else if (change instanceof mxGeometryChange) { // 單元格位置/大小變化 const cell change.cell; const geo change.geometry; const taskId cell.getId(); // 可以更新tasks中對應(yīng)的位置信息如果業(yè)務(wù)需要 console.log(單元格 ${taskId} 位置更新:, geo.x, geo.y); } // 還可以處理 mxChildChange父子關(guān)系, mxTerminalChange連線端點(diǎn)等 }); }); // 監(jiān)聽單元格被添加 graph.addListener(mxEvent.ADD_CELLS, (sender, evt) { const cells evt.getProperty(cells); cells.forEach((cell: mxCell) { if (cell.isVertex()) { const taskData cell.getValue(); if (taskData taskData.id) { cellMap.value.set(taskData.id, cell); // 如果這個cell不是從Vue狀態(tài)同步來的例如用戶從工具欄拖拽創(chuàng)建則需要將其加入tasks if (!tasks.value.find(t t.id taskData.id)) { tasks.value.push(taskData); } } } }); }); // 監(jiān)聽單元格被刪除 graph.addListener(mxEvent.REMOVE_CELLS, (sender, evt) { const cells evt.getProperty(cells); cells.forEach((cell: mxCell) { if (cell.isVertex()) { const taskData cell.getValue(); if (taskData taskData.id) { cellMap.value.delete(taskData.id); const index tasks.value.findIndex(t t.id taskData.id); if (index -1) { tasks.value.splice(index, 1); } } } }); }); };實(shí)操心得雙向同步邏輯復(fù)雜極易產(chǎn)生循環(huán)觸發(fā)。一個實(shí)用的技巧是引入一個“同步鎖”標(biāo)志位如isSyncingFromGraph和isSyncingFromVue在由一方發(fā)起同步時暫時屏蔽對另一方的監(jiān)聽待同步完成后再恢復(fù)。這能有效避免事件死循環(huán)。5. 性能優(yōu)化與常見問題排查5.1 性能優(yōu)化要點(diǎn)當(dāng)圖形元素成百上千時性能會成為瓶頸。禁用不必要的渲染特性graph.setPanning(true); // 用拖動畫布代替滾動條有時性能更好 graph.setTooltips(false); // 關(guān)閉默認(rèn)工具提示 // 在批量操作時使用 beginUpdate/endUpdate 包裹它們會合并渲染虛擬化與視口渲染mxGraph本身不具備虛擬化能力。對于超大型圖一個思路是結(jié)合mxGraph的view的translate和scale只渲染視口內(nèi)的單元格。但這需要深度定制渲染邏輯復(fù)雜度高。更常見的做法是進(jìn)行數(shù)據(jù)分層或分頁加載。簡化單元格樣式避免使用過于復(fù)雜的HTML內(nèi)容html1作為單元格樣式純SVG/Canvas渲染效率更高。減少漸變、陰影等耗性能的樣式。節(jié)流與防抖為頻繁觸發(fā)的事件如cellMoved添加節(jié)流處理避免高頻更新Vue狀態(tài)或向后端發(fā)送請求。5.2 常見問題與解決方案實(shí)錄問題1mxGraph的樣式污染了全局CSS?,F(xiàn)象頁面其他部分的樣式錯亂特別是邊框、字體等。原因mxGraph在初始化時會動態(tài)向head注入一批全局CSS樣式其選擇器可能與你項(xiàng)目的樣式?jīng)_突。解決方案在初始化mxGraph之前重寫mxUtils.loadStylesheet方法為空函數(shù)阻止其注入樣式。然后將mxGraph必需的CSS文件通常位于node_modules/mxgraph-js/css手動導(dǎo)入并使用Vue的scoped或CSS Modules進(jìn)行隔離。// 在創(chuàng)建graph實(shí)例前調(diào)用 (mxUtils as any).loadStylesheet () {};在組件的style中引入核心樣式import mxgraph-js/css/common.css; /* 其他必要的樣式文件 */問題2在Vue路由切換后mxGraph容器白屏或報錯?,F(xiàn)象從包含mxGraph的頁面跳轉(zhuǎn)到其他頁面再返回圖形不顯示或控制臺報錯。原因Vue組件銷毀時mxGraph實(shí)例沒有正確清理導(dǎo)致內(nèi)存泄漏或DOM引用殘留。路由切換時容器DOM被Vue移除但mxGraph內(nèi)部仍持有舊引用。解決方案確保在組件的onUnmounted生命周期鉤子中嚴(yán)格調(diào)用graph.destroy()。同時在onMounted中初始化時確保容器DOM已經(jīng)真實(shí)存在使用nextTick。問題3自定義節(jié)點(diǎn)內(nèi)容中的Vue組件無法交互?,F(xiàn)象使用html1樣式并在value中寫入HTML字符串包含Vue組件如MyButton click“...”但點(diǎn)擊無效。原因mxGraph將HTML字符串作為靜態(tài)內(nèi)容插入Vue無法對其中的指令和組件進(jìn)行編譯和綁定。解決方案避免在mxGraph單元格內(nèi)直接使用需要Vue響應(yīng)的內(nèi)容。如果必須要有復(fù)雜交互可以考慮以下兩種折中方案方案A使用mxGraph的mxCellOverlay功能在單元格上疊加一個絕對定位的DOM元素這個元素可以由Vue組件渲染并通過事件代理與mxGraph交互。方案B放棄mxGraph的HTML渲染改為使用mxShape擴(kuò)展用Canvas/SVG繪制節(jié)點(diǎn)外觀復(fù)雜的交互控件通過外部Vue工具欄或側(cè)邊欄來實(shí)現(xiàn)通過選中單元格來關(guān)聯(lián)操作。問題4導(dǎo)入mxGraph后TypeScript報錯“找不到模塊”或“類型錯誤”。原因mxGraph的TypeScript支持不完善。解決方案在src目錄下創(chuàng)建一個mxgraph.d.ts聲明文件。使用相對寬松的模塊聲明// mxgraph.d.ts declare module mxgraph-js { export const mxGraph: any; export const mxGraphModel: any; export const mxCell: any; export const mxGeometry: any; export const mxConstants: any; export const mxEvent: any; export const mxUtils: any; export const mxCodec: any; export const mxValueChange: any; export const mxGeometryChange: any; // ... 導(dǎo)出其他用到的類 }或者在tsconfig.json中設(shè)置skipLibCheck: true但這不是最佳實(shí)踐。問題5如何保存和加載圖形方案mxGraph提供了mxCodec進(jìn)行XML序列化。保存如前面getGraphData函數(shù)所示使用mxCodec將mxGraphModel編碼為XML字符串。加載使用mxUtils.parseXml解析XML字符串得到DOM然后用mxCodec解碼并mxGraphModel.setModel。const loadGraphData (xmlString: string) { if (!graph) return; const doc mxUtils.parseXml(xmlString); const codec new mxCodec(doc); const newModel new mxGraphModel(); codec.decode(doc.documentElement, newModel); graph.setModel(newModel); // 別忘了更新 cellMap 和 tasks 等狀態(tài) };注意XML中只保存了模型數(shù)據(jù)單元格、樣式、幾何信息。自定義的value即我們的業(yè)務(wù)對象必須能被正確序列化為字符串通常用JSON.stringify并在解碼后恢復(fù)JSON.parse。需要重寫mxCell的encode和decode方法或使用mxCodec的編解碼器注冊機(jī)制來處理復(fù)雜對象。將mxGraph集成到Vue項(xiàng)目是一場與“歷史代碼”和“現(xiàn)代框架”的磨合之旅。關(guān)鍵在于劃清邊界讓mxGraph專心負(fù)責(zé)圖形的渲染和交互讓Vue管理所有的業(yè)務(wù)狀態(tài)和UI邏輯。通過清晰的事件橋接和單向/雙向數(shù)據(jù)流設(shè)計可以構(gòu)建出既強(qiáng)大又易于維護(hù)的圖編輯應(yīng)用。過程中最大的陷阱莫過于生命周期管理和內(nèi)存泄漏務(wù)必牢記onMounted里創(chuàng)建、onUnmounted里銷毀的黃金法則。當(dāng)遇到復(fù)雜定制需求時多查閱mxGraph的源碼和draw.io的實(shí)現(xiàn)往往比看文檔更有啟發(fā)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲午夜av| 五月天久久久| 狠狠擼综合| 人人操超碰| 婷婷精品免费久久| 国产密乳av一区二区三区四区| 超碰在线99| 日本激情综合| 河北真实伦对白精彩脏话| 96丁香六月婷婷蜜桃综合久久| 亚洲久热| 婷婷性爱网| 六月婷婷色色网| 97色婷| 伊人午夜综合色啪| 99精品爱| 天天成人综合视频| 五月婷婷免费| www.人人操人人看人人想人人摸 人人人人操,COM| 伊人青涩网| 色爱综合网| 六月丁香激情| 久久婷婷五月综合色丁香| 91热er| 久久久婷婷婷| 午夜色色色极品视频| 丁香社92视频| 丁香婷婷性久久| 牛色色碰| 91美女艹逼网站| 色五月情| 色五月丁香A欧美com | 婷婷六月爽| 色综合久久88色综合天天看| 丁香九月综合| 五月丁香| 五月婷婷就去色| 天天天久久久| 俺去也在线官网| 久月丁香爱婷婷综合| 啪啪丁香五月| 日本a片网址| 五月婷在线影院| 丁香五夜激情四射夜夜夜| 熟女人妻一区二区三区免费看| 五月丁香综合激情网| 丁香久月| 人人爱操| 免费看欧美成人A片无码| 日本人妻A片成人免费看片| 成人色五婷婷| 婷婷丁香色五月| 色爱综合网| 婷婷五月天av| 国产FREESEXVIDEOS性中国| 激情五月丁香婷婷| 91 影音先锋| 欧美内射AAAAAAXXXXX| 亚洲V国产V欧美V久久久久久| 久久性爱视频| 伊人大香蕉毛片| 色99久草在线| 五月天婷婷免费| 综合久久婷婷| 国产精品蜜臀99| 五月丁香六月婷婷的女人| 99国产这里只有精品| 久热这里只有精品视频免费观看| 综合性爱网| 在线天堂9| 丁香婷婷色九月| 久操综合| 日韩国产AV播放| 综合 蜜月 婷婷| 亚洲五月天色色| 久久性刺激| 婷婷伊人网| 五月天婷婷午夜丁香| 青青草搞屄视频网站| 国产99视频永久免费| 国产精品久久久丁香五月八戒视频| 色色综合视频| 婷婷成人视频| 天天色综| 婷婷五月天激情五月天网站| 操一区| 99激情视频| 无码少妇高潮喷水A片免费| 97操碰人免费| 婷婷五月天成人娱乐| www.五月丁香av| 日韩色五月| 九九这里是免费的视频5| 99热这里只有精品16| 国产精品扒开腿做爽爽爽A片唱戏 亚洲爆乳无码精品AAA片蜜桃 | 怡红院精品视频久久久久久久久| 色婷丁香| 色9月| 成人操呦av| 99热在线观看精品| 黄色片久久| 91人碰| 久久66er久久| 五月天激情图片| 涩丁香| 色综合中文色综合网| 丁香五月98| 亚洲va综合va国产va中文| 天天色粽合合合合合合合| 精品一区久热| 成人羞羞啪啪 全 视频| 国产成人网| 在线看AV| 六月丁香好婷婷| 天天射综合网站| 67久久| 激情五月图| 开心五月深爱五月| se99热久久一本| 精品婷婷五月视| 婷婷射图| 五月天丁香成人| 青青草日本亚洲| 日韩视频99| 岛国午夜视频| 99re6久热只有精品6在线直播| 大地9中文在线观看免费高清 | 俺去也综合| 97亚洲视频在线| 99re热视频这里只有综合亚洲| 色99在线视频| 白度黄视频| 秋霞午夜理论| 丰满少妇猛烈A片免费看观看 | www.黄色片-久久成人国产精品在线播放-999AV | 久久丁香| 99九九综合久久九九| 日本少妇裸体做爰高潮片 | 超碰97色| 天天色天天| 午夜伊人大香蕉| 九九精品这里只有| 激情开心五月天| 九九五月天| 天天色视频| 噢美99| 丁香五月98| 婷婷六月色| 99 热国产在| 成人在线不卡| 97亚洲色 torrent magnet| 涩综合网| 婷婷六月丁香开心深深爱| 精品婷婷| hd五月婷婷在线| 婷婷色综合| 青青操avbb| 五月天综合| 六月婷婷成人| 色九四色| WWW99热| 丁香婷婷五月六月久久| 天天日天天舔| 婷婷五月天亚洲精品| 久久人人做人人妻人人玩精品va| 情久久综合五月天| 激情婷婷丁香五月天| 狠狠综合久久| 色婷五月天网站| 九九色网专区| 国产激情AV| 91精品久久久久久综合五月天| 97在线视频观看| 啪啪色激情五月天| 操逼电影免费看| 五月天婷婷激情综合| www,久久久人人| 久久这里只有精品无码| 婷婷五月综合网| 日熟女| 99热九九这里只有精品| www久| 日日夜夜天天综合| 国产精品噜噜在线视频| 91久女| 婷婷开心久久| 大香蕉九操| 九九热超碰| 99热婷婷| 中国无码av| 丁香激情六月天婷婷| 欧美婷婷色| 深爱1激情网| 无码人妻一区二区一牛影视| 國語久久婷| 久久综合九九| 五月婷婷色色爱| 五月婷婷六月少妇激情| 99久久综合| 九九99精品视频在线观看| 99热在这里只有免费精品| 黑人巨粗进入警花疼哭A片| 久99热| 激情色情五月天| www.99热在线| 丁香六月激情综合网| 99五月香婷婷丁香在线视频| 天天在线XXX| 久9久9热久热| 99热最新国内| 丁香六月婷婷| 九九视频这里只有精品| 婷婷欧美偷拍综合| 综合 蜜月 婷婷| 色婷视频| 久99热| 97极品在线| 亚洲五月婷婷| 无套内射极品大美女| 亚洲婷婷91丁香| 国产美女无遮挡裸体毛片A片 | rr天天操| 丁香久久AV| 欧美日韩一区二区三区四区| 天天插综合| 婷婷丁香亚洲五月天| 99热碰碰| 99热 日韩| 男女免费视频999| 色情五月天视频网| www.com.色色| 色婷婷六月| 91久久精品无码一区二区三区| 天堂爱爱| 五月婷婷影院| 大香蕉五月| 亚洲色无码A片一区二区麻豆| 婷婷五月av| 五月丁香怕啪啪| 成人一区在线观看| 亚洲无码影音| 熟女少妇内射日韩亚洲| 天天干天天日天天操| 色婷婷五月天亚洲| 九九色区| 日本全黄一级999| 9999久久久久| 九九伊人网| 深爱1激情网| 六月丁香婷婷综合色播| XX久久| 中文幕无线码中文字蜜桃| 婷婷久久精品| 婷婷色正月| 青青草a在线| 人人妻人人澡人人爽| 色婷婷香蕉| 久久 天天| 六月婷婷俺也去| 婷婷色六月| 超碰在线网站9| 色婷婷丁香五月| 婷婷色情六月| 婷婷五月天色综合| 天天干夜夜b| 亚洲欧洲国产精品| 殴美日比视频| 日韩久热| 成年人夜夜喷水| 婷婷五月天天激情| 操逼视频网址| 香蕉AV777XXX色综合一区| 日本欧美在线| 丁香五月欧美成人| 久久与婷婷| 天天做天天爱综合| 五月草影视| 免费观看全黄做爰的视频| 色五月婷婷老师| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇| 欧美群妇大交乱婬网| 婷婷五月天网址| 另类婷婷五月天啪帕帕| 成人va在线| 天天肏在线| 色人久久| 亚洲精品久久久无码| 婷婷五月天激情文学| 九九99九九99| 可以直接看的av| www.99婷婷| 噜啊噜在线| 伊人久久五月天综合| se99在线| 人人操人av| 婷婷之六月丁香| 五月丁香av在线| 久久五月天合网| 五月天色色色| 色天天久婷婷| 思思热久久爱| 九九色热| www久| 久久六月天| 99日韩| 亚洲无码99| 色五月综合网| 专区无日本视频高清8| 狠狠综合| 激情AV综合| 91精品刘玥| 五月婷婷综合成人| 久久精品系列| 精品99久久久久成人网站免费| 亚洲精99| 婷婷五月av| 色无码| 丁香五月影院| 色婷婷久久综合中文久久一本| 99久久网站| 久热这里| 综合激情四射一theav| 91av视频在线观看最新网址| 在线观看的av| 五月婷婷开心六月激情小说| 69色婷婷| 精品一二三区久久AAA片| 熟妇内谢69XXXXXA片| 国产av一区二区三区| 日韩一级淫乱片一区二区三区| 日本天堂网站99| 六月婷婷AV| 丁香婷婷色色| www.日日夜夜| 日韩一级网站| 激情婷婷丁香| 九九热大香蕉| 久色网五月| 思思热视频| 亚洲第一成人无码A片| 婷婷五月在线视频| 五月婷婷丁香大香蕉| 久久婷婷婷| 99成人网站| 凹凸操Av| 色色com| 第四色色六月色综合| 六月丁香狠狠爱| 色综合夜夜| 极品五月天| 婷婷激情视频| 丁香五月之久操视频| 2015超碰| 五月丁香六月婷婷综合伊人| 国产亚洲99久久精品| 图片区 小说区 区 亚洲五月| 亚洲Av成人在线观看| 激情婷婷五月久久| 六月激情久久| 激情玖玖sh| 色五月超碰| 69激情小说| 亚洲高清在线| 99er热精品视频| 99这里精品| 亚洲综合五月天| 久久99视频| 99热天堂| 日日夜夜狠狠干| 色色a| 97热超碰| 99国产小视频免费观看| 91疯狂操操操操| 99综合视频在线| 亚洲免费婷婷| 激情涩播| 精品九九网| 天堂五月婷婷| 色人久久| 九色七七| 色色亚洲五月天| 色玖玖| 婷婷五月天激情综合| 夜夜撸天天日| 无码人妻少妇色欲AV一区二区| 丁香六月婷| 天天成人丁香美女AV| 激情五月天婷婷| 伊人婷婷91| 五月婷婷精品视频| 色五月婷婷五月天| 久久99热这里只有| 开心激情网五月天| 久久婷婷色色| 成人版视频在线观看| 99久久久精品| 欧美成人精品一区二区| 九九热狼人| 天天天天天天天干| 婷婷五月在线观看| 另类在线| 荷兰av一级| 丁香五月天亚洲综合| 丁香五月aV| 人人干av| 婷婷六月丁香综合| 99热主页日本| 狠狠操综合| 欧美色色色色色色| 精品网站:999WWW| 天天日综合| 色情婷婷久久五月天| 久久成人天| 极品人妻VIDEOSSS人妻| A片试看120分钟做受视频红杏| 91操碰| 狠狠色噜噜| 91操黄| 欧美丁香五月天| 99国产精品白浆在线观看免费| 天天做综合| 六月色播| 色五月激情问网站| 九九热精品视频在线观看| 欧美五月丁香啪啪响视频| 午夜大香蕉| 天堂AV三级| 97色婷| 激情丁香久久| 久久人妻少妇嫩草AV| 狠狠狠狠狠狠狠狠草| 激情五月婷婷| 丁香五月天在线| 婷婷色综合中心站| 激情综合国产| 侠女刀之记忆电影在线看免费| 99精品网| 乱色色色| 久久与婷婷| 久久五月丁香| 色狠狠六月| 极骚大香蕉伊人| 99热在线观看免费| 在线超碰精品| 91狠狠色丁香婷婷综合久久精品| 亚洲久久视频| 九九成年视频| 97人人干人人操| 五月色婷婷在线观看| 青草青草视频2免费观看| 69er小视频| 亚洲AVwwwwwww| 日本女人久久| 婷婷五月成年人| 亚洲狠狠爱婷婷| 99综合视频| 五月天婷婷av| 色婷青青| 五月丁香成人| 精热在线综合网| 婷婷五月天另类网站| 婷婷中文综合网| 国产精品爽爽久久久久久| 日本99久久| 丁香婷婷天堂| 久久精品99| 爱草视频在线观看| 香蕉大综综综合久久| 色五月激情| 天天爽天天爽天天爽天天爽天天爽天天爽天天| www.婷婷com| 天天搞天天色综合| 丁香婷婷久久老熟女综合网| 色色爽爽天天| 九九婷婷热| 亚洲综合五月天婷婷丁香| 青青夜夜狠狠夜夜狠狠| 黄色精品五月婷婷| 久婷婷视平| 国产激情在线| 99精品无码网站| 色播婷婷五月天| 日韩成人影片网站| av九九| 亭亭五月激情亚洲在线| 狠狠色综合网| 婷婷色在线视频| 亚洲乱码日产精品BD| 另类视频五月天| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 五月婷婷六月丁香综合视频在线| 大香蕉久久草| 色综合网页| 色五月婷婷基地| 五月天黄色激情小说| 91热手机在线| 亚洲岛国电影| 亚洲第一综合| 第四色五月天| 激情综合网激情五月天| 丁香五月激情综合啪啪| 99在线观看免费精品视频| 91操在线观看| 丁香婷婷综合影院| 国产精品日本一区二区在线播放| www.五月丁香| 色日本五月天| 色婷婷五月天小说网| 1024人妻| 99碰网站| 婷婷激情人妻| 99热一本久道| 国产特黄色精品一区二区三区精品无广告| 色色综合网站| 五月丁香婷婷综合| 婷婷天堂综合| 亚洲操精品| 色情五月婷婷| 色色色色色色网站| 婷婷日日夜夜| 婷婷激情五月天小说| va中文资源在线观看| 欧美婷婷六月丁香综合色| 99久超碰| 五月婷婷色综图片| 91人人操人人看| 天天射色五月天| 婷婷大香焦| 97精品人人A片免费看| 亚洲五月花| 色色色综合网| 激情图片五月天| 综合激情婷婷| 欧美婷婷五月丁香| 97视频.干com| 九九色人| 亚洲热视频在线| 久婷婷| 九九视屏| aa久久| 久久与婷婷| 激情五月天天狠狠久久| 久99久在线观看| 97色色综合| www.色婷婷.com| 天天日天天干天天爽| 五月婷婷激情综合网 | 97久久久久| 狠狠色丁香久久| AAA久久久AAA久久久AAA| 狠狠综合区| 五月色亚洲| 97男人天堂| 婷婷久久图片 | 天天五月天综合网址| 亚洲视频图片婷婷五月| 欧美丁香五月| 综合网色| 超喷97免费在线视频| 爱爱网址9| 超碰2021| xxxx久| 99re66热这里只有精品| 99热国产国产| 久久久精品色色色| 婷婷成人五月天成人文学小说| 五月天色五月| 九九色逼| 草草女人亚洲| 婷婷伊人75| 成人av在线电影| 色五月婷婷中文字幕在线观看| 99热精品10| 亚洲 五月 婷婷 成人| 亚洲无码色色| 这里只有精品1| 久久精品A片777777| www.丁香六月婷婷久久天堂影院.con| 久久一级片| 超碰在线看| 色婷五月天亚洲| 99热激情| 激情五月天视频| 婷婷激情五月呦呦| 9久国产| 婷婷五月天激情在线观看 | 国产精品a无线| 婷婷五月精品| 五月伊人综合| 五月天开心激情综合网| 99热这里只有精品中文字幕| 五月婷婷性爱网| 99自拍视频在线| 色情播放| 99热青青草| 国产毛片操B| 色婷婷五月综合在线| 在线五月色播| 99精品视频在线观看| 欧美日韩欧美| 久99在线视频| www开心激情网| 任你日视频| 五月婷婷影视| 欧美婷婷| 亚洲综合激情五月久久| 天天操天天干天天日| 色五月婷婷丁香凹凸| 久久色婷婷| 五月丁香久久丝袜啪啪| 日本色色色| 婷婷五月天丁香激情| site:minyis.com| 丁香五月天视频| 超碰av在| 欧美五月丁香在线| 成人网址在线观看| 亚洲不卡123| 激情综合网之激情五月| 日韩av在线免费观看| 丰满少妇乱A片无码| 欧美 日韩 成人 在线| av在线色五月丁香婷区久| 久久性视频| 婷婷五月激情在线| 狠狠人妻久久久久久综合丁香| 五月丁香激情四射| 欧美三级大片AA在线看| 五月丁香六月停停| 大香蕉啪啪网| 色呦呦免费观看| 日韩1区2区| 国产精品日本一区二区在线播放| 无码色色色色色| 丁香五月婷婷大香蕉| 精品无码久久久久久久久| 91干在线| 97色色网| 永久热91| 五月天综合婷婷| 国产肥白大熟妇BBBB视频| 色五月综合网| 五月丁香精品| 色婷婷狠狠久久YY| 五月婷婷之婷婷| 97色射| 五月天婷婷六月| 色五月激情网| 五月丁香日本一抹本| 五月综合激情| 天天操婷婷| 色五月五月婷婷| 71在线精品视频一区| 久久这里有精品视频| 小香蕉av| 丁香五月激情综合啪啪| 丁香五月-激情综合| 天天做天天干天天综合网 | 色婷婷黄色网络| 婷婷亚洲综合| 五月婷婷六月丁香免费| 天天精品视频免费观看| 99久久综合| 久久香蕉网| 色九九综合| 色色婷| 久久98| 日本狠狠干| 丁香六月婷婷综合激情欧美 | www久久五月com| 激情五月久久| 久热这里有精品视频| 久热久| 97色色色色| 婷婷淫淫狠狠六月| www.久久久久久| 任你搞网站| 色婷| 嫩BBB搡BBBB榛BBBB| 色青青视频| 99re6在线视频精品免费| 狠狠狠五月婷婷六月丁香| 99精品综合| 99热6色| 久久思思99| 国产综合色婷婷精品久久| 色色婷婷五月| 五月丁香啪啪网| 亚洲综合网激情小说| 丁香五月偷拍| 五月婷婷免费| 婷婷五月丁香综合桃花色网| 在线观看欧美| 激情六月下句是什么| 九九精品热| 综合激情网| 中文不卡av| 久久五月天网| 人人爱干人人爱草| 色啪久| 五月天停婷基地| 亚洲美女婷婷五月天| 97日韩无套内| 97se视频在线| 欧美日韩大黄| 欧洲区自拍| 五月色婷| 婷婷五月天BBw| 六月婷婷久久| 少妇被躁爽到高潮无码文| 中文字幕 久久9999| 狠狠草网| 99精品久久| 亚洲狠狠婷婷综合久久久| 99久久.www| 97人妻碰碰中文无码久热丝袜| 啪啪啪大香蕉| 婷婷久久爱| 久久六月天| 天天摸天天高潮天天爽| 久9热视频在线观看| 99re6在线视频精品免费| 久久九九免费视频| 都市激情五月婷婷综合| 色日本综合| 九九热123| 日良久久| 免费观看的AV| 日日干天天射| 五月婷av| 欧美成人在线观看| 国产精品大香蕉| 永久AⅤ1| 激情精品久久| 91狠狠色丁香| 五月停视频天堂| 六月婷婷综合| 99热资源在线| 丁香五月av在线| 日本久久网| www.com任你艹| 亚洲无AV在线中文字幕| 色综合久久88色综合天天99| 天天插天天很| 玖玖婷婷五月天| 97婷婷狠狠久久综合9色| 欧洲电影在线观看免费版英语版| 久久与婷婷| 五月天久久网站| 99热在线免费观看精品| 日日噜噜夜夜狠狠久久丁香六月| 超碰精品国产首页| 色色色九九九五月婷婷| 精品久久人妻| 久热 91| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 91九色视频| 九九99偷拍视频| 国产高清av黄色看片| 五月天啪啪啪| 超碰免费成人| 丁香六月婷婷综合| 婷婷色五月色| 久久与婷婷| 狼人狠狠操| 日韩AV中文字幕在线| 五月丁香婷婷色| 99久在线精品| 99re热在线视频观看| 五月婷婷co.m| 久久激情综合| 色婷婷婷av | a免费在线| 欧美天堂婷婷日韩| 久久五月天激情| 在线播放成人网站| 我爱大香蕉| 综合激情五月婷婷| 色婷婷五月天在线| 五月丁香六月激情网| 思思久ren热| 亚洲婷婷月丁香五月| 9er热在线精品视频| 大香蕉综合在线| 在线网黄| 五月激情啪啪啪| 99综合一区| 99亚洲精美视频在线观看| 婷婷丁香五月基地| 久久久婷丁香五月| 久久婷婷五月综合色天| 久热在线观看视频9| 亚洲视频久久| 激情九九六月激情免费视频| 99日在线观看视频| 婷婷五月色情| 丁香花色色网| 人人草公开操| 99热精品在线播放观看| 婷婷久久国产视频| 九六五月天婷婷| 婷婷性爱影院| 色噜噜,噜噜色| 五月丁香婷婷成人伊人网| 五月激情网络| 丁香五月综合AV在线| 九热视频| 久久三级视频| 狠狠干综合| 美女久久婷婷| A级毛片高清免费不卡播放谢谢谢谢| 99热费观看| 99日本在线| 成人做爰A片免费看网站找不到了| 欧美色婷婷| 久久亚洲色导航| 亚洲无码九九| 欧美乱码国产一级A片| 五月天激情小说| 538在线精品| 五月丁香婷婷狠狠操| 欧美激情久| 操99| 四色女婷婷| www.色婷婷.com| 久久久婷| 九七色色六月丁香| 51XX嘿嘿午夜无码| 日韩九九视频| 五月婷婷免费视频| 婷婷97碰碰| 九九热AV| 亚洲电影中文字幕| 91狠狠色| 色狠狠图片| 色婷婷的五月天| 久久a热| 中文不卡av| 色五月婷婷色| 婷婷另类开心| 激情五月丁香婷婷| 午夜天堂啪啪| 五月天婷婷激情四射综合| 国产9色在线/日韩| 亚洲久久婷婷| 久久与婷婷| 91一起操| 五月婷护士| 色五月婷婷综合| 日韩六六久久电影| 日本激情91| 日本熟妇乱妇熟色A片蜜桃| 色色婷婷丁香五月天| 色五月之第四色| 五月婷婷激情久久| 精品久久9| 极骚大香蕉伊人| 色婷婷丁香花五月天| 91九色大屁股| 五月婷婷伊人久久| 操碰99| 色色亚洲99com| 欧美人人操| 色五月婷婷丁香五月| 青青草成人网| 久色激情| 思思久久青草热| 91九九| www.99热精品99.com| 欧洲永久精品| 欧美成人va| www.91av.com| 天天日天天做天天舔| 五月婷婷丁香五月婷婷丁香| 亚洲亚洲人成综合网络| 九九热这里只有精品7| 婷婷五月无码| 香蕉AV777XXX色综合一区 | 久久色情| 欧美97p| 99热这里是精品| 熟女91九色| 五月天成人在线| 丁香五月激情宗合| 久热免费| 久久一伦| 六月婷婷色宗合| 免费看欧美成人A片无码| 91色综合网| 婷婷五月色情天| 久久99热网| 婷婷欧美色| 激情婷婷丁香五月天| 午夜色丁香| 五月婷在线视频免费播放| www.91久久| 97久久人人| 天天爽天天操| 婷婷五月天涩涩| 久99久热只有精品国产99| 色婷婷成人做爰A片免费看网站 | 五月婷婷丁香瑟瑟视频| 中文字幕有多少字| 天天做天天视天天谢| 看片视频在线免费日产在线看| 青青操成人福利| 欧美97p| 激情图片亚洲| 五月婷丁香在线视频在线| 日韩久久色| 99毛片| 五月丁香亭亭| 中国女人内射6XXXXX| 99热 在线观看| 婷婷五月在线观看| 99er这里只有精品视频| 99热在线观看| 大香蕉婷婷色| 91超碰人人操| 99精品久| 国产亚洲色婷婷久久99精品91| 狠狠干狠狠操狠狠爱| 五月天激情小说欧美激情| 中文字幕人妻熟女在线| 一区二区三区视频| 婷婷综合网| 日韩成人综合网| 亚洲成人无码网站| 伊人9在线| 91九色熟女| 久久作爱| 五月丁香六月情| 天天做天天爱天天日| 久久98| 第四色五月激情网| 久久在线视频免费观看| 插少妇综合网| 97人碰人操| 自拍盗摄 另类| 亚洲欧美国产A片免费观看| 四月丁香五月婷婷久久| 草榴视频黄色网| 99九九视频精彩在线| 久久激情五月婷婷| 97人人干人人操| 69午夜成人影片| 天天干天天日蜜臀av| 人妻无码精品一区| 99色久| 五月丁香婷婷基地| ...婷婷国产成人亚洲日韩| 狠狠噪| 综合色播| 97资源碰碰| 99色在线| 新伍月婷婷| 亚洲99综合| 二色AV| 欧美内射AAAAAAXXXXX| 天天操狠狠操| 91久久综合亚洲噜噜成人在线| 97啪啪| 性小说五月天| .肏屄视频一区二区| 国产免费一区二区三区三州老师F1F1.CC | 青青福利网| 三级99热| 99色网站| 欧美激情综合色综合色| www.久久9| 青草激情综合| 怡红院精品视频久久久久久久久| 九九超碰人人| 99热只有| 色色色色色网站| 91/九色黑人| VA色婷婷| 色色永久| 97在线干| 天天综合精品| 丁香五月天AV| 极品色丁香| 香蕉AV777XXX色综合一区 | 337午夜福利| 天天色丁香| 97在线观视频免费观看| 狠狠干五月天| 99久热这里有精品| 超碰中文字幕在线| 久操热线| 五月色网| 五月丁香美女视频| 婷婷色五月天色| 九九热精品| 日本九九视频| 久久五月婷婷开心网| 五月天婷综合| 激情婷婷丁香五月| 日本久久综合| 99热12| 婷婷五月四狠狠| 激情五月天婷婷丁香| 色情五月综合婷婷| 五月丁香综合网| 婷婷综合网伊人| 日本三级中国三级99人妇网站| 亚洲午夜国产成人电影VA国产欧…| www.yw尤物| 激情五月丁香综合网站| 久久天天天| 五月亭大香蕉| 精品人妻一区二区三区在| 中文av网| 婷婷九月在线| 中文字幕性爱丰满| 97色在线| www.com色播五月天| 欧美成人猛片AAAAAAA| 久久久久er热| 26UUU亚洲欧美| 激情深爱婷婷网| 婷婷月综合| 欧美WW在线网| 久久丁香综合精品综合| 国产亚洲精品久久久久久郑州 | 五月婷婷亚洲| 日韩色色视频www| 99国产小视频免费观看| 久久久久久久97| 干一干xxxx| 亚洲婷婷综合视频| 新激情五月天| 被男人添B超爽视频| 伊人久久婷婷| 色五月91| 99啪啪网| 超碰人人91| 六月丁香VA| www.色色色色| 亚洲婷婷激情888精品久| 日韩成人五月天| 婷婷五月天综合激情| 丁香婷婷老熟女综合网| 中字幕视频在线永久在线观看免费 | 亚洲国产黄色电影| 色五月丁香五| 亚洲精品字幕| 日韩一级一片内射视频4K| 五月婷婷综合激情| 99精品网| 91九九| 少妇AB又爽又紧无码网站| 99色视频| 人人爱人人草| 色色色色色色网站| 99色网站| 99热这里只有精品在线观看| 欧美综合五月丁香五月天| 婷婷丁香五月久久| 婷香五月| 天天综合久久| 99在线热| 久久五月天精品视频| 久久9视频欧美| 激情五月天在线观看婷婷| 超碰com| www.91操| 成人午夜无码视频| 丁香六月婷婷综合色| 五月天激情站| 狠狠干激情五月| 立川无码av| 狠狠操.COM| 99在线观看精彩视频| 美女五月激情| 日韩AAA| av操一操| WWW.99热| 先锋资源婷婷| 久久Xx| 三级三久久线久久99久目本WW| 一本色道久久综合狠狠躁小说| 天天综合精品| 中文字幕一色哟哟哟哟| 99re资源在线视频导航| 伊人久热91网| 色婷婷AV在线| 九九色色色| 激情小说五月天| sewuyue第四色| 色婷婷丁香五月综合| 色私五月婷婷| 丁香桃色网| 亚洲精品又粗又大又爽A片| 91无码一区人妻A片蜜| 免费看片在线观看| 伊人婷婷大香蕉| 婷婷久月| 丁香婷婷人妻综合网| 夜丁香五月婷婷| 久久婷婷五月综合啪| 婷婷五月天基地| 色视频色综合91| 六月色激情| 九九综合网| 久超超碰| 五月丁香 啪啪啪| 天天色天天操天天射| 九九人人操| 精品九九久久| 99啪| 亚洲狠狠狠色婷婷综合激情久久久| 五月丁香六月婷婷操操操| 在线视频另类| 激情 久久 婷婷| 丁香婷婷91在线观看视频| 婷婷六月丁香开心深深爱| 六月五月婷婷| 六月丁香久久| 欧美成人精品A片免费一区99| 九九热99精品| 五月婷婷五月丁香综合| 久久精品亚洲热| 综合激情视频| www.金莲av| 久久多色| 亚洲一区二区无码蜜乳av| av在线免费播放| 男同91 | 婷婷伊人久久| 九九这里精品| www999日韩精品| 俺也去五月婷婷丁| 超碰女人天堂| 婷婷丁香五月天在线| 色色射| 婷婷伊人綜合中文| 看黄的网站18禁| 丁香五月欧美午夜视频| 五月婷婷激情综合| 探花搜索结果 - 黄上黄| 怕怕av| 大香蕉九操| 91九色白丝| 国产色色网站网址| www.婷婷五月天| 欧美大片免费观看| 天堂久久大香蕉| 婷婷成人综合五月| 国产67194| 日本色超碰| 开心日韩丁香婷婷五月| 久久久97| 五月天久久网站| 久久丁香五月婷婷| 丁香六月综合| 色婷婷色丁香色欲av| 狠狠擼综合| 色婷婷亚洲婷婷| 99热精品网| 99热在线观看免费| 五月天激情小说| 天天日天天爽夜夜爽| 国产69久久久欧美黑人A片| 99视频内射三四| 99热这里只有精品最新| 99热精品在线| 婷婷久久综合久| 天天干天天拍| 停停六月 综合| 亚洲人妻一区二区 | 五月丁香婷爱在线| 午夜精品久久久久久久爽| 激情五月婷婷视频一区二区三区| AV79| 亚洲激情四射色| 亚洲激情淫网| 99热这里只有精品在线| 色狠狠999综合| 亚洲色频| 久久99草五月婷婷| 精品三区影院| 亚洲亚洲人成综合网络| AV色五月婷婷| 天天天天天天操| 九九99九九99| 五月精品| 久久精品国产一区二区三区四区| 99热这里只有精品268| 九月丁香亭亭| 久热超碰91| 欧美影院| 91丁香| 毛片新网地| 丁香五月中文字幕| 99热亚洲精品| 色五月婷婷在线| 色噜噜狠狠色综无码久久合欧美| 伊人久久综合| 色五月第四色| 国色天香成人网| 激情综合女人网五月播播| AV在线观看网站| 色婷婷无吗| 婷婷激情综合网| 日本人妻A片成人免费看片| 精品在线| 九九热视频在线观看| 九九久久精品| 日韩AAAAA| 琪琪理论片| 99re在线播放| 狠狠干2007| 一本色道久久88加勒比| 热99热9| 激情网五月天| caopeng超碰| 亚洲在线免费成人| 深爱激情网噜噜色| 色99久草在线| 色色色网站| 超碰97干| 超碰在线国产| se99高清无码| 影音先锋男人女人| 五月婷婷色激情| 99视频在线观看网址| 伊人久久婷婷| 亚洲欧洲99| 人妻无码视频网| 亚艹艹| 国产一区18| 丁香婷婷影院| 五月激情啪啪| 超碰v| 天天插天天插天天插天天插| 538任你爽视频不一样的| 亚洲精品国产setv| 亚洲天堂亚洲色色色| 九九九九九999999| 天天爱天天狠天天透| 99丁香五月婷婷在线| 在线观看的av| 五月天久久婷婷婷| 熟妇内谢69XXXXXA片| 牛牛碰免费| 久久婷婷五月综合伊人| 欧美性爱五月天| 啪啪啪五月天| 一区二区成人电影免费播放| 天天综合色| 久久亚洲网| 99精品丰满| 婷婷丁香色五月| 丁香色五月婷婷91桃色| 97婷婷在线| 天天射影院| 天天日,天天插| 久久婷婷综合网| 久cao香蕉影院| 色五月激情婷婷| 久热精品视频在线观| 99久久久精品| 五月天激情啪啪| 色综合天天网| 99亚洲精美视频在线观看|