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

從零開發(fā)可視化大屏制作平臺(tái)(技術(shù)拆解版)

開發(fā) 前端
相比于傳統(tǒng)手工定制的圖表與數(shù)據(jù)儀表盤,可視化大屏制作平臺(tái)的出現(xiàn),可以打破抵消的定制開發(fā), 數(shù)據(jù)分散的問題,通過數(shù)據(jù)采集、清洗、分析到直觀實(shí)時(shí)的數(shù)據(jù)可視化展現(xiàn),能夠多方位、多角度、全景展現(xiàn)各項(xiàng)指標(biāo),實(shí)時(shí)監(jiān)控,動(dòng)態(tài)一目了然。

最近由于可視化大屏的服務(wù)器到期了, 用于演示的網(wǎng)站換了域名, 如果大家想體驗(yàn)或者學(xué)習(xí)可視化大屏設(shè)計(jì)思路, 可以移步新網(wǎng)址:

https://v6.dooring.vip

賬號(hào): xujiang156@qq.com  

密碼: 12345678

 接下來筆者就來帶大家一起看看我對(duì)的V6.Dooring可視化大屏方案設(shè)計(jì)和技術(shù)實(shí)現(xiàn)。

你將收獲

  • 可視化大屏產(chǎn)品設(shè)計(jì)思路
  • 主流可視化圖表庫(kù)技術(shù)選型
  • 大屏編輯器設(shè)計(jì)思路
  • 大屏可視化編輯器Schema設(shè)計(jì)
  • 用戶數(shù)據(jù)自治探索

在介紹之前, 我們先看看實(shí)現(xiàn)的效果展示.

效果預(yù)覽

圖片

圖片

圖片

方案實(shí)現(xiàn)

可視化大屏產(chǎn)品設(shè)計(jì)思路

目前很多企業(yè)或多或少的面臨“信息孤島”問題,各個(gè)系統(tǒng)平臺(tái)之間的數(shù)據(jù)無法實(shí)現(xiàn)互通共享,難以實(shí)現(xiàn)一體化的數(shù)據(jù)分析和實(shí)時(shí)呈現(xiàn)。

相比于傳統(tǒng)手工定制的圖表與數(shù)據(jù)儀表盤,可視化大屏制作平臺(tái)的出現(xiàn),可以打破抵消的定制開發(fā), 數(shù)據(jù)分散的問題,通過數(shù)據(jù)采集、清洗、分析到直觀實(shí)時(shí)的數(shù)據(jù)可視化展現(xiàn),能夠多方位、多角度、全景展現(xiàn)各項(xiàng)指標(biāo),實(shí)時(shí)監(jiān)控,動(dòng)態(tài)一目了然。

針對(duì)以上需求, 我們?cè)O(shè)計(jì)了一套可視化大屏解決方案, 具體包含如下幾點(diǎn):

圖片

上圖是筆者4個(gè)月前設(shè)計(jì)的基本草圖, 后期會(huì)持續(xù)更新. 通過以上的設(shè)計(jì)分解, 我們基本可以搭建一個(gè)可自己定制的數(shù)據(jù)大屏。

主流可視化圖表庫(kù)技術(shù)選型

圖片圖片

目前筆者調(diào)研的已知主流可視化庫(kù)有:

  • echart 一個(gè)基于 JavaScript 的老牌開源可視化圖表庫(kù)。
  • D3.js 一個(gè)數(shù)據(jù)驅(qū)動(dòng)的可視化庫(kù), 可以不需要其他任何框架獨(dú)立運(yùn)行在現(xiàn)代瀏覽器中,它結(jié)合強(qiáng)大的可視化組件來驅(qū)動(dòng) DOM 操作。
  • antv 包含一套完整的可視化組件體系。
  • Chart.js 基于 HTML5 的 簡(jiǎn)單易用的 JavaScript 圖表庫(kù)。
  • metrics-graphics 建立在D3之上的可視化庫(kù), 針對(duì)可視化和布置時(shí)間序列數(shù)據(jù)進(jìn)行了優(yōu)化。
  • C3.js 通過包裝構(gòu)造整個(gè)圖表所需的代碼,使生成基于D3的圖表變得容易。

我們使用以上任何一個(gè)庫(kù)都可以實(shí)現(xiàn)我們的可視化大屏搭建的需求, 各位可以根據(jù)喜好來選擇。

大屏編輯器設(shè)計(jì)思路

在上面的分析中我們知道一個(gè)大屏編輯器需要有個(gè)編輯器核心, 主要包含以下部分:

  • 組件庫(kù)
  • 拖拽(自由拖拽, 參考線, 自動(dòng)提示)
  • 畫布渲染器
  • 屬性編輯器

如下圖所示:

圖片

