学生管理 + 用户管理(Element版)(三)

简介: 学生管理 + 用户管理(Element版)

2.2.3 前端:页面

  • 步骤:
  • 步骤1:注册编写路由
  • 步骤2:创建注册页面
  • 步骤3:拷贝注册表单

0f30166569514962ae42f085d578fc41.png

步骤1:注册编写路由

35c25a2c6d0042d5b10975324b447ad2.png

  {
    path: '/register',
    name: '注册',
    component: () => import('../views/Register.vue')
  },

步骤2:创建注册页面

ddafd51a1d08485e8626f9110f4aac50.png

步骤3:拷贝注册表单

<template>
  <el-card class="register-card">
    <el-form ref="form" :model="user" label-width="80px" size="mini">
      <el-form-item label="用户名">
        <el-input v-model="user.username" prefix-icon="el-icon-user" placeholder="请输入用户名"></el-input>
      </el-form-item>
      <el-form-item label="密码">
        <el-input v-model="user.password" prefix-icon="el-icon-lock" show-password placeholder="请输入密码"></el-input>
      </el-form-item>
      <el-form-item label="确认密码">
        <el-input v-model="user.repassword" prefix-icon="el-icon-lock" show-password placeholder="请输入确认密码"></el-input>
      </el-form-item>
      <el-form-item label="生日">
        <el-date-picker type="date" placeholder="选择生日" v-model="user.birthday"></el-date-picker>
      </el-form-item>
      <el-form-item label="学历">
        <el-select v-model="user.edu" placeholder="请选择学历">
          <el-option label="大班" value="db"></el-option>
          <el-option label="中班" value="zb"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="性别">
        <el-radio-group v-model="user.gender">
          <el-radio label="1">男</el-radio>
          <el-radio label="0">女</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="爱好">
        <el-checkbox-group v-model="user.hobbies">
          <el-checkbox label="cy" name="type">抽烟</el-checkbox>
          <el-checkbox label="hj" name="type">喝酒</el-checkbox>
          <el-checkbox label="tt" name="type">烫头</el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="婚否">
        <el-switch v-model="user.marry"></el-switch>
      </el-form-item>
      <el-form-item label="省市县">
        <el-cascader
          v-model="user.citys"
          :options="cityList"
          :props="{ expandTrigger: 'hover' }"
          ></el-cascader>
      </el-form-item>
      <el-form-item>
        <el-button type="primary">注册</el-button>
        <el-button type="info">重置</el-button>
      </el-form-item>
    </el-form>
    {{ user }}
  </el-card>
</template>
<script>
export default {
  data() {
    return {
      user: {
        hobbies: [] ,     //必须是数组
      },
      cityList: [
        {
          value: 'js',
          label: '江苏省',
          children: [
            {
              value: 'nj',
              label: '南京市',
            },
            {
              value: 'sq',
              label: '宿迁市',
              children: [
                {
                  value: 'sy',
                  label: '沭阳县',
                  children: [
                    {
                      value: 'nh',
                      label: '南湖街道',
                    },
                    {
                      value: 'mx',
                      label: '梦溪街道',
                    }
                  ]
                },
                {
                  value: 'sh',
                  label: '泗洪县',
                }
              ]
            }
          ]
        },
        {
          value: 'hb',
          label: '河北省',
        }
      ]
    }
  },
}
</script>
<style>
  .register-card {
    width: 500px;
  }
</style>

2.2.4 前端:自定义校验

  • 步骤
  • 步骤1:完成用户名普通校验(必填、长度3-6)
  • 步骤2:自定义ajax用户名校验
  • 步骤1:完成用户名普通校验(必填、长度3-6)

ce73bac313994201ac67cea68169c327.png

<template>
  <el-card class="register-card">
    <el-form ref="registerForm" :rules="registerRules" :model="user" label-width="80px" size="mini">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="user.username" prefix-icon="el-icon-user" placeholder="请输入用户名"></el-input>
      </el-form-item>
      <el-form-item label="密码">
        <el-input v-model="user.password" prefix-icon="el-icon-lock" show-password placeholder="请输入密码"></el-input>
      </el-form-item>
      <el-form-item label="确认密码">
        <el-input v-model="user.repassword" prefix-icon="el-icon-lock" show-password placeholder="请输入确认密码"></el-input>
      </el-form-item>
      <el-form-item label="生日">
        <el-date-picker type="date" placeholder="选择生日" v-model="user.birthday"></el-date-picker>
      </el-form-item>
      <el-form-item label="学历">
        <el-select v-model="user.edu" placeholder="请选择学历">
          <el-option label="大班" value="db"></el-option>
          <el-option label="中班" value="zb"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="性别">
        <el-radio-group v-model="user.gender">
          <el-radio label="1">男</el-radio>
          <el-radio label="0">女</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="爱好">
        <el-checkbox-group v-model="user.hobbies">
          <el-checkbox label="cy" name="type">抽烟</el-checkbox>
          <el-checkbox label="hj" name="type">喝酒</el-checkbox>
          <el-checkbox label="tt" name="type">烫头</el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="婚否">
        <el-switch v-model="user.marry"></el-switch>
      </el-form-item>
      <el-form-item label="省市县">
        <el-cascader
          v-model="user.citys"
          :options="cityList"
          :props="{ expandTrigger: 'hover' }"
          ></el-cascader>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="register">注册</el-button>
        <el-button type="info">重置</el-button>
      </el-form-item>
    </el-form>
    {{ user }}
  </el-card>
