头条项目day-02:

获取表单数据,并进行注册登录:

使用vant组件插入表单格式,根据vant文档进行操作
1. 获取表单:
2. 表单验证:
表单以及验证码的规则和格式验证,为必填项,不能为空,使用正则表达式进行设置长度以及规则。

增加验证规则对象
mobile: [{
          required: true,
          message: '手机号不能为空'
        }, {
          pattern: /^1[3|5|7|8]\d{9}$/,
          message: '手机号格式错误'
        }],
        code: [{
          required: true,
          message: '验证码不能为空'
        }, {
          pattern: /^\d{6}$/,
          message: '验证码格式错误'
        }]

给标签绑定验证规则:
v-bind进行动态绑定,拿到data里的变量。

验证码处理:
使用vant组件,用插槽给表单内加一个发送验证码的按钮,并给属性native-type设置为button,form表单添加ref属性。
1. 校验手机号
使用this.$refs来获取表单信息
设置:validate    验证表单,支持传入 name 来验证单个或部分表单项。
验证通过显示倒计时。
2. 倒计时
vant组件---倒计时,可以定制倒计时格式
<van-count-down :time="1000 * 10"  format="ss s" @finishi="isCountDownShow = false"/>
用v-if和v-else 控制显示和隐藏
失败不会显示
this.isCountDownShow = true
倒计时结束让按钮显示出来

3. 发送验证码
封装请求api/user.js
url: `/v1_0/sms/codes/${mobile}`,
路径模板字符串进行拼接携带参数

引入求情

处理用户的Token值:
Token是用户登录成功之后服务端返回的一个身份令牌
访问需要授权的API接口
校验页面的访问权限

推荐使用vuex容器

登录成功之后,将token存储到vuex容器中,为了持久化,还需要把token放到本地存储。
const TOKEN_KEY = 'TOUTIAO_KEY'
state:{
//  user:null
 user:JSON.parse(window.localStorage.getItem(TOKEN_KEY))
}
mutations:{
setUser(state,data) {
state.user = data
window.localStorage.setItem(TOKEN_KEY,JSON.stringify(state.user))
}
}

在登录成功的地方引入
修改结构赋值 const  { data } = await ...
this.$store.setUser(data.data)

...mapMutations(['setUser'])

this.setUser(res.data)

封装本地存储模块src/utils/storage.js

获取数据export const getItem = key => {
const data = window.localStorage.getItem(key)
try {
    return JSON.parse(data);
  } catch (error) {
    return data;
  }
}
存储数据export const setItem = (key,value) => {
if (typeof value === "object") {
    value = JSON.stringify(value);
  }
  window.localStorage.setItem(key, value);
}
删除数据export const removeItem = key => {
 window.localStorage.removeItem(key);
}

Token 过期的问题
token: 访问令牌, 有效期2个小时
refresh_token: 刷新令牌, 有效期14天

使用refresh_token解决token过期


个人中心页铺设:
布置路由:
父路由:一个空页面,包含一个 tabbar,中间留子路由出口
子路由:- 首页- 问答- 视频- 我的

创建src/view/layout/index.vue
创建src/view/home/index.vue
创建src/view/qa/index.vue
创建src/view/video/index.vue
创建src/view/my/index.vue

铺设每个页面
router/index.js 配置响应路径
layout/index.vue文件内部引入vant --- tabbar 铺设底部导航,并用插槽引入标签。

铺设‘ 我的 ’页面:
设置背景图,布局内部模块,引入vant组件库进行辅助铺设页面。
部分需要绑定点击事件进行页面跳转。跳转到登录页进行登录。
已登录页面和未登录页面进行显示隐藏设置,v-if,v-else。

处理页面显示状态:
通过仓库中封装的user是否存在信息来判断是否已登录,从而决定页面呈现不同模板内容。
1. 导入辅助函数
import { mapState } from 'vuex'
2. 将user映射为当前组件的计算属性
computed: {
    ...mapState(['user'])
},
3. 根据user判断不同的状态
- 未登录,展示登录按钮
- 已登录,展示登录用户信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值