add 代码生成导出excel
This commit is contained in:
parent
419a63a377
commit
61fff747bc
@ -135,7 +135,7 @@ export const useThemeConfig = defineStore('themeConfig', {
|
||||
// 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 zh-cn
|
||||
globalI18n: 'zh-cn',
|
||||
// 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
|
||||
globalComponentSize: 'large',
|
||||
globalComponentSize: 'default',
|
||||
},
|
||||
}),
|
||||
actions: {
|
||||
|
110
src/utils/zipdownload.ts
Normal file
110
src/utils/zipdownload.ts
Normal file
@ -0,0 +1,110 @@
|
||||
import axios from 'axios'
|
||||
import {getToken} from "/@/utils/gfast"
|
||||
import { ElMessage,ElLoading } from 'element-plus';
|
||||
const mimeMap = {
|
||||
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
zip: 'application/zip'
|
||||
}
|
||||
|
||||
const baseUrl = import.meta.env.VITE_API_URL
|
||||
export function downLoadZip(str:string, filename:string) {
|
||||
var url = baseUrl + str
|
||||
axios({
|
||||
method: 'get',
|
||||
url: url,
|
||||
responseType: 'blob',
|
||||
headers: { 'Authorization': 'Bearer ' + getToken() }
|
||||
}).then(res => {
|
||||
if(filename){
|
||||
res.headers['content-disposition'] = 'attachment; filename='+filename;
|
||||
}
|
||||
resolveBlob(res, mimeMap.zip)
|
||||
})
|
||||
}
|
||||
|
||||
// 下载插件
|
||||
export function downLoadXml (url:string,params:any,rType='get') {
|
||||
url = baseUrl + url
|
||||
const loading = ElLoading.service({
|
||||
lock: true,
|
||||
text: '正在生成导出数据...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
let option = {
|
||||
url: url,
|
||||
params:params,
|
||||
timeout:300000,
|
||||
method: 'get',
|
||||
responseType: 'blob',
|
||||
headers: { 'Authorization': 'Bearer ' + getToken() }
|
||||
}
|
||||
if(rType=='post'){
|
||||
option = {
|
||||
url: url,
|
||||
data:params,
|
||||
timeout:300000,
|
||||
method: 'post',
|
||||
responseType: 'blob',
|
||||
headers: { 'Authorization': 'Bearer ' + getToken() }
|
||||
}
|
||||
}
|
||||
axios(option).then(res => {
|
||||
loading.close()
|
||||
if (res.status !== 200) {
|
||||
ElMessage({
|
||||
message: '发生错误,导出失败。',
|
||||
type: 'error'
|
||||
})
|
||||
return
|
||||
}
|
||||
try {
|
||||
const aLink = document.createElement('a')
|
||||
var blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
|
||||
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
|
||||
var contentDisposition = decodeURI(res.headers['content-disposition'] || res.headers['Content-Disposition'])
|
||||
var result = patt.exec(contentDisposition)
|
||||
var fileName = result[1]
|
||||
fileName = fileName.replace(/"/g, '')
|
||||
aLink.href = URL.createObjectURL(blob)
|
||||
aLink.setAttribute('download', fileName) // 设置下载文件名称
|
||||
document.body.appendChild(aLink)
|
||||
aLink.click()
|
||||
document.body.appendChild(aLink)
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
ElMessage({
|
||||
message: '下载失败,可能您登录状态过期,请重新登录后下载。',
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
}).catch(e=>{
|
||||
console.log(e)
|
||||
loading.close()
|
||||
ElMessage({
|
||||
message: '导出失败',
|
||||
type: 'error'
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析blob响应内容并下载
|
||||
* @param {*} res blob响应内容
|
||||
* @param {String} mimeType MIME类型
|
||||
*/
|
||||
export function resolveBlob(res: any, mimeType:any) {
|
||||
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']||res.headers['Content-Disposition'])
|
||||
var result = patt.exec(contentDisposition)
|
||||
var fileName = result[1]
|
||||
fileName = fileName.replace(/\"/g, '')
|
||||
aLink.href = URL.createObjectURL(blob)
|
||||
aLink.setAttribute('download', fileName) // 设置下载文件名称
|
||||
document.body.appendChild(aLink)
|
||||
aLink.click()
|
||||
document.body.appendChild(aLink)
|
||||
}
|
@ -46,12 +46,17 @@
|
||||
<el-input type="textarea" :rows="3" v-model="info.remark"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col class="mb20" :span="12">
|
||||
<el-col class="mb20" :span="8">
|
||||
<el-form-item label="是否覆盖原有文件" prop="overwrite">
|
||||
<el-checkbox v-model="info.overwrite" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col class="mb20" :span="12">
|
||||
<el-col class="mb20" :span="8">
|
||||
<el-form-item label="是否可导出到excel" prop="overwrite">
|
||||
<el-checkbox v-model="info.excelPort" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col class="mb20" :span="8">
|
||||
<el-form-item label="是否有显示详情功能" prop="showDetail">
|
||||
<el-checkbox v-model="info.showDetail" />
|
||||
</el-form-item>
|
||||
@ -99,7 +104,6 @@ export default defineComponent({
|
||||
return tag;
|
||||
};
|
||||
const close = ()=>{
|
||||
console.log('xxxxxxxxxxxxxxxxxxxxxxx')
|
||||
emit('close')
|
||||
}
|
||||
const rules = reactive<FormRules>({
|
||||
|
@ -66,6 +66,7 @@ export interface TableDataInfo extends TableData{
|
||||
remark:string;
|
||||
overwrite:boolean;
|
||||
showDetail:boolean;
|
||||
excelPort:boolean;
|
||||
tplCategory:string;
|
||||
packageName:string;
|
||||
moduleName:string;
|
||||
|
@ -20,7 +20,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
|
||||
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
|
||||
hmr: true,
|
||||
optimizeDeps: {
|
||||
include: ['element-plus/lib/locale/lang/zh-cn', 'element-plus/lib/locale/lang/en', 'element-plus/lib/locale/lang/zh-tw'],
|
||||
include: ['element-plus/es/locale/lang/zh-cn', 'element-plus/es/locale/lang/en', 'element-plus/es/locale/lang/zh-tw'],
|
||||
},
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
|
Loading…
x
Reference in New Issue
Block a user