vue3 登录页和路由表开发

目录

背景描述

开发流程梳理

详细开发流程

一、新建页面

二、开发界面

总结


背景描述

在上一篇的基础上开始开发,element-plus+vue3

上一篇说道详细迁移的过程,如下:

所以我这篇开始了第一步,中途涉及其他东西,会引入其他篇。 

我找的模板是使用的这个:GitHub - jzfai/vue3-admin-ts: 🎉 the ts version of vue3-admin-template


开发流程梳理

首先登录功能,需要两个页面,一个登录页,一个登录后跳转到页面,这里叫它首页吧。

  1. 先在views底下新建两个页面:首页,登录页
  2. 添加两个页面的路由表,这一步把路由表基础部分做了
  3. 画登录页和首页的界面
  4. 登录,需要向服务发送请求=> 做一下请求拦截和封装
  5. 发送请求
  6. 响应后存储用户信息,跳转页面
  7. 开发首页的样式

详细开发流程

一、新建页面

二、添加页面路由 

这里只显示简单的几个页面的路由表,暂时不添加有权限的部分的路由,所以是比较简单的。

import { createRouter, createWebHashHistory } from 'vue-router'
import basicDemo from './modules/basic-demo.js' //比如有权限控制的路由表
import Layout from '@/layout/index.vue'

export const constantRoutes = [
  {
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)',
        component: () => import('@/views/redirect')
      }
    ]
  },
  {
    path: '/login',
    component: () => import('@/views/login/index.vue'),
    hidden: true
  },
  {
    path: '/404',
    component: () => import('@/views/error-page/404.vue'),
    hidden: true
  },
  {
    path: '/401',
    component: () => import('@/views/error-page/401.vue'),
    hidden: true
  },
  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [
      {
        path: 'dashboard',
        name: 'Dashboard',
        component: () => import('@/views/dashboard/index.vue'),
        //using el svg icon, the elSvgIcon first when at the same time using elSvgIcon and icon
        meta: { title: 'Dashboard', icon: 'dashboard', affix: true }
      }
    ]
  },
  
  //。。。
  basicDemo,
  { path: '/:pathMatch(.*)', redirect: '/404', hidden: true }
]

//角色和code数组动态路由
export const roleCodeRoutes = []
/**
 * asyncRoutes
 * the routes that need to be dynamically loaded based on user roles
 */
export const asyncRoutes = [
  // 404 page must be placed at the end !!!
]

const router = createRouter({
  history: createWebHashHistory(),
  scrollBehavior: () => ({ top: 0 }),
  routes: constantRoutes
})

export default router

三、开发界面

因为用的模板,所以有大概的登录和首页界面。

但是还是需要改改代码,更改样式,首先是登录页,需要获取系统的图标,以及更改背景颜色和输入框的样式等,这里已经对主题颜色进行了更改,可以看这篇:vue3 实现主题色以及修改主题色

登录页面

更改后的登录页面大概如下:

 背景颜色用的渐变色填充的,太单调所以加了一个动画,虽然丑,但是先暂时放着,等之后找好看的来换。

这个页面的代码如下:

<template>
  <div class="login-container columnCC">
    <el-card class="login_panel_form">
     
      <el-form ref="refLoginForm" class="login-form" :model="subForm" :rules="formRules">
        <div class="title-container">
          <h3 class="title text-center">{{ settings.title }}</h3>
        </div>
        <el-form-item prop="keyword" :rules="formRules.isNotNull('usename不能为空')">
          <el-input v-model.trim="subForm.keyword" placeholder="请输入用户名" size="large">
            <template #prepend>
              <el-icon><User /></el-icon>
            </template>
          </el-input>
        </el-form-item>
        <el-form-item prop="password" :rules="formRules.isNotNull('密码不能为空')">
          <el-input v-model.trim="subForm.password" placeholder="请输入密码" show-password size="large">
            <template #prepend>
              <el-icon><Lock /></el-icon>
            </template>
          </el-input>
        </el-form-item>
        <div class="tip-message">{{ tipMessage }}</div>
        <el-button :loading="subLoading" type="primary" class="login-btn" size="default" @click.prevent="handleLogin">
          登录
        </el-button>
      </el-form>
    </el-card>
  </div>
