| | |
| | | </div> |
| | | </div> |
| | | <div class="nestCenter"> |
| | | <div class="chart" ref="echartsRef" ></div> |
| | | |
| | | <div class="chart" ref="echartsRef" v-if="!isEmptyData"></div> |
| | | <div v-else> |
| | | <el-empty> |
| | | <template #description> |
| | | <span class="custom-text">暂无数据</span> |
| | | </template> |
| | | </el-empty> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | import jc1 from '@/assets/images/workbench/jc1.png'; |
| | | import jc2 from '@/assets/images/workbench/jc2.png'; |
| | | import { industryJobNumPieChart } from '@/api/home/index'; |
| | | import { nextTick } from 'vue'; |
| | | |
| | | const echartsRef = ref(null); |
| | | let { chart: jcchart } = useEchartsResize(echartsRef); |
| | | const jcOrder = ref([]); |
| | |
| | | const params = reactive({ |
| | | date_enum: props.dateSelect, |
| | | }); |
| | | // 空数据计算 |
| | | const isEmptyData = computed(() => { |
| | | return jcOrder.value.length === 0 || |
| | | jcOrder.value.every(item => !item.name || item.value === 0) |
| | | }) |
| | | // 图表初始化 |
| | | const initChart = () => { |
| | | if (echartsRef.value && !jcchart.value) { |
| | | jcchart.value = echarts.init(echartsRef.value) |
| | | } |
| | | } |
| | | // 获取机巢事件数据 |
| | | const getIndustryJobNumPieChart = () => { |
| | | industryJobNumPieChart(params).then(res => { |
| | | const resList = res?.data?.data || []; |
| | | jcOrder.value = resList; |
| | | pieInit(resList); |
| | | if (resList.length > 0) { |
| | | nextTick(() => { |
| | | initChart() |
| | | pieInit(resList) |
| | | }) |
| | | } |
| | | }); |
| | | }; |
| | | watch( |
| | |
| | | { immediate: true } |
| | | ); |
| | | const pieInit = resList => { |
| | | const validData = resList.filter(item => item.name).sort((a, b) => b.value - a.value); // 从大到小排序 |
| | | if (!jcchart.value || !resList?.length) return |
| | | const validData = resList?.filter(item => item.name).sort((a, b) => b.value - a.value); // 从大到小排序 |
| | | const colors = [ |
| | | '#F87E04', // 橙色 |
| | | '#FFC400', // 黄色 |
| | |
| | | axisLabel: { color: '#7C8091' }, |
| | | axisLine: { lineStyle: { color: '#D1D1D1' } }, |
| | | axisTick: { show: false }, |
| | | // 4. 确保排序后的数据从上到下显示(最大值在顶部) |
| | | // 确保排序后的数据从上到下显示(最大值在顶部) |
| | | inverse: true, |
| | | }, |
| | | series: [ |
| | |
| | | ], |
| | | }; |
| | | |
| | | // 5. 设置图表选项 |
| | | jcchart.value.setOption(option, true); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getIndustryJobNumPieChart(); |
| | | |
| | | }); |
| | | onBeforeUnmount(() => { |
| | | if (jcchart.value) { |
| | | jcchart.value.dispose() |
| | | jcchart.value = null |
| | | } |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .machineNest { |
| | | width: 100%; |
| | | .custom-text { |
| | | font-size: 14px; |
| | | color: #7C8091; |
| | | .custom-text { |
| | | font-size: 14px; |
| | | color: #7c8091; |
| | | } |
| | | .nestTop { |
| | | .card-title { |
| | |
| | | color: #383838; |
| | | } |
| | | .status-value { |
| | | font-family: 'Source Han Sans CN'; |
| | | font-family: 'Source Han Sans CN'; |
| | | font-weight: bold; |
| | | font-size: 20px; |
| | | } |