瀏覽代碼

feat: add optionset

double 5 年之前
父節點
當前提交
9f41f42bd2

+ 6 - 6
src/components/ExportButton/index.vue

@@ -52,7 +52,7 @@ export default {
     onClick() {
       this.isExporting = true
       this.api(this.getExportQuery()).then(({ data }) => {
-        download(this.$api.sysAttachment.export(data)).then(() => {
+        download(data).then(() => {
           this.isExporting = false
         })
       })
@@ -64,11 +64,11 @@ export default {
           return typeof column.show === 'undefined' || column.show
         })
         .map(column => {
-          if (typeof column.formatter === 'string') {
-            column.code = column.formatter
-          } else {
-            delete column.code
-          }
+          // if (typeof column.formatter === 'string') {
+          //   column.code = column.formatter
+          // } else {
+          //   delete column.code
+          // }
           if (column.width) {
             column.width = column.width * 0.125 || 0
           }

+ 8 - 4
src/utils/download.js

@@ -1,12 +1,16 @@
+const axios = require('@/utils/request').default
 
-export default async function download(fetch) {
-  const res = await fetch
+export default async function download({ file_name, file_path }) {
+  const res = await axios({
+    url: file_path,
+    method: 'get',
+    responseType: 'blob'
+  })
   const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
   const a = window.document.createElement('a')
   const href = window.URL.createObjectURL(blob)
   const disposition = res.headers['content-disposition']
-  console.log(window.decodeURIComponent(new RegExp('filename="(.*)"').exec(disposition)))
-  const filename = window.decodeURIComponent(new RegExp('filename=(.*)').exec(disposition)[1])
+  const filename = file_name || window.decodeURIComponent(new RegExp('filename=(.*)').exec(disposition)[1])
   a.href = href
   a.download = filename
   a.click()

+ 9 - 1
src/views/menu/index.vue

@@ -24,6 +24,7 @@
                     <el-form-item>
                       <el-button type="primary" icon="el-icon-search" :size="size" @click="search">Search</el-button>
                       <el-button icon="el-icon-refresh" :size="size" @click="resetFields">Reset</el-button>
+                      <export-button :api="this.$api.sysMenu.page" :columns="tableColumns" :data-query="dataQuery" name="menu.xlsx" />
                     </el-form-item>
                   </el-col>
                 </el-row>
@@ -89,10 +90,17 @@ import Tree from '@/components/Tree'
 import Sheet from '@/components/Sheet'
 import Cascader from '@/components/Cascader'
 import OptionSet from '@/components/OptionSet'
+import ExportButton from '@/components/ExportButton'
 
 export default {
   name: 'Menu',
-  components: { Tree, Sheet, Cascader, OptionSet },
+  components: {
+    Tree,
+    Sheet,
+    Cascader,
+    OptionSet,
+    ExportButton
+  },
   data() {
     return {
       tableColumns: [

+ 4 - 2
src/views/optionset/index.vue

@@ -36,7 +36,7 @@
                   <el-form-item>
                     <el-button type="primary" icon="el-icon-search" :size="size" @click="search">查询</el-button>
                     <el-button icon="el-icon-refresh" :size="size" @click="resetFields">重置</el-button>
-                    <!-- -->
+                    <export-button :api="this.$api.sysOptionset.page" :columns="tableColumns" :data-query="dataQuery" name="optionset.xlsx" />
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -143,11 +143,13 @@
 <script>
 import { mapGetters } from 'vuex'
 import Sheet from '@/components/Sheet/index'
+import ExportButton from '@/components/ExportButton'
 
 export default {
   name: 'Optionset',
   components: {
-    Sheet
+    Sheet,
+    ExportButton
   },
   data() {
     return {

+ 9 - 7
src/views/org/index.vue

@@ -32,13 +32,9 @@
                   </el-col>
                   <el-col :span="12" style="text-align: right">
                     <el-form-item>
-                      <el-button
-                        type="primary"
-                        icon="el-icon-search"
-                        :size="size"
-                        @click="search"
-                      >Search</el-button>
+                      <el-button type="primary" icon="el-icon-search" :size="size" @click="search">Search</el-button>
                       <el-button icon="el-icon-refresh" :size="size" @click="resetFields">Reset</el-button>
+                      <export-button :api="this.$api.sysOrg.page" :columns="tableColumns" :data-query="dataQuery" name="org.xlsx" />
                     </el-form-item>
                   </el-col>
                 </el-row>
@@ -118,10 +114,16 @@ import { mapGetters } from 'vuex'
 import Tree from '@/components/Tree'
 import Sheet from '@/components/Sheet'
 import Cascader from '@/components/Cascader'
+import ExportButton from '@/components/ExportButton'
 
 export default {
   name: 'Org',
-  components: { Tree, Sheet, Cascader },
+  components: {
+    Tree,
+    Sheet,
+    Cascader,
+    ExportButton
+  },
   data() {
     return {
       tableColumns: [

+ 5 - 8
src/views/role/index.vue

@@ -30,7 +30,7 @@
                   <el-form-item>
                     <el-button type="primary" icon="el-icon-search" :size="size" @click="search">查询</el-button>
                     <el-button icon="el-icon-refresh" :size="size" @click="resetFields">重置</el-button>
-                    <!-- -->
+                    <export-button :api="this.$api.sysRole.page" :columns="tableColumns" :data-query="dataQuery" name="roles.xlsx" />
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -55,12 +55,7 @@
       </el-card>
     </el-main>
 
-    <el-dialog
-      :title="dialogStatus==='create'?'新建角色':'编辑角色'"
-      :visible.sync="dialogVisible"
-      width="60%"
-      @close="dialogClose"
-    >
+    <el-dialog :title="dialogStatus==='create'?'新建角色':'编辑角色'" :visible.sync="dialogVisible" width="60%" @close="dialogClose">
       <el-form ref="dataForm" :size="size" :rules="rules" :model="temp" label-width="85px">
         <el-form-item label="角色名:" prop="name">
           <el-input v-model="temp.name" :size="size" placeholder="请输入角色名" />
@@ -128,12 +123,14 @@ import { mapGetters } from 'vuex'
 import { deepClone } from '@/utils/index'
 import Sheet from '@/components/Sheet'
 import treeTransfer from 'el-tree-transfer'
+import ExportButton from '@/components/ExportButton'
 
 export default {
   name: 'Role',
   components: {
     Sheet,
-    treeTransfer
+    treeTransfer,
+    ExportButton
   },
   data() {
     return {

+ 5 - 8
src/views/tracker/index.vue

@@ -4,13 +4,7 @@
       <el-card>
         <el-container>
           <el-header height="120">
-            <el-form
-              ref="searchForm"
-              :model="dataQuery"
-              :size="size"
-              label-position="left"
-              label-width="80px"
-            >
+            <el-form ref="searchForm" :model="dataQuery" :size="size" label-position="left" label-width="80px">
               <el-row :gutter="20">
                 <el-col :span="6">
                   <el-form-item label="名称:" class="notice-input" label-width="60px" prop="name">
@@ -36,6 +30,7 @@
                   <el-form-item>
                     <el-button type="primary" icon="el-icon-search" :size="size" @click="search">查询</el-button>
                     <el-button icon="el-icon-refresh" :size="size" @click="resetFields">重置</el-button>
+                    <export-button :api="this.$api.sysTracker.page" :columns="tableColumns" :data-query="dataQuery" name="tracker.xlsx" />
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -81,11 +76,13 @@
 <script>
 import { mapGetters } from 'vuex'
 import Sheet from '@/components/Sheet/index'
+import ExportButton from '@/components/ExportButton'
 
 export default {
   name: 'Tracker',
   components: {
-    Sheet
+    Sheet,
+    ExportButton
   },
   data() {
     return {