From d5a75cd29f4e4f154cb5c448cde7ff3017328c72 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Sat, 11 Apr 2026 23:04:51 +0900 Subject: [PATCH] =?UTF-8?q?feat(agent,settlement):=20=ED=81=AC=EB=A6=AC?= =?UTF-8?q?=EC=97=90=EC=9D=B4=ED=84=B0=20=EA=B8=B0=EC=A4=80=20=EC=A0=95?= =?UTF-8?q?=EC=82=B0=20=EC=83=81=EC=84=B8=20API/=EB=B7=B0=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20=EB=B0=8F=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EC=85=98/=EC=A0=95=EB=A0=AC=20=EC=9D=BC=EA=B4=80?= =?UTF-8?q?=EC=84=B1=20=ED=99=95=EB=B3=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - api/agent: 정산 상세 조회 API 다수 추가(라이브/콘텐츠/커뮤니티/콘텐츠·채널 후원) - 공통 파라미터 빌더 및 1→0 기반 페이지 변환 유틸 도입으로 Spring Pageable 규약 준수 - 정산 상세 뷰(라이브/콘텐츠/커뮤니티/콘텐츠 후원/채널 후원): 닉네임 표시, 페이지·정렬 파라미터 적용 - 로딩/에러/빈 결과 초기화 처리 강화, 합계 초기화로 실패 시 데이터 오해 방지 - AgentList: 정산 상세 라우팅 시 닉네임 query 전달로 상단 타이틀 표시 개선 --- src/api/agent.js | 59 ++++ .../Agent/AgentChannelDonationSettlement.vue | 235 ++++++++++++++- src/views/Agent/AgentCommunitySettlement.vue | 235 ++++++++++++++- .../Agent/AgentContentDonationSettlement.vue | 235 ++++++++++++++- src/views/Agent/AgentContentSettlement.vue | 235 ++++++++++++++- src/views/Agent/AgentList.vue | 2 +- src/views/Agent/AgentLiveSettlement.vue | 269 +++++++++++++++++- 7 files changed, 1225 insertions(+), 45 deletions(-) diff --git a/src/api/agent.js b/src/api/agent.js index d1a19c4..2faefda 100644 --- a/src/api/agent.js +++ b/src/api/agent.js @@ -1,5 +1,11 @@ import Vue from 'vue' +// 공통: 페이지 파라미터 변환(1-based UI → 0-based Spring Pageable) +function toZeroBased(page) { + const p = Number(page || 1) + return Math.max(0, p - 1) +} + // 에이전트 리스트 조회 // 서버 스펙에 페이지네이션이 없다면 단순 GET으로 사용 // 추후 필요 시 params(page,size) 확장 가능 @@ -72,6 +78,53 @@ async function removeAgentCreator(payload) { return Vue.axios.post('/admin/partner/agent/assignment/remove', payload) } +// ========================= +// 정산 상세 - 에이전트별(크리에이터 기준 집계) +// 공통 Request: startDateStr, endDateStr, Spring Pageable(page,size,sort) +// 공통 Response: ApiResponse +// { success, message, data: { totalCount, total:{...}, items:[...] } } + +function buildSettlementParams({ startDateStr, endDateStr, page = 1, size = 20, sort }) { + const params = { + startDateStr, + endDateStr, + page: toZeroBased(page), + size + } + if (sort) params.sort = sort + return params +} + +async function getAgentLiveSettlementByCreator(agentId, { startDateStr, endDateStr, page = 1, size = 20, sort } = {}) { + return Vue.axios.get(`/admin/partner/agent/${agentId}/calculate/live-by-creator`, { + params: buildSettlementParams({ startDateStr, endDateStr, page, size, sort }) + }) +} + +async function getAgentContentSettlementByCreator(agentId, { startDateStr, endDateStr, page = 1, size = 20, sort } = {}) { + return Vue.axios.get(`/admin/partner/agent/${agentId}/calculate/content-by-creator`, { + params: buildSettlementParams({ startDateStr, endDateStr, page, size, sort }) + }) +} + +async function getAgentCommunitySettlementByCreator(agentId, { startDateStr, endDateStr, page = 1, size = 20, sort } = {}) { + return Vue.axios.get(`/admin/partner/agent/${agentId}/calculate/community-by-creator`, { + params: buildSettlementParams({ startDateStr, endDateStr, page, size, sort }) + }) +} + +async function getAgentContentDonationSettlementByCreator(agentId, { startDateStr, endDateStr, page = 1, size = 20, sort } = {}) { + return Vue.axios.get(`/admin/partner/agent/${agentId}/calculate/content-donation-by-creator`, { + params: buildSettlementParams({ startDateStr, endDateStr, page, size, sort }) + }) +} + +async function getAgentChannelDonationSettlementByCreator(agentId, { startDateStr, endDateStr, page = 1, size = 20, sort } = {}) { + return Vue.axios.get(`/admin/partner/agent/${agentId}/calculate/channel-donation-by-creator`, { + params: buildSettlementParams({ startDateStr, endDateStr, page, size, sort }) + }) +} + export { getAgentList, getAgentSettlementRatioList, @@ -83,4 +136,10 @@ export { searchAdminAgentAssignableCreators, assignAgentCreator, removeAgentCreator, + // 에이전트 정산 상세 (크리에이터 기준) + getAgentLiveSettlementByCreator, + getAgentContentSettlementByCreator, + getAgentCommunitySettlementByCreator, + getAgentContentDonationSettlementByCreator, + getAgentChannelDonationSettlementByCreator, } diff --git a/src/views/Agent/AgentChannelDonationSettlement.vue b/src/views/Agent/AgentChannelDonationSettlement.vue index 151ad27..5118352 100644 --- a/src/views/Agent/AgentChannelDonationSettlement.vue +++ b/src/views/Agent/AgentChannelDonationSettlement.vue @@ -7,27 +7,244 @@ > mdi-arrow-left - 에이전트 정산 상세 - 채널 후원 + {{ displayNickname }} 정산 상세 - 채널 후원 + - - -

채널 후원 정산 상세 페이지 (준비중)

-

Agent ID: {{ agentId }}

+ + + + + + + + + + + + + + + + + 조회 + + + + + + + + + + + + + + + + + + +
+ +