vue-d2admin前端axio异步请求详情
- d2admin>src>api>sys.login.js 设计axio api
import request from '@/plugin/axios' export function AccountLogin (data) { return request({ url: '/login', method: 'post', data }) }
- d2admin>src>store>d2admin>modules>account.js 创建使用API模块
import { Message, MessageBox } from 'element-ui' import util from '@/libs/util.js' import router from '@/router' import { AccountLogin } from '@api/sys.login' export default { namespaced: true, actions: { /** * @description 登录 * @param {Object} param context * @param {Object} param username {String} 用户账号 * @param {Object} param password {String} 密码 * @param {Object} param route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式 */ login ({ dispatch }, { username = '', password = '' } = {}) { return new Promise((resolve, reject) => { // 开始请求登录接口 AccountLogin({ username, password }) .then(async res => { // 设置 cookie 一定要存 uuid 和 token 两个 cookie // 整个系统依赖这两个数据进行校验和存储 // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复 // token 代表用户当前登录状态 建议在网络请求中携带 token // 如有必要 token 需要定时更新,默认保存一天 util.cookies.set('uuid', res.uuid) util.cookies.set('token', res.token) // 设置 vuex 用户信息 await dispatch('d2admin/user/set', { name: res.name }, { root: true }) // 用户登录后从持久化数据加载一系列的设置 await dispatch('load') // 结束 resolve() }) .catch(err => { console.log('err: ', err) reject(err) }) }) }, /** * @description 注销用户并返回登录页面 * @param {Object} param context * @param {Object} param confirm {Boolean} 是否需要确认 */ logout ({ commit, dispatch }, { confirm = false } = {}) { /** * @description 注销 */ async function logout () { // 删除cookie util.cookies.remove('token') util.cookies.remove('uuid') // 清空 vuex 用户信息 await dispatch('d2admin/user/set', {}, { root: true }) // 跳转路由 router.push({ name: 'login' }) } // 判断是否需要确认 if (confirm) { commit('d2admin/gray/set', true, { root: true }) MessageBox.confirm('注销当前账户吗? 打开的标签页和用户设置将会被保存。', '确认操作', { confirmButtonText: '确定注销', cancelButtonText: '放弃', type: 'warning' }) .then(() => { commit('d2admin/gray/set', false, { root: true }) logout() }) .catch(() => { commit('d2admin/gray/set', false, { root: true }) Message({ message: '放弃注销用户' }) }) } else { logout() } }, /** * @description 用户登录后从持久化数据加载一系列的设置 * @param {Object} state vuex state */ load ({ dispatch }) { return new Promise(async resolve => { // DB -> store 加载用户名 await dispatch('d2admin/user/load', null, { root: true }) // DB -> store 加载主题 await dispatch('d2admin/theme/load', null, { root: true }) // DB -> store 加载页面过渡效果设置 await dispatch('d2admin/transition/load', null, { root: true }) // DB -> store 持久化数据加载上次退出时的多页列表 await dispatch('d2admin/page/openedLoad', null, { root: true }) // DB -> store 持久化数据加载侧边栏折叠状态 await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true }) // DB -> store 持久化数据加载全局尺寸 await dispatch('d2admin/size/load', null, { root: true }) // end resolve() }) } } }
- d2admin>src>views>system>login>page.vue 通过模块调用API使用axio
methods: { ...mapActions('d2admin/account', [ 'login' ]),
class="page-login">class="page-login--layer page-login--layer-area"><div class="page-login--layer page-login--layer-time" flex="main:center cross:center"> {{time}}class="circles">
- for="n in 10" :key="n">
class="page-login--layer"> <div class="page-login--content" flex="dir:top main:justify cross:center box:justify">class="page-login--content-header"><div class="page-login--content-main" flex="dir:top main:center cross:center">class="page-login--content-header-motto"> 时间是一切财富中最宝贵的财富。 —— 德奥弗拉斯多
class="page-login--logo" src="./image/[email protected]">
class="page-login--form">"never"> <p class="page-login--options" flex="main:justify cross:center">ref="loginForm" label-position="top" :rules="rules" :model="formLogin" size="default"> "username"> "text" v-model="formLogin.username" placeholder="用户名"> "prepend" class="fa fa-user-circle-o"> "password"> "password" v-model="formLogin.password" placeholder="密码"> "prepend" class="fa fa-keyboard-o"> "code"> "text" v-model="formLogin.code" placeholder="- - - -"> "prepend">验证码 "append"> class="login-code" src="./image/login-code.png">
"default" @click="submit" type="primary" class="button-login">登录 " question-circle"/> 忘记密码 注册用户class="page-login--quick" size="default" type="info" @click="dialogVisible = true"> 快速选择用户(测试功能) class="page-login--content-footer">class="page-login--content-footer-options"> "#">帮助 "#">隐私 "#">条款
class="page-login--content-footer-copyright"> Copyright
"copyright"/> 2018 D2 Projects 开源组织出品 "https://github.com/FairyEver">@FairyEver