2021 Vue全家桶开发电商管理系统(Element-UI)04- 系统主页和用户列表功能

电商管理系统主页

1 主页布局

1.1 布局容器的选择

这里我们选择ElementUI中的布局容器

在这里插入图片描述

复制代码即可。

1.2 实现导航菜单的基本结构

在这里插入图片描述

1.3 通过接口获取菜单数据

通过axios拦截器添加token验证,保证拥有获取数据的权限。

main.js

//axios请求拦截
axios.interceptors.request.use(config => {
  // console.log(config);
  config.headers.Authorization = window.sessionStorage.getItem('token');
  return config
})

在Home.vue中调用Vue生命周期提供的钩子函数created

export default {
  name: "Home",
  data() {
    return {
      menuList: []
    };
  },
  methods: {
    logout() {
      window.sessionStorage.clear();
      this.$router.push("/login");
    },
    async getMunuList() {
      //发送请求
      const { data: res } = await this.$http.get("menus");
      console.log(res);
      if (res.meta.status !== 200) return this.$messgae.error(res.meta.msg);
      this.menuList = res.data;
    }
  },
  created() {
    this.getMunuList();
  }
};
</script>

通过两层for循环渲染数据

1.4 添加导航分类图标

使用字体图标,创建iconList对象,以键值对形式存储,键为当前导航条的id,值为icon的font-class类。

data() {
    return {
        menuList: [],
        iconList: {
            "125": "icon-ziyuan",
            "103": "icon-suo",
            "101": "icon-shangpinchuangjian",
            "102": "icon-danju",
            "145": "icon-baobiao"
        }
    };
},
<i class="iconfont" :class="iconList[item.id]"></i>

1.5 每次只能打开一个菜单项

给menu添加unique-opened属性,true为只能开一项,false为无数项

1.6 实现侧边栏的折叠展开效果

  • menu的collapse属性,true折叠,false展开,通过动态绑定Boolean实现。

  • :collapse-transition="false"取消动画效果

  • 动态生成侧边栏宽度

    <el-aside :width="isCollapse?'64px': '200px'">
    

1.7 首页路由的重定向和路由链接改造

{
    path: '/home',
        component: Home,
            children: [
                { path: "", redirect: '/welcome' },
                { path: "/welcome", component: Welcome }
            ]
}

使用Menu的router属性,true启动路由跳转,index设置为item.path作为跳转地址,需要手动添加"/"
在这里插入图片描述

 <el-menu-item :index="'/'+item2.path" v-for="item2 in item.children" :key="item2.id">

1.8 通过路由的形式展示用户列表组件

1.9 保存左侧菜单激活状态

在这里插入图片描述

1.10 绘制用户列表组件的基本结构布局

头部为面包屑导航区域
在这里插入图片描述

卡片视图
在这里插入图片描述

1.11 获取用户列表数据

定义查询条件和本地数据

data() {
    return {
        queryInfo: {
            query: "",
            pagenum: 3,
            pagesize: 2
        },
        userList: []
    };
},
methods: {
    async getUserList() {
        const { data: res } = await this.$http.get("roles", {
            params: this.queryInfo
        });
        console.log(res);
        if (res.meta.status !== 200)
            return this.$message.error("获取用户列表失败");
        this.userList = res.data;
    }
}

1.12 渲染用户列表

使用Table

<!-- 用户列表区域 -->
<el-table :data="userList" style="width: 100%" stripe>
    <el-table-column prop="roleName" label="职务" width="180"></el-table-column>
    <el-table-column prop="roleDesc" label="职务描述" width="180"></el-table-column>
</el-table>

添加索引列

<el-table-column type="index" label="#" width="180"></el-table-column>

自定义状态列显示

使用作用域插槽,scope.row获取当前行的数据

<el-table-column label="状态" width="180">
    <template v-slot="scope">
        <el-switch v-model="scope.row.mg_state" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
    </template>
</el-table-column>

操作列显示

使用button,并使用文字提示,当用户停留在setting时,显示提示文字

 <!-- 分配权限按钮 -->
<el-tooltip effect="dark" content="设置用户权限" placement="top" :enterable="false">
    <el-button type="warning" icon="el-icon-setting" size="small"></el-button>
</el-tooltip>

