@ued_fpi/data-visual
Version:
<br /> <br /> <div style="text-align:center"> <b style="font-size:30px">@ued_fpi/data-visual</b> <p>基于Vite4+TypeScript的Vue3大屏组件库开发框架</p> <img style="display:inline" src="https://img.shields.io/npm/v/@ued_fpi/data-visual" />
131 lines (128 loc) • 5.05 kB
JavaScript
import { defineComponent, ref, reactive, onMounted, nextTick, watch, toRefs, openBlock, createElementBlock, createElementVNode, createVNode, Fragment, renderList, unref, normalizeStyle, toDisplayString, createBlock, createCommentVNode } from 'vue';
import dayjs from 'dayjs';
import { sumBy } from 'lodash-es';
import _sfc_main$2 from '../common/common-arrow.vue.mjs';
import '../common/common-arrow.vue2.mjs';
import { pieChartOptions } from '../../utils/echarts/echartsOptions.mjs';
import _sfc_main$1 from '../../utils/echarts/BaseECharts.vue.mjs';
import { getWaterQualityData } from './api/index.mjs';
const _hoisted_1 = { class: "dv-wgms-water-category" };
const _hoisted_2 = { class: "section-water-quality-lengend" };
const _hoisted_3 = { class: "name" };
const _hoisted_4 = { class: "flex-num" };
const _hoisted_5 = { class: "num" };
const _hoisted_6 = /* @__PURE__ */ createElementVNode("span", { class: "split" }, "/", -1);
const _hoisted_7 = { class: "percent" };
const _hoisted_8 = /* @__PURE__ */ createElementVNode("span", { class: "text" }, "同比", -1);
const _hoisted_9 = { class: "arrow-compare" };
const _sfc_main = /* @__PURE__ */ defineComponent({
...{
name: "DvWgmsWaterQualityClassification",
title: "水质类别占比"
},
__name: "index",
props: {
params: { default: () => {
return {
controlLevel: "001",
treeId: "3301",
startTime: dayjs().startOf("year").valueOf(),
endTime: dayjs().endOf("year").valueOf(),
timeType: "day"
};
} },
data: { default: () => {
return [];
} },
isLazy: { type: Boolean, default: false }
},
setup(__props, { expose: __expose }) {
const props = __props;
const chartPie = ref();
const option = ref(void 0);
const wgmsData = reactive({
list: []
});
onMounted(() => {
!props.isLazy && getResData();
});
const getResData = async () => {
if (props.data && props.data.length) {
wgmsData.list = props.data;
await nextTick();
loadChart(wgmsData.list);
return;
}
const { data: res } = await getWaterQualityData(props.params);
res && (wgmsData.list = res);
await nextTick();
loadChart(wgmsData.list);
};
const loadChart = (list2) => {
const seriesData = list2.map((item) => {
return {
name: item.waterQuality,
value: item.count
};
});
const colorList = list2.map((item) => {
return item.waterQualityColor;
});
const total = sumBy(list2, (o) => {
return o.count;
});
option.value = pieChartOptions(seriesData, colorList, total);
};
watch([() => props.params, () => props.data, () => props.isLazy], () => {
!props.isLazy && getResData();
}, { deep: true });
__expose({
reload: getResData
});
const {
list
} = toRefs(wgmsData);
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", _hoisted_1, [
createElementVNode("div", {
ref_key: "chartPie",
ref: chartPie,
class: "chart-pie"
}, [
createVNode(_sfc_main$1, { options: option.value }, null, 8, ["options"])
], 512),
createElementVNode("div", _hoisted_2, [
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(list), (item) => {
return openBlock(), createElementBlock("div", {
key: item.waterQuality,
class: "lengend-item"
}, [
createElementVNode("span", {
class: "icon",
style: normalizeStyle({ background: item.waterQualityColor })
}, null, 4),
createElementVNode("span", _hoisted_3, toDisplayString(item.waterQuality), 1),
createElementVNode("div", _hoisted_4, [
createElementVNode("span", _hoisted_5, toDisplayString(item.count === null ? "--" : item.count), 1),
_hoisted_6,
createElementVNode("span", _hoisted_7, toDisplayString(item.percent === null ? "--" : `${item.percent}%`), 1)
]),
_hoisted_8,
createElementVNode("span", {
class: "compare",
style: normalizeStyle({ color: item.yoyPercent === null ? "--" : item.yoyPercent > 0 ? "var(--dv-color-success)" : item.yoyPercent < 0 ? "var(--dv-color-danger)" : "var(--dv-color-index)" })
}, toDisplayString(item.yoyPercent === null ? "--" : `${Math.abs(item.yoyPercent)}%`), 5),
createElementVNode("div", _hoisted_9, [
item.yoyPercent !== null ? (openBlock(), createBlock(_sfc_main$2, {
key: 0,
direction: item.yoyPercent > 0 ? "up" : item.yoyPercent < 0 ? "down" : "flat"
}, null, 8, ["direction"])) : createCommentVNode("", true)
])
]);
}), 128))
])
]);
};
}
});
export { _sfc_main as default };