日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

大事件后台管理系统开发实战(下)

發布時間:2024/9/27 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大事件后台管理系统开发实战(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 續前篇:大事件后臺管理系統開發實戰(中)
  • 1. 文章類別
    • 1.1 點擊編輯按鈕展示修改文章分類的彈出層
    • 1.2 為修改文章分類的彈出層填充表單數據
    • 1.3 更新文章分類的數據
    • 1.4 刪除文章分類
  • 2. 文章列表
    • 2.1 創建文章列表頁面
    • 2.2 定義查詢參數對象q
    • 2.3 請求文章列表數據并使用模板引擎渲染列表結構
    • 2.3.1 定義獲取文章列表數據
    • 2.4 定義美化時間格式的過濾器
    • 2.5 繪制篩選區域的UI結構
    • 2.6 發起請求獲取并渲染文章分類的下拉選擇框
    • 2.7 實現篩選的功能
  • 3. 分頁
    • 3.1 定義渲染分頁的 renderPage 方法
    • 3.2 調用 laypage.render 方法渲染分頁的基本結構
    • 3.3 在jump回調函數中通過obj.curr獲取到最新的頁碼值
    • 3.4 解決 jump 回調函數發生死循環的問題
    • 3.5 自定義分頁的功能項
    • 3.6 實現切換每頁展示多少條數據的功能
  • 4. 刪除文章
    • 4.1 實現刪除文章的功能
    • 4.2 解決刪除文章時的小 Bug
  • 5. 發布文章
    • 5.1 創建文章發布頁面的基本結構
    • 5.2 新建基本的表單結構
    • 5.3 渲染文章類別對應的下拉選擇框結構
    • 5.4 渲染富文本編輯器
    • 5.5 渲染封面裁剪區域
    • 5.6 渲染提交按鈕區域
    • 5.7 點擊選擇封面按鈕打開文件選擇框
    • 5.8 將選擇的圖片設置到裁剪區域中
    • 小結 - 渲染封面裁剪區域
    • 5.9 分析發布文章的實現步驟
    • 5.10 基于Form表單快速創建FormData對象
    • 5.11 將裁剪后的封面追加到FormData對象中
    • 5.12 發起Ajax請求實現發布文章的功能
  • 6. 編輯文章
    • 6.1 創建文章編輯頁面基本結構
    • 6.2 給編輯按鈕添加點擊事件
    • 6.3 新建基本的表單結構
    • 6.4 文章類別對應的下拉選擇框結構
    • 6.5 渲染富文本編輯器
    • 6.6 封面裁剪區域結構
    • 6.7 提交按鈕區域
    • 6.8 通過 URLSearchParams 對象,獲取 URL 傳遞的參數
    • 6.9 發起請求獲取文章詳情
    • 6.10 選擇文章封面
    • 6.11 監聽文件(文章封面圖片)選擇框的 change 事件
    • 6.12 設置文章的發布狀態
    • 6.13 發布文章
    • 6.14 完整html結構
    • 6.15 完整css 樣式代碼
    • 6.16 編輯功能完整 JS 代碼
  • 7. 將開發完成的項目代碼推送到GitHub


續前篇:大事件后臺管理系統開發實戰(中)

1. 文章類別

1.1 點擊編輯按鈕展示修改文章分類的彈出層

  • 為編輯按鈕添加 btn-edit 類名如下:

    <button type="button" class="layui-btn layui-btn-xs btn-edit" data-id="{{$value.Id}}">編輯</button>
  • 定義 修改分類 的彈出層:

    <script type="text/html" id="dialog-edit"><form class="layui-form" id="form-edit" lay-filter="form-edit"><!-- 隱藏域,保存 Id 的值 --><input type="hidden" name="Id"><div class="layui-form-item"><label class="layui-form-label">分類名稱</label><div class="layui-input-block"><input type="text" name="name" required lay-verify="required" placeholder="請輸入分類名稱" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">分類別名</label><div class="layui-input-block"><input type="text" name="alias" required lay-verify="required" placeholder="請輸入分類別名" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit lay-filter="formDemo">確認修改</button></div></div></form> </script>
  • 快速為一個表單填充數據:先為form表單添加 lay-filter 屬性,再調用form方法(前提是要先導入form:var form=layui.form)。同時,為表單創建一個隱藏域(input)用于保存id值
    3. 通過 代理 的形式,為 btn-edit 按鈕綁定點擊事件:

    var indexEdit = null$('tbody').on('click', '.btn-edit', function() {// 彈出一個修改文章分類信息的層indexEdit = layer.open({type: 1,area: ['500px', '250px'],title: '修改文章分類',content: $('#dialog-edit').html()})})

    1.2 為修改文章分類的彈出層填充表單數據

  • 為編輯按鈕綁定 data-id 自定義屬性:

    <button type="button" class="layui-btn layui-btn-xs btn-edit" data-id="{{$value.Id}}">編輯</button>
  • 在展示彈出層之后,根據 id 的值發起請求獲取文章分類的數據,并填充到表單中:

    var id = $(this).attr('data-id') // 發起請求獲取對應分類的數據 $.ajax({method: 'GET',url: '/my/article/cates/' + id,success: function(res) {form.val('form-edit', res.data)} })
  • 1.3 更新文章分類的數據

  • 通過代理的形式,為修改分類的表單綁定 submit 事件:

    $('body').on('submit', '#form-edit', function(e) {e.preventDefault()$.ajax({method: 'POST',url: '/my/article/updatecate',data: $(this).serialize(),success: function(res) {if (res.status !== 0) {return layer.msg('更新分類數據失敗!')}layer.msg('更新分類數據成功!')layer.close(indexEdit)initArtCateList()}}) })
  • 1.4 刪除文章分類

  • 為刪除按鈕綁定 btn-delete 類名,并添加 data-id 自定義屬性:

    <button type="button" class="layui-btn layui-btn-danger layui-btn-xs btn-delete" data-id="{{$value.Id}}">刪除</button>
  • 通過代理的形式,為刪除按鈕綁定點擊事件:

    $('tbody').on('click', '.btn-delete', function() {var id = $(this).attr('data-id') // 獲取 id 的值// 提示用戶是否要刪除layer.confirm('確認刪除?', { icon: 3, title: '提示' }, function(index) {$.ajax({method: 'GET',url: '/my/article/deletecate/' + id,success: function(res) {if (res.status !== 0) {return layer.msg('刪除分類失敗!')}layer.msg('刪除分類成功!')layer.close(index)initArtCateList()}})}) })
  • 2. 文章列表

    共分為3個區域,依卡片面板上的布局設計,從上到下依次是:

    • 篩選區域;
    • 列表區域;
    • 分頁區域。

    2.1 創建文章列表頁面

    首先,繪制卡片區域,打開layui官網,復制卡片面板的HTML結構代碼

  • 新建 /article/art_list.html 頁面結構如下:

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" href="/assets/lib/layui/css/layui.css" /><link rel="stylesheet" href="/assets/css/article/art_list.css" /></head><body><!-- 卡片區域 --><div class="layui-card"><div class="layui-card-header">文章列表</div><div class="layui-card-body"></div></div><!-- 導入第三方的 JS 插件 --><script src="/assets/lib/layui/layui.all.js"></script><script src="/assets/lib/jquery.js"></script><script src="/assets/js/baseAPI.js"></script><!-- 導入自己的 JS 腳本 --><script src="/assets/js/article/art_list.js"></script></body> </html>
  • 新建 /assets/css/article/art_list.css 樣式表如下:

    html, body {margin: 0;padding: 0; }body {padding: 15px;background-color: #f2f3f5; }
  • 新建 /assets/js/article/art_list.js 腳本文件。

  • 2.2 定義查詢參數對象q

  • 定義一個查詢的參數對象如下:

    // 定義一個查詢的參數對象,將來請求數據的時候,// 需要將請求參數對象提交到服務器var q = {pagenum: 1, // 頁碼值,默認請求第一頁的數據pagesize: 2, // 每頁顯示幾條數據,默認每頁顯示2條cate_id: '', // 文章分類的 Idstate: '' // 文章的發布狀態}
  • 2.3 請求文章列表數據并使用模板引擎渲染列表結構

    API 接口如圖(注意,請求時需攜帶 4 個 參數):




    2.3.1 定義獲取文章列表數據

    1)定義查詢的參數對象q, 將來請求數據時,需要將請求參數對象提交到服務器。

    var q = {pagenum: 1, // 默認值,默認請求第一頁的數據 pagesize: 2, // 每頁顯示幾條數據cate_id: '', // 文章分類的id,默認為空state: '' // 文章的發布狀態}

    2)定義一個獲取文章列表數據的方法(自定義函數)
    注: 要先導入模板引擎

    initTable() // 獲取文章列表數據的方法 function initTable() {$.ajax({method: 'GET',url: '/my/article/list',data: q,success: function(res) {if (res.status !== 0) {return layer.msg('獲取文章列表失敗!')}// 使用模板引擎渲染頁面的數據var htmlStr = template('tpl-table', res)$('tbody').html(htmlStr)}}) }
  • 在頁面中添加表格結構如下:
    在layui官網找到 【頁面元素】?\Rightarrow?【表格】?\Rightarrow?【常規用法】,復制html結構到代碼編輯器中。

  • 修改后的表格結構如下:

    <!-- 列表區域 --> <table class="layui-table"><colgroup><col /><col width="150" /><col width="180" /><col width="150" /><col width="150" /></colgroup><thead><tr><th>文章標題</th><th>分類</th><th>發表時間</th><th>狀態</th><th>操作</th></tr></thead><tbody></tbody> </table>
  • 定義列表數據的模板結構:

    <script type="text/html" id="tpl-table">{{each data}}<tr><td>{{$value.title}}</td><td>{{$value.cate_name}}</td><td>{{$value.pub_date|dataFormat}}</td><td>{{$value.state}}</td><td><button type="button" class="layui-btn layui-btn-xs">編輯</button><button type="button" class="layui-btn layui-btn-danger layui-btn-xs">刪除</button></td></tr>{{/each}} </script>
  • 2.4 定義美化時間格式的過濾器

  • 通過 template.defaults.imports 定義過濾器(此屬性模板引擎獨有,需先導入模板引擎):

    // 定義美化時間的過濾器template.defaults.imports.dataFormat = function(date) {const dt = new Date(date)var y = dt.getFullYear()var m = padZero(dt.getMonth() + 1)var d = padZero(dt.getDate())var hh = padZero(dt.getHours())var mm = padZero(dt.getMinutes())var ss = padZero(dt.getSeconds())return y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss}// 定義補零的函數function padZero(n) {return n > 9 ? n : '0' + n}
  • 在模板引擎中使用過濾器:

    <td>{{$value.pub_date|dataFormat}}</td>
  • 2.5 繪制篩選區域的UI結構

  • 繪制 UI 結構:

    <!-- 篩選區域 --> <form class="layui-form" id="form-search"><div class="layui-form-item layui-inline"><select name="cate_id"></select></div><div class="layui-form-item layui-inline"><select name="state"><option value="">所有狀態</option><option value="已發布">已發布</option><option value="草稿">草稿</option></select></div><div class="layui-form-item layui-inline"><button class="layui-btn" lay-submit lay-filter="formDemo">篩選</button></div> </form>
  • 2.6 發起請求獲取并渲染文章分類的下拉選擇框

  • 定義 initCate 函數請求文章分類的列表數據:

    initCate()// 初始化文章分類的方法function initCate() {$.ajax({method: 'GET',url: '/my/article/cates',success: function(res) {if (res.status !== 0) {return layer.msg('獲取分類數據失敗!')}// 調用模板引擎渲染分類的可選項var htmlStr = template('tpl-cate', res)$('[name=cate_id]').html(htmlStr)// 通過 layui 重新渲染表單區域的UI結構form.render()}})}
  • 定義分類可選項的模板結構:

    <script type="text/html" id="tpl-cate"><option value="">所有分類</option>{{each data}}<option value="{{$value.Id}}">{{$value.name}}</option>{{/each}} </script>
  • 2.7 實現篩選的功能

  • 為篩選表單綁定 submit 事件:

    $('#form-search').on('submit', function(e) {e.preventDefault()// 獲取表單中選中項的值var cate_id = $('[name=cate_id]').val()var state = $('[name=state]').val()// 為查詢參數對象 q 中對應的屬性賦值q.cate_id = cate_idq.state = state// 根據最新的篩選條件,重新渲染表格的數據initTable() })
  • 3. 分頁

    在 layui 官方文檔中找到 【內置模塊?\Rightarrow?分頁】,



    1)在自己 vs code 中 art_list.html 分頁區域的位置 ,添加一個 id 名為 pageBox 的 div 容器,用于存放分頁組件

    2)初始化分頁區:從 layui 中導入 laypage 對象,即復制上圖上的代碼 var laypage=layui.laypage,并在 art_list.js 頭部導入此句代碼。

    3)js 中調用 laypage.render 方法渲染分頁的結構。注意要傳入 4 個參數

    參數選項說明類型默認值
    elem指向存放分頁的容器,值可以是容器ID、DOM對象。如:
    1. elem: ‘id’ 注意:這里不能加 # 號
    2. elem: document.getElementById(‘id’)
    String/Object-
    count數據總數。一般通過服務端得到Number-
    limit每頁顯示的條數。laypage將會借助 count 和 limit 計算出分頁數。Number10
    curr起始頁。一般用于刷新類型的跳頁以及HASH跳頁。Number1
    // 導入 laypage 對象 var laypage = layui.laypage; // 渲染底部分分頁區域的方法function renderPage(total) {laypage.render({elem: 'pageBox', //分頁容器 Idcount: total, // 分頁條數limit: q.pagesize, // 每頁顯示幾條數據curr: q.pagenum // 指定默認選中哪一頁})}

    保存并刷新網頁后,效果如下:



    3.1 定義渲染分頁的 renderPage 方法

  • 定義渲染分頁的方法:

    function renderPage(total) {console.log(total) }
  • 在 initTable 中調用 renderPage 方法:

    function initTable() {$.ajax({method: 'GET',url: '/my/article/list',data: q,success: function(res) {if (res.status !== 0) {return layer.msg('獲取文章列表失敗!')}// 使用模板引擎渲染頁面的數據var htmlStr = template('tpl-table', res)$('tbody').html(htmlStr)// 調用渲染分頁的方法renderPage(res.total)}}) }
  • 3.2 調用 laypage.render 方法渲染分頁的基本結構

  • 在頁面中定義分頁的區域:

    <!-- 分頁區域 --> <div id="pageBox"></div>
  • 調用 laypage.render() 方法來渲染分頁的結構:

    // 定義渲染分頁的方法 function renderPage(total) {// 調用 laypage.render() 方法來渲染分頁的結構laypage.render({elem: 'pageBox', // 分頁容器的 Idcount: total, // 總數據條數limit: q.pagesize, // 每頁顯示幾條數據curr: q.pagenum // 設置默認被選中的分頁}) }
  • 3.3 在jump回調函數中通過obj.curr獲取到最新的頁碼值

    // 定義渲染分頁的方法 function renderPage(total) {// 調用 laypage.render() 方法來渲染分頁的結構laypage.render({elem: 'pageBox', // 分頁容器的 Idcount: total, // 總數據條數limit: q.pagesize, // 每頁顯示幾條數據curr: q.pagenum, // 設置默認被選中的分頁// 分頁發生切換的時候,觸發 jump 回調jump: function(obj) {console.log(obj.curr)// 把最新的頁碼值,賦值到 q 這個查詢參數對象中q.pagenum = obj.curr}}) }

    3.4 解決 jump 回調函數發生死循環的問題

    分頁里面有個 jump 回調函數(包括兩個參數,obj和first),通過這個回調就可以拿到當前的頁碼值。只要點擊頁碼或者調用了 laypage.render() 方法,就會觸發 jump 回調。

    jump 中,能監聽到分頁切換事件

    // 定義渲染分頁的方法function renderPage(total) {// 調用 laypage.render() 方法來渲染分頁的結構laypage.render({elem: 'pageBox', // 分頁容器的 Idcount: total, // 總數據條數limit: q.pagesize, // 每頁顯示幾條數據curr: q.pagenum, // 設置默認被選中的分頁// 分頁發生切換的時候,觸發 jump 回調// 觸發 jump 回調的方式有兩種:// 1. 點擊頁碼的時候,會觸發 jump 回調// 2. 只要調用了 laypage.render() 方法,就會觸發 jump 回調jump: function(obj, first) {// 可以通過 first 的值,來判斷是通過哪種方式,觸發的 jump 回調// 如果 first 的值為 true,證明是方式2觸發的// 否則就是方式1觸發的console.log(first)console.log(obj.curr)// 把最新的頁碼值,賦值到 q 這個查詢參數對象中q.pagenum = obj.curr// 根據最新的 q 獲取對應的數據列表,并渲染表格// initTable() // 不能直接在這里調用,會形成死循環。if (!first) {initTable()}}})}

    3.5 自定義分頁的功能項

    // 定義渲染分頁的方法 function renderPage(total) {// 調用 laypage.render() 方法來渲染分頁的結構laypage.render({elem: 'pageBox', // 分頁容器的 Idcount: total, // 總數據條數limit: q.pagesize, // 每頁顯示幾條數據curr: q.pagenum, // 設置默認被選中的分頁layout: ['count', 'limit', 'prev', 'page', 'next', 'skip'],limits: [2, 3, 5, 10],// 分頁發生切換的時候,觸發 jump 回調// 觸發 jump 回調的方式有兩種:// 1. 點擊頁碼的時候,會觸發 jump 回調// 2. 只要調用了 laypage.render() 方法,就會觸發 jump 回調jump: function(obj, first) {// 可以通過 first 的值,來判斷是通過哪種方式,觸發的 jump 回調// 如果 first 的值為 true,證明是方式2觸發的// 否則就是方式1觸發的console.log(first)console.log(obj.curr)// 把最新的頁碼值,賦值到 q 這個查詢參數對象中q.pagenum = obj.curr// 根據最新的 q 獲取對應的數據列表,并渲染表格// initTable()if (!first) {initTable()}}}) }

    3.6 實現切換每頁展示多少條數據的功能

    // 定義渲染分頁的方法 function renderPage(total) {// 調用 laypage.render() 方法來渲染分頁的結構laypage.render({elem: 'pageBox', // 分頁容器的 Idcount: total, // 總數據條數limit: q.pagesize, // 每頁顯示幾條數據curr: q.pagenum, // 設置默認被選中的分頁layout: ['count', 'limit', 'prev', 'page', 'next', 'skip'],limits: [2, 3, 5, 10],// 分頁發生切換的時候,觸發 jump 回調// 觸發 jump 回調的方式有兩種:// 1. 點擊頁碼的時候,會觸發 jump 回調// 2. 只要調用了 laypage.render() 方法,就會觸發 jump 回調jump: function(obj, first) {// 可以通過 first 的值,來判斷是通過哪種方式,觸發的 jump 回調// 如果 first 的值為 true,證明是方式2觸發的// 否則就是方式1觸發的console.log(first)console.log(obj.curr)// 把最新的頁碼值,賦值到 q 這個查詢參數對象中q.pagenum = obj.curr// 把最新的條目數,賦值到 q 這個查詢參數對象的 pagesize 屬性中q.pagesize = obj.limit// 根據最新的 q 獲取對應的數據列表,并渲染表格// initTable()if (!first) {initTable()}}}) }

    4. 刪除文章

    4.1 實現刪除文章的功能

  • 為刪除按鈕綁定 btn-delete 類名和 添加data-id 自定義屬性:

    <button type="button" class="layui-btn layui-btn-danger layui-btn-xs btn-delete" data-id="{{$value.Id}}">刪除</button>
  • 通過代理的形式,為刪除按鈕綁定點擊事件處理函數:

    $('tbody').on('click', '.btn-delete', function() {// 獲取到文章的 idvar id = $(this).attr('data-id') // 這句一定要放在詢問提示框之前,否則會刪除失敗!// 詢問用戶是否要刪除數據layer.confirm('確認刪除?', { icon: 3, title: '提示' }, function(index) {$.ajax({method: 'GET',url: '/my/article/delete/' + id,success: function(res) {if (res.status !== 0) {return layer.msg('刪除文章失敗!')}layer.msg('刪除文章成功!')initTable()}})layer.close(index)}) })
  • 4.2 解決刪除文章時的小 Bug

    $('tbody').on('click', '.btn-delete', function() {// 獲取刪除按鈕的個數var len = $('.btn-delete').length// 獲取到文章的 idvar id = $(this).attr('data-id')// 詢問用戶是否要刪除數據layer.confirm('確認刪除?', { icon: 3, title: '提示' }, function(index) {$.ajax({method: 'GET',url: '/my/article/delete/' + id,success: function(res) {if (res.status !== 0) {return layer.msg('刪除文章失敗!')}layer.msg('刪除文章成功!')// 當數據刪除完成后,需要判斷當前這一頁中,是否還有剩余的數據// 如果沒有剩余的數據了,則讓頁碼值 -1 之后,// 再重新調用 initTable 方法// 4if (len === 1) {// 如果 len 的值等于1,證明刪除完畢之后,頁面上就沒有任何數據了// 頁碼值最小必須是 1q.pagenum = q.pagenum === 1 ? 1 : q.pagenum - 1}initTable()}})layer.close(index)}) })

    5. 發布文章

    5.1 創建文章發布頁面的基本結構

  • 新建 /article/art_pub.html 頁面結構如下:

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" href="/assets/lib/layui/css/layui.css" /><link rel="stylesheet" href="/assets/css/article/art_pub.css" /></head><body><!-- 卡片區域 --><div class="layui-card"><div class="layui-card-header">寫文章</div><div class="layui-card-body">卡片式面板面板通常用于非白色背景色的主體內<br />從而映襯出邊框投影</div></div><!-- 導入第三方的 JS 插件 --><script src="/assets/lib/layui/layui.all.js"></script><script src="/assets/lib/jquery.js"></script><script src="/assets/js/baseAPI.js"></script><!-- 導入自己的 JS --><script src="/assets/js/article/art_pub.js"></script></body> </html>
  • 新建 /assets/css/article/art_pub.css 樣式文件如下:

    html, body {margin: 0;padding: 0; }body {padding: 15px;background-color: #f2f3f5; }
  • 新建 /assets/js/article/art_pub.js 腳本文件如下:

    $(function() { })
  • 5.2 新建基本的表單結構

    <!-- 發布文章的表單 --> <form class="layui-form"><div class="layui-form-item"><label class="layui-form-label">文章標題</label><div class="layui-input-block"><input type="text" name="title" required lay-verify="required" placeholder="請輸入標題" autocomplete="off" class="layui-input" /></div></div> </form>

    5.3 渲染文章類別對應的下拉選擇框結構

  • 定義 UI 結構:

    <!-- 第二行 --><div class="layui-form-item"><label class="layui-form-label">文章類別</label><div class="layui-input-block"><select name="cate_id" lay-verify="required"></select></div></div>
  • 導入 art-template:

    <script src="/assets/lib/template-web.js"></script>
  • 定義模板結構:

    <script type="text/html" id="tpl-cate"><option value="">請選擇文章類別</option>{{each data}}<option value="{{$value.Id}}">{{$value.name}}</option>{{/each}} </script>
  • 定義 initCate 方法:

    $(function() {var layer = layui.layervar form = layui.forminitCate()// 定義加載文章分類的方法function initCate() {$.ajax({method: 'GET',url: '/my/article/cates',success: function(res) {if (res.status !== 0) {return layer.msg('初始化文章分類失敗!')}// 調用模板引擎,渲染分類的下拉菜單var htmlStr = template('tpl-cate', res)$('[name=cate_id]').html(htmlStr)// 一定要記得調用 form.render() 方法 // 由于layui不知道動態生成了分類form.render()}})} })

  • 5.4 渲染富文本編輯器

    參考我的另一篇文章: 基于 Layui 的富文本編輯器和封面圖片剪裁的實現方案

    與編輯器 & 圖片裁剪實現方案相關的素材文件:
    網盤下載鏈接:https://pan.baidu.com/s/1k9IBXKKQfD7pf9a6NNyQkQ

    提取碼:qw6o

    5.5 渲染封面裁剪區域

    參考 基于 Layui 的富文本編輯器和封面圖片剪裁的實現方案


    5.6 渲染提交按鈕區域

    <!-- 第五行 --><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit>發布</button><button class="layui-btn layui-btn-primary" lay-submit>存為草稿</button></div></div>

    5.7 點擊選擇封面按鈕打開文件選擇框

  • 修改 UI 結構,為 選擇封面 按鈕添加 id,并且在按鈕后面添加 文件選擇框:

    <!-- 選擇封面按鈕 --> <button type="button" class="layui-btn layui-btn-danger" id="btnChooseImage">選擇封面</button> <!-- 隱藏的文件選擇框 --> <input type="file" id="coverFile" style="display: none;" accept="image/png,image/jpeg,image/gif" />
  • 為選擇封面的按鈕,綁定點擊事件處理函數:

    $('#btnChooseImage').on('click', function() {$('#coverFile').click() })

  • 5.8 將選擇的圖片設置到裁剪區域中

  • 監聽 coverFile 的 change 事件,獲取用戶選擇的文件列表:

    // 監聽 coverFile 的 change 事件,獲取用戶選擇的文件列表$('#coverFile').on('change', function(e) {// 獲取到文件的列表數組var files = e.target.files// 判斷用戶是否選擇了文件if (files.length === 0) {return}// 根據文件,創建對應的 URL 地址var newImgURL = URL.createObjectURL(files[0])// 為裁剪區域重新設置圖片$image.cropper('destroy') // 銷毀舊的裁剪區域.attr('src', newImgURL) // 重新設置圖片路徑.cropper(options) // 重新初始化裁剪區域})

  • 小結 - 渲染封面裁剪區域

    第一步:為文件選擇框綁定 change 事件;

    第二步:在事件對象 e 中,獲取到用戶選擇的文件列表files;

    第三步:判斷用戶是否選擇了文件,如果沒有選擇文件,就直接return出去,不再執行后面代碼;

    第四步:用戶選擇了文件,我們需要將文件創建為對應的新的url地址;

    第五步:重新為裁剪區域設置圖片。

    5.9 分析發布文章的實現步驟

    API 接口如圖所示:



  • 為 存為草稿 按鈕添加 id 屬性:

    <button class="layui-btn layui-btn-primary" lay-submit id="btnSave2">存為草稿</button>
  • 定義文章的發布狀態:

    var art_state = '已發布'
  • 為存為草稿按鈕,綁定點擊事件處理函數:

    $('#btnSave2').on('click', function() {art_state = '草稿' })

  • 5.10 基于Form表單快速創建FormData對象

  • 為發布文章的 Form 表單添加 id 屬性:

    <form class="layui-form" id="form-pub"></form>
  • 為表單綁定 submit 提交事件:

    $('#form-pub').on('submit', function(e) {// 1. 阻止表單的默認提交行為e.preventDefault()// 2. 基于 form 表單,快速創建一個 FormData 對象var fd = new FormData($(this)[0])// 3. 將文章的發布狀態,追加到 fd 中fd.append('state', art_state)})
  • 快速創建 FormData 對象:new FormData($(this)[0])

    代碼注釋:
    在 new FormData 期間,通過把 jQuery 對象 $(this)以[0]的形式轉換為一個原生的 DOM 對象,然后把這個 DOM 對象傳遞給new FormData(),就能夠創建出一個 FormData 對象。

    為了證實這個fd 對象中確實存了一些數據,我們可以用forEach將 FormData 中存儲的每一個鍵循環打印到控制臺查看,方法如下:

    // 測試創建 FormData 是否成功 fd.forEach(function(v, k) { // 用v 接收FormData中存的值,k 接收鍵console.log(k, v); })

    提交事件觸發后,控制臺打印如下:




    5.11 將裁剪后的封面追加到FormData對象中

    這里仍然參照文章 基于 Layui 的富文本編輯器和封面圖片剪裁的實現方案 一文中 “4. 將裁剪后的圖片,輸出為文件” 的代碼。

    代碼如圖:




    // 為表單綁定 submit 提交事件$('#form-pub').on('submit', function(e) {// 1. 阻止表單的默認提交行為e.preventDefault()// 2. 基于 form 表單,快速創建一個 FormData 對象var fd = new FormData($(this)[0])// 3. 將文章的發布狀態,存到 fd 中fd.append('state', art_state)// 4. 將封面裁剪過后的圖片,輸出為一個文件對象$image.cropper('getCroppedCanvas', {// 創建一個 Canvas 畫布width: 400,height: 280}).toBlob(function(blob) {// 將 Canvas 畫布上的內容,轉化為文件對象// 得到文件對象后,進行后續的操作// 5. 將文件對象,存儲到 fd 中fd.append('cover_img', blob)// 6. 發起 ajax 數據請求})})

    只要調用了toBlob,就能將裁剪之后的圖片輸出為文件了,.toBlob(function(blob)中的blob就是圖片文件。再將 blob存到 FormData(也就是fd) 里。

    5.12 發起Ajax請求實現發布文章的功能

  • 定義一個發布文章的方法:

    function publishArticle(fd) {$.ajax({method: 'POST',url: '/my/article/add',data: fd,// 注意:如果向服務器提交的是 FormData 格式的數據,// 必須添加以下兩個配置項contentType: false,processData: false,success: function(res) {if (res.status !== 0) {return layer.msg('發布文章失敗!')}layer.msg('發布文章成功!')// 發布文章成功后,跳轉到文章列表頁面location.href = '/article/art_list.html'}}) }
  • 注意:
    如果向服務器提交的是 FormData 格式的數據,必須添加以下兩個配置項
    contentType: false,
    processData: false,
    否則,請求就會失敗。

  • 把裁剪的圖片追加到 FormData 對象中之后,調用 publishArticle 方法:

    // 為表單綁定 submit 提交事件 $('#form-pub').on('submit', function(e) {// 1. 阻止表單的默認提交行為e.preventDefault()// 2. 基于 form 表單,快速創建一個 FormData 對象var fd = new FormData($(this)[0])// 3. 將文章的發布狀態,存到 fd 中fd.append('state', art_state)// 4. 將封面裁剪過后的圖片,輸出為一個文件對象$image.cropper('getCroppedCanvas', {// 創建一個 Canvas 畫布width: 400,height: 280}).toBlob(function(blob) {// 將 Canvas 畫布上的內容,轉化為文件對象// 得到文件對象后,進行后續的操作// 5. 將文件對象,存儲到 fd 中fd.append('cover_img', blob)// 6. 發起 ajax 數據請求publishArticle(fd)}) })

  • 6. 編輯文章

    6.1 創建文章編輯頁面基本結構

  • 新建 /article/art_edit.html 頁面結構如下:
  • <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" href="/assets/lib/layui/css/layui.css" /><link rel="stylesheet" href="/assets/css/article/art_pub.css" /></head><body><!-- 卡片區域 --><div class="layui-card"><div class="layui-card-header">寫文章</div><div class="layui-card-body">卡片式面板面板通常用于非白色背景色的主體內<br />從而映襯出邊框投影</div></div><!-- 導入第三方的 JS 插件 --><script src="/assets/lib/layui/layui.all.js"></script><script src="/assets/lib/jquery.js"></script><script src="/assets/js/baseAPI.js"></script><!-- 導入自己的 JS --><script src="/assets/js/article/art_edit.js"></script></body></html>
  • 新建 /assets/css/article/art_edit.css 樣式文件(初始化頁面)如下:
  • html, body {margin: 0;padding: 0; }body {padding: 15px;background-color: #f2f3f5; }
  • 新建 /assets/js/article/art_edit.js 腳本文件如下:
  • $(function() { })

    6.2 給編輯按鈕添加點擊事件

  • 修改文章列表的模板引擎
    將/article/art.list.html文件打開,給模板引擎中的“編輯”按鈕添加類名btn_edit、自定義屬性data-index和data-id
  • <button type="button" data-index='{{$value.Id}}' class="layui-btn layui-btn-xs btn-edit" data-id="{{$value.Id}}">編輯</button>
  • 給【編輯】按鈕綁定點擊事件
  • // 給文章編輯按鈕綁定 click 單擊事件$('body').on('click', '.btn-edit', function() {location.href = '/article/art_edit.html?id=' + $(this).attr('data-id')})

    6.3 新建基本的表單結構

    在上一步創建的html結構的卡片區域中,將類名為 layui-card-body 的 div 盒子內的文字替換為如下表單(在Layui官方文檔中復制輸入框html結構),并為form表單添加id="formAddArticle"

    <!-- 修改文章的表單 --> <form class="layui-form" lay-filter="addArticle" id="formAddArticle" enctype="multipart/form-data"><!-- 文章標題 --><div class="layui-form-item"><label class="layui-form-label">文章標題</label><div class="layui-input-block"><input type="text" name="title" required lay-verify="required" placeholder="請輸入標題" autocomplete="off" class="layui-input" /></div></div> </form>

    6.4 文章類別對應的下拉選擇框結構

  • 定義 UI 結構:

    <!-- 文章類別 --><div class="layui-form-item"><label class="layui-form-label">文章類別</label><div class="layui-input-block" id="art_cate"></div></div>
  • 導入 art-template:
    在html文件底部,在導入的 layui.js 后面導入template 模板引擎腳本文件。

    <script src="/assets/lib/template-web.js"></script>
  • 定義文章分類列表模板結構:
    給模板結構添加 id屬性:id="selectArtCates",方便后續渲染。

    <!-- 文章分類列表的模板 --><script type="text/html" id="selectArtCates"><select name="cate_id" lay-verify="required"><option value="">請選擇文章類別</option>{{each data}}<option value="{{$value.Id}}">{{$value.name}}</option>{{/each}}</select></script>
  • 定義 renderArticleCates 方法,渲染文章分類列表:

    $(function() {// 獲取需要的 layui 對象var form = layui.form// 1. 渲染文章分類列表renderArticleCates()function renderArticleCates() {$.get('/my/article/cates', function(res) {if (res.status !== 0) {return layer.msg('獲取文章分類列表失敗!')}var htmlStr = template('selectArtCates', res)$('#art_cate').html(htmlStr)// 一定要記得調用 form.render() 方法 // 由于layui不知道動態生成了分類form.render()getArticleById()})}

  • 6.5 渲染富文本編輯器

    參考 基于 Layui 的富文本編輯器和封面圖片剪裁的實現方案 完成。


    6.6 封面裁剪區域結構

  • 剪裁區域html
  • <!-- 文章封面 --> <div class="layui-form-item"><label class="layui-form-label">文章封面</label><div class="layui-input-block cropper-container"><!-- 文件選擇框 --><input type="file" id="fileCover" accept="image/jpeg,image/png,image/gif,image/bmp" style="display: none;" /><div class="cropper-box"><img id="image" src=""></div><div class="right-box"><div class="img-preview"></div><button class="layui-btn layui-btn-danger" id="btnChooseCoverImage">選擇封面</button></div></div> </div>
  • art_edit.css 文件中添加剪裁區域 css 樣式
  • .cropper-box {width: 400px;height: 280px; }#image {max-width: 400px;/* 這個設置很重要 */max-height: 280px; }.img-preview {width: 200px;height: 140px;overflow: hidden;margin-bottom: 20px; }.cropper-container {display: flex; }

    6.7 提交按鈕區域

    <!-- 按鈕區域 --> <div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit id="btnPublish">發布</button><button class="layui-btn layui-btn-primary" lay-submit id="btnSave">存為草稿</button></div> </div>

    給表單添加隱藏域,用于獲取用戶選擇的文章的Id。

    <input type="hidden" name="Id" />

    6.8 通過 URLSearchParams 對象,獲取 URL 傳遞的參數

    // 通過 URLSearchParams 對象,獲取 URL 傳遞過來的參數var params = new URLSearchParams(location.search)var artId = params.get('id')// 文章的發布狀態var pubState = ''

    解釋
    首先聲明變量params,并通過URLSearchParams對象賦值,再通過params.get()的方式輸入鍵、拿到值(這里賦值給artId),就很簡單地 拿到了前一個頁面(文章列表頁點擊“編輯”時)傳過來的文章id值。

    Location對象提供以下屬性。

    屬性說明
    Location.href整個 URL
    Location.protocol當前 URL 的協議,包括冒號(:)
    Location.host主機,包括冒號(:)和端口(默認的80端口和443端口會省略)。
    Location.hostname主機名,不包括端口。
    Location.port端口號。
    Location.pathnameURL 的路徑部分,從根路徑/開始。
    Location.search查詢字符串部分,從問號?開始。
    Location.hash片段字符串部分,從#開始。
    Location.username域名前面的用戶名。
    Location.password域名前面的密碼。
    Location.originURL 的協議、主機名和端口。

    更多關于URLSearchParams(location.search),可參考MDN文檔 和后面這篇簡書文章 《JS Location對象,URL對象,URLSearchParams對象》

    6.9 發起請求獲取文章詳情

    根據文章的 Id,獲取文章的詳情,并初始化表單的數據內容:

    function getArticleById() {// 發起請求,獲取文章詳情$.get('/my/article/' + artId, function(res) {// 獲取數據失敗if (res.status !== 0) {return layer.msg('獲取文章失敗!')}// 獲取數據成功var art = res.data// 為 form 表單賦初始值form.val('addArticle', {Id: art.Id,title: art.title,cate_id: art.cate_id,content: art.content})// 手動初始化富文本編輯器initEditor() // cropper插件自帶方法,導入插件即可使用// 初始化圖片裁剪器var $image = $('#image')// 設置圖片路徑$image.attr('src', 'http://ajax.frontend.itheima.net' + art.cover_img)// 裁剪選項var cropperOption = {aspectRatio: 400 / 280,preview: '.img-preview',// 初始化圖片裁剪框的大小autoCropArea: 1}// 初始化裁剪區域$image.cropper(cropperOption)})}

    form.val:攜帶有值就給表單賦值,未攜帶值則獲取表單中的值。

    語法:form.val('filter', object);
    用于給指定表單集合的元素賦值和取值。如果 object 參數存在,則為賦值;如果 object 參數不存在,則為取值。其中「取值」功能為 layui 2.2.5 開始新增

    attr() 方法:設置被選元素(這里是image標簽)的屬性和值。詳情參閱 W3School文檔。

    裁剪選項 var cropperOption={},參見 基于Layui 的富文本編輯器與封面的實現方案


    6.10 選擇文章封面

    // 選擇封面$('#btnChooseCoverImage').on('click', function(e) e.preventDefault() // 阻止默認提交行為$('#fileCover').click()})

    6.11 監聽文件(文章封面圖片)選擇框的 change 事件

    $('#fileCover').on('change', function(e) {var files = e.target.files// 沒有選擇文件if (files.length === 0) {return}// 重新為裁剪區域設置圖片$('#image').cropper('destroy').attr('src', URL.createObjectURL(files[0])).cropper({aspectRatio: 400 / 280,preview: '.img-preview'}) })

    6.12 設置文章的發布狀態

    $('#btnPublish').on('click', function() {pubState = '已發布' }) $('#btnSave').on('click', function() {pubState = '草稿' })

    6.13 發布文章

    綁定【發布】按鈕的submit提交事件,同樣的需參照 基于Layui 的富文本編輯器與封面的實現方案,完成后的代碼如下:

    $('#formAddArticle').on('submit', function(e) {e.preventDefault() // 阻止默認提交事件// 創建一個 Canvas 畫布$('#image').cropper('getCroppedCanvas', {width: 400,height: 280})// 將 Canvas 畫布上的內容,轉化為文件對象.toBlob(function(blob) { // 5.1 組織參數對象 FormDatavar fd = new FormData($('#formAddArticle')[0])// 5.2 添加封面fd.append('cover_img', blob)// 5.3 添加文章的發表狀態fd.append('state', pubState)// 5.4 發起請求$.ajax({method: 'POST',url: '/my/article/edit',data: fd,contentType: false,processData: false,success: function(res) {if (res.status !== 0) {return layer.msg('編輯文章失敗!')}location.href = '/article/art_list.html'}})}) })

    toBlob()方法的語法:canvas.toBlob(callback, type, encoderOptions);
    用以展示canvas上的圖片;這個圖片文件可以被緩存或保存到本地,由用戶代理端自行決定。如不特別指明,圖片的類型默認為 image/png,分辨率為 96dpi。
    第三個參數用于針對image/jpeg格式的圖片進行輸出圖片的質量設置(值在0與1之間)。
    更多詳情請參閱 MDN文檔

    附< 文件在線轉 Base64 地址>: https://www.css-js.com/tools/base64.html

    至此,文章編輯功能的開發已算完成。

    6.14 完整html結構

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="/assets/lib/layui/css/layui.css"><!-- 富文本樣式 --><link rel="stylesheet" href="/assets/lib/cropper/cropper.css" /><link rel="stylesheet" href="/assets/css/article/art_edit.css"> </head><body><div class="layui-card"><div class="layui-card-header">修改文章</div><div class="layui-card-body"><!-- 修改文章的表單 --><form class="layui-form" lay-filter="addArticle" id="formAddArticle" enctype="multipart/form-data"><!-- 文章標題 --><div class="layui-form-item"><label class="layui-form-label">文章標題</label><div class="layui-input-block"><input type="text" name="title" required lay-verify="required" placeholder="請輸入標題" autocomplete="off" class="layui-input" /></div></div><!-- 文章類別 --><div class="layui-form-item"><label class="layui-form-label">文章類別</label><div class="layui-input-block" id="art_cate"></div></div><!-- 文章內容 --><div class="layui-form-item"><label class="layui-form-label">文章內容</label><div class="layui-input-block" style="height: 400px;"><textarea name="content" id="content"></textarea></div></div><!-- 文章封面 --><div class="layui-form-item"><label class="layui-form-label">文章封面</label><div class="layui-input-block cropper-container"><!-- 文件選擇框 --><input type="file" id="fileCover" accept="image/jpeg,image/png,image/gif,image/bmp" style="display: none;" /><div class="cropper-box"><img id="image" src=""></div><div class="right-box"><div class="img-preview"></div><button class="layui-btn layui-btn-danger" id="btnChooseCoverImage">選擇封面</button></div></div></div><!-- 按鈕區域 --><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit id="btnPublish">發布</button><button class="layui-btn layui-btn-primary" lay-submit id="btnSave">存為草稿</button></div></div><input type="hidden" name="Id" /></form></div></div><!-- 文章分類列表的模板 --><script type="text/html" id="selectArtCates"><select name="cate_id" lay-verify="required"><option value="">請選擇文章類別</option>{{each data}}<option value="{{$value.Id}}">{{$value.name}}</option>{{/each}}</select></script><script src="/assets/lib/layui/layui.all.js"></script><script src="/assets/lib/template-web.js"></script><script src="/assets/lib/jquery.js"></script><script src="/assets/js/baseAPI.js"></script><!-- 富文本編輯器 --><script src="../../assets/lib/tinymce/tinymce.min.js"></script><script src="../../assets/lib/tinymce/tinymce_setup.js"></script><!-- 圖片裁剪 --><script src="../../assets/lib/cropper/Cropper.js"></script><script src="../../assets/lib/cropper/jquery-cropper.js"></script><script src="/assets/js/article/art_edit.js"></script> </body></html>

    6.15 完整css 樣式代碼

    html,body {margin: 0;padding: 0; }body {padding: 15px;background-color: #f2f3f5; }.cropper-box {width: 400px;height: 280px; }#image {max-width: 400px;/* 這個設置很重要! */max-height: 280px; }.img-preview {width: 200px;height: 140px;overflow: hidden;margin-bottom: 20px; }.cropper-container {display: flex; }.cropper-box {margin-right: 15px; }.right-box {text-align: center; }

    6.16 編輯功能完整 JS 代碼

    $(function() {// 通過 URLSearchParams 對象,獲取 前一個頁面URL 傳遞過來的參數var params = new URLSearchParams(location.search)var artId = params.get('id')// 文章的發布狀態var pubState = ''// 獲取需要的 layui 對象var form = layui.form// 1. 渲染文章分類列表renderArticleCates()function renderArticleCates() {$.get('/my/article/cates', function(res) {if (res.status !== 0) {return layer.msg('獲取文章分類列表失敗!')}var htmlStr = template('selectArtCates', res)$('#art_cate').html(htmlStr)form.render()getArticleById()})}// 2. 根據文章的 Id,獲取文章的詳情,并初始化表單的數據內容function getArticleById() {// 發起請求,獲取文章詳情$.get('/my/article/' + artId, function(res) {// 獲取數據失敗if (res.status !== 0) {return layer.msg('獲取文章失敗!')}// 獲取數據成功var art = res.data// 為 form 表單賦初始值form.val('addArticle', {Id: art.Id,title: art.title,cate_id: art.cate_id,content: art.content})// 手動初始化富文本編輯器initEditor()// 初始化圖片裁剪器var $image = $('#image')$image.attr('src', 'http://ajax.frontend.itheima.net' + art.cover_img)// $image.attr('src', 'http://www.liulongbin.top:3007' + art.cover_img)// 裁剪選項var cropperOption = {aspectRatio: 400 / 280,preview: '.img-preview',// 初始化圖片裁剪框的大小autoCropArea: 1}// 初始化裁剪區域$image.cropper(cropperOption)})}// 3. 選擇封面$('#btnChooseCoverImage').on('click', function(e) {e.preventDefault()$('#fileCover').click()})// 4. 監聽文件選擇框的 change 事件$('#fileCover').on('change', function(e) {var files = e.target.files// 沒有選擇文件if (files.length === 0) {return}// 重新為裁剪區域設置圖片$('#image').cropper('destroy').attr('src', URL.createObjectURL(files[0])).cropper({aspectRatio: 400 / 280,preview: '.img-preview'})})// 設置文章的發布狀態$('#btnPublish').on('click', function() {pubState = '已發布'})$('#btnSave').on('click', function() {pubState = '草稿'})// 5. 發布文章$('#formAddArticle').on('submit', function(e) {e.preventDefault()$('#image').cropper('getCroppedCanvas', {width: 400,height: 280}).toBlob(function(blob) {// 5.1 組織參數對象var fd = new FormData($('#formAddArticle')[0])// 5.2 添加封面fd.append('cover_img', blob)// 5.3 添加文章的發表狀態fd.append('state', pubState)// 5.4 發起請求$.ajax({method: 'POST',url: '/my/article/edit',data: fd,contentType: false,processData: false,success: function(res) {if (res.status !== 0) {return layer.msg('編輯文章失敗!')}location.href = '/article/art_list.html'}})})}) })

    7. 將開發完成的項目代碼推送到GitHub

    1、檢查當前所在分支:

    git branch

    2、本地提交

    git add .

    3、檢查所有文件狀態

    git status

    4、運行 git commit -m

    git commit -m "完成文章管理相關功能的開發"

    5、將本地article分支提交到 Github 存儲

    git push -u origin article

    6、將本地article分支里最新的代碼合并到master主分支
    1) 切換到 master 主分支

    git checkout master

    2)合并article里最新的代碼

    git merge article

    7、將本地 master最新代碼推送到Github中

    git push 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的大事件后台管理系统开发实战(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    制服丝袜亚洲 | 热久精品 | 能在线看的av | 国产精品免费观看视频 | 久久99久久精品国产 | 亚洲va韩国va欧美va精四季 | 麻豆一区二区三区视频 | www.久草视频 | 国产精品一区二区三区99 | 狠狠gao| 玖玖玖精品 | 国产色视频一区 | 少妇资源站 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 中文字幕在线第一页 | www.eeuss影院av撸| 黄色三几片| 久久综合免费 | 91精品视频一区二区三区 | 国产精品va最新国产精品视频 | 色噜噜在线观看 | 91九色在线观看 | 一级黄色视屏 | 在线看片日韩 | 有码一区二区三区 | 久久免费看av | 欧美视频国产视频 | 狠狠躁日日躁狂躁夜夜躁av | 中文字幕欧美日韩va免费视频 | 999热视频 | 久久理论电影网 | 精品久久久久久国产偷窥 | 国产精品自产拍在线观看中文 | 深爱五月激情网 | 日批网站在线观看 | 亚洲国产精久久久久久久 | 亚洲永久精品在线 | 久久五月婷婷丁香社区 | 国产精品普通话 | 亚洲精品免费视频 | 日韩在线观看小视频 | 69av免费视频 | 国产午夜精品久久久久久久久久 | 三级黄色免费片 | 18女毛片| www.夜色321.com | 成人欧美一区二区三区黑人麻豆 | 91传媒激情理伦片 | 亚洲精品国产精品国 | 欧美日韩久久不卡 | 成人av电影免费在线播放 | 国内精品久久久久影院一蜜桃 | 91人人爱| 日韩av中文字幕在线免费观看 | 99久热精品 | 日韩欧美综合在线视频 | 欧美一级日韩三级 | 日本不卡123 | 成人免费视频播放 | 色就色,综合激情 | 中文字幕免费久久 | 中文字幕婷婷 | 99精品欧美一区二区三区黑人哦 | 中文字幕高清免费日韩视频在线 | 国产高清久久久 | 亚洲日本va在线观看 | 精品影院一区二区久久久 | 亚洲国产片色 | 久草在线免费在线观看 | 操一草 | 99免在线观看免费视频高清 | 黄色影院在线免费观看 | 免费在线观看中文字幕 | 久久毛片高清国产 | 日韩激情第一页 | 天堂av免费观看 | 日韩av高清 | 91香蕉视频黄 | 一级一级一片免费 | a黄色| 狠狠干夜夜操天天爽 | 天天精品视频 | 人人插人人做 | 亚洲国产剧情av | 久久国产免费看 | 亚洲一级特黄 | 五月天婷婷丁香花 | 国产精品日韩在线播放 | 免费高清在线视频一区· | 日韩和的一区二在线 | 天天干天天干天天干 | 久久理论影院 | 国产一区二区精品久久 | 成人免费大片黄在线播放 | 97国产一区| 国产字幕在线看 | 免费看的黄色小视频 | 国产一级免费在线 | 麻豆传媒电影在线观看 | 插婷婷| 亚洲欧美成人网 | 亚洲天天在线日亚洲洲精 | 国产精品一区二区在线播放 | wwwwww国产| 亚洲天堂精品视频在线观看 | 亚洲精品玖玖玖av在线看 | 国产在线观看你懂的 | 6699私人影院 | 一区二区三区四区精品视频 | 日本特黄特色aaa大片免费 | 日韩精品一区二区三区中文字幕 | 日韩欧美一区二区三区在线 | 日韩欧美高清免费 | 精品视频一区在线观看 | 色爱成人网 | 天天射天天射天天射 | 天天干天天操天天 | 国产分类视频 | 国产91在线观 | 激情五月网站 | 日韩精品一区二区三区第95 | 日韩欧美视频一区二区三区 | 国产 欧美 在线 | 国产永久免费高清在线观看视频 | 中文字幕二区在线观看 | 在线看片中文字幕 | 亚洲精品黄色片 | 久久综合爱 | 久久久久免费精品视频 | 91视频在线播放视频 | 亚洲丝袜一区二区 | 天堂av在线网站 | 丁香六月在线 | 国产va饥渴难耐女保洁员在线观看 | 中文在线免费观看 | 欧美一区二区日韩一区二区 | 在线观看你懂的网址 | avwww在线观看 | 成人国产精品久久久春色 | av一区二区三区在线播放 | 精品毛片久久久久久 | 日韩高清观看 | 亚洲精品国偷自产在线99热 | 色视频在线免费 | 182午夜在线观看 | 日日躁夜夜躁aaaaxxxx | 在线看污网站 | 日韩激情第一页 | 在线观看精品一区 | 日韩av免费观看网站 | 色天天中文 | 69久久夜色精品国产69 | 狠狠干综合 | 亚洲欧洲av | 中文字幕日韩精品有码视频 | 欧美色图一区 | 欧美一区二区三区在线视频观看 | 欧美一区二区在线刺激视频 | 天天操婷婷 | 日本黄色大片免费看 | 亚洲综合在线播放 | 国产精品亚洲成人 | 国产色婷婷 | 最新日韩视频 | 97视频免费观看2区 亚洲视屏 | 久久理论电影 | 国产一区不卡在线 | av大全在线免费观看 | 综合网在线视频 | 日韩网站免费观看 | 天天鲁天天干天天射 | 日韩欧美一区二区在线播放 | 91综合久久一区二区 | 国产精品久久久久9999 | 久久久久久久久黄色 | 国产啊v在线观看 | 国产婷婷精品av在线 | 一二三区av | 在线观看中文字幕一区二区 | 国产一级免费电影 | 亚洲午夜精品一区二区三区电影院 | 久久综合久久综合这里只有精品 | www.久久成人 | 日韩精品免费一区二区在线观看 | 麻豆传媒精品 | 日本黄色大片儿 | 日韩午夜视频在线观看 | 久草视频资源 | 99久久婷婷国产综合亚洲 | 久久亚洲国产精品 | 久久综合色天天久久综合图片 | 欧美污污视频 | 婷婷丁香激情综合 | 日韩精品免费一区二区在线观看 | 亚洲妇女av| 精品国偷自产在线 | 丝袜一区在线 | 久草在线观看资源 | 欧美性受极品xxxx喷水 | 在线а√天堂中文官网 | 99精品在线免费在线观看 | 在线免费看黄色 | 在线观看视频免费播放 | 亚洲天天摸日日摸天天欢 | 久久久久免费精品国产 | 五月婷在线播放 | 久99精品| 亚洲精品久久久久中文字幕二区 | 久久av福利 | 久久久精品国产免费观看一区二区 | 亚洲日韩中文字幕 | 国产91对白在线 | 成人午夜电影在线 | 超碰97人人干 | 在线中文字幕播放 | 日韩激情在线视频 | 日韩欧美在线免费 | 国产91电影在线观看 | 色婷婷久久久综合中文字幕 | 国产在线观看,日本 | 国产精品丝袜久久久久久久不卡 | 午夜a区| 国产在线视频资源 | 在线免费看黄网站 | 91视频免费播放 | 成人av免费播放 | 正在播放亚洲精品 | 久久av中文字幕片 | 久久狠狠干| 国产欧美久久久精品影院 | 91av99 | 国产在线中文 | 草久在线观看视频 | 久久久精品国产免费观看一区二区 | 国产无套视频 | www.超碰97.com| 男女精品久久 | 超碰久热| 69中文字幕 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产视频每日更新 | 日本精油按摩3 | 欧美视频在线观看免费网址 | 成人一级免费视频 | 国产精品午夜久久久久久99热 | 91自拍91| 91成年人视频 | 国产一卡二卡在线 | 一本一本久久a久久精品综合妖精 | 深夜激情影院 | 99免费| 日本不卡123 | 在线观看国产中文字幕 | 中文字幕观看av | 亚洲精品小视频 | 激情六月婷婷久久 | 成年人电影免费在线观看 | 亚洲精品视频大全 | 最近中文字幕免费av | 亚洲黄色小说网址 | 国产精品1区2区3区 久久免费视频7 | 亚洲高清免费在线 | 免费观看一级 | 久久99久久精品 | 日韩理论片 | 天天视频色 | 激情在线免费视频 | 久香蕉 | 亚洲手机av| 午夜精品av | 国产一级做a爱片久久毛片a | 亚洲极色 | 久久精品男人的天堂 | 五月天久久综合网 | 99久久久久久久久久 | 91视频链接 | 一区 二区电影免费在线观看 | 99这里只有精品视频 | 久草网在线视频 | 97国产精品一区二区 | 欧美片网站yy | 日韩av电影中文字幕在线观看 | 美女网站视频免费黄 | 久久久久国产成人精品亚洲午夜 | www激情久久 | 精品国产一区二区三区在线 | 蜜臀久久99精品久久久无需会员 | 96久久久 | 国产精品美女久久久久久久久久久 | 久艹视频免费观看 | 四虎在线永久免费观看 | 久草精品视频 | 日韩成人高清在线 | 中文字幕之中文字幕 | 欧美成人在线网站 | 久久99久国产精品黄毛片入口 | av网站在线观看免费 | 99久久精品免费看国产四区 | 蜜桃视频在线观看一区 | 激情视频在线观看网址 | 最近字幕在线观看第一季 | 黄色一级大片免费看 | 久青草视频 | 久久精品久久精品久久39 | 欧美精品久久久久久久久久丰满 | 久99久在线 | 国产91精品一区二区麻豆亚洲 | 精品国产一二区 | av资源免费看 | 亚洲人成人99网站 | 黄网站a | 在线电影av | 三级黄色网址 | 亚洲国产精品成人女人久久 | 天堂中文在线播放 | 欧美激精品 | av官网在线 | 99操视频| 国产精品久久综合 | 免费黄色一区 | 999成人精品 | 国产精品久久久久久爽爽爽 | 色综合综合 | 久久国产欧美日韩精品 | 国产精品久久久区三区天天噜 | 日韩免费av片 | 国内精品久久久久国产 | 丁香六月婷婷激情 | 99精品视频网站 | 黄色一级免费网站 | 500部大龄熟乱视频使用方法 | 久久久资源网 | 天天拍天天色 | 中文字幕国产在线 | 97超碰超碰| 国色天香永久免费 | 日韩经典一区二区三区 | 亚州精品视频 | 久久免费激情视频 | 国产一级免费视频 | 亚洲精品综合一二三区在线观看 | 成人片在线播放 | 啪啪免费试看 | 99这里都是精品 | 四虎在线永久免费观看 | 欧美精品一区二区免费 | 深爱婷婷激情 | 在线观看免费av网 | 国产精品亚州 | 超碰97网站 | 久久午夜电影网 | 亚洲一级电影视频 | 999久久国精品免费观看网站 | 激情片av | 国产呻吟在线 | 亚洲精品国偷自产在线99热 | 顶级bbw搡bbbb搡bbbb | 精品久久久久久综合日本 | 亚洲香蕉在线观看 | 日日爽天天 | 天天操福利视频 | 日本精品中文字幕在线观看 | 91黄色免费网站 | 超碰人人99 | 91成人精品国产刺激国语对白 | 欧美性一级观看 | 99热国产精品 | 国产麻豆视频 | 亚洲一区欧美精品 | 奇米网8888| 一本一道波多野毛片中文在线 | 日韩高清在线一区 | 91成品人影院 | 岛国av在线免费 | 91在线麻豆| 在线观看一区视频 | 狠狠的操狠狠的干 | 婷婷av资源 | 在线观看日本高清mv视频 | 国产人成看黄久久久久久久久 | 亚洲精品国产精品国自产 | 一区二区三区久久 | 91视视频在线直接观看在线看网页在线看 | 欧美大码xxxx | 五月婷在线播放 | 西西444www大胆高清视频 | 激情视频亚洲 | 久久久久国产一区二区三区四区 | 999免费视频| 国产精品免费在线 | 91av在线免费看 | 973理论片235影院9 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产在线一区观看 | 日韩一区二区三区高清免费看看 | 亚洲综合成人婷婷小说 | 亚洲午夜av久久乱码 | 日本系列中文字幕 | av免费观看高清 | 99精品一区 | 久爱综合 | 久久理论视频 | 日韩在线观看第一页 | 欧美激情精品久久久久 | 国内精品久久久久国产 | 久久看视频 | 又黄又爽又无遮挡免费的网站 | 久艹在线观看视频 | 成人中文字幕在线观看 | 美女视频久久 | 国产精品九九热 | 黄色小说视频网站 | 国产成人精品久久亚洲高清不卡 | 色欧美成人精品a∨在线观看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 日日夜夜天天久久 | 久久综合九色综合欧美就去吻 | 亚洲,国产成人av | 精品一区二区在线观看 | 狠狠色丁香婷婷综合视频 | www国产亚洲精品久久网站 | 91成人精品一区在线播放69 | 国产手机在线视频 | 国内一级片在线观看 | 亚洲一区久久久 | 国产中文字幕在线免费观看 | 香蕉久草 | 激情婷婷在线观看 | 九九热精品国产 | 欧美日韩另类在线观看 | 国产精品自在线 | 成人精品久久 | av免费试看 | 久久精品国产精品亚洲 | 久久调教视频 | 一级性生活片 | 国产精品久久99综合免费观看尤物 | 国产专区在线视频 | 在线午夜电影神马影院 | 亚洲精品一区二区精华 | 在线色视频小说 | 亚洲精品国偷自产在线99热 | 日韩啪啪小视频 | 精品999在线观看 | 在线播放日韩av | 国产香蕉视频在线观看 | 久青草影院 | 国产精品毛片久久久久久久久久99999999 | 欧美作爱视频 | 99九九99九九九视频精品 | 欧美精品小视频 | 91精品久久久久久粉嫩 | 97精品国自产拍在线观看 | 欧美日韩免费观看一区二区三区 | 丁香5月婷婷久久 | 丁香九月婷婷综合 | 正在播放国产精品 | 免费男女羞羞的视频网站中文字幕 | av大片网站| 免费色av| 国产精品美女久久久久aⅴ 干干夜夜 | 在线成人免费 | 丰满少妇对白在线偷拍 | 综合在线亚洲 | 在线观看国产亚洲 | 日韩色一区二区三区 | av在线精品| 在线成人欧美 | 国产91成人 | 在线观看视频黄 | 91视频久久久久久 | 日韩电影在线一区二区 | 毛片在线播放网址 | 成人午夜网 | 色999在线 | 亚洲九九九 | 黄色小网站免费看 | 欧美日韩性| 亚洲综合色网站 | 国产99精品 | 99久久精品日本一区二区免费 | 干 操 插| 国产免费一区二区三区最新 | 在线日韩av | 国产一在线精品一区在线观看 | 中文av资源站 | 69久久久久久久 | 香蕉久久久久 | 天天久久综合 | 夜夜高潮夜夜爽国产伦精品 | 久久久久日本精品一区二区三区 | 久久久观看 | 国产99精品 | 亚洲男男gⅴgay双龙 | 天天艹天天| 亚洲高清国产视频 | 91在线www| 国产成人一级 | 久草影视在线观看 | 欧美整片sss | 成x99人av在线www | 91桃色在线观看视频 | 国产亚洲精品久久久久久久久久 | 久久久久国产视频 | 亚洲国产激情 | 国产一区二区成人 | 国产精品一区二区免费在线观看 | 亚洲婷婷丁香 | 免费看一级黄色 | 久草在线在线视频 | 九九九在线观看 | 免费观看成人网 | 美女黄视频免费看 | 热久久这里只有精品 | 日韩无在线 | 中文在线a√在线 | aaa黄色毛片 | 欧洲在线免费视频 | 五月婷婷六月丁香 | 国产精品福利午夜在线观看 | 欧美成年黄网站色视频 | 狠狠色丁香婷婷综合久小说久 | 亚洲精品小区久久久久久 | 国产精品久久久久久婷婷天堂 | 欧美日视频 | 黄网站免费看 | 日日爽日日操 | 亚洲黄色激情小说 | 久久综合精品一区 | 免费看的国产视频网站 | 91在线在线观看 | 天天爽天天射 | 精品亚洲免a | 国产五十路毛片 | 精品久久久久久一区二区里番 | 久久a v电影 | 久久 国产一区 | 在线观看中文字幕第一页 | 久久国语露脸国产精品电影 | 久久久久久久久精 | 91网站在线视频 | 久久久久国产免费免费 | 99免费在线观看视频 | 日日激情 | 国产美女精品久久久 | 很黄很色很污的网站 | 国产品久精国精产拍 | 精品1区二区 | 韩国精品视频在线观看 | 黄色免费观看网址 | 日韩a在线看 | 成人在线免费观看视视频 | 色99久久| .精品久久久麻豆国产精品 亚洲va欧美 | 日日摸日日爽 | 天天综合网 天天 | 中文字幕一区av | 久久69精品| 97视频免费在线观看 | 婷婷国产在线 | 国产一区二区在线影院 | 日韩亚洲国产中文字幕 | 精品久久国产一区 | 久久精品国产一区 | 婷婷九月丁香 | 日韩色视频在线观看 | 99精品视频免费看 | 亚洲免费国产 | 日韩欧美久久 | 国产成人精品不卡 | 国产粉嫩在线观看 | 日产乱码一二三区别在线 | 中文字幕在线久一本久 | 国产高清免费在线观看 | 久久久久久免费毛片精品 | 久草视频免费在线播放 | 免费福利在线视频 | 日韩羞羞 | 97在线观看免费高清完整版在线观看 | 97激情影院 | 中文视频在线 | 在线观av| av免费电影在线观看 | 免费色视频网站 | 国产一级一片免费播放放 | 最新免费av在线 | 蜜臀久久99精品久久久无需会员 | av电影一区二区三区 | 国产精品久久久久久久av电影 | 手机av在线免费观看 | 不卡av在线免费观看 | 欧美久久久影院 | 国产美女视频免费观看的网站 | 99热最新精品 | 亚洲一区 av | 亚洲精品男女 | 成人免费在线视频观看 | 中文字幕视频网 | 狠狠狠的干| 美女网站黄在线观看 | 亚洲精品视频在线观看免费视频 | 国产中的精品av小宝探花 | 五月婷婷另类国产 | 欧美极品在线播放 | 国产精品 亚洲精品 | 最近中文字幕久久 | 国产91aaa| 亚洲视频综合在线 | 日韩欧美视频免费观看 | 日韩成人xxxx | 69精品久久久 | 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲精品456在线播放第一页 | 27xxoo无遮挡动态视频 | 99久久久久久国产精品 | 国产精品a久久久久 | 亚洲夜夜综合 | 91麻豆传媒 | 一区免费在线 | 亚洲永久精品在线观看 | 久久久电影 | 国产精品av一区二区 | 日韩在线第一 | 午夜精品久久 | 国产真实在线 | 日韩精品免费专区 | 欧美国产精品一区二区 | 亚洲三级在线播放 | 中文字幕亚洲国产 | 成人免费中文字幕 | 欧美与欧洲交xxxx免费观看 | 夜夜爽88888免费视频4848 | 天天操福利视频 | 久久不射影院 | 国产手机av在线 | 啪啪肉肉污av国网站 | 日韩av不卡在线播放 | 婷婷国产v亚洲v欧美久久 | 久久艹精品 | 美女黄视频免费 | 婷婷久久一区二区三区 | 97人人视频 | 亚洲国产中文字幕在线观看 | 色视频网页 | 中文字幕在线字幕中文 | 亚洲特级片 | 精品久久一 | 亚洲欧洲一区二区在线观看 | 激情五月婷婷 | 日日操操| 91精品国产91久久久久 | 91成人精品国产刺激国语对白 | 亚洲精品色 | 欧美一二三视频 | 成人一级片免费看 | 中文视频在线看 | www.com黄| 99久久精品免费看国产一区二区三区 | 久久国产免费视频 | 免费观看一区二区 | 亚洲天堂社区 | 免费视频黄色 | 97精品超碰一区二区三区 | 欧美在线一级片 | 97超碰资源站 | 精品欧美一区二区三区久久久 | 美女网站免费福利视频 | 精油按摩av | 日韩午夜电影院 | 五月情婷婷 | 亚洲精品国产欧美在线观看 | 免费国产在线观看 | 国产精品久久久久久电影 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 久久综合九色综合欧美就去吻 | 亚洲欧美乱综合图片区小说区 | 婷婷六月网 | 久久久久久久久久毛片 | www.天天操.com | 91网址在线看 | 国内外成人在线 | 麻豆91在线看 | 九九综合九九综合 | 在线视频在线观看 | 亚洲免费黄色 | 亚洲性xxxx| 狠狠操导航 | 一区二区三区在线观看免费视频 | 7777xxxx| av片一区二区 | 在线视频一区二区 | 日韩电影一区二区在线观看 | 天天综合网天天 | 免费视频xnxx com | 18久久久久 | 国产精品免费大片视频 | www.天天色 | 国产精品久久久久久久av大片 | 永久免费毛片在线观看 | 成人精品电影 | 午夜精品久久久久久久久久久 | 色资源在线 | 久久有精品 | 欧美日比视频 | 久久亚洲影院 | 亚洲国产精品一区二区久久,亚洲午夜 | 婷婷婷国产在线视频 | 97精品国自产拍在线观看 | 九九热99视频 | 国产高清av在线播放 | 天天天天爱天天躁 | 久久久久国产成人精品亚洲午夜 | 亚洲精品玖玖玖av在线看 | 97视频入口免费观看 | 日本黄色黄网站 | 色在线亚洲| 六月丁香婷婷久久 | 在线中文字幕播放 | 精品国产aⅴ一区二区三区 在线直播av | 日韩三级一区 | 国产高清亚洲 | 99久久精品久久久久久清纯 | 国产日本在线 | 91在线精品秘密一区二区 | 黄色网址在线播放 | 天天干天天拍天天操天天拍 | 在线观看蜜桃视频 | 久热这里有精品 | 超碰免费成人 | 久草在线最新视频 | 激情丁香在线 | 亚洲第一中文字幕 | 国产 日韩 欧美 自拍 | 国产精品精品久久久久久 | 狠狠干2018 | 国产精品福利久久久 | 超级碰碰免费视频 | 超碰在线观看97 | 国产精品一区二区三区在线看 | 干天天 | 久久精品96 | 99精品久久精品一区二区 | av大全在线免费观看 | 一级黄色大片 | 久久人人爽 | 色88久久| 日韩三级视频在线看 | 午夜精品久久久 | 欧美淫aaa免费观看 日韩激情免费视频 | mm1313亚洲精品国产 | 久久久久欧美精品999 | 色鬼综合网 | 一级特黄av | www.黄色片.com | 国产精品不卡在线观看 | 摸bbb搡bbb搡bbbb| 97在线资源 | 国产麻豆视频 | 亚洲欧美国内爽妇网 | 国产精品一区二区三区四区在线观看 | 久久久影院官网 | 亚洲日本va在线观看 | 久久tv| 亚欧日韩av | 欧美日韩中文在线 | 手机在线看片日韩 | 91在线日韩 | 久青草视频在线观看 | 91日韩在线视频 | 91理论片午午伦夜理片久久 | 国产精品久久久久影院 | 三级小视频在线观看 | 久久这里只有精品23 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品九九九九九九 | 911在线| 亚洲播放一区 | 成年人在线免费看视频 | 国产精品国产三级在线专区 | 91香蕉亚洲精品 | 正在播放一区二区 | 免费情趣视频 | 丁香婷婷激情五月 | 69av在线播放 | 免费观看十分钟 | 亚洲精品无 | 久久99免费 | 中文字幕视频一区二区 | 国产日韩视频在线播放 | 国产91学生| 天天射天天干天天操 | 在线观看视频h | 国产精品九九九九九九 | 欧美韩日在线 | 99精彩视频 | 成人av久久| 久久视频免费在线 | 欧美永久视频 | 国产亚洲精品久久19p | 九九99 | 中文字幕在线看视频国产 | 九九热免费视频在线观看 | 国产精品久久久久久久7电影 | caobi视频 | 日本精品视频网站 | 狠狠色伊人亚洲综合成人 | 久久久福利影院 | 久久精品国产精品亚洲精品 | 亚洲成人av影片 | 国产精品综合久久久久 | 国产精品av在线免费观看 | 久久免费视频观看 | www色婷婷com| 精品爱爱 | 五月花激情 | 99热国产在线中文 | 婷婷丁香综合 | 国产69精品久久app免费版 | 最近中文字幕免费 | 国产精品一区二区三区久久 | 日韩电影中文字幕在线观看 | 973理论片235影院9 | 天天干干 | 久久理论影院 | 欧美色噜噜噜 | 亚洲精品午夜国产va久久成人 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产成人久久精品一区二区三区 | 国产成人精品一区二区三区在线观看 | 免费一级特黄录像 | 国产色婷婷 | 99久久精品无码一区二区毛片 | 日韩免费b | 精品一区二区在线免费观看 | 91人人射 | 国产一区二区三区视频在线 | 一级一级一片免费 | 亚洲欧洲视频 | 亚洲精品福利在线 | 国产精品一区二区久久国产 | 人人干网 | 亚洲热久久 | 色综合久久66 | 九九热精品视频在线播放 | 91网站在线视频 | 色综合天天天天做夜夜夜夜做 | 欧美日韩国产伦理 | 人人干天天射 | 欧美乱码精品一区二区 | 久久精品五月 | 欧美日韩伦理在线 | 亚洲国产视频网站 | 91在线看| 99在线免费观看 | 91视频国产高清 | 中文字幕免费在线看 | 中文字幕在线观看一区 | 免费91在线观看 | 亚洲精品福利在线观看 | 成人黄色免费在线观看 | 成年人在线免费看片 | 亚洲成av人影院 | aaa毛片视频 | 97超级碰| 美女视频免费一区二区 | 天天视频色版 | www.啪啪.com| 正在播放国产一区 | 色婷婷综合久久久久中文字幕1 | 色视频在线观看免费 | av在线之家电影网站 | 色综合亚洲精品激情狠狠 | 成人在线免费视频 | 香蕉视频在线免费看 | 日日色综合 | 中文字幕久久精品一区 | 特级西西444www大胆高清无视频 | 黄色一级在线观看 | 中文字幕在线观看网址 | 中文字幕二区三区 | 婷婷在线网站 | 99热99re6国产在线播放 | 国产香蕉在线 | 一区二区三区在线观看免费 | 欧美日比视频 | 亚洲精品乱码久久久久久按摩 | 久久色视频 | 精品在线视频一区 | 久久激情综合网 | 日韩av一区二区在线 | 午夜丰满寂寞少妇精品 | 国产精品国产三级在线专区 | av电影在线观看完整版一区二区 | 欧美一区二区三区在线看 | 午夜三级影院 | 久草精品视频在线观看 | 五月天色中色 | av亚洲产国偷v产偷v自拍小说 | 国产在线a | 夜夜夜夜爽 | 五月花丁香婷婷 | 婷婷婷国产在线视频 | 激情综合五月婷婷 | 精品国产电影一区 | 久久人人爽人人 | 插插插色综合 | 在线视频99 | 精品国内自产拍在线观看视频 | 精品国产一区二区三区在线观看 | 在线草| 婷婷丁香国产 | 午夜久草 | 欧美资源| 国产精品久久久久久久婷婷 | 久久视频国产 | 日本视频不卡 | 成人网色 | 一区二区高清在线 | 国产精品久久久久久久av电影 | 91麻豆产精品久久久久久 | 欧美一级大片在线观看 | 最近最新中文字幕 | 国产精品6| 久久私人影院 | 亚洲精品中文字幕在线观看 | 91在线麻豆 | 成人99免费视频 | 97精品国产91久久久久久久 | 日韩天堂网 | 又黄又爽又色无遮挡免费 | 中文字幕在线专区 | 午夜视频日本 | 玖玖在线免费视频 | 中文字幕精 | 日韩黄色免费在线观看 | 久久综合欧美精品亚洲一区 | 99国产视频 | 精品一区二区精品 | 91精品国产综合久久久久久久 | 人人超碰在线 | 午夜体验区 | 日韩免费视频在线观看 | 欧美va天堂va视频va在线 | 日韩av中文字幕在线免费观看 | 亚洲女同ⅹxx女同tv | 免费观看日韩 | 亚洲一区二区视频在线播放 | 成人一级视频在线观看 | 久草在线最新视频 | 美女视频黄频大全免费 | 国产精品成人一区二区三区 | 狠狠色狠狠综合久久 | av综合在线观看 | 成人av动漫在线 | 亚洲国产播放 | 一区二区三区日韩视频在线观看 | 在线国产不卡 | 97色在线观看免费视频 | 亚洲三级性片 | 97视频人人澡人人爽 | 综合亚洲视频 | 天天看天天干 | 国产在线第三页 | 亚洲精品乱码久久久久久久久久 | 99精品偷拍视频一区二区三区 | 午夜久久影视 | 国色天香在线观看 | 在线看污网站 | 麻豆一区二区三区视频 | 精品v亚洲v欧美v高清v | 精品福利av| 五月天婷婷在线视频 | av 在线观看 | 国产精品乱码在线 | av综合在线观看 | 中文字幕av在线免费 | 久久影视中文字幕 | 亚洲精品视频在线观看免费视频 | 久久综合久久综合九色 | 在线 成人 | 又黄又爽又无遮挡免费的网站 | 91在线你懂的 | av超碰在线 | av在线播放中文字幕 | 草 免费视频 | 亚洲伊人成综合网 | 国产黄视频在线观看 | 国产这里只有精品 | 久久综合久色欧美综合狠狠 | 欧美黑人性爽 | 91精品视频免费在线观看 | 精品福利视频在线观看 | 在线a亚洲视频播放在线观看 | 午夜精品区| 日韩三级视频在线看 | 久久短视频 | 九九一级片 | 欧美a免费 |