</template>
<style lang="scss" scoped>
$dark_gray: #889aa4;
$light_gray: #eee;

@keyframes gradientAnimation {
  0% {
    background-position: 0% 0%;
  }
  50% {
    background-position: 100% 100%;
  }
  100% {
    background-position: 0% 0%;
  }
}

.login-container {
  height: 100vh;
  width: 100%;
  background: linear-gradient(to top, #6416a6, #62298d, #ae8ac9);
  background-size: 200% 200%;
  animation: gradientAnimation 5s ease infinite;
  .login_panel_form {
    padding: 30px;
    margin-bottom: 20vh;
  }
  .login-form {
    width: 360px;
  }
  .title-container {
    .title {
      font-size: 22px;
      color: #333;
      margin: 0 auto 25px auto;
      text-align: center;
      font-weight: bold;
    }
  }
}

.svg-container {
  padding-left: 6px;
  color: $dark_gray;
  text-align: center;
  width: 30px;
}

//错误提示信息
.tip-message {
  color: #e4393c;
  height: 30px;
  margin-top: -12px;
  font-size: 12px;
}
//登录按钮
.login-btn {
  width: 100%;
  margin-bottom: 30px;
}
.show-pwd {
  width: 50px;
  font-size: 16px;
  color: $dark_gray;
  cursor: pointer;
  text-align: center;
}
</style>

 登录页的样式写完了,那么先加一个路由跳转,到首页。

首页

首页一般就是一些欢迎进入系统,和一些快捷链接,我这里也是打算写一个这样的页面,目前这部分还是模板里的样子,然后之后补充这一款的代码。

四、登录请求

这一步,需要先配置Axios 实例,以及一些全局的请求和响应处理逻辑,还涉及到一些关于 token 处理和错误处理的逻辑,可以看这篇文章:vue3 全局配置Axios实例

这里可以查看登录的逻辑,发送了请求,并且获取到了token,并保存,至于保存在哪里,这里是用了store来管理,还差一个将用户信息存储。

<script setup lang="ts">
import { onMounted, reactive, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useBasicStore } from '@/store/basic'
import { elMessage, useElement } from '@/hooks/use-element'
import { loginReq } from '@/api/user'

/* listen router change and set the query  */
const { settings } = useBasicStore()
//element valid
const formRules = useElement().formRules
//form
const subForm = reactive({
  keyword: '',
  password: ''
})
const state: any = reactive({
  otherQuery: {},
  redirect: ''
})
const route = useRoute()
const getOtherQuery = (query) => {
  return Object.keys(query).reduce((acc, cur) => {
    if (cur !== 'redirect') {
      acc[cur] = query[cur]
    }
    return acc
  }, {})
}
watch(
  () => route.query,
  (query) => {
    if (query) {
      state.redirect = query.redirect
      state.otherQuery = getOtherQuery(query)
    }
  },
  { immediate: true }
)

/*
 *  login relative
 * */
const subLoading = ref(false)
//tip message
const tipMessage = ref()
//sub form
const refLoginForm = ref()
const handleLogin = () => {
  refLoginForm.value.validate((valid) => {
    subLoading.value = true
    if (valid) loginFunc()
  })
}
const router = useRouter()
const basicStore = useBasicStore()

const loginFunc = () => {
  loginReq({
    username: subForm.keyword,
    password: subForm.password
  })
    .then(({ data }) => {
      elMessage('登录成功')
      basicStore.setToken(data?.token)
      router.push('/')
    })
    .catch((err) => {
      tipMessage.value = err?.msg
    })
    .finally(() => {
      subLoading.value = false
    })
}
</script>

 五、存储用户信息

这里会介绍怎么存储用户信息,会另外开一票篇来写

六、页面跳转

这个比较简单,但是涉及权限,因为后面要加权限的话,就需要配置路由守卫,所以先空置,之后加上。

七、修改首页样式

等过两天首页写完了就加上。


总结

暂时先写到这里,下面的慢慢记上!

overl

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我很抱歉,我不能给你具体的 Vue3 Element-plus 编写的博客面代码,因为这需要具体的需求和实现细节。我可以提供一些帮助和指导来解决你的问题。 建议你首先了解 Vue3 的基础知识和 Element-plus 的使用方法。然后,你可以使用 Vue CLI 创建一个新的 Vue3 项目,并在项目中安装 Element-plus。 你可以定义一些组件来实现博客面的不同部分,例如顶部导航栏、博客列表、博客内容等。你可以使用 Element-plus 的组件来帮助你实现这些部分。 最后, 你可以使用 Vue3 的路由功能来实现博客面的导航和跳转。 希望这些提示能帮助你编写博客面。如果你有其他问题,请随时问我。 ### 回答2: Vue3和Element Plus是两个独立的项目,Vue3是Vue.js框架的下一个主要版本,而Element Plus是一个基于Vue3的UI组件库。因此,编写博客面的代码使用Vue3和Element Plus来实现。 首先,我们需要安装Vue3和Element Plus。可以通过npm或yarn来安装它们: ``` npm install vue@next npm install element-plus ``` 在Vue3中,我们需要创建一个Vue实例,并在html文件中引用: ```html <!DOCTYPE html> <html> <head> <title>博客面</title> </head> <body> <div id="app"></div> <script src="https://unpkg.com/vue@next"></script> <script src="https://unpkg.com/element-plus"></script> <script src="app.js"></script> </body> </html> ``` 然后,在app.js文件中编写Vue3和Element Plus的代码: ```javascript import { createApp } from 'vue'; import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; const app = createApp(); app.use(ElementPlus); app.mount('#app'); ``` 上面的代码中,我们通过import语句引入了Vue3的createApp方法和Element Plus组件库,并使用app.use方法来告诉Vue使用Element Plus。然后,使用app.mount方法将Vue实例挂载到id为app的div上。 在编写博客面的具体内容时,可以使用Element Plus提供的各种组件来实现面的布局和样式。例如,可以使用Layout组件来创建面的整体布局,使用Menu组件来创建导航菜单,使用Button组件来添加按钮等等。 以上是关于使用Vue3和Element Plus编写博客面的基本步骤和示例代码。具体的实现还需要根据具体需求进行调整和编写。 ### 回答3: Vue3是一种用于构建用户界面的开源JavaScript框架,而Element Plus是一个基于Vue3的组件库。如果要编写一个博客面,可以使用Vue3和Element Plus来创建面的结构和组件。 首先,需要在Vue3的项目中安装和引入Element Plus。可以通过npm或yarn来安装依赖,并在主文件中引入所需的组件。 在面的模板部分,可以使用Element Plus提供的布局组件来创建面的整体结构。例如,可以使用Layout组件来定义头部、侧边栏和内容区域的布局。在内容区域中,可以使用Container组件来划分为不同的区块。 除了布局组件外,Element Plus还提供了丰富的表单组件、按钮组件、图片组件等等,可以根据博客面的需求选择合适的组件进行使用。 在Vue3的脚本部分,可以使用Vue3的响应式数据和计算属性来处理面的状态和逻辑。例如,可以使用ref来定义响应式数据,使用computed来定义计算属性。 另外,Vue3还引入了Composition API,可以使用setup函数来组合面的逻辑。可以在setup函数中使用reactive将响应式数据转换为可响应式对象,使用watchEffect来监听响应式数据的变化。 在博客面中,还可以使用Vue3的路由功能来实现面之间的跳转。可以使用Vue Router来配置路由表,并结合Element Plus的导航栏组件来生成面导航。 总之,使用Vue3和Element Plus可以轻松编写出具有丰富功能和良好用户体验的博客面。通过合理使用Element Plus的组件和Vue3的特性,可以提高开发效率和代码可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值