+
diff --git a/layers/components/layouts/Main.vue b/layers/components/layouts/Main.vue
index 40932fd..80ab28c 100644
--- a/layers/components/layouts/Main.vue
+++ b/layers/components/layouts/Main.vue
@@ -21,7 +21,8 @@ const shouldShowMetaTag = computed(() => props.pageData.meta_tag_type === 2)
// 템플릿 표시 여부 확인
const isTemplateVisible = (template: PageDataTemplate): boolean => {
return Boolean(
- template?.components && Object.keys(template.components).length > 0
+ template?.page_ver_tmpl_json &&
+ Object.keys(template?.page_ver_tmpl_json).length > 0
)
}
@@ -33,21 +34,21 @@ const visibleTemplates = computed(() =>
// SEO 메타 태그 설정
const setupSeoMeta = (metaTag: PageDataMetaTag) => {
useSeoMeta({
- title: metaTag.page_title ?? '',
- description: metaTag.page_desc ?? '',
- ogTitle: metaTag.og_title ?? '',
- ogDescription: metaTag.og_desc ?? '',
- ogImage: metaTag.og_image ?? '',
- twitterTitle: metaTag.x_title ?? '',
- twitterImage: metaTag.x_image ?? '',
- twitterDescription: metaTag.x_desc ?? '',
+ title: metaTag?.page_title ?? '',
+ description: metaTag?.page_desc ?? '',
+ ogTitle: metaTag?.og_title ?? '',
+ ogDescription: metaTag?.og_desc ?? '',
+ ogImage: metaTag?.og_image ?? '',
+ twitterTitle: metaTag?.x_title ?? '',
+ twitterImage: metaTag?.x_image ?? '',
+ twitterDescription: metaTag?.x_desc ?? '',
})
}
// 메타 태그 설정 감시
watchEffect(() => {
- if (shouldShowMetaTag.value && props.pageData.meta_tag) {
- setupSeoMeta(props.pageData.meta_tag)
+ if (shouldShowMetaTag.value && props.pageData?.meta_tag_json) {
+ setupSeoMeta(props.pageData?.meta_tag_json)
}
})
@@ -60,7 +61,7 @@ watchEffect(() => {
>
diff --git a/layers/components/widgets/ButtonList.vue b/layers/components/widgets/ButtonList.vue
index 191aaec..3da173c 100644
--- a/layers/components/widgets/ButtonList.vue
+++ b/layers/components/widgets/ButtonList.vue
@@ -68,7 +68,7 @@ const handleButtonClick = (
const marketType = btnInfo?.detail?.market_type
if (marketType) {
- const url = gameData?.market[marketType]?.url
+ const url = gameData?.market_json[marketType]?.url
window.open(url, '_blank')
return
}
diff --git a/layers/templates/GrDetail03/index.vue b/layers/templates/GrDetail03/index.vue
index e150beb..fcc9012 100644
--- a/layers/templates/GrDetail03/index.vue
+++ b/layers/templates/GrDetail03/index.vue
@@ -6,6 +6,7 @@ import {
getComponentGroup,
hasComponentGroup,
} from '#layers/utils/dataUtil'
+import { getResponsiveSrc } from '#layers/utils/styleUtil'
import type { Splide as SplideType } from '@splidejs/splide'
import type {
PageDataTemplateComponents,
@@ -88,6 +89,7 @@ const handleSplideMove = (_splide: SplideType, newIndex: number) => {
class="mt-2 text-left md:mt-5"
/>
- stove_gnb: GameDataStoveGnb
- favicon_path: GameDataFaviconPath
- meta_tag: GameDataMetaTag
- sns: GameDataSns
- footer: string // JSON 문자열로 변경
- comm_img: GameDataCommImg
- market: Record
+ stove_gnb_json: GameDataStoveGnb
+ favicon_json: GameDataFavicon
+ meta_tag_json: GameDataMetaTag
+ sns_json: GameDataSns
+ footer_json: string // JSON 문자열로 변경
+ comm_img_json: GameDataCommImg
+ market_json: Record
+ event_banner: GameDataEventBanner
}
// ===== 세부 데이터 타입들 =====
// 키 코드 코드 타입
-export interface GameDataKeyCodeCodes {
+export interface GameDataKeyColors {
primary: string
'text-primary': string
'text-secondary': string
@@ -62,7 +63,7 @@ export interface GameDataGameFont {
}
// 파비콘 경로 타입
-export interface GameDataFaviconPath {
+export interface GameDataFavicon {
'16_16': string
'32_32': string
'72_72': string
@@ -116,7 +117,7 @@ export interface GameDataCommImg {
// Global 설정 타입
export interface GameDataGlobal {
system_font: string // JSON 문자열로 변경
- lang: string // JSON 문자열로 변경
+ lang_json: string // JSON 문자열로 변경
}
// 트래킹 타입
@@ -129,7 +130,7 @@ export interface GameDataTracking {
// 버튼 타입
export interface GameDataButton {
depth_type: number
- button: string // JSON 문자열로 변경
+ button_json: string // JSON 문자열로 변경
}
export type GameDataMenuChildren = Record
@@ -144,7 +145,7 @@ export interface GameDataMenu {
url_path: string
link_target: string
children: GameDataMenuChildren
- tracking: string | GameDataTracking // JSON 문자열 또는 객체로 변경
+ tracking_json: string | GameDataTracking // JSON 문자열 또는 객체로 변경
}
// GNB 설정 타입
@@ -180,6 +181,14 @@ export interface GameDataStoveGnb {
stove_install_button_visible: string
}
+// 이벤트 배너 타입
+export interface GameDataEventBanner {
+ link_type: 1 | 2
+ page_url: string
+ page_url_type: 1 | 2
+ promotion_name: string
+}
+
// ===== API 관련 타입들 =====
// API 에러 응답 타입
diff --git a/layers/types/api/pageData.ts b/layers/types/api/pageData.ts
index 819a366..4b62ab4 100644
--- a/layers/types/api/pageData.ts
+++ b/layers/types/api/pageData.ts
@@ -36,7 +36,7 @@ export interface PageDataValue {
lnb_text_color_code_active: string
lnb_text_color_code_deactive: string
lnb_menus: PageDataLnbMenu[]
- meta_tag: PageDataMetaTag
+ meta_tag_json: PageDataMetaTag
templates: Record
}
@@ -50,7 +50,7 @@ export interface PageDataLnbMenu {
menu_name: string
target_type: number
page_ver_tmpl_name_en: string
- // tracking: Record
+ tracking_json: Record
}
// 메타 태그 타입
@@ -121,16 +121,19 @@ export type PageDataTemplateComponentSet = PageDataTemplateComponent & {
// 템플릿 컴포넌트 타입 - 세 가지 패턴
export type PageDataTemplateComponents =
| PageDataTemplateComponent // 단일 컴포넌트 패턴
- | { group_sets: PageDataTemplateComponentSet[], arrow: PageDataArrowComponent } // 그룹 세트 패턴
-
+ | {
+ group_sets: PageDataTemplateComponentSet[]
+ arrow: PageDataArrowComponent
+ } // 그룹 세트 패턴
+
// 템플릿 타입
export interface PageDataTemplate {
page_ver_tmpl_seq: number
- tmpl_sort_order: number
page_ver_tmpl_name: string
page_ver_tmpl_name_en: string
+ page_ver_tmpl_json: PageDataTemplateComponents
+ tmpl_sort_order: number
template_code: string
- components: PageDataTemplateComponents
}
// ===== API 관련 타입들 =====