使用Vuetify构建登录系统的UI并实现表单验证【实验四】

一、实验名称

使用Vuetify构建登录系统的UI并实现表单验证。

二、参考资料

《Vue 3官方网站:https://cn.vuejs.org》、《Vuetify界面设计框架:Release notes — Vuetify

三、实验目的

1. 练习使用Vuetify组件设计界面。

2. 练习对表单数据进行验证。

四、实验内容

1. VS Code打开实验三创建的myweb项目文件夹。

2. VS Code中按下 【Ctrl+Shift+` 】组合键打开终端窗口,在窗口中输入:

pnpm add vuetify@^3.1.6 mosha-vue-toastify

该命令会在当前项目中安装Vuetify3.1.6版本和一个显示短消息的插件Toastify

Vuetify 是建立在Vue.js之上的完备的界面框架,Vuetify的最新版本是3版本,该版本支持Vue 3Vuetify采用 Material设计规范,组件丰富,界面精美,易于使用。

Vuetify支持4种流行的图标字体,包括Google官方出品的图标库Material Icons,参见:Icon Fonts — Vuetify

Material Icon图标库中的图标样式可以通过这个网站查看:Material Icons - Material UI,使用Material Icon图标库需要使用如下的命令进行安装:

pnpm add material-design-icons-iconfont -D

3. 打开项目的TS入口文件main.ts,修改该文件,添加对Vuetify的全局引用和对ToastifyMaterial Icon的样式文件的全局引用,修改后的main.ts的代码如下所示:

import { createApp } from 'vue'

import App from './App.vue'

import './assets/main.css'

import 'mosha-vue-toastify/dist/style.css'

import 'material-design-icons-iconfont/dist/material-design-icons.css'

// 全局引入Vuetify

import 'vuetify/styles'

import { createVuetify } from 'vuetify'

import * as components from 'vuetify/components'

import * as directives from 'vuetify/directives'

import { aliases, md } from 'vuetify/iconsets/md'

const vuetify = createVuetify({

  components,

  directives,

  icons: {

    defaultSet: 'md',

    aliases,

    sets: {

      md,

    }

  },

})

createApp(App).use(vuetify).mount('#app')

4. 删除asserts目录下main.css文件中的样式,把下列样式复制到main.css中:

body {

  position: absolute;

  height: 100%;

  width: 100%;

  display: flex;

  justify-content: center;

  align-items: center;

  background-color: #f0f0f0;

}

5. 删除UserLogin.vuestyle元素中的样式定义,使用Vue的样式类(参见:Spacing — Vuetify)设置界面的样式。

6. 修改UserLogin.vue,使用Vuetifyv-card组件(参见:Card component — Vuetify)替换原来的div元素。

7. 修改表单定义,使用Vuetifyv-form组件(参见:Form component — Vuetify)替换原来的form元素,使用v-text-field组件替换原来的input元素,使用v-btn组件(参见:Button component — Vuetify)替换原来的button元素。修改后的UserLogin.vue的代码如下所示:

<script lang="ts" setup>

import {onMounted, ref, getCurrentInstance} from 'vue';

import {login} from '@/api/user'

import {createToast} from "mosha-vue-toastify";

 

const username = ref('')

const password = ref('')

const handleLogin = async () => {

  if (username.value == '' || password.value == '') {

    createToast('用户名或密码不能为空!', {position: 'top-center', showIcon: true})

  } else {

    try {

      const res = await login({username: username.value, password: password.value})

      createToast(res.data.msg, {position: 'top-center', showIcon: true})

    } catch (e) {

      alert(e)

    }

  }

}

let instance: any

onMounted(() => {

  instance = getCurrentInstance()

})

const reset = () => {

  instance.ctx.$refs.form.reset()

}

</script>

<template>

  <v-container class="h-100  d-flex align-center justify-center">

    <v-card width="500">

      <v-card-title>用户登录</v-card-title>

      <v-card-text class="pa-8">

        <v-form ref="form">

          <v-text-field variant="underlined" v-model="username" required

                        :counter="20"

                        label="账号"

                        prepend-icon="person"

          ></v-text-field>

          <v-text-field variant="underlined" v-model="password" required

                        :counter="20"

                        label="密码"

                        prepend-icon="lock"

                        type="password"

          ></v-text-field>

          <v-row class="mt-5">

            <v-btn class="ml-5" @click="handleLogin">提交</v-btn>

            <v-btn class="ml-5" @click="reset">复位</v-btn>

          </v-row>

        </v-form>

      </v-card-text>

    </v-card>

  </v-container>

</template>

<style scoped>

</style>

运行项目,登录成功以后应该显示如下界面:

8. 前面我们只是实现了用户名和密码不能为空的简单表单验证,接下来我们要使用Vuetify的表单验证机制对表单数据进行更加完善的验证。

src下新建hooks目录,在该目录下新建useValidRule.ts文件,在该文件中定义可以在多个组件中复用的Vuetify的表单验证规则(参见:Form component — Vuetify),内容如下:

import {ref} from "vue"

export const usernameRules = ref([

    (v: string) => !!v || '必须输入账号!',

    (v: string ) => (v && v.length <= 20 && v.length >= 3) || '账号的长度为3到20个字符!',

])

export const passwordRules = ref([

    (v: string) => !!v || '必须输入密码!',

    (v: string ) => (v && v.length <= 20 && v.length >= 8) || '密码的长度为8到20个字符!',

])

修改mockindex.ts中定义的密码,使其长度符合验证规则的要求。

9. 修改UserLogin.vue中的账号和密码字段,通过rules属性使用自定义的验证规则对用户名和密码进行验证,修改后的表单如下列代码所示:

<v-form ref="form">

          <v-text-field variant="underlined" v-model="username" required

                        :counter="20"

                        label="账号"

                        prepend-icon="person"

                        :rules="usernameRules"

          ></v-text-field>

 

          <v-text-field variant="underlined" v-model="password" required

                        :counter="20"

                        label="密码"

                        prepend-icon="lock"

                        type="password"

                        :rules="passwordRules"

          ></v-text-field>

          <v-row class="mt-5">

            <v-btn class="ml-5" @click="handleLogin">提交</v-btn>

            <v-btn class="ml-5" @click="reset">复位</v-btn>

          </v-row>

</v-form>

10. 修改handleLogin函数,增加验证判断,修改后的代码如下所示:

const handleLogin = async () => {

  const {valid} = await instance.ctx.$refs.form.validate()

  if (valid) {

    if (username.value == '' || password.value == '') {

      createToast('用户名或密码不能为空!', {position: 'top-center', showIcon: true})

    } else {

      try {

        const res = await login({username: username.value, password: password.value})

        createToast(res.data.msg, {position: 'top-center', showIcon: true})

      } catch (e) {

        alert(e)

      }

    }

  }

}

11. 测试用户登录,当用户名和密码不符合验证规则时会显示验证错误信息并无法提交表单数据,如下图所示:

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue使用Element UI进行表单验证可以通过以下步骤来实现: 1. 首先,确保你的项目已经安装了Element UI组件库并正确引入。你可以使用npm或者yarn来安装Element UI,然后在你的Vue组件中通过import语句引入所需的组件。 2. 在Vue组件中,你可以使用Element UI提供的Form组件来创建表单,并使用Form Item组件来包含表单项。 3. 对于每个表单项,你可以使用Element UI提供的校验规则来定义验证规则。你可以通过设置prop属性来指定验证类型,比如required、email等,并通过设置rules属性来定义具体的验证规则。你还可以通过设置消息属性来定义验证失败时的提示信息。 4. 在表单提交时,你可以调用Element UI提供的validate方法来触发表单验证。如果验证通过,你可以继续处理表单数据;如果验证失败,你可以显示提示信息。 下面是一个示例代码,演示了如何在Vue使用Element UI进行表单验证: ```vue <template> <el-form ref="form" :model="formData" :rules="formRules" label-width="120px"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="formData.password" type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> import { mapActions } from 'vuex'; export default { data() { return { formData: { username: '', password: '', }, formRules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, ], }, }; }, methods: { ...mapActions(['login']), submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过,继续处理提交逻辑 this.login(this.formData); // 调用Vuex action提交表单数据 } else { // 表单验证失败,显示提示信息 this.$message.error('表单验证失败,请检查输入'); } }); }, }, }; </script> ``` 在上述示例中,我们使用了Element UI的Form和FormItem组件来创建了一个包含用户名和密码输入框的表单。通过设置prop属性和rules属性,我们定义了用户名和密码的验证规则。在提交表单时,我们调用了validate方法来触发表单验证,并根据验证结果进行相应的处理。 希望以上信息对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用element-ui +Vue 解决 table 里包含表单验证的问题](https://download.csdn.net/download/weixin_38566180/12849766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [解决vue+ element ui 表单验证有值但验证失败问题](https://download.csdn.net/download/weixin_38659159/12928895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [系统基于springboot框架,使用Java+vue编写,为前后端分离的微服务项目](https://download.csdn.net/download/Abelon/88250447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值