用element创建vue项目(3)主页整体布局+用户列表

目录

一、整体布局

二、整体进一步细化

1.头部布局

 2.左侧菜单布局

3.通过接口获取菜单数据

4.发起请求获取左侧菜单数据

 5.左侧菜单UI绘制

6.左侧菜单的优化

7.左侧菜单的折叠和展开功能

8.首页路由重定向

9.左侧菜单改造为路由链接

三、用户列表开发

1.新增用户列表组件页面

2.绘制用户列表的基本UI结构

3.获取用户列表数据

4.渲染用户列表数据

5.改造状态列的显示效果

6.插槽形式自定义列的渲染

 7.实现数据分页效果

8.实现用户状态的修改

9.实现搜索功能

10.实现添加用户的功能

11.渲染一个添加用户的表单

12.实现自定义校验规则

13.实现添加用户表单的重置功能

14.添加用户的预验证功能

15.发起请求添加一个新用户

16.添加用户修改的操作

17.根据ID查询用户信息

18.绘制修改用户的表单

19.修改表单取消后的重置操作

20.提交修改之前表单预验证操作

21.修改用户信息的操作

22.实现删除用户的操作

23.完成删除用户的操作

24.提交用户列表功能代码


一、整体布局

先上下划分,再左右划分。

跟element-ui组件同名的类名可以帮助我们快速的给对应的组件添加样式

<el-container>
    <!-- 头部区域 -->
    <el-header>Header<el-button type="info" @click="logout">退出</el-button></el-header>
    <!-- 页面主题区 -->
    <el-container>
        <!-- 侧边栏 -->
      <el-aside width="200px">Aside</el-aside>
      <!-- 右侧内容主体 -->
      <el-main>Main</el-main>
    </el-container>
  </el-container>
.home-container {
  height: 100%;
}
.el-header{
  background-color:#373D41;
}
.el-aside{
  background-color:#333744;
}
.el-main{
  background-color:#eaedf1;
}

二、整体进一步细化

1.头部布局

<!-- 头部区域 -->
    <el-header>
        <div>
            <img src="../assets/heima.png">
            <span>电商后台管理系统</span>
        </div>
        <el-button type="info" @click="logout">退出</el-button>
    </el-header>
.el-header{
  background-color:#373D41;
  display: flex;
  justify-content: space-between;
  padding-left: 0;
  align-items: center;
  color: #fff;
  font-size: 20px;
  > div {
      display: flex;
      align-items: center;
      span {
          margin-left: 15px;
      }
  }
}

 2.左侧菜单布局

<!-- 侧边栏菜单区域 -->
        <el-menu background-color="#333744" text-color="#fff"
        active-text-color="#ffd04b">
            <!-- 一级菜单 -->
            <el-submenu index="1">
                <!-- 一级菜单的模板区域 -->
                <template slot="title">
                    <!-- 图标 -->
                    <i class="el-icon-location"></i>
                    <!-- 文本 -->
                    <span>导航一</span>
                </template>
                <!-- 二级菜单 -->
                <el-menu-item index="1-4-1">
                    <template slot="title">
                        <!-- 图标 -->
                        <i class="el-icon-location"></i>
                        <!-- 文本 -->
                        <span>导航一</span>
                    </template>
                </el-menu-item>
            </el-submenu>
      
        </el-menu>

3.通过接口获取菜单数据

通过添加axios请求拦截器来添加token,以保证拥有获取数据的权限

//请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息
axios.interceptors.request.use(config=>{
  //为请求头对象,添加token验证的Authorization字段
  config.headers.Authorization = window.sessionStorage.getItem("token")
  return config
})

4.发起请求获取左侧菜单数据

data() {
        return {
            //左侧菜单数据
            menulist: []
        }
    },
  created() {
      this.getMenuList()
  },  
