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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2022年最新《谷粒学院开发教程》:5 - 章节管理

發(fā)布時(shí)間:2024/3/12 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2022年最新《谷粒学院开发教程》:5 - 章节管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
資料
資料地址
后臺(tái)管理系統(tǒng)目錄前臺(tái)展示系統(tǒng)目錄
1 - 構(gòu)建工程篇7 - 渲染前臺(tái)篇
2 - 前后交互篇8 - 前臺(tái)登錄篇
3 - 文件上傳篇9 - 前臺(tái)課程篇
4 - 課程管理篇10 - 前臺(tái)支付篇
5 - 章節(jié)管理篇11 - 統(tǒng)計(jì)分析篇
6 - 微服務(wù)治理12 - 項(xiàng)目完結(jié)篇

目錄

  • 一、課程章節(jié)增刪改查
    • 1.1、后端接口
    • 1.2、前端實(shí)現(xiàn)
    • 1.3、添加章節(jié)
    • 1.4、修改章節(jié)
    • 1.5、刪除章節(jié)
  • 二、課程章節(jié)小節(jié)功能
    • 2.1、后端接口
    • 2.2、前端實(shí)現(xiàn)
    • 2.3、添加小節(jié)
    • 2.4、刪除小節(jié)
    • 2.5、修改小節(jié)
  • 三、課程發(fā)布信息預(yù)覽
    • 3.1、后端接口
    • 3.3、前端實(shí)現(xiàn)
  • 四、課程發(fā)布
    • 4.1、后端接口
    • 4.2、前端頁(yè)面
  • 五、課程列表
    • 5.1、后端接口
    • 5.2、前端實(shí)現(xiàn)
  • 六、課程刪除
    • 6.1、后端接口
    • 6.2、前端實(shí)現(xiàn)
  • 七、編輯基本信息及大綱
  • 八、阿里云視頻點(diǎn)播
    • 8.1、簡(jiǎn)介
    • 8.2、使用
  • 九、使用服務(wù)端SDK
    • 9.1、簡(jiǎn)介
    • 9.2、獲取視頻
    • 9.3、上傳視頻
  • 十、視頻點(diǎn)播微服務(wù)
    • 10.1、后端接口
    • 10.2、前端實(shí)現(xiàn)
    • 10.3、視頻刪除


一、課程章節(jié)增刪改查

1.1、后端接口

