任务一:Vue 项目实战
05-11-TS的使用
- Options APIs
a. export default Vue.extend({ … }) Class APIs + decorator(@Prop等)
31-登录-封装请求方法
创建 axios 实例 src/utils/request.ts
- 封装请求方法 src/services/user.ts
- 调用请求方法 src/views/login/index.vue
33-身份认证-把登录状态存储到Vuex容器中
同时存储到 Vuex 和 LocalStorage
state: {user: JSON.parse(window.localStorage.getItem('user') || 'null')},mutations: {setUser (state, payload) {state.user = JSON.parse(payload)window.localStorage.setItem('user', payload)}},
34-身份认证-校验页面访问权限
在路由中设置访问权限的属性 meta: { requiresAuth: true }
- 在路由拦截器中判断该属性,嵌套路由有一个该属性就不允许访问
- 所以直接在父路由上设置即可 ```javascript { path: ‘/‘, component: layout, redirect: ‘/course’, meta: { requiresAuth: true }, children: [] }
router.beforeEach((to, from, next) => { // matched:所有嵌套的路由 if (to.matched.some(record => record.meta.requiresAuth)) { if (!store.state.user) { next({ name: ‘login’, query: { redirect: to.fullPath } }) } else { next() } } else { next() } })
<a name="KttjH"></a>### 38-身份认证-使用请求拦截器统一设置Token```javascriptrequest.interceptors.request.use(function (config) {const { user } = store.stateif (user && user.access_token) {// 给所有请求添加 header: tokenconfig.headers.Authorization = user.access_token}return config})
任务二:用户登录和身份认证
本小结业务基于登录接口数据
- refresh token 后,再请求之前的接口
同时出现多个错误请求,将请求挂起,存储到数组中
el-button => :loading
- el-swtich => :disabled
- el-upload => el-progress

