큐레이션 - 조회, 등록, 수정

- 탭 추가
This commit is contained in:
Yu Sung 2025-01-24 14:27:27 +09:00
parent e1feff39f8
commit 21058bcb4f
2 changed files with 78 additions and 6 deletions

View File

@ -43,8 +43,8 @@ async function updateBannerOrders(ids) {
return Vue.axios.put('/admin/audio-content/banner/orders', {ids: ids}) return Vue.axios.put('/admin/audio-content/banner/orders', {ids: ids})
} }
async function getCurations() { async function getCurations(tabId) {
return Vue.axios.get("/admin/audio-content/curation") return Vue.axios.get("/admin/audio-content/curation?tabId=" + tabId)
} }
async function saveCuration(request) { async function saveCuration(request) {

View File

@ -10,11 +10,25 @@
<v-container> <v-container>
<v-row> <v-row>
<v-col cols="10" /> <v-col cols="9">
<v-radio-group
v-model="selected_tab_id"
row
@change="getCurations"
>
<v-radio
v-for="tab in tabs"
:key="tab.tabId"
:label="tab.title"
:value="tab.tabId"
/>
</v-radio-group>
</v-col>
<v-spacer />
<v-col> <v-col>
<v-btn <v-btn
block block
color="#9970ff" color="#3bb9f1"
dark dark
depressed depressed
@click="showWriteDialog" @click="showWriteDialog"
@ -103,6 +117,26 @@
<v-card-title v-else> <v-card-title v-else>
콘텐츠 큐레이션 등록 콘텐츠 큐레이션 등록
</v-card-title> </v-card-title>
<v-card-text>
<v-row align="center">
<v-col cols="4">
메인
</v-col>
<v-col cols="8">
<v-radio-group
v-model="curation.tab_id"
row
>
<v-radio
v-for="tab in tabs"
:key="tab.tabId"
:label="tab.title"
:value="tab.tabId"
/>
</v-radio-group>
</v-col>
</v-row>
</v-card-text>
<v-card-text> <v-card-text>
<v-row align="center"> <v-row align="center">
<v-col cols="4"> <v-col cols="4">
@ -222,6 +256,8 @@ export default {
selected_curation: {}, selected_curation: {},
curation: {is_adult: false}, curation: {is_adult: false},
curations: [], curations: [],
tabs: [],
selected_tab_id: 1,
headers: [ headers: [
{ {
text: '제목', text: '제목',
@ -252,7 +288,7 @@ export default {
}, },
async created() { async created() {
await this.getCurations() await this.getAudioContentMainTabList()
}, },
methods: { methods: {
@ -273,6 +309,7 @@ export default {
this.selected_curation = item this.selected_curation = item
this.curation.id = item.id this.curation.id = item.id
this.curation.tab_id = item.tabId
this.curation.title = item.title this.curation.title = item.title
this.curation.description = item.description this.curation.description = item.description
this.curation.is_adult = item.isAdult this.curation.is_adult = item.isAdult
@ -289,6 +326,15 @@ export default {
}, },
validate() { validate() {
if (
this.curation.tab_id === null ||
this.curation.tab_id === undefined ||
this.curation.tab_id <= 0
) {
this.notifyError("메인 탭을 선택하세요")
return false
}
if ( if (
this.curation.title === null || this.curation.title === null ||
this.curation.title === undefined || this.curation.title === undefined ||
@ -320,6 +366,27 @@ export default {
this.show_delete_confirm_dialog = false this.show_delete_confirm_dialog = false
}, },
async getAudioContentMainTabList() {
this.is_loading = true
try {
const res = await api.getAudioContentMainTabList()
if (res.status === 200 && res.data.success === true) {
const data = res.data.data
this.tabs = data.filter(item => item.title !== '홈' && item.title !== '단편')
this.selected_tab_id = this.tabs[0].tabId
await this.getCurations()
} else {
this.notifyError(res.data.message || '알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
}
} catch (e) {
this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
} finally {
this.is_loading = false
}
},
async submit() { async submit() {
if (!this.validate()) return; if (!this.validate()) return;
if (this.is_loading) return; if (this.is_loading) return;
@ -328,6 +395,7 @@ export default {
try { try {
const request = { const request = {
tabId: this.curation.tab_id,
title: this.curation.title, title: this.curation.title,
description: this.curation.description, description: this.curation.description,
isAdult: this.curation.is_adult isAdult: this.curation.is_adult
@ -357,6 +425,10 @@ export default {
try { try {
let request = {id: this.curation.id} let request = {id: this.curation.id}
if (this.selected_curation.tab_id !== this.curation.tab_id) {
request.tabId = this.curation.tab_id
}
if (this.selected_curation.title !== this.curation.title && this.curation.title.trim().length > 0) { if (this.selected_curation.title !== this.curation.title && this.curation.title.trim().length > 0) {
request.title = this.curation.title request.title = this.curation.title
} }
@ -439,7 +511,7 @@ export default {
this.is_loading = true this.is_loading = true
try { try {
const res = await api.getCurations() const res = await api.getCurations(this.selected_tab_id)
if (res.status === 200 && res.data.success === true) { if (res.status === 200 && res.data.success === true) {
this.curations = res.data.data this.curations = res.data.data
} else { } else {