feat(character-banner): 캐릭터 배너 페이지 추가

- 리스트, 등록, 수정, 삭제 추가
- 페이징은 스크롤 로딩으로 구현
This commit is contained in:
Yu Sung
2025-08-08 22:03:11 +09:00
parent bbacab88c5
commit 7ed23047e9
3 changed files with 622 additions and 10 deletions

View File

@@ -8,9 +8,9 @@ async function getCharacterList(page = 1, size = 20) {
}
// 캐릭터 검색
async function searchCharacters(keyword, page = 1, size = 20) {
return Vue.axios.get('/api/admin/chat/character/search', {
params: { keyword, page, size }
async function searchCharacters(searchTerm, page = 1, size = 20) {
return Vue.axios.get('/admin/chat/banner/search-character', {
params: { searchTerm, page: page - 1, size }
})
}
@@ -74,10 +74,75 @@ async function updateCharacter(characterData, image = null) {
})
}
// 캐릭터 배너 리스트 조회
async function getCharacterBannerList(page = 1, size = 20) {
return Vue.axios.get('/admin/chat/banner/list', {
params: { page: page - 1, size }
})
}
// 캐릭터 배너 등록
async function createCharacterBanner(bannerData) {
const formData = new FormData()
// 이미지 FormData에 추가
if (bannerData.image) formData.append('image', bannerData.image)
// 캐릭터 ID를 JSON 문자열로 변환하여 request 필드에 추가
const requestData = {
characterId: bannerData.characterId
}
formData.append('request', JSON.stringify(requestData))
return Vue.axios.post('/admin/chat/banner/register', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
// 캐릭터 배너 수정
async function updateCharacterBanner(bannerData) {
const formData = new FormData()
// 이미지가 있는 경우에만 FormData에 추가
if (bannerData.image) formData.append('image', bannerData.image)
// 캐릭터 ID와 배너 ID를 JSON 문자열로 변환하여 request 필드에 추가
const requestData = {
characterId: bannerData.characterId,
bannerId: bannerData.bannerId
}
formData.append('request', JSON.stringify(requestData))
return Vue.axios.put('/admin/chat/banner/update', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
// 캐릭터 배너 삭제
async function deleteCharacterBanner(bannerId) {
return Vue.axios.delete(`/admin/chat/banner/${bannerId}`)
}
// 캐릭터 배너 순서 변경
async function updateCharacterBannerOrder(bannerIds) {
return Vue.axios.put('/admin/chat/banner/orders', {ids: bannerIds})
}
export {
getCharacterList,
searchCharacters,
getCharacter,
createCharacter,
updateCharacter
updateCharacter,
getCharacterBannerList,
createCharacterBanner,
updateCharacterBanner,
deleteCharacterBanner,
updateCharacterBannerOrder
}