diff --git a/docs/todo.md b/docs/todo.md
index 3ee5eb8..32468a0 100644
--- a/docs/todo.md
+++ b/docs/todo.md
@@ -8,8 +8,6 @@
- `components/content/ContentMarkdownRenderer.vue`: 파싱·블록 렌더링·라이브 편집 중개·라이트박스·광고 삽입 책임을 분리.
- `components/admin/AdminPostForm.vue`: 태그 입력, 대표 이미지 선택, 발행/초안 저장 상태, 우측 설정 패널 책임을 분리.
- `pages/admin/media/index.vue`: 미디어 목록, 폴더 트리, 상세 모달, 재생성 액션을 작은 단위로 분리.
-- 관리자 UI 공통 컴포넌트 정리.
- - 설정 화면 select 입력의 공통 컴포넌트 적용 범위 검토.
- 최근 브라우저 회귀 테스트 추가.
- 태그 추천 선택 후 다음 태그 후보가 포커스 해제 없이 유지되는지 확인.
- 관리자 미디어 대표 이미지/본문 이미지 탭 전환 중 역할 배지가 노출되지 않는지 확인.
@@ -24,7 +22,6 @@
## 1차 관리자 개발
-
## 2차 관리자 개발
## 프론트엔드 개발
diff --git a/docs/update.md b/docs/update.md
index 496dcbf..d164c60 100644
--- a/docs/update.md
+++ b/docs/update.md
@@ -1,5 +1,10 @@
# 업데이트 이력
+## v1.11.15
+
+- 관리자 설정 화면의 업로드 제한·SNS 아이콘·공개 표시개수·게시물 내보내기 범위 select를 공용 `AdminSelectInput`으로 정리.
+- 설정 화면 select 옵션을 `{ value, label }` 구조로 모아 반복 마크업과 chevron SVG 중복 제거.
+
## v1.11.14
- 관리자 멤버 고급 필터의 필드·조건·상태 선택 입력을 공용 `AdminSelectInput` 기준으로 정리.
diff --git a/package-lock.json b/package-lock.json
index 5585d2d..8a5a3a7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "sori.studio",
- "version": "1.11.14",
+ "version": "1.11.15",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "sori.studio",
- "version": "1.11.14",
+ "version": "1.11.15",
"hasInstallScript": true,
"dependencies": {
"@nuxtjs/tailwindcss": "^6.14.0",
diff --git a/package.json b/package.json
index 1ff91b8..f02e34f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "sori.studio",
- "version": "1.11.14",
+ "version": "1.11.15",
"private": true,
"type": "module",
"imports": {
diff --git a/pages/admin/settings/index.vue b/pages/admin/settings/index.vue
index 83c622a..6b1f0cd 100644
--- a/pages/admin/settings/index.vue
+++ b/pages/admin/settings/index.vue
@@ -94,6 +94,33 @@ const {
} = useImeSearchInput(navSearchQuery)
const activeSectionId = ref('admin-settings-section-title')
const scrollSpySuspended = ref(false)
+
+const uploadFileCountSelectOptions = UPLOAD_FILE_COUNT_OPTIONS.map((option) => ({
+ value: option,
+ label: `${option}개`
+}))
+const uploadTotalSizeSelectOptions = UPLOAD_TOTAL_SIZE_OPTIONS.map((option) => ({
+ value: option,
+ label: formatUploadSizeLimit(option)
+}))
+const postListCountSelectOptions = POST_LIST_COUNT_OPTIONS.map((option) => ({
+ value: option,
+ label: `${option}개`
+}))
+const displayCountSelectOptions = DISPLAY_COUNT_OPTIONS.map((option) => ({
+ value: option,
+ label: `${option}개`
+}))
+const socialIconSelectOptions = SOCIAL_ICON_PRESETS.map((preset) => ({
+ value: preset.icon,
+ label: preset.label
+}))
+const postExportDateRangeModeOptions = [
+ { value: 'all', label: '전체' },
+ { value: 'year', label: '특정년' },
+ { value: 'month', label: '특정월' },
+ { value: 'custom', label: '직접 지정' }
+]
/** 블로그 제목·설명 카드 편집 모드 여부 */
const editTitleDesc = ref(false)
/** 사이트 정보 카드 편집 모드 여부 */
@@ -370,12 +397,22 @@ const postExportYearOptions = computed(() => {
return Array.from({ length: 10 }, (_, index) => currentYear - index)
})
+const postExportYearSelectOptions = computed(() => postExportYearOptions.value.map((year) => ({
+ value: year,
+ label: String(year)
+})))
+
/**
* Export 월 선택지
* @type {ReadonlyArray