vuecli2创建脚手架写happymmall项目总结

可以参考happymmall接口

接口地址:http://adminv2.happymmall.com/login?redirect=%2Fproduct%2Findex

首先呢,我们可以先从创建vuecli2脚手架说起

1: 第一步:搭建node运行环境,根据操作系统选择相应安装包
下载地址:https://nodejs.org/en/download/ 检验是否安装成功,命令行中直接输入node -v,返回版本号即可。

2:第二步:安装webpack npm install webpack -g

3:第三步:安装脚手架 npm install -g @vue/cli-init

4: 第四步:创建项目 使用vue init webpack my-project命令创建项目,其中my-project为项目名称,然后根据提示,配置项目的相关属性信息,其中包括项目名称、项目描述、作者,是否使用路由等相关设置。
在这里插入图片描述

配置完项目信息后,等待项目的创建,项目创建后,根据命令行工具的提示,cd到项目目录,然后输入提示信息,会自动开启一个本地服务器。
在这里插入图片描述
在这里插入图片描述

一、 我们可以对项目进下一些插件下载和封装

插件有 axios element-ui 富文本插件

axios安装插件 npm i axios --save
element-ui安装插件 npm i element-ui -S
副文本安装插件 npm install vue-quill-editor -S

1.1. 我们可以封装axios

	1.1.1 设置服务代理在 config/index.js 里边找到proxyTable进行配置代理
proxyTable: {
      "/api":{
        target:"http://admintest.happymmall.com/manage",//转发目标路径
        changeOrigin:true,  //允许转发
        pathRewrite: { //重写
          '^/api': ''
        }
      }
    },

1.1.2 我们在src目录下创建一个utils文件夹,在文件夹里边创建一个requset.js文件,用来二次封装axios

import axios from 'axios'
// axios的二次封装
const service=axios.create({
    // baseURL:"/api",
    // timeout:3000
})
// axios请求拦截
service.interceptors.request.use((config)=>{
    return config
})
// axios响应拦截
service.interceptors.response.use((config)=>{
    //可以写一些逻辑
    return config
})
let Request=(params)=>{
    return new Promise((resolve,reject)=>{
        service({
            ...params //es6对象的结构赋值
        }).then((res)=>{
            resolve(res)
        }).catch((err)=>{
            reject(err)
        })
    })
}
export {Request}

1.1.3 我们可以在src目录下在创建一个request文件夹。在文件夹里边创建一个index.js,用来统一的接口配置文件:便于后期项目需求的更改,接口参数变更 方便项目的后期维护,修改等…

先引入封装好的axios
import { Request } from "../utils/request"
// 登录页面
export const login = (obj) => Request({
    url: "/api/user/login.do",
    method: 'post',
    params: obj
})

二 、接下来就是我们项目的开始

2.1 登录接口

2.1.1 我们在登录的时候可以给登录页面配置全局的路由守卫,这样我们如果没有登录的情况下,就可以守卫登录页面,全局路由守卫可以在main.js里边进下配置,

router.beforeEach((to, from, next) => {
  const role = localStorage.getItem("admin")
  const val = JSON.parse(role)

  if (val !== null) {
    const timeEnd = Date.now() - val.time;
    if (timeEnd > val.expire) {
      localStorage.removeItem("admin")
      next("/login")
      return null
    }
  }
  if (!val && to.path !== "/login") {
    next("/login")
  }
  next()
})

2.1.2 在我们登录的登录按钮的事件中,我们可以设置token的过期时间,本地的存储时间,提示语句

 // 设置token过期时间, 本地存储过期时间
        const obj = {
          time: Date.now(),
          expire: 1000 * 60 * 10, //分钟
          data: this.username
        };
        localStorage.setItem("admin", JSON.stringify(obj));

2.2 配置一些页面,有商品管理,品类管理,订单管理,用户列表几个页面,

(商品管理页面有搜索、添加、查看、编辑、状态等功能)

