新增通用方法简化下载使用
This commit is contained in:
		
							parent
							
								
									02b95f95a8
								
							
						
					
					
						commit
						ded99502ae
					
				| 
						 | 
				
			
			@ -211,6 +211,7 @@ public class FileUtils
 | 
			
		|||
                .append(percentEncodedFileName);
 | 
			
		||||
 | 
			
		||||
        response.setHeader("Content-disposition", contentDispositionValue.toString());
 | 
			
		||||
        response.setHeader("download-filename", percentEncodedFileName);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,8 +107,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
 | 
			
		|||
                        "/**/*.js",
 | 
			
		||||
                        "/profile/**"
 | 
			
		||||
                ).permitAll()
 | 
			
		||||
                .antMatchers("/common/download**").anonymous()
 | 
			
		||||
                .antMatchers("/common/download/resource**").anonymous()
 | 
			
		||||
                .antMatchers("/swagger-ui.html").anonymous()
 | 
			
		||||
                .antMatchers("/swagger-resources/**").anonymous()
 | 
			
		||||
                .antMatchers("/webjars/**").anonymous()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -567,7 +567,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return export${BusinessName}(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.#[[$download]]#.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ import './assets/icons' // icon
 | 
			
		|||
import './permission' // permission control
 | 
			
		||||
import { getDicts } from "@/api/system/dict/data";
 | 
			
		||||
import { getConfigKey } from "@/api/system/config";
 | 
			
		||||
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/ruoyi";
 | 
			
		||||
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
 | 
			
		||||
// 分页组件
 | 
			
		||||
import Pagination from "@/components/Pagination";
 | 
			
		||||
// 自定义表格工具组件
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,6 @@ Vue.prototype.resetForm = resetForm
 | 
			
		|||
Vue.prototype.addDateRange = addDateRange
 | 
			
		||||
Vue.prototype.selectDictLabel = selectDictLabel
 | 
			
		||||
Vue.prototype.selectDictLabels = selectDictLabels
 | 
			
		||||
Vue.prototype.download = download
 | 
			
		||||
Vue.prototype.handleTree = handleTree
 | 
			
		||||
 | 
			
		||||
// 全局组件挂载
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
import { saveAs } from 'file-saver'
 | 
			
		||||
import axios from 'axios'
 | 
			
		||||
import { getToken } from '@/utils/auth'
 | 
			
		||||
 | 
			
		||||
const baseURL = process.env.VUE_APP_BASE_API
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name(name, isDelete = true) {
 | 
			
		||||
    var url = baseURL + "/common/download?fileName=" + encodeURI(name) + "&delete=" + isDelete
 | 
			
		||||
    axios({
 | 
			
		||||
      method: 'get',
 | 
			
		||||
      url: url,
 | 
			
		||||
      responseType: 'blob',
 | 
			
		||||
      headers: { 'Authorization': 'Bearer ' + getToken() }
 | 
			
		||||
    }).then(res => {
 | 
			
		||||
      const blob = new Blob([res.data])
 | 
			
		||||
      this.saveAs(blob, decodeURI(res.headers['download-filename']))
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  resource(resource) {
 | 
			
		||||
    var url = baseURL + "/common/download/resource?resource=" + encodeURI(resource);
 | 
			
		||||
    axios({
 | 
			
		||||
      method: 'get',
 | 
			
		||||
      url: url,
 | 
			
		||||
      responseType: 'blob',
 | 
			
		||||
      headers: { 'Authorization': 'Bearer ' + getToken() }
 | 
			
		||||
    }).then(res => {
 | 
			
		||||
      const blob = new Blob([res.data])
 | 
			
		||||
      this.saveAs(blob, decodeURI(res.headers['download-filename']))
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  zip(url, name) {
 | 
			
		||||
    var url = baseURL + url
 | 
			
		||||
    axios({
 | 
			
		||||
      method: 'get',
 | 
			
		||||
      url: url,
 | 
			
		||||
      responseType: 'blob',
 | 
			
		||||
      headers: { 'Authorization': 'Bearer ' + getToken() }
 | 
			
		||||
    }).then(res => {
 | 
			
		||||
      const blob = new Blob([res.data], { type: 'application/zip' })
 | 
			
		||||
      this.saveAs(blob, name)
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  saveAs(text, name, opts) {
 | 
			
		||||
    saveAs(text, name, opts);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
import cache from './cache'
 | 
			
		||||
import modal from './modal'
 | 
			
		||||
import download from './download'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  install(Vue) {
 | 
			
		||||
| 
						 | 
				
			
			@ -7,5 +8,7 @@ export default {
 | 
			
		|||
    Vue.prototype.$cache = cache
 | 
			
		||||
    // 模态框对象
 | 
			
		||||
    Vue.prototype.$modal = modal
 | 
			
		||||
    // 下载文件
 | 
			
		||||
    Vue.prototype.$download = download
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,6 @@
 | 
			
		|||
 * Copyright (c) 2019 ruoyi
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const baseURL = process.env.VUE_APP_BASE_API
 | 
			
		||||
 | 
			
		||||
// 日期格式化
 | 
			
		||||
export function parseTime(time, pattern) {
 | 
			
		||||
	if (arguments.length === 0 || !time) {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,11 +93,6 @@ export function selectDictLabels(datas, value, separator) {
 | 
			
		|||
	return actions.join('').substring(0, actions.join('').length - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 通用下载方法
 | 
			
		||||
export function download(fileName) {
 | 
			
		||||
	window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 字符串格式化(%s )
 | 
			
		||||
export function sprintf(str) {
 | 
			
		||||
	var args = arguments, flag = true, i = 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,42 +0,0 @@
 | 
			
		|||
import axios from 'axios'
 | 
			
		||||
import { getToken } from '@/utils/auth'
 | 
			
		||||
 | 
			
		||||
const mimeMap = {
 | 
			
		||||
  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 | 
			
		||||
  zip: 'application/zip'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const baseUrl = process.env.VUE_APP_BASE_API
 | 
			
		||||
export function downLoadZip(str, filename) {
 | 
			
		||||
  var url = baseUrl + str
 | 
			
		||||
  axios({
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    url: url,
 | 
			
		||||
    responseType: 'blob',
 | 
			
		||||
    headers: { 'Authorization': 'Bearer ' + getToken() }
 | 
			
		||||
  }).then(res => {
 | 
			
		||||
    resolveBlob(res, mimeMap.zip)
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
 * 解析blob响应内容并下载
 | 
			
		||||
 * @param {*} res blob响应内容
 | 
			
		||||
 * @param {String} mimeType MIME类型
 | 
			
		||||
 */
 | 
			
		||||
export function resolveBlob(res, mimeType) {
 | 
			
		||||
  const aLink = document.createElement('a')
 | 
			
		||||
  var blob = new Blob([res.data], { type: mimeType })
 | 
			
		||||
  // //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
 | 
			
		||||
  var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
 | 
			
		||||
  var contentDisposition = decodeURI(res.headers['content-disposition'])
 | 
			
		||||
  var result = patt.exec(contentDisposition)
 | 
			
		||||
  var fileName = result[1]
 | 
			
		||||
  fileName = fileName.replace(/\"/g, '')
 | 
			
		||||
  aLink.style.display = 'none'
 | 
			
		||||
  aLink.href = URL.createObjectURL(blob)
 | 
			
		||||
  aLink.setAttribute('download', fileName) // 设置下载文件名称
 | 
			
		||||
  document.body.appendChild(aLink)
 | 
			
		||||
  aLink.click()
 | 
			
		||||
  URL.revokeObjectURL(aLink.href);//清除引用
 | 
			
		||||
  document.body.removeChild(aLink);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -515,7 +515,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportJob(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -298,7 +298,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportJobLog(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -221,7 +221,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportLogininfor(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -308,7 +308,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportOperlog(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -339,7 +339,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportConfig(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -385,7 +385,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportData(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -343,7 +343,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportType(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -310,7 +310,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportPost(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -618,7 +618,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportRole(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -648,7 +648,7 @@ export default {
 | 
			
		|||
        this.exportLoading = true;
 | 
			
		||||
        return exportUser(queryParams);
 | 
			
		||||
      }).then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
        this.exportLoading = false;
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			@ -660,7 +660,7 @@ export default {
 | 
			
		|||
    /** 下载模板操作 */
 | 
			
		||||
    importTemplate() {
 | 
			
		||||
      importTemplate().then(response => {
 | 
			
		||||
        this.download(response.msg);
 | 
			
		||||
        this.$download.name(response.msg);
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 文件上传中处理
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -137,23 +137,13 @@
 | 
			
		|||
 | 
			
		||||
<script>
 | 
			
		||||
import draggable from 'vuedraggable'
 | 
			
		||||
import { saveAs } from 'file-saver'
 | 
			
		||||
import beautifier from 'js-beautify'
 | 
			
		||||
import ClipboardJS from 'clipboard'
 | 
			
		||||
import render from '@/utils/generator/render'
 | 
			
		||||
import RightPanel from './RightPanel'
 | 
			
		||||
import {
 | 
			
		||||
  inputComponents,
 | 
			
		||||
  selectComponents,
 | 
			
		||||
  layoutComponents,
 | 
			
		||||
  formConf
 | 
			
		||||
} from '@/utils/generator/config'
 | 
			
		||||
import {
 | 
			
		||||
  exportDefault, beautifierConf, isNumberStr, titleCase
 | 
			
		||||
} from '@/utils/index'
 | 
			
		||||
import {
 | 
			
		||||
  makeUpHtml, vueTemplate, vueScript, cssStyle
 | 
			
		||||
} from '@/utils/generator/html'
 | 
			
		||||
import { inputComponents, selectComponents, layoutComponents, formConf } from '@/utils/generator/config'
 | 
			
		||||
import { beautifierConf, titleCase } from '@/utils/index'
 | 
			
		||||
import { makeUpHtml, vueTemplate, vueScript, cssStyle } from '@/utils/generator/html'
 | 
			
		||||
import { makeUpJs } from '@/utils/generator/js'
 | 
			
		||||
import { makeUpCss } from '@/utils/generator/css'
 | 
			
		||||
import drawingDefalut from '@/utils/generator/drawingDefalut'
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +151,6 @@ import logo from '@/assets/logo/logo.png'
 | 
			
		|||
import CodeTypeDialog from './CodeTypeDialog'
 | 
			
		||||
import DraggableItem from './DraggableItem'
 | 
			
		||||
 | 
			
		||||
const emptyActiveData = { style: {}, autosize: {} }
 | 
			
		||||
let oldActiveId
 | 
			
		||||
let tempActiveData
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -287,7 +276,7 @@ export default {
 | 
			
		|||
    execDownload(data) {
 | 
			
		||||
      const codeStr = this.generateCode()
 | 
			
		||||
      const blob = new Blob([codeStr], { type: 'text/plain;charset=utf-8' })
 | 
			
		||||
      saveAs(blob, data.fileName)
 | 
			
		||||
      this.$download.saveAs(blob, data.fileName)
 | 
			
		||||
    },
 | 
			
		||||
    execCopy(data) {
 | 
			
		||||
      document.getElementById('copyNode').click()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,7 +180,6 @@
 | 
			
		|||
<script>
 | 
			
		||||
import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen";
 | 
			
		||||
import importTable from "./importTable";
 | 
			
		||||
import { downLoadZip } from "@/utils/zipdownload";
 | 
			
		||||
import hljs from "highlight.js/lib/highlight";
 | 
			
		||||
import "highlight.js/styles/github-gist.css";
 | 
			
		||||
hljs.registerLanguage("java", require("highlight.js/lib/languages/java"));
 | 
			
		||||
| 
						 | 
				
			
			@ -270,7 +269,7 @@ export default {
 | 
			
		|||
          this.$modal.msgSuccess("成功生成到自定义路径:" + row.genPath);
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        downLoadZip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi");
 | 
			
		||||
        this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi");
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    /** 同步数据库操作 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue