feat: 점검 작업 중
This commit is contained in:
168
layers/utils/commonUtil.ts
Normal file
168
layers/utils/commonUtil.ts
Normal file
@@ -0,0 +1,168 @@
|
||||
import type { ParsedCustomLinkOptions } from '@/types/CommonType'
|
||||
|
||||
/**
|
||||
* 페이지 - 유효성 체크
|
||||
*
|
||||
* @param {number} page - 페이지
|
||||
* @param {number} totalPage - 총 페이지 수
|
||||
*/
|
||||
const checkPageValidation = (page: number, totalPage: number) => {
|
||||
// 최소, 최대 범위 체크
|
||||
if (page < 1) {
|
||||
page = 1
|
||||
} else if (page > totalPage) {
|
||||
page = totalPage
|
||||
}
|
||||
return page
|
||||
}
|
||||
|
||||
/**
|
||||
* 파일 다운로드 함수
|
||||
*
|
||||
* @param {string} fileUrl - 다운로드할 파일의 URL
|
||||
* @param {string} fileName - 저장할 파일 이름 (옵션)
|
||||
*/
|
||||
const csrDownloadFile = (fileUrl: string, fileName?: string) => {
|
||||
const link = document.createElement('a')
|
||||
link.href = fileUrl
|
||||
|
||||
// 파일 이름이 제공되면 다운로드 이름 설정
|
||||
if (fileName) {
|
||||
link.download = fileName
|
||||
}
|
||||
|
||||
// 링크를 클릭하여 다운로드 트리거
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
|
||||
// DOM에서 링크 제거
|
||||
document.body.removeChild(link)
|
||||
}
|
||||
|
||||
/**
|
||||
* 마케팅 코드 조회
|
||||
*/
|
||||
const csrGetMarketingCode = () => {
|
||||
const route = useRoute()
|
||||
const mcode = Number(`${route.query.mcode != null && route.query.mcode !== '' ? route.query.mcode : ''}`)
|
||||
return isNaN(mcode) ? undefined : mcode
|
||||
}
|
||||
|
||||
/**
|
||||
* 외부 링크 이동 (새 창)
|
||||
*
|
||||
* @param {string} link - 이동할 외부 링크
|
||||
*/
|
||||
const csrGoExternalLink = (link: string = '') => {
|
||||
window.open(link, '_blank')
|
||||
}
|
||||
|
||||
/**
|
||||
* QA용 국가 코드 조회
|
||||
*/
|
||||
const csrGetQc = () => {
|
||||
const route = useRoute()
|
||||
const qc = `${route.query.qc != null && route.query.qc !== '' ? route.query.qc : ''}`
|
||||
return qc
|
||||
}
|
||||
|
||||
/**
|
||||
* 문자열이 숫자인지 확인
|
||||
*
|
||||
* @param {string} str - 확인할 문자열
|
||||
*/
|
||||
const isNumeric = (str: string): boolean => {
|
||||
return /^-?\d+(\.\d+)?$/.test(str)
|
||||
}
|
||||
|
||||
/**
|
||||
* 가공된 링크 파싱
|
||||
*
|
||||
* @param {string} link - 원본 링크
|
||||
* @param {Function} tm - i18n의 tm 함수 (예: (key) => ({ txt: string }))
|
||||
* @param {any} query - 추가 쿼리 파라미터
|
||||
*/
|
||||
const getParsedCustomLink = (link: string, { tm, query = {} }: ParsedCustomLinkOptions) => {
|
||||
const config = useRuntimeConfig()
|
||||
let result = `${link || ''}`
|
||||
|
||||
// @c{key} 패턴 치환 (예: @c{stoveCommunityUrl})
|
||||
if (link.includes('@c')) {
|
||||
result = result.replace(/@c\{(.*?)\}/g, (_, key) => {
|
||||
// config.public에서 해당 key 값을 찾아 치환
|
||||
return typeof config.public[key] === 'string' ? config.public[key] : ''
|
||||
})
|
||||
}
|
||||
|
||||
// @m{key} 패턴 치환 (예: @m{Community_Channel_Key})
|
||||
if (link.includes('@m')) {
|
||||
result = result.replace(/@m\{(.*?)\}/g, (_, key) => {
|
||||
// tm 함수로 변환하여 치환
|
||||
return tm(key)?.txt ?? ''
|
||||
})
|
||||
}
|
||||
|
||||
// @q{key} 패턴 치환 (예: @q{ppid})
|
||||
if (link.includes('@q')) {
|
||||
result = result.replace(/@q\{(.*?)\}/g, (_, key) => {
|
||||
let q = ''
|
||||
if (query[key]) {
|
||||
q += result.includes('?') ? '&' : '?'
|
||||
q += `${key}=${query[key]}`
|
||||
}
|
||||
return q
|
||||
})
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 쿠키 설정 - 만료기간 하루 단위 셋팅
|
||||
*
|
||||
* @param {string} name - 쿠키 이름
|
||||
* @param {string} value - 쿠키 값
|
||||
* @param {number} exp - 만료기간 (옵션)
|
||||
*/
|
||||
const setCookieForDay = (name: string, value: string, exp?: number) => {
|
||||
const date = new Date()
|
||||
if (!exp) {
|
||||
exp = 1
|
||||
}
|
||||
date.setTime(date.getTime() + exp * 24 * 60 * 60 * 1000)
|
||||
|
||||
const setCookie = useCookie(name, {
|
||||
expires: new Date(date),
|
||||
path: '/'
|
||||
})
|
||||
|
||||
setCookie.value = value
|
||||
}
|
||||
|
||||
// 정적 파일인지 확인하는 함수
|
||||
const isStaticFile = (path: string): boolean => {
|
||||
return /\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|scss)$/i.test(path)
|
||||
}
|
||||
|
||||
/**
|
||||
* 기준값이 최솟값 ~ 최댓값에 속하는지 확인
|
||||
*
|
||||
* @param {number} ref - 기준값
|
||||
* @param {number} min - 최솟값
|
||||
* @param {number} max - 최댓값
|
||||
*/
|
||||
const isInRange = (ref: number, min: number, max: number): boolean => {
|
||||
return ref >= min && ref <= max
|
||||
}
|
||||
|
||||
export {
|
||||
checkPageValidation,
|
||||
csrDownloadFile,
|
||||
csrGetMarketingCode,
|
||||
csrGoExternalLink,
|
||||
csrGetQc,
|
||||
isNumeric,
|
||||
getParsedCustomLink,
|
||||
setCookieForDay,
|
||||
isStaticFile,
|
||||
isInRange
|
||||
}
|
||||
Reference in New Issue
Block a user