【易购管理系统】商品列表

我们来写一下商品管理界面
在这里插入图片描述
在Goods.vue中

<template>
  <div>
   <!-- 1.搜索区域 -->
   <div class="header">

   </div>
   <!-- 2.表格区域展示视图数据 -->
   <div class="wrapper">
    
   </div>

   <!-- 3.分页 -->
  </div>
</template>

我们再去element中去找一下input输入框相关的内容

<el-input v-model="input" placeholder="请输入内容"></el-input>
 data() {
    return {
      input: ''
    }
  }

后面还有俩按钮,通过button就可以

 <!-- 1.搜索区域 -->
   <div class="header">
     <el-input v-model="input" placeholder="请输入内容"></el-input>
      <el-button type="primary">查询</el-button>
       <el-button type="primary">添加</el-button>
   </div>

在这里插入图片描述
我们再调整一下布局,给大的div盒子一个goods的class

.goods {
  margin: 10px;
}
.header{
display:flex;
button:{
   margin-left:20px;
      }
   }

暂时先不给按钮添加点击事件,因为它和下面的内容有关,我们先把下面内容区域做完,然后再给按钮写点击事件

实现多选非常简单:
手动添加一个el-table-column,设type属性为selection即可;默认情况下若内容过多会折行显示,若需要单行显示可以使用show-overflow-tooltip属性,它接受一个Boolean,为true时多余的内容会在
hover 时以 tooltip 的形式显示出来。

   <!-- 2.表格区域展示视图数据 -->
   <div class="wrapper">
     <el-table  :data="tableData"   border>
       <el-table-column type="selection" width="55"> </el-table-column>
       <el-table-column prop="date" label="商品ID" width="100"></el-table-column>
       <el-table-column prop="name" label="商品名称" width="100"> </el-table-column>
       <el-table-column  prop="name" label="商品价格" width="100"></el-table-column>
       <el-table-column prop="name" label="商品数量" width="100"> </el-table-column>
       <el-table-column prop="name" label="规格类别" width="100"> </el-table-column>
       <el-table-column prop="name" label="商品图片" > </el-table-column>
       <el-table-column  prop="name" label="商品卖点" > </el-table-column>
       <el-table-column prop="name" label="商品描述" > </el-table-column>
       <el-table-column  prop="name" label="操作" width="180"></el-table-column>
    </el-table>
   </div>

最终的效果如下:
在这里插入图片描述
操作下面还有两个预留的按钮

<el-table-column  prop="name" label="操作" width="180">
         <template slot-scope="scope">
        <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
        <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
      </template>
       </el-table-column>
 methods: {
    // 编辑操作
    handleEdit(index, row) {
        
    },
      // 删除操作
      handleDelete(index, row) {
        
      }
  }

我们放一行数据看效果:

data() {
    return {
      input: '',
      tableData: [{
        date: '2016-05-02',
        name: '王小虎',
        address: '上海市普陀区金沙江路 1518 弄'
      }]
    }    
  },

在这里插入图片描述

动态数据

搭建后台服务

新建一个空的文件夹server,在里面新建index.js,后台搭建的服务。但是把依赖都装到node_module下面,后期只要起项目就可以启动所有的服务。
终止项目,装一下express

PS D:\VScode代码\后台管理系统\vue-ego> cnpm i express -S

在这里插入图片描述
又因为这个地方还牵扯到我们的数据库,所以还需要装一下mysql

PS D:\VScode代码\后台管理系统\vue-ego> cnpm i mysql -S

在这里插入图片描述
然后启动项目就可以了。

在我们的server文件夹下的index.js中

//搭建express服务
const express = require('express')
const app = express()
   
//路由
const router = require('./router')

app.use('/api', router)

app.listen(8989, () => {
    console.log(8989);
})

在该文件夹下新建router.js里面存放接口

const express = require('express');
const router = express.Router()

//路由接口
router.get('/' ,(req,res)=>{
res. send( 'hello')
})


module.exports = router

开启一下server

PS D:\VScode代码\后台管理系统\vue-ego\server> nodemon

在这里插入图片描述
然后在浏览器中访问

localhost:8989/api/

在这里插入图片描述

接着新建mysql.js文件

//连接数据库  1.安装mysql 2.创建连接
const mysql = require('mysql')

//创建数据库连接
const client = mysql.createConnection({
    host: 'localhost', //数据域名 地址
    user: 'root', //数据名称
    password: '', //数据库密码 xampp集成
    database: 'vue-ego',
    // port: '3306'
})

//封装数据库操作语句 sql语句 参数数组arr  callback成功函数结果
function sqlFun(sql, arr, callback) {
    client.query(sql, arr, function(error, result) {
        if (error) {
            console.log('数据库语句错误');
            return;
        }
        callback(result)
    })
}

module.exports = sqlFun

接着在路由中导入数据库

//导入数据库 sqlFn('sql',[],res=>{})
const sqlFn = require('./mysql')

然后把商品列表接口和商品查询接口拿过来

// 商品列表: 获取分页 { total: '', arr: [{}, {}, {}], pagesize: 8, } *
// 参数: page 页码
router.get('/projectList', (req, res) => {
    const page = req.query.page || 1;
    const sqlLen = "select * from project where id";
    sqlFn(sqlLen, null, data => {
        let len = data.length;
        const sql = "select * from project order by id desc limit 8 offset " + (page - 1) * 8;
        sqlFn(sql, null, result => {
            if (result.length > 0) {
                res.send({
                    status: 200,
                    data: result,
                    pageSize: 8,
                    total: len
                })
            } else {
                res.send({
                    status: 500,
                    msg: "暂无数据"
                })
            }
        })
    })
})

/**
 * 商品查询接口 search
 * 参数:search
 */
router.get("/search", (req, res) => {
    var search = req.query.search;
    const sql = "select * from project where concat(`title`,`sellPoint`,`descs`) like '%" + search + "%'";
    sqlFn(sql, null, (result) => {
        if (result.length > 0) {
            res.send({
                status: 200,
                result
            })
        } else {
            res.send({
                status: 500,
                msg: "暂无数据"
            })
        }
    })
})

再到浏览器中访问接口,看是否引入

http://localhost:8989/api/projectList

在这里插入图片描述

前端网络请求

后台服务器搭建完成以后,接下来我们要做网络请求
在src下新建api文件夹,在下面新建base.js存放所有的路径配置和index.js里面存放所有的请求方法。
base.js

const base = {
    goodsList: 'api/api/projectList', //商品列表 url

}
export default base;

index.js

/**
 * 请求的方法
 */

import axios from 'axios'
import base from './base'

const api = {
    /**
     * 商品列表
     */
    getGoodsList(params) { //{page:xx}
        return axios.get(base.goodsList, {
            params
        })
    },
}

export default api

因为后台没有配资源共享,肯定会跨域,我们需要接着配置,在目录下新建vue.config.js

//配置参数
/**
 * devServer.proxy 
 * 如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请 求代理到 API 服务器
 */
module.exports = {
    assetsDir: 'assets',
    //修改打包路径
    publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
    //反向代理
    devServer: {
        proxy: {
            '/api': {
                target: 'http://localhost:8989/api', //
                // target:process.env.VUE_APP_BASE_URL,//
                ws: true,
                changeOrigin: true,
                pathRewrite: { //重写路径
                    '^/api': ''
                }
            },
        },
    }

}

再将api挂到main.js中去

import api from './api/index'
Vue.prototype.$api = api

在商品界面发送请求.在Goods.vue中

  created()
  {
    this.$api.getGoodsList({
      page: 1
    }).then(res => {
      console.log(res.data);
    })
}}

重启前台服务

结果如下:
在这里插入图片描述
接着我们想要把数据显示到界面上

 created() {
    this.$api
      .getGoodsList({
        page: 1,
      })
      .then((res) => {
        console.log(res.data);
        // 状态码为200,代表成功获取数据
        if (res.data.status === 200) {
          this.tableData = res.data.data;
        }
      });
  },

先利用状态码做一个判断,看是否能获取数据
接着我们对数据做一个展示(修改对应的prop)

    <el-table-column prop="id" label="商品ID" width="100"></el-table-column>
        <el-table-column prop="title" label="商品名称" width="100">
        </el-table-column>
        <el-table-column prop="price" label="商品价格" width="100"
        ></el-table-column>
        <el-table-column prop="num" label="商品数量" width="100">
        </el-table-column>
        <el-table-column prop="category" label="规格类别" width="100">
        </el-table-column>
        <el-table-column prop="image" label="商品图片"> </el-table-column>
        <el-table-column prop="sellPoint" label="商品卖点"> </el-table-column>
        <el-table-column prop="descs" label="商品描述"> </el-table-column>
        <el-table-column label="操作" width="180">

得到的结果如下:
在这里插入图片描述
我们可以看到这些数据,像商品图片过长会换行,商品名称过长也换行了,我们不希望有些内容换行,我们可以在Element组件库里面找到表格
在这里插入图片描述
在这里插入图片描述
上面的这个属性可以用来解决这个问题,我们将这个属性加到我们过长的标签内容中,结果如下
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵有千堆雪与长街

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值