修改代码
This commit is contained in:
parent
00f0fd84a3
commit
d083482b10
@ -3,8 +3,8 @@ export function getBaseUrl() {
|
|||||||
let BASE_API;
|
let BASE_API;
|
||||||
if (process.env.NODE_ENV === 'development') {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
// BASE_API = 'https://joylink.club/jlcloud';
|
// BASE_API = 'https://joylink.club/jlcloud';
|
||||||
// BASE_API = 'https://test.joylink.club/jlcloud';
|
BASE_API = 'https://test.joylink.club/jlcloud';
|
||||||
BASE_API = 'http://192.168.3.5:9000'; // 袁琪
|
// BASE_API = 'http://192.168.3.5:9000'; // 袁琪
|
||||||
// BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
// BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
||||||
// BASE_API = 'http://192.168.3.4:9000' // 琰培
|
// BASE_API = 'http://192.168.3.4:9000' // 琰培
|
||||||
} else {
|
} else {
|
||||||
|
@ -43,10 +43,8 @@
|
|||||||
<menu-system-time ref="menuSystemTime" :offset="offset" :group="group" />
|
<menu-system-time ref="menuSystemTime" :offset="offset" :group="group" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Jl3d-Simulation v-show="simulationShow" :panelShow="simulationShow" ref="Jl3dSimulation" @showpanel="showpanel">
|
<Jl3d-Simulation v-show="simulationShow" ref="Jl3dSimulation" :panel-show="simulationShow" @showpanel="showpanel" />
|
||||||
</Jl3d-Simulation>
|
<Jl3d-Drive v-show="drivingShow" ref="Jl3dDrive" :panel-show="drivingShow" @showdriving="showdriving" />
|
||||||
<Jl3d-Drive v-show="drivingShow" :panelShow="drivingShow" ref="Jl3dDrive" @showdriving="showdriving">
|
|
||||||
</Jl3d-Drive>
|
|
||||||
|
|
||||||
<fault-choose ref="faultChoose" :group="group" />
|
<fault-choose ref="faultChoose" :group="group" />
|
||||||
<run-plan-Load ref="runPlanLoad" :group="group" />
|
<run-plan-Load ref="runPlanLoad" :group="group" />
|
||||||
@ -195,13 +193,6 @@ export default {
|
|||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
this.group = this.$route.query.group || '';
|
this.group = this.$route.query.group || '';
|
||||||
this.loading = this.$loading({
|
|
||||||
lock: true,
|
|
||||||
text: 'Loading',
|
|
||||||
spinner: 'el-icon-loading',
|
|
||||||
background: 'rgba(0, 0, 0, 0.7)'
|
|
||||||
});
|
|
||||||
this.loading.close();
|
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
this.mode = this.$route.params.mode;
|
this.mode = this.$route.params.mode;
|
||||||
|
@ -40,7 +40,7 @@ export default {
|
|||||||
name: 'MenuDemon',
|
name: 'MenuDemon',
|
||||||
components: {
|
components: {
|
||||||
// ChartView,
|
// ChartView,
|
||||||
SetTime,
|
SetTime
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
group: {
|
group: {
|
||||||
@ -167,7 +167,7 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleQuitQuest() {
|
handleQuitQuest() {
|
||||||
quitScript(this.group).then(resp => {
|
quitScript(this.group).then(resp => {
|
||||||
this.$emit('quitQuest');
|
this.$emit('quitQuest');
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.$messageBox('退出任务失败');
|
this.$messageBox('退出任务失败');
|
||||||
|
@ -1,159 +1,158 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="display-card" :style="{top: offset + 'px'}">
|
<div class="display-card" :style="{top: offset + 'px'}">
|
||||||
<el-row style="vertical-align:middle; ">
|
<el-row style="vertical-align:middle; ">
|
||||||
<span class="display-time">{{formatTrainingUsedTime}}</span>
|
<span class="display-time">{{ formatTrainingUsedTime }}</span>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
|
||||||
<div class="display-draft">
|
|
||||||
<el-button-group>
|
|
||||||
<el-button type="success" @click="start" :disabled="isDisable" :loading="startLoading">开始</el-button>
|
|
||||||
<el-button type="danger" @click="end" :disabled="!isDisable">结束</el-button>
|
|
||||||
<el-button type="primary" @click="back" class="back">返回</el-button>
|
|
||||||
</el-button-group>
|
|
||||||
</div>
|
|
||||||
<tip-exam-list @refresh="refresh"></tip-exam-list>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="display-draft">
|
||||||
|
<el-button-group>
|
||||||
|
<el-button type="success" :disabled="isDisable" :loading="startLoading" @click="start">开始</el-button>
|
||||||
|
<el-button type="danger" :disabled="!isDisable" @click="end">结束</el-button>
|
||||||
|
<el-button type="primary" class="back" @click="back">返回</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
<tip-exam-list @refresh="refresh" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import TipExamList from './tipExamList';
|
import TipExamList from './tipExamList';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { Notification } from 'element-ui';
|
import { Notification } from 'element-ui';
|
||||||
import { startTraining } from '@/api/jmap/training';
|
import { startTraining } from '@/api/jmap/training';
|
||||||
import { TrainingMode, OperateMode } from '@/scripts/ConstDic';
|
import { exitFullscreen } from '@/utils/screen';
|
||||||
import { exitFullscreen } from '@/utils/screen';
|
import { timeFormat } from '@/utils/date';
|
||||||
import { timeFormat } from '@/utils/date';
|
import { refreshExamList, finishOneExamQuestion } from '@/api/management/userexam';
|
||||||
import { refreshExamList, finishOneExamQuestion } from '@/api/management/userexam';
|
import { launchFullscreen } from '@/utils/screen';
|
||||||
import { getTrainingDetail } from '@/api/jmap/training';
|
|
||||||
import { launchFullscreen } from '@/utils/screen';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'MenuExam',
|
name: 'MenuExam',
|
||||||
components: {
|
components: {
|
||||||
TipExamList
|
TipExamList
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
group: {
|
group: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
offset: {
|
offset: {
|
||||||
type: Number
|
type: Number,
|
||||||
}
|
required: true
|
||||||
},
|
}
|
||||||
data() {
|
},
|
||||||
return {
|
data() {
|
||||||
isDisable: false,
|
return {
|
||||||
startLoading: false,
|
isDisable: false,
|
||||||
training: {
|
startLoading: false,
|
||||||
id: '',
|
training: {
|
||||||
name: '',
|
id: '',
|
||||||
remarks: ''
|
name: '',
|
||||||
},
|
remarks: ''
|
||||||
}
|
}
|
||||||
},
|
};
|
||||||
computed: {
|
},
|
||||||
...mapGetters('map', [
|
computed: {
|
||||||
'mapDeviceStatus'
|
...mapGetters('map', [
|
||||||
]),
|
'mapDeviceStatus'
|
||||||
formatTrainingUsedTime() {
|
]),
|
||||||
return timeFormat(this.$store.state.training.usedTime);
|
formatTrainingUsedTime() {
|
||||||
}
|
return timeFormat(this.$store.state.training.usedTime);
|
||||||
},
|
}
|
||||||
methods: {
|
},
|
||||||
tipInfo(opt) {
|
methods: {
|
||||||
if (opt && opt.hasOwnProperty('color') && opt.hasOwnProperty('message')) {
|
tipInfo(opt) {
|
||||||
const h = this.$createElement;
|
if (opt && opt.hasOwnProperty('color') && opt.hasOwnProperty('message')) {
|
||||||
this.$notify({
|
const h = this.$createElement;
|
||||||
title: '提示',
|
this.$notify({
|
||||||
message: h('i', { style: 'color:' + opt.color }, '请点击开始考试操作')
|
title: '提示',
|
||||||
});
|
message: h('i', { style: 'color:' + opt.color }, '请点击开始考试操作')
|
||||||
}
|
});
|
||||||
},
|
}
|
||||||
start() {
|
},
|
||||||
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
start() {
|
||||||
this.startLoading = true;
|
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
||||||
if (this.$route.query.trainingId) {
|
this.startLoading = true;
|
||||||
this.isDisable = true;
|
if (this.$route.query.trainingId) {
|
||||||
startTraining({ id: this.$route.query.trainingId }, this.group).then(response => {
|
this.isDisable = true;
|
||||||
this.$store.dispatch('training/examModeStart');
|
startTraining({ id: this.$route.query.trainingId }, this.group).then(response => {
|
||||||
this.$store.dispatch('map/clearJlmapTrainView').then(() => {
|
this.$store.dispatch('training/examModeStart');
|
||||||
this.$store.dispatch('training/setMapDefaultState').then(() => {
|
this.$store.dispatch('map/clearJlmapTrainView').then(() => {
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
this.$store.dispatch('training/setMapDefaultState').then(() => {
|
||||||
})
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
})
|
});
|
||||||
this.startLoading = false;
|
});
|
||||||
}).catch(error => {
|
this.startLoading = false;
|
||||||
this.isDisable = false;
|
}).catch(() => {
|
||||||
this.startLoading = false;
|
this.isDisable = false;
|
||||||
})
|
this.startLoading = false;
|
||||||
} else {
|
});
|
||||||
this.startLoading = true;
|
} else {
|
||||||
this.$messageBox(`请选择试题`);
|
this.startLoading = true;
|
||||||
}
|
this.$messageBox(`请选择试题`);
|
||||||
},
|
}
|
||||||
end() {
|
},
|
||||||
if (this.$route.query.trainingId) {
|
end() {
|
||||||
this.isDisable = false;
|
if (this.$route.query.trainingId) {
|
||||||
if (this.$store.state.training.started) {
|
this.isDisable = false;
|
||||||
let model = {
|
if (this.$store.state.training.started) {
|
||||||
id: this.$route.query.examQuestionId,
|
const model = {
|
||||||
usedTime: this.$store.state.training.usedTime,
|
id: this.$route.query.examQuestionId,
|
||||||
group: this.group
|
usedTime: this.$store.state.training.usedTime,
|
||||||
}
|
group: this.group
|
||||||
|
};
|
||||||
|
|
||||||
this.$store.dispatch('training/end', null);
|
this.$store.dispatch('training/end', null);
|
||||||
finishOneExamQuestion(model).then(response => {
|
finishOneExamQuestion(model).then(response => {
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
this.init();
|
this.init();
|
||||||
}).catch(error => {
|
}).catch(() => {
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
this.$messageBox(`结束实训错误`);
|
this.$messageBox(`结束实训错误`);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.isDisable = true;
|
this.isDisable = true;
|
||||||
this.$messageBox(`请先开始考试`);
|
this.$messageBox(`请先开始考试`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
back() {
|
back() {
|
||||||
this.$confirm('是否放弃本次考试?', '提示', {
|
this.$confirm('是否放弃本次考试?', '提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$emit('quit');
|
this.$emit('quit');
|
||||||
this.$router.push({ path: `/exam/home` });
|
this.$router.push({ path: `/exam/home` });
|
||||||
Notification.closeAll();
|
Notification.closeAll();
|
||||||
exitFullscreen();
|
exitFullscreen();
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
|
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
init() {
|
init() {
|
||||||
this.$store.dispatch('exam/countUsedTime');
|
this.$store.dispatch('exam/countUsedTime');
|
||||||
launchFullscreen();
|
launchFullscreen();
|
||||||
// 刷新考试列表
|
// 刷新考试列表
|
||||||
refreshExamList(this.$route.query.userExamId).then(response => {
|
refreshExamList(this.$route.query.userExamId).then(response => {
|
||||||
this.$store.dispatch('exam/setUsedTime', response.data.usedTime);
|
this.$store.dispatch('exam/setUsedTime', response.data.usedTime);
|
||||||
this.$store.dispatch('exam/setTotalTime', response.data.duration);
|
this.$store.dispatch('exam/setTotalTime', response.data.duration);
|
||||||
this.$store.dispatch('trainingList/setTrainingList', response.data.userExamQuestionsVOs).then(response => { });
|
this.$store.dispatch('trainingList/setTrainingList', response.data.userExamQuestionsVOs).then(response => { });
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
//如果时50009则表示考试已完成,不能再次进行y
|
// 如果时50009则表示考试已完成,不能再次进行y
|
||||||
if (error.code === 500009) {
|
if (error.code === 500009) {
|
||||||
this.$router.replace({ path: `/exam/result/${this.$route.params.userExamId}` });
|
this.$router.replace({ path: `/exam/result/${this.$route.params.userExamId}` });
|
||||||
} else {
|
} else {
|
||||||
this.$messageBox(`刷新列表失败`);
|
this.$messageBox(`刷新列表失败`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
refresh() {
|
refresh() {
|
||||||
this.isDisable = false;
|
this.isDisable = false;
|
||||||
this.$store.dispatch('training/end', null);
|
this.$store.dispatch('training/end', null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -292,4 +291,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,197 +1,202 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="display-card" :style="{top: offset + 'px'}">
|
<div class="display-card" :style="{top: offset + 'px'}">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-radio-group class="mode" size="small" v-model="demoMode">
|
<el-radio-group v-model="demoMode" class="mode" size="small">
|
||||||
<el-radio-button :label="TrainingMode.TEACH">教学模式</el-radio-button>
|
<el-radio-button :label="TrainingMode.TEACH">教学模式</el-radio-button>
|
||||||
<el-radio-button :label="TrainingMode.PRACTICE">练习模式</el-radio-button>
|
<el-radio-button :label="TrainingMode.PRACTICE">练习模式</el-radio-button>
|
||||||
<el-radio-button :label="TrainingMode.TEST">测验模式</el-radio-button>
|
<el-radio-button :label="TrainingMode.TEST">测验模式</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<span class="display-time">{{formatUsedTime}}</span>
|
<span class="display-time">{{ formatUsedTime }}</span>
|
||||||
<span class="display-score" v-if="demoMode === TrainingMode.TEST">得分:{{formatScore}}</span>
|
<span v-if="demoMode === TrainingMode.TEST" class="display-score">得分:{{ formatScore }}</span>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
|
||||||
<div class="display-draft">
|
|
||||||
<el-button-group>
|
|
||||||
<el-button type="success" @click="start" :disabled="isDisable" :loading="startLoading">开始</el-button>
|
|
||||||
<el-button type="danger" @click="end" class="end" :disabled="!isDisable">结束</el-button>
|
|
||||||
<el-button type="primary" @click="back" :disabled="backDisable" class="back">返回</el-button>
|
|
||||||
</el-button-group>
|
|
||||||
</div>
|
|
||||||
<tip-training-detail :trainingObj="trainingObj"></tip-training-detail>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="display-draft">
|
||||||
|
<el-button-group>
|
||||||
|
<el-button type="success" :disabled="isDisable" :loading="startLoading" @click="start">开始</el-button>
|
||||||
|
<el-button type="danger" class="end" :disabled="!isDisable" @click="end">结束</el-button>
|
||||||
|
<el-button type="primary" :disabled="backDisable" class="back" @click="back">返回</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
<tip-training-detail :training-obj="trainingObj" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import TipTrainingDetail from './tipTrainingDetail';
|
import TipTrainingDetail from './tipTrainingDetail';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { Notification } from 'element-ui';
|
import { Notification } from 'element-ui';
|
||||||
import { startTraining, endTraining } from '@/api/jmap/training';
|
import { startTraining, endTraining } from '@/api/jmap/training';
|
||||||
import { trainingNotify } from '@/api/simulation';
|
import { trainingNotify } from '@/api/simulation';
|
||||||
import { TrainingMode, OperateMode } from '@/scripts/ConstDic';
|
import { TrainingMode } from '@/scripts/ConstDic';
|
||||||
import { exitFullscreen } from '@/utils/screen';
|
import { exitFullscreen } from '@/utils/screen';
|
||||||
import { timeFormat } from '@/utils/date';
|
import { timeFormat } from '@/utils/date';
|
||||||
import { UrlConfig } from '@/router/index';
|
import { UrlConfig } from '@/router/index';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'MenuLesson',
|
name: 'MenuLesson',
|
||||||
props: {
|
components: {
|
||||||
group: {
|
TipTrainingDetail
|
||||||
type: String,
|
},
|
||||||
required: true
|
props: {
|
||||||
},
|
group: {
|
||||||
trainingObj: {
|
type: String,
|
||||||
type: Object
|
required: true
|
||||||
},
|
},
|
||||||
offset: {
|
trainingObj: {
|
||||||
type: Number
|
type: Object,
|
||||||
}
|
default() {
|
||||||
},
|
return null;
|
||||||
components: {
|
}
|
||||||
TipTrainingDetail
|
},
|
||||||
},
|
offset: {
|
||||||
data() {
|
type: Number,
|
||||||
return {
|
required: true
|
||||||
timeInterval: null,
|
}
|
||||||
TrainingMode: TrainingMode,
|
},
|
||||||
demoMode: TrainingMode.TEACH,
|
data() {
|
||||||
isDisable: false,
|
return {
|
||||||
backDisable: false,
|
timeInterval: null,
|
||||||
startLoading: false
|
TrainingMode: TrainingMode,
|
||||||
}
|
demoMode: TrainingMode.TEACH,
|
||||||
},
|
isDisable: false,
|
||||||
computed: {
|
backDisable: false,
|
||||||
...mapGetters('map', [
|
startLoading: false
|
||||||
'mapDeviceStatus'
|
};
|
||||||
]),
|
},
|
||||||
...mapGetters('training', [
|
computed: {
|
||||||
'score',
|
...mapGetters('map', [
|
||||||
'started',
|
'mapDeviceStatus'
|
||||||
'usedTime',
|
]),
|
||||||
'basicInfo'
|
...mapGetters('training', [
|
||||||
]),
|
'score',
|
||||||
formatScore() {
|
'started',
|
||||||
return this.score;
|
'usedTime',
|
||||||
},
|
'basicInfo'
|
||||||
formatUsedTime() {
|
]),
|
||||||
return timeFormat(this.usedTime);
|
formatScore() {
|
||||||
}
|
return this.score;
|
||||||
},
|
},
|
||||||
watch: {
|
formatUsedTime() {
|
||||||
demoMode: function (val) {
|
return timeFormat(this.usedTime);
|
||||||
this.$store.dispatch('training/end', null);
|
}
|
||||||
this.$store.dispatch('training/reset');
|
},
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
watch: {
|
||||||
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
demoMode: function (val) {
|
||||||
|
this.$store.dispatch('training/end', null);
|
||||||
|
this.$store.dispatch('training/reset');
|
||||||
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
|
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
||||||
|
|
||||||
this.isDisable = false;
|
this.isDisable = false;
|
||||||
},
|
},
|
||||||
'$store.state.training.operateErrMsg': function (val) {
|
'$store.state.training.operateErrMsg': function (val) {
|
||||||
this.tipInfo({ color: val.color, message: val.errMsg });
|
this.tipInfo({ color: val.color, message: val.errMsg });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
tipInfo(opt) {
|
tipInfo(opt) {
|
||||||
if (opt && opt.hasOwnProperty('color') && opt.hasOwnProperty('message')) {
|
if (opt && opt.hasOwnProperty('color') && opt.hasOwnProperty('message')) {
|
||||||
const h = this.$createElement;
|
const h = this.$createElement;
|
||||||
this.$notify({
|
this.$notify({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
message: h('i', { style: 'color:' + opt.color }, opt.message)
|
message: h('i', { style: 'color:' + opt.color }, opt.message)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
start() {
|
start() {
|
||||||
//清空按钮操作
|
// 清空按钮操作
|
||||||
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
this.$store.dispatch('menuOperation/setButtonOperation', null);
|
||||||
this.startLoading = true;
|
this.startLoading = true;
|
||||||
if (this.trainingObj && this.trainingObj.id) {
|
if (this.trainingObj && this.trainingObj.id) {
|
||||||
this.isDisable = true;
|
this.isDisable = true;
|
||||||
startTraining(this.trainingObj, this.group).then(response => {
|
startTraining(this.trainingObj, this.group).then(response => {
|
||||||
this.$store.dispatch('map/clearJlmapTrainView').then(() => {
|
debugger;
|
||||||
this.$store.dispatch('training/teachModeStart', this.demoMode);
|
this.$store.dispatch('map/clearJlmapTrainView').then(() => {
|
||||||
this.$store.dispatch('training/setMapDefaultState').then(() => {
|
this.$store.dispatch('training/teachModeStart', this.demoMode);
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
this.$store.dispatch('training/setMapDefaultState').then(() => {
|
||||||
this.tipInfo({ color: 'green', message: '请开始操作' });
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
});
|
this.tipInfo({ color: 'green', message: '请开始操作' });
|
||||||
});
|
});
|
||||||
this.startLoading = false;
|
});
|
||||||
}).catch(error => {
|
this.startLoading = false;
|
||||||
this.isDisable = false;
|
}).catch(() => {
|
||||||
this.startLoading = false;
|
this.isDisable = false;
|
||||||
})
|
this.startLoading = false;
|
||||||
} else {
|
});
|
||||||
this.startLoading = false;
|
} else {
|
||||||
this.$messageBox(`请选择实训`);
|
this.startLoading = false;
|
||||||
}
|
this.$messageBox(`请选择实训`);
|
||||||
},
|
}
|
||||||
endCommit() {
|
},
|
||||||
this.$store.dispatch('training/setStopCountTime');
|
endCommit() {
|
||||||
let mode = {
|
this.$store.dispatch('training/setStopCountTime');
|
||||||
mode: this.demoMode,
|
const mode = {
|
||||||
id: this.trainingObj.id,
|
mode: this.demoMode,
|
||||||
lessonId: this.$route.query.lessonId,
|
id: this.trainingObj.id,
|
||||||
usedTime: this.usedTime
|
lessonId: this.$route.query.lessonId,
|
||||||
}
|
usedTime: this.usedTime
|
||||||
|
};
|
||||||
|
|
||||||
endTraining(mode, this.group).then(response => {
|
endTraining(mode, this.group).then(response => {
|
||||||
let data = response.data;
|
const data = response.data;
|
||||||
this.$store.dispatch('training/judgeFinish', data).then(rsp => {
|
this.$store.dispatch('training/judgeFinish', data).then(rsp => {
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
});
|
});
|
||||||
}).catch(error => {
|
}).catch(() => {
|
||||||
this.$messageBox(`结束实训错误`);
|
this.$messageBox(`结束实训错误`);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
end() {
|
end() {
|
||||||
//如果是测试模式需要获取最终的得分
|
// 如果是测试模式需要获取最终的得分
|
||||||
if (this.trainingObj && this.trainingObj.id) {
|
if (this.trainingObj && this.trainingObj.id) {
|
||||||
if (this.started) {
|
if (this.started) {
|
||||||
this.isDisable = false;
|
this.isDisable = false;
|
||||||
this.$store.dispatch('training/isStepOver').then((rnt) => {
|
this.$store.dispatch('training/isStepOver').then((rnt) => {
|
||||||
if (rnt) {
|
if (rnt) {
|
||||||
this.endCommit();
|
this.endCommit();
|
||||||
} else {
|
} else {
|
||||||
this.backDisable = true;
|
this.backDisable = true;
|
||||||
this.$confirm('操作未完成,是否确认结束?', '提示', {
|
this.$confirm('操作未完成,是否确认结束?', '提示', {
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
center: true,
|
center: true,
|
||||||
zIndex: 9999
|
zIndex: 9999
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.backDisable = false;
|
this.backDisable = false;
|
||||||
this.$store.dispatch('training/end', null);
|
this.$store.dispatch('training/end', null);
|
||||||
this.$store.dispatch('training/setScore', 0);
|
this.$store.dispatch('training/setScore', 0);
|
||||||
this.$store.dispatch('training/emitTipFresh');
|
this.$store.dispatch('training/emitTipFresh');
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.isDisable = true;
|
this.isDisable = true;
|
||||||
this.backDisable = false;
|
this.backDisable = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
} else {
|
} else {
|
||||||
this.$messageBox(`请先开始实训`);
|
this.$messageBox(`请先开始实训`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
back() {
|
back() {
|
||||||
this.$emit('quit');
|
this.$emit('quit');
|
||||||
Notification.closeAll();
|
Notification.closeAll();
|
||||||
exitFullscreen();
|
exitFullscreen();
|
||||||
|
|
||||||
if (this.$route.params.mode == 'record') {
|
if (this.$route.params.mode == 'record') {
|
||||||
/** 如果是演示返回时,需要重新创建仿真*/
|
/** 如果是演示返回时,需要重新创建仿真*/
|
||||||
trainingNotify({ trainingId: this.$route.query.trainingId }).then(resp => {
|
trainingNotify({ trainingId: this.$route.query.trainingId }).then(resp => {
|
||||||
this.$router.push({ path: `${UrlConfig.lesson.record}/${this.$route.query.trainingId}/${this.$route.query.trainingName}`, query: { group: resp.data } });
|
this.$router.push({ path: `${UrlConfig.lesson.record}/${this.$route.query.trainingId}/${this.$route.query.trainingName}`, query: { group: resp.data } });
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
this.$messageBox(`创建仿真失败: ${error.message}`);
|
this.$messageBox(`创建仿真失败: ${error.message}`);
|
||||||
})
|
});
|
||||||
} else {
|
} else {
|
||||||
history.go(-1);
|
history.go(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -265,4 +270,4 @@
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,119 +1,118 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="display-card" :style="{top: offset+'px'}">
|
<div class="display-card" :style="{top: offset+'px'}">
|
||||||
<el-row>
|
<el-row>
|
||||||
<span class="display-score" v-if="countTime">试用时间:{{ countTime }}</span>
|
<span v-if="countTime" class="display-score">试用时间:{{ countTime }}</span>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { getGoodsTryUse } from '@/api/management/goods';
|
||||||
import { getGoodsTryUse } from '@/api/management/goods'
|
import { PermissionType } from '@/scripts/ConstDic';
|
||||||
import { PermissionType } from '@/scripts/ConstDic';
|
import { exitFullscreen } from '@/utils/screen';
|
||||||
import { exitFullscreen } from '@/utils/screen';
|
import { getCountTime } from '@/utils/index';
|
||||||
import { getCountTime } from '@/utils/index';
|
import { runDiagramIsStart, runDiagramGetTime, runDiagramStart } from '@/api/simulation';
|
||||||
import { runDiagramIsStart, runDiagramGetTime, runDiagramStart } from '@/api/simulation';
|
import { timeFormat } from '@/utils/date';
|
||||||
import { timeFormat } from '@/utils/date';
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'MenuScreen',
|
||||||
|
props: {
|
||||||
|
group: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
offset: {
|
||||||
|
type: Number,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tryTime: 0, // 进入页面多少秒
|
||||||
|
timeNow: 0, // 进入页面 相对时间
|
||||||
|
time: null, // 定时器
|
||||||
|
countTime: 0, // 显示 倒计时
|
||||||
|
remainingTime: 0,
|
||||||
|
goodsId: this.$route.query.goodsId,
|
||||||
|
try: this.$route.query.try, // 是否是试用权限
|
||||||
|
training: {
|
||||||
|
id: '',
|
||||||
|
name: '',
|
||||||
|
remarks: ''
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
'$store.state.training.subscribeCount': function () {
|
||||||
|
this.group && this.initLoadPage();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.time) {
|
||||||
|
this.setTryTime();
|
||||||
|
clearTimeout(this.time);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async initLoadPage() {
|
||||||
|
try {
|
||||||
|
if (this.try != '0') {
|
||||||
|
const data = {
|
||||||
|
productType: PermissionType.SCREEN
|
||||||
|
};
|
||||||
|
|
||||||
export default {
|
const resr = await getGoodsTryUse(data);
|
||||||
name: 'MenuScreen',
|
if (resr && resr.code == 200) {
|
||||||
props: {
|
this.remainingTime = resr.data.tryTime;
|
||||||
group: {
|
this.timeNow = Date.parse(new Date()) / 1000 + this.remainingTime;
|
||||||
type: String,
|
if (this.try) {
|
||||||
required: true
|
this.time = setInterval(() => {
|
||||||
},
|
this.tryTime += 1;
|
||||||
offset: {
|
this.countTime = getCountTime(this.timeNow);
|
||||||
type: Number
|
if (this.countTime == -1) {
|
||||||
}
|
this.back();
|
||||||
},
|
}
|
||||||
data() {
|
}, 1000);
|
||||||
return {
|
}
|
||||||
tryTime: 0, // 进入页面多少秒
|
} else {
|
||||||
timeNow: 0, // 进入页面 相对时间
|
this.$messageBox(`获取时间失败`);
|
||||||
time: null, // 定时器
|
}
|
||||||
countTime: 0, // 显示 倒计时
|
}
|
||||||
remainingTime: 0,
|
|
||||||
goodsId: this.$route.query.goodsId,
|
|
||||||
try: this.$route.query.try, // 是否是试用权限
|
|
||||||
training: {
|
|
||||||
id: '',
|
|
||||||
name: '',
|
|
||||||
remarks: ''
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
'$store.state.training.subscribeCount': function () {
|
|
||||||
this.group && this.initLoadPage()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
if (this.time) {
|
|
||||||
this.setTryTime();
|
|
||||||
clearTimeout(this.time);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
async initLoadPage() {
|
|
||||||
try {
|
|
||||||
if (this.try != '0') {
|
|
||||||
let data = {
|
|
||||||
productType: PermissionType.SCREEN
|
|
||||||
};
|
|
||||||
|
|
||||||
let resr = await getGoodsTryUse(data);
|
const initTime = this.$route.query.initTime;
|
||||||
if (resr && resr.code == 200) {
|
const retp = await runDiagramIsStart(this.group);
|
||||||
this.remainingTime = resr.data.tryTime;
|
if (retp && !retp.data) {
|
||||||
this.timeNow = Date.parse(new Date()) / 1000 + this.remainingTime;
|
await runDiagramStart({ initTime: initTime }, this.group);
|
||||||
if (this.try) {
|
}
|
||||||
this.time = setInterval(() => {
|
|
||||||
this.tryTime += 1;
|
|
||||||
this.countTime = getCountTime(this.timeNow);
|
|
||||||
if (this.countTime == -1) {
|
|
||||||
this.back();
|
|
||||||
}
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.$messageBox(`获取时间失败`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let initTime = this.$route.query.initTime;
|
await this.$store.dispatch('training/simulationStart');
|
||||||
let retp = await runDiagramIsStart(this.group);
|
await this.loadSystemTime();
|
||||||
if (retp && !retp.data) {
|
} catch (error) {
|
||||||
await runDiagramStart({ initTime: initTime }, this.group);
|
console.log(error);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
await this.$store.dispatch('training/simulationStart');
|
async loadSystemTime() {
|
||||||
await this.loadSystemTime();
|
const rest = await runDiagramGetTime(this.group);
|
||||||
} catch (error) {
|
if (rest && rest.code == 200) {
|
||||||
console.log(error);
|
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().getFullYear()} ${timeFormat(rest.data)}`));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async loadSystemTime() {
|
setTryTime() {
|
||||||
let rest = await runDiagramGetTime(this.group);
|
if (this.try) {
|
||||||
if (rest && rest.code == 200) {
|
this.$emit('tryTime', { time: this.tryTime, goodsId: this.goodsId });
|
||||||
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().getFullYear()} ${timeFormat(rest.data)}`));
|
}
|
||||||
}
|
},
|
||||||
},
|
back() {
|
||||||
setTryTime() {
|
this.$store.dispatch('training/over').then(() => {
|
||||||
if (this.try) {
|
Notification.closeAll();
|
||||||
this.$emit('tryTime', { time: this.tryTime, goodsId: this.goodsId });
|
history.go(-1);
|
||||||
}
|
exitFullscreen();
|
||||||
},
|
});
|
||||||
back() {
|
}
|
||||||
this.$store.dispatch('training/over').then(() => {
|
}
|
||||||
Notification.closeAll();
|
};
|
||||||
history.go(-1);
|
|
||||||
exitFullscreen();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -123,9 +122,7 @@
|
|||||||
display: inline;
|
display: inline;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 17px;
|
top: 17px;
|
||||||
float: left;
|
|
||||||
left: 30px;
|
left: 30px;
|
||||||
height: 32px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.display-card .el-row {
|
.display-card .el-row {
|
||||||
@ -153,4 +150,4 @@
|
|||||||
right: 15px;
|
right: 15px;
|
||||||
bottom: 15px;
|
bottom: 15px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,42 +1,50 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="display-card" :style="{top: offset+'px'}" v-if="isShowSystemTime">
|
<div v-if="isShowSystemTime" class="display-card" :style="{top: offset+'px'}">
|
||||||
<system-time class="time" v-if="isShowSystemTime" :time="time" :zoom="1.3" :width="110" :height="32" :fine="2"
|
<system-time
|
||||||
:top="2"></system-time>
|
v-if="isShowSystemTime"
|
||||||
</div>
|
class="time"
|
||||||
|
:time="time"
|
||||||
|
:zoom="1.3"
|
||||||
|
:width="110"
|
||||||
|
:height="32"
|
||||||
|
:fine="2"
|
||||||
|
:top="2"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { prefixIntrger } from '@/utils/date';
|
||||||
import { prefixIntrger } from '@/utils/date';
|
import SystemTime from '@/views/components/systemTime/index';
|
||||||
import SystemTime from '@/views/components/systemTime/index';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'MenuSystemTime',
|
name: 'MenuSystemTime',
|
||||||
props: {
|
components: {
|
||||||
offset: {
|
SystemTime
|
||||||
type: Number
|
},
|
||||||
}
|
props: {
|
||||||
},
|
offset: {
|
||||||
components: {
|
type: Number,
|
||||||
SystemTime
|
required: true
|
||||||
},
|
}
|
||||||
data() {
|
},
|
||||||
return {
|
data() {
|
||||||
time: '00:0000',
|
return {
|
||||||
}
|
time: '00:0000'
|
||||||
},
|
};
|
||||||
watch: {
|
},
|
||||||
'$store.state.training.initTime': function (initTime) {
|
computed: {
|
||||||
let date = new Date(initTime);
|
isShowSystemTime() {
|
||||||
this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}${prefixIntrger(date.getSeconds(), 2)}`
|
return this.$route.params.mode == 'demon' || this.$route.params.mode == 'dp' || this.$route.params.mode == 'plan' || !this.$route.params.mode;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
watch: {
|
||||||
isShowSystemTime() {
|
'$store.state.training.initTime': function (initTime) {
|
||||||
return this.$route.params.mode == 'demon' || this.$route.params.mode == 'dp' || this.$route.params.mode == 'plan' || !this.$route.params.mode;
|
const date = new Date(initTime);
|
||||||
}
|
this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}${prefixIntrger(date.getSeconds(), 2)}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -75,4 +83,4 @@
|
|||||||
right: 40px;
|
right: 40px;
|
||||||
bottom: 28px;
|
bottom: 28px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,272 +1,277 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="reminder-drag" v-drag>
|
<div v-drag class="reminder-drag">
|
||||||
<div class="reminder-box" ref="drapBox">
|
<div ref="drapBox" class="reminder-box">
|
||||||
<div class="tip-title">
|
<div class="tip-title">
|
||||||
<i class="icon el-icon-minus" @click="shrink" v-show="isShrink"></i>
|
<i v-show="isShrink" class="icon el-icon-minus" @click="shrink" />
|
||||||
<i class="icon el-icon-plus" @click="shrink" v-show="!isShrink"></i>
|
<i v-show="!isShrink" class="icon el-icon-plus" @click="shrink" />
|
||||||
<p style="color: #fff;" v-if="!isShrink">
|
<p v-if="!isShrink" style="color: #fff;">
|
||||||
<span class="time-label">考试计时:</span>
|
<span class="time-label">考试计时:</span>
|
||||||
<span class="time-elem">{{formatExamUsedTime}}</span>
|
<span class="time-elem">{{ formatExamUsedTime }}</span>
|
||||||
</p>
|
</p>
|
||||||
<p style="color: #fff;" v-if="isShrink">
|
<p v-if="isShrink" style="color: #fff;">
|
||||||
<span>{{examName}}</span>
|
<span>{{ examName }}</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tip-body-box" ref="dragBody">
|
<div ref="dragBody" class="tip-body-box">
|
||||||
<div class="tip-body" v-show="detailShow">
|
<div v-show="detailShow" class="tip-body">
|
||||||
<el-scrollbar wrapClass="scrollbar-wrapper">
|
<el-scrollbar wrap-class="scrollbar-wrapper">
|
||||||
<el-tree ref="treeQuestion" :data="trainingList" node-key="id" highlight-current
|
<el-tree
|
||||||
@node-click="getTrainDetail">
|
ref="treeQuestion"
|
||||||
<span slot-scope="{ node, data }">
|
:data="trainingList"
|
||||||
<span :style="{color: data.usedTime !== undefined ? 'green':''}"> {{trainingList.indexOf(data)+1}}.{{
|
node-key="id"
|
||||||
data.trainingName}}
|
highlight-current
|
||||||
</span>
|
@node-click="getTrainDetail"
|
||||||
</span>
|
>
|
||||||
</el-tree>
|
<span slot-scope="{ node, data }">
|
||||||
</el-scrollbar>
|
<span :style="{color: data.usedTime !== undefined ? 'green':''}"> {{ trainingList.indexOf(data)+1 }}.{{
|
||||||
</div>
|
data.trainingName }}
|
||||||
<div class="tip-body" v-show="!detailShow">
|
</span>
|
||||||
<el-scrollbar wrapClass="scrollbar-wrapper">
|
</span>
|
||||||
<p class="list-item">
|
</el-tree>
|
||||||
<span class="list-label">本题名称:</span>
|
</el-scrollbar>
|
||||||
<span class="list-elem">{{ courseModel.name }}</span>
|
|
||||||
</p>
|
|
||||||
<p class="list-item">
|
|
||||||
<span class="list-label">最佳用时:</span>
|
|
||||||
<span class="list-elem">{{ courseModel.minDuration }}秒 </span>
|
|
||||||
</p>
|
|
||||||
<p class="list-item">
|
|
||||||
<span class="list-label">最大用时:</span>
|
|
||||||
<span class="list-elem">{{ courseModel.maxDuration }}秒 </span>
|
|
||||||
</p>
|
|
||||||
<p class="list-item">
|
|
||||||
<span class="list-label"> 实训说明:</span>
|
|
||||||
<span class="list-elem">{{ courseModel.remarks }}</span>
|
|
||||||
</p>
|
|
||||||
</el-scrollbar>
|
|
||||||
</div>
|
|
||||||
<div class="tip-foot">
|
|
||||||
<div class="foot-detail" v-show="!detailShow">
|
|
||||||
<el-button class="btn" @click="backList">查看试题</el-button>
|
|
||||||
<el-button class="btn" type="primary" @click="lastExam" v-if="!isFirst">上一题</el-button>
|
|
||||||
<el-button class="btn" type="primary" @click="nextExam" v-if="!isLast">下一题</el-button>
|
|
||||||
<el-button class="btn" type="primary" @click="overExam" v-if="isLast">提交试卷</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="foot-submit" v-show="detailShow">
|
|
||||||
<el-button class="btn" type="primary" @click="overExam">提交试卷</el-button>
|
|
||||||
</div>
|
|
||||||
<p style="color: #000; float: left;">
|
|
||||||
<span class="time-label">考试计时:</span>
|
|
||||||
<span class="time-elem">{{formatExamUsedTime}}</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="drag-right"></div>
|
|
||||||
<div class="drag-left"></div>
|
|
||||||
<div class="drag-bottom"></div>
|
|
||||||
<div class="drag-top"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div v-show="!detailShow" class="tip-body">
|
||||||
|
<el-scrollbar wrap-class="scrollbar-wrapper">
|
||||||
|
<p class="list-item">
|
||||||
|
<span class="list-label">本题名称:</span>
|
||||||
|
<span class="list-elem">{{ courseModel.name }}</span>
|
||||||
|
</p>
|
||||||
|
<p class="list-item">
|
||||||
|
<span class="list-label">最佳用时:</span>
|
||||||
|
<span class="list-elem">{{ courseModel.minDuration }}秒 </span>
|
||||||
|
</p>
|
||||||
|
<p class="list-item">
|
||||||
|
<span class="list-label">最大用时:</span>
|
||||||
|
<span class="list-elem">{{ courseModel.maxDuration }}秒 </span>
|
||||||
|
</p>
|
||||||
|
<p class="list-item">
|
||||||
|
<span class="list-label"> 实训说明:</span>
|
||||||
|
<span class="list-elem">{{ courseModel.remarks }}</span>
|
||||||
|
</p>
|
||||||
|
</el-scrollbar>
|
||||||
|
</div>
|
||||||
|
<div class="tip-foot">
|
||||||
|
<div v-show="!detailShow" class="foot-detail">
|
||||||
|
<el-button class="btn" @click="backList">查看试题</el-button>
|
||||||
|
<el-button v-if="!isFirst" class="btn" type="primary" @click="lastExam">上一题</el-button>
|
||||||
|
<el-button v-if="!isLast" class="btn" type="primary" @click="nextExam">下一题</el-button>
|
||||||
|
<el-button v-if="isLast" class="btn" type="primary" @click="overExam">提交试卷</el-button>
|
||||||
|
</div>
|
||||||
|
<div v-show="detailShow" class="foot-submit">
|
||||||
|
<el-button class="btn" type="primary" @click="overExam">提交试卷</el-button>
|
||||||
|
</div>
|
||||||
|
<p style="color: #000; float: left;">
|
||||||
|
<span class="time-label">考试计时:</span>
|
||||||
|
<span class="time-elem">{{ formatExamUsedTime }}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="drag-right" />
|
||||||
|
<div class="drag-left" />
|
||||||
|
<div class="drag-bottom" />
|
||||||
|
<div class="drag-top" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { timeFormat } from '@/utils/date';
|
import { timeFormat } from '@/utils/date';
|
||||||
import { refreshExamList } from '@/api/management/userexam';
|
import { refreshExamList } from '@/api/management/userexam';
|
||||||
import { getTrainingDetail } from '@/api/jmap/training';
|
import { getTrainingDetail } from '@/api/jmap/training';
|
||||||
import { launchFullscreen, exitFullscreen } from '@/utils/screen';
|
import { launchFullscreen, exitFullscreen } from '@/utils/screen';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TipExamList',
|
name: 'TipExamList',
|
||||||
components: {
|
components: {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
training: {
|
training: {
|
||||||
id: '',
|
id: '',
|
||||||
name: '',
|
name: '',
|
||||||
remarks: ''
|
remarks: ''
|
||||||
},
|
},
|
||||||
isShrink: false,
|
isShrink: false,
|
||||||
examName: '',
|
examName: '',
|
||||||
courseModel: {
|
courseModel: {
|
||||||
id: '',
|
id: '',
|
||||||
name: '',
|
name: '',
|
||||||
maxDuration: '',
|
maxDuration: '',
|
||||||
minDuration: '',
|
minDuration: '',
|
||||||
remarks: '',
|
remarks: '',
|
||||||
updateTime: ''
|
updateTime: ''
|
||||||
},
|
},
|
||||||
detailShow: false,
|
detailShow: false,
|
||||||
examIndex: 0,
|
examIndex: 0
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters('trainingList', [
|
...mapGetters('trainingList', [
|
||||||
'trainingList',
|
'trainingList'
|
||||||
]),
|
]),
|
||||||
formatExamUsedTime() {
|
formatExamUsedTime() {
|
||||||
return timeFormat(this.$store.state.exam.usedTime);
|
return timeFormat(this.$store.state.exam.usedTime);
|
||||||
},
|
},
|
||||||
isFirst() {
|
isFirst() {
|
||||||
return this.examIndex == 0;
|
return this.examIndex == 0;
|
||||||
},
|
},
|
||||||
isLast() {
|
isLast() {
|
||||||
return this.examIndex == this.trainingList.length - 1;
|
return this.examIndex == this.trainingList.length - 1;
|
||||||
},
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.loadInitData();
|
this.loadInitData();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
backList() {
|
backList() {
|
||||||
this.detailShow = true;
|
this.detailShow = true;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.treeQuestion.setCurrentKey(this.$route.query.examQuestionId); // value 绑定的node-key
|
this.$refs.treeQuestion.setCurrentKey(this.$route.query.examQuestionId); // value 绑定的node-key
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
// 获取试题详情
|
// 获取试题详情
|
||||||
selectedTraining(obj) {
|
selectedTraining(obj) {
|
||||||
this.trainingList.forEach((item, index) => {
|
this.trainingList.forEach((item, index) => {
|
||||||
if (item.id == obj.id) {
|
if (item.id == obj.id) {
|
||||||
this.examIndex = index;
|
this.examIndex = index;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
if (obj) {
|
if (obj) {
|
||||||
let that = this;
|
const that = this;
|
||||||
let data = { id: obj.trainingId };
|
const data = { id: obj.trainingId };
|
||||||
getTrainingDetail(data).then(res => {
|
getTrainingDetail(data).then(res => {
|
||||||
that.courseModel = {
|
that.courseModel = {
|
||||||
id: res.data.id,
|
id: res.data.id,
|
||||||
name: res.data.name,
|
name: res.data.name,
|
||||||
maxDuration: res.data.maxDuration,
|
maxDuration: res.data.maxDuration,
|
||||||
remarks: res.data.remarks,
|
remarks: res.data.remarks,
|
||||||
minDuration: res.data.minDuration,
|
minDuration: res.data.minDuration,
|
||||||
updateTime: res.data.updateTime,
|
updateTime: res.data.updateTime
|
||||||
};
|
};
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
that.$message.error('获取试题息失败:' + error.message)
|
that.$message.error('获取试题息失败:' + error.message);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.jump(obj);
|
this.jump(obj);
|
||||||
},
|
},
|
||||||
getTrainDetail(obj) {
|
getTrainDetail(obj) {
|
||||||
this.selectedTraining(obj);
|
this.selectedTraining(obj);
|
||||||
this.detailShow = false;
|
this.detailShow = false;
|
||||||
},
|
},
|
||||||
// 获取试题列表
|
// 获取试题列表
|
||||||
loadInitData() {
|
loadInitData() {
|
||||||
this.$store.dispatch('exam/countUsedTime');
|
this.$store.dispatch('exam/countUsedTime');
|
||||||
// 刷新考试列表
|
// 刷新考试列表
|
||||||
refreshExamList(this.$route.query.userExamId).then(response => {
|
refreshExamList(this.$route.query.userExamId).then(response => {
|
||||||
this.examName = response.data.examName;
|
this.examName = response.data.examName;
|
||||||
this.$store.dispatch('exam/setUsedTime', response.data.usedTime);
|
this.$store.dispatch('exam/setUsedTime', response.data.usedTime);
|
||||||
this.$store.dispatch('exam/setTotalTime', response.data.duration);
|
this.$store.dispatch('exam/setTotalTime', response.data.duration);
|
||||||
this.$store.dispatch('trainingList/setTrainingList', response.data.userExamQuestionsVOs).then(response => { });
|
this.$store.dispatch('trainingList/setTrainingList', response.data.userExamQuestionsVOs).then(response => { });
|
||||||
let obj = {
|
const obj = {
|
||||||
trainingId: '',
|
trainingId: '',
|
||||||
id: '',
|
id: ''
|
||||||
}
|
};
|
||||||
if (this.$route.query.examQuestionId && this.$route.query.trainingId) {
|
if (this.$route.query.examQuestionId && this.$route.query.trainingId) {
|
||||||
obj.trainingId = this.$route.query.trainingId;
|
obj.trainingId = this.$route.query.trainingId;
|
||||||
obj.id = this.$route.query.examQuestionId;
|
obj.id = this.$route.query.examQuestionId;
|
||||||
} else {
|
} else {
|
||||||
obj.trainingId = response.data.userExamQuestionsVOs[0].trainingId;
|
obj.trainingId = response.data.userExamQuestionsVOs[0].trainingId;
|
||||||
obj.id = response.data.userExamQuestionsVOs[0].id;
|
obj.id = response.data.userExamQuestionsVOs[0].id;
|
||||||
}
|
}
|
||||||
this.selectedTraining(obj);
|
this.selectedTraining(obj);
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
//如果时50009则表示考试已完成,不能再次进行y
|
// 如果时50009则表示考试已完成,不能再次进行y
|
||||||
if (error.code === 500009) {
|
if (error.code === 500009) {
|
||||||
this.$router.replace({ path: `/exam/result/${this.$route.params.userExamId}` });
|
this.$router.replace({ path: `/exam/result/${this.$route.params.userExamId}` });
|
||||||
} else {
|
} else {
|
||||||
this.$messageBox(`刷新列表失败`);
|
this.$messageBox(`刷新列表失败`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.shrink();
|
this.shrink();
|
||||||
},
|
},
|
||||||
nextExam() {
|
nextExam() {
|
||||||
let obj = {
|
const obj = {
|
||||||
trainingId: '',
|
trainingId: '',
|
||||||
id: '',
|
id: ''
|
||||||
}
|
};
|
||||||
if (this.trainingList[this.examIndex + 1] && this.trainingList[this.examIndex + 1].trainingId) {
|
if (this.trainingList[this.examIndex + 1] && this.trainingList[this.examIndex + 1].trainingId) {
|
||||||
obj.trainingId = this.trainingList[this.examIndex + 1].trainingId;
|
obj.trainingId = this.trainingList[this.examIndex + 1].trainingId;
|
||||||
obj.id = this.trainingList[this.examIndex + 1].id;
|
obj.id = this.trainingList[this.examIndex + 1].id;
|
||||||
this.examIndex = this.examIndex + 1;
|
this.examIndex = this.examIndex + 1;
|
||||||
}
|
}
|
||||||
if (obj.trainingId && obj.id) {
|
if (obj.trainingId && obj.id) {
|
||||||
this.selectedTraining(obj);
|
this.selectedTraining(obj);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
lastExam() {
|
lastExam() {
|
||||||
let obj = {
|
const obj = {
|
||||||
trainingId: '',
|
trainingId: '',
|
||||||
id: '',
|
id: ''
|
||||||
}
|
};
|
||||||
if (this.trainingList[this.examIndex - 1] && this.trainingList[this.examIndex - 1].trainingId) {
|
if (this.trainingList[this.examIndex - 1] && this.trainingList[this.examIndex - 1].trainingId) {
|
||||||
obj.trainingId = this.trainingList[this.examIndex - 1].trainingId;
|
obj.trainingId = this.trainingList[this.examIndex - 1].trainingId;
|
||||||
obj.id = this.trainingList[this.examIndex - 1].id;
|
obj.id = this.trainingList[this.examIndex - 1].id;
|
||||||
this.examIndex = this.examIndex - 1;
|
this.examIndex = this.examIndex - 1;
|
||||||
}
|
}
|
||||||
if (obj.trainingId && obj.id) {
|
if (obj.trainingId && obj.id) {
|
||||||
this.selectedTraining(obj);
|
this.selectedTraining(obj);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
jump(obj) {
|
jump(obj) {
|
||||||
let query = {
|
const query = {
|
||||||
group: this.$route.query.group,
|
group: this.$route.query.group,
|
||||||
userExamId: this.$route.query.userExamId,
|
userExamId: this.$route.query.userExamId,
|
||||||
trainingId: obj.trainingId,
|
trainingId: obj.trainingId,
|
||||||
examQuestionId: obj.id
|
examQuestionId: obj.id
|
||||||
}
|
};
|
||||||
this.$router.push({ path: '/display/exam', query: query });
|
this.$router.push({ path: '/display/exam', query: query });
|
||||||
this.$emit('refresh');
|
this.$emit('refresh');
|
||||||
launchFullscreen();
|
launchFullscreen();
|
||||||
},
|
},
|
||||||
overExam() {
|
overExam() {
|
||||||
this.$store.dispatch('exam/isOver').then(isOver => {
|
this.$store.dispatch('exam/isOver').then(isOver => {
|
||||||
if (isOver) {
|
if (isOver) {
|
||||||
this.submit();
|
this.submit();
|
||||||
} else {
|
} else {
|
||||||
this.$confirm('考试未完成,是否确认退出?', '提示', {
|
this.$confirm('考试未完成,是否确认退出?', '提示', {
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
center: true
|
center: true
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.submit();
|
this.submit();
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
submit() {
|
submit() {
|
||||||
exitFullscreen();
|
exitFullscreen();
|
||||||
this.$store.dispatch('exam/over').then(() => {
|
this.$store.dispatch('exam/over').then(() => {
|
||||||
this.$store.dispatch('trainingList/clearTrainingList');
|
this.$store.dispatch('trainingList/clearTrainingList');
|
||||||
this.$router.replace({ path: `/exam/result/${this.$route.query.userExamId}` });
|
this.$router.replace({ path: `/exam/result/${this.$route.query.userExamId}` });
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
shrink() {
|
shrink() {
|
||||||
let height = this.$refs.dragBody.offsetHeight + 40;
|
const height = this.$refs.dragBody.offsetHeight + 40;
|
||||||
let top = this.$refs.drapBox.style.top;
|
const top = this.$refs.drapBox.style.top;
|
||||||
if (this.isShrink) {
|
if (this.isShrink) {
|
||||||
this.$refs.drapBox.style.height = '40px';
|
this.$refs.drapBox.style.height = '40px';
|
||||||
this.$refs.drapBox.style.top = '';
|
this.$refs.drapBox.style.top = '';
|
||||||
this.isShrink = false;
|
this.isShrink = false;
|
||||||
} else {
|
} else {
|
||||||
this.$refs.drapBox.style.height = height + 'px';
|
this.$refs.drapBox.style.height = height + 'px';
|
||||||
this.$refs.drapBox.style.top = top;
|
this.$refs.drapBox.style.top = top;
|
||||||
this.isShrink = true;
|
this.isShrink = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -388,4 +393,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,129 +1,127 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="reminder-drag">
|
<div class="reminder-drag">
|
||||||
<div class="reminder-box" ref="drapBox">
|
<div ref="drapBox" class="reminder-box">
|
||||||
<div class="tip-title">
|
<div class="tip-title">
|
||||||
<i class="icon el-icon-minus" @click="shrink" v-show="isShrink"></i>
|
<i v-show="isShrink" class="icon el-icon-minus" @click="shrink" />
|
||||||
<i class="icon el-icon-plus" @click="shrink" v-show="!isShrink"></i>
|
<i v-show="!isShrink" class="icon el-icon-plus" @click="shrink" />
|
||||||
<p style="color: #fff;" v-if="isShrink">
|
<p v-if="isShrink" style="color: #fff;">
|
||||||
<span>{{ title }}</span>
|
<span>{{ title }}</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tip-body-box" ref="dragBody">
|
<div ref="dragBody" class="tip-body-box">
|
||||||
<div class="tip-body">
|
<div class="tip-body">
|
||||||
<div>
|
<div>
|
||||||
<get-action ref="getAction" :group="group"></get-action>
|
<get-action ref="getAction" :group="group" />
|
||||||
</div>
|
</div>
|
||||||
<el-button-group class="button-group">
|
<el-button-group class="button-group">
|
||||||
<el-button type="danger" @click="dumpScenesData">重置剧本</el-button>
|
<el-button type="danger" @click="dumpScenesData">重置剧本</el-button>
|
||||||
<el-button type="primary" @click="saveMaplocation">{{$t('scriptRecord.saveMaplocation')}}</el-button>
|
<el-button type="primary" @click="saveMaplocation">{{ $t('scriptRecord.saveMaplocation') }}</el-button>
|
||||||
<el-button type="primary" @click="saveScenesStage">{{$t('scriptRecord.saveBackground')}}</el-button>
|
<el-button type="primary" @click="saveScenesStage">{{ $t('scriptRecord.saveBackground') }}</el-button>
|
||||||
<el-button type="success" @click="saveScenesData">{{$t('scriptRecord.saveData')}}</el-button>
|
<el-button type="success" @click="saveScenesData">{{ $t('scriptRecord.saveData') }}</el-button>
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import GetAction from './scriptRecord/getAction';
|
import GetAction from './scriptRecord/getAction';
|
||||||
import { launchFullscreen, exitFullscreen } from '@/utils/screen';
|
import {saveScriptScenes, saveScriptData, dumpScriptData, updateMapLocation} from '@/api/simulation';
|
||||||
import {saveScriptScenes, saveScriptData, dumpScriptData,updateMapLocation} from '@/api/simulation';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TipScriptRecord',
|
name: 'TipScriptRecord',
|
||||||
props: {
|
components: {
|
||||||
group: {
|
GetAction
|
||||||
type: String,
|
},
|
||||||
required: true
|
props: {
|
||||||
},
|
group: {
|
||||||
},
|
type: String,
|
||||||
components: {
|
required: true
|
||||||
GetAction,
|
}
|
||||||
},
|
},
|
||||||
// this.$t('scriptRecord.scriptTitle')
|
// this.$t('scriptRecord.scriptTitle')
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
title:"剧本编制",
|
title: '剧本编制',
|
||||||
isShrink: false,
|
isShrink: false,
|
||||||
mapLocation:{},
|
mapLocation: {}
|
||||||
// isSaveStage: true,
|
// isSaveStage: true,
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'$store.state.map.mapViewLoadedCount': function (val) {
|
'$store.state.map.mapViewLoadedCount': function (val) {
|
||||||
Vue.prototype.$jlmap.setOptions(this.$store.state.scriptRecord.mapLocation);
|
Vue.prototype.$jlmap.setOptions(this.$store.state.scriptRecord.mapLocation);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
},
|
},
|
||||||
mounted(){
|
mounted() {
|
||||||
this.shrink();
|
this.shrink();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
jump(obj) {
|
jump(obj) {
|
||||||
},
|
},
|
||||||
shrink() {
|
shrink() {
|
||||||
let height = this.$refs.dragBody.offsetHeight + 40;
|
const height = this.$refs.dragBody.offsetHeight + 40;
|
||||||
let top = this.$refs.drapBox.style.top;
|
const top = this.$refs.drapBox.style.top;
|
||||||
if (this.isShrink) {
|
if (this.isShrink) {
|
||||||
this.$refs.drapBox.style.height = '40px';
|
this.$refs.drapBox.style.height = '40px';
|
||||||
this.$refs.drapBox.style.top = '';
|
this.$refs.drapBox.style.top = '';
|
||||||
this.isShrink = false;
|
this.isShrink = false;
|
||||||
} else {
|
} else {
|
||||||
this.$refs.drapBox.style.height = height + 'px';
|
this.$refs.drapBox.style.height = height + 'px';
|
||||||
this.$refs.drapBox.style.top = top;
|
this.$refs.drapBox.style.top = top;
|
||||||
this.isShrink = true;
|
this.isShrink = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// getActions(row){
|
// getActions(row){
|
||||||
// this.displayType="action";
|
// this.displayType="action";
|
||||||
// this.behaviorId=row.id;
|
// this.behaviorId=row.id;
|
||||||
// this.$store.dispatch('scriptRecord/updateBehaviorName',row.description);
|
// this.$store.dispatch('scriptRecord/updateBehaviorName',row.description);
|
||||||
// },
|
// },
|
||||||
saveScenesStage() {
|
saveScenesStage() {
|
||||||
saveScriptScenes(this.group).then(resp => {
|
saveScriptScenes(this.group).then(resp => {
|
||||||
// this.isSaveStage = false;
|
// this.isSaveStage = false;
|
||||||
this.$message.success('保存背景成功');
|
this.$message.success('保存背景成功');
|
||||||
}).catch(error => {
|
}).catch(() => {
|
||||||
this.$messageBox('保存背景失败!');
|
this.$messageBox('保存背景失败!');
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
saveScenesData() {
|
saveScenesData() {
|
||||||
saveScriptData(this.group).then(resp => {
|
saveScriptData(this.group).then(resp => {
|
||||||
this.$message.success('保存数据成功');
|
this.$message.success('保存数据成功');
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
this.$messageBox(`保存数据失败!: ${error.message}`);
|
this.$messageBox(`保存数据失败!: ${error.message}`);
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
dumpScenesData() {
|
dumpScenesData() {
|
||||||
let group=this.group;
|
const group=this.group;
|
||||||
this.$confirm('此操作将会清除已保存的编制数据, 是否继续?', '提示', {
|
this.$confirm('此操作将会清除已保存的编制数据, 是否继续?', '提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
dumpScriptData(group).then(resp => {
|
dumpScriptData(group).then(resp => {
|
||||||
// this.isSaveStage = true;
|
// this.isSaveStage = true;
|
||||||
this.$message.success('清除数据成功');
|
this.$message.success('清除数据成功');
|
||||||
}).catch(error => {
|
}).catch(() => {
|
||||||
this.$messageBox('清除数据失败!');
|
this.$messageBox('清除数据失败!');
|
||||||
})
|
});
|
||||||
}).catch(error => { })
|
}).catch(() => { });
|
||||||
},
|
},
|
||||||
saveMaplocation()
|
saveMaplocation() {
|
||||||
{
|
const data=Vue.prototype.$jlmap.$options;
|
||||||
let data=Vue.prototype.$jlmap.$options;
|
const group=this.$route.query.group;
|
||||||
let group=this.$route.query.group;
|
const dataZoom={scale: data.scaleRate, x: data.offsetX, y: data.offsetY};
|
||||||
let dataZoom={scale:data.scaleRate,x:data.offsetX,y:data.offsetY};
|
updateMapLocation(group, dataZoom).then(response=>{
|
||||||
updateMapLocation(group,dataZoom).then(response=>{
|
this.$message.success('更新定位成功');
|
||||||
this.$message.success('更新定位成功');
|
}).catch(error => {
|
||||||
}).catch(error => {
|
this.$messageBox(`更新定位失败: ${error.message}`);
|
||||||
this.$messageBox(`更新定位失败: ${error.message}`);
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -212,4 +210,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,149 +1,150 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="reminder-drag" v-drag>
|
<div v-drag class="reminder-drag">
|
||||||
<div class="reminder-box" ref="drapBox">
|
<div ref="drapBox" class="reminder-box">
|
||||||
<div class="tip-title">
|
<div class="tip-title">
|
||||||
<i class="icon el-icon-minus" @click="shrink" v-show="isShrink"></i>
|
<i v-show="isShrink" class="icon el-icon-minus" @click="shrink" />
|
||||||
<i class="icon el-icon-plus" @click="shrink" v-show="!isShrink"></i>
|
<i v-show="!isShrink" class="icon el-icon-plus" @click="shrink" />
|
||||||
<p style="color: #fff;" v-if="isShrink">
|
<p v-if="isShrink" style="color: #fff;">
|
||||||
<span>{{lessonName}}</span>
|
<span>{{ lessonName }}</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="tip-body-box" ref="dragBody">
|
<div ref="dragBody" class="tip-body-box">
|
||||||
<div class="tip-body">
|
<div class="tip-body">
|
||||||
<el-scrollbar wrapClass="scrollbar-wrapper">
|
<el-scrollbar wrap-class="scrollbar-wrapper">
|
||||||
<p class="list-item">
|
<p class="list-item">
|
||||||
<span class="list-label">实训名称:</span>
|
<span class="list-label">实训名称:</span>
|
||||||
<span class="list-elem">{{ courseModel.name }}</span>
|
<span class="list-elem">{{ courseModel.name }}</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="list-item">
|
<p class="list-item">
|
||||||
<span class="list-label">最佳用时:</span>
|
<span class="list-label">最佳用时:</span>
|
||||||
<span class="list-elem">{{ courseModel.minDuration }}秒 </span>
|
<span class="list-elem">{{ courseModel.minDuration }}秒 </span>
|
||||||
</p>
|
</p>
|
||||||
<p class="list-item">
|
<p class="list-item">
|
||||||
<span class="list-label">最大用时:</span>
|
<span class="list-label">最大用时:</span>
|
||||||
<span class="list-elem">{{ courseModel.maxDuration }}秒 </span>
|
<span class="list-elem">{{ courseModel.maxDuration }}秒 </span>
|
||||||
</p>
|
</p>
|
||||||
<p class="list-item">
|
<p class="list-item">
|
||||||
<span class="list-label"> 实训说明:</span>
|
<span class="list-label"> 实训说明:</span>
|
||||||
<span class="list-elem">{{ courseModel.remarks }}</span>
|
<span class="list-elem">{{ courseModel.remarks }}</span>
|
||||||
</p>
|
</p>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
|
||||||
<div class="drag-right"></div>
|
|
||||||
<div class="drag-left"></div>
|
|
||||||
<div class="drag-bottom"></div>
|
|
||||||
<div class="drag-top"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="drag-right" />
|
||||||
|
<div class="drag-left" />
|
||||||
|
<div class="drag-bottom" />
|
||||||
|
<div class="drag-top" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { timeFormat } from '@/utils/date';
|
import { getPublishLessonDetail } from '@/api/jmap/lesson';
|
||||||
import { getTrainingDetail, trainingNotify } from '@/api/jmap/training';
|
import { launchFullscreen } from '@/utils/screen';
|
||||||
import { getPublishLessonDetail } from '@/api/jmap/lesson';
|
|
||||||
import { launchFullscreen, exitFullscreen } from '@/utils/screen';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TipTrainingDetail',
|
name: 'TipTrainingDetail',
|
||||||
props: {
|
props: {
|
||||||
trainingObj: {
|
trainingObj: {
|
||||||
type: Object
|
type: Object,
|
||||||
}
|
default() {
|
||||||
},
|
return null;
|
||||||
data() {
|
}
|
||||||
return {
|
}
|
||||||
training: {
|
},
|
||||||
id: '',
|
data() {
|
||||||
name: '',
|
return {
|
||||||
remarks: ''
|
training: {
|
||||||
},
|
id: '',
|
||||||
isShrink: false,
|
name: '',
|
||||||
lessonName: '',
|
remarks: ''
|
||||||
courseModel: {
|
},
|
||||||
id: '',
|
isShrink: false,
|
||||||
name: '',
|
lessonName: '',
|
||||||
skinCode: '',
|
courseModel: {
|
||||||
maxDuration: '',
|
id: '',
|
||||||
minDuration: '',
|
name: '',
|
||||||
remarks: '',
|
skinCode: '',
|
||||||
updateTime: ''
|
maxDuration: '',
|
||||||
},
|
minDuration: '',
|
||||||
showSumbit: false,
|
remarks: '',
|
||||||
lessonIndex: 0,
|
updateTime: ''
|
||||||
}
|
},
|
||||||
},
|
showSumbit: false,
|
||||||
computed: {
|
lessonIndex: 0
|
||||||
...mapGetters('trainingList', [
|
};
|
||||||
'trainingList',
|
},
|
||||||
])
|
computed: {
|
||||||
},
|
...mapGetters('trainingList', [
|
||||||
watch: {
|
'trainingList'
|
||||||
'trainingObj': function (val) {
|
])
|
||||||
if (val) {
|
},
|
||||||
this.courseModel = {
|
watch: {
|
||||||
id: val.id,
|
'trainingObj': function (val) {
|
||||||
name: val.name,
|
if (val) {
|
||||||
skinCode: val.skinCode,
|
this.courseModel = {
|
||||||
maxDuration: val.maxDuration,
|
id: val.id,
|
||||||
minDuration: val.minDuration,
|
name: val.name,
|
||||||
remarks: val.remarks,
|
skinCode: val.skinCode,
|
||||||
updateTime: val.updateTime
|
maxDuration: val.maxDuration,
|
||||||
};
|
minDuration: val.minDuration,
|
||||||
}
|
remarks: val.remarks,
|
||||||
}
|
updateTime: val.updateTime
|
||||||
},
|
};
|
||||||
mounted() {
|
}
|
||||||
this.loadInitData(this.$route.query);
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
mounted() {
|
||||||
loadInitData(obj) {
|
this.loadInitData(this.$route.query);
|
||||||
this.showSumbit = false;
|
},
|
||||||
this.lessonName = '';
|
methods: {
|
||||||
this.courseModel = {
|
loadInitData(obj) {
|
||||||
id: '',
|
this.showSumbit = false;
|
||||||
name: '',
|
this.lessonName = '';
|
||||||
maxDuration: '',
|
this.courseModel = {
|
||||||
minDuration: '',
|
id: '',
|
||||||
remarks: '',
|
name: '',
|
||||||
updateTime: ''
|
maxDuration: '',
|
||||||
};
|
minDuration: '',
|
||||||
|
remarks: '',
|
||||||
|
updateTime: ''
|
||||||
|
};
|
||||||
|
|
||||||
if (parseInt(obj.lessonId)) {
|
if (parseInt(obj.lessonId)) {
|
||||||
getPublishLessonDetail({ id: obj.lessonId }).then(response => {
|
getPublishLessonDetail({ id: obj.lessonId }).then(response => {
|
||||||
this.lessonName = response.data.name;
|
this.lessonName = response.data.name;
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
that.$message.error("获取课程信息失败:" + error.message);
|
this.$message.error('获取课程信息失败:' + error.message);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.shrink();
|
this.shrink();
|
||||||
},
|
},
|
||||||
jump(obj) {
|
jump(obj) {
|
||||||
let query = {
|
const query = {
|
||||||
group: this.$route.query.group,
|
group: this.$route.query.group,
|
||||||
trainingId: this.$route.query.trainingId,
|
trainingId: this.$route.query.trainingId,
|
||||||
lessonId: this.$route.query.lessonId
|
lessonId: this.$route.query.lessonId
|
||||||
}
|
};
|
||||||
this.$router.push({ path: `/display/${this.$route.params.mode}`, query: query })
|
this.$router.push({ path: `/display/${this.$route.params.mode}`, query: query });
|
||||||
launchFullscreen();
|
launchFullscreen();
|
||||||
},
|
},
|
||||||
shrink() {
|
shrink() {
|
||||||
let height = this.$refs.dragBody.offsetHeight + 40;
|
const height = this.$refs.dragBody.offsetHeight + 40;
|
||||||
let top = this.$refs.drapBox.style.top;
|
const top = this.$refs.drapBox.style.top;
|
||||||
if (this.isShrink) {
|
if (this.isShrink) {
|
||||||
this.$refs.drapBox.style.height = '40px';
|
this.$refs.drapBox.style.height = '40px';
|
||||||
this.$refs.drapBox.style.top = '';
|
this.$refs.drapBox.style.top = '';
|
||||||
this.isShrink = false;
|
this.isShrink = false;
|
||||||
} else {
|
} else {
|
||||||
this.$refs.drapBox.style.height = height + 'px';
|
this.$refs.drapBox.style.height = height + 'px';
|
||||||
this.$refs.drapBox.style.top = top;
|
this.$refs.drapBox.style.top = top;
|
||||||
this.isShrink = true;
|
this.isShrink = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
@import "src/styles/mixin.scss";
|
@import "src/styles/mixin.scss";
|
||||||
@ -265,4 +266,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
Reference in New Issue
Block a user