From f4b922165ce2ed5843a3d37fce0e9ca4c5cf45bc Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 15 May 2024 17:21:09 +0800
Subject: [PATCH] 场所导入导出新增完善

---
 src/views/place/index.vue |  134 ++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 128 insertions(+), 6 deletions(-)

diff --git a/src/views/place/index.vue b/src/views/place/index.vue
index 57cbf2f..772668f 100644
--- a/src/views/place/index.vue
+++ b/src/views/place/index.vue
@@ -5,6 +5,18 @@
             :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
             @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
             @refresh-change="refreshChange" @on-load="onLoad">
+
+            <template slot="menuLeft">
+                <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.place_delete"
+                    @click="handleDelete">删 除
+                </el-button>
+                <el-button type="success" size="small" plain v-if="permission.place_import" icon="el-icon-upload2"
+                    @click="handleImport">导入
+                </el-button>
+                <el-button type="warning" size="small" plain v-if="permission.place_export" icon="el-icon-download"
+                    @click="handleExport">导出
+                </el-button>
+            </template>
             <template slot-scope="{row}" slot="location">
                 <span v-text="showLocation(row.location)"></span>
             </template>
@@ -26,12 +38,6 @@
             <template slot-scope="{row, size}" slot="source">
                 <el-tag :size="size" :type="showSource(row.source).type">{{ showSource(row.source).text
                     }}</el-tag>
-            </template>
-
-            <template slot="menuLeft">
-                <el-button size="small" icon="el-icon-delete" plain v-if="permission.place_delete"
-                    @click="handleDelete">删 除
-                </el-button>
             </template>
 
             <template slot-scope="{row, size}" slot="menu">
@@ -62,6 +68,15 @@
             width="30%">
             <auditBase></auditBase>
         </el-dialog>
+        <el-dialog title="场所数据导入" append-to-body :visible.sync="excelBox" width="555px">
+            <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+                <template slot="excelTemplate">
+                    <el-button size="small" type="primary" @click="handleTemplate">
+                        点击下载<i class="el-icon-download el-icon--right"></i>
+                    </el-button>
+                </template>
+            </avue-form>
+        </el-dialog>
     </basic-container>
 </template>
 
@@ -77,7 +92,22 @@
 import {
     mapGetters
 } from "vuex"
+import {
+  exportBlob
+} from "@/api/common"
 
+import {
+  getToken
+} from '@/util/auth'
+import {
+  downloadXls,
+} from "@/util/util"
+import {
+  dateNow
+} from "@/util/date"
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import Qs from "qs"
 import website from '@/config/website'
 
 import auditBase from './components/auditBase'
@@ -99,6 +129,55 @@
         }
 
         return {
+            excelOption: {
+                submitBtn: false,
+                emptyBtn: false,
+                column: [{
+                    label: '模板上传',
+                    prop: 'excelFile',
+                    type: 'upload',
+                    drag: true,
+                    loadText: '模板上传中,请稍等',
+                    span: 24,
+                    propsHttp: {
+                        res: 'data'
+                    },
+                    tip: '请上传 .xls,.xlsx 标准格式文件',
+                    action: "/api/blade-household/household/import-household"
+                },
+                {
+                    label: "数据覆盖",
+                    prop: "isCovered",
+                    type: "switch",
+                    align: "center",
+                    width: 80,
+                    dicData: [{
+                        label: "否",
+                        value: 0
+                    },
+                    {
+                        label: "是",
+                        value: 1
+                    }
+                    ],
+                    value: 0,
+                    slot: true,
+                    rules: [{
+                        required: true,
+                        message: "请选择是否覆盖",
+                        trigger: "blur"
+                    }]
+                },
+                {
+                    label: '模板下载',
+                    prop: 'excelTemplate',
+                    formslot: true,
+                    span: 24,
+                }
+                ]
+            },
+            excelForm: {}, 
+            excelBox: false,
             form: {},
             query: {},
             loading: true,
@@ -590,6 +669,12 @@
                 }
             },
         },
+        'excelForm.isCovered'() {
+            if (this.excelForm.isCovered !== '') {
+                const column = this.findObject(this.excelOption.column, "excelFile")
+                column.action = `/api/blade-place/place/import-place?isCovered=${this.excelForm.isCovered}`
+            }
+        }
     },
 
     computed: {
@@ -841,6 +926,43 @@
                 this.$refs.crud && this.$refs.crud.toggleSelection()
             })
         },
+        handleImport() {
+            this.excelBox = true
+        },
+        uploadAfter(res, done, loading, column) {
+            this.excelBox = false
+            this.onLoad(this.page)
+            this.$message({
+                type: "success",
+                message: res
+            })
+            this.$refs.crud.toggleSelection()
+            done()
+        },
+        handleExport() {
+            this.$confirm("是否导出场所数据?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(() => {
+                NProgress.start()
+                var data = {
+                    ...this.query
+                }
+                data = Qs.stringify(data)
+                exportBlob(
+                    `/api/blade-place/place/export-place?${this.website.tokenHeader}=${getToken()}&` + data
+                ).then(res => {
+                    downloadXls(res.data, `场所数据表${dateNow()}.xlsx`)
+                    NProgress.done()
+                })
+            })
+        },
+        handleTemplate() {
+            exportBlob(`/api/blade-place/place/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+                downloadXls(res.data, "场所数据模板.xlsx")
+            })
+        },
         handleDelete() {
             if (this.selectionList.length === 0) {
                 this.$message.warning("请选择至少一条数据")

--
Gitblit v1.9.3