精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從0到1設計通用數據大屏搭建平臺

大數據 數據可視化
本文將通過敏捷BI平臺的通用大屏搭建能力的實現方案,來講解一下通用可視化搭建平臺整體的設計思路。

作者 | vivo 互聯網大數據團隊- Wang Lei

一、前言

一直以來,許多產品平臺都在嘗試通過可視化搭建的手段來降低 GUI 應用的研發門檻,提高生產效率。隨著我們業務的發展,數據建設的完善,用戶對于數據可視化的訴求也日益增多,而數據大屏是數據可視化的其中一種展示方式,它作為大數據展示媒介的一種,被廣泛運用于各種會展、公司展廳、發布會等。

相比于傳統手工定制的圖表與數據儀表盤,通用大屏搭建平臺的出現,可以解決定制開發, 數據分散帶來的應用開發、數據維護成本高等問題,通過數據采集、清洗、分析到直觀實時的數據可視化展現,能夠多方位、多角度、全景展現各項指標,實時監控,動態一目了然。

本文將通過敏捷BI平臺的通用大屏搭建能力的實現方案,來講解一下通用可視化搭建平臺整體的設計思路。

二、快速了解可視化大屏

2.1 什么是數據可視化

從技術層面上來講,最直觀的就是前端可視化框架:Echart、Antv、Chart.js、D3.js、Vega 等,這些庫都能幫我們快速把數據轉換成各種形式的可視化圖表。

圖片

從業務層面來講, 其最主要的意義就在于通過數據 -> 圖表組合 -> 可視化頁面這一業務流程,來幫助用戶更加直觀整體的分析不同行業和場景的趨勢和規律。

圖片

所以在數據領域里,對于復雜難懂且體量龐大的數據而言,圖表的信息量要大得多,這也是數據可視化最根本的目的。

2.2 可視化大屏都有哪些部分

主要由 可視化組件 + 事件交互 + 坐標關系  組成,效果如下圖所示:

圖片

2.3 可視化大屏和常見的BI報表看板的區別

經常會有同學會問到,可視化大屏和BI報表看板的區別是什么?

這里簡單的做一下介紹:

  1. 大屏和報表看板都只是BI的其中一種展現方式,大屏更多是通過不同尺寸的顯示器硬件上進行投屏,而報表看板更多是在電腦端進行展示使用。
  2. 大屏更加注重數據動態變化 ,會有極強的視覺體驗和沖擊力,提供豐富的輪播動畫、表格滾動等動畫特效。而報表看板更注重交互式數據探索分析,例如上卷下鉆、排序、過濾、圖表切換、條件預警等。

三、設計思路

3.1 技術選型

  • 前端框架:React 全家桶(個人習慣)
  • 可視化框架:Echarts\DataV-React (封裝度高,json結構的配置項易拓展) D3.js(可視化元素粒度小、定制能力強)
  • 拖拽插件:dnd-kit (滿足樹狀結構視圖的跨組件拖拽)
  • 布局插件:React-Grid-Layout(網格自由布局,修改源碼,支持多個方向的拖拽,自由布局、鎖定縮放比等)

3.2 架構設計

下圖是我們搭建平臺的整體架構設計:

圖片

整個大屏搭建平臺包含四個非常重要的子系統和模塊:

  • 可視化物料中心:是整個平臺最基礎的模塊,我們在開源的圖表庫和自主開發的可視化組件上面定義了一層標準的 DSL 協議,這個協議和接入 畫布編輯器 的協議是對應的,目前已經有 40+ 相關組件,組件數量還在不斷增長。
  • 畫布編輯器:是搭建平臺的核心與難點,支持頁面布局配置、頁面交互配置和組件數據配置等功能,另外還支持代碼片段的配置,也可以稱得上是一個低代碼平臺。
  • 數據中心:是提供專門用于連接不同數據源的服務,例如直連 MySQL、ClickHouse、Elasticsearch、Presto 等,提供了大屏搭建所需要的原始數據。
  • 管理中心:是大屏的后臺運營管理模塊,包含了大屏模版管理、大屏發布下線、訪問權限等管理功能。