@Api(tags = "章節(jié)模塊") @CrossOrigin @RestController @RequestMapping("/eduservice/chapter") public class EduChapterController {@Autowiredprivate EduChapterService eduChapterService;@AutowiredEduCourseService eduCourseService;// 添加章節(jié)@PostMapping("addChapter")public R addChapter(@RequestBody EduChapter eduChapter) {eduChapterService.save(eduChapter);return R.ok();}// 根據(jù)章節(jié)id查詢@GetMapping("getChapter/{chapterId}")public R getChapter(@PathVariable String chapterId) {EduChapter eduChapter = eduChapterService.getById(chapterId);return R.ok().data("chapter", eduChapter);}// 修改章節(jié)@PostMapping("updateChapter")public R updateChapter(@RequestBody EduChapter eduChapter) {eduChapterService.updateById(eduChapter);return R.ok();}// 刪除章節(jié) 若存在小節(jié)則不可刪除@DeleteMapping("deleteById/{chapterId}")public R deleteById(@PathVariable String chapterId) {boolean flag = eduChapterService.deleteChapter(chapterId);if (flag) {return R.ok();} else {return R.error();}}} @Override public boolean deleteChapter(String chapterId) {QueryWrapper<EduVideo> wrapper = new QueryWrapper<>();wrapper.eq("chapter_id", chapterId);int count = eduVideoService.count(wrapper);if (count > 0) {throw new LaptoyException(20001, "還有小節(jié)數(shù)據(jù),不能刪除");} else {return this.removeById(chapterId);} }

1.2、前端實(shí)現(xiàn)

1、頁(yè)面代碼

<template><div class="app-container"><h2 style="text-align: center">發(fā)布新課程</h2><!-- 步驟條 --><el-steps :active="2" process-status="wait" align-center style="margin-bottom: 40px;"><el-step title="填寫課程基本信息" /><el-step title="創(chuàng)建課程大綱" /><el-step title="最終發(fā)布" /></el-steps><!-- 章節(jié)數(shù)據(jù)折疊面板 --><el-collapse accordion v-for="chapter in chapterVideoList" :key="chapter.id"><!-- 按鈕組 --><el-button-group><el-button type="primary" size="mini" icon="el-icon-circle-plus">添加小節(jié)</el-button><el-button type="primary" size="mini" icon="el-icon-edit" @click="openEditChapter(chapter.id)"></el-button><el-button type="danger" size="mini" icon="el-icon-delete" @click="removeById(chapter.id)"></el-button></el-button-group><!-- 小節(jié)數(shù)據(jù) --><el-collapse-item :title=chapter.title><div v-for="video in chapter.children" :key="video.id">{{ video.title }}<span class="acts"><el-button type="text">編輯</el-button><el-button type="text">刪除</el-button></span></div></el-collapse-item></el-collapse><!-- 底部按鈕 --><el-form label-width="120px"><el-form-item><el-button @click="dialogChapterFormVisible=true">添加章節(jié)</el-button><el-button @click="previous">上一步</el-button><el-button :disabled="saveBtnDisabled" type="primary" @click="next">下 一步</el-button></el-form-item></el-form><!-- 添加或修改章節(jié)彈框 --><el-dialog :visible.sync="dialogChapterFormVisible" title="添加章節(jié)"><el-form :model="chapter" label-width="120px"><el-form-item label="章節(jié)標(biāo)題"><el-input v-model="chapter.title" /></el-form-item><el-form-item label="章節(jié)排序"><el-input-number v-model="chapter.sort" :min="0" controls-position="right" /></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogChapterFormVisible = false">取 消</el-button><el-button type="primary" @click="saveOrUpdate">確 定</el-button></div></el-dialog></div> </template> data() {return {dialogChapterFormVisible: false,chapter: {title: "",sort: 0},}; },

稍微優(yōu)化了頁(yè)面


2、創(chuàng)建api - chapter.js

//添加章節(jié) addChapter(chapter) {return request({url: `/eduservice/chapter/addChapter`,method: `post`,data: chapter}) }, //根據(jù)id查詢章節(jié) updateChapterById(chapterId) {return request({url: `/eduservice/chapter/getChapter/${chapterId}`,method: `get`,}) }, //修改章節(jié) updateChapter(chapter) {return request({url: `/eduservice/chapter/updateChapter`,method: `post`,data: chapter}) }, //刪除章節(jié) deleteById(chapterId) {return request({url: `/eduservice/chapter/deleteById/${chapterId}`,method: `delete`,}) }

1.3、添加章節(jié)

saveChapter() {//設(shè)置課程id到chapter對(duì)象中,不指定課程id無(wú)法正常保存,因?yàn)閿?shù)據(jù)庫(kù)字段為非空this.chapter.courseId = this.courseIdchapter.addChapter(this.chapter).then((resp) => {this.dialogChapterFormVisible = false;this.$message({message: "添加章節(jié)成功",type: "success",});this.chapter = {}this.getChapterVideoByCourseId()}); }, saveOrUpdate() {this.saveChapter() },

1.4、修改章節(jié)

1、點(diǎn)擊修改章節(jié)按鈕根據(jù)章節(jié)id回顯數(shù)據(jù)

<el-button type="primary" size="mini" icon="el-icon-edit" @click="openEditChapter(chapter.id)"></el-button>

2、修改方法

// 修改章節(jié)彈窗回顯數(shù)據(jù) openEditChapter(id) {this.dialogChapterFormVisible = true;chapter.updateChapterById(id).then((resp) => {this.chapter = resp.data.data}) }, // 修改章節(jié) updateChapter(id) {//設(shè)置課程id到chapter對(duì)象中,不指定課程id無(wú)法正常保存,因?yàn)閿?shù)據(jù)庫(kù)字段為非空this.chapter.courseId = this.courseIdchapter.updateChapter(this.chapter).then((resp) => {this.dialogChapterFormVisible = false;this.$message({message: "修改章節(jié)成功",type: "success",});this.getChapterVideoByCourseId();}); },

1.5、刪除章節(jié)

<el-button type="danger" size="mini" icon="el-icon-delete" @click="removeById(chapter.id)"></el-button> // 刪除章節(jié) removeById(chapterId) {this.$confirm("此操作將永久刪除章節(jié)信息, 是否繼續(xù)?", "提示", {confirmButtonText: "確定",cancelButtonText: "取消",type: "warning",}).then(() => {chapter.deleteById(chapterId).then((resp) => {this.$message({type: "success",message: "刪除成功!",});this.getChapterVideoByCourseId();});}); },

二、課程章節(jié)小節(jié)功能

2.1、后端接口

@Api(tags = "小節(jié)模塊") @RestController @RequestMapping("/eduservice/video") @CrossOrigin //解決跨域問(wèn)題 public class EduVideoController {@Autowiredprivate EduVideoService eduVideoService;//添加小節(jié)@PostMapping("/addVideo")public R addVideo(@RequestBody EduVideo eduVideo) {eduVideoService.save(eduVideo);return R.ok();}//刪除小節(jié)// TODO 后面這個(gè)方法需要完善,刪除小節(jié)的時(shí)候,同時(shí)也要把視頻刪除@DeleteMapping("/deleteVideo/{id}")public R deleteVideo(@PathVariable String id) {eduVideoService.removeById(id);return R.ok();}//修改小節(jié)@PostMapping("/updateVideo")public R updateVideo(@RequestBody EduVideo eduVideo) {eduVideoService.updateById(eduVideo);return R.ok();}//根據(jù)小節(jié)id查詢@GetMapping("/getVideoById/{videoId}")public R getVideoById(@PathVariable String videoId) {EduVideo eduVideo = eduVideoService.getById(videoId);return R.ok().data("data", eduVideo);} }

2.2、前端實(shí)現(xiàn)

1、頁(yè)面

<!-- 章節(jié)數(shù)據(jù)折疊面板 --> <el-collapse accordion v-for="chapter in chapterVideoList" :key="chapter.id"><!-- 按鈕組 --><el-button-group><el-button type="primary" size="mini" icon="el-icon-circle-plus" @click="openSaveVideoForm(chapter.id)">添加小節(jié)</el-button></el-button-group> </el-collapse><!--添加小節(jié)表單--> <el-dialog :visible.sync="dialogVideoFormVisible" title="添加小節(jié)"><el-form :model="video" label-width="120px"><el-form-item label="小節(jié)標(biāo)題"><el-input v-model="video.title" /></el-form-item><el-form-item label="小節(jié)排序"><el-input-number v-model="video.sort" :min="0" controls-position="right" /></el-form-item><el-form-item label="是否免費(fèi)"><el-radio-group v-model="video.free"><el-radio :label="true">免費(fèi)</el-radio><el-radio :label="false">默認(rèn)</el-radio></el-radio-group></el-form-item><el-form-item label="上傳視頻"><!-- TODO --></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogVideoFormVisible = false">取 消</el-button><el-button :disabled="saveVideoBtnDisabled" type="primary" @click="saveOrUpdateVideo">確 定</el-button></div> </el-dialog> data() {return {saveVideoBtnDisabled: false,dialogVideoFormVisible: false,video: {sort: 0,title: "",free: ""}}; },

2、API - src\api\teacher\video.js

import request from '@/utils/request' //引入已經(jīng)封裝好的axios 和 攔截器export default {//添加小節(jié)addVideo(video) {return request({url: `/eduservice/video/addVideo`,method: `post`,data: video})},//根據(jù)id查詢小節(jié)getVideoById(videoId) {return request({url: `/eduservice/video/getVideoById/${videoId}`,method: `get`,})},//修改小節(jié)updateVideo(video) {return request({url: `/eduservice/video/updateVideo`,method: `post`,data: video})},//刪除小節(jié)deleteById(videoId) {return request({url: `/eduservice/video/deleteVideo/${videoId}`,method: `delete`,})}, }

2.3、添加小節(jié)

openSaveVideoForm(id) {this.dialogVideoFormVisible = truethis.video.courseId = this.courseIdthis.video.chapterId = id }, saveOrUpdateVideo(){if (this.video.id) {//修改小節(jié)} else {//新增小節(jié)this.saveVideo();} }, // 添加小節(jié) saveVideo() {video.addVideo(this.video).then((resp) => {this.dialogVideoFormVisible = false;this.$message({message: "添加小節(jié)成功",type: "success",});this.video = {}this.getChapterVideoByCourseId();}); },

2.4、刪除小節(jié)

<!-- 章節(jié)數(shù)據(jù)折疊面板 --> <el-collapse accordion v-for="chapter in chapterVideoList" :key="chapter.id"><!-- 按鈕組 --><!-- 小節(jié)數(shù)據(jù) --><el-collapse-item :title=chapter.title><div v-for="video in chapter.children" :key="video.id">{{ video.title }}<span class="acts"><el-button type="text">編輯</el-button><el-button type="text" @click="removeVideo(video.id)">刪除</el-button></span></div></el-collapse-item> </el-collapse> // 刪除小節(jié) removeVideo(id) {this.$confirm("此操作將永久刪除小節(jié)信息, 是否繼續(xù)?", "提示", {confirmButtonText: "確定",cancelButtonText: "取消",type: "warning",}).then(() => {video.deleteById(id).then((resp) => {this.$message({type: "success",message: "刪除成功!",});this.getChapterVideoByCourseId();});}); },

2.5、修改小節(jié)

<!-- 章節(jié)數(shù)據(jù)折疊面板 --> <el-collapse accordion v-for="chapter in chapterVideoList" :key="chapter.id"><!-- 按鈕組 --><!-- 小節(jié)數(shù)據(jù) --><el-collapse-item :title=chapter.title><div v-for="video in chapter.children" :key="video.id">{{ video.title }}<span class="acts"><el-button type="text" @click="openEditVideoForm(video.id)">編輯</el-button><el-button type="text" @click="removeVideo(video.id)">刪除</el-button></span></div></el-collapse-item> </el-collapse> // 展開(kāi)編輯表單 openEditVideoForm(id) {this.dialogVideoFormVisible = true;video.getVideoById(id).then((resp) => {this.video = resp.data.data;}); },// 修改小節(jié) updateVideo() {video.updateVideo(this.video).then((resp) => {this.dialogVideoFormVisible = false;this.$message({message: "修改小節(jié)成功",type: "success",});this.getChapterVideoByCourseId();}); },// 添加或修改小節(jié) saveOrUpdateVideo() {if (this.video.id) {//修改小節(jié)this.updateVideo();} else {//新增小節(jié)this.saveVideo();} },

三、課程發(fā)布信息預(yù)覽

3.1、后端接口

1、創(chuàng)建 VO

@Data public class CoursePublishVo implements Serializable {private static final long serialVersionUID = 1L;private String id;//課程idprivate String title; //課程名稱private String cover; //封面private Integer lessonNum;//課時(shí)數(shù)private String subjectLevelOne;//一級(jí)分類private String subjectLevelTwo;//二級(jí)分類private String teacherName;//講師名稱private String price;//價(jià)格 ,只用于顯示}

2、控制層

// 根據(jù)課程id查詢課程確認(rèn)信息 @GetMapping("/getPublishCourseInfo/{id}") public R getPublishCourseInfo(@PathVariable String id) {CoursePublishVo publishCourseInfo = eduCourseService.getPublishCourseInfo(id);return R.ok().data("data", publishCourseInfo); }

3、業(yè)務(wù)層

@Override public CoursePublishVo getPublishCourseInfo(String id) {return eduCourseMapper.getPublishCourseInfo(id); }

4、數(shù)據(jù)層

CoursePublishVo getPublishCourseInfo(String id); <select id="getPublishCourseInfo" resultType="com.laptoy.eduservice.entity.vo.CoursePublishVo">SELECT ec.id,ec.title,ec.cover,ec.lesson_num AS lessonNum,ec.price,s1.title AS subjectLevelOne,s2.title AS subjectLevelTwo,t.name AS teacherNameFROM edu_course ecLEFT JOIN edu_teacher t ON ec.teacher_id = t.idLEFT JOIN edu_subject s1 ON ec.subject_parent_id = s1.idLEFT JOIN edu_subject s2 ON ec.subject_id = s2.idWHERE ec.id = #{id} </select>

5、將xml文件放到 resources/xml 目錄下,并再YML文件指定

mybatis-plus:mapper-locations: /mapper/*.xml


3.3、前端實(shí)現(xiàn)

1、定義API - course.js

//課程確認(rèn)信息顯示 getPublishCourseInfo(courseId){return request({url:"/eduservice/course/getpublishCourseInfo/"+courseId,method: 'get',}) }

2、頁(yè)面

<div class="ccInfo"><img :src="publishCourseInfo.cover" /><div class="main"><h2>{{ publishCourseInfo.title }}</h2><p class="gray"><span>共{{ publishCourseInfo.lessonNum }}課時(shí)</span></p><p><span>所屬分類:{{ publishCourseInfo.subjectLevelOne }} : {{ publishCourseInfo.subjectLevelTwo }}</span></p><p>課程講師:{{ publishCourseInfo.teacherName }}</p><h3 class="red">¥{{ publishCourseInfo.price }}</h3></div> </div>

3、方法

export default {data() {return {saveBtnDisabled: false,courseId: '',publishCourseInfo: {},};},methods: {//根據(jù)課程id查詢getPublishCourseInfo() {course.getPublishCourseInfo(this.courseId).then(resp => {this.publishCourseInfo = resp.data.dataconsole.log(this.publishCourseInfo)})},// 跳轉(zhuǎn)到上一步previous() {this.$router.push("/course/chapter/" + this.courseId);},publish() {this.$router.push("/course/list");}},created() {//獲取路由中的id值if (this.$route.params && this.$route.params.id) {this.courseId = this.$route.params.id//調(diào)用接口方法根據(jù)課程id查詢課程信息this.getPublishCourseInfo()}}, };

4、css

<style scoped> .ccInfo {background: #f5f5f5;padding: 20px;overflow: hidden;border: 1px dashed #ddd;margin-bottom: 40px;position: relative; } .ccInfo img {background: #d6d6d6;width: 500px;height: 278px;display: block;float: left;border: none; } .ccInfo .main {margin-left: 520px; } .ccInfo .main h2 {font-size: 28px;margin-bottom: 30px;line-height: 1;font-weight: normal; } .ccInfo .main p {margin-bottom: 10px;word-wrap: break-word;line-height: 24px;max-height: 48px;overflow: hidden; } .ccInfo .main p {margin-bottom: 10px;word-wrap: break-word;line-height: 24px;max-height: 48px;overflow: hidden; } .ccInfo .main h3 {left: 540px;bottom: 20px;line-height: 1;font-size: 28px;color: #d32f24;font-weight: normal;position: absolute; } </style>

5、測(cè)試



四、課程發(fā)布

4.1、后端接口

1、控制層

//課程最終發(fā)布 //修改課程狀態(tài) @PostMapping("publishCourse/{id}") public R publishCourse(@PathVariable String id){EduCourse eduCourse = new EduCourse();eduCourse.setStatus("Normal"); //設(shè)置課程發(fā)布狀態(tài)eduCourse.setId(id);boolean flag = eduCourseService.updateById(eduCourse);if (flag){return R.ok();}else {return R.error();} }

4.2、前端頁(yè)面

1、API

//課程最終發(fā)布 publishCourse(courseId) {return request({url: "/eduservice/course/publishCourse/" + courseId,method: 'post',}) }

2、方法

//發(fā)布課程 publish() {this.$confirm("你確定要發(fā)布此課程, 是否繼續(xù)?", "提示", {confirmButtonText: "確定",cancelButtonText: "取消",type: "warning",}).then(() => {course.publishCourse(this.courseId).then((resp) => {this.$message({message: "課程發(fā)布成功",type: "success",});//跳轉(zhuǎn)課程列表頁(yè)面this.$router.push({ path: "/course/list" });});}); }

五、課程列表

5.1、后端接口

1、實(shí)體類作為模糊查詢條件

@ApiModel(value = "Course查詢對(duì)象", description = "課程查詢對(duì)象封裝") @Data public class CourseQuery implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "課程名稱,模糊查詢")private String title;@ApiModelProperty(value = "發(fā)布狀態(tài) Normal已發(fā)布 Draft未發(fā)布")private String status; }

2、控制層

//多條件查詢課程帶分頁(yè) @ApiOperation(value = "多條件查詢課程帶分頁(yè)") @PostMapping("/pageCourseCondition/{page}/{limit}") public R pageCourseCondition(@ApiParam(name = "page", value = "當(dāng)前頁(yè)碼", required = true) @PathVariable Long page,@ApiParam(name = "limit", value = "每頁(yè)記錄數(shù)", required = true) @PathVariable Long limit,@RequestBody(required = false) CourseQuery courseQuery) {//通過(guò)封裝courseQuery對(duì)象來(lái)直接傳遞查詢條件//創(chuàng)建分頁(yè)page對(duì)象Page<EduCourse> pageParam = new Page<>(page, limit);//調(diào)用方法實(shí)現(xiàn)多條件分頁(yè)查詢eduCourseService.pageQuery(pageParam, courseQuery);//獲取查詢到的數(shù)據(jù)List<EduCourse> records = pageParam.getRecords();//獲取總記錄數(shù)long total = pageParam.getTotal();return R.ok().data("total", total).data("data", records); }

3、業(yè)務(wù)層

@Override public void pageQuery(Page<EduCourse> pageParam, CourseQuery courseQuery) {QueryWrapper<EduCourse> wrapper = new QueryWrapper<>();String title = courseQuery.getTitle();String status = courseQuery.getStatus();if (!StringUtils.isEmpty(title)) {wrapper.like("title", title);//參數(shù)1:數(shù)據(jù)庫(kù)字段名; 參數(shù)2:模糊查詢的值}if (!StringUtils.isEmpty(status)) {wrapper.eq("status", status);}wrapper.orderByDesc("gmt_create");baseMapper.selectPage(pageParam, wrapper); }

5.2、前端實(shí)現(xiàn)

1、頁(yè)面

<template><div><!--多條件查詢表單--><el-form :inline="true" class="demo-form-inline" style="margin-left: 20px; margin-top: 12px"><el-form-item label="課程名稱"><el-input v-model="courseQuery.title" placeholder="請(qǐng)輸入名稱"></el-input></el-form-item><el-form-item label="發(fā)布狀態(tài)"><el-select v-model="courseQuery.status" placeholder="課程狀態(tài)"><el-option label="已發(fā)布" :value="'Normal'"></el-option><el-option label="未發(fā)布" :value="'Draft'"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" @click="getList()">查詢</el-button><el-button type="default" @click="resetData()">清空</el-button></el-form-item></el-form><!-- 展示表格 --><el-table :data="list" style="width: 100%" height="620" border fit highlight-current-row element-loading-text="數(shù)據(jù)加載中"><el-table-column prop="date" label="序號(hào)" width="70" align="center"><template slot-scope="scope">{{ (page - 1) * limit + scope.$index + 1 }}</template></el-table-column><el-table-column prop="title" label="課程名稱" width="400"></el-table-column><el-table-column label="發(fā)布狀態(tài)" width="80"><template slot-scope="scope">{{ scope.row.status === "Normal" ? "已發(fā)布" : "未發(fā)布" }}</template></el-table-column><el-table-column prop="lessonNum" label="課時(shí)數(shù)" width="100" /><el-table-column prop="gmtCreate" label="添加時(shí)間" width="300" /><el-table-column prop="viewCount" label="瀏覽數(shù)量" width="200" /><el-table-column label="操作" align="center"><template slot-scope="scope"><router-link :to="'/teacher/edit/' + scope.row.id"><el-button type="primary" size="mini" icon="el-icon-edit" plain>編輯基本信息</el-button></router-link><router-link :to="'/teacher/edit/' + scope.row.id"><el-button type="info" size="mini" icon="el-icon-edit" plain>編輯課程大綱</el-button></router-link><el-button type="danger" size="mini" icon="el-icon-delete" @click="removeById(scope.row.id)" plain>點(diǎn)擊刪除課程</el-button></template></el-table-column></el-table><!--分頁(yè)組件--><el-pagination background layout="prev, pager, next,total,jumper" :total="total" :page-size="limit" style="padding: 30px 0; text-align: center" :current-page="page" @current-change="getList"></el-pagination></div> </template>

2、API - course.js

//課程列表多條件分頁(yè)查詢 //page:當(dāng)前頁(yè),limit:每頁(yè)記錄數(shù),teacherQuery:條件對(duì)象 getCourseListPage(page, limit, courseQuery) {return request({url: `/eduservice/course/pageCourseCondition/${page}/${limit}`,method: 'post',data: courseQuery}) },

3、js

import course from "@/api/teacher/course.js";export default {data() {return {list: null, //查詢之后給接口返回的數(shù)據(jù)裝的集合page: 1, //當(dāng)前頁(yè)limit: 10, //每頁(yè)顯示記錄數(shù)courseQuery: {}, //條件封裝對(duì)象total: 0, //總記錄數(shù)};},created() {this.getList();},methods: {getList(page = 1) {this.page = page;course.getCourseListPage(this.page, this.limit, this.courseQuery).then((resp) => {this.list = resp.data.data;this.total = resp.data.total;}) //請(qǐng)求成功.catch((err) => {console.log(err);}); //請(qǐng)求失敗},//清空方法resetData() {//表單輸入項(xiàng)數(shù)據(jù)清空this.courseQuery = {};//查詢所有課程數(shù)據(jù)this.getList();},}, };


六、課程刪除

6.1、后端接口

1、控制層

//課程列表中刪除課程方法 @DeleteMapping("/removeCourseById/{id}") public R removeCourseById(@PathVariable String id) {boolean flag = eduCourseService.removeCourse(id);if (flag) {return R.ok();} else {return R.error();} }

2、業(yè)務(wù)層

//刪除課程 @Transactional @Override public boolean removeCourse(String id) {//1、根據(jù)課程id刪除小節(jié)eduVideoService.removeVideoByCourseId(id);//2、根據(jù)課程id刪除章節(jié)部分eduChapterService.removeChapterByCourseId(id);//3、根據(jù)課程id刪除課程描述descriptionService.removeById(id);//4、根據(jù)課程id刪除課程本身boolean flag = this.removeById(id);if (flag) {return true;} else {throw new LaptoyException(20001, "刪除失敗");} }

3、刪除小節(jié)

//根據(jù)課程id刪除小節(jié) // TODO 刪除小節(jié),要?jiǎng)h除對(duì)應(yīng)的視頻文件 @Override public void removeVideoByCourseId(String id) {QueryWrapper<EduVideo> wrapper = new QueryWrapper<>();wrapper.eq("course_id", id);baseMapper.delete(wrapper); }

4、刪除章節(jié)

@Override public void removeChapterByCourseId(String id) {QueryWrapper<EduChapter> wrapper = new QueryWrapper<>();wrapper.eq("course_id",id);baseMapper.delete(wrapper); }

6.2、前端實(shí)現(xiàn)

1、API - course.js

//刪除課程 removeCourseById(courseId) {return request({url: "/eduservice/course/removeCourseById/" + courseId,method: 'delete',}) }

2、方法

<el-button type="danger" size="mini" icon="el-icon-delete" @click="removeById(scope.row.id)" plain>點(diǎn)擊刪除課程</el-button><script> // 刪除課程 removeById(id) {this.$confirm("此操作將永久刪除該課程記錄, 是否繼續(xù)?", "提示", {confirmButtonText: "確定",cancelButtonText: "取消",type: "warning",}).then(() => {course.removeCourseById(id).then((resp) => {this.$message({type: "success",message: "刪除成功!",});this.getList();});}); }, </script>

七、編輯基本信息及大綱

1、頁(yè)面

<el-table-column label="操作" align="center"><template slot-scope="scope"><router-link :to="'/course/info/' + scope.row.id"><el-button type="primary" size="mini" icon="el-icon-edit" plain>編輯基本信息</el-button></router-link><router-link :to="'/course/chapter/' + scope.row.id"><el-button type="info" size="mini" icon="el-icon-edit" plain>編輯課程大綱</el-button></router-link><el-button type="danger" size="mini" icon="el-icon-delete" @click="removeById(scope.row.id)" plain>點(diǎn)擊刪除課程</el-button></template> </el-table-column>

2、添加路由

{path: 'info/:id',name: 'EduCourseInfoEdit',component: () => import('@/views/edu/course/info.vue'),meta: { title: '編輯課程基本信息', noCache: true },hidden: true }, {path: 'chapter/:id',name: 'EduCourseChapterEdit',component: () => import('@/views/edu/course/chapter.vue'),meta: { title: '編輯課程大綱', noCache: true },hidden: true },

八、阿里云視頻點(diǎn)播

8.1、簡(jiǎn)介

視頻點(diǎn)播( ApsaraVideo for VoD )是集音視頻采集、編輯、上傳、自動(dòng)化轉(zhuǎn)碼處理、媒體資源管理、分發(fā)加速于一體的一站式音視頻點(diǎn)播解決方案。

開(kāi)通服務(wù)-按流量計(jì)費(fèi)


8.2、使用

1、開(kāi)啟 存儲(chǔ)管理

2、添加 轉(zhuǎn)碼模板組

3、上傳視頻


九、使用服務(wù)端SDK

9.1、簡(jiǎn)介

1、簡(jiǎn)介

  • sdk的方式將api進(jìn)行了進(jìn)一步的封裝,不用自己創(chuàng)建工具類。
  • 我們可以基于服務(wù)端SDK編寫代碼來(lái)調(diào)用點(diǎn)播API,實(shí)現(xiàn)對(duì)點(diǎn)播產(chǎn)品和服務(wù)的快速操作

2、功能介紹

  • SDK封裝了對(duì)API的調(diào)用請(qǐng)求和響應(yīng),避免自行計(jì)算較為繁瑣的 API簽名。
  • 支持所有點(diǎn)播服務(wù)的API,并提供了相應(yīng)的示例代碼。
  • 支持7種開(kāi)發(fā)語(yǔ)言,包括:Java、Python、PHP、.NET、Node.js、Go、C/C++。
  • 通常在發(fā)布新的API后,我們會(huì)及時(shí)同步更新SDK,所以即便您沒(méi)有找到對(duì)應(yīng)API的示例代碼,也可以參考舊的示例自行實(shí)現(xiàn)調(diào)用。

9.2、獲取視頻

1、在 service模塊 新建微服務(wù)模塊 service_vod

2、POM

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId> </dependency> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId> </dependency> <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId> </dependency> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId> </dependency> <dependency><groupId>org.json</groupId><artifactId>json</artifactId> </dependency> <dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId> </dependency>

3、測(cè)試獲取視頻播放地

//初始化類 public class InitObject {public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {String regionId = "cn-shanghai"; // 點(diǎn)播服務(wù)接入?yún)^(qū)域DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);return client;}public static void main(String[] args) throws ClientException {//1、根據(jù)視頻id獲取視頻播放地址//創(chuàng)建初始化對(duì)象DefaultAcsClient cl = InitObject.initVodClient("LTAI5tL5FrVJBuQadij4KRvJ", "Xs7dHUvxCdHLd0K5iFK7NWEbdUN7GG");//創(chuàng)建獲取視頻地址request對(duì)象和response對(duì)象GetPlayInfoResponse response = new GetPlayInfoResponse();GetPlayInfoRequest request = new GetPlayInfoRequest();//向request對(duì)象設(shè)置視頻id值request.setVideoId("1a383ac7aa7f4b8197714ca6f886e5be");//調(diào)用初始化對(duì)象里面的方法傳遞request,獲取數(shù)據(jù)response = cl.getAcsResponse(request);List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();//播放地址for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + "\n");}//Base信息System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + "\n");//VideoBase.Title = 6 - What If I Want to Move Faster.mp4} } PlayInfo.PlayURL = https://outin-327a9fa3dcae11ecbc2400163e1c8dba.oss-cn-shanghai.aliyuncs.com/sv/60fc3bbf-180ff24e597/60fc3bbf-180ff24e597.mp4?Expires=1653551691&OSSAccessKeyId=LTAIrkwb21KyGjJl&Signature=h0s4mbCbwFd8797gs1KXWxJAUpU%3D VideoBase.Title = 視頻點(diǎn)播控制臺(tái) - Google Chrome 2022-05-25 21-26-51.mp4

3、測(cè)試獲取視頻播放憑證(加密視頻)

public static void main(String[] args) throws ClientException {//創(chuàng)建初始化對(duì)象DefaultAcsClient cl = InitObject.initVodClient("LTAI5tL5FrVJBuQadij4KRvJ", "Xs7dHUvxCdHLd0K5iFK7NWEbdUN7GG");//創(chuàng)建獲取視頻地址request對(duì)象和response對(duì)象GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();//向request對(duì)象設(shè)置視頻id值request.setVideoId("1a383ac7aa7f4b8197714ca6f886e5be");GetVideoPlayAuthResponse response = cl.getAcsResponse(request);//播放憑證System.out.print("PlayAuth = " + response.getPlayAuth() + "\n");//VideoMeta信息System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + "\n"); } PlayAuth = eyJTZWN1cml0eVRva2VuIjoiQ0FJU2h3TjFxNkZ0NUIyeWZTaklyNWJESGZqVG40eHA0cUM1ZWw3WTFuay9kZUZHdWJmOW1qejJJSDlJZEhWb0FPOGZ2dlUwbTJ0WTdQc1psck1xR3NFZUhoZWJONUlwdDg0T29GMzlKcExGc3QySjZyOEpqc1VZcDVBQTdFYXBzdlhKYXNEVkVmbDJFNVhFTWlJUi8wMGU2TC8rY2lyWXBUWEhWYlNDbFo5Z2FQa09Rd0M4ZGtBb0xkeEtKd3hrMnQxNFVtWFdPYVNDUHdMU2htUEJMVXhtdldnR2wyUnp1NHV5M3ZPZDVoZlpwMXI4eE80YXhlTDBQb1AyVjgxbExacGxlc3FwM0k0U2M3YmFnaFpVNGdscjhxbHg3c3BCNVN5Vmt0eVdHVWhKL3phTElvaXQ3TnBqZmlCMGVvUUFQb3BGcC9YNmp2QWF3UExVbTliWXhncGhCOFIrWGo3RFpZYXV4N0d6ZW9XVE84MCthS3p3TmxuVXo5bUxMZU9WaVE0L1ptOEJQdzQ0RUxoSWFGMElVRTF5R21DQ2QvWDRvZ3VSUDF6N0VwTG9pdjltamNCSHFIeno1c2VQS2xTMVJMR1U3RDBWSUpkVWJUbHphRUpHZ1RTNExmWldJbGNUS0FNOVd1MlBNYXgzYlFGRHI1M3ZzVGJiWHpaYjBtcHR1UG56ZDE0Sk9CS2cxMUtVR29BQlUrY0Q3SXpmeDIvSHJmNXA2cWdSa2UvdDNaMjFPUXF1NkRsSkV3VnpPL2poWngva3JNNitGNWlEK25kT1JHQitZbDJtcTN6SlBnclQxNVdveE5QdXJndy9xbWNib1BWR3dtV01qa3RKOXo0YS90TnA0SWNLRGxKQStvOWFvOWdLbUpPZWJFMnZXT1FicE1LbGFmOER6Q1JCMTl5NmZDUi9qWDFObndub3RTQT0iLCJBdXRoSW5mbyI6IntcIkNJXCI6XCJLenVKNUlCVmRIc0E2eTNlTXFDbS9vYXVOMFZwVFBmYkU0L1VaUUt5c0dhVzc3MjRTWEZQejVyUHlyOGRSN0VaZXVFenpEdndDcDRIY2NoZFlkMjdMVy8yK0R2S1lySXRsVGxlTCtUa0lsZz1cIixcIkNhbGxlclwiOlwiNldQZVY4MkttMDlUbGNGUzVWeDB0SjUxY2pCWEVYb2FuZEk4dEU4OENjWT1cIixcIkV4cGlyZVRpbWVcIjpcIjIwMjItMDUtMjZUMDc6MDQ6NTZaXCIsXCJNZWRpYUlkXCI6XCIxYTM4M2FjN2FhN2Y0YjgxOTc3MTRjYTZmODg2ZTViZVwiLFwiU2lnbmF0dXJlXCI6XCI3Vjhza3RPTnRIK1NBZGV0bVFWRk9CU29vRmc9XCJ9IiwiVmlkZW9NZXRhIjp7IlN0YXR1cyI6Ik5vcm1hbCIsIlZpZGVvSWQiOiIxYTM4M2FjN2FhN2Y0YjgxOTc3MTRjYTZmODg2ZTViZSIsIlRpdGxlIjoi6KeG6aKR54K55pKt5o6n5Yi25Y+wIC0gR29vZ2xlIENocm9tZSAyMDIyLTA1LTI1IDIxLTI2LTUxLm1wNCIsIkNvdmVyVVJMIjoiaHR0cDovL291dGluLTMyN2E5ZmEzZGNhZTExZWNiYzI0MDAxNjNlMWM4ZGJhLm9zcy1jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20vMWEzODNhYzdhYTdmNGI4MTk3NzE0Y2E2Zjg4NmU1YmUvc25hcHNob3RzLzNmOTg0ZTE0YjU5OTQxNTM5ODhmNDdiMGI1MDQxMDZhLTAwMDAxLmpwZz9FeHBpcmVzPTE2NTM1NTIxOTYmT1NTQWNjZXNzS2V5SWQ9TFRBSXJrd2IyMUt5R2pKbCZTaWduYXR1cmU9c040UEljem9UbUFPSFJzaHhRTXhMd3pxc09vJTNEIiwiRHVyYXRpb24iOjUuMzE3N30sIkFjY2Vzc0tleUlkIjoiU1RTLk5VdlZCZ3JTSFViUnh4aTJ5anlualZyVngiLCJBY2Nlc3NLZXlTZWNyZXQiOiI3dzRnaWtuSEFlbndCTVYxN2hqbXNqekw4cUZIdlRmZ0tHNjFtWDJ1cVdKcCIsIlJlZ2lvbiI6ImNuLXNoYW5naGFpIiwiQ3VzdG9tZXJJZCI6MTk2MzMzNzIxMTEyMTk2NH0= VideoMeta.Title = 視頻點(diǎn)播控制臺(tái) - Google Chrome 2022-05-25 21-26-51.mp4

9.3、上傳視頻

1、POM - 默認(rèn)找不到該依賴

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-sdk-vod-upload</artifactId> </dependency>

2、將資料的 5-lib/aliyun-java-vod-upload-1.4.11.jar 放到maven倉(cāng)庫(kù)bin目錄下并執(zhí)行如下命令安裝上述依賴

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar

3、測(cè)試

@Test public void testFileUpload() {String accessKeyId = "LTAI5tL5FrVJBuQadij4KRvJ";String accessKeySecret = "Xs7dHUvxCdHLd0K5iFK7NWEbdUN7GG";String title = "My Upload Video"; //上傳之后文件的名稱String fileName = "C:\\Users\\lapto\\Desktop\\myVideo.mp4"; //本地文件的路徑和名稱UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);/* 可指定分片上傳時(shí)每個(gè)分片的大小,默認(rèn)為2M字節(jié) */request.setPartSize(2 * 1024 * 1024L);/* 可指定分片上傳時(shí)的并發(fā)線程數(shù),默認(rèn)為1,(注:該配置會(huì)占用服務(wù)器CPU資源,需根據(jù)服務(wù)器情況指定)*/request.setTaskNum(1);UploadVideoImpl uploader = new UploadVideoImpl();UploadVideoResponse response = uploader.uploadVideo(request);if (response.isSuccess()) {System.out.print("VideoId=" + response.getVideoId() + "\n"); //獲取到上傳視頻的id} else {/* 如果設(shè)置回調(diào)URL無(wú)效,不影響視頻上傳,可以返回VideoId同時(shí)會(huì)返回錯(cuò)誤碼。其他情況上傳失敗時(shí),VideoId為空,此時(shí)需要根據(jù)返回錯(cuò)誤碼分析具體錯(cuò)誤原因 */System.out.print("VideoId=" + response.getVideoId() + "\n");System.out.print("ErrorCode=" + response.getCode() + "\n");System.out.print("ErrorMessage=" + response.getMessage() + "\n");} }


十、視頻點(diǎn)播微服務(wù)

10.1、后端接口

1、service_vod微服務(wù) 主啟動(dòng)類

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @ComponentScan(basePackages = {"com.laptoy"}) //用于掃描swagger public class Service_vod_Main8003 {public static void main(String[] args) {SpringApplication.run(Service_vod_Main8003.class, args);} }

2、YML

# 服務(wù)端口號(hào) server.port=8003 # 服務(wù)名 spring.application.name=service-vod # nacos注冊(cè)中心 spring.cloud.nacos.discovery.server-addr=120.76.55.55:8848 # 環(huán)境設(shè)置 dev test prod spring.profiles.active=dev # 最大上傳單個(gè)文件大小:默認(rèn)1M spring.servlet.multipart.max-file-size=1024MB # 最大置總上傳的數(shù)據(jù)大小 :默認(rèn)10M spring.servlet.multipart.max-request-size=1024MB # 阿里云 vod aliyun.vod.file.keyid=LTAI5tL5FrVJBuQadij4KRvJ aliyun.vod.file.keysecret=Xs7dHUvxCdHLd0K5iFK7NWEbdUN7GG

3、控制層

@RestController @CrossOrigin @RequestMapping("/eduvod/video") public class VodController {@Autowiredprivate VodService vodService;//上傳視頻到阿里云@PostMapping("/uploadAliyunVideo")public R uploadAliyunVideo(MultipartFile file) {//返回上傳視頻的idString videoId = vodService.uploadVideoAliyun(file);return R.ok().data("data", videoId);}}

4、業(yè)務(wù)層

@Service public class VodServiceImpl implements VodService {@Value("${aliyun.vod.file.keyid}")private String accessKeyId;@Value("${aliyun.vod.file.keysecret}")private String accessKeySecret;@Overridepublic String uploadVideoAliyun(MultipartFile file) {try {//fileName:上傳文件原始名稱String fileName = file.getOriginalFilename();//title:上傳之后顯示名稱String title = fileName.substring(0, fileName.lastIndexOf("."));//inputStream:上傳文件的輸入流InputStream inputStream = file.getInputStream();UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);UploadVideoImpl uploader = new UploadVideoImpl();UploadStreamResponse response = uploader.uploadStream(request);System.out.print("RequestId=" + response.getRequestId() + "\n"); //請(qǐng)求視頻點(diǎn)播服務(wù)的請(qǐng)求IDString videoId = null;if (response.isSuccess()) {videoId = response.getVideoId();} else { //如果設(shè)置回調(diào)URL無(wú)效,不影響視頻上傳,可以返回VideoId同時(shí)會(huì)返回錯(cuò)誤碼。其他情況上傳失敗時(shí),VideoId為空,此時(shí)需要根據(jù)返回錯(cuò)誤碼分析具體錯(cuò)誤原因videoId = response.getVideoId();}return videoId;} catch (Exception e) {e.printStackTrace();return null;}}}

5、測(cè)試


10.2、前端實(shí)現(xiàn)

1、nginx.conf 添加配置并重啟 nginx

http { <--文件上傳最大大小 --> client_max_body_size 1024m;server {listen 9001;server_name localhost;...location ~ /eduvod/ {proxy_pass http://localhost:8003;}} }

2、頁(yè)面

<el-form-item label="上傳視頻"><el-upload class="upload-demo" :on-success="handleVodUploadSuccess" :before-remove="beforeVodRemove" :file-list="fileList" :action="BASE_API + '/eduvod/video/uploadAliyunVideo'" :limit="1" ><el-button size="small" type="primary">上傳視頻</el-button><el-tooltip placement="right-end"><!-- 隱藏提示信息 --><div slot="content">最大支持1G,<br />支持3GP、ASF、AVI、DAT、DV、FLV、F4V、<br />GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、<br />MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、<br />SWF、TS、VOB、WMV、WEBM 等視頻格式上傳</div><i class="el-icon-question" /></el-tooltip></el-upload> </el-form-item>

3、js

data() {return {video: {sort: 0,title: "",free: "",videoSourceId: ""},fileList: [], //上傳文件列表BASE_API: process.env.BASE_API, // 接口API地址}; }, methods: {// 上傳成功執(zhí)行方法handleVodUploadSuccess(response, file, fileList) {this.video.videoSourceId = response.data.data},beforeVodRemove(file, fileList) {return this.$confirm(`確定移除 ${file.name}?`);}, }

10.3、視頻刪除

1、控制層

// 根據(jù)視頻id刪除阿里云視頻 @DeleteMapping("/removeAliyunVideoById/{id}") public R removeAliyunVideoById(@PathVariable String id) {vodService.removeAliyunVideoById(id);return R.ok(); }

2、業(yè)務(wù)層

// 根據(jù)id刪除阿里云視頻 @Override public void removeAliyunVideoById(String id) {try {DefaultAcsClient client = initVodClient(accessKeyId, accessKeySecret);DeleteVideoRequest request = new DeleteVideoRequest();request.setVideoIds(id);DeleteVideoResponse response = client.getAcsResponse(request);System.out.println("RequestId = " + response.getRequestId() + "\n");} catch (ClientException e) {throw new LaptoyException(20001, "視頻刪除失敗");} }public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {String regionId = "cn-shanghai"; // 點(diǎn)播服務(wù)接入?yún)^(qū)域DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);return client; }

總結(jié)

以上是生活随笔為你收集整理的2022年最新《谷粒学院开发教程》:5 - 章节管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

天天色天天艹 | 日韩理论电影在线观看 | 国产这里只有精品 | a在线免费 | 精品久久久久久电影 | 青青河边草免费观看完整版高清 | 福利一区二区在线 | 视频在线91 | 天天色综合久久 | 日韩3区 | 免费看一及片 | 久久久一本精品99久久精品66 | 开心丁香婷婷深爱五月 | 日韩在线观看网站 | 中文在线8新资源库 | 日韩精品中文字幕一区二区 | 成人av免费电影 | 久久久久女人精品毛片九一 | 人人干干人人 | av先锋影音少妇 | 热久久视久久精品18亚洲精品 | 天天躁日日躁狠狠躁av中文 | 国产一区二区不卡视频 | 午夜精品一区二区三区在线视频 | 国产一卡二卡在线 | 久久免费播放视频 | 国产精品九色 | 欧美三人交 | 亚洲五月 | 欧美日韩国产免费视频 | 亚洲成人999| av不卡中文字幕 | 国产精品专区h在线观看 | 在线观看一区二区精品 | 久久av电影| 美国人与动物xxxx | 久久婷婷精品 | 97视频人人澡人人爽 | 青草视频在线免费 | 狠狠干狠狠色 | www.色com| 午夜av大片 | 天堂av在线网址 | av黄色在线播放 | 美女免费黄网站 | 日日天天 | 久久99精品久久久久久久久久久久 | 亚洲激情六月 | 国产亚州av | 精品视频资源站 | 日韩精品久久久久久久电影竹菊 | 亚洲激情p | 不卡精品 | 草久在线观看视频 | 天堂在线一区 | 婷婷新五月 | 久久精品1区 | 久久全国免费视频 | 日韩av影视| 亚州精品视频 | 国产精品 中文在线 | 四虎成人精品永久免费av | 欧美在一区| 日韩欧美精品一区 | 日韩黄色在线观看 | 天天天综合网 | 国产黄色片免费看 | 久久综合亚洲鲁鲁五月久久 | 午夜黄色| 狂野欧美激情性xxxx欧美 | 在线播放你懂 | 欧美一级电影 | 一区中文字幕在线观看 | 午夜精品在线看 | 亚洲性少妇性猛交wwww乱大交 | 在线影视 一区 二区 三区 | 一区二区三区在线视频111 | 日韩在线视频一区二区三区 | 狠狠躁日日躁夜夜躁av | 一区二区欧美激情 | 免费无遮挡动漫网站 | 亚洲日韩精品欧美一区二区 | 国产精品久久久久久妇 | 麻豆视屏 | 中文字幕在线播放av | 精品嫩模福利一区二区蜜臀 | 欧美日韩18| 国产精品九九九九九 | 国产不卡网站 | 九九在线免费视频 | 99久高清在线观看视频99精品热在线观看视频 | 五月天久久婷 | 五月婷婷丁香六月 | 欧美色综合天天久久综合精品 | 狠狠色噜噜狠狠狠狠 | 天天干天天草 | 一区二区欧美激情 | 亚洲,国产成人av | 91在线成人| 91视频高清免费 | 国产精品理论片在线观看 | 一区二区三区在线免费播放 | 久久久免费播放 | 久久精品视频国产 | 国产91在线观看 | 亚洲精品女人久久久 | 国产黄色观看 | 一级精品视频在线观看宜春院 | 蜜臀av夜夜澡人人爽人人 | 黄色在线免费观看网址 | 99热这里只有精品久久 | 成年人免费在线观看网站 | 97超在线视频 | 欧美-第1页-屁屁影院 | 成人在线免费看 | 日本久久久久久科技有限公司 | 色姑娘综合 | 色综合久 | 91久久在线观看 | 欧美片一区二区三区 | 波多野结衣视频一区二区 | 久久精品中文字幕一区二区三区 | 超碰97久久| 美女福利视频网 | 日本精品中文字幕在线观看 | 精品久久久国产 | 欧美日韩高清不卡 | 97超碰在线免费 | 欧美色一色 | 丁香色综合 | 久久精品屋 | 亚洲五月激情 | 久久色中文字幕 | 久久理论电影 | 91亚色在线观看 | 久久激情视频 久久 | 午夜三级在线 | 欧美日韩精品免费观看 | www.狠狠色.com | 婷婷性综合 | 在线你懂的视频 | 欧美日韩观看 | 欧美精品久久久久久久免费 | 成人久久精品 | 国产精品成人免费一区久久羞羞 | 日本高清xxxx | 国内精品久久久久国产 | 2018亚洲男人天堂 | 日韩一级电影网站 | 九九视频精品在线 | www.com黄| 日韩一级成人av | jizz999| www五月天| 五月天色丁香 | 久艹在线播放 | 国产色中涩 | 久久高清视频免费 | 亚洲精品美女久久久久网站 | 一区二区三区四区精品视频 | 色先锋av资源中文字幕 | 不卡中文字幕av | 日日干 天天干 | 在线成人免费电影 | 99国产在线视频 | 免费视频99| 香蕉影视app | 日韩专区在线播放 | 久久久综合电影 | 日韩精品一区二区在线观看 | 丁香六月五月婷婷 | 久草国产视频 | 91在线观看欧美日韩 | 国产特级毛片aaaaaa | 777久久久| 黄色免费观看网址 | a级黄色片视频 | 国内少妇自拍视频一区 | 国产专区一 | japanese黑人亚洲人4k | 波多野结衣精品在线 | 国产资源在线视频 | 午夜影院三级 | 麻豆视频免费入口 | 久久精品久久99精品久久 | 色综合天天爱 | 六月激情 | 国产黄在线观看 | 欧美二区在线播放 | 九九热免费观看 | 在线观看视频精品 | 日本久久久久久久久久久 | 韩国在线一区二区 | 97人人射 | .国产精品成人自产拍在线观看6 | 在线观看av国产 | 在线观看亚洲国产精品 | ,午夜性刺激免费看视频 | 亚洲三级在线播放 | 午夜av电影院 | 亚洲一级二级 | 一二三区视频在线 | 日韩网站免费观看 | 国产精品久久久久久久久婷婷 | 91精品影视| 一级特黄aaa大片在线观看 | 久久综合久久综合久久综合 | 又黄又爽又湿又无遮挡的在线视频 | 911香蕉 | 久久艹欧美 | 久久精品国产亚洲aⅴ | 精品免费国产一区二区三区四区 | 亚洲精品在线观 | 成人免费视频视频在线观看 免费 | 麻豆视频在线 | 国产午夜精品久久久久久久久久 | 一级成人在线 | 黄色免费网站 | 在线视频 精品 | 亚洲综合欧美日韩狠狠色 | 热99在线视频 | 99在线精品免费视频九九视 | av一区二区三区在线播放 | 免费福利片2019潦草影视午夜 | 精品一区二区6 | 免费看v片网站 | 国内丰满少妇猛烈精品播放 | 91男人影院 | 久久国产免费看 | av高清一区 | 国产成人一区二区三区在线观看 | 久久av在线 | 激情五月婷婷综合 | 在线电影av | 国产一区成人 | 亚洲精品乱码久久久久久写真 | 欧美福利网站 | 天堂中文在线视频 | 欧美精品久久久 | 91网址在线看 | 亚洲一区 影院 | 国产v亚洲v | 日本久久中文字幕 | 久久久久久久久精 | 国产自在线观看 | 国产精成人品免费观看 | 黄污网| 99婷婷| 精品一区精品二区 | 99精品视频精品精品视频 | 国产精品正在播放 | www.午夜视频 | 美女久久一区 | 不卡日韩av | 日韩v在线 | 亚洲成aⅴ人在线观看 | 久久国产精品免费看 | 久久久午夜电影 | 国产手机视频在线 | 在线观看日本高清mv视频 | 91自拍视频在线观看 | 亚洲电影影音先锋 | 国产无吗一区二区三区在线欢 | 99精品热视频只有精品10 | 国产精品18久久久久白浆 | 久热国产视频 | a电影免费看| 在线观看完整版 | 中文字幕av有码 | 在线中文字幕电影 | 亚洲激色 | 96精品高清视频在线观看软件特色 | 日韩精品中文字幕在线不卡尤物 | 成人午夜av电影 | 国产成人在线一区 | 亚洲精品女| 91精品久久久久久久91蜜桃 | 天天艹天天操 | 奇米四色影狠狠爱7777 | 亚洲精品在线观看免费 | 区一区二区三在线观看 | www最近高清中文国语在线观看 | 美女黄网久久 | 亚洲片在线 | 国产馆在线播放 | 中文字幕黄色av | 成人午夜在线观看 | 99综合久久 | 欧美性视频网站 | 亚洲成人麻豆 | 夜夜高潮夜夜爽国产伦精品 | 免费视频一二三区 | h动漫中文字幕 | 黄色精品视频 | 日韩三级视频在线看 | 亚洲粉嫩av| 国产在线精品视频 | 成人午夜精品久久久久久久3d | 国产最新福利 | 国产精品视频99 | 欧美日韩aaaa| 久久精品a | 亚洲国产成人精品电影在线观看 | 青青草国产免费 | 西西44人体做爰大胆视频 | 天天操天天干天天综合网 | 麻豆一区二区三区视频 | 国产在线精品视频 | 亚洲日本成人网 | 久草在线综合 | 伊人色综合久久天天网 | 成人av资源站 | 成人精品国产免费网站 | 在线国产激情视频 | 少妇搡bbb| 国产又粗又猛又黄视频 | 免费看一及片 | 91精品亚洲影视在线观看 | 九九三级毛片 | 亚洲精品一区二区三区在线观看 | 国产午夜一区 | 久草在线官网 | 夜夜夜 | 波多野结衣视频网址 | 伊人久久国产精品 | 亚洲欧美视频一区二区三区 | 99热精品国产一区二区在线观看 | 成人在线观看日韩 | av千婊在线免费观看 | 国产a国产 | 久久人人爽视频 | 国产精品成人一区二区 | 天堂麻豆 | 午夜久久福利视频 | 在线观看91网站 | 成人av影视观看 | 国产亚洲精品v | 久久网站最新地址 | 国产成人av网 | 国产精品视频全国免费观看 | 精品五月天 | 在线观看欧美成人 | 91中文字幕在线播放 | 久久久国产在线视频 | 丁香婷婷成人 | 最近中文字幕在线中文高清版 | 色wwwww| 久久国产精品久久精品国产演员表 | 国产亚洲视频系列 | 综合色伊人 | 九九热在线精品 | 国产在线国偷精品产拍 | 色视频在线免费 | 婷婷六月丁香激情 | 久久高清精品 | 91精品啪在线观看国产 | 日韩三级视频 | 在线国产专区 | 国产精品一区二区免费视频 | 久久99精品久久久久久三级 | 狠狠操夜夜操 | www.黄色在线 | 久久成人午夜 | 一区二区三区www | 成人综合婷婷国产精品久久免费 | 久久优 | 狠狠操狠狠干天天操 | 国产成人亚洲在线观看 | 国产一级视频在线 | 国产老妇av | 久久精彩视频 | 国内精品视频在线 | 久久香蕉国产精品麻豆粉嫩av | 91xav| 日本精品视频一区 | 一区二区三区电影大全 | av官网在线| 91一区啪爱嗯打偷拍欧美 | aaa毛片视频 | 久久久久久久久国产 | 国产色视频网站 | 精品在线观 | www.天天成人国产电影 | 中文字幕电影高清在线观看 | 国产手机视频 | 国产在线观看二区 | 日韩视频在线观看视频 | 激情婷婷综合网 | 亚洲国内精品在线 | 国产一级电影 | 亚洲永久精品在线观看 | 欧美美女视频在线观看 | 国产一级高清 | 亚洲一级电影在线观看 | 日日干天天操 | 美女网站色免费 | 日韩免费福利 | 亚洲精品国产品国语在线 | av在线网站大全 | 又黄又刺激又爽的视频 | 制服丝袜欧美 | 国产成人av网址 | 91亚洲网 | 久久伊人热 | 亚洲性视频 | 久久人91精品久久久久久不卡 | 成人免费观看视频大全 | 久久久久中文 | 中文字幕日韩免费视频 | 国产中文字幕久久 | 精品麻豆 | 久久久久伦理电影 | 成人av资源网站 | 久久精品综合网 | 免费电影一区二区三区 | 久久精品成人热国产成 | 91视频 - 88av | 国产精品国产三级国产专区53 | 91九色蝌蚪国产 | 成人av一区二区兰花在线播放 | www五月天 | 日韩在线观看一区二区三区 | 久久影院一区 | 国产91在| 97夜夜澡人人爽人人免费 | 精品夜夜嗨av一区二区三区 | 国产不卡在线 | 欧美国产一区二区 | 在线小视频国产 | 久操视频在线 | 五月婷婷色 | 四虎在线永久免费观看 | 日韩精品一区二区三区中文字幕 | 国产视频首页 | 久久激五月天综合精品 | 中文字幕乱码视频 | 欧美性黄网官网 | 综合激情av | 国产三级视频 | 狠狠躁夜夜av | 国产69久久 | 五月天伊人 | 日日干av| 黄色的网站免费看 | 成人黄色在线视频 | 亚洲综合精品在线 | 国产精品国产三级国产aⅴ无密码 | 免费在线91 | 人人添人人澡人人澡人人人爽 | 久久人人做 | 黄色午夜 | 久色网 | 国产黄色视 | 日一日干一干 | 亚洲国产精品久久久久久 | 中文字幕 影院 | 久久精品牌麻豆国产大山 | av一级二级 | 国产特黄色片 | 九九热在线观看视频 | 美女网站视频免费都是黄 | 国产精品久久久久影院日本 | 亚洲另类久久 | 又黄又刺激视频 | 二区三区毛片 | 91视视频在线直接观看在线看网页在线看 | 精品uu| 日韩免费在线观看视频 | 欧美日韩视频免费 | 成人网在线免费视频 | 91av播放| 免费看的毛片 | 香蕉影院在线观看 | 91大神一区二区三区 | 午夜影视剧场 | 91av在线免费观看 | 欧美午夜久久 | 国产精品黄 | 五月婷香蕉久色在线看 | 国产精品18久久久久久久久 | 亚洲三级精品 | 日韩免费看片 | 五月天天色 | 99热在线国产 | 亚洲高清免费在线 | 成人精品电影 | 久久香蕉一区 | 久久天堂网站 | 国产精品成人一区二区 | 麻豆视频国产在线观看 | 国产99免费视频 | 欧美激情精品 | 国产在线超碰 | 精品久久久久久国产偷窥 | 开心激情五月网 | 亚洲国产欧美一区二区三区丁香婷 | 免费av大片 | 国产在线视频资源 | 久久精品免费电影 | 亚洲视频一区二区三区在线观看 | 国产三级香港三韩国三级 | 综合久久综合久久 | 日韩毛片在线一区二区毛片 | 这里只有精品视频在线观看 | 亚洲精品视频在线观看视频 | 国产视频精品久久 | 欧美夫妻生活视频 | 精品一区二区亚洲 | 麻豆传媒视频在线播放 | avwww在线 | 在线 高清 中文字幕 | 久久精品视频一 | 日韩在线视频免费看 | 国产成人精品福利 | 91视频下载 | 日本中文字幕网站 | 日韩剧 | 久草在线精品观看 | 99精品免费观看 | 中文字幕在线第一页 | 最近2019中文免费高清视频观看www99 | 色婷婷成人网 | 91久久精品日日躁夜夜躁国产 | 最近中文字幕免费观看 | 亚洲美女精品 | 国产精品女教师 | 久草精品在线观看 | 久久精品电影院 | av网站在线观看免费 | 免费在线黄 | 亚洲国产69| 97视频免费在线看 | 国产视频欧美视频 | 日本黄色免费大片 | 日韩色中色 | 一级黄色免费网站 | 中文字幕在线视频第一页 | 丝袜美女视频网站 | 激情综合国产 | 色操插 | 成人影视免费看 | 欧美黑人性爽 | 天天操天天插 | 99在线高清视频在线播放 | 狠狠的操 | 在线 影视 一区 | 一本一本久久a久久 | 夜夜干天天操 | 在线观看深夜福利 | 黄色一级免费电影 | 91久久精品日日躁夜夜躁国产 | 三级av在线免费观看 | 国产在线观看免 | 手机看片福利 | 国产成人一区二区精品非洲 | 免费黄色在线播放 | 日韩av一区二区在线播放 | 欧美一级性视频 | 国产成人精品久久二区二区 | 久久视频二区 | 在线观看中文字幕dvd播放 | 精品一区二区免费在线观看 | 日韩av不卡在线 | 日韩在线不卡视频 | 欧洲高潮三级做爰 | 亚洲天堂网在线视频观看 | 国产女人18毛片水真多18精品 | 91色在线观看视频 | 婷婷中文字幕在线观看 | 国产一线二线三线性视频 | 99国内精品久久久久久久 | 91中文字幕在线视频 | 日韩精品中文字幕av | 深爱激情五月婷婷 | 国产日韩视频在线播放 | 超碰在线中文字幕 | 私人av| 色视频网站在线 | 国产成人久久精品 | 色婷婷国产精品 | 国际精品久久久久 | 九九有精品 | 五月精品 | 欧美日韩视频免费 | 一区二区三区免费看 | 99九九热只有国产精品 | 成人国产精品久久久春色 | 天天操,夜夜操 | 天天干夜夜干 | 久久精品屋 | 99中文字幕在线观看 | 久久国产精品免费视频 | 中国黄色一级大片 | 久久成人国产精品入口 | 在线观看免费av网站 | 干干夜夜 | 精品久久久久_ | av中文字幕亚洲 | 久久综合视频网 | 7799av| 久久激情小说 | 久草在线视频首页 | 日本黄区免费视频观看 | 草久久久久久 | 婷婷久久久 | 亚洲国内在线 | 亚洲午夜精| 成人全视频免费观看在线看 | 免费色视频网站 | 美女很黄免费网站 | 免费福利片2019潦草影视午夜 | 日韩在线看片 | 久久激情五月婷婷 | 伊人狠狠干 | 国产精品18毛片一区二区 | 99精品电影 | 久久久久亚洲国产精品 | 欧美日韩一级久久久久久免费看 | 久久撸在线视频 | 免费视频网| 国产无区一区二区三麻豆 | 亚洲激情校园春色 | 夜夜骑天天操 | 久久久精品国产一区二区三区 | 日韩av一区二区在线播放 | 国产精品免费一区二区三区在线观看 | 精品一区二区日韩 | 亚洲精品国产视频 | av电影在线免费 | 亚洲在线视频观看 | 亚洲激情 欧美激情 | 国产免费嫩草影院 | 五月天婷婷在线视频 | 狠狠黄 | 黄色网址中文字幕 | 亚洲色图av | 亚洲国产中文字幕在线 | 骄小bbw搡bbbb揉bbbb | a资源在线| 日韩啪啪小视频 | 99久久er热在这里只有精品66 | 欧美精品v国产精品 | 久久呀 | 99国产成+人+综合+亚洲 欧美 | 六月天综合网 | 91精品一区二区三区蜜桃 | 国产精品久99 | 亚洲黄色软件 | 日韩中字在线 | 人人澡超碰碰97碰碰碰软件 | 国产午夜精品一区二区三区在线观看 | 日韩av高清在线观看 | 最近中文字幕高清字幕在线视频 | 中文字幕免费成人 | 国产精品一区在线观看 | 国产一区二区久久久久 | 国产成人精品一区二区在线观看 | 久草在线观看资源 | www.干| 91人人澡人人爽人人精品 | 日本乱视频 | 人人射人人爱 | 日韩精品一区二区在线观看视频 | 久久久高清一区二区三区 | 综合网欧美 | 九九热免费视频在线观看 | 日日天天干 | 色com| 麻豆91精品91久久久 | 在线视频一区观看 | 国产精品久久久免费 | 91九色在线观看视频 | 久久综合婷婷国产二区高清 | 一本一道久久a久久精品 | 久久精品中文字幕免费mv | 日韩 在线 | 午夜视频亚洲 | 国产精品视频最多的网站 | 国产精品6 | av免费电影网站 | 91系列在线| 成人免费视频视频在线观看 免费 | 日本久久免费视频 | 99中文字幕视频 | 免费观看成人网 | 国产99久久久国产精品 | 国产一区视频在线 | 成人性生活大片 | 精品婷婷| 久久激情五月激情 | 国产专区在线视频 | 天天综合网久久综合网 | 一区二区三区免费网站 | 欧美一级黄色网 | 黄色av一区二区三区 | 色狠狠狠| 人人爽人人看 | 国产日韩欧美自拍 | 香蕉免费在线 | 亚洲国产精品成人av | 九九热在线免费观看 | 中文字幕日韩国产 | 久久久久久久久影视 | 国产精品免费av | 久久精品福利视频 | 亚洲欧洲日韩在线观看 | 国产91在线免费视频 | 日韩小视频 | 日韩视频一区二区三区 | 亚洲成人免费在线 | 日韩免费三区 | 精品免费观看 | 久久国产美女视频 | 最近日本韩国中文字幕 | 国产黄大片 | 国产高清日韩 | 91在线中字 | 久久精品5| 精品伦理一区二区三区 | 日韩成人在线免费观看 | 国产日本在线 | 亚洲精品在线免费看 | 麻豆精品国产传媒 | 在线免费观看视频 | 亚洲黄色高清 | 亚洲一区精品二人人爽久久 | 久久精品久久精品久久精品 | 婷婷六月网 | 日韩中文字幕免费 | 亚洲第一区精品 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品欧美精品 | 欧美激情视频一二区 | 久草在线最新免费 | 黄色片毛片 | 日本久久久久久 | 免费大片黄在线 | 黄色成人毛片 | 精品久久久久久久久久久久久久久久久久 | 一级成人网 | 亚洲精品国产综合久久 | 亚洲国产日韩一区 | 91精品欧美 | 国产 日韩 欧美 在线 | 亚洲精品一区二区18漫画 | 成人午夜电影网站 | 婷婷成人综合 | 人人干,人人爽 | 综合久久久久久久久 | 日韩在线观看视频在线 | 99精品国产99久久久久久97 | 国产精品成人国产乱 | 久久久久久毛片精品免费不卡 | 国产精品乱码一区二三区 | 精品国产欧美一区二区 | 成年人视频在线观看免费 | 亚洲精品国精品久久99热一 | 奇米影视777影音先锋 | 手机看片国产日韩 | 久热只有精品 | 人人爱爱人人 | 丁香五月缴情综合网 | 在线观看岛国 | av免费观看网址 | 亚洲va在线va天堂va偷拍 | 成片人卡1卡2卡3手机免费看 | 日韩在线网址 | 午夜精品久久久久久久99婷婷 | 日韩免费视频一区二区 | 欧美大片大全 | 婷婷 中文字幕 | 91传媒免费在线观看 | 亚洲va欧美 | 国产只有精品 | 欧美色黄 | 99亚洲国产精品 | 欧美日韩调教 | 最近免费观看的电影完整版 | 日韩在线视频一区二区三区 | 欧美韩国在线 | 久久激情小说 | 国产第一页在线观看 | 国产午夜精品久久 | 色婷婷激情电影 | 亚洲91网站| 亚洲精品乱码久久久久久蜜桃动漫 | 特黄特色特刺激视频免费播放 | 日韩精品免费在线播放 | 超碰在线观看av | 91精品视频在线 | 激情婷婷色 | 成人av电影在线 | 国产伦理剧 | 日本大片免费观看在线 | 国产视频一区二区三区在线 | 丝袜av网站 | 一区二区视频在线播放 | 色婷婷 亚洲 | 亚洲国产中文在线观看 | 久久久久免费精品国产小说色大师 | 91高清免费看 | 99精品在线看| 婷婷五月情 | 日本xxxx裸体xxxx17 | 91精品秘密在线观看 | 免费视频99 | 色偷偷88888欧美精品久久 | 亚洲在线视频网站 | 久久精品欧美一区 | 欧美久久99 | 九九爱免费视频 | 亚洲精选视频免费看 | 国产视频日本 | 999精品视频 | 成人小视频在线免费观看 | 九九热国产视频 | 丁香六月五月婷婷 | 亚洲成人频道 | 国产黄色av影视 | 日本女人在线观看 | a在线一区 | 国产片网站| 国产精品成人在线观看 | 国产精品久久久区三区天天噜 | 免费在线国产 | 天堂av免费观看 | 在线亚州 | 黄色资源网站 | 国产精选在线 | 欧美日韩在线观看一区二区三区 | 欧美一级大片在线观看 | 有码中文字幕在线观看 | 久久综合成人网 | 国产91aaa| 特级西西444www大胆高清无视频 | 欧美久久久久久 | 成人综合日日夜夜 | 国产精品国产三级国产aⅴ入口 | 精品在线不卡 | 国产五月婷 | 欧美极品少妇xbxb性爽爽视频 | 日本精品视频在线观看 | 亚州天堂 | 久久99精品久久久久蜜臀 | 中文字幕视频观看 | 久久超碰网 | 亚洲电影第一页av | 一区二区三区视频网站 | av超碰在线| 亚洲成a人片在线www | 99超碰在线观看 | 97色在线| 国产一级在线免费观看 | 国产亚洲婷婷免费 | 日本女人的性生活视频 | 欧美综合色在线图区 | 444av| 欧美激情第十页 | 女人18片| 天天色天天色天天色 | 精品久久综合 | 国产精品99久久久久的智能播放 | 国产日韩视频在线播放 | 日日爽| 国产又黄又爽无遮挡 | 狠狠色狠狠色终合网 | 91久久久国产精品 | 97视频在线免费 | av蜜桃在线 | 欧美精品免费在线观看 | 91在线蜜桃臀 | 玖玖色在线观看 | 日韩在线播放av | 天天色天天射天天干 | 探花视频在线版播放免费观看 | 在线黄频| 97品白浆高清久久久久久 | 日韩免费三区 | 日韩视频中文字幕在线观看 | 精品美女在线观看 | 久久国语露脸国产精品电影 | av中文资源在线 | 91漂亮少妇露脸在线播放 | 国产精品丝袜久久久久久久不卡 | 国产在线欧美在线 | 久草精品在线 | 日韩高清观看 | 亚洲精品tv久久久久久久久久 | 激情综合网婷婷 | 亚洲黄a | 国产aa精品 | 久久精品99国产精品酒店日本 | 国产我不卡 | 婷婷综合 | 美女网站视频免费黄 | 亚洲一区尤物 | 天天插视频 | 国产亚洲在线观看 | 91麻豆看国产在线紧急地址 | 亚洲国产成人精品电影在线观看 | 91精品久久久久久综合乱菊 | 亚洲九九九 | 免费看国产黄色 | 色综合久久久久久中文网 | 国产自偷自拍 | 久久国产精品免费一区 | 天天亚洲| 91看片在线观看 | 久久综合久久鬼 | 国产男女爽爽爽免费视频 | 国产一区视频在线 | 久久国产精品久久久久 | 午夜影视剧场 | www.色五月.com | 91伊人| www.日本色| 国产福利一区二区在线 | 亚洲精品综合在线观看 | 久久精品一区二区三区中文字幕 | 天天射天天干 | 国产偷v国产偷∨精品视频 在线草 | 人人看黄色 | 黄色亚洲在线 | 国产一区二区视频在线 | 久久精品精品 | www.夜夜爱 | 欧美91精品久久久久国产性生爱 | 国产麻豆果冻传媒在线观看 | 精品一区二区三区电影 | 天天爱天天操天天干 | 国产丝袜 | 亚洲成人国产 | www.色在线| 91免费在线看片 | 午夜精品三区 | 国产精品久久婷婷六月丁香 | 国产99久久久精品视频 | 91av视屏| 狠狠色狠狠色合久久伊人 | 中文字幕精品一区久久久久 | 综合视频在线 | 亚洲精品动漫久久久久 | 国产精品成人一区二区 | 日韩av成人免费看 | 91精品国产91久久久久久三级 | 精品久久久久久久久久久久久久久久久久 | 最新动作电影 | 精品黄色在线 | 欧美国产日韩在线视频 | 免费福利视频导航 | 亚洲国产精品一区二区尤物区 | 黄色免费网站 | 丁香在线 | 国产精品乱码一区二三区 | 欧美日韩xxx | 日韩午夜三级 | 午夜精品电影一区二区在线 | 色综合天天综合网国产成人网 | 日韩av一区二区在线影视 | 亚洲精品观看 | 亚洲精品免费在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 久久在线影院 | 日本xxxx裸体xxxx17 | 日日夜夜精品 | 最新中文字幕 | 黄色大片网 | 久久视频这里有久久精品视频11 | 怡红院av久久久久久久 | 欧美综合久久 | 天天天天天天干 | 久久久久久久久久久久亚洲 | 亚洲精品男女 | 国产色网站 | 一区二区三区免费在线 | 亚洲精品自拍视频在线观看 | 久久久久久久网站 | 国产一二区视频 | 欧美日韩高清一区二区三区 | 国产精品黑丝在线观看 | 成人av网站在线观看 | 久久久久久久综合色一本 | 国产精品久久久久久爽爽爽 | 国产乱对白刺激视频不卡 | 亚洲综合在线一区二区三区 | 日韩婷婷 | www.五月天婷婷.com | 中文字幕久久网 | 97超碰伊人 | 欧美孕交vivoestv另类 | 久草视频在线免费 | 国产 日韩 欧美 在线 | 在线观看一区 | 国产精品久久久久久69 | 久草精品视频在线看网站免费 | 91成年人网站 | 99久久精品国产观看 | 在线免费观看国产视频 |