forked from drone/command-center-dashboard

chenyao
2025-04-01 523bb8621ab2e37f4882ce82b4001e2ba24a3810
feat: 增加巡检任务详情和巡检列表接口
3 files modified
89 ■■■■■ changed files
src/api/home/index.js 14 ●●●● patch | view | raw | blame | history
src/api/home/machineNest.js 6 ●●●● patch | view | raw | blame | history
src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue 69 ●●●● patch | view | raw | blame | history
src/api/home/index.js
@@ -51,7 +51,7 @@
// 任务成果
export const getMediaFileCountBy = () => {
  return request({
    url: 'blade-resource/media/api/v1/workspaces/files/getMediaFileCountBy',
    url: '/blade-resource/media/api/v1/workspaces/files/getMediaFileCountBy',
    method: 'get',
  });
};
@@ -59,7 +59,7 @@
// 降本增效
export const optimizeCostEfficiency = () => {
  return request({
    url: 'drone-device-core/manage/api/v1/devices/optimizeCostEfficiency',
    url: '/drone-device-core/manage/api/v1/devices/optimizeCostEfficiency',
    method: 'get',
  });
};
@@ -67,7 +67,7 @@
// 历史巡检任务列表
export const getBeforeJob = (data) => {
  return request({
    url: 'drone-device-core/wayline/waylineJobInfo/beforeJob',
    url: '/drone-device-core/wayline/waylineJobInfo/beforeJob',
    method: 'post',
    data
  });
@@ -75,7 +75,7 @@
// 当前巡检任务列表
export const getTodayJob = (data) => {
  return request({
    url: 'drone-device-core/wayline/waylineJobInfo/todayJob',
    url: '/drone-device-core/wayline/waylineJobInfo/todayJob',
    method: 'post',
    data
  });
@@ -84,15 +84,15 @@
// 巡检任务详情 柱状图
export const jobNumBar = (data) => {
  return request({
    url: 'drone-device-core/wayline/waylineJobInfo/jobNumBar',
    url: '/drone-device-core/wayline/waylineJobInfo/jobEventBar',
    method: 'post',
    data
  });
};
// 巡检任务详情 饼图
export const industryJobNumPieChart = (data) => {
export const eventNumPie = (data) => {
  return request({
    url: '/drone-device-core/wayline/waylineJobInfo/industryJobNumPieChart',
    url: '/drone-device-core/jobEvent/eventNumPie',
    method: 'post',
    data
  });
src/api/home/machineNest.js
@@ -3,7 +3,7 @@
// 机巢统计
export const getDeviceInfoNum = () => {
  return request({
    url: 'drone-device-core/manage/api/v1/devices/getDeviceInfoNum',
    url: '/drone-device-core/manage/api/v1/devices/getDeviceInfoNum',
    method: 'get',
    params: {},
  });
@@ -11,7 +11,7 @@
// 机巢列表
export const selectDevicePage = (params) => {
  return request({
    url: `drone-device-core/manage/api/v1/devices/selectDevicePage?type=${params.type}&current=${params.current}&size=${params.size}`,
    url: `/drone-device-core/manage/api/v1/devices/selectDevicePage?type=${params.type}&current=${params.current}&size=${params.size}`,
    method: 'post',
    data: {
      nickname: params.nickname,
@@ -22,7 +22,7 @@
// 机巢数据
export const getFlightStatistics = (dockSn) => {
  return request({
    url: `drone-device-core/manage/api/v1/devices/getFlightStatistics?dockSn=${dockSn}`,
    url: `/drone-device-core/manage/api/v1/devices/getFlightStatistics?dockSn=${dockSn}`,
    method: 'get',
    params: {},
  });
src/views/SignMachineNest/components/MachineLeft/InspectionRaskDetails.vue
@@ -2,7 +2,7 @@
<template>
    <common-title title="巡检任务详情" :style="{ marginLeft: pxToRem(14) }"></common-title>
    <div class="inspection-rask-details">
        <CommonDateTime :style="{ top: pxToRem(14),marginLeft: pxToRem(10) }"></CommonDateTime>
        <CommonDateTime :style="{ top: pxToRem(14),marginLeft: pxToRem(10) }" v-model="newTime" @change="getData"></CommonDateTime>
        <div class="chart-container" ref="chartRef"></div>
        <div class="pie-container" ref="pieRef"></div>
    </div>
@@ -10,15 +10,20 @@
<script setup>
import * as echarts from 'echarts';
import dayjs from 'dayjs';
import { pxToRem } from '@/utils/rem';
import CommonTitle from '@/components/CommonTitle.vue';
import CommonDateTime from '@/components/CommonDateTime.vue';
import { jobNumBar, industryJobNumPieChart } from '@/api/home/index.js'
import { jobNumBar, eventNumPie } from '@/api/home/index.js'
// 日期
const currenDate = dayjs().format('YYYY-MM-DD');
const newTime = ref([currenDate, currenDate]);
// 统计图
const chartRef = ref(null);
const pieRef = ref(null);
onMounted(() => {
    const chart = echarts.init(chartRef.value);
    const option = {
        tooltip: {
            trigger: 'axis',
@@ -34,14 +39,14 @@
            containLabel: true
        },
        legend: {
            data: ['计划任务', '实际任务'],
        data: ['任务', '事件'],
            textStyle: {
                color: '#fff'
            }
        },
        xAxis: {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月', '6月'],
        // data: ['1月', '2月', '3月', '4月', '5月', '6月'],
            axisLine: {
                lineStyle: {
                    color: '#fff'
@@ -69,10 +74,10 @@
        },
        series: [
            {
                name: '计划任务',
            name: '任务',
                type: 'bar',
                barWidth: '20%',
                data: [10, 15, 20, 25, 30, 35],
            // data: [10, 15, 20, 25, 30, 35],
                itemStyle: {
                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                        { offset: 0, color: '#1EE7E7' },
@@ -81,10 +86,10 @@
                }
            },
            {
                name: '实际任务',
            name: '事件',
                type: 'bar',
                barWidth: '20%',
                data: [15, 20, 25, 30, 35, 40],
            // data: [15, 20, 25, 30, 35, 40],
                itemStyle: {
                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                        { offset: 0, color: '#0070FF' },
@@ -95,9 +100,8 @@
        ]
    };
    
    chart.setOption(option);
// chart.setOption(option);
    const pieChart = echarts.init(pieRef.value);
    const pieOption = {
        tooltip: {
            trigger: 'item',
@@ -156,17 +160,48 @@
            }
        ]
    };
let chart = null;
let pieChart = null;
    
// TODAY,CURRENT_WEEK,CURRENT_MONTH,CURRENT_YEAR
const getData = (value,date_enum) => {
    const params = {
        device_sn: '',
        date_enum,
        // start_date: newTime.value[0],
        // end_date: newTime.value[1]
    };
    // 获取柱状图
    jobNumBar(params).then(res => {
        if (res.data.code !== 0) return;
        option.xAxis.data = res.data?.data.map(item => item.name);
        option.series[0].data = res.data?.data.map(item => item.data[0].value);
        option.series[1].data = res.data?.data.map(item => item.data[1].value);
        chart.setOption(option);
    })
    // 获取饼状图
    eventNumPie(params).then(res => {
        if (res.data.code!== 0) return;
        // 更新饼图数据
        const updatedPieData = pieOption.series[0].data.map(item => {
            const matchedData = res.data?.data.find(dataItem => dataItem.name === item.name);
            return {
                ...item,
                value: matchedData ? matchedData.value : item.value
            };
        });
        pieOption.series[0].data = updatedPieData;
    pieChart.setOption(pieOption);
    })
};
onMounted(() => {
    chart= echarts.init(chartRef.value);
    pieChart = echarts.init(pieRef.value);
    window.addEventListener('resize', () => {
        chart.resize();
        pieChart.resize();
    });
});
onMounted(() => {
  getMachineData();
    getData(newTime.value, 'TODAY');
});
</script>