어나운스 바 설정 정규화 로직 분리

This commit is contained in:
2026-07-24 12:12:04 +09:00
parent f7bf73a719
commit 0a6a69a843
7 changed files with 92 additions and 54 deletions

View File

@@ -1,10 +1,4 @@
<script setup>
import {
DEFAULT_ANNOUNCEMENT_ALIGNMENT,
DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR,
normalizeAnnouncementAlignment,
normalizeAnnouncementBackgroundColor
} from '~/lib/announcement-bar.js'
import {
DISPLAY_COUNT_OPTIONS,
POST_LIST_COUNT_OPTIONS
@@ -44,6 +38,13 @@ import {
hasBrandSettingsSectionChanges,
normalizeBrandSettingsSection
} from '~/lib/admin-brand-settings-section.js'
import {
ANNOUNCEMENT_SETTINGS_FIELDS,
assignAnnouncementSettingsSection,
createDefaultAnnouncementSettingsSnapshot,
hasAnnouncementSettingsSectionChanges,
normalizeAnnouncementSettingsSection
} from '~/lib/admin-announcement-settings-section.js'
definePageMeta({
layout: 'admin'
@@ -182,13 +183,7 @@ const homeCoverSnapshot = reactive({
/** 편집 시작 시점의 브랜드 설정(취소 시 복원용) */
const brandSnapshot = reactive(createDefaultBrandSettingsSnapshot())
/** 맞춤 설정 시작 시점의 어나운스 바(취소 시 복원용) */
const announcementSnapshot = reactive({
announcementEnabled: false,
announcementText: '',
announcementUrl: '',
announcementBackgroundColor: DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR,
announcementAlignment: DEFAULT_ANNOUNCEMENT_ALIGNMENT
})
const announcementSnapshot = reactive(createDefaultAnnouncementSettingsSnapshot())
/** 편집 시작 시점의 스팸 필터(취소 시 복원용) */
const spamSnapshot = reactive(createDefaultSpamSettingsSnapshot())
/** 편집 시작 시점의 사이트 코드(취소 시 복원용) */
@@ -234,6 +229,7 @@ const initialPostSettings = normalizePostSettingsSection(settings.value)
const initialSocialSettings = normalizeSocialSettingsSection(settings.value)
const initialSpamSettings = normalizeSpamSettingsSection(settings.value)
const initialBrandSettings = normalizeBrandSettingsSection(settings.value)
const initialAnnouncementSettings = normalizeAnnouncementSettingsSection(settings.value)
const form = reactive({
title: settings.value?.title || 'sori.studio',
@@ -250,11 +246,7 @@ const form = reactive({
homeCoverTitle: settings.value?.homeCoverTitle || '',
homeCoverText: settings.value?.homeCoverText || '',
...initialBrandSettings,
announcementEnabled: Boolean(settings.value?.announcementEnabled),
announcementText: settings.value?.announcementText || '',
announcementUrl: settings.value?.announcementUrl || '',
announcementBackgroundColor: normalizeAnnouncementBackgroundColor(settings.value?.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR),
announcementAlignment: normalizeAnnouncementAlignment(settings.value?.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT),
...initialAnnouncementSettings,
...initialSpamSettings,
adsTxt: settings.value?.adsTxt || '',
customHeadCode: settings.value?.customHeadCode || '',
@@ -326,11 +318,7 @@ const hasBrandChanges = computed(() => editBrand.value
* @returns {boolean} 변경 여부
*/
const hasAnnouncementChanges = computed(() => customizeAnnouncement.value && (
form.announcementEnabled !== announcementSnapshot.announcementEnabled
|| form.announcementText !== announcementSnapshot.announcementText
|| form.announcementUrl !== announcementSnapshot.announcementUrl
|| normalizeAnnouncementBackgroundColor(form.announcementBackgroundColor) !== normalizeAnnouncementBackgroundColor(announcementSnapshot.announcementBackgroundColor)
|| normalizeAnnouncementAlignment(form.announcementAlignment) !== normalizeAnnouncementAlignment(announcementSnapshot.announcementAlignment)
hasAnnouncementSettingsSectionChanges(form, announcementSnapshot)
))
/**
@@ -1084,11 +1072,7 @@ const buildSiteSettingsPayload = (fields = null) => {
homeCoverTitle: form.homeCoverTitle || '',
homeCoverText: form.homeCoverText || '',
...normalizeBrandSettingsSection(form),
announcementEnabled: Boolean(form.announcementEnabled),
announcementText: form.announcementText || '',
announcementUrl: form.announcementUrl || '',
announcementBackgroundColor: normalizeAnnouncementBackgroundColor(form.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR),
announcementAlignment: normalizeAnnouncementAlignment(form.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT),
...normalizeAnnouncementSettingsSection(form),
...normalizeSpamSettingsSection(form),
adsTxt: form.adsTxt || '',
customHeadCode: form.customHeadCode || '',
@@ -1514,11 +1498,8 @@ const saveBrandSection = async () => {
* @returns {void}
*/
const beginCustomizeAnnouncement = () => {
announcementSnapshot.announcementEnabled = form.announcementEnabled
announcementSnapshot.announcementText = form.announcementText
announcementSnapshot.announcementUrl = form.announcementUrl
announcementSnapshot.announcementBackgroundColor = normalizeAnnouncementBackgroundColor(form.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR)
announcementSnapshot.announcementAlignment = normalizeAnnouncementAlignment(form.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT)
assignAnnouncementSettingsSection(announcementSnapshot, form)
assignAnnouncementSettingsSection(form, announcementSnapshot)
customizeAnnouncement.value = true
}
@@ -1527,11 +1508,7 @@ const beginCustomizeAnnouncement = () => {
* @returns {void}
*/
const cancelCustomizeAnnouncement = () => {
form.announcementEnabled = announcementSnapshot.announcementEnabled
form.announcementText = announcementSnapshot.announcementText
form.announcementUrl = announcementSnapshot.announcementUrl
form.announcementBackgroundColor = announcementSnapshot.announcementBackgroundColor
form.announcementAlignment = announcementSnapshot.announcementAlignment
assignAnnouncementSettingsSection(form, announcementSnapshot)
customizeAnnouncement.value = false
}
@@ -1547,21 +1524,12 @@ const saveAnnouncementSection = async () => {
const ok = await persistSiteSettings({
successToast: '어나운스 바 설정이 저장되었습니다.',
savingFlag: savingAnnouncement,
fields: [
'announcementEnabled',
'announcementText',
'announcementUrl',
'announcementBackgroundColor',
'announcementAlignment'
]
fields: ANNOUNCEMENT_SETTINGS_FIELDS
})
if (ok) {
announcementSnapshot.announcementEnabled = form.announcementEnabled
announcementSnapshot.announcementText = form.announcementText
announcementSnapshot.announcementUrl = form.announcementUrl
announcementSnapshot.announcementBackgroundColor = normalizeAnnouncementBackgroundColor(form.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR)
announcementSnapshot.announcementAlignment = normalizeAnnouncementAlignment(form.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT)
assignAnnouncementSettingsSection(announcementSnapshot, form)
assignAnnouncementSettingsSection(form, announcementSnapshot)
customizeAnnouncement.value = false
}
}