Compare commits
2 Commits
cf3d489d9d
...
0a3b114ebe
Author | SHA1 | Date |
---|---|---|
roger_home_pc | 0a3b114ebe | 1 year ago |
roger_home_pc | 3307514ce0 | 1 year ago |
17 changed files with 426 additions and 31 deletions
@ -0,0 +1,9 @@ |
|||||||
|
import request from "@/request/index.js" |
||||||
|
|
||||||
|
export const userInfo = (data) => { |
||||||
|
return request({ |
||||||
|
url: '/personal/userinfo', |
||||||
|
method: 'get', |
||||||
|
data, |
||||||
|
}) |
||||||
|
} |
@ -0,0 +1,103 @@ |
|||||||
|
export const users = [ |
||||||
|
{ |
||||||
|
name: "visitor", |
||||||
|
roleId: 'visitor', |
||||||
|
password: "visitor", |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "master", |
||||||
|
roleId: "master", |
||||||
|
password: "master", |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "admin", |
||||||
|
roleId: "admin", |
||||||
|
password: "admin", |
||||||
|
}, |
||||||
|
]; |
||||||
|
|
||||||
|
export const menuTreeData = [ |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
parentId: 0, |
||||||
|
name: 'App', |
||||||
|
path: "/app", |
||||||
|
icon: "el-icon-menu", |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
id: 11, |
||||||
|
parentId: 1, |
||||||
|
name: 'AppUser', |
||||||
|
path: "/app/user", |
||||||
|
icon: "user", |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 12, |
||||||
|
parentId: 1, |
||||||
|
name: 'AppDept', |
||||||
|
path: "/app/dept", |
||||||
|
icon: "office-building", |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 13, |
||||||
|
parentId: 1, |
||||||
|
name: 'AppRole', |
||||||
|
path: "/app/role", |
||||||
|
icon: "avatar", |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 14, |
||||||
|
parentId: 1, |
||||||
|
name: 'AppResource', |
||||||
|
path: "/app/resource", |
||||||
|
icon: "management", |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 2, |
||||||
|
parentId: 0, |
||||||
|
name: 'Sys', |
||||||
|
path: "/sys", |
||||||
|
icon: "setting", |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
id: 21, |
||||||
|
parentId: 2, |
||||||
|
name: 'SysUser', |
||||||
|
path: "/sys/user", |
||||||
|
icon: "user-filled", |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 22, |
||||||
|
parentId: 2, |
||||||
|
name: 'SysNotice', |
||||||
|
path: "/sys/notice", |
||||||
|
icon: "chat-dot-round", |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 3, |
||||||
|
parentId: 0, |
||||||
|
name: 'Logs', |
||||||
|
path: "/logs", |
||||||
|
icon: "document", |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
id: 31, |
||||||
|
parentId: 3, |
||||||
|
name: 'LogsVisit', |
||||||
|
path: "/logs/visit", |
||||||
|
icon: "tickets", |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 32, |
||||||
|
parentId: 3, |
||||||
|
name: 'LogsOperation', |
||||||
|
path: "/logs/operation", |
||||||
|
icon: "operation", |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
]; |
@ -0,0 +1,52 @@ |
|||||||
|
import Mock from "mockjs"; |
||||||
|
import config from "@/request/config"; |
||||||
|
import * as login from "./modules/login"; |
||||||
|
import * as personal from "./modules/personal"; |
||||||
|
const { baseURL } = config; |
||||||
|
|
||||||
|
// 1. 开启/关闭所有模块拦截, 通过openMock开关设置.
|
||||||
|
// 2. 开启/关闭单个模块拦截, 通过调用mock方法isOpen参数设置.
|
||||||
|
// 3. 开启/关闭模块中某个请求拦截, 通过函数返回对象中的isOpen属性设置.
|
||||||
|
const openMock = true; |
||||||
|
// 模拟所有模块
|
||||||
|
// mockAll([login], openMock);
|
||||||
|
|
||||||
|
// function mockAll(modules, isOpen = true) {
|
||||||
|
// for (const k in modules) {
|
||||||
|
// mock(modules[k], isOpen);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// 模拟单个模块
|
||||||
|
mock(login, openMock) |
||||||
|
mock(personal, openMock) |
||||||
|
/** |
||||||
|
* 创建mock模拟数据 |
||||||
|
* @param {*} mod 模块 |
||||||
|
* @param {*} isOpen 是否开启? |
||||||
|
*/ |
||||||
|
function mock(mod, isOpen = true) { |
||||||
|
if (isOpen) { |
||||||
|
for (var key in mod) { |
||||||
|
((res) => { |
||||||
|
if (res.isOpen !== false) { |
||||||
|
let url = baseURL; |
||||||
|
if (!url.endsWith("/")) { |
||||||
|
url = url + "/"; |
||||||
|
} |
||||||
|
url = url + res.url; |
||||||
|
Mock.mock(new RegExp(url), res.method, (opts) => { |
||||||
|
opts.data = opts.body ? JSON.parse(opts.body) : null; |
||||||
|
const resData = Mock.mock( |
||||||
|
typeof res.response === "function" |
||||||
|
? res.response(opts) |
||||||
|
: res.response |
||||||
|
); |
||||||
|
console.log("%cmock拦截, 请求: ", "color:blue", opts); |
||||||
|
console.log("%cmock拦截, 响应: ", "color:blue", resData); |
||||||
|
return resData; |
||||||
|
}); |
||||||
|
} |
||||||
|
})(mod[key]() || {}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
/* |
||||||
|
* 系统登录模块 |
||||||
|
*/ |
||||||
|
import { users } from "../data"; |
||||||
|
// 登录
|
||||||
|
export function login() { |
||||||
|
return { |
||||||
|
url: "login", |
||||||
|
method: "post", |
||||||
|
response: (opts) => { |
||||||
|
const name = opts.data.account; |
||||||
|
if ( |
||||||
|
users.find((v) => v.name === name && v.password === opts.data.password) |
||||||
|
) { |
||||||
|
return { |
||||||
|
code: 200, |
||||||
|
msg: "", |
||||||
|
data: { |
||||||
|
token: name + "@eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cC", |
||||||
|
name, |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
return { |
||||||
|
code: -1, |
||||||
|
msg: "用户名或密码错误", |
||||||
|
}; |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
// export function login() {
|
||||||
|
// return {
|
||||||
|
// url: "login",
|
||||||
|
// method: "post",
|
||||||
|
// response: () => {
|
||||||
|
// return {
|
||||||
|
// code: -1,
|
||||||
|
// msg: "用户名或密码不正确!",
|
||||||
|
// };
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
// 登出接口
|
||||||
|
export function logout() { |
||||||
|
return { |
||||||
|
url: "logout", |
||||||
|
method: "get", |
||||||
|
response: { |
||||||
|
code: 200, |
||||||
|
msg: null, |
||||||
|
data: {}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,66 @@ |
|||||||
|
import { users, menuTreeData } from "../data"; |
||||||
|
export function userInfo() { |
||||||
|
return { |
||||||
|
url: "personal/userinfo", |
||||||
|
method: "get", |
||||||
|
response: () => { |
||||||
|
const token = localStorage.getItem('pm_token'); |
||||||
|
if (token) { |
||||||
|
const uinfo = {...users.find((v) => v.name === token.split('@')[0])} |
||||||
|
delete uinfo.password; |
||||||
|
return { |
||||||
|
code: 200, |
||||||
|
data: { |
||||||
|
...uinfo, |
||||||
|
'unReadCount|0-10': 0 |
||||||
|
} |
||||||
|
}; |
||||||
|
} else { |
||||||
|
return { |
||||||
|
code: -2, |
||||||
|
msg: '请先登录!' |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
export function menuTree() { |
||||||
|
return { |
||||||
|
url: "personal/menuTree", |
||||||
|
method: "get", |
||||||
|
response: () => { |
||||||
|
const token = localStorage.getItem('pm_token'); |
||||||
|
if (!token) { |
||||||
|
return { |
||||||
|
code: 200, |
||||||
|
msg: '' |
||||||
|
} |
||||||
|
} |
||||||
|
const name = token.split('@')[0] |
||||||
|
const info = users.find(v => v.name === name) |
||||||
|
const role = info.roleId; |
||||||
|
let treeData = [menuTreeData[2]]; |
||||||
|
switch (role) { |
||||||
|
case "admin": |
||||||
|
treeData = menuTreeData; |
||||||
|
break; |
||||||
|
case "master": |
||||||
|
treeData = [menuTreeData[0], menuTreeData[2]]; |
||||||
|
break; |
||||||
|
case "visitor": |
||||||
|
treeData = [menuTreeData[2]]; |
||||||
|
break; |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
return { |
||||||
|
code: 200, |
||||||
|
data: treeData, |
||||||
|
}; |
||||||
|
}, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
@ -1,10 +1,10 @@ |
|||||||
export default { |
export default { |
||||||
method: 'get', |
method: 'get', |
||||||
baseURL: 'http://localhost:8001', |
baseURL: 'http://localhost:8001', |
||||||
header: { |
headers: { |
||||||
'Content-Type': 'application/json;charset=UTF-8' |
'Content-Type': 'application/json;charset=UTF-8' |
||||||
}, |
}, |
||||||
timeout: 10000, |
timeout: 10000, |
||||||
withCredentials: true, |
withCredentials: true, |
||||||
responseType: 'json', |
responseType: 'json', |
||||||
} |
} |
||||||
|
@ -1,12 +1,27 @@ |
|||||||
import {createStore} from "vuex"; |
import {createStore} from "vuex"; |
||||||
|
|
||||||
|
import user from "./modules/user.js" |
||||||
|
|
||||||
export default createStore({ |
export default createStore({ |
||||||
|
modules: { |
||||||
|
user |
||||||
|
}, |
||||||
state: { |
state: { |
||||||
count: 0, |
routeLoaded: false, // 菜单和路由是否已经加载
|
||||||
|
firstRoute: null, // 第一个路由,用于设置进入主页 的redirect
|
||||||
|
menuTree: null, // 菜单树
|
||||||
}, |
}, |
||||||
mutations: { |
mutations: { |
||||||
increase (state, count) { |
// 改变菜单和路由的加载状态
|
||||||
state.count += count; |
setRouteLoaded(state, loaded) { |
||||||
} |
state.routeLoaded = loaded; |
||||||
} |
}, |
||||||
}) |
setFirstRoute(state, route) { |
||||||
|
state.firstRoute = route; |
||||||
|
}, |
||||||
|
setMenuTree(state, data) { |
||||||
|
state.menuTree = data |
||||||
|
}, |
||||||
|
}, |
||||||
|
actions: {}, |
||||||
|
}) |
||||||
|
@ -0,0 +1,38 @@ |
|||||||
|
import {userInfo} from "@/apis/personal.js" |
||||||
|
import {info} from "sass"; |
||||||
|
|
||||||
|
export default { |
||||||
|
namespaced: true, |
||||||
|
state: { |
||||||
|
token: '', |
||||||
|
userInfo: {} // 用户基本信息
|
||||||
|
}, |
||||||
|
getters: { |
||||||
|
isLogin(state) { |
||||||
|
return !!state.token || !!localStorage.getItem("pm_token"); |
||||||
|
} |
||||||
|
}, |
||||||
|
mutations: { |
||||||
|
setToken(state, token) { |
||||||
|
localStorage.setItem('pm_token', token); |
||||||
|
state.token = token; |
||||||
|
}, |
||||||
|
clearToken(state) { |
||||||
|
state.token = ''; |
||||||
|
localStorage.removeItem('pm_token'); |
||||||
|
}, |
||||||
|
setUserInfo(state, info) { |
||||||
|
state.userInfo = info || {}; |
||||||
|
}, |
||||||
|
clearUserInfo(state) { |
||||||
|
state.userInfo = {} |
||||||
|
} |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
refreshInfo({commit}) { |
||||||
|
userInfo().then(res => { |
||||||
|
commit('setUserInfo', res.data) |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue