目录
2,搜索按钮绑定单击事件,点击按钮发起查询请求,所以应该绑定到请求函数中
一,面包屑导航
从element粘贴
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>活动管理</el-breadcrumb-item>
<el-breadcrumb-item>活动列表</el-breadcrumb-item>
<el-breadcrumb-item>活动详情</el-breadcrumb-item>
</el-breadcrumb>
在element文件中进行添加BreadcrumbItem, Breadcrumb
二。卡片
从element粘贴
<!-- 卡片区域 -->
<el-card >
123
</el-card>
在element文件中进行添加Card
需要调整样式,尽量都写在css/global.css中
/* 给面包屑加间距 */
.el-breadcrumb{
margin-bottom: 15px;
font-size: 12px;
}
/* 给卡片加阴影 */
.el-card{
/* 添加阴影 */
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15) !important;
}
三,绘制搜索区域
在element里面搜索输入框
<div style="margin-top: 15px;">
<el-input placeholder="请输入内容" v-model="input3" class="input-with-select">
<el-select v-model="select" slot="prepend" placeholder="请选择">
<el-option label="餐厅名" value="1"></el-option>
<el-option label="订单号" value="2"></el-option>
<el-option label="用户电话" value="3"></el-option>
</el-select>
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</div>
但是是占满的
搜索布局,使用row组件
<el-row :gutter="20">
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
</el-row>
添加Col,和Row
<!-- 卡片区域 -->
<el-card>
<!-- 搜索与添加区域 -->
<el-row>
<el-col :span="8">
<el-input placeholder="请输入内容">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
</el-col>
<el-col :span="4">
<el-button type="primary">添加用户</el-button>
</el-col>
</el-row>
</el-card>
四。获取用户列表数据
在发起请求之前
先定义基本的
data()代表组件的私有数据
created()声明周期函数,在这里面定义发起数据请求,通过this来调用函数,在method中定义
methods()定义方法函数
export default {
data(){
return{
//获取用户列表的参数对象
queryInfo:{
query:'',
pagenum:1,
pagesize:2
}
}
},
created(){
//通过this来调用函数,这个函数在这里调用,但还未定义,在method里面定义
this.getUserList()
},
methods:{
//定义函数
async getUserList(){
//使用get方法发起请求,第一个参数是请求地址,从API中复制,还需要携带一些参数,get参数是用params进行指定,推荐先定义为私有数据
//get方法发起请求后会返回一个promise对象,为了简化,我们使用async优化操作,得到一个数据对象,解构出一个data属性,重命名为res
const {data:res} = await this.$http.get('users',{params:this.queryInfo})
console.log(res)
}
}
}
现场成功拿到数据了,我们可以进行一下赋值
先进行判断,是否获取成功
获取失败就弹出失败窗口
if (res.meta.status !== 200) {
return this.$message.error('获取用户列表失败!')
}
//如果获取成功了,就要保存数据,先定义一个私有数据
this.userlist = res.data.users
this.total = res.data.total
console.log(res)
data(){
return{
//获取用户列表的参数对象
queryInfo:{
query:'',
pagenum:1,
pagesize:2
},
//保存所有的用户列表
userlist:[],
//总数据条数
total:0,
然后进行渲染数据
<!-- 用户列表区域 ,通过data指定数据源,stripe隔行变色-->
<el-table :data="userlist" border stripe >
<!-- 放一些模版列 -->
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="邮箱" prop="email"></el-table-column>
<el-table-column label="电话" prop="mobile"></el-table-column>
<el-table-column label="角色" prop="role_name"></el-table-column>
<el-table-column label="状态" prop="mg_state"></el-table-column>
<el-table-column label="操作" ></el-table-column>
</el-table>
.el-table{
margin-top: 15px;
font-size: 12px;
}
索引列
<!-- 索引列 -->
<el-table-column type="index"></el-table-column>
五,作用域插槽的使用
(1) 渲染布尔值为开关效果
因为状态返回的是一个布尔值,是无法直接显示的,所以渲染为一个开关
在状态这一列,只要通过作用域插槽,接受scope,就可以通过scope row,代表着这一行的所有的的数据。再定义到状态上,就可以拿到状态数据了,怎么渲染为开关,搜索开关。el-switch
<template slot-scope="scope">
{{scope.row}}
</template>
v-model是一个双向数据绑定
<template slot-scope="scope">
<!-- {{scope.row}} -->
<el-switch v-model="scope.row.mg_state">
</el-switch>
</template>
(2)渲染操作窗口
<el-table-column label="操作" width="180px">
<template slot-scope="scope">
<!-- 修改按钮 -->
<el-button type="primary" icon="el-icon-edit" size="mini"></el-button>
<!-- 删除按钮 -->
<el-button type="danger" icon="el-icon-delete" size="mini"></el-button>
<!-- 分配角色按钮 鼠标是否可进入到 tooltip 中 :enterable="false"-->
<el-tooltip class="item" effect="dark" content="分配角色" placement="top" :enterable="false">
<el-button type="warning" icon="el-icon-setting" size="mini"></el-button>
</el-tooltip>
</template>
</el-table-column>
六,分页
element里面搜索分页
<!-- 分页区
size-change切换页数,切换下拉菜单就会触发这个事件,在handleSizeChange处理函数中可以拿到最新的这个
current-change当页码值发生切换就会触发第二个事件处理函数,
current-page:属性绑定,当前展示的是第几页,可以通过data里的quertInfo进行获取pagenum
page-sizes:下拉菜单中的选项设置,
page-size:每页显示多少条
layout:用来展示页面上的需要展示分页器的哪些功能组件
-->
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="queryInfo.pagenum" :page-sizes="[1, 2, 5, 10]" :page-size="queryInfo.pagesize"
layout="total, sizes, prev, pager, next, jumper" :total="total">
</el-pagination>
data() {
return {
//获取用户列表的参数对象
queryInfo: {
query: '',
//当前页数
pagenum: 1,
//当前每页显示多少条数据
pagesize: 2
},
//保存所有的用户列表
userlist: [],
//总数据条数
total: 0,
}
//监听pagesize改变的事件
handleSizeChange(newSize) {
console.log(newSize)
},
//监听页码值改变的事件
handleCurrentChange(newPage) {
console.log(newPage)
}
这样就可以正常监听到数据了
把监听到的新的页数保存到data中的pagesize里
//监听pagesize改变的事件
handleSizeChange(newSize) {
// console.log(newSize)
//把新监听到的数据重新赋值给data中
this.queryInfo.pagesize = newSize
//赋值之后,重新发生骑牛
this.getUserList()
},
//监听页码值改变的事件
handleCurrentChange(newPage) {
// console.log(newPage)
this.queryInfo.pagenum = newPage
this.getUserList()
}
七,实现用户状态的修改
在前台修改的用户状态刷新就会消失,没有同步到数据库中进行保存
1,实现这个功能需要监听到状态的改变
2,调用对应的API接口,保存到数据库中
搜索Switch开关
绑定change事件
<template slot-scope="scope">
<!-- {{scope.row}} -->
<!-- 绑定change函数,只要调用这个函数,就可以把用户信息传递过去,因为是通过v-model属性进行的双向绑定 -->
<el-switch v-model="scope.row.mg_state" @change="userStateChanged(scope.row)">
</el-switch>
//监听Switch开关状态的改变
async userStateChanged(userinfo) {
console.log(userinfo)
const { data: res } = await this.$http.put(`users/${userinfo.id}/state/${userinfo.mg_state}`)
if (res.meta.status !== 200) {
userinfo.mg_state = !userinfo.mg_state
return this.$message.error('更新用户状态失败!')
}
this.$message.success('更新用户状态成功!')
}
}
八,实现搜索功能
1,数据双向绑定,绑定到query上面
2,搜索按钮绑定单击事件,点击按钮发起查询请求,所以应该绑定到请求函数中
<!-- 搜索与添加区域 -->
<el-row>
<el-col :span="8">
<el-input placeholder="请输入内容" v-model="queryInfo.query">
<el-button slot="append" icon="el-icon-search" @click="getUserList"></el-button>
</el-input>
</el-col>
给搜索框添加一个情况的按钮
搜索“输入框”找到可清空的代码复制粘贴,即添加一个clearable属性就可以
然后在清空之后再次发请求,添加一个对叉号的单击事件@clear="getUserList"
<el-col :span="8">
<el-input placeholder="请输入内容" v-model="queryInfo.query" clearable @clear="getUserList">
<el-button slot="append" icon="el-icon-search" @click="getUserList"></el-button>
</el-input>
</el-col>
九,实现添加用户的功能
点击添加用户,可以弹出一个添加用户的对话框
在element搜索对话框,先进行按需导入.,并且引入
修改后的代码
<!-- 添加用户的对话框
visible.sync:用来控制显示和隐藏,绑定到一个布尔值,现在定义一个布尔值addDialogVisible在data中定义,默认值为false
-->
<el-dialog title="提示" :visible.sync="addDialogVisible" width="50%">
<!-- 对话框内容主题区 -->
<span>这是一段信息</span>
<!-- 底部按钮区 -->
<span slot="footer" class="dialog-footer">
<el-button @click="(addDialogVisible=false)">取 消</el-button>
<el-button type="primary" @click="(addDialogVisible=false)">确 定</el-button>
</span>
</el-dialog>
//控制添加用户对话框的显示和隐藏
addDialogVisible: false
对话框默认状态是隐藏,当点击对话框中的取消和确认按钮都会直接隐藏对话框
要想让对话框显示,只需要对添加用户的按钮添加一个单击事件
调整对话框的隐藏状态为TRUE即可
<el-button type="primary" @click="( addDialogVisible=true)">添加用户</el-button>
十,渲染添加用户的表单
搜索form表单
找到带验证的前四行复制
<!-- 添加用户的对话框
visible.sync:用来控制显示和隐藏,绑定到一个布尔值,现在定义一个布尔值addDialogVisible在data中定义,默认值为false
-->
<el-dialog title="添加用户" :visible.sync="addDialogVisible" width="50%">
<!-- 对话框内容主题区
粘贴过来一个表单,梳理表单
:model是一个数据绑定,绑定到一个添加表单项,并在data中定义
:rules是验证规则,拿到addForm的名称,并且重命名,进行定义对象
ref是表单的引用名称,重命名
prop验证规则的属性,直接添加到data中的验证属性里
-->
<el-form :model="addForm" :rules="addFormRules" ref="addFormRef" label-width="70px">
<el-form-item label="用户名" prop="username">
<el-input v-model="addForm.username"></el-input>
</el-form-item>
</el-form>
addDialogVisible: false,
//添加用户的表单数据,指向一个数据对象
addForm: {
username: ''
},
//添加表单的验证规则对象
addFormRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 10, message: '用户名的长度在 3 到 10 个字符', trigger: 'blur' }
]
},
剩下的文本框只需要粘贴复制即可