国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

可視化搭建移動端店鋪解決方案

共 55881字,需瀏覽 112分鐘

 ·

2021-07-11 12:51

點(diǎn)擊上方關(guān)注 前端技術(shù)江湖,一起學(xué)習(xí),天天進(jìn)步



原文地址:https://juejin.cn/post/6979410699453726727   

前言

經(jīng)過許久的深思熟慮與探索,同時也借鑒了行業(yè)內(nèi)不錯的產(chǎn)品(如:有贊,H5-Dooring等),但跟列舉的產(chǎn)品還是有區(qū)別的(先賣個關(guān)子,后面再講有哪些區(qū)別)。其實(shí)這種功能在零售系統(tǒng)(目前我所在公司是零售行業(yè)的領(lǐng)頭羊)和電商系統(tǒng)應(yīng)該很常見,很多應(yīng)用場景都會用到,像產(chǎn)品營銷頁面、企業(yè)/個人微官網(wǎng)、H5活動頁面等移動端頁面,通過可視化配置快速搭建H5頁面,且提供豐富的頁面組件,更方便的為使用者搭建更強(qiáng)大的H5頁面。

PC端界面如下:

PC端界面

移動端(H5和小程序)界面如下:

技術(shù)方案

PC端 React 技術(shù)棧,移動端 UniApp 跨平臺框架,功能的設(shè)計(jì)結(jié)構(gòu)圖如下:

裝修頁面前端設(shè)計(jì)模式.png
/*
 * @description: DecoratePage Context交互
 * @version: 分支號 20210629
 * @author: xuchao
 */
import React, { PureComponent } from 'react';
import { withRouter, router } from 'umi';
import { Layout, Modal, Button } from 'antd';
import { isEmpty, findIndex, isArray, find, every, cloneDeep } from 'lodash';
import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend';
import { showMsg } from '@/global';
import Component from './components/Component';
import Preview from './components/Preview';
import Compiler from './components/Compiler';
import { DecorateContext, components } from './utilities';
import './style.less';

const { Header } = Layout;

export default class Decorate extends PureComponent {
    state = {
        compiler: 'PageSetting',
        pagename: '頁面標(biāo)題',
        selectIndex: 0,
        previewData: [],
    };

    getChildContext() {
        return {
            ...this.state,
            ...this.props,
            setState: state => this.setState(state),
        };
    }