</template>
<script>
export default {
  data() {
    return {
      user: {
        hobbies: [] ,     //必须是数组
      },
      cityList: [
        {
          value: 'js',
          label: '江苏省',
          children: [
            {
              value: 'nj',
              label: '南京市',
            },
            {
              value: 'sq',
              label: '宿迁市',
              children: [
                {
                  value: 'sy',
                  label: '沭阳县',
                  children: [
                    {
                      value: 'nh',
                      label: '南湖街道',
                    },
                    {
                      value: 'mx',
                      label: '梦溪街道',
                    }
                  ]
                },
                {
                  value: 'sh',
                  label: '泗洪县',
                }
              ]
            }
          ]
        },
        {
          value: 'hb',
          label: '河北省',
        }
      ],
      registerRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 3, max: 6, message: '长度在 3 到 6 个字符', trigger: 'blur' }
        ],
      },
    }
  },
  methods: {
    register() {
      this.$refs.registerForm.validate((valid) => {
        if (valid) {
          // 校验通过
        } else {
          // 没通过
          console.log('error submit!!');
          return false;
        }
      });
    }
  },
}
</script>
<style>
  .register-card {
    width: 500px;
  }
</style>

步骤2:自定义ajax用户名校验

b9aa42dcb3fb49f49b79d803ed744803.png

<template>
  <el-card class="register-card">
    <el-form ref="registerForm" :rules="registerRules" :model="user" label-width="80px" size="mini">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="user.username" prefix-icon="el-icon-user" placeholder="请输入用户名"></el-input>
      </el-form-item>
      <el-form-item label="密码">
        <el-input v-model="user.password" prefix-icon="el-icon-lock" show-password placeholder="请输入密码"></el-input>
      </el-form-item>
      <el-form-item label="确认密码">
        <el-input v-model="user.repassword" prefix-icon="el-icon-lock" show-password placeholder="请输入确认密码"></el-input>
      </el-form-item>
      <el-form-item label="生日">
        <el-date-picker type="date" placeholder="选择生日" v-model="user.birthday"></el-date-picker>
      </el-form-item>
      <el-form-item label="学历">
        <el-select v-model="user.edu" placeholder="请选择学历">
          <el-option label="大班" value="db"></el-option>
          <el-option label="中班" value="zb"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="性别">
        <el-radio-group v-model="user.gender">
          <el-radio label="1">男</el-radio>
          <el-radio label="0">女</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="爱好">
        <el-checkbox-group v-model="user.hobbies">
          <el-checkbox label="cy" name="type">抽烟</el-checkbox>
          <el-checkbox label="hj" name="type">喝酒</el-checkbox>
          <el-checkbox label="tt" name="type">烫头</el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="婚否">
        <el-switch v-model="user.marry"></el-switch>
      </el-form-item>
      <el-form-item label="省市县">
        <el-cascader
          v-model="user.citys"
          :options="cityList"
          :props="{ expandTrigger: 'hover' }"
          ></el-cascader>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="register">注册</el-button>
        <el-button type="info">重置</el-button>
      </el-form-item>
    </el-form>
    {{ user }}
  </el-card>
