2021-08-02 20:45:38 +08:00

191 行
4.1 KiB
Vue

<template>
<div>
<v-row align="center" class="ma-1">
<v-btn icon @click="returnToSection">
<v-icon>mdi-arrow-left-circle</v-icon>
</v-btn>
<v-badge :content="badgeContent"
:offset-y="12"
:offset-x="15"
color="grey"
><p class="font-weight-bold text-h5 mb-0 mx-5"> {{ exercise }}</p></v-badge>
</v-row>
<div class="mt-5" v-html="myHtml"></div>
<v-btn v-if="hasPreviousExercise" @click="goToExercise(previousExerciseIndex)" fab bottom left icon fixed
elevation="2" color="green">
<v-icon>mdi-arrow-left</v-icon>
</v-btn>
<v-btn v-if="hasNextExercise" @click="goToExercise(nextExerciseIndex)" fab bottom right icon fixed elevation="2"
color="green">
<v-icon>mdi-arrow-right</v-icon>
</v-btn>
</div>
</template>
<script>
import {myAxios} from "@/includes"
import {showServerErrorAlert} from "@/includes"
export default {
name: "Exercise",
created() {
this.getExercise()
},
watch:{
exercise(){
console.log('watch exercise trigger')
this.getExercise()
}
},
computed: {
badgeContent() {
return this.section + ' - ' + this.myPage
},
tableDataIndex() {
if (!this.tableData) {
return false
}
return this.tableData.findIndex(single => single.exercise === this.exercise)
},
hasPreviousExercise(){
return this.previousExerciseIndex !== false;
},
hasNextExercise(){
return this.nextExerciseIndex !== false;
},
previousExerciseIndex() {
if (this.tableDataIndex === false || this.tableDataIndex === 0) {
return false
}
return this.tableDataIndex - 1
},
nextExerciseIndex() {
if (this.tableDataIndex === false || this.tableDataIndex === this.tableData.length - 1) {
return false
}
return this.tableDataIndex + 1
}
},
props: {
textbook: String,
section: String,
exercise: [String, Number],
page: Number,
part: String,
html: String,
tableData: Array
},
methods: {
goToExercise(exerciseIndex) {
this.$router.push({name: 'exercise', params: {...this.tableData[exerciseIndex], tableData: this.tableData}})
},
returnToSection() {
this.$router.push({name: 'section', params: {textbook: this.textbook, section: this.section}})
},
async getExercise() {
this.$emit('setCardLoadingStatus', true)
console.log('get exercise')
if (!this.html) {
let resp = await myAxios.get('textbook/' + this.textbook + '/' + encodeURIComponent(this.section) + '/' + this.exercise)
if (!resp.data.status) {
showServerErrorAlert()
return
}
this.myHtml = resp.data.data.html
this.myPage = resp.data.data.page
this.myPart = resp.data.data.part || 'exercises'
} else {
this.myHtml = this.html
this.myPage = this.page
this.myPart = this.part
}
this.$emit('setCardLoadingStatus', false)
}
},
data() {
return {
myHtml: this.html,
myPage: this.page,
myPart: this.part
}
}
}
</script>
<style>
.inline-picture-name {
margin: 50px 0;
border-top: 5px gray solid;
padding-top: 20px;
}
.inline-picture-name img {
display: inline-block;
width: 50px;
height: 50px;
}
.object-ratings-wrap {
display: none;
}
.open-comments {
display: none;
}
.row-counter {
width: 100%;
background-color: whitesmoke;
text-align: center;
border-top: black 1px solid;
border-bottom: black 1px solid;
margin: 5px 0;
}
.result-heading {
display: block;
font-size: 25px;
font-weight: bold;
}
.solution-content img {
max-width: 90%;
border: 1px solid black;
display: block;
margin: 10px auto;
}
.image-reg {
display: none !important;
}
.unfinished-hover {
display: none;
}
.annotations {
display: none;
}
.comment-footer {
display: none;
}
.center {
text-align: center;
}
.solution-content p {
font-size: 20px;
font-family: "Times New Roman", serif;
}
.Paywall__footer-counter {
display: none;
}
.edit-toolbar {
display: none;
}
</style>