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

歡迎訪問 生活随笔!

生活随笔

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

综合教程

Vue + ElementUI的电商管理系统实例14 商品列表-添加商品

發布時間:2023/12/19 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 Vue + ElementUI的电商管理系统实例14 商品列表-添加商品 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、通過編程式導航跳轉到商品添加頁面

給添加商品按鈕添加點擊事件:

<el-button type="primary" @click="goAddpage">添加商品</el-button>

goAddpage事件函數:

// 跳轉到添加商品頁面
goAddpage() {
      // 路由導航對象.push函數,跳轉到指定的路由頁面
      this.$router.push('goods/add')
}

在goods文件夾下新建Add.vue文件:

<template>
<div>
    添加商品組件頁面
</div>
</template>

<script>
export default {
}
</script>

<style lang="less" scoped>

</style>

添加路由:

import Add from '../components/goods/Add.vue'

const routes = [
  { path: '/', redirect: '/login' }, // 重定向
  { path: '/login', component: Login },
  {
    path: '/home',
    component: Home,
    redirect: '/welcome', // 重定向
    children: [ // 子路由
      { path: '/welcome', component: Welcome },
      { path: '/users', component: Users }, // 用戶列表
      { path: '/rights', component: Rights }, // 權限列表
      { path: '/roles', component: Roles }, // 角色列表
      { path: '/categories', component: Cate }, // 商品分類
      { path: '/params', component: Params }, // 分類參數
      { path: '/goods', component: List }, // 商品列表
      { path: '/goods/add', component: Add } // 添加商品
    ]
  }
]

點擊添加商品按鈕,效果圖:

2、渲染添加商品頁面的基本結構

還是面包屑和卡片視圖:

<template>
<div>
  <!--面包屑導航區域-->
  <el-breadcrumb separator-class="el-icon-arrow-right">
      <el-breadcrumb-item :to="{ path: '/home' }">首頁</el-breadcrumb-item>
      <el-breadcrumb-item>商品管理</el-breadcrumb-item>
      <el-breadcrumb-item>添加商品</el-breadcrumb-item>
  </el-breadcrumb>
  <!--卡片視圖區域-->
  <el-card>
    <!--警告提示區域-->
    <el-alert title="添加商品信息" type="info" center show-icon :closable="false"></el-alert>

  </el-card>
</div>
</template>

然后下面需要用到Steps 步驟條組件,要把Steps 和 step到添加到element.js中

選擇 含狀態步驟條 的代碼復制:

<!--步驟條區域-->
<el-steps :space="200" :active="1" finish-status="success">
      <el-step title="已完成"></el-step>
      <el-step title="進行中"></el-step>
      <el-step title="步驟 3"></el-step>
</el-steps>

此時的效果圖:

3、美化步驟條組件

首先增加3個el-step,然后修改title的值:

<!--步驟條區域-->
<el-steps :space="200" :active="1" finish-status="success">
      <el-step title="基本信息"></el-step>
      <el-step title="商品參數"></el-step>
      <el-step title="商品屬性"></el-step>
      <el-step title="商品圖片"></el-step>
      <el-step title="商品內容"></el-step>
      <el-step title="完成"></el-step>
</el-steps>

然后在全局樣式中添加:

.el-steps{margin: 15px 0;}
.el-step__title{font-size: 13px;}

align-center標題和描述都將居中。

<el-steps :space="200" :active="1" finish-status="success" align-center>

修改默認激活為第一項:

<el-steps :space="200" :active="0" finish-status="success" align-center>

定義一個屬性綁定到active:

<el-steps :space="200" :active="activeIndex" finish-status="success" align-center>

<script>
export default {
  data() {
    return {
      activeIndex: 0 // 當前激活的索引
    }
  }
}
</script>

此時效果圖:

4、渲染tab欄區域

添加tabs標簽代碼,可以通過tab-position設置標簽的位置:

<!--tab欄區域-->
<el-tabs :tab-position="'left'">
      <el-tab-pane label="基本信息">基本信息</el-tab-pane>
      <el-tab-pane label="商品參數">商品參數</el-tab-pane>
      <el-tab-pane label="商品屬性">商品屬性</el-tab-pane>
      <el-tab-pane label="商品圖片">商品圖片</el-tab-pane>
      <el-tab-pane label="商品內容">商品內容</el-tab-pane>
</el-tabs>

效果圖:

5、實現步驟條和tab欄的數據聯動效果

steps步驟條組件的激活狀態是對應的activeIndex索引值

在tabs組件中,有屬性value / v-model :可以綁定選中選項卡的 name值

所以我們就把選項卡的name分別設置0-4的值,然后把v-model綁定activeIndex索引值,這樣每次切換選項卡時,它的name值就會綁定到activeIndex,由此實現聯動效果。

代碼:

<!--tab欄區域-->
<el-tabs v-model="activeIndex" :tab-position="'left'">
      <el-tab-pane label="基本信息" name="0">基本信息</el-tab-pane>
      <el-tab-pane label="商品參數" name="1">商品參數</el-tab-pane>
      <el-tab-pane label="商品屬性" name="2">商品屬性</el-tab-pane>
      <el-tab-pane label="商品圖片" name="3">商品圖片</el-tab-pane>
      <el-tab-pane label="商品內容" name="4">商品內容</el-tab-pane>
</el-tabs>

因為v-model綁定得是字符串類型,所以要把activeIndex修改為字符串:

<script>
export default {
  data() {
    return {
      activeIndex: '0' // 當前激活的索引
    }
  }
}
</script>

但是steps步驟條組件的active屬性綁定的是數字類型,所以要修改下:(隱式類型轉換)

<el-steps :space="200" :active="activeIndex - 0" finish-status="success" align-center>

此時刷新,可以實現聯動效果,如圖:

6、分拆表單的組成部分

在tabs標簽外面,添加form表單:

label-position=“top” 表示標簽的位置

<!--tab欄區域-->
<el-form :model="addForm" :rules="addFormRules" ref="addFormRef" label-width="100px" label-position="top">
<el-tabs v-model="activeIndex" :tab-position="'left'">
      <el-tab-pane label="基本信息" name="0">基本信息</el-tab-pane>
      <el-tab-pane label="商品參數" name="1">商品參數</el-tab-pane>
      <el-tab-pane label="商品屬性" name="2">商品屬性</el-tab-pane>
      <el-tab-pane label="商品圖片" name="3">商品圖片</el-tab-pane>
      <el-tab-pane label="商品內容" name="4">商品內容</el-tab-pane>
</el-tabs>
</el-form>

<script>
export default {
  data() {
      // 添加商品的表單數據對象
      addForm: {},
      // 添加商品表單的驗證規則對象
      addFormRules: {}
    }
  }
}
</script>

7、繪制基本信息面板的UI結構

記得要把tabs組件上的height="200px"刪掉,input指定type="number",只能輸入數字類型

添加代碼:

<el-tab-pane label="基本信息" name="0">
        <el-form-item label="商品名稱" prop="goods_name">
          <el-input v-model="addForm.goods_name"></el-input>
        </el-form-item>
        <el-form-item label="商品價格" prop="goods_price">
          <el-input v-model="addForm.goods_price" type="number"></el-input>
        </el-form-item>
        <el-form-item label="商品重量" prop="goods_weight">
          <el-input v-model="addForm.goods_weight" type="number"></el-input>
        </el-form-item>
        <el-form-item label="商品數量" prop="goods_number">
          <el-input v-model="addForm.goods_number" type="number"></el-input>
        </el-form-item>
</el-tab-pane>

