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 @@ 수정 + + + 이미지 + +