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

您的位置:首頁技術文章
文章詳情頁

Vue自定義render統一項目組彈框功能

瀏覽:110日期:2023-01-15 08:02:19

一、本文收獲

pick

二、為什么要統一封裝彈框;

要封裝成怎樣

通過舉例常規彈框的寫法。我們可以體會到,通常要彈出一個頁面,需要創建一個頁面 normalDialog.vue 包裹 dialogBody.vue (彈框主體);需要 parent.vue 設置flag控制彈框顯示隱藏, normalDialog.vue 關閉的時候設置 parent.vue 對應 flag 。缺點: 流程繁雜、配置繁瑣、不靈活、樣式不統一和參數傳遞麻煩等 。如果一個項目彈框較多的時候,弊端將會更明顯,大量的 isXxxDialogShow ,大量的 vue 文件。因此項目組急需一個能簡單配置就能彈出彈框的 API 。

1. 常規彈框寫法 dialoBody.vue (彈框主體) ,此處采用 Composition API 的寫法。只做了簡單的頁面,包含校驗,抽取保存數據的常規邏輯。

<template> <div class='dialog-body'> <div class='item'> <div>名稱</div> <el-input v-model='name'></el-input> </div> <div class='item'> <el-radio-group v-model='attention'> <el-radio label='已關注'></el-radio> <el-radio label='等下關注'></el-radio> </el-radio-group> </div> <div class='item'> <el-radio-group v-model='like'> <el-radio label='已點贊'></el-radio> <el-radio label='等下點贊'></el-radio> </el-radio-group> </div> </div></template><script>import { reactive, toRefs } from ’@vue/composition-api’import pick from ’lodash/pick’import { Message } from ’element-ui’export default { props: { defaultName: String, }, setup(props, ctx) { const ATTENTIONED = ’已關注’ const LIKED = ’已點贊’ const state = reactive({ name: props.defaultName, // 名稱 attention: ’已關注’, // 關注 like: ’已點贊’, // 點贊 }) /************************************************************* * 頁面綁定的事件 * 建議寫法: * 1. 定義methods常量 * 2. 處理相關業務邏輯的時候,需要綁定事件到頁面的時 * 建議通過methods.onXxx = ()=>{ // 相關邏輯 }的形式定義 * 好處1: onXxx定義的位置和相關業務邏輯代碼關聯一起 * 好處2: 可以統一通過...methods的形式在setup統一解構 * 好處3: 當頁面邏輯復雜,需要操作的數據關聯性強,不可拆解組件; * 可將相關業務的代碼在獨立模塊定義; * 獨立模塊暴露API handleXxx(methods,state),流水線加工methods; * 和Vue2源碼一樣,流水線加工的思想. */ const methods = {} // 校驗名稱 methods.onNameBlur = () => {} // ************************ 向外暴露的API ************************ const apiMethods = { // 保存前校驗 isCanSave() { if (state.attention !== ATTENTIONED || state.like !== LIKED) { Message.error(’未關注或者點贊,不能關閉,嘻嘻’) return false } return true }, // 獲取保存數據 getSaveData() { // ******* lodash pick 從對象中抽取數據 return pick(state, [’name’, ’attention’, ’like’]) }, } return { ...toRefs(state), ...methods, apiMethods, } },}</script><style lang='less'>.dialog-body { width: 100%; height: 100px;}</style>

2.normalDialog.vue 包裹彈框主體 dialoBody.vue

<template> <el-dialog :visible.sync='isShow' :before-close='onClose' > <dialog-body default-name='參數傳遞的名稱' ref='inner'></dialog-body> <span slot='footer' class='dialog-footer'> <el-button @click='onClose'>取 消</el-button> <el-button type='primary' @click='onOK'>確 定</el-button> </span> </el-dialog></template><script>import dialogBody from ’./dialogBody.vue’export default { components: { dialogBody, }, data() { return { isShow: true, } }, methods: { onClose() { // *********** 修改parent.vue ******** this.$parent.isNormalDialogShow = false }, // ******* 控制保存流程 ******** onOK() { const inner = this.$refs.inner // 校驗是否可以保存 if (inner.apiMethods.isCanSave()) { // 獲取保存數據 const postData = inner.apiMethods.getSaveData() console.log(’>>>>> postData >>>>>’, postData) // 保存成功后關閉彈框 this.onClose() } }, },}</script>

parent.vue

// html 部分<normal-dialog v-if='isNormalDialogShow' />// Js部分data(){isNormalDialogShow:false}methods:{ onDialogShow(){ // ******控制彈框顯示***** this.isNormalDialogShow = true }}

2. 要封裝成怎樣

2.1 API訴求:

isXxxDialogShowel-dialog

2.2 理想API:

import dialogBody from ’./dialogBody.vue’const dialog = new JSDialog({ comonent: dialogBody, dialogOpts: { // 可擴展配置 title: ’JSDialog設置的彈框標題’, width: ’400px’ }, props: { defaultName: ’JSDialog傳遞的參數’, }, onOK() { const inner = dialog.getInner() // 能取到dialogBody的引用 // 控制流程 if (inner.apiMethods.isCanSave()) { // 獲取保存數據 const postData = inner.apiMethods.getSaveData() console.log(’>>>>> postData >>>>>’, postData) // 關閉彈框 dialog.close() } }, onCancel() { dialog.close() // 彈框關閉 },})dialog.show() // 彈框顯示

三、如何封裝

動態控制顯示內容,腦海浮現的三個方案: 卡槽、動態組件和重寫 render 。下面在動態彈框場景下簡單對比三個方案。

slot(卡槽) ,和 el-dialog 原理類似,只是再封裝了一層,少定義了 normalDialog.vue 文件。 缺點:調用復雜,不靈活;不容易控制關閉的流程;只能在 template 中定義 。 component(動態組件) ,創建 commonDialog.vue ,統一掛在 App.vue 下,利用 <component :is='componentId'></component> 動態切換彈框主體, commonDialog.vue 監聽 componentId 變化來切換彈框主體。 缺點:要提前將所有彈框主體組件注冊到commonDialog.vue頁面的components上;依賴于vuex,侵入性較強;純js文件通過vuex彈出彈框相對復雜,不靈活 。 重寫 render , render 是 Vue 對造輪子開發者開放的后門。動態彈框可作為獨立的功能模塊,內部通過new Vue ,重寫 render 控制渲染內容。 獨立 Vue 實例,可預先創建,可在任何位置控制彈框,靈活,清晰 。 缺點:暫無

1. 整體代碼

先整體預覽一下代碼,下面再細分講解。

import Vue from ’vue’import merge from ’lodash/merge’import orderBy from ’lodash/orderBy’// 按鈕配置項構造器function btnBuilder(options) { const defaultBtn = { text: ’按鈕’, // 顯示文本 clickFn: null, // 點擊回調 type: ’default’, // 樣式 isHide: false, // 是否隱藏 order: 2 // 順序 } return { ...defaultBtn, ...options }}export default class JSDialog { constructor(originOptions) { this.options = {} this.vm = null this._mergeOptions(originOptions) this._initVm() } // 參數合并 _mergeOptions(originOptions) { const defaultOptions = { component: ’’, // 彈框主體vue頁面 // 可擴展el-dialog官方api所有配置項,小駝峰aaaBbbCcc dialogOpts: { width: ’40%’, title: ’默認標題’ }, // 傳入彈框主體vue組件的參數 props: {}, // 點擊確定回調 onOK: () => { console.log(’JSDialog default OK’), this.close() }, // 點擊取消回調 onCancel: () => { console.log(’JSDialog default cancel’), this.close() }, footer: { ok: btnBuilder({ text: ’確定’, type: ’primary’, order: 0 }), cancel: btnBuilder({ text: ’取消’, order: 1 }) } } // 參數合并到this.options merge(this.options, defaultOptions, originOptions) const footer = this.options.footer Object.entries(footer).forEach(([key, btnOptions]) => { // 確定和取消默認按鈕 if ([’ok’, ’cancel’].includes(key)) { const clickFn = key === ’ok’ ? this.options.onOK : this.options.onCancel // 默認按鈕回調優先級: footer配置的clickFn > options配置的onOK和onCancel btnOptions.clickFn = btnOptions.clickFn || clickFn } else { // 新增按鈕 // 完善配置 footer[key] = btnBuilder(btnOptions) } }) } _initVm() { const options = this.options const beforeClose = this.options.footer.cancel.clickFn // 彈框右上角關閉按鈕回調 this.vm = new Vue({ data() { return { // 需要響應式的數據 footer: options.footer, // 底部按鈕 visible: false // 彈框顯示及關閉 } }, methods: { show() { // 彈框顯示 this.visible = true }, close() { // 彈框關閉 this.visible = false }, clearVm() { // 清除vm實例 this.$destroy() } }, mounted() { // 掛載到body上 document.body.appendChild(this.$el) }, destroyed() { // 從body上移除 document.body.removeChild(this.$el) }, render(createElement) { // 彈框主體 const inner = createElement(options.component, { props: options.props, // 傳遞參數 ref: ’inner’ // 引用 }) // 控制按鈕顯示隱藏 const showBtns = Object.values(this.footer).filter(btn => !btn.isHide) // 控制按鈕順序 const sortBtns = orderBy(showBtns, [’order’], [’desc’]) // 底部按鈕 jsx 寫法 const footer = ( <div slot='footer'> {sortBtns.map(btn => ( <el-button type={btn.type} onClick={btn.clickFn}> {btn.text} </el-button> ))} </div> ) // 彈框主體 const elDialog = createElement( ’el-dialog’, { // el-dialog 配置項 props: { ...options.dialogOpts, visible: this.visible, beforeClose }, // **** 看這里,visible置為false后,el-dialog銷毀后回調 ***** on: { closed: this.clearVm }, ref: ’elDialog’ }, // 彈框內容:彈框主體和按鈕 [inner, footer] ) return elDialog } }).$mount() } // 封裝API // 關閉彈框 close() { this.vm.close() } // 顯示彈框 show() { this.vm.show() } // 獲取彈框主體實例,可訪問實例上的方法 getInner() { return this.vm.$refs.inner }}

2. 參數合并

​ 要做到 API 訴求中的:調用簡單、傳參簡便和可擴展控制彈框樣式。參數合并便是 成本最小 的實現方案,配合 TS 效果更佳。定義默認參數,通過 lodash 的 merge ,合并深層屬性。通過參數合并還能做到自定義 footer 按鈕,控制文本,樣式,順序和執行回調。

// 參數合并_mergeOptions(originOptions) { const defaultOptions = { component: ’’, // 彈框主體vue頁面 // 可擴展el-dialog官方api所有配置項,小駝峰aaaBbbCcc dialogOpts: { width: ’40%’, title: ’默認標題’ }, // 傳入彈框主體vue組件的參數 props: {}, // 點擊確定回調 onOK: () => { console.log(’JSDialog default OK’), this.close() }, // 點擊取消回調 onCancel: () => { console.log(’JSDialog default cancel’), this.close() }, footer: { ok: btnBuilder({ text: ’確定’, type: ’primary’, order: 0 }), cancel: btnBuilder({ text: ’取消’, order: 1 }) } } // 參數合并到this.options merge(this.options, defaultOptions, originOptions) const footer = this.options.footer Object.entries(footer).forEach(([key, btnOptions]) => { // 確定和取消默認按鈕 if ([’ok’, ’cancel’].includes(key)) { const clickFn = key === ’ok’ ? this.options.onOK : this.options.onCancel // 默認按鈕回調優先級: footer配置的clickFn > options配置的onOK和onCancel btnOptions.clickFn = btnOptions.clickFn || clickFn } else { // 新增按鈕 // 完善配置 footer[key] = btnBuilder(btnOptions) } })}

3. render函數

​ 摘取一段 渲染函數 & JSX 官方文檔關于 render 的描述: Vue 推薦在絕大多數情況下使用模板來創建你的 HTML。然而在一些場景中,你真的需要 JavaScript 的完全編程的能力。這時你可以用 渲染函數 ,它比模板更接近編譯器。 ​ ​ 官方文檔對渲染函數的寫法,參數,對應JSX寫法介紹已經很詳細,這里就不再贅述。下面代碼是在最新vue-cli創建項目上運行的,嘗試了JS參數創建元素和JSX創建元素兩種寫法。

render(createElement) { // 彈框主體 const inner = createElement(options.component, { props: options.props, // 傳遞參數 ref: ’inner’ // 引用 }) // 控制按鈕顯示隱藏 const showBtns = Object.values(this.footer).filter(btn => !btn.isHide) // 控制按鈕順序 const sortBtns = orderBy(showBtns, [’order’], [’desc’]) // 底部按鈕 jsx 寫法 const footer = ( <div slot='footer'> {sortBtns.map(btn => ( <el-button type={btn.type} onClick={btn.clickFn}> {btn.text} </el-button> ))} </div> ) // 彈框主體 const elDialog = createElement( ’el-dialog’, { // el-dialog 配置項 props: { ...options.dialogOpts, visible: this.visible }, on: { closed: this.clearVm }, ref: ’elDialog’ }, // 彈框內容:彈框主體和按鈕 [inner, footer] ) return elDialog}

4. 封裝API

​ 暫時只封裝了三個 API ,可根據不同的場景擴展 API ,比如彈框不銷毀隱藏,彈框刷新等。

show() ,彈框顯示

顯示主要是修改 el-dialog 的 visible 為 true ,控制掛載到 body 上的彈框顯示。

show() { this.vm.show()}

close() ,彈框關閉

關閉處理流程:修改 el-dialog 的 visible 為 false ;觸發 el-dialog 的 closed 事件;執行 clearVm ;執行 vm 的 $destroy() ; destroyed() 回調中將 $el 從 body 中移除。

close() { this.vm.close()}

getInner() ,獲取彈框主體實例,可用于訪問實例上的方法,控制按鈕流程

getInner() { return this.vm.$refs.inner}

四、如何使用

1. 最簡單場景,只配置頁面

按鈕事件回調采用默認的回調,確定和取消按鈕都可關閉彈框

import dialogBody from ’./renderJsx/dialogBody’const dialog = new JSDialog({ component: dialogBody,})dialog.show() // 彈框顯示

效果如下:

Vue自定義render統一項目組彈框功能

2. 控制彈框樣式及確定流程

可自定義el-dialog支持的配置項,見 Dialog 對話框 ;比如:title、 customClass 。通過customClass可統一控制項目內彈框的風格;可控制確定取消按鈕代碼回調。

import dialogBody from ’./renderJsx/dialogBody’const dialog = new JSDialog({ component: dialogBody, dialogOpts: { title: ’靚仔,美女歐嗨呦’, customClass:’js-dialog’ }, props: { defaultName: ’JSDialog傳遞的參數’ }, onOK() { const inner = dialog.getInner() // 能取到dialogBody的引用 // 控制流程 if (inner.apiMethods.isCanSave()) { // 獲取保存數據 const postData = inner.apiMethods.getSaveData() console.log(’>>>>> postData >>>>>’, postData) // 關閉彈框 dialog.close() } }, onCancel() { dialog.close() // 彈框關閉 }})

效果如下:

Vue自定義render統一項目組彈框功能

3. 自定義footer

自定義按鈕可控制執行回調,樣式,順序,顯示與隱藏

import dialogBody from ’./renderJsx/dialogBody’const dialog = new JSDialog({ component: dialogBody, footer: { ok: { // 修改默認按鈕 text: ’新增’ }, cancel: { // 隱藏默認按鈕 isHide: true }, add: { // 新增按鈕 text: ’另存為’, clickFn() { dialog.close() }, order: -1 // 控制按鈕順序,order小的顯示在右邊 }, add2: { text: ’新增按鈕2’, clickFn() { dialog.close() }, order: 3 } }})dialog.show() // 彈框顯示

效果如下:

Vue自定義render統一項目組彈框功能

總結

到此這篇關于Vue自定義render統一項目組彈框功能的文章就介紹到這了,更多相關Vue自定義render項目組彈框內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 日韩一区二区福利视频 | 99精品久久 | 国产精品亚洲第一区在线暖暖韩国 | 欧美一区二区三区在线观看视频 | 国产三级自拍 | 91久久在线| 亚洲欧美在线播放 | 91精品国产91久久久久久吃药 | 国产亚洲一区二区三区 | 国产一区二区精品 | 日韩欧美在线观看一区二区三区 | 国产一级视频免费播放 | 毛片免费观看视频 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产精品一二 | 超碰美女| 国产91久久精品一区二区 | 美女又黄又免费 | 国产一区二区久久 | 国产欧美综合一区二区三区 | 成版人性视频 | 欧美国产在线观看 | 国产精品久久久久9999 | 精品伦精品一区二区三区视频 | 亚州中文 | 久久国产精品99久久久久久老狼 | 在线视频91 | 午夜在线影院 | 激情久久久久 | 亚洲网站视频 | 成人午夜在线视频 | 国产欧美精品一区二区三区 | 一级片免费在线视频 | 亚洲国产精品久久久久久 | 国产伦精品一区二区三区在线 | 国产精品成人一区二区三区夜夜夜 | 亚洲成人第一区 | 最新中文字幕久久 | 中文字幕自拍偷拍 | 国产精品美女久久久久久久久久久 | 在线播放国产一区二区三区 | 久久久国产精品视频 | 成人毛片在线观看视频 | 麻豆.蜜桃.91.天美入口 | 国产美女久久久 | 成人欧美一区二区三区黑人孕妇 | 色吊丝2288sds中文字幕 | 99精品欧美一区二区蜜桃免费 | 国产77777 | 99re国产| 精品久久久久久久 | 天天影视综合 | 国产日韩欧美一区 | 伦理午夜电影免费观看 | 日韩久久精品一区二区 | 国产免费自拍av | 欧美日韩国产一区二区三区不卡 | jjzz18国产| 亚洲欧美精品一区二区三区 | 欧美精品免费在线观看 | 91免费版在线观看 | 在线中文字幕av | 成年免费观看 | 日韩午夜电影在线观看 | 亚洲精品在线播放视频 | 国产视频一视频二 | 九色av | 欧美精品一区二区三区四区 | 久久精品99 | 午夜黄色影院 | 福利网站在线观看 | 国产色 | 国产高清在线 | 91免费看 | 中文亚洲| 国产欧美精品一区二区 | 99热国| 91精品视频在线播放 | 91亚洲国产成人久久精品网站 | 91精品国产综合久久精品 | 日日做 | 亚洲欧美aⅴ | 视频二区 | 国产精品香蕉在线观看 | 成人av高清在线观看 | 国产老头老太作爱视频 | 999成人网| 久久久91 | 国产目拍亚洲精品99久久精品 | 久久视频一区 | 久久美女视频 | 91中文字幕在线观看 | 久久久91精品国产一区二区精品 | 天天干 夜夜操 | 国产日韩欧美在线 | 国产日韩欧美一区 | 一区二区三区四区国产 | 欧美视频一区二区三区在线观看 | 美女午夜影院 | 一级欧美 | 日日摸夜夜添夜夜添高潮视频 | 美女又黄又免费 | 国产激情精品一区二区三区 | 亚洲视频 欧美视频 | 精品视频一区二区三区 | a在线v| 毛片av在线 | 偷派自拍 | 久久久久久久久久久久久av | 99在线观看 | 亚洲综合无码一区二区 | 欧美日在线 | 日韩免费一区 | a√天堂资源在线 | 国产伦精品一区二区三区四区视频_ | 男人天堂中文字幕 | 91高清视频在线观看 | 久久久精品久久久 | 婷婷91| 97久久久国产精品 | 91视频播放| 久久精品欧美 | 日韩中文在线 | 亚洲成人日韩 | 久在线视频 | 日韩中文字幕在线观看 | 日日操天天操 | 成人免费看 | 亚洲人成人一区二区在线观看 | 99国产精品 | 亚洲视频777| 在线a电影 | 欧美国产日韩一区 | 日本三级国产 | 99免费观看| 欧美日韩在线一区二区 | 成人欧美 | 一级篇 | 在线精品亚洲欧美日韩国产 | 永久免费精品视频 | 久久久久久影院 | 天天精品视频免费观看 | 成人免费毛片高清视频 | 91极品视频在线观看 | 亚洲久草在线 | 夜夜爽99久久国产综合精品女不卡 | 亚洲黄色区 | 91在线视频观看 | 亚洲永久免费 | 亚洲精品乱码久久久久久蜜桃 | 国产一区 | 在线成人av| 久草观看 | 大胸av| 色精品 | 成人aaa| 精品一区二区三区免费毛片 | 在线一区二区三区做爰视频网站 | 人人干在线视频 | 日本一区二区不卡 | 国产精品久久国产精品 | 日本视频免费高清一本18 | 久久伊人精品网 | 国产一区二区三区在线免费观看 | 国产精品久久久久久久久久 | 91精品国产一区二区三区香蕉 | 久久99国产精品久久99大师 | 黄色片免费在线观看视频 | 人人玩人人添人人澡97 | 日本免费三片免费观看 | 国产精品久久久久久久久久妞妞 | 91爱爱视频 | 久久国产一 | 欧美成人第一页 | 亚洲三级视频 | 一级毛片视频播放 | 亚洲va中文字幕 | 亚洲高清在线视频 | 91免费在线播放 | 国产伦精品一区二区三区四区视频 | 91精品国产综合久久精品 | 日韩国产欧美一区 | 国产精品日韩一区二区 | 黄色成人在线 | 精品欧美一区二区三区久久久 | 欧美78videosex性欧美 | 欧美视频一区 | 日韩中文在线 | 日韩欧美国产成人一区二区 | 国产精品久久久久精 | 久久久久久国产一级毛片高清版 | 欧美精品成人 | 爱操av| 国产精品一区久久久久 | 久久久国产精品 | 亚洲精品一区二三区不卡 | 91精品国产色综合久久不卡98口 | 激情.com | 最近中文字幕免费观看 | 天堂√在线观看一区二区 | 日本韩国欧美一区 | 97伦理电影| 一区二区色 | 在线观看免费黄色 | 在线亚洲人成电影网站色www | 91免费看片 | 亚洲最大免费视频 | 亚洲免费一区二区 | 久久久久久久久国产 | 亚洲男人的天堂在线 | 欧美精品区 | 亚洲日日操 | 欧美激情网站 | 国产小视频在线 | 久久成人一区二区 | 中文字幕精品三区 | 亚洲精品视频在线 | 国产91看片 | 国产福利在线观看 | 91大神xh98hx在线播放 | 黄毛片视频 | 青青草在线免费视频 | 日本一级毛片免费看 | 亚洲不卡在线观看 | 伊人欧美视频 | www.久久久| 一级黄色av片 | 欧美国产在线观看 | 亚洲成人久久久 | 色久视频 | www.99| 日韩一区二区三区在线观看 | 国产精品久久久久国产a级 99精品欧美一区二区三区综合在线 | 日本一区二区精品 | 婷婷色国产偷v国产偷v小说 | 毛片在线免费 | 免费在线成人 | 久久大陆 | 欧美日本韩国一区二区 | 99精品欧美一区二区三区 | 日韩精品一区二区三区在线观看 | 在线观看黄免费 | 青娱乐国产视频 | 国产精品一区免费在线观看 | 在线观看日韩 | 麻豆一区 | 婷婷色综合 | 伊人在线| 亚洲国产精品久久久久久 | www.av在线 | 亚洲国产一区二区在线 | 夜夜爽网址 | 中文字幕综合 | 国产精品视频免费观看 | 狠狠av| 韩国精品主播一区二区在线观看 | 精品一区二区av | 欧美一区二区视频 | 男女午夜视频 | 伊人网在线观看 | 伊人av在线免费观看 | 狠狠艹| 国产精品久久国产精品 | 免费三片在线观看网站 | 91一级 | 九九免费视频 | 国产成人亚洲综合 | 亚洲精品高清视频 | 99r精品在线 | 日韩精品免费在线视频 | 国产二区免费 | 91视频在线看 | 国产成人精品999在线观看 | 欧美午夜精品久久久久久人妖 | 最新的黄色网址 | 四虎av在线 | 91高清视频| 国产精品国产三级国产aⅴ 羞羞的视频在线 | 国产欧美精品一区二区三区四区 | 欧美www.| 中文字幕日韩一区二区 | 亚洲免费综合 | 国产精品777 | 亚洲综合色自拍一区 | 在线免费看黄视频 | 精品免费视频 | 韩国一区二区视频 | 欧美一级一区 | 午夜视频网址 | 国产成人av综合 | 精品一区二区6 | 亚洲成人高清 | 正在播放欧美 | 粉嫩视频在线观看 | 国产一区二区精品在线观看 | 天天曰夜夜操 | 91精品一区二区三区久久久久久 | 国产网址在线 | 91精品国产综合久久久久久丝袜 | xxxx欧美| 一区二区三区国产视频 | 天天操天天拍 | a成人| 91成人黄色 | 激情视频在线观看 | 国产无区一区二区三麻豆 | 亚洲欧美在线观看 | 三级欧美在线观看 | 91精品国产一区二区三区蜜臀 | 色悠久久久 | 日韩中文一区二区 | 一区二区三区国产视频 | 中文字幕在线视频精品 | 一区二区三区国产 | av看片| 国产a视频 | 人人av在线 | 男人的天堂免费 | www.麻豆av| 久久国产一区二区 | 二区国产| 国产精品丝袜视频 | 国产99久久久久久免费看农村 | 中文字幕三区 | 久久成人免费视频 | 国产精品久久久久毛片软件 | 亚洲v日韩v综合v精品v | 人人草天天草 | 国产精品jizz在线观看麻豆 | 欧美激情综合色综合啪啪五月 | 一区视频在线 | 国产精品国产精品国产专区不蜜 | 91秦先生艺校小琴 | 国产美女精品 | 亚洲一区二区免费在线观看 | 在线免费av观看 | 亚洲精品免费观看 | 欧美日韩精品一区 | 99伊人| 青青久久久 | 日韩性欧美| 成人av免费在线观看 | 九九亚洲精品 | 99re6在线视频精品免费 | av中文字幕在线 | 国产中文字幕在线播放 | 97成人在线视频 | 四虎影院在线看 | 在线亚洲欧美 | 男女精品 | 久久久精品久久久久 | 午夜精品一区二区三区在线播放 | 午夜久久久 | 精品亚洲一区二区三区在线观看 | 山岸逢花在线观看 | 日韩精品一区二区三区在线播放 | 黄色成人在线观看视频 | 人妖 丝袜 另类 亚洲 | 天天综合天天色 | 一级毛片免费完整视频 | 国产91在线播放精品91 | 天堂资源在线 | 亚洲国产二区三区 | 欧美久久精品 | 青青草91在线视频 | 在线看国产 | 国产精品女同一区二区久久夜 | 黄色免费av | 97色在线观看免费视频 | 中文字幕成人 | cao视频| 天天射欧美 | 日本a v在线播放 | 在线免费观看激情视频 | 免费观看一级毛片 | 亚洲欧美电影 | www.中文字幕在线 | 国产一区二区三区视频在线观看 | 天天天天爽 | 国产精品一区二区在线观看 | 午夜网 | 欧美a v在线播放 | 国产一区二区三区在线 | 国产高清免费视频 | 国产大片在线观看 | 午夜视频在线免费观看 | 亚洲高清视频在线 | 国产一区二区三区高清 | 伊人二区| 久久亚洲视频 | 欧美1级 | 国产毛片精品 | 亚洲在线免费观看 | 国产依人 | 黑人巨大精品欧美黑白配亚洲 | 日本一级毛片免费看 | 欧美二区三区 | 一级片在线观看免费 | 99精品一区二区 | 国产99久久 | 91久久精品一区二区别 | 亚洲av毛片一区二二区三三区 | 成人欧美一区二区三区视频xxx | 久久久精品一区二区三区 | 日韩av福利| 在线中文字幕av | 久色视频在线 | 嫩草成人影院 | 久久国产成人 | 亚洲二区在线 | 亚洲综合福利视频 | 三级在线观看 | 欧美性猛交一区二区三区精品 | 久久com | 国产毛片毛片 | 久草电影网 | 国产精品精品视频一区二区三区 | 神马久久久久久久 | 一区二区三区精品视频 | 欧美一区二区三区在线观看视频 | 国产www在线| 91精品国产综合久久久久久丝袜 | 狠狠色狠狠色合久久伊人 | 国产精品久久电影观看 | 国产成人精品久久 | 手机看片国产精品 | 久久久精品网 | 国产一区二区在线视频 | 日韩成人中文字幕 | 91午夜激情 | 日韩av高清在线 | 色黄视频在线看 | 黄色a视频 | 夜夜骑天天干 | 国产日韩在线视频 | 欧美综合在线一区 | 夜本色| 伊人久操 | 久久伊人免费视频 | 嫩草视频网| a√天堂资源在线 | 午夜寂寞网站 | 亚洲va中文字幕 | 久久国产精品一区 | 伊人操操 | 国产欧美在线视频 | 国产毛片视频 | 日韩欧美中文字幕在线视频 | av片免费| 久久久久国产精品一区二区三区 | 91亚洲一区 | 国产一区不卡 | 国产视频1区 | 在线看亚洲 | 久久国产精品免费一区二区三区 | 国产三级视频 | 亚洲欧美精品 | 国产精品久久久一区二区 | 高清国产视频 | av男人的天堂在线 | 一区二区三区精品视频免费看 | 日韩在线播放欧美字幕 | 精产国产伦理一二三区 | 久久青青 | 日韩欧美在线视频 | 一区二区三区久久 | 求av网址 | 亚洲国产一区在线 | 亚洲网站在线观看 | 国产精品久久久久久久久久ktv | 精品国产欧美一区二区三区成人 | 国产精品久久久久久亚洲调教 | 国产精品久久久久久久久久久久冷 | 99精品久久久久久久免费看蜜月 | 国产精品一区二区三区四区 | 日韩福利片| 狠狠综合久久av一区二区老牛 | 一区二区视频在线 | 精品999www| 国产精品欧美一区二区三区 | 久久99深爱久久99精品 | 日韩成人在线观看 | 在线日韩视频 | 中文字幕亚洲一区 | 国产午夜视频 | 天天碰天天操 | 日韩视频久久 | 国产情侣91 | 在线精品自拍 | 欧美久久精品 | 青青草国产在线 | 嫩草网站入口 | 成人免费av| 中文字幕在线免费视频 | 另类久久 | 在线看h| 99国产精品一区 | 7799精品视频天天看 | 在线观看国产视频 | 草草视频免费 | 亚洲精品一区二区 | 爱爱日韩| 亚洲成人综合在线 | 天堂资源在线 | 欧美亚洲国产一区 | 久久99国产精品久久99果冻传媒 | 亚洲乱码一区二区三区在线观看 | 欧美一级毛片免费观看 | 日本精品久久 | 亚洲精品日韩激情在线电影 | 午夜久久| 影视一区二区 | 日韩在线视频免费 | 国产成人在线一区二区 | 人人操日日干 | 亚洲精品一区中文字幕乱码 | 欧美一区二区三区国产精品 | 欧美精品一区二区在线观看 | 久久久久久久久一区二区三区 | 国产拍拍视频 | 91日韩欧美 | 亚洲 欧美 日韩在线 | 日本精品免费 | 久久久精品一区二区三区 | 色性av | 99精品网站| 超碰在线播| 国产馆一区二区 | www亚洲成人 | 国产成人精品综合 | 亚洲欧美中文字幕 | 国产精品高清在线 | 91在线视频播放 | 成人综合区 | 日韩欧美在线视频 | 每日更新亚洲 | 成人爽a毛片一区二区免费 美女高潮久久久 | 国产精品人人做人人爽人人添 | 国产一级毛片在线视频 | 在线99| 久久免费精品 | 亚洲国产精品久久久久 | 亚洲精品在线看 | 日本精品一区二区三区视频 | 欧美日韩一区二区三区免费视频 | 成人免费淫片视频观 | 欧美一区二区三区免费观看视频 | 美女视频一区 | 久草天堂 | 日韩成人黄色 | 黄色一级在线观看 | av不卡在线播放 | 精品久久一区二区三区 | 97超碰站 | 亚洲一区二区三区在线免费观看 | 欧美成人免费观看 | 免费的一级视频 | 黄色二区 | 国产在线精品一区二区三区 | 精品护士一区二区三区 | 欧美一级黄色影院 | 国产区第一页 | 午夜免费小视频 | 日韩毛片免费视频一级特黄 | 亚洲精品一区二区三区四区高清 | 国产精品久久嫩一区二区 免费 | 日韩欧美在线视频 | 成人高清在线 | 亚洲色图图片 | 毛片免费视频 | 久久精品| 四虎影院最新网站 | 日韩视频www | 国产三级在线 | 日韩一区在线视频 | 免费亚洲视频 | 在线视频第一页 | 亚洲一区二区三区四区的 | 狠狠躁日日躁夜夜躁东南亚 | 一区二区国产精品 | 中文字幕亚洲一区二区三区 | 久久青草av| 精品国产三级 | 久久精品欧美 | 99青青草 | 国产91在线播放精品91 | 一区福利 | 久久久涩| 国产高潮好爽受不了了夜色 | 国产99久久 | 国产精品久久久久久久午夜片 | 久久人体 | 中文字幕在线观看 | 中文字幕1区| 日本网站在线免费观看 | 日本免费一区二区视频 | 欧美一区不卡 | 国产v日产∨综合v精品视频 | 色久在线 | 性做久久久 | 亚洲永久免费 | 精品国产不卡一区二区三区 | 国产一区精品视频 | 国产精品中文字幕在线播放 | 日韩视频在线观看一区二区 | 97视频久久| 欧美在线一区二区三区 | 亚洲精品乱码久久久久久久久 | 欧美黑人xxx | 国产精品久久久久久久久久99 | 国产精品久久久久久久久久免费看 | 日韩一区二区三区在线观看 | 国产精品视频 | 国产欧美一区二区精品久久 | 亚洲91 |