gaoluyang
2025-12-11 3791cb8c977f753dfabd0d48a161dd8bff11b4b4
src/views/reportAnalysis/dataDashboard/index.vue
@@ -53,8 +53,49 @@
        </div>
        <!-- 质量统计 -->
<!--            <div class="panel-header">-->
<!--               <span class="panel-title">近4个月质量统计</span>-->
<!--            </div>-->
<!--            <div class="main-panel">-->
<!--               <div class="panel-item-customers">-->
<!--                  <div class="quality-cards">-->
<!--                     <div class="quality-cardSec">-->
<!--                        <div class="quality-card one"></div>-->
<!--                        <div class="quality-cardTitle">-->
<!--                           <div>原材料已检测数</div>-->
<!--                           <div>{{qualityStatisticsObject.supplierNum}}件</div>-->
<!--                        </div>-->
<!--                     </div>-->
<!--                     <div class="quality-cardSec">-->
<!--                        <div class="quality-card two"></div>-->
<!--                        <div class="quality-cardTitle">-->
<!--                           <div>过程检验数量</div>-->
<!--                           <div>{{qualityStatisticsObject.processNum}}件</div>-->
<!--                        </div>-->
<!--                     </div>-->
<!--                     <div class="quality-cardSec">-->
<!--                        <div class="quality-card three"></div>-->
<!--                        <div class="quality-cardTitle">-->
<!--                           <div>出厂已检数量</div>-->
<!--                           <div>{{qualityStatisticsObject.factoryNum}}件</div>-->
<!--                        </div>-->
<!--                     </div>-->
<!--                  </div>-->
<!--                  <Echarts ref="chart"-->
<!--                               :chartStyle="chartStyle"-->
<!--                               :grid="grid"-->
<!--                               :legend="barLegend"-->
<!--                               :series="barSeries1"-->
<!--                               :tooltip="tooltip"-->
<!--                               :xAxis="xAxis1"-->
<!--                               :yAxis="yAxis1"-->
<!--                               :options="{backgroundColor: 'transparent', textStyle: {color: '#B8C8E0'}}"-->
<!--                               style="height: 260px"></Echarts>-->
<!--               </div>-->
<!--            </div>-->
<!--         </div>-->
            <div class="panel-header">
               <span class="panel-title">质量统计</span>
               <span class="panel-title">近4个月仓库统计</span>
            </div>
            <div class="main-panel">
               <div class="panel-item-customers">
@@ -62,24 +103,24 @@
                     <div class="quality-cardSec">
                        <div class="quality-card one"></div>
                        <div class="quality-cardTitle">
                           <div>原材料已检测数</div>
                           <div>入库数量</div>
                           <div>{{qualityStatisticsObject.supplierNum}}件</div>
                        </div>
                     </div>
                     <div class="quality-cardSec">
                        <div class="quality-card two"></div>
                        <div class="quality-cardTitle">
                           <div>过程检验数量</div>
                           <div>出库数量</div>
                           <div>{{qualityStatisticsObject.processNum}}件</div>
                        </div>
                     </div>
                     <div class="quality-cardSec">
                        <div class="quality-card three"></div>
                        <div class="quality-cardTitle">
                           <div>出厂已检数量</div>
                           <div>{{qualityStatisticsObject.factoryNum}}件</div>
                        </div>
                     </div>
<!--                     <div class="quality-cardSec">-->
<!--                        <div class="quality-card three"></div>-->
<!--                        <div class="quality-cardTitle">-->
<!--                           <div>出厂已检数量</div>-->
<!--                           <div>{{qualityStatisticsObject.factoryNum}}件</div>-->
<!--                        </div>-->
<!--                     </div>-->
                  </div>
                  <Echarts ref="chart"
                               :chartStyle="chartStyle"
