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

@@ -10,7 +10,7 @@
/* 고정형 */
.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 {
@apply mx-auto lg:max-w-[1300px];

View File

@@ -9,7 +9,7 @@ const { gameData } = useGameDataStore()
const stoveInflowPath = runtimeConfig.public.stoveInflowPath
const stoveGameNo = runtimeConfig.public.stoveGameNo
const gnbData = gameData?.stove_gnb_json
const stoveGnbData = gameData?.stove_gnb_json
const languageCodes = computed(() => {
if (Array.isArray(availableLocales)) {
@@ -24,9 +24,9 @@ const loadGnb = (locale: string) => {
locale = locale.toLowerCase()
const gnbOption = {
wrapper: '#stove-wrapper',
wrapper: '#stove-wrap',
isResponsive: true,
skin: gnbData?.skin_type || 'gnb-dark-mini',
skin: stoveGnbData?.skin_type || 'gnb-dark-mini',
widget: {
gameListAndService: false,
languageSelect: false,
@@ -42,7 +42,7 @@ const loadGnb = (locale: string) => {
params: {
inflow_path: stoveInflowPath,
game_no: stoveGameNo,
show_play_button: gnbData?.stove_install_button_visible || 'Y',
show_play_button: stoveGnbData?.stove_install_button_visible || 'Y',
},
redirectCurrentPage: true,
windowTitle: undefined,
@@ -66,5 +66,5 @@ onBeforeUnmount(() => {
</script>
<template>
<div id="stove-wrapper" class="relative z-[5]" />
<div id="stove-wrap" class="relative z-[5]" />
</template>

View File

@@ -1,55 +1,52 @@
<template>
<div id="stove-wrapper" class="relative z-[5]" />
</template>
<script setup lang="ts">
import type {
GameDataValue,
} from '#layers/types/api/gameData'
import type { GameDataValue } from '#layers/types/api/gameData'
let mountedInstance: any = null
onMounted(() => {
const gameDataStore = useGameDataStore()
const gameData = gameDataStore.gameData as GameDataValue
const langCodes = gameData?.lang_codes
const defaultLangCode = gameData?.default_lang_code
const gnbData = gameData?.stove_gnb_json
const gameDataStore = useGameDataStore()
const gameData = gameDataStore.gameData as GameDataValue
const langCodes = gameData?.lang_codes
const defaultLangCode = gameData?.default_lang_code
const stoveGnbData = gameData?.stove_gnb_json
const currentDomain = window.location.protocol + '//' + window.location.hostname;
if (typeof window !== 'undefined' && (window as any).StoveGnb) {
mountedInstance = (window as any).StoveGnb.mount('#stove-wrapper', {
logArea: currentDomain,
useLanguageCodeFromPath: true,
serviceTitle: {
pc: '',
mobile: ''
const currentDomain =
window.location.protocol + '//' + window.location.hostname
if (typeof window !== 'undefined' && (window as any).StoveGnb) {
mountedInstance = (window as any).StoveGnb.mount('#stove-wrap', {
logArea: currentDomain,
useLanguageCodeFromPath: true,
serviceTitle: {
pc: '',
mobile: '',
},
widget: {
notification: true,
stoveDownload: true,
languageSelect: false,
themeSelect: false,
stoveMenu: {
active: false,
mobile: true,
},
widget: {
notification: true,
stoveDownload: true,
languageSelect: false,
themeSelect: false,
stoveMenu: {
active: false,
mobile: true
},
},
global: {
languageCoverages: langCodes,
defaultSelectedLanguage: defaultLangCode || 'en',
},
loginMethod: {
redirectCurrentPage: true,
},
mode: {
theme: {
default: gnbData?.skin_type === 'gnb-dark-mini' ? 'dark' : 'light',
support: ['dark', 'light'],
},
mini: true,
fixed:false,
},
global: {
languageCoverages: langCodes,
defaultSelectedLanguage: defaultLangCode || 'en',
},
loginMethod: {
redirectCurrentPage: true,
},
mode: {
theme: {
default:
stoveGnbData?.skin_type === 'gnb-dark-mini' ? 'dark' : 'light',
support: ['dark', 'light'],
},
mini: true,
fixed: false,
},
})
}
}
})
onBeforeUnmount(() => {
@@ -58,4 +55,7 @@ onBeforeUnmount(() => {
}
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 GrBoard01 from '#layers/templates/GrBoard01/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'
const templateRegistry = {
@@ -24,7 +23,6 @@ const templateRegistry = {
GR_DETAIL_02: { component: GrDetail02 },
GR_DETAIL_03: { component: GrDetail03 },
GR_CONTENTS_01: { component: GrContents01 },
// FX_VIDEO_01: { component: FxVideo01 },
FX_DOWNLOAD_01: { component: FxDownload01 },
} as const

View File

@@ -13,7 +13,7 @@ const props = defineProps<Props>()
// Configuration
const runtimeConfig = useRuntimeConfig()
const dataResourcesUrl = runtimeConfig.public.dataResourcesUrl
const dataResourcesUrl = runtimeConfig.public.dataResourcesUrl as string
const multilingualFileName = 'test_homepage_brand_download.json'
// Multilingual
@@ -154,7 +154,7 @@ const handleMoveFocus = (target: 'pc' | 'mobile') => {
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
v-for="platform in platformList"
@@ -164,7 +164,11 @@ const handleMoveFocus = (target: 'pc' | 'mobile') => {
<div
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
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 객체
@@ -204,4 +158,4 @@ export const getComponentGroup = (
if (!components) return null
return components[componentName]?.groups?.[0] || null
}
}