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
|
// 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 zh-cn
|
||||||
globalI18n: 'zh-cn',
|
globalI18n: 'zh-cn',
|
||||||
// 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
|
// 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
|
||||||
globalComponentSize: 'large',
|
globalComponentSize: 'default',
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
actions: {
|
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-input type="textarea" :rows="3" v-model="info.remark"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="mb20" :span="12">
|
<el-col class="mb20" :span="8">
|
||||||
<el-form-item label="是否覆盖原有文件" prop="overwrite">
|
<el-form-item label="是否覆盖原有文件" prop="overwrite">
|
||||||
<el-checkbox v-model="info.overwrite" />
|
<el-checkbox v-model="info.overwrite" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</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-form-item label="是否有显示详情功能" prop="showDetail">
|
||||||
<el-checkbox v-model="info.showDetail" />
|
<el-checkbox v-model="info.showDetail" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -99,7 +104,6 @@ export default defineComponent({
|
|||||||
return tag;
|
return tag;
|
||||||
};
|
};
|
||||||
const close = ()=>{
|
const close = ()=>{
|
||||||
console.log('xxxxxxxxxxxxxxxxxxxxxxx')
|
|
||||||
emit('close')
|
emit('close')
|
||||||
}
|
}
|
||||||
const rules = reactive<FormRules>({
|
const rules = reactive<FormRules>({
|
||||||
|
@ -66,6 +66,7 @@ export interface TableDataInfo extends TableData{
|
|||||||
remark:string;
|
remark:string;
|
||||||
overwrite:boolean;
|
overwrite:boolean;
|
||||||
showDetail:boolean;
|
showDetail:boolean;
|
||||||
|
excelPort:boolean;
|
||||||
tplCategory:string;
|
tplCategory:string;
|
||||||
packageName:string;
|
packageName:string;
|
||||||
moduleName:string;
|
moduleName:string;
|
||||||
|
@ -20,7 +20,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
|
|||||||
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
|
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
|
||||||
hmr: true,
|
hmr: true,
|
||||||
optimizeDeps: {
|
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: {
|
server: {
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user