From 2c6d91d758241e1f97fe2790d92b754ea2cc860c Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Thu, 28 Mar 2024 15:59:25 +0800
Subject: [PATCH] fix: 空气质量日报表显示

---
 src/components/formTypeComponets/dialog/index.vue      |    7 
 src/router/dynamicRouter.js                            |    7 
 src/views/toCarryOutLegislativeReforms/delay/index.vue |    2 
 src/views/statement/index.vue                          |  445 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 457 insertions(+), 4 deletions(-)

diff --git a/src/components/formTypeComponets/dialog/index.vue b/src/components/formTypeComponets/dialog/index.vue
index e7a63fd..3cd1e58 100644
--- a/src/components/formTypeComponets/dialog/index.vue
+++ b/src/components/formTypeComponets/dialog/index.vue
@@ -29,7 +29,7 @@
       <el-button
         v-if="isShowSumbitBut"
         type="primary"
-        @click="close()"
+        @click="handleSumbmit()"
       >
         ��� ���
       </el-button>
@@ -81,8 +81,9 @@
       this.visible = false
       this.$emit('update:dialogVisible', false)
     },
-    handleClose () {
-
+    handleSumbmit () {
+      this.close()
+      this.$emit('dialogSubmit', false)
     }
   }
 }
diff --git a/src/router/dynamicRouter.js b/src/router/dynamicRouter.js
index d794134..41d03a6 100644
--- a/src/router/dynamicRouter.js
+++ b/src/router/dynamicRouter.js
@@ -113,6 +113,12 @@
   component: () => import('@/views/hand/index'),
   meta: { title: '������������', icon: 'example' }
 }
