feat: 完善平台总后台模块
This commit is contained in:
88
frontend/platform_admin/src/mocks/handlers/message-box.ts
Normal file
88
frontend/platform_admin/src/mocks/handlers/message-box.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import Mock from 'mockjs';
|
||||
import setupMock, { successResponseWrap } from '@/mocks/setup';
|
||||
|
||||
const haveReadIds: number[] = [];
|
||||
const getMessageList = () => {
|
||||
return [
|
||||
{
|
||||
id: 1,
|
||||
type: 'message',
|
||||
title: '\u90d1\u6666\u6708',
|
||||
subTitle: '\u7684\u79c1\u4fe1',
|
||||
avatar:
|
||||
'//p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/8361eeb82904210b4f55fab888fe8416.png~tplv-uwbnlip3yd-webp.webp',
|
||||
content: '\u5ba1\u6279\u8bf7\u6c42\u5df2\u53d1\u9001\uff0c\u8bf7\u67e5\u6536',
|
||||
time: '\u4eca\u5929 12:30:01',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
type: 'message',
|
||||
title: '\u5b81\u6ce2',
|
||||
subTitle: '\u7684\u56de\u590d',
|
||||
avatar:
|
||||
'//p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp',
|
||||
content: '\u6b64\u5904 bug \u5df2\u7ecf\u4fee\u590d',
|
||||
time: '\u4eca\u5929 12:30:01',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
type: 'message',
|
||||
title: '\u5b81\u6ce2',
|
||||
subTitle: '\u7684\u56de\u590d',
|
||||
avatar:
|
||||
'//p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp',
|
||||
content: '\u6b64\u5904 bug \u5df2\u7ecf\u4fee\u590d',
|
||||
time: '\u4eca\u5929 12:20:01',
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
type: 'notice',
|
||||
title: '\u7eed\u8d39\u901a\u77e5',
|
||||
subTitle: '',
|
||||
avatar: '',
|
||||
content:
|
||||
'\u60a8\u7684\u4ea7\u54c1\u4f7f\u7528\u671f\u9650\u5373\u5c06\u622a\u6b62\uff0c\u5982\u9700\u7ee7\u7eed\u4f7f\u7528\u4ea7\u54c1\u8bf7\u524d\u5f80\u8d2d\u4e70',
|
||||
time: '\u4eca\u5929 12:20:01',
|
||||
messageType: 3,
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
type: 'notice',
|
||||
title: '\u89c4\u5219\u5f00\u901a\u6210\u529f',
|
||||
subTitle: '',
|
||||
avatar: '',
|
||||
content:
|
||||
'\u5185\u5bb9\u5c4f\u853d\u89c4\u5219\u4e8e 2021-12-01 \u5f00\u901a\u6210\u529f\u5e76\u751f\u6548',
|
||||
time: '\u4eca\u5929 12:20:01',
|
||||
messageType: 1,
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
type: 'todo',
|
||||
title: '\u8d28\u68c0\u961f\u5217\u53d8\u66f4',
|
||||
subTitle: '',
|
||||
avatar: '',
|
||||
content:
|
||||
'\u5185\u5bb9\u8d28\u68c0\u961f\u5217\u4e8e 2021-12-01 19:50:23 \u8fdb\u884c\u53d8\u66f4\uff0c\u8bf7\u91cd\u65b0\u63d0\u4ea4',
|
||||
time: '\u4eca\u5929 12:20:01',
|
||||
messageType: 0,
|
||||
},
|
||||
].map((item) => ({
|
||||
...item,
|
||||
status: haveReadIds.indexOf(item.id) === -1 ? 0 : 1,
|
||||
}));
|
||||
};
|
||||
|
||||
setupMock({
|
||||
setup: () => {
|
||||
Mock.mock(/\/api\/message\/list/, () => {
|
||||
return successResponseWrap(getMessageList());
|
||||
});
|
||||
|
||||
Mock.mock(/\/api\/message\/read/, (params: { body: string }) => {
|
||||
const { ids } = JSON.parse(params.body);
|
||||
haveReadIds.push(...(ids || []));
|
||||
return successResponseWrap(true);
|
||||
});
|
||||
},
|
||||
});
|
||||
104
frontend/platform_admin/src/mocks/handlers/user.ts
Normal file
104
frontend/platform_admin/src/mocks/handlers/user.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
import Mock from 'mockjs';
|
||||
import { DEFAULT_USER_AVATAR } from '@/constants/avatar';
|
||||
import { isLogin } from '@/utils/auth';
|
||||
import setupMock, {
|
||||
failResponseWrap,
|
||||
successResponseWrap,
|
||||
} from '@/mocks/setup';
|
||||
|
||||
export interface MockParams {
|
||||
url: string;
|
||||
type: string;
|
||||
body: string;
|
||||
}
|
||||
|
||||
setupMock({
|
||||
setup() {
|
||||
Mock.mock(/\/api\/user\/info/, () => {
|
||||
if (isLogin()) {
|
||||
const role = window.localStorage.getItem('userRole') || 'admin';
|
||||
return successResponseWrap({
|
||||
name: 'admin',
|
||||
avatar: DEFAULT_USER_AVATAR,
|
||||
email: 'wangliqun@email.com',
|
||||
job: 'frontend',
|
||||
jobName: '\u524d\u7aef\u827a\u672f\u5bb6',
|
||||
organization: 'Frontend',
|
||||
organizationName: '\u524d\u7aef',
|
||||
location: 'beijing',
|
||||
locationName: '\u5317\u4eac',
|
||||
introduction: '\u4eba\u7206\u723d\uff0c\u6027\u6e29\u7eaf',
|
||||
personalWebsite: 'https://www.arco.design',
|
||||
phone: '150****0000',
|
||||
registrationDate: '2013-05-10 12:10:00',
|
||||
accountId: '15012312300',
|
||||
certification: 1,
|
||||
role,
|
||||
});
|
||||
}
|
||||
return failResponseWrap(null, '\u672a\u767b\u5f55', 50008);
|
||||
});
|
||||
|
||||
Mock.mock(/\/api\/user\/login/, (params: MockParams) => {
|
||||
const { username, password } = JSON.parse(params.body);
|
||||
if (!username) {
|
||||
return failResponseWrap(
|
||||
null,
|
||||
'\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a',
|
||||
50000,
|
||||
);
|
||||
}
|
||||
if (!password) {
|
||||
return failResponseWrap(null, '\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a', 50000);
|
||||
}
|
||||
if (username === 'admin' && password === 'admin') {
|
||||
window.localStorage.setItem('userRole', 'admin');
|
||||
return successResponseWrap({ token: '12345' });
|
||||
}
|
||||
if (username === 'user' && password === 'user') {
|
||||
window.localStorage.setItem('userRole', 'user');
|
||||
return successResponseWrap({ token: '54321' });
|
||||
}
|
||||
return failResponseWrap(
|
||||
null,
|
||||
'\u8d26\u53f7\u6216\u8005\u5bc6\u7801\u9519\u8bef',
|
||||
50000,
|
||||
);
|
||||
});
|
||||
|
||||
Mock.mock(/\/api\/user\/logout/, () => successResponseWrap(null));
|
||||
Mock.mock(/\/api\/user\/menu/, () => {
|
||||
const menuList = [
|
||||
{
|
||||
path: '/dashboard',
|
||||
name: 'dashboard',
|
||||
meta: {
|
||||
locale: 'menu.server.dashboard',
|
||||
requiresAuth: true,
|
||||
icon: 'icon-dashboard',
|
||||
order: 1,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'workplace',
|
||||
name: 'Workplace',
|
||||
meta: {
|
||||
locale: 'menu.server.workplace',
|
||||
requiresAuth: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'https://arco.design',
|
||||
name: 'arcoWebsite',
|
||||
meta: {
|
||||
locale: 'menu.arcoWebsite',
|
||||
requiresAuth: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
return successResponseWrap(menuList);
|
||||
});
|
||||
},
|
||||
});
|
||||
9
frontend/platform_admin/src/mocks/index.ts
Normal file
9
frontend/platform_admin/src/mocks/index.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import Mock from 'mockjs';
|
||||
import './handlers/user';
|
||||
import './handlers/message-box';
|
||||
|
||||
import.meta.glob('@/views/**/mock.ts', { eager: true });
|
||||
|
||||
Mock.setup({
|
||||
timeout: '600-1000',
|
||||
});
|
||||
27
frontend/platform_admin/src/mocks/setup.ts
Normal file
27
frontend/platform_admin/src/mocks/setup.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import debug from '@/utils/env';
|
||||
|
||||
export default ({ mock, setup }: { mock?: boolean; setup: () => void }) => {
|
||||
if (mock !== false && debug) setup();
|
||||
};
|
||||
|
||||
export const successResponseWrap = (data: unknown) => {
|
||||
return {
|
||||
data,
|
||||
status: 'ok',
|
||||
msg: '请求成功',
|
||||
code: 20000,
|
||||
};
|
||||
};
|
||||
|
||||
export const failResponseWrap = (
|
||||
data: unknown,
|
||||
msg: string,
|
||||
code = 50000,
|
||||
) => {
|
||||
return {
|
||||
data,
|
||||
status: 'fail',
|
||||
msg,
|
||||
code,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user