diff --git a/app/app.vue b/app/app.vue index cd7184c..20a7c09 100644 --- a/app/app.vue +++ b/app/app.vue @@ -146,14 +146,14 @@ onBeforeUnmount(() => { - - { @confirm-button-event="confirm.storeConfirmButtonEvent" @cancel-button-event="confirm.storeCancelButtonEvent" /> - { diff --git a/layers/components/blocks/modal/Confirm.vue b/layers/components/blocks/modal/Confirm.vue new file mode 100644 index 0000000..e25efe7 --- /dev/null +++ b/layers/components/blocks/modal/Confirm.vue @@ -0,0 +1,72 @@ + + + + + + + + + + + emit('cancelButtonEvent'))" + > + {{ props.cancelButtonText || '취소' }} + + emit('confirmButtonEvent'))" + > + {{ props.confirmButtonText || '확인' }} + + + + + + + + + diff --git a/layers/components/blocks/modal/Layer.vue b/layers/components/blocks/modal/Layer.vue new file mode 100644 index 0000000..c4d1c34 --- /dev/null +++ b/layers/components/blocks/modal/Layer.vue @@ -0,0 +1,50 @@ + + + + + + + + + + + close + + + + + + diff --git a/layers/components/blocks/modal/YouTube.vue b/layers/components/blocks/modal/YouTube.vue new file mode 100644 index 0000000..040cc5e --- /dev/null +++ b/layers/components/blocks/modal/YouTube.vue @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/layers/components/blocks/slide/Default.vue b/layers/components/blocks/slide/Default.vue index cdb1102..9f1dce1 100644 --- a/layers/components/blocks/slide/Default.vue +++ b/layers/components/blocks/slide/Default.vue @@ -6,6 +6,7 @@ import type { PageDataResourceGroups } from '#layers/types/api/pageData' interface Props { type?: ResponsiveOptions['type'] slideItemLength?: number + gap?: number autoplay?: boolean perPage?: number drag?: boolean @@ -16,6 +17,7 @@ interface Props { } const props = withDefaults(defineProps(), { + gap: 0, autoplay: false, perPage: 1, drag: true, @@ -39,6 +41,7 @@ const options = computed((): ResponsiveOptions => { type: slideType.value, autoWidth: true, autoHeight: true, + gap: props.gap, perPage: props.perPage, speed: 500, updateOnMove: true, diff --git a/layers/components/layouts/Main.vue b/layers/components/layouts/Main.vue index 33afd4a..8bdd6bf 100644 --- a/layers/components/layouts/Main.vue +++ b/layers/components/layouts/Main.vue @@ -59,7 +59,6 @@ watchEffect(() => { setupSeoMeta(props.pageData?.meta_tag_json) } }) - @@ -84,6 +83,12 @@ watchEffect(() => { diff --git a/layers/components/widgets/modal/Client.vue b/layers/components/widgets/modal/Client.vue new file mode 100644 index 0000000..ce8a93a --- /dev/null +++ b/layers/components/widgets/modal/Client.vue @@ -0,0 +1,68 @@ + + + + + + + + pc 클라이언트 실행 중... + + + + + PC 클라이언트가 실행되지 않나요? + + 다운로드 전이라면 다운로드 후 진행해주세요 + + + 다운로드 + + + + + + + + diff --git a/layers/templates/GrBoard01/index.vue b/layers/templates/GrBoard01/index.vue index 6573aac..8bae09b 100644 --- a/layers/templates/GrBoard01/index.vue +++ b/layers/templates/GrBoard01/index.vue @@ -14,19 +14,12 @@ const props = defineProps() const gameDataStore = useGameDataStore() const pageDataStore = usePageDataStore() const { getCwmsArticleData } = useResourcesData() -const { locale } = useI18n() const { sendLog, useAnalyticsLogDataDirect } = useAnalytics() +const { locale } = useI18n() const { gameData } = storeToRefs(gameDataStore) const { pageData } = storeToRefs(pageDataStore) -const defaultSlideItem = { - article_id: '', - media_thumbnail_url: '', - title: '', - create_datetime: 0, -} - const boardId = computed( () => getComponentGroup(props.components, 'boardId')?.display?.text ) @@ -65,28 +58,33 @@ const { data: slideData } = await useAsyncData( server: false, } ) - -const getResponsiveMultiple = (): number => { - const breakpoints = useResponsiveBreakpoints() - - if (breakpoints.value.isSm) return 1 // sm: 1개 단위 - if (breakpoints.value.isMd) return 2 // md: 2개 단위 - return 4 // 그 외: 4개 단위 -} - -const fillToMultipleOfFour = (arr: CwmsArticleItem[]): CwmsArticleItem[] => { - const remainderSize = getResponsiveMultiple() - const remainder = arr.length % remainderSize - const fillCount = remainder === 0 ? 0 : remainderSize - remainder - return [ - ...arr, - ...Array(fillCount).fill({ ...defaultSlideItem } as CwmsArticleItem), - ] -} - -const filledSlideData = computed(() => { - return fillToMultipleOfFour(slideData.value) -}) +const slideLength = computed(() => slideData.value.length) +const slideClass = computed(() => ({ + 'is-one-item': slideLength.value === 1, + 'is-two-items': slideLength.value === 2, + 'is-three-items': slideLength.value === 3, + 'is-four-items': slideLength.value === 4, +})) +const splideOptions = computed(() => ({ + gap: 20, + perPage: 4, + drag: false, + arrows: slideLength.value > 4, + pagination: slideLength.value > 4, + breakpoints: { + [BREAKPOINTS.lg - 1]: { + perPage: 2, + arrows: slideLength.value > 2, + pagination: slideLength.value > 2, + }, + [BREAKPOINTS.md - 1]: { + drag: true, + perPage: 1, + arrows: false, + pagination: false, + }, + }, +})) const getArticleUrl = (articleId: string) => { const communityUrl = gameData.value?.url_json?.community @@ -105,7 +103,7 @@ const onArrowClick = (direction, targetIndex) => { @@ -117,37 +115,24 @@ const onArrowClick = (direction, targetIndex) => { /> - + @@ -182,17 +167,24 @@ const onArrowClick = (direction, targetIndex) => { .splide:deep(.arrow-next) { @apply top-[calc(50%-28px)] right-[0]; } -.splide__slide { - @apply mr-[20px]; -} .slide-inner { @apply w-[275px] aspect-[1/1] md:w-[306px] md:box-border; } -.splide.is-single { - @apply flex justify-center w-auto; +.splide.is-one-item:deep(.splide__track) { + @apply max-w-[315px] sm:max-w-[355px] mx-auto md:max-w-[306px]; } -.splide.is-single:deep(.splide__track) { - @apply w-[calc(100%-20px)] md:w-auto; +.splide.is-two-items:deep(.splide__track) { + @apply lg:max-w-[632px]; +} +.splide.is-two-items:deep(.splide__list) { + @apply md:!translate-x-0; +} +.splide.is-three-items:deep(.splide__track) { + @apply lg:max-w-[958px]; +} +.splide.is-three-items:deep(.splide__list), +.splide.is-four-items:deep(.splide__list) { + @apply lg:!translate-x-0; } diff --git a/layers/templates/GrContents01/index.vue b/layers/templates/GrContents01/index.vue index 682792c..9b2746a 100644 --- a/layers/templates/GrContents01/index.vue +++ b/layers/templates/GrContents01/index.vue @@ -1,7 +1,6 @@
pc 클라이언트 실행 중...
+ PC 클라이언트가 실행되지 않나요? + + 다운로드 전이라면 다운로드 후 진행해주세요 +