zayac-admin/continew-admin-ui/src/views/demo/visualization/data-analysis/mock.ts
2023-11-14 09:34:21 +08:00

109 lines
3.3 KiB
TypeScript

import Mock from 'mockjs';
import setupMock, { successResponseWrap } from '@/utils/setup-mock';
import { PostData } from '@/types/global';
setupMock({
setup() {
Mock.mock(
new RegExp('/api/public-opinion-analysis'),
(params: PostData) => {
const { quota = 'visitors' } = JSON.parse(params.body);
if (['visitors', 'comment'].includes(quota)) {
const year = new Date().getFullYear();
const getLineData = (name: number) => {
return new Array(12).fill(0).map((_item, index) => ({
x: `${index + 1}`,
y: Mock.Random.natural(0, 100),
name: String(name),
}));
};
return successResponseWrap({
count: 5670,
growth: 206.32,
chartData: [...getLineData(year), ...getLineData(year - 1)],
});
}
if (['published'].includes(quota)) {
const year = new Date().getFullYear();
const getLineData = (name: number) => {
return new Array(12).fill(0).map((_item, index) => ({
x: `${index + 1}`,
y: Mock.Random.natural(20, 100),
name: String(name),
}));
};
return successResponseWrap({
count: 5670,
growth: 206.32,
chartData: [...getLineData(year)],
});
}
return successResponseWrap({
count: 5670,
growth: 206.32,
chartData: [
// itemStyle for demo
{ name: '文本类', value: 25, itemStyle: { color: '#8D4EDA' } },
{ name: '图文类', value: 35, itemStyle: { color: '#165DFF' } },
{ name: '视频类', value: 40, itemStyle: { color: '#00B2FF' } },
],
});
},
);
Mock.mock(new RegExp('/api/content-period-analysis'), () => {
const getLineData = (name: string) => {
return {
name,
value: new Array(12).fill(0).map(() => Mock.Random.natural(30, 90)),
};
};
return successResponseWrap({
xAxis: new Array(12).fill(0).map((_item, index) => `${index * 2}:00`),
data: [
getLineData('纯文本'),
getLineData('图文类'),
getLineData('视频类'),
],
});
});
Mock.mock(new RegExp('/api/content-publish'), () => {
const generateLineData = (name: string) => {
const result = {
name,
x: [] as string[],
y: [] as number[],
};
new Array(12).fill(0).forEach((_item, index) => {
result.x.push(`${index * 2}:00`);
result.y.push(Mock.Random.natural(1000, 3000));
});
return result;
};
return successResponseWrap([
generateLineData('纯文本'),
generateLineData('图文类'),
generateLineData('视频类'),
]);
});
Mock.mock(new RegExp('/api/popular-author/list'), () => {
const generateData = () => {
const list = new Array(7).fill(0).map((_item, index) => ({
ranking: index + 1,
author: Mock.mock('@ctitle(5)'),
contentCount: Mock.mock(/[0-9]{4}/),
clickCount: Mock.mock(/[0-9]{4}/),
}));
return {
list,
};
};
return successResponseWrap({
...generateData(),
});
});
},
});