<el-container style="height: 500px; border: 1px solid #eee">
<!-- el-container 构建整个页面框架 -->
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
el-aside 构建左侧菜单
<el-menu :default-openeds="['1', '3']" :default-active="'1-1'">
<!-- el-menu 构建左侧菜单内容 常用属性如下 -->
<!-- :default-openeds 设置默认展开的选项 通过菜单的 index值来关联
:default-active 设置默认选中的选项 通过菜单的 index值来关联-->
<el-submenu index="1">
<!-- el-submenu:可展开的菜单,常用属性:
index:菜单下标,文本类型,不能是数组类型。
-->
<template slot="title"><i class="el-icon-message"></i>导航一</template>
<!-- template: 对应el-submenu的菜单名。-->
<!-- i:设置菜单图标:通过class属性实例 :
el-icon-message,
el-icon-menu
el-icon-setting
-->
<el-menu-item-group>
<!-- el-menu-item-group:设置分组 此处可省略不写-->
<template slot="title">分组一</template>
<el-menu-item index="1-1">选项1</el-menu-item>
<!-- el-menu-item:菜单的子节点,不可再展开,常用属性:
index: index:菜单下标,文本类型,不能是数组类型。 -->
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
<el-submenu index="1-3">
<template slot="title">选项3</template>
<el-menu-item index="1-3-1">选项3-1</el-menu-item>
<el-menu-item index="1-3-2">选项3-2</el-menu-item>
</el-submenu>
</el-submenu>
</el-menu>
</el-aside>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
vue router动态构建左侧菜单:
<template>
<el-container style="height: 500px; border: 1px solid #eee">
<!-- el-container 构建整个页面框架 -->
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<el-menu router>
<!-- $router.options.routes $router.options读取到配置文件 然后 .routes 获取到数组routes-->
<!--这里先获取到index下标 然后给el-submenu 设置属性index 给他动态的值index 防止点击时同时展开 +‘’ 是为了让他转换为字符串-->
<el-submenu v-for="(item,index) in $router.options.routes" :index="index+''">
<template slot="title">{{item.name}}</template>
<el-menu-item v-for="(item2,index2) in item.children" :index="item2.path">{{item2.name}}</el-menu-item>
</el-submenu>
</el-menu>
</el-aside>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</template>
menu与router的绑定:
实现点击后跳转到对应页面
-
<el-menu> 标签添加router属性
<el-menu router>
</el-menu>
-
在页面添加 <router-view></router-view>标签 他是一个容器,动态渲染你的router
<el-main>
<router-view></router-view>
</el-main>
-
<el-menu-item>标签的index值,就是要跳转的router。
<el-menu-item v-for="(item2,index2) in item.children" :index="item2.path">{{item2.name}}</el-menu-item>
设置默认加载的页面:
redirect: “/pageOne”,
const routes = [
{
path: '/',
name: "导航一",
component: Index,
redirect: "/pageOne",
children: [
·················
]
}
]
设置选中的选项高亮显示:
$route.path 字符串,等于当前路由对象的路径,会被解析为绝对路径,
如 "/home/news" 。
<el-menu-item v-for="(item2,index2) in item.children"
:index="item2.path"
:class="$route.path == item2.path ? 'is-active' : '' ">
{{item2.name}}</el-menu-item>
设置默认展开:
:default-openeds="[]"
<el-menu router :default-openeds="['0','1']">
</el-menu>
引入一个表格组件,并进行修改,放入到页面一
<template>
<div>
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
fixed
prop="id"
label="编号"
width="150">
</el-table-column>
<el-table-column
prop="name"
label="用户名"
width="120">
</el-table-column>
<el-table-column
prop="pwd"
label="密码"
width="120">
</el-table-column>
<el-table-column
prop="perms"
label="权限"
width="120">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
<el-button type="text" size="small">编辑</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
methods: {
handleClick(row) {
console.log(row);
}
,
page(currentPage){
alert(currentPage);
}
},
data() {
return {
tableData: [{
id: '2016-05-02',
name: '王小虎',
pwd: '上海',
perms: '普陀区'
}, {
date: '2016-05-04',
name: '王小虎',
province: '上海',
city: '普陀区',
address: '上海市普陀区金沙江路 1517 弄',
zip: 200333
}, {
date: '2016-05-01',
name: '王小虎',
province: '上海',
city: '普陀区',
address: '上海市普陀区金沙江路 1519 弄',
zip: 200333
}, {
date: '2016-05-03',
name: '王小虎',
province: '上海',
city: '普陀区',
address: '上海市普陀区金沙江路 1516 弄',
zip: 200333
}]
}
}
}
</script>
引用一个分页组件:
<el-pagination
background
layout="prev, pager, next"
page-size="5"
:total="50"
@current-change="page"
>
<!-- page-size设置每页的数据条数
:total="1000" 设置总记录数
@current-change:实现分页操作
-->
</el-pagination>
写一个方法 page 实现分页切换:
这个方法在上面已经使用 :@current-change=“page”
<script>
export default {
methods: {
handleClick(row) {
console.log(row);
}
,
page(currentPage){
alert(currentPage);
}
},
data() {
return {
}
}
}
</script>
修改springboot:
@Autowired
private UserRepository userRepository;
// @GetMapping("/findAll")
// public List<User> findAll() {
// return userRepository.findAll();
// }
//使用带分页查询的findAll方法
@GetMapping("/findAll/{page}/{size}")
public Page<User> findAll(@PathVariable("page") Integer page, @PathVariable("size") Integer size) {
PageRequest pageable = PageRequest.of(page-1,size);
//因为是默认从0开始 所以把输入的page 进行-1操作
//参数: page:要查询的页数 size每页的数据条数
return userRepository.findAll(pageable);
}
}
导入axios:
使用created():
<script>
export default {
methods: {
handleClick(row) {
}
,
page(currentPage){
console.log(currentPage);
})
}
},
created() {
axios.get('http://localhost:8181/user/findAll/1/1').then((resp) =>{
console.log(resp)
this.tableData = resp.data.content //获取实际的数据内容
})
},
data() {
return {
*********
}
}
}
</script>
获取总数据数 在分页组件中使用:
<script>
export default {
methods: {
handleClick(row) {
console.log(row);
}
,
page(currentPage){
})
}
},
created() {
axios.get('http://localhost:8181/user/findAll/1/1').then((resp) =>{
console.log(resp)
this.tableData = resp.data.content //获取实际的数据内容
this.total = resp.data.totalElements//获取总数据数
})
},
data() {
return {
total: null,
tableData: null
}
}
}
</script>
<el-pagination
background
layout="prev, pager, next"
page-size="1"
:total="total"
@current-change="page"
>
<!-- page-size设置每页的数据条数 :total="1000" 设置总记录数 -->
</el-pagination>
实现分页 切换数据:
methods: {
handleClick(row) {
console.log(row);
}
,
page(currentPage){
axios.get('http://localhost:8181/user/findAll/'+currentPage+'/1').then((resp) =>{
console.log(resp)
this.tableData = resp.data.content //获取实际的数据内容
this.total = resp.data.totalElements//获取总数据数
})
}
},
使用表单组件实现添加数据:
<template>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<!-- :model:用于绑定数据 :rules:用于绑定检验规则 和prop=""关联 -->
<el-form-item label="用户名" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="密码" prop="pwd">
<el-input v-model="ruleForm.pwd"></el-input>
</el-form-item>
<el-form-item label="权限" prop="perms">
<el-input v-model="ruleForm.perms"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
ruleForm: {
name: '',
pwd: '',
perms: '',
},
rules: {
name: [
{ required: true, message: '请输入用户名称', trigger: 'blur' },
//required 是否必填 message 提示信息 trigger 触发事件 blur 失去焦点时触发
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
pwd: [
{ required: true, message: '请输入密码', trigger: 'change' }
],
perms: [
{ type: 'date', required: true, message: '请选择权限', trigger: 'change' }
],
date2: [
{ type: 'date', required: true, message: '请选择时间', trigger: 'change' }
],
type: [
{ type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
],
resource: [
{ required: true, message: '请选择活动资源', trigger: 'change' }
],
desc: [
{ required: true, message: '请填写活动形式', trigger: 'blur' }
]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
//this.$refs[formName] 获取表单
//resetFields() 重置表单为空
}
}
}
</script>
在springboot中 写添加代码:
@PostMapping("/save")
public String save(@RequestBody User user) {
//@RequestBody这里使用注解将 user转为 json格式
User result = userRepository.save(user);
if (result != null) {
return "success";
}else {
return "error";
}
}
在前端进行调用 并设置:
<template>
<el-form style="width: 40%" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<!-- :model:用于绑定数据 :rules:用于绑定检验规则 和prop=""关联 -->
<el-form-item label="用户名" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="密码" prop="pwd">
<el-input v-model="ruleForm.pwd"></el-input>
</el-form-item>
<el-form-item label="权限" prop="perms">
<el-input v-model="ruleForm.perms"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
ruleForm: {
name: '',
pwd: '',
perms: '',
},
rules: {
****************
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
axios.post('http://localhost:8181/user/save',this.ruleForm).then((resp) =>{
if (resp.data == 'success'){
this.$router.push('/pageOne')
//跳转到查询页面
const h = this.$createElement;
this.$message({
message: h('p', null, [
h('i', { style: 'color: teal' }, '添加成功')
])
});
}
})
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
//this.$refs[formName] 获取表单
//resetFields() 重置表单为空
}
}
}
</script>
修改:
@GetMapping("/findById/{id}")
public User findById(@PathVariable("id") Integer id) {
return userRepository.findById(id).get();
}
@PutMapping("/update")
public String update(@RequestBody User user) {
User result = userRepository.save(user);
if (result != null) {
return "success";
}else {
return "error";
}
}
<el-button @click="edit(scope.row)" type="text" size="small">修改</el-button>
<script>
export default {
methods: {
edit(row) {
//跳转到修改页面 并获取到当前点击的 id
this.$router.push({
path: '/update',
query: {
id: row.id
}
})
}
}
</script>
<template>
<el-form style="width: 40%" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<!-- :model:用于绑定数据 :rules:用于绑定检验规则 和prop=""关联 -->
********************
</el-form>
</template>
<script>
export default {
data() {
return {
ruleForm: {
id: '',
name: '',
pwd: '',
perms: '',
},
rules: {
**********************
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
axios.put('http://localhost:8181/user/update',this.ruleForm).then((resp) =>{
if (resp.data == 'success'){
this.$router.push('/pageOne')
//跳转到查询页面
const h = this.$createElement;
this.$message({
message: h('p', null, [
h('i', { style: 'color: teal' }, '修改成功')
])
});
}
})
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
//this.$refs[formName] 获取表单
//resetFields() 重置表单为空
}
}
,created() {
//拿到id
//this.route.query.id
axios.get('http://localhost:8181/user/findById/'+this.$route.query.id).then((resp) =>{
this.ruleForm = resp.data
})
}
}
</script>
删除:
@DeleteMapping("/deleteById/{id}")
public void deleteById(@PathVariable("id") Integer id) {
userRepository.deleteById(id);
}
<el-button @click="deleteUser(scope.row)" slot="reference" type="text" size="small">删除</el-button>
deleteUser(row) {
axios.delete('http://localhost:8181/user/deleteById/'+row.id).then((resp) =>{
window.location.reload();//动态刷新一次
})
}
,