| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801 |
- import dayjs from 'dayjs';
- import { utils, writeFile } from "xlsx";
- import * as XLSX from 'xlsx-js-style/dist/xlsx.bundle.js';
- /*
- * Harmory 3.0 Util Plugin
- * Version : 1.0
- * Make By Jason 2022
- */
- let util = {
- /**
- * @TODO 함수설명 필요
- **/
- toStr(str){
- return str + ''
- },
- /**
- * @TODO 함수설명 필요
- **/
- nvl(str, restr){
- if (str === '' || str === null || typeof(str) === 'undefined' || str === 'undefined' || str === 'null'){
- if (restr === ''){
- return ''
- } else {
- return restr
- }
- }else{
- return str
- }
- },
- /**
- * @TODO 함수설명 필요
- */
- isNull(str){
- if ( str === '' || str === null || str === undefined || typeof(str) === 'undefined' || str ==='undefined' || str ==='null'){
- return true
- }else{
- return false
- }
- },
- /**
- * @TODO 함수설명 필요
- * 로깅처리 하는 글로벌 Util
- * LOGGING =='YES' 일때만 처리함
- **/
- log(msg, level){
- console.log(level+'|', msg)
- },
- colorLog(msg){
- // console.log("%c"+dayjs().format('YYYY-MM-DD HH:mm:ss')+" "+msg, 'color:#02f7eb')
- },
- /**
- * @TODO 좌우 Trim
- **/
- trim(data){
- return data.replace(/^\s+|\s+$/g, '')
- },
- /**
- * @TODO 왼쪽으로 Trim
- **/
- ltrim(data){
- return data.replace(/^\s+/, '')
- },
- /**
- * @TODO 오른쪽으로 trim
- **/
- rtrim(data){
- return data.replace(/\s+$/, '')
- },
- /**
- * @TODO 소수점 자리숫를 파싱한다.
- **/
- toRoundFix(data, digit){
- if(Number.isInteger(parseFloat(data))){
- return parseFloat(data)
- } else {
- return parseFloat(data).toFixed(digit)
- }
- },
- fillZero(number, width){
- width -= number.toString().length
- if ( width > 0 ){
- return new Array( width + (/\./.test( number ) ? 2 : 1) ).join( '0' ) + number
- }
- return number + '' // always return a strin
- },
- hex2Float(number, underDigit){
- let sNum = ''
- let num = parseInt(number, 16)
- sNum += parseFloat(num/100).toFixed(underDigit)
- return sNum
- },
- decimalToHex(d, padding){
- let hex = Number(d).toString(16)
- padding = typeof (padding) === 'undefined' || padding === null ? padding = 2 : padding
- while (hex.length < padding){
- hex = '0' + hex
- }
- return hex.toUpperCase()
- },
- left(str, n){
- if (n <= 0){
- return ''
- }else if (n > String(str).length){
- return str
- }else{
- return String(str).substring(0, n)
- }
- },
- right(str, n){
- if (n <= 0){
- return ''
- }else if (n > String(str).length){
- return str
- }else{
- let iLen = String(str).length
- return String(str).substring(iLen, iLen - n)
- }
- },
- convert12Hour(hour){
- return ''+util.fillZero((parseInt(hour, 10) + 24) % 12 || 12, 2)
- },
- getStrLength(str){
- let strLength = 0
- let i
- for (i = 0; i < str.length; i++){
- let code = str.charCodeAt(i)
- let ch = str.substr(i, 1).toUpperCase()
- code = parseInt(code)
- if ((ch < '0' || ch > '9') && (ch < 'A' || ch > 'Z') && ((code > 255) || (code < 0)))
- strLength = strLength + 2
- else
- strLength = strLength + 1
- }
- return strLength
- },
- str2Hex(instr){
- let str = ''+instr
- let hex = ''
- for(let i = 0; i<str.length; i++){
- hex += '' + str.charCodeAt(i).toString(16)
- }
- return hex
- },
- getTextCutByte(obj, len){
- let str = $(obj).val()
- let str_len = str.length
- let bytes = 0
- let result = true
- for(let i=0; i<str.length; i++){
- let ch = str.charAt(i)
- if(escape(ch).length > 4){
- bytes += 2
- }else if(ch === '\n'){
- if(str.charAt(i-1) != '\r'){
- bytes += 1
- }
- }else if(ch === '<' || ch === '>'){
- bytes += 4
- }else{
- bytes += 1
- }
- if(bytes > len){
- str_len--
- $(obj).val(str.substring(0, str_len))
- }
- }
- if(bytes > len){
- result = false
- }
- return result
- },
- getOS(){
- let ua = String( navigator.userAgent ).toLowerCase()
- if(/iphone|ipad/.test(ua)){
- return 'ios'
- }else if(/android/.test(ua)){
- return 'android'
- }else{
- return 'android'
- }
- },
- setComma(num){
- let sign = ''
- let rnum = String(num)
- if(rnum.substring(0, 1) == '-'){
- sign = '-'
- rnum = rnum.substring(1)
- }
- let spNum = rnum.split('.')
- return sign + spNum[0].replace(/\D/g, '').replace(/\B(?=(\d{3})+(?!\d))/g, ',') + (spNum[1] ? '.' + spNum[1] : '')
- },
- setUnComma(num){
- num = String(num)
- return num.replace(/[^\d]+/g, '')
- },
- setInputNumberComma(obj){
- return util.setComma(util.setUnComma(obj))
- },
- get24To12(hour){
- var _result = 0
- var _hour = parseInt(hour, 10)
- if(_hour === 0){
- _result = 12
- }else if(_hour > 12){
- _result = _hour - 12
- }else{
- _result = _hour
- }
- return _result
- },
- /**
- * @param2 : 0: 오전 / 1: 오후
- */
- get12To24(hour, ampm){
- let _result = 0
- let _hour = parseInt(hour, 10)
- if(ampm === 0 ){
- if(_hour === 12){
- _result = 0
- }else{
- _result = _hour
- }
- }else if(ampm === 1){
- if(_hour != 12){
- _result = _hour + 12
- }else{
- _result = 12
- }
- }else{
- return _hour
- }
- return _result
- },
- /**
- * 연락처 자동 파이프(-)생성 계산식
- * @param {*} data
- */
- getPhoneMask(data){
- if(!util.isNull(data)){
- data = data.replace(/[^0-9]/g, '')
- let res = ''
- if(data.length < 3){
- res = data
- } else {
- if(data.substr(0, 2) =='02'){
- if(data.length <= 5){//02-123-5678
- res = data.substr(0, 2) + '-' + data.substr(2, 3)
- } else if(data.length > 5 && data.length <= 9){//02-123-5678
- res = data.substr(0, 2) + '-' + data.substr(2, 3) + '-' + data.substr(5)
- } else {//02-1234-5678
- data = data.substr(0, 10)
- res = data.substr(0, 2) + '-' + data.substr(2, 4) + '-' + data.substr(6)
- }
- } else {
- if(data.length < 8){
- res = data
- } else if(data.length == 8){
- res = data.substr(0, 4) + '-' + data.substr(4)
- } else if(data.length == 9){
- res = data.substr(0, 3) + '-' + data.substr(3, 3) + '-' + data.substr(6)
- } else if(data.length == 10){
- res = data.substr(0, 3) + '-' + data.substr(3, 3) + '-' + data.substr(6)
- } else if(data.length == 11){ //010-1234-5678
- res = data.substr(0, 3) + '-' + data.substr(3, 4) + '-' + data.substr(7)
- }else {
- data = data.substr(0, 11)
- res = data.substr(0, 3) + '-' + data.substr(3, 4) + '-' + data.substr(7)
- }
- }
- }
- return res
- }else{
- return data
- }
- },
- /**
- * 사업자 등록번호 파이프(-) 자동입력 :
- * ex) 123-45-67890
- */
- getBisinessMask(data){
- if(!data) return data
- data = data.replace(/[^0-9]/g, '')
- let res = ''
- if(data.length < 3){
- res = data
- } else {
- if(data.length <= 5){
- res = data.substr(0, 3) + '-' + data.substr(3, 2)
- }else if(data.length >= 6){
- res = data.substr(0, 3) + '-' + data.substr(3, 2) + '-' + data.substr(5)
- }
- }
- return res
- },
- replaceAll(str, searchStr, replaceStr){
- if(util.nvl(str, '') === ''){
- return ''
- }
- return str.split(searchStr).join(replaceStr)
- },
- setDragged(obj){
- let el = $(obj.el).parent().parent()[0]
- if (!$(el).hasClass('laypop_renew')){
- el = $(obj.el).parent().parent().parent()[0]
- }
- el.style.left =obj.offsetX+'px'
- el.style.top =obj.offsetY+'px'
- },
- //Blob형태로 다운로드 할때 사용
- downLoadBlob(fileName, blob){
- let downloadLink = document.createElement('a')
- downloadLink.download = fileName
- downloadLink.innerHTML = ''
- downloadLink.href = window.URL.createObjectURL(blob)
- downloadLink.onclick = function (event){
- document.body.removeChild(event.target)
- }
- downloadLink.style.visibility = 'hidden'
- document.body.appendChild(downloadLink)
- downloadLink.click()
- },
- async setPageMove(url){
- const { $log } = useNuxtApp()
- if(useRoute().path === url) {
- $log.debug('현재 경로와 이동하려는 경로가 같다면 새로고침')
- window.location.reload()
- }else{
- useRouter().push(url)
- }
- },
- isMatch(data, clone){
- return JSON.stringify(data) === JSON.stringify(clone)
- },
- /**
- * 휴대폰 하이픈 처리
- */
- getPhoneHyphen(num){
- const hyphenNum = num.replace(/[^0-9]/g, "")
- let strNum = ''
- if(hyphenNum.length >= 4 && hyphenNum.length<=7){
- strNum = hyphenNum.replace(/(\d{3})(\d{1,3})/, '$1-$2')
- }
- else if(hyphenNum.length>=8 && hyphenNum.length <= 11){
- strNum = hyphenNum.replace(/(\d{3})(\d{4})(\d{1,4})/, '$1-$2-$3')
- }
- else{
- strNum = hyphenNum.substring(0,11).replace(/(\d{3})(\d{4})(\d{1,4})/, '$1-$2-$3')
- strNum = strNum.substring(0,13)
- }
- return strNum
- },
- /**
- * 객체배열 오름차순 정렬
- */
- sortAsc(arr, key){
- return arr.sort((a,b)=>{
- var x = a[key];
- var y = b[key];
- return((x<y)?-1:((x>y)?1:0));
- })
- },
- /**
- * 객체배열 내림차순 정렬
- */
- sortDesc(arr, key){
- return arr.sort((a,b)=>{
- var x = a[key];
- var y = b[key];
- return((x>y)?-1:((x>y)?1:0));
- })
- },
- /**
- * 숫자 포맷 세팅
- * @param {*} num 변경할 숫자
- * @param {*} decimalPlaces 소수점 개수
- * @param {*} nonNumberStr 숫자가 아닐경우 표현할 문자
- * @param {*} unit 단위
- */
- fnFormatNumber(num, decimalPlaces = 2, nonNumberStr = 0, unit = '') {
- let number = Number(num)
- if(isNaN(number) || typeof number !== 'number' || num == null){
- return nonNumberStr
- }
- const hasDecimal = number % 1 !== 0
- const fixedNumber = hasDecimal ? parseFloat(number.toFixed(decimalPlaces)) : number
- const [integerPart, decimalPart] = fixedNumber.toString().split('.')
- const formattedIntegerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
- if(decimalPart){
- return `${formattedIntegerPart}.${decimalPart}${unit}`
- } else {
- return `${formattedIntegerPart}${unit}`
- }
- },
- /**
- * Excel 다운로드 (클라이언트 데이터 기반)
- *
- * @param {*} params Excel 생성 설정값
- * @param {*} headers 테이블 Header 데이터. format: [{title: '타이틀', key: '데이터Key'}, ....]
- * @param {*} tableList 테이블 row 데이터. format: [{ '데이터Key': value, ...}, ....]
- * @param {*} firstRow 테이블 최상위에 표시할 테이터 (없으면 표시하지 않음)
- * @param {*} specialStyle firstRow, 특정 셀 스타일을 주고 싶을 때
- */
- fnExcelMergeDownLoad(params, headers, tableList, firstRow, specialStyle){
- const { $dayjs } = useNuxtApp()
- //excel 파일명
- let date = $dayjs(new Date()).format('YYYYMMDD')
- let excelTitle = params.title || 'download'
- let excelBody = JSON.parse(JSON.stringify(tableList))
- let merge = [] // 행, 열 결합
- let isFirstRow = !util.isNull(firstRow)
- // 헤더 스타일
- let headerStyle = {
- fill: { fgColor: { rgb: '878fa2' } },
- font: { bold: true, color: { rgb: 'fafafa' } },
- alignment: { vertical: 'center', horizontal: 'center' }
- }
-
- // firstRow가 있으면 table 정보에 첫 Row에 삽입
- if(isFirstRow) {
- excelBody.unshift(firstRow)
- }
-
- //excel 생성 데이터
- let excelData = []
- excelBody.forEach((item) => {
- let obj = {}
- headers.forEach((names, namesIdx) => {
- let objValue = item[headers[namesIdx].key]
- obj[names.title] = (util.isNull(objValue)) ? '': objValue.toString().replace('_NONE', '')
- })
- excelData.push(obj)
- })
- // 셀병합 데이터 생성(셀병합의 경우 우선 최상단 헤더에만 존재함)
- headers.forEach((names, namesIdx) => {
- // rowspan
- if(names.hasOwnProperty('rowspan')){
- merge.push({ s: { r: 0, c: namesIdx }, e: { r: names.rowspan - 1, c: namesIdx } })
- }
- // colspan
- if(names.hasOwnProperty('colspan')){
- merge.push({ s: { r: 0, c: namesIdx }, e: { r: 0, c: namesIdx + names.colspan - 1 } })
- }
- })
-
- let excelFileName = [date, excelTitle].join('_') + '.xlsx'
- let workbook = XLSX.utils.book_new()
- let worksheet = XLSX.utils.json_to_sheet(excelData)
- // 셀 병합
- // merge = [ { s: { r: 1, c: 1 }, e: { r: 2, c: 3 } }; // A1부터 C1까지 병합 ]
- const styles = {
- '!merges': merge // 병합된 셀에 스타일 적용
- }
- // 스타일 지정
- // 헤더, firstRow 영역 스타일 설정(유니코드 65 => A, 66 => B .... 헤더 cell 스타일 적용)
- headers.forEach((header, index) => {
- let val = index / 26
- let remain = index % 26
- let doubleIndex = val >= 1 ? String.fromCharCode(65 + Math.floor(val) - 1) : ''
- worksheet[doubleIndex + String.fromCharCode(65 + remain) + '1'].s = headerStyle
- if(isFirstRow) worksheet[doubleIndex + String.fromCharCode(65 + remain) + '2'].s = specialStyle.hasOwnProperty('totalRowStyle') ? specialStyle.totalRowStyle : headerStyle
- })
- // 특정 영역에 셀 스타일 적용
- if(specialStyle.hasOwnProperty('cellStyleObj')){
- specialStyle.cellStyleObj.target.forEach((cell) => {
- worksheet[cell].s = specialStyle.cellStyleObj.cellStyle
- })
- }
- worksheet['!merges'] = styles['!merges']; // 병합 정보 업데이트
- XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
- XLSX.writeFile(workbook, excelFileName)
- return
- },
- /**
- * KREMS > 분석통계 => 그래프&테이블 영역의 파라미터 가공(start_dt, end_dt) 공통 함수
- * @param {*} periodKey : UI상 일,주,월,년,기간에 대한 파라미터
- * @param {*} start_dt : 시작일
- * @param {*} end_dt : 종료일
- * @returns
- */
- statisticsDateFormat(periodKey, start_dt, end_dt) {
- let month = 0
- let start = ''
- let end = ''
- if(periodKey === 'day') {
- // 일
- start = dayjs(start_dt).format('YYYY-MM-DD')
- end = dayjs(start_dt).format('YYYY-MM-DD')
- } else if(periodKey === 'week') {
- // 주
- if(dayjs(start_dt).format('dddd') === 'Sunday') {
- start = dayjs(start_dt).subtract(6, 'day').format('YYYY-MM-DD')
- end = dayjs(start_dt).format('YYYY-MM-DD')
- } else {
- start = dayjs(start_dt).startOf('week').subtract(-1, 'day').format('YYYY-MM-DD')
- end = dayjs(start_dt).endOf('week').subtract(-1, 'day').format('YYYY-MM-DD')
- }
- } else if(periodKey === 'month') {
- //월
- if(util.isNull(start_dt.month)) {
- // true 일때
- start = dayjs(start_dt).startOf('month').format('YYYY-MM-DD')
- end = dayjs(start_dt).endOf('month').format('YYYY-MM-DD')
- } else {
- month = start_dt.month + 1
- start = dayjs(start_dt.year+'-'+month).startOf('month').format('YYYY-MM-DD')
- end = dayjs(start_dt.year+'-'+month).endOf('month').format('YYYY-MM-DD')
- }
- } else if(periodKey === 'year') {
- start = start_dt+'-01-01'
- end = start_dt+'-12-31'
- } else if(periodKey === 'period') {
- start = dayjs(start_dt).format('YYYY-MM-DD')
- end = dayjs(end_dt).format('YYYY-MM-DD')
- }
- return [start, end]
- },
- /**
- * 엑셀다운로드 공통
- * @returns 엑셀파일
- * @param {*} params Excel 생성 설정값
- * @param {*} headers 테이블 Header 데이터. format: [{heder: '타이틀', dataKey: '데이터Key'}, ....]
- * @param {*} tableList 테이블 row 데이터. format: [{ '데이터Key': value, ...}, ....]
- * @param {*} firstRow 테이블 최상위에 표시할 테이터 (없으면 표시하지 않음)
- */
- fnExcelDownLoad(params, headers, tableList, firstRow){
- let date = dayjs(new Date()).format('YYYYMMDD')
- let excelTitle = params.title || 'download';
- let excelBody = JSON.parse(JSON.stringify(tableList));
- //firstRow가 있으면 table 정보에 첫 Row에 삽입
- if(util.isNull(firstRow) === false) {
- excelBody.unshift(firstRow);
- }
- //excel 생성 데이터
- let excelData = []
- excelBody.forEach((item) => {
- let obj = {}
- headers.forEach((names, namesIdx) => {
- let objValue = item[headers[namesIdx].dataKey]
- obj[names.header] = (util.isNull(objValue)) ? '': objValue.toString().replace('_NONE', '')
- })
- excelData.push(obj)
- });
- // var excelData = XLSX.utils.table_to_sheet(tableList); // table id를 넣어주면된다
- let excelFileName = [date, excelTitle].join('_') + '.xlsx'
- let workbook = XLSX.utils.book_new()
- let worksheet = XLSX.utils.json_to_sheet(excelData)
-
- // 헤더 스타일 설정
- const headerStyle = {
- alignment: {
- horizontal: "center",
- vertical: "center"
- },
- fill: { fgColor: { rgb: '878fa2' } },
- font: {
- bold: true
- }
- };
- // 자동 너비 계산
- const maxLengths = headers.map(header =>
- Math.max(header.header.length, ...excelData.map(row => (row[header.header] ? row[header.header].toString().length : 0)))
- )
- worksheet['!cols'] = maxLengths.map(length => ({ wch: length + 20 }));
- // 헤더 스타일을 시트에 적용
- headers.forEach((header, colIdx) => {
- const cellAddress = XLSX.utils.encode_cell({ c: colIdx, r: 0 });
- if (!worksheet[cellAddress]) {
- worksheet[cellAddress] = { v: header.header };
- }
- worksheet[cellAddress].s = headerStyle;
- });
- XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
- XLSX.writeFile(workbook, excelFileName)
- return;
- },
- /***************
- * p5g util
- ***************/
- fnExcelFormDown(arrForm, arrGuide, sheetName, fileName){
- // 엑셀 파일 생성
- const book = utils.book_new()
- // data get > 실 개발시 api 호출
- const userDataByAoa = arrForm
- const guideByAoa = arrGuide
- // sheet 생성 - aoa_to_sheet 방식
- const worksheetUserData = utils.aoa_to_sheet(userDataByAoa)
- const worksheetGuide = utils.aoa_to_sheet(guideByAoa)
- // sheet 생성 - json_to_sheet 방식
- //const worksheetByJson = xlsx.utils.json_to_sheet(fruitDataByJson)
- // 엑셀 파일에 sheet set(엑셀파일, 시트데이터, 시트명)
- utils.book_append_sheet(book, worksheetUserData, sheetName)
- utils.book_append_sheet(book, worksheetGuide, "GUIDE")
- // 엑셀 다운로드
- writeFile(book, `${fileName}.xlsx`);
- },
- /**
- * 필수 입력 필드 체크
- * @param {Array} fields 필수 입력 필드값
- * @param {Object} obj 체크할 대상
- * @returns
- */
- isAllFieldsFilled(fields, obj) {
- return fields.every(field => !util.isNull(obj[field]))
- },
- /**
- * 위도, 경도 입력 제한
- */
- fnIsValidLatlngKey(event){
- const key = event.key
- const value = event.target.value
- // 입력가능한 특수 키
- const allowedKeys = ['Backspace', 'Tab', 'Delete', 'ArrowLeft', 'ArrowRight', '-', '.']
- if (allowedKeys.includes(key) || (!isNaN(Number(key)) && key !== ' ')) {
- // '.' 한번만 입력되도록 제한
- if (key === '.' && value.includes('.')) {
- event.preventDefault()
- return false
- }
- // '-' 첫번째 위치가 아닌 경우 제한
- if (key === '-' && value.length > 0) {
- event.preventDefault();
- return false
- }
- return true
- }
- event.preventDefault()
- return false
- },
- /**
- * keydown이벤트 > 위도 입력 체크
- * @param {*} event keydown 이벤트 값
- */
- fnKeydownLatitude(event){
- const isValid = util.fnIsValidLatlngKey(event)
- if (!isValid) return
- const value = event.target.value
- const newValue = parseFloat(value + event.key)
- if (newValue > 90 || newValue < -90) {
- event.preventDefault()
- }
- },
- /**
- * keydown이벤트 > 경도 입력 체크
- * @param {*} event keydown 이벤트 값
- */
- fnKeydownLongitude(event){
- const isValid = util.fnIsValidLatlngKey(event, true)
- if (!isValid) return
- const value = event.target.value
- const newValue = parseFloat(value + event.key)
- if (newValue > 180 || newValue < -180) {
- event.preventDefault()
- }
- },
- // 정수
- fnReplaceValidateInteger(value){
- return value.replace(/[^0-9]/g, '')
- },
- // 위도, 경도
- fnReplaceValidateLatlng(value){
- return value.replace(/[^0-9.-]/g, '')
- },
- /**
- * 기간 주기 변경 포맷
- * @param {*} periodKey
- * @returns
- */
- fnChangePeriodKey(periodKey){
- const today = dayjs().format('YYYY-MM-DD HH:mm:ss')
- let startDate = ''
- let endDate = ''
- if(periodKey === 'Now'){
- startDate = today
- endDate = today
- }else if(periodKey === '1H'){
- startDate = dayjs().subtract(1, 'hour').format('YYYY-MM-DD HH:mm:ss')
- endDate = today
- }else if(periodKey === '6H'){
- startDate = dayjs().subtract(6, 'hour').format('YYYY-MM-DD HH:mm:ss')
- endDate = today
- }else if(periodKey === '1D'){
- startDate = dayjs().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss')
- endDate = today
- }else if(periodKey === '1W'){
- startDate = dayjs().subtract(1, 'week').format('YYYY-MM-DD HH:mm:ss')
- endDate = today
- }else{
-
- }
- return [startDate, endDate]
- },
- /**
- * 캘린더 종료날짜에 따른 시작날짜와 시작날짜의 최소선택가능날짜 설정
- * @param {*} periodKey 기간
- * @param {*} startDate 시작날짜
- * @param {*} endDate 종료날짜
- * @returns
- */
- setUpdateStartDate(periodKey, startDate, endDate){
- let dateFormat = 'YYYY-MM-DD HH:mm:ss'
- let diffDay = endDate.diff(startDate, "day", true)
- let dDay = Math.floor(diffDay)
- let newStartDate = startDate
- let startMinDate = dayjs(endDate).subtract(1, 'months').format(dateFormat)
- if(dDay < 0) {
- // 종료날짜가 시작날짜 이전인 경우 시작날짜 재설정
- if(periodKey == '1H') {
- newStartDate = dayjs(endDate).subtract(1, 'hours').format(dateFormat)
- }else if(periodKey == '6H'){
- newStartDate = dayjs(endDate).subtract(6, 'hours').format(dateFormat)
- }else if(periodKey == '1D'){
- newStartDate = dayjs(endDate).subtract(1, 'days').format(dateFormat)
- }else if(periodKey == '1W'){
- newStartDate = dayjs(endDate).subtract(1, 'weeks').format(dateFormat)
- }
- }
- return [newStartDate, startMinDate]
- },
- /**
- * 페이지 사이즈 목록 리턴
- */
- fnGetPageSizeList(){
- return [10, 20, 50]
- },
- fnNullCheckFormatDate(val){
- if(!util.isNull(val)){
- return dayjs(val).format('YYYY-MM-DD HH:mm:ss')
- }else{
- return '-'
- }
- },
- /**
- * 현재 로그인한 계정의 권한에 맞는 권한목록 설정
- * @param {*} myRole 나의 권한
- * @param {*} roleList 권한 목록 enum
- * @returns
- */
- setAccountRoleList(myRole, roleList){
- let result = []
- if(myRole == 'SUPER') result = roleList
- else if(myRole == 'ADMIN') result = roleList.slice(1)
- else if(myRole == 'MANAGER') result = roleList.slice(2)
- else result = []
- return result
- },
- /**
- * 지역코드 반환
- */
- getRegionCode(sidoList, regionName){
- let regionCode = ''
- sidoList.forEach((item) => {
- if(item.title.includes(regionName)) {
- regionCode = item.value
- }
- })
- return regionCode
- }
- }
- export default util
|