728x90
반응형
Vue 엑셀 다운로드 기능
요청부에서 HTTP 송수신을 호출하고 다시 그안에서 엑셀 파일이 다운로드 되겠금
아래와 같이 구성하였다
//엑셀 파일 다운로드
import util from './util.js'
/** 날짜 YYYYMMDD 형식으로 변환 */
Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString();
var dd = this.getDate().toString();
return yyyy + (mm[1] ? mm : '0'+mm[0]) + (dd[1] ? dd : '0'+dd[0]);
}
export default {
/**
* 엑셀 파일 다운로드 기능
* 응답 받은 데이터를 파일로 변환시켜 다운 받을 수 있도록 한다
**/
getExcelFile(response, fileName) {
let result = document.createElement('a');
console.log((new Date()).yyyymmdd());
let blob = new Blob([response.data], {type: response.headers['content-type']})
//파일이름이 없을 경우 기본 파일이름을 셋팅한다
// 기본 파일이름 : export_yyyymmdd.xlsx
fileName = util.isNull(fileName) ? 'export' : fileName;
fileName = fileName+'_'+(new Date()).yyyymmdd()+'.xlsx';
//this.fileCheck(fileName);
let link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.target = '_self';
link.download = fileName;
link.click();
}
}
//HTTP 송수신부
export default {
/**
* 엑셀다운로드 기능
*
* [HEADER 지정]
* 기존 전문 요청 형식과 똑같고 추가로 HEADER에 컬럼 헤더 제목을 지정한다
* 지정하지 않으면 기본으로 컬럼 키값으로 셋팅 된다
*
* [파일이름 지정]
* fileName 설정하려면 fileName에 원하는 파일이름을 담아서 넘긴다
*
* [요청방법]
* EXCEL 다운로드할 전문 및 프로시저를 생성하고
* VALUE에 조회조건을 셋팅해 엑셀 다운로드를 요청한다
* 아래의 예시와 같이 호출하는 곳에서 param을 셋팅해서 요청 하면된다
*
* ex)
* var param = {
REQ_TYPE:"203"
, REQ_NUM:'AW03_05_V01'
, VALUE:"│" //조회 조건
// 엑셀 헤더 String 배열로 입력된 그대로 헤더를 만든다
// 헤더를 지정하지 않으면 기본 컬럼 키 값으로 헤더를 만든다
, HEADER: ["템플릿_코드","템플릿_구분","템플릿_구분 값","템플릿_제목","템플릿_내용","버튼_정보 (버튼명)","입력_일시","승인_상태","승인_상태 값","반려 메세지"]
}
*
*/
sendExcelDown: function(vue, param, suc, fail) {
common.IS_LOADING = true;
//공통 파라메터 적용 셋팅
this.commonParam(param);
let URI = common.BASE_URL + "excelDownApi";
axios.post(
`${URI}`
, param
,{responseType: 'arraybuffer'}
)
.then((ret) => {
common.IS_LOADING = false;
//파일 이름 지정 지정하지 않으면 export_yyyymmdd.xlsx 가 기본값이 된다
var filename = '';
fileUtil.getExcelFile(ret, filename);
}
)
.catch(e => {
common.IS_LOADING = false;
if (fail != undefined) {
fail(vue, e);
}
})
}
}
//요청부
methods: {
excelDown: function() { //전문 데이터 전송
var param = {
REQ_TYPE:"203"
, REQ_NUM:'AW03_05_V01'
, VALUE:"│" //조회 조건
// 엑셀 헤더 String 배열로 입력된 그대로 헤더를 만든다
// 헤더를 지정하지 않으면 기본 컬럼 키 값으로 헤더를 만든다
, HEADER: ["템플릿_코드","템플릿_구분","템플릿_구분 값","템플릿_제목","템플릿_내용","버튼_정보 (버튼명)","입력_일시","승인_상태","승인_상태 값","반려 메세지"]
}
// 통신 호출
httpCommon.sendExcelDown(this, param, function suc(vue, data) {
//console.log('test complete');
});
}
}
728x90
반응형