組件庫(kù)我們可以用任何組件封裝方式(react/vue等), 這里沿用H5-Dooring的可視化組件設(shè)計(jì)方式, 對(duì)組件模型進(jìn)行優(yōu)化和設(shè)計(jì)。

類似的代碼如下:

import { Chart } from '@antv/f2';
import React, { memo, useEffect, useRef } from 'react';

import styles from './index.less';
import { IChartConfig } from './schema';

const XChart = (props:IChartConfig) => {
  const { data, color, size, paddingTop, title } = props;
  const chartRef = useRef(null);
  useEffect(() => {
      const chart = new Chart({
        el: chartRef.current || undefined,
        pixelRatio: window.devicePixelRatio, // 指定分辨率
      });

      // step 2: 處理數(shù)據(jù)
      const dataX = data.map(item => ({ ...item, value: Number(item.value) }));

      // Step 2: 載入數(shù)據(jù)源
      chart.source(dataX);

      // Step 3:創(chuàng)建圖形語(yǔ)法,繪制柱狀圖,由 genre 和 sold 兩個(gè)屬性決定圖形位置,genre 映射至 x 軸,sold 映射至 y 軸
      chart
        .interval()
        .position('name*value')
        .color('name');

      // Step 4: 渲染圖表
      chart.render();
  }, [data]);
  return (
    <div className={styles.chartWrap}>
      <div className={styles.chartTitle} style={{ color, fontSize: size, paddingTop }}>
        {title}
      </div>
      <canvas ref={chartRef}></canvas>
    </div>
  );
};

export default memo(XChart);

以上只是一個(gè)簡(jiǎn)單的例子, 更具業(yè)務(wù)需求的復(fù)雜度我們往往會(huì)做更多的控制, 比如動(dòng)畫(animation), 事件(event), 數(shù)據(jù)獲取(data inject)等。

當(dāng)然實(shí)際應(yīng)用中大屏展現(xiàn)的內(nèi)容和形式遠(yuǎn)比這復(fù)雜, 我們從上圖可以提煉出大屏頁(yè)面的2個(gè)直觀特征:

  • 可視化組件集
  • 空間坐標(biāo)關(guān)系

因?yàn)槲覀兛梢暬笃凛d體是頁(yè)面, 是html, 所以還有另外一個(gè)特征: 事件/交互。綜上我們總結(jié)出了可視化大屏的必備要素:

我們只要充分的理解了可視化大屏的組成和特征, 我們才能更好的設(shè)計(jì)可視化大屏搭建引擎, 基于以上分析, 我設(shè)計(jì)了一張基礎(chǔ)引擎的架構(gòu)圖:

接下來我就帶大家一起來拆解并實(shí)現(xiàn)上面的搭建引擎。

大屏搭建引擎核心功能實(shí)現(xiàn)

俗話說: “好的拆解是成功的一半”, 任何一個(gè)復(fù)雜任務(wù)或者系統(tǒng), 我們只要能將其拆解成很多細(xì)小的子模塊, 就能很好的解決并實(shí)現(xiàn)它. (學(xué)習(xí)也是一樣)。

接下來我們就逐一解決上述基礎(chǔ)引擎的幾個(gè)核心子模塊:

  • 拖拽器實(shí)現(xiàn)
  • 物料中心設(shè)計(jì)
  • 動(dòng)態(tài)渲染器實(shí)現(xiàn)
  • 配置面板設(shè)計(jì)
  • 控制中心概述
  • 功能輔助設(shè)計(jì)

拖拽器實(shí)現(xiàn)

拖拽器是可視化搭建引擎的核心模塊, 也是用來解決上述提到的大屏頁(yè)面特征中的“空間坐標(biāo)關(guān)系”這一問題。我們先來看一下實(shí)現(xiàn)效果:

組件拖拽可以采用市面已有的Dragable等插件, 也可以采用H5-Dooring的智能網(wǎng)格拖拽. 這里筆者選擇自由拖拽來實(shí)現(xiàn). 已有的有:

  • rc-drag
  • sortablejs
  • react-dnd
  • react-dragable
  • vue-dragable

等等. 具體拖拽呈現(xiàn)流程如下:

具體拖拽流程就是:

  • 使用H5 dragable API拖拽左側(cè)組件(component data)進(jìn)入目標(biāo)容器(targetBox)。
  • 監(jiān)聽拖拽結(jié)束事件拿到拖拽事件傳遞的data來渲染真實(shí)的可視化組件。
  • 可視化組件掛載, schema注入編輯面板, 編輯面板渲染組件屬性編輯器。
  • 拖拽, 屬性修改, 更新。
  • 預(yù)覽, 發(fā)布。

組件的schema參考Dooring DSL設(shè)計(jì)。

物料中心設(shè)計(jì)

