quanyawei
2024-09-06 933f7c55bdf0f84b1c780de715c7d477df8ab052
src/views/toCarryOutLegislativeReforms/summaryPage/index.vue
@@ -1,7 +1,11 @@
<template>
  <div class="main">
    <div class="timeSelect">
      <el-radio-group v-model="searchForm.number" style="margin-left:20px" @input="changeNumber('timeMouted')">
      <el-radio-group
        v-model="searchForm.number"
        style="margin-left:20px"
        @input="changeNumber('timeMouted')"
      >
        <el-radio-button label="1">
          近1个月
        </el-radio-button>
@@ -18,7 +22,24 @@
          近12个月
        </el-radio-button>
      </el-radio-group>
      <el-date-picker v-model="timeInterval" el-time-picker type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="changeNumber('timeValue')" />
      <el-date-picker
        v-model="timeInterval"
        el-time-picker
        type="daterange"
        value-format="yyyy-MM-dd"
        range-separator="至"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        @change="changeNumber('timeValue')"
      />
      <el-cascader
        collapse-tags
        placeholder="责任主体"
        :show-all-levels="false"
        :options="unitList"
        :props="{ multiple: true, value:'unitId',label:'unitName',children:'children'}"
        @change="changeUid"
      />
    </div>
    <div class="agentSummary">
      <div class="circle">
