| | |
| | | <!-- 巡检任务详情 --> |
| | | <template> |
| | | <common-title title="巡检任务情况" :style="{ marginLeft: pxToRem(14) }" @details="detailsFun"> |
| | | </common-title> |
| | | <common-title title="巡检任务情况" :style="{ marginLeft: pxToRem(14) }" @details="detailsFun"></common-title> |
| | | <div class="inspection-rask-details"> |
| | | <div class="inspection-num"> |
| | | <div class="total"> |
| | |
| | | <div class="name">总任务数</div> |
| | | </div> |
| | | <div class="status"> |
| | | <div v-for="item in list"> |
| | | <div :style="{ color: item.color }" class="value"> |
| | | {{ jobStatistics[item.field] }} |
| | | <div class="item" v-for="(item, index) in list" :key="index"> |
| | | <div> |
| | | <div :style="{ color: item.color }" class="value"> |
| | | {{ jobStatistics[item.field] }} |
| | | </div> |
| | | <div class="name">{{ item.name }}</div> |
| | | </div> |
| | | <div class="name">{{ item.name }}</div> |
| | | <div v-if="index !== 2 && index !== 4" class="right-line"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | import { getJobNumBar, getJobStatistics, getTotalJobNum } from '@/api/home' |
| | | import dayjs from 'dayjs' |
| | | import InspectionRaskDetailsDialog from '@/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue' |
| | | import useEchartsResize from '@/hooks/useEchartsResize' |
| | | const currenDate = dayjs().format('YYYY-MM-DD') |
| | | const newTime = ref([currenDate, currenDate]) |
| | | const list = ref([ |
| | | { name: '计划执行', value: 89, color: '#FFFFFF', field: 'planned_executions' }, |
| | | { name: '执行中', value: 100, color: '#FFA768', field: 'running_num' }, |
| | | { name: '待执行', value: 66, color: '#FFE17E', field: 'pending_executions' }, |
| | | { name: '已执行', value: 10, color: '#8EFFAC', field: 'executed' }, |
| | | { name: '执行失败', value: 10, color: '#FF8E8E', field: 'failed_executions' }, |
| | | { name: '计划执行', value: 0, color: '#FFFFFF', field: 'planned_executions' }, |
| | | { name: '执行中', value: 0, color: '#FFA768', field: 'running_num' }, |
| | | { name: '待执行', value: 0, color: '#FFE17E', field: 'pending_executions' }, |
| | | { name: '已执行', value: 0, color: '#8EFFAC', field: 'executed' }, |
| | | { name: '执行失败', value: 0, color: '#FF8E8E', field: 'failed_executions' }, |
| | | ]) |
| | | const option = { |
| | | grid: { |
| | |
| | | }, |
| | | }, |
| | | } |
| | | |
| | | // 是否展示巡检任务详情 |
| | | const isShowDetailsDialog = ref(false) |
| | | const detailsFun = () => { |
| | | console.log(isShowDetailsDialog.value) |
| | | isShowDetailsDialog.value = true |
| | | |
| | | } |
| | | |
| | | let chart = null |
| | | const chartRef = ref(null) |
| | | let { chart } = useEchartsResize(chartRef) |
| | | |
| | | // TODAY,CURRENT_WEEK,CURRENT_MONTH,CURRENT_YEAR |
| | | const getData = (value, date_enum) => { |
| | |
| | | getJobNumBar(params).then(res => { |
| | | option.xAxis.data = res.data?.data.map(item => item.name) |
| | | option.series.data = res.data?.data.map(item => item.value) |
| | | chart.setOption(option) |
| | | chart.value.setOption(option) |
| | | }) |
| | | } |
| | | |
| | | const chartRef = ref(null) |
| | | const total = ref(0) |
| | | const jobStatistics = ref({ |
| | | planned_executions: 0, |
| | |
| | | }) |
| | | |
| | | onMounted(() => { |
| | | chart = echarts.init(chartRef.value) |
| | | // 监听窗口大小变化 |
| | | window.addEventListener('resize', () => { |
| | | chart?.resize() |
| | | }) |
| | | getTotalJobNum().then(res => { |
| | | total.value = res.data?.data || 0 |
| | | }) |
| | |
| | | padding: 16px 16px; |
| | | width: 390px; |
| | | height: 414px; |
| | | background: linear-gradient( |
| | | 270deg, |
| | | rgba(31, 62, 122, 0) 0%, |
| | | rgba(31, 62, 122, 0.35) 21%, |
| | | #1f3e7a 100% |
| | | ); |
| | | background: linear-gradient(270deg, rgba(31, 62, 122, 0) 0%, rgba(31, 62, 122, 0.35) 21%, #1f3e7a 100%); |
| | | border-radius: 0px 0px 0px 0px; |
| | | opacity: 0.85; |
| | | |
| | | .inspection-num { |
| | | background: url('@/assets/images/home/homeLeft/inspection-num.png') no-repeat center / 100% 100%; |
| | | width: 360px; |
| | | height: 118px; |
| | | width: 378px; |
| | | height: 110px; |
| | | position: relative; |
| | | |
| | | .total { |
| | | position: absolute; |
| | | left: 34px; |
| | | top: 44px; |
| | | left: 20px; |
| | | top: 36px; |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | color: #ffffff; |
| | |
| | | |
| | | .status { |
| | | position: absolute; |
| | | top: 8px; |
| | | right: 10px; |
| | | width: 200px; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 8px; |
| | | justify-content: flex-start; |
| | | line-height: 22px; |
| | | padding: 0 10px 10px 0; |
| | | left: 115px; |
| | | width: 250px; |
| | | height: 110px; |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | grid-template-rows: repeat(1, 30px); // 设置每行高度 |
| | | gap: 10px 0; // 调整行间距 |
| | | align-content: center; |
| | | |
| | | .item { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .right-line { |
| | | width: 0px; |
| | | height: 36px; |
| | | border-radius: 0px 0px 0px 0px; |
| | | border: 1px solid; |
| | | border-image: linear-gradient(180deg, rgba(27, 148, 255, 0), rgba(27, 148, 255, 1), rgba(27, 148, 255, 0)) 1 1; |
| | | margin-left: 10px; |
| | | } |
| | | .name { |
| | | width: 56px; |
| | | text-align: center; |
| | | font-family: Source Han Sans CN, Source Han Sans CN; |
| | | font-weight: 400; |
| | | font-size: 14px; |
| | | color: #ffffff; |
| | | margin-top: -4px; |
| | | } |
| | | |
| | | .value { |
| | | width: 56px; |
| | | text-align: center; |
| | | font-family: YouSheBiaoTiHei, YouSheBiaoTiHei; |
| | | font-weight: 400; |
| | | font-size: 26px; |