物料中心主要為大屏頁(yè)面提供“原材料”。為了設(shè)計(jì)健壯且通用的物料, 我們需要設(shè)計(jì)一套標(biāo)準(zhǔn)組件結(jié)構(gòu)和屬性協(xié)議。并且為了方便物料管理和查詢, 我們還需要對(duì)物料進(jìn)行分類, 我的分類如下:

  • 可視化組件 (柱狀圖, 餅圖, 條形圖, 地圖可視化等)。
  • 修飾型組件 (圖片, 輪播圖, 修飾素材等)。
  • 文字類組件 (文本, 文本跑馬燈, 文字看板)。

具體的物料庫(kù)演示如下:

這里我拿一個(gè)可視化組件的實(shí)現(xiàn)來舉例說明:

import React, { memo, useEffect } from 'react'
import { Chart } from '@antv/g2'

import { colors } from '@/components/BasicShop/common'

import { ChartConfigType } from './schema'

interface ChartComponentProps extends ChartConfigType {
  id: string
}

const ChartComponent: React.FC<ChartComponentProps> = ({
  id, data, width, height,
  toggle, legendPosition, legendLayout, legendShape,
  labelColor, axisColor, multiColor, tipEvent, titleEvent,
  dataType, apiAddress, apiMethod, apiData, refreshTime,
}) => {
  useEffect(() => {
    let timer:any = null;
    const chart = new Chart({
      container: `chart-${id}`,
      autoFit: true,
      width,
      height
    })

    // 數(shù)據(jù)過濾, 接入
    const dataX = data.map(item => ({ ...item, value: Number(item.value) }))
    chart.data(dataX)
    
    // 圖表屬性組裝
    chart.legend(
      toggle
        ? {
          position: legendPosition,
          layout: legendLayout,
          marker: {
            symbol: legendShape
          },
        }
        : false,
    )

    chart.tooltip({
      showTitle: false,
      showMarkers: false,
    })

    // 其他圖表信息源配置, 方法雷同, 此處省略
    // ...

    chart.render()

  }, [])

  return <div id={`chart-${id}`} />
}

export default memo(ChartComponent)

以上就是我們的基礎(chǔ)物料的實(shí)現(xiàn)模式, 可視化組件采用了g2, 當(dāng)然大家也可以使用熟悉的echart, D3.js等. 不同物料既有通用的 props , 也有專有的 props, 取決于我們?nèi)绾味x物料的Schema。

在設(shè)計(jì) Schema 前我們需要明確組件的屬性劃分, 為了滿足組件配置的靈活性和通用性, 我做了如下劃分:

  • 外觀屬性 (組件寬高, 顏色, 標(biāo)簽, 展現(xiàn)模式等)。
  • 數(shù)據(jù)配置 (靜態(tài)數(shù)據(jù), 動(dòng)態(tài)數(shù)據(jù))。
  • 事件/交互 (如單擊, 跳轉(zhuǎn)等)。

有了以上劃分, 我們就可以輕松設(shè)計(jì)想要的通用Schema了。我們先來看看實(shí)現(xiàn)后的配置面板:

這些屬性項(xiàng)都是基于我們定義的schema配置項(xiàng), 通過 解析引擎 動(dòng)態(tài)渲染出來的, 有關(guān) 解析引擎 和配置面板, 我會(huì)在下面的章節(jié)和大家介紹。我們先看看組件的 schema 結(jié)構(gòu):

const Chart: ChartSchema = {
  editAttrs: [
    {
      key: 'layerName',
      type: 'Text',
      cate: 'base',
    },
    {
      key: 'y',
      type: 'Number',
      cate: 'base',
    },
    ...DataConfig, // 數(shù)據(jù)配置項(xiàng)
    ...eventConfig, // 事件配置項(xiàng)
    
  ],
  config: {
    width: 200,
    height: 200,
    zIndex: 1,
    layerName: '柱狀圖',
    labelColor: 'rgba(188,200,212,1)',
    // ... 其他配置初始值
    multiColor: ['rgba(91, 143, 249, 1)', 'rgba(91, 143, 249, 1)', 'rgba(91, 143, 249,,1)', 'rgba(91, 143, 249, 1)'],
    data: [
      {
        name: 'A',
        value: 25,
      },
      {
        name: 'B',
        value: 66,
      }
    ],
  },
}

其中 editAttrs 表示可編輯的屬性列表, config 為屬性的初始值, 當(dāng)然大家也可以根據(jù)自己的喜好, 設(shè)計(jì)類似的通用schema。

我們通過以上設(shè)計(jì)的標(biāo)準(zhǔn)組件和標(biāo)準(zhǔn)schema, 就可以批量且高效的生產(chǎn)各種物料, 還可以輕松集成任何第三方可視化組件庫(kù)。

