青橙项目之品牌管理前端 day2

学习掌握目标

1.Element-Ui组件了解与使用
2.ES6与ES5语法
3.品牌管理的前端代码
4.图片上传代码,本地和阿里云存储
5.掌握阿里云oss存储

未完成

1.ElementUI简介

学会使用官网,http://element-cn.eleme.io/2.0/#/zh-CN

Table Form Button
function (response,message){} 等价于 (response,message)=>{}
ES6语法

2.品牌管理前端

2.1 列表展示

查询所有,不分页
代码实现

  1. 拷贝资源文件/js和css文件到qingcheng-web-manager工程的webapp下,在qincheng-web-manager工程下的webapp下创建goods文件夹下,在goods文件夹下brand.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF‐8">
<title>品牌管理</title>
<link rel="stylesheet" href="../css/elementui.css">
</head>
<body>
<script src="../js/vue.js"></script>
<script src="../js/elementui.js"></script>
<script src="../js/axios.js"></script>
</body>
</html>
  1. 编写
    页面js
 <script>
new Vue({
el: '#app',
data() {
return {
tableData: []
}
},
created() {
axios.get('/brand/findAll.do').then(response=> {
this.tableData = response.data;
});
}
})
</script>
  1. 表格控件实现展现数据
<el‐table :data="tableData" border style="width: 100%">
<el‐table‐column
prop="id"
label="ID"
width="180">
</el‐table‐column>
<el‐table‐column
prop="name"
label="名称"
width="180">
</el‐table‐column>
<el‐table‐column
prop="letter"
label="首字母">
</el‐table‐column>
<el‐table‐column
label="图片"
width="180">
<template slot‐scope="scope">
<img :src="scope.row.image">
</template>
</el‐table‐column>
</el‐table>

2.2 分页列表展示

<!--分页-->
    <el-pagination
            @size-change="fetchData" //页大小更改时触发的事件
            @current-change="fetchData"//当前页更改时,触发事件,获取当前页码
            :current-page.sync="currentPage"
            :page-sizes="[10, 20, 30, 40]"//每页多少条数据选项列表
            :page-size="size"//当前选择的每页记录数
            layout="total, sizes, prev, pager, next, jumper"//布局列表
            :total="total">//总记录数
    </el-pagination>

修改js

new Vue({
el: '#app',
data(){
return {
tableData: [],
currentPage: 1,
total: 10,
size: 10
}
},
created(){
this.fetchData();
},
methods:{
fetchData (){
axios.get(
`/brand/findPage.do?page=${this.currentPage}&size=${this.size}`).then(
response=> {//
this.tableData = response.data.rows;
this.total = response.data.total;
});
}
}
})

2.3 条件查询

表单上添加 按钮 查询

  <el-form :inline="true">//inline
        <el-form-item label="品牌名称">//表单项
            <el-input placeholder="品牌名称" v-model="searchMap.name"></el-input>//placeholder
        </el-form-item>
        <el-form-item  label="品牌首字母">
            <el-input placeholder="品牌首字母" v-model="searchMap.letter"></el-input>
        </el-form-item>
        <el-button type="primary" @click="fetchData">查询</el-button>//click
        <el-button type="primary" @click="pojo={},formVisible=true">新增</el-button>

    </el-form>

修改js(此时是调用后端findPage),在data中新增searchMap属性
fetchData(){

    axios.post(`/brand/findPage.do?page=${this.currentPage}&size=${this.size}`,this.searchMap).then(response=>{
        this.tableData= response.data.rows;
        this.total= response.data.total;
    })

    }

2.4 CRUD

  • 新增
    新增按钮,窗口的弹出与关闭,dialog

注意属性formVisible: false默认是关闭

<el-dialog
            title="品牌编辑"
            :visible.sync="formVisible">//visible.sync
       
            <el-form-item>
                <el-button @click="save()">保存</el-button>
                <el-button  @click="formVisible = false">关闭</el-button>
            </el-form-item>
        </el-form>
    </el-dialog>

data添加pojo属性,保存实体

 data(){
            return {
                tableData:[],
                currentPage:1,
                size:10,
                total:10,
                searchMap:{},
                formVisible:false,
                pojo:{},
                imageUrl:''
            }
        },

