黑马】商品功能列表141-152

目录

一,新建一个分支,推送到码云

二。建立list组件,在路由中注册

三,获取后台商品列表数据

  1,在行为区搭建三连环

三.把获取到的数据渲染到页面里

1·在页面中进行布局,搭建表格

2.设置时间的表达

3.分页器

4.实现搜索框的搜索与清空

5.实现删除操作

四。新,添加商品

1,新,步骤条的设置


一,新建一个分支,推送到码云

git branch

git checkout -b goods_list

git branch

git push -u origin goods_list

二。建立list组件,在路由中注册

页面布局搭建

粘贴过来面包屑导航区域和卡片视图区域

站过来搜索框和添加商品的按钮

三,获取后台商品列表数据

查看对应的接口API

  1,在行为区搭建三连环

    data(){
               return {
            //查询参数对象
            queryInfo: {
                query: '',
                //当前页数
                pagenum: 1,
                //当前每页显示多少条数据
                pagesize: 10
            },
        }
    },
    created() {
        this.getGoodsList()
    },
    methods: {
        //根据分页获取对应的商品列表
        async getGoodsList() {
            const { data: res } = await this.$http.get('goods', { params: this.queryInfo })
            if (res.meta.status !== 200) {
                return this.$message.error('获取商品列表失败!')
            }
            this.$message.success('获取商品列表成功!')
            console.log(res.data)
        }
    }

 成功获取到数据

 跟之前一样,把goods和total取出来放在私有数据里

            //商品列表
            goodslist:[],
            //总数据条数
            total:0
        
    methods: {
        //根据分页获取对应的商品列表
        async getGoodsList() {
           ····
            console.log(res.data)
            this.goodslist = res.data.goods
            this.total = res.data.total

三.把获取到的数据渲染到页面里

1·在页面中进行布局,搭建表格

这里的label 和prop都是从接口文档里获取到的

   <!--表格区域 ,通过data指定数据源,stripe隔行变色-->
                 <el-table :data="goodslist" border stripe>
                <!-- 索引列 -->
                <el-table-column type="index"></el-table-column>
                <el-table-column label="商品名称" prop="goods_name"></el-table-column>
                <el-table-column label="商品价格" prop="goods_price" width="95px"></el-table-column>
                <el-table-column label="商品重量 " prop="goods_weight" width="95px"></el-table-column>
                <el-table-column label="添加时间" prop="add_time" width="140px" ></el-table-column>

                <el-table-column label="操作" width="130px">
                    <template slot-scope="scope">
                        <!-- 修改按钮 -->
                        <el-button type="primary" icon="el-icon-edit" size="mini"></el-button>
                        <!-- 删除按钮 -->
                        <el-button type="danger" icon="el-icon-delete" size="mini"></el-button>
                        </template>
                     </el-table-column>
                    </el-table>
        </el-card>

 上面是渲染好的页面布局,但是可以看到添加时间的地方不正确

2,设置时间的表达

在mai文件中写

Vue.filter('dateFormat',function(originValue){
      const dt = new Date(originValue)
      const y =  dt.getFullYear()
      const m =  (dt.getMonth() + 1 + '').padStart(2,'0')
      const d =  (dt.getDay() + '').padStart(2,'0')

      const hh = (dt.getHours()+ '').padStart(2,'0')
      const mm = (dt.getMinutes()+ '').padStart(2,'0')
      const ss = (dt.getSeconds()+ '').padStart(2,'0')
      return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})

添加时间进行修改

   <el-table-column label="添加时间" prop="add_time" width="140px" >
                    <template slot-scope="scope"> 
                        {{scope.row.add_time | dateFormat}}
                    </template>
                </el-table-column>

页面显示

3,分页器

  <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                :current-page="queryInfo.pagenum" :page-sizes="[1, 2, 5, 10]" :page-size="queryInfo.pagesize"
                layout="total, sizes, prev, pager, next, jumper" :total="total" >
            </el-pagination>

配两个函数

     //监听pagesize改变的事件
          handleSizeChange(newSize) {
            // console.log(newSize)
            //把新监听到的数据重新赋值给data中
            this.queryInfo.pagesize = newSize
            //赋值之后,重新发生骑牛
            this.getGoodsList()
        },
        //监听页码值改变的事件
        handleCurrentChange(newPage) {
            // console.log(newPage)
            this.queryInfo.pagenum = newPage
            this.getGoodsList()
        },

4.实现搜索框的搜索与清空

添加一个双向绑定事件,绑定到query属性身上

点击搜索按钮,就会调用获取数据列表函数

给搜索按钮设计一个单击事件处理函数,同样的是添加一个清除函数

    <el-input placeholder="请输入内容" v-model="queryInfo.query" clearable @clear="getGoodsList">
                        <el-button slot="append" icon="el-icon-search" @click="getGoodsList"></el-button>

5.实现删除操作

给按钮添加一个单击事件

                        <el-button type="danger" icon="el-icon-delete" size="mini" @click="removeById(scope.row.goods_id)"></el-button>

在单击事件处理函数中设计弹一个对话框,确认删除

 //删除事件处理函数
        async removeById(id) {
            //弹窗询问用户是否删除数据
            const confirmResult = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
            }
            ).catch(err => err)
            //此时用户点确定返回的是一个confirm字符串,如果点取消是返回一个错误,如果解决,加一个catch
            //修改好错误之后,用户点击取消删除之后返回的是一个字符串cancel
            // console.log(confirmResult)
            if (confirmResult !== 'confirm') {
                return this.$message.info('已取消删除')
            }
            // console.log('确认了删除')
            const { data: res } = await this.$http.delete('goods/' + id)
            if (res.meta.status !== 200) {
                return this.$message.error('删除失败')
            }
            this.$message.success('删除成功')
            this.getGoodsList()

        },

四。新,添加商品

会跳转到一个页面

给添加商品按钮添加一个单击事件

然后在事件处理函数中写一个路由跳转

 goAddpage(){
            this.$router.push('/goods/add')
        }

创建一个新的组件,添加路由组件

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

        {path:'/goods',component:GoodsList},

页面头的布置都和之前一样,只有一个警告是灰色的

 <!-- 警告区域 ,去element里面粘贴 -->
            <el-alert :closable="false" show-icon title="添加商品信息" type="info" center>
            </el-alert>

1,新,步骤条的设置

从element里面粘贴

   <!-- 步骤条 -->
            <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;
}

完善进度条

 <el-steps :space="200" :active="activeIndex" align-center  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>
  return{
        activeIndex:0
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值