<script>
export default {
  data() {
    return {
      // 添加商品的表單數據對象
      addForm: {
        goods_name: '',
        goods_price: 0,
        goods_weight: 0,
        goods_number: 0
      },
      // 添加商品表單的驗證規則對象
      addFormRules: {
        goods_name: [
          { required: true, message: '請輸入商品名稱', trigger: 'blur' }
        ],
        goods_price: [
          { required: true, message: '請輸入商品價格', trigger: 'blur' }
        ],
        goods_weight: [
          { required: true, message: '請輸入商品重量', trigger: 'blur' }
        ],
        goods_number: [
          { required: true, message: '請輸入商品數量', trigger: 'blur' }
        ]
      }
    }
  }
}
</script>

此時效果圖:

8、獲取商品分類數據

調用api的商品分類數據列表接口,前面商品分類功能有寫過

添加代碼:

<script>
export default {
  data() {
    return {
      cateList: [] // 商品分類列表數據
    }
  },
  created() {
    this.getCateList()
  },
  methods: {
    // 獲取所有商品分類數據
    async getCateList() {
      const { data: res } = await this.$http.get('categories')
      if (res.meta.status !== 200) {
        return this.$message.error('獲取商品分類失敗')
      }
      console.log(res)
      this.cateList = res.data
    }
  }
}
</script>

9、繪制商品分類的級聯選擇器

添加級聯選擇器代碼:

<el-form-item label="商品分類" prop="goods_cat">
          <!--選擇商品分類的級聯選擇框-->
          <!-- options用來指定數據源  props用來指定配置對象  value/v-model選中項綁定值-->
          <el-cascader
            v-model="addForm.goods_cat"
            :options="cateList"
            :props="cateProps"
            @change="cateChanged"
            clearable
          ></el-cascader>
</el-form-item>

<script>
export default {
  data() {
    return {
      // 添加商品的表單數據對象
      addForm: {
        goods_name: '',
        goods_price: 0,
        goods_weight: 0,
        goods_number: 0,
        goods_cat: [] // 商品所屬的分類數據
      },
      // 添加商品表單的驗證規則對象
      addFormRules: {
        goods_name: [
          { required: true, message: '請輸入商品名稱', trigger: 'blur' }
        ],
        goods_price: [
          { required: true, message: '請輸入商品價格', trigger: 'blur' }
        ],
        goods_weight: [
          { required: true, message: '請輸入商品重量', trigger: 'blur' }
        ],
        goods_number: [
          { required: true, message: '請輸入商品數量', trigger: 'blur' }
        ],
        goods_cat: [
          { required: true, message: '請選擇商品分類', trigger: 'blur' }
        ]
      },
      cateList: [], // 商品分類列表數據
      // 指定級聯選擇框的配置對象
      cateProps: {
        expandTrigger: 'hover', // 次級菜單的展開方式 click / hover
        value: 'cat_id', // 指定選中值的屬性
        label: 'cat_name', // 指定選中標簽的名稱
        children: 'children' // 指定父子嵌套的屬性
      }
    }
  },
  methods: {
    // 級聯選擇框選中項變化,會觸發這個函數
    cateChanged() {
      console.log(this.addForm.goods_cat)
    }
  }
}
</script>

我們這里設置的goods_cat是個數組,后臺接口定義的是要接收字符串類型,后面還要進行轉譯。

效果圖:

10、只允許選中三級商品分類

// 級聯選擇框選中項變化,會觸發這個函數
cateChanged() {
      // 證明選中的不是三級分類
      if (this.addForm.goods_cat.length !== 3) {
        this.addForm.goods_cat = [] // 清空級聯選擇框的數據
        return
      }
      // 證明選中的是三級分類
      console.log(this.addForm.goods_cat)
}

11、阻止標簽切換

在沒有填寫表單前,不允許切換標簽。

監聽標簽頁的切換事件,在事件的處理函數中,判斷是否處于第一個標簽中,同時還要判斷已選中的商品分類是否為三級商品分類。

tabs組件中屬性:before-leave 切換標簽之前的鉤子,若返回 false 或者返回 Promise 且被 reject,則阻止切換。返回一個Function(activeName, oldActiveName),其中activeName:代表即將進入的標簽頁的name名稱,oldActiveName:代表即將離開的標簽頁的name名稱。

添加代碼:

<el-tabs v-model="activeIndex" :tab-position="'left'" :before-leave="beforeTabLeave">

beforeTabLeave事件函數:

// 阻止標簽切換
beforeTabLeave(activeName, oldActiveName) {
    //   console.log('即將離開的標簽頁名字是' + oldActiveName)
    //   console.log('即將進入的標簽頁名字是' + activeName)
      if (oldActiveName === '0' && this.addForm.goods_cat.length !== 3) {
        this.$message.error('請先選擇商品分類')
        return false
      }
}

12、獲取動態參數列表數據

下面要實現的是商品參數標簽,需要調用api的參數列表接口,具體前面也有寫過

還需要用到tabs組件的tab-click事件,表示:tab 被選中時觸發

添加代碼:

<el-tabs v-model="activeIndex" :tab-position="'left'" :before-leave="beforeTabLeave"
     @tab-click="tabClicked">

tabClicked事件函數:

// tab 被選中時觸發
async tabClicked() {
     console.log(this.activeIndex) 
}

這時打印的是當前激活標簽的name,所以要判斷下當打印為1時,請求參數列表接口,獲取參數列表數據

// tab 被選中時觸發
async tabClicked() {
      console.log(this.activeIndex) // 當前激活標簽的name
      // 證明訪問的時動態參數面板
      if (this.activeIndex === '1') {
        const { data: res } = await this.$http.get(
          `categories/${this.addForm.goods_cat[2]}/attributes`,
          { params: { sel: 'many' } }
        )
        if (res.meta.status !== 200) {
          return this.$message.error('獲取參數列表失敗')
        }
        console.log(res)
        this.manyTableData = res.data
     }
}

this.addForm.goods_cat[2]這樣寫的太復雜,也可以定義一個計算屬性來實現:

methods:{
    // tab 被選中時觸發
    async tabClicked() {
      console.log(this.activeIndex) // 當前激活標簽的name
      // 證明訪問的時動態參數面板
      if (this.activeIndex === '1') {
        const { data: res } = await this.$http.get(
          `categories/${this.cateId}/attributes`,
          { params: { sel: 'many' } }
        )
        if (res.meta.status !== 200) {
          return this.$message.error('獲取動態參數列表失敗')
        }
        console.log(res)
        this.manyTableData = res.data
      }
    }
},
computed: {
    // 當前選中的三級分類ID
    cateId() {
      if (this.addForm.goods_cat.length === 3) {
        return this.addForm.goods_cat[2]
      }
      return null
    }
}

13、繪制商品參數面板中的復選框組件

先在商品參數的標簽中添加代碼:

<el-tab-pane label="商品參數" name="1">
        <!-- 渲染表單的item項 -->
        <el-form-item v-for="item in manyTableData" :key="item.attr_id"
         :label="item.attr_name">
        </el-form-item>
</el-tab-pane>

因為attr.vals是字符串,所以要在獲取到參數列表數據時,將數據進行for循環,每循環一次把item項用空格做分隔,重新賦值為數組的形式。

修改tabClicked函數:

// tab 被選中時觸發
async tabClicked() {
      console.log(this.activeIndex) // 當前激活標簽的name
      // 證明訪問的時動態參數面板
      if (this.activeIndex === '1') {
        const { data: res } = await this.$http.get(
          `categories/${this.cateId}/attributes`,
          { params: { sel: 'many' } }
        )
        if (res.meta.status !== 200) {
          return this.$message.error('獲取動態參數列表失敗')
        }
        console.log(res)
        // 循環data中的每一項,把attr_vals參數的字符串,重新賦值為item.attr_vals數組
        res.data.forEach(item => {
          item.attr_vals = item.attr_vals.length !== 0
            ? item.attr_vals.split(' ') : []
        })
        this.manyTableData = res.data
      }
}

然后需要用到Checkbox 多選框組件中,多選框組:適用于多個勾選框綁定到同一個數組的情景,通過是否勾選來表示這一組選項中選中的項。

