localhost-front/src/views/voteboard/voteBoardList.vue
2025-03-18 10:56:12 +09:00

186 lines
5.5 KiB
Vue

<template>
<div class="container-xxl flex-grow-1 container-p-y">
<div class="">
<!-- 투표 작성 -->
<WriteBtn @click="voteWrite" />
<!-- 투표마감/투표중 셀렉트 -->
<div v-for="(item, index) in categoryList" @change="selectHandler"
:key="index"
class="form-check form-check-inline" >
<input class="form-check-input" type="radio" name="cate" :id="'inlineRadio' + index"
:value="index" v-model="category">
<label class="form-check-label" :for="'inlineRadio' + index">{{ item }}</label>
</div>
<!-- 내가한 투표 보기 -->
<div class="">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck1" v-model="ischeked" @change="changeCheck">
<label class="form-check-label" for="defaultCheck1"> 내가 한 투표 </label>
</div>
</div>
<!-- 투표리스트 -->
<div v-if="voteListCardData.length == 0 " class="text-center">투표가 없습니다.</div>
<vote-list
:data="voteListCardData"
@addContents="addContents"
@checkedNames="checkedNames"
@endVoteId="endVoteId"
@voteEnded="voteEnded"
@voteDelete="voteDelete"
@updateVote="updateVote"
@randomList="randomList"
/>
</div>
</div>
<!-- 페이지네이션 -->
<div class="row g-3">
<div class="mt-8">
<Pagination
v-if="PageData.pages"
v-bind="PageData"
:currentPage="currentPage"
@update:currentPage="handlePageChange"
/>
</div>
</div>
</template>
<script setup>
import { getCurrentInstance, onMounted, ref } from 'vue';
import Pagination from '@c/pagination/Pagination.vue';
import FormSelect from '@c/input/FormSelect.vue';
import { useToastStore } from '@s/toastStore';
import QEditor from '@c/editor/QEditor.vue';
import $api from '@api';
import Quill from 'quill';
import WriteBtn from '@c/button/WriteBtn.vue';
import voteList from '@c/voteboard/voteCardList.vue';
import { useRouter } from 'vue-router';
const toastStore = useToastStore();
const category = ref('0');
const categoryList = ['전체','투표마감','투표중'];
const PageData = ref([]);
const voteListCardData = ref([]);
const titleAlert = ref(false);
const addContent = ref('');
const currentPage = ref(1);
const voteset = ref(0);
const ischeked = ref(false);
const selectedVote = ref({}); // 선택된 투표 데이터
const router = useRouter();
onMounted(async () => {
getvoteList();
});
//글작성
const voteWrite = () => {
router.push('/voteboard/write');
};
const changeCheck = () =>{
currentPage.value = 1;
getvoteList();
}
//투표목록
const getvoteList = () => {
$api.get('vote/getVoteList',{
//목록조회시 파라미터 전달
params:
{
page: currentPage.value
,voteset:voteset.value
,myVote:ischeked.value ? '1':'0'
}
}).then(res => {
PageData.value = res.data.data;
voteListCardData.value = res.data.data.list;
})
};
const selectHandler = () =>{
currentPage.value = 1;
voteset.value = category.value;
getvoteList();
}
//투표항목추가
const addContents = (itemList, voteId) => {
$api.post('vote/insertWord',{
itemList :itemList
,voteId :voteId
}).then((res)=>{
if(res.data.status === 'OK'){
toastStore.onToast('항목이 등록되었습니다.', 's');
getvoteList();
}
})
}
//투표하기
const checkedNames = (numList) => {
$api.post('vote/insertCheckedNums',{
checkedList :numList
,votenum : numList[0].LOCVOTSEQ
}).then((res)=>{
if(res.data.status === 'OK'){
toastStore.onToast('투표가 완료되었습니다.', 's');
getvoteList();
}
})
}
//투표종료
const endVoteId = (endVoteId) => {
$api.patch('vote/updateEndData',{
endVoteId :endVoteId
}).then((res)=>{
if(res.data.status === 'OK'){
toastStore.onToast('투표가 종료되었습니다.', 's');
getvoteList();
}
})
}
//기한 지난 투표 종료
const voteEnded = async (id) =>{
await endVoteId(id.id);
}
//투표 삭제
const voteDelete =(id) =>{
$api.patch('vote/updateDeleteData',{
deleteVoteId :id
}).then((res)=>{
if(res.data.status === 'OK'){
toastStore.onToast('투표가 삭제되었습니다.', 's');
getvoteList();
}
})
}
//랜덤 1위 뽑기
const randomList = (data,id) =>{
$api.post('vote/randomList',{
randomList :data
,voteid:id
}).then((res)=>{
if(res.data.status === 'OK'){
toastStore.onToast('랜덤뽑기 진행되었습니다.', 's');
setTimeout(() => {
getvoteList();
}, 1000);
}
})
}
//수정
const updateVote = (id) =>{
const voteData = voteListCardData.value.find((item) => item.localVote.LOCVOTSEQ === id);
selectedVote.value = voteData;
voteWrite();
}
// 페이지 변경
const handlePageChange = (page) => {
currentPage.value=page;
getvoteList();
};
</script>
<style></style>