ElementUI01
一.前后端分离?
1.1 什么是前后端分离?
前后端分类是一种架构模式,前后端人员先预定好接口,并行开发与测试.上线时进行分别部署.对开发人员能力要求高.对于小型公司或刚转型前后端分离模式公司,开发人员能力有限,采用是后端先行前后端分离开发模式.
注意:在web应用的开发期进行前后端开发工作的分工,这不是前后端分离,这叫前后端分工。
前后端分离优势:
- 责任分明,各自做各自擅长的事情
- 提高开发效率
- 完美应对复杂多变的前段要求
- 代码维护性高
二.ElementUI
2.1 什么是ElementUI?
Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,类似于easyui一样,提供了很多的ui组件。
2.2 安装
在idea的控制台中输入命令:
npm i element-ui -S
也可以下载下来,引入本地文件
2.3 导入
//引入核心js组件
import ElementUI from 'element-ui';
//引入依赖的样式
import 'element-ui/lib/theme-chalk/index.css';
//使用
Vue.use(ElementUI);
三.开始使用
3.1 数据表格
<!-- 数据表格 -->
<el-table
v-loading="loading"
:data="tableData"
style="width: 100%"
@selection-change="selectionChange"
>
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
>
</el-table-column>
<el-table-column
prop="email"
label="邮箱"
>
</el-table-column>
<el-table-column
prop="phone"
label="电话号码">
</el-table-column>
<el-table-column
prop="address"
label="地址">
</el-table-column>
<el-table-column
prop="createTime"
label="创建日期">
</el-table-column>
</el-table>
3.2 安装mockjs
由于使用的是假数据,所以我们用mockjs来模拟
使用mockjs之前需要安装
idea控制台输入命令:
npm install mockjs
3.3 安装axios
使用axios来发送请求 获取模拟数据
命令:
npm install axios --save
3.4 准备模拟数据,并且对外暴露资源(接口)
引入axios
*引入axios模块*/
import axios from 'axios'
/*对Vue对象进行扩展属性$http*/
Vue.prototype.$http = axios;
加载列表:
引入js文件
import User from "../js/user"
<script>
import User from "../js/user";
export default {
name: 'User',
data () {
return {
tableData: []
}
},
methods:{
//选中复选框触发事件
selectionChange(v){
console.debug(v);
},
//加载列表
loadUserList(){
this.$http.post("/user/list").then(res => {
this.tableData = res.data.data;
});
}
},
mounted(){
//当页面加载完毕的时候发送ajax请求
this.loadUserList();
}
}
</script>
js文件::
//对外暴露的资源
Mock.mock("/user/list","post",function (options) {
let data = result.list;
//响应数据
return {"data": data};
});
效果:
3.5 分页+高级查询
<!--高级查询的form表单-->
<el-form :inline="true" :model="searchForm" style="float: left" class="demo-form-inline">
<el-form-item label="用户名">
<el-input v-model="searchForm.username" placeholder="用户名"></el-input>
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="searchForm.email" placeholder="邮箱"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="searchSubmit">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="add">新增</el-button>
</el-form-item>
</el-form>
<!-- 分页 -->
<el-pagination style="margin: 10px"
@size-change="sizeChange"
@current-change="currentChange"
:current-page="currentPage"
:page-sizes="pageSizes"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
data:
//双向绑定高级查询
searchForm:{
username:"",
email:""
}
//当前页
currentPage:1,
//每页条数
pageSize:10,
//下拉列表分页条数
pageSizes:[5,10,15,20],
//总条数
total:0,
methods:
//当前页改变时触发的事件
currentChange(v){
this.currentPage = v;
this.loadUserList();
this.loading = true;
},
//每页条数改变时触发的事件
sizeChange(v){
this.currentPage = 1;
this.pageSize = v;
this.loadUserList();
this.loading = true;
}
/加载列表
loadUserList(){
let pageParm = {"page":this.currentPage,"pageSize":this.pageSize,"searchForm":this.searchForm};
this.loading = true;
this.$http.post("/user/list",pageParm).then(res => {
this.tableData = res.data.data;
this.total = res.data.total;
this.loading=false;
});
}
js:
Mock.mock("/user/list","post",function (options) {
//分页参数json格式字符串
let pageJsonStr = options.body;
//分页参数json对象
let pageJsonObj = JSON.parse(pageJsonStr);
//获取当前页
let page = pageJsonObj.page;
//获取每页条数
let pageSize = pageJsonObj.pageSize;
let begin = (page-1)*pageSize;
let end = page*pageSize;
let data = result.list;
return {data:data.slice(begin,end),
total:result.list.length
};
});
3.6 编辑/删除
表格中加一列
<el-table-column label="操作">
<template slot-scope="scope">
<el-button size="mini" @click="edit(scope.$index, scope.row)">编辑</el-button>
<el-button size="mini" type="danger" @click="remove(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
3.6.1删除
这些数据都是模拟的,并未真正实现
methods中remove方法
//删除单条数据
remove(i,r){
this.$confirm('亲,确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http.post("/user/remove",r).then(res=>{
if (res.data.success){
this.$message({
type: 'success',
message: res.data.msg
});
this.loadUserList();
}
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
}
user.js
Mock.mock("/user/remove","post",function (options) {
return{
success:true,
msg:"删除成功"
}
});
3.6.2 批量删除
teble中加一列
<el-table-column
type="selection"
width="55">
</el-table-column>
teble中加一个属性
@selection-change="selectionChange"
data:
//选中的行
selectRows: []
methods:
//选中复选框触发事件
selectionChange(v){
this.selectRows = v;
}
//批量删除
batchRemove(){
//是否选中一行
if (!this.selectRows.length){
this.$message.error('亲,请选择一行再删除!');
return;
}
//确认框
this.$confirm('亲,确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//点击确定后,执行
this.$http.post("/user/batchRemove",{"rows":this.selectRows}).then(res=>{
//如果成功
if (res.data.success){
this.$message({
type: 'success',
message: res.data.msg
});
//重新加载
this.loadUserList();
}
});
}).catch(() => {
//失败后执行
this.$message({
type: 'info',
message: '已取消删除'
});
});
}
user.js
Mock.mock("/user/batchRemove","post",function (options) {
return{
success:true,
msg:"删除成功"
}
});
效果:
3.6.3 编辑
3.6.3.1添加
添加一个弹出框,并且把form表单放进去
<!-- 面板 -->
<el-dialog :title="title" :visible.sync="visible" width="30%">
<!-- 编辑from表单 -->
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="用户名:">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="email:">
<el-input v-model="form.email"></el-input>
</el-form-item>
<el-form-item label="电话:">
<el-input v-model="form.phone"></el-input>
</el-form-item>
</el-form>
<!-- 编辑提交按钮 -->
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取 消</el-button>
<el-button type="primary" @click="visible = false">确 定</el-button>
</span>
</el-dialog>
data:
动态生成标题
弹出框默认不可见
//弹出框标题
title:"",
//弹出框是否可见
visible:false,
methods:
点击添加,显示弹出框
//添加
add(){
this.visible = true,
this.title = "添加用户"
}
3.6.3.2编辑
data:
//表单
form:{
name:"",
email:"",
phone:""
}
methods:
//编辑
edit(i,r){
//回显,遍历
for (let row in r){
this.form[row] = r[row]
}
this.visible = true,
this.title = "编辑用户"
}