1.按需导入对话框组件,在element.js中
// 全局导入
import {
Button, Form, FormItem, Input, Message, Container, Header, Aside, Main, Menu, Submenu, MenuItem, Breadcrumb, BreadcrumbItem, Card, Row, Col, Table, TableColumn, Switch, Tooltip, Pagination, Dialog } from 'element-ui'
// 局部注册
Vue.use(Dialog)
2.Dialog对话框结构
// title标题,visible控制对话框的显示与隐藏
<el-dialog title="提示" :visible.sync="addDialogVisible" width="30%" :before-close="handleClose">
// 内容主体区
<span>这是一段信息</span>
// 底部按钮区
<span slot="footer" class="dialog-footer">
// 按钮绑定click事件,用来控制对话框显示与隐藏
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addDialogVisible = false">确 定</el-button>
</span>
</el-dialog>
1.Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。
// 通过model双向数据绑定到addForm
<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-item label="密码" prop="password">
<el-input v-model="addForm.password"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="addForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="addForm.mobile"></el-input>
</el-form-item>
</el-form>
// 添加用户的表单数据
addForm: {
username: '',
password: '',
email: '',
mobile: ''
},
// 添加表单的验证规则对象
addFormRules: {
username: [
{
required: true, message: '请输入用户名', trigger: 'blur' },
{
min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
],
password: [
{
required: true, message: '请输入密码', trigger: 'blur' },
{
min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
],
email: [
{
required: true, message: '请输入邮箱', trigger: 'blur' }
],
mobile: [
{
required: true, message: '请输入手机号', trigger: 'blur' }
]
}
1.设置变量,如checkEmail用来检验邮箱输入合法性,rule是验证规则,value是被验证的值,cb是回调函数。通过正则表达式验证regEmail.test(value),则返回回调函数,否则返回错误提示。
// 验证邮箱的规则
var checkEmail = (rule, value, cb) => {
// 验证邮箱的正则表达式
const regEmail = /^\w+@\w+(\.\w+)+$/
if (regEmail.test(value)) {
return cb()
}
// 返回一个错误提示
cb(new Error('请输入合法的邮箱'))
}
// 验证手机号的规则
var checkMobile = (rule, value, cb) => {
const regMobile = /^1[34578]\d{9}$/
if (regMobile.test(value)) {
return cb()
}
// 返回一个错误提示
cb(new Error('请输入合法的手机号码'))
}
2.通过 validator 属性来使用校验规则。
email: [
{
required: true, message: '请输入邮箱', trigger: 'blur' },
{
validator: checkEmail, trigger: 'blur' }
],
mobile: [
{
required: true, message: '请输入手机号', trigger: 'blur' },
{
validator: checkMobile, trigger: 'blur' }
]
1.首先给对话框添加 close 事件
<el-dialog title="添加用户" :visible.sync="addDialogVisible" width="30%"
:before-close="handleClose" @close="addDialogClosed">
2.添加监听关闭的事件,通过 ref 调用 reset
// 监听添加对话框的关闭事件
addDialogClosed () {
this.$refs.addFormRef.resetFields()
}
1.给“确定”按钮,添加 click 事件
<el-button type="primary" @click="addUser">确 定</el-button>
2.通过箭头函数,检查valid的值是否正确,不正确直接返回;否则发起网络请求
addUser () {
this.$refs.addFormRef.validate(valid => {
if (!valid) return
// 可以发起真正的网络请求
})
}
1.点击“确定”按钮,预校验通过后,发起HTTP请求
this.$http.post发起请求后,有一个promise对象,我们可以通过await,async 优化。
并通过{ data:res } 解构赋值
addUser () {
this.$refs.addFormRef.validate(async valid => {
if (!valid) return false
// 可以发起真正的网络请求
const {
data: res } = await this.$http.post('users', this.addForm)
if (res.meta.status !== 201) {
this.$message.error('添加用户失败')
}
this.$message.success('添加用户成功')
// 隐藏添加用户的对话框
this.addDialogVisible = false
// 重新获取用户列表
this.getUserList()
})
}
1.给“修改按钮”,添加点击事件
<!-- 修改按钮 -->
<el-button type="primary" icon="el-icon-edit" size="mini" @click="showEditDialog()">
</el-button>
2.修改用户对话框,通过 :visible.sync 的值控制显示与隐藏
<!-- 修改用户的对话框 -->
<el-dialog title="修改用户" :visible.sync="editDialogVisible" width="50%">
<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-item label="密码" prop="password">
<el-input v-model="addForm.password"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="addForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="addForm.mobile"></el-input>
</el-form-item>
</el-form>
<!-- 底部按钮区 -->
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editDialogVisible = false">确 定</el-button>
</span>
</el-dialog>
3.在 data 里面注册,默认为 false
// 控制修改对话框的显示与隐藏
editDialogVisible: false
4.当点击事件发生后,将 editDialogVisible 变为 true
// 展示修改用户的对话框
showEditDialog () {
this.editDialogVisible = true
}
在这里出现过一个小错误,没有将 showEditDialog 写在methods中,报错如下:
TypeError: “_vm.showEditDialog is not a function”
1.打开修改用户对话框,根据用户ID,查询用户的旧数据,并且将之前的旧数据填充到对话框中。
通过形参(scope.row.id)的形式,拿到用户的ID
// 修改按钮
<el-button type="primary" icon="el-icon-edit" size="mini" @click="showEditDialog(scope.row.id)"></el-button>
2.获取到ID之后,发起HTTP请求
// 展示修改用户的对话框
async showEditDialog (id) {
// console.log(id)
const {
data: res } = await this.$http.put('users/' + id)
if (res.meta.status !== 200) {
return this.$message.error('修改用户失败')
}
this.editForm = res.data
this.editDialogVisible = true
}
3.在data中定义一个空对象,存放对应的用户信息
// 查询到的用户信息对象
editForm: {
}
1.修改用户对话框
<!-- 修改用户的对话框 -->
<el-dialog title="修改用户" :visible.sync="editDialogVisible" width="50%">
<el-form :model="editForm" :rules="editFormRules" ref="editFormRef"
label-width="70px">
<el-form-item label="用户名">
<el-input v-model="editForm.username" disabled></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="editForm.email"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="editForm.mobile"></el-input>
</el-form-item>
</el-form>
<!-- 底部按钮区 -->
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="editDialogVisible = false">确 定</el-button>
</span>
</el-dialog>
2.增加校验规则
editFormRules: {
email: [
{
required: true, message: '请输入邮箱', trigger: 'blur' },
{
validator: checkEmail, trigger: 'blur' }
],
mobile: [
{
required: true, message: '请输入手机号', trigger: 'blur' },
{
validator: checkMobile, trigger: 'blur' }
]
}
1.首先给修改用户对话框绑定 close 事件
<el-dialog title="修改用户" :visible.sync="editDialogVisible"
width="50%" @close="editDialogClosed">
2.在 methods 中定义方法,调用表单的引用 editFormRef ,然后调用 resetFields 函数 重置
// 监听修改用户对话框的关闭事件
editDialogClosed () {
this.$refs.editFormRef.resetFields()
}
1.用户点击“确定”按钮后,先对表单数据进行预验证,验证通过才发起真正的数据请求。
给“确定”按钮绑定 click 事件
<el-button type="primary" @click="editUserInfo">确 定</el-button>
2.引用表单的引用,然后调用 validate 函数进行验证,验证结果通过 valid 拿到
editUserInfo () {
this.$refs.editFormRef.validate(valid => {
if (!valid) return
// 发起修改用户的数据请求
})
}
1.通过表单预验证后,则发起真正的网络请求
API文档
### 1.3.5. 编辑用户提交
- 请求路径:users/:id
- 请求方法:put
- 请求参数
| 参数名 | 参数说明 | 备注 |
| ------ | -------- | --------------------------- |
| id | 用户 id | 不能为空 `参数是url参数:id` |
| email | 邮箱 | 可以为空 |
| mobile | 手机号 | 可以为空 |
- 响应参数
| 参数名 | 参数说明 | 备注 |
| ------- | -------- | ---- |
| id | 用户 ID | |
| role_id | 角色 ID | |
| mobile | 手机号 | |
| email | 邮箱 | |
- 响应数据
```json
/* 200表示成功,500表示失败 */
{
"data": {
"id": 503,
"username": "admin3",
"role_id": 0,
"mobile": "111",
"email": "[email protected]"
},
"meta": {
"msg": "更新成功",
"status": 200
}
}
2.发起 put 请求
editUserInfo () {
this.$refs.editFormRef.validate(async valid => {
if (!valid) return false
// 发起修改用户的数据请求
// 发起修改用户的请求后,服务器会返回 promise,为了简化 promise 操作,加上 await ;
// 在 valid 函数前加上 aysnc;在 await 返回的对象中解构赋值,解构出一个data属性,重命名为res
const {
data: res } = await this.$http.put('users/' + this.editForm.id, {
email: this.editForm.email,
mobile: this.editForm.mobile
})
// 查看状态
if (res.meta.status !== 200) {
return this.$message.error('更新用户失败')
}
// 关闭对话框
this.editDialogVisible = false
// 刷新数据列表
this.getUserList()
// 提示修改成功
this.$message.success('更新用户信息成功!')
})
}
1.采用组件 MessageBox 进行消息提示,首先引入,然后局部注册
以后所有组件都可以通过$confirm来弹出消息提示框
// 局部注册不用Vue.use
Vue.prototype.$confirm = MessageBox.confirm
2.给“删除”按钮,绑定click事件,根据 Id 删除对应的用户,通过 scope.row.id 获取对应用户 Id
<el-button type="danger" icon="el-icon-delete" size="mini" @click="removeUserById(scope.row.id)"></el-button>
3.首先获取用户选择(删除/取消)
// 根据用户ID值,删除用户
async removeUserById (id) {
// 弹框询问用户是否删除数据,通过 confirmResult 来接受用户选择的结果
const confirmResult = await this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(err => {
return err
})
// 如果用户确认删除,则返回值为字符串 confirm
// 如果用户取消了删除,则返回值为字符串 cancel
// 发起http请求,调用 delete 方法
const {
data: res } = await this.$http.delete('users/' + id)
if (res.meta.status !== 200) {
return this.$message.error('删除用户失败!')
}
// 删除成功则重新刷新列表
this.$message.success('删除用户成功!')
this.getUserList()
}