checkbox-group元素能把多個 checkbox 管理為一組,只需要在 Group 中使用v-model綁定Array類型的變量即可。el-checkboxlabel屬性是該 checkbox 對應的值,若該標簽中無內容,則該屬性也充當 checkbox 按鈕后的介紹。label與數組中的元素值相對應,如果存在指定的值則為選中狀態,否則為不選中。

設置border屬性可以渲染為帶有邊框的多選框。

添加代碼:

<el-tab-pane label="商品參數" name="1">
        <!-- 渲染表單的item項 -->
        <el-form-item v-for="item in manyTableData" :key="item.attr_id"
         :label="item.attr_name">
          <!--復選框組-->
          <el-checkbox-group v-model="item.attr_vals">
            <el-checkbox :label="cb" v-for="(cb, i) in item.attr_vals"
             :key="i" border size="small"></el-checkbox>
          </el-checkbox-group>
        </el-form-item>
</el-tab-pane>

此時效果圖:

14、優化復選框的樣式

每個復選框的間隔過大,而且換行的話,第2行對不齊

添加樣式:

<style lang="less" scoped>
.el-checkbox{
margin: 0 10px 0 0 !important;
}
</style>

效果圖:

15、獲取靜態屬性列表

還是要調用api的參數列表接口,只不過參數變為靜態屬性的only

修改tabClicked函數,添加代碼:

// tab 被選中時觸發
async tabClicked() {
      console.log(this.activeIndex) // 當前激活標簽的name
      // 證明訪問的是動態參數面板
      if (this.activeIndex === '1') {
        const { data: res } = await this.$http.get(
          `categories/${this.cateId}/attributes`,
          { params: { sel: 'many' } }
        )
        if (res.meta.status !== 200) {
          return this.$message.error('獲取動態參數列表失敗')
        }
        console.log(res)
        // 循環data中的每一項,把attr_vals參數的字符串,重新賦值為item.attr_vals數組
        res.data.forEach(item => {
          item.attr_vals = item.attr_vals.length !== 0
            ? item.attr_vals.split(' ') : []
        })
        this.manyTableData = res.data
      } else if (this.activeIndex === '2') {
        // 證明訪問的是靜態屬性面板
        const { data: res } = await this.$http.get(
          `categories/${this.cateId}/attributes`,
          { params: { sel: 'only' } }
        )
        if (res.meta.status !== 200) {
          return this.$message.error('獲取靜態屬性列表失敗')
        }
        console.log(res)
        this.onlyTableData = res.data
      }
}

16、渲染商品屬性面板的UI結構

添加代碼:

<el-tab-pane label="商品屬性" name="2">
        <el-form-item v-for="item in onlyTableData" :key="item.attr_id" :label="item.attr_name">
          <el-input v-model="item.attr_vals"></el-input>
        </el-form-item>
</el-tab-pane>

效果圖:

17、初步使用upload上傳組件

Upload 上傳組件:通過點擊或者拖拽上傳文件

通過 slot 你可以傳入自定義的上傳按鈕類型和文字提示??赏ㄟ^設置limiton-exceed來限制上傳文件的個數和定義超出限制時的行為??赏ㄟ^設置before-remove來阻止文件移除操作。

action 必選參數,上傳的地址
on-preview 點擊文件列表中已上傳的文件時的鉤子 處理圖片預覽效果
on-remove 文件列表移除文件時的鉤子
list-type 文件列表的類型 指定預覽文件的類型

使用圖片列表縮略圖,復制代碼:

<el-tab-pane label="商品圖片" name="3">
        <!--上傳組件-->
        <!--action 表示圖片要上傳到的后臺API地址-->
        <el-upload :action="uploadURL" :on-preview="handlePreview"
        :on-remove="handleRemove" list-type="picture">
          <el-button size="small" type="primary">點擊上傳</el-button>
        </el-upload>
</el-tab-pane>

action表示圖片要上傳到的后臺API地址,需要圖片上傳接口的路徑,請求路徑:upload,請求方法:post,請求參數:file 上傳文件

data里添加:

// 上傳圖片的URL
uploadURL: 'http://127.0.0.1:8888/api/private/v1/upload'

18、手動給upload組件綁定headers請求頭

這時我們打開控制臺的Network,然后點擊上傳按鈕,隨便選擇一張圖片上傳。這時發現Previwe里的msg顯示無效token,狀態碼400,證明我們上傳失敗了

我們最開始的時候在mian.js文件里通過axios的request攔截器,給每一個請求都掛載了一個Authorization字段,里面的值就是'token'。

這就證明upload組件上傳的時候沒有用到axios請求。

查看element的upload文檔,有個headers屬性:設置上傳的請求頭部 object對象

添加代碼:

<!--上傳組件-->
<!--action 表示圖片要上傳到的后臺API地址-->
<el-upload :action="uploadURL" :on-preview="handlePreview"
        :on-remove="handleRemove" list-type="picture" :headers="headerObj">
          <el-button size="small" type="primary">點擊上傳</el-button>
</el-upload>

<script>
export default {
  data() {
    return {
      // 圖片上傳組件的headers請求頭對象
      headerObj: {
        Authorization: window.sessionStorage.getItem('token')
      }
    }
  }
}
</script>

刷新重新點擊上傳按鈕上傳圖片,查看控制臺效果:

19、監聽upload組件的on-success事件

查看api接口文檔,發現添加商品接口,其中一項參數pics:上傳的圖片臨時路徑(對象)

"pics":[
    {"pic":"/tmp_uploads/30f08d52c551ecb447277eae232304b8"}
],

我們剛才在控制臺里看到圖片上傳成功后服務器返回的信息,tmp_path字段里就是服務器保存的是圖片的臨時路徑。

我們下面需要做的就是監聽圖片上傳成功之后,把tmp_path的臨時路徑以對象的形式添加到pics數組中。

查看element文檔的upload組件,有個on-success事件:文件上傳成功時的鉤子函數,可以指定function(response, file, fileList) ,其中response代表服務器返回的數據,file是文件的信息,fileList是上次組件的文件列表。我們這里只用到response就行了。

在addForm對象中添加pics數組,然后添加on-success代碼:

<!--上傳組件-->
<!--action 表示圖片要上傳到的后臺API地址-->
<el-upload :action="uploadURL" :on-preview="handlePreview" :on-remove="handleRemove"
         list-type="picture" :headers="headerObj" :on-success="handleSuccess">
          <el-button size="small" type="primary">點擊上傳</el-button>
</el-upload>

<script>
export default {
  data() {
    return {
      // 添加商品的表單數據對象
      addForm: {
        goods_name: '',
        goods_price: 0,
        goods_weight: 0,
        goods_number: 0,
        goods_cat: [], // 商品所屬的分類數據
        pics: [] // 圖片的數組
      },
    }
  },
  methods: {
    // 監聽圖片上傳成功的事件
    handleSuccess(response) {
      console.log(response)
      // 1.拼接得到一個圖片信息對象
      const picInfo = { pic: response.data.tmp_path }
      // 2.將圖片信息對象,push到pics組數中
      this.addForm.pics.push(picInfo)
      console.log(this.addForm)
    }
  }
}
</script>

效果圖:

20、監聽upload組件的on-remove事件

1.獲取將要刪除的圖片的臨時路徑
2.從 pics 數組中,找到這個圖片對應的索引值
3.調用數組的 splice 方法,把圖片信息對象,從 pics 數組中刪除

代碼:

// 處理移除圖片的操作
handleRemove(file) {
      // console.log(file)
      // 1.獲取將要刪除的圖片的臨時路徑
      const filePaht = file.response.data.tmp_path
      // 2.從 pics 數組中,找到這個圖片對應的索引值
      const i = this.addForm.pics.findIndex(x => x.pic === filePaht) // x 代表數組的每一項
      // 3.調用數組的 splice 方法,把圖片信息對象,從 pics 數組中移除
      this.addForm.pics.splice(i, 1)
      console.log(this.addForm)
},

