From 63ebe9708f4b9e38dd5d8732734ba36e0fd1a725 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Fri, 22 Aug 2025 02:25:37 +0900 Subject: [PATCH] =?UTF-8?q?feat(character-image):=20=EC=BA=90=EB=A6=AD?= =?UTF-8?q?=ED=84=B0=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EA=B4=80=EB=A6=AC(?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D/=EB=93=B1=EB=A1=9D/=EC=88=98=EC=A0=95/?= =?UTF-8?q?=EC=82=AD=EC=A0=9C/=EC=A0=95=EB=A0=AC)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/character.js | 54 ++++- src/router/index.js | 10 + src/views/Chat/CharacterImageForm.vue | 306 ++++++++++++++++++++++++ src/views/Chat/CharacterImageList.vue | 325 ++++++++++++++++++++++++++ src/views/Chat/CharacterList.vue | 17 ++ 5 files changed, 711 insertions(+), 1 deletion(-) create mode 100644 src/views/Chat/CharacterImageForm.vue create mode 100644 src/views/Chat/CharacterImageList.vue diff --git a/src/api/character.js b/src/api/character.js index e4f9eb1..5e70f90 100644 --- a/src/api/character.js +++ b/src/api/character.js @@ -154,6 +154,52 @@ async function updateCharacterBannerOrder(bannerIds) { return Vue.axios.put('/admin/chat/banner/orders', {ids: bannerIds}) } +// 캐릭터 이미지 리스트 +async function getCharacterImageList(characterId, page = 1, size = 20) { + return Vue.axios.get('/admin/chat/character/image/list', { + params: { characterId, page: page - 1, size } + }) +} + +// 캐릭터 이미지 상세 +async function getCharacterImage(imageId) { + return Vue.axios.get(`/admin/chat/character/image/${imageId}`) +} + +// 캐릭터 이미지 등록 +async function createCharacterImage(imageData) { + const formData = new FormData() + if (imageData.image) formData.append('image', imageData.image) + const requestData = { + characterId: imageData.characterId, + imagePriceCan: imageData.imagePriceCan, + messagePriceCan: imageData.messagePriceCan, + isAdult: imageData.isAdult, + triggers: imageData.triggers || [] + } + formData.append('request', JSON.stringify(requestData)) + return Vue.axios.post('/admin/chat/character/image/register', formData, { + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +// 캐릭터 이미지 수정 (트리거만 수정) +async function updateCharacterImage(imageData) { + const imageId = imageData.imageId + const payload = { triggers: imageData.triggers || [] } + return Vue.axios.put(`/admin/chat/character/image/${imageId}/triggers`, payload) +} + +// 캐릭터 이미지 삭제 +async function deleteCharacterImage(imageId) { + return Vue.axios.delete(`/admin/chat/character/image/${imageId}`) +} + +// 캐릭터 이미지 순서 변경 +async function updateCharacterImageOrder(characterId, imageIds) { + return Vue.axios.put('/admin/chat/character/image/orders', { characterId, ids: imageIds }) +} + export { getCharacterList, searchCharacters, @@ -164,5 +210,11 @@ export { createCharacterBanner, updateCharacterBanner, deleteCharacterBanner, - updateCharacterBannerOrder + updateCharacterBannerOrder, + getCharacterImageList, + getCharacterImage, + createCharacterImage, + updateCharacterImage, + deleteCharacterImage, + updateCharacterImageOrder } diff --git a/src/router/index.js b/src/router/index.js index 7888f8c..5afc84a 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -270,6 +270,16 @@ const routes = [ name: 'CharacterBanner', component: () => import(/* webpackChunkName: "character" */ '../views/Chat/CharacterBanner.vue') }, + { + path: '/character/images', + name: 'CharacterImageList', + component: () => import(/* webpackChunkName: "character" */ '../views/Chat/CharacterImageList.vue') + }, + { + path: '/character/images/form', + name: 'CharacterImageForm', + component: () => import(/* webpackChunkName: "character" */ '../views/Chat/CharacterImageForm.vue') + }, ] }, { diff --git a/src/views/Chat/CharacterImageForm.vue b/src/views/Chat/CharacterImageForm.vue new file mode 100644 index 0000000..7359bcc --- /dev/null +++ b/src/views/Chat/CharacterImageForm.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/src/views/Chat/CharacterImageList.vue b/src/views/Chat/CharacterImageList.vue new file mode 100644 index 0000000..e579afe --- /dev/null +++ b/src/views/Chat/CharacterImageList.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/views/Chat/CharacterList.vue b/src/views/Chat/CharacterList.vue index 181c924..31f872d 100644 --- a/src/views/Chat/CharacterList.vue +++ b/src/views/Chat/CharacterList.vue @@ -141,6 +141,16 @@ 수정 + + + 이미지 + +