diff --git a/layers/components/blocks/slide/CenterFocus.vue b/layers/components/blocks/slide/CenterFocus.vue
new file mode 100644
index 0000000..5eb86f0
--- /dev/null
+++ b/layers/components/blocks/slide/CenterFocus.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layers/components/blocks/slide/CenterHighlight.vue b/layers/components/blocks/slide/CenterHighlight.vue
index 962d601..f224c8c 100644
--- a/layers/components/blocks/slide/CenterHighlight.vue
+++ b/layers/components/blocks/slide/CenterHighlight.vue
@@ -50,28 +50,35 @@ const style = computed(() => {
if (!props.slideItemSize) return {}
const { mo, pc } = props.slideItemSize
- const scaleFactor = 1.1429
+ const moScale = mo?.scale || 1.1429
+ const pcScale = pc?.scale || 1.1429
- return {
- // 모바일 기본값
+ const moSize = {
'--banner-width-mo': `${mo.width}px`,
'--banner-height-mo': `${mo.height}px`,
'--banner-gap-mo': `${mo.gap}px`,
// 모바일 확대값
- '--banner-width-mo-active': `${mo.width * scaleFactor}px`,
- '--banner-height-mo-active': `${mo.height * scaleFactor}px`,
- '--banner-width-mo-container': `${mo.width * scaleFactor + mo.gap}px`,
+ '--banner-width-mo-active': `${mo.width * moScale}px`,
+ '--banner-height-mo-active': `${mo.height * moScale}px`,
+ '--banner-width-mo-container': `${mo.width * moScale + mo.gap}px`,
+ }
- // PC 기본값
+ const pcSize = {
'--banner-width-pc': `${pc.width}px`,
'--banner-height-pc': `${pc.height}px`,
'--banner-gap-pc': `${pc.gap}px`,
// PC 확대값
- '--banner-width-pc-active': `${pc.width * scaleFactor}px`,
- '--banner-height-pc-active': `${pc.height * scaleFactor}px`,
- '--banner-width-pc-container': `${pc.width * scaleFactor + pc.gap * 4}px`,
- // PC arrow값
- '--banner-arrow-pc': `${(pc.width * scaleFactor) / 2 + (pc.gap * 3) / 2}px`,
+ '--banner-width-pc-active': `${pc.width * pcScale}px`,
+ '--banner-height-pc-active': `${pc.height * pcScale}px`,
+ '--banner-width-pc-container': props.arrows
+ ? `${pc.width * pcScale + pc.gap * 4}px`
+ : `${pc.width * pcScale}px`,
+ '--banner-arrow-pc': `${(pc.width * pcScale) / 2 + (pc.gap * 3) / 2}px`,
+ }
+
+ return {
+ ...moSize,
+ ...pcSize,
}
})
@@ -125,7 +132,6 @@ const handleMoved = (
.center-highlight:deep(.splide__slide) .slide-inner {
width: var(--banner-width-mo);
height: var(--banner-height-mo);
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.center-highlight:deep(.splide__slide.is-active) {
width: var(--banner-width-mo-container);
@@ -133,6 +139,7 @@ const handleMoved = (
.center-highlight:deep(.splide__slide.is-active) .slide-inner {
width: var(--banner-width-mo-active);
height: var(--banner-height-mo-active);
+ transition: all 0.45s cubic-bezier(0.4, 0, 0.2, 1);
}
/* PC 스타일 */
diff --git a/layers/components/blocks/slide/Thumbnail.vue b/layers/components/blocks/slide/Thumbnail.vue
index 2d66bd4..342ba72 100644
--- a/layers/components/blocks/slide/Thumbnail.vue
+++ b/layers/components/blocks/slide/Thumbnail.vue
@@ -4,7 +4,7 @@ import type { Splide as SplideType, Options } from '@splidejs/splide'
import type { PageDataResourceGroup } from '#layers/types/api/pageData'
interface Props {
- slideItemList: { media: any; set_order: number }[]
+ slideData: { media: any; set_order: number }[]
videoPlay?: PageDataResourceGroup
arrows?: boolean
pagination?: boolean
@@ -76,7 +76,7 @@ onBeforeUnmount(() => {
@@ -108,7 +108,7 @@ onBeforeUnmount(() => {
diff --git a/layers/public/data/GrGallery02.txt b/layers/public/data/GrGallery02.txt
new file mode 100644
index 0000000..80b2da4
--- /dev/null
+++ b/layers/public/data/GrGallery02.txt
@@ -0,0 +1,199 @@
+const test = {
+ arrow: {
+ groups: [
+ {
+ res_path: {
+ path_mo: '/local/template/l9/common/btn_system_chevron_prev.svg',
+ },
+ tracking: {
+ click_item: '3. 네비게이션(좌)',
+ action_type: 'click',
+ click_sarea: 'aboutLord_tmpl_01__arrow',
+ },
+ group_code: 'arrow_left',
+ group_type: 'image',
+ resource_type: 'IMG_COMM_GLOBAL',
+ },
+ {
+ res_path: {
+ path_mo: '/local/template/l9/common/btn_system_chevron_next.svg',
+ },
+ tracking: {
+ click_item: '3. 네비게이션(우)',
+ action_type: 'click',
+ click_sarea: 'aboutLord_tmpl_01__arrow',
+ },
+ group_code: 'arrow_right',
+ group_type: 'image',
+ resource_type: 'IMG_COMM_GLOBAL',
+ },
+ ],
+ },
+ mainTitle: {
+ groups: [
+ {
+ display: {
+ text: '캐릭터 소개',
+ color_code: '',
+ color_name: 'text-secondary',
+ },
+ res_scope: 'lang',
+ group_code: 'mainTitle_text',
+ group_type: 'text',
+ resource_type: 'TXT',
+ },
+ ],
+ },
+ background: {
+ groups: [
+ {
+ res_path: {
+ path_mo: 'https://picsum.photos/800/600',
+ path_pc: 'https://picsum.photos/800/600',
+ },
+ res_scope: 'comm',
+ group_code: 'background_img',
+ group_type: 'image',
+ resource_type: 'IMG_COMM',
+ },
+ ],
+ },
+ group_sets: [
+ {
+ imgList: {
+ groups: [
+ {
+ res_path: {
+ path_mo: 'https://picsum.photos/800/600',
+ path_pc:
+ 'https://dummyimage.com/800x600/cccccc/969696&text=Test+Image',
+ },
+ group_code: 'imgList_img',
+ group_type: 'image',
+ resource_type: 'IMG_LANG',
+ },
+ ],
+ },
+ set_order: 1,
+ buttonList: {
+ groups: [
+ {
+ btn_info: {
+ detail: {
+ action: {
+ url: '/ko/about/lord/lael',
+ link_target: '_self',
+ click_action_type: 1,
+ },
+ btn_type: 'URL',
+ },
+ txt_btn_name: '자세히 보기',
+ color_code_btn: '#CECECE',
+ color_code_txt: '#CECECE',
+ color_name_btn: '',
+ color_name_txt: '',
+ },
+ tracking: {
+ click_item: '라엘',
+ action_type: 'click',
+ click_sarea: 'aboutLord_tmpl_01__buttonList_btn',
+ },
+ group_code: 'buttonList_btn',
+ group_type: 'button',
+ resource_type: 'BTN',
+ },
+ ],
+ },
+ },
+ {
+ imgList: {
+ groups: [
+ {
+ res_path: {
+ path_mo: 'https://picsum.photos/800/600',
+ path_pc: 'https://picsum.photos/800/600',
+ },
+ group_code: 'imgList_img',
+ group_type: 'image',
+ resource_type: 'IMG_LANG',
+ },
+ ],
+ },
+ set_order: 2,
+ buttonList: {
+ groups: [
+ {
+ btn_info: {
+ detail: {
+ action: {
+ url: '/ko/about/lord/rpwain',
+ link_target: '_self',
+ click_action_type: 1,
+ },
+ btn_type: 'URL',
+ },
+ txt_btn_name: '자세히 보기',
+ color_code_btn: '#CECECE',
+ color_code_txt: '#CECECE',
+ color_name_btn: '',
+ color_name_txt: '',
+ },
+ tracking: {
+ click_item: '로웨인',
+ action_type: 'click',
+ click_sarea: 'aboutLord_tmpl_01__buttonList_btn',
+ },
+ group_code: 'buttonList_btn',
+ group_type: 'button',
+ resource_type: 'BTN',
+ },
+ ],
+ },
+ },
+ {
+ imgList: {
+ groups: [
+ {
+ res_path: {
+ path_mo: 'https://picsum.photos/800/600',
+ path_pc: 'https://picsum.photos/800/600',
+ },
+ group_code: 'imgList_img',
+ group_type: 'image',
+ resource_type: 'IMG_LANG',
+ },
+ ],
+ },
+ set_order: 3,
+ buttonList: {
+ groups: [
+ {
+ btn_info: {
+ detail: {
+ action: {
+ url: '/ko/about/lord/morian',
+ link_target: '_self',
+ click_action_type: 1,
+ },
+ btn_type: 'URL',
+ },
+ txt_btn_name: '자세히 보기',
+ color_code_btn: '#CECECE',
+ color_code_txt: '#CECECE',
+ color_name_btn: '',
+ color_name_txt: '',
+ },
+ tracking: {
+ click_item: '모리안',
+ action_type: 'click',
+ click_sarea: 'aboutLord_tmpl_01__buttonList_btn',
+ },
+ group_code: 'buttonList_btn',
+ group_type: 'button',
+ resource_type: 'BTN',
+ },
+ ],
+ },
+ },
+ ],
+}
\ No newline at end of file
diff --git a/layers/public/data/GrGallery03.txt b/layers/public/data/GrGallery03.txt
index bd06c55..e625ba8 100644
--- a/layers/public/data/GrGallery03.txt
+++ b/layers/public/data/GrGallery03.txt
@@ -48,8 +48,10 @@ const test = {
groups: [
{
res_path: {
- path_mo: '/local/template/l9/5/1/1/GR_GALLERY_02/common/bg_m.jpg',
- path_pc: '/local/template/l9/5/1/1/GR_GALLERY_02/common/bg.jpg',
+ path_mo:
+ 'https://dummyimage.com/800x600/abb883/969696&text=Test+Image',
+ path_pc:
+ 'https://dummyimage.com/800x600/8c83b8/969696&text=Test+Image',
},
res_scope: 'comm',
group_code: 'background_img',
@@ -104,31 +106,6 @@ const test = {
},
],
},
- subTitle: {
- groups: [
- {
- display: {
- text: '강력한 마스터리의 힘',
- color_code: '#ff0000',
- color_name: '',
- },
- group_code: 'mainTitle_text',
- group_type: 'text',
- resource_type: 'TXT',
- },
- ],
- },
- description: {
- groups: [
- {
- display: {
- text: '강력한 마스터리의 00000000',
- color_code: '#f0f0f0',
- color_name: '',
- },
- },
- ],
- },
},
{
imgList: {
@@ -174,38 +151,14 @@ const test = {
},
],
},
- subTitle: {
- groups: [
- {
- display: {
- text: '강력한 마스터리의 힘',
- color_code: '#ffffff',
- color_name: '',
- },
- group_code: 'mainTitle_text',
- group_type: 'text',
- resource_type: 'TXT',
- },
- ],
- },
- description: {
- groups: [
- {
- display: {
- text: '강력한 마스터리의 힘111111',
- color_code: '#ffffff',
- color_name: '',
- },
- },
- ],
- },
},
{
imgList: {
groups: [
{
res_path: {
- path_mo: 'https://picsum.photos/800/600',
+ path_mo:
+ 'https://dummyimage.com/800x600/b383b8/969696&text=Test+Image',
path_pc: 'https://picsum.photos/800/600',
},
group_code: 'imgList_img',
@@ -244,31 +197,6 @@ const test = {
},
],
},
- subTitle: {
- groups: [
- {
- display: {
- text: '강력한 마스터리의 힘',
- color_code: '#ffffff',
- color_name: '',
- },
- group_code: 'mainTitle_text',
- group_type: 'text',
- resource_type: 'TXT',
- },
- ],
- },
- description: {
- groups: [
- {
- display: {
- text: '강력한 마스터리의 힘22222',
- color_code: '#ffffff',
- color_name: '',
- },
- },
- ],
- },
},
],
-}
+}
\ No newline at end of file
diff --git a/layers/templates/GrGallery01/index.vue b/layers/templates/GrGallery01/index.vue
index 7ac1c63..051f941 100644
--- a/layers/templates/GrGallery01/index.vue
+++ b/layers/templates/GrGallery01/index.vue
@@ -14,7 +14,13 @@ const backgroundData = computed(() =>
const mainTitleData = computed(() =>
getComponentGroup(props.components, 'mainTitle')
)
-const slideThumbnailData = computed(() => props.components.group_sets)
+const slideData = computed(() => {
+ if (props.components.group_sets.length < 3) {
+ return [...props.components.group_sets, ...props.components.group_sets]
+ }
+
+ return props.components.group_sets
+})
const videoPlayData = computed(() =>
getComponentGroup(props.components, 'videoPlay')
)
@@ -30,7 +36,7 @@ const videoPlayData = computed(() =>
class="title-sm"
/>
diff --git a/layers/templates/GrGallery02/index.vue b/layers/templates/GrGallery02/index.vue
new file mode 100644
index 0000000..26a1534
--- /dev/null
+++ b/layers/templates/GrGallery02/index.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
diff --git a/layers/templates/GrGallery03/index.vue b/layers/templates/GrGallery03/index.vue
index aa4a6b2..0aecd5d 100644
--- a/layers/templates/GrGallery03/index.vue
+++ b/layers/templates/GrGallery03/index.vue
@@ -16,8 +16,13 @@ const backgroundData = computed(() =>
const mainTitleData = computed(() =>
getComponentGroup(props.components, 'mainTitle')
)
-const slideData = computed(() => props.components.group_sets)
+const slideData = computed(() => {
+ if (props.components.group_sets.length < 3) {
+ return [...props.components.group_sets, ...props.components.group_sets]
+ }
+ return props.components.group_sets
+})
const subTitleData = ref(getComponentGroup(slideData?.value[0], 'subTitle'))
const descriptionData = ref(
getComponentGroup(slideData?.value[0], 'description')
diff --git a/layers/templates/GrVisual02/index.vue b/layers/templates/GrVisual02/index.vue
index f005fb2..6c76e19 100644
--- a/layers/templates/GrVisual02/index.vue
+++ b/layers/templates/GrVisual02/index.vue
@@ -1,4 +1,5 @@