黑马】用户列表开发

目录

一,面包屑导航

二。卡片

三,绘制搜索区域

四。获取用户列表数据

五,作用域插槽的使用

(1) 渲染布尔值为开关效果

(2)渲染操作窗口

 六,分页

七,实现用户状态的修改

1,实现这个功能需要监听到状态的改变

2,调用对应的API接口,保存到数据库中

八,实现搜索功能

1,数据双向绑定,绑定到query上面

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' }
                ]
            },

剩下的文本框只需要粘贴复制即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值