540 lines
16 KiB
TypeScript
540 lines
16 KiB
TypeScript
import { Request, Response } from 'express';
|
||
import captchapng from 'captchapng3';
|
||
|
||
const waitTime = (time: number = 100) => {
|
||
return new Promise((resolve) => {
|
||
setTimeout(() => {
|
||
resolve(true);
|
||
}, time);
|
||
});
|
||
};
|
||
|
||
async function getFakeCaptcha(req: Request, res: Response) {
|
||
await waitTime(2000);
|
||
return res.json('captcha-xxx');
|
||
}
|
||
|
||
|
||
function guid () {
|
||
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||
return v.toString(16);
|
||
});
|
||
}
|
||
|
||
async function getCaptchaImage(req: Request, res: Response) {
|
||
await waitTime(1000);
|
||
let rand = (Math.random() * 9000 + 1000).toFixed();
|
||
var p = new captchapng(100, 30, rand);
|
||
const img = p.getBase64();
|
||
res.status(200).send({
|
||
code: 200,
|
||
msg: 'success',
|
||
img: img,
|
||
uuid: guid()
|
||
});
|
||
}
|
||
|
||
const { ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION } = process.env;
|
||
|
||
/**
|
||
* 当前用户的权限,如果为空代表没登录
|
||
* current user access, if is '', user need login
|
||
* 如果是 pro 的预览,默认是有权限的
|
||
*/
|
||
let access = ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION === 'site' ? 'admin' : '';
|
||
|
||
const getAccess = () => {
|
||
return access;
|
||
};
|
||
|
||
// 代码中会兼容本地 service mock 以及部署站点的静态数据
|
||
export default {
|
||
// 支持值为 Object 和 Array
|
||
'GET /api/getInfo': (req: Request, res: Response) => {
|
||
if (!getAccess()) {
|
||
res.status(401).send({
|
||
data: {
|
||
isLogin: false,
|
||
},
|
||
errorCode: '401',
|
||
errorMessage: '请先登录!',
|
||
success: true,
|
||
});
|
||
return;
|
||
}
|
||
res.send({
|
||
msg: "操作成功",
|
||
code: 200,
|
||
permissions: ["*:*:*"],
|
||
roles: ["admin"],
|
||
user: {
|
||
searchValue: null,
|
||
createBy: "admin",
|
||
createTime: "2021-09-09 17:25:28",
|
||
updateBy: null,
|
||
updateTime: null,
|
||
remark: "管理员",
|
||
params: {},
|
||
userId: 1,
|
||
deptId: 103,
|
||
userName: "admin",
|
||
nickName: "若依",
|
||
email: "ry@163.com",
|
||
phonenumber: "15888888888",
|
||
sex: "1",
|
||
avatar: "/static/img/profile.473f5971.jpg",
|
||
status: "0",
|
||
delFlag: "0",
|
||
loginIp: "61.140.198.155",
|
||
loginDate: "2021-11-11T14:03:07.723+0800",
|
||
dept: {
|
||
searchValue: null,
|
||
createBy: null,
|
||
createTime: null,
|
||
updateBy: null,
|
||
updateTime: null,
|
||
remark: null,
|
||
params: {},
|
||
deptId: 103,
|
||
parentId: 101,
|
||
ancestors: null,
|
||
deptName: "研发部门",
|
||
orderNum: "1",
|
||
leader: "若依",
|
||
phone: null,
|
||
email: null,
|
||
status: "0",
|
||
delFlag: null,
|
||
parentName: null,
|
||
children: []
|
||
},
|
||
roles: [
|
||
{
|
||
searchValue: null,
|
||
createBy: null,
|
||
createTime: null,
|
||
updateBy: null,
|
||
updateTime: null,
|
||
remark: null,
|
||
params: {},
|
||
roleId: 1,
|
||
roleName: "超级管理员",
|
||
roleKey: "admin",
|
||
roleSort: "1",
|
||
dataScope: "1",
|
||
menuCheckStrictly: false,
|
||
deptCheckStrictly: false,
|
||
status: "0",
|
||
delFlag: null,
|
||
flag: false,
|
||
menuIds: null,
|
||
deptIds: null,
|
||
admin: true
|
||
}
|
||
],
|
||
roleIds: null,
|
||
postIds: null,
|
||
roleId: null,
|
||
admin: true
|
||
}
|
||
});
|
||
},
|
||
// GET POST 可省略
|
||
'GET /api/users': [
|
||
{
|
||
key: '1',
|
||
name: 'John Brown',
|
||
age: 32,
|
||
address: 'New York No. 1 Lake Park',
|
||
},
|
||
{
|
||
key: '2',
|
||
name: 'Jim Green',
|
||
age: 42,
|
||
address: 'London No. 1 Lake Park',
|
||
},
|
||
{
|
||
key: '3',
|
||
name: 'Joe Black',
|
||
age: 32,
|
||
address: 'Sidney No. 1 Lake Park',
|
||
},
|
||
],
|
||
'POST /api/login': async (req: Request, res: Response) => {
|
||
const { password, username, type } = req.body;
|
||
await waitTime(2000);
|
||
if (password === 'admin123' && username === 'admin') {
|
||
res.send({
|
||
code: 200,
|
||
type,
|
||
currentAuthority: 'admin',
|
||
token: guid()
|
||
});
|
||
access = 'admin';
|
||
return;
|
||
}
|
||
if (password === '123456' && username === 'user') {
|
||
res.send({
|
||
code: 200,
|
||
type,
|
||
currentAuthority: 'user',
|
||
token: guid()
|
||
});
|
||
access = 'user';
|
||
return;
|
||
}
|
||
if (type === 'mobile') {
|
||
res.send({
|
||
code: 200,
|
||
type,
|
||
currentAuthority: 'admin',
|
||
token: guid()
|
||
});
|
||
access = 'admin';
|
||
return;
|
||
}
|
||
|
||
res.send({
|
||
status: 'error',
|
||
type,
|
||
currentAuthority: 'guest',
|
||
});
|
||
access = 'guest';
|
||
},
|
||
'POST /api/logout': (req: Request, res: Response) => {
|
||
access = '';
|
||
res.send({ data: {}, success: true });
|
||
},
|
||
|
||
'GET /api/getRouters': {
|
||
msg: "操作成功",
|
||
code: 200,
|
||
data: [
|
||
{
|
||
name: "System",
|
||
path: "/system",
|
||
hidden: false,
|
||
redirect: "noRedirect",
|
||
component: "Layout",
|
||
alwaysShow: true,
|
||
meta: {
|
||
title: "系统管理",
|
||
icon: "system",
|
||
noCache: false,
|
||
link: null
|
||
},
|
||
children: [
|
||
{
|
||
name: "User",
|
||
path: "user",
|
||
hidden: false,
|
||
component: "system/user/index",
|
||
meta: {
|
||
title: "用户管理",
|
||
icon: "user",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Role",
|
||
path: "role",
|
||
hidden: false,
|
||
component: "system/role/index",
|
||
meta: {
|
||
title: "角色管理",
|
||
icon: "peoples",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Menu",
|
||
path: "menu",
|
||
hidden: false,
|
||
component: "system/menu/index",
|
||
meta: {
|
||
title: "菜单管理",
|
||
icon: "tree-table",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Dept",
|
||
path: "dept",
|
||
hidden: false,
|
||
component: "system/dept/index",
|
||
meta: {
|
||
title: "部门管理",
|
||
icon: "tree",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Post",
|
||
path: "post",
|
||
hidden: false,
|
||
component: "system/post/index",
|
||
meta: {
|
||
title: "岗位管理",
|
||
icon: "post",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Dict",
|
||
path: "dict",
|
||
hidden: false,
|
||
component: "system/dict/index",
|
||
meta: {
|
||
title: "字典管理",
|
||
icon: "dict",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Config",
|
||
path: "config",
|
||
hidden: false,
|
||
component: "system/config/index",
|
||
meta: {
|
||
title: "参数设置",
|
||
icon: "edit",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Notice",
|
||
path: "notice",
|
||
hidden: false,
|
||
component: "system/notice/index",
|
||
meta: {
|
||
title: "通知公告",
|
||
icon: "message",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Log",
|
||
path: "log",
|
||
hidden: false,
|
||
redirect: "noRedirect",
|
||
component: "ParentView",
|
||
alwaysShow: true,
|
||
meta: {
|
||
title: "日志管理",
|
||
icon: "log",
|
||
noCache: false,
|
||
link: null
|
||
},
|
||
children: [
|
||
{
|
||
name: "Operlog",
|
||
path: "operlog",
|
||
hidden: false,
|
||
component: "monitor/operlog/index",
|
||
meta: {
|
||
title: "操作日志",
|
||
icon: "form",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Logininfor",
|
||
path: "logininfor",
|
||
hidden: false,
|
||
component: "monitor/logininfor/index",
|
||
meta: {
|
||
title: "登录日志",
|
||
icon: "logininfor",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
name: "Monitor",
|
||
path: "/monitor",
|
||
hidden: false,
|
||
redirect: "noRedirect",
|
||
component: "Layout",
|
||
alwaysShow: true,
|
||
meta: {
|
||
title: "系统监控",
|
||
icon: "monitor",
|
||
noCache: false,
|
||
link: null
|
||
},
|
||
children: [
|
||
{
|
||
name: "Online",
|
||
path: "online",
|
||
hidden: false,
|
||
component: "monitor/online/index",
|
||
meta: {
|
||
title: "在线用户",
|
||
icon: "online",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Job",
|
||
path: "job",
|
||
hidden: false,
|
||
component: "monitor/job/index",
|
||
meta: {
|
||
title: "定时任务",
|
||
icon: "job",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Druid",
|
||
path: "druid",
|
||
hidden: false,
|
||
component: "monitor/druid/index",
|
||
meta: {
|
||
title: "数据监控",
|
||
icon: "druid",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Server",
|
||
path: "server",
|
||
hidden: false,
|
||
component: "monitor/server/index",
|
||
meta: {
|
||
title: "服务监控",
|
||
icon: "server",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Cache",
|
||
path: "cache",
|
||
hidden: false,
|
||
component: "monitor/cache/index",
|
||
meta: {
|
||
title: "缓存监控",
|
||
icon: "redis",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
name: "Tool",
|
||
path: "/tool",
|
||
hidden: false,
|
||
redirect: "noRedirect",
|
||
component: "Layout",
|
||
alwaysShow: true,
|
||
meta: {
|
||
title: "系统工具",
|
||
icon: "tool",
|
||
noCache: false,
|
||
link: null
|
||
},
|
||
children: [
|
||
{
|
||
name: "Build",
|
||
path: "build",
|
||
hidden: false,
|
||
component: "tool/build/index",
|
||
meta: {
|
||
title: "表单构建",
|
||
icon: "build",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Gen",
|
||
path: "gen",
|
||
hidden: false,
|
||
component: "tool/gen/index",
|
||
meta: {
|
||
title: "代码生成",
|
||
icon: "code",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
},
|
||
{
|
||
name: "Swagger",
|
||
path: "swagger",
|
||
hidden: false,
|
||
component: "tool/swagger/index",
|
||
meta: {
|
||
title: "系统接口",
|
||
icon: "swagger",
|
||
noCache: false,
|
||
link: null
|
||
}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
'POST /api/register': (req: Request, res: Response) => {
|
||
res.send({ status: 'ok', currentAuthority: 'user', success: true });
|
||
},
|
||
'GET /api/500': (req: Request, res: Response) => {
|
||
res.status(500).send({
|
||
timestamp: 1513932555104,
|
||
status: 500,
|
||
error: 'error',
|
||
message: 'error',
|
||
path: '/base/category/list',
|
||
});
|
||
},
|
||
'GET /api/404': (req: Request, res: Response) => {
|
||
res.status(404).send({
|
||
timestamp: 1513932643431,
|
||
status: 404,
|
||
error: 'Not Found',
|
||
message: 'No message available',
|
||
path: '/base/category/list/2121212',
|
||
});
|
||
},
|
||
'GET /api/403': (req: Request, res: Response) => {
|
||
res.status(403).send({
|
||
timestamp: 1513932555104,
|
||
status: 403,
|
||
error: 'Forbidden',
|
||
message: 'Forbidden',
|
||
path: '/base/category/list',
|
||
});
|
||
},
|
||
'GET /api/401': (req: Request, res: Response) => {
|
||
res.status(401).send({
|
||
timestamp: 1513932555104,
|
||
status: 401,
|
||
error: 'Unauthorized',
|
||
message: 'Unauthorized',
|
||
path: '/base/category/list',
|
||
});
|
||
},
|
||
|
||
'GET /api/login/captcha': getFakeCaptcha,
|
||
|
||
'GET /api/captchaImage': getCaptchaImage,
|
||
};
|