@@ -126,52 +167,77 @@
        <div class="equipment-stats">
          <div class="equipment-header">
                  <img src="@/assets/BI/shujutongjiicon@2x.png" alt="图标" class="equipment-icon" />
            <span class="equipment-title">设备统计</span>
                  <span class="equipment-title">生产统计</span>
          </div>
          <div class="equipment-items">
            <div class="equipment-item">
              <span class="equipment-value">{{equipmentNum}}</span>
              <span class="equipment-label">设备总数</span>
                     <span class="equipment-value">{{noWorkListLength}}</span>
                     <span class="equipment-label">待排产</span>
            </div>
            <div class="equipment-item">
              <span class="equipment-value">{{equipmentRepair}}</span>
              <span class="equipment-label">待维修设备</span>
                     <span class="equipment-value">{{workListLength}}</span>
                     <span class="equipment-label">已排产</span>
            </div>
            <div class="equipment-item">
              <span class="equipment-value">{{equipmentMaintain}}</span>
              <span class="equipment-label">待保养设备</span>
                     <span class="equipment-value">{{noListPageProcessLength}}</span>
                     <span class="equipment-label">待报工</span>
            </div>
            <div class="equipment-item">
              <span class="equipment-value">{{totalMeasuring}}</span>
              <span class="equipment-label">计量器具总数</span>
                     <span class="equipment-value">{{listPageProcessLength}}</span>
                     <span class="equipment-label">已报工</span>
                  </div>
               </div>
            </div>
            <!-- 合格率 -->
            <div class="equipment-stats">
               <div class="equipment-header">
                  <img src="@/assets/BI/shujutongjiicon@2x.png" alt="图标" class="equipment-icon" />
                  <span class="equipment-title">质检统计</span>
               </div>
               <div class="equipment-items">
                  <div class="equipment-item">
                     <span class="equipment-value">{{rawMaterialQualifiedRate}}%</span>
                     <span class="equipment-label">原材料合格率</span>
                  </div>
                  <div class="equipment-item">
                     <span class="equipment-value">{{processQualifiedRate}}%</span>
                     <span class="equipment-label">过程合格率</span>
                  </div>
                  <div class="equipment-item">
                     <span class="equipment-value">{{factoryQualifiedRate}}%</span>
                     <span class="equipment-label">出厂合格率</span>
                  </div>
                  <div class="equipment-item">
                     <span class="equipment-value">{{inventoryTurnoverRate}}%</span>
                     <span class="equipment-label">库存周转率</span>
            </div>
          </div>
        </div>
        <!-- 事件名称 -->
        <div class="event-info">
          <div class="event-header">
                  <img src="@/assets/BI/shijianmingxiicon@2x.png" alt="图标" class="event-icon" />
            <span class="event-title">事件名称</span>
          </div>
          <div class="event-content">
                  <ul class="todo-list" v-if="todoList.length > 0" ref="refTodoList">
   <li v-for="item in todoList" :key="item.id">
    <div style="display: flex;flex-direction: column;justify-content: space-between;width: 100%;gap: 20px">
     <div style="display: flex;justify-content: space-between;align-items: center;">
      <div class="todo-title">待办编号:{{item.approveId}}</div>
      <div class="todo-division">部门:{{item.approveDeptName}}</div>
      <div class="todo-time">{{item.approveTime}}</div>
     </div>
     <div class="todo-division">待办事由:{{item.approveReason}}</div>
    </div>
   </li>
 </ul>
                  <div v-else style="text-align: center">
                     暂无数据
                  </div>
          </div>
        </div>
            <!--        <div class="event-info">-->
            <!--          <div class="event-header">-->
            <!--                  <img src="@/assets/BI/shijianmingxiicon@2x.png" alt="图标" class="event-icon" />-->
            <!--            <span class="event-title">事件名称</span>-->
            <!--          </div>-->
            <!--          <div class="event-content">-->
            <!--                  <ul class="todo-list" v-if="todoList.length > 0" ref="refTodoList"> -->
            <!--   <li v-for="item in todoList" :key="item.id"> -->
            <!--    <div style="display: flex;flex-direction: column;justify-content: space-between;width: 100%;gap: 20px"> -->
            <!--     <div style="display: flex;justify-content: space-between;align-items: center;"> -->
            <!--      <div class="todo-title">待办编号:{{item.approveId}}</div> -->
            <!--      <div class="todo-division">部门:{{item.approveDeptName}}</div> -->
            <!--      <div class="todo-time">{{item.approveTime}}</div> -->
            <!--     </div> -->
            <!--     <div class="todo-division">待办事由:{{item.approveReason}}</div> -->
            <!--    </div> -->
            <!--   </li> -->
            <!-- </ul>-->
            <!--                  <div v-else style="text-align: center">-->
            <!--                     暂无数据-->
            <!--                  </div>-->
            <!--          </div>-->
            <!--        </div>-->
            
            <div class="financial-header">
               <span class="financial-title">财务分析</span>
@@ -191,7 +257,7 @@
                               :xAxis="xAxis3"
                               :yAxis="yAxis3"
                               :options="{backgroundColor: 'transparent', textStyle: {color: '#B8C8E0'}}"
                               style="height: 300px"></Echarts>
                               style="height: 280px"></Echarts>
               </div>
            </div>
      </div>
@@ -205,11 +271,11 @@
            <div class="panel-item-customers">
               <div style="display: flex;justify-content: space-between;margin-bottom: 20px;">
                  <div class="section-title">应收应付统计</div>
                  <el-radio-group v-model="radio1" size="large" @change="statisticsReceivable" class="custom-radio-group">
                     <el-radio-button label="按周" :value="1" />
                     <el-radio-button label="按月" :value="2" />
                     <el-radio-button label="按季度" :value="3" />
                  </el-radio-group>
                  <!--                  <el-radio-group v-model="radio1" size="large" @change="statisticsReceivable" class="custom-radio-group">-->
                  <!--                     <el-radio-button label="按周" :value="1" />-->
                  <!--                     <el-radio-button label="按月" :value="2" />-->
                  <!--                     <el-radio-button label="按季度" :value="3" />-->
                  <!--                  </el-radio-group>-->
               </div>
               <Echarts ref="chart"
                            :color="barColors2"
