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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

谷粒商城官网_尚硅谷谷粒商城电商项目(谷粒金刚PRO手柄)

發布時間:2023/12/19 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 谷粒商城官网_尚硅谷谷粒商城电商项目(谷粒金刚PRO手柄) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

谷粒商城_01_環境搭建
谷粒商城_02_Nacos、網關
谷粒商城_03_前端基礎

商品服務-分類管理

查出所有分類以及子分類

后端編寫

1、定義接口查詢所有數據:gulimall-product的com.liu.gulimall.product.controller.CategoryController添加如下方法

/** * 商品三級分類 * * @author liujianyu * @email 380404812@qq.com * @date 2021-12-09 19:15:00 */
@RestController
@RequestMapping("product/category")
public class CategoryController { 
   
    @Autowired
    private CategoryService categoryService;

    /** * 查出所有分類以及子分類,以樹形結構組裝起來 */
    @RequestMapping("/list/tree")
    public R list(){ 
   
        List<CategoryEntity> entities = categoryService.listWithTree();
        return R.ok().put("data", entities);
    }
}

2、在service層中創建方法 listWithTree

/** * 商品三級分類 * * @author liujianyu * @email 380404812@qq.com * @date 2021-12-09 18:29:39 */
public interface CategoryService extends IService<CategoryEntity> { 
   

    PageUtils queryPage(Map<String, Object> params);

    /** * 將數據以樹形分類,分出三級 * @return */
    List<CategoryEntity> listWithTree();
}

3、在service層的Impl中實現方法

  • 最重要的是商品實體中需要多一個字段,children,為了放此分類的子分類
  • 先把所有商品查出來然后根據數據庫字段父id查出,沒有父id的一級商品,然后在遞歸找子分類
  • 主要理解流式編程:filter、map、sorted、collect
  • 一級分類有二級,二級有三級,所以是一個遞歸的方式
@Service("categoryService")
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService { 

// @Autowired
// private CategoryDao categoryDao;
// ServiceImpl<CategoryDao, CategoryEntity>已經幫我們注入了dao,就不用自己注入了
@Override
public List<CategoryEntity> listWithTree() { 

// 1 查出所有分類
List<CategoryEntity> entities = baseMapper.selectList(null);
// 2 組裝成父子的樹形結構
List<CategoryEntity> level1Menus = entities.stream().filter((categoryEntity) ->{ 
 // 過濾
// long類型的比較不要直接使用==,要用到longValue()來比較
return  categoryEntity.getParentCid().longValue() == 0;} // 過濾只要父id等于0的數據,也就是一級分類
).map((categoryEntity)->{ 
 // 為過濾后的一級分類的每一個數據設置他的子分類
categoryEntity.setChildren(getChildrens(categoryEntity,entities));
return categoryEntity;}
).sorted((categoryEntity1,categoryEntity2)->{ 
 // 升序排序根據字段sort來讓sort小的的排前面 由于categoryEntity1可能已經為空null了,所以先判斷
return (categoryEntity1.getSort() == null? 0: categoryEntity1.getSort())
-
(categoryEntity2.getSort() == null?0:categoryEntity2.getSort());
}).collect(Collectors.toList()); // 將過濾的數據收集成數組
return level1Menus;
}
// 遞歸查找所有菜單的子菜單,把當前分類,和總分類傳進來
private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all) { 

List<CategoryEntity> children = all.stream().filter(categoryEntity -> { 

// 過濾取出父id等于當前分類的數據
return categoryEntity.getParentCid().longValue() == root.getCatId().longValue();
}).map(categoryEntity -> { 
 // 每一個子分類還有可能有子分類
// 1 找到子菜單
categoryEntity.setChildren(getChildrens(categoryEntity, all));
return categoryEntity;
}).sorted((menu1, menu2) -> { 

// 2 菜單的排序 由于menu可能已經為空null了,所以先判斷
return (menu1.getSort() == null?0:menu1.getSort()) - (menu2.getSort() == null?0:menu2.getSort());
}).collect(Collectors.toList());
return children;
}
}

前端展示

1、創建商品系統的目錄,以及內容轉發的路由

數據庫同步數據

2、根據人人開源策略,根據路由product/category 來請求product-category,比如sys-role具體的視圖在renren-fast-vue/views/modules/sys/role.vue 所以要自定義我們的product/category視圖的話,就是創建mudules/product/category.vue,根據策略創建product文件,在文件下創建category.vue組件,這樣請求路由就會跳轉到這個組件中,

3、編寫category.vue組件

  • 可以模仿人人開源的組件方式,包括里面怎么轉發,怎么數據交互等。
  • 采用Element UI來開發,采用樹形控件來管理三級數據