窗口dialog中添加表单

 <el-form label-width="80px">
            <el-form-item label="品牌名称">
                <el-input placeholder="品牌名称" v-model="pojo.name"></el-input>
            </el-form-item>
            <el-form-item  label="品牌首字母">
                <el-input placeholder="品牌首字母" v-model="pojo.letter"></el-input>
            </el-form-item>
            <el-form-item  label="品牌图片">
                <el-upload
                        class="avatar-uploader"
                        action="/upload/native.do"
                        :show-file-list="false"
                        :on-success="handleAvatarSuccess"
                        :before-upload="beforeAvatarUpload">
                    <img v-if="imageUrl" :src="imageUrl" class="avatar">
                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                </el-upload>
            </el-form-item>
            <el-form-item  label="品牌排序">
                <el-input placeholder="品牌排序" v-model="pojo.seq"></el-input>
            </el-form-item>

            <el-form-item>
                <el-button @click="save()">保存</el-button>
                <el-button  @click="formVisible = false">关闭</el-button>
            </el-form-item>
        </el-form>

在methos中添加save方法

 save(){
                this.pojo.image=this.imageUrl;
                axios.post(`/brand/${this.pojo.id==null?'add':'update'}.do`,this.pojo).then(response=>{
                    this.formVisible=false;
                    this.fetchData();
                })
            },

修改

新增模板列

  <el-table-column
                label="操作"
                width="180"
        >

            <template slot-scope="scope">
                <el-button @click="edit(scope.row.id)" size="small">修改</el-button>
                <el-button  @click="dele(scope.row.id)" size="small">删除</el-button>
            </template>

        </el-table-column>

添加edit()

 edit(id){
                this.formVisible=true;//打开窗口
                axios.get(`/brand/findId.do?id=${id}`).then(
                    response=>{//调用查询
                        this.pojo=response.data//实体信息
                      //  this.imageUrl=this.pojo.image;
                    })
            },

注意,编辑打开的窗口,也要调用save方法保存修改信息。修改save方法
根据id判断是新添加的,还是修改操作,相应调用后台的操作。

save (){
axios.post(`/brand/${this.pojo.id==null?'add':'update'}.do`,this.pojo).th
en(response => {
this.fetchData (); //刷新列表
this.formVisible = false ;//关闭窗口
});
}

删除

操作列中新增“删除”按钮

  <el-button  @click="dele(scope.row.id)" size="small">删除</el-button>

(2)新增dele方法

dele (id){
this.$confirm('确定要删除此记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then( () => {
axios.get(`/brand/delete.do?id=${id}`).then(response => {
if(response.data.code==0){
this.fetchData (); //刷新列表
}else{
this.$alert(response.data.message)
}
})
})
}

2.5 图片上传到本地

弹出窗口中,放置图片上传组件

 <el-form-item  label="品牌图片">
                <el-upload
                        class="avatar-uploader"
                        action="/upload/native.do"
                        :show-file-list="false"
                        :on-success="handleAvatarSuccess"
                        :before-upload="beforeAvatarUpload">
                    <img v-if="imageUrl" :src="imageUrl" class="avatar">
                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                </el-upload>
            </el-form-item>

修改脚本,data增加属性

imageUrl: ''

增加方法

beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 格式!');
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isJPG && isLt2M;
}

修改edit和save方法
//save方法第一句添加

this.pojo.image= this.imageUrl;

//edit方法回调时添加

//edit方法回调时添加
this.imageUrl=this.pojo.image //显示图片

springmvc文件上传,通过MutipartResolver,,只要在 spring-mvc.xml 中注册相应的 MultipartResolver 即可
MultipartResolver 的实现类有两个:

  1. CommonsMultipartResolver
  2. StandardServletMultipartResolver
  • 两个的区别:
  1. 第一个需要使用 Apache 的 commons-fileupload 等 jar 包支持,但它能在比较旧的
    servlet 版本中使用。
  2. 第二个不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,但是只能在
    Servlet 3 以上的版本使用。
    在这里插入图片描述
    创建controller
    在这里插入图片描述

2.6 图片上传到阿里云

暂时未完,需要开通,调用上传接口
实现过程:
1.在阿里云开通,并创建一个Bucket
2.添加依赖
2.本地brand.html中的img上传的action 地址修改
3.FileController新建一个方法oss.do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZrZrZr.l

您的打赏是我的鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值