@@ -39,69 +60,232 @@
      </div>
    </div>
    <div class="overviewAndDetails">
      <el-tabs v-model="activeName" @tab-click="handleClick">
        <el-tab-pane label="总览" name="first">
      <el-tabs
        v-model="activeName"
        @tab-click="handleClick"
      >
        <el-tab-pane
          label="总览"
          name="first"
        >
          <div class="tit">
            <span>
              责任单位交办单总览
            </span>
            <el-button type="primary" plain size="small" style="float: right;" @click="ecxport">
            <el-button
              type="primary"
              plain
              size="small"
              style="float: right;"
              @click="ecxport"
            >
              导出
            </el-button>
          </div>
          <div>
            <div class="min">
              <div class="tab" style="display: inline-block; width: 100%">
                <el-table :data="tableData" class="topTable" border style="width: 100%" :header-cell-style="{
              <div
                class="tab"
                style="display: inline-block; width: 100%"
              >
                <el-table
                  :data="tableData"
                  class="topTable"
                  border
                  style="width: 100%"
                  :header-cell-style="{
                    background: '#99D4FF', color: '#101111', fontSize: '16px'
                  }">
                  <el-table-column align="center" type="index" width="60" label="序号" />
                  <el-table-column align="center" prop="unitName" label="责任单位" />
                  <el-table-column align="center" prop="total" label="总工单" />
                  <el-table-column align="center" prop="number" label="完成数" />
                  <el-table-column align="center" prop="unNumber" label="未成数" />
                  <el-table-column align="center" prop="rate" label="完成率" />
                  <el-table-column align="center" prop="deduction" label="扣分" />
                  <el-table-column align="center" prop="marks" label="加分" />
                  <el-table-column align="center" prop="totalPoints" label="总得分" />
                  }"
                >
                  <el-table-column
                    align="center"
                    type="index"
                    width="60"
                    label="序号"
                  />
                  <el-table-column
                    align="center"
                    prop="unitName"
                    label="责任单位"
                  />
                  <el-table-column
                    align="center"
                    prop="total"
                    label="总工单"
                  />
                  <el-table-column
                    align="center"
                    prop="number"
                    label="完成数"
                  />
                  <el-table-column
                    align="center"
                    prop="unNumber"
                    label="未成数"
                  />
                  <el-table-column
                    align="center"
                    prop="rate"
                    label="完成率"
                  />
                  <el-table-column
                    align="center"
                    prop="deduction"
                    label="扣分"
                  />
                  <el-table-column
                    align="center"
                    prop="marks"
                    label="加分"
                  />
                  <el-table-column
                    align="center"
                    prop="totalPoints"
                    label="总得分"
                  />
                </el-table>
                <vueSeamless v-if="tableData.length>5" ref="scroll3" :data="tableData" :pause="true" class="seamless-warp" style="width: 100%;" :class-option="classOption">
                  <el-table v-if="tableData.length>0" :data="tableData" class="bottomTable" border style="width: 100%;margin-bottom:50px">
                    <el-table-column align="center" type="index" width="60" />
                    <el-table-column align="center" prop="unitName" label="责任单位" />
                    <el-table-column align="center" prop="total" label="总工单" />
                    <el-table-column align="center" prop="number" label="完成数" />
                    <el-table-column align="center" prop="unNumber" label="未成数" />
                    <el-table-column align="center" prop="rate" label="完成率" />
                    <el-table-column align="center" prop="deduction" label="扣分" />
                    <el-table-column align="center" prop="marks" label="加分" />
                    <el-table-column align="center" prop="totalPoints" label="总得分" />
                <vueSeamless
                  v-if="tableData.length>5"
                  ref="scroll3"
                  :data="tableData"
                  :pause="true"
                  class="seamless-warp"
                  style="width: 100%;"
                  :class-option="classOption"
                >
                  <el-table
                    v-if="tableData.length>0"
                    :data="tableData"
                    class="bottomTable"
                    border
                    style="width: 100%;margin-bottom:50px"
                  >
                    <el-table-column
                      align="center"
                      type="index"
                      width="60"
                    />
                    <el-table-column
                      align="center"
                      prop="unitName"
                      label="责任单位"
                    />
                    <el-table-column
                      align="center"
                      prop="total"
                      label="总工单"
                    />
                    <el-table-column
                      align="center"
                      prop="number"
                      label="完成数"
                    />
                    <el-table-column
                      align="center"
                      prop="unNumber"
                      label="未成数"
                    />
                    <el-table-column
                      align="center"
                      prop="rate"
                      label="完成率"
                    />
                    <el-table-column
                      align="center"
                      prop="deduction"
                      label="扣分"
                    />
                    <el-table-column
                      align="center"
                      prop="marks"
                      label="加分"
                    />
                    <el-table-column
                      align="center"
                      prop="totalPoints"
                      label="总得分"
                    />
                  </el-table>
                </vueSeamless>
                <el-table v-else :data="tableData" class="bottomTable" border style="width: 100%;margin-bottom:50px">
                  <el-table-column align="center" type="index" width="60" />
                  <el-table-column align="center" prop="unitName" label="责任单位" />
                  <el-table-column align="center" prop="total" label="总工单" />
                  <el-table-column align="center" prop="number" label="完成数" />
                  <el-table-column align="center" prop="unNumber" label="未成数" />
                  <el-table-column align="center" prop="rate" label="完成率" />
                  <el-table-column align="center" prop="deduction" label="扣分" />
                  <el-table-column align="center" prop="marks" label="加分" />
                  <el-table-column align="center" prop="totalPoints" label="总得分" />
                <el-table
                  v-else
                  :data="tableData"
                  class="bottomTable"
                  border
                  style="width: 100%;margin-bottom:50px"
                >
                  <el-table-column
                    align="center"
                    type="index"
                    width="60"
                  />
                  <el-table-column
                    align="center"
                    prop="unitName"
                    label="责任单位"
                  />
                  <el-table-column
                    align="center"
                    prop="total"
                    label="总工单"
                  />
                  <el-table-column
                    align="center"
                    prop="number"
                    label="完成数"
                  />
                  <el-table-column
                    align="center"
                    prop="unNumber"
                    label="未成数"
                  />
                  <el-table-column
                    align="center"
                    prop="rate"
                    label="完成率"
                  />
                  <el-table-column
                    align="center"
                    prop="deduction"
                    label="扣分"
                  />
                  <el-table-column
                    align="center"
                    prop="marks"
                    label="加分"
                  />
                  <el-table-column
                    align="center"
                    prop="totalPoints"
                    label="总得分"
                  />
                </el-table>
              </div>
            </div>
          </div>
        </el-tab-pane>
        <el-tab-pane label="明细" name="second">
        <el-tab-pane
          label="明细"
          name="second"
        >
          <div>
            <div>
              <p style="text-align: center;">
              <!-- <p style="text-align: center;">
                责任单位:
                <el-select v-model="unitId" size="small" placeholder="请选择" @change="changeUnitId">
                  <el-option v-for="item in unitList" :key="item.unitId" :label="item.unitName" :value="item.unitId" />
                <el-select
                  v-model="unitId"
                  size="small"
                  placeholder="请选择"
                  @change="changeUnitId"
                >
                  <el-option
                    v-for="item in unitList"
                    :key="item.unitId"
                    :label="item.unitName"
                    :value="item.unitId"
                  />
                </el-select>
              </p>
              </p> -->
            </div>
            <div class="chartsTitle">
              <p>污染分类</p>
@@ -109,10 +293,18 @@
            </div>
            <div class="caets">
              <div>
                <pollutionClassificationEcharts v-if="activeName === 'second'" ref="leftEcharts" :chart-data="chartData" />
                <pollutionClassificationEcharts
                  v-if="activeName === 'second'"
                  ref="leftEcharts"
                  :chart-data="chartData"
                />
              </div>
              <div>
                <reportTypeEcharts v-if="activeName === 'second'" ref="rightEcharts" :cylindricality-data="cylindricalityData" />
                <reportTypeEcharts
                  v-if="activeName === 'second'"
                  ref="rightEcharts"
                  :cylindricality-data="cylindricalityData"
                />
              </div>
            </div>
          </div>
@@ -132,7 +324,7 @@
    pollutionClassificationEcharts,
    reportTypeEcharts
  },
  data() {
  data () {
    return {
      mount: '',
      timeInterval: [],
@@ -155,23 +347,57 @@
      },
      chartData: [],
      cylindricalityData: [],
      tableDataTotal: 0
      tableDataTotal: 0,
      unitIdlist: []
    }
  },
  computed: {
    classOption() {
    classOption () {
      let data = this.loadMore()
      console.log('return ', data)
      return data
    }
  },
  created() {
  created () {
    this.getUnitList()
    this.getContaminateList()
    this.handleSearch()
  },
  methods: {
    loadMore() {
    changeUid (val) {
      this.unitIdlist = this.uniqueArrayReduce(val)
      this.handleSearch()
    },
    uniqueArrayReduce (arrays) {
      return arrays.reduce((acc, curr) => {
        return acc.concat(curr.filter(item => !acc.includes(item)))
      }, [])
    },
    removeEmptyArrays (obj) {
      if (Array.isArray(obj)) {
        return obj
          .map(item => this.removeEmptyArrays(item)) // 递归处理每个元素
          .filter(item => !Array.isArray(item) || item.length > 0) // 过滤空数组
      } else if (typeof obj === 'object' && obj !== null) {
        Object.keys(obj).forEach(key => {
          obj[key] = this.removeEmptyArrays(obj[key]) // 递归处理对象属性
          if (Array.isArray(obj[key]) && obj[key].length === 0) {
            delete obj[key] // 移除空数组属性
          }
        })
      }
      return obj
    },
    // 获取责任单位list
    getUnitList () {
      this.$request({
        url: '/allocation/unitQuery',
        method: 'get'
      }).then(res => {
        this.unitList = this.removeEmptyArrays(res.data)
      })
    },
    loadMore () {
      let data = {}
      if (this.tableDataTotal > 5) {
        data = {
@@ -197,7 +423,7 @@
      console.log('data', data)
      return data
    },
    ecxport() {
    ecxport () {
      this.$request({
        url: '/allocation/unitExel',
        method: 'get',
@@ -205,13 +431,14 @@
        params: {
          startTime: this.timeInterval[0],
          endTime: this.timeInterval[1],
          number: Number(this.searchForm.number)
          number: Number(this.searchForm.number),
          unitId: this.unitIdlist.join(',')
        }
      }).then(res => {
        this.getOutExcel('列表数据导出.xlsx', res)
      })
    },
    getOutExcel(fileName, res) {
    getOutExcel (fileName, res) {
      const blob = new Blob([res], { type: 'application/x-xls' })
      if (window.navigator.msSaveOrOpenBlob) {
        // 兼容 IE & EDGE
@@ -230,13 +457,13 @@
        url.revokeObjectURL(link.href)
      }
    },
    unitIdFormatter(val) {
    unitIdFormatter (val) {
      const data = this.unitList.find(
        item => item && item.unitId === val.unitId
      )
      return data ? data.unitName : ''
    },
    changeNumber(val) {
    changeNumber (val) {
      if (val === 'timeValue') {
        this.searchForm.number = null
      } else {
@@ -244,10 +471,10 @@
      }
      this.handleSearch()
    },
    handleClick(tab, event) {
    handleClick (tab, event) {
      console.log(tab)
    },
    changeUnitId() {
    changeUnitId () {
      this.$request({
        url: '/allocation/selectUnitView',
        method: 'get',
@@ -268,13 +495,14 @@
        }
      })
    },
    handleSearch() {
    handleSearch () {
      this.$request({
        url: '/allocation/selectUnitView',
        method: 'get',
        params: {
          startTime: this.timeInterval[0],
          endTime: this.timeInterval[1],
          unitId: this.unitIdlist.join(','),
          number: Number(this.searchForm.number)
        }
      }).then(res => {
@@ -290,16 +518,16 @@
      })
    },
    // 获取责任单位list
    getUnitList() {
      this.$request({
        url: '/allocation/unit',
        method: 'get'
      }).then(res => {
        this.unitList = res.data
        console.log(' JSON.stringify(this.unitList)', this.unitList)
      })
    },
    getContaminateList() {
    // getUnitList () {
    //   this.$request({
    //     url: '/allocation/unit',
    //     method: 'get'
    //   }).then(res => {
    //     this.unitList = res.data
    //     console.log(' JSON.stringify(this.unitList)', this.unitList)
    //   })
    // },
    getContaminateList () {
      this.$request({
        url: '/allocation/contaminate',
        method: 'get'