큐레이션 아이템 - 드래그 앤 드롭으로 순서변경 기능 추가
This commit is contained in:
parent
bcd0ea090c
commit
1f5506dbc4
|
@ -7,7 +7,7 @@ async function getAudioContentList(status, page) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function searchAudioContent(searchWord, page){
|
async function searchAudioContent(searchWord, page) {
|
||||||
return Vue.axios.get(
|
return Vue.axios.get(
|
||||||
"/admin/audio-content/search?search_word=" + searchWord +
|
"/admin/audio-content/search?search_word=" + searchWord +
|
||||||
"&page=" + (page - 1) +
|
"&page=" + (page - 1) +
|
||||||
|
@ -79,20 +79,27 @@ async function searchSeriesItem(curationId, searchWord) {
|
||||||
return Vue.axios.get("/admin/audio-content/curation/search/series?curationId=" + curationId + "&searchWord=" + searchWord)
|
return Vue.axios.get("/admin/audio-content/curation/search/series?curationId=" + curationId + "&searchWord=" + searchWord)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addItemToCuration(curationId, itemIdList){
|
async function addItemToCuration(curationId, itemIdList) {
|
||||||
return Vue.axios.post(
|
return Vue.axios.post(
|
||||||
"/admin/audio-content/curation/add/item",
|
"/admin/audio-content/curation/add/item",
|
||||||
{curationId: curationId, itemIdList: itemIdList}
|
{curationId: curationId, itemIdList: itemIdList}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeItemInCuration(curationId, itemId){
|
async function removeItemInCuration(curationId, itemId) {
|
||||||
return Vue.axios.put(
|
return Vue.axios.put(
|
||||||
"/admin/audio-content/curation/remove/item",
|
"/admin/audio-content/curation/remove/item",
|
||||||
{curationId: curationId, itemId: itemId}
|
{curationId: curationId, itemId: itemId}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function updateItemInCurationOrders(curationId, itemIds) {
|
||||||
|
return Vue.axios.put(
|
||||||
|
"/admin/audio-content/curation/orders/item",
|
||||||
|
{curationId: curationId, itemIds: itemIds}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
getAudioContentList,
|
getAudioContentList,
|
||||||
searchAudioContent,
|
searchAudioContent,
|
||||||
|
@ -111,5 +118,6 @@ export {
|
||||||
searchSeriesItem,
|
searchSeriesItem,
|
||||||
searchContentItem,
|
searchContentItem,
|
||||||
addItemToCuration,
|
addItemToCuration,
|
||||||
removeItemInCuration
|
removeItemInCuration,
|
||||||
|
updateItemInCurationOrders
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,11 @@
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<draggable
|
||||||
|
v-model="items"
|
||||||
|
tag="tbody"
|
||||||
|
@end="onDropCallback(items)"
|
||||||
|
>
|
||||||
<tr
|
<tr
|
||||||
v-for="item in items"
|
v-for="item in items"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
|
@ -115,7 +119,7 @@
|
||||||
</td>
|
</td>
|
||||||
<td style="max-width: 200px !important; word-break:break-all; height: auto;">
|
<td style="max-width: 200px !important; word-break:break-all; height: auto;">
|
||||||
<vue-show-more-text
|
<vue-show-more-text
|
||||||
:text="item.detail"
|
:text="item.desc"
|
||||||
:lines="3"
|
:lines="3"
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
|
@ -137,7 +141,7 @@
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</draggable>
|
||||||
</template>
|
</template>
|
||||||
</v-simple-table>
|
</v-simple-table>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
@ -402,13 +406,14 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Draggable from 'vuedraggable';
|
||||||
import * as api from "@/api/audio_content"
|
import * as api from "@/api/audio_content"
|
||||||
import VueShowMoreText from 'vue-show-more-text'
|
import VueShowMoreText from 'vue-show-more-text'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ContentCurationDetail',
|
name: 'ContentCurationDetail',
|
||||||
|
|
||||||
components: {VueShowMoreText},
|
components: {VueShowMoreText, Draggable},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -487,6 +492,26 @@ export default {
|
||||||
this.search_item_list.push(item)
|
this.search_item_list.push(item)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async onDropCallback(items) {
|
||||||
|
const ids = items.map((item) => {
|
||||||
|
return item.id
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.is_loading = true
|
||||||
|
const res = await api.updateItemInCurationOrders(this.curation_id, ids)
|
||||||
|
if (res.status === 200 && res.data.success === true) {
|
||||||
|
this.notifySuccess(res.data.message)
|
||||||
|
} else {
|
||||||
|
this.notifyError(res.data.message || '알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
|
||||||
|
} finally {
|
||||||
|
this.is_loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
async searchContentItem() {
|
async searchContentItem() {
|
||||||
if (this.search_word.length < 2) {
|
if (this.search_word.length < 2) {
|
||||||
this.notifyError('검색어를 2글자 이상 입력하세요.')
|
this.notifyError('검색어를 2글자 이상 입력하세요.')
|
||||||
|
@ -586,6 +611,7 @@ export default {
|
||||||
const res = await api.getCurationItems(this.curation_id)
|
const res = await api.getCurationItems(this.curation_id)
|
||||||
if (res.status === 200 && res.data.success === true) {
|
if (res.status === 200 && res.data.success === true) {
|
||||||
this.items = res.data.data
|
this.items = res.data.data
|
||||||
|
console.log(this.items)
|
||||||
} else {
|
} else {
|
||||||
this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
|
this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue