目录

一、实现数据的分页效果

二、实现用户状态的修改

三、实现搜索功能

四、实现添加用户功能

4.1 点击按钮弹出添加用户的对话框

4.2在对话框中渲染一个添加用户的表单

4.3 实现自定义规则校验输入内容

4.4 实现添加表单的重置功能

4.5  添加用户前的预校验功能

4.6 发起请求添加一个新用户

五、用户修改的操作

  5.1根据ID查询用户信息

 5.2绘制修改用户的表单

5.3    修改表单关闭之后的重置操作

5.4  提交表单之前的预验证功能

5.5  提交修改用户请求


一、实现数据的分页效果

我们用这个功能比较全的分页组件

vue2 element ui 布局模版 elementui页面布局器_vue.js

<!-- 分页区域 -->
            <!--  @size-change="handleSizeChange"  -->
            <!-- @current-change="handleCurrentChange" 在当前页改变的时候,触发handleCurrentChange -->
            <!-- :page-sizes="[1, 2, 5,10 ]"   每页可以显示1 2 5 10 具体多少可以根据我们自己选 -->
            <!-- :page-size是一个数组 -->
            <!-- :page-size="queryInfo.page-size"  当前每页显示多少条数据 -->
            <!-- layout="total, sizes, prev, pager, next, jumper"  layout指定页面上展示什么功能组件
              total展示一共多少条  sizes展示每页显示多少条的一个下拉菜单 -->
              <!-- :total="total">  绑定我们有多少条数据 -->
            <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>
<script>
export default {
    name:"Users",
    data(){
        return{
            queryInfo:{
                query:'',
                // 当前的页数
                pagenum:1,
                // 每页显示多少条数据 默认每页显示两条
                pagesize:2,
            },
         userList:[],
        //  总数据条数
         total:0
        }
    },
    created(){
    //   每当组件创建成功时就初始化用户界面
    this.getUserList()
    },
    methods:{
       async getUserList(){
        // 使用axios发起get请求
         const {data:res}  =  await this.$http.get('users',{params:this.queryInfo})
         if(res.meta.status !==200) 
           return this.$message.error('获取用户列表失败!')
 
         this.userList = res.data.users
         this.total = res.data.total
        },
 
        // 监听pagesize改变的事件
        handleSizeChange(newSize){
            // 这个pagesize就是空值每页显示多少条的
          this.queryInfo.pagesize = newSize
        //   当我们重新设置了每页显示多少条之后,我们可以重新发起一个请求获取数据来渲染页面
          this.getUserList()
        },
 
        // 监听页码值改变的事件
        handleCurrentChange(newPage){
            // 这个地方也是同理
           this.queryInfo.pagenum = newPage
           this.getUserList()
        }
    }
}
</script>

二、实现用户状态的修改

在上一篇的内容中我们实现了状态添加开关,但是没有到数据库中进行保存,我们刷新之后又恢复到原来的内容了

vue2 element ui 布局模版 elementui页面布局器_前端_02

 

vue2 element ui 布局模版 elementui页面布局器_html5_03

我们再switch开关上面添加一个@change的函数,这个是Element-UI文档中的,我们只需要定义后面的函数参数就可以了,然后将scope.row参数传入到里面

<el-table-column  label="状态" prop="mg_state">
                    <!--@change  是文档中规定的switch状态发生变化时的回调函数  -->
                    <template slot-scope="scope" >
                       <!-- {{scope.row}} 这个是这一行的数据 包括姓名、邮箱、状态等等 -->
                       <el-switch v-model="scope.row.mg_state" @change="userStateChanged(scope.row)">
                      </el-switch>

                    </template>
                </el-table-column>
// 监听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('更新用户状态成功!')
        }

vue2 element ui 布局模版 elementui页面布局器_elementui_04

三、实现搜索功能

getUserList函数再我们初始化页面的时候就已经写完了

这个地方后端应该是做了一个模糊查询,根据某一点的内容来搜索内容,我们双向绑定的是queryInfo.query属性,然后当我们点击搜索按钮的时调用getUserList回调函数发起请求,最终我们得到数据返回到页面上

我们下input文本框上还有一个clearable属性,这个的目的就是让文本框的最右侧有一个x,我们点一下之后,整个文本框就会清空

@clear="getUserList"  @clear的作用就是在发生清空文本框的时候,会执行一个getUserList函数来渲染用户列表

<!-- 第一列 :span="7"指定宽度  一共24一行 -->
                <el-col :span="10">
                    <!-- 给搜索框做双向数据绑定 -->
                   <el-input clearable @clear="getUserList" v-model="queryInfo.query" placeholder="请输入内容">
                    <!-- 给搜索按钮绑定单击事件 -->
                     <el-button @click="getUserList" slot="append" icon="el-icon-search"></el-button>
                   </el-input>
                </el-col>
async getUserList(){
        // 使用axios发起get请求
         const {data:res}  =  await this.$http.get('users',{params:this.queryInfo})
         if(res.meta.status !==200) 
           return this.$message.error('获取用户列表失败!')

         this.userList = res.data.users
         this.total = res.data.total
        },

最终效果图:当我们点击文本框最右侧的x时,我们的页面的内容会展示全部的内容

vue2 element ui 布局模版 elementui页面布局器_html5_05

四、实现添加用户功能

4.1 点击按钮弹出添加用户的对话框

依然使用Element-UI中的组件

vue2 element ui 布局模版 elementui页面布局器_前端_06

 

我们在添加用户按钮上定义一个鼠标单击事件,当点击按钮之后,让我们自定义的属性 addDialogVisible为true,代表显示对话框

<el-button @click="addDialogVisible=true" type="primary">添加用户</el-button>

下面就是对话框的代码

<!-- 添加用户的对话框 -->
            <!-- title 是对话框最上面的标题  :visible.sync控制对话框的显示和隐藏-->
            <!-- width设置对话框的宽度   :before-close 这是一个事件,在对话框关闭之前一般会触发一个函数 -->
            <el-dialog
                title="提示"
                :visible.sync="addDialogVisible"
                width="50%">
                <!-- 内容主体区 -->
                <span>这是一段信息</span>

                <!-- 底部的按钮区 -->
                <span slot="footer" class="dialog-footer">
                    <!--  @click="addDialogVisible = false" 当我们点击之后,将对话框隐藏 -->
                    <el-button @click="addDialogVisible = false">取 消</el-button>
                    <el-button type="primary" @click="addDialogVisible = false">确 定</el-button>
                </span>
            </el-dialog>

效果图:这个对话框我们点击右上角的×可以关闭,取消也可以关闭,单击出对话框以外的内容也可以关闭

vue2 element ui 布局模版 elementui页面布局器_elementui_07

 

4.2在对话框中渲染一个添加用户的表单

我们也可以复习一下我们之前写过的表单验证:

<!-- 添加用户的对话框 -->
            <!-- title 是对话框最上面的标题  :visible.sync控制对话框的显示和隐藏-->
            <!-- width设置对话框的宽度   :before-close 这是一个事件,在对话框关闭之前一般会触发一个函数 -->
            <el-dialog
                title="提示"
                :visible.sync="addDialogVisible"
                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">
                    <!--  @click="addDialogVisible = false" 当我们点击之后,将对话框隐藏 -->
                    <el-button @click="addDialogVisible = false">取 消</el-button>
                    <el-button type="primary" @click="addDialogVisible = false">确 定</el-button>
                </span>
            </el-dialog>
//  添加用户的表单数据
        addForm:{
            username:'',
            password:'',
            email:'',
            mobile:''

        },
        // 添加表单的验证规则对象
        addFormRules:{
            username:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入用户名',trigger:'blur'},
                {min:3,max:10,message: '长度在 3 到 10 个字符', trigger: 'blur'}
            ],
            password:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入密码',trigger:'blur'},
                {min:6,max:15,message: '长度在 6 到 15 个字符', trigger: 'blur'}
            ],
            email:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入邮箱',trigger:'blur'},
            ],
            mobile:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入手机号',trigger:'blur'},
            ],
        }

vue2 element ui 布局模版 elementui页面布局器_javascript_08

 

4.3 实现自定义规则校验输入内容

data(){
        // 验证邮箱的规则   cb是一个回调函数
        var checkEmail =(rule,value,cb)=>{
            // 验证邮箱的正则
            const regEmail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/

            if(regEmail.test(value)){
                // 合法的邮箱
                return cb()
            }
            cb(new Error('请输入合法的邮箱'))
        }

        // 验证手机号的规则
        var checkMobile=(rule,value,cb)=>{
            // 电话号码的正则表达式
            const regMobile=/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/
            if(regMobile.test(value)){
                return cb()
            }
            cb(new Error('请输入合法的手机号码'))
        }

}

 

email:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入邮箱',trigger:'blur'},
                // 自定义验证
                {validator:checkEmail,trigger:'blur'}
            ],
            mobile:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入手机号',trigger:'blur'},
                // 自定义验证
                {validator:checkMobile,trigger:'blur'}
            ],
        }

当然我们除了这一种方法,我们也开可以直接在规则找那个添加一个正则表达式,这两种方式都是可以的,想用哪种用哪种,下面这种比较方便

email:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入邮箱',trigger:'blur'},
                // 自定义验证
                // {validator:checkEmail,trigger:'blur'}
                {pattern:/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/,message:'请输入正确的邮箱',trigger:'blur'}
            ],

效果图:

vue2 element ui 布局模版 elementui页面布局器_javascript_09

 

4.4 实现添加表单的重置功能

我们什么时候对表单进行重置操作?

    当我们关闭表单(在这里其实是对话框)之后进行重置操作

  注意这个地方是@close,在对话框关闭之后执行

<el-dialog
                @close="addDialogClosed"
                title="提示"
                :visible.sync="addDialogVisible"
                width="50%" >

表单的ref属性值是addFormRef

<el-form :model="addForm" :rules="addFormRules" ref="addFormRef" label-width="70px">

 编写@close回调函数

// 监听添加用户对话框的关闭事件
        addDialogClosed(){
            // 获取表单
           this.$refs.addFormRef.resetFields()
        }

4.5  添加用户前的预校验功能

那我们什么时候进行校验功能呢?

    在我们点击确认按钮的时候,绑定一个单击事件,然后对我们填写的内容进行预验证,如果验证不通过的话会依然停留在对话框阶段

<el-button type="primary" @click="addUser">确 定</el-button>
// 添加用户操作
        addUser(){
            // 获取表单
            this.$refs.addFormRef.validate(valid=>{
                console.log(valid)
                if(!valid){
                    // 校验没有通过
                    return
                }
                // 校验通过了可以发送AJAX请求

            })
        },

 

效果:此时输出的结果是false

vue2 element ui 布局模版 elementui页面布局器_vue.js_10

4.6 发起请求添加一个新用户

vue2 element ui 布局模版 elementui页面布局器_vue.js_11

vue2 element ui 布局模版 elementui页面布局器_html5_12

 

// 添加用户操作
        addUser(){
            // 获取表单
            this.$refs.addFormRef.validate(async valid=>{
                console.log(valid)
                if(!valid){
                    // 校验没有通过
                    return
                }
                // 校验通过了可以发送AJAX请求
                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()
            })
        },

vue2 element ui 布局模版 elementui页面布局器_javascript_13

 

vue2 element ui 布局模版 elementui页面布局器_html5_14

 

 

五、添加用户修改的操作

我们使用这个基本用法的对话框

vue2 element ui 布局模版 elementui页面布局器_html5_15

<!-- 修改按钮 -->
<el-button @click="showEditDialog()"  size="mini" type="primary" icon="el-icon-edit">  </el-button>
<!-- 修改用户的对话框 -->
            <el-dialog
                title="修改用户"
                :visible.sync="editDialogVisible"
                width="50%">
                <span>这是一段信息</span>

                <!-- 对话框角 -->
                <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>

 

// 展示编辑用户的对话框
        showEditDialog(){
          this.editDialogVisible = true
        }

vue2 element ui 布局模版 elementui页面布局器_javascript_16

 

  5.1根据ID查询用户信息

vue2 element ui 布局模版 elementui页面布局器_前端_17

 

将函数改为下面的形式,并且带data中添加一个editForm属性

<!-- 修改按钮 -->
<el-button @click="showEditDialog(scope.row.id)"  size="mini" type="primary" icon="el-icon-edit">  </el-button>
// 查询到的用户信息对象
        editForm:{},
// 展示编辑用户的对话框
        async showEditDialog(id){
            // 打开编辑用户的对话框
          this.editDialogVisible = true

          const{data:res} = await this.$http.get('users/'+id)
          if(res.meta.status !==200)
            return this.$message.error('查询用户信息失败')
          this.editForm = res.data

        }

通过上面的样子我们就可以获取到用户信息了

 5.2绘制修改用户的表单

<el-dialog
                title="修改用户"
                :visible.sync="editDialogVisible"
                width="50%">

                <el-form :model="editForm" :rules="editFormRules" ref="editFormRef" label-width="70px">
                  
                    <el-form-item label="用户名">
                        <!-- disabled 代表禁用,不能改 -->
                      <el-input disabled v-model="editForm.username"></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>
editFormRules:{
            email:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入邮箱',trigger:'blur'},
                // 自定义验证
                {validator:checkEmail,trigger:'blur'}
            ],
            mobile:[
                // trigger:'blur'失去焦点后开始验证
                {required:true,message:'请输入手机号',trigger:'blur'},
                // 自定义验证
                {validator:checkMobile,trigger:'blur'}
            ],
        }

vue2 element ui 布局模版 elementui页面布局器_vue.js_18

 

5.3    修改表单关闭之后的重置操作

添加@close事件,在表单关闭之后执行回调函数,当我们在编写者一半关闭后再打开,页面展示的就是还是数据库中的内容

<!-- 修改用户的对话框 -->
            <el-dialog
                 @close="editDialogClosed"
                title="修改用户"
                :visible.sync="editDialogVisible"
                width="50%">
// 修改用户对话框关闭之后重置表单内容
        editDialogClosed(){
            this.$refs.editFormRef.resetFields()
        }

5.4  提交表单之前的预验证功能

我们在确定按钮上面进行绑定

<el-button  type="primary" @click="editUserInfo">确 定</el-button>
// 提交修改用户的预验证功能
        editUserInfo(){
            this.$refs.editFormRef.validate(valid=>{
                console.log(valid)
            })
        }

vue2 element ui 布局模版 elementui页面布局器_前端_19

 

5.5  提交修改用户请求

vue2 element ui 布局模版 elementui页面布局器_html5_20

 

// 提交修改用户的预验证功能
        editUserInfo(){
            this.$refs.editFormRef.validate( async valid=>{
                // console.log(valid)
                if(!valid)
                   return
                 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('更新用户信息失败')
            })
        }

vue2 element ui 布局模版 elementui页面布局器_elementui_21

 

vue2 element ui 布局模版 elementui页面布局器_前端_22