21、實現圖片的預覽效果

添加代碼:

<!--圖片預覽對話框-->
<el-dialog title="圖片預覽" :visible.sync="previewVisible" width="50%" >
    <!--內容主體區域-->
    <img width="100%" :src="picUrl" alt="">
</el-dialog>

<script>
export default {
  data() {
    return {
      picUrl: '', // 圖片預覽路徑
      previewVisible: false // 控制圖片預覽對話框是否顯示
    }
  },
  methods: {
    // 處理圖片預覽效果
    handlePreview(file) {
      console.log(file)
      this.picUrl = file.response.data.url
      this.previewVisible = true
    },
  }
}
</script>

現在上傳圖片后,點擊圖片名稱,就可以實現預覽了。

22、安裝并配置vue-quill-editor

Vue-Quill-Editor:

基于 Quill、適用于 Vue 的富文本編輯器,支持服務端渲染和單頁應用。

打開可視化工具,在左側菜單點擊依賴,然后點擊安裝依賴,在運行依賴里面搜索vue-quill-editor,進行安裝。

在全局注冊為全局可用的組件,在main.js文件里添加:

// 導入富文本編輯器
import VueQuillEditor from 'vue-quill-editor'
// 導入富文本編輯器對應的樣式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
// 將富文本編輯器注冊為全局可用的組件
Vue.use(VueQuillEditor)

回到Add.vue文件中添加代碼:

<el-tab-pane label="商品內容" name="4">
        <!--富文本編輯器組件-->
        <quill-editor v-model="addForm.goods_introduce"></quill-editor>
</el-tab-pane>

<script>
export default {
  data() {
    return {
      // 添加商品的表單數據對象
      addForm: {
        goods_name: '',
        goods_price: 0,
        goods_weight: 0,
        goods_number: 0,
        goods_cat: [], // 商品所屬的分類數據
        pics: [], // 圖片的數組
        goods_introduce: '' // 商品的詳情描述
      },
    }
  }
}
</script>

需要在全局樣式golbal.css中指定富文本編輯器的最小高度:

.ql-editor{min-height: 300px;}

然后在編輯器下面還需要一個添加商品的按鈕:

<el-tab-pane label="商品內容" name="4">
        <!--富文本編輯器組件-->
        <quill-editor v-model="addForm.goods_introduce"></quill-editor>
        <!--添加商品按鈕-->
        <el-button type="primary" @click="addGoods" class="btnAdd">添加商品</el-button>
</el-tab-pane>

<style lang="less" scoped>
.btnAdd{margin-top: 15px;}
</style>

此時效果圖:

23、實現表單數據的預驗證

給添加商品按鈕添加點擊事件:

<!--添加商品按鈕-->
<el-button type="primary" @click="addGoods" class="btnAdd">添加商品</el-button>

addGoods函數:

// 點擊按鈕,添加商品
addGoods() {this.$refs.addFormRef.validate(async valid => {
        // 預校驗
        if (!valid) {
          return this.$message.error('請填寫必要的表單項')
        }
        // 執行添加的業務邏輯
      })
}

24、把goods_cat從數組轉換為字符串

添加商品需要調用api的添加商品接口,請求路徑:goods,請求方法:post
請求參數:
goods_name | 商品名稱 | 不能為空 |
goods_cat | 以為','分割的分類列表 | 不能為空 |
goods_price | 價格 | 不能為空 |
goods_number | 數量 | 不能為空 |
goods_weight | 重量 | 不能為空 |
goods_introduce | 介紹 | 可以為空 |
pics | 上傳的圖片臨時路徑(對象) | 可以為空 |
attrs | 商品的參數(數組),包含 `動態參數` 和 `靜態屬性` | 可以為空 |

因為接口文檔里,goods_cat參數要以為','分割的字符串類型,我們保存的是數組類型,所以需要轉換下

// 點擊按鈕,添加商品
addGoods() {
      this.$refs.addFormRef.validate(async valid => {
        // 預校驗
        if (!valid) {
          return this.$message.error('請填寫必要的表單項')
        }
        // 執行添加的業務邏輯
        console.log(this.addForm)
        this.addForm.goods_cat = this.addForm.goods_cat.join(',')
      })
}

這時已經把goods_cat的值轉成了字符串類型,但是在上面級聯選擇器代碼中,v-model="addForm.goods_cat",這里綁定的是數組類型,這里會報錯。(新版沒報錯)

所以需要lodashcloneDeep(obj)。

_.cloneDeep(value) 這個方法類似 _.clone,除了它會遞歸拷貝 value。(也叫深拷貝)。

還是打開可視化工具,添加運行依賴,搜索“lodash”,進行安裝。

在本頁面進行導入,并添加代碼:

<script>
import _ from 'lodash'

export default {
  methods: {
    // 點擊按鈕,添加商品
    addGoods() {
      this.$refs.addFormRef.validate(async valid => {
        // 預校驗
        if (!valid) {
          return this.$message.error('請填寫必要的表單項')
        }
        // 執行添加的業務邏輯
        console.log(this.addForm)
        // this.addForm.goods_cat = this.addForm.goods_cat.join(',')
        // lodash cloneDeep(obj) 深拷貝,復制為新對象
        const form = _.cloneDeep(this.addForm)
        form.goods_cat = form.goods_cat.join(',')
        console.log(form)
      })
    }
  }
}
</script>

25、處理attrs數組

attrs 商品的參數(數組),包含 `動態參數` 和 `靜態屬性`

"attrs":[
    {
      "attr_id":15,
      "attr_value":"ddd"
    },
    {
      "attr_id":15,
      "attr_value":"eee"
    }
]

首先要把 attrs 添加到 addForm 對象中,然后分別循環manyTableData 和onlyTableData,并把他們中的每一項進行處理,最后push到attrs數組中。

// 點擊按鈕,添加商品
addGoods() {
      this.$refs.addFormRef.validate(async valid => {
        // 預校驗
        if (!valid) {
          return this.$message.error('請填寫必要的表單項')
        }
        // 執行添加的業務邏輯
        console.log(this.addForm)
        // this.addForm.goods_cat = this.addForm.goods_cat.join(',')
        // lodash cloneDeep(obj) 深拷貝,復制為新對象
        const form = _.cloneDeep(this.addForm)
        form.goods_cat = form.goods_cat.join(',')
        console.log(form)
        // 處理動態參數
        console.log(this.manyTableData)
        this.manyTableData.forEach(item => {
          const newInfo = { attr_id: item.attr_id, attr_value: item.attr_vals.join(' ') }
          this.addForm.attrs.push(newInfo)
        })
        // 處理靜態屬性
        this.onlyTableData.forEach(item => {
          this.addForm.attrs.push({ attr_id: item.attr_id, attr_value: item.attr_vals })
        })
        form.attrs = this.addForm.attrs
        console.log(form)
      })
}

26、完成添加商品的操作

在上面代碼下發起網絡請求:

// 點擊按鈕,添加商品
addGoods() {
      this.$refs.addFormRef.validate(async valid => {
        // 預校驗
        if (!valid) {
          return this.$message.error('請填寫必要的表單項')
        }
        // 執行添加的業務邏輯
        console.log(this.addForm)
        // this.addForm.goods_cat = this.addForm.goods_cat.join(',')
        // lodash cloneDeep(obj) 深拷貝,復制為新對象
        const form = _.cloneDeep(this.addForm)
        form.goods_cat = form.goods_cat.join(',')
        console.log(form)
        // 處理動態參數
        console.log(this.manyTableData)
        this.manyTableData.forEach(item => {
          const newInfo = { attr_id: item.attr_id, attr_value: item.attr_vals.join(' ') }
          this.addForm.attrs.push(newInfo)
        })
        // 處理靜態屬性
        this.onlyTableData.forEach(item => {
          this.addForm.attrs.push({ attr_id: item.attr_id, attr_value: item.attr_vals })
        })
        form.attrs = this.addForm.attrs
        console.log(form)
        // 請求服務器接口,添加商品
        const { data: res } = await this.$http.post('goods', form)
        if (res.meta.status !== 201) {
          return this.$message.error('添加商品失敗!')
        }
        this.$message.success('添加商品成功!')
        // 路由導航對象.push函數,跳轉到指定的路由頁面
        this.$router.push('/goods')
      })
}

