File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
<template>
<div id="Chapter1_1" class="content-wrap">
<div style="margin: 30px 0px 50px; width: 20%">
<router-link to="/MyPlan.page">
<div class="logo mb25">
<img src="../../../../resources/img/new_img/logo_v2.png" alt="" />
</div>
</router-link>
</div>
<div
class="title-box mb25 flex align-center mt40"
style="justify-content: space-between"
>
<div>
<span class="title mr40">1. Hello WORLD</span>
<span class="subtitle">my name is dd</span>
</div>
<button class="completeBtn" @click="complete">학습 종료</button>
</div>
<div class="flex justify-between align-center">
<div
class="pre-btn"
:style="{ visibility: hiddenState ? 'hidden' : 'visible' }"
@click="previousProblem()"
>
<img src="../../../../resources/img/left.png" alt="" />
</div>
<div class="content title-box">
<div style="display: flex; justify-content: space-between">
<p class="title mt25 title-bg">step3 - 놀면서 배우는 영어</p>
<button id="returnButton" @click="returnPage" style="margin: 4rem">
<img src="../../../../resources/img/btn_return_50x50.png" alt="" />
<p>되돌리기</p>
</button>
</div>
<div class="flex align-center mb30">
<p class="subtitle2 mr20">
앗! 다리가 무너져서 건널 수가 없어! 다리 조각을 옮겨줘!
</p>
</div>
<div class="text-ct flex justify-center" style="gap: 80px">
<div class="dropGroup flex align-center justify-center">
<div class="flex" style="gap: 20px; position: relative">
<img src="../../../../resources/img/img70_39s.png" alt="" />
<div class="textbox">
<p
v-if="problemArr.length > 0"
style="left: -180px; bottom: -200px"
>
{{ problemArr[0] }}
</p>
<p
v-if="problemArr.length > 1"
id="bridgeTarget"
style="left: -105px; bottom: -150px"
@dragover.prevent
@drop="handleDrop"
>
{{ problemArr[1] }}
</p>
<p
v-if="problemArr.length > 2"
style="left: -30px; bottom: -65px"
>
{{ problemArr[2] }}
</p>
</div>
</div>
</div>
<div class="dragGroup mt40">
<div>
<button
v-if="answerArr.length > 0 && answerArr[0].prblmDtlExpln"
:id="answerArr[0].prblmDtlExpln"
draggable="true"
@dragstart="handleDragStart"
>
<img src="../../../../resources/img/img71_39s.png" alt="" />
<p>{{ answerArr[0].prblmDtlExpln }}</p>
</button>
<button
v-if="answerArr.length > 1 && answerArr[1].prblmDtlExpln"
:id="answerArr[1].prblmDtlExpln"
draggable="true"
@dragstart="handleDragStart"
>
<img src="../../../../resources/img/img71_39s.png" alt="" />
<p>{{ answerArr[1].prblmDtlExpln }}</p>
</button>
<button
v-if="answerArr.length > 2 && answerArr[2].prblmDtlExpln"
:id="answerArr[2].prblmDtlExpln"
draggable="true"
@dragstart="handleDragStart"
>
<img src="../../../../resources/img/img71_39s.png" alt="" />
<p>{{ answerArr[2].prblmDtlExpln }}</p>
</button>
</div>
</div>
</div>
</div>
<div class="next-btn" @click="nextProblem()">
<img src="../../../../resources/img/right.png" alt="" />
</div>
</div>
</div>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
draggedElementId: null, // 드래그한 요소의 ID를 저장
correctAnswer: "", // 정답 설정
prblm_id: [],
problemData: [],
problemArr: [],
answerArr: [],
seq: this.$store.getters.seqNum,
hiddenState: false,
};
},
methods: {
complete() {
const { unit_id, book_id } = this.$route.query;
this.$router.push({
name: "Dashboard",
query: { value: this.seq, unit_id, book_id },
});
},
goToPage(page) {
this.$router.push({ name: page });
},
returnPage() {
// 페이지 새로 고침
window.location.reload();
},
handleDragStart(event) {
// 드래그한 요소의 ID를 저장
this.draggedElementId = event.target.id;
},
handleDrop(event) {
const dropZone = event.target;
const draggedElement = document.getElementById(this.draggedElementId);
if (draggedElement) {
// 새로운 버튼을 드롭 영역에 추가
const cloneElement = draggedElement.cloneNode(true);
cloneElement.style.position = "absolute";
cloneElement.style.top = "-70px";
cloneElement.style.left = "-50px";
dropZone.innerHTML = ""; // 기존 ? 텍스트 제거
dropZone.appendChild(cloneElement);
// DOM 업데이트 후 알림을 비동기적으로 처리
setTimeout(() => {
if (this.draggedElementId === this.correctAnswer) {
alert("정답입니다!");
this.nextProblem();
} else {
alert("오답입니다!");
draggedElement.style.visibility = "visible"; // 다시 보이게 하기
dropZone.innerHTML = "?"; // 드롭된 영역 초기화
}
// 드래그 상태 초기화
this.draggedElementId = null;
}, 0);
}
},
fetchProblemData() {
axios({
url: "/problem/problemInfo.json",
method: "post",
headers: {
"Content-Type": "application/json; charset=UTF-8",
},
data: {
prblmId: this.prblm_id.prblm_id,
},
})
.then((response) => {
this.problemData = response.data;
console.log("problemData", this.problemData);
this.sortingProblem();
})
.catch((error) => {
this.state = "noProblem";
console.error("Error fetching problemData:", error);
});
},
sortingProblem() {
let prblmExpln = this.problemData.problem.prblmExpln;
let prblmArr = prblmExpln.split("/");
this.problemArr = prblmArr;
for (let i = 0; i < this.problemData.problemDetail.length; i++) {
// this.answerArr[i].prblmDtlExpln =
// this.problemData.problemDetail[i].prblmDtlExpln;
// this.answerArr[i].prblmYn = this.problemData.problemDetail[i].prblmYn;
this.answerArr[i] = this.problemData.problemDetail[i];
}
console.log("answerArr", this.answerArr);
for (let i = 0; i < this.answerArr.length; i++) {
if (this.answerArr[i].prblmYn == "Y") {
this.correctAnswer = this.answerArr[i].prblmDtlExpln;
break;
}
}
// for (let i = prblmArr.length - 1; i > 0; i--) {
// const j = Math.floor(Math.random() * (i + 1));
// [prblmArr[i], prblmArr[j]] = [prblmArr[j], prblmArr[i]];
// }
// this.prblmArr = prblmArr;
// console.log(prblmArr);
},
nextProblem() {
if (
this.currentProblemIndex <
this.$store.state.currentLearningIds.length - 1
) {
this.$store.dispatch("goToNextProblem");
this.handleProblemDetail(this.currentLearningId);
this.goToPage(this.problemType);
} else {
// 마지막 문제면 이동
// this.goToPage("Chapter4");
alert("문제 학습 완료");
this.complete();
}
},
previousProblem() {
if (this.currentProblemIndex > 0) {
this.$store.dispatch("goToPreviousProblem");
this.handleProblemDetail(this.currentLearningId);
this.goToPage(this.problemType);
}
},
handleProblemDetail(item) {
if (item.prblm_type_id === "prblm_type_001") {
this.problemType = "Chapter3";
} else if (item.prblm_type_id === "prblm_type_002") {
this.problemType = "Chapter3_1";
} else if (item.prblm_type_id === "prblm_type_003") {
this.problemType = "Chapter3_2";
} else if (item.prblm_type_id === "prblm_type_004") {
this.problemType = "Chapter3_3";
} else if (item.prblm_type_id === "prblm_type_005") {
this.problemType = "Chapter3_3_1";
} else if (item.prblm_type_id === "prblm_type_006") {
this.problemType = "Chapter3_4";
} else if (item.prblm_type_id === "prblm_type_007") {
this.problemType = "Chapter3_5";
} else if (item.prblm_type_id === "prblm_type_008") {
this.problemType = "Chapter3_6";
} else if (item.prblm_type_id === "prblm_type_009") {
this.problemType = "Chapter3_7";
} else if (item.prblm_type_id === "prblm_type_010") {
this.problemType = "Chapter3_8";
} else if (item.prblm_type_id === "prblm_type_011") {
this.problemType = "Chapter3_9";
} else if (item.prblm_type_id === "prblm_type_012") {
this.problemType = "Chapter3_10";
} else if (item.prblm_type_id === "prblm_type_013") {
this.problemType = "Chapter3_11";
} else if (item.prblm_type_id === "prblm_type_014") {
this.problemType = "Chapter3_12";
} else if (item.prblm_type_id === "prblm_type_015") {
this.problemType = "Chapter3_13";
} else if (item.prblm_type_id === "prblm_type_016") {
this.problemType = "Chapter3_14";
} else if (item.prblm_type_id === "prblm_type_017") {
this.problemType = "Chapter3_15";
} else if (item.prblm_type_id === "prblm_type_018") {
this.problemType = "Chapter2_8";
} else if (item.prblm_type_id === "prblm_type_019") {
this.problemType = "Chapter2_7";
} else if (item.prblm_type_id === "prblm_type_020") {
this.problemType = "Chapter2_5";
} else if (item.prblm_type_id === "prblm_type_021") {
this.problemType = "Chapter2_6";
} else if (item.prblm_type_id === "prblm_type_022") {
this.problemType = "Chapter2_10";
} else if (item.prblm_type_id === "prblm_type_023") {
this.problemType = "Chapter2_11";
} else if (item.prblm_type_id === "prblm_type_024") {
this.problemType = "Chapter2_13";
}
},
},
computed: {
currentLearningId() {
return this.$store.getters.currentLearningId;
},
currentLabel() {
return this.$store.getters.currentLabel;
},
currentProblemIndex() {
return this.$store.getters.currentProblemIndex;
},
isPreviousButtonDisabled() {
return this.currentProblemIndex === 0;
},
},
created() {
console.log("Current Learning ID:", this.currentLearningId);
this.prblm_id = this.currentLearningId;
console.log("Current Label:", this.currentLabel);
console.log("Current Problem Index:", this.currentProblemIndex);
// Fetch or process the current problem based on `currentLearningId`
},
mounted() {
this.fetchProblemData();
if (this.currentProblemIndex == 0) {
this.hiddenState = true;
}
},
};
</script>
<style scoped>
.textbox p {
position: absolute;
}
.dragGroup button {
display: block;
}
.dragGroup button p,
.textbox p {
width: fit-content;
height: fit-content;
background: #ffffffb8;
border-radius: 5px;
padding: 10px;
font-size: 30px;
font-family: "ONEMobilePOP";
}
.dragGroup button {
cursor: grab;
}
.dragGroup button[draggable="true"]:active {
cursor: grabbing;
}
.completeBtn {
margin-right: 100px;
background-color: #ffba08;
padding: 10px 30px;
border-radius: 10px;
font-size: 28px;
font-family: "ONEMobilePOPOTF";
}
</style>