動(dòng)態(tài)渲染器實(shí)現(xiàn)

我們都知道, 一個(gè)頁(yè)面中元素很多時(shí)會(huì)影響頁(yè)面整體的加載速度, 因?yàn)闉g覽器渲染頁(yè)面需要消耗CPU / GPU。對(duì)于可視化頁(yè)面來說, 每一個(gè)可視化組件都需要渲染大量的信息元, 這無疑會(huì)對(duì)頁(yè)面性能造成不小的影響, 所以我們需要設(shè)計(jì)一種機(jī)制, 讓組件異步加載到畫布上, 而不是一次性加載幾十個(gè)幾百個(gè)組件(這樣的話頁(yè)面會(huì)有大量的白屏?xí)r間, 用戶體驗(yàn)極度下降)。

動(dòng)態(tài)加載器就是提供了這樣一種機(jī)制, 保證組件的加載都是異步的, 一方面可以減少頁(yè)面體積, 另一方面用戶可以更早的看到頁(yè)面元素。目前我們熟的動(dòng)態(tài)加載機(jī)制也有很多, Vue 和 React 生態(tài)都提供了開箱即用的解決方案(雖然我們可以用 webpack 自行設(shè)計(jì)這樣的動(dòng)態(tài)模型, 此處為了提高行文效率, 我們直接基于現(xiàn)成方案封裝)。我們先看一下動(dòng)態(tài)渲染組件的過程:

上面的演示可以細(xì)微的看出從左側(cè)組件菜單拖動(dòng)某個(gè)組件圖標(biāo)到畫布上后, 真正的組件才開始加載渲染。

這里我們以 umi3.0 提供的 dynamic 函數(shù)來最小化實(shí)現(xiàn)一個(gè)動(dòng)態(tài)渲染器. 如果不熟悉 umi 生態(tài)的朋友, 也不用著急, 看完我的實(shí)現(xiàn)過程和原理之后, 就可以利用任何熟悉的動(dòng)態(tài)加載機(jī)制實(shí)現(xiàn)它了。實(shí)現(xiàn)如下:

import React, { useMemo, memo, FC } from 'react'
import { dynamic } from 'umi'

import LoadingComponent from '@/components/LoadingComponent'


const DynamicFunc = (cpName: string, category: string) => {
  return dynamic({
    async loader() {
      //  動(dòng)態(tài)加載組件
      const { default: Graph } = await import(`@/components/materies/${cpName}`)

      return (props: DynamicType) => {
        const { config, id } = props
        return <Graph {...config} id={id} />
      }
    },
    loading: () => <LoadingComponent />
  })
}

const DynamicRenderEngine: FC<DynamicType> = memo((props) => {
  const { 
  type, 
  config, 
  // 其他配置... 
  } = props
  const Dynamic = useMemo(() => {
    return DynamicFunc(config)
  }, [config])

  return <Dynamic {...props} />
})

export default DynamicRenderEngine

是不是很簡(jiǎn)單? 當(dāng)然我們也可以根據(jù)自身業(yè)務(wù)需要, 設(shè)計(jì)更復(fù)雜強(qiáng)大的動(dòng)態(tài)渲染器。

配置面板設(shè)計(jì)

實(shí)現(xiàn)配置面板的前提是對(duì)組件 Schema 結(jié)構(gòu)有一個(gè)系統(tǒng)的設(shè)計(jì), 在介紹組件庫(kù)實(shí)現(xiàn)中我們介紹了通用組件 schema 的一個(gè)設(shè)計(jì)案例, 我們基于這樣的案例結(jié)構(gòu), 來實(shí)現(xiàn) 動(dòng)態(tài)配置面板

由上圖可以知道, 動(dòng)態(tài)配置面板的一個(gè)核心要素就是 表單渲染器。表單渲染器的目的就是基于屬性配置列表 attrs 來動(dòng)態(tài)渲染出對(duì)應(yīng)的表單項(xiàng)。我之前寫了一篇文章詳細(xì)的介紹了表單設(shè)計(jì)器的技術(shù)實(shí)現(xiàn)的文章, 大家感興趣也可以參考一下: Dooring可視化之從零實(shí)現(xiàn)動(dòng)態(tài)表單設(shè)計(jì)器。

我這里來簡(jiǎn)單實(shí)現(xiàn)一個(gè)基礎(chǔ)的表單渲染器模型:

const FormEditor = (props: FormEditorProps) => {
  const { attrs, defaultValue, onSave } = props;

  const onFinish = (values: Store) => {
    // 保存配置項(xiàng)數(shù)據(jù)
    onSave && onSave(values);
  };
  
  const handlechange = (value) => {
    // 更新邏輯
  }

  const [form] = Form.useForm();

  return (
    <Form
      form={form}
      {...formItemLayout}
      notallow={onFinish}
      initialValues={defaultValue}
      notallow={handlechange}
    >
      {
        attrs.map((item, i) => {
        return (
          <React.Fragment key={i}>
            {item.type === 'Number' && (
              <Form.Item label={item.name} name={item.key}>
                <InputNumber />
              </Form.Item>
            )}
            {item.type === 'Text' && (
              <Form.Item label={item.name} name={item.key}>
                <Input placeholder={item.placeholder} />
              </Form.Item>
            )}
            {item.type === 'TextArea' && (
              <Form.Item label={item.name} name={item.key}>
                <TextArea rows={4} />
              </Form.Item>
            )}
            // 其他配置類型
          </React.Fragment>
        );
      })}
    </Form>
  );
};

如果大家想看更完整的配置面板實(shí)現(xiàn), 可以參考開源項(xiàng)目 H5-Dooring | H5可視化編輯器

我們可以看看最終的配置面板實(shí)現(xiàn)效果:

控制中心概述 & 功能輔助設(shè)計(jì)

控制中心的實(shí)現(xiàn)主要是業(yè)務(wù)層的, 沒有涉及太多復(fù)雜的技術(shù), 所以這里我簡(jiǎn)單介紹一下。因?yàn)榭梢暬笃另?yè)面展示的信息有些可能是私密數(shù)據(jù), 只希望一部分人看到, 所以我們需要對(duì)頁(yè)面的訪問進(jìn)行控制。其次由于企業(yè)內(nèi)部業(yè)務(wù)戰(zhàn)略需求, 可能會(huì)對(duì)頁(yè)面進(jìn)行各種驗(yàn)證, 狀態(tài)校驗(yàn), 數(shù)據(jù)更新頻率等, 所以我們需要設(shè)計(jì)一套控制中心來管理。最基本的就是訪問控制, 如下:

功能輔助設(shè)計(jì) 主要是一些用戶操作上的優(yōu)化, 比如快捷鍵, 畫布縮放, 大屏快捷導(dǎo)航, 撤銷重做等操作, 這塊可以根據(jù)具體的產(chǎn)品需求來完善。大家后期設(shè)計(jì)搭建產(chǎn)品時(shí)也可以參考實(shí)現(xiàn)。

可視化大屏數(shù)據(jù)自治探索

目前我們實(shí)現(xiàn)的搭建平臺(tái)可以靜態(tài)的設(shè)計(jì)數(shù)據(jù)源, 也可以注入第三方接口, 如下:

我們可以調(diào)用內(nèi)部接口來實(shí)時(shí)獲取數(shù)據(jù), 這塊在可視化監(jiān)控平臺(tái)用的場(chǎng)景比較多, 方式如下:

參數(shù)(params)編輯區(qū)可以自定義接口參數(shù). 代碼編輯器筆者這里推薦兩款, 大家可以選用:

  • react-monaco-editor
  • react-codemirror2

使用以上之一可以實(shí)現(xiàn)mini版vscode, 大家也可以嘗試一下。

輔助功能

可視化大屏一鍵截圖 一鍵截圖功能還是沿用H5-Dooring 的快捷截圖方案, 主要用于對(duì)大屏的分享, 海報(bào)制作等需求, 我們可以使用以下任何一個(gè)組件實(shí)現(xiàn):

  • dom-to-image
  • html2canvas
  • 撤銷重做

撤銷重做功能我們可以使用已有的庫(kù)比如react-undo, 也可以自己實(shí)現(xiàn), 實(shí)現(xiàn)原理:

圖片

有點(diǎn)鏈表的意思, 我們將每一個(gè)狀態(tài)存儲(chǔ)到數(shù)組中, 通過指針來實(shí)現(xiàn)撤銷重做的功能, 如果要想更健壯一點(diǎn), 我們可以設(shè)計(jì)一套“狀態(tài)淘汰機(jī)制”, 設(shè)置可保留的最大狀態(tài)數(shù), 之前的自動(dòng)淘汰(刪除, 更高大上一點(diǎn)的叫出棧). 這樣可以避免復(fù)雜操作中的大量狀態(tài)存儲(chǔ), 節(jié)約瀏覽器內(nèi)存。

標(biāo)尺參考線 標(biāo)尺和參考線這里我們自己實(shí)現(xiàn), 通過動(dòng)態(tài)dom渲染來實(shí)現(xiàn)參考線在縮放后的動(dòng)態(tài)收縮, 實(shí)現(xiàn)方案核心如下:

arr.forEach(el => {
  let dom = [...Array.from(el.querySelectorAll('.calibrationNumber'))][0] as HTMLElement;
  if (dom) {
    dom.style.transform = `translate3d(-4px, -8px, 0px) scale(${(multiple + 0.1).toFixed(
      1,
    )})`;
  }
});
責(zé)任編輯:姜華 來源: 趣談前端
相關(guān)推薦