    render() {
        return (
            <DecorateContext.Provider value={this.getChildContext()}>
                <Layout className="decorate">
                    <Header className="header">
                        <span className="hand">
                            返回首頁裝修
                        </span>
                        <Button type="primary" className="fr">
                            發(fā)布
                        </Button>
                        <Button type="primary" className="fr mr10">
                            保存
                        </Button>
                        <Button className="fr mr10">
                            預(yù)覽
                        </Button>
                    </Header>
                    <DndProvider backend={HTML5Backend}>
                        <Layout className="container">
                            <Component />
                            <Preview />
                            <Compiler />
                        </Layout>
                    </DndProvider>
                </Layout>
            </DecorateContext.Provider>
        );
    }

數(shù)據(jù)

前面說到與列舉的產(chǎn)品有哪些區(qū)別,區(qū)別在于PC端與移動端的數(shù)據(jù)交互,它們都是通過 iframe 嵌套 H5 的頁面,通過 postmessage API 來做數(shù)據(jù)交互,而是我沒有這樣做,原因是項(xiàng)目特別緊,加上人員分配問題,所以采用數(shù)據(jù)定義模式。

通過上面的設(shè)計(jì)結(jié)構(gòu)圖可以看出PC端最后會生成一份 schema 數(shù)據(jù)存儲服務(wù)端,移動端從服務(wù)端獲取到 schema 數(shù)據(jù)進(jìn)行解析。數(shù)據(jù)格式如下:

// 圖片廣告
{
    component: 'ImageTextAd',
    options: {
        template: 'image', // image:一行一個 carousel:輪播海報(bào) slide:大圖橫向滑動 zone:繪制熱區(qū)
        image: [
            {
                id: '',
                url: '',
                title: '',
                linkCode: '',
                linkName: '',
                // 熱區(qū)
                zones: [
                    {
                        x: 178,
                        y: 91,
                        width: 158,
                        height: 132,
                        code: '123',
                        text: '測試鏈接2',
                    }
                ],
            },
            {
                id: '',
                url: '',
                title: '',
                linkCode: '',
                linkName: '',
                // 熱區(qū)
                zones: [
                    {
                        x: 436,
                        y: 97,
                        width: 170,
                        height: 168,
                        code: '',
                        text: '',
                    }
                ],
            },
        ],
        indicator: 'dotted', // 指示器
        style: {
            boxShadow: 'none',
            borderRadius: 'none',
            padding: '0',
        },
    },
},
// 公告
{
    component: 'Notice',
    options: {
        content: '公告內(nèi)容',
        style: {
            background: 'rgb(255, 248, 233)',
            color: 'rgb(100, 101, 102)',
        },
    },
},
// 圖文導(dǎo)航
{
    component: 'ImageTextNav',
    options: {
        template: 'image-nav', // image-nav:圖片導(dǎo)航 text-nav:文字導(dǎo)航
        images: [{
            url: '',
            title: '',
            link: '',
        }],
        style: {
            background: 'rgb(255, 248, 233)',
            color: 'rgb(100, 101, 102)',
        },
    },
},
// 標(biāo)題欄
{
    component: 'Title',
    options: {
        style: {
            textAlign: 'left',
            background: '#FFFFFF',
        },
        title: {
            text: '',
            style: {
                fontSize: '16px',
                fontWeight: 'bold',
                color: '#323233',
            },
        },
        content: {
            text: '',
            style: {
                fontSize: '12px',
                fontWeight: '400',
                color: '#969799',
            },
        },
    },
},
// 文本模塊
{
    component: 'RichText',
    options: {
        content: '<html></html>',
        style: {
            backgroundColor: '#F9F9F9',
            padding: '10px 10px 0',
        },
    },
},
// 輔助分割
{
    component: 'DivideLine',
    options: {
        template: 'block', // block:輔助空白 line:輔助線
        style: {
            height: 30,
            // borderTopWidth: '1px',
            // borderTopStyle: 'dashed',
            // borderTopColor: '#EBEDF0',
            // margin: '10px 0 0',
        },
    },
},
// 商品搜索
{
    component: 'GoodSearch',
    options: {
        style: {
            backgroundColor: '#FFFFFF',
        },
        box: {
            style: {
                borderRadius: 'none',
                textAlign: 'left',
                height: 28,
                backgroundColor: '#F7F8FA',
                color: '#c8c9cc',
            },
        },
    },
},
// 左右圖文
{
    component: 'LRImageText',
    options: {
        template: 'lr', // lr:左圖右文 rl:左文右圖
        content: '', // 內(nèi)容
        image: {
            url: '', // 圖片地址
            linkCode: '', // 跳轉(zhuǎn)頁面code
            linkName: '', // 跳轉(zhuǎn)頁面name
            style: {
                boxShadow: 'none',
                borderRadius: 'none',
            },
        },
    },
},
// 圖文導(dǎo)航
{
    component: 'ImageTextNav',
    options: {
        template: 'image', // image:圖片導(dǎo)航 text:文字導(dǎo)航
        image: [
            {
                url: '',
                title: '導(dǎo)航一',
                linkCode: '',
                linkName: '',
            },
            {
                url: '',
                title: '導(dǎo)航二',
                linkCode: '',
                linkName: '',
            },
            {
                url: '',
                title: '導(dǎo)航三',
                linkCode: '',
                linkName: '',
            },
            {
                url: '',
                title: '導(dǎo)航四',
                linkCode: '',
                linkName: '',
            },
            {
                id: uuid(),
                url: '',
                title: '導(dǎo)航五',
                linkCode: '',
                linkName: '',
            },
        ],
        style: {
            backgroundColor: '#FFFFFF',
            color: '#333333',
        },
    },
},
// 魔方
{
    component: 'Cube',
    options: {
        template: 'row-one', // row-one:一行一個 row-two:一行兩個 row-four:一行四個 row-col:一大兩小
        image: [
            {
                url: '',
                linkType: '',
                linkName: '',
            },
        ],
        imageMargin: 0,
        layoutMargin: 0,
    },
},
// 定位菜單
{
    component: 'PositionMenu',
    data: [], // 分組信息
    options: {
        template: 'tab-style-one', // tab-style-one:樣式1 tab-style-two:樣式2 tab-style-three:樣式3
        data: [
            {
                id: '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d',
                code: '',
                name: '',
                menuName: '',
                comsize: 6,
            },
            {
                id: '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6c',
                code: '',
                name: '',
                menuName: '',
                comsize: 6,
            },
        ],
        style: {
            borderRadius: 'none',
            fontWeight: '400',
            paddingLeft: '5px',
            paddingRight: '5px',
        },
        listStyle: 'row-one', // row-one:大圖模式 row-two:一行兩個 row-three:一行三個 row-col:詳細(xì)列表
        commodityStyle: 'no-border', // no-border:無邊白底 shadow:卡片投影 stroke:描邊白底 transparent:無邊透明底
        commodityName: true, // 商品名稱
        commodityDesc: true, // 商品描述
        commodityPrice: true, // 商品價格
        originalPrice: true, // 劃線價格
        buyButton: true, // 購買按鈕
        buyButtonStyle: 'style-1', // 購買按鈕樣式
        buyButtonText: '馬上搶', // 購買按鈕文字
        commoditySubscript: true, // 商品角標(biāo)
        commoditySubscriptStyle: 'new', // 商品角標(biāo)樣式
    },
},
// 普通商品
{
    component: 'Goods',
    data: [], // 商品信息
    options: {
        template: 'large', // large:大圖模式 small:一行兩個 three:一行三個 list:詳細(xì)列表
        data: [], // 商品信息
        style: {
            borderRadius: 'none',
            fontWeight: '400',
            paddingLeft: '5px',
            paddingRight: '5px',
        },
        listStyle: 'row-one', // row-one:大圖模式 row-two:一行兩個 row-three:一行三個 row-col:詳細(xì)列表
        commodityStyle: 'no-border', // no-border:無邊白底 shadow:卡片投影 stroke:描邊白底 transparent:無邊透明底
        commodityName: true, // 商品名稱
        commodityDesc: true, // 商品描述
        commodityPrice: true, // 商品價格
        originalPrice: true, // 劃線價格
        buyButton: true, // 購買按鈕
        buyButtonStyle: 'style-1', // 購買按鈕樣式
        buyButtonText: '馬上搶', // 購買按鈕文字
        commoditySubscript: true, // 商品角標(biāo)
        commoditySubscriptStyle: 'new', // 商品角標(biāo)樣式
    },
},
// 限時折扣
{
    template: 'row-one',
    data: [],
    style: {
        borderRadius: 'none',
        fontWeight: '400',
        padding: '0',
        margin: '0',
    },
    comsize: 10,
    tag: '限時折扣',
    commodityStyle: 'no-border',
    commodityName: true,
    commodityDesc: false,
    commodityPrice: true,
    originalPrice: true,
    lastStock: true,
    countdown: true,
    progressBar: true,
    buyButton: true,
    buyButtonStyle: 'style-1',
    buyButtonText: '即將開搶',

拖拽

拖拽依賴第三方庫react-dnd,提供的Hooks Api特別方便,上面的設(shè)計(jì)結(jié)構(gòu)圖 Component組件(DragSource) 和 Preview組件(DropTarget) 用到了拖拽,Preview組件不僅要支持上下拖拽,而且需要配合Compiler組件聯(lián)動。

/*
 * @description: DragSource 拖動組件
 * @version: 分支號 20210629
 * @author: xuchao
 */
import React, { useContext } from 'react';
import { useDrag } from 'react-dnd';
import { findIndex, some, isUndefined, filter } from 'lodash';
import { v1 as uuid } from 'uuid';
import { DecorateContext } from '../../utilities';
import schema from '../Materials/schema';

export default ({ component, name, icon, max, componentType, fixedIndex }) => {
    const { previewData = [], setState } = useContext(DecorateContext);
    const number = filter(previewData, { component }).length;

    const [, drag] = useDrag(
        () => ({
            type'component',
            options: {
                dropEffect: 'copy',
            },
            item: {
                type'add',
                component,
                name,
                max,
                componentType,
                fixedIndex,
            },
            end: (item, monitor) => {
                const hasPh = some(previewData, { component: 'placeholder' });
                const phIndex = findIndex(previewData, { component: 'placeholder' });

                if (!hasPh) return;

                // 組件放置已達(dá)上限
                if (number === max) {
                    previewData.splice(phIndex, 1);

                    setState({ previewData: [...previewData] });

                    return;
                }

                if (monitor.didDrop()) {
                    // 判斷拖拽放入Preview組件中,占位元素替換成組件元素
                    previewData.splice(phIndex, 1, {
                        id: uuid(),
                        component: item.component,
                        options: schema[component].defaultOptions,
                    });
                } else {
                    // 判斷拖拽沒有放入Preview組件中,刪除占位元素
                    previewData.splice(phIndex, 1);
                }

                setState({
                    previewData: [...previewData],
                    selectIndex: phIndex,
                    compiler: item.component,
                });
            },
        }),
        [previewData],
    );

    /**
     * @description: 新增組件
     * @author: xuchao
     */
    const handleClick = () => {
        if (number === max) return;

        previewData.splice(!isUndefined(fixedIndex) ? fixedIndex : previewData.length, 0, {
            id: uuid(),
            component,
            options: schema[component].defaultOptions,
        });

        setState({
            previewData: [...previewData],
            selectIndex: !isUndefined(fixedIndex) ? fixedIndex : previewData.length - 1,
            compiler: component,
        });
    };

    return (
        <div ref={drag} className="item" onClick={handleClick}>
            <i className={icon}></i>
            <div className="name">{name}</div>
            <div className="number">
                {number}/{max}
            </div>
        </div>
    );
}; 

/*
 * @description: DropTarget 放置組件
 * @version: 分支號 20210629
 * @author: xuchao
 */
import React, { useContext, useCallback } from 'react';
import { useDrop } from 'react-dnd';
import { findIndex, some, isUndefined, filter } from 'lodash';
import update from 'immutability-helper';
import { DecorateContext } from '../../utilities';
import Item from './Item';

export default () => {
    const { previewData = [], selectIndex, setState } = useContext(DecorateContext);

    const [, drop] = useDrop(
        () => ({
            accept: 'component',
            hover: item => {
                const limit = filter(previewData, { component: item.component }).length;
                const hasPh = some(previewData, { component: 'placeholder' });
                const spliceIndex = !isUndefined(item.fixedIndex)
                    ? item.fixedIndex
                    : previewData.length;

                if (item.type === 'add' && !hasPh) {
                    // 判斷占位符是否已經(jīng)存在,若懸??瞻滋?,插入占位符
                    previewData.splice(spliceIndex, 0, {
                        component: 'placeholder',
                        limit: item.max === limit ? true : false,
                    });

                    setState({ previewData: [...previewData] });
                }
            },
        }),
        [previewData],
    );

    /**
     * @description: move callback
     * @param {number} dragIndex
     * @param {number} hoverIndex
     * @param {object} item
     * @author: xuchao
     */
    const handleMove = useCallback(
        (dragIndex, hoverIndex, item) => {
            if (item.type === 'add' && !dragIndex) {
                // 判斷拖拽是 Component 的組件,則 dragIndex 為 undefined,修改占位符的位置即可
                const limit = filter(previewData, { component: item.component }).length;
                const hasPh = some(previewData, { component: 'placeholder' });
                const spliceIndex = !isUndefined(item.fixedIndex) ? item.fixedIndex : hoverIndex;

                // 判斷占位符是否已經(jīng)存在,不再重復(fù)插入
                if (hasPh) {
                    const phIndex = findIndex(previewData, {
                        component: 'placeholder',
                    });

                    setState({
                        previewData: update(previewData, {
                            $splice: [
                                [phIndex, 1],
                                [
                                    spliceIndex,
                                    0,
                                    {
                                        component: 'placeholder',
                                        limit: item.max === limit ? true : false,
                                    },
                                ],
                            ],
                        }),
                    });

                    return;
                }

                setState({
                    previewData: update(previewData, {
                        $splice: [
                            [
                                spliceIndex,
                                0,
                                {
                                    component: 'placeholder',
                                    limit: item.max === limit ? true : false,
                                },
                            ],
                        ],
                    }),
                });
            } else {
                // 判斷拖拽是 Preview 的組件,則 dragIndex 不為 undefined,替換 dragIndex 和 hoverIndex 位置的元素即可
                setState({
                    previewData: update(previewData, {
                        $splice: [
                            [dragIndex, 1],
                            [hoverIndex, 0, previewData[dragIndex]],
                        ],
                    }),
                    selectIndex: dragIndex === selectIndex ? hoverIndex : dragIndex,
                });
            }
        },
        // eslint-disable-next-line react-hooks/exhaustive-deps
        [previewData],
    );

    /**
     * description: delete callback
     * param {object} event
     * param {number} index
     * author: xuchao
     */
    const handleDelete = (event, index) => {
        event.stopPropagation();

        previewData.splice(index, 1);

        setState({
            previewData: [...previewData],
            compiler: selectIndex === previewData.length ? undefined : previewData[index].compiler,
        });
    };

    return (
        <div ref={drop} className="content">
            {previewData.map((item, index) => {
                return (
                    <Item
                        key={item.id}
                        index={index}
                        selectIndex={selectIndex}
                        {...item}
                        onClick={() => setState({ selectIndex: index, compiler: item.component })}
                        onMove={handleMove}
                        onDelete={handleDelete}
                    />
                );
            })}
        </div>
    );
}; 

總結(jié)

開發(fā)耗費(fèi)時間比較長的地方是怎么設(shè)計(jì)與移動端同步數(shù)據(jù)和拖拽功能,最后還是迎刃而解。如果大家有什么疑問可以交流一下??

The End

歡迎自薦投稿到《前端技術(shù)江湖》,如果你覺得這篇內(nèi)容對你挺有啟發(fā),記得點(diǎn)個 「在看」


點(diǎn)個『在看』支持下 

瀏覽 56
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 九色PORNY国产成人| 亚洲国产激情视频| 一级国产黄色视频| 国产成人在线免费观看| 97精品人人妻人人| 婷婷综合一区| 亚洲综合免费观看高清完整版在线观| 国内夫妻【20p】| 激情五月丁香五月| www.插插| 国精产品一区一区三区有限公司杨| 日本最新免费二区| 影音先锋久久| 三级高清无码| 欧美视频a| 日韩精品无码AV| a三级片| 成人网站视频在线观看| 大香蕉在线伊| 翔田千里在线播放| 国产午夜精品一区二区三区四区| 久久综合操| 69成人精品视频| 亚洲午夜剧场| 亚洲精品一区二三区不卡| 亚洲日韩中文在线| 麻豆自拍偷拍视频| 日韩AV资源网| 亚洲天堂2014| 大香蕉黄色电影| 日韩免费毛片| 亚洲国产三级片| 大香蕉免费在线观看| 中文字幕中文字幕无码| 久久精品视频播放| 羽月希在线播放| 久久黄色网| 无码人妻精品一区二区三区99仓| 91狠狠色丁香婷婷综合久久精品| 女人av天堂| 国产特黄级AAAAA片免| 欧洲黑人成人A版免费视频| 亚洲人成在线观看| 99久久99九九99九九九| 337p西西人体大胆瓣开下部| 亚洲日韩精品在线观看| 亚洲综合激情网| 国产凹凸视频在线观看| 成人小视频十八禁免费观看| 91成人在线观看国产| 17c.白丝喷水自慰| 精品一区二区久久久久久久网站 | 你懂得视频在线观看| 六月丁香五月天| 人人干人人摸人人操| 国产日韩欧美一区| 男人天堂婷婷| 91亚洲免费视频| 99精品一区二区| 国产又粗又长又硬黄色一级片| 黑人毛片| 夜夜爽久久精品91| 天堂国产| 少妇激情av| 91x色| 亚洲人成高清| A片在线免费播放| 波多野结衣一区二区| 无码专区一区二区三区| 三级片91| 天天色天天日天天干| 国产69精品久久久久久| 大香蕉9999| 久久久久久免费| 国产精品色哟哟| 国产免费乱伦| 天天操嫩逼无套视频| 无码一道本| 久久AV片| 一区在线观看视频| 嫩BBB揍BBB揍BBB| 最新黄色av| 夜夜骑夜夜撸| 色色网的五月天| 欧美日韩岛国| 成年人性生活免费视频| 高清无码免费在线视频| 成人性生活A级毛片网站| 精品免费国产一区二区三区四区的使用方法| 七十路の高齡熟妇无码| 91www| 毛片三级片| 天堂一区在线观看| 黄色片网站免费观看| 婷婷五月中文| 97人妻一区二区精品视频| 日韩人妻久久| 曰韩一级片| 怡红院在线观看| 天天精品无码| 亚洲成人大香蕉视频| 久色性爱视频| 懂色午夜福利一区二区三区| 久久91| 日本三级视频| 蜜桃精品在线| 91乱子伦国产乱子伦海的味道 | 人妻免费视频| 国产1区2区| 日韩欧美成人在线| 夜夜爽天天爽| 人妻少妇一区二区三区| 91成人小电影| 人人妻人人色| 熟女视频网站| 亚洲免费小视频| 免费视频一二三区| 欧美天堂在线观看| 久久精品国产99精品国产亚洲性色 | 西西444WWW无码精品| 亚洲中文字幕色| 青娱乐| 看免费黄色视频| 免费69视频看片| 黄色视频在线免费观看网站| 操逼视频高清无码| 无码五月天| 亚洲无码中文视频| 伊人影院在线看| 天天日天天草天天干| 欧美成人免费观看| 中文字幕在线高清| 天天日天天日天天操| 欧美日韩在线视频免费播放 | 高清无码免费视频| eeuss| 内射午夜福利在线免费观看视频| 91成人无码| 欧美日韩三级| 日本久久久久久久久视频在线观看 | 玩弄人妻少妇500系列视频| 中文字幕人妻一区| 国产1区2区3区| 人人人人操| 大色网小色网| 嫩草在线视频| 人人妻人人| 欧美人人操| 嫩BBB槡BBBB槡BBB| 国产熟女乱伦| 特黄特色免费大片| 成人电影三区| 日韩黄色电影在线| 51成人精品午夜福利| 久久免费毛片| 国产av小电影| 无码色| 国产精品AV在线观看| 久久综合伊人777777| 艹逼国产| 国产AV不卡| 18国产免费视频在线观看| 国产精品永久免费| 操逼一级片| 热99| 成人电影一区二区三区| 欧美日韩午夜福利视频| 成人国产片女人爽到高潮| 俺去啦俺也去| 成人操b视频| 国产精品免费久久| h片无码| 一级黄色视频免费观看| 国产精品久久久999| 亚洲精品熟女| 欧美日韩中文字幕在线| 亚洲国产一区二区三区| 五月丁香久久| 涩久久久| 国产成人69免费看| 伊人久久五月| 夜色视频网| 麻豆传媒在线播放| 激情动态视频| 精品人妻一区二区三区日产| 欧美性猛交一区二区三区| 夜夜夜久久久| 一级A毛片| 中文字幕无码A片| 伊人网av| 在线日韩av| 国产专区在线| 激情91| 久热中文字幕| 伊人五月婷婷| 西西444WWW无码视频软件功能介绍| jzzijzzij亚洲成熟少妇在线观看| 大香蕉综合网站| 国产嫩BBwBBw高潮| 国产做爱| 水蜜桃91| 热99| 久久91久久久久麻豆精品| 亚洲美女网站在线观看| 男人的天堂视频在线| 大伊香蕉久久| 日日摸日日操| 手机看片日韩| 久久99精品国产| 欧美日韩A片欧美日| 奇米色播| 91ccc| 久久一区二区三区四区五区| 熟女91视频| 久草免费在线| 人妻japanesewoman| 国产性受XXXXXYX性爽| 韩国成人精品三级| 巨爆乳肉感一区二区三区| 青草国产| 一区二区三区无码视频| 精品欧美激情精品一区| 午夜私人福利| 天天干无码| 91含羞草www·Com| 国产一级在线| 日韩不卡高清在线观看视频| www.91madou| 亚洲AV性爱| 亚洲天堂免费| 黄色视频在线免费观看高清视频| 性性性性性XXXXX| 日韩网站在线观看| 丁香五月天网站| 久久久在线| 伊人蕉| 久久久123| 婷婷99狠狠躁天天| 国产永久免费| www.大吊视频| 日韩porn| 亚洲日韩视频在线播放| 九九成人视频| 亚欧av无码| 女人18片毛片60分钟翻译| 嫩小槡BBBB槡BBBB槡免费-百度| 亚洲美女视频在线观看| 亚洲视频一区二区| 日韩乱伦毛片| 人妻黑人一区二区三区| 国产精品福利小视频| 五月婷婷五月天| 蜜桃av秘无码一区二区三| 日韩视频中文字幕在线| 亚州视频在线| 高清AV无码| 蜜桃黄片AV在线观看| 国产精品久久77777| 无码人妻一区二区三区在线视频不卡| 99色色网| 午夜精品久久久久久久99老熟妇| 成人无码日本动漫电影| 中国熟女HD| 国产丝袜视频| 黄色视频在线观看亚洲一区二区三区免费 | 成人在线h| 欧美黄片在线免费观看| 天天日夜夜撸| 九一成人电影| 熟女视频网站| 又a又黄高清无码视频| 俺去也av| 成人片免费| 污视频免费在线观看| 亚洲国产精品自在自线| 五月丁香激情在线| 大香蕉久久久久久| 一级黄色片免费看| 永久免费黄色视频网站| 日韩精品成人免费观看视频 | 麻酥酥在线视频| 国产做受91电影| 婷婷无码视频| 亚洲性夜夜天天天天天天| 九色PORNY丨自拍蝌蚪| 超碰97在线免费观看| 黄色视频网站免费观看| 国产欧美一区二区三区特黄手机版| 在线国产中文字幕| 蜜桃视频网站| 欧美啪啪视频| 一级日逼视频| AV一级片| 日韩一级爱爱| 69Av视频| 美女综合网| 免费看毛片中文字幕| 手机在线毛片| www中文字幕| 一本一道vs波多野结衣| 无码乱码在线观看| 天天日天天干天天干| 欧美性爱操逼视频| 伊人成人片| 色婷婷色五月| 午夜精品18码视频国产17c| 91久久久久久久久久| 国产在线免费视频| 亚洲日韩中文字幕在线观看| 特黄特色一级特黄大片| 精品无码一区二区三区免费| 五月天婷婷丁香| 北条麻妃无码视频在线| 久久黄色免费视频| 日韩成人精品| 亚洲色图1| 成人爽a毛片一区二区免费 | 亚洲免费AV在线| 俺去| 亚洲无码在线观看免费| 操B在线视频| 最新超碰| 无码精品一区二区免费| 欧美黄色免费网站| 天天色播| 国产一级a免一级a免费| 成人午夜视频在线观看| 中字无码AV| 可以免费看的AV| 91香蕉视频18| 中文字幕精品一级A片| 操逼在线免费观看| 吴梦梦一区二区三区| 99福利| 国产精品无码在线观看| 日韩欧美高清无码| 日本高清一区| 精品人妻人人操| 久久精品www人人爽人人| 欧美亚洲综合手机在线| 日本黄A三级三级三级| 日韩人妻精品无码| 五月天婷婷AV| 成人久久av| 六月丁香五月婷婷| 国产xxxx视频| 欧美老逼| 国产AVwww| 俺去俺来也www色官网cms| 国产激情视频在线免费观看 | 第一页在线观看| 精品无码一区二区三| 看A片在线| 日本精品在线| 丰满的人妻一区二区10| 高清无码视频观看| 亚洲午夜久久久久久久久久久| 大香蕉综合在线观看| 人人爽人人爽人人爽| 女人18片毛片60分钟翻译| 免费内射视频| 国产婷婷色一区二区| 草草影院国产第一页| 99国产在线观看| 激情人妻网站| 国产56页| 日本一区中文字幕| 欧美午夜福利在线观看| 亚洲午夜福利一区二区三区| 高潮国产视频| 日韩做爱| 色婷婷成人| 夜夜嗨av无码一区二区三区 | 日韩激情视频| 成人在线网址| 婷婷久久综合久色| 国产成人亚洲精品| 最近中文字幕免费| 免费一区视频| 一区二区三区四区久久| 日本亚洲精品秘入口A片| 国产在线观看一区二区| 1024香蕉视频| 欧美操逼视频网站| 老鸭窝久久| 久久噜噜噜精品国产亚洲综合| 99久久婷婷国产综合精品青牛牛| 一级性爽A√毛片| 理论三级片| 中文有码在线观看| 狼人伊人综合| 丁香社区五月天| 在线免费人成视频| 国产毛片在线视频| 黄色一级aa片| 国产午夜免费| www.777熟女人妻| 91亚洲一线产区二线产区| 日本三级黄色视频| 罗莉AV| 免费欧美三级片| 91禁樱桃在线| 18禁在线看| 欧美人妻少妇| 日韩中文无码电影| 国产图区| 一区二区三区Av| 中文字幕亞洲高清手機版第617| 欧美深夜福利视频| 中文字幕第98页| 免费黄视频在线观看| 东北毛片| 五月六月婷婷| 国产免费一区二区三区| 3D动漫精品啪啪一区二区竹笋| 天天干天天插| 操B在线视频| 五月天激情午夜福利| 日韩午夜av| 欧美日韩h| 人人肏| 北京熟妇搡BBBB搡BBBB电影| 色噜噜狠狠色综无码久久合欧美| 亚洲尤物在线| 黄色3A片在线观看| 久久成人电影院| 免费欧美三级片| 麻豆国产精品| 潮喷AV| 男女激情网站| 在线免费看黄视频| 88海外华人免费一区| 人人操综合| 欧美日韩加勒比| 不卡视频在线观看| 少妇搡BBBB搡BBB搡18禁| 成人在线免费视频观看| 嫩BBB槡BBBB槡BBBB百度| 人人妻人人澡| 亚洲精品久久久蜜桃| 高清无码久久| 国产又大又粗又长| 成人影视在线免费观看| eeuss| 色婷婷一区二区三区久久| 色多多导航| 成人国产综合| 好男人WWW社区在线视频夜恋| 亚洲色无码人妻激情| 精品免费在线观看| 18成人在线观看| 色九九九| 日韩无码中文字幕视频| 天堂vs亚洲| jk无码| 青青草狠狠干| 日韩强操逼网| 91在线无码精品秘国产| 91国内精品| 成人自拍偷拍视频| 97天天干| 一本色道久久88综合无码| 日韩精品久久久久久久| 欧美日韩中文字幕视频| 中文字幕在线观看1| 国产精品欧美精品| 色五月欧美| 欧美99| 色天使av| 欧美性爱内射| 中文字幕视频在线| a免费在线观看| 西西西444www无码视频| 日本无码视频在线观看| 91porn在线观看| 91狠狠爱| 陈冠希和张柏芝mv| 亚洲砖区区免费| a片在线电影网| 在线午夜福利| 日本亲子乱婬一级A片| 国产欧美在线综合| 四川女人毛多水多A片| 亚洲AV成人一区二区三区不卡| 国产男女性爱视频播放| 成人做爰69片免费观看| 中文字幕无码影院| 人人爱人人妻人人操| 无码视频在线观看免费| 黄色三级av| 学生妹作爱片| 大香蕉久久爱| 激情五月伊人| 俺也去电影| 黑人操逼视频| 日韩美女在线| 97视频福利| 九色91视频| 中文字幕在线免费播放| 老熟女网站| 51无码| 色婷婷亚洲婷婷| 亚洲熟妇AV日韩熟妇在线| 亚洲欧美在线综合| 欧美黄片免费观看| 乱子伦毛片国产| 1024手机在线视频| 91人人澡人人爽人人看| 99er在线视频| 在线观看免费a片| 国产欧美综合在线三区| 男插女青青影院| 国产精品一区二区在线观看| 国产精品99久久免费黑人人妻| 亚洲vs无码秘蜜桃少妇| 97天天干| 亚洲成人AV| 小草久久95| 色青娱乐| 中文字幕无码Av在线看| 3D动漫精品一区二区在线播放免费| 996热re视频精品视频这里| 中文人妻av| 欧美一区二区在线| www中文字幕| 色婷婷激情视频| 自拍偷拍激情视频| 热re99久久精品国产99热| 日韩一级一级一级| 国产无码免费| 学生妹一级J人片内射视频| 天堂网2014| 亚洲V无码| 日韩欧美在线一区| 日韩无码黄色电影| 欧美色视频网| 成人三级视频| 亚洲欧美成人电影| 大香蕉免费在线观看| 操逼免费视频网站| 亚洲91无码精品一区在线播放| 国产绿奴09-01| 高颜值呻吟给力| 高清无码视频网站| 人人澡人人澡人人澡| 高潮国产视频| 精品欧美乱码久久久久久| www高清无码| 国产最新av| 91香蕉视频免费| 国产精品免费一区二区三区四区视频 | 五月天婷婷激情| 影音先锋成人av| 国产精品国产精品国产专区 | 91亚洲精品视频在线| 国产一级婬乱片免费| 日韩AV电影网| 51成人免费| 久久久国产精品人人片| 五丁香在线观看AV| 无码高清在线观看| 国产小视频在线观看| 狼友视频在线| 欧美成人色图| 豆花视频成人网站入口免费观看| 美女啪啪视频| 久操视频在线免费观看| 国产资源在线观看| av资源免费| 操在线视频| 91无码人妻一区二区| 91骚| 日韩欧美在中文| 9久9久9久9久女女女女| 超碰成人在线免费观看| 夜夜爱视频| 操美女久久| 亚洲高清无码视频大全| 免费高清无码在线| 国产91免费视频| 免费日韩AV| 成人A视频| 精品色片| 在线观看亚洲无码视频| 亚洲三级无码视频| 亚洲无码一区二区三区蜜桃| 久操手机在线| 中文字幕北条麻妃| 中国熟睡妇BBwBBw| 久久亚洲AV无码午夜麻豆| 动漫操逼视频| 加勒比无码人妻| 在线看片AV| 无码精品一区二区三区在线观看| 久久伊人在线| 黄色网址在线观看视频| 天堂网资源| 欧美三级欧美三级三级| 91精品国产成人做爰观看奶头| 人人干国产| 亚洲精品69| 国产一级麻豆| 欧美激情爱爱| 欧美色999| 国产美女精品| 人人草人人爱| 日本熟女视频| 亚洲二区后入极品| 9991区二区三区四区| 性欧美V| 中文AV第一页| 自拍偷拍一区二区三区| 欧美三级视频在线| 亚洲射色| 亚洲天堂影音先锋| 亚洲AV成人网| 久久精品成人导航| 国产在线视频导航| 无码一区二区免费| av在线精品| 蜜桃秘一二三区最新| 国家一级A片| 人人操夜夜| 六月综合激情| 超碰免费99| 牛牛精品一区| 久久久久久久久国产| 五月综合色| 久久久婷婷| 黄色视频在线免费看| 欧美精品18videosex性欧美| 91av在线免费播放| 狠狠噜噜| 91视频中文字幕| 一区二区三区成人电影| 亚洲免费无码视频| 中文无码久久| 亚洲美女视频网| 最新免费一区二区三区| 日韩人妻中文| 亚洲高清视频在线| 成人av小说网站| 99久久综合国产精品二区| 91丨PORN丨国产| 一级黄色在线| 国产免费一区二区| 欧美一级二级三级| 在线看操逼| 99免费小视频| 欧美另类| 嫩草视频在线观看| 国精产品一区二区三区在线观看| 蜜桃视频app| 亚洲无码18禁| 亚洲一区中文字幕| 亚洲高清国产欧美综合s8| 亚洲素人无码| 最近日本中文字幕中文翻译歌词| 91麻豆福利视频| 国产高清无码视频在线观看| 中出欧美亚洲| 伊人视频网| 欧美精品成人免费| 91网站免费观看| 肏屄视频在线观看| 欧美成人精品一级| 久久中文字幕视频| 麻豆精品在线| 婷婷综合缴情亚洲另类在线| 国语精品自拍| 豆花在线视频| 91无码在线观看| 欧美一区二区三区四区视频| 日日夜夜超碰| 免费A在线观看| 操逼的网站| 欧洲黄色片| 色综合久久久无码中文字幕999| 日本国产在线观看| 91精品久久久久| 翔田千里53歳在线播放| 狠狠狠狠狠狠狠狠狠| V天堂在线| 九九草在线视频| 久久AV无码| 天天综合7799| 亚洲色图狠狠撸| 爱爱视频免费网站| www中文字幕| 成人无码视频在线| 青青在线免费视频| 人人干人人干| 91丨九色丨蝌蚪丨对白| 日本黄色录像| 国产精品福利在线| 特级444www| 久草加勒比| 微拍福利一区二区| 天天日,天天干,天天操| 中文字幕在线观看免费高清电影| 天天谢天天干| 狼人一区二区| 欧美精产国品一二三产品在哪买| 天天久久毛片| 91精品国产三级| 精品久久久久久AV2025| 日韩精品小电影| 在线免费观看毛片| 成人黄网在线观看| 黄色一级视频网站| 亚洲AV电影在线观看| 丁香婷婷综合网| 91久久国产综合| 久操B| 一级Aa视频免费看| 性感成人在线| 亚洲精品成人一二三区| 日本无码一区二区三三| 欧美日韩国产免费观看成人片| 国产又大又粗又长| 能看的操逼网站| 国产乱子伦-区二区三区四区| 91在线无码精品国产三年| 日韩黄色免费电影| 黄色成人网站在线观看| 国产97在线视频| 国内老熟妇对白XXXXHD| 国产尤物| 日韩视频在线免费观看| 91av在线电影| 五月丁香成人网| 特爽特黄特级特色视频| 亚洲成人av在线观看| 安微妇搡BBBB搡BBBB日| 欧美日韩成人视频| 熟女人妻人妻の视频| 少妇人妻无码| 尹人大香蕉网| 国产一区二区三区免费视频| 六月天av| 九九激情| 亚洲无码A片在线| 天天操天天操天天| 91最新国产| 国产在线无码视频| 欧美午夜精品久久久久免费视 | 国产欧美综合在线观看| 五月婷婷丁香综合| 二区三区无码| 久久亚洲欧美| 中文字幕乱码在线| 色五月婷婷中文字幕| 韩日av| 在线观看无码| 久久在线精品| 黄色a在线| AV黄色在线观看| 在线观看中文字幕视频| 九九无码视频| 大香蕉久久伊人| 亚洲成人精品| 日日摸日日操| 午夜免费AV| 91人妻人人爽人人爽| 成人三级视频在线| 久久久久成人片免费观看蜜芽| 欧美成人手机在线看片| 天天干天天摸| 91久久精品一区二区三| 亚洲三级无码在线观看| 国产一区二区三区免费| 大帝av| 日韩视频一级| 丁香色五月婷婷| 西西4444www大胆无吗| 北条麻妃网址| 亚洲天堂一区在线观看| 一区二区精品| 伊人久久视频| 日本精品三级| 中韩无码| 中文字幕精品在线视频| 91成人免费电影片| 一区二区视频在线观看| 波多野结衣在线观看一区二区 | 蜜桃久久99精品久久久酒店| 丁香五月婷婷中文字幕| 国产三级AV在线观看| 五月天社区| 亚洲一区翔田千里无码| 北条麻妃一区二区三区在线观看| 操操网| 国产精品一级a毛视频| 成人大香蕉| 无码精品视频在线观看| 久草大香蕉在线| 91无码人妻一区二区三区| 久久精品夜色噜噜亚洲A∨| 无码69| 久操视频一区二区三区| 国产成人精| www.日韩AV| 人人操人人摸人人射| 亚洲无码福利| 久久精品毛片| 99视频在线免费播放| 国产视频一区二区三区四区| 亚洲成人免费在线观看| 青青草伊人大香蕉| 亚洲精品一区二区三区四区高清| 无码av网站| 日韩成人观看| 91人妻人澡| 欧美成人精品无码网站| 亚洲欧美日本在线观看| 北京熟妇搡BBBB搡BBBB电影| 欧美美女日逼视频| 免费亲子乱婬一级A片| 日韩欧美国产精品综合嫩V| 久操久操久操| 亚洲天堂在线视频| 在线免费观看黄| 久久久精品午夜人成欧洲亚洲韩国| AV中文无码| 天天视频狠狠狠狠| 久久久网站| 在线亚洲观看| 久久免费视频6| 亚洲Av无码午夜国产精品色软件 | 欧美成人黄色电影| 欧美性综合| 亚洲AV无码专区在线播放中文 | 久操AV| 韩日中文字幕| 国产又粗又猛又爽又黄91精品 | 无码狠狠躁久久久久久久91| 免费无码网站| 一卡二卡在线视频| 按摩忍不住BD中文字幕| 久久伊| 91香蕉国产在线观看软件| 尿在小sao货里面好不好| 亚洲国产精品尤物yw在线观看 | 北条麻妃网址| 中文字幕在线免费看线人| 日韩在线三级片| 黄色片网站视频| 久久国产热在8| 蜜桃视频一区二区三区四区av| 欧美精品在线播放| 欧美亚洲日韩国产| 日本一区二区三区在线观看网站| 美女A级毛片| h在线网站| 人人看人人搞人人摸| 亚洲色图在线观看| 激情AV在线| 成人免费在线观看| 18禁黄色免费网站| 亚洲网站在线播放| 一个人看的www日本高清视频 | 婷婷在线播放| 成人国产综合| 免费在线看黄色| 人人操人人摸人人看| 久久偷看各类wc女厕嘘嘘偷窃 | 一级免费a片| 欧美日韩高清在线| 爱搞搞视频| 亚洲AV无码乱码精| 亚洲无码18禁| 久久成人国产| 99爱免费视频| 99爱在线| 亚洲一区二区视频在线观看| 开心五月色婷婷综合开心网| 人妻北条麻妃在线| 人妻少妇中文字幕久久牛牛| 亚洲婷婷小说| 91人妻人人澡人人爽人人精吕| 肏少妇女情人大骚逼直播一区二区| 97人人操| 五月天婷婷激情| 日本不卡一区二区| 日韩成人无码AV| 乱伦性爱视频| 99在线视频免费观看| 亚洲中文AV| 国产成人免费在线| 日韩精品一二三区| 无码一道本一区二区无码| 麻豆高清无码| 亚洲欧美日韩色图| 婷婷久久婷婷| 豆花在线视频| 97香蕉网| 中文无码一区二区三区| 三级黄色毛片| 亚洲精品无码视频在线观看| 日本天堂在线|