mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-07 08:57:19 +08:00
feat: add echarts
This commit is contained in:
parent
dae90a0c21
commit
651ac333ee
23
mock/echarts.ts
Normal file
23
mock/echarts.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { MockMethod } from 'vite-plugin-mock'
|
||||||
|
|
||||||
|
// http://mockjs.com/examples.html#Object
|
||||||
|
const echartsList = (): any => {
|
||||||
|
const result: any[] = []
|
||||||
|
for (let index = 0; index < 200; index++) {
|
||||||
|
result.push(['@date', Math.floor(Math.random() * 300)])
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
url: '/getEchartsInfo',
|
||||||
|
method: 'get',
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
code: 0,
|
||||||
|
info: echartsList()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
] as MockMethod[]
|
11
src/App.vue
11
src/App.vue
@ -1,3 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<router-view />
|
<router-view />
|
||||||
</template>
|
</template>
|
||||||
|
<script lang='ts'>
|
||||||
|
|
||||||
|
import * as echarts from 'echarts'
|
||||||
|
import { provide } from 'vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setup(){
|
||||||
|
provide('echarts', echarts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -1,6 +0,0 @@
|
|||||||
|
|
||||||
import { http } from "../utils/http"
|
|
||||||
|
|
||||||
export const mapJson = (data?: object): any => {
|
|
||||||
return http.request("get", "/getMapInfo", data)
|
|
||||||
}
|
|
12
src/api/mock.ts
Normal file
12
src/api/mock.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
import { http } from "../utils/http"
|
||||||
|
|
||||||
|
// 地图数据
|
||||||
|
export const mapJson = (data?: object): any => {
|
||||||
|
return http.request("get", "/getMapInfo", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// echarts数据
|
||||||
|
export const echartsJson = (data?: object): any => {
|
||||||
|
return http.request("get", "/getEchartsInfo", data)
|
||||||
|
}
|
@ -19,7 +19,7 @@ import {
|
|||||||
getCurrentInstance,
|
getCurrentInstance,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
|
|
||||||
import { mapJson } from "../../api/map";
|
import { mapJson } from "../../api/mock";
|
||||||
import greenCar from "/@/assets/green.png";
|
import greenCar from "/@/assets/green.png";
|
||||||
import { deviceDetection } from "../../utils/deviceDetection"
|
import { deviceDetection } from "../../utils/deviceDetection"
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer'
|
import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer'
|
||||||
import mapMock from '../mock/map'
|
import mapMock from '../mock/map'
|
||||||
|
import echartsMock from '../mock/echarts'
|
||||||
|
|
||||||
export const mockModules = [...mapMock]
|
export const mockModules = [...mapMock, ...echartsMock]
|
||||||
|
|
||||||
export function setupProdMockServer() {
|
export function setupProdMockServer() {
|
||||||
createProdMockServer(mockModules)
|
createProdMockServer(mockModules)
|
||||||
|
@ -12,6 +12,15 @@
|
|||||||
<flop v-if="!mobile" />
|
<flop v-if="!mobile" />
|
||||||
</div>
|
</div>
|
||||||
</el-affix>
|
</el-affix>
|
||||||
|
|
||||||
|
<!-- 图表 -->
|
||||||
|
<el-card class="box-card">
|
||||||
|
<el-skeleton style="height: 50vh" :rows="8" :loading="loading" animated>
|
||||||
|
<template #default>
|
||||||
|
<div id="brokenLine"></div>
|
||||||
|
</template>
|
||||||
|
</el-skeleton>
|
||||||
|
</el-card>
|
||||||
<!-- <a title="欢迎Star" href="https://github.com/xiaoxian521/CURD-TS" target="_blank">点击打开仓库地址</a> -->
|
<!-- <a title="欢迎Star" href="https://github.com/xiaoxian521/CURD-TS" target="_blank">点击打开仓库地址</a> -->
|
||||||
<!-- <CountTo prefix="$" :startVal="1" :endVal="200" /> -->
|
<!-- <CountTo prefix="$" :startVal="1" :endVal="200" /> -->
|
||||||
</div>
|
</div>
|
||||||
@ -20,9 +29,11 @@
|
|||||||
<script lang='ts'>
|
<script lang='ts'>
|
||||||
import flop from "../components/flop/index.vue";
|
import flop from "../components/flop/index.vue";
|
||||||
import CountTo from "../components/countTo/src/index.vue";
|
import CountTo from "../components/countTo/src/index.vue";
|
||||||
import { ref, unref, computed } from "vue";
|
import { ref, computed, onMounted, inject, nextTick } from "vue";
|
||||||
import { deviceDetection } from "../utils/deviceDetection";
|
import { deviceDetection } from "../utils/deviceDetection";
|
||||||
import echarts from "../echarts"
|
import { echartsJson } from "../api/mock";
|
||||||
|
|
||||||
|
let brokenLine: any = null; //折线图实例
|
||||||
export default {
|
export default {
|
||||||
name: "welcome",
|
name: "welcome",
|
||||||
components: {
|
components: {
|
||||||
@ -30,9 +41,17 @@ export default {
|
|||||||
CountTo,
|
CountTo,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
console.log('echarts===>', echarts)
|
|
||||||
let mobile = ref(deviceDetection());
|
let mobile = ref(deviceDetection());
|
||||||
let date: Date = new Date();
|
let date: Date = new Date();
|
||||||
|
let loading = ref(true);
|
||||||
|
let echarts = inject("echarts"); //引入
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
loading.value = !loading.value;
|
||||||
|
nextTick(()=>{
|
||||||
|
initbrokenLine();
|
||||||
|
})
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
let greetings = computed(() => {
|
let greetings = computed(() => {
|
||||||
if (date.getHours() >= 0 && date.getHours() < 12) {
|
if (date.getHours() >= 0 && date.getHours() < 12) {
|
||||||
@ -44,9 +63,131 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let initbrokenLine = (): any => {
|
||||||
|
// @ts-ignore
|
||||||
|
brokenLine = echarts.init(document.getElementById("brokenLine"));
|
||||||
|
brokenLine.clear(); //清除旧画布 重新渲染
|
||||||
|
|
||||||
|
echartsJson().then(({ info }) => {
|
||||||
|
brokenLine.setOption({
|
||||||
|
title: {
|
||||||
|
text: "上海 空气质量指数",
|
||||||
|
left: "1%",
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: "axis",
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
left: "5%",
|
||||||
|
right: "15%",
|
||||||
|
bottom: "10%",
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
data: info.map(function (item) {
|
||||||
|
return item[0];
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
yAxis: {},
|
||||||
|
toolbox: {
|
||||||
|
right: 10,
|
||||||
|
feature: {
|
||||||
|
dataZoom: {
|
||||||
|
yAxisIndex: "none",
|
||||||
|
},
|
||||||
|
restore: {},
|
||||||
|
saveAsImage: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dataZoom: [
|
||||||
|
{
|
||||||
|
startValue: "2014-06-01",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "inside",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
visualMap: {
|
||||||
|
top: 50,
|
||||||
|
right: 10,
|
||||||
|
pieces: [
|
||||||
|
{
|
||||||
|
gt: 0,
|
||||||
|
lte: 50,
|
||||||
|
color: "#93CE07",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gt: 50,
|
||||||
|
lte: 100,
|
||||||
|
color: "#FBDB0F",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gt: 100,
|
||||||
|
lte: 150,
|
||||||
|
color: "#FC7D02",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gt: 150,
|
||||||
|
lte: 200,
|
||||||
|
color: "#FD0100",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gt: 200,
|
||||||
|
lte: 300,
|
||||||
|
color: "#AA069F",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gt: 300,
|
||||||
|
color: "#AC3B2A",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
outOfRange: {
|
||||||
|
color: "#999",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: {
|
||||||
|
name: "上海 空气质量指数",
|
||||||
|
type: "line",
|
||||||
|
data: info.map(function (item) {
|
||||||
|
return item[1];
|
||||||
|
}),
|
||||||
|
markLine: {
|
||||||
|
silent: true,
|
||||||
|
lineStyle: {
|
||||||
|
color: "#333",
|
||||||
|
},
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
yAxis: 50,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
yAxis: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
yAxis: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
yAxis: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
yAxis: 300,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
window.addEventListener("resize", () => {
|
||||||
|
brokenLine.resize();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
greetings,
|
greetings,
|
||||||
mobile,
|
mobile,
|
||||||
|
loading,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -55,6 +196,7 @@ export default {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.welcome {
|
.welcome {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
margin-top: 1px;
|
margin-top: 1px;
|
||||||
.top-content {
|
.top-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -75,5 +217,14 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.box-card {
|
||||||
|
width: 80vw;
|
||||||
|
margin: 10px auto;
|
||||||
|
position: relative;
|
||||||
|
#brokenLine {
|
||||||
|
width: 100%;
|
||||||
|
height: 50vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user