2023-09-26 08:01:16

2021-03-09 08:32:50

開發(fā)視化大屏H5-Dooring

2022-02-28 08:34:42

開發(fā)可視化大屏

2021-07-12 17:23:47

零設(shè)計(jì)可視化引擎

2023-12-27 10:47:45

Flask數(shù)據(jù)可視化開發(fā)

2021-12-30 12:02:52

Python可視化代碼

2022-08-26 10:26:16

前端開發(fā)

2023-10-12 08:02:36

2021-09-26 16:20:04

Sentry Dashboards 數(shù)據(jù)可視化

2023-03-19 22:51:11

可視化項(xiàng)目可視化圖表

2021-04-14 16:20:39

可視化大數(shù)據(jù)工具

2021-09-11 21:03:09

可視化搭建框架

2022-09-08 11:19:53

Vue可視化插件

2010-03-29 15:50:03

可視化編程平臺(tái)

2024-01-23 10:42:58

2017-12-26 14:05:21

潤(rùn)乾大屏可視化

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2021-10-28 08:42:31

Dooring表單設(shè)計(jì)器數(shù)據(jù)可視化

2017-02-23 09:42:53

大數(shù)據(jù)數(shù)據(jù)可視化技術(shù)誤區(qū)

2020-12-22 14:14:25

