gongchunyi
14 小时以前 00ec5af9784585ebc2dab13d56c0bfedc8693fee
src/views/reportAnalysis/productionAnalysis/components/right-top.vue
@@ -2,6 +2,9 @@
  <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"
@@ -20,13 +23,16 @@
<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 }
@@ -37,7 +43,6 @@
  data: ['开工', '完成', '良品率'],
}
// 柱状图:开工、完成;折线图:良品率(颜色 rgba(90, 216, 166, 1))
const chartSeries = ref([
  {
    name: '开工',
@@ -111,6 +116,7 @@
const xAxis1 = ref([
  { type: 'category', axisTick: { show: false }, axisLabel: { color: '#B8C8E0' }, data: [] },
])
const yAxis1 = [
  { type: 'value', name: '件', axisLabel: { color: '#B8C8E0' }, nameTextStyle: { color: '#B8C8E0' } },
  {
@@ -124,26 +130,25 @@
  },
]
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)
    })
}
@@ -159,6 +164,14 @@
  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;