@@ -245,7 +311,7 @@
import useUserStore from '@/store/modules/user'
import {
   analysisCustomerContractAmounts, getAmountHalfYear,
   homeTodos,
   homeTodos, qualityProductQualifiedRate,
   qualityStatistics,
   statisticsReceivablePayable
} from "@/api/viewIndex.js";
@@ -257,6 +323,8 @@
import {getUpkeepPage} from "@/api/equipmentManagement/upkeep.js";
import {measuringInstrumentListPage} from "@/api/equipmentManagement/measurementEquipment.js";
import {listPageAnalysis} from "@/api/financialManagement/expenseManagement.js";
import {workListPage} from "@/api/productionManagement/productionReporting.js";
import {listPageProcess} from "@/api/productionManagement/operationScheduling.js";
// 全屏相关状态
const isFullscreen = ref(false);
@@ -312,6 +380,14 @@
const equipmentRepair = ref(0)
const equipmentMaintain = ref(0)
const totalMeasuring = ref(0)
const rawMaterialQualifiedRate = ref(0)
const processQualifiedRate = ref(0)
const factoryQualifiedRate = ref(0)
const inventoryTurnoverRate = ref(0)
const noWorkListLength = ref(0)
const workListLength = ref(0)
const noListPageProcessLength = ref(0)
const listPageProcessLength = ref(0)
const pieTooltip = reactive({
   trigger: 'item',
   formatter: function (params) {
@@ -412,7 +488,7 @@
const barLegend = {
   show: true,
   textStyle: { color: '#B8C8E0' },
   data: ['原材料不合格数', '过程不合格数', '出厂不合格数']
   data: ['原材料合格数', '过程合格数', '出厂合格数']
}
const barLegend1 = {
   show: true,
@@ -487,7 +563,7 @@
])
const barSeries1 = ref([
   {
      name: '原材料不合格数',
      name: '原材料合格数',
      type: 'bar',
      barGap: 0,
      emphasis: {
@@ -509,7 +585,7 @@
      data: []
   },
   {
      name: '过程不合格数',
      name: '过程合格数',
      type: 'bar',
      emphasis: {
         focus: 'series'
@@ -530,7 +606,7 @@
      data: []
   },
   {
      name: '出厂不合格数',
      name: '出厂合格数',
      type: 'bar',
      emphasis: {
         focus: 'series'
@@ -640,6 +716,15 @@
      qualityStatisticsObject.value.factoryNum = res.data.factoryNum
   })
}
// 产品合格率
const qualityProductQualifiedRateInfo = () => {
   qualityProductQualifiedRate().then((res) => {
      rawMaterialQualifiedRate.value = res.data.rawMaterialQualifiedRate
      processQualifiedRate.value = res.data.processQualifiedRate
      factoryQualifiedRate.value = res.data.factoryQualifiedRate
      inventoryTurnoverRate.value = res.data.inventoryTurnoverRate
   })
}
// 财务统计
const accountStatisticsInfo = () => {
   listPageAnalysis().then((res) => {
@@ -649,6 +734,36 @@
      barSeries11.value[2].data = res.data.netIncome
   })
}
// 生产数据
const workListPageInfo = () => {
   const params = {
      current: -1,
      size: -1,
      status: 3
   }
   const params1 = {
      current: -1,
      size: -1,
      status: 1
   }
   // 已报工查询
   workListPage(params).then(res => {
      workListLength.value = res.data.records.length
   })
   // 已排产查询
   listPageProcess(params).then(res => {
      listPageProcessLength.value = res.data.records.length
   })
   // 待报工查询
   workListPage(params1).then(res => {
      noWorkListLength.value = res.data.records.length
   })
   // 待排产查询
   listPageProcess(params1).then(res => {
      noListPageProcessLength.value = res.data.records.length
   })
}
const getNum = () => {
   const params = {
      pageNum: -1,
@@ -669,7 +784,7 @@
      pageNum: -1,
      pageSize: -1,
   }
   getLedgerPage(params).then((res) => {
   getLedgerPage({}).then((res) => {
      equipmentNum.value = res.data.total
   });
   getRepairPage(params).then((res) => {
@@ -982,7 +1097,9 @@
  window.addEventListener('resize', handleResize)
  analysisCustomer()
  qualityStatisticsInfo()
   qualityProductQualifiedRateInfo()
   accountStatisticsInfo()
   workListPageInfo()
  getNum()
  getLedgerNum()
  todoInfoS()
@@ -1164,7 +1281,7 @@
   border: 1px solid #1A58B0;
   padding: 18px;
   width: 100%;
   height: 540px;
   height: 520px;
}
.panel-title-second {
   height: 60px;