1.13 实现分页效果

页面布局:

在这里插入图片描述

<!-- 分页区域 -->
<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>
  • @size-change 每页显示记录条数变化触发事件
  • @current-change 当前页变化触发事件
  • :current-page 当前页 绑定请求参数
  • :page-sizes 可选择的每页显示条数
  • :page-size 当前显示条数 绑定请求参数
  • layout分页布局显示 总条数、选择条数器等等…
  • :total 总条数 绑定data数据

1.14 修改用户状态

步骤:

  1. 监听状态
  2. 状态改变时,发出请求,改变状态
  3. 更新失败,提示用户,状态取反;更新成功,提示用户。
<el-table-column label="状态" width="160">
    <template v-slot="scope">
        <el-switch
                   v-model="scope.row.mg_state"
                   active-color="#13ce66"
                   @change="userStateChange(scope.row)"
                   ></el-switch>
    </template>
</el-table-column>
async userStateChange(userinfo) {
    console.log(userinfo);
    const { data: res } = await this.$http.put(
        `users/${userinfo.id}/state/${userinfo.mg_state}`
    );
    if (res.meta.status !== 200) {
        return this.$message.error("更新用户列表失败");
        this.userinfo.mg_state = !this.userinfo.mg_state;
    }
    this.$message.success("更新用户状态成功");
}
}

1.15 实现搜索功能

  1. 搜索框双向绑定queryInfo.query查询参数
  2. 搜索按钮的处理函数为getUserList

这个方法是真的厉害,没想到

需求:在搜索框输入文字后,自动出现X 点击清空自动显示所有用户列表
在这里插入图片描述

在这里插入图片描述

clear的处理函数:

clearSearch() {
    this.queryInfo.query = "";
    this.getUserList();
}

1.16 渲染添加用户的对话框

在这里插入图片描述

渲染添加用户的表单

内容与之前的表单验证类似

新增:自定义表单验证validator

<el-form-item label="手机号" prop="phone">
    <el-input v-model="newUser.phone"></el-input>
</el-form-item>
 phone: [{validator: validatorPhone,trigger: "blur"}],
data() {
    var validatorPhone = (rule, value, callback) => {
        //手机号验证规则
        var reg = /^1[3|4|5|7|8][0-9]{9}$/;
        if (!reg.test(value)) {
            callback(new Error("手机号输入错误"));
        } else {
            callback();
        }
    };
    return {.....}

自定义表单验证步骤:

  1. data中自定义一个箭头函数
  2. 验证规则中使用该函数

正则表达式复习链接:

1.17 渲染修改用户的对话框

将信息填充到对应的表单项中,在修改点击事件中将用户id以参数形式传递出去,并使用请求查询用户信息。

 <!-- 修改按钮 -->
            <el-button
              type="primary"
              icon="el-icon-edit"
              size="small"
              @click="showEditDialog(scope.row.id)"
            ></el-button>
async showEditDialog(id) {
    console.log(id);
    this.editDialogVisible = true;
    const { data: res } = await this.$http.get(`users/${id}`);
    if (res.meta.status !== 200)
        return this.$message.error("获取用户信息失败");
    this.editUser = res.data;
    console.log(res.data);
}

每次点击修改按钮,表单重置:

给dialog添加close事件,给Form表单添加引用,在事件处理函数中调用表单的reset方法

  CloseEdit() {
      this.$refs.editFormRef.resetFields();
    }

1.18 提交修改之前的预验证和提交表单

await this. h t t p . g e t ( ‘ u s e r s / http.get(`users/ http.get(users/{id}`);
if (res.meta.status !== 200)
return this.$message.error(“获取用户信息失败”);
this.editUser = res.data;
console.log(res.data);
}


每次点击修改按钮,表单重置:

给dialog添加close事件,给Form表单添加引用,在事件处理函数中调用表单的reset方法

```js
  CloseEdit() {
      this.$refs.editFormRef.resetFields();
    }

1.18 提交修改之前的预验证和提交表单

与登录相同,不赘述了。

结尾

至此,我们电商管理系统的主页和用户列表功能就彻底做完了~下篇博客,我们将继续实现电商管理系统的权限管理和角色管理页面,如果感兴趣,那就关注我继续看下去吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值