From ee6022b951032af0501a5189ef6b233766856c82 Mon Sep 17 00:00:00 2001 From: Odboy Date: Sun, 4 Feb 2024 20:16:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E8=B7=AF=E7=94=B1=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/modules/d2admin/modules/account.js | 2 + .../store/modules/d2admin/modules/router.js | 94 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 web/src/store/modules/d2admin/modules/router.js diff --git a/web/src/store/modules/d2admin/modules/account.js b/web/src/store/modules/d2admin/modules/account.js index b73fc3e..fa0301a 100644 --- a/web/src/store/modules/d2admin/modules/account.js +++ b/web/src/store/modules/d2admin/modules/account.js @@ -27,6 +27,8 @@ export default { util.cookies.set('username', res.username) util.cookies.set('name', res.name) util.cookies.set('token', res.token) + // 加载路由 + await dispatch('d2admin/router/set', res.routes, { root: true }) // 设置 vuex 用户信息 await dispatch('d2admin/user/set', { name: res.name }, { root: true }) // 用户登录后从持久化数据加载一系列的设置 diff --git a/web/src/store/modules/d2admin/modules/router.js b/web/src/store/modules/d2admin/modules/router.js new file mode 100644 index 0000000..fa0301a --- /dev/null +++ b/web/src/store/modules/d2admin/modules/router.js @@ -0,0 +1,94 @@ +import { Message, MessageBox } from 'element-ui' +import util from '@/libs/util.js' +import router from '@/router' +import api from '@/api' + +export default { + namespaced: true, + actions: { + /** + * @description 登录 + * @param {Object} context + * @param {Object} payload username {String} 用户账号 + * @param {Object} payload password {String} 密码 + * @param {Object} payload route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式 + */ + async login ({ dispatch }, { + username = '', + password = '' + } = {}) { + const res = await api.SYS_USER_LOGIN({ username, password }) + // 设置 cookie 一定要存 uuid 和 token 两个 cookie + // 整个系统依赖这两个数据进行校验和存储 + // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复 + // token 代表用户当前登录状态 建议在网络请求中携带 token + // 如有必要 token 需要定时更新,默认保存一天 + util.cookies.set('uuid', res.uuid) + util.cookies.set('username', res.username) + util.cookies.set('name', res.name) + util.cookies.set('token', res.token) + // 加载路由 + await dispatch('d2admin/router/set', res.routes, { root: true }) + // 设置 vuex 用户信息 + await dispatch('d2admin/user/set', { name: res.name }, { root: true }) + // 用户登录后从持久化数据加载一系列的设置 + await dispatch('load') + }, + /** + * @description 注销用户并返回登录页面 + * @param {Object} context + * @param {Object} payload confirm {Boolean} 是否需要确认 + */ + logout ({ commit, dispatch }, { confirm = false } = {}) { + /** + * @description 注销 + */ + async function logout () { + // 删除cookie + util.cookies.remove('token') + util.cookies.remove('uuid') + util.cookies.remove('username') + util.cookies.remove('name') + // 清空 vuex 用户信息 + await dispatch('d2admin/user/set', {}, { root: true }) + // 跳转路由 + router.push({ name: 'login' }) + } + // 判断是否需要确认 + if (confirm) { + commit('d2admin/gray/set', true, { root: true }) + MessageBox.confirm('确定要注销当前用户吗', '注销用户', { 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} context + */ + async load ({ dispatch }) { + // 加载用户名 + await dispatch('d2admin/user/load', null, { root: true }) + // 加载主题 + await dispatch('d2admin/theme/load', null, { root: true }) + // 加载页面过渡效果设置 + await dispatch('d2admin/transition/load', null, { root: true }) + // 持久化数据加载上次退出时的多页列表 + await dispatch('d2admin/page/openedLoad', null, { root: true }) + // 持久化数据加载侧边栏配置 + await dispatch('d2admin/menu/asideLoad', null, { root: true }) + // 持久化数据加载全局尺寸 + await dispatch('d2admin/size/load', null, { root: true }) + // 持久化数据加载颜色设置 + await dispatch('d2admin/color/load', null, { root: true }) + } + } +}