gongchunyi
2 天以前 0a251e40e30e7c8a96d71b3b9b6c459d4dfa4b22
src/views/reportAnalysis/productionAnalysis/components/center-center.vue
@@ -2,7 +2,7 @@
  <div>
    <!-- 设备统计 -->
    <div class="equipment-stats">
      <div class="equipment-header">
      <div class="equipment-header clickable" @click="handleNavigate">
        <img
          src="@/assets/BI/shujutongjiicon@2x.png"
          alt="图标"
@@ -10,8 +10,12 @@
        />
        <span class="equipment-title">投入产出分析</span>
      </div>
      <div class="filters-row">
        <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" />
      </div>
      <Echarts
        ref="chart"
        ref="chartRef"
        :chartStyle="chartStyle"
        :grid="grid"
        :legend="lineLegend"
@@ -27,11 +31,25 @@
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ref, onMounted, inject, watch, nextTick } from 'vue'
import { useRouter } from 'vue-router'
import * as echarts from 'echarts'
import Echarts from '@/components/Echarts/echarts.vue'
import { productInOutAnalysis } from '@/api/viewIndex.js'
import { inputOutputAnalysis } from '@/api/viewIndex.js'
import DateTypeSwitch from "@/views/reportAnalysis/productionAnalysis/components/DateTypeSwitch.vue";
import { getProductionRoute } from '../productionNavigation.js'
const router = useRouter()
const handleNavigate = () => {
  const path = getProductionRoute('投入产出分析')
  if (path) {
    router.push(path)
  }
}
const dateType = ref(3) // 1=周 2=月 3=季度
const chartRef = ref(null)
const chartStyle = { width: '100%', height: '100%' }
const grid = {
  left: '3%',
@@ -50,8 +68,8 @@
  itemHeight: 12,
  textStyle: { color: '#B8C8E0', fontSize: 14 },
  data: [
    { name: '出库', itemStyle: { color: 'rgba(11, 137, 254, 1)' } },
    { name: '入库', itemStyle: { color: 'rgba(11, 249, 254, 1)' } },
    { name: '产出', itemStyle: { color: 'rgba(11, 137, 254, 1)' } },
    { name: '投入', itemStyle: { color: 'rgba(11, 249, 254, 1)' } },
  ],
}
@@ -78,9 +96,13 @@
  },
]
const handleDateTypeChange = () => {
  fetchData()
}
const lineSeries = ref([
  {
    name: '出库',
    name: '产出',
    type: 'line',
    smooth: false,
    showSymbol: true,
@@ -98,7 +120,7 @@
    emphasis: { focus: 'series' },
  },
  {
    name: '入库',
    name: '投入',
    type: 'line',
    smooth: false,
    showSymbol: true,
@@ -132,13 +154,14 @@
}
const fetchData = () => {
  productInOutAnalysis({ type: 1 })
  inputOutputAnalysis({ type: dateType.value })
    .then((res) => {
      if (res.code === 200 && Array.isArray(res.data)) {
        const list = res.data
        xAxis1.value[0].data = list.map((d) => d.date)
        lineSeries.value[0].data = list.map((d) => Number(d.outCount) || 0)
        lineSeries.value[1].data = list.map((d) => Number(d.inCount) || 0)
        lineSeries.value[0].data = list.map((d) => Number(d.outputSum) || 0)
        lineSeries.value[1].data = list.map((d) => Number(d.inputSum) || 0)
        scheduleChartResize()
      }
    })
    .catch((err) => {
@@ -146,8 +169,24 @@
    })
}
const scheduleChartResize = () => {
  nextTick(() => {
    ;[0, 150, 400].forEach((ms) => {
      setTimeout(() => chartRef.value?.resize?.(), ms)
    })
  })
}
const dataDashboardRefreshTick = inject('dataDashboardRefreshTick', null)
if (dataDashboardRefreshTick) {
  watch(dataDashboardRefreshTick, () => {
    fetchData()
  })
}
onMounted(() => {
  fetchData()
  scheduleChartResize()
})
</script>
@@ -176,6 +215,14 @@
  padding-bottom: 2px;
}
.equipment-header.clickable {
  cursor: pointer;
}
.equipment-header.clickable:hover .equipment-title {
  opacity: 0.85;
}
.equipment-title {
  font-weight: 500;
  font-size: 18px;
@@ -190,4 +237,10 @@
  width: 50px;
  height: 50px;
}
.filters-row {
  display: flex;
  justify-content: flex-end;
  align-items: center;
}
</style>