添加成功后,跳轉到商品列表頁,效果圖:

27、將goods_list分支的代碼合并,并推送到遠程

goods_list分支提交到本地倉庫,并推送到遠程:

git branch
git add .
git commit -m "完成了商品功能的開發"
git push

合并到master,并推送到遠程:

git branch
git checkout master
git merge goods_list
git push

總結

以上是生活随笔為你收集整理的Vue + ElementUI的电商管理系统实例14 商品列表-添加商品的全部內容,希望文章能夠幫你解決所遇到的問題。

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

97国产超碰| 在线蜜桃视频 | 日韩电影在线视频 | 国产123区在线观看 国产精品麻豆91 | 九九视频这里只有精品 | 91精品区| 中文字幕在线看视频国产中文版 | 一级一片免费视频 | 免费日韩 精品中文字幕视频在线 | 精品国自产在线观看 | 国产老妇av | 欧美一区二区三区在线视频观看 | 97超碰人| 国语黄色片 | 中文字幕在线观看视频一区 | 国产精品美女www爽爽爽视频 | 欧美日韩久久一区 | 开心激情久久 | 91成人网在线观看 | 九九爱免费视频在线观看 | 香蕉看片| 亚洲综合五月 | 超碰在线天天 | 婷婷激情综合五月天 | 一级片免费视频 | 国产亚洲精品久久久网站好莱 | 国产又粗又猛又爽又黄的视频先 | 日韩免费不卡视频 | 一区二区三区在线播放 | 激情综合五月 | 久久女同性恋中文字幕 | 成人在线视频你懂的 | 干天天 | 色香天天 | 天天操天天射天天操 | 在线观看日韩免费视频 | 91在线看视频 | 久热av | 日韩中文字幕免费视频 | 一区二区 不卡 | 天天干天天做天天操 | 日韩午夜av电影 | 免费久久99精品国产婷婷六月 | 午夜av免费看 | 日韩免费高清在线观看 | www.成人精品 | 成人网大片 | 超碰在线官网 | 久久精品网站免费观看 | 久久免费的精品国产v∧ | 蜜臀av免费一区二区三区 | 国产精品com | 成人av高清在线观看 | 婷婷国产v亚洲v欧美久久 | 欧美日韩精品在线视频 | 国产成人在线精品 | 久久久精品一区二区三区 | 911免费视频 | 亚洲精品国产精品乱码在线观看 | 一级黄毛片 | 久久99国产精品久久99 | 国产亚洲91 | 国产亚洲精品成人av久久影院 | 日韩欧美久久 | 在线免费黄色av | 久草爱 | 精品产品国产在线不卡 | 欧美一区在线观看视频 | 高清不卡一区二区在线 | www.五月天色| 国产小视频精品 | 狠狠成人 | a在线一区| 99久久国产免费,99久久国产免费大片 | 成人av av在线 | 亚洲国产中文字幕在线观看 | 国产99在线 | 97在线超碰 | 欧美成人黄色 | 日韩有码网站 | 天堂av在线免费观看 | 99在线精品视频在线观看 | 国产手机视频在线播放 | 国产在线2020 | 日韩国产欧美在线视频 | 狠狠躁18三区二区一区ai明星 | www.天天干.com | 三级视频日韩 | 天天操狠狠操 | 亚洲精品高清视频 | 狠狠网 | 国产91综合一区在线观看 | 欧美日韩一区二区免费在线观看 | 欧美性大胆 | 青青河边草免费直播 | 91九色成人蝌蚪首页 | 91福利在线观看 | 欧美久久久久久久 | 五月黄色| 久久精品视频2 | 一区二区三区四区五区六区 | 久久这里只有精品23 | 69热国产视频 | 在线国产一区 | 久久夜色精品国产欧美一区麻豆 | 午夜精品婷婷 | 国产精美视频 | av电影免费在线 | 日韩伦理片hd | 在线免费黄色 | 欧美一区二区三区激情视频 | 福利在线看片 | 天天爱天天射天天干天天 | 伊人五月综合 | av免费观看网站 | 天堂av在线免费 | 久草在线手机观看 | 国产精品国内免费一区二区三区 | 国产美女网站在线观看 | av一区二区在线观看中文字幕 | 亚洲男男gaygay无套同网址 | 91久久久国产精品 | 国产一级一级国产 | 深爱五月网 | 国产在线中文 | 国产高清第一页 | 久草免费在线观看视频 | 久久久久国产精品www | 草久在线播放 | 激情综合色图 | 午夜美女福利 | 五月婷婷狠狠 | 久久综合久久综合九色 | 中文字幕视频免费观看 | 白丝av在线 | 欧美久久久久久久久 | 国产999精品视频 | 国产99爱 | 97天堂 | 香蕉视频久久久 | 高清中文字幕av | 久久人91精品久久久久久不卡 | 免费裸体视频网 | 国产黄色免费电影 | 日韩高清在线一区二区 | 亚洲不卡av一区二区三区 | 国产精品一区二区免费在线观看 | 四虎在线观看视频 | 国产精品女主播一区二区三区 | 精品免费观看 | 国产一线天在线观看 | 国产在线理论片 | 久久天堂网站 | 91麻豆精品国产91久久久无需广告 | 亚洲在线激情 | 亚洲成av人片在线观看无 | 高潮久久久久久久久 | 91在线porny国产在线看 | 欧美日韩高清国产 | 亚洲成a人片在线www | 久久精品国产成人精品 | 一区 在线 影院 | 欧美日韩久久不卡 | 亚洲一区尤物 | 天天插天天干 | 韩国av免费观看 | 免费在线观看一区二区三区 | 国产免费不卡av | 丝袜美腿在线视频 | 欧美性天天 | 久久精品爱爱视频 | 五月天六月色 | 婷婷www | 综合铜03| 日韩视频中文字幕 | 天天操天天插 | 中文字幕91在线 | 午夜av色 | 免费手机黄色网址 | a特级毛片 | 三级黄色理论片 | 国产糖心vlog在线观看 | 精品视频在线免费观看 | 亚洲激情视频 | 美女久久久久 | 久久免费的视频 | 99久高清在线观看视频99精品热在线观看视频 | 精品国产免费一区二区三区五区 | 国产精品99久久久久久武松影视 | 久久激情五月激情 | 国产视频资源在线观看 | 黄色免费视频在线观看 | 亚洲精品福利视频 | 亚洲国产久 | 国产精品igao视频网网址 | 久久久久久久久久网站 | 99 色| 在线观看av免费 | 国产精品电影一区二区 | 亚洲精品国久久99热 | 亚洲va综合va国产va中文 | 日韩欧美xxxx | 亚洲成人精品在线观看 | 色综合久久久久综合体 | 欧美天堂影院 | 久久首页 | 国产日韩欧美在线观看 | 免费观看一级一片 | 色婷婷综合在线 | 性日韩欧美在线视频 | 久久这里只有精品23 | 黄色在线小网站 | 欧洲激情在线 | 最新国产精品拍自在线播放 | 国产麻豆电影在线观看 | japanese黑人亚洲人4k | 久久久精品高清 | 91成人网在线观看 | 久久激情综合网 | 丁香久久五月 | 久久国产午夜精品理论片最新版本 | 日韩免费中文字幕 | 91欧美精品 | 亚洲综合色视频在线观看 | 国产精品久久久久久久午夜片 | www.色午夜.com | 色狠狠综合天天综合综合 | 日韩,中文字幕 | 伊人五月天.com | 中文字幕av日韩 | 夜色资源站国产www在线视频 | 天天干天天操天天爱 | 国产91av视频在线观看 | 国产亚洲精品久久久久久无几年桃 | 亚洲男男gaygay无套 | 黄色avwww| 婷婷综合五月天 | 国产精品第| 五月婷在线视频 | 亚洲精品国产拍在线 | 国产91精品在线播放 | 成人午夜电影久久影院 | 激情婷婷综合网 | 午夜精品一二三区 | 丰满少妇一级 | 日韩激情视频在线 | 国产中年夫妇高潮精品视频 | 成人一区二区三区中文字幕 | 激情五月婷婷综合 | 伊甸园永久入口www 99热 精品在线 | 色狠狠操| av片一区二区 | 中国美女一级看片 | 久久尤物电影视频在线观看 | av在线一 | 91精品视频一区二区三区 | 欧美日韩精品网站 | 国产在线久久久 | 丁香婷婷综合网 | 国产精品成久久久久三级 | 久久久综合香蕉尹人综合网 | 日操干 | 国产成人免费高清 | 看av免费网站 | 肉色欧美久久久久久久免费看 | 亚洲成av人影片在线观看 | 婷婷国产一区二区三区 | 亚洲黄色免费在线看 | 国产精品午夜在线 | 2018精品视频 | 青青久草在线 | 亚洲免费av电影 | 久久亚洲二区 | av官网在线| 成人在线观看资源 | 日韩欧美视频免费看 | 欧美性生活小视频 | 欧美淫aaa免费观看 日韩激情免费视频 | 久久久久久免费视频 | 在线观看岛国片 | 九九热.com| 日韩av午夜在线观看 | 久久国产午夜精品理论片最新版本 | 国产99久| 亚洲国产成人久久综合 | 亚洲成人国产 | 91porny九色91啦中文 | 国产 中文 日韩 欧美 | 亚洲三级黄 | 国产精品毛片一区视频播 | 4p变态网欧美系列 | 91麻豆高清视频 | 精品久久一区二区 | 亚洲国产精品成人女人久久 | 久久久久综合网 | 久久视频在线观看 | 国产一级淫片在线观看 | 亚洲精品黄色在线观看 | 99热超碰 | www久久久久| 成人av免费在线观看 | 色综合久久99 | 免费观看视频的网站 | av色图天堂网 | 五月天六月婷 | 国产成人精品一区二区在线观看 | 欧美爽爽爽 | 日韩一区二区三区视频在线 | 99精品国产高清在线观看 | 久久精品久久久久电影 | 久久久久久久久久久久久国产精品 | 啪一啪在线 | 国内精品久久久久影院优 | 亚洲成av人影片在线观看 | 欧美日韩国产成人 | 综合影视 | 69久久99精品久久久久婷婷 | 不卡的av电影| 久久精品视频18 | 九九热av | 丁香 婷婷 激情 | 亚洲视频免费在线观看 | 香蕉视频色 | 欧美日韩国产在线精品 | 91天堂影院| 成人黄在线 | 国产成人福利片 | 国产一区电影在线观看 | 日韩欧美69 | 中文字幕中文字幕在线中文字幕三区 | 91日韩在线专区 | 人人网av | 国产高清在线免费 | 中文字幕av网站 | 夜夜高潮夜夜爽国产伦精品 | 精品一区二区在线观看 | 久久久www成人免费精品 | 男女拍拍免费视频 | 97成人在线 | 亚洲精品在线观看免费 | 欧美精品免费在线 | 在线91av| 婷婷伊人综合 | 久久久精品| 亚洲高清视频在线 | 韩日精品视频 | 久久久久久麻豆 | 国产在线精品播放 | 国产剧情av在线播放 | 中文字幕在线观看免费高清电影 | 国内精品免费久久影院 | 日韩系列 | 日本中出在线观看 | 深爱激情婷婷网 | 黄色在线观看网站 | 日韩高清不卡一区二区三区 | 在线视频你懂 | 中文在线字幕观看电影 | 狠狠狠狠狠操 | 国产成人久久精品77777综合 | 国产91在线播放 | 久草在线免费在线观看 | 午夜影院一级片 | 成人午夜在线电影 | 91最新国产 | 久久精品99国产精品酒店日本 | 国产精品高潮呻吟久久久久 | 在线播放视频一区 | 久草在线免费电影 | 国产剧在线观看片 | 91超级碰| 欧美一区二区三区在线看 | 99综合电影在线视频 | 国产亚洲视频在线 | 激情自拍av | 最近的中文字幕大全免费版 | 91自拍成人 | 国产精品免费av | 精品国产电影一区 | av一二三区 | 亚洲在线不卡 | 国产清纯在线 | 怡红院成人在线 | 日日夜夜网站 | 亚洲精品乱码久久久久久写真 | 99国产视频在线 | 日韩av电影免费观看 | 97av在线 | 亚洲亚洲精品在线观看 | 黄色avwww| 精品欧美一区二区三区久久久 | 四虎影视成人精品国库在线观看 | 在线观看小视频 | 婷婷久久一区二区三区 | 91香蕉视频| 久久九九久久精品 | 91精品综合在线观看 | 亚洲国产av精品毛片鲁大师 | 国产精品一码二码三码在线 | 波多野结衣日韩 | 精品国模一区二区三区 | 久久久久综合精品福利啪啪 | 国产视频亚洲精品 | 色天天久久 | 国产夫妻性生活自拍 | 成年人在线看视频 | 中文字幕之中文字幕 | 国产视频2区 | 国产精品s色 | 一区二区三区 中文字幕 | 久久黄色小说视频 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 久久精品免费 | 日韩va亚洲va欧美va久久 | 国产色女人 | 973理论片235影院9 | 国产在线91在线电影 | 国产精品毛片一区 | 欧美日韩国产精品一区二区三区 | 久久免费在线观看 | 成人久久亚洲 | 国产一及片 | 成人av电影在线 | 国产精品99久久久久 | 亚洲在线免费视频 | 亚洲午夜激情网 | 日韩免费在线观看视频 | 天堂av中文字幕 | 午夜久久网 | 久久这里只有精品9 | 久久国产精品色婷婷 | 天天色宗合| 美女黄频免费 | 蜜臀av性久久久久av蜜臀妖精 | 91麻豆精品一区二区三区 | 亚洲精品一区二区三区四区高清 | 日韩精品在线免费观看 | 久久精品黄色 | 国产99免费 | 久久爱导航 | 一区二区三区手机在线观看 | 日韩中文在线视频 | 欧美成a人片在线观看久 | 国产男女爽爽爽免费视频 | 在线视频1卡二卡三卡 | 久久婷亚洲五月一区天天躁 | 国产中文字幕在线看 | 在线综合色| 特级西西444www高清大视频 | av一区二区三区在线 | 最近中文字幕mv免费高清在线 | 久久99婷婷 | 国产中文字幕一区二区 | 一区二区视频在线播放 | 99久久99视频只有精品 | 欧美日韩午夜在线 | 99精品免费 | 在线观看视频在线 | 国产三级精品在线 | 国产中文字幕视频在线 | 久久精品一区二区三区国产主播 | 美女视频黄免费网站 | 福利视频区| 国产一区二区在线免费观看 | 日日操日日操 | 一级α片 | 日本久久高清视频 | 中文字幕乱码电影 | 色资源中文字幕 | 亚洲国产精彩中文乱码av | 超碰精品在线 | 九九精品毛片 | 在线观看视频一区二区 | 国产精品久久99综合免费观看尤物 | 亚洲激情在线观看 | 在线免费观看欧美日韩 | 丁香影院在线 | 狠狠操电影网 | 精品毛片一区二区免费看 | 涩涩伊人 | 国产手机在线播放 | 成人久久久久久久久久 | 在线免费av电影 | 天天干天天干天天射 | 久久99热精品这里久久精品 | 欧美日韩免费一区二区 | 综合国产在线 | 韩日精品在线观看 | 女人高潮一级片 | 99久久精品免费看国产一区二区三区 | 久久久久久久久福利 | 中午字幕在线 | 欧美成a人片在线观看久 | 伊人国产视频 | 亚洲国产成人在线观看 | 亚洲爱av | 久草综合在线 | 欧美日韩在线第一页 | 国产精品久久久久久久久久新婚 | 人人爱天天操 | 精产嫩模国品一二三区 | 97免费在线观看视频 | 天天搞天天干 | 五月综合色 | 91麻豆精品国产91久久久使用方法 | 国产九九热视频 | 亚洲综合在线发布 | 亚洲麻豆精品 | 国产免费三级在线观看 | 激情欧美日韩一区二区 | 成人免费在线电影 | av一级片| 亚洲国产精品99久久久久久久久 | 色搞搞 | 97日日碰人人模人人澡分享吧 | 成人午夜av电影 | 亚洲涩涩涩涩涩涩 | 国产在线久草 | 成人四虎影院 | 9797在线看片亚洲精品 | 久草在线免费看视频 | 日韩久久精品一区 | 成人在线播放免费观看 | 国产黄在线播放 | 69av久久| 亚洲欧美成人在线 | 五月天激情开心 | 激情视频在线高清看 | 亚洲第一区在线观看 | 欧美日韩精品在线免费观看 | 黄色片视频在线观看 | 午夜av日韩| 国产亚洲va综合人人澡精品 | 97av影院| 国产无遮挡又黄又爽在线观看 | 国产福利精品一区二区 | 国内精品久久久久久久久久久 | 91理论电影| 久久成人久久 | 久久精选视频 | 精品视频999 | 在线免费视频一区 | 午夜精品久久久久久久99水蜜桃 | 久久久久成人精品 | 在线观看av免费 | 999日韩 | 欧美一级片免费在线观看 | 精品一二三四在线 | 一区二区三区高清不卡 | 日批视频在线观看免费 | 在线播放一区 | 国产亚洲精品女人久久久久久 | 国产视频资源 | 操操操综合| 亚洲国产中文字幕在线 | 亚洲精品综合一二三区在线观看 | 四川bbb搡bbb爽爽视频 | 亚洲黄色区| 国产成人精品综合久久久久99 | 五月开心激情网 | www久久久| av天天色 | 深爱婷婷激情 | 毛片网站免费在线观看 | 精品亚洲国产视频 | 久久免费视频这里只有精品 | 亚洲视频综合在线 | 精品国产乱子伦一区二区 | 国产午夜精品免费一区二区三区视频 | 久久国产精品99国产精 | 在线观看视频你懂 | 天天av天天 | 国产一区二区高清不卡 | 在线观看视频免费播放 | 天天操天天舔天天干 | 国产免费中文字幕 | 97精产国品一二三产区在线 | 一区二区视频在线看 | 久久黄色精品视频 | 亚洲日本国产精品 | 日韩av进入 | 日本最新一区二区三区 | 久久综合导航 | 韩国精品视频在线观看 | 国色天香在线 | 日韩一区二区三区在线观看 | 亚洲精品av在线 | 日本婷婷色| 97精品国产97久久久久久免费 | 日本中文字幕高清 | 久久国际影院 | 天天拍天天草 | 91精品久久久久久久99蜜桃 | 天天综合入口 | 九九免费观看全部免费视频 | 国产中文字幕一区二区 | 天天操天天色天天射 | 免费日韩一区 | 美女久久99 | 99视频精品免费视频 | 欧美高清视频不卡网 | 中文字幕视频一区二区 | 免费色av | 天天射天天爱天天干 | 成人h动漫在线看 | 日日草天天草 | bbb搡bbb爽爽爽 | 九九99视频 | 亚洲欧洲久久久 | 日韩精品在线视频免费观看 | 99久久婷婷| 69国产盗摄一区二区三区五区 | 天天躁日日躁狠狠躁av中文 | 国产精品一区二区三区久久 | 亚洲欧美色婷婷 | 99精品在线播放 | 超碰人人国产 | 国产视频资源 | 国产精品一区二区三区电影 | 四虎在线免费观看 | 午夜99| 日韩免费在线一区 | 免费在线电影网址大全 | 97**国产露脸精品国产 | 免费观看91视频 | 天天操天天舔天天干 | 国产一区二区电影在线观看 | 亚洲自拍av在线 | 亚洲男男gaygay无套 | 日本久久综合网 | 伊人资源站 | 91精品91 | 日日夜夜干 | 视频在线91 | 婷婷在线观看视频 | 亚洲专区免费观看 | 欧美在线视频不卡 | 国产一区二区在线播放 | 久久国产精品第一页 | 久影院| 国产精品久久久久久久久大全 | 成年人国产视频 | 午夜日b视频| 午夜视频在线观看一区二区 | 精品国产大片 | 久久有精品 | 国产va在线观看免费 | 2018亚洲男人天堂 | 久久久久久黄色 | 成人免费在线观看入口 | 人人爽人人av | 中文av日韩 | 97视频网站 | 国产真实在线 | 91手机电影 | 久久国产欧美日韩 | 天天操天天操天天操 | 成人在线观看免费 | 久久夜夜爽| 国产婷婷精品 | 精品人人人 | 成人久久久久 | 一级黄色视屏 | 九九亚洲视频 | 992tv在线成人免费观看 | 91丨porny丨九色 | 久久免费av电影 | 波多野结衣综合网 | 国产亚洲精品v | 日韩婷婷 | 日韩毛片在线一区二区毛片 | 999国产在线 | 婷婷色综合色 | av高清在线观看 | 97视频免费看 | 久久久综合电影 | 亚洲精品麻豆视频 | 国产视频亚洲精品 | 久久在线免费 | 亚洲伊人婷婷 | 丰满少妇在线观看资源站 | 日本资源中文字幕在线 | 最近日本韩国中文字幕 | 免费在线观看黄 | 在线观看中文av | 婷婷久久亚洲 | 欧洲激情在线 | 51精品国自产在线 | 日日摸日日添日日躁av | 久久成人国产精品一区二区 | 久久婷五月 | 91综合久久一区二区 | 看片的网址 | 91九色视频导航 | 欧美坐爱视频 | 国产91免费在线观看 | 97视频免费看 | 欧美一级免费在线 | 国产精品资源在线观看 | 欧美精品久久久久久久久久丰满 | 日本激情视频中文字幕 | av成人免费观看 | 午夜视频色 | 深夜视频久久 | 黄色亚洲大片免费在线观看 | 99精品视频在线免费观看 | aaa日本高清在线播放免费观看 | 少妇自拍av | 91色九色| 日韩一区二区三区在线看 | 日本3级在线观看 | 亚洲专区在线视频 | 91私密视频 | 涩涩网站在线 | 91人人爱| 丁香婷婷综合网 | 在线观看av国产 | 热久久视久久精品18亚洲精品 | 日韩艹 | 久久久久影视 | 又大又硬又黄又爽视频在线观看 | 日韩午夜在线 | 人人澡人人爱 | 奇米影视8888在线观看大全免费 | 夜夜操网 | www.亚洲黄色 | 精品在线播放视频 | 国产麻豆视频免费观看 | 久久久综合精品 | 好看av在线| 在线观看视频91 | 超碰97成人 | 91日韩在线视频 | 亚洲日本va午夜在线影院 | 亚洲午夜小视频 | 欧美精品一区二区蜜臀亚洲 | 国产在线污 | 久久免费毛片视频 | 在线播放国产一区二区三区 | 国产区精品在线 | 一区二区电影在线观看 | 欧美成人免费在线 | 久久精品视频免费 | 亚洲精品在线观看不卡 | 亚洲综合日韩在线 | 香蕉视频在线免费 | 香蕉97视频观看在线观看 | 国产精久久久 | 亚洲另类视频在线观看 | 久久涩视频 | 精品一区欧美 | 欧美日韩3p | 91桃色免费视频 | av女优中文字幕在线观看 | 狠狠操狠狠| 91成人久久| 制服丝袜在线91 | 成人av电影在线 | 色九色 | 久久夜色精品国产欧美一区麻豆 | 天天搞天天干天天色 | 日韩中文字幕在线观看 | 国产精品国产三级国产aⅴ无密码 | sesese图片| www99精品 | av免费播放| 天天操天天谢 | 久久精品亚洲综合专区 | 精品天堂av | 国产一级片免费观看 | 婷婷激情小说网 | 亚洲午夜久久久久久久久电影网 | 成人影片免费 | 97成人啪啪网 | 麻豆免费在线视频 | 999视频网站 | 久久久久久中文字幕 | 狠狠的日 | 久久综合久久综合久久 | 夜夜视频资源 | 操操操人人人 | 91最新在线观看 | 日韩色区| 免费开视频 | 国产美女精品视频 | 麻豆视频免费播放 | 91精品国产自产在线观看永久 | 久草在线免费在线观看 | 国产91影院 | 亚洲精品www久久久久久 | 人成午夜视频 | 亚洲伊人av | 亚洲日本精品 | 最近日本中文字幕 | 人人盈棋牌 | 亚洲成a人片在线观看网站口工 | 国产高清亚洲 | av中文字幕网址 | 国产不卡毛片 | 亚洲少妇天堂 | 免费成人av | 欧美日韩国产高清视频 | 瑞典xxxx性hd极品 | 亚洲成人在线免费 | 五月在线| 日韩欧美一区二区在线播放 | 日韩欧美精品一区 | 国内精品久久久久久 | 久草在线在线视频 | 久久久久激情电影 | 国产精品va在线观看入 | 免费高清男女打扑克视频 | 美女久久 | 色av资源网 | www.天天干.com| 丁香六月色 | 超碰激情在线 | 在线观看黄色 | 久久精品一区二区三区中文字幕 | 国产黄色一级大片 | 超碰在线官网 | 久久免费在线观看视频 | 97视频在线观看网址 | 亚洲成人中文在线 | 欧美乱大交 | 奇米影视777四色米奇影院 | 国产原创中文在线 | 欧美性生活一级片 | 日本中文字幕电影在线免费观看 | 欧美日韩一区二区三区在线观看视频 | 亚洲精品久久久久58 | 亚洲人片在线观看 | 中文字幕在线网址 | 91毛片在线观看 | 亚洲欧洲精品一区 | 国产成人精品综合久久久 | 97精产国品一二三产区在线 | 毛片网站免费 | 亚洲国产精品激情在线观看 | 西西大胆啪啪 | 国产精品手机看片 | 精品国产一区二区三区四区vr | 最新av网址在线观看 | 中文字幕亚洲字幕 | 国产二区免费视频 | 精品福利网 | 国产最新在线观看 | 国产精品 日韩 欧美 | 不卡国产在线 | 久久伦理电影 | 亚洲免费av片 | 免费麻豆视频 | 成人av在线直播 | 午夜精品久久久久99热app | 免费黄色av. | 涩五月婷婷| 99视频偷窥在线精品国自产拍 | 深夜国产在线 | 国产又黄又爽又猛视频日本 | 中文字幕在线播出 | 丰满少妇在线观看资源站 | www.成人精品 | 在线观看国产亚洲 | 97精品国产97久久久久久久久久久久 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 91日韩精品视频 | 97成人精品视频在线播放 | 国产又粗又猛又黄又爽 | 精品国产福利在线 | 婷婷伊人综合 | av天天草 | 免费精品在线视频 | 天天av资源| 国产精品久久久久久五月尺 | av不卡中文| 午夜国产在线观看 | 久久久久久久久久久久久影院 | 精品一区av | 天天爽人人爽夜夜爽 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产在线观看你懂的 | 国产精品12345 | 91麻豆精品国产自产 | 亚洲一区av | 一区 二区 精品 | 亚洲综合国产精品 | 国产精品日韩欧美 | 欧美大片aaa| 亚洲成人一二三 | 久久久国产一区二区三区四区小说 | 色婷婷视频在线 | 91精品在线视频 | 成人日批视频 | 在线国产高清 | 国产永久网站 | 国产人免费人成免费视频 | 国产免费中文字幕 | 2020天天干天天操 | 国产精品久久久久久久婷婷 | 久草免费资源 | 人人玩人人添人人澡超碰 | 成年人在线 | 国产精品久久久久久婷婷天堂 | 97韩国电影| 久章草在线观看 | 亚洲国产一二三 | 国产精品青草综合久久久久99 | 欧美视屏一区二区 | 91新人在线观看 | 黄色av一级片 | 欧美久久成人 | 99久久er热在这里只有精品15 | 97超碰人人澡人人爱 | 精品久久久久久国产 | 久久亚洲区| 国产69久久久 | 日日夜操 | 亚洲精品日韩一区二区电影 | 在线视频 国产 日韩 | 久久99久久99精品免视看婷婷 | 亚洲欧美在线观看视频 | 亚洲国产精品激情在线观看 | 福利av在线 | 深夜成人av | 日本黄色免费网站 | 成人免费网站视频 | 国产精品99蜜臀久久不卡二区 | 久久久精品欧美一区二区免费 | 丰满少妇久久久 | 一区二区电影在线观看 | 在线精品视频免费播放 | 91精品天码美女少妇 | 99久久精品国产欧美主题曲 | 久久人人97超碰国产公开结果 | 毛片a级片 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲成av人片在线观看www | 欧美一二三专区 | 麻豆国产视频 | 国产精品九色 | 免费观看一区二区 | 欧美色一色 | 久久综合欧美精品亚洲一区 | 日韩专区在线播放 | 国产精品日韩在线观看 | 久久久久久久久久久久久久电影 | 亚洲永久精品一区 | 久久久精品99 | 天天操天天插 | 午夜日b视频 | 久久国产电影院 | 热久久精品在线 | 在线亚州 | 在线激情影院一区 | 激情久久久久 | 国产精品一区二区久久精品爱微奶 | 国产精品久久久久一区 | 99久免费精品视频在线观看 | 天堂麻豆 | 麻豆精品视频在线 | av成人亚洲 | 欧美激情精品一区 | 一级成人在线 | 国产精品自产拍在线观看中文 | 久久久久福利视频 | 国产专区精品视频 | 玖玖爱在线观看 | 天天操天天摸天天射 | 免费看毛片网站 | 成年人免费电影在线观看 | 91豆麻精品91久久久久久 | 国产精品福利一区 | 久久高清视频免费 | 成人av播放 | 97国产在线视频 | 精品国产美女在线 | 国产精品久久一区二区三区, | 亚洲永久精品在线观看 | 国产成人黄色av | 伊人www22综合色 | 国产精品精品久久久久久 | 三级黄色在线观看 | 亚洲精品久久久久久久不卡四虎 | 国产成人在线免费观看 | 久久久精品高清 | 久久综合久久伊人 | 涩涩网站在线看 | 婷婷六月色 | 激情视频亚洲 | 国产免费又爽又刺激在线观看 | 精品九九久久 | 97人人射 | 18岁免费看片 | 久久不射电影院 | 日本精品一| 国产精品久久99综合免费观看尤物 | 黄色免费网站下载 | 精品一区精品二区 |