+const statement = {
+  path: 'report/statement',
+  name: 'statement',
+  component: () => import('@/views/statement/index'),
+  meta: { title: '���������������������������', icon: 'example' }
+}
 // ������������������������
 const airQualityReportDisplay = {
   path: 'report/airQualityReportDisplay',
@@ -247,6 +253,7 @@
   staffManagement: staffManagement,
   showGovHourData: showGovHourData,
   hand: hand,
+  statement: statement,
   cityAirRank: cityAirRank,
   levelStatistic: levelStatistic,
   onlineRate: onlineRate,
diff --git a/src/views/statement/index.vue b/src/views/statement/index.vue
new file mode 100644
index 0000000..fd809b2
--- /dev/null
+++ b/src/views/statement/index.vue
@@ -0,0 +1,445 @@
+<template>
+  <div class="container">
+    <div class="searchBox">
+      <div>������:</div>
+      <el-date-picker
+        v-model="timePicker"
+        class="margOut"
+        type="daterange"
+        range-separator="���"
+        start-placeholder="������������"
+        end-placeholder="������������"
+      />
+      <div>
+        <el-button
+          type="primary"
+          @click="handleSearch"
+        >
+          ������
+        </el-button>
+        <el-button
+          type="primary"
+          @click="()=>isVisible = true"
+        >
+          ������������
+        </el-button>
+      </div>
+    </div>
+    <div>
+      <el-row :gutter="24">
+        <el-col :span="10">
+          <el-table
+            :data="tableData"
+            style="width: 100%"
+            @row-click="rowClick"
+          >
+            <el-table-column
+              label="������"
+              type="index"
+              align="center"
+              width="100"
+            />
+            <el-table-column
+              prop="reportTime"
+              align="center"
+              label="������"
+              width="180"
+            />
+            <el-table-column
+              prop="reportContent"
+              align="center"
+              label="������"
+            >
+              <template slot-scope="scope">
+                <div
+                  style="
+                  overflow: hidden;
+                  white-space: nowrap;
+                  text-overflow: ellipsis;
+                "
+                  v-html="scope.row.reportContent"
+                />
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-col>
+        <el-col
+          :span="14"
+          style="position: relative;"
+        >
+          <el-input
+            id="myText"
+            v-model="reportContent"
+            readonly
+            class="wordContent"
+            type="textarea"
+            resize="none"
+          />
+
+          <div
+            v-if="filesList.length > 0"
+            class="fileBox"
+          >
+            <el-row
+              type="flex"
+              align="middle"
+            >
+              <el-col :span="18">
+                <div
+                  v-for="item in filesList"
+                  :key="item.fileId"
+                >
+                  <el-button
+                    type="text"
+                    @click="handleExport(item)"
+                  >
+                    {{ item.fileName }}
+                  </el-button>
+                </div>
+              </el-col>
+              <el-col
+                :span="6"
+                style="text-align: center;"
+              >
+                <div>
+                  <el-button
+                    type="text"
+                    @click="copyText"
+                  >
+                    ������
+                  </el-button>
+                </div>
+                <el-button
+                  type="text"
+                  @click="()=>resetFileVisible = true"
+                >
+                  ������������
+                </el-button>
+              </el-col>
+            </el-row>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="pagina">
+      <el-pagination
+        background
+        :current-page="pagination.currentPage"
+        :page-sizes="pagination.pageSizes"
+        :page-size="pagination.pageSize"
+        :total="pagination.totalCount"
+        layout="total, sizes, prev, pager, next, jumper"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+    <diaLog
+      v-if="isVisible"
+      :dialog-visible.sync="isVisible"
+      :title="`������������`"
+      :width="`500px`"
+      @dialogSubmit="dialogSubmit"
+    >
+      <template #body>
+        <div>
+          <el-form
+            label-width="80px"
+            :model="formInline"
+          >
+            <div style="width: 400px">
+              <el-form-item label="������:">
+                <el-date-picker
+                  v-model="formInline.time"
+                  style="width: 100%"
+                  type="date"
+                  placeholder="������������"
+                />
+              </el-form-item>
+              <el-form-item label="������:">
+                <el-input
+                  v-model="formInline.code"
+                  placeholder="���������"
+                />
+              </el-form-item>
+              <p style="text-align: center;color: red">
+                ���������������������������������������������!
+              </p>
+            </div>
+          </el-form>
+        </div>
+      </template>
+    </diaLog>
+    <diaLog
+      v-if="resetFileVisible"
+      :dialog-visible.sync="resetFileVisible"
+      :title="`������������`"
+      :width="`500px`"
+      @dialogSubmit="handleResetFile"
+    >
+      <template #body>
+        <div>
+          <div
+            v-for="(item,index) in filesList"
+            :key="item.fileId"
+            class="resetFileBox"
+          >
+            <span>
+              {{ item.fileName }}
+            </span>
+            <el-upload
+              class="upload-demo"
+              :action="uploadUrl"
+              accept=".xls,.xlsx"
+              :show-file-list="false"
+              :data="{sysCode}"
+              :on-success="handleUploadSuccess"
+              :headers="{ token: token }"
+            >
+              <el-button
+                type="text"
+                @click="updataFileid(index)"
+              >
+                ������������
+              </el-button>
+            </el-upload>
+          </div>
+        </div>
+      </template>
+    </diaLog>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash'
+import requestObj from '@/utils/request'
+import { getToken } from '@/utils/auth'
+import diaLog from '@/components/formTypeComponets/dialog/index.vue'
+import dayjs from 'dayjs'
+export default {
+  components: {
+    diaLog
+  },
+  data () {
+    return {
+      upFileList: [],
+      sysCode: '1250301',
+      token: getToken(),
+      isVisible: false,
+      resetFileVisible: false,
+      filesList: [],
+      reportContent: '',
+      formInline: {
+        code: '',
+        time: new Date()
+      },
+      pagination: {
+        currentPage: 1,
+        // ������������������������������������������(���������������������������)
+        totalCount: 0,
+        // ������������������������������
+        pageSizes: [10, 30, 60, 100],
+        // ������������������������������������������
+        pageSize: 10
+      },
+      timePicker: [],
+      tableData: [],
+      clickId: '',
+      selectFileIndex: null
+    }
+  },
+  computed: {
+    uploadUrl () {
+      return `${requestObj.baseUrl}/file/upload`
+    },
+    exportUrl () {
+      return `${requestObj.baseUrl}/file/preview/`
+    }
+  },
+  watch: {
+    resetFileVisible (newValue, oldValue) {
+      if (newValue) { this.upFileList = _.cloneDeep(this.filesList) }
+    }
+  },
+  created () {
+    this.handleSearch()
+  },
+  methods: {
+    handleExport (item) {
+      this.$request({
+        url: `file/preview/${item.fileId}`,
+        method: 'get',
+        responseType: 'blob',
+      }).then(res => {
+        this.getOutExcel(`${item.fileName}.xlsx`, res)
+      })
+    },
+    getOutExcel (fileName, res) {
+      const blob = new Blob([res], { type: 'application/x-xls' })
+      if (window.navigator.msSaveOrOpenBlob) {
+        // ������ IE & EDGE
+        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)
+      }
+    },
+    updataFileid (index) {
+      this.selectFileIndex = index
+    },
+    // ������������������
+    handleUploadSuccess (response, file, fileList) {
+      this.upFileList[this.selectFileIndex] = response.data
+      console.log('this.upFileList', this.upFileList)
+    },
+    handleResetFile (item) {
+      this.$request({
+        url: '/cityReptiles/fileUpload',
+        method: 'post',
+        data: {
+          list: this.upFileList,
+          id: this.clickId
+        }
+      }).then((res) => {
+        this.$message({
+          message: '������������',
+          type: 'success'
+        })
+      })
+        .catch(err => {
+          console.log(err)
+          this.$message.error('������������')
+        })
+    },
+    copyText () {
+      const textToCopy = document.getElementById('myText').value
+      this.copyToClipboard(textToCopy)
+    },
+    async copyToClipboard (text) {
+      try {
+        await navigator.clipboard.writeText(text)
+        this.$message({
+          message: '���������������������������������',
+          type: 'success'
+        })
+      } catch (err) {
+        console.error('������������:', err)
+      }
+    },
+    rowClick (val) {
+      this.reportContent = val.reportContent
+      this.filesList = val.list
+      this.clickId = val.id
+    },
+    dialogSubmit () {
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+      this.$request({
+        url: '/cityReptiles/report',
+        method: 'get',
+        params: {
+          code: this.formInline.code,
+          time: dayjs(this.formInline.time).format('YYYY-MM-DD')
+        }
+      }).then((res) => {
+        console.log('res', res)
+        this.handleSearch()
+        loading.close()
+      })
+        .catch(err => {
+          loading.close()
+          console.log(err)
+          this.$message.error('������������')
+        })
+    },
+    handleSearch () {
+      this.$request({
+        url: '/cityReptiles/page',
+        method: 'post',
+        data: {
+          'page': this.pagination,
+          startTime: this.timePicker && this.timePicker.length > 0 ? dayjs(this.timePicker[0]).format('YYYY-MM-DD') : '',
+          endTime: this.timePicker && this.timePicker.length > 0 ? dayjs(this.timePicker[1]).format('YYYY-MM-DD') : ''
+        }
+      }).then((res) => {
+        this.tableData = res.data.list
+        this.pagination.totalCount = res.data.page.totalNum
+        this.reportContent = res.data.list.length > 0 ? res.data.list[0].reportContent : ''
+        this.filesList = res.data.list.length > 0 ? res.data.list[0].list : ''
+        this.clickId = res.data.list.length > 0 ? res.data.list[0].id : ''
+      })
+        .catch(err => {
+          console.log(err)
+          this.$message.error('������������')
+        })
+    },
+    // ������
+    // ���������������������
+    handleSizeChange (val) {
+      // ���������������������������
+      this.pagination.pageSize = val
+      // ���������������������������������������������������������������������������
+      this.pagination.currentPage = 1
+      this.handleSearch()
+    },
+    // ���������������
+    handleCurrentChange (val) {
+      // ���������������������
+      this.pagination.currentPage = val
+      this.handleSearch()
+      // console.log(val)
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.container{
+  overflow-y:auto;
+  overflow-x:hidden;
+  height: 100%;
+  padding: 10px;
+  .searchBox{
+    display: flex;
+    // font-size: 18px;
+    align-items: center;
+    .margOut{
+      margin: 0 10px;
+    }
+    margin-bottom: 20px;
+  }
+}
+/deep/.wordContent{
+   .el-textarea__inner{
+    font-size: 14px;
+    height: 600px;
+  }
+}
+.fileBox{
+  width: 100%;
+  position: absolute;
+}
+.copy{
+  padding: 0;
+  margin-right: 20px;
+  text-align: right;
+}
+.resetFileBox{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 10px;
+}
+</style>
diff --git a/src/views/toCarryOutLegislativeReforms/delay/index.vue b/src/views/toCarryOutLegislativeReforms/delay/index.vue
index 77db1b6..b7c8a2b 100644
--- a/src/views/toCarryOutLegislativeReforms/delay/index.vue
+++ b/src/views/toCarryOutLegislativeReforms/delay/index.vue
@@ -210,7 +210,7 @@
         // ������������������������������������������(���������������������������)
         totalCount: 0,
         // ������������������������������
-        pageSizes: [10, 20, 30, 40],
+        pageSizes: [10, 30, 60, 100],
         // ������������������������������������������
         pageSize: 10
       },

--
Gitblit v1.8.0