|
@@ -21,10 +21,10 @@
|
|
|
<div class="box2">
|
|
|
<div class="box2-title">类型统计</div>
|
|
|
<div class="box2-right">
|
|
|
- <Chart :option="chartOption2" style="width: 500px; height: 100%" />
|
|
|
+ <Chart ref="chartRef" :option="chartOption2" style="width: 500px; height: 100%" />
|
|
|
<div class="legend-box">
|
|
|
- <div v-for="(item, index) in legendData" :key="index" class="legend-item">
|
|
|
- <span class="dot" :style="{ backgroundColor: getColor(index) }"></span>{{ item.name }}:{{ item.value }}
|
|
|
+ <div v-for="(item, index) in legendData" :key="index" class="legend-item" @click="handleClickLegend(item)">
|
|
|
+ <span class="dot" :style="{ backgroundColor: getColor(item.checked, index) }"></span>{{ item.name }}:{{ item.value }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -69,14 +69,17 @@ import BigNumber from 'bignumber.js';
|
|
|
import useMapStore from '@/store/modules/map';
|
|
|
|
|
|
const mapStore = useMapStore();
|
|
|
-let colorList = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];
|
|
|
+let chartRef = ref();
|
|
|
+let colorList = ['#00dc98', '#ff3349', '#10b3ff', '#ef9330', '#f6e900', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];
|
|
|
let dataList = ref([]);
|
|
|
let legendData = ref([]);
|
|
|
let chartOption1 = reactive(option4);
|
|
|
let chartOption2 = reactive(option5);
|
|
|
|
|
|
-const getColor = (index) => {
|
|
|
- if (colorList[index]) {
|
|
|
+const getColor = (checked, index) => {
|
|
|
+ if (!checked) {
|
|
|
+ return '#edf2fa';
|
|
|
+ } else if (colorList[index]) {
|
|
|
return colorList[index];
|
|
|
} else {
|
|
|
return '#edf2fa';
|
|
@@ -97,6 +100,15 @@ const getOption = (data, key = 'dataType') => {
|
|
|
return path.toString();
|
|
|
};
|
|
|
|
|
|
+const handleClickLegend = (item) => {
|
|
|
+ item.checked = !item.checked;
|
|
|
+ const newSelected = {};
|
|
|
+ legendData.value.forEach((item) => {
|
|
|
+ newSelected[item.name] = !!item.checked;
|
|
|
+ });
|
|
|
+ chartOption2.legend.selected = newSelected;
|
|
|
+};
|
|
|
+
|
|
|
watch(
|
|
|
() => mapStore.pointType,
|
|
|
() => {
|
|
@@ -211,11 +223,21 @@ watch(
|
|
|
'44': getCountPointInfoTypeErtongfulijigou,
|
|
|
'45': getCountPointInfoTypeYangLaoJiGou
|
|
|
};
|
|
|
- let method = methodList[dataList.value[0].dataType];
|
|
|
+ let dataType = null;
|
|
|
+ for (let i = 0; i < dataList.value.length; i++) {
|
|
|
+ if (dataList.value[i].checked) {
|
|
|
+ dataType = dataList.value[i].dataType;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let method = methodList[dataType];
|
|
|
if (!method) return;
|
|
|
method().then((res) => {
|
|
|
legendData.value = res.rows;
|
|
|
- chartOption2.legend = { show: false };
|
|
|
+ chartOption2.legend.data = legendData.value;
|
|
|
+ res.rows.forEach((row) => {
|
|
|
+ row.checked = true;
|
|
|
+ });
|
|
|
chartOption2.series[0].data = res.rows;
|
|
|
});
|
|
|
} else {
|
|
@@ -322,6 +344,7 @@ const handleClick = (item) => {
|
|
|
align-items: center;
|
|
|
margin-bottom: 20px;
|
|
|
margin-right: 20px;
|
|
|
+ cursor: pointer;
|
|
|
}
|
|
|
.dot {
|
|
|
display: inline-block;
|