Merge branch 'feature/202501107-all' into feature/20251001-gil
This commit is contained in:
@@ -9,7 +9,7 @@ const currentLayout = computed(() => getLayoutType(pageData.value))
|
|||||||
|
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
|
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
|
||||||
middleware: ['inspection']
|
middleware: ['inspection'],
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const currentLayout = computed(() => getLayoutType(pageData.value))
|
|||||||
|
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
|
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
|
||||||
middleware: ['inspection']
|
middleware: ['inspection'],
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const currentLayout = computed(() => getLayoutType(pageData.value))
|
|||||||
|
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
|
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
|
||||||
middleware: 'inspection',
|
middleware: ['inspection'],
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
/* 고정형 */
|
/* 고정형 */
|
||||||
.section-container.static {
|
.section-container.static {
|
||||||
@apply relative pt-[32px] pb-[80px] px-[20px] sm:px-[40px] md:pt-[64px] md:pb-[200px] bg-[#F0F0F0];
|
@apply overflow-hidden relative pt-[32px] pb-[80px] px-[20px] sm:px-[40px] md:pt-[64px] md:pb-[200px] bg-[#F0F0F0];
|
||||||
}
|
}
|
||||||
.section-static {
|
.section-static {
|
||||||
@apply mx-auto lg:max-w-[1300px];
|
@apply mx-auto lg:max-w-[1300px];
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const { gameData } = useGameDataStore()
|
|||||||
|
|
||||||
const stoveInflowPath = runtimeConfig.public.stoveInflowPath
|
const stoveInflowPath = runtimeConfig.public.stoveInflowPath
|
||||||
const stoveGameNo = runtimeConfig.public.stoveGameNo
|
const stoveGameNo = runtimeConfig.public.stoveGameNo
|
||||||
const gnbData = gameData?.stove_gnb_json
|
const stoveGnbData = gameData?.stove_gnb_json
|
||||||
|
|
||||||
const languageCodes = computed(() => {
|
const languageCodes = computed(() => {
|
||||||
if (Array.isArray(availableLocales)) {
|
if (Array.isArray(availableLocales)) {
|
||||||
@@ -24,9 +24,9 @@ const loadGnb = (locale: string) => {
|
|||||||
locale = locale.toLowerCase()
|
locale = locale.toLowerCase()
|
||||||
|
|
||||||
const gnbOption = {
|
const gnbOption = {
|
||||||
wrapper: '#stove-wrapper',
|
wrapper: '#stove-wrap',
|
||||||
isResponsive: true,
|
isResponsive: true,
|
||||||
skin: gnbData?.skin_type || 'gnb-dark-mini',
|
skin: stoveGnbData?.skin_type || 'gnb-dark-mini',
|
||||||
widget: {
|
widget: {
|
||||||
gameListAndService: false,
|
gameListAndService: false,
|
||||||
languageSelect: false,
|
languageSelect: false,
|
||||||
@@ -42,7 +42,7 @@ const loadGnb = (locale: string) => {
|
|||||||
params: {
|
params: {
|
||||||
inflow_path: stoveInflowPath,
|
inflow_path: stoveInflowPath,
|
||||||
game_no: stoveGameNo,
|
game_no: stoveGameNo,
|
||||||
show_play_button: gnbData?.stove_install_button_visible || 'Y',
|
show_play_button: stoveGnbData?.stove_install_button_visible || 'Y',
|
||||||
},
|
},
|
||||||
redirectCurrentPage: true,
|
redirectCurrentPage: true,
|
||||||
windowTitle: undefined,
|
windowTitle: undefined,
|
||||||
@@ -66,5 +66,5 @@ onBeforeUnmount(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div id="stove-wrapper" class="relative z-[5]" />
|
<div id="stove-wrap" class="relative z-[5]" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,55 +1,52 @@
|
|||||||
<template>
|
|
||||||
<div id="stove-wrapper" class="relative z-[5]" />
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type {
|
import type { GameDataValue } from '#layers/types/api/gameData'
|
||||||
GameDataValue,
|
|
||||||
} from '#layers/types/api/gameData'
|
|
||||||
let mountedInstance: any = null
|
let mountedInstance: any = null
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
const gameDataStore = useGameDataStore()
|
const gameDataStore = useGameDataStore()
|
||||||
const gameData = gameDataStore.gameData as GameDataValue
|
const gameData = gameDataStore.gameData as GameDataValue
|
||||||
const langCodes = gameData?.lang_codes
|
const langCodes = gameData?.lang_codes
|
||||||
const defaultLangCode = gameData?.default_lang_code
|
const defaultLangCode = gameData?.default_lang_code
|
||||||
const gnbData = gameData?.stove_gnb_json
|
const stoveGnbData = gameData?.stove_gnb_json
|
||||||
|
|
||||||
const currentDomain = window.location.protocol + '//' + window.location.hostname;
|
const currentDomain =
|
||||||
if (typeof window !== 'undefined' && (window as any).StoveGnb) {
|
window.location.protocol + '//' + window.location.hostname
|
||||||
mountedInstance = (window as any).StoveGnb.mount('#stove-wrapper', {
|
if (typeof window !== 'undefined' && (window as any).StoveGnb) {
|
||||||
logArea: currentDomain,
|
mountedInstance = (window as any).StoveGnb.mount('#stove-wrap', {
|
||||||
useLanguageCodeFromPath: true,
|
logArea: currentDomain,
|
||||||
serviceTitle: {
|
useLanguageCodeFromPath: true,
|
||||||
pc: '',
|
serviceTitle: {
|
||||||
mobile: ''
|
pc: '',
|
||||||
|
mobile: '',
|
||||||
|
},
|
||||||
|
widget: {
|
||||||
|
notification: true,
|
||||||
|
stoveDownload: true,
|
||||||
|
languageSelect: false,
|
||||||
|
themeSelect: false,
|
||||||
|
stoveMenu: {
|
||||||
|
active: false,
|
||||||
|
mobile: true,
|
||||||
},
|
},
|
||||||
widget: {
|
},
|
||||||
notification: true,
|
global: {
|
||||||
stoveDownload: true,
|
languageCoverages: langCodes,
|
||||||
languageSelect: false,
|
defaultSelectedLanguage: defaultLangCode || 'en',
|
||||||
themeSelect: false,
|
},
|
||||||
stoveMenu: {
|
loginMethod: {
|
||||||
active: false,
|
redirectCurrentPage: true,
|
||||||
mobile: true
|
},
|
||||||
},
|
mode: {
|
||||||
},
|
theme: {
|
||||||
global: {
|
default:
|
||||||
languageCoverages: langCodes,
|
stoveGnbData?.skin_type === 'gnb-dark-mini' ? 'dark' : 'light',
|
||||||
defaultSelectedLanguage: defaultLangCode || 'en',
|
support: ['dark', 'light'],
|
||||||
},
|
|
||||||
loginMethod: {
|
|
||||||
redirectCurrentPage: true,
|
|
||||||
},
|
|
||||||
mode: {
|
|
||||||
theme: {
|
|
||||||
default: gnbData?.skin_type === 'gnb-dark-mini' ? 'dark' : 'light',
|
|
||||||
support: ['dark', 'light'],
|
|
||||||
},
|
|
||||||
mini: true,
|
|
||||||
fixed:false,
|
|
||||||
},
|
},
|
||||||
|
mini: true,
|
||||||
|
fixed: false,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
@@ -58,4 +55,7 @@ onBeforeUnmount(() => {
|
|||||||
}
|
}
|
||||||
mountedInstance = null
|
mountedInstance = null
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
<template>
|
||||||
|
<div id="stove-wrap" class="relative z-[5]" />
|
||||||
|
</template>
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import GrDetail02 from '#layers/templates/GrDetail02/index.vue'
|
|||||||
import GrDetail03 from '#layers/templates/GrDetail03/index.vue'
|
import GrDetail03 from '#layers/templates/GrDetail03/index.vue'
|
||||||
import GrBoard01 from '#layers/templates/GrBoard01/index.vue'
|
import GrBoard01 from '#layers/templates/GrBoard01/index.vue'
|
||||||
import GrContents01 from '#layers/templates/GrContents01/index.vue'
|
import GrContents01 from '#layers/templates/GrContents01/index.vue'
|
||||||
// import FxVideo01 from '#layers/templates/FxVideo01/index.vue'
|
|
||||||
import FxDownload01 from '#layers/templates/FxDownload01/index.vue'
|
import FxDownload01 from '#layers/templates/FxDownload01/index.vue'
|
||||||
|
|
||||||
const templateRegistry = {
|
const templateRegistry = {
|
||||||
@@ -24,7 +23,6 @@ const templateRegistry = {
|
|||||||
GR_DETAIL_02: { component: GrDetail02 },
|
GR_DETAIL_02: { component: GrDetail02 },
|
||||||
GR_DETAIL_03: { component: GrDetail03 },
|
GR_DETAIL_03: { component: GrDetail03 },
|
||||||
GR_CONTENTS_01: { component: GrContents01 },
|
GR_CONTENTS_01: { component: GrContents01 },
|
||||||
// FX_VIDEO_01: { component: FxVideo01 },
|
|
||||||
FX_DOWNLOAD_01: { component: FxDownload01 },
|
FX_DOWNLOAD_01: { component: FxDownload01 },
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const props = defineProps<Props>()
|
|||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
const runtimeConfig = useRuntimeConfig()
|
const runtimeConfig = useRuntimeConfig()
|
||||||
const dataResourcesUrl = runtimeConfig.public.dataResourcesUrl
|
const dataResourcesUrl = runtimeConfig.public.dataResourcesUrl as string
|
||||||
const multilingualFileName = 'test_homepage_brand_download.json'
|
const multilingualFileName = 'test_homepage_brand_download.json'
|
||||||
|
|
||||||
// Multilingual
|
// Multilingual
|
||||||
@@ -154,7 +154,7 @@ const handleMoveFocus = (target: 'pc' | 'mobile') => {
|
|||||||
padding: { left: 0, right: 0 },
|
padding: { left: 0, right: 0 },
|
||||||
},
|
},
|
||||||
}"
|
}"
|
||||||
class="overflow-hidden min-w-[320px] w-[100vw] px-[20px] ml-[-20px] sm:px-[40px] sm:ml-[-40px] md:w-full md:px-0 md:ml-0"
|
class="min-w-[320px] w-[100vw] px-[20px] ml-[-20px] sm:px-[40px] sm:ml-[-40px] md:w-full md:px-0 md:ml-0"
|
||||||
>
|
>
|
||||||
<SplideSlide
|
<SplideSlide
|
||||||
v-for="platform in platformList"
|
v-for="platform in platformList"
|
||||||
@@ -164,7 +164,11 @@ const handleMoveFocus = (target: 'pc' | 'mobile') => {
|
|||||||
<div
|
<div
|
||||||
class="flex flex-col items-start justify-start gap-[8px] w-full md:gap-[12px]"
|
class="flex flex-col items-start justify-start gap-[8px] w-full md:gap-[12px]"
|
||||||
>
|
>
|
||||||
<WidgetsFixSubTitle :title="tm(`Download_Box_${platform}_Title`)" />
|
<h4
|
||||||
|
class="relative flex justify-left items-center w-full text-left text-[#1F1F1F] text-[18px] font-bold leading-[26px] tracking-[-0.54px] md:text-[24px] md:leading-[34px] md:tracking-[0.72px]"
|
||||||
|
>
|
||||||
|
<span>{{ tm(`Download_Box_${platform}_Title`) }}</span>
|
||||||
|
</h4>
|
||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="
|
v-if="
|
||||||
|
|||||||
@@ -145,52 +145,6 @@ export const getImagePaths = (resourcesData: PageDataResourceGroup) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const formatDateOffset = ({
|
|
||||||
ts,
|
|
||||||
lang,
|
|
||||||
useSeconds,
|
|
||||||
useTimezone
|
|
||||||
}: {
|
|
||||||
ts: number
|
|
||||||
lang: string
|
|
||||||
useSeconds?: boolean
|
|
||||||
useTimezone?: boolean
|
|
||||||
}) => {
|
|
||||||
const offset = { ko: 9, ja: 9, 'zh-tw': 8, en: 0 }[lang] || 0
|
|
||||||
const date = new Date(ts + offset * 3600000)
|
|
||||||
const pad = (n: number) => String(n).padStart(2, '0')
|
|
||||||
|
|
||||||
const year = date.getUTCFullYear()
|
|
||||||
const month = date.getUTCMonth() + 1
|
|
||||||
const day = date.getUTCDate()
|
|
||||||
const hours = date.getUTCHours()
|
|
||||||
const minutes = date.getUTCMinutes()
|
|
||||||
const seconds = date.getUTCSeconds()
|
|
||||||
|
|
||||||
if (lang === 'ko') {
|
|
||||||
let format = `${year}-${pad(month)}-${pad(day)} ${pad(hours)}:${pad(minutes)}`
|
|
||||||
format += useSeconds ? `:${pad(seconds)}` : ''
|
|
||||||
format += useTimezone ? ' (KST)' : ''
|
|
||||||
return `${format}`
|
|
||||||
} else if (lang === 'zh-tw') {
|
|
||||||
let format = `${year}-${pad(month)}-${pad(day)} ${pad(hours)}:${pad(minutes)}`
|
|
||||||
format += useSeconds ? `:${pad(seconds)}` : ''
|
|
||||||
format += useTimezone ? ` (UTC${offset > 0 ? '+' + offset : ''})` : ''
|
|
||||||
return `${format}`
|
|
||||||
} else if (lang === 'ja') {
|
|
||||||
let format = `${year}-${pad(month)}-${pad(day)} ${pad(hours)}:${pad(minutes)}`
|
|
||||||
format += useSeconds ? `:${pad(seconds)}` : ''
|
|
||||||
format += useTimezone ? ' (日本時間)' : ''
|
|
||||||
return `${format}`
|
|
||||||
} else {
|
|
||||||
//= en
|
|
||||||
let format = `${pad(month)}/${pad(day)}/${year} ${pad(hours)}:${pad(minutes)}`
|
|
||||||
format += useSeconds ? `:${pad(seconds)}` : ''
|
|
||||||
format += useTimezone ? ' (UTC)' : ''
|
|
||||||
return `${format}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* 컴포넌트 그룹의 첫 번째 데이터를 반환합니다.
|
* 컴포넌트 그룹의 첫 번째 데이터를 반환합니다.
|
||||||
* @param components props.components 또는 group 객체
|
* @param components props.components 또는 group 객체
|
||||||
@@ -204,4 +158,4 @@ export const getComponentGroup = (
|
|||||||
if (!components) return null
|
if (!components) return null
|
||||||
|
|
||||||
return components[componentName]?.groups?.[0] || null
|
return components[componentName]?.groups?.[0] || null
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user