3.3 搭建流程

通過上面提到的大屏組成元素,我們可以分析總結出大屏搭建主流程如下圖所示:

圖片

四、核心功能實現

接下來我們會逐一對平臺幾個核心功能實現進行解析:

1、大屏自適應布局

背景:解決頁面錯亂問題,實現多種分辨率的大屏適配:

思考:首先我們想到的是移動端適配主流的 vh、vw、rem組合的方式以及 font.js+rem 等兩種方案。第一種方案主要是通過媒體查詢來定義父級大小,然后對組件的height、margin、padding等多種css屬性采用rem作為單位,繼承父級設置等單位(1vw),實現自適應適配,第二種方案是引用第三方腳本,通過在main.js中寫代碼計算,使用rem進行繼承,實現適配。

① vh、vw、rem組合

//vw vh單位 w3c的官方解釋 vw:1% of viewport’s width vh:1% of viewport’s height//例如,設計稿的寬度為1920px,則1vw=19.2px,為了方便計算,我們將html元素的font-size大小設置為100px,也就是5.208vw=100px。body,html {     font-size:5.208vw}

②  font.js + rem 

//監聽窗口的oversize事件,來動態計算根節點字體大小,再配合rem做適配(function(doc, win) {    const docEl = doc.documentElement    const resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'    const recalc = function() {      let clientWidth = docEl.clientWidth      if (!clientWidth) return      docEl.style.fontSize = 100 * (clientWidth / 1920) + 'px'    }    if (!doc.addEventListener) return    win.addEventListener(resizeEvt, recalc, false)    doc.addEventListener('DOMContentLoaded', recalc, false)})(document, window)

缺陷:當我們大屏里面使用到的第三方插件,它的樣式使用的是px為單位時,例如 line-height 的設置為20px,此時就不能適應行高,就會出現重疊等錯亂問題。或者我們利用 postcss-px2rem 插件進行全局替換,但是在使用過程中,需要注意對已經處理過適配的插件,例如 Ant Design,否則引入的antd 控件使用會出現樣式錯亂的問題

解決思路:采用了css3 的縮放 transform: scale(X,Y) 屬性,主要是通過監聽瀏覽器窗口的 onresize 事件,當窗口大小發生變化時,我們只需要根據大屏容器的實際寬高,去計算對應的放大縮小的比例,就可以實現布局的自適應了,我們也提供了不同的布局適應效果,例如等高縮放、等寬縮放、全屏鋪滿等,不同的縮放方式,決定了我們在計算寬高比例的優先級。因此我們后面在做畫布的縮小功能,也可以直接使用這種方案來實現。

// 基于設置的設計稿尺寸 換算對應的寬高比useEffect(()    const wR = boxSize.width / viewWidth;    const hR = boxSize.height / viewHeight;    setBgScaleRatio(wR);    setBgHeightScaleRatio(hR);}, [boxSize, viewWidth, viewHeight]);//根據等寬、等高、全屏等不同的縮放比例 計算scale值const getScale = (proportion, x, y) =>    if (proportion === 'radioWidth') {        return `scaleX(${x})`    }    if (proportion === 'radioHeight') {        return `scaleY(${y})`    }    return `scale(${x}, ${y})`}

2、大屏組件通用開發流程設計

背景:隨著可視化組件的增多、新增組件流程繁瑣冗長,為了避免重復的造輪子以及后續引入第三方組件,需要制定一套通用的組件開發流程:

設計思路:組件 = component 組件主體 + schema 組件配置協議層 + 組件定義層(類型、從屬關系、初始化寬高等)

① component 組件主體:

  • 可視化框架選型:行業主流可視化庫有 Echart、Antv、Chart.js、D3.js、Vega、DataV-React 基于可視化的通用性和定制性的需求,我們選擇了 Echart、DataV-React 作為基礎組件的開發框架,面對定制性要求更高的自定義組件,我們選擇了可視化粒度更小的 D3.js。
  • 封裝通用 Echarts 組件(初始化、事件注冊、實例注銷等):