// 获取所有的菜单
    async getMenuList() {
        const {data: res} = await this.$http.get('menus')
        if(res.meta.status !== 200) return this.$message.error(res.meta.msg);
        this.menulist = res.data
        console.log(res)
    }

 5.左侧菜单UI绘制

<!-- 一级菜单 -->
            <el-submenu :index="item.id + ''" v-for="item in menulist" :key="item.id">
                <!-- 一级菜单的模板区域 -->
                <template slot="title">
                    <!-- 图标 -->
                    <i class="el-icon-location"></i>
                    <!-- 文本 -->
                    <span>{
  {item.authName}}</span>
                </template>
                <!-- 二级菜单 -->
                <el-menu-item :index="subItem.id + ''" v-for="subItem in item.children" :key="subItem.id">
                    <template slot="title">
                        <!-- 图标 -->
                        <i class="el-icon-location"></i>
                        <!-- 文本 -->
                        <span>{
  {subItem.authName}}</span>
                    </template>
                </el-menu-item>
            </el-submenu>

6.左侧菜单的优化

<!-- 侧边栏菜单区域 -->
        <el-menu background-color="#333744" text-color="#fff"
        active-text-color="#409EFF" :unique-opened="true">
            <!-- 一级菜单 -->
            <el-submenu :index="item.id + ''" v-for="item in menulist" :key="item.id">
                <!-- 一级菜单的模板区域 -->
                <template slot="title">
                    <!-- 图标 -->
                    <i :class="iconsObj[item.id]"></i>
                    <!-- 文本 -->
                    <span>{
  {item.authName}}</span>
                </template>
                <!-- 二级菜单 -->
                <el-menu-item :index="subItem.id + ''" v-for="subItem in item.children" :key="subItem.id">
                    <template slot="title">
                        <!-- 图标 -->
                        <i class="el-icon-menu"></i>
                        <!-- 文本 -->
                        <span>{
  {subItem.authName}}</span>
                    </template>
                </el-menu-item>
            </el-submenu>
      
        </el-menu>
data() {
        return {
            //左侧菜单数据
            menulist: [],
            iconsObj: {
                '125': 'iconfont icon-user',
                '103': 'iconfont icon-tijikongjian',
                '101': 'iconfont icon-shangpin',
                '102': 'iconfont icon-danju',
                '145': 'iconfont icon-baobiao'
            }
        }
    },

7.左侧菜单的折叠和展开功能

<div class="toggle-button" @click="toggleCollapse">|||</div>
//点击按钮,切换菜单的折叠与展开
    toggleCollapse() {
        this.isCollapse = !this.isCollapse
    }
<el-aside :width="isCollapse ? &#
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个使用 Vue3 和 Element Plus 创建的漂亮登录页面的示例代码。以下是示例代码: ```vue <template> <div class="login-container"> <el-card class="login-card"> <h2 class="login-title">用户登录</h2> <el-form :model="form" :rules="rules" ref="form" label-width="80px"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username" placeholder="请输入用户名"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="form.password" type="password" placeholder="请输入密码"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">登录</el-button> </el-form-item> </el-form> </el-card> </div> </template> <script> import { defineComponent } from 'vue' import { ElCard, ElForm, ElFormItem, ElInput, ElButton } from 'element-plus' export default defineComponent({ name: 'Login', components: { ElCard, ElForm, ElFormItem, ElInput, ElButton }, data() { return { form: { username: '', password: '' }, rules: { username: [{ required: true, message: '请输入用户名', trigger: 'blur' }], password: [{ required: true, message: '请输入密码', trigger: 'blur' }] } } }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { // 登录逻辑 } }) } } }) </script> <style> .login-container { display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f5f5f5; } .login-card { width: 400px; padding: 40px; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); } .login-title { text-align: center; margin-bottom: 20px; } </style> ``` 这个登录页面使用 Element Plus 的 Card、Form、FormItem、Input 和 Button 组件,整体布局使用 Flex 布局,并在样式中进行了简单的美化。你可以根据自己的需求对样式进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值