3.登录界面

只保留router-view

  • 还要引入一些公共样式
    • npm install normalize.css或者去github上下载,然后引入
    • 还需在main.ts中引入

    • 还可以自己写一些公共样式,但是需要在main.ts中导入才会生效

  • 插入背景图片
  •  views下面放主要组件比如login、main,如果它们有一些只属于自己的组件,那么就新建一个cpns文件存放。
  • 再新建一个components放一些业务组件(这个项目公共会用到的一些组件)
  • 创建一个base-ui存放,多个项目可能都会用到
  • 利用element-plus中的tabs标签和form标签完成基本布局
  • 在使用el-input时发现没办法输入,这是因为el-input没有进行v-model绑定
  • 使用表单验证需要编写rules,然后将其动绑定到el-form上。
  • 哪些东西抽到抽到hooks中,哪些抽到conifg中?答:如果我们要抽取的东西中用到了ref、reactive、useStore、onMOunted等时,就抽取到hooks中,否则就抽取到config中。所以我们编写的rules可以抽到config中,让代码结构更清晰。
  • 后续优化忘记密码页面跳转功能

  •  点击立即登录的登录逻辑写在哪里呢?因为login-panel这个组件拿不到账号密码,也拿不到手机号和验证码,所以我们最好的是分别在login-account组件和login-phone中写登录逻辑。注意注意!!!父组件向子组件通信通过props,子组件向父组件通信通过emits。这里是父组件要拿到子组件的方法:在子组件中定义方法后,父组件通过ref拿到子组件,直接通过Ref调用即可。ref<>接受的泛型应该是对应实例的类型

 

  •  怎么在login-account中进行真正的登录逻辑呢?通过ref获取el-form组件

  •  isValid是判断输入的内容是否满足传入的规则,在isValid为true时进行真正的登录逻辑:1.判断是否保存密码(要注意,ref的值都要通过value获取),进行本地缓存(区分sessionStorage和localStorage),考虑到项目中有很多内容可能都需要进行缓存,可以新建一个utils文件夹封装一个cache类,在类中对缓存

  •  进行登录验证:1.进行网络请求,拿到数据;2.数据保存到某个位置;3.发送其他请求(请求当前用户的信息);4.拿到用户菜单;5.跳到首页                 这里请求到的数据肯定不能保存在这了,那保存到哪呢?vuex!可我们还要进行网络请求啊?不怕,我们有actions!
  • 现在开始vuex中的代码(进行数据请求、数据保存):为了让state中可以不随便加一些东西,我们可以规定state的类型 (IRootstate)                                

      这里可以采用vuex模块化的思想:

 

      又因为每个文件中类型可能会定义很多,所以我们可以抽到types.ts中

      定义完login模块后还需要对其进行注册:

 

        记住还要给每个模块一个命名空间哦!namespaced: true

 晕了,之前写了一部分东西,忘记保存了。

  • 现在可以在store-login-login.ts的actions中添加异步代码了

  然后在service-login-login.ts中进行数据请求(这里要注意一些类型的定义)

跨域问题:

在vue.config.js中做如下配置

 配置proxy,设置代理来解决跨域问题。target:表示代理到的目标地址;pathRewrite:?

changeOrigin:表示是否更新代理后请求的headers中host地址

同时还要将网络请求的BASE_URL的值设置为/api

 这里犯了一个很大的错误:没有用正确的账号和密码去登录,导致一直请求不到数据!!

  •  因为我们在post、get时其实是有传入泛型的,但是如果我们不传,在store中拿到的数据就是unknown类型(那我怎么知道我请求到的数据是什么类型呢?看接口文档啊!)

  •  现在请求userInfoResult发现会报错,因为我们没有携带token
    • 之前我们在service-index.ts中其实是有做携带token的拦截的,一方面可以从store中拿到token进行赋值
    • 但是用户登录一次后下次打开网页或者刷新就不用再登录了,所以可以做一个本地保存

 

     现在就可以拿到用户数据了!

  • 然后还要和token一定在mutations中进行保存,记得把userInfo也缓存一下

 

  •  点击登录的时候会发现界面会闪好几下,可能是因为请求几次,loading组件响应了几次,可以把它关掉。

 

  •  请求用户菜单

  • 跳转到首页

 

  •  但是回忆一下我们在router--index.ts每次最开始都是进入login界面。如果你想要实现每次只要登录过即使关闭页面再次打开也直接进行跳转到main界面的话,可以使用beforeEach导航守卫。(我不想,^_^)

  •  另外每次刷新store--state中的token,userInfo,userMenus都会清空(因为vuex中的数据保存在内存中),这肯定不行啊!!!

 

 

为啥这样刷新store-sate中还会有数据?因为localstorage中的数据不会因为刷新消失啊,我现在是从localstorage中拿数据进行保存,当然可以了!如果有人问到为什么要把数据保存到localstorage中,这也是一个点。

 

 


  登录界面至此基本完成,回忆一下,其实就是干了两件事:1.页面布局 2.数据请求和处理

1.页面布局方面基本都是用element-plus组件库完成的,这里的重点我认为是组件的抽取和封装

2.数据的请求和处理,包括每一部分的逻辑要写在什么位置,都是需要考虑的。

  手机验证码登录没有做!!!

 

posted @ 2021-12-09 22:29  不爱吃小红薯的小橘子  阅读(347)  评论(1)    收藏  举报