import 'tui-pagination/dist/tui-pagination.css'; const dayjs = require('dayjs'); const dateRangeKey = { CYC_YEAR: 'year', CYC_MONTH: 'month', CYC_DAY: 'day', CYC_HOUR: 'hour', }; const Utility = () => { const getStore = self => { const store = self.$store; return store; }; const testUtil = v => { console.log('v = ', v); return console.log(getStore(v)); }; const setFormatDate = (value, formatType) => { if (value) { const date = value === 'today' ? dayjs() : dayjs(value); return value ? date.format(formatType) : null; } else { return null; } }; const setFormatDecimal = (value, num, defaultVal) => { let returnVal = null; if (defaultVal && !value) { let defaultVal = '0.'; for (let i = 0; i < num; i++) { defaultVal += '0'; } returnVal = defaultVal; } else if (value) { returnVal = value.toFixed(num); } return returnVal; }; const setFormatInt = value => { // console.log(this.searchParam); return value ? String(Math.floor(value)).replace(/\B(?=(\d{3})+(?!\d))/g, ',') : null; }; const setFormatIntDecimal = (value, num) => { let numComma, commaSplit; let defaultVal = '0.'; for (let i = 0; i < num; i++) { defaultVal += '0'; } if (value) { const vv = setFormatDecimal(value, num); commaSplit = vv.split('.'); numComma = commaSplit[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); } return value ? numComma + '.' + commaSplit[1] : defaultVal; }; const setFormatNumber = value => { return value ? value.toLocaleString('ko-KR') : null; }; const toFixedAndLocaleString = (value, num, locale) => { num = num != null ? num : 2; locale = locale != null ? locale : 'ko-KR'; value = value != null ? parseFloat(value) : 0; var val1 = value.toLocaleString(locale).split('.')[0]; var val2 = value.toFixed(num).split('.')[1]; return val1 + '.' + val2; }; // 기간 설정값 중 날짜가 30일 단위일 경우 비교 시 월로 계산 const setNewDefaultRange = (myCmCycle, defaultRange) => { let myRange = null; let rangeKey = null; if (myCmCycle === 'CYC_DAY' && defaultRange % 30 === 0) { // console.log("달 기준으로 간주"); myRange = defaultRange / 30; rangeKey = 'month'; } else { myRange = defaultRange; rangeKey = dateRangeKey[myCmCycle]; // rangeKey = cmCycleList.filter(item => item.value === myCmCycle)[0] // .rangeKey; } return { key: rangeKey, range: myRange }; }; // 바라보는 스토어, 비교날짜, 포멧형식 을 넘겨주면, 스토어에 저장된 기간 범위 기준으로 조정날짜를 반환한다 => 비교날짜가 from 일 경우 const setAftertDate = (searchParam, compareDate, formatDate, formatTime) => { let returnDt = null; const myCmCycle = searchParam.cmCycle; const compareDt = dayjs(compareDate); const formatType = formatDate + (formatTime ? ' ' + formatTime : ''); const defaultRange = searchParam.defaultRange[myCmCycle]; const newDefault = setNewDefaultRange(myCmCycle, defaultRange); const myRange = newDefault.range; const rangeKey = newDefault.key; switch (myCmCycle) { case 'CYC_YEAR': case 'CYC_MONTH': // console.log("월 또는 연"); returnDt = compareDt.add(myRange - 1, rangeKey); break; case 'CYC_DAY': // console.log("일"); if ( rangeKey === 'month' && compareDt.format('YYYYMMDD') === compareDt.startOf('month').format('YYYYMMDD') ) { // console.log("들어온날이 첫째 날"); returnDt = compareDt.endOf('month'); } else if ( rangeKey === 'month' && compareDt.format('YYYYMMDD') === compareDt.endOf('month').format('YYYYMMDD') ) { // console.log("들어온날이 마지말 날"); returnDt = compareDt .add(myRange, rangeKey) .endOf('month') .subtract(1, rangeKey); } else { // console.log("그 외 날"); returnDt = compareDt.add(myRange, rangeKey).subtract(1, 'day'); } break; case 'CYC_HOUR': // console.log("시간"); returnDt = compareDt.add(myRange, 'h').subtract(1, 's'); break; default: break; } // console.log(returnDt.format(formatType)); return returnDt.format(formatType); }; // 바라보는 스토어, 비교날짜, 포멧형식 을 넘겨주면, 스토어에 저장된 기간 범위 기준으로 조정날짜를 반환한다 => 비교날짜가t to 일 경우 const setBeforetDate = (searchParam, compareDate, formatDate, formatTime) => { let returnDt = null; const myCmCycle = searchParam.cmCycle; const compareDt = dayjs(compareDate); const formatType = formatDate + (formatTime ? ' ' + formatTime : ''); const defaultRange = searchParam.defaultRange[myCmCycle]; const newDefault = setNewDefaultRange(myCmCycle, defaultRange); let myRange = newDefault.range; //수정 -------------------- const rangeKey = newDefault.key; switch (myCmCycle) { case 'CYC_YEAR': case 'CYC_MONTH': // 수정 --------------------------------- if (myRange === 'no limite') { myRange = 12; } else { myRange = myRange; } // -------------------------------------- returnDt = compareDt.subtract(myRange - 1, rangeKey); break; case 'CYC_WEEK': returnDt = compareDt.add(myRange, rangeKey); break; case 'CYC_DAY': // console.log("일"); if ( rangeKey === 'month' && compareDt.format('YYYYMMDD') === compareDt.startOf('month').format('YYYYMMDD') ) { // console.log("들어온날이 첫째 날"); returnDt = compareDt .subtract(myRange, rangeKey) .startOf('month') .add(1, 'day'); } else if ( rangeKey === 'month' && compareDt.format('YYYYMMDD') === compareDt.endOf('month').format('YYYYMMDD') ) { // console.log("들어온날이 마지말 날"); returnDt = compareDt.startOf('month'); } else { // 수정 --------------------------------- if (myRange === 'no limite') { myRange = 30; } else { myRange = myRange; } // -------------------------------------- returnDt = compareDt.subtract(myRange, rangeKey).add(1, 'day'); } break; case 'CYC_HOUR': // console.log("시간"); returnDt = compareDt.subtract(myRange, 'h').add(1, 'm'); break; default: break; } // console.log(returnDt.format(formatType)); return returnDt.format(formatType); }; const toCamelCase = value => { return value .toLowerCase() .replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase()); }; // isLegend 값이 false 여도 response 차이데이타 세팅 시 legend 값을 넣어주면 상단에 노출됨 const defaultChartOption = isLegend => { const defaultLegend = { top: 'bottom', left: 'center', textStyle: { color: '#95A0A9', fontSize: 10, }, }; return { tooltip: { trigger: 'axis', confine: true, axisPointer: { type: 'shadow', }, }, grid: { left: '3%', right: '4%', top: '3%', bottom: isLegend ? '30' : '0', containLabel: true, }, legend: isLegend ? Object.assign(defaultLegend, isLegend) : null, yAxis: { type: 'value', axisLabel: { color: '#767D83', fontSize: 10, }, }, xAxis: { type: 'category', axisLabel: { color: '#767D83', fontSize: 10, }, data: [], //xAxis text }, toolbox: { }, dataZoom: [ ], series: [ { name: '', type: 'bar', showBackground: true, data: [], }, ], }; }; const defaultGridOption = gridHeight => { // console.log("gridHeight = ", gridHeight); return { bodyHeight: gridHeight, minBodyHeight: gridHeight, header: { height: 28, }, rowHeight: 37, minRowHeight: 37, columnOptions: { resizable: true, minWidth: 100, }, }; }; const copyObj = obj => { const result = {}; for (let key in obj) { if (typeof obj[key] === 'object') { result[key] = copyObj(obj[key]); } else { result[key] = obj[key]; } } return result; }; const getKeyByValue = (obj, val) => { return Object.keys(obj).find(key => obj[key] === val); }; const getValueByObject = (obj, defaultKey, defaultData, valueKey) => { let returnData = ''; if (obj.length > 0) { const list = obj.filter(item => item[defaultKey] === defaultData); if (list.length > 0) { returnData = list[0][valueKey]; } } return returnData; }; const prependZero = (max, val) => { let zeroStr = ''; let strVal = String(val); for (let i = 0; i < max - strVal.length; i++) { zeroStr += '0'; } return zeroStr; }; return { testUtil, setFormatDate, // 날짜 타입 setFormatDecimal, // 소수점 (버림, 반올림, 올림 의 정책이 있다면 수정필요) setFormatInt, // 천단위 콤마 setFormatIntDecimal, // 소수점 포함 천단위 콤마 setFormatNumber, // 천단위 콤마 & 소수점 (들어오는 값 그대로,, <= 원하는 자릿구 맞추려면 추가해야 함, setFormatDecimal와 함께 사용해도 되기도,,), setNewDefaultRange, // 기간 기준 재설정 setAftertDate, // 이후 날짜 setBeforetDate, // 이전 날짜 toCamelCase, // 카멜케이스로 변환 defaultChartOption, // 차트 공통 옵션 defaultGridOption, // 그리드 공통 옵션 copyObj, // 오브젝트 deep 카피 getKeyByValue, getValueByObject, prependZero, toFixedAndLocaleString, }; }; export default Utility();