From 740f7af7e3a5a669fd97b26102bf7bccfde00899 Mon Sep 17 00:00:00 2001 From: quanyawei <401863037@qq.com> Date: Wed, 15 Nov 2023 17:01:02 +0800 Subject: [PATCH] fix:立行立改导出 --- src/views/toCarryOutLegislativeReforms/components/queryForm.vue | 2 package-lock.json | 25 +++-- package.json | 1 src/views/toCarryOutLegislativeReforms/reform/index.vue | 92 +++++++++++++++++ src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue | 6 src/views/toCarryOutLegislativeReforms/summaryPage/index.vue | 145 ++++++---------------------- 6 files changed, 143 insertions(+), 128 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75b4342..afc1401 100644 --- a/package-lock.json +++ b/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", diff --git a/package.json b/package.json index 693d277..5628a09 100644 --- a/package.json +++ b/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", diff --git a/src/views/toCarryOutLegislativeReforms/components/queryForm.vue b/src/views/toCarryOutLegislativeReforms/components/queryForm.vue index 7dbca98..0b5c744 100644 --- a/src/views/toCarryOutLegislativeReforms/components/queryForm.vue +++ b/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> diff --git a/src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue b/src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue index 8dcd8b8..dbc6a35 100644 --- a/src/views/toCarryOutLegislativeReforms/components/workOrderInformation.vue +++ b/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')"> diff --git a/src/views/toCarryOutLegislativeReforms/reform/index.vue b/src/views/toCarryOutLegislativeReforms/reform/index.vue index 9bb34ab..2ba975d 100644 --- a/src/views/toCarryOutLegislativeReforms/reform/index.vue +++ b/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> diff --git a/src/views/toCarryOutLegislativeReforms/summaryPage/index.vue b/src/views/toCarryOutLegislativeReforms/summaryPage/index.vue index cb5917f..c1f050c 100644 --- a/src/views/toCarryOutLegislativeReforms/summaryPage/index.vue +++ b/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; -- Gitblit v1.8.0