// initialization echartsconst renderNewEcharts = ()    // 1. new echarts instance    const echartObj = updateEChartsOption();    // 2. bind events    bindEvents(echartObj, onEvents || {});    // 3. on chart ready    if (typeof onChartReady === 'function') onChartReady(echartObj);    // 4. on resize    echartObj.resize();};// bind the eventsconst bindEvents = (instance, events) =>    const _bindEvent = (eventName, func) =>(param) =>           func(param, instance);       });    };    // loop and bind    for (const eventName in events) {        if (Object.prototype.hasOwnProperty.call(events, eventName)) {            _bindEvent(eventName, events[eventName]);        }    }};// dispose echarts and clear size-sensorconst dispose = ()    if ($chartEl.current) {       clear($chartEl.current);       // dispose echarts instance       (echartsLib || echarts).dispose($chartEl.current);    }};

  • 封裝通用 DataV 組件(DataV-React、自定義等組件入口,統一負責配置、數據收集、監聽resize)
const DataV: React.FC<DataVProps> = (props) =>    const { config } = props;    const [renderCounter, setRenderCounter] = useState(0);    const $dataVWarpEl = useRef(null);    const $componentEl = useRef(null);()        // 綁定容器size監聽        const resizefunc = debounce(()            $componentEl.resize();        }, 500)       // fixme       addResizeListener($dataVWarpEl.current, resizefunc);       return ()           // 清除訂閱           removeResizeListener($dataVWarpEl.current, resizefunc);       };    }, []);    return (        <DataVWarp ref={$dataVWarpEl}>            <CompRender cnotallow={config} ref={$componentEl} />        </DataVWarp>    );};

② schema 組件配置協議層 + 組件定義層(類型、從屬關系、初始化寬高等)

我們自定義了一套 schema 組件的DSL,結構協議層。通過DSL約定了組件的配置協議,包括組件的可編輯屬性、編輯類型、初始值等,之所以定義一致的協議層,主要是方便后期的組件擴展,配置后移。

圖片

  • JSON Schema設計:

{    headerGroupName: '公共配置',                         //配置所屬類型    headerGroupKey: 'widget',                           //配置所屬類型key值 相同的key值都歸屬一類    name: '標題名稱',                                    //屬性名稱    valueType: ['string'],                              //屬性值類型    optionLabels: [],                                   //服務下拉列表、多選框等控件的標簽名    optionValues: [],                                   //服務下拉列表、多選框等控件的標簽值    tip: false,                                         //配置項的 Tooltip 注解    ui: ['input'],                                      //使用的控件類型    class: false,                                       //控件類名,定制控件樣式    css: { width: '50%'},                               //修改控件樣式    dependencies: ['widget,title.show,true'],           //屬性之間的聯動,規則['配置所屬類型, 屬性key, 屬性值']    depContext: DepCommonShowState,                     //屬性之間的校驗回調方法    compShow: ['line'],                                 //哪些組件可配置    dataV: { key: 'title.text', value: '' },            //配置的key值和默認value值},

  • 表單DSL設計:

圖片

收益:以上是我們定制的DSL結構協議層,用戶只需要填寫Excel表格,就可以實現動態表單的創建,實現組件配置項分類、配置復用、配置項之間聯動、屬性注釋等功能。目前屬性配置器已經支持了常用的15種的配置UI控件,通過定制的DSL結構協議層,可以快速完成組件的配置界面初始化,為后續規劃的組件物料中心做準備。

3、拖拽器實現

背景:React-Grid-Layout 拖拽插件不支持自由布局和組件不同緯度拖拽:

解決方案:通過分析源碼,對不同緯度的拖拽事件以及拖拽目標碰撞事件進行了重寫,并且也拓展了鎖定寬高比、旋轉透明度等功能。

源碼分析:

圖片

resize伸縮特性增強(優化),拖拽的同時,除了修改容器寬高外,也動態調整了組件的坐標位置

// CSS Transforms support (default)if (useCSSTransforms) {    if (activeResize) {        const { width, height, handle } = activeResize;        const clonePos = { ...pos };        if (["w", "nw", "sw"].includes(handle)) {            clonePos.left -= clonePos.width - width;        }        if (["n", "nw", "ne"].includes(handle)) {            clonePos.top -= clonePos.height - height;        }        style = setTransform(clonePos, this.props.angle);    } else {        style = setTransform(pos, this.props.angle);    }}

堆疊顯示,自由布局(優化),通過控制布局是否壓縮,動態調整拖拽目標的層級zIndex來實現多圖層組件操作交互和自由定位。

// 每次拖拽時zIndex要在當前最大zIndex基礎上 + 1,并返回給組件使用const getAfterMaxZIndex = useCallback(i    if (i === curDragItemI) {        return;    }    setCurDragItemI(i);maxZIndex maxZIndex + 1);    return maxZIndex;}, []);

改造后效果展示

圖片

4、大屏狀態推送

背景:大屏的后期維護需要有版本發布自更新以及大屏下線等需求,這個時候就需要有一套消息通知機制,通過命令來控制大屏的運行狀態。

解決方案:基于websocket通信機制,建立長鏈接,實現了心跳及重連機制,實時對上線發布后的大屏進行更新或下線管理。

圖片

五、效果預覽

六、總結

本文通過可視化頁面搭建、no/low code 平臺、Schema 動態表單等技術思想來分析講解了如何去設計開發一個通用的數據大屏搭建平臺。

當前的設計方案基本滿足了數據大屏的核心能力搭建需求。如果想實現更富有展現力, 滿足更多場景的大屏搭建平臺, 我們還需要進一步提高平臺的擴展性和完善整體的物料生態, 具體規劃如下:

  • 豐富和拓展大屏組件&配置能力,覆蓋不同行業的可視化場景。
  • 可視化物料平臺的搭建,沉淀優秀的可視化組件、大屏模版素材。
  • 3D以及動效渲染引擎開發實現。
責任編輯:未麗燕 來源: vivo互聯網技術
相關推薦

2022-06-13 07:02:02

Zadig平臺自動化

2023-03-06 11:35:55

經營分析體系

2022-10-14 07:25:49

2022-03-15 11:51:00

決策分析模型

2019-12-13 09:00:58

架構運維技術

2021-01-06 08:32:30

DTS數據傳輸數據庫

2019-07-31 10:18:17

Web 開發Python

2017-05-27 09:23:10

IOS框架APP框架代碼

2021-07-12 17:23:47

零設計可視化引擎

2021-06-16 08:30:36

Dooring可視化數據源設計剖析

2021-06-16 07:05:03

安全

2024-04-24 08:15:40

數據模型大模型AI

2016-12-30 17:04:57

2017-01-05 21:05:40

2016-11-28 16:23:23

戴爾

2021-11-19 08:30:39

H5-Dooring 可視化組件商店

2021-07-27 08:29:33

可視化組件商店H5-Dooring

2023-11-15 08:14:35

2022-05-09 08:35:43

面試產品互聯網

2023-04-10 07:40:50

BI 體系數據中臺
點贊
收藏

51CTO技術棧公眾號

日韩在线免费高清视频| 色狠狠色噜噜噜综合网| 91在线免费看片| 久久久久久久99| 国产成人高清| 制服丝袜av成人在线看| 2018国产在线| 亚洲乱亚洲乱妇| 国产**成人网毛片九色| 欧洲成人在线视频| 黄色a级片在线观看| 欧美黄色影院| 在线91免费看| 91av在线免费播放| 亚洲成人影院麻豆| 97精品国产97久久久久久久久久久久| 国产精品一区二区三区免费视频| 久久久久亚洲天堂| 日韩在线精品| 亚洲精品视频免费| 一二三区视频在线观看| 成人福利片在线| 精品久久久久久中文字幕一区奶水| 亚洲精品国产一区| 亚洲三区在线播放| 国产福利不卡视频| 国产精品一区二区3区| 九九热精品视频在线| 午夜精品视频| 久久九九亚洲综合| 亚洲av毛片基地| 羞羞色国产精品网站| 欧美tickling挠脚心丨vk| 亚洲人视频在线| 成人在线观看免费视频| 一本久久综合亚洲鲁鲁五月天 | 亚洲乱码在线| 在线观看不卡av| 亚洲成人黄色av| 丝袜av一区| 亚洲精品aⅴ中文字幕乱码| 国产精品中文久久久久久| 国产成人免费| 欧美日韩日本视频| 一道本视频在线观看| 香蕉视频亚洲一级| 日本久久一区二区三区| 日韩视频第二页| 忘忧草在线影院两性视频| 午夜精品在线视频一区| 日本人体一区二区| 17videosex性欧美| 欧美日韩国产一区在线| 男人添女人下面高潮视频| 超碰在线资源| 午夜精品国产更新| 日本在线xxx| 欧美大胆a人体大胆做受| 黑人欧美xxxx| 日韩一级片播放| 日本美女久久| 91精品福利在线一区二区三区 | 九九精品在线播放| 欧美日韩免费做爰视频| 国内精品福利| 97av在线视频免费播放| 欧美激情黑白配| 久久人人精品| 国产精品免费电影| 国产精品女人久久久| 国产精品一区二区在线看| yellow视频在线观看一区二区| 成人高潮片免费视频| av一二三不卡影片| 欧美资源一区| 国产在线一区二区视频| 亚洲一区精品在线| 久久国产色av免费观看| 色婷婷成人网| 精品av久久707| 素人fc2av清纯18岁| 国产毛片一区二区三区 | 免费成人深夜蜜桃视频| 综合五月婷婷| 2019中文在线观看| 岳乳丰满一区二区三区| 国产成人免费视频| 久久综合福利| 黄色网在线播放| 黄色精品一区二区| 蜜臀一区二区三区精品免费视频 | 蜜臀av一区二区| 99re在线| 国产精品免费播放| 亚洲综合999| 噼里啪啦国语在线观看免费版高清版| 精品国产乱码一区二区三区 | 97久草视频| 高清美女视频一区| 亚洲在线成人精品| 久久99999| 精品女人视频| 精品国产一区二区三区久久久| 精品一区免费观看| 蓝色福利精品导航| 久久综合九色综合久99| av电影高清在线观看| 一本到不卡精品视频在线观看| 久久综合在线观看| 国产尤物久久久| 欧美精品videos| 一级黄色片免费看| 久久久久国产精品人| 国产 欧美 日本| 国产激情欧美| 亚洲欧美在线免费观看| 国产精品111| 国产伦精品一区二区三区免费迷| 欧美日韩在线播放一区二区| bl视频在线免费观看| 欧美日韩www| 人妻av无码一区二区三区| 亚洲黄色在线| 91九色在线免费视频| 免费黄色网址在线观看| 亚洲高清视频中文字幕| 欧美在线a视频| 久久精品国产99久久| 日本乱人伦a精品| 亚洲三区在线观看无套内射| 亚洲成人自拍偷拍| 91人人澡人人爽| 欧美三区在线| 成人国产一区二区| 影音先锋在线播放| 欧美一二三四区在线| 亚洲一级二级片| 麻豆视频观看网址久久| 日韩免费电影一区二区| 欧美激情喷水| 亚洲天堂av电影| 日本久久综合网| 久久久亚洲欧洲日产国码αv| www.爱色av.com| 日韩在线麻豆| 日本免费一区二区三区视频观看| 女人偷人在线视频| 色香蕉久久蜜桃| 精品无码国产污污污免费网站| 午夜在线观看免费一区| 狠狠干一区二区| 色老头在线一区二区三区| 亚洲精品久久久久久久久久久久| 日韩网红少妇无码视频香港| 不卡视频在线观看| 久久国产亚洲精品无码| 在线一级成人| 国产精品一区二区三区免费视频| 日本电影全部在线观看网站视频| 欧美日韩一区二区不卡| 免费成人美女女在线观看| 国产综合色产在线精品 | 一本色道久久精品| 欧美日韩国产高清视频| 日本黄色一区| 欧美成人精品xxx| 亚洲精品久久久久久动漫器材一区| 一区二区三区欧美在线观看| 久草视频福利在线| 国产欧美三级| 亚洲三区在线| 亚洲无线观看| 日韩av高清不卡| 在线播放麻豆| 精品国产一区二区三区久久久蜜月| 欧美三日本三级少妇99| 国产欧美一区二区精品性色超碰| 欧美一级特黄a| 欧美日韩一区二区三区四区在线观看 | 国产综合色在线视频区| 日本wwwcom| 精品久久不卡| a级国产乱理论片在线观看99| www.51av欧美视频| 中文字幕日韩综合av| 精品国产区一区二| 色综合久久中文字幕| 五月综合色婷婷| 2020国产成人综合网| 波多结衣在线观看| 亚洲三级影院| 亚洲欧美电影在线观看| 果冻天美麻豆一区二区国产| 国产精品扒开腿爽爽爽视频| 日本在线观看大片免费视频| 国产午夜精品全部视频在线播放 | 亚洲精品v欧美精品v日韩精品| 免费黄色小视频在线观看| 亚洲欧美色综合| 老鸭窝一区二区| 国产精品18久久久久久久网站| 日韩中文字幕三区| 综合激情婷婷| 日韩免费av电影| 日韩成人动漫在线观看| 成人女保姆的销魂服务| 女生影院久久| 久久久噜噜噜久久| 久久黄色美女电影| 亚洲最大在线视频| 香蕉视频911| 欧美一区日韩一区| 最近中文字幕在线观看视频| 午夜精品aaa| 精品欧美一区二区久久久久| 国产视频一区在线观看| 成人做爰www看视频软件| 久久国产精品99久久久久久老狼| 99999精品视频| 亚洲视频碰碰| 日本高清视频免费在线观看| 91欧美大片| 日日夜夜精品网站| 九九热爱视频精品视频| 国产精品区一区| 精品一区二区三区中文字幕| 国产在线视频欧美| 成人亚洲综合| 国产精品美女主播在线观看纯欲| 欧美成人a交片免费看| 午夜精品久久久久久久久久久久| 1区2区3区在线视频| 日韩在线免费高清视频| av在线电影观看| 亚洲深夜福利在线| 欧美人体大胆444www| 精品视频偷偷看在线观看| 蜜桃av噜噜一区二区三区麻豆| 91精品国产欧美一区二区18 | 亚洲 日韩 国产第一区| 亚洲另类春色校园小说| 国内精品国语自产拍在线观看| 日韩欧美一级| 国产91亚洲精品一区二区三区| 九色精品蝌蚪| 粉嫩av免费一区二区三区| 亚洲性视频在线| 国产精品国模大尺度私拍| 91免费精品国偷自产在线在线| 91原创国产| 加勒比中文字幕精品| 国产精品一国产精品最新章节| 大奶一区二区三区| 精品久久久久久乱码天堂| 群体交乱之放荡娇妻一区二区| 麻豆精品视频| 精品国产一区二区三区香蕉沈先生 | 一区二区三区精品在线| 欧美爱爱小视频| 亚洲大片精品永久免费| 毛片视频网站在线观看| 在线国产亚洲欧美| 一二区在线观看| 欧美v日韩v国产v| 天堂在线中文网| 亚洲一级片在线看| 精品欧美色视频网站在线观看| 久久97久久97精品免视看| gogo久久| 国产精品麻豆va在线播放| 少妇高潮一区二区三区99| eeuss一区二区三区| 另类图片第一页| 日韩一区免费观看| 亚洲老妇激情| 无码人妻精品一区二区三区在线| 可以免费看不卡的av网站| 中文字幕av专区| 国产成人免费视频网站 | 丰满少妇一级片| 亚洲女人被黑人巨大进入| 拍真实国产伦偷精品| 欧美激情久久久| 国产亚洲一区二区手机在线观看 | 91看片在线免费观看| 国产乱一区二区| 成人性生交大免费看| 亚洲欧美日韩系列| 国产一级精品视频| 欧美人与性动xxxx| 三级网站在线看| 中文字幕欧美亚洲| 男人天堂亚洲天堂| 国产精品久久久久久久9999| 精品一区二区三区中文字幕视频 | 国色天香一区二区| 成人中文字幕av| 成人激情av网| 国产男女猛烈无遮挡在线喷水| 亚洲成在人线在线播放| 91精品国自产| 亚洲免费精彩视频| 欧美黑人猛交| 国产在线精品一区免费香蕉 | 亚洲欧洲在线观看| 永久免费网站在线| 国产欧洲精品视频| 女厕嘘嘘一区二区在线播放| 成人午夜视频免费观看| 日本不卡一二三区黄网| 人妻激情偷乱频一区二区三区| 国产精品三级av| 欧美 日韩 精品| 欧美tickling网站挠脚心| 女女色综合影院| 国产精品9999| 亚洲婷婷影院| av免费观看网| av中文一区二区三区| 永久久久久久久| 欧美日韩国产成人在线免费| 天堂在线中文资源| 欧美精品久久久久| 国产免费av国片精品草莓男男| 色狠狠久久av五月综合|| 亚洲综合社区| 国产精品一区二区在线免费观看| 亚洲视频一区二区在线| 国产精品熟女视频| 亚洲人午夜精品免费| 亚洲天堂手机| 精品高清视频| 日韩一级网站| 免费黄色三级网站| 亚洲成人在线观看视频| 丰满少妇高潮在线观看| 欧美激情免费视频| 99久久人爽人人添人人澡| 国产人妻人伦精品| 国产在线一区二区综合免费视频| 亚洲色图欧美色| 欧美日韩小视频| 日韩免费啪啪| 91精品综合久久久久久五月天| 色无极亚洲影院| 亚洲精品永久视频| 亚洲三级视频在线观看| 国产女人18毛片水18精| 久久成人av网站| 香蕉成人app| 91免费黄视频| 久久先锋影音av| 无码人妻av一区二区三区波多野| 日韩久久免费电影| 精品国产欧美日韩一区二区三区| 日韩欧美电影一区二区| 久久精品av麻豆的观看方式| 久久久久久久久久97| 91麻豆精品国产91久久久资源速度 | 亚洲av熟女高潮一区二区| 亚洲va国产va欧美va观看| 亚洲av片一区二区三区| 国产精品h在线观看| 色综合色综合| 久久发布国产伦子伦精品| 香蕉成人伊视频在线观看| 天堂av电影在线观看| 日av在线播放中文不卡| 欧美r级电影| 精人妻一区二区三区| 欧美色道久久88综合亚洲精品| 欧美色视频免费| 成人国产精品免费视频 | 日本va中文字幕| 亚洲精品美国一| 亚洲aaa在线观看| 国产精品情侣自拍| 欧美日一区二区三区在线观看国产免| 亚洲国产精品成人综合久久久| 在线观看国产91| 天堂成人av| 日本免费高清一区二区| 国产一区二区三区免费看 | 久久综合久久久| 国产综合久久久久久久久久久久| 日本少妇久久久| 色悠悠久久久久| 国产精品x8x8一区二区| 一区二区在线播放视频| 亚洲一区二区三区美女| 国产在线视频网| 成人影片在线播放| 奇米精品一区二区三区四区| 久久久久久久蜜桃| 在线视频中文亚洲| 精品亚洲精品| 波多野结衣免费观看| 欧洲亚洲精品在线| 爱看av在线入口| 伊人色综合影院|