quanyawei
2023-11-15 740f7af7e3a5a669fd97b26102bf7bccfde00899
fix:立行立改导出
6 files modified
271 ■■■■ changed files
package-lock.json 25 ●●●●● patch | view | raw | blame | history
package.json 1 ●●●● patch | view | raw | blame | history
src/views/toCarryOutLegislativeReforms/components/queryForm.vue 2 ●●● patch | view | raw | blame | history
src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue 6 ●●●● patch | view | raw | blame | history
src/views/toCarryOutLegislativeReforms/reform/index.vue 92 ●●●●● patch | view | raw | blame | history
src/views/toCarryOutLegislativeReforms/summaryPage/index.vue 145 ●●●● patch | view | raw | blame | history
package-lock.json
@@ -4563,7 +4563,6 @@
      "version": "1.0.2",
      "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz?cache=0&sync_timestamp=1610403007655&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.2.tgz",
      "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
      "dev": true,
      "requires": {
        "function-bind": "^1.1.1",
        "get-intrinsic": "^1.0.2"
@@ -8573,7 +8572,6 @@
      "version": "1.1.1",
      "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
      "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
      "dev": true,
      "requires": {
        "function-bind": "^1.1.1",
        "has": "^1.0.3",
@@ -8897,8 +8895,7 @@
    "has-symbols": {
      "version": "1.0.2",
      "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz?cache=0&sync_timestamp=1614443577352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.2.tgz",
      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=",
      "dev": true
      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
    },
    "has-tostringtag": {
      "version": "1.0.0",
@@ -14664,8 +14661,7 @@
    "object-inspect": {
      "version": "1.9.0",
      "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804265193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz",
      "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo=",
      "dev": true
      "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo="
    },
    "object-is": {
      "version": "1.1.5",
@@ -16558,9 +16554,12 @@
      "dev": true
    },
    "qs": {
      "version": "6.5.2",
      "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY="
      "version": "6.11.2",
      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
      "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
      "requires": {
        "side-channel": "^1.0.4"
      }
    },
    "query-string": {
      "version": "5.1.1",
@@ -16957,6 +16956,13 @@
        "tough-cookie": "~2.5.0",
        "tunnel-agent": "^0.6.0",
        "uuid": "^3.3.2"
      },
      "dependencies": {
        "qs": {
          "version": "6.5.3",
          "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
          "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
        }
      }
    },
    "request-promise-core": {
@@ -17810,7 +17816,6 @@
      "version": "1.0.4",
      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
      "dev": true,
      "requires": {
        "call-bind": "^1.0.0",
        "get-intrinsic": "^1.0.2",
package.json
@@ -45,6 +45,7 @@
    "open-docxtemplater-image-module": "^1.0.3",
    "path-to-regexp": "2.4.0",
    "pizzip": "^3.1.3",
    "qs": "^6.11.2",
    "tasksfile": "^5.1.1",
    "three": "^0.132.2",
    "vue": "2.6.10",
src/views/toCarryOutLegislativeReforms/components/queryForm.vue
@@ -47,7 +47,7 @@
        </el-form-item>
        <el-form-item>
          <el-button type="primary" size="small" @click="onSubmit">查询</el-button>
          <el-button type="primary" size="small" @click="handleAdd">新建</el-button>
          <!-- <el-button type="primary" size="small" @click="handleAdd">新建</el-button> -->
        </el-form-item>
      </el-form>
    </div>
src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue
@@ -46,8 +46,8 @@
              <div style="display: flex;">
                <el-form-item label="是否整改:">
                  <el-radio-group v-model="workForme.isChange">
                    <el-radio :label="0">是</el-radio>
                    <el-radio :label="1">否</el-radio>
                    <el-radio :label="1">是</el-radio>
                    <el-radio :label="0">否</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-form-item label="整改人:">
@@ -72,7 +72,7 @@
            <el-col :span="12">
              <div class="grid-content bg-purple" />
              <el-descriptions title="整改信息" :column="parseInt('2')">
                <el-descriptions-item label="是否整改" label-class-name="itemSpan">{{ parentFormData.changeType }}</el-descriptions-item>
                <el-descriptions-item label="是否整改" label-class-name="itemSpan">{{ dictObj.yesOrNo[parentFormData.isChange] }}</el-descriptions-item>
                <el-descriptions-item label="整改人" label-class-name="itemSpan">{{ parentFormData.changeName }}</el-descriptions-item>
              </el-descriptions>
              <el-descriptions :column="parseInt('1')">
src/views/toCarryOutLegislativeReforms/reform/index.vue
@@ -1,13 +1,23 @@
<template>
  <div class="main">
  <div class="main" v-loading="loading">
    <div>
      <searchBar v-if="searchType" :search-type="'reform'" @handleSearch="handleSearchBut" @handleAdd="handleOpenDialog(null, 'add')" />
      <newWorkOrder v-if="centerDialogVisible" ref="newWorkOrder" :parent-form-data="parentFormData" :title="title" :page-state="pageState" :visible.sync="centerDialogVisible" @handleSubmit="newHandleSubmit" />
      <!-- <el-divider></el-divider> -->
      <div class="tab">
        <el-table size="mini" :data="tableData" border max-height="680" style="width: 100%" :header-cell-style="{
        <div class="exportBox">
          <div>查询列表</div>
          <div>
            <el-button type="primary" size="mini" @click="handleOpenDialog(null, 'add')">新建</el-button>
            <el-button :disabled="!(selectionRows.length>0)" type="info" size="mini" @click="exportData">导出</el-button>
          </div>
        </div>
        <el-table size="mini" :data="tableData" border max-height="680" style="width: 100%" @selection-change="handleSelectionChange" :header-cell-style="{
            color: '#101111',
            fontSize: '16px'
          }">
          <el-table-column type="selection" width="40" align="center">
          </el-table-column>
          <el-table-column type="index" label="序号" width="60px" align="center" />
          <el-table-column align="center">
            <template slot="header">
@@ -80,7 +90,7 @@
              <div>{{ scope.row.updateTime }}</div>
            </template>
          </el-table-column>
          <el-table-column align="center" prop="createTime" width="100px" label="操作">
          <el-table-column align="center" prop="createTime" min-width="100px" label="操作">
            <template slot-scope="scope">
              <el-button type="text" size="medium" @click="openWorkOrdinDialog(scope.row, 'detail')">
@@ -185,6 +195,8 @@
</template>
<script>
import axios from 'axios'
import qs from 'qs'
import searchBar from '@/views/toCarryOutLegislativeReforms/components/queryForm'
import newWorkOrder from '@/views/toCarryOutLegislativeReforms/components/newWorkOrder'
import workOrderInformation from '@/views/toCarryOutLegislativeReforms/components/workOrderInformation'
@@ -196,6 +208,8 @@
  },
  data() {
    return {
      loading: false,
      selectionRows: [],
      errorClass: 'errorClass',
      searchType: 'reform',
      pagination: {
@@ -268,6 +282,69 @@
    this.getContaminateList()
  },
  methods: {
    handleSelectionChange(rows) {
      console.log(rows)
      this.selectionRows = rows
    },
    exportData() {
      const CancelToken = axios.CancelToken
      let cancel
      let timer = setTimeout(() => {
        cancel()
        this.loading = false
        this.$message.error('当前下载数据过多,请分批下载!')
      }, 30000)
      this.loading = true
      this.$request({
        url: '/allocation/listExcel',
        method: 'get',
        params: {
          id: this.selectionRows.map(item => item.allocationId)
        },
        cancelToken: new CancelToken(function executor(c) {
          cancel = c
        }),
        paramsSerializer: params => {
          return qs.stringify(params, {
            indices: false
          })
        }
      })
        .then(res => {
          clearTimeout(timer)
          console.log('导出成功', res)
          if (res.code === -1) {
            this.$message.error(res.message)
          } else {
            this.getOutExcel('交办单导出.xlsx', res)
          }
        })
        .catch(err => {
          clearTimeout(timer)
          this.loading = false
        })
    },
    getOutExcel(fileName, res) {
      let blob = new Blob([res], { type: 'application/x-xls' })
      if (window.navigator.msSaveOrOpenBlob) {
        //兼容 IE & EDGE
        this.loading = false
        navigator.msSaveBlob(blob, fileName)
      } else {
        var link = document.createElement('a')
        // 兼容不同浏览器的URL对象
        const url = window.URL || window.webkitURL || window.moxURL
        // 创建下载链接
        link.href = url.createObjectURL(blob)
        //命名下载名称
        link.download = fileName
        //点击触发下载
        link.click()
        //下载完成进行释放
        url.revokeObjectURL(link.href)
        this.loading = false
      }
    },
    openEditDialog(row) {
      this.editEscalationUnitData = row
      this.dialogEditVisible = true
@@ -466,6 +543,7 @@
      this.handleSearch(obj)
    },
    handleSearch(obj) {
      this.selectionRows = []
      if (obj) {
        this.searchData = obj
      }
@@ -596,4 +674,12 @@
  font-size: 16px;
  font-weight: 700;
}
.exportBox {
  font-weight: 700;
  font-size: 18px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 10px;
}
</style>
src/views/toCarryOutLegislativeReforms/summaryPage/index.vue
@@ -1,27 +1,14 @@
<template>
  <div class="main">
    <div class="timeSelect">
      <el-radio-group
        v-model="searchForm.number"
        style="margin-left:20px"
        @input="changeNumber"
      >
      <el-radio-group v-model="searchForm.number" style="margin-left:20px" @input="changeNumber">
        <el-radio-button label="1">近1个月</el-radio-button>
        <el-radio-button label="2">近2个月</el-radio-button>
        <el-radio-button label="3">近3个月</el-radio-button>
        <el-radio-button label="6">近6个月</el-radio-button>
        <el-radio-button label="12">近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"
      />
      <el-date-picker v-model="timeInterval" el-time-picker type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="changeNumber" />
    </div>
    <div class="agentSummary">
      <div class="circle">
@@ -42,98 +29,40 @@
      </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>
            <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 class="tab">
              <el-table
                :data="tableData"
                border
                max-height="400"
                style="width: 100%"
                :header-cell-style="{
              <el-table :data="tableData" border max-height="400" style="width: 100%" :header-cell-style="{
                  background: '#99D4FF', color: '#101111', fontSize: '16px'
                }"
              >
                <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" 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>
        </el-tab-pane>
        <el-tab-pane
          label="明细"
          name="second"
        >
        <el-tab-pane label="明细" name="second">
          <div>
            <div>
              <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-option v-for="item in unitList" :key="item.unitId" :label="item.unitName" :value="item.unitId" />
                </el-select>
              </p>
            </div>
@@ -143,18 +72,10 @@
            </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>
@@ -213,7 +134,7 @@
          endTime: this.timeInterval[1],
          number: Number(this.searchForm.number)
        }
      }).then((res) => {
      }).then(res => {
        this.getOutExcel('列表数据导出.xlsx', res)
      })
    },
