| | |
| | | <div> |
| | | <PanelHeader title="工单执行效率分析" /> |
| | | <div class="main-panel panel-item-customers"> |
| | | <div class="filters-row"> |
| | | <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" /> |
| | | </div> |
| | | <Echarts |
| | | ref="chart" |
| | | :chartStyle="chartStyle" |
| | |
| | | |
| | | <script setup> |
| | | import { ref, onMounted } from 'vue' |
| | | import { qualityStatistics } from '@/api/viewIndex.js' |
| | | import { workOrderEfficiencyAnalysis } from '@/api/viewIndex.js' |
| | | import PanelHeader from './PanelHeader.vue' |
| | | import Echarts from '@/components/Echarts/echarts.vue' |
| | | import DateTypeSwitch from './DateTypeSwitch.vue' |
| | | |
| | | const dateType = ref(1) // 1=周 2=月 3=季度 |
| | | |
| | | const chartStyle = { |
| | | width: '100%', |
| | | height: '160%', |
| | | height: '140%', |
| | | } |
| | | |
| | | const grid = { left: '3%', right: '4%', bottom: '3%', top: '10%', containLabel: true } |
| | |
| | | }, |
| | | ] |
| | | |
| | | const handleDateTypeChange = () => { |
| | | fetchData() |
| | | } |
| | | |
| | | const fetchData = () => { |
| | | qualityStatistics() |
| | | workOrderEfficiencyAnalysis({ dateType: dateType.value }) |
| | | .then((res) => { |
| | | if (!res?.data?.item || !Array.isArray(res.data.item)) return |
| | | const items = res.data.item |
| | | if (res.code !== 200 || !Array.isArray(res.data)) return |
| | | const items = res.data |
| | | xAxis1.value[0].data = items.map((d) => d.date) |
| | | // 开工:过程检验数 |
| | | chartSeries.value[0].data = items.map((d) => Number(d.processNum) || 0) |
| | | // 完成:出厂数 |
| | | chartSeries.value[1].data = items.map((d) => Number(d.factoryNum) || 0) |
| | | // 良品率:出厂数/过程数*100(无单独接口时用此占位) |
| | | chartSeries.value[2].data = items.map((d) => { |
| | | const processNum = Number(d.processNum) || 0 |
| | | const factoryNum = Number(d.factoryNum) || 0 |
| | | if (processNum <= 0) return 0 |
| | | return Math.min(100, Math.round((factoryNum / processNum) * 100)) |
| | | }) |
| | | // 开工 |
| | | chartSeries.value[0].data = items.map((d) => Number(d.startQuantity) || 0) |
| | | // 完成 |
| | | chartSeries.value[1].data = items.map((d) => Number(d.finishQuantity) || 0) |
| | | // 良品率 |
| | | chartSeries.value[2].data = items.map((d) => Math.min(100, parseFloat(d.yieldRate) || 0)) |
| | | }) |
| | | .catch((err) => { |
| | | console.error('获取开工与良品率数据失败:', err) |
| | | console.error('获取工单执行效率分析失败:', err) |
| | | }) |
| | | } |
| | | |
| | |
| | | gap: 20px; |
| | | } |
| | | |
| | | .filters-row { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | gap: 12px; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .panel-item-customers { |
| | | border: 1px solid #1a58b0; |
| | | padding: 18px; |