diff --git a/src/api/original_series_settlement.js b/src/api/original_series_settlement.js new file mode 100644 index 0000000..6252810 --- /dev/null +++ b/src/api/original_series_settlement.js @@ -0,0 +1,37 @@ +import Vue from 'vue'; + +// 소지 유저 조회 +async function getOwners() { + return Vue.axios.get('/admin/calculate/original-series/owners'); +} + +// 정산 내역 조회 (page는 1부터 시작하는 UI 기준, 서버에는 0부터 전달) +async function getSettlementDetails({ startDate, endDate, creatorId, page = 1, size = 10 }) { + const params = new URLSearchParams(); + // 서버 파라미터 스펙 변경: start_date, end_date, creator_id + if (startDate) params.append('start_date', startDate); + if (endDate) params.append('end_date', endDate); + if (creatorId != null) params.append("creator_id", creatorId); + params.append('page', Math.max(0, (page || 1) - 1)); + params.append('size', size || 10); + + return Vue.axios.get(`/admin/calculate/original-series/settlement-details?${params.toString()}`); +} + +// 엑셀 다운로드 (xlsx 바이너리) +async function downloadSettlementExcel({ startDate, endDate }) { + const params = new URLSearchParams(); + // 서버 파라미터 스펙 변경: start_date, end_date + if (startDate) params.append('start_date', startDate); + if (endDate) params.append('end_date', endDate); + + return Vue.axios.get(`/admin/calculate/original-series/settlement-details/excel?${params.toString()}` , { + responseType: 'blob' + }); +} + +export { + getOwners, + getSettlementDetails, + downloadSettlementExcel, +}; diff --git a/src/components/SideMenu.vue b/src/components/SideMenu.vue index 239b15b..072efa5 100644 --- a/src/components/SideMenu.vue +++ b/src/components/SideMenu.vue @@ -173,9 +173,9 @@ export default { // ignore } - // 정산 관리 메뉴에 '채널 후원 정산' 추가 + // 정산현황 메뉴에 '채널 후원 정산' 추가 try { - const calculateMenu = this.items.find(m => m && m.title === '정산 관리') + const calculateMenu = this.items.find(m => m && m.title === '정산현황') if (calculateMenu) { if (!Array.isArray(calculateMenu.items)) { calculateMenu.items = calculateMenu.items ? [].concat(calculateMenu.items) : [] @@ -188,6 +188,16 @@ export default { items: null }) } + + // '오리지널 시리즈 정산' 추가 + const existsOriginal = calculateMenu.items.some(ci => ci && ci.route === '/calculate/original-series') + if (!existsOriginal) { + calculateMenu.items.push({ + title: '오리지널 시리즈 정산', + route: '/calculate/original-series', + items: null + }) + } } } catch (e) { // ignore diff --git a/src/router/index.js b/src/router/index.js index 48b4e84..335422d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -51,6 +51,11 @@ const routes = [ component: () => import(/* webpackChunkName: "counselor" */ '../views/Creator/CreatorSettlementRatio.vue') }, // Agent Management + { + path: '/calculate/original-series', + name: 'OriginalSeriesSettlement', + component: () => import(/* webpackChunkName: "calculate" */ '../views/Calculate/OriginalSeriesSettlement.vue') + }, { path: '/agent/list', name: 'AgentList', diff --git a/src/views/Calculate/OriginalSeriesSettlement.vue b/src/views/Calculate/OriginalSeriesSettlement.vue new file mode 100644 index 0000000..cf7daf4 --- /dev/null +++ b/src/views/Calculate/OriginalSeriesSettlement.vue @@ -0,0 +1,340 @@ + + + + +