licp
2024-12-17 e1e998c6cecd43a1006bfeb1bec447cf048cca57
统计增加工时统计
已修改6个文件
253 ■■■■■ 文件已修改
src/assets/api/controller.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tool/echart.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-daily-business-statistics.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b4-inspection-item-statistics.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/index-index.vue 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/util/echarts.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -318,6 +318,8 @@
  addSchedule: "/report/addSchedule", //首页-->添加日程
  ScheduleByMe: "/report/ScheduleByMe", //首页-->我的日程
  testProductByDay: "/report/testProductByDay", //首检测项目统计
  manHourByStation: "/report/manHourByStation", //首页工时统计
  manHourByPerson: "/report/manHourByPerson", //首页工时统计
}
const certification = {
  getCertificationDetail: "/certification/getCertificationDetail", //查询资质明细列表
src/components/tool/echart.vue
@@ -82,6 +82,8 @@
            case 'gauge':
            iuCharts.drawGauge(this.chart,this.datas)
              break;
            case 'pie0':
              iuCharts.drawPie0(this.chart,this.datas)
            default:
              break;
          }
src/components/view/b4-daily-business-statistics.vue
@@ -214,9 +214,14 @@
      this.$axios.get(this.$api.report.businessStatisticsByDay+'?startTime='+this.startTime+'&endTime='+this.endTime+'&type='+this.type).then(res => {
        if (res.code == 201) return
        this.pageData = this.HaveJson(res.data)
        console.log(3333,res.data)
        let xData = res.data.DAYS.map(m=>{
          let arr = m.split('-')
          if(this.type=='年'){
            return `${arr[1]}月`
          }else{
          return `${arr[1]}-${arr[2]}`
          }
        })
        this.chartData0.xData = xData
        this.chartData1.xData = xData
src/components/view/b4-inspection-item-statistics.vue
@@ -257,8 +257,11 @@
        if (res.code == 201) return
        this.pageData = this.HaveJson(res.data)
        let xData = res.data.DAYS.map(m=>{
          let arr = m.split('-')
          if(this.type=='年'){
            return `${arr[1]}月`
          }else{
          return `${arr[1]}-${arr[2]}`
          }
        })
        this.chartData0.xData = xData
        this.chartData1.xData = xData
src/components/view/index-index.vue
@@ -85,9 +85,9 @@
  .right-2-body{
    width: 100%;
    margin-top: 20px;
    display: flex;
    /* display: flex;
    align-items: start;
    justify-content: space-between;
    justify-content: space-between; */
  }
  >>>.el-calendar__header {
    display: none;
@@ -353,12 +353,58 @@
        </div>
        <div class="right-2 card">
          <div class="right-2-title">
            <span style="color: #333333;font-size: 16px;">我的日程</span>
            <span style="cursor: pointer;font-size: 12px;
color: #3A7BFA;" @click="dialogVisible=true">添加我的日程</span>
            <span style="color: #333333;font-size: 16px;">工时统计</span>
            <div>
              <el-select v-model="sonLaboratory" placeholder="站点" size="mini" style="width: 100px;" @change="initEchart">
                <el-option
                  v-for="item in sonLaboratoryList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
              <el-radio-group v-model="type" size="mini">
                <el-radio-button label="周" ></el-radio-button>
                <el-radio-button label="月"></el-radio-button>
                <el-radio-button label="年"></el-radio-button>
              </el-radio-group>
              <el-date-picker
                v-model="time.week"
                type="week"
                format="yyyy-MM-dd"
                placeholder="选择周" size="mini" v-if="type=='周'" @change="m=>changeTime(type,m)" style="width: 130px;">
              </el-date-picker>
              <el-date-picker
                v-model="time.month"
                type="month"
                placeholder="选择月" format="yyyy-MM-dd" size="mini" v-if="type=='月'" @change="m=>changeTime(type,m)" style="width: 130px;">
              </el-date-picker>
              <el-date-picker
                v-model="time.year"
                type="year"
                placeholder="选择年" format="yyyy-MM-dd" size="mini" v-if="type=='年'" @change="m=>changeTime(type,m)" style="width: 130px;">
              </el-date-picker>
            </div>
            <!-- <span style="cursor: pointer;font-size: 12px;
color: #3A7BFA;" @click="dialogVisible=true">添加我的日程</span> -->
          </div>
          <div class="right-2-body">
            <div class="calendar" style="width: 49%;">
            <el-row :gutter="10" style="width: 100%;height: 80px;">
              <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                <div style="height: 100%;background: url(../../../static/img/bg1.png) no-repeat;background-size: 100% 100%;padding: 12px 0;box-sizing: border-box;">
                  <p style="text-align: center;font-size: 14px;color: #606266;line-height: 20px;margin-bottom: 4px;">总工时(小时)</p>
                  <p style="text-align: center;font-family: DIN Alternate, DIN Alternate;font-weight: 700;font-size: 30px;color: #3D3D3D;line-height: 35px;">{{chartData0.total}}</p>
                </div>
              </el-col>
              <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                <div style="height: 100%;background: url(../../../static/img/bg2.png) no-repeat;background-size: 100% 100%;padding: 12px 0;box-sizing: border-box;">
                  <p style="text-align: center;font-size: 14px;color: #606266;line-height: 20px;margin-bottom: 4px;">检验员(个)</p>
                  <p style="text-align: center;font-family: DIN Alternate, DIN Alternate;font-weight: 700;font-size: 30px;color: #3D3D3D;line-height: 35px;">{{chartData0.personNum}}</p>
                </div>
              </el-col>
            </el-row>
            <echart-module :id="'index-1'" :config="chartConfig0" :datas="chartData0" style="height: 250px;width: 100%;"></echart-module>
            <!-- <div class="calendar" style="width: 49%;">
              <div class="control">
                <el-button class="prevm" @click="prevMonth(calendarValue)" icon="el-icon-arrow-left"></el-button>
                <span>{{ calendarValue.getFullYear()+'年'+(calendarValue.getMonth() + 1)+'月' }}</span>
@@ -371,12 +417,10 @@
                        <span>
                            {{ data.day.split('-').slice(2)+'' }}
                        </span>
                    <!-- <el-badge v-if="data.isSelected" is-dot class="item">
                    </el-badge> -->
                </template>
              </el-calendar>
            </div>
            <div class="right-2-list" style="width: 49%;height: 286px;" v-loading="scheduleLoading">
            </div> -->
            <!-- <div class="right-2-list" style="width: 49%;height: 286px;" v-loading="scheduleLoading">
              <div class="list2-item" v-for="(m,i) in listScheduleByMe" :key="i">
                <span>{{ m.scheduleTimes }}</span>
                <el-tooltip style="margin-left: 10px;" effect="dark" :content="m.text" placement="top">
@@ -384,7 +428,7 @@
                </el-tooltip>
              </div>
              <span style="color:rgb(144, 147, 153);font-size: 14px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;" v-if="listScheduleByMe.length==0">暂无数据</span>
            </div>
            </div> -->
          </div>
        </div>
        <div class="right-3 card" style="overflow: hidden;">
@@ -452,9 +496,12 @@
        getYearAndMonthAndDays
    } from '../../util/date'
  import ScrollPagination from '../tool/scroll-paging.vue'
  import EchartModule from '../tool/echart.vue'
import { name } from 'file-loader';
    export default {
    components: {
      ScrollPagination
      ScrollPagination,
      EchartModule
    },
        data() {
            return {
@@ -483,6 +530,26 @@
        timer:null,
        keyMap:{},
        getNumberFourTypes: {},
        type:'周',
        time:{
          week:'',
          month:'',
          year:'',
        },
        startTime:'',
        endTime:'',
        sonLaboratory:null,
        sonLaboratoryList:[],
        chartData0:{
          total:0,
          personNum:0,
          data:[]
        },
        chartConfig0:{
          height: '',
          isLoading:false,
          type:'pie0'
        }
            }
        },
    watch:{
@@ -494,6 +561,22 @@
        this.currentPage = 1;
        this.list = [];
        this.getList();
      },
      type(val){
        switch(val){
          case '周':
            this.time.week = new Date()
            this.changeTime(val,this.time.week)
            break;
          case '月':
            this.time.month = new Date()
            this.changeTime(val,this.time.month)
            break;
          case '年':
            this.time.year = new Date()
            this.changeTime(val,this.time.year)
            break;
        }
      }
    },
        mounted() {
@@ -508,7 +591,8 @@
      this.keyMap = {}
      this.list = [];
      this.getList();
      this.getScheduleByMe()
      this.getLaboratoryDicts()
      // this.getScheduleByMe()
      this.timer&&clearInterval(this.timer)
      this.timer = setInterval(() => {
        this.init();
@@ -516,7 +600,7 @@
        this.keyMap = {}
        this.list = [];
        this.getList();
        this.getScheduleByMe()
        // this.getScheduleByMe()
      },1000*60*10)
      this.getNumberFourTypesFun()
        },
@@ -687,6 +771,28 @@
          })
        })
      },
      async initEchart(){
        this.chartConfig0.isLoading = false
        let res0 = await this.$axios.post(this.$api.report.manHourByStation+'?startTime='+this.startTime+'&endTime='+this.endTime+'&sonLaboratory='+this.sonLaboratory)
        if (res0.code == 201) return
        this.chartData0.total = res0.message
        let res1 = await this.$axios.post(this.$api.report.manHourByPerson+'?startTime='+this.startTime+'&endTime='+this.endTime+'&sonLaboratory='+this.sonLaboratory)
        if (res1.code == 201) return
        this.chartData0.personNum = 0
        this.chartData0.data = []
        if(res1.data){
          for(let m in res1.data){
            this.chartData0.personNum ++
            let obj = {
              name:m,
              value:res1.data[m],
              penl:this.chartData0.total>0?((res1.data[m]/this.chartData0.total)*100).toFixed(2):0
            }
            this.chartData0.data.push(obj)
          }
        }
        this.chartConfig0.isLoading = true
      },
      getWeekdaysForNextWeek() {
        let weekdays = [];
        for (let i = 0; i < 7; i++) {
@@ -771,7 +877,43 @@
              text:row.text
            }
          },1);
      },
      changeTime(type,m){
        if(m){
          switch(type){
            case '周':
              this.startTime  = getYearAndMonthAndDays(new Date(this.time.week.getTime() - 24 * 60 * 60 * 1000))
              this.endTime = getYearAndMonthAndDays(new Date(this.time.week.getTime() + 24 * 60 * 60 * 1000 * 5))
              break;
            case '月':
              const year = new Date(this.time.month).getFullYear();
              const month = new Date(this.time.month).getMonth();
              // 设置起始日期和结束日期
              this.startTime = new Date(year, month, 1).toISOString().slice(0, 10); // 月初
              this.endTime = new Date(year, month + 1, 0).toISOString().slice(0, 10); // 月末
              break;
            case '年':
              const year0 = new Date(this.time.year).getFullYear();
              this.startTime = `${year0}-01-01`; // 年初
              this.endTime = `${year0}-12-31`; // 年末
              break;
      }
        }else{
          this.startTime = getYearAndMonthAndDays(new Date((new Date).getTime() - 24 * 60 * 60 * 1000))
          this.endTime = getYearAndMonthAndDays(new Date((new Date).getTime() + 24 * 60 * 60 * 1000 * 5))
        }
        this.initEchart()
      },
      getLaboratoryDicts() {
                this.$axios.post(this.$api.enums.selectEnumByCategory, {
                    category: "子实验室"
                }).then(res => {
                    this.sonLaboratoryList = res.data
          this.sonLaboratory = '远场'
          this.changeTime(this.type)
                })
            },
        },
    deactivated(){
      this.timer&&clearInterval(this.timer)
src/util/echarts.js
@@ -334,6 +334,75 @@
      ]
    };
    chart.setOption(option,true);
  },
  drawPie0:function(chart,params){
    const colorList = ['#F09595', '#A4EEDA','#F6C18B', '#86C1F4','#91A0FC','#59CB74', '#FBD444', '#7F6AAD', '#585247']
    let option = {
      title: {
      text: '总工时',
      textStyle: {
          fontSize: 18,
          color: '#000',
          lineHeight: 20
      },
      textAlign: 'center',
      left: '18.8%',
      top: '45%'
    },
    tooltip: {
        trigger: 'item',
    },
    legend: {
      type: 'scroll',
      orient: 'vertical',
      right: '10%',
      top: 'center',
      itemGap: 30,
      selectedMode: false,
      icon: 'rect',
      data: params.data.map((d) => d.name),
      textStyle: {
          color: '#3D3D3D',
          fontSize:'12px',
          rich: {
            name: {
              width: 60,
            },
            hours: {
              width: 60,
            },
            penl: {
            width: 60,
          }
        }
      },
      formatter(name) {
        const item = params.data.find((d) => d.name === name);
        return `{name|${item.name}}{hours|${item.value}小时}{penl|${item.penl}%}`
      }
    },
    color: colorList,
    series: [
      {
        name: '工时',
        type: 'pie',
        radius: [60, 90],
        center: ['20%', '50%'],
        label: {
            show: false
        },
        labelLine: {
            show: false
        },
        itemStyle: {
            borderWidth: 1,
            borderColor: '#fff'
        },
        data: params.data,
      }
    ]
    }
    chart.setOption(option,true);
  }
}