大數(shù)據(jù)數(shù)據(jù)可視化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产激情一区二区三区| 韩国一区二区三区视频| 91丨porny丨首页| 91av成人在线| 亚洲一区视频在线播放| 国产私拍福利精品视频二区| 中日韩免费视频中文字幕| 国产欧美久久久久久| 日本免费网站视频| aiai久久| 色婷婷综合久色| 色播五月综合| 国产女无套免费视频| 极品av少妇一区二区| 亚洲黄一区二区| 日韩中文字幕免费在线| 免费网站看v片在线a| 国产一区在线精品| 久久久久中文字幕| 最近中文字幕在线mv视频在线| 色8久久久久| 中文字幕一区三区| 国产一区二区三区四区五区在线| 人妻 日韩精品 中文字幕| 日韩在线观看一区| 亚洲国产欧美一区二区三区同亚洲 | 久久精品国产亚洲av久| 丁香久久综合| 午夜精品一区二区三区电影天堂| 日韩精品一区二区三区丰满| 在线观看日批视频| 影音先锋中文字幕一区| 色多多国产成人永久免费网站| 可以看的av网址| 亚洲www.| 亚洲一区自拍偷拍| 亚洲va久久久噜噜噜久久狠狠 | 亚洲高清网站| 色偷偷888欧美精品久久久| 日本不卡视频一区| 亚洲国产91视频| 欧美日韩激情小视频| 午夜老司机精品| 婷婷在线观看视频| 国产乱色国产精品免费视频| 日韩免费观看高清| 久久av高潮av无码av喷吹| 精品av一区二区| 精品国产乱码久久久久久浪潮| 亚洲娇小娇小娇小| 亚洲国产福利| 亚洲成人免费看| 日韩精品福利片午夜免费观看| 西西人体44www大胆无码| 国产精品一区二区91| 国产成人精品一区二区| 日韩熟女精品一区二区三区| 亚洲一区二区三区| 亚洲色图欧美制服丝袜另类第一页| 久久av一区二区三| 免费精品一区二区三区在线观看| 欧美三区在线观看| 欧美激情成人网| f2c人成在线观看免费视频| 亚洲日本在线a| 亚洲一区二区三区在线观看视频| 巨骚激情综合| 久久久精品影视| 99蜜桃在线观看免费视频网站| 在线观看毛片av| 热久久国产精品| 国产成人精品优优av| 国产高清中文字幕| 久久精品一本| 国产精品99久久久久久人| 久久久久女人精品毛片九一 | cao在线观看| 国产精品刘玥久久一区| 国产精品国产三级国产普通话三级 | 成人午夜福利一区二区| 免费国产自久久久久三四区久久| 亚洲国产中文字幕在线观看| 美女扒开腿免费视频| 国产成人tv| 亚洲激情视频网站| 中文精品在线观看| 蜜臀久久99精品久久一区二区| 亚洲欧美日韩一区二区三区在线| 久久精品国产亚洲AV熟女| 蜜桃精品噜噜噜成人av| 一区二区三区四区视频| 公侵犯人妻一区二区三区| 精品国产午夜| 久久精品影视伊人网| 日韩欧美国产成人精品免费| 欧美91视频| 欧美极品欧美精品欧美视频 | 久久久99精品免费观看不卡| 欧美连裤袜在线视频| av影片免费在线观看| 秋霞蜜臀av久久电影网免费| 精品久久久久久久人人人人传媒| 欧亚乱熟女一区二区在线| 免费久久久久久久久| 中文字幕亚洲综合久久筱田步美 | 亚洲欧美日韩电影| 999一区二区三区| 三级在线观看视频| 欧美三级视频在线观看| 欧美一级大片免费看| 欧美三级电影在线| 亚洲欧美国产精品va在线观看| 人妻丰满熟妇av无码久久洗澡| 欧美一二区在线观看| 久久亚洲私人国产精品va| 日韩黄色a级片| 日本亚洲最大的色成网站www| 成人网在线观看| 四虎永久在线观看| 一区在线中文字幕| 九色在线视频观看| 成人污版视频| 日韩精品视频免费在线观看| 亚洲女同二女同志奶水| 亚洲九九精品| 国产伦精品一区二区三区精品视频| 精品人妻无码一区二区| 国产婷婷色一区二区三区| 国产盗摄视频在线观看| av中文字幕在线观看第一页| 欧美日韩精品一区二区三区四区 | 亚洲激情一区二区三区| 欧美日韩色网| 欧美久久高跟鞋激| 国产黄色网址在线观看| 久久精品亚洲人成影院 | 精品中文字幕在线播放| 欧美3p在线观看| 97精品视频在线播放| 国产精品久久777777换脸| xf在线a精品一区二区视频网站| 99久久久无码国产精品性色戒| 中文字幕这里只有精品| 欧美电影免费观看完整版| 国产三级在线观看完整版| 亚洲精品免费观看| 96久久精品| 黄色在线播放网站| 欧美日韩在线综合| 久久久久无码精品国产sm果冻| 国产精品色网| 国产精品久久久久av福利动漫| 美女写真理伦片在线看| 欧美系列亚洲系列| 天天躁夜夜躁狠狠是什么心态| 欧美午夜在线| 亚洲在线免费看| 日本视频在线观看| 欧美日韩一二区| 日本三级日本三级日本三级极| 亚洲人体av| 亚洲va国产va天堂va久久| 五月天婷婷在线视频| 欧美在线看片a免费观看| 懂色av粉嫩av蜜乳av| 亚洲精品四区| 国产精品手机在线| 国产后进白嫩翘臀在线观看视频 | 丰满少妇久久久| 国产成人精品福利| 97久久精品在线| 后进极品白嫩翘臀在线视频| 亚洲精品国产一区二区精华液| 中文字幕免费高清在线| av中字幕久久| 国产精品永久在线| 麻豆视频在线观看免费网站| 欧美日韩一本到| 丁香六月激情综合| 久久aⅴ国产欧美74aaa| dy888午夜| 中文字幕视频精品一区二区三区| 久99久在线视频| 男人天堂综合网| 精品成人乱色一区二区| 亚洲一区二区三区四区av| 亚洲精品社区| 免费av在线一区二区| 高清不卡av| 中文字幕日本欧美| 国产一区二区自拍视频| 一区二区三区在线观看欧美| 少妇精品无码一区二区三区| 亚洲视频大全| 翔田千里亚洲一二三区| 精品国产伦一区二区三区观看说明| 久久久99久久精品女同性| 性色av蜜臀av| 精品欧美aⅴ在线网站| 人人妻人人藻人人爽欧美一区| 六月丁香综合在线视频| 青青视频免费在线| 日韩成人av在线资源| 国产精品久久久久77777| 国产乱色在线观看| 日韩精品在线观看网站| 在线视频 91| 亚洲午夜久久久久久久久久久| 国精产品一区一区三区免费视频| 久久99深爱久久99精品| 国产a级片网站| 欧美综合在线视频观看| 97伦理在线四区| 欧美动物xxx| 欧美猛交ⅹxxx乱大交视频| 偷拍自拍在线视频| 51精品久久久久久久蜜臀| 日韩无码精品一区二区三区| 欧美国产日韩精品免费观看| 夜夜爽久久精品91| 视频一区欧美日韩| 九九久久九九久久| 国产成人精品999在线观看| 国产欧美日韩免费| 怡红院在线观看| 在线播放国产一区二区三区| 黄色片一区二区| 欧美午夜电影网| 欧美一区二区三区四| 综合久久综合久久| 国产精品无码一区二区三区| 国产精品99久久久久久似苏梦涵| 色诱视频在线观看| 狠狠久久婷婷| 一区一区视频| 国产尤物久久久| 精品国产一区二区三区四区vr| 亚洲视频资源| 国产精品va在线| 人妖欧美1区| 久久亚洲精品小早川怜子66| 久久久久国产精品嫩草影院| 欧美第一区第二区| 91极品身材尤物theporn| 一区二区日韩av| 国产极品美女在线| 亚洲国产精品精华液ab| 少妇户外露出[11p]| 国产91丝袜在线18| 91看片破解版| 国产乱码精品一品二品| 亚洲色图欧美自拍| 国产精品亚洲人在线观看| www.亚洲自拍| 国产精品影视网| 美女被爆操网站| 国产大片一区二区| 极品白嫩少妇无套内谢| 波多野结衣一区二区三区| 荫蒂被男人添免费视频| 91日韩在线专区| 一级性生活毛片| 国产精品私房写真福利视频| 国产主播av在线| 亚洲男人的天堂在线aⅴ视频| 日本高清一二三区| 亚洲国产美女搞黄色| 韩国av中文字幕| 欧美又粗又大又爽| av无码精品一区二区三区宅噜噜| 日韩精品一区二区三区蜜臀| 香蕉视频成人在线| 国产亚洲一级高清| 男人和女人做事情在线视频网站免费观看| 久久激情视频免费观看| 男女在线观看视频| 日本久久久久久久久久久| yy6080久久伦理一区二区| 成人精品久久久| 岛国精品一区| 午夜欧美性电影| 欧美久久成人| 人妻内射一区二区在线视频 | 天堂网在线资源| 亚洲网站在线播放| 成人在线直播| 欧美一级视频一区二区| 欧美天堂在线| av日韩免费电影| 欧美激情在线精品一区二区三区| 亚洲综合欧美日韩| 亚洲国产影院| 久久99999| 成人精品视频一区二区三区| 国产精品高清无码在线观看| 亚洲欧美日本韩国| 中文字幕超碰在线| 91精品国产91久久综合桃花| 婷婷亚洲一区二区三区| 久久视频在线免费观看| 亚洲小少妇裸体bbw| 91九色视频在线| 一区二区导航| 精品视频在线观看一区二区| 老司机精品导航| 日本人妻一区二区三区| 中文字幕乱码亚洲精品一区| 久久久久99精品| 欧美蜜桃一区二区三区| 欧美日韩伦理片| 欧美激情欧美激情在线五月| jizzyou欧美16| 久久久久久久久一区二区| 亚洲国产精品久久久天堂| 成人在线观看a| 成人午夜看片网址| 中文字幕电影av| 欧美综合亚洲图片综合区| 可以免费观看的毛片| 久久久成人的性感天堂| 户外露出一区二区三区| 国产精品中出一区二区三区| 亚洲成人免费| 另类小说色综合| 久久蜜桃av一区二区天堂| 国产第一页第二页| 日韩免费看网站| 成人免费高清| 91精品久久久久久久久不口人| 在线日本制服中文欧美| 国产高清av在线播放| 国产精品资源在线| 少妇aaaaa| 欧美一区二区视频网站| 午夜视频在线免费观看| 国产精品欧美日韩一区二区| 最新精品国偷自产在线| 中文字幕无码精品亚洲35| 成人性生交大片免费看中文| 99精品久久久久| 宅男在线国产精品| 大片免费在线看视频| 成人免费视频网址| 久久一区二区三区电影| 伊人国产在线视频| 亚洲国产精品成人综合| 中文字幕+乱码+中文字幕明步 | 国产精品刘玥久久一区| 国产日韩欧美影视| 亚洲成人三区| 91porn在线| 亚洲国产精品久久一线不卡| 成人午夜福利视频| 午夜精品理论片| 欧美人与动xxxxz0oz| 国产免费毛卡片| 久久日韩粉嫩一区二区三区| 成人免费视频国产免费| 一本色道久久88综合亚洲精品ⅰ | 欧美亚一区二区| 在线免费看a| 91免费版网站入口| 国内精品99| 天堂久久久久久| 色婷婷综合视频在线观看| 91在线看黄| 91视频免费进入| 国产精品久久久久久模特| 少妇真人直播免费视频| 91福利视频在线| 男人天堂久久久| 春色成人在线视频| 国产欧美精品| 黄大色黄女片18免费| 欧美一级高清片| 黄色漫画在线免费看| 欧美三日本三级少妇三99| 久久国产精品一区二区| 免费三片在线播放| 亚洲欧美一区二区激情| 日韩av黄色| 欧美一级爱爱视频| 91在线国产观看| 最新国产中文字幕| 久久99精品久久久久久青青91| 秋霞在线一区| 香蕉视频999| 亚洲高清视频中文字幕| 国产在线一在线二| 91成人免费视频| 久久久久久9| 国产十六处破外女视频| 日韩风俗一区 二区| 亚洲欧洲日韩精品在线| 日韩avxxx| 一区二区三区免费观看| 男女av在线| 97免费资源站| 蜜臀av国产精品久久久久| 日本网站在线免费观看|