</template>
<script>
import axios from 'axios'
export default {
  data() {
    // 自定义校验器   var 函数名 = 箭头函数(规则,数据,回调函数)
    // 校验通过:callback();
    // 校验失败:callback(new Error('失败原因'));
    var validateUsername = async (rule, value, callback) => {
      // 1 发送ajax根据用户查询
      var url = `http://localhost:8888/user/check`
      let { data: baseResult } = await axios.post(url,{username: value})
      // 2 根据结果处理:20000通过,否则失败
      if(baseResult.code == 20000) {
        // 2.1 成功
        callback();
      } else {
        // 2.2 失败
        callback(new Error(baseResult.message));
      }
    };
    return {
      user: {
        hobbies: [] ,     //必须是数组
      },
      cityList: [
        {
          value: 'js',
          label: '江苏省',
          children: [
            {
              value: 'nj',
              label: '南京市',
            },
            {
              value: 'sq',
              label: '宿迁市',
              children: [
                {
                  value: 'sy',
                  label: '沭阳县',
                  children: [
                    {
                      value: 'nh',
                      label: '南湖街道',
                    },
                    {
                      value: 'mx',
                      label: '梦溪街道',
                    }
                  ]
                },
                {
                  value: 'sh',
                  label: '泗洪县',
                }
              ]
            }
          ]
        },
        {
          value: 'hb',
          label: '河北省',
        }
      ],
      registerRules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },         //内置校验:必填
          { min: 3, max: 6, message: '长度在 3 到 6 个字符', trigger: 'blur' }, //内置校验:长度
          { validator: validateUsername, trigger: 'blur' }                          //自定义校验:用户名校验 validateUsername
        ],
      },
    }
  },
  methods: {
    register() {
      this.$refs.registerForm.validate((valid) => {
        if (valid) {
          // 校验通过
        } else {
          // 没通过
          console.log('error submit!!');
          return false;
        }
      });
    }
  },
}
</script>
<style>
  .register-card {
    width: 500px;
  }
</style>

页面展示

41cfb8f57e9f4a4280698c6d7f463f42.png

96a862b10b7b49e1bd6907b275835952.png

2712bb5081b546ec9781adc8692c202d.png

e416e5c8cad24315af1d9c4209bd1171.png

f32367ce80934834ac89395e263eed11.png


相关文章
|
并行计算 算法 C++
统一内存统一内存的基本概念和使用
统一内存统一内存的基本概念和使用
2230 0
统一内存统一内存的基本概念和使用
|
6月前
|
机器学习/深度学习 人工智能 PyTorch
模型手动绑骨3天,AI花3分钟搞定!UniRig:清华开源通用骨骼自动绑定框架,助力3D动画制作
UniRig是清华大学与VAST联合研发的自动骨骼绑定框架,基于自回归模型与交叉注意力机制,支持多样化3D模型的骨骼生成与蒙皮权重预测,其创新的骨骼树标记化技术显著提升动画制作效率。
907 27
模型手动绑骨3天,AI花3分钟搞定!UniRig:清华开源通用骨骼自动绑定框架,助力3D动画制作
|
8月前
|
人工智能 自然语言处理 搜索推荐
高性价比| OpenSearch 智能问答版开箱即用 DeepSeek-R1
OpenSearch LLM智能问答版基于DeepSeek-R1一分钟搭建RAG系统。
1456 11
高性价比| OpenSearch 智能问答版开箱即用 DeepSeek-R1
|
7月前
|
人工智能 编解码 测试技术
万相,开源!
万相,开源!
2021 1
|
存储 人工智能 大数据
TDengine 用户大会精彩回顾:AI+数据驱动汽车、能源、烟草、电力应用的未来
TDengine用户大会在京成功举办,聚焦“时序数据助你决胜AI时代”。涛思数据创始人陶建辉携手中科院院士王怀民等业界领袖,探讨时序数据最新进展及AI技术应用。会上发布了《时序大数据平台-TDengine核心原理与实战》一书,为企业与开发者提供宝贵指南。自2019年开源以来,TDengine已拥有57万用户实例,Star数达23.1k。王怀民赞赏TDengine全面创新,立足全球市场。大会还涉及数据库智能化运维、能源行业数字化转型等议题,并设有三大专场,深入讨论海量数据应用、智能制造新能源及新型电力系统,展示了TDengine在各领域的应用潜力与技术革新。
325 0
TDengine 用户大会精彩回顾:AI+数据驱动汽车、能源、烟草、电力应用的未来
|
Web App开发 JavaScript 前端开发
Node.js与Go语言的对比?
【8月更文挑战第4天】Node.js与Go语言的对比?
993 3
|
12月前
|
项目管理
蒙特卡罗分析应用 | 项目管理中的优势
蒙特卡罗分析是一种通过随机抽样预测结果的统计方法,广泛应用于项目管理和工程领域,特别是在大型复杂项目中。它能帮助项目经理更准确地预测项目时间和成本,提供战略支持,但不取代直觉和经验。
217 1
|
监控 安全 网络安全
|
移动开发 前端开发 安全
技术心得记录:怎么更快地合成大西瓜?搞懂游戏的源码,闭着眼睛都能成功!
技术心得记录:怎么更快地合成大西瓜?搞懂游戏的源码,闭着眼睛都能成功!
370 0
|
人工智能 测试技术 UED
通义万相文本绘图
阿里云的通义万相是AI文本绘图和人像美化工具,适用于内容创作等多领域。评估其竞争力需考虑成本效益、易用性和应用场景。试用、部署、性能测试和用户反馈是选择的关键步骤。若在成本、用户体验和功能上表现优秀,可推荐给团队。