diff --git a/src/components/input/FormInput.vue b/src/components/input/FormInput.vue index 7c1da23..6d1e98b 100644 --- a/src/components/input/FormInput.vue +++ b/src/components/input/FormInput.vue @@ -5,6 +5,7 @@ *
+ {{ min }}
{ const baseUrl = $api.defaults.baseURL.replace(/api\/$/, ''); const userStore = useUserInfoStore(); -const currentDate = new Date(); -const voteEndDate = new Date(props.data.localVote.formatted_LOCVOTEDT.replace(' ', 'T')); -voteEndDate.setDate(voteEndDate.getDate() + 1); +const offset = new Date().getTimezoneOffset() * 60000 +const today = new Date(Date.now() - offset); +const currentDate = today.toISOString().substring(0,16); +const voteEndDate = props.data.localVote.LOCVOTEDT.substring(0,16); // 종료 여부 계산 const isVoteEnded = computed(() => { return currentDate > voteEndDate; @@ -114,7 +115,7 @@ const isVoteEnded = computed(() => { const emit = defineEmits(['addContents','checkedNames','endVoteId','voteEnded','randomList','voteDelete','updateVote']); onMounted(() => { if (isVoteEnded.value && !props.data.localVote.LOCVOTDDT) { - emit('voteEnded', { id: props.data.localVote.LOCVOTSEQ }); + emit('voteEnded', { id: props.data.localVote.LOCVOTSEQ }); } checkVoteCompletion(); }); @@ -125,7 +126,7 @@ watch(() => props.data.localVote.total_voted, () => { // 종료 체크 함수 const checkVoteCompletion = () => { - if (props.data.localVote.total_votable === props.data.localVote.total_voted && !props.data.localVote.LOCVOTDDT) { + if (props.data.localVote.total_votable === props.data.localVote.total_voted && props.data.localVote.LOCVOTDDT == '') { emit('voteEnded', { id: props.data.localVote.LOCVOTSEQ }); } }; @@ -136,7 +137,6 @@ const checkedNames = (numList) =>{ emit('checkedNames',numList); } const endBtn = (voteid) =>{ - voteEndDate.setTime(currentDate.getTime()); // 현재 날짜로 설정 emit('endVoteId',voteid); } const voteDelete = (voteid) =>{ diff --git a/src/components/voteboard/voteCardCheck.vue b/src/components/voteboard/voteCardCheck.vue index 98ddda1..aba7b20 100644 --- a/src/components/voteboard/voteCardCheck.vue +++ b/src/components/voteboard/voteCardCheck.vue @@ -17,16 +17,23 @@ :is-alert="contentAlerts[index]" v-model="item.content" :is-btn="true" + @keyup="ValidHandler('content' + (index + 1))" > - +
- -
@@ -46,20 +53,19 @@ import SaveBtn from '@c/button/SaveBtn.vue' import FormInput from '@c/input/FormInput.vue'; import voteCardCheckList from '@c/voteboard/voteCardCheckList.vue'; import { computed, ref } from 'vue'; -import LinkInput from "@/components/voteboard/voteLinkInput.vue"; import { voteCommon } from '@s/voteCommon'; import DeleteBtn from "@c/button/DeleteBtn.vue"; import { useToastStore } from '@s/toastStore'; import router from '@/router'; const toastStore = useToastStore(); -const contentAlerts = ref(false); +const contentAlerts = ref([false, false]); const titleAlert = ref(false); const title = ref(''); const rink = ref(''); const { itemList, addItem, removeItem } = voteCommon(true); const total = computed(() => props.total + itemList.value.length); const isSaveDisabled = computed(() => { - return itemList.value.length === 0 || itemList.value.every(item => !item.content.trim()); + return itemList.value.length === 0 || itemList.value.every(item => !item.content.trim() && !item.url.trim()); }); const props = defineProps({ data: { @@ -77,12 +83,35 @@ const props = defineProps({ }); const emit = defineEmits(['addContents','checkedNames']); //항목추가 -const addContentSave = (voteId) =>{ +const addContentSave = (voteId,index) =>{ + let valid = true; const filteredItemList = itemList.value.filter(item => item.content && item.content.trim() !== ''); - emit('addContents',filteredItemList,voteId); - itemList.value = [{ content: "", url: "" }]; + + itemList.value.forEach((item, index) => { + if (!item.content.trim() && item.url.trim()) { + contentAlerts.value[index] = true; + valid = false; + } else { + contentAlerts.value[index] = false; + } + }); + + if(valid){ + emit('addContents',filteredItemList,voteId); + itemList.value = [{ content: "", url: "" }]; + removeItem(); + } } +const ValidHandler = (field) => { + if (field.startsWith('content')) { + const index = parseInt(field.replace('content', '')) - 1; + if (!isNaN(index)) { + contentAlerts.value[index] = false; + } + } +}; + const checkedNames = ref([]); // 선택된 값 저장 const updateCheckedNames = (newValues) => { checkedNames.value = newValues; diff --git a/src/views/voteboard/voteBoardList.vue b/src/views/voteboard/voteBoardList.vue index 4d30091..e1f885b 100644 --- a/src/views/voteboard/voteBoardList.vue +++ b/src/views/voteboard/voteBoardList.vue @@ -132,17 +132,18 @@ const checkedNames = (numList) => { } //투표종료 const endVoteId = (endVoteId) => { + console.log('endVoteId',endVoteId) $api.patch('vote/updateEndData',{ endVoteId :endVoteId }).then((res)=>{ if(res.data.status === 'OK'){ - //toastStore.onToast('투표가 종료되었습니다.', 's'); getvoteList(); } }) } //기한 지난 투표 종료 const voteEnded = async (id) =>{ + console.log('voteEnded',id) await endVoteId(id.id); } //투표 삭제 diff --git a/src/views/voteboard/voteboardWrite.vue b/src/views/voteboard/voteboardWrite.vue index d1b3a03..b94450e 100644 --- a/src/views/voteboard/voteboardWrite.vue +++ b/src/views/voteboard/voteboardWrite.vue @@ -28,8 +28,8 @@ :is-essential="true" :is-alert="endDateAlert" v-model="endDate" - :min="today" - @change="ValidHandlerendDate" + :min="minDate" + @input="ValidHandlerendDate" />
@@ -102,7 +102,7 @@