Merge branch 'feature/202501107-all' into feature/20251001-gil

This commit is contained in:
“hyeonggkim”
2025-11-03 18:47:19 +09:00
9 changed files with 62 additions and 106 deletions

View File

@@ -9,7 +9,7 @@ const currentLayout = computed(() => getLayoutType(pageData.value))
definePageMeta({ definePageMeta({
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화 layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
middleware: ['inspection'] middleware: ['inspection'],
}) })
</script> </script>

View File

@@ -9,7 +9,7 @@ const currentLayout = computed(() => getLayoutType(pageData.value))
definePageMeta({ definePageMeta({
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화 layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
middleware: ['inspection'] middleware: ['inspection'],
}) })
</script> </script>

View File

@@ -9,7 +9,7 @@ const currentLayout = computed(() => getLayoutType(pageData.value))
definePageMeta({ definePageMeta({
layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화 layout: false, // 동적 레이아웃을 위해 기본 레이아웃 비활성화
middleware: 'inspection', middleware: ['inspection'],
}) })
</script> </script>

View File

@@ -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];

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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="

View File

@@ -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
} }