Merge branch 'vue-i18n' of https://github.com/zouzhibin/vue-admin-perfect into ghpages
This commit is contained in:
commit
1c11242326
|
|
@ -3,6 +3,10 @@ vue-element-perfect 是一个后台前端解决方案,它使用了最新的前
|
|||
|
||||
### 在线预览
|
||||
- link —— [http://182.61.5.190:8889/ ](http://182.61.5.190:8889/)
|
||||
- gitee国内访问地址:https://yuanzbz.gitee.io/vue-admin-perfect/#/home
|
||||
- github site : https://zouzhibin.github.io/vue-admin-perfect/
|
||||
|
||||
|
||||
|
||||
### git仓库(欢迎 Star⭐)
|
||||
- Gitee: —— [https://gitee.com/yuanzbz/vue-admin-perfect](https://gitee.com/yuanzbz/vue-admin-perfect)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@
|
|||
"codemirror": "^5.65.9",
|
||||
"core-js": "^3.6.5",
|
||||
"dayjs": "^1.11.4",
|
||||
"default-passive-events": "^2.0.0",
|
||||
"echarts": "^5.3.1",
|
||||
"echarts-liquidfill": "^3.1.0",
|
||||
"element-plus": "^2.2.21",
|
||||
|
|
@ -38,7 +37,6 @@
|
|||
"path-browserify": "^1.0.1",
|
||||
"path-to-regexp": "^6.2.0",
|
||||
"pinia": "^2.0.21",
|
||||
"pinia-persistedstate-plugin": "^0.1.0",
|
||||
"pinia-plugin-persistedstate": "^2.1.1",
|
||||
"print-js": "^1.6.0",
|
||||
"sass": "^1.54.0",
|
||||
|
|
|
|||
|
|
@ -1,162 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import echarts from 'echarts'
|
||||
import resize from './mixins/resize'
|
||||
|
||||
export default {
|
||||
mixins: [resize],
|
||||
props: {
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initChart()
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.chart = echarts.init(document.getElementById(this.id))
|
||||
|
||||
const xAxisData = []
|
||||
const data = []
|
||||
const data2 = []
|
||||
for (let i = 0; i < 50; i++) {
|
||||
xAxisData.push(i)
|
||||
data.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5)
|
||||
data2.push((Math.sin(i / 5) * (i / 5 + 10) + i / 6) * 3)
|
||||
}
|
||||
this.chart.setOption({
|
||||
backgroundColor: '#08263a',
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '5%',
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
show: false,
|
||||
data: xAxisData,
|
||||
},
|
||||
{
|
||||
show: false,
|
||||
data: xAxisData,
|
||||
},
|
||||
],
|
||||
visualMap: {
|
||||
show: false,
|
||||
min: 0,
|
||||
max: 50,
|
||||
dimension: 0,
|
||||
inRange: {
|
||||
color: ['#4a657a', '#308e92', '#b1cfa5', '#f5d69f', '#f5898b', '#ef5055'],
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
textStyle: {
|
||||
color: '#4a657a',
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#08263f',
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: 'back',
|
||||
type: 'bar',
|
||||
data: data2,
|
||||
z: 1,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
opacity: 0.4,
|
||||
barBorderRadius: 5,
|
||||
shadowBlur: 3,
|
||||
shadowColor: '#111',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Simulate Shadow',
|
||||
type: 'line',
|
||||
data,
|
||||
z: 2,
|
||||
showSymbol: false,
|
||||
animationDelay: 0,
|
||||
animationEasing: 'linear',
|
||||
animationDuration: 1200,
|
||||
lineStyle: {
|
||||
normal: {
|
||||
color: 'transparent',
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
normal: {
|
||||
color: '#08263a',
|
||||
shadowBlur: 50,
|
||||
shadowColor: '#000',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'front',
|
||||
type: 'bar',
|
||||
data,
|
||||
xAxisIndex: 1,
|
||||
z: 3,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
barBorderRadius: 5,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
animationEasing: 'elasticOut',
|
||||
animationEasingUpdate: 'elasticOut',
|
||||
animationDelay(idx) {
|
||||
return idx * 20
|
||||
},
|
||||
animationDelayUpdate(idx) {
|
||||
return idx * 20
|
||||
},
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,274 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { computed, nextTick, onMounted, ref, watch } from 'vue'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const isCollapse = computed(() => {
|
||||
return store.state.app.isCollapse
|
||||
})
|
||||
|
||||
let chart: EChartsType
|
||||
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption({
|
||||
backgroundColor: '#394056',
|
||||
title: {
|
||||
top: 20,
|
||||
text: 'Requests',
|
||||
textStyle: {
|
||||
fontWeight: 'normal',
|
||||
fontSize: 16,
|
||||
color: '#F1F1F3',
|
||||
},
|
||||
left: '1%',
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
color: '#57617B',
|
||||
},
|
||||
},
|
||||
},
|
||||
legend: {
|
||||
top: 20,
|
||||
icon: 'rect',
|
||||
itemWidth: 14,
|
||||
itemHeight: 5,
|
||||
itemGap: 13,
|
||||
data: ['CMCC', 'CTCC', 'CUCC'],
|
||||
right: '4%',
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: '#F1F1F3',
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
top: 100,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '2%',
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
boundaryGap: false,
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#57617B',
|
||||
},
|
||||
},
|
||||
data: [
|
||||
'13:00',
|
||||
'13:05',
|
||||
'13:10',
|
||||
'13:15',
|
||||
'13:20',
|
||||
'13:25',
|
||||
'13:30',
|
||||
'13:35',
|
||||
'13:40',
|
||||
'13:45',
|
||||
'13:50',
|
||||
'13:55',
|
||||
],
|
||||
},
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
name: '(%)',
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#57617B',
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
margin: 10,
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: '#57617B',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: 'CMCC',
|
||||
type: 'line',
|
||||
smooth: true,
|
||||
symbol: 'circle',
|
||||
symbolSize: 5,
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
normal: {
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
[
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(137, 189, 27, 0.3)',
|
||||
},
|
||||
{
|
||||
offset: 0.8,
|
||||
color: 'rgba(137, 189, 27, 0)',
|
||||
},
|
||||
],
|
||||
false,
|
||||
),
|
||||
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
||||
shadowBlur: 10,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgb(137,189,27)',
|
||||
borderColor: 'rgba(137,189,2,0.27)',
|
||||
borderWidth: 12,
|
||||
},
|
||||
},
|
||||
data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122],
|
||||
},
|
||||
{
|
||||
name: 'CTCC',
|
||||
type: 'line',
|
||||
smooth: true,
|
||||
symbol: 'circle',
|
||||
symbolSize: 5,
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
normal: {
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
[
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(0, 136, 212, 0.3)',
|
||||
},
|
||||
{
|
||||
offset: 0.8,
|
||||
color: 'rgba(0, 136, 212, 0)',
|
||||
},
|
||||
],
|
||||
false,
|
||||
),
|
||||
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
||||
shadowBlur: 10,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgb(0,136,212)',
|
||||
borderColor: 'rgba(0,136,212,0.2)',
|
||||
borderWidth: 12,
|
||||
},
|
||||
},
|
||||
data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150],
|
||||
},
|
||||
{
|
||||
name: 'CUCC',
|
||||
type: 'line',
|
||||
smooth: true,
|
||||
symbol: 'circle',
|
||||
symbolSize: 5,
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
normal: {
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
[
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(219, 50, 51, 0.3)',
|
||||
},
|
||||
{
|
||||
offset: 0.8,
|
||||
color: 'rgba(219, 50, 51, 0)',
|
||||
},
|
||||
],
|
||||
false,
|
||||
),
|
||||
shadowColor: 'rgba(0, 0, 0, 0.1)',
|
||||
shadowBlur: 10,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgb(219,50,51)',
|
||||
borderColor: 'rgba(219,50,51,0.2)',
|
||||
borderWidth: 12,
|
||||
},
|
||||
},
|
||||
data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122],
|
||||
},
|
||||
],
|
||||
})
|
||||
return chart
|
||||
}
|
||||
|
||||
watch(isCollapse, () => {
|
||||
setTimeout(() => {
|
||||
chart && chart.resize()
|
||||
}, 300)
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import echarts from 'echarts'
|
||||
import resize from './mixins/resize'
|
||||
|
||||
export default {
|
||||
mixins: [resize],
|
||||
props: {
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initChart()
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.chart = echarts.init(document.getElementById(this.id))
|
||||
const xData = (function () {
|
||||
const data = []
|
||||
for (let i = 1; i < 13; i++) {
|
||||
data.push(i + 'month')
|
||||
}
|
||||
return data
|
||||
})()
|
||||
this.chart.setOption({
|
||||
backgroundColor: '#344b58',
|
||||
title: {
|
||||
text: 'statistics',
|
||||
x: '20',
|
||||
top: '20',
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: '22',
|
||||
},
|
||||
subtextStyle: {
|
||||
color: '#90979c',
|
||||
fontSize: '16',
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
left: '5%',
|
||||
right: '5%',
|
||||
borderWidth: 0,
|
||||
top: 150,
|
||||
bottom: 95,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
},
|
||||
legend: {
|
||||
x: '5%',
|
||||
top: '10%',
|
||||
textStyle: {
|
||||
color: '#90979c',
|
||||
},
|
||||
data: ['female', 'male', 'average'],
|
||||
},
|
||||
calculable: true,
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#90979c',
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
splitArea: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
interval: 0,
|
||||
},
|
||||
data: xData,
|
||||
},
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#90979c',
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
interval: 0,
|
||||
},
|
||||
splitArea: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
{
|
||||
show: true,
|
||||
height: 30,
|
||||
xAxisIndex: [0],
|
||||
bottom: 30,
|
||||
start: 10,
|
||||
end: 80,
|
||||
handleIcon:
|
||||
'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
|
||||
handleSize: '110%',
|
||||
handleStyle: {
|
||||
color: '#d3dee5',
|
||||
},
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
borderColor: '#90979c',
|
||||
},
|
||||
{
|
||||
type: 'inside',
|
||||
show: true,
|
||||
height: 15,
|
||||
start: 1,
|
||||
end: 35,
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: 'female',
|
||||
type: 'bar',
|
||||
stack: 'total',
|
||||
barMaxWidth: 35,
|
||||
barGap: '10%',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(255,144,128,1)',
|
||||
label: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
position: 'insideTop',
|
||||
formatter(p) {
|
||||
return p.value > 0 ? p.value : ''
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [709, 1917, 2455, 2610, 1719, 1433, 1544, 3285, 5208, 3372, 2484, 4078],
|
||||
},
|
||||
|
||||
{
|
||||
name: 'male',
|
||||
type: 'bar',
|
||||
stack: 'total',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(0,191,183,1)',
|
||||
barBorderRadius: 0,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
formatter(p) {
|
||||
return p.value > 0 ? p.value : ''
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [327, 1776, 507, 1200, 800, 482, 204, 1390, 1001, 951, 381, 220],
|
||||
},
|
||||
{
|
||||
name: 'average',
|
||||
type: 'line',
|
||||
stack: 'total',
|
||||
symbolSize: 10,
|
||||
symbol: 'circle',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(252,230,48,1)',
|
||||
barBorderRadius: 0,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
formatter(p) {
|
||||
return p.value > 0 ? p.value : ''
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [1036, 3693, 2962, 3810, 2519, 1915, 1748, 4675, 6209, 4323, 2865, 4298],
|
||||
},
|
||||
],
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
|
||||
|
||||
<template>
|
||||
<div class="echarts" ref="echarts"></div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from "echarts";
|
||||
|
||||
export default {
|
||||
data(){
|
||||
return{
|
||||
chart:null
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
initEcharts(){
|
||||
let option = {
|
||||
series: [
|
||||
{
|
||||
type: 'gauge',
|
||||
startAngle: 180,
|
||||
endAngle: 0,
|
||||
center: ['50%', '80%'],
|
||||
radius: '100%',
|
||||
min: 0,
|
||||
max: 1,
|
||||
z: 5,
|
||||
splitNumber: 12,
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 6,
|
||||
color: [
|
||||
[0.12, "#d92d4d"],
|
||||
[0.35, "#eb8349"],
|
||||
[0.63, "#e6e462"],
|
||||
[0.8, "#74c7da"],
|
||||
[1, "#67b45a"],
|
||||
]
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
splitNumber: 13,
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: "auto",
|
||||
width: 2,
|
||||
},
|
||||
length: 17,
|
||||
},
|
||||
splitLine: {
|
||||
length: 25,
|
||||
lineStyle: {
|
||||
color: 'auto',
|
||||
width: 8
|
||||
}
|
||||
},
|
||||
axisLabel: {
|
||||
color: '#a0a7b8',
|
||||
fontSize: 20,
|
||||
distance: -60,
|
||||
rotate: 'tangential',
|
||||
formatter: function (value) {
|
||||
var value = value.toFixed(2);
|
||||
if (value == 0.0) {
|
||||
return "危";
|
||||
} else if (value == 0.25) {
|
||||
return "差";
|
||||
} else if (value == 0.5) {
|
||||
return "中";
|
||||
} else if (value == 0.75) {
|
||||
return "良";
|
||||
} else if (value == 1.0) {
|
||||
return "优";
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
},
|
||||
title: {
|
||||
offsetCenter: [0, '-10%'],
|
||||
fontSize: 20
|
||||
},
|
||||
anchor: {
|
||||
show: true,
|
||||
showAbove: true,
|
||||
size: 25,
|
||||
itemStyle: {
|
||||
borderWidth: 10
|
||||
}
|
||||
},
|
||||
detail: {
|
||||
fontSize: 30,
|
||||
offsetCenter: [0, '-25%'],
|
||||
valueAnimation: true,
|
||||
formatter: function (value) {
|
||||
return Math.round(value * 100);
|
||||
},
|
||||
color: 'auto'
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 0.7,
|
||||
name: 'Grade Rating'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
this.chart = echarts.init(this.$refs.echarts)
|
||||
this.chart.setOption(option)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initEcharts()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.echarts {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,11 +1,12 @@
|
|||
<template>
|
||||
<div class="item-charts">
|
||||
<bar-charts width="100%" height="100%" :config="lineConfig" />
|
||||
</div>
|
||||
<div class="echarts" ref="chartsRef" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import BarCharts from './components/bar.vue'
|
||||
import { reactive } from 'vue'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted, ref,reactive } from 'vue'
|
||||
const chartsRef = ref<HTMLElement | null>()
|
||||
const data = [154, 230, 224, 218, 135, 147, 260]
|
||||
const color = ['#fa796f', '#54c1fb', '#ca6cd4', '#59dcc1', '#09a4ea', '#e98f4d', '#ea8e49']
|
||||
const dataOptions = []
|
||||
|
|
@ -20,7 +21,8 @@
|
|||
dataOptions.push(obj)
|
||||
})
|
||||
|
||||
const lineConfig = reactive({
|
||||
|
||||
const options = {
|
||||
color,
|
||||
grid: {
|
||||
top: '10%',
|
||||
|
|
@ -44,6 +46,7 @@
|
|||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
// 设置坐标轴的 文字样式
|
||||
axisLabel: {
|
||||
color: '#bbdaff',
|
||||
|
|
@ -61,6 +64,7 @@
|
|||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
|
|
@ -70,14 +74,12 @@
|
|||
color: '#2d5baf',
|
||||
},
|
||||
},
|
||||
type: 'category',
|
||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
axisLabel: {
|
||||
// 设置坐标轴的 文字样式
|
||||
color: '#bbdaff',
|
||||
margin: 20, // 刻度标签与轴线之间的距离。
|
||||
},
|
||||
|
||||
axisTick: {
|
||||
// 取消坐标轴刻度线
|
||||
show: false,
|
||||
|
|
@ -93,10 +95,24 @@
|
|||
},
|
||||
},
|
||||
],
|
||||
|
||||
}
|
||||
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
const chart = echarts.init(chartsRef.value)
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.item-charts {
|
||||
.echarts {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
<template>
|
||||
<div class="echarts" ref="chartsRef" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import BarCharts from './components/bar.vue'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted, ref,reactive } from 'vue'
|
||||
const chartsRef = ref<HTMLElement | null>()
|
||||
|
||||
|
||||
const options = {
|
||||
grid: {
|
||||
top: '10%',
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '10%',
|
||||
containLabel: true,
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
backgroundColor: 'rgba(0,0,0,0.7)',
|
||||
borderWidth: 0,
|
||||
borderColor: 'rgba(0,0,0,0.7)',
|
||||
formatter: (name, val) => {
|
||||
const tipHtml = `
|
||||
<div class="m-info" style=" opacity: 0.95;font-size: 12px; color: white;" >
|
||||
<div class="title" ></div>
|
||||
<div class="title" >完成占比${name[0].data}</div>
|
||||
</div>`
|
||||
return tipHtml
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
// 设置坐标轴的 文字样式
|
||||
axisLabel: {
|
||||
color: '#bbdaff',
|
||||
margin: 20, // 刻度标签与轴线之间的距离。
|
||||
},
|
||||
// 坐标轴轴线相关设置。
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: '#2d5baf',
|
||||
},
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
// 坐标轴轴线相关设置。
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#2d5baf',
|
||||
},
|
||||
},
|
||||
type: 'category',
|
||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
axisLabel: {
|
||||
// 设置坐标轴的 文字样式
|
||||
color: '#bbdaff',
|
||||
margin: 20, // 刻度标签与轴线之间的距离。
|
||||
},
|
||||
boundaryGap: false, // 设置坐标轴两边的留白 ,从刻度原点开始,
|
||||
axisTick: {
|
||||
// 取消坐标轴刻度线
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: [154, 230, 224, 218, 135, 147, 260],
|
||||
type: 'line',
|
||||
// smooth:false, //关键点,为true是不支持虚线的,实线就用true
|
||||
symbolSize: 12, // 拐点圆的大小
|
||||
symbol: 'circle',
|
||||
markLine: {
|
||||
silent: true,
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#920783', // 设置 symbol的颜色
|
||||
lineStyle: {
|
||||
width: 3,
|
||||
color: '#920783',
|
||||
type: 'solid', // 'dotted'虚线 'solid'实线
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
}
|
||||
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
const chart = echarts.init(chartsRef.value)
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.echarts {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -2,11 +2,11 @@
|
|||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { geoJson } from './get.js'
|
||||
import { geoJson } from './map.js'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
import { cityIconData } from '../js/data.js'
|
||||
import { cityIconData } from './data.js'
|
||||
import logo from '@/assets/logo.png'
|
||||
const props = defineProps({
|
||||
className: {
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// 自定义name的壳的集合
|
||||
import {h} from "vue";
|
||||
|
||||
const wrapperMap = new Map()
|
||||
|
||||
export const useWrapComponents = (Component,route)=>{
|
||||
let wrapper
|
||||
if (Component) {
|
||||
const wrapperName = route.name
|
||||
if (wrapperMap.has(wrapperName)) {
|
||||
wrapper = wrapperMap.get(wrapperName)
|
||||
} else {
|
||||
wrapper = {
|
||||
name: wrapperName,
|
||||
render() {
|
||||
return h("div", {className: "app-main-inner"}, Component)
|
||||
},
|
||||
}
|
||||
wrapperMap.set(wrapperName, wrapper)
|
||||
}
|
||||
return h(wrapper)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<template>
|
||||
<template>
|
||||
<!--纵向布局-->
|
||||
<Height/>
|
||||
<div
|
||||
|
|
@ -15,7 +15,6 @@
|
|||
:unique-opened="SettingStore.themeConfig.uniqueOpened"
|
||||
:collapse-transition="false"
|
||||
class="menu-horizontal"
|
||||
:collapse="isCollapse"
|
||||
>
|
||||
<SubItem
|
||||
v-for="route in permission_routes"
|
||||
|
|
|
|||
|
|
@ -1,29 +1,24 @@
|
|||
<template>
|
||||
<div class="app-main" >
|
||||
<div class="app-main-inner">
|
||||
<router-view v-slot="{ Component, route }">
|
||||
<transition name="fade-slide" mode="out-in" appear>
|
||||
<keep-alive :include="cacheRoutes" v-if="isReload">
|
||||
<component :is="Component" :key="route.path" />
|
||||
</keep-alive>
|
||||
</transition>
|
||||
</router-view>
|
||||
</div>
|
||||
<router-view v-slot="{ Component, route }">
|
||||
<transition name="fade-slide" mode="out-in" appear>
|
||||
<keep-alive :include="cacheRoutes" v-if="isReload">
|
||||
<component :is="useWrapComponents(Component,route)" :key="route.path" />
|
||||
</keep-alive>
|
||||
</transition>
|
||||
</router-view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
|
||||
|
||||
import {useWrapComponents} from '@/hooks/useWrapComponents'
|
||||
import { computed, ref } from 'vue'
|
||||
import {useSettingStore} from "@/store/modules/setting"
|
||||
import {usePermissionStore} from "@/store/modules/permission"
|
||||
const SettingStore = useSettingStore()
|
||||
const PermissionStore = usePermissionStore()
|
||||
|
||||
const cacheRoutes = computed(() =>PermissionStore.getCacheRoutes())
|
||||
const cacheRoutes = computed(() =>PermissionStore.keepAliveRoutes)
|
||||
const isReload = computed(() => SettingStore.isReload)
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
@ -31,7 +26,6 @@
|
|||
flex: 1;
|
||||
display: flex;
|
||||
overflow-x: hidden;
|
||||
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
.app-main-inner{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
import router from './routers'
|
||||
import pinia from "./store";
|
||||
|
||||
// 权限路由
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import router from '@/router/index'
|
||||
import router from '@/routers/index'
|
||||
import NProgress from 'nprogress'
|
||||
import 'nprogress/nprogress.css'
|
||||
import {useUserStore} from "@/store/modules/user"
|
||||
|
|
@ -17,9 +17,12 @@ router.beforeEach(async(to, from, next) => {
|
|||
if(typeof(to.meta.title) === 'string'){
|
||||
document.title = to.meta.title ||'vue-admin-perfect'
|
||||
}
|
||||
|
||||
const UserStore = useUserStore();
|
||||
// 确定用户是否已登录过,存在Token
|
||||
const hasToken = UserStore.token
|
||||
|
||||
|
||||
if (hasToken) {
|
||||
if (to.path === '/login') {
|
||||
// 如果已登录,请重定向到主页
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import echartsRouter from './modules/echarts'
|
|||
import chatRouter from './modules/chat'
|
||||
import othersRouter from './modules/other'
|
||||
import externalLink from './modules/externalLink'
|
||||
import formRouter from './modules/from'
|
||||
import formRouter from './modules/form'
|
||||
import functionPageRouter from './modules/functionPage'
|
||||
|
||||
|
||||
|
|
@ -19,18 +19,20 @@ const echartsRouter = [{
|
|||
name: 'migration',
|
||||
meta: { title: '迁徙图', roles:['other'] , icon: 'MenuIcon' }
|
||||
},
|
||||
{
|
||||
path: 'simple',
|
||||
component: () => import('@/views/echarts/simple.vue'),
|
||||
name: 'echarts-simple',
|
||||
meta: { title: '简单图表', roles:['other'] , icon: 'MenuIcon'}
|
||||
},
|
||||
|
||||
{
|
||||
path: 'bar',
|
||||
component: () => import('@/views/echarts/barEcharts/index.vue'),
|
||||
name: 'bar',
|
||||
meta: { title: '柱状图', roles:['other'] , icon: 'MenuIcon'}
|
||||
},
|
||||
{
|
||||
path: 'graph',
|
||||
component: () => import('@/views/echarts/graphEcharts/index.vue'),
|
||||
name: 'graph',
|
||||
meta: { title: '雷达图', roles:['other'] , icon: 'MenuIcon'}
|
||||
},
|
||||
|
||||
{
|
||||
path: 'pie',
|
||||
component: () => import('@/views/echarts/pieEcharts/index.vue'),
|
||||
|
|
@ -38,11 +40,12 @@ const echartsRouter = [{
|
|||
meta: { title: '饼图', roles:['other'] , icon: 'MenuIcon'}
|
||||
},
|
||||
{
|
||||
path: 'graph',
|
||||
component: () => import('@/views/echarts/graphEcharts/index.vue'),
|
||||
name: 'graph',
|
||||
meta: { title: '雷达图', roles:['other'] , icon: 'MenuIcon'}
|
||||
path: 'simple',
|
||||
component: () => import('@/views/echarts/simple/index.vue'),
|
||||
name: 'echarts-simple',
|
||||
meta: { title: '简单图表', roles:['other'] , icon: 'MenuIcon'}
|
||||
},
|
||||
|
||||
]
|
||||
}]
|
||||
|
||||
|
|
@ -17,19 +17,19 @@ const formRouter = [{
|
|||
{
|
||||
path: 'validateForm',
|
||||
component: () => import('@/views/form/validateForm/index.vue'),
|
||||
name: 'validate-form',
|
||||
name: 'validateForm',
|
||||
meta: { title: '校验 Form', keepAlive: true , icon: 'MenuIcon'}
|
||||
},
|
||||
{
|
||||
path: 'advancedForm',
|
||||
component: () => import('@/views/form/advancedForm/index.vue'),
|
||||
name: 'advanced-form',
|
||||
meta: { title: '收缩 Form', keepAlive: true , icon: 'MenuIcon'}
|
||||
name: 'advancedForm',
|
||||
meta: { title: '收缩 Form', icon: 'MenuIcon'}
|
||||
},
|
||||
{
|
||||
path: 'appendForm',
|
||||
component: () => import('@/views/form/appendForm/index.vue'),
|
||||
name: 'append-form',
|
||||
name: 'appendForm',
|
||||
meta: { title: '增删 Form', keepAlive: true , icon: 'MenuIcon'}
|
||||
},
|
||||
]
|
||||
|
|
@ -70,7 +70,7 @@ const othersRouter = [{
|
|||
path: 'svgIcon',
|
||||
component: () => import('@/views/other/svgIcon/index.vue'),
|
||||
name: 'svgIcon',
|
||||
meta: { title: 'svg图标', icon: 'MenuIcon' }
|
||||
meta: { title: 'svg 图标', icon: 'MenuIcon' }
|
||||
},
|
||||
{
|
||||
path: 'iconfont',
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import {defineStore} from 'pinia'
|
||||
import { asyncRoutes, constantRoutes,routerArray,notFoundRouter } from '@/router/index'
|
||||
import { asyncRoutes, constantRoutes,routerArray,notFoundRouter } from '@/routers/index'
|
||||
import {hasPermission,filterAsyncRoutes} from "@/utils/routers"
|
||||
import {filterKeepAlive} from "../../utils/routers";
|
||||
export const usePermissionStore = defineStore({
|
||||
|
|
@ -17,6 +17,9 @@ export const usePermissionStore = defineStore({
|
|||
getters: {
|
||||
permission_routes:state=> {
|
||||
return state.routes
|
||||
},
|
||||
keepAliveRoutes: state=>{
|
||||
return filterKeepAlive(asyncRoutes)
|
||||
}
|
||||
},
|
||||
// 可以同步 也可以异步
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import {defineStore} from 'pinia'
|
||||
import router from "@/router/index";
|
||||
import router from "@/routers/index";
|
||||
|
||||
export const useTagsViewStore = defineStore({
|
||||
// id: 必须的,在所有 Store 中唯一
|
||||
|
|
|
|||
|
|
@ -55,9 +55,9 @@
|
|||
import {onBeforeUnmount, onMounted, ref} from 'vue'
|
||||
import FullScreenContainer from './components/full-screen-container.vue'
|
||||
import CountTo from '@/components/CountTo/index.vue'
|
||||
import LineCharts from '@/views/echarts/components/complex/line/index.vue'
|
||||
import BarCharts from '@/views/echarts/components/complex/bar/index.vue'
|
||||
import MigrationCharts from '@/views/echarts/components/migration/index.vue'
|
||||
import LineCharts from '@/components/DataScreen/lineEcharts/index.vue'
|
||||
import BarCharts from '@/components/DataScreen/barEcharts/index.vue'
|
||||
import MigrationCharts from '@/components/DataScreen/migrationEcharts/index.vue'
|
||||
import MultilineCharts from '@/components/DataScreen/Multiline/index'
|
||||
import PieCharts from '@/components/DataScreen/Pie/index'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,217 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import 'echarts-liquidfill/src/liquidFill.js'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
legend: {
|
||||
data: [
|
||||
'3-11岁任务数',
|
||||
'3-11岁全程接种量',
|
||||
'60岁任务数',
|
||||
'60岁全程接种量',
|
||||
'80岁任务数',
|
||||
'80岁全程接种量',
|
||||
'完成率',
|
||||
],
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['街道1', '街道2', '街道3', '街道4', '街道5', '街道6', '街道7'],
|
||||
},
|
||||
yAxis: [
|
||||
{ type: 'value' },
|
||||
{
|
||||
type: 'value',
|
||||
name: '%',
|
||||
// min: 0,
|
||||
// max: 100,
|
||||
nameTextStyle: {
|
||||
color: '#ccc',
|
||||
padding: [0, 0, 10, -30],
|
||||
},
|
||||
splitNumber: 5,
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
width: 1,
|
||||
// 使用深浅的间隔色
|
||||
color: ['#566471', '#566471'],
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
// tooltip: {
|
||||
// trigger: 'axis',
|
||||
|
||||
// },
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow',
|
||||
},
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
align: 'left',
|
||||
fontSize: 14,
|
||||
},
|
||||
axisLine: {
|
||||
//x坐标轴轴线
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//x坐标轴轴线样式
|
||||
color: '#000', //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
|
||||
},
|
||||
},
|
||||
|
||||
backgroundColor: 'rgba(0,0,0,0.8)',
|
||||
formatter: function (params) {
|
||||
console.log(params)
|
||||
let str = params[0].name + '<br />'
|
||||
console.log(str)
|
||||
params.forEach((item) => {
|
||||
console.log(item.seriesName)
|
||||
if (item.value) {
|
||||
if (item.seriesName.indexOf('岁全程接种量') != -1) {
|
||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${
|
||||
item.color
|
||||
}
|
||||
"></span>
|
||||
${item.seriesName}
|
||||
:
|
||||
${item.value}人 <br/>
|
||||
全程完成率
|
||||
: ${item.value / 100}%
|
||||
<br/><br/>`
|
||||
} else if (item.seriesName.indexOf('岁任务数') != -1) {
|
||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||
"></span>
|
||||
${item.seriesName}
|
||||
:
|
||||
${item.value}人
|
||||
<br/>`
|
||||
} else {
|
||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||
"></span>
|
||||
${item.seriesName}
|
||||
:
|
||||
${item.value}%
|
||||
<br/>`
|
||||
}
|
||||
}
|
||||
})
|
||||
return str
|
||||
},
|
||||
},
|
||||
|
||||
series: [
|
||||
{
|
||||
name: '3-11岁任务数',
|
||||
data: [150, 230, 224, 218, 135, 147, 260],
|
||||
stack: 'BB',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '3-11岁全程接种量',
|
||||
data: [150, 230, 224, 218, 135, 147, 260],
|
||||
stack: 'BB',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '60岁任务数',
|
||||
data: [150, 230, 224, 218, 135, 147, 260],
|
||||
stack: 'AA',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '60岁全程接种量',
|
||||
data: [880, 30, 124, 118, 35, 47, 160],
|
||||
stack: 'AA',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '80岁任务数',
|
||||
data: [660, 30, 124, 118, 35, 47, 160],
|
||||
stack: 'Ad',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '80岁全程接种量',
|
||||
data: [880, 30, 124, 118, 35, 47, 160],
|
||||
stack: 'Ad',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '完成率',
|
||||
data: [50, 130, 124, 18, 35, 47, 160],
|
||||
yAxisIndex: 1,
|
||||
type: 'line',
|
||||
markLine: {
|
||||
symbol: 'none',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
lineStyle: {
|
||||
type: 'dotted',
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [{ type: 'average', name: 'Avg' + '%' }],
|
||||
},
|
||||
// symbol: 'none',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
lineStyle: {
|
||||
width: 2,
|
||||
type: 'solid', //'dotted'虚线 'solid'实线
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" ref="chartsRef" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted, ref } from 'vue'
|
||||
const chartsRef = ref<HTMLElement | null>()
|
||||
|
||||
const props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
xAxisData: {
|
||||
type: Array,
|
||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
seriesData: {
|
||||
type: Array,
|
||||
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
grid: {
|
||||
top: 10,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '2%',
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: props.xAxisData,
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: props.seriesData,
|
||||
type: 'bar',
|
||||
},
|
||||
],
|
||||
...props.config,
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
const chart = echarts.init(chartsRef.value)
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,77 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" ref="chartsRef" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted, ref } from 'vue'
|
||||
const chartsRef = ref<HTMLElement | null>()
|
||||
|
||||
const props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
xAxisData: {
|
||||
type: Array,
|
||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
seriesData: {
|
||||
type: Array,
|
||||
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
grid: {
|
||||
top: 10,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '2%',
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: props.xAxisData,
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: props.seriesData,
|
||||
type: 'line',
|
||||
},
|
||||
],
|
||||
...props.config,
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
const chart = echarts.init(chartsRef.value)
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
<template>
|
||||
<div class="item-charts">
|
||||
<line-charts width="100%" height="100%" :config="lineConfig" />
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import LineCharts from './components/line.vue'
|
||||
import { reactive } from 'vue'
|
||||
|
||||
const lineConfig = reactive({
|
||||
grid: {
|
||||
top: '10%',
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '10%',
|
||||
containLabel: true,
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
backgroundColor: 'rgba(0,0,0,0.7)',
|
||||
borderWidth: 0,
|
||||
borderColor: 'rgba(0,0,0,0.7)',
|
||||
formatter: (name, val) => {
|
||||
const tipHtml = `
|
||||
<div class="m-info" style=" opacity: 0.95;font-size: 12px; color: white;" >
|
||||
<div class="title" ></div>
|
||||
<div class="title" >完成占比${name[0].data}</div>
|
||||
</div>`
|
||||
return tipHtml
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
// 设置坐标轴的 文字样式
|
||||
axisLabel: {
|
||||
color: '#bbdaff',
|
||||
margin: 20, // 刻度标签与轴线之间的距离。
|
||||
},
|
||||
// 坐标轴轴线相关设置。
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: '#2d5baf',
|
||||
},
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
// 坐标轴轴线相关设置。
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#2d5baf',
|
||||
},
|
||||
},
|
||||
type: 'category',
|
||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
axisLabel: {
|
||||
// 设置坐标轴的 文字样式
|
||||
color: '#bbdaff',
|
||||
margin: 20, // 刻度标签与轴线之间的距离。
|
||||
},
|
||||
boundaryGap: false, // 设置坐标轴两边的留白 ,从刻度原点开始,
|
||||
axisTick: {
|
||||
// 取消坐标轴刻度线
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: [154, 230, 224, 218, 135, 147, 260],
|
||||
type: 'line',
|
||||
// smooth:false, //关键点,为true是不支持虚线的,实线就用true
|
||||
symbolSize: 12, // 拐点圆的大小
|
||||
symbol: 'circle',
|
||||
markLine: {
|
||||
silent: true,
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#920783', // 设置 symbol的颜色
|
||||
lineStyle: {
|
||||
width: 3,
|
||||
color: '#920783',
|
||||
type: 'solid', // 'dotted'虚线 'solid'实线
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.item-charts {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,105 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import 'echarts-liquidfill/src/liquidFill.js'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
grid: {
|
||||
top: 10,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '2%',
|
||||
containLabel: true,
|
||||
},
|
||||
backgroundColor: '#0F224C', //背景色
|
||||
series: [
|
||||
{
|
||||
type: 'liquidFill', //水位图
|
||||
radius: '80%', //显示比例
|
||||
center: ['50%', '50%'], //中心点
|
||||
amplitude: 20, //水波振幅
|
||||
data: [0.5, 0.5, 0.5], // data个数代表波浪数
|
||||
color: [
|
||||
{
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: '#446bf5',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: '#2ca3e2',
|
||||
},
|
||||
],
|
||||
globalCoord: false,
|
||||
},
|
||||
], //波浪颜色
|
||||
backgroundStyle: {
|
||||
borderWidth: 1, //外边框
|
||||
// borderColor: '#23cc72', //边框颜色
|
||||
color: 'RGBA(51, 66, 127, 0.7)', //边框内部填充部分颜色
|
||||
},
|
||||
label: {
|
||||
//标签设置
|
||||
position: ['50%', '45%'],
|
||||
formatter: '50%', //显示文本,
|
||||
textStyle: {
|
||||
fontSize: '52px', //文本字号,
|
||||
color: '#fff',
|
||||
},
|
||||
},
|
||||
outline: {
|
||||
// show: false
|
||||
borderDistance: 0,
|
||||
itemStyle: {
|
||||
borderWidth: 2,
|
||||
borderColor: '#112165',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,269 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const color = ['#3c90ff', '#fff225', '#24ffdf', '#ff9c3c', '#7536ff']
|
||||
const indicator = [
|
||||
{
|
||||
text: '文明村',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '卫生村',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '森林村庄',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '全面小康',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '景区村庄',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
]
|
||||
const Data = [80, 61, 70, 86, 77]
|
||||
function setData() {
|
||||
return [
|
||||
{
|
||||
value: Data,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
lineStyle: {
|
||||
color: '#4BFFFC',
|
||||
shadowColor: '#4BFFFC',
|
||||
shadowBlur: 5,
|
||||
},
|
||||
shadowColor: '#4BFFFC',
|
||||
shadowBlur: 5,
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
normal: {
|
||||
// 单项区域填充样式
|
||||
color: {
|
||||
type: 'radial',
|
||||
x: 0.5, //右
|
||||
y: 0.5, //下
|
||||
r: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 1,
|
||||
color: '#4BFFFC',
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(0,0,0,0)',
|
||||
},
|
||||
],
|
||||
globalCoord: false,
|
||||
},
|
||||
opacity: 0.8, // 区域透明度
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
function setgauge(i) {
|
||||
return {
|
||||
type: 'gauge',
|
||||
detail: false,
|
||||
splitNumber: 10, //刻度数量
|
||||
radius: '80%', //图表尺寸
|
||||
center: ['50%', '50%'],
|
||||
startAngle: 90 + 72 * i + 18, //开始刻度的角度
|
||||
endAngle: 90 + 72 * (i + 1) - 18, //结束刻度的角度
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#66ccff',
|
||||
width: 1,
|
||||
},
|
||||
length: 6,
|
||||
splitNumber: 1,
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
function setSpot() {
|
||||
var scatterData = []
|
||||
Data.map((o, i) => {
|
||||
scatterData.push({
|
||||
value: [o, i],
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: color[i],
|
||||
borderColor: '#fff',
|
||||
borderWidth: 1,
|
||||
shadowColor: color[i],
|
||||
shadowBlur: 8,
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
return scatterData
|
||||
}
|
||||
|
||||
const options = {
|
||||
backgroundColor: '#0E1327',
|
||||
polar: {
|
||||
center: ['50%', '50%'],
|
||||
radius: '60%',
|
||||
},
|
||||
radar: {
|
||||
shape: 'circle',
|
||||
center: ['50%', '50%'],
|
||||
radius: '60%',
|
||||
indicator: indicator,
|
||||
axisName: {
|
||||
color: '#b7e9fd',
|
||||
fontSize: 13,
|
||||
padding: -20,
|
||||
},
|
||||
nameGap: 45,
|
||||
splitNumber: 4,
|
||||
splitArea: {
|
||||
// 坐标轴在 grid 区域中的分隔区域,默认不显示。
|
||||
show: true,
|
||||
areaStyle: {
|
||||
// 分隔区域的样式设置。
|
||||
color: ['rgba(27, 50, 66, 0.4)'],
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
//指向外圈文本的分隔线样式
|
||||
lineStyle: {
|
||||
color: '#5aa3d0',
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: 'rgba(99,192,251,0.2)', // 分隔线颜色
|
||||
width: 2, // 分隔线线宽
|
||||
},
|
||||
},
|
||||
},
|
||||
angleAxis: {
|
||||
type: 'category',
|
||||
data: name,
|
||||
minInterval: 1,
|
||||
boundaryGap: false,
|
||||
clockwise: false,
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
radiusAxis: {
|
||||
min: 0,
|
||||
max: 100,
|
||||
interval: 25,
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
//指向外圈文本的分隔线样式
|
||||
lineStyle: {
|
||||
color: '#5aa3d0',
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
fontSize: 12,
|
||||
color: '#5aa3d0',
|
||||
align: 'left',
|
||||
margin: -5,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
setgauge(0),
|
||||
setgauge(1),
|
||||
setgauge(2),
|
||||
setgauge(3),
|
||||
setgauge(4),
|
||||
{
|
||||
type: 'radar',
|
||||
silent: true,
|
||||
lineStyle: {
|
||||
color: '#66ffff',
|
||||
},
|
||||
areaStyle: {
|
||||
color: 'rgba(102, 255, 255, 0.31)',
|
||||
},
|
||||
data: setData(),
|
||||
},
|
||||
{
|
||||
type: 'scatter',
|
||||
coordinateSystem: 'polar',
|
||||
symbolSize: 20,
|
||||
data: setSpot(),
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,201 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0']
|
||||
let echartData = [
|
||||
{
|
||||
name: '设备1',
|
||||
value: '3720',
|
||||
},
|
||||
{
|
||||
name: '设备2',
|
||||
value: '2920',
|
||||
},
|
||||
{
|
||||
name: '设备3',
|
||||
value: '2200',
|
||||
},
|
||||
{
|
||||
name: '设备4',
|
||||
value: '1420',
|
||||
},
|
||||
]
|
||||
let formatNumber = function (num) {
|
||||
let reg = /(?=(\B)(\d{3})+$)/g
|
||||
return num.toString().replace(reg, ',')
|
||||
}
|
||||
|
||||
const options = {
|
||||
backgroundColor: '#364686',
|
||||
color: color,
|
||||
title: [
|
||||
{
|
||||
text: '设备数',
|
||||
x: 'center',
|
||||
top: '40%',
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 18,
|
||||
fontWeight: '100',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '60%',
|
||||
x: 'center',
|
||||
top: '50%',
|
||||
textStyle: {
|
||||
fontSize: 30,
|
||||
color: '#00f0ff',
|
||||
foontWeight: '500',
|
||||
},
|
||||
},
|
||||
],
|
||||
polar: {
|
||||
radius: ['44%', '50%'],
|
||||
center: ['50%', '50%'],
|
||||
},
|
||||
angleAxis: {
|
||||
max: 100,
|
||||
show: false,
|
||||
},
|
||||
radiusAxis: {
|
||||
type: 'category',
|
||||
show: true,
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
radius: ['55%', '67%'],
|
||||
center: ['50%', '50%'],
|
||||
data: echartData,
|
||||
hoverAnimation: false,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderColor: '#364684',
|
||||
borderWidth: 2,
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
normal: {
|
||||
length: 60,
|
||||
length2: 60,
|
||||
lineStyle: {
|
||||
color: '#e6e6e6',
|
||||
},
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
formatter: (params) => {
|
||||
return (
|
||||
'{icon|●}{name|' + params.name + '}\n{value|' + formatNumber(params.value) + '}'
|
||||
)
|
||||
},
|
||||
padding: [0, -70, 30, -70],
|
||||
rich: {
|
||||
icon: {
|
||||
fontSize: 14,
|
||||
align: 'left',
|
||||
padding: [4, 0, 0, 0],
|
||||
},
|
||||
name: {
|
||||
fontSize: 14,
|
||||
align: 'left',
|
||||
padding: [4, 0, 0, 0],
|
||||
color: '#fff',
|
||||
},
|
||||
value: {
|
||||
fontSize: 18,
|
||||
fontWeight: 'bold',
|
||||
color: '#fff',
|
||||
align: 'left',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
startAngle: 90,
|
||||
radius: '50%',
|
||||
hoverAnimation: false,
|
||||
center: ['50%', '50%'],
|
||||
itemStyle: {
|
||||
normal: {
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(50,171,241, 1)',
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(55,70,130, 0)',
|
||||
},
|
||||
]),
|
||||
// borderWidth: 1,
|
||||
// borderColor: '',
|
||||
shadowBlur: 10,
|
||||
// shadowColor: 'rgba(55,70,130, 1)'
|
||||
},
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 100,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,147 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
|
||||
const options = {
|
||||
title: [
|
||||
{
|
||||
text: '已完成',
|
||||
x: 'center',
|
||||
top: '52%',
|
||||
textStyle: {
|
||||
color: '#FFFFFF',
|
||||
fontSize: 16,
|
||||
fontWeight: '100',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '75%',
|
||||
x: 'center',
|
||||
y: 'center',
|
||||
textStyle: {
|
||||
fontSize: '12',
|
||||
color: '#FFFFFF',
|
||||
fontFamily: 'DINAlternate-Bold, DINAlternate',
|
||||
foontWeight: '600',
|
||||
},
|
||||
},
|
||||
],
|
||||
backgroundColor: '#111',
|
||||
polar: {
|
||||
radius: ['42%', '52%'],
|
||||
center: ['50%', '50%'],
|
||||
},
|
||||
angleAxis: {
|
||||
max: 100,
|
||||
show: false,
|
||||
},
|
||||
radiusAxis: {
|
||||
type: 'category',
|
||||
show: true,
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '',
|
||||
type: 'bar',
|
||||
roundCap: true,
|
||||
barWidth: 30,
|
||||
showBackground: true,
|
||||
backgroundStyle: {
|
||||
color: 'rgba(66, 66, 66, .3)',
|
||||
},
|
||||
data: [60],
|
||||
coordinateSystem: 'polar',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
|
||||
{
|
||||
offset: 0,
|
||||
color: '#16CEB9',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: '#6648FF',
|
||||
},
|
||||
]),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
startAngle: 80,
|
||||
radius: ['56%'],
|
||||
hoverAnimation: false,
|
||||
center: ['50%', '50%'],
|
||||
itemStyle: {
|
||||
color: 'rgba(66, 66, 66, .1)',
|
||||
borderWidth: 1,
|
||||
borderColor: '#5269EE',
|
||||
},
|
||||
data: [100],
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
startAngle: 80,
|
||||
radius: ['38%'],
|
||||
hoverAnimation: false,
|
||||
center: ['50%', '50%'],
|
||||
itemStyle: {
|
||||
color: 'rgba(66, 66, 66, .1)',
|
||||
borderWidth: 1,
|
||||
borderColor: '#5269EE',
|
||||
},
|
||||
data: [100],
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,437 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
var data = [],
|
||||
data2 = []
|
||||
var trafficWay = [
|
||||
{
|
||||
name: '病假',
|
||||
value: 20,
|
||||
},
|
||||
{
|
||||
name: '事假',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
name: '婚假',
|
||||
value: 30,
|
||||
},
|
||||
{
|
||||
name: '丧假',
|
||||
value: 40,
|
||||
},
|
||||
{
|
||||
name: '年休假',
|
||||
value: 40,
|
||||
},
|
||||
]
|
||||
var color = [
|
||||
'#2A8BFD',
|
||||
'#BAFF7F',
|
||||
'#00FAC1',
|
||||
'#00CAFF',
|
||||
'#FDE056',
|
||||
'#4ED33C',
|
||||
'#FF8A26',
|
||||
'#FF5252',
|
||||
'#9689FF',
|
||||
'#CB00FF',
|
||||
]
|
||||
for (var i = 0; i < trafficWay.length; i++) {
|
||||
data.push(
|
||||
{
|
||||
value: trafficWay[i].value,
|
||||
name: trafficWay[i].name,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderWidth: 8,
|
||||
shadowBlur: 20,
|
||||
borderRadius: 20,
|
||||
borderColor: color[i],
|
||||
shadowColor: color[i],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
name: '',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
color: 'rgba(0, 0, 0, 0)',
|
||||
borderColor: 'rgba(0, 0, 0, 0)',
|
||||
borderWidth: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
data2.push(
|
||||
{
|
||||
value: trafficWay[i].value,
|
||||
name: trafficWay[i].name,
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
name: '',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
color: 'rgba(0, 0, 0, 0)',
|
||||
borderColor: 'rgba(0, 0, 0, 0)',
|
||||
borderWidth: 0,
|
||||
opacity: 0.2,
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
let angle = 0 //角度,用来做简单的动画效果的
|
||||
|
||||
const option = {
|
||||
backgroundColor: '#061740',
|
||||
color: color,
|
||||
legend: {
|
||||
right: '10%',
|
||||
top: '10%',
|
||||
icon: 'rect',
|
||||
itemWidth: 15,
|
||||
itemHeight: 15,
|
||||
textStyle: {
|
||||
color: '#ffffff',
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
//外线1
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||
startAngle: ((0 + angle) * Math.PI) / 180,
|
||||
endAngle: ((90 + angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//内线1
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||
startAngle: ((180 + angle) * Math.PI) / 180,
|
||||
endAngle: ((270 + angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//外线2
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||
startAngle: ((270 + -angle) * Math.PI) / 180,
|
||||
endAngle: ((40 + -angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//外线2
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||
startAngle: ((90 + -angle) * Math.PI) / 180,
|
||||
endAngle: ((220 + -angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点1
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||
let point = getCirlPoint(x0, y0, r, 90 + -angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点2
|
||||
name: 'ring5', //绿点
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||
let point = getCirlPoint(x0, y0, r, 270 + -angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点3
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||
let point = getCirlPoint(x0, y0, r, 90 + angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点4
|
||||
name: 'ring5', //绿点
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||
let point = getCirlPoint(x0, y0, r, 270 + angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
clockWise: false,
|
||||
radius: ['98%', '95%'],
|
||||
hoverAnimation: false,
|
||||
center: ['33.33%', '50%'],
|
||||
top: 'center',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: data,
|
||||
},
|
||||
{
|
||||
type: 'pie',
|
||||
top: 'center',
|
||||
startAngle: 90,
|
||||
clockwise: false,
|
||||
center: ['33.33%', '50%'],
|
||||
legendHoverLink: false,
|
||||
hoverAnimation: false,
|
||||
radius: ['94%', '55%'],
|
||||
itemStyle: {
|
||||
opacity: 0.15,
|
||||
},
|
||||
label: {
|
||||
show: false,
|
||||
position: 'center',
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: data2,
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
clockWise: false,
|
||||
center: ['33.33%', '50%'],
|
||||
radius: ['39%', '38%'],
|
||||
hoverAnimation: false,
|
||||
top: 'center',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: data,
|
||||
},
|
||||
],
|
||||
}
|
||||
//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
|
||||
function getCirlPoint(x0, y0, r, angle) {
|
||||
let x1 = x0 + r * Math.cos((angle * Math.PI) / 180)
|
||||
let y1 = y0 + r * Math.sin((angle * Math.PI) / 180)
|
||||
return {
|
||||
x: x1,
|
||||
y: y1,
|
||||
}
|
||||
}
|
||||
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
draw(chart)
|
||||
return chart
|
||||
}
|
||||
function draw(chart) {
|
||||
angle = angle + 3
|
||||
chart.setOption(option, true)
|
||||
//window.requestAnimationFrame(draw);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
|
||||
setInterval(function () {
|
||||
//用setInterval做动画感觉有问题
|
||||
draw(chart)
|
||||
}, 100)
|
||||
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,338 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
let datalist = [
|
||||
{
|
||||
name: '公共平台',
|
||||
},
|
||||
{
|
||||
name: '系统0000',
|
||||
},
|
||||
{
|
||||
name: '系统0011',
|
||||
},
|
||||
{
|
||||
name: '系统0022',
|
||||
},
|
||||
{
|
||||
name: '系统0033',
|
||||
},
|
||||
{
|
||||
name: '系统0044',
|
||||
},
|
||||
{
|
||||
name: '系统0055',
|
||||
},
|
||||
{
|
||||
name: '系统11',
|
||||
},
|
||||
{
|
||||
name: '系统22',
|
||||
},
|
||||
{
|
||||
name: '系统33',
|
||||
},
|
||||
{
|
||||
name: '系统44',
|
||||
},
|
||||
{
|
||||
name: '系统55',
|
||||
},
|
||||
{
|
||||
name: '系统66',
|
||||
},
|
||||
{
|
||||
name: '系统77',
|
||||
},
|
||||
{
|
||||
name: '系统88',
|
||||
},
|
||||
{
|
||||
name: '系统99',
|
||||
},
|
||||
]
|
||||
let linksData = [
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0000',
|
||||
value: 1044305,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0011',
|
||||
value: 651527,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0022',
|
||||
value: 651527,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0033',
|
||||
value: 486710,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0044',
|
||||
value: 212670,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0055',
|
||||
value: 210400,
|
||||
},
|
||||
{
|
||||
source: '系统0011',
|
||||
target: '系统11',
|
||||
value: 645246,
|
||||
},
|
||||
{
|
||||
source: '系统0022',
|
||||
target: '系统22',
|
||||
value: 513275,
|
||||
},
|
||||
{
|
||||
source: '系统0011',
|
||||
target: '系统33',
|
||||
value: 282986,
|
||||
},
|
||||
{
|
||||
source: '系统0011',
|
||||
target: '系统44',
|
||||
value: 118655,
|
||||
},
|
||||
{
|
||||
source: '系统0022',
|
||||
target: '系统55',
|
||||
value: 105989,
|
||||
},
|
||||
{
|
||||
source: '系统0022',
|
||||
target: '系统66',
|
||||
value: 95100,
|
||||
},
|
||||
{
|
||||
source: '系统0033',
|
||||
target: '系统77',
|
||||
value: 87796,
|
||||
},
|
||||
{
|
||||
source: '系统0044',
|
||||
target: '系统88',
|
||||
value: 47658,
|
||||
},
|
||||
{
|
||||
source: '系统0055',
|
||||
target: '系统99',
|
||||
value: 243660,
|
||||
},
|
||||
]
|
||||
let Color = [
|
||||
'#61FEFF',
|
||||
'#937FE6',
|
||||
'#2B56D3',
|
||||
'#87E7AA',
|
||||
'#937FE6',
|
||||
'#FF9B97',
|
||||
'#8f23f5',
|
||||
'#0576ea',
|
||||
'#2cb8cf',
|
||||
'#8A7EE0',
|
||||
'#2cb8cf',
|
||||
'#4e70f0',
|
||||
'#1fa3de',
|
||||
'#bbc951',
|
||||
'#FFC14B',
|
||||
'#b785a6',
|
||||
]
|
||||
let Color1 = [
|
||||
'#04E0F3',
|
||||
'#682EFC',
|
||||
'#35A7FE',
|
||||
'#0DC09F',
|
||||
'#682EFC',
|
||||
'#ED6663',
|
||||
'#8f23f5',
|
||||
'#0576ea',
|
||||
'#2cb8cf',
|
||||
'#8A7EE0',
|
||||
'#2cb8cf',
|
||||
'#4e70f0',
|
||||
'#1fa3de',
|
||||
'#bbc951',
|
||||
'#FFC14B',
|
||||
'#b785a6',
|
||||
]
|
||||
let sourceLabel = [
|
||||
'right',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
]
|
||||
let itemStyleColor = []
|
||||
let labelSource = []
|
||||
for (let i = 0; i < datalist.length; i++) {
|
||||
datalist[i].label = {
|
||||
normal: {
|
||||
position: sourceLabel[i],
|
||||
},
|
||||
}
|
||||
labelSource.push(sourceLabel[i])
|
||||
}
|
||||
for (let d = 0; d < datalist.length; d++) {
|
||||
datalist[d].itemStyle = {
|
||||
normal: {
|
||||
// color: Color[d]
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 1,
|
||||
x2: 0,
|
||||
y2: 0,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 1,
|
||||
color: Color[d], // 0% 处的颜色
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: Color1[d], // 100% 处的颜色
|
||||
},
|
||||
],
|
||||
global: false, // 缺省为 false
|
||||
},
|
||||
},
|
||||
}
|
||||
itemStyleColor.push(datalist[d])
|
||||
}
|
||||
|
||||
const options = {
|
||||
backgroundColor: '#031d7a',
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
triggerOn: 'mousemove',
|
||||
formatter: function (params) {
|
||||
if (params.name == '公共平台') {
|
||||
return ' 公共平台 '
|
||||
} else {
|
||||
let value = params.data.value
|
||||
if (!value && value !== 0) return 0
|
||||
let str = value.toString()
|
||||
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||
if (params.data.source == '公共平台') {
|
||||
return params.data.target + ' : ' + str.replace(reg, '$1,')
|
||||
} else {
|
||||
return params.data.source + ' : ' + str.replace(reg, '$1,')
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'sankey',
|
||||
layout: 'none',
|
||||
top: '4%',
|
||||
bottom: '12%',
|
||||
left: '20',
|
||||
right: '20',
|
||||
nodeGap: 15,
|
||||
nodeWidth: 25,
|
||||
focusNodeAdjacency: 'allEdges',
|
||||
data: itemStyleColor,
|
||||
links: linksData,
|
||||
label: {
|
||||
normal: {
|
||||
color: '#fff',
|
||||
fontSize: 14,
|
||||
formatter: function (params) {
|
||||
if (params.data.name == '公共平台') {
|
||||
let strs = params.data.name.split('') //字符串数组
|
||||
let str = ''
|
||||
for (let i = 0, s; (s = strs[i++]); ) {
|
||||
//遍历字符串数组
|
||||
str += s
|
||||
if (!(i % 1)) str += '\n' //按需要求余
|
||||
}
|
||||
return '{white|' + str + '}'
|
||||
} else {
|
||||
return params.data.name
|
||||
}
|
||||
},
|
||||
rich: {
|
||||
white: {
|
||||
fontSize: 16,
|
||||
lineHeight: 30,
|
||||
padding: [0, 0, 0, -26],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
lineStyle: {
|
||||
normal: {
|
||||
opacity: 0.4,
|
||||
color: 'source',
|
||||
curveness: 0.5,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderWidth: 1,
|
||||
borderColor: 'transparent',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,214 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
!(function (t, e) {
|
||||
'object' == typeof exports && 'undefined' != typeof module
|
||||
? e(exports, require('echarts'))
|
||||
: 'function' == typeof define && define.amd
|
||||
? define(['exports', 'echarts'], e)
|
||||
: e((t.bmap = {}), t.echarts)
|
||||
})(this, function (t, e) {
|
||||
'use strict'
|
||||
function o(t, e) {
|
||||
;(this._bmap = t),
|
||||
(this.dimensions = ['lng', 'lat']),
|
||||
(this._mapOffset = [0, 0]),
|
||||
(this._api = e),
|
||||
(this._projection = new BMap.MercatorProjection())
|
||||
}
|
||||
function n(t, o) {
|
||||
return (
|
||||
(o = o || [0, 0]),
|
||||
e.util.map(
|
||||
[0, 1],
|
||||
function (e) {
|
||||
var n = o[e],
|
||||
i = t[e] / 2,
|
||||
a = [],
|
||||
r = []
|
||||
return (
|
||||
(a[e] = n - i),
|
||||
(r[e] = n + i),
|
||||
(a[1 - e] = r[1 - e] = o[1 - e]),
|
||||
Math.abs(this.dataToPoint(a)[e] - this.dataToPoint(r)[e])
|
||||
)
|
||||
},
|
||||
this,
|
||||
)
|
||||
)
|
||||
}
|
||||
function i() {
|
||||
function t(t) {
|
||||
this._root = t
|
||||
}
|
||||
return (
|
||||
(t.prototype = new BMap.Overlay()),
|
||||
(t.prototype.initialize = function (t) {
|
||||
return t.getPanes().labelPane.appendChild(this._root), this._root
|
||||
}),
|
||||
(t.prototype.draw = function () {}),
|
||||
t
|
||||
)
|
||||
}
|
||||
function a(t, e) {
|
||||
return t && e && t[0] === e[0] && t[1] === e[1]
|
||||
}
|
||||
;(o.prototype.dimensions = ['lng', 'lat']),
|
||||
(o.prototype.setZoom = function (t) {
|
||||
this._zoom = t
|
||||
}),
|
||||
(o.prototype.setCenter = function (t) {
|
||||
this._center = this._projection.lngLatToPoint(new BMap.Point(t[0], t[1]))
|
||||
}),
|
||||
(o.prototype.setMapOffset = function (t) {
|
||||
this._mapOffset = t
|
||||
}),
|
||||
(o.prototype.getBMap = function () {
|
||||
return this._bmap
|
||||
}),
|
||||
(o.prototype.dataToPoint = function (t) {
|
||||
var e = new BMap.Point(t[0], t[1]),
|
||||
o = this._bmap.pointToOverlayPixel(e),
|
||||
n = this._mapOffset
|
||||
return [o.x - n[0], o.y - n[1]]
|
||||
}),
|
||||
(o.prototype.pointToData = function (t) {
|
||||
var e = this._mapOffset
|
||||
return [(t = this._bmap.overlayPixelToPoint({ x: t[0] + e[0], y: t[1] + e[1] })).lng, t.lat]
|
||||
}),
|
||||
(o.prototype.getViewRect = function () {
|
||||
var t = this._api
|
||||
return new e.graphic.BoundingRect(0, 0, t.getWidth(), t.getHeight())
|
||||
}),
|
||||
(o.prototype.getRoamTransform = function () {
|
||||
return e.matrix.create()
|
||||
}),
|
||||
(o.prototype.prepareCustoms = function (t) {
|
||||
var o = this.getViewRect()
|
||||
return {
|
||||
coordSys: { type: 'bmap', x: o.x, y: o.y, width: o.width, height: o.height },
|
||||
api: { coord: e.util.bind(this.dataToPoint, this), size: e.util.bind(n, this) },
|
||||
}
|
||||
})
|
||||
var r
|
||||
;(o.dimensions = o.prototype.dimensions),
|
||||
(o.create = function (t, e) {
|
||||
var n,
|
||||
a = e.getDom()
|
||||
t.eachComponent('bmap', function (t) {
|
||||
var p = e.getZr().painter,
|
||||
s = p.getViewportRoot()
|
||||
if ('undefined' == typeof BMap) throw new Error('BMap api is not loaded')
|
||||
if (((r = r || i()), n)) throw new Error('Only one bmap component can exist')
|
||||
if (!t.__bmap) {
|
||||
var m = a.querySelector('.ec-extension-bmap')
|
||||
m && ((s.style.left = '0px'), (s.style.top = '0px'), a.removeChild(m)),
|
||||
((m = document.createElement('div')).style.cssText = 'width:100%;height:100%'),
|
||||
m.classList.add('ec-extension-bmap'),
|
||||
a.appendChild(m)
|
||||
var c = (t.__bmap = new BMap.Map(m)),
|
||||
d = new r(s)
|
||||
c.addOverlay(d),
|
||||
(p.getViewportRootOffset = function () {
|
||||
return { offsetLeft: 0, offsetTop: 0 }
|
||||
})
|
||||
}
|
||||
var c = t.__bmap,
|
||||
f = t.get('center'),
|
||||
l = t.get('zoom')
|
||||
if (f && l) {
|
||||
var h = new BMap.Point(f[0], f[1])
|
||||
c.centerAndZoom(h, l)
|
||||
}
|
||||
;(n = new o(c, e)).setMapOffset(t.__mapOffset || [0, 0]),
|
||||
n.setZoom(l),
|
||||
n.setCenter(f),
|
||||
(t.coordinateSystem = n)
|
||||
}),
|
||||
t.eachSeries(function (t) {
|
||||
'bmap' === t.get('coordinateSystem') && (t.coordinateSystem = n)
|
||||
})
|
||||
}),
|
||||
e.extendComponentModel({
|
||||
type: 'bmap',
|
||||
getBMap: function () {
|
||||
return this.__bmap
|
||||
},
|
||||
setCenterAndZoom: function (t, e) {
|
||||
;(this.option.center = t), (this.option.zoom = e)
|
||||
},
|
||||
centerOrZoomChanged: function (t, e) {
|
||||
var o = this.option
|
||||
return !(a(t, o.center) && e === o.zoom)
|
||||
},
|
||||
defaultOption: { center: [104.114129, 37.550339], zoom: 5, mapStyle: {}, roam: !1 },
|
||||
}),
|
||||
e.extendComponentView({
|
||||
type: 'bmap',
|
||||
render: function (t, e, o) {
|
||||
function n() {
|
||||
i || o.dispatchAction({ type: 'bmapRoam' })
|
||||
}
|
||||
var i = !0,
|
||||
a = t.getBMap(),
|
||||
r = o.getZr().painter.getViewportRoot(),
|
||||
p = t.coordinateSystem,
|
||||
s = function (e, n) {
|
||||
if (!i) {
|
||||
var a = r.parentNode.parentNode.parentNode,
|
||||
s = [-parseInt(a.style.left, 10) || 0, -parseInt(a.style.top, 10) || 0]
|
||||
;(r.style.left = s[0] + 'px'),
|
||||
(r.style.top = s[1] + 'px'),
|
||||
p.setMapOffset(s),
|
||||
(t.__mapOffset = s),
|
||||
o.dispatchAction({ type: 'bmapRoam' })
|
||||
}
|
||||
}
|
||||
a.removeEventListener('moving', this._oldMoveHandler),
|
||||
a.removeEventListener('zoomend', this._oldZoomEndHandler),
|
||||
a.addEventListener('moving', s),
|
||||
a.addEventListener('zoomend', n),
|
||||
(this._oldMoveHandler = s),
|
||||
(this._oldZoomEndHandler = n)
|
||||
var m = t.get('roam')
|
||||
m && 'scale' !== m ? a.enableDragging() : a.disableDragging(),
|
||||
m && 'move' !== m
|
||||
? (a.enableScrollWheelZoom(), a.enableDoubleClickZoom(), a.enablePinchToZoom())
|
||||
: (a.disableScrollWheelZoom(), a.disableDoubleClickZoom(), a.disablePinchToZoom())
|
||||
var c = t.__mapStyle,
|
||||
d = t.get('mapStyle') || {},
|
||||
f = JSON.stringify(d)
|
||||
JSON.stringify(c) !== f &&
|
||||
(Object.keys(d).length && a.setMapStyle(d), (t.__mapStyle = JSON.parse(f))),
|
||||
(i = !1)
|
||||
},
|
||||
}),
|
||||
e.registerCoordinateSystem('bmap', o),
|
||||
e.registerAction(
|
||||
{ type: 'bmapRoam', event: 'bmapRoam', update: 'updateLayout' },
|
||||
function (t, e) {
|
||||
e.eachComponent('bmap', function (t) {
|
||||
var e = t.getBMap(),
|
||||
o = e.getCenter()
|
||||
t.setCenterAndZoom([o.lng, o.lat], e.getZoom())
|
||||
})
|
||||
},
|
||||
)
|
||||
t.version = '1.0.0'
|
||||
})
|
||||
|
|
@ -1,758 +0,0 @@
|
|||
;(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['exports', 'echarts'], factory)
|
||||
} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
|
||||
// CommonJS
|
||||
factory(exports, require('echarts'))
|
||||
} else {
|
||||
// Browser globals
|
||||
factory({}, root.echarts)
|
||||
}
|
||||
})(this, function (exports, echarts) {
|
||||
var log = function (msg) {
|
||||
if (typeof console !== 'undefined') {
|
||||
console && console.error && console.error(msg)
|
||||
}
|
||||
}
|
||||
if (!echarts) {
|
||||
log('ECharts is not Loaded')
|
||||
return
|
||||
}
|
||||
if (!echarts.registerMap) {
|
||||
log('ECharts Map is not loaded')
|
||||
return
|
||||
}
|
||||
echarts.registerMap('china', {
|
||||
type: 'FeatureCollection',
|
||||
features: [
|
||||
{
|
||||
id: '710000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@°Ü¯Û'],
|
||||
[
|
||||
'@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤNJŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ¿@ăƑ¥ĘWǬÏĶŁâ',
|
||||
],
|
||||
['@@\\p|WoYG¿¥Ij@¢'],
|
||||
['@@
¡@V^RqBbAnTXeRz¤L«³I'],
|
||||
['@@ÆEEkWqë @'],
|
||||
['@@fced'],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[122886, 24033]],
|
||||
[[123335, 22980]],
|
||||
[[122375, 24193]],
|
||||
[[122518, 24117]],
|
||||
[[124427, 22618]],
|
||||
[[124862, 26043]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [121.509062, 25.044332], name: '台湾', childNum: 6 },
|
||||
},
|
||||
{
|
||||
id: '130000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@o~Z]ªrºc_ħ²G¼s`jΟnüsÂłNX_M`ǽÓnUK
Ĝēs¤©yrý§uģcJe'],
|
||||
['@@U`Ts¿mÂ'],
|
||||
[
|
||||
'@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiñÖ`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒQgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧˏf°ÐTªqs{S¯r æÝlNd®²Ğ džiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|ǰ
N«úmH¯âDùyŜŲIÄuШD¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu
{Z}Ö@U´
ʚLg®¯Oı°Ãw ^VbÉsmA
ê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅna@³@ďyýIĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃͶSj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@c̬¢aĦtRıÒ¾ùƀ^juųœKUFyƝ
īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£
Í÷¿qáµ§g¤o^á¾ZE¤i`ij{nOl»WÝĔįhgF[¿¡ßkOüš_ūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]],
|
||||
},
|
||||
properties: { cp: [114.502461, 38.045474], name: '河北', childNum: 3 },
|
||||
},
|
||||
{
|
||||
id: '140000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PGąSM
EÅruµéYÓŌ_dĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm
~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTŸʂōĖĴŞȀÆÿȄlŤĒötνî¼ĨXh|ªM¤Ðz',
|
||||
],
|
||||
encodeOffsets: [[116874, 41716]],
|
||||
},
|
||||
properties: { cp: [112.549248, 37.857014], name: '山西', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '150000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
[
|
||||
'@@Č^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛM
Ā[bÓEn}¶Vc
ês¯PqFB
|S³C|kñHdiÄ¥sʼnÅ
PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARëśijĘ
ů`çõh]y»ǃǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧżĠu¦ö',
|
||||
],
|
||||
[
|
||||
'@@sKC
GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯YȵƓñǙµïċĻ|Düȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İТæ^Ŋ IJȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©ȇÍq¯½YÃÔʼnÉNÑÅÝy¹NqáʅDǡËñƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmǐnǔĎȆÞǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞdžŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮЬɚwɲFjĔ²Äw°dždÀÉ_ĸdîàŎjÊêTЪŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀϰP|ªVVªj¬ĚÒêp¬E|ŬÂc|ÀtƐK f{ĘFĒƌXƲąo½Ę\\¥o}Ûu£çkX{uĩ«āíÓUŅßŢqŤ¥lyň[oi{¦LńðFȪȖĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬
qehqsuH{¸kH¡
ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ż؛Ç@Vu»Aylßí¹ĵê
ÝlISò³C¹Ìâ²i¶Ìoú^H²CǜңDŽ z¼g^èöŰ_IJĕê}gÁnUI«m
]jvV¼euhwqAaW_µj
»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉ³MEĸÅĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐ禫
SÒ¥¸ëBX½HáŵÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYLq§IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA}
×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡
LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]±
ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w
VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª
»E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ
ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µ',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[127444, 52594]], [[113793, 40312]]],
|
||||
},
|
||||
properties: { cp: [111.670801, 40.818311], name: '内蒙古', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '210000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@L@@sa'],
|
||||
['@@MnNm'],
|
||||
['@@dc'],
|
||||
['@@eÀC@b'],
|
||||
['@@f
XwkbrÄ`qg'],
|
||||
['@@^jtWQ'],
|
||||
['@@~ Y]c'],
|
||||
['@@G`ĔN^_¿ZÃM'],
|
||||
['@@iX¶BY'],
|
||||
['@@YZ'],
|
||||
['@@L_{Epf'],
|
||||
['@@^WqCT\\'],
|
||||
['@@\\[§t|¤_'],
|
||||
['@@m`n_'],
|
||||
['@@Ïxnj{q_×^Giip'],
|
||||
[
|
||||
'@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO
k^ģÁFıĉĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlij¥ãn·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÃA',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[123686, 41445]],
|
||||
[[126019, 40435]],
|
||||
[[124393, 40128]],
|
||||
[[126117, 39963]],
|
||||
[[125322, 40140]],
|
||||
[[126686, 40700]],
|
||||
[[126041, 40374]],
|
||||
[[125584, 40168]],
|
||||
[[125453, 40165]],
|
||||
[[125362, 40214]],
|
||||
[[125280, 40291]],
|
||||
[[125774, 39997]],
|
||||
[[125976, 40496]],
|
||||
[[125822, 39993]],
|
||||
[[125509, 40217]],
|
||||
[[122731, 40949]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [123.429096, 41.796767], name: '辽宁', childNum: 16 },
|
||||
},
|
||||
{
|
||||
id: '220000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@pä³PClFbbÍzwBGĭZÅi»lYċ²SgkÇ£^Sqd¯R
©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£
R}oªUF
uuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀXXȱAeyYw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨JYlďQ[ ÏYëЧTGztnß¡gFkMāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUuP@vRY¾\\¢
GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}|
¾cZ
k¿uŐã[oxGikfeäT@
SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎslyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GMehccďÏd©ÑW_ÏYƅ»
é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncćfv~
YÇG',
|
||||
],
|
||||
encodeOffsets: [[130196, 42528]],
|
||||
},
|
||||
properties: { cp: [125.3245, 43.886841], name: '吉林', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '230000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@ƨĶTLÇyqpÇÛqe{~oyen}s`qiXGù]Ëp½©lÉÁp]Þñ´FĂ^fäîºkàz¼BUvÈ@'],
|
||||
[
|
||||
'@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tޏĻN_yX`biNKu
P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ
µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć
UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]}
AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîά|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí
£P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNͽƎÁ§čŐAēeL³àydl¦ĘVçŁpśdžĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ
ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg
Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR
ŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Þ]',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[127123, 51780]], [[134456, 44547]]],
|
||||
},
|
||||
properties: { cp: [126.642464, 45.756967], name: '黑龙江', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '320000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@cþÅPi`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@ƹhågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfå
qm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK
¤½phMü`oæŀ',
|
||||
],
|
||||
encodeOffsets: [[121740, 32276]],
|
||||
},
|
||||
properties: { cp: [118.767413, 32.041544], name: '江苏', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '330000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@E^dQ]K'],
|
||||
['@@jX^j'],
|
||||
['@@sfbU'],
|
||||
['@@qP\\xz[ck'],
|
||||
['@@R¢FX}°[s_'],
|
||||
['@@Cb\\}'],
|
||||
['@@e|v\\la{u'],
|
||||
['@@v~u}'],
|
||||
['@@QxÂF¯}'],
|
||||
['@@¹nvÞs¯o'],
|
||||
['@@rSkUEj'],
|
||||
['@@biZP'],
|
||||
['@@p[}INf'],
|
||||
['@@À¿'],
|
||||
['@@¹dnb
'],
|
||||
['@@rSBnR'],
|
||||
['@@g~h}'],
|
||||
['@@FlEk'],
|
||||
['@@OdPc'],
|
||||
['@@v[u\\'],
|
||||
['@@FjâL~wyoo~sµL\\'],
|
||||
['@@¬e¹aN'],
|
||||
['@@\\nÔ¡q]L³ë\\ÿ®QÖ'],
|
||||
['@@ÊA©[¬'],
|
||||
['@@Kxv'],
|
||||
['@@@hlIk]'],
|
||||
['@@pW{o||j'],
|
||||
['@@Md|_mC'],
|
||||
['@@¢
X£ÏylD¼XtH'],
|
||||
['@@hlÜ[LykAvyfw^E¤'],
|
||||
['@@fp¤MusR'],
|
||||
['@@®_ma~LÁ¬Z'],
|
||||
['@@iMxZ'],
|
||||
['@@ZcYd'],
|
||||
['@@Z~dOSo|A¿qZv'],
|
||||
['@@@`EN¡v'],
|
||||
['@@|TY{'],
|
||||
['@@@n@m'],
|
||||
['@@XWkCT\\'],
|
||||
['@@ºwZRkĕWO¢'],
|
||||
['@@X®±Grƪ\\ÔáXq{'],
|
||||
['@@ůTG°ĄLHm°UC'],
|
||||
[
|
||||
'@@¤aÜx~}dtüGæţŎíĔcŖpMËÐj碷ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗʼnåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯Qª
mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfåÂŧįƋǝÊĕġć£g³neą»@¦S®\\ßðChiqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú
Øz©PCÈÚDZhŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxبIÈhhst',
|
||||
],
|
||||
['@@o\\VzRZ}y'],
|
||||
['@@@°¡mÛGĕ¨§Ianá[ýƤjfæØLäGr'],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[125592, 31553]],
|
||||
[[125785, 31436]],
|
||||
[[125729, 31431]],
|
||||
[[125513, 31380]],
|
||||
[[125223, 30438]],
|
||||
[[125115, 30114]],
|
||||
[[124815, 29155]],
|
||||
[[124419, 28746]],
|
||||
[[124095, 28635]],
|
||||
[[124005, 28609]],
|
||||
[[125000, 30713]],
|
||||
[[125111, 30698]],
|
||||
[[125078, 30682]],
|
||||
[[125150, 30684]],
|
||||
[[124014, 28103]],
|
||||
[[125008, 31331]],
|
||||
[[125411, 31468]],
|
||||
[[125329, 31479]],
|
||||
[[125626, 30916]],
|
||||
[[125417, 30956]],
|
||||
[[125254, 30976]],
|
||||
[[125199, 30997]],
|
||||
[[125095, 31058]],
|
||||
[[125083, 30915]],
|
||||
[[124885, 31015]],
|
||||
[[125218, 30798]],
|
||||
[[124867, 30838]],
|
||||
[[124755, 30788]],
|
||||
[[124802, 30809]],
|
||||
[[125267, 30657]],
|
||||
[[125218, 30578]],
|
||||
[[125200, 30562]],
|
||||
[[124968, 30474]],
|
||||
[[125167, 30396]],
|
||||
[[124955, 29879]],
|
||||
[[124714, 29781]],
|
||||
[[124762, 29462]],
|
||||
[[124325, 28754]],
|
||||
[[123990, 28459]],
|
||||
[[125366, 31477]],
|
||||
[[125115, 30363]],
|
||||
[[125369, 31139]],
|
||||
[[122495, 31878]],
|
||||
[[125329, 30690]],
|
||||
[[125192, 30787]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [120.153576, 30.287459], name: '浙江', childNum: 45 },
|
||||
},
|
||||
{
|
||||
id: '340000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@^iuLX^'],
|
||||
['@@e©Ehl'],
|
||||
[
|
||||
'@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxIJkq^³³GšµbíZ
¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp
Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜÆ¶ĊJhpc¹O]iŠ]¥ jtsggJǧw×jÉ©±EFËKiÛÃÕYv
sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mw
RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP
ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄÆµ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē
ßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴ˶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³
]u}f
ïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhïgA¢ųƩޤOÈm°K´',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[121722, 32278]], [[119475, 30423]], [[119168, 35472]]],
|
||||
},
|
||||
properties: { cp: [117.283042, 31.86119], name: '安徽', childNum: 3 },
|
||||
},
|
||||
{
|
||||
id: '350000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@zht´]'],
|
||||
['@@aj^~ĆG©O'],
|
||||
['@@ed¨C}}i'],
|
||||
['@@@vPGsQ'],
|
||||
['@@sBzddW]Q'],
|
||||
['@@S¨Q{'],
|
||||
['@@NVucW'],
|
||||
['@@qptBAq'],
|
||||
['@@¸[mu'],
|
||||
['@@Q\\pD]_'],
|
||||
['@@jSwUadpF'],
|
||||
['@@eXª~'],
|
||||
['@@AjvFso'],
|
||||
['@@fT_Çí\\v|ba¦jZÆy°'],
|
||||
['@@IjJi'],
|
||||
['@@wJIx«¼AoNe{M'],
|
||||
['@@K±¡ÓČäeZ'],
|
||||
[
|
||||
'@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq
ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy
cpě
¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ
^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F
¼ÍË»ğV`«Ip}ccÅĥZEãoP
´B@D¸m±z«Ƴ¿å³BRضWlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@
¤uć
PåcuMuw¢BI¿]zG¹guĮck\\_',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[123250, 27563]],
|
||||
[[122541, 27268]],
|
||||
[[123020, 27189]],
|
||||
[[122916, 27125]],
|
||||
[[122887, 26845]],
|
||||
[[122808, 26762]],
|
||||
[[122568, 25912]],
|
||||
[[122778, 26197]],
|
||||
[[122515, 26757]],
|
||||
[[122816, 26587]],
|
||||
[[123388, 27005]],
|
||||
[[122450, 26243]],
|
||||
[[122578, 25962]],
|
||||
[[121255, 25103]],
|
||||
[[120987, 24903]],
|
||||
[[122339, 25802]],
|
||||
[[121042, 25093]],
|
||||
[[122439, 26024]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [119.306239, 26.075302], name: '福建', childNum: 18 },
|
||||
},
|
||||
{
|
||||
id: '360000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@ĢĨƐgļ¼ÂMD~ņªe^\\^§ý©j×cZبzdÒa¶lÒJìõ`oz÷@¤u޸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjtĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢûXD®
QgÄWiØPÞìºr¤džNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬
^DhÆyøJhØxĢĀLÊƠPżċĄwȠ̦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQ
YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī
BÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB
¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~
`gsÙfIƋlę¹e|~udjuTlXµf`¿Jd[\\L²',
|
||||
],
|
||||
encodeOffsets: [[116689, 26234]],
|
||||
},
|
||||
properties: { cp: [115.892151, 28.676493], name: '江西', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '370000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@Xjd]{K'],
|
||||
['@@itbFHy'],
|
||||
['@@HlGk'],
|
||||
['@@TGy'],
|
||||
['@@K¬U'],
|
||||
['@@WdXc'],
|
||||
['@@PtOs'],
|
||||
['@@LnXhc'],
|
||||
['@@ppVu]Or'],
|
||||
['@@cdzAUa'],
|
||||
['@@udRhnCI'],
|
||||
['@@oIpR'],
|
||||
[
|
||||
'@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐ˹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC
MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïW
uøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČ×GDyäÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu
IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏYI] PumŝrƿIā[xedzL¯v¯s¬ÁY
~}
ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM³FÛWp[',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[123806, 39303]],
|
||||
[[123821, 39266]],
|
||||
[[123742, 39256]],
|
||||
[[123702, 39203]],
|
||||
[[123649, 39066]],
|
||||
[[123847, 38933]],
|
||||
[[123580, 38839]],
|
||||
[[123894, 37288]],
|
||||
[[123043, 36624]],
|
||||
[[123344, 38676]],
|
||||
[[123522, 38857]],
|
||||
[[123628, 38858]],
|
||||
[[118260, 36742]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [117.000923, 36.675807], name: '山东', childNum: 13 },
|
||||
},
|
||||
{
|
||||
id: '410000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØx¶@«ŕŕQGYfa[şußǩđš_X³ijÕčC]kbc¥CS¯ëÍB©÷³Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr
|J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ
Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsDzßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m',
|
||||
],
|
||||
encodeOffsets: [[118256, 37017]],
|
||||
},
|
||||
properties: { cp: [113.665412, 34.757975], name: '河南', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '420000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@AB'],
|
||||
['@@lskt'],
|
||||
[
|
||||
'@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy
¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć
QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ²
EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼
äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆ̶Ûo
d
ĔňТJqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdʧĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[113712, 34000]], [[115612, 30507]], [[113649, 34054]]],
|
||||
},
|
||||
properties: { cp: [114.298572, 30.584355], name: '湖北', childNum: 3 },
|
||||
},
|
||||
{
|
||||
id: '430000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@nFTs'],
|
||||
['@@ßÅÆá½ÔXrCO
ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥Ï̾edÄ©ĸG
àGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM'],
|
||||
[
|
||||
'@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylX
HËѱH«C^õľAŧ¤É¥ïyuǙuA¢^{ÌC´¦ŷJ£^[ª¿ĕ~Ƈ
N
skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ IJβSÊDŽŶ¨ƚCÖŎªQؼrŭ«}NÏürʬmjr@ĘrTW SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`P
DiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZa
ZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶Dô
K|^ª°LX¾ŴäPα£EXd^¶IJÞÜ~u¸ǔMRhsR
e`ÄofIÔ\\Ø ićymnú¨cj ¢»GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ`
ňSÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnкG{p°M´wÀÒzJ²ò¨ oTçüöoÛÿñőФùTz²CȆȸǎŪƑÐc°dPÎğ˶[Ƚu¯½WM¡ÉB·rínZÒ `¨GA¾\\pēXhÃRCüWGġu
Té§ŎÑ©ò³I±³}_EÃħg®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ
ó·³vŝ£ø@pyö_ëIkѵbcѧy
×dYتiþ¨[]f]Ņ©C}ÁN»hĻħƏĩ',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[115640, 30489]], [[112543, 27312]], [[116690, 26230]]],
|
||||
},
|
||||
properties: { cp: [112.982279, 28.19409], name: '湖南', childNum: 3 },
|
||||
},
|
||||
{
|
||||
id: '440000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@QdAua'],
|
||||
['@@lxDLo'],
|
||||
['@@sbhNLo'],
|
||||
['@@Ă ā'],
|
||||
['@@WltO[['],
|
||||
['@@Kr]S'],
|
||||
['@@eI]y'],
|
||||
['@@I|Mym'],
|
||||
['@@Û³LS¼Y'],
|
||||
['@@nvºBëui©`¾'],
|
||||
['@@zdÛJw®'],
|
||||
['@@°
¯'],
|
||||
['@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo'],
|
||||
['@@sŗÃÔėAƁZÄ ~°ČPäh'],
|
||||
['@@¶ÝÌvmĞhıQ'],
|
||||
['@@HdSjǢD}war
u«ZqadYM'],
|
||||
['@@el\\LqqU'],
|
||||
['@@~rMo\\'],
|
||||
['@@f^C'],
|
||||
['@@øPªoj÷ÍÝħXČx°Q¨ıXNv'],
|
||||
['@@gÇƳo[~tly'],
|
||||
['@@EÆC¿'],
|
||||
['@@OP'],
|
||||
[
|
||||
'@@wđógĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū
ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß}
ŭIJWÈCőâUâǙIğʼn©IijE×
Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\
¤]ŸI®¥D³|Ë]CöAŤ¦
æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xN˲@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI
özx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧΡÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUïmRCº
ĭ|µÕÊK½Rē ó]GªęAx»HO£|ām¡diď×YïYWªʼnOeÚtĐ«zđ¹T
āúEá²\\ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃOj YÇ÷Qěi',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[117381, 22988]],
|
||||
[[116552, 22934]],
|
||||
[[116790, 22617]],
|
||||
[[116973, 22545]],
|
||||
[[116444, 22536]],
|
||||
[[116931, 22515]],
|
||||
[[116496, 22490]],
|
||||
[[116453, 22449]],
|
||||
[[113301, 21439]],
|
||||
[[118726, 21604]],
|
||||
[[118709, 21486]],
|
||||
[[113210, 20816]],
|
||||
[[115482, 22082]],
|
||||
[[113171, 21585]],
|
||||
[[113199, 21590]],
|
||||
[[115232, 22102]],
|
||||
[[115739, 22373]],
|
||||
[[115134, 22184]],
|
||||
[[113056, 21175]],
|
||||
[[119573, 21271]],
|
||||
[[119957, 24020]],
|
||||
[[115859, 22356]],
|
||||
[[116561, 22649]],
|
||||
[[116285, 22746]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [113.280637, 23.125178], name: '广东', childNum: 24 },
|
||||
},
|
||||
{
|
||||
id: '450000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@H TQ§A'],
|
||||
[
|
||||
'@@ĨʪLƊDÎĹĐCǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ
Ĥªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºN
ijd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZg
čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FϼĹ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B
ÑÏGáşşƇe
ăYSsFQ}BwtYğÃ@~
CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ±
dy¹T^dûÅÑŦ·PĻþÙ`K¦
¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡
qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈk¡ĠvàhÂƄ¢Jî¶²',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[111707, 21520]], [[107619, 25527]]],
|
||||
},
|
||||
properties: { cp: [108.320004, 22.82402], name: '广西', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '460000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉƅſȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀоjNðĀÒRZdžzÐŘΰH¨Ƣb²_Ġ ',
|
||||
],
|
||||
encodeOffsets: [[112750, 20508]],
|
||||
},
|
||||
properties: { cp: [110.33119, 20.031971], name: '海南', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '510000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@LqKr'],
|
||||
[
|
||||
'@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«T¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw
ZG
TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO
ĝLk}©Fos´JmµlŁu
ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ
¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ
ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń
·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ
þTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§d
i´ezÝúØã]HqkIþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@Ŏk\\Ç´£YW}z@Z}öoû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖɪXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb
ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯wvƉåZw\\Z{åû^',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[108815, 30935]], [[110617, 31811]]],
|
||||
},
|
||||
properties: { cp: [104.065735, 30.659462], name: '四川', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '520000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@G\\lY£in'],
|
||||
['@@q|mc¯tÏVSÎ'],
|
||||
[
|
||||
'@@hÑ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD
K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR
³e¥]RÕěħ[ƅåÛDpJiVÂF²I
»mN·£LbÒYbWsÀbpkiTZĄă¶Hq`
ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáGçş§ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv
JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤
£Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸
`V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ
ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_Ã
ftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K©
]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxŪÒ¢@£ÀEîôruńb[§nWuMÆLl¿]x}ij½',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[112158, 27383]], [[112105, 27474]], [[112095, 27476]]],
|
||||
},
|
||||
properties: { cp: [106.713478, 26.578343], name: '贵州', childNum: 3 },
|
||||
},
|
||||
{
|
||||
id: '530000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæßUËs¡¦}teèÆ¶StÇÇ}Fd£jĈZĆÆ¤Tč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSᝳX_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM
~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S
rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA
àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹
ÅË^»f³ø}Q¡Ö˳gͱ^Ç
\\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ë}ǝeďºȡȘÏíBÉ£āĘPªij¶ʼnÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZï`',
|
||||
],
|
||||
encodeOffsets: [[104636, 22969]],
|
||||
},
|
||||
properties: { cp: [102.712251, 25.040609], name: '云南', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '540000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ
£Z
UDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y
´¦|QLn°adĊ
\\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|٦Av¦w`ăaÝaa¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´xA sÂtŎKzó´ÇĊµ¢r^nĊƬ×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H
ãd«g[ؼēÀcīľġ¬cJµ
ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc
v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK
¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯcĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`ܳç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh
pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c
bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®óL·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kné§żćĆKǰ¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ
ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©',
|
||||
],
|
||||
encodeOffsets: [[90849, 37210]],
|
||||
},
|
||||
properties: { cp: [91.132212, 29.660361], name: '西藏', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '610000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌdž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTΨÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷY¹W@µ÷K
ãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ
Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DدC´ʼnƒópģ}ċcEË
FéGU¥×K
§¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO
ÿEËߌĤNĔwƇÄńwĪo[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇϳħZ«mJ
×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OϹS|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi
^MicϰÂ[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj',
|
||||
],
|
||||
encodeOffsets: [[110234, 38774]],
|
||||
},
|
||||
properties: { cp: [108.948024, 34.263161], name: '陕西', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '620000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@VuUv'],
|
||||
[
|
||||
'@@ũEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ
sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg
të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI
aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz
³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]A챝XǁÑdzªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×nj~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSf
B¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|̰ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b
ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eıUĥ¼ªI{ΧDÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻
¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKq´ï¦ºĒDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|DŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿ĽĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY
tÁƤyAã˾J@ǝrý@¤
rz¸oP¹ɐÚyáHĀ[Jw
cVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PĤoH{tK',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[108619, 36299]], [[108589, 36341]]],
|
||||
},
|
||||
properties: { cp: [103.823557, 36.058039], name: '甘肃', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '630000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@InJm'],
|
||||
[
|
||||
'@@CƽOŃĦsΰ~dz¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VIJ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wà
x\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u
ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G
uȧþRcÕĕNyyûtøï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIáI`ks£CGěUy×Cy
@¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa
OÇðñęNw
œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«`
ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňb̰ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f
¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõF礻Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌζƶlðļATUvdTGº̼ÔsÊDÔveOg',
|
||||
],
|
||||
],
|
||||
encodeOffsets: [[[105308, 37219]], [[95370, 40081]]],
|
||||
},
|
||||
properties: { cp: [101.778916, 36.623178], name: '青海', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '640000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
[
|
||||
'@@KëÀęĞ«Oęȿȕı]ʼn¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûc
Ùß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_
X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd
¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬
NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZľr°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀ˾iİbjÕ',
|
||||
],
|
||||
['@@mfwěwMrŢªv@G'],
|
||||
],
|
||||
encodeOffsets: [[[109366, 40242]], [[108600, 36303]]],
|
||||
},
|
||||
properties: { cp: [106.278179, 38.46637], name: '宁夏', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '650000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@QØĔ²X¨~ǘBºjʐߨvKƔX¨vĊO÷¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX
êÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO
¦E}`cȺrĦáŖuÒª«IJπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLjì¥Βba¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝč˾ăC
ćāƿÝɽ©DZҹđ¥³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭdzLŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůʼnT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ
ÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc
¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ
č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãØ',
|
||||
],
|
||||
encodeOffsets: [[88824, 50096]],
|
||||
},
|
||||
properties: { cp: [87.617733, 43.792818], name: '新疆', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '110000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@ĽOÁûtŷmiÍt_H»Ĩ±d`¹{bw
Yr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßc±x¯oœRcfe
£o§ËgToÛJíĔóu
|wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwڍUd®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏѨj¯X\\¯MKpA³[H
īu}}',
|
||||
],
|
||||
encodeOffsets: [[120023, 41045]],
|
||||
},
|
||||
properties: { cp: [116.405285, 39.904989], name: '北京', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '120000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'Polygon',
|
||||
coordinates: [
|
||||
'@@ŬgX§Ü«E
¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógc
ĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~',
|
||||
],
|
||||
encodeOffsets: [[120237, 41215]],
|
||||
},
|
||||
properties: { cp: [117.190182, 39.125596], name: '天津', childNum: 1 },
|
||||
},
|
||||
{
|
||||
id: '310000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@ɧư¬EpƸÁxc'],
|
||||
['@@©ª'],
|
||||
['@@MA'],
|
||||
['@@QpİE§ÉC¾'],
|
||||
['@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÃƌÃ͎ó'],
|
||||
['@@ǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@IJ`gQÚhr|ǀ^MIJvtbe´R¯Ô¬¨Yô¤r]ìƬį'],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[124702, 32062]],
|
||||
[[124547, 32200]],
|
||||
[[124808, 31991]],
|
||||
[[124726, 32110]],
|
||||
[[124903, 32376]],
|
||||
[[124438, 32149]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [121.472644, 31.231706], name: '上海', childNum: 6 },
|
||||
},
|
||||
{
|
||||
id: '500000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
[
|
||||
'@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p
\\_ æüY|[YxƊæu°xb®
Űb@~¢NQt°¶Sæ Ê~rljĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈüD|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦
pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓeXsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»ê\\ÂoVnÓØÍ²«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©Þűā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝ
Mwå}]|FmÏCawu_p¯sfÙgY
DHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY
FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬Øsμ£N',
|
||||
],
|
||||
['@@ifjN@s'],
|
||||
],
|
||||
encodeOffsets: [[[109628, 30765]], [[111725, 31320]]],
|
||||
},
|
||||
properties: { cp: [106.504962, 29.533155], name: '重庆', childNum: 2 },
|
||||
},
|
||||
{
|
||||
id: '810000',
|
||||
type: 'Feature',
|
||||
geometry: {
|
||||
type: 'MultiPolygon',
|
||||
coordinates: [
|
||||
['@@AlBk'],
|
||||
['@@mn'],
|
||||
['@@EpFo'],
|
||||
['@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX
´AI¹
[yDU]W`çwZkmc
MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc'],
|
||||
['@@rMUwAS®e'],
|
||||
],
|
||||
encodeOffsets: [
|
||||
[[117111, 23002]],
|
||||
[[117072, 22876]],
|
||||
[[117045, 22887]],
|
||||
[[116975, 23082]],
|
||||
[[116882, 22747]],
|
||||
],
|
||||
},
|
||||
properties: { cp: [114.173355, 22.320048], name: '香港', childNum: 5 },
|
||||
},
|
||||
{
|
||||
id: '820000',
|
||||
type: 'Feature',
|
||||
geometry: { type: 'Polygon', coordinates: ['@@kÊd°å§s'], encodeOffsets: [[116279, 22639]] },
|
||||
properties: { cp: [113.54909, 22.198951], name: '澳门', childNum: 1 },
|
||||
},
|
||||
],
|
||||
UTF8Encoding: true,
|
||||
})
|
||||
})
|
||||
|
|
@ -1,290 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import 'echarts-liquidfill/src/liquidFill.js'
|
||||
import './china.js'
|
||||
import './bmap.min.js'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
|
||||
//城市经纬度
|
||||
var geoCoordMap = {
|
||||
北京: [116.46, 39.92],
|
||||
成都: [104.06, 30.67],
|
||||
杭州: [120.19, 30.26],
|
||||
济南: [117, 36.65],
|
||||
福州: [119.3, 26.08],
|
||||
上海: [121.48, 31.22],
|
||||
重庆: [106.54, 29.59],
|
||||
深圳: [114.07, 22.62],
|
||||
宁波: [121.56, 29.86],
|
||||
南昌: [115.89, 28.68],
|
||||
广州: [113.23, 23.16],
|
||||
厦门: [118.1, 24.46],
|
||||
太原: [112.53, 37.87],
|
||||
哈尔滨: [126.63, 45.75],
|
||||
西安: [108.95, 34.27],
|
||||
沈阳: [123.38, 41.8],
|
||||
大连: [121.62, 38.92],
|
||||
海口: [110.35, 20.02],
|
||||
长沙: [113, 28.21],
|
||||
银川: [106.27, 38.47],
|
||||
石家庄: [114.48, 38.03],
|
||||
昆明: [102.73, 25.04],
|
||||
武汉: [114.31, 30.52],
|
||||
呼和浩特: [111.65, 40.82],
|
||||
天津: [117.2, 39.13],
|
||||
贵阳: [106.71, 26.57],
|
||||
兰州: [103.73, 36.03],
|
||||
青岛: [120.33, 36.07],
|
||||
南京: [118.78, 32.04],
|
||||
长春: [125.35, 43.88],
|
||||
郑州: [113.65, 34.76],
|
||||
西宁: [101.74, 36.56],
|
||||
合肥: [117.27, 31.86],
|
||||
南宁: [108.33, 22.84],
|
||||
拉萨: [91.11, 29.97],
|
||||
乌鲁木齐: [87.68, 43.77],
|
||||
}
|
||||
|
||||
//数据部分
|
||||
var data = [
|
||||
{ name: '北京', value: 88.8 },
|
||||
{ name: '成都', value: 88.7 },
|
||||
{ name: '厦门', value: 88.01 },
|
||||
{ name: '杭州', value: 87.9 },
|
||||
{ name: '济南', value: 87.48 },
|
||||
{ name: '福州', value: 87.47 },
|
||||
{ name: '上海', value: 87.43 },
|
||||
{ name: '重庆', value: 87.38 },
|
||||
{ name: '深圳', value: 87.37 },
|
||||
{ name: '昆明', value: 87.26 },
|
||||
{ name: '宁波', value: 87.1 },
|
||||
{ name: '南昌', value: 86.06 },
|
||||
{ name: '广州', value: 85.89 },
|
||||
{ name: '太原', value: 84.45 },
|
||||
{ name: '哈尔滨', value: 83.96 },
|
||||
{ name: '西安', value: 83.24 },
|
||||
{ name: '沈阳', value: 82.96 },
|
||||
{ name: '大连', value: 82.94 },
|
||||
{ name: '海口', value: 82.88 },
|
||||
{ name: '长沙', value: 82.85 },
|
||||
{ name: '银川', value: 82.49 },
|
||||
{ name: '石家庄', value: 82.24 },
|
||||
{ name: '武汉', value: 81.68 },
|
||||
{ name: '呼和浩特', value: 81.61 },
|
||||
{ name: '天津', value: 80.99 },
|
||||
{ name: '贵阳', value: 80.71 },
|
||||
{ name: '兰州', value: 80.69 },
|
||||
{ name: '南京', value: 80.65 },
|
||||
{ name: '青岛', value: 80.61 },
|
||||
{ name: '长春', value: 80.1 },
|
||||
{ name: '郑州', value: 79.56 },
|
||||
{ name: '西宁', value: 79.07 },
|
||||
{ name: '南宁', value: 78.2 },
|
||||
{ name: '合肥', value: 77.29 },
|
||||
{ name: '乌鲁木齐', value: 76.91 },
|
||||
{ name: '拉萨', value: 76.01 },
|
||||
]
|
||||
var convertData = function (data) {
|
||||
var res = []
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var geoCoord = geoCoordMap[data[i].name]
|
||||
if (geoCoord) {
|
||||
res.push({
|
||||
name: data[i].name,
|
||||
value: geoCoord.concat(data[i].value),
|
||||
})
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
const options = {
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
dataView: {
|
||||
show: true,
|
||||
readOnly: true,
|
||||
},
|
||||
restore: {
|
||||
show: true,
|
||||
},
|
||||
saveAsImage: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
top: 40,
|
||||
right: 40,
|
||||
},
|
||||
title: {
|
||||
//text: '2020年全国大厅监测得分',
|
||||
top: 40,
|
||||
//subtext: 'from 零点有数',
|
||||
left: 'center',
|
||||
textStyle: {
|
||||
color: '#ffffff',
|
||||
fontSize: 30,
|
||||
},
|
||||
subtextStyle: {
|
||||
fontSize: 20,
|
||||
},
|
||||
},
|
||||
legend: {
|
||||
left: 'left',
|
||||
data: ['强', '中', '弱'],
|
||||
textStyle: {
|
||||
color: '#ccc',
|
||||
},
|
||||
},
|
||||
backgroundColor: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 1,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: '#0f2c70', // 0% 处的颜色
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: '#091732', // 100% 处的颜色
|
||||
},
|
||||
],
|
||||
globalCoord: false, // 缺省为 false
|
||||
},
|
||||
visualMap: {
|
||||
min: 75,
|
||||
max: 90,
|
||||
left: 40,
|
||||
bottom: 40,
|
||||
calculable: false,
|
||||
text: ['高', '低'],
|
||||
inRange: {
|
||||
color: ['rgb(4, 1, 255)', 'rgb(225, 1, 255)'],
|
||||
},
|
||||
textStyle: {
|
||||
color: '#ffffff',
|
||||
fontSize: 10,
|
||||
},
|
||||
},
|
||||
geo: {
|
||||
map: 'china',
|
||||
show: true,
|
||||
roam: true,
|
||||
label: {
|
||||
emphasis: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
areaColor: '#091632',
|
||||
borderColor: '#1773c3',
|
||||
shadowColor: '#1773c3',
|
||||
shadowBlur: 20,
|
||||
},
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'map',
|
||||
map: 'china',
|
||||
geoIndex: 1,
|
||||
aspectScale: 0.75, //长宽比
|
||||
showLegendSymbol: true, // 存在legend时显示
|
||||
label: {
|
||||
normal: {
|
||||
show: false,
|
||||
},
|
||||
emphasis: {
|
||||
show: false,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
},
|
||||
},
|
||||
},
|
||||
roam: true,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
areaColor: '#031525',
|
||||
borderColor: '#3B5077',
|
||||
borderWidth: 1.5,
|
||||
},
|
||||
emphasis: {
|
||||
areaColor: '#0f2c70',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '城市',
|
||||
type: 'scatter',
|
||||
coordinateSystem: 'geo',
|
||||
data: convertData(data),
|
||||
symbolSize: function (val) {
|
||||
return val[2] / 8
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
formatter: '{b}',
|
||||
position: 'bottom',
|
||||
textStyle: {
|
||||
fontSize: 10,
|
||||
fontWeight: 'bolder',
|
||||
color: '#ffffff',
|
||||
},
|
||||
show: true,
|
||||
},
|
||||
emphasis: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#ddb926',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,217 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import 'echarts-liquidfill/src/liquidFill.js'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
legend: {
|
||||
data: [
|
||||
'3-11岁任务数',
|
||||
'3-11岁全程接种量',
|
||||
'60岁任务数',
|
||||
'60岁全程接种量',
|
||||
'80岁任务数',
|
||||
'80岁全程接种量',
|
||||
'完成率',
|
||||
],
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['街道1', '街道2', '街道3', '街道4', '街道5', '街道6', '街道7'],
|
||||
},
|
||||
yAxis: [
|
||||
{ type: 'value' },
|
||||
{
|
||||
type: 'value',
|
||||
name: '%',
|
||||
// min: 0,
|
||||
// max: 100,
|
||||
nameTextStyle: {
|
||||
color: '#ccc',
|
||||
padding: [0, 0, 10, -30],
|
||||
},
|
||||
splitNumber: 5,
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
width: 1,
|
||||
// 使用深浅的间隔色
|
||||
color: ['#566471', '#566471'],
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
// tooltip: {
|
||||
// trigger: 'axis',
|
||||
|
||||
// },
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow',
|
||||
},
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
align: 'left',
|
||||
fontSize: 14,
|
||||
},
|
||||
axisLine: {
|
||||
//x坐标轴轴线
|
||||
show: true,
|
||||
lineStyle: {
|
||||
//x坐标轴轴线样式
|
||||
color: '#000', //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
|
||||
},
|
||||
},
|
||||
|
||||
backgroundColor: 'rgba(0,0,0,0.8)',
|
||||
formatter: function (params) {
|
||||
console.log(params)
|
||||
let str = params[0].name + '<br />'
|
||||
console.log(str)
|
||||
params.forEach((item) => {
|
||||
console.log(item.seriesName)
|
||||
if (item.value) {
|
||||
if (item.seriesName.indexOf('岁全程接种量') != -1) {
|
||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${
|
||||
item.color
|
||||
}
|
||||
"></span>
|
||||
${item.seriesName}
|
||||
:
|
||||
${item.value}人 <br/>
|
||||
全程完成率
|
||||
: ${item.value / 100}%
|
||||
<br/><br/>`
|
||||
} else if (item.seriesName.indexOf('岁任务数') != -1) {
|
||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||
"></span>
|
||||
${item.seriesName}
|
||||
:
|
||||
${item.value}人
|
||||
<br/>`
|
||||
} else {
|
||||
str += `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color: ${item.color}
|
||||
"></span>
|
||||
${item.seriesName}
|
||||
:
|
||||
${item.value}%
|
||||
<br/>`
|
||||
}
|
||||
}
|
||||
})
|
||||
return str
|
||||
},
|
||||
},
|
||||
|
||||
series: [
|
||||
{
|
||||
name: '3-11岁任务数',
|
||||
data: [150, 230, 224, 218, 135, 147, 260],
|
||||
stack: 'BB',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '3-11岁全程接种量',
|
||||
data: [150, 230, 224, 218, 135, 147, 260],
|
||||
stack: 'BB',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '60岁任务数',
|
||||
data: [150, 230, 224, 218, 135, 147, 260],
|
||||
stack: 'AA',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '60岁全程接种量',
|
||||
data: [880, 30, 124, 118, 35, 47, 160],
|
||||
stack: 'AA',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '80岁任务数',
|
||||
data: [660, 30, 124, 118, 35, 47, 160],
|
||||
stack: 'Ad',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '80岁全程接种量',
|
||||
data: [880, 30, 124, 118, 35, 47, 160],
|
||||
stack: 'Ad',
|
||||
type: 'bar',
|
||||
},
|
||||
{
|
||||
name: '完成率',
|
||||
data: [50, 130, 124, 18, 35, 47, 160],
|
||||
yAxisIndex: 1,
|
||||
type: 'line',
|
||||
markLine: {
|
||||
symbol: 'none',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
lineStyle: {
|
||||
type: 'dotted',
|
||||
},
|
||||
},
|
||||
},
|
||||
data: [{ type: 'average', name: 'Avg' + '%' }],
|
||||
},
|
||||
// symbol: 'none',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
lineStyle: {
|
||||
width: 2,
|
||||
type: 'solid', //'dotted'虚线 'solid'实线
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,364 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
backgroundColor: '#031d33',
|
||||
legend: {
|
||||
top: '20',
|
||||
x: 'center',
|
||||
textStyle: {
|
||||
fontSize: 16,
|
||||
color: 'rgba(101, 213, 255, 1)',
|
||||
},
|
||||
icon: 'path://M512 881.777778 512 881.777778C716.222629 881.777778 881.777778 716.222629 881.777778 512 881.777778 307.777371 716.222629 142.222222 512 142.222222 307.777373 142.222222 142.222222 307.777371 142.222222 512 142.222222 716.222629 307.777373 881.777778 512 881.777778L512 881.777778ZM512 1024 512 1024C229.230208 1024 0 794.769789 0 512 0 229.230211 229.230208 0 512 0 794.769789 0 1024 229.230211 1024 512 1024 794.769789 794.769789 1024 512 1024L512 1024Z',
|
||||
itemWidth: 8, // 设置宽度
|
||||
itemHeight: 8, // 设置高度、
|
||||
itemGap: 12, // 设置间距
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'axis', //axis , item
|
||||
backgroundColor: 'RGBA(0, 49, 85, 1)',
|
||||
borderColor: 'rgba(0, 151, 251, 1)',
|
||||
borderWidth: 1,
|
||||
borderRadius: 0,
|
||||
textStyle: {
|
||||
color: '#BCE9FC',
|
||||
fontSize: 16,
|
||||
align: 'left',
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
right: '5%',
|
||||
top: '10%',
|
||||
left: '5%',
|
||||
bottom: '5%',
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
name: '部门',
|
||||
nameTextStyle: {
|
||||
color: '#65d5ff',
|
||||
},
|
||||
type: 'category',
|
||||
boundaryGap: true,
|
||||
data: ['HWS', 'SE', 'V&V', 'HQ', 'RPA', 'SC', 'RPA', 'PM', 'CCB', 'RSW'],
|
||||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置。
|
||||
interval: 0, //设置为 1,表示『隔一个标签显示一个标签』
|
||||
// margin:15,
|
||||
textStyle: {
|
||||
color: '#65D5FF',
|
||||
fontStyle: 'normal',
|
||||
fontSize: 16,
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
//坐标轴刻度相关设置。
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
//坐标轴轴线相关设置
|
||||
lineStyle: {
|
||||
color: 'rgba(77, 128, 254, 0.2)',
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
//坐标轴在 grid 区域中的分隔线。
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: 'rgba(77, 128, 254, 0.2)',
|
||||
},
|
||||
},
|
||||
},
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'slider',
|
||||
show: true,
|
||||
bottom: '20px',
|
||||
borderColor: '#07417a',
|
||||
backgroundColor: 'transparent',
|
||||
dataBackground: {
|
||||
lineStyle: {
|
||||
color: 'transparent',
|
||||
shadowOffsetY: 0,
|
||||
},
|
||||
areaStyle: {
|
||||
color: 'transparent',
|
||||
shadowOffsetY: 0,
|
||||
},
|
||||
},
|
||||
// 拖拽手柄样式 svg 路径
|
||||
handleIcon:
|
||||
'M512 512m-208 0a6.5 6.5 0 1 0 416 0 6.5 6.5 0 1 0-416 0Z M512 192C335.264 192 192 335.264 192 512c0 176.736 143.264 320 320 320s320-143.264 320-320C832 335.264 688.736 192 512 192zM512 800c-159.072 0-288-128.928-288-288 0-159.072 128.928-288 288-288s288 128.928 288 288C800 671.072 671.072 800 512 800z',
|
||||
handleColor: '#aab6c6',
|
||||
height: 6,
|
||||
handleSize: 12,
|
||||
showDataShadow: false,
|
||||
filterMode: 'filter',
|
||||
textStyle: {
|
||||
color: '#ccc',
|
||||
},
|
||||
start: 0,
|
||||
end: 100,
|
||||
},
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
name: '个',
|
||||
nameTextStyle: {
|
||||
color: '#65d5ff',
|
||||
},
|
||||
type: 'value',
|
||||
splitNumber: 3,
|
||||
axisLabel: {
|
||||
textStyle: {
|
||||
color: '#65D5FF',
|
||||
fontStyle: 'normal',
|
||||
fontSize: 16,
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: 'rgba(77, 128, 254, 0.2)',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
nameTextStyle: {
|
||||
color: '#65d5ff',
|
||||
},
|
||||
min: 0,
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#233653',
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#233653',
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
color: '#78bdf5',
|
||||
},
|
||||
formatter: function (value) {
|
||||
return value * 100 + '%'
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: '变更',
|
||||
type: 'pictorialBar',
|
||||
barWidth: '50%',
|
||||
label: {
|
||||
normal: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(255, 64, 0, 0.8)', // 0% 处的颜色
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(0, 34, 66, 0.2)', // 100% 处的颜色
|
||||
},
|
||||
],
|
||||
globalCoord: false, // 缺省为 false
|
||||
}, //渐变颜色
|
||||
},
|
||||
},
|
||||
symbol:
|
||||
'path://M12.000,-0.000 C12.000,-0.000 16.074,60.121 22.731,60.121 C26.173,60.121 -3.234,60.121 0.511,60.121 C7.072,60.121 12.000,-0.000 12.000,-0.000 Z',
|
||||
|
||||
data: [23, 44, 22, 27, 12, 2, 3, 23, 12, 32],
|
||||
},
|
||||
{
|
||||
name: '新增',
|
||||
type: 'pictorialBar',
|
||||
barWidth: '50%',
|
||||
label: {
|
||||
normal: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(48, 236, 166,0.8)', // 0% 处的颜色
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(0, 34, 66, 0.2)', // 100% 处的颜色
|
||||
},
|
||||
],
|
||||
globalCoord: false, // 缺省为 false
|
||||
}, //渐变颜色
|
||||
},
|
||||
},
|
||||
symbol:
|
||||
'path://M12.000,-0.000 C12.000,-0.000 16.074,60.121 22.731,60.121 C26.173,60.121 -3.234,60.121 0.511,60.121 C7.072,60.121 12.000,-0.000 12.000,-0.000 Z',
|
||||
|
||||
data: [13, 24, 31, 12, 7, 3, 1, 23, 2, 42],
|
||||
},
|
||||
{
|
||||
name: '废弃',
|
||||
type: 'pictorialBar',
|
||||
barWidth: '50%',
|
||||
label: {
|
||||
normal: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(161, 159, 158, 0.8)', // 处的颜色
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(133, 133, 196, 0.2)', // 100% 处的颜色
|
||||
},
|
||||
],
|
||||
globalCoord: false, // 缺省为 false
|
||||
}, //渐变颜色
|
||||
},
|
||||
},
|
||||
symbol:
|
||||
'path://M12.000,-0.000 C12.000,-0.000 16.074,60.121 22.731,60.121 C26.173,60.121 -3.234,60.121 0.511,60.121 C7.072,60.121 12.000,-0.000 12.000,-0.000 Z',
|
||||
|
||||
data: [4, 3, 12, 4, 15, 2, 3, 12, 34, 23],
|
||||
},
|
||||
{
|
||||
name: '变化占比',
|
||||
type: 'line',
|
||||
data: [0.3, 0.5, 0.3, 0.35, 0.15, 0.05, 0.05, 0.3, 0.35, 0.4, 0.5],
|
||||
smooth: true,
|
||||
symbol: 'none',
|
||||
lineStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(255, 227, 168, 0.3)',
|
||||
},
|
||||
{
|
||||
offset: 0.5,
|
||||
color: 'rgba(255, 227, 168, 1)',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(255, 227, 168, 0.3)',
|
||||
},
|
||||
]),
|
||||
shadowColor: 'rgba(255, 120, 0,1)',
|
||||
shadowBlur: 10,
|
||||
},
|
||||
},
|
||||
yAxisIndex: 1,
|
||||
},
|
||||
{
|
||||
name: '变化占比',
|
||||
yAxisIndex: 1,
|
||||
type: 'effectScatter',
|
||||
showEffectOn: 'render',
|
||||
rippleEffect: {
|
||||
period: 5,
|
||||
scale: 3,
|
||||
brushType: 'stroke',
|
||||
},
|
||||
hoverAnimation: true,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(217,247,249,1)',
|
||||
shadowBlur: 10,
|
||||
shadowColor: '#333',
|
||||
},
|
||||
},
|
||||
data: [],
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,105 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import 'echarts-liquidfill/src/liquidFill.js'
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
grid: {
|
||||
top: 10,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '2%',
|
||||
containLabel: true,
|
||||
},
|
||||
backgroundColor: '#0F224C', //背景色
|
||||
series: [
|
||||
{
|
||||
type: 'liquidFill', //水位图
|
||||
radius: '80%', //显示比例
|
||||
center: ['50%', '50%'], //中心点
|
||||
amplitude: 20, //水波振幅
|
||||
data: [0.5, 0.5, 0.5], // data个数代表波浪数
|
||||
color: [
|
||||
{
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: '#446bf5',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: '#2ca3e2',
|
||||
},
|
||||
],
|
||||
globalCoord: false,
|
||||
},
|
||||
], //波浪颜色
|
||||
backgroundStyle: {
|
||||
borderWidth: 1, //外边框
|
||||
// borderColor: '#23cc72', //边框颜色
|
||||
color: 'RGBA(51, 66, 127, 0.7)', //边框内部填充部分颜色
|
||||
},
|
||||
label: {
|
||||
//标签设置
|
||||
position: ['50%', '45%'],
|
||||
formatter: '50%', //显示文本,
|
||||
textStyle: {
|
||||
fontSize: '52px', //文本字号,
|
||||
color: '#fff',
|
||||
},
|
||||
},
|
||||
outline: {
|
||||
// show: false
|
||||
borderDistance: 0,
|
||||
itemStyle: {
|
||||
borderWidth: 2,
|
||||
borderColor: '#112165',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,269 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const color = ['#3c90ff', '#fff225', '#24ffdf', '#ff9c3c', '#7536ff']
|
||||
const indicator = [
|
||||
{
|
||||
text: '文明村',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '卫生村',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '森林村庄',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '全面小康',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
{
|
||||
text: '景区村庄',
|
||||
min: 0,
|
||||
max: 100,
|
||||
},
|
||||
]
|
||||
const Data = [80, 61, 70, 86, 77]
|
||||
function setData() {
|
||||
return [
|
||||
{
|
||||
value: Data,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
lineStyle: {
|
||||
color: '#4BFFFC',
|
||||
shadowColor: '#4BFFFC',
|
||||
shadowBlur: 5,
|
||||
},
|
||||
shadowColor: '#4BFFFC',
|
||||
shadowBlur: 5,
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
normal: {
|
||||
// 单项区域填充样式
|
||||
color: {
|
||||
type: 'radial',
|
||||
x: 0.5, //右
|
||||
y: 0.5, //下
|
||||
r: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 1,
|
||||
color: '#4BFFFC',
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(0,0,0,0)',
|
||||
},
|
||||
],
|
||||
globalCoord: false,
|
||||
},
|
||||
opacity: 0.8, // 区域透明度
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
function setgauge(i) {
|
||||
return {
|
||||
type: 'gauge',
|
||||
detail: false,
|
||||
splitNumber: 10, //刻度数量
|
||||
radius: '80%', //图表尺寸
|
||||
center: ['50%', '50%'],
|
||||
startAngle: 90 + 72 * i + 18, //开始刻度的角度
|
||||
endAngle: 90 + 72 * (i + 1) - 18, //结束刻度的角度
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#66ccff',
|
||||
width: 1,
|
||||
},
|
||||
length: 6,
|
||||
splitNumber: 1,
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
function setSpot() {
|
||||
var scatterData = []
|
||||
Data.map((o, i) => {
|
||||
scatterData.push({
|
||||
value: [o, i],
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: color[i],
|
||||
borderColor: '#fff',
|
||||
borderWidth: 1,
|
||||
shadowColor: color[i],
|
||||
shadowBlur: 8,
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
return scatterData
|
||||
}
|
||||
|
||||
const options = {
|
||||
backgroundColor: '#0E1327',
|
||||
polar: {
|
||||
center: ['50%', '50%'],
|
||||
radius: '60%',
|
||||
},
|
||||
radar: {
|
||||
shape: 'circle',
|
||||
center: ['50%', '50%'],
|
||||
radius: '60%',
|
||||
indicator: indicator,
|
||||
axisName: {
|
||||
color: '#b7e9fd',
|
||||
fontSize: 13,
|
||||
padding: -20,
|
||||
},
|
||||
nameGap: 45,
|
||||
splitNumber: 4,
|
||||
splitArea: {
|
||||
// 坐标轴在 grid 区域中的分隔区域,默认不显示。
|
||||
show: true,
|
||||
areaStyle: {
|
||||
// 分隔区域的样式设置。
|
||||
color: ['rgba(27, 50, 66, 0.4)'],
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
//指向外圈文本的分隔线样式
|
||||
lineStyle: {
|
||||
color: '#5aa3d0',
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: 'rgba(99,192,251,0.2)', // 分隔线颜色
|
||||
width: 2, // 分隔线线宽
|
||||
},
|
||||
},
|
||||
},
|
||||
angleAxis: {
|
||||
type: 'category',
|
||||
data: name,
|
||||
minInterval: 1,
|
||||
boundaryGap: false,
|
||||
clockwise: false,
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
radiusAxis: {
|
||||
min: 0,
|
||||
max: 100,
|
||||
interval: 25,
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
//指向外圈文本的分隔线样式
|
||||
lineStyle: {
|
||||
color: '#5aa3d0',
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
fontSize: 12,
|
||||
color: '#5aa3d0',
|
||||
align: 'left',
|
||||
margin: -5,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
setgauge(0),
|
||||
setgauge(1),
|
||||
setgauge(2),
|
||||
setgauge(3),
|
||||
setgauge(4),
|
||||
{
|
||||
type: 'radar',
|
||||
silent: true,
|
||||
lineStyle: {
|
||||
color: '#66ffff',
|
||||
},
|
||||
areaStyle: {
|
||||
color: 'rgba(102, 255, 255, 0.31)',
|
||||
},
|
||||
data: setData(),
|
||||
},
|
||||
{
|
||||
type: 'scatter',
|
||||
coordinateSystem: 'polar',
|
||||
symbolSize: 20,
|
||||
data: setSpot(),
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,201 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
let color = ['#0E7CE2', '#FF8352', '#E271DE', '#F8456B', '#00FFFF', '#4AEAB0']
|
||||
let echartData = [
|
||||
{
|
||||
name: '设备1',
|
||||
value: '3720',
|
||||
},
|
||||
{
|
||||
name: '设备2',
|
||||
value: '2920',
|
||||
},
|
||||
{
|
||||
name: '设备3',
|
||||
value: '2200',
|
||||
},
|
||||
{
|
||||
name: '设备4',
|
||||
value: '1420',
|
||||
},
|
||||
]
|
||||
let formatNumber = function (num) {
|
||||
let reg = /(?=(\B)(\d{3})+$)/g
|
||||
return num.toString().replace(reg, ',')
|
||||
}
|
||||
|
||||
const options = {
|
||||
backgroundColor: '#364686',
|
||||
color: color,
|
||||
title: [
|
||||
{
|
||||
text: '设备数',
|
||||
x: 'center',
|
||||
top: '40%',
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 18,
|
||||
fontWeight: '100',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '60%',
|
||||
x: 'center',
|
||||
top: '50%',
|
||||
textStyle: {
|
||||
fontSize: 30,
|
||||
color: '#00f0ff',
|
||||
foontWeight: '500',
|
||||
},
|
||||
},
|
||||
],
|
||||
polar: {
|
||||
radius: ['44%', '50%'],
|
||||
center: ['50%', '50%'],
|
||||
},
|
||||
angleAxis: {
|
||||
max: 100,
|
||||
show: false,
|
||||
},
|
||||
radiusAxis: {
|
||||
type: 'category',
|
||||
show: true,
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
radius: ['55%', '67%'],
|
||||
center: ['50%', '50%'],
|
||||
data: echartData,
|
||||
hoverAnimation: false,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderColor: '#364684',
|
||||
borderWidth: 2,
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
normal: {
|
||||
length: 60,
|
||||
length2: 60,
|
||||
lineStyle: {
|
||||
color: '#e6e6e6',
|
||||
},
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
formatter: (params) => {
|
||||
return (
|
||||
'{icon|●}{name|' + params.name + '}\n{value|' + formatNumber(params.value) + '}'
|
||||
)
|
||||
},
|
||||
padding: [0, -70, 30, -70],
|
||||
rich: {
|
||||
icon: {
|
||||
fontSize: 14,
|
||||
align: 'left',
|
||||
padding: [4, 0, 0, 0],
|
||||
},
|
||||
name: {
|
||||
fontSize: 14,
|
||||
align: 'left',
|
||||
padding: [4, 0, 0, 0],
|
||||
color: '#fff',
|
||||
},
|
||||
value: {
|
||||
fontSize: 18,
|
||||
fontWeight: 'bold',
|
||||
color: '#fff',
|
||||
align: 'left',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
startAngle: 90,
|
||||
radius: '50%',
|
||||
hoverAnimation: false,
|
||||
center: ['50%', '50%'],
|
||||
itemStyle: {
|
||||
normal: {
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(50,171,241, 1)',
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(55,70,130, 0)',
|
||||
},
|
||||
]),
|
||||
// borderWidth: 1,
|
||||
// borderColor: '',
|
||||
shadowBlur: 10,
|
||||
// shadowColor: 'rgba(55,70,130, 1)'
|
||||
},
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 100,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,147 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
|
||||
const options = {
|
||||
title: [
|
||||
{
|
||||
text: '已完成',
|
||||
x: 'center',
|
||||
top: '52%',
|
||||
textStyle: {
|
||||
color: '#FFFFFF',
|
||||
fontSize: 16,
|
||||
fontWeight: '100',
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '75%',
|
||||
x: 'center',
|
||||
y: 'center',
|
||||
textStyle: {
|
||||
fontSize: '12',
|
||||
color: '#FFFFFF',
|
||||
fontFamily: 'DINAlternate-Bold, DINAlternate',
|
||||
foontWeight: '600',
|
||||
},
|
||||
},
|
||||
],
|
||||
backgroundColor: '#111',
|
||||
polar: {
|
||||
radius: ['42%', '52%'],
|
||||
center: ['50%', '50%'],
|
||||
},
|
||||
angleAxis: {
|
||||
max: 100,
|
||||
show: false,
|
||||
},
|
||||
radiusAxis: {
|
||||
type: 'category',
|
||||
show: true,
|
||||
axisLabel: {
|
||||
show: false,
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '',
|
||||
type: 'bar',
|
||||
roundCap: true,
|
||||
barWidth: 30,
|
||||
showBackground: true,
|
||||
backgroundStyle: {
|
||||
color: 'rgba(66, 66, 66, .3)',
|
||||
},
|
||||
data: [60],
|
||||
coordinateSystem: 'polar',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
|
||||
{
|
||||
offset: 0,
|
||||
color: '#16CEB9',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: '#6648FF',
|
||||
},
|
||||
]),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
startAngle: 80,
|
||||
radius: ['56%'],
|
||||
hoverAnimation: false,
|
||||
center: ['50%', '50%'],
|
||||
itemStyle: {
|
||||
color: 'rgba(66, 66, 66, .1)',
|
||||
borderWidth: 1,
|
||||
borderColor: '#5269EE',
|
||||
},
|
||||
data: [100],
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
startAngle: 80,
|
||||
radius: ['38%'],
|
||||
hoverAnimation: false,
|
||||
center: ['50%', '50%'],
|
||||
itemStyle: {
|
||||
color: 'rgba(66, 66, 66, .1)',
|
||||
borderWidth: 1,
|
||||
borderColor: '#5269EE',
|
||||
},
|
||||
data: [100],
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,437 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
var data = [],
|
||||
data2 = []
|
||||
var trafficWay = [
|
||||
{
|
||||
name: '病假',
|
||||
value: 20,
|
||||
},
|
||||
{
|
||||
name: '事假',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
name: '婚假',
|
||||
value: 30,
|
||||
},
|
||||
{
|
||||
name: '丧假',
|
||||
value: 40,
|
||||
},
|
||||
{
|
||||
name: '年休假',
|
||||
value: 40,
|
||||
},
|
||||
]
|
||||
var color = [
|
||||
'#2A8BFD',
|
||||
'#BAFF7F',
|
||||
'#00FAC1',
|
||||
'#00CAFF',
|
||||
'#FDE056',
|
||||
'#4ED33C',
|
||||
'#FF8A26',
|
||||
'#FF5252',
|
||||
'#9689FF',
|
||||
'#CB00FF',
|
||||
]
|
||||
for (var i = 0; i < trafficWay.length; i++) {
|
||||
data.push(
|
||||
{
|
||||
value: trafficWay[i].value,
|
||||
name: trafficWay[i].name,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderWidth: 8,
|
||||
shadowBlur: 20,
|
||||
borderRadius: 20,
|
||||
borderColor: color[i],
|
||||
shadowColor: color[i],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
name: '',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
color: 'rgba(0, 0, 0, 0)',
|
||||
borderColor: 'rgba(0, 0, 0, 0)',
|
||||
borderWidth: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
data2.push(
|
||||
{
|
||||
value: trafficWay[i].value,
|
||||
name: trafficWay[i].name,
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
name: '',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
color: 'rgba(0, 0, 0, 0)',
|
||||
borderColor: 'rgba(0, 0, 0, 0)',
|
||||
borderWidth: 0,
|
||||
opacity: 0.2,
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
let angle = 0 //角度,用来做简单的动画效果的
|
||||
|
||||
const option = {
|
||||
backgroundColor: '#061740',
|
||||
color: color,
|
||||
legend: {
|
||||
right: '10%',
|
||||
top: '10%',
|
||||
icon: 'rect',
|
||||
itemWidth: 15,
|
||||
itemHeight: 15,
|
||||
textStyle: {
|
||||
color: '#ffffff',
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
//外线1
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||
startAngle: ((0 + angle) * Math.PI) / 180,
|
||||
endAngle: ((90 + angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//内线1
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
|
||||
startAngle: ((180 + angle) * Math.PI) / 180,
|
||||
endAngle: ((270 + angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//外线2
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||
startAngle: ((270 + -angle) * Math.PI) / 180,
|
||||
endAngle: ((40 + -angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//外线2
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
return {
|
||||
type: 'arc',
|
||||
shape: {
|
||||
cx: api.getWidth() / 3,
|
||||
cy: api.getHeight() / 2,
|
||||
r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
|
||||
startAngle: ((90 + -angle) * Math.PI) / 180,
|
||||
endAngle: ((220 + -angle) * Math.PI) / 180,
|
||||
},
|
||||
style: {
|
||||
stroke: '#4EE9E6',
|
||||
fill: 'transparent',
|
||||
lineWidth: 1.5,
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点1
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||
let point = getCirlPoint(x0, y0, r, 90 + -angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点2
|
||||
name: 'ring5', //绿点
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
|
||||
let point = getCirlPoint(x0, y0, r, 270 + -angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点3
|
||||
name: 'ring5',
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||
let point = getCirlPoint(x0, y0, r, 90 + angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
//绿点4
|
||||
name: 'ring5', //绿点
|
||||
type: 'custom',
|
||||
coordinateSystem: 'none',
|
||||
renderItem: function (params, api) {
|
||||
let x0 = api.getWidth() / 3
|
||||
let y0 = api.getHeight() / 2
|
||||
let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6
|
||||
let point = getCirlPoint(x0, y0, r, 270 + angle)
|
||||
return {
|
||||
type: 'circle',
|
||||
shape: {
|
||||
cx: point.x,
|
||||
cy: point.y,
|
||||
r: 4,
|
||||
},
|
||||
style: {
|
||||
stroke: '#66FFFF', //粉
|
||||
fill: '#66FFFF',
|
||||
},
|
||||
silent: true,
|
||||
}
|
||||
},
|
||||
data: [0],
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
clockWise: false,
|
||||
radius: ['98%', '95%'],
|
||||
hoverAnimation: false,
|
||||
center: ['33.33%', '50%'],
|
||||
top: 'center',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: data,
|
||||
},
|
||||
{
|
||||
type: 'pie',
|
||||
top: 'center',
|
||||
startAngle: 90,
|
||||
clockwise: false,
|
||||
center: ['33.33%', '50%'],
|
||||
legendHoverLink: false,
|
||||
hoverAnimation: false,
|
||||
radius: ['94%', '55%'],
|
||||
itemStyle: {
|
||||
opacity: 0.15,
|
||||
},
|
||||
label: {
|
||||
show: false,
|
||||
position: 'center',
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: data2,
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
type: 'pie',
|
||||
clockWise: false,
|
||||
center: ['33.33%', '50%'],
|
||||
radius: ['39%', '38%'],
|
||||
hoverAnimation: false,
|
||||
top: 'center',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: data,
|
||||
},
|
||||
],
|
||||
}
|
||||
//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
|
||||
function getCirlPoint(x0, y0, r, angle) {
|
||||
let x1 = x0 + r * Math.cos((angle * Math.PI) / 180)
|
||||
let y1 = y0 + r * Math.sin((angle * Math.PI) / 180)
|
||||
return {
|
||||
x: x1,
|
||||
y: y1,
|
||||
}
|
||||
}
|
||||
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
draw(chart)
|
||||
return chart
|
||||
}
|
||||
function draw(chart) {
|
||||
angle = angle + 3
|
||||
chart.setOption(option, true)
|
||||
//window.requestAnimationFrame(draw);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
|
||||
setInterval(function () {
|
||||
//用setInterval做动画感觉有问题
|
||||
draw(chart)
|
||||
}, 100)
|
||||
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,338 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
let props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
let datalist = [
|
||||
{
|
||||
name: '公共平台',
|
||||
},
|
||||
{
|
||||
name: '系统0000',
|
||||
},
|
||||
{
|
||||
name: '系统0011',
|
||||
},
|
||||
{
|
||||
name: '系统0022',
|
||||
},
|
||||
{
|
||||
name: '系统0033',
|
||||
},
|
||||
{
|
||||
name: '系统0044',
|
||||
},
|
||||
{
|
||||
name: '系统0055',
|
||||
},
|
||||
{
|
||||
name: '系统11',
|
||||
},
|
||||
{
|
||||
name: '系统22',
|
||||
},
|
||||
{
|
||||
name: '系统33',
|
||||
},
|
||||
{
|
||||
name: '系统44',
|
||||
},
|
||||
{
|
||||
name: '系统55',
|
||||
},
|
||||
{
|
||||
name: '系统66',
|
||||
},
|
||||
{
|
||||
name: '系统77',
|
||||
},
|
||||
{
|
||||
name: '系统88',
|
||||
},
|
||||
{
|
||||
name: '系统99',
|
||||
},
|
||||
]
|
||||
let linksData = [
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0000',
|
||||
value: 1044305,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0011',
|
||||
value: 651527,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0022',
|
||||
value: 651527,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0033',
|
||||
value: 486710,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0044',
|
||||
value: 212670,
|
||||
},
|
||||
{
|
||||
source: '公共平台',
|
||||
target: '系统0055',
|
||||
value: 210400,
|
||||
},
|
||||
{
|
||||
source: '系统0011',
|
||||
target: '系统11',
|
||||
value: 645246,
|
||||
},
|
||||
{
|
||||
source: '系统0022',
|
||||
target: '系统22',
|
||||
value: 513275,
|
||||
},
|
||||
{
|
||||
source: '系统0011',
|
||||
target: '系统33',
|
||||
value: 282986,
|
||||
},
|
||||
{
|
||||
source: '系统0011',
|
||||
target: '系统44',
|
||||
value: 118655,
|
||||
},
|
||||
{
|
||||
source: '系统0022',
|
||||
target: '系统55',
|
||||
value: 105989,
|
||||
},
|
||||
{
|
||||
source: '系统0022',
|
||||
target: '系统66',
|
||||
value: 95100,
|
||||
},
|
||||
{
|
||||
source: '系统0033',
|
||||
target: '系统77',
|
||||
value: 87796,
|
||||
},
|
||||
{
|
||||
source: '系统0044',
|
||||
target: '系统88',
|
||||
value: 47658,
|
||||
},
|
||||
{
|
||||
source: '系统0055',
|
||||
target: '系统99',
|
||||
value: 243660,
|
||||
},
|
||||
]
|
||||
let Color = [
|
||||
'#61FEFF',
|
||||
'#937FE6',
|
||||
'#2B56D3',
|
||||
'#87E7AA',
|
||||
'#937FE6',
|
||||
'#FF9B97',
|
||||
'#8f23f5',
|
||||
'#0576ea',
|
||||
'#2cb8cf',
|
||||
'#8A7EE0',
|
||||
'#2cb8cf',
|
||||
'#4e70f0',
|
||||
'#1fa3de',
|
||||
'#bbc951',
|
||||
'#FFC14B',
|
||||
'#b785a6',
|
||||
]
|
||||
let Color1 = [
|
||||
'#04E0F3',
|
||||
'#682EFC',
|
||||
'#35A7FE',
|
||||
'#0DC09F',
|
||||
'#682EFC',
|
||||
'#ED6663',
|
||||
'#8f23f5',
|
||||
'#0576ea',
|
||||
'#2cb8cf',
|
||||
'#8A7EE0',
|
||||
'#2cb8cf',
|
||||
'#4e70f0',
|
||||
'#1fa3de',
|
||||
'#bbc951',
|
||||
'#FFC14B',
|
||||
'#b785a6',
|
||||
]
|
||||
let sourceLabel = [
|
||||
'right',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
'left',
|
||||
]
|
||||
let itemStyleColor = []
|
||||
let labelSource = []
|
||||
for (let i = 0; i < datalist.length; i++) {
|
||||
datalist[i].label = {
|
||||
normal: {
|
||||
position: sourceLabel[i],
|
||||
},
|
||||
}
|
||||
labelSource.push(sourceLabel[i])
|
||||
}
|
||||
for (let d = 0; d < datalist.length; d++) {
|
||||
datalist[d].itemStyle = {
|
||||
normal: {
|
||||
// color: Color[d]
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 1,
|
||||
x2: 0,
|
||||
y2: 0,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 1,
|
||||
color: Color[d], // 0% 处的颜色
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: Color1[d], // 100% 处的颜色
|
||||
},
|
||||
],
|
||||
global: false, // 缺省为 false
|
||||
},
|
||||
},
|
||||
}
|
||||
itemStyleColor.push(datalist[d])
|
||||
}
|
||||
|
||||
const options = {
|
||||
backgroundColor: '#031d7a',
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
triggerOn: 'mousemove',
|
||||
formatter: function (params) {
|
||||
if (params.name == '公共平台') {
|
||||
return ' 公共平台 '
|
||||
} else {
|
||||
let value = params.data.value
|
||||
if (!value && value !== 0) return 0
|
||||
let str = value.toString()
|
||||
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||
if (params.data.source == '公共平台') {
|
||||
return params.data.target + ' : ' + str.replace(reg, '$1,')
|
||||
} else {
|
||||
return params.data.source + ' : ' + str.replace(reg, '$1,')
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'sankey',
|
||||
layout: 'none',
|
||||
top: '4%',
|
||||
bottom: '12%',
|
||||
left: '20',
|
||||
right: '20',
|
||||
nodeGap: 15,
|
||||
nodeWidth: 25,
|
||||
focusNodeAdjacency: 'allEdges',
|
||||
data: itemStyleColor,
|
||||
links: linksData,
|
||||
label: {
|
||||
normal: {
|
||||
color: '#fff',
|
||||
fontSize: 14,
|
||||
formatter: function (params) {
|
||||
if (params.data.name == '公共平台') {
|
||||
let strs = params.data.name.split('') //字符串数组
|
||||
let str = ''
|
||||
for (let i = 0, s; (s = strs[i++]); ) {
|
||||
//遍历字符串数组
|
||||
str += s
|
||||
if (!(i % 1)) str += '\n' //按需要求余
|
||||
}
|
||||
return '{white|' + str + '}'
|
||||
} else {
|
||||
return params.data.name
|
||||
}
|
||||
},
|
||||
rich: {
|
||||
white: {
|
||||
fontSize: 16,
|
||||
lineHeight: 30,
|
||||
padding: [0, 0, 0, -26],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
lineStyle: {
|
||||
normal: {
|
||||
opacity: 0.4,
|
||||
color: 'source',
|
||||
curveness: 0.5,
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderWidth: 1,
|
||||
borderColor: 'transparent',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
let chart = echarts.init(document.getElementById(props.id))
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
<template>
|
||||
<div :id="id" :class="className" :style="{ height: height, width: width }" ref="chartsRef" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as echarts from 'echarts'
|
||||
import { EChartsType } from 'echarts/core'
|
||||
import { onMounted, ref } from 'vue'
|
||||
const chartsRef = ref<HTMLElement | null>()
|
||||
|
||||
const props = defineProps({
|
||||
className: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
xAxisData: {
|
||||
type: Array,
|
||||
default: () => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
},
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {},
|
||||
},
|
||||
seriesData: {
|
||||
type: Array,
|
||||
default: () => [150, 230, 224, 218, 135, 147, 260],
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'chart',
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '200px',
|
||||
},
|
||||
})
|
||||
const options = {
|
||||
grid: {
|
||||
top: 10,
|
||||
left: '2%',
|
||||
right: '2%',
|
||||
bottom: '2%',
|
||||
containLabel: true,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: props.xAxisData,
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: props.seriesData,
|
||||
type: 'line',
|
||||
},
|
||||
],
|
||||
...props.config,
|
||||
}
|
||||
let chart: EChartsType
|
||||
const initChart = () => {
|
||||
const chart = echarts.init(chartsRef.value)
|
||||
chart.setOption(options)
|
||||
return chart
|
||||
}
|
||||
onMounted(() => {
|
||||
chart = initChart()
|
||||
window.addEventListener('resize', function () {
|
||||
chart && chart.resize()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.7 KiB |
|
|
@ -1,31 +0,0 @@
|
|||
<template>
|
||||
<div class="echarts-map">
|
||||
<el-card class="info">Echarts 实现飞线图、地图增加图标、高亮</el-card>
|
||||
<migration-charts height="100%" width="100%" id="migration" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import MigrationCharts from './components/migration/index.vue'
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.echarts-map {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: #001540;
|
||||
box-sizing: border-box;
|
||||
.info {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
font-weight: bold;
|
||||
z-index: 9;
|
||||
}
|
||||
::v-deep(.el-card) {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import MigrationCharts from '../components/migration/index.vue'
|
||||
import MigrationCharts from '@/components/DataScreen/migrationEcharts/index.vue'
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<bar-charts height="200px" width="100%" id="bar" /> </el-card
|
||||
></el-col>
|
||||
></el-col>
|
||||
<el-col :xs="24" :sm="12" :lg="8">
|
||||
<el-card class="box-card">
|
||||
<template #header>
|
||||
|
|
@ -95,34 +95,34 @@
|
|||
</u-container-layout>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import LineCharts from './components/simple/line.vue'
|
||||
import BarCharts from './components/simple/bar.vue'
|
||||
import PieCharts from './components/simple/pie.vue'
|
||||
import ScatterCharts from './components/simple/scatter.vue'
|
||||
import GaugeCharts from './components/simple/gauge.vue'
|
||||
import FunnelCharts from './components/simple/funnel.vue'
|
||||
import CandlestickCharts from './components/simple/candlestick.vue'
|
||||
import GraphCharts from './components/simple/graph.vue'
|
||||
import PictorialBar from '@/views/echarts/components/simple/pictorialBar.vue'
|
||||
import LineCharts from './components/line.vue'
|
||||
import BarCharts from './components/bar.vue'
|
||||
import PieCharts from './components/pie.vue'
|
||||
import ScatterCharts from './components/scatter.vue'
|
||||
import GaugeCharts from './components/gauge.vue'
|
||||
import FunnelCharts from './components/funnel.vue'
|
||||
import CandlestickCharts from './components/candlestick.vue'
|
||||
import GraphCharts from './components/graph.vue'
|
||||
import PictorialBar from './components/pictorialBar.vue'
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 14px;
|
||||
}
|
||||
.text {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.item {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
.item {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.box-card {
|
||||
margin-bottom: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
.box-card {
|
||||
margin-bottom: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="advancedForm">
|
||||
<script lang="ts" setup >
|
||||
import AdvancedForm from "@/components/SearchForm/advancedForm/index.vue"
|
||||
import {reactive, ref} from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
</u-container-layout>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="advancedForm">
|
||||
<script lang="ts" setup >
|
||||
import { reactive, ref } from 'vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Upload from './components/Upload.vue'
|
||||
|
|
@ -140,13 +140,7 @@ const rules = reactive({
|
|||
const submitForm = async (formEl: FormInstance | undefined) => {
|
||||
console.log('--FORM---', ruleForm)
|
||||
if (!formEl) return
|
||||
await formEl.validate((valid, fields) => {
|
||||
if (valid) {
|
||||
console.log('submit!')
|
||||
} else {
|
||||
console.log('error submit!', fields)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
const resetForm = (formEl: FormInstance | undefined) => {
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@
|
|||
import { User } from '@element-plus/icons-vue'
|
||||
import AvatarLogo from '@/assets/image/avatar.png'
|
||||
import CountTo from '@/components/CountTo/index.vue'
|
||||
import BarCharts from '@/views/echarts/components/simple/bar.vue'
|
||||
import BarCharts from '@/views/echarts/simple/components/bar.vue'
|
||||
|
||||
const goTo = (url) => {
|
||||
window.open(url, '_blank')
|
||||
|
|
|
|||
Loading…
Reference in New Issue