2.2.1、搜索功能的实现,先判断使用什么查询,然后把要搜索的搜索框的值赋值给接口进行搜索,最后在重新渲染页面搜索接口/api/product/search.do post
search() {
      //搜索
      // console.log(this.value);
      if (this.value) {
        if (this.value == "id") {
          this.type = "productId";
        } else {
          this.type = "productName";
        }
        searchIdname({ [this.type]: this.input, pageNum: this.currpage }).then(
          res => {
            // console.log(res);
            this.tableData = res.data.data.list;
            this.total = res.data.data.total;
          }
        );
      } else {
        shoplist(this.obj).then(res => {
          // console.log(res);
          this.tableData = res.data.data.list;
          this.total = res.data.data.total;
          // console.log(this.total);
        });
      }
    },
2.2.2、添加功能的实现,在添加页面我们实现了数据添加,所属分类,上传图片,富文本等一些功能,添加接口/api/product/save.do get

2.2.2.1、添加数据 ,我们可以利用更新的接口,将我们添加的数据传到后端,进下添加
2.2.2.2、所属分类,我们可以先拿到分类的接口,然后对分类的数据进下map(map的回调函数会将执行结果返回,最后map将所有回调函数的返回值组成新数组返回。)遍历,然后判断我们一级分类的名字和数据的名字是否一致,一致的话,再一次请求1级分类的接口,将请求的数据id传给后端作比较,然后就能获取二级分类的数据了
2.2.2.3 上传图片,我们在写上传图片的时候可以使用element-ui的上传图片组件

这是代码
               <el-upload
                    class="upload-demo"
                    action="/api/product/upload.do"
                    name="upload_file"
                    :on-preview="handlePreview"
                    :on-remove="handleRemove"
                    :on-success="success"
                    list-type="picture"
                  >
                    <el-button size="small" type="primary">点击上传</el-button>
             </el-upload>
这是功能实现
//这是上传图片的
    handlePreview(file) {
      console.log(file);
      this.form.subImages = file.response.data.uri; //这个是获取那个图片的路径
    },
    handleRemove(file, fileList) {
      console.log(file, fileList);
    },
    //上面两个在添加中用不到,只用这个上传成功的方法
    success(response, file, fileList) {
      console.log(response); //response  这个参数是方法自带的,不用传  代表的是添加的图片信息,是个对象
      this.form.subImages = response.data.uri; //这个是获取那个图片的路径
    },

2.2.2.4 富文本的实现

  <quill-editor
     v-model="form.detail"
     @change="editChange($event)"
     style="height: 100px;width: 500px;margin-top: 10px"
     >
 </quill-editor>
  
2.2.3 查看功能的实现,在查看页面我们可以看到每条数据的详细数据,可以通过详情接口进下获取数据,要把列表页每一条id传到详情页 详情页接口 /api/product/detail.do get
2.2.4 编辑功能的实现 ,编辑功能其实和添加的功能类似,接口/api/product/save.do post

点击提交的时候的代码如下,可以将编辑后的数据添加到更新接口中,从而实现编辑效果的实现

onSubmit() {
      //提交
      updateProduct(this.detail).then(res => {
        console.log(res);
        this.$message({
          message: res.data.data,
          type: "success"
        });
        this.$router.push("/shop");
      });
    },
2.2.5。状态功能的实现

在filters里边定义两个函数,来操作上架下架的切换功能

    types(val) {
      return val == 1 ? "在售" : "已下架";
    },
    type2(val) {
      return val == 2 ? "上架" : "下架";
    }

然后在标签上绑定一个事件然后使用@click.prevent阻止默认事件

 pending(val) {
      // console.log(val.id, val.status);
      this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          updateStatus({
            productId: val.id,
            status: val.status == 1 ? 2 : 1
          }).then(res => {
            console.log(res.data);
            shoplist(this.obj)
              .then(res => {
                console.log(res);
                this.tableData = res.data.data.list;
                this.total = res.data.data.total;
                console.log(this.total);
              })
              .catch(err => {
                return false;
              });
          });
          this.$message({
            type: "success",
            message: "修改成功"
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消"
          });
        });
    },

以上是商品管理页面的所有功能

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值