久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue使用GraphVis開(kāi)發(fā)無(wú)限拓展的關(guān)系圖譜的實(shí)現(xiàn)

瀏覽:132日期:2023-02-17 09:18:17

1、去GraphVis官網(wǎng)下載對(duì)應(yīng)的js,新版和舊版的js有所不同,看自己需求引入舊版還是新版(GraphVis官方網(wǎng)址:http://www.graphvis.cn/)

visgraph.min.js (基本配置js) visgraph-layout.min.js(配置布局js)

2、在需要的vue文件引入js文件

import VisGraph from ’@/assets/js/GraphVis/old/visgraph.min.js’ // 自己對(duì)應(yīng)的js文件位置import LayoutFactory from ’@/assets/js/GraphVis/old/visgraph-layout.min.js’ // 自己對(duì)應(yīng)的js文件位置export default { components: { VisGraph, LayoutFactory } }

3、加載畫(huà)布和配置

配置(自己根據(jù)需求修改配置):

config: { // 節(jié)點(diǎn)配置 node: { label: { // 標(biāo)簽配置 show: true, // 是否顯示 color: ’250,250,250’, // 字體顏色 font: ’normal 14px Microsoft YaHei’, // 字體大小及類型 textPosition: ’Middle_Center’, // 字體位置 wrapText: true // 節(jié)點(diǎn)包裹文字(該屬性為true時(shí)只對(duì)于字體位置為Middle_Center時(shí)有效) }, shape: ’circle’, // 節(jié)點(diǎn)形狀 circle,rect,square,ellipse,triangle,star,polygon,text // width: 60, // 節(jié)點(diǎn)寬度(只對(duì)于shape為rect時(shí)有效) // height: 60, // 節(jié)點(diǎn)高度(只對(duì)于shape為rect時(shí)有效) color: ’62,160,250’, // 節(jié)點(diǎn)顏色 borderColor: ’62,160,250’, // 節(jié)點(diǎn)邊框顏色 borderWidth: 0, // 節(jié)點(diǎn)邊框?qū)挾? borderRadius: 0, // 節(jié)點(diǎn)圓角 lineDash: [0], // 節(jié)點(diǎn)邊框線條類型 [0] 表示實(shí)線 [5,8] 表示虛線 borderWidth > 0有效 alpha: 1, // 節(jié)點(diǎn)透明度 size: 60, // 節(jié)點(diǎn)大小 selected: { // 節(jié)點(diǎn)選中后樣式 borderColor: ’136,198,255’, // 選中時(shí)邊框顏色 borderAlpha: 1, // 選中時(shí)的邊框透明 borderWidth: 3, // 選中是的邊框?qū)挾? showShadow: true, // 是否展示陰影 shadowColor: ’136,198,255’ // 選中是的陰影顏色 } }, // 線條配置 link: { label: { // 標(biāo)簽配置 show: true, // 是否顯示 color: ’100,100,200’, // 標(biāo)簽顏色 font: ’normal 10px Arial’ // 標(biāo)簽文字大小及類型 }, lineType: ’direct’, // 線條類型direct,curver,vlink,hlink,bezier,vbezier,hbezier colorType: ’defined’, // 連線顏色類型 source:繼承source顏色,target:繼承target顏色 both:用雙邊顏色,defined:自定義 color: ’200,200,200’, // 線條顏色 alpha: 1, // 連線透明度 lineWidth: 1, // 連線寬度 lineDash: [0], // 虛線間隔樣式如:[5,8] showArrow: true, // 顯示箭頭 selected: { // 選中時(shí)的樣式設(shè)置 color: ’20,250,50’, // 選中時(shí)的顏色 alpha: 1, // 選中時(shí)的透明度 lineWidth: 4, // 選中線條寬度 showShadow: true, // 顯示陰影 shadowColor: ’50,250,50’ // 陰影顏色 } }, highLightNeiber: true, // 相鄰節(jié)點(diǎn)高度標(biāo)志 wheelZoom: 0.8 // 滾輪縮放開(kāi)關(guān),不使用時(shí)不設(shè)置[0,1] }

加載畫(huà)布:

this.visgraph = new VisGraph(document.getElementById(this.canvasId),this.canvasConfig )this.visgraph.clearAll()this.visgraph.drawData(this.graphData)

4、拓展功能:

無(wú)限拓展子節(jié)點(diǎn),雙擊節(jié)點(diǎn)觸發(fā)(ondblClick): 

this.visgraph.restoreHightLight() // 取消高亮const allNodes = this.visgraph.getVisibleData()this.currentNode.push(node.id)allNodes.nodes.forEach(item => { if (this.currentNode.indexOf(item.id) === (-1)) { this.visgraph.deleteNode(item) }})const findNodeNum = Math.round(Math.random() * 50)const increamData = this.buildIncreamData(node, findNodeNum)this.visgraph.activeAddNodeLinks(increamData.nodes, increamData.links)this.visgraph.translateToCenter()

完整代碼(relation.vue):

<!-- * @Author: CarlYang * @Date: 2021-07-23 15:31:51 * @LastEditTime: 2021-07-30 09:46:05 * @LastEditors: Please set LastEditors * @Description: 關(guān)系圖譜 * @FilePath: vue-g6srcviewsGraphViscompany.vue--><template> <div id='container'> <!-- ============================================= 畫(huà)布視圖 ============================================= --> <div ref='graphpanel' @contextmenu='globalClickedDispatch' ></div> <!-- ============================================= 左側(cè)工具欄 ============================================= --> <div class='left-toolbar'> <ul><li @click='setZoomOut'> <i class='iconfont icon-zoomin'></i></li><li @click='setZoomIn'> <i class='iconfont icon-zoomout'></i></li><li @click='saveImage'> <i class='iconfont icon-baocun-'></i></li><li @click='exportJson'> <i class='iconfont icon-json'></i></li><li @click='showOverView'> <i style='font-size: 14px'></i></li><li @click='clockwiseRotate'> <i style='font-size: 14px'></i></li><li @click='counterclockwiseRotate'> <i style='font-size: 14px'></i></li><li @click='setMouseModel(’normal’)'> <i class='iconfont icon-pointer-up'></i></li><li @click='setMouseModel(’drag’)'> <i class='iconfont icon-line-dragmovetuozhuai-01'></i></li><li @click='setMouseModel(’select’)'> <i class='iconfont icon-kuangxuan1'></i></li><li @click='fullScreen'> <i style='font-size: 20px'></i></li> </ul> </div> <!-- ============================================= 右鍵菜單 ============================================= --> <div class='nodeMenuDialog'> <ul><li @click='clickNodeInfo'>節(jié)點(diǎn)信息</li><li @click='settingNode'>配置節(jié)點(diǎn)</li><li @click='selectRelation'>選中關(guān)聯(lián)</li><li @click='deleteNode'>刪除節(jié)點(diǎn)</li><li @click='contractNode'>收起節(jié)點(diǎn)</li><li @click='expandedNode'>展開(kāi)節(jié)點(diǎn)</li> </ul> </div> <!-- ============================================= 節(jié)點(diǎn)信息彈框 ============================================= --> <el-drawer :visible.sync='nodeInfoDrawer' direction='rtl' :modal='false' size='20%' > <div class='nodeInfo'><el-form ref='nodeInfoForm' :model='nodeInfoForm' label-width='80px'> <el-form-item label='節(jié)點(diǎn)名稱'> <el-input v-model='nodeInfoForm.label'></el-input> </el-form-item> <el-form-item label='節(jié)點(diǎn)ID'> <el-input v-model='nodeInfoForm.id'></el-input> </el-form-item></el-form><el-tabs v-model='nodeInfoActiveName' :stretch='true' class='nodeInfoTabs'> <el-tab-pane label='關(guān)聯(lián)關(guān)系' name='first'> <div class='nodeInfoRelation'> <el-collapse v-model='nodeInfoRelationActive'><el-collapse-item name='1'> <template slot='title'> <el-badge :value='nodeInfoSourceList.length'>目標(biāo)節(jié)點(diǎn)</el-badge> </template> <table border='0' cellspacing='0' cellpadding='0' v-if='nodeInfoSourceList.length > 0' > <thead> <tr><th>實(shí)體對(duì)象</th><th>關(guān)系類型</th> </tr> </thead> <tbody> <tr v-for='(item, index) in nodeInfoSourceList' :key='index'><td : @click='moveCenterThisNode(item.id)'>{{ item.label }}</td><td>{{ item.relationType }}</td> </tr> </tbody> </table> <p v-else>無(wú)數(shù)據(jù)</p></el-collapse-item><el-collapse-item name='2'> <template slot='title'> <el-badge :value='nodeInfoTargetList.length'>來(lái)源節(jié)點(diǎn)</el-badge> </template> <table border='0' cellspacing='0' cellpadding='0' v-if='nodeInfoTargetList.length > 0' > <thead> <tr><th>實(shí)體對(duì)象</th><th>關(guān)系類型</th> </tr> </thead> <tbody> <tr v-for='(item, index) in nodeInfoTargetList' :key='index'><td : @click='moveCenterThisNode(item.id)'>{{ item.label }}</td><td>{{ item.relationType }}</td> </tr> </tbody> </table> <p v-else>無(wú)數(shù)據(jù)</p></el-collapse-item> </el-collapse> </div> </el-tab-pane> <el-tab-pane label='屬性' name='second'> <div class='nodeInfoAttribute'> <el-table :data='nodeInfoAttributeList' border style='width: 100%'><el-table-column prop='name' label='屬性名'></el-table-column><el-table-column prop='value' label='屬性值'></el-table-column> </el-table> </div> </el-tab-pane></el-tabs> </div> </el-drawer> <!-- ============================================= 節(jié)點(diǎn)配置 ============================================= --> <el-drawer :visible.sync='nodeConfigDrawer' direction='rtl' :modal='false' size='20%' > <div class='nodeConfig'><el-form ref='form' :model='nodeConfigForm' label- label-position='left'> <el-form-item label='名稱'> <el-input v-model='nodeConfigForm.label' placeholder='請(qǐng)輸入節(jié)點(diǎn)名稱'></el-input> </el-form-item> <el-form-item label='類型'> <el-select v-model='nodeConfigForm.shape' placeholder='請(qǐng)選擇節(jié)點(diǎn)類型'> <el-optionv-for='(item, index) in nodeTypeList':key='’node’ + index':label='item.label':value='item.value' ></el-option> </el-select> </el-form-item> <el-form-item label='顏色'> <div class='form-color'> <el-inputv-model='nodeConfigForm.fillColor' placeholder='請(qǐng)選擇顏色'readonly ></el-input> <el-color-pickerv-model='nodeConfigForm.hexColor' @change='colorChange(nodeConfigForm.hexColor, ’fillColor’)' ></el-color-picker> </div> </el-form-item> <el-form-item label='大小'> <el-input v-model='nodeConfigForm.size' placeholder='請(qǐng)輸入節(jié)點(diǎn)大小' type='number'></el-input> </el-form-item> <el-form-item label='邊框?qū)挾?> <el-input v-model='nodeConfigForm.borderWidth' placeholder='請(qǐng)輸入邊框?qū)挾? type='number'></el-input> </el-form-item> <el-form-item label='邊框虛線'> <el-select v-model='nodeConfigForm.borderDash' placeholder='請(qǐng)選擇邊框虛線'> <el-option label='否' :value='false'></el-option> <el-option label='是' :value='true'></el-option> </el-select> </el-form-item> <el-form-item label='邊框顏色'> <div class='form-color'> <el-inputv-model='nodeConfigForm.borderColor' placeholder='請(qǐng)選擇邊框顏色'readonly ></el-input> <el-color-pickerv-model='nodeConfigForm.borderHexColor' @change='colorChange(nodeConfigForm.borderHexColor, ’borderColor’)' ></el-color-picker> </div> </el-form-item> <el-form-item label='字體位置'> <el-select v-model='nodeConfigForm.textPosition' placeholder='請(qǐng)選擇字體位置'> <el-optionv-for='(item, index) in textPositionList':key='index':label='item.label':value='item.value' ></el-option> </el-select> </el-form-item> <el-form-item label='字體樣式'> <el-input v-model='nodeConfigForm.font' placeholder='請(qǐng)輸入字體樣式'></el-input> </el-form-item> <el-form-item label='字體顏色'> <div class='form-color'> <el-inputv-model='nodeConfigForm.fontColor' placeholder='請(qǐng)選擇字體顏色'readonly ></el-input> <el-color-pickerv-model='nodeConfigForm.fontHexColor' @change='colorChange(nodeConfigForm.fontHexColor, ’fontColor’)' ></el-color-picker> </div> </el-form-item> <el-form-item label='字體背景'> <div class='form-color'> <el-inputv-model='nodeConfigForm.fontBgColor' placeholder='請(qǐng)選擇字體背景'readonly ></el-input> <el-color-pickerv-model='nodeConfigForm.fontBgHexColor' @change='colorChange(nodeConfigForm.fontBgHexColor, ’fontBgColor’)' ></el-color-picker> </div> </el-form-item> <el-form-item label='字體偏移'> <el-input v-model='nodeConfigForm.textOffset' placeholder='請(qǐng)輸入字體偏移' type='number' max='100' min='-100' ></el-input> </el-form-item></el-form><div class='save-setting'> <el-button type='primary' @click='saveSetting'>保存配置</el-button></div> </div> </el-drawer> </div></template><script>import VisGraph from ’@/assets/js/GraphVis/old/visgraph.min.js’import LayoutFactory from ’@/assets/js/GraphVis/old/visgraph-layout.min.js’import screenfull from ’screenfull’import { company} from ’@/assets/js/company.js’export default { name: ’DesignGraph’, components: { VisGraph, LayoutFactory }, data() { return { // 畫(huà)布實(shí)例 visgraph: null, // 中心節(jié)點(diǎn) centerNode: null, // 已選中節(jié)點(diǎn) currentNode: [], // 選中節(jié)點(diǎn)信息 checkedNodeInfo: {}, // 圖譜配置 config: {node: { label: { show: true, color: ’250,250,250’, font: ’normal 14px Microsoft YaHei’, textPosition: ’Middle_Center’, borderWidth: 0, wrapText: true }, shape: ’circle’, width: 60, height: 60, color: ’62,160,250’, borderColor: ’62,160,250’, borderWidth: 0, borderRadius: 0, lineDash: [0], alpha: 1, selected: { borderColor: ’136,198,255’, borderAlpha: 1, borderWidth: 3, showShadow: true, shadowColor: ’136,198,255’ }, onClick: (event, node) => { // this.visgraph.highLightNeiberNodes(node, 1) // 高亮 }, ondblClick: (event, node) => { this.visgraph.restoreHightLight() // 取消高亮 const allNodes = this.visgraph.getVisibleData() this.currentNode.push(node.id) allNodes.nodes.forEach(item => { if (this.currentNode.indexOf(item.id) === (-1)) {this.visgraph.deleteNode(item) } }) const findNodeNum = Math.round(Math.random() * 50) const increamData = this.buildIncreamData(node, findNodeNum) this.visgraph.activeAddNodeLinks(increamData.nodes, increamData.links) this.visgraph.translateToCenter() }, onMouseOver: (event, node) => { }, onMouseOut: (event, node) => { }},link: { label: { show: true, color: ’100,100,200’, font: ’normal 10px Arial’ }, lineType: ’direct’, colorType: ’defined’, color: ’200,200,200’, alpha: 1, lineWidth: 1, lineDash: [0], showArrow: true, selected: { color: ’20,250,50’, alpha: 1, lineWidth: 4, showShadow: true, shadowColor: ’50,250,50’ }},highLightNeiber: true,wheelZoom: 0.8,noElementClick: (event, _graphvis) => { // 點(diǎn)擊畫(huà)布其他位置,彈框隱藏 this.nodeMenuDialogClose()} }, // 節(jié)點(diǎn)信息彈框 nodeInfoDrawer: false, // 節(jié)點(diǎn)信息表單 nodeInfoForm: {label: ’’,id: ’’ }, // 節(jié)點(diǎn)信息彈框tab選項(xiàng)名稱 nodeInfoActiveName: ’first’, // 關(guān)聯(lián)關(guān)系 nodeInfoRelationActive: [’1’, ’2’], // 目標(biāo)節(jié)點(diǎn)列表 nodeInfoTargetList: [], // 來(lái)源節(jié)點(diǎn)列表 nodeInfoSourceList: [], // 節(jié)點(diǎn)屬性列表 nodeInfoAttributeList: [], // 節(jié)點(diǎn)配置彈框 nodeConfigDrawer: false, // 節(jié)點(diǎn)配置表單 nodeConfigForm: {label: ’’,shape: ’’,fillColor: ’’,hexColor: ’’,size: ’’,borderWidth: ’’,borderDash: ’’,borderColor: ’’,borderHexColor: ’’,textPosition: ’’,font: ’’,fontColor: ’’,fontHexColor: ’’,fontBgColor: ’’,fontBgHexColor: ’’,textOffset: ’’ }, // 節(jié)點(diǎn)類型列表 nodeTypeList: [{ value: ’circle’, label: ’圓形’ },{ value: ’rect’, label: ’矩形’ },{ value: ’ellipse’, label: ’橢圓形’ },{ value: ’star’, label: ’五角形’ },{ value: ’triangle’, label: ’三角形’ },{ value: ’polygon’, label: ’六邊形’ } ], // 字體位置列表 textPositionList: [{ value: ’Middle_Center’, label: ’居中’ },{ value: ’Bottom_Center’, label: ’底部’ },{ value: ’top_Center’, label: ’頂部’ },{ value: ’Middle_Left’, label: ’左方’ },{ value: ’Middle_right’, label: ’右方’ }, ] } }, mounted() { this.handleData(company) window.onresize = () => { if (this.visgraph) {this.visgraph.moveCenter() } } }, methods: { /** * 處理數(shù)據(jù) * @date 2021-07-23 * @param {Object} data */ handleData(data) { const obj = {nodes: [],links: [] } const nodes = data.nodes nodes.forEach(item => {if (item.label === ’總公司’) { const nodeObj = { id: item.id, label: item.label, properties: item, color: ’38,186,191’, selectedBorderColor: ’131,218,228’, shadowColor: ’131,218,228’ } nodeObj.size = 80 nodeObj.x = 250 nodeObj.y = 250 this.centerNode = nodeObj this.currentNode.push(item.id)} else { const nodeObj = { id: item.id, label: item.label, properties: item, size: 60 } switch (item.type) { case 1: nodeObj.color = ’242,105,97’ nodeObj.selectedBorderColor = ’249,179,157’ nodeObj.shadowColor = ’249,179,157’ break } obj.nodes.push(nodeObj)} }) const links = data.edges links.forEach(item => {const linkObj = { id: item.id, target: item.to, source: item.from, label: item.label, properties: item // strokeColor: this.getRandomColor()}switch (item.type) { case 11: linkObj.color = ’40,194,199’ linkObj.selectedColor = ’40,194,199’ linkObj.shadowColor = ’40,194,199’ break case 12: linkObj.color = ’250,108,100’ linkObj.selectedColor = ’250,108,100’ linkObj.shadowColor = ’250,108,100’ break case 13: linkObj.color = ’0,132,255’ linkObj.selectedColor = ’0,132,255’ linkObj.shadowColor = ’0,132,255’ break case 15: linkObj.color = ’250,108,100’ linkObj.selectedColor = ’250,108,100’ linkObj.shadowColor = ’250,108,100’ break}obj.links.push(linkObj) }) this.buildData(obj) }, /** * 搭建實(shí)例 * @date 2021-07-23 * @param {Object} gxData */ buildData(gxData) { this.visgraph = new VisGraph(document.getElementById(’graph-panel’), this.config) const nodeCount = gxData.nodes.length const xyArr = this.getXY(this.centerNode, nodeCount, nodeCount * 20) gxData.nodes.forEach((n, i) => {n.x = xyArr[i].xn.y = xyArr[i].yn.size = 60 }) gxData.nodes.push(this.centerNode) this.visgraph.drawData(gxData) this.visgraph.setZoom() }, /** * 遍布選中節(jié)點(diǎn)周?chē)狞c(diǎn)坐標(biāo) * @date 2021-07-23 * @param {中心節(jié)點(diǎn)} centerNode * @param {節(jié)點(diǎn)數(shù)量} nodeCount * @param {距離中心點(diǎn)距離} raduis * @returns {Array} */ getXY(centerNode, nodeCount, raduis) { const aop = 360.0 / nodeCount const arr = [] for (let i = 0; i < nodeCount; i++) {let r1 = raduisif (nodeCount > 10) { r1 = (i % 2 === 0 ? raduis + 35 : raduis - 35)}const ao = i * aopconst o1 = {}o1.x = centerNode.x + r1 * Math.cos(ao * Math.PI / 180)o1.y = centerNode.y + r1 * Math.sin(ao * Math.PI / 180)arr[i] = o1 } return arr }, /** * 隨機(jī)產(chǎn)生節(jié)點(diǎn) * @date 2021-07-23 * @param {當(dāng)前選中節(jié)點(diǎn)} centerNode * @param {節(jié)點(diǎn)數(shù)量} nodeNum * @returns {Object} */ buildIncreamData(centerNode, nodeNum) { const gxData = {nodes: [],links: [] } const count = nodeNum const nodeIdPrefix = ’node_’ + Math.round(Math.random() * 1000) + ’_’ for (let i = 0; i < count; i++) {gxData.nodes.push({ id: nodeIdPrefix + i, label: ’子節(jié)點(diǎn)+’ + i, size: 60 // color: this.getRandomColor()})gxData.links.push({ source: centerNode.id, target: nodeIdPrefix + i, label: ’關(guān)系’ + i}) } return gxData }, /** * 畫(huà)布右鍵事件 * @date 2021-07-26 * @param {Object} event */ globalClickedDispatch(event) { if (event.button === 2) {if (this.visgraph.currentNode) { this.nodeMenuDialogOpen(event, this.visgraph.currentNode)} } }, /** * 右鍵節(jié)點(diǎn)菜單顯示 * @date 2021-07-26 * @param {Object} event * @param {Object} node */ nodeMenuDialogOpen(event, node) { let nodeMenuDialog = document.getElementById('nodeMenuDialog'); nodeMenuDialog.style.left = event.clientX + 'px'; nodeMenuDialog.style.top = (event.clientY - 76) + 'px'; nodeMenuDialog.style.display = 'block'; this.checkedNodeInfo = node; event.stopPropagation(); }, /** * 關(guān)閉節(jié)點(diǎn)菜單 * @date 2021-07-26 */ nodeMenuDialogClose() { let nodeMenuDialog = document.getElementById('nodeMenuDialog'); nodeMenuDialog.style.display = 'none'; }, /** * 點(diǎn)擊節(jié)點(diǎn)信息 * @date 2021-07-26 */ clickNodeInfo() { this.nodeInfoDrawer = true // 賦值表單 this.nodeInfoForm = this.checkedNodeInfo // 關(guān)聯(lián)節(jié)點(diǎn) // 出節(jié)點(diǎn) const k = this.checkedNodeInfo const g = (k.outLinks || []).map((link) => {return { id: link.target.id, label: link.target.label, type: link.target.type, color: ’rgb(’ + link.target.fillColor + ’)’, relationType: link.type || link.label || ’--’} }) // 入節(jié)點(diǎn) const h = (k.inLinks || []).map((link) => {return { id: link.source.id, label: link.source.label, type: link.source.type, color: ’rgb(’ + link.source.fillColor + ’)’, relationType: link.type || link.label || ’--’} }) this.nodeInfoTargetList = h this.nodeInfoSourceList = g // 屬性賦值 const list = [] const nameList = [’id’, ’label’, ’type’, ’cluster’, ’fillColor’, ’shape’, ’size’, ’font’, ’fontColor’, ’x’, ’y’] nameList.forEach(item => {const obj = { name: item, value: this.checkedNodeInfo[item]}list.push(obj) }) this.nodeInfoAttributeList = list this.nodeMenuDialogClose() }, /** * 選中關(guān)聯(lián)操作 * @date 2021-07-26 */ selectRelation() { this.visgraph.rightMenuOprate(’selRelate’) }, /** * 刪除指定節(jié)點(diǎn) * @date 2021-07-26 * @returns {any} */ deleteNode() { this.visgraph.deleteNode(this.visgraph.currentNode) this.nodeMenuDialogClose() }, /** * 收起指定節(jié)點(diǎn) * @date 2021-07-26 * @returns {any} */ contractNode() { if (this.visgraph.currentNode.outLinks.length > 0) {this.visgraph.contract(this.visgraph.currentNode)this.nodeMenuDialogClose() } else {this.$message.warning(’當(dāng)前節(jié)點(diǎn)無(wú)子節(jié)點(diǎn),無(wú)法收起’) } }, /** * 展開(kāi)指定節(jié)點(diǎn) * @date 2021-07-26 * @returns {any} */ expandedNode() { if (this.visgraph.currentNode.outLinks.length > 0) {this.visgraph.expanded(this.visgraph.currentNode)this.nodeMenuDialogClose() } else {this.$message.warning(’當(dāng)前節(jié)點(diǎn)無(wú)子節(jié)點(diǎn),無(wú)法展開(kāi)’) } }, /** * 以指定節(jié)點(diǎn)為中心移動(dòng) * @date 2021-07-26 * @param {String} id */ moveCenterThisNode(id) { const node = this.visgraph.findNodeById(id) this.visgraph.moveNodeToCenter(node) }, /** * 節(jié)點(diǎn)配置 * @date 2021-07-30 * @returns {any} */ settingNode () { this.nodeMenuDialogClose() const {id,label,shape,fillColor,size,borderWidth,lineDash,borderColor,textPosition,font,fontColor,labelBackGround,textOffsetX } = this.visgraph.currentNode this.nodeConfigForm.id = id this.nodeConfigForm.label = label this.nodeConfigForm.shape = shape this.nodeConfigForm.fillColor = ’rgb(’ + fillColor + ’)’ this.nodeConfigForm.hexColor = this.rgbToHex(’rgb(’ + fillColor + ’)’) this.nodeConfigForm.size = size this.nodeConfigForm.borderWidth = borderWidth this.nodeConfigForm.borderDash = lineDash.length === 2 this.nodeConfigForm.borderColor = ’rgb(’ + borderColor + ’)’ this.nodeConfigForm.borderHexColor = this.rgbToHex(’rgb(’ + borderColor + ’)’) this.nodeConfigForm.textPosition = textPosition this.nodeConfigForm.font = font this.nodeConfigForm.fontColor = ’rgb(’ + fontColor + ’)’ this.nodeConfigForm.fontHexColor = this.rgbToHex(’rgb(’ + fontColor + ’)’) this.nodeConfigForm.fontBgColor = labelBackGround ? ’rgb(’ + labelBackGround + ’)’ : ’’ this.nodeConfigForm.fontBgHexColor = labelBackGround ? this.rgbToHex(’rgb(’ + labelBackGround + ’)’) : ’’ this.nodeConfigForm.textOffset = textOffsetX this.nodeConfigDrawer = true }, /** * 保存節(jié)點(diǎn)配置 * @date 2021-07-30 * @returns {any} */ saveSetting () { const {id,label,shape,fillColor,hexColor,size,borderWidth,borderDash,borderColor,borderHexColor,textPosition,font,fontColor,fontHexColor,fontBgColor,fontBgHexColor,textOffset } = this.nodeConfigForm const b = this.visgraph.findNodeByAttr(’id’, id) if (b) {b.label = labelb.size = sizeb.shape = shapeb.fillColor = this.getColorRgb(fillColor)b.textPosition = textPositionb.fontColor = this.getColorRgb(fontColor)b.labelBackGround = this.getColorRgb(fontBgColor)b.font = font;b.textOffsetY = Number(textOffset) || 2b.borderWidth = Number(borderWidth) || 2b.borderColor = this.getColorRgb(borderColor)b.lineDash = (borderDash ? [8, 5] : [0])this.visgraph.refresh()this.$message({ message: ’修改配置成功!’, type: ’success’, duration: 2000})this.nodeConfigDrawer = false } else {this.$message({ message: ’無(wú)法找到選中節(jié)點(diǎn)!’, type: ’error’, duration: 2000}) } }, /** * 隨機(jī)獲取顏色 * @date 2021-07-20 * @returns {String} 樣式 */ getRandomColor() { const r = Math.floor(Math.random() * 256) const g = Math.floor(Math.random() * 256) const b = Math.floor(Math.random() * 256) return ’rgb(’ + r + ’,’ + g + ’,’ + b + ’)’ }, /** * 顏色選擇框變化賦值 * @date 2021-07-26 * @param {String} val * @param {String} kay */ colorChange(val, key) { this.nodeConfigForm[key] = this.hexToRgba(val) }, /** * 16進(jìn)制色值轉(zhuǎn)rgb * @date 2021-07-26 * @param {String} hex * @returns {String} */ hexToRgba(hex) { return 'rgb(' + parseInt('0x' + hex.slice(1, 3)) + ',' + parseInt('0x' + hex.slice(3, 5)) + ',' + parseInt('0x' + hex.slice(5, 7)) + ')' }, /** * rgb色值轉(zhuǎn)16進(jìn)制 * @date 2021-07-26 * @param {String} color * @returns {String} */ rgbToHex(color) { const rgb = color.split(’,’); const r = parseInt(rgb[0].split(’(’)[1]); const g = parseInt(rgb[1]); const b = parseInt(rgb[2].split(’)’)[0]); const hex = '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); return hex; }, /** * 去掉rgb * @date 2021-07-30 * @param {String} a * @returns {String} */ getColorRgb (a) { if (a && a.length > 0) {a = a.replace(’rgb(’, ’’).replace(’)’, ’’) } else {a = null } return a }, /** * 保存圖片 * @date 2021-07-23 */ saveImage() { this.visgraph.saveImage() }, /** * 導(dǎo)出json * @date 2021-07-30 */ exportJson () { this.visgraph.exportJsonFile() }, /** * 打開(kāi)縮略圖 * @date 2021-07-23 */ showOverView() { console.log(this.showOverViewFlag) this.showOverViewFlag = !this.showOverViewFlag this.visgraph.showOverView(this.showOverView) }, /** * 縮小操作 * @date 2021-07-23 */ setZoomIn() { this.visgraph.setZoom(’zoomIn’) }, /** * 放大操作 * @date 2021-07-23 */ setZoomOut() { this.visgraph.setZoom(’zoomOut’) }, /** * 順時(shí)針旋轉(zhuǎn) * @date 2021-07-23 */ clockwiseRotate() { this.visgraph.rotateGraph(-10) }, /** * 逆時(shí)針旋轉(zhuǎn) * @date 2021-07-23 */ counterclockwiseRotate() { this.visgraph.rotateGraph(10) }, /** * 設(shè)置鼠標(biāo)模式 * @date 2021-07-23 * @param {String} type drag:拖動(dòng)模式 select:框選模式 normal:正常模式 */ setMouseModel(type) { this.visgraph.setMouseModel(type) }, /** * 全屏顯示 * @date 2021-07-23 */ fullScreen() { screenfull.request(this.$refs.graphpanel) } }}</script><style lang='scss' scoped>#container { width: 100%; position: relative; #graph-panel { width:100%; height:100%; background:#9dadc1; position: absolute; z-index: 1; } /* 測(cè)試菜單欄 */ .left-toolbar { position: absolute; top: 0; left: 0; z-index: 1000; width: 45px; height: 100%; background-color: #fafafa; border-right: 1px solid #e5e2e2; ul { li {text-align: center;height: 35px;color: #066fba;line-height: 35px;cursor: pointer;padding: 0;i { font-size: 18px;}&:hover { background-color: #6ea36d; color: #fff;} } } } /* 右鍵彈框樣式 */ .nodeMenuDialog { display: none; position: absolute; min-width: 100px; padding: 2px 3px; margin: 0; border: 1px solid #e3e6eb; background: #f9f9f9; color: #333; z-index: 100; border-radius: 5px; box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2); transform: translate(0, 15px) scale(0.95); transition: transform 0.1s ease-out, opacity 0.1s ease-out; overflow: hidden; cursor: pointer; li { display: block; position: relative; margin: 0; padding: 0 10px; border-radius: 5px; white-space: nowrap; line-height: 30px; text-align: center; &:hover {background-color: #c3e5fd; } } } /* 節(jié)點(diǎn)信息彈框 */ .nodeInfo { .nodeInfoForm { padding: 20px 20px 0 20px; border: solid 1px #dcdfe6; border-left: none; border-right: none; margin: 20px 0; } .nodeInfoRelation { padding: 0 20px; .nodeInfo-table {width: 100%;overflow-y: scroll;th { width: 50%; border: 1px solid #ebeef5; padding: 9px 0 9px 9px; text-align: left; &:first-child { border-right: none; }}td { width: 50%; border: 1px solid #ebeef5; border-top: none; padding: 9px 0 9px 9px; &:first-child { border-right: none; }} } /deep/ .el-badge__content.is-fixed {top: 24px;right: -7px; } p {text-align: center;padding: 20px 0; } } .nodeInfoAttribute { padding: 0 20px; } } /* 節(jié)點(diǎn)配置彈框 */ .nodeConfig { padding: 20px 20px 0 20px; border: solid 1px #dcdfe6; border-left: none; border-right: none; margin: 20px 0; .form-color { display: flex; justify-content: space-between; .form-input {width: calc(100% - 50px); } } .save-setting { width: 100%; margin-bottom: 20px; .el-button {width: 100%; } } }}</style>

注:引入兩個(gè)js的文件eslint會(huì)報(bào)錯(cuò),可以把這個(gè)文件忽略,不使用eslint的可以忽略。同時(shí)該項(xiàng)目還基于element-ui開(kāi)發(fā),引入screenfull全屏插件,還有阿里圖標(biāo)庫(kù)圖標(biāo),自己按需引入。

Demo演示:

vue使用GraphVis開(kāi)發(fā)無(wú)限拓展的關(guān)系圖譜的實(shí)現(xiàn)

到此這篇關(guān)于vue使用GraphVis開(kāi)發(fā)無(wú)限拓展的關(guān)系圖譜的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)vue GraphVis關(guān)系圖譜內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 亚洲欧美中文日韩v在线观看 | 午夜精选视频 | 黄瓜av| 一本一道久久a久久精品逆3p | 国产在线小视频 | 99re免费视频精品全部 | 久久蜜桃精品一区二区三区综合网 | 超碰在线91| 精品国产乱码久久久久久久软件 | 在线视频 亚洲 | 国产精品人人做人人爽 | 日韩一区二区三区在线观看 | 国产一级特黄aaa大片评分 | 天天操一操 | www.avtt天堂网| 亚洲欧洲精品成人久久奇米网 | 欧美一级在线免费观看 | 国产一区二区观看 | 精品自拍视频 | 国产精品日韩 | 欧美日韩国产综合网 | 欧美一区二区三区精品 | 日韩免费视频一区二区 | 中文字幕在线永久 | 精品三级三级三级三级三级 | 国产欧美综合一区二区三区 | 亚洲精品美女久久 | 久久久久久av | 黑人巨大精品欧美一区二区三区 | 人人射av | 成人av免费观看 | 亚洲 欧美 日韩 精品 | 国外成人在线视频网站 | 久久精品黄 | 天天舔夜夜操 | 偷拍做爰吃奶视频免费看 | 欧美亚洲视频 | 日本在线网 | 欧美视频网站 | 国产羞羞视频免费在线观看 | 欧美精品1区2区3区 免费亚洲婷婷 | 中文字幕日韩欧美 | www.成人.com| 国产精品乱码人人做人人爱 | 福利二区视频 | 少妇看av一二三区 | 欧美一区二区免费 | 久久亚洲精品中文字幕 | 日本不卡高字幕在线2019 | 日韩成人在线播放 | 国产视频一二三区 | 在线观看中文字幕亚洲 | 欧美一级视频免费 | 国产亚洲精品久久久优势 | 成人午夜视频在线观看 | 一区二区三区四区在线 | 性视频一区 | 日韩9999| 国产成人在线电影 | 成人av网址在线观看 | 91综合网 | av影音 | 免费毛片在线播放 | 亚洲一区中文字幕在线观看 | 春色导航| 国产中文字幕在线 | 中文字幕高清在线 | 国产一区二区三区四区在线观看 | 国产一区二区三区四区在线观看 | 免费福利网站 | 亚洲首页| 欧美另类国产 | 九九亚洲精品 | 在线h观看 | 中文字幕日韩欧美 | 成人亚洲精品 | 亚洲一区二区三区精品视频 | 国产毛片毛片 | 国产小视频在线看 | 国产精品视频网 | 亚洲精品国产9999久久久久 | 区一区二区三在线观看 | 青青草久草 | 特级丰满少妇一级aaaa爱毛片 | 91久久精品一区 | 亚洲电影在线 | 亚洲视频一区二区在线 | 国产天天操 | 国产一区二区三区免费在线 | 中文字幕电影在线 | 国产精品国产精品国产专区不片 | 午夜a v电影 | 鲁视频| 国产精品久久99 | 国产女人爽到高潮免费视频 | 欧美一区二区三区在线视频 | 日韩高清在线一区 | 特a级片| 久久九精品| 成年人网站在线免费看 | 亚洲乱码一区二区三区在线观看 | 国产精久| 国产91极品 | 最新日韩视频 | av免费看在线| 免费观看一区二区三区毛片软件 | 成人在线免费av | 91精品国产乱码久久久久久久久 | 亚洲国产精品一区二区三区 | 久久久国产精品视频 | 欧美成人精品一区二区男人看 | 国产精品九九九 | 在线国产一区二区 | 国产高清视频 | 日韩久久成人 | 国产成人网 | 久久久精品一区二区 | 久久综合狠狠综合久久 | 成人国产免费视频 | 久久精品色欧美aⅴ一区二区 | 日本中文字幕一区二区 | 久久黄色| 久久久久一 | 中文在线视频 | 久久久美女| 大黄网站在线观看 | 国产精品香蕉 | 热99这里只有精品 | 精品第一页 | 国产精品69毛片高清亚洲 | 色综合久久久久久久久久久 | 欧美国产在线视频 | 中国大陆高清aⅴ毛片 | 一区精品视频 | 成人aaaa| 国外成人在线视频网站 | 国产一区| 精品一区二区三区蜜桃 | 午夜激情在线观看 | 欧美成人黄色小说 | 久久一区二区av | 欧美精品成人在线视频 | 久草视频在线首页 | a久久免费视频 | 国产精品久久九九 | 久久久夜夜夜 | 成人在线h | 日韩精品一区二区三区在线播放 | 国产精品久久久久久中文字 | 欧美一级二级视频 | 成人精品在线视频 | 丁香五月网久久综合 | 成人午夜视频网 | 日韩手机在线观看 | 古装三级在线播放 | 男女羞羞视频在线观看 | 黄a免费看 | 国产精品久久久久久久美男 | 久久久久久久影院 | 一区在线视频 | 国产精品成人一区二区三区夜夜夜 | 亚洲欧洲精品成人久久奇米网 | 精品毛片 | 一区二区三区高清不卡 | 日韩专区在线 | 午夜精品久久久久久久久久久久 | 综合久久网 | 中文字幕一区二区三区不卡 | 亚洲欧美国产另类 | 人人爽在线 | 91成人免费看片 | 国产aⅴ一区二区 | 欧美一级黄带 | 精品亚洲一区二区三区 | 欧美一区二区三区在线观看视频 | 99国产精品久久 | 亚洲激情在线 | 日本亚洲欧美 | a在线观看免费视频 | 伊人春色在线播放 | 婷婷在线视频 | 久久爱电影 | 成人免毛片| 欧美一区二区免费 | 久草在线 | 日韩av福利| 亚洲 欧美 精品 | 欧美精品亚洲精品日韩精品 | 欧洲免费毛片 | 暖暖成人免费视频 | 日韩av福利| 啵啵影院午夜男人免费视频 | a级毛片久久 | 日韩激情欧美 | 免费毛片一区二区三区久久久 | 欧美精品成人在线视频 | 国产欧美日本 | 国产成人精品无人区一区 | 国内自拍视频网 | 亚洲成人免费在线观看 | 国产精品不卡一区 | 久久99国产精品 | 欧美日韩精品网站 | 欧美欧美欧美 | 精品免费视频 | 97免费在线观看视频 | 综合久久国产九一剧情麻豆 | 精品成人av | 日韩午夜电影 | 免费一二区 | 羞羞的视频在线免费观看 | 欧美一区二区三区 | 亚洲a网站 | 欧美激情综合色综合啪啪五月 | 91精品国产综合久久久久久丝袜 | 精品香蕉一区二区三区 | 亚洲精品成人av | 久久综合一区二区 | 国产精品视频网站 | 久久久久久久久久久久网站 | 国产日韩一区 | 黄片毛片一级 | 亚洲 激情 在线 | 亚洲精品色| 欧美激情一区二区三区四区 | 97视频在线 | 成人 在线 | 麻豆精品国产传媒 | 91精品国产乱码久久蜜臀 | 日韩在线视频第一页 | 国产免费自拍 | 久久综合九色综合欧美狠狠 | 亚洲成人福利在线观看 | 久久精品不卡 | 国产日韩在线视频 | 日韩精品一区二区三区视频播放 | 黄色一级片免费 | 亚洲精品系列 | 亚洲成人精品网 | 97久久精品午夜一区二区 | 古典武侠第一页久久777 | av在线影院| 久久精品在线 | 日本aⅴ毛片成人实战推荐 成人免毛片 | 精品视频在线免费观看 | 噜噜噜噜狠狠狠7777视频 | www夜夜操 | 日韩精品一区二区三区中文在线 | 日韩视频中文字幕 | 亚洲精品亚洲人成人网 | 精品国产一区二区三区成人影院 | 在线免费观看色视频 | 97视频精品 | 国产视频一二区 | 国产一区二区三区在线视频 | 日韩av视屏 | 日本高清中文字幕 | 在线观看成人小视频 | 成人不卡在线观看 | √天堂在线| 欧美一级艳片视频免费观看 | 久久久久久一区 | 九九热最新视频 | 日本一区二区不卡 | 黄色片网站在线看 | 国产综合久久久久久鬼色 | 国产a区 | 国产精品久久7777 | 青青草久久网 | 色吊丝2288sds中文字幕 | 精品久久不卡 | 国产在线观看免费 | 日韩av在线一区 | 日韩中文在线播放 | av一区二区三区四区 | 亚洲精品久久久久久久久久久 | 亚洲一区二区在线视频 | 在线亚洲一区二区 | 国产色婷婷 | 国产精品不卡视频 | 久久久久久成人 | 91麻豆精品国产91久久久资源速度 | 久久久精品亚洲 | 一区二区三区在线观看视频 | 亚洲91精品 | 91av爱爱 | 国产精品久久久久久吹潮 | 日日摸日日碰夜夜爽不卡dvd | 欧美成人一区二区三区片免费 | 欧美在线观看一区 | 亚洲骚片 | 免费毛片网 | 久久久久久av | 91在线视频观看 | 中文字幕影院 | 欧美一级播放 | 亚洲aⅴ| 五月天婷婷在线视频 | 最新国产毛片 | 不卡一区二区三区四区 | jlzzjlzz亚洲日本少妇 | 久久精品久久精品国产大片 | 在线观看成人 | 国产一区二区三区在线 | 中文字幕视频免费观看 | 污色视频在线观看 | 一区二区三区免费av | 99这里只有精品 | 亚洲视频在线观看免费 | 91精品国产乱码久久久久久久久 | 一区二区三区四区在线 | 中文字幕免费看 | 日韩视频中文字幕 | 日韩av在线中文字幕 | 久久久久久艹 | 日本色道视频 | 欧美成人精品一区二区三区 | 成人aaaa| 欧美一级小视频 | 中文字幕乱码亚洲精品一区 | 91久久久久久久久 | 国产三级黄色毛片 | 91免费看 | 精品久久久久久久人人人人传媒 | 91色在线观看 | 三级免费毛片 | 亚州国产 | 免费一区二区三区 | 午夜精品久久久久久久久久久久 | 狠狠骚 | 一区二区精品视频 | 亚洲 中文 欧美 日韩 在线观看 | 国产富婆一级全黄大片 | 欧美视频精品在线观看 | 国产精品久久久久久婷婷天堂 | 欧美成人黄激情免费视频 | 在线免费色视频 | 日韩3级在线观看 | 午夜电影福利 | 精品亚洲自拍 | 羞羞视频免费看 | 免费观看日韩av | 毛片aaa | 久久九九国产精品 | 日韩在线欧美 | 777色狠狠一区二区三区 | www.44181com| 色综久久| 一区免费视频 | 亚洲高清av在线 | 亚洲精选免费视频 | 国产女人免费看a级丨片 | 亚洲一区精品在线 | 亚洲国产成人精品久久 | 中文字幕 国产精品 | 久久99国产精品久久99果冻传媒 | 蜜桃免费视频 | 四虎永久网址 | 国产精品久久久久久久美男 | 狠狠操电影 | 久久久久久久成人 | 午夜精品一区二区三区在线播放 | 欧美a级成人淫片免费看 | 不卡的免费av | 色综合99 | 国产日韩在线视频 | 国产综合久久 | 免费激情网站 | 亚洲一区二区三区四区的 | 伊人久操| 精品无码久久久久国产 | 久久国内精品 | 日韩成人在线视频 | 日韩一区二区精品视频 | 性做久久久久久久免费看 | 精品国产乱码久久久久久影片 | 久久亚洲一区 | 香蕉久久网 | 秋霞电影院午夜伦 | 国产精品久久久久久久久免费桃花 | 国产99久| 日韩久久久 | 亚洲视频在线观看一区二区三区 | 午夜亚洲福利 | 国产精品视频一区二区三区不卡 | 中文字幕91 | 在线第一页 | 91久久精品一区 | 国产精品久久 | 久久久久久99 | 久久99精品视频 | 国内福利视频 | 国产精品久久九九 | 日韩一区二区三区在线观看 | 一区二区三区视频播放 | 国产中文字幕一区 | 自拍视频在线观看免费 | 国产免费拔擦拔擦8x高清在线人 | 香蕉久久夜色精品国产使用方法 | 黄色三级视频 | 日本久久精品一区 | 亚洲不卡视频 | 超碰最新网址 | 精品久久中文字幕 | 久久久久久av | 成人亚洲精品 | 成人美女免费网站视频 | 久热av中文字幕 | 草草网站 | 国产高清精品一区二区三区 | 日操干| 国产福利视频在线观看 | 日本1区2区| 日韩国产欧美 | 草草视频网站 | 我要看免费黄色片 | 一级毛片在线 | 中文字幕 在线观看 | 日韩一区二区三区在线观看 | 日韩av免费看 | 在线观看中文字幕 | 国产高清久久久 | 精品一区二区久久 | 成人免费crm在线观看 | 日夜夜精品视频 | 久久久久久久久久久久久九 | 国产日韩欧美一区二区 | 日韩av在线不卡 | 久久狠狠 | 一区二区在线看 | 国产自产才c区 | 亚洲欧洲精品成人久久奇米网 | 亚洲欧洲一区二区 | 国产精品久久久久久久久久99 | 精品久久久一区 | 精品天堂 | 作爱视频免费看 | 人人人人澡 | 精品九九九 | 亚洲成人一区二区三区 | 青青草免费在线视频 | 九九色综合 | 99免费视频 | 男女深夜视频 | 国产欧美精品一区二区三区 | 日韩午夜电影 | 成人av电影网址 | 91超碰caoporm国产香蕉 | 九九九色 | v片网站 | 欧美日韩国产在线播放 | 伊人久久综合 | 久久99爱视频 | 天天爽夜夜爽夜夜爽精品视频 | 日本综合久久 | 成人福利视频网 | 在线亚洲一区 | 国产成人av在线 | 欧美成人精品一区二区三区 | 亚洲色域网 | 99综合 | 免费日本视频 | av网站免费 | 成人午夜精品一区二区三区 | 波多野结衣三区 | 欧美色综合 | 亚洲特级| 久草久 | 国产成人综合视频 | 精品一区二区三区免费毛片 | 欧美jizzhd精品欧美巨大免费 | 色先锋影音 | 一本大道久久a久久精二百 国产精品片aa在线观看 | 亚洲一区在线免费观看 | 色啪网站| 在线观看 亚洲 | 亚洲精品一区二区三区蜜桃久 | 欧美日韩成人激情 | 成人午夜在线 | 69av片| 亚洲精品一区二区三区在线 | 日本手机在线视频 | 亚洲在线一区二区 | 五月在线视频 | 国产日韩精品在线 | 四虎影视网址 | 亚洲欧美网站 | 欧美激情在线精品一区二区三区 | 青青草免费在线视频 | 成人一区二区电影 | 黄色毛片视频网站 | 日韩精品久久久久久 | 欧美激情视频一区二区三区 | 久久电影一区 | 国产精品片aa在线观看 | 日韩影院在线 | 国产精品国产a级 | 97av| 日韩视频在线一区二区 | 色播久久久 | 小草av | 蜜桃视频网站在线观看 | 日韩一级在线免费观看 | 精品国产三级a在线观看 | 国产拍拍视频 | av黄色在线观看 | 久久国产精品无码网站 | 国产成人午夜视频 | 亚洲精品一 | 亚洲免费小视频 | 亚洲狠狠爱 | aaaa网站| 国产精品美女av | 综合网激情五月 | 91在线看片 | 黄色一级片免费 | 日韩午夜视频在线观看 | 亚洲视频 欧美视频 | 久久久久久极品 | 天天干夜夜拍 | 日韩精品一区在线视频 | 国产一区亚洲二区三区 | 青青草久草 | 国产96在线视频 | 6080yy精品一区二区三区 | 国产精品7 | 亚洲另类视频 | www.国产精品 | 国产精品综合 | 天天综合视频 | 欧美日韩在线一区 | 91麻豆精品国产91久久久资源速度 | 免费看的毛片 | 久久精品二区 | 欧美综合久久 | 国产中文字幕一区 | 九九综合九九综合 | 97爱爱视频 | 三级色网站| 人人鲁人人莫一区二区三区 | 亚洲午夜精品视频 | 日本成人黄色网址 | a√天堂资源在线 | 四季久久免费一区二区三区四区 | 久久久精品国产 | 一级黄色爱爱视频 | 日韩在线观看 | 欧美视频免费在线 | 婷婷色视频 | 99久久精品免费看国产一区二区三区 | 国产精品91网站 | 天堂中文视频在线观看 | 亚洲人成在线播放 | 成人精品在线视频 | 国产精品99久久久久久久vr | 亚洲国产精品久久久久秋霞不卡 | caoporn国产精品免费公开 | 在线欧美日韩 | 最新国产中文字幕 | 91看片| 亚洲精品一区二区三区在线 | 在线国产欧美 | 中文在线一区 | 国产精品 日韩 | 人人鲁人人莫一区二区三区 | 国产私拍视频 | 亚洲综合首页 | 久久国产成人 | 午夜午夜精品一区二区三区文 | 久久99国产一区二区三区 | 精品一区二区三区免费 | 天天精品| 国产精品久久久久久久久久妞妞 | 中文字幕在线视频网站 | 四季久久免费一区二区三区四区 | 99热精品在线 | 国产免费av网站 | 在线91| 亚洲成av| a级毛片黄 | 狠狠干狠狠干 | 亚洲成人首页 | 日本三级电影网站 | 久久久久久九九 | 国产成年人小视频 | 欧美另类久久 | 国产精品久久久久久久久久东京 | 成人欧美一区二区三区 | 激情欧美一区二区三区 | 99久热精品 | 国产伦精品一区二区三区四区视频 | 日韩欧美在线观看一区二区三区 | 一区二区日韩精品 | 亚洲免费观看视频 | 在线观看免费黄色片 | 国产日韩av在线 | 中文天堂在线观看视频 | 国产精品视频免费 | 中午字幕在线观看 | 久久成人高清 | 亚洲一区二区中文字幕 | 欧美 日韩 国产 成人 在线 | 国产激情精品一区二区三区 | 久热精品国产 | 精品一区二区三区久久 | 久久99深爱久久99精品 | 亚洲韩国精品 | 久久国产欧美日韩精品 | 日日夜夜精品免费视频 | 在线观看www | 一区二区三区在线 | 欧 | 在线日韩成人 | 国产高清自拍 | 成人在线观 | 91秦先生艺校小琴 |