@@ -237,7 +158,9 @@
      }
    },
    unitIdFormatter(val) {
      const data = this.unitList.find(item => item && item.unitId === val.unitId)
      const data = this.unitList.find(
        item => item && item.unitId === val.unitId
      )
      return data ? data.unitName : ''
    },
    changeNumber(val) {
@@ -256,7 +179,7 @@
          number: Number(this.searchForm.number),
          unitId: this.unitId
        }
      }).then((res) => {
      }).then(res => {
        if (res.code === 0) {
          this.chartData = []
          this.chartData = this.cylindricalityData
@@ -276,7 +199,7 @@
          endTime: this.timeInterval[1],
          number: Number(this.searchForm.number)
        }
      }).then((res) => {
      }).then(res => {
        if (res.code === 0) {
          this.responeForm = res.data
          this.tableData = res.data.unitView
@@ -292,7 +215,7 @@
      this.$request({
        url: '/allocation/unit',
        method: 'get'
      }).then((res) => {
      }).then(res => {
        this.unitList = res.data
        console.log(' JSON.stringify(this.unitList)', this.unitList)
      })
@@ -301,7 +224,7 @@
      this.$request({
        url: '/allocation/contaminate',
        method: 'get'
      }).then((res) => {
      }).then(res => {
        this.polluteList = res.data
      })
    }
@@ -310,16 +233,16 @@
</script>
<style scoped lang="scss">
$red:  url('~@/assets/images/1.jpg') ;
$orange:url('~@/assets/images/2.png');
$yellow:url('~@/assets/images/3.jpg');
$green:url('~@/assets/images/4.png');
$red: url('~@/assets/images/1.jpg');
$orange: url('~@/assets/images/2.png');
$yellow: url('~@/assets/images/3.jpg');
$green: url('~@/assets/images/4.png');
$bgcolorlist: $red $orange $yellow $green;
.main {
  /deep/ .el-table__row{
  font-size: 18px;
}
  /deep/ .el-table__row {
    font-size: 18px;
  }
  background: #bbbbbb;
  min-height: 800px;
  padding: 15px 10px;