<template>
<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick" ></el-tree>
</template>
<script> export default { 
 data() { 
 return { 
 data: [], defaultProps: { 
 children: "children", label: "label", }, }; }, methods: { 
 handleNodeClick(data) { 
 console.log(data); }, getMenus(data) { 
 // 自定義方法 this.$http({ 
 // htpp請求 url: this.$http.adornUrl("/product/category/list/tree"), // 請求后端的接口 method: "get", }).then((data) => { 
 // 成功了之后的操作 console.log("請求數據," + data); }); }, }, created() { 
 // 加載組件的時候就調用改方法 this.getMenus(); }, }; </script>
<style lang="scss" scoped> </style>

4、我們的數據肯定是從后端取出來,所以要請求gulimall-product服務后端的接口,但是現在請求的是:人人開源的接口,所以修改前端配置:renren-fast-vue\static\config\index.js中修改,但是我們gulimall-product服務可能在很多服務器上,所以每次都要修改端口很麻煩,直接交給網關來做,讓網關跟我們去請求服務器

由于我們想要訪問的是:http://localhost:10000/product/category/list/tree這個請求,而且這里面的10000端口也存在多服務問題,所以采用網關來轉發請求。http://localhost:88/product/category/list/tree

服務注冊

  • 我們登錄有驗證碼,這個是renrne-fast服務的數據,所以先注冊renrne-fast服務

  • 通過網關把請求轉發給后端renren-fast服務,所以先讓網關發現服務,也就是注冊服務到注冊中心去

1、在renren-fast中導入的依賴【如果依賴無法徹底刪除,復制全文,刪除原來的,重新創建pom文件】

2、在配置文件中配置,服務名稱和注冊中心地址

3、注冊到注冊中心中,加入注解:@EnableDiscoveryClient

4、啟動nacos,發現服務

配置網關

  • 驗證碼前端請求:http://localhost:88/api/captcha.jpg 我們需要的是:http://localhost:8080/renren-fast/captcha.jpg

  • 配置網關
spring:
cloud:
gateway:
# 路由規則
routes:
- id: admin_route
uri: lb://renren-fast # 路由給renren-fast,lb代表負載均衡
predicates: # 什么情況下路由給它
- Path=/api/** # 默認前端項目都帶上api前綴,但是這樣還是請求的:http://localhost:88/api/..我們想要請求 http://localhost:8080/renren-fast/..,所以加上過濾器
# 所以在前端index.js中改為 window.SITE_CONFIG['baseUrl'] = 'http://localhost:88/api';
filters: # 過濾器,
- RewritePath=/api/(?<segment>.*),/renren-fast/$\{ 
segment} 
  • 啟動renren-fast、gulimall-gateway、nacos,發現驗證出現

503問題

  • 檢查服務是否配置到注冊中心,并且保證在同一命名空間
  • 檢查配置是否正確,路徑,服務名等
  • 在gateway中更換alibaba依賴版本為2.2.0;

  • 200,沒有圖片:將renren-fast的跨域配置中的allowedOrigins("*")改為 allowedOriginPatterns("*")

  • 當驗證碼成功后登錄遇到跨域問題

跨域

已攔截跨源請求:同源策略禁止讀取位于 http://localhost:88/api/sys/login 的遠程資源。(原因:CORS 頭缺少 ‘Access-Control-Allow-Origin’)。

這是一種跨域問題。訪問的域名和端口和原來的請求不同,請求就會被限制

跨域:指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對js施加的安全限制。(ajax可以)

同源策略:是指協議,域名,端囗都要相同,其中有一個不同都會產生跨域;

跨域流程

  • 瀏覽器先發送OPTIONS,請求服務器能否跨域,服務器需要配置允許跨域,然后瀏覽器在發送真實請求

解決跨域

  • 我們現在學習常用,自己后端編寫配置

  • 在網關中定義GulimallCorsConfiguration類,該類用來做過濾,允許所有的請求跨域。【注意】需要把renren-fast的跨域注解掉,因為先走我們網關跨域再走renrne-fast就重復了,然后就成功解決跨域
/** * @author ljy * @version 1.0.0 * @Description TODO * @createTime 2021年12月12日 22:46:00 */
@Configuration // gateway
public class GulimallCorsConfiguration { 

@Bean // 添加過濾器
public CorsWebFilter corsWebFilter(){ 

// 基于url跨域,選擇reactive包下的
UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
// 跨域配置信息
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允許跨域的頭
corsConfiguration.addAllowedHeader("*");
// 允許跨域的請求方式
corsConfiguration.addAllowedMethod("*");
// 允許跨域的請求來源
// corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedOriginPattern("*");
// 是否允許攜帶cookie跨域
corsConfiguration.setAllowCredentials(true);
// 任意url都要進行跨域配置
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}

服務注冊

  • 在顯示商品系統/分類信息的時候,出現了404異常,請求的http://localhost:88/api/product/category/list/tree不存在
    這是因為網關上所做的路徑映射不正確,映射后的路徑為http://localhost:8080/renren-fast/product/category/list/tree
    但是只有通過http://localhost:10000/product/category/list/tree路徑才能夠正常訪問,所以會報404異常。
  • 所以我們注冊gulimall-product到服務中心,重新再配置網關

1、編寫配置文件,加上配置中心地址和服務名稱

2、添加注解@EnableDiscoveryClient

3、添加spring-cloud-starter-alibaba-nacos-discovery服務發現依賴

配置網關

  • 在網關配置中添加gulimall-product服務的路由配置,并且要寫在renren-fast的前面, 路由的順序有影響,把更具體的路由請求放前面
- id: product_route
uri: lb://gulimall-product
predicates:
- Path=/api/product/**
filters:
- RewritePath=/api/(?<segment>.*),/$\{ 
segment}

再訪問http://localhost:88/api/product/category/list/tree,數據正常出現,數據正常顯示,就應該編寫頁面了

<template>
<!-- :dataA="data" 表示dataA跟我們組件中的data進行綁定-->
<el-tree :data="menus" :props="defaultProps" >
</el-tree>
</template>
<script> export default { 
 data() { 
 return { 
 menus: [], // 請求后端返回的數據 defaultProps: { 
 children: "children", // 表示children顯示data的children屬性 label: "name", // label指的是顯示數據中的哪個屬性這里就顯示data中的name屬性,這些label、children都可以在官方文檔 中查看的 }, }; }, methods: { 
 getMenus(data) { 
 // 自定義方法 this.$http({ 
 // htpp請求 url: this.$http.adornUrl("/product/category/list/tree"), // 請求后端的接口 method: "get", // }).then((data) => { 由于我們的data是一個對象,我們只需要拿到其中的data屬性的數據,所以要把data對象解構出來 }).then(({ 
 data }) => { 
 // 成功了之后的操作 // console.log("請求數據," + data); +號不能顯示出數據 // console.log("請求數據," , data); ,才可以顯示出數據 console.log("請求數據,", data.data); // 解構data對象取出data屬性 this.menus = data.data; // 將后端取出的數據給到組件中的menus屬性 }); } }, created() { 
 // 加載組件的時候就調用改方法 this.getMenus(); }, }; </script>
<style lang="scss" scoped> </style>

刪除數據

后端接口

  • com.liu.gulimall.product.controller.CategoryController
/** * 刪除 * @RequestBody 獲取到請求體里面的內容,必須發送Post請求 * springMVC會自動將請求體的數據(json),轉為對應的對象(Long[]) */
@RequestMapping("/delete")
public R delete(@RequestBody Long[] catIds){ 

// categoryService.removeByIds(Arrays.asList(catIds));
// 刪除之前需要判斷待刪除的菜單那是否被別的地方所引用。
categoryService.removeMenuByIds(Arrays.asList(catIds));
return R.ok();
}
  • com/liu/gulimall/product/service/impl/CategoryServiceImpl.java
@Override
public void removeMenuByIds(List<Long> asList) { 

// TODO 先檢查當前的菜單是否被別的地方所引用
// TODO表示代辦事項,以后可以直接在最下方查看代辦
// 開發期間多用邏輯刪除:使用字段來標識
baseMapper.deleteBatchIds(asList);
}

邏輯刪除

  • 多數時候,我們并不希望刪除數據,而是標記它被刪除了,這就是邏輯刪除; 邏輯刪除是mybatis-plus 的內容,會在項目中配置一些內容,告訴此項目執行delete語句時并不刪除,只是標志位 可以設置show_status為0,標記它已經被刪除。
  • 官網:https://mp.baomidou.com/ 中有提到邏輯刪除的用法

1、配置mybatis-plus

# MapperScan
# sql映射文件位置
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
logic-delete-value: 1  # 表示邏輯已刪除 
logic-not-delete-value: 0

2、添加注解@TableLogic

/** * 是否顯示[0-不顯示,1顯示],由于我們數據庫和mybatis-plus規則相反,所以我們自己定義邏輯刪除,1表示未刪除 */
@TableLogic(value = "1",delval = "0")
private Integer showStatus;

測試

http://localhost:88/api/product/category/delete

  • 可以查看sql信息,我們需要配置日志
logging:
level:
com.liu.gulimall: debug
==>  Preparing: UPDATE pms_category SET show_status=0 WHERE cat_id IN ( ? ) AND show_status=1 
==> Parameters: 1000(Long)
<==    Updates: 1

前端請求

  • 直接采用Element UI跟我們提供的一些組件,然后結合renrne-vue中的一些請求方式即可

刪除數據

  • 只有沒有子分類的才允許有刪除的功能
  • 在刪除上綁定事件,彈出提示框,確定刪除才會給后端發請求走數據庫并且是邏輯刪除
  • 刪除完后需要彈出成功消息,刷新新頁面,并且展開剛才被刪除的父分類

新增分類

  • 只要有子分類的才允許有此功能
  • 綁定事件,彈出彈框,在彈框中內嵌表格,給屬性置為默認值,確定添加,給后端發請求
  • 彈出消息,刷新頁面,展開次分類

修改分類

  • 自定義一個按鈕,每一數據都有此功能
  • 綁定事件,和新增共用一個彈框,只需判斷彈框的類型,并且需要將此分類的數據先從后端請求(每次都拿數據庫,避免高并發)回顯到彈框的內嵌表格中,只回顯需要修改的屬性,并且只將修改的屬性請求到后端
  • 彈出提示,刷新頁面,展開父分類

拖拽效果
  • 避免誤操作,是否開啟拖拽需要設置一個按鈕switch標簽來確定

  • 可以直接拖動每一分類來改變每一分類的順序,以及其父和子分類,并且需要判斷是否可以拖拽到此分類

  • 官網:拖拽完成觸發方法,不同拖拽,會有不同的父id,確定拖拽的新順序,將所有改動的分類都放到一個數組里面

  • 由于不能反復請求后端,設置批量保存按鈕,觸發事件請求后端,將數組傳給后端

  • 彈出提示,刷新頁面,展開所有的父分類,并將數組置空

批量刪除
  • 獲取被選中的元素,獲取元素的id
  • 彈出警告框,確定刪除,請求后端,將元素id數組傳入
  • 刷新菜單
<template>
<div>
<el-switch v-model="draggable" active-text="開啟拖拽" inactive-text="關閉拖拽" >
</el-switch>
<el-button @click="batchSave()" v-if="draggable">批量保存</el-button>
<el-button type="danger" @click="batchDelete">批量刪除</el-button>
<!-- :dataA="data" 表示dataA跟我們組件中的data進行綁定-->
<!-- :expand-on-click-node表示禁止網上冒泡,官網都有解釋,直接在官網ctrl+f搜索即可 -->
<!--el-tree中的 @node-click="handleNodeClick" 刪除沒什么用-->
<!-- show-checkbox表示該標簽是否可以被選中 -->
<!-- node-key表示每個節點的唯一標識,catId是我們各個data中唯一的屬性,也就是數據庫中的主鍵 -->
<!-- :default-expanded-keys表示動態綁定需要展開的節點id,因為當我們刪除的時候,不想讓父節點折疊起來,所以定義讓刪除節點的父節點都展開 -->
<!-- :draggable="draggable"是否可以拖動-->
<!-- :allow-drop="allowDrop"是否允許拖動比如層級關系等等。有三個情況,分別表示放置在目標節點前、插入至目標節點和放置在目標節點后, -->
<!-- @node-drop拖拽成功觸發的方法-->
<!-- ref="menuTree" 方便指定是哪個組件,主要是批量刪除的時候用到 -->
<el-tree node-key="catId" show-checkbox :data="menus" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="expandedKey" :draggable="draggable" :allow-drop="allowDrop" @node-drop="handleDrop()" ref="menuTree" >
<!-- 官網找的span slot-scope插槽機制,每一個元素后面都會格外加上是這個span-->
<!-- node代表當前的節點也即是對象,node.label就是當前節點的name,data就是此節點的數據 -->
<span class="custom-tree-node" slot-scope="{ node, data }">
<span>{
{ node.label }}</span>
<span>
<!-- @click點擊就會跳轉到我們的方法-->
<!-- 由于只要一級二級才有append操作,所以加上v-if="node.level<=2",node的level<=2表示為一二級-->
<el-button v-if="node.level <= 2" type="text" size="mini" @click="() => append(data)" >
Append
</el-button>
<!-- 自己定義修改按鈕,每一個菜單都要顯示 -->
<el-button type="text" size="mini" @click="edit(data)">
Edit
</el-button>
<!--childNodes是node的子節點數組屬性, v-if="node.childNodes==0"表示沒有子節點才有delete按鈕 -->
<el-button v-if="node.childNodes == 0" type="text" size="mini" @click="() => remove(node, data)" >
Delete
</el-button>
</span>
</span>
</el-tree>
<!-- :visible.sync 為true顯示該彈框 -->
<!-- close-on-click-modal 是否點擊彈框外邊就會讓彈框消失 -->
<el-dialog :title="title" :visible.sync="dialogVisible" width="30%" :close-on-click-modal="false" >
<!-- 彈框嵌套 官網 model表單綁定對象 category我們自己的分類對象-->
<el-form :model="category">
<el-form-item label="分類名">
<el-input v-model="category.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="圖標">
<el-input v-model="category.icon" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="計量單位">
<el-input v-model="category.productUnit" autocomplete="off" ></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<!-- 取消就把他設為false即可 -->
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitData()">確 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script> export default { 
 data() { 
 return { 
 pCid: [], // 是否可以拖動 draggable: false, updateNodes: [], // 最大的層級 maxLevel: 0, // 彈框的標題 title: "", // 彈框的類型,因為修改和添加復用一個彈框 dialogType: "", // 添加的分類對象 category: { 
 // 里面的屬性都是根據后端數據庫中來定義的 name: "", parentCid: 0, catLevel: 0, showStatus: 1, sort: 0, catId: null, icon: "", productUnit: "", }, // 表單對象 // 是否彈框,默認為false dialogVisible: false, // 需要展開的id expandedKey: [], // 分類對象 menus: [], defaultProps: { 
 children: "children", // 表示children顯示data的children屬性 label: "name", // label指的是顯示數據中的哪個屬性這里就顯示data中的name屬性,這些label、children都可以在官方文檔中查看的 }, }; }, methods: { 
 // 批量刪除 batchDelete() { 
 let catIds = []; // 拿到組件menuTree let checkedNodes = this.$refs.menuTree.getCheckedNodes(); console.log("被選中的元素", checkedNodes); for (let i = 0; i < checkedNodes.length; i++) { 
 catIds.push(checkedNodes[i].catId); } this.$confirm(`是否批量刪除【${ 
catIds}】菜單?`, "提示", { 
 confirmButtonText: "確定", // 點擊確定就調用then cancelButtonText: "取消", type: "warning", }) .then(() => { 
 this.$http({ 
 url: this.$http.adornUrl("/product/category/delete"), method: "post", data: this.$http.adornData(catIds, false), }) .then(({ 
 data }) => { 
 this.$message({ 
 type: "success", message: "菜單批量刪除成功!", }); // 刷新出新的菜單 this.getMenus(); }) .catch(() => { 
}); }) .catch(() => { 
}); }, // 批量修改 batchSave() { 
 this.$http({ 
 url: this.$http.adornUrl("/product/category/update/sort"), method: "post", data: this.$http.adornData(this.updateNodes, false), }) .then(({ 
 data }) => { 
 this.$message({ 
 type: "success", message: "菜單順序修改成功!", }); // 刷新出新的菜單 this.getMenus(); // 設置需要默認展開的菜單 this.expandedKey = this.pCid; this.updateNodes = []; this.maxLevel = 0; // this.pCid = 0; }) .catch(() => { 
}); }, // 拖拽完成觸發方法,draggingNode當前拖拽的節點,拖拽到哪個節點dropNode,dropType類型:前面,后面,里面 handleDrop(draggingNode, dropNode, dropType, ev) { 
 console.log("handleDrop: ", draggingNode, dropNode, dropType); //1 當前節點最新的父節點 let pCid = 0; let siblings = null; // 不同拖拽,會有不同的父id if (dropType == "before" || dropType == "after") { 
 pCid = dropNode.parent.data.catId == undefined ? 0 : dropNode.parent.data.catId; siblings = dropNode.parent.childNodes; } else { 
 pCid = dropNode.data.catId; siblings = dropNode.childNodes; } this.pCid.push(pCid); //2 當前拖拽節點的最新順序 for (let i = 0; i < siblings.length; i++) { 
 if (siblings[i].data.catId == draggingNode.data.catId) { 
 // 如果遍歷的是當前正在拖拽的節點 let catLevel = draggingNode.level; if (siblings[i].level != draggingNode.level) { 
 // 當前節點的層級發生變化 catLevel = siblings[i].level; // 修改他子節點的層級 this.updateChildNodeLevlel(siblings[i]); } this.updateNodes.push({ 
 catId: siblings[i].data.catId, sort: i, parentCid: pCid, catLevel: catLevel, }); } else { 
 this.updateNodes.push({ 
 catId: siblings[i].data.catId, sort: i }); } } //3 當前拖拽節點的最新層級 console.log("updateNodes", this.updateNodes); }, updateChildNodeLevlel(node) { 
 if (node.childNodes.length > 0) { 
 for (let i = 0; i < node.childNodes.length; i++) { 
 var cNode = node.childNodes[i].data; this.updateNodes.push({ 
 catId: cNode.catId, catLevel: node.childNodes[i].level, }); this.updateChildNodeLevlel(node.childNodes[i]); } } }, // 判斷是否可以拖動 allowDrop(draggingNode, dropNode, type) { 
 //1 被拖動的當前節點以及所在的父節點總層數不能大于3 //1 被拖動的當前節點總層數 // draggingNode當前正在拖動的節點 // dropNode 拖到哪個節點,也就是draggingNode和dropNode同級 console.log("allowDrop:", draggingNode, dropNode, type); // 返回總層數 var level = this.countNodeLevel(draggingNode); // 當前正在拖動的節點+父節點所在的深度不大于3即可 // draggingNode.level表示層級一級標題為1,三級標題為3 // 當前深度 let deep = Math.abs(this.maxLevel - draggingNode.level) + 1; console.log("this.maxLevel", this.maxLevel); console.log("深度:", deep); // this.maxLevel // innner表示拖到里面 if (type == "innner") { 
 // console.log( // `this.maxLevel: ${this.maxLevel}; draggingNode.data.catLevel:${draggingNode.data.catLevel};dropNode.level: ${dropNode.level}` // ); return deep + dropNode.level <= 3; } else { 
 return deep + dropNode.parent.level <= 3; } }, countNodeLevel(node) { 
 // 找到所有子節點,求出最大深度 // 如果當前節點不為null,并且有子節點 if (node.childNodes != null && node.childNodes.length > 0) { 
 for (let i = 0; i < node.childNodes.length; i++) { 
 // 找到最大的深度 if (node.childNodes[i].level > this.maxLevel) { 
 this.maxLevel = node.childNodes[i].level; } this.countNodeLevel(node.childNodes); } } }, // 獲取所有的菜單 getMenus(data) { 
 // 自定義方法 this.$http({ 
 // htpp請求 url: this.$http.adornUrl("/product/category/list/tree"), // 請求后端的接口 method: "get", // }).then((data) => { 由于我們的data是一個對象,我們只需要拿到其中的data屬性的數據,所以要把data對象解構出來 }).then(({ 
 data }) => { 
 // 成功了之后的操作 // console.log("請求數據," + data); +號不能顯示出數據 // console.log("請求數據," , data); ,才可以顯示出數據 console.log("請求數據,", data.data); // 解構data對象取出data屬性 this.menus = data.data; // 將后端取出的數據給到組件中的menus屬性 }); }, // 添加分類方法 addCategory() { 
 console.log("提交的三級分類數據", this.category); // 提交對象到后端,給后端發請求 this.$http({ 
 url: this.$http.adornUrl("/product/category/save"), method: "post", data: this.$http.adornData(this.category, false), }).then(({ 
 data }) => { 
 // 提交成功 this.$message({ 
 message: "保存成功", type: "success", }); // 保存完后,關閉彈框 this.dialogVisible = false; // 刷新出新的菜單 this.getMenus(); // 展開添加菜單的父菜單 this.expandedKey = [this.category.parentCid]; }); }, // 修改分類數據 editCategory() { 
 // 只往后端發需要更新的數據,沒有發送的數據為null后端則不會更新 // 從category取出數據,解構對象! var { 
 catId, name, icon, productUnit } = this.category; this.$http({ 
 url: this.$http.adornUrl("/product/category/update"), method: "post", // 這些數據都是對應的后端實體字段 data: this.$http.adornData({ 
 catId, name, icon, productUnit }, false), }) .then(({ 
 data }) => { 
 this.$message({ 
 type: "success", message: "菜單修改成功!", }); // 關閉對話框 this.dialogVisible = false; // 刷新出新的菜單 this.getMenus(); // 設置需要默認展開的菜單 this.expandedKey = [this.category.parentCid]; }) .catch(() => { 
}); }, submitData() { 
 if (this.dialogType == "add") { 
 this.addCategory(); } if (this.dialogType == "edit") { 
 this.editCategory(); } }, append(data) { 
 console.log("append----", data); // 打開彈框 this.dialogVisible = true; this.dialogType = "add"; // 將彈框類型變為添加 this.title = "添加分類"; // 取出當前節點的一些屬性賦給要填加的節點 this.category.parentCid = data.catId; // 父id this.category.catLevel = data.catLevel * 1 + 1; // 層級 // 由于我們修改過后的category回顯時設置了屬性,所以我們添加的時候要清空這些屬性,讓他等于默認值 this.category.catId = null; // 為null,表示后端添加的時候不加上id,自增 this.category.name = null; this.category.icon = ""; this.category.productUnit = ""; this.category.sort = 0; this.category.showStatus = 1; // this.dialogVisible = true; }, edit(data) { 
 console.log("要修改的數據", data); // 將彈框類型變為修改 this.dialogType = "edit"; this.title = "修改分類"; // 打開彈框 this.dialogVisible = true; // 修改框內顯示要修改的name this.category.name = data.name; // 發送請求獲取節點最新的數據,因為有并發 this.$http({ 
 url: this.$http.adornUrl(`/product/category/info/${ 
data.catId}`), method: "get", }).then(({ 
 data }) => { 
 // 請求成功 這個data是從服務器拿過來的data console.log("要回顯得數據", data); // 因為服務器返回的data是數據對象,里面還有一個data才是分類對象,所以data.data.name this.category.name = data.data.name; this.category.catId = data.data.catId; this.category.icon = data.data.icon; this.category.productUnit = data.data.productUnit; //由于修改完后要展開父菜單,所以把父id也回顯 this.category.parentCid = data.data.parentCid; // this.dialogVisible = true; }); }, remove(node, data) { 
 // 定義我們要刪除的id數組,data.catId數據的id,也就是數據庫中的id var ids = [data.catId]; // 在刪除之前顯示一個彈框,官網 this.$confirm(`此操作將永久刪除【${ 
data.name}】文件, 是否繼續?`, "提示", { 
 confirmButtonText: "確定", cancelButtonText: "取消", type: "warning", }) .then(() => { 
 // 確定刪除才會真正請求刪除業務 // 模仿renrne-vue的Post請求寫法即可 this.$http({ 
 // adornUrl是renrne-vue定義的工具類:renren-fast-vue\src\utils\httpRequest.js url: this.$http.adornUrl("/product/category/delete"), // 請求的地址 method: "post", // 發送Post請求 data: this.$http.adornData(ids, false), }).then((data) => { 
 // 刪除成功,發送一個消息提示 this.$message({ 
 message: "恭喜你,刪除成功", type: "success", }); // 刪除成功后,要刷新頁面 this.getMenus(); // 重新請求方法,就會獲取到最新的menus,然而el-tree又和menus是雙向綁定的,所以會實時切換 // 刷新后我們想要展開剛才被刪除的節點的父結點 // node當前節點,中有個parent屬性里面放的是父節點的內容,父節點中的data就是父節點的數據對象,然后再拿到父節點的id即可 this.expandedKey = [node.parent.data.catId]; }); }) .catch(() => { 
 console.log("取消刪除"); }); console.log(node, data); // 打印當前結點和當前數據 }, }, created() { 
 // 加載組件的時候就調用改方法 this.getMenus(); }, }; </script>
<style lang="scss" scoped> </style>
  • 設置全局代碼片段,將我們常用的代碼片段提出來
  • 文件–首選項–用戶片段–即可添加
  • 比如下面,下次直接寫httpget+回車,就會快捷生成http-get請求里面的片段
"http-get請求": { 

"prefix": "httpget",
"body": [
"this.\\$http({",
"url: this.\\$http.adornUrl(''),",
"method: 'get',",
"params: this.\\$http.adornParams({})",
"}).then(({ data }) => {",
"})"
],
"description": "httpGet請求"
},
"http-post請求": { 

"prefix": "httppost",
"body": [
"this.\\$http({",
"url: this.\\$http.adornUrl(''),",
"method: 'post',",
"data: this.\\$http.adornData(data, false)",
"}).then(({ data }) => { });" 
],
"description": "httpPOST請求"
}
  • 修改的時候只提交我們需要修改的數據

總結

以上是生活随笔為你收集整理的谷粒商城官网_尚硅谷谷粒商城电商项目(谷粒金刚PRO手柄)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美另类交人妖 | 免费看的国产视频网站 | 亚洲国产欧美一区二区三区丁香婷 | 成人午夜电影在线观看 | 日韩18p| 欧美精品一区二区三区一线天视频 | 国产91免费在线观看 | 日日夜夜噜 | 91精品国产电影 | 久久99国产综合精品 | 国产精品久久99综合免费观看尤物 | 在线观看免费日韩 | 中文字幕av专区 | av成人动漫 | 五月综合色婷婷 | 狠狠色丁香婷婷综合视频 | 麻豆视频在线免费观看 | 国产精品1区2区3区 久久免费视频7 | 成人影片在线免费观看 | 欧美一区日韩一区 | 色狠狠婷婷 | 免费在线观看污网站 | 色婷婷国产| 亚洲高清视频一区二区三区 | 在线免费国产视频 | 天天射天天干天天插 | 久久久久久毛片精品免费不卡 | 精品一区电影国产 | 91九色在线观看视频 | 中文字幕一区二区三区视频 | 免费观看成年人视频 | 亚洲高清av| 99久久婷婷国产一区二区三区 | 日本三级香港三级人妇99 | 在线观看911视频 | 国产成人一区二区三区电影 | 日韩精品国产一区 | 高清免费av在线 | 91成熟丰满女人少妇 | 国产精品久久久久久久av大片 | 色九色| 亚洲精品小区久久久久久 | 天天干天天干天天 | 精品久久久久免费极品大片 | 国产精品初高中精品久久 | 国产色就色 | 懂色av一区二区在线播放 | 日韩精品免费一线在线观看 | 日韩在线在线 | 黄色www在线观看 | 国产精品久久久久久超碰 | 在线观看免费视频 | 日韩免费观看一区二区三区 | 国产精品久久久久三级 | 免费看片黄色 | 美女网站视频色 | 黄色特一级 | 91一区二区三区在线观看 | 久久久噜噜噜久久久 | 午夜精品电影一区二区在线 | 免费视频a | 免费看网站在线 | 国产精选在线观看 | 久久在线免费视频 | 日韩精品中文字幕久久臀 | 亚洲欧美日韩一区二区三区在线观看 | 99精品在线免费 | 人人插人人 | 成人av影视在线 | 色婷婷狠狠五月综合天色拍 | 成人av免费网站 | 午夜精品久久久久久久久久久久久久 | 美女网站视频免费都是黄 | 亚洲精品在线视频播放 | 网站在线观看日韩 | 波多野结衣在线视频免费观看 | 视色网站 | 国产麻豆视频免费观看 | 日韩av片免费在线观看 | 国产精品美女免费看 | 久久99精品国产91久久来源 | 99精品免费久久久久久日本 | 国产一在线精品一区在线观看 | 亚洲精品女 | 成人黄色小说在线观看 | 成年人网站免费在线观看 | 免费在线观看一级片 | 日韩免费一区二区 | 97超碰资源 | 丁香影院在线 | 91精品久 | 中文字幕一区二区三区乱码不卡 | 天天搞天天干 | 中文字幕在线观看三区 | 丝袜网站在线观看 | 91综合视频在线观看 | 黄色三级网站在线观看 | 色小说av | 日韩久久精品一区二区三区 | 欧美精品你懂的 | 日日夜夜精品免费观看 | www.天天射 | 日韩欧美精品在线视频 | 国产伦精品一区二区三区免费 | 国产精品入口麻豆 | 久久久久久麻豆 | 99热精品国产一区二区在线观看 | www久久国产| 97国产情侣爱久久免费观看 | 在线精品视频在线观看高清 | 91理论电影| 午夜精品视频福利 | 国产一二三在线视频 | 碰超在线观看 | 中文字幕123区 | 免费看污的网站 | 免费看成人片 | 精品久久免费 | 精品国产一区二区三区噜噜噜 | 天天爱av导航 | 国产一级大片免费看 | 久久久久久97三级 | www.精选视频.com | av一二三区 | 欧美人牲 | 狠狠干2018 | 玖玖综合网 | 超级碰碰免费视频 | 欧美亚洲国产精品久久高清浪潮 | 亚洲日本在线视频观看 | 丁香视频全集免费观看 | 黄色免费网站下载 | 成人国产网址 | 国产精品久免费的黄网站 | 九九九在线观看视频 | 久色网| 日本黄色大片儿 | 亚洲最大成人网4388xx | 亚洲视屏在线播放 | 97国产视频 | 日韩在线首页 | 色吊丝在线永久观看最新版本 | 国产精品久久久久久久av电影 | 久久久综合九色合综国产精品 | 一区二区三区精品久久久 | 日韩在线国产 | 精品免费久久久久 | 久久免费片| 99热在线国产精品 | 在线视频精品 | 日韩高清免费电影 | 国产91在线 | 美洲 | 天无日天天操天天干 | 亚洲精品视频在线观看免费视频 | 91在线最新| 在线观看国产91 | 久久久亚洲麻豆日韩精品一区三区 | 超碰在线亚洲 | 亚洲国产日本 | 亚洲精品国产精品国自产观看 | 麻豆视频国产在线观看 | 中文av字幕在线观看 | 色综合天天射 | 欧美亚洲久久 | 久久久久一区二区三区四区 | 久久深夜福利免费观看 | 亚洲精品中文在线观看 | 99成人免费视频 | 久草www| 久久成人国产精品免费软件 | 久久久国产精品成人免费 | 国产精品福利av | 欧美日比视频 | 人人干在线 | 最新国产精品视频 | 永久免费看av | 精品国产一区二区三区av性色 | 干天天 | 日韩激情一二三区 | 人人插人人看 | 日本九九视频 | 黄色大片中国 | 亚洲无吗视频在线 | 成人a级大片 | 久久免费一 | 日韩中文字幕视频在线 | 久久久久久高潮国产精品视 | 激情电影影院 | 色综合激情网 | 麻豆视频www | 免费看日韩片 | 91丨九色丨国产在线 | 成人久久18免费 | 日日夜夜av | 97人人澡人人爽人人模亚洲 | 欧美一级黄色片 | 日韩高清在线不卡 | 在线观看视频三级 | 精品成人国产 | 亚洲午夜精品一区二区三区电影院 | 国产亚洲精品久久久久久网站 | 久久夜色精品国产欧美乱极品 | 亚洲精品理论 | 毛片www| 亚洲精品一区中文字幕乱码 | 又爽又黄在线观看 | 久久精品一区二区三区中文字幕 | 在线观看的黄色 | 日韩在线视 | 久久看视频 | 婷婷国产一区二区三区 | 国产中文字幕精品 | 日韩精品一区二区三区中文字幕 | 亚洲成人黄色在线观看 | av+在线播放在线播放 | 欧美日韩国产mv | 亚洲精品国产精品乱码不99热 | 麻豆91在线看 | 国产精品久久久久久久久久新婚 | 国产精品区一区 | 久久综合狠狠 | 在线视频 国产 日韩 | 亚洲综合狠狠干 | 成人教育av | 欧美日韩国产精品爽爽 | 91亚洲永久精品 | 欧美成亚洲 | 国产不卡在线视频 | 亚洲作爱 | 免费h在线观看 | 日韩二区三区 | 夜夜操网站| 激情综合网五月婷婷 | 免费在线播放视频 | 国产精品视频99 | 91丨九色丨国产丨porny精品 | 国产一级电影在线 | 免费成人在线观看视频 | 五月在线视频 | 亚州人成在线播放 | 免费看的视频 | 天干啦夜天干天干在线线 | 亚洲精选视频在线 | 国内精品久久久久久久影视麻豆 | 亚洲成人av在线电影 | 成人在线观看日韩 | 亚州精品成人 | 国产高清在线a视频大全 | 99精品免费久久久久久久久 | 久久九九久久精品 | 天天干,天天操,天天射 | 亚洲国产视频直播 | 麻豆传媒视频在线播放 | 国产蜜臀av | 日日色综合| 婷婷综合亚洲 | 欧美乱码精品一区二区 | 91人人网| 久久久午夜精品理论片中文字幕 | 日韩精品免费一线在线观看 | 人人精品 | 免费福利视频网站 | 国模视频一区二区三区 | 91精品久久久久久综合乱菊 | 99热播精品 | 精品国产激情 | 97超碰在线播放 | 午夜久久久影院 | 成人小视频免费在线观看 | 午夜99| 日日夜夜天天综合 | 看片网站黄 | 久久中文欧美 | 国产探花视频在线播放 | 国产精品黑丝在线观看 | 亚洲国产成人精品在线观看 | 黄色软件在线观看视频 | 一区中文字幕 | 成人app在线免费观看 | 天天碰天天操视频 | 91精品久久久久久久99蜜桃 | 999久久久久 | 亚洲国产丝袜在线观看 | 国产麻豆精品在线观看 | 精品少妇一区二区三区在线 | 日韩r级电影在线观看 | 天天操天天谢 | 亚洲成人av影片 | 欧美一区免费观看 | 国内精品久久天天躁人人爽 | 日韩欧美精品在线 | 国产精品欧美一区二区 | 国产一二三精品 | 91爱爱免费观看 | 午夜狠狠干 | 欧美精品xx| 亚洲高清在线观看视频 | 一级黄色片在线免费观看 | 亚洲国产精品久久 | 亚洲日本欧美 | 中文字幕中文中文字幕 | 亚洲午夜久久久久久久久 | 欧美日韩在线第一页 | 欧美一区二区三区在线观看 | 久草网在线观看 | 成人免费视频在线观看 | 久久香蕉电影网 | 成人资源网 | 欧美一级片免费在线观看 | 久久国产精品99国产精 | 亚洲成人资源 | 日韩黄在线观看 | 人人狠狠综合久久亚洲婷 | 国产在线观看中文字幕 | 国产精品免费观看视频 | 黄色软件网站在线观看 | 99久久婷婷国产综合亚洲 | 中文字幕资源在线观看 | 美女国产 | 天天干com| 97av在线视频免费播放 | 国产亚洲高清视频 | 97人人超碰在线 | 丁香5月婷婷 | 亚洲精品视频观看 | 人人爽人人澡人人添人人人人 | 日韩精品一区在线播放 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 久久久久久久久久亚洲精品 | 久久久久久久99 | 激情欧美一区二区三区 | 日本中文字幕网址 | 国产成人一区二区三区 | 亚洲欧洲日韩 | 久久国产精品偷 | 久久精品—区二区三区 | 国产精品精品久久久久久 | 九九久 | 青青河边草免费直播 | 激情综合网在线观看 | 欧美日韩伦理在线 | 在线视频app | www..com黄色片| 丁香色综合| 玖玖精品在线 | 久久深夜福利免费观看 | 一区二区三区日韩视频在线观看 | 亚洲国产精品资源 | 在线观看日本高清mv视频 | 97av视频在线观看 | 久久ww| 日韩大片免费观看 | 五月天中文字幕mv在线 | 激情婷婷综合 | 久久久久久久免费 | 欧美电影在线观看 | 成人a在线观看高清电影 | 麻豆国产精品va在线观看不卡 | 五月婷婷六月丁香 | 一区二区视频网站 | 国产在线色站 | 丝袜av网站 | 久久精品欧美视频 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 国产网站在线免费观看 | 精品一区电影 | 久久国产精品久久国产精品 | av久久久 | 男女全黄一级一级高潮免费看 | 91在线porny国产在线看 | 亚洲国产精品va在线看黑人动漫 | 亚洲国产免费av | 66av99精品福利视频在线 | 国内一区二区视频 | 91中文字幕在线视频 | 国产高清在线免费 | 狠狠色狠狠色综合系列 | 2021国产视频| 美女网站在线观看 | 特级毛片在线 | 国产精品99久久久精品 | 国产在线看 | 免费福利视频网 | 国产精品成人一区二区三区吃奶 | 在线日韩中文 | 亚洲成人av在线电影 | 亚洲一区二区三区精品在线观看 | 欧美a视频在线观看 | 久久国产经典 | 九九热1| 狠狠网| 日韩午夜剧场 | 国产色资源 | 69亚洲乱 | 国产一级片免费观看 | 婷婷av资源| 日韩在线 一区二区 | 久久综合狠狠综合久久综合88 | 日韩精品高清不卡 | 成人一级免费电影 | 99久久精品视频免费 | 国产精成人品免费观看 | 色av婷婷| 精品国产伦一区二区三区免费 | av日韩国产 | 天天操人人干 | 五月婷婷丁香 | 久久精精品视频 | 国产一区二区电影在线观看 | 国产xx在线 | 午夜精品电影一区二区在线 | 国产精品99免视看9 国产精品毛片一区视频 | 亚洲专区欧美专区 | 97视频在线播放 | 黄色在线观看免费网站 | 91看片一区二区三区 | av最新资源| 亚洲女欲精品久久久久久久18 | 免费网站看v片在线a | 日韩r级在线 | 中国一级片在线观看 | 免费一级特黄毛大片 | 亚洲更新最快 | 日韩国产在线观看 | 九九热免费精品视频 | 久久久www成人免费毛片麻豆 | 日本韩国欧美在线观看 | 91亚洲精品国偷拍 | 久久99最新地址 | 美女视频久久黄 | 国际精品久久久久 | 91丨九色丨蝌蚪丨对白 | 色综合天天视频在线观看 | 精品视频网站 | av不卡中文 | 中文字幕国内精品 | 亚洲成人免费在线观看 | 国产一区在线视频观看 | 中文字幕有码在线播放 | 国产在线最新 | 久久国产精品99国产 | 欧美日韩后 | 娇妻呻吟一区二区三区 | 成人羞羞视频在线观看免费 | 久久99精品久久久久久秒播蜜臀 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 久久五月天色综合 | 亚洲精品乱码久久久久久高潮 | 国产精品久久久久久久久久不蜜月 | 韩日精品中文字幕 | 一级一片免费看 | 日韩日韩日韩日韩 | 99热999 | 欧美激情在线网站 | 在线韩国电影免费观影完整版 | 中文字幕视频免费观看 | 国产99一区视频免费 | 欧美激情精品久久久久久 | 中文字幕在线视频国产 | 日韩久久网站 | 玖玖在线观看视频 | 欧美日本不卡 | 丁香综合av | 亚洲美女免费视频 | 在线观看黄色免费视频 | 精品一区二区免费 | 在线免费观看视频你懂的 | 国产在线精品播放 | 国产小视频在线 | av在线永久免费观看 | 日韩欧美网站 | 亚洲国产精品99久久久久久久久 | 涩涩网站在线 | 国产伦精品一区二区三区四区视频 | 99热最新在线| 香蕉在线影院 | 欧美日韩国产综合网 | 中文永久字幕 | 欧美做受高潮电影o | 亚洲妇女av | 国产精品久久久久一区二区国产 | 中文字幕123区 | 丁香花中文在线免费观看 | 亚洲区另类春色综合小说 | 亚洲国产经典视频 | 最新国产一区二区三区 | 精品高清美女精品国产区 | 99亚洲精品 | 黄色aa久久 | 国内久久久久 | 婷婷日日 | 成人网中文字幕 | 日日碰夜夜爽 | 激情喷水 | 天天操天天干天天玩 | 精品免费久久 | 五月综合激情婷婷 | 99久久精品免费视频 | 2019中文字幕第一页 | 国产电影一区二区三区四区 | 亚洲成成品网站 | 日日爱夜夜爱 | 久久艹中文字幕 | 日韩免费在线观看 | 国产 视频 高清 免费 | 日韩中文字幕免费视频 | 国产一级在线观看视频 | 精品久久一区 | 中文字幕在线乱 | 一区二区三区免费在线播放 | 国产涩涩网站 | 一级精品视频在线观看宜春院 | 99看视频在线观看 | 狠狠狠色丁香婷婷综合激情 | 毛片随便看| 久久视频免费看 | 久久久久日本精品一区二区三区 | 久久久久久久久久久综合 | 开心综合网 | 青青河边草观看完整版高清 | 亚洲日本欧美在线 | 亚洲综合婷婷 | 91精品国产乱码久久桃 | 亚洲伊人av | 久久1区 | 国产中文字幕在线 | 91天天操 | 亚州国产视频 | 永久黄网站色视频免费观看w | 伊人丁香 | 国产成人精品av久久 | 欧美日韩69 | 天天摸日日摸人人看 | 黄色亚洲大片免费在线观看 | 日日夜夜噜 | 亚一亚二国产专区 | 久久久久久久久久久成人 | 2019中文在线观看 | 久久另类视频 | 热re99久久精品国产99热 | 综合久久精品 | 欧美日韩国产成人 | 日韩av一区二区三区在线观看 | 欧美精品国产精品 | 69av久久 | 久久久高清免费视频 | 精品乱码一区二区三四区 | 在线观看91av | 国产精品一区二区果冻传媒 | 国产成人久久av免费高清密臂 | 一区二区三区免费在线观看视频 | 丁香免费视频 | 国产精品激情偷乱一区二区∴ | 欧美巨乳波霸 | 免费观看国产精品视频 | av在观看| 婷婷综合成人 | 永久中文字幕 | 日日婷婷夜日日天干 | 337p西西人体大胆瓣开下部 | 日韩免费av在线 | 亚洲成a人片综合在线 | 五月天久久 | 国产精品久久久久亚洲影视 | 日日夜夜骑 | 亚洲欧美精品一区 | 狠狠干网址| 亚洲日本韩国一区二区 | 久久久91精品国产 | 日日爽视频 | 欧美成人黄色 | 四虎在线免费视频 | 丁香婷婷深情五月亚洲 | 偷拍精偷拍精品欧洲亚洲网站 | 久久99国产一区二区三区 | av天天澡天天爽天天av | 在线看成人 | 91在线视频观看免费 | 日韩欧美一区二区三区视频 | 久久久久久久久久免费视频 | 国产私拍在线 | 成年人免费av网站 | 天天插天天操天天干 | 麻豆网站免费观看 | 国产精品一区二区久久精品爱微奶 | 亚洲国产成人精品在线观看 | 国产一区二区三区视频在线 | 久久久久久久av | 最近2019年日本中文免费字幕 | 国产va精品免费观看 | 国产精品永久在线观看 | 色综合天天综合在线视频 | 国产精品免费小视频 | 午夜av免费观看 | 超碰在线公开免费 | 一区二区三高清 | 黄色免费网战 | 男女激情片在线观看 | 亚洲国产日韩欧美 | 色激情五月 | 欧美日韩在线第一页 | 欧美另类高清 | 97碰碰视频 | 久久久久久久久久电影 | 天天射天天干天天操 | 93久久精品日日躁夜夜躁欧美 | 99精品国产一区二区三区麻豆 | 日韩中文字幕免费在线播放 | 日本3级在线观看 | 91久久精品日日躁夜夜躁国产 | 国产高清视频免费最新在线 | 国产一级片免费播放 | 97精品国自产拍在线观看 | 久久成电影 | 毛片网站观看 | 中文字幕一区二区三区在线播放 | 国产成人精品一区二三区 | a亚洲视频| 久草在线视频在线 | 久久久午夜精品理论片中文字幕 | 99久久精品免费看国产 | 欧美日韩国产在线观看 | 91日韩精品视频 | 免费看一及片 | 99热国产精品 | 天天躁日日躁狠狠躁 | 综合久久久久久久久 | 深夜福利视频在线观看 | 69久久久 | 婷婷六月综合亚洲 | 亚洲精品国产成人av在线 | 国产精品美女久久久网av | 国产伦理久久精品久久久久_ | 日韩欧美在线影院 | 热久久免费国产视频 | 国产视频美女 | 伊人日日干 | 国产69精品久久久久9999apgf | 亚洲 欧美变态 另类 综合 | 天天综合成人网 | www.伊人网.com| 国产一区二区三区免费在线 | 欧美日韩另类视频 | 国产精品成人一区二区三区 | 黄色亚洲精品 | 激情在线免费视频 | 四虎成人精品永久免费av | 久久男女视频 | 免费在线观看亚洲视频 | 欧美色综合天天久久综合精品 | av 一区二区三区 | 日韩大片免费在线观看 | 国产成人一区二区三区在线观看 | 人人爽人人澡 | 日韩va亚洲va欧美va久久 | a级国产乱理论片在线观看 伊人宗合网 | 精品综合久久久 | 麻豆国产在线播放 | 天天干夜夜爽 | 天天操天天干天天摸 | 中文字幕日本电影 | 欧美日韩高清在线 | 在线观看日韩精品 | 亚洲资源在线 | 成人资源网 | 尤物97国产精品久久精品国产 | 日日天天 | 亚洲日本韩国一区二区 | 天堂av免费看 | 六月婷操 | 91久久在线观看 | 黄色大全在线观看 | 欧美一级大片在线观看 | 成人在线播放网站 | 亚洲欧美乱综合图片区小说区 | 久久国产一区二区 | 丝袜美腿在线播放 | 天天射日 | 色婷婷狠狠操 | 不卡精品 | 日韩免费观看高清 | 美女免费黄视频网站 | 黄色在线观看免费 | 久久久久黄 | 日韩成人精品一区二区 | 在线黄色国产 | 四虎成人精品永久免费av | 99精品欧美一区二区三区黑人哦 | 91视频麻豆| 日本激情动作片免费看 | 国产小视频在线播放 | 日韩av不卡在线观看 | 日韩 在线a | 欧美日韩后 | 又黄又刺激的视频 | 免费观看成人av | 日韩电影在线看 | 99精品视频精品精品视频 | 国内精品视频久久 | 久久露脸国产精品 | 国产成人精品午夜在线播放 | 国产色在线视频 | 国产区网址 | 国产午夜在线观看 | 93久久精品日日躁夜夜躁欧美 | 成人影视片 | 成人黄色大片在线观看 | 精品亚洲免费视频 | 国产黄色视 | 亚洲精品视频中文字幕 | 五月天丁香综合 | 国内精品视频久久 | 在线免费观看黄色av | 国产日女人 | 国产专区精品视频 | 国产精品永久在线观看 | 午夜av一区 | 99国产精品免费网站 | 国产视频手机在线 | 国产综合久久 | 九九免费在线观看 | 99久久综合狠狠综合久久 | 欧美久久综合 | 五月婷婷,六月丁香 | 成人精品99 | 四虎在线影视 | 黄色aaa级片 | 欧美久久久久久久久中文字幕 | www黄com| 国产在线精品一区二区三区 | 久久视频中文字幕 | 激情婷婷综合 | 日韩午夜电影网 | 日韩免费一区 | 精品美女在线观看 | 精品乱码一区二区三四区 | 亚洲最新毛片 | 99精品系列 | 国产精品久久久久久久久久ktv | 欧美国产高清 | 美女黄网站视频免费 | 日日天天干 | 一区二区视频在线播放 | 久久精品视频3 | 另类五月激情 | a v在线观看| 97成人在线视频 | 亚洲jizzjizz日本少妇 | 在线a亚洲视频播放在线观看 | 国产精品免费观看国产网曝瓜 | 婷婷网在线 | 久久久久久毛片精品免费不卡 | 日韩视频专区 | 玖操 | 在线免费观看视频你懂的 | 狠狠色噜噜狠狠 | 久久国产精品99久久久久久丝袜 | 国产精品久久久久久久久久了 | 高清在线一区二区 | 日韩激情小视频 | 久久精品视频中文字幕 | 精品亚洲一区二区三区 | 天天综合导航 | 国产在线观看 | 亚洲精品在线二区 | 亚洲综合情 | 亚洲精品毛片一级91精品 | 国产欧美日韩视频 | 天天插天天干 | 国产精品综合久久久久久 | 最近中文字幕mv免费高清在线 | 中国一级特黄毛片大片久久 | 91黄色在线看 | 午夜久久成人 | 亚洲一区网站 | 国产精品久久在线观看 | 色婷婷国产 | 国产精品高清在线 | 九九综合久久 | 午夜久久福利影院 | 精品久久一区二区三区 | 亚洲资源视频 | 91在线91| 久久九九国产视频 | 久久99日韩 | 一区二区三区在线影院 | 国产一级二级在线播放 | 亚洲精品美女久久久久网站 | 国产精品免费视频观看 | 久久久久免费精品国产小说色大师 | 国产人成免费视频 | 久久不见久久见免费影院 | 日韩激情精品 | 一级片免费视频 | 96久久欧美麻豆网站 | 婷婷黄色片 | 狠狠操狠狠操 | 国产小视频网站 | 午夜私人影院久久久久 | 九九免费在线看完整版 | 激情av综合 | 日韩城人在线 | 一级片免费观看 | 在线精品视频免费播放 | 成年人网站免费观看 | 91免费网站在线观看 | 91九色最新 | 久久久久久久免费观看 | 日韩综合一区二区三区 | 国产韩国精品一区二区三区 | 亚洲欧美视屏 | 91av蜜桃| 久草免费电影 | 久久激情五月丁香伊人 | 99久久婷婷国产一区二区三区 | 韩国精品在线 | 中文字幕成人在线观看 | 国产精品久久久久久久久久ktv | 午夜视频在线观看一区二区三区 | 亚洲国产三级 | 国产精品第一页在线观看 | 免费久久99精品国产 | 精品国产123| 毛片美女网站 | 国产成人亚洲在线观看 | 天天操伊人 | 国产精品欧美久久久久天天影视 | 国产亚洲视频中文字幕视频 | 丁五月婷婷 | 欧美成人播放 | 欧美视频在线观看免费网址 | 国产欧美最新羞羞视频在线观看 | 久草爱视频 | 亚洲乱亚洲乱妇 | 一二区av| 一区二区三区中文字幕在线 | 少妇精69xxtheporn | 国产粉嫩在线 | av在线在线| 国产精品一区二区三区四 | 色在线网| 日韩精品一区二区三区在线播放 | 久久久网| 国产精品国产毛片 | 黄网站色视频免费观看 | 欧美国产精品久久久久久免费 | 国产精品系列在线 | 亚洲精品网址在线观看 | 免费日韩一区 | 亚洲高清av | 日韩精品一区二区三区三炮视频 | 超碰97网站| 婷婷五综合 | 亚洲专区在线播放 | 日韩精品三区四区 | 国产特黄色片 | 免费午夜av| 欧美久久久久久久久中文字幕 | 在线亚洲成人 | 亚洲成av人片在线观看 | 91精品国产麻豆国产自产影视 | 亚洲精品美女 | 91精品国 | 国产91小视频 | 亚洲精品国偷拍自产在线观看 | 日韩欧美视频在线播放 | 免费男女羞羞的视频网站中文字幕 | 四虎成人av| 97在线超碰 | 亚洲综合狠狠干 | 欧美 日韩 国产 中文字幕 | 91视视频在线直接观看在线看网页在线看 | 国产精品免费一区二区三区 | 精品国产观看 | 日本公妇在线观看 | 特级a老妇做爰全过程 | 激情av资源 | 在线免费观看黄色大片 | 99精品国产99久久久久久97 | 在线观看国产一区 | 成人影片免费 | 三级黄色大片在线观看 | 成人国产网站 | 中文字幕亚洲字幕 | 激情综合亚洲精品 | 久久久久成人精品 | 日韩欧美一区二区三区在线观看 | 精品国产123 | 96久久| 日本黄色大片免费看 | 九九交易行官网 | 亚洲精品97 | 麻豆av一区二区三区在线观看 | 日韩综合一区二区三区 | 午夜av一区 | 亚洲精品综合欧美二区变态 | 激情影音 | 91av在线国产 | 亚洲欧美日韩国产精品一区午夜 | 精品视频成人 | av在线免费观看不卡 | 日韩一区二区久久 | 高清av中文字幕 | 免费麻豆 | 黄污污网站 | 91在线视频在线观看 | 欧美午夜精品久久久久久浪潮 | 女人18毛片90分钟 | 国产成人在线观看 | 精品久久一区二区 | 99精品视频一区 | 久久国产精品久久精品 | 欧美激情精品久久久久久免费印度 | 免费色视频 | 91精品视频播放 | 婷婷亚洲综合五月天小说 | 91九色视频在线播放 | 日本精品二区 | 亚洲黄色影院 | 97超级碰碰碰碰久久久久 | 91中文字幕网 | 色婷婷国产在线 | 99在线看 | 成人在线播放视频 | 免费看污片 | 丝袜少妇在线 | 欧美日韩中文在线视频 | 激情图片qvod | 国产亚洲一区 | 天堂av免费 | 日韩精品久久一区二区三区 | 超碰在线97观看 | 亚洲精选久久 | 99r国产精品| 中文字幕在线观看国产 | 欧美黄色软件 | 久草在线手机视频 | 午夜精品剧场 | 热99在线视频 | 东方av免费在线观看 | 一级性视频 | 99热播精品 | 欧美天堂视频在线 | 久久成人国产精品一区二区 | 97av在线视频 | 91热视频 | 久久久久久综合网天天 | 日韩在线观看电影 | 天天干天天干天天操 | 嫩草av在线 | 全黄色一级片 | 免费 在线 中文 日本 | 免费成人黄色av | 日韩在线网址 | 久久www免费人成看片高清 | 中文字幕日韩有码 | 亚洲国产日韩一区 | 黄色毛片观看 | 黄色片网站av | 欧美一级片播放 | 成人一区二区三区在线观看 | 欧美激情一区不卡 | 午夜骚影| 久久亚洲欧美日韩精品专区 | 亚洲国产无 | 久久www免费人成看片高清 | 欧美一级片免费播放 | 久久久久成人精品亚洲国产 | 欧美久久久久久久久中文字幕 | 成人一区二区在线 | 国产成人a亚洲精品 | 夜夜操天天摸 | 久久精品第一页 | 99精品在线免费视频 | 久久久国产精华液 | 久久久久久高潮国产精品视 | 欧美精品资源 | 亚一亚二国产专区 | 精品久久久久久电影 | 深夜国产福利 | 欧美激情视频在线观看免费 | 波多野结衣在线播放视频 | 欧美日韩国产色综合一二三四 | 婷婷天天色 | 成 人 黄 色 免费播放 | 国产伦理久久精品久久久久_ | 成人国产精品av | 久久看毛片 | 97在线视频免费 | 国内丰满少妇猛烈精品播放 | 成人免费xxxxxx视频 | 日韩欧美电影 | 色综合综合 | 久久久久国产精品一区 | 久久久久久久久久久福利 | 国产亚洲婷婷免费 | 久要激情网 | 国产一区二区精品久久91 |