diff --git a/src/components/SideMenu.vue b/src/components/SideMenu.vue index 072efa5..a4a5a27 100644 --- a/src/components/SideMenu.vue +++ b/src/components/SideMenu.vue @@ -94,113 +94,135 @@ export default { this.isLoading = true try { let res = await api.getMenus(); - if (res.status === 200 && res.data.success === true && res.data.data.length > 0) { - this.items = res.data.data + if (res.status === 200 && res.data.success === true) { + // 기본 메뉴 설정 (API 결과가 비어있을 수 있음) + this.items = Array.isArray(res.data.data) ? res.data.data : [] - // '시리즈 관리' 메뉴에 '배너 등록' 하위 메뉴 추가 - try { - const seriesMenu = this.items.find(m => m && m.title === '시리즈 관리') - if (seriesMenu) { - if (!Array.isArray(seriesMenu.items)) { - seriesMenu.items = seriesMenu.items ? [].concat(seriesMenu.items) : [] - } - const exists = seriesMenu.items.some(ci => ci && ci.route === '/content/series/banner') - if (!exists) { - seriesMenu.items.push({ - title: '배너 등록', - route: '/content/series/banner', - items: null - }) + // 현재 사용자 역할 확인 + const role = (this.$store && this.$store.state && this.$store.state.accountStore && this.$store.state.accountStore.role) + || localStorage.role + + // ADMIN 권한 전용 추가 메뉴들 + if (role === 'ADMIN') { + // '시리즈 관리' 메뉴에 '배너 등록' 하위 메뉴 추가 + try { + const seriesMenu = this.items.find(m => m && m.title === '시리즈 관리') + if (seriesMenu) { + if (!Array.isArray(seriesMenu.items)) { + seriesMenu.items = seriesMenu.items ? [].concat(seriesMenu.items) : [] + } + const exists = seriesMenu.items.some(ci => ci && ci.route === '/content/series/banner') + if (!exists) { + seriesMenu.items.push({ + title: '배너 등록', + route: '/content/series/banner', + items: null + }) + } } + } catch (e) { + // ignore } - } catch (e) { - // ignore - } - // 캐릭터 챗봇 메뉴 추가 - this.items.push({ - title: '캐릭터 챗봇', - route: null, - items: [ - { - title: '배너 등록', - route: '/character/banner', - items: null - }, - { - title: '캐릭터 리스트', - route: '/character', - items: null - }, - { - title: '큐레이션', - route: '/character/curation', - items: null - }, - { - title: '정산', - route: '/character/calculate', - items: null - }, - { - title: '원작', - route: '/original-work', - items: null - }, - ] - }) - - // 에이전트 관리 메뉴를 '크리에이터 관리' 바로 아래에 추가 - try { - const insertAfterTitle = '크리에이터 관리' - const agentMenu = { - title: '에이전트 관리', + // 캐릭터 챗봇 메뉴 추가 + this.items.push({ + title: '캐릭터 챗봇', route: null, items: [ - { title: '에이전트 리스트', route: '/agent/list', items: null }, - { title: '에이전트 정산 비율', route: '/agent/settlement-ratio', items: null }, + { + title: '배너 등록', + route: '/character/banner', + items: null + }, + { + title: '캐릭터 리스트', + route: '/character', + items: null + }, + { + title: '큐레이션', + route: '/character/curation', + items: null + }, + { + title: '정산', + route: '/character/calculate', + items: null + }, + { + title: '원작', + route: '/original-work', + items: null + }, ] + }) + + // 에이전트 관리 메뉴를 '크리에이터 관리' 바로 아래에 추가 + try { + const insertAfterTitle = '크리에이터 관리' + const agentMenu = { + title: '에이전트 관리', + route: null, + items: [ + { title: '에이전트 리스트', route: '/agent/list', items: null }, + { title: '에이전트 정산 비율', route: '/agent/settlement-ratio', items: null }, + ] + } + + const idx = this.items.findIndex(m => m && m.title === insertAfterTitle) + if (idx >= 0) { + this.items.splice(idx + 1, 0, agentMenu) + } else { + // 기준 메뉴가 없으면 하단에 추가 + this.items.push(agentMenu) + } + } catch (e) { + // ignore } - const idx = this.items.findIndex(m => m && m.title === insertAfterTitle) - if (idx >= 0) { - this.items.splice(idx + 1, 0, agentMenu) - } else { - // 기준 메뉴가 없으면 하단에 추가 - this.items.push(agentMenu) + // 정산현황 메뉴에 '채널 후원 정산' 및 '오리지널 시리즈 정산' 추가 + try { + const calculateMenu = this.items.find(m => m && m.title === '정산현황') + if (calculateMenu) { + if (!Array.isArray(calculateMenu.items)) { + calculateMenu.items = calculateMenu.items ? [].concat(calculateMenu.items) : [] + } + const exists = calculateMenu.items.some(ci => ci && ci.route === '/calculate/channel-donation') + if (!exists) { + calculateMenu.items.push({ + title: '채널 후원 정산', + route: '/calculate/channel-donation', + 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 } - } catch (e) { - // ignore } - // 정산현황 메뉴에 '채널 후원 정산' 추가 - try { - const calculateMenu = this.items.find(m => m && m.title === '정산현황') - if (calculateMenu) { - if (!Array.isArray(calculateMenu.items)) { - calculateMenu.items = calculateMenu.items ? [].concat(calculateMenu.items) : [] - } - const exists = calculateMenu.items.some(ci => ci && ci.route === '/calculate/channel-donation') - if (!exists) { - calculateMenu.items.push({ - title: '채널 후원 정산', - route: '/calculate/channel-donation', - items: null - }) - } + // 조회한 메뉴가 비어 있고, 콘텐츠 매니저라면 기본 메뉴 추가 + if (this.items.length === 0 && role === 'CONTENT_MANAGER') { + this.items.push({ + title: '콘텐츠 리스트', + route: '/content/list', + 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 + // 그래도 비어있다면 이전 동작과 동일하게 처리 + if (this.items.length === 0) { + this.notifyError("알 수 없는 오류가 발생했습니다. 다시 로그인 해주세요!") + this.logout(); } } else { this.notifyError("알 수 없는 오류가 발생했습니다. 다시 로그인 해주세요!")