Vue电商后台管理系统项目第6篇-商品管理的商品列表和商品添加组件实现

开胃小菜—左侧导航菜单的动态生成

通过为指定的用户指定角色,那么这个用户登陆之后应该只能看到这个角色所对应的权限菜单, 我们是根据当前登陆用户去获取对应的菜单权限

步骤

  • 分析接口文档 ,发现不用传递参数,因为它是根据当前登陆用户的token来动态获取当前用户的权限
  • 添加接口方法获取动态的菜单数据
// 获取左侧菜单权限
export const getLeftMenu = () => {
  return axios({
    url: `menus`
  })
}

实现菜单项的动态加载

  • 获取数据之后,注意看到返回数据中有path数据,这个数据就应该对应着我们的路由配置
  • 所以,之前的路由配置如果名称不一致,则必须进行修改
<el-menu
         :router=‘true‘
         :unique-opened=‘true‘
         default-active="2"
         class="el-menu-vertical-demo"
         background-color="#545c64"
         text-color="#fff"
         active-text-color="#ffd04b"
         >
    <el-submenu :index="item.id+‘‘" v-for=‘item in menuList‘ :key=‘item.id‘>
        <template slot="title">
            <i class="el-icon-location"></i>
            <span>{{item.authName}}</span>
        </template>
        <!-- 路由映射组件
            映射就是指:让路由所对应的组件在指定router-view中展示
            指定router-view:关注组件的嵌套结构
            <a href=‘../*.html‘></a>
            <a href=‘../*.vue‘></a> -->
        <el-menu-item :index="‘/home/‘+subitem.path" v-for=‘subitem in item.children‘ :key=‘subitem.id‘>
            <template slot="title">
                <i class="el-icon-location"></i>
                <span>{{subitem.authName}}</span>
            </template>
        </el-menu-item>
    </el-submenu>
</el-menu>

商品管理>商品列表

添加单文件组件,goods.vue

<template>
    <div class="goods">goods</div>
</template>
<script>
export default {

}
</script>
<style lang="less" scoped>

</style>

list.vue

<template>
    <div class="list">list</div>
</template>
<script>
export default {

}
</script>
<style lang="less" scoped>

</style>

add.vue

<template>
    <div class="add">add</div>
</template>
<script>
export default {

}
</script>
<style lang="less" scoped>

</style>

配置路由

配置goods路由

{
    name: ‘Goods‘,
    path: ‘goods‘,
    component: Goods
}

配置list路由,这是一个嵌套路由,同时添加路由重定向

        {
          name: ‘Goods‘,
          path: ‘goods‘,
          component: Goods,
          // 添加重定向,让其默认展示list.vue组件的内容
          redirect: { name: ‘List‘ },
          children: [
            {
              name: ‘List‘,
              path: ‘list‘,
              component: List
            }
          ]
        }

配置add组件所对应的路由

{
    name: ‘Goods‘,
        path: ‘goods‘,
            component: Goods,
                // 添加重定向,让其默认展示list.vue组件的内容
                redirect: { name: ‘List‘ },
                    children: [
                        {
                            name: ‘List‘,
                            path: ‘list‘,
                            component: List
                        },
                        {
                            name: ‘Add‘,
                            path: ‘add‘,
                            component: Add
                        }
                    ]
}

商品列表组件

步骤:

  • 接口对应着:商品管理 》 商品列表数据
  • 新建一个专门用于处理商品的api文档:goods.js
  • 我们发现每个api文件中都有 引入axios,设置基准路径,添加axios拦截器这几个操作,所以有必要对这些操作进行封装

添加一个文件夹utils,里面添加一个封装文件:myaxios.js

import axios from ‘axios‘
// 设置基准路径
// axios.defaults.baseURL = ‘http://localhost:8888/api/private/v1/‘
var myaxios = axios.create({
  baseURL: ‘http://localhost:8888/api/private/v1/‘
})

myaxios.interceptors.request.use(function (config) {
  var token = localStorage.getItem(‘itcast_pro_token‘)
  if (token) {
    config.headers[‘Authorization‘] = token
  }

  return config
}, function (error) {
  return Promise.reject(error)
})

// 暴露成员
export default myaxios
  • 细节:暴露成员需要使用到export
  • 添加接口方法获取所有商品数据列表
import axios from ‘@/utils/myaxios.js‘

// 获取所有商品数据列表
export const getAllGoodsList = (obj) => {
  return axios({
    method: ‘get‘,
    url: ‘goods‘,
    params: obj
  })
}

组件结构的添加

  • 面包屑
  • 添加el-card:卡片视图
  • 搜索+添加按钮
  • 表格数据展示

引入接口方法

import { getAllGoodsList } from ‘@/api/goods.js‘

添加一上些Data属性

data () {
    return {
      goodsList: [],
      userKey: ‘‘,
      pagenum: 1,
      pagesize: 10
    }
  }

调用接口方法

mounted () {
    getAllGoodsList({ query: this.userKey, pagenum: this.pagenum, pagesize: this.pagesize })
      .then(res => {
        console.log(res)
        this.goodsList = res.data.data.goods
      })
      .catch(err => {
        console.log(err)
      })
  }

设置表格的属性

<!-- 表格展示 -->
      <el-table :data="goodsList" border style="width: 100%;margin-top:15px">
        <el-table-column type="index" width="50"></el-table-column>
        <el-table-column prop="goods_name" label="商品名称" width="580"></el-table-column>
        <el-table-column prop="goods_price" label="价格" width="180"></el-table-column>
        <el-table-column prop="goods_weight" label="商品重量"></el-table-column>
        <el-table-column prop="add_time" label="创建时间"></el-table-column>
        <el-table-column label="操作">
          <template slot-scope="scope">
            <el-button size="mini">编辑</el-button>
            <el-button size="mini" type="danger">删除</el-button>
          </template>
        </el-table-column>
      </el-table>

新增商品组件

步骤:

添加路由跳转

声明式导航:router-link to=""

编程式导航:$router.push({})

<el-button type="success" plain @click=‘$router.push({name: "Add"})‘>添加商品</el-button>

完成添加商品组件制作

  • 面包屑
  • 步骤条
<!-- 添加步骤条 -->
<el-steps :active="0" finish-status="success">
    <el-step title="步骤 1"></el-step>
    <el-step title="步骤 2"></el-step>
    <el-step title="步骤 3"></el-step>
    <el-step title="步骤 4"></el-step>
    <el-step title="步骤 5"></el-step>
</el-steps>

细节:active属性对应着当前需要展示的内容面板的索引,索引从0开始

标签页

<!-- 添加标签页 -->
<el-tabs v-model="activeName" tab-position=‘left‘ style=‘margin-top:15px‘>
    <el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane>
    <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
    <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
    <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
    <el-tab-pane label="定时任务补偿" name="fifth">定时任务补偿</el-tab-pane>
</el-tabs>

细节:

  • tab-position:用来设置标签页导航项的位置,内容与这个位置对应,如导航在top,内容就在bottom
  • v-model=‘activeName‘,用来设置当前被激活的内容面板,这个值就应该设置为内容面板的name属性的值

实现标签页和步骤条的关联

  • 我们发现步骤条的active是控制当前步骤的,标签页的activeName是控制当前激活的内容面板的
  • 那么我们就可以考虑让这个属性指向同一个变量,以此达到修改一个值,另外一个组件的效果也会变化
  • 细节:步骤条中的active需要的数据类型是数值,所以记得做类型的转换
<!-- 添加步骤条 -->
<el-steps :active="activeName - 0" finish-status="success">
    <el-step title="步骤 1"></el-step>
    <el-step title="步骤 2"></el-step>
    <el-step title="步骤 3"></el-step>
    <el-step title="步骤 4"></el-step>
    <el-step title="步骤 5"></el-step>
</el-steps>
<!-- 添加标签页 -->
<el-tabs v-model="activeName" tab-position=‘left‘ style=‘margin-top:15px‘>
    <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>
-------------------------------------
data () {
    return {
      activeName: ‘0‘
    }
  }

添加标签页内容面板的数据

商品参数:这里的数据用于后期的商品添加,所以整个数据应该都是表单数据,所以先添加一个表单结构

定义数据:

goodsForm: {
        goods_name: ‘‘,
        goods_cat: ‘‘,
        goods_price: ‘‘,
        goods_number: ‘‘,
        goods_weight: ‘‘,
        goods_introduce: ‘‘,
        pics: [],
        atts: []
      }

级联选择器的添加

商品分类数据的获取

  • 参数值为1说明只获取1 级分类
  • 参数值为2说明获取1 级和2级分类
  • 参数值为3说明获取1 级和2级和3级分类
  • 参数可以以单个数值的方式传递,也可以以数组的形式传递

添加api文件:@/api/category.js

添加接口方法

import axios from ‘@/utils/myaxios.js‘

export const getCategoriesList = (level) => {
  return axios({
    url: ‘categories‘,
    params: { type: level }
  })
}

级联选择器的添加

<el-cascader
             :options="options"  //数据源
             :props=""  // 配置选项
             clearable> //可清空
</el-cascader>

级联选择器的属性设置

<el-form-item label="商品分类">
    <!-- 添加级联选择器 -->
    <el-cascader :options="cateList" :props="cateprops" clearable></el-cascader>
</el-form-item>
----------------------------------------
// 所有分类数据
      cateList: [],
      cateprops: {
        value: ‘cat_id‘,
        label: ‘cat_name‘,
        children: ‘children‘
      }

如果您喜欢这篇文章,可以打赏点钱给我 :)

    支付宝                  微信

   

原文地址:https://www.cnblogs.com/sauronblog/p/11623864.html

时间: 2024-10-07 05:27:01

Vue电商后台管理系统项目第6篇-商品管理的商品列表和商品添加组件实现的相关文章

Vue电商后台管理系统项目第4篇-权限管理页面实现

优化之前的分配角色功能 实现下拉列表的选项默认选中 为下拉列表的v-model赋值一个id,这个id会对应着下拉列表的value,如果赋值了Value,那么就会让这个value数据所对应的字符串数据显示 我们得先获取到这个用户的rid // 分配角色提交 grantrolesubmit () { if (this.grantForm.rid) { grantUserRole(this.grantForm.id, this.grantForm.rid) .then(res => { if (res

Vue电商后台管理系统项目第3篇-首页用户列表增删改查功能

前言 由于之前的作者没有再更新这个后台管理系统项目的文章了,我想着把它的项目重头到位做一遍,把剩下的文章写完,把这个项目记录完整,以后遇到类似的后台管理系统项目,可以快速复习一些知识点. 新的项目地址:https://github.com/C4az6/vue_manage_system 添加用户 这个操作在用户列表页面,所以路由不用再进行 处理了. 基于单文件组件: 添加事件绑定--弹出新增用户对话框 添加dialog对话框 Element-UI组件>dialog对话框>自定义内容>表单

Vue电商后台管理系统项目第5篇-角色列表的增删改查&amp;&amp;角色授权

角色列表的增删改查 1.添加角色 先根据API文档编写接口: // 添加角色 export const addRolesApi = (data) => { return axios({ method: 'post', url: 'roles', data }) } 在角色组件内引用,然后给 添加角色 按钮绑定一个点击事件addRolesClick: <!-- 添加角色 --> <el-button type="success" plain @click=&quo

React16+React-Router4 从零打造企业级电商后台管理系统

第1章 课程介绍本章整体介绍该课程的内容,让同学们了解这个课程的特点和学习方法,以及后台管理系统开发前的一些前置工作,如需求分析.技术选型和数据接口等. 第2章 课前知识储备本章介绍一些后面课程要用到的一些基础知识,为后面的开发打下基础,包括页面加载过程.ES6基础和本地存储相关的知识. 第3章 前端框架的分析本章介绍前端框架的共性和应用场景,分析前端加载原理,并对单页和多页应用,框架和原生开发,三大主流框架之间做详细的对比. 第4章 开发环境的搭建搭建项目依赖的开发环境,包括nodejs的安装

2019教你用react全家桶+node.js全栈开发大型电商后台管理系统(视频+源码+课件)

主要内容:1. 业务功能模块: 用户登陆.商品分类管理.商品管理.角色管理.用户管理.菜单权限控制.订单管理等2. 前端技术: React + React Router4 + Redux + Antd + Axios + ES6/ES8 + webpack + ECharts/Bizcharts 等 3. 后端技术: NodeJS + Express + MongoDB + Mongoose + Multer 等 4. 项目开发模式: 模块化.组件化.工程化的开发模式 5. 深入源码: 自定义R

CX105React16+React-Router4 从零打造企业级电商后台管理系统

新年伊始,学习要趁早,点滴记录,学习就是进步! 不要到处找了,抓紧提升自己. 对于学习有困难不知道如何提升自己可以加扣:1225462853 获取资料. 下载地址:https://pan.baidu.com/s/1o9rZpj0 原文地址:https://www.cnblogs.com/sunnyppl/p/8511562.html

Java开发企业级权限管理系统课程 电商权限管理系统视频教程 共18章

第1章 课程整体概述(2018配套教程:电商前端+电商后端+电商权限管理系统课程) 本章首先介绍为什么大公司都有权限管理系统,然后会对权限管理中流行的RBAC模型及拓展做重点说明,并给出理想中的权限管理系统应该是什么样子的.之后会对这门课程做总体内容介绍与课程安排,最后会介绍这门课程会涉及到的技术,让大家明确了解到这门课程到底能收获些什么(课程提供QQ交流群).... 第2章 Spring Security权限框架理论与实战演练 本章首先让大家学习到Spring Security权限框架的架构,

大型电商微服务项目视频教程

大型电商微服务项目视频教程课程分享链接:https://pan.baidu.com/s/1Pl2kMqT6KCMvohaABE0m0w 提取码:9lkn 本课程将手把手带大家从无到有实现一个真实的大型电商微服务项目,该项目是基于真实的知名互联网企业项目讲解的 本课程将讲解如何从无到有搭建一个真实的大型电商微服务项目,涉及的内容较多,录制所需的时间也会比较久,因此整部课程下来售价也比较高,但考虑到课程中讲解的某阶段的知识点,有部分学员可能已经掌握了解,并不需要再次学习该部分内容,因此本套系列课程将

电商大数据项目(二)-推荐系统实战之实时分析以及离线分析

电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析http://blog.51cto.com/6989066/2325073电商大数据项目-推荐系统实战之推荐算法http://blog.51cto.com/6989066/2326209电商大数据项目-推荐系统实战之实时分析以及离线分析http://blog.51cto.com/6989066/2326214 五.实时分析Top IP(实时分析Top用户)一)模块介绍电商网站运营中,需要分析网站访问排名前N的IP,主要用来审计是否