# Conflicts:
#	src/utils/baseUrl.js
This commit is contained in:
zyy 2021-05-14 18:33:09 +08:00
commit 1dba8c2e9d
29 changed files with 3020 additions and 1884 deletions

View File

@ -30,8 +30,8 @@ export function Lesson3dPlayer(dom,lessonData,lessonIndex) {
let scope = this;
this.dom = dom;
//定义相机
//定义当前课程角色
let nowRole = "";
//定义场景(渲染容器)
scene = new THREE.Scene();
@ -53,7 +53,6 @@ export function Lesson3dPlayer(dom,lessonData,lessonIndex) {
animateManager.initAnimation(assetModelManager);
controlManager.init(animateManager.actions);
console.log(lessonData.lessonProgress[lessonIndex]);
if(lessonData.lessonProgress[lessonIndex].action.length>0){
controlManager.changeIndexEvent(lessonData.lessonProgress[lessonIndex].action,assetModelManager.lessonTriggerList);
}
@ -75,12 +74,27 @@ export function Lesson3dPlayer(dom,lessonData,lessonIndex) {
this.changeIndex = function(nowIndex){
lessonIndex = nowIndex;
controlManager.changeIndexEvent(lessonData.lessonProgress[lessonIndex].action);
if(lessonData.lessonProgress[lessonIndex].roleName == nowRole){
controlManager.initRoleMode(true);
}else{
controlManager.initRoleMode(false);
}
}
this.changeCameraPos = function(pos){
controlManager.updatePos(pos);
}
this.initNowRole = function(role){
nowRole = role;
if(lessonData.lessonProgress[lessonIndex].roleName == nowRole){
controlManager.initRoleMode(true);
}else{
controlManager.initRoleMode(false);
}
};
//循环渲染函数
function animate() {

View File

@ -13,12 +13,10 @@ export function AnimateManager() {
for(let k in assetModelManager.staticAsset){
if(assetModelManager.staticAsset[k].mesh.animations.length > 0){
console.log(assetModelManager.staticAsset[k].mesh.name);
let animations = assetModelManager.staticAsset[k].mesh.animations;
let mixer = new THREE.AnimationMixer( assetModelManager.staticAsset[k].mesh );
let actionName = assetModelManager.staticAsset[k].mesh.name;
console.log(actionName);
scope.actions[actionName] = {
status:"01",
action:mixer.clipAction( assetModelManager.staticAsset[k].mesh.animations[ 0 ])
@ -38,7 +36,6 @@ export function AnimateManager() {
for(let i=mixers.length-1;i>=0;i--){
if(mixers[i]._actions[0].isRunning()){
// console.log(scope.mixers[i]._actions[0].isRunning());
mixers[i].update( mixerUpdateDelta );
}
}

View File

@ -198,7 +198,6 @@ export function AssetModelManager(scene) {
function fbxpromise(asset){
return new Promise(function(resolve, reject){
var loader = new THREE.FBXLoader();
console.log(asset);
if(asset.assetType == "static"){
loader.load( asset.url, function ( object ) {
object.name = asset.modelId;
@ -210,7 +209,6 @@ export function AssetModelManager(scene) {
loader.load( BASE_ASSET_API+asset.url, function ( object ) {
asset.mesh = object;
if(asset.assetType == "default"){
console.log(object);
// scene.add(object);
}else if(asset.assetType == 'loadModel'){

View File

@ -14,6 +14,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
this.nowCamera = null;
this.eventHitMode = false;
let roleMode = false;
let eventBoxs = [];
let raycasterBoxs = [];
let actionList = [];
@ -110,6 +111,9 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
}
);
this.initRoleMode = function(rMode){
roleMode = rMode;
};
const worldOctree = new Octree();
@ -138,6 +142,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
const keyStates = {};
let clock = new THREE.Clock();
this.updateOrbitControl = function(){
oribitControl.update();
};
@ -151,7 +156,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
updateSpheres( deltaTime );
if(scope.eventHitMode == true){
if(scope.eventHitMode == true && roleMode){
if(eventBoxs.length>0){
attachBox.position.copy(fpsCamera.position);
for(let i=0;i<eventBoxs.length;i++){
@ -231,7 +236,7 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
fpsMouseStatus = true;
// document.body.requestPointerLock();
if(raycasterBoxs.length>0){
if(raycasterBoxs.length>0 && roleMode){
var mouse = new THREE.Vector2();
var raycaster = new THREE.Raycaster();
@ -479,7 +484,6 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
if(actions[i].actionMode == "play"){
for(let j=0;j<eventTrigger.length;j++){
if(eventTrigger[j].label == actions[i].actionModel){
console.log(actionList);
if(actionList[eventTrigger[j].actionName].status == "01"){
actionList[eventTrigger[j].actionName].status = "02";
@ -494,8 +498,6 @@ export function ControlManager(dom,scene,lessonData,lessonIndex) {
for(let j=0;j<eventTrigger.length;j++){
if(eventTrigger[j].label == actions[i].actionModel){
let eventTestBox = new THREE.Box3(new THREE.Vector3(), new THREE.Vector3());
eventTestBox.setFromObject(eventTrigger[j]);

View File

@ -9,6 +9,10 @@ export function LessonData() {
this.lessonData = {
//资源列表
assetList:[],
setup:{
examMode:"",
checkedRole:"",
},
//场景交互物体列表
modelList:[],
//课程组件启用状态
@ -61,6 +65,8 @@ export function LessonData() {
tittle:"标题",
picurl:"url",
text:"内容",
explainPaneType:"null",
nextNode:"",
},
action:[],
};
@ -141,6 +147,8 @@ export function LessonData() {
tittle:"标题",
picurl:"url",
text:"内容",
explainPaneType:"null",
nextNode:"",
},
action:[

View File

@ -500,7 +500,6 @@ class Jlmap {
oDevice['cutOff'] = sectionA.cutOff;
}
}
this.$painter.update(oDevice);
} else if (elem.deviceType == 'SECTION') {
const oDevice = this.mapDevice[code];

View File

@ -6,6 +6,7 @@ import transitionDeviceStatus from './constant/stateTransition';
import shapefactory from './shape/factory';
import TransformHandle from './transformHandle';
import TransformHandleScreen from './transformHandleScreen';
import deviceRender from './constant/deviceRender';
class Painter {
constructor(jmap) {
@ -136,6 +137,8 @@ class Painter {
const overlapTrainList = this.checkTrainOverlap(device);
overlapTrainList.forEach((item, index) => {
const trainDevice = this.$jmap.getDeviceByCode(item);
trainDevice._type = deviceRender['Train']._type;
trainDevice.zlevel = deviceRender['Train'].zlevel;
trainDevice.overLapIndex = index;
trainDevice.instance && this.mapInstanceLevel[deviceType.Train].remove(trainDevice.instance);
this.add(trainDevice);
@ -223,7 +226,7 @@ class Painter {
getShapeTipPoint(instance, opts) {
if (instance) {
var point = instance.getShapeTipPoint(opts);
if (point) {
if (point) {
// 矩阵变换
var transPoint = instance.transformCoordToGlobal(point.x, point.y);
return {

View File

@ -60,7 +60,6 @@ export default class Train extends Group {
this._computed();
const model = this.model;
const style = this.style;
if (this.point) {
this.trainB = new TrainBody({
zlevel: this.zlevel,

View File

@ -76,9 +76,9 @@
<div class="nav-border" style="padding: 5px;">
<el-row style="height: 25px;">
<div style="display: flex;justify-content: space-between">
<el-button size="mini" plain>车次号修改</el-button>
<el-button size="mini" plain :disabled="true">车次号删除</el-button>
<el-button size="mini" plain :disabled="true">车次号创建</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='update'" @click="handleTrainOperate('update')">车次号修改</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='delete'" @click="handleTrainOperate('delete')">车次号删除</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='create'" @click="handleTrainOperate('create')">车次号创建</el-button>
<el-button size="mini" plain :disabled="true">车次号步进</el-button>
</div>
</el-row>
@ -100,22 +100,29 @@
<div class="nav-border" style="padding: 5px;">
<el-row style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">车次号</el-col>
<el-col :span="17"><el-input v-model="formModelTripNum" size="mini" style="height: 20px;" :disabled="true" /></el-col>
<el-col :span="17">
<el-input v-if="trainOperateType!=='create'" v-model="formModelTripNum" size="mini" style="height: 20px;" :disabled="true" />
<el-input v-if="trainOperateType==='create'" v-model="formModelNewTrip" size="mini" style="height: 20px;" />
</el-col>
</el-row>
<el-row style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">轨道号</el-col>
<el-col :span="17"><el-input v-model="formModelSectionName" size="mini" style="height: 20px;" :disabled="true" /></el-col>
</el-row>
<el-row style="display: flex;align-items: center;">
<el-row v-if="trainOperateType ==='update'" style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">新车次号</el-col>
<el-col :span="17"><el-input v-model="formModelNewTrip" size="mini" style="height: 20px;" /></el-col>
</el-row>
<el-row v-if="trainOperateType ==='create'" style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">新车组号</el-col>
<el-col :span="17"><el-input v-model="formModelNewGroup" size="mini" style="height: 20px;" /></el-col>
</el-row>
</div>
</el-col>
<el-col v-if="trainOperationShow" :span="6" style="padding: 1px;">
<div class="nav-border">
<div style="display: flex;justify-content: space-around;width: 100%;height: 45px;align-items: center;border-bottom: 2px solid #FBFBFA;">
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!trainModel.groupNumber" @click="trainCommit">执行</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!trainCommitDisabled" @click="trainCommit">执行</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain @click="doClose">退出</el-button>
</div>
</div>
@ -200,7 +207,10 @@ export default {
formModelTripNum: '',
formModelSectionName: '',
formModelNewTrip: '',
speedShowCon: false
formModelNewGroup: '',
speedShowCon: false,
trainOperateType: '',
formModelNewSection: ''
};
},
computed: {
@ -225,6 +235,11 @@ export default {
},
speedShow() {
return (this.cmdType == CMD.Section.CMD_SECTION_SET_LIMIT_SPEED || this.cmdType == CMD.Switch.CMD_SWITCH_SET_LIMIT_SPEED) && this.speedShowCon;
},
trainCommitDisabled() {
return (this.trainOperateType === 'create' && this.formModelNewTrip && this.formModelNewTrip.length === 7 && this.formModelNewGroup && this.formModelNewGroup.length === 6) ||
(this.trainOperateType === 'update' && this.formModelNewTrip && this.formModelNewTrip.length === 7) || (this.trainOperateType === 'delete') ||
(this.trainOperateType === 'move' && this.formModelNewSection);
}
},
watch: {
@ -363,6 +378,9 @@ export default {
}
}
},
handleTrainOperate(type) {
this.trainOperateType = type;
},
getStationControl(selected) {
let control;
if (selected._type == 'StationStand') {
@ -641,15 +659,7 @@ export default {
this.param.routeCodeList = routeCodeList;
}
if (this.cmdType == CMD.Station.CMD_STATION_SET_CI_AUTO_TRIGGER || this.cmdType == CMD.Station.CMD_STATION_CANCEL_CI_AUTO_TRIGGER) {
if (this.selectedObj.centralized) {
this.param = { stationCode: this.selectedObj.code };
} else {
this.stationList.forEach(station => {
if (station.centralized && station.chargeStationCodeList.includes(this.selectedObj.code)) {
this.param = { stationCode: station.code };
}
});
}
this.param = { stationCode: this.selectedObj.code };
}
if (this.cmdType == CMD.Section.CMD_SECTION_SET_LIMIT_SPEED || this.cmdType == CMD.Switch.CMD_SWITCH_SET_LIMIT_SPEED) {
this.param.speedLimitValue = this.speedLimitValue;
@ -743,21 +753,16 @@ export default {
this.clearAllMenuShow();
},
handleTrainParam() {
if (this.selectedObj.type === '01') {
this.formModelSectionName = this.selectedObj.name;
this.$store.state.map.activeTrainList.forEach(trainCode => {
const trainModel = this.$store.getters['map/getDeviceByCode'](trainCode);
if (trainModel && trainModel.physicalCode === this.selectedObj.code) {
this.formModelTripNum = trainModel.serviceNumber + trainModel.destinationCode + (trainModel.tripNumber.substring(1));
this.trainModel = trainModel;
this.formModelNewTrip = '';
}
});
}
// this.trainModel = this.selectedObj; physicalCode
// this.formModelTripNum = this.trainModel.destinationCode + this.trainModel.serviceNumber + this.trainModel.tripNumber;
// this.formModelSectionName = this.trainModel.sectionModel.name;
// this.formModelNewTrip = '';
this.formModelSectionName = this.selectedObj.name;
this.trainOperateType = '';
this.$store.state.map.activeTrainList.forEach(trainCode => {
const trainModel = this.$store.getters['map/getDeviceByCode'](trainCode);
if (trainModel && trainModel.sectionCode === this.selectedObj.code) {
this.formModelTripNum = trainModel.destinationCode + (trainModel.serviceNumber.substring(1)) + (trainModel.tripNumber.substring(1));
this.trainModel = trainModel;
this.formModelNewTrip = '';
}
});
},
setSpeedLimitValue(val) {
this.speedLimitValue = val;
@ -768,34 +773,53 @@ export default {
this.formModelTripNum = '';
this.formModelSectionName = '';
this.formModelNewTrip = '';
this.formModelNewGroup = '';
this.trainOperateType = '';
this.trainOperationShow = flag;
}
},
trainCommit() {
if (this.formModelNewTrip && this.formModelNewTrip.length === 9) {
const params = {
groupNumber: this.trainModel.groupNumber,
tripNumber: this.formModelNewTrip.slice(6, 9),
serviceNumber: this.formModelNewTrip.slice(3, 6)
};
const step = {
over: true,
cmdType: CMD.TrainWindow.CMD_TRAIN_SET_PLAN,
operation: OperationEvent.Train.setPlanTrainId.menu.operation,
param: params
};
this.$store.dispatch('training/nextNew', step).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.changeShowMode(true);
}
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
} else {
this.$refs.noticeInfo.doShow('请输入正确的车次号');
const params = {};
const step = {
over: true
};
if (this.trainOperateType === 'update') {
params.groupNumber = this.trainModel.groupNumber;
params.serviceNumber = '0' + this.formModelNewTrip.slice(3, 5);
params.tripNumber = '0' + this.formModelNewTrip.slice(5, 7);
step.cmdType = CMD.TrainWindow.CMD_TRAIN_SET_PLAN;
step.operation = OperationEvent.Train.setPlanTrainId.menu.operation;
step.param = params;
} else if (this.trainOperateType === 'create') {
params.sectionCode = this.selectedObj.code;
params.groupNumber = this.formModelNewGroup;
params.dn = this.formModelNewTrip.slice(0, 3);
params.sn = '0' + this.formModelNewTrip.slice(3, 5);
params.tn = '0' + this.formModelNewTrip.slice(5, 7);
step.cmdType = CMD.TrainWindow.CMD_TRAIN_ADD_TRAIN_TRACE;
step.operation = OperationEvent.Train.addTrainId.menu.operation;
step.param = params;
} else if (this.trainOperateType === 'delete') {
params.groupNumber = this.trainModel.groupNumber;
step.cmdType = CMD.TrainWindow.CMD_TRAIN_REMOVE_TRAIN_TRACE;
step.operation = OperationEvent.Train.delTrainId.menu.operation;
step.param = params;
} else if (this.trainOperateType === 'move') {
params.groupNumber = this.trainModel.groupNumber;
params.sectionCode = this.formModelNewSection;
step.cmdType = CMD.TrainWindow.CMD_TRAIN_MOVE_TRAIN_TRACE;
step.operation = OperationEvent.Train.moveTrainId.menu.operation;
step.param = params;
}
this.$store.dispatch('training/nextNew', step).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.changeShowMode(true);
}
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
initMenus() {
this.basicParamList = this.$store.state.training.prdType === '01' ? [

View File

@ -0,0 +1,255 @@
<template>
<div
ref="jlmapCanvas"
class="jlmap-canvas"
style="width: 100%;height:960px;"
>
<div :id="canvasId" class="display_canvas" />
</div>
</template>
<script>
import Jlmap from '@/jmapNew/map';
import { parser } from '@/jmapNew/utils/parser';
import { deepAssign } from '@/utils/index';
import deviceType from '@/jmapNew/constant/deviceType';
import { mapGetters } from 'vuex';
export default {
name: 'JLocalmapVisual',
props: {
},
data() {
return {
loading: true,
offset: {
x: 0,
y: 0
},
map: null,
mapDevice: {},
routeData: [],
mapData: null,
autoReentryData: [],
width: 1920,
height: 960
};
},
computed: {
canvasId() {
return ['map', Math.random().toFixed(5) * 100000].join('_');
},
...mapGetters('map', [
'bigScreenConfig'
])
},
watch: {
'$store.state.config.canvasSizeCount': function (val) {
this.resetSize();
},
'$store.state.map.mapViewLoadedCount':function() {
this.$store.dispatch('map/setTrainWindowShow', false);
this.map.off('zoom');
this.handleUpdateScreen();
}
},
created() {
this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map));
},
mounted() {
this.init();
},
beforeDestroy() {
if (this.map) {
this.map.dispose();
this.map = null;
}
},
methods: {
init() {
document.getElementById(this.canvasId).oncontextmenu = function (e) {
return false;
};
if (!this.map) {
this.map = new Jlmap({
dom: document.getElementById(this.canvasId),
config: {
renderer: 'canvas',
width: this.width,
height: this.height
},
options: {
scaleRate: 1,
offsetX: 0,
offsetY: 0,
zoomOnMouseWheel: false
},
showConfig: {
prdType: '02',
previewOrMapDraw: true,
showMode: '02'
},
methods: {}
});
}
window.document.oncontextmenu = function () {
return false;
};
if (this.mapData.skinVO) {
this.mapDevice = parser(this.mapData, this.mapData.skinVO.code, this.map.getShowConfig());
}
},
loadData() {
try {
this.setMap(this.mapData, this.mapDevice);
} catch (error) {
console.log('[ERROR] ', error);
}
},
//
setMap(data, mapDevice) {
if (data.skinVO) {
this.routeData = this.$store.state.map.routeData;
this.autoReentryData = this.$store.state.map.autoReentryData;
this.map.setMap(data, mapDevice, {
routeData: this.routeData,
autoReentryData: this.autoReentryData
});
setTimeout(() => {
this.handleUpdateScreen();
}, 2000);
} else {
this.mapDevice = {};
this.map.clear();
}
},
handleUpdateScreen() {
this.maskOpen = false;
console.log(this.bigScreenConfig, '--0000');
if (this.bigScreenConfig.bigScreenSplitConfig && this.bigScreenConfig.bigScreenSplitConfig.length) {
const offsetList = this.bigScreenConfig.offsetList;
const width = this.bigScreenConfig.width;
const height = this.bigScreenConfig.height;
if (this.widthLeft) {
const size = {
width: (this.$store.state.app.width - (this.widthLeft || 450) - 2) * width,
height: this.height * height,
list: this.bigScreenConfig.bigScreenSplitConfig.map(ele => ele.position),
offsetList: offsetList
};
console.log(size, '=----1');
this.map.setUpdateScreen(size);
} else {
const size = {
width: (this.$store.state.app.width - 2) * width,
height: this.$store.state.app.height * height,
list: this.bigScreenConfig.bigScreenSplitConfig.map(ele => ele.position),
offsetList: offsetList
};
console.log(size, '=----');
this.map.setUpdateScreen(size);
}
} else {
this.maskOpen = true;
// this.$messageBox('线, ');
}
},
// jlmap
resetSize() {
this.$nextTick(() => {
this.map && this.map.resize({ width: 1920, height: 960 });
});
},
//
setLevelVisible(levels) {
this.map && this.map.setLevelVisible(levels);
},
setMapFree() {
const list = [];
Object.values(this.mapDevice).forEach((elem) => {
const code = elem.code;
const type = elem._type;
//
type != deviceType.Train &&
list.push({ code, _type: type, _free: true });
});
this.map.update(list, false);
},
//
setCenterWithOffset(code, dx, y) {
this.map.setCenterWithOffset(code, dx, y - this.height / 2);
},
//
updateMapDevice(elems) {
const list = [];
elems.forEach((elem) => {
if (elem.code) {
list.push(deepAssign(this.mapDevice[elem.code], elem));
}
});
this.map.update(list, false);
},
getDeviceByCode(code) {
return this.mapDevice[code];
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.mask {
opacity: 0;
background: #000;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 9;
}
.jlmap-canvas {
position: relative;
-moz-user-select: none;
-o-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
background: #000;
float: left;
}
.title {
text-align: right;
font-size: 14px;
color: #606266;
line-height: 32px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-weight: 700;
}
.zoom-view {
position: absolute;
bottom: 0;
background: #fff;
padding-top: 5px;
height: 42px;
border-bottom: 1px #f3f3f3 solid;
border-right: 1px #f3f3f3 solid;
}
/deep/ {
.el-form.el-form--inline {
height: 28px !important;
line-height: 28px !important;
}
.el-loading-mask {
background-color: rgba(0, 0, 0, 0.3);
}
}
</style>

View File

@ -0,0 +1,92 @@
<template>
<el-dialog
v-dialogDrag
class="haerbin-01__systerm stand-stop-time"
:title="title"
:visible.sync="show"
:fullscreen="true"
:before-close="doClose"
:z-index="2000"
>
<map-visual ref="map" style="width: 100%;height: 100%;" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import MapVisual from './mapVisual';
export default {
name: 'TrainMove',
components: {
MapVisual
},
data() {
return {
trainNoList: [],
addModel: {
tripNumber: '',
trainSource: '',
stationStandSource: '',
trainGoal: '',
stationStandGoal: ''
},
rules: {
tripNumber: [
{ required: true, message: this.$t('rules.selectGroupNumber'), trigger: 'blur' }
],
trainSource: [
{ required: true, message: this.$t('rules.enterTheTripNumber'), trigger: 'blur' }
],
stationStandSource: [
{ required: true, message: this.$t('rules.selectStation'), trigger: 'change' }
],
trainGoal: [
{ required: true, message: this.$t('rules.enterTheTripNumber'), trigger: 'blur' }
],
stationStandGoal: [
{ required: true, message: this.$t('rules.selectStation'), trigger: 'change' }
]
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
return '背投系统';
}
},
methods: {
doShow(operate, selected) {
this.dialogShow = true;
this.$nextTick(function () {
this.$refs.map.loadData(this.mapData);
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
}
}
};
</script>
<style scoped>
.haerbin-01__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -62,8 +62,8 @@
</el-col>
</el-row>
<el-row v-else-if="$store.state.training.prdType === '02'" style="padding: 3px;">
<el-col :span="16">
<div style="width: calc(100% - 10px);border: 2px solid #DDD9CA;border-radius: 1px;">
<el-col :span="20">
<div style="width: calc(100% - 10px);border: 2px solid #DDD9CA;border-radius: 1px;height: 132px;">
<el-row style="padding: 4px;">
<div class="tip-content-box">
<div v-if="tipContent[0]">{{ `${tipContent[0].level}` }}</div>
@ -81,53 +81,86 @@
<div v-if="tipContent[2]">{{ `${tipContent[2].confirm ? '确认': '未确认'}` }}</div>
</div>
</el-row>
<el-row class="button-row">
<div class="div-simulate-button" @click="undeveloped">系统</div>
<div class="div-simulate-button" @click="undeveloped">联锁</div>
<div class="div-simulate-button" @click="trainControlShow">列监</div>
<div class="div-simulate-button" @click="undeveloped">站控</div>
<div class="div-simulate-button" @click="undeveloped">车场</div>
<div class="div-simulate-button" @click="undeveloped">编表</div>
<div class="div-simulate-button" @click="undeveloped">车辆段</div>
</el-row>
<el-row class="button-row" style="margin: 10px 0;">
<div class="div-simulate-button" @click="undeveloped">轨道</div>
<div class="div-simulate-button" @click="undeveloped">调度</div>
<div class="div-simulate-button" @click="undeveloped">录放</div>
<div class="div-simulate-button" @click="undeveloped">管理</div>
<div class="div-simulate-button" @click="undeveloped">列车信息</div>
<div class="div-simulate-button" @click="undeveloped">职权</div>
<div style="width: 80px;" />
</el-row>
<div style="padding: 5px;height:20px;line-height: 20px;border-top: 2px solid #DDD9CA;display: flex;justify-content: space-between;">
<!--<div class="div-simulate-button" @click="undeveloped">系统</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">联锁</div>-->
<!--<div class="div-simulate-button" @click="trainControlShow">列监</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">站控</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">车场</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">编表</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">车辆段</div>-->
<div>
<div class="div-simulate-button" style="width: 40px;" @click="rpsClick">背投</div>
<div class="div-simulate-button" style="width: 40px;">车场</div>
<div class="div-simulate-button" style="width: 40px;">轨道</div>
<div class="div-simulate-button" style="width: 40px;">系统</div>
<div class="div-simulate-button" style="width: 40px;">列车</div>
</div>
<div>
<div class="div-simulate-button" style="width: 40px;">联锁</div>
<div class="div-simulate-button" style="width: 40px;">列监</div>
<div class="div-simulate-button" style="width: 40px;">运图</div>
<div class="div-simulate-button" style="width: 55px;">时刻表</div>
<div class="div-simulate-button" style="width: 40px;">编表</div>
<div class="div-simulate-button" style="width: 40px;">调度</div>
<div class="div-simulate-button" style="width: 40px;">站控</div>
<div class="div-simulate-button" style="width: 40px;">计划</div>
</div>
<div>
<div class="div-simulate-button" style="width: 40px;">SDM</div>
</div>
<div>
<div class="div-simulate-button" style="width: 55px;">管理员</div>
<div class="div-simulate-button" style="width: 40px;">职权</div>
</div>
<div>
<div class="div-simulate-button" style="width: 40px;">拷屏</div>
<div class="div-simulate-button" style="width: 40px;">录放</div>
<div class="div-simulate-button" style="width: 40px;">布局</div>
</div>
</div>
<!--<el-row class="button-row" style="margin: 10px 0;">-->
<!--<div class="div-simulate-button" @click="undeveloped">轨道</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">调度</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">录放</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">管理</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">列车信息</div>-->
<!--<div class="div-simulate-button" @click="undeveloped">职权</div>-->
<!--<div style="width: 80px;" />-->
<!--</el-row>-->
</div>
</el-col>
<el-col :span="4">
<el-col :span="2">
<div style="width: calc(100% - 10px);border: 2px solid #DDD9CA;border-radius: 1px;">
<el-row style="height: 68px;display: flex; justify-content: space-between;align-items: center;">
<div style="width: 40px;" class="div-simulate-button" :style="{background:isNoRecoverLevelA || isNoConfirmLevelA?'#F00':'#DDD' }" :class="{'headerBox' :isNoConfirmLevelA}" @click="showHimAlarm('A')">A</div>
<div style="width: 40px;" class="div-simulate-button" :style="{background:isNoRecoverLevelB || isNoConfirmLevelB?'#F00':'#DDD' }" :class="{'headerBox' :isNoConfirmLevelB}" @click="showHimAlarm('B')">B</div>
<div style="width: 40px;" class="div-simulate-button" :style="{background:isNoRecoverLevelC?'#F00':'#DDD' }" @click="showHimAlarm('C')">C</div>
<img :src="voiceIcon" style="width: 40px;height: 40px;" @click="controlAudio(false)">
</el-row>
<el-row class="button-row">
<div style="width: 80px;" class="div-simulate-button" @click="showHimAlarm">报警</div>
<div style="width: 80px;" class="div-simulate-button" @click="undeveloped">运图</div>
<el-row style="margin-top: 20px;margin-bottom: 18px;">
<el-col :span="16">
<el-row class="button-row">
<div style="width: 25px;" class="div-simulate-button" :style="{background:isNoRecoverLevelA || isNoConfirmLevelA?'#F00':'#DDD' }" :class="{'headerBox' :isNoConfirmLevelA}" @click="showHimAlarm('A')">A</div>
<div style="width: 25px;" class="div-simulate-button" :style="{background:isNoRecoverLevelB || isNoConfirmLevelB?'#F00':'#DDD' }" :class="{'headerBox' :isNoConfirmLevelB}" @click="showHimAlarm('B')">B</div>
<div style="width: 25px;" class="div-simulate-button" :style="{background:isNoRecoverLevelC?'#F00':'#DDD' }" @click="showHimAlarm('C')">C</div>
<!--<img :src="voiceIcon" style="width: 40px;height: 40px;" @click="controlAudio(false)">-->
</el-row>
<el-row class="button-row" style="margin-top: 20px;">
<div style="width: 40px;" class="div-simulate-button" @click="showHimAlarm">报警</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">运图</div>
</el-row>
</el-col>
<el-col :span="8">
<div style="width: 40px;height: 60px;line-height: 60px;" class="div-simulate-button" @click="controlAudio(false)">静音</div>
</el-col>
</el-row>
<el-row class="button-row" style="margin: 10px 0;">
<div style="width: 80px;" class="div-simulate-button" @click="undeveloped">报表</div>
<div style="width: 80px;" class="div-simulate-button" @click="undeveloped">时刻表</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">档案</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">归档</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">统计</div>
</el-row>
</div>
</el-col>
<el-col :span="4" style="border: 2px solid #DDD9CA;border-radius: 1px;">
<el-row style="height: 68px;" />
<el-row class="button-row">
<div style="width: 80px;" class="div-simulate-button" @click="undeveloped">考评</div>
<div style="width: 80px;" class="div-simulate-button" @click="showLogDetail">日志</div>
</el-row>
<el-col :span="2" style="border: 2px solid #DDD9CA;border-radius: 1px;">
<el-row style="height: 88px;" />
<el-row class="button-row" style="margin: 10px 0;">
<div style="width: 80px;" class="div-simulate-button" @click="undeveloped">锁屏</div>
<div style="width: 80px;" class="div-simulate-button" @click="undeveloped">退出</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">锁屏</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">退出</div>
</el-row>
</el-col>
</el-row>
@ -136,6 +169,7 @@
<alarm-table-hmi ref="alarmTableHmi" />
<train-control ref="trainControl" :offset="10" />
<log-detail ref="logDetail" />
<rps-dialog ref="rpsDialog" />
<audio id="buzzer" controls loop="loop" style="width: 0;height: 0">
<source :src="buzzerAudio" type="audio/mpeg">
</audio>
@ -151,6 +185,7 @@ import BuzzerAudio from '@/assets/buzzer.mp3';
import AlarmTableHmi from './menuDialog/alarmTableHmi';
import AlarmTableLow from './menuDialog/alarmTableLow';
import TrainControl from './dialog/trainControl';
import RpsDialog from './dialog/rps';
import LogDetail from './menuDialog/logDetail';
export default {
@ -159,7 +194,8 @@ export default {
AlarmTableLow,
AlarmTableHmi,
TrainControl,
LogDetail
LogDetail,
RpsDialog
},
props: {
selected: {
@ -443,6 +479,9 @@ export default {
trainControlShow() {
this.$refs.trainControl.doShow();
},
rpsClick() {
this.$refs.rpsDialog.doShow();
},
controlAudio(val) {
const audio = document.getElementById('buzzer');
this.sound = val;
@ -665,9 +704,9 @@ export default {
width: 80px;
}
.tip-content-box{
height: 20px;
height: 30px;
width: 100%;
line-height: 20px;
line-height: 30px;
background: #001528;
color: #C20F29;
font-size: 14px;

View File

@ -3,7 +3,7 @@
<div v-if="isLocal" id="menuButton">
<div class="__menuButton">
<el-row>
<el-col v-if="!trainOperationShow" :span="11">
<el-col v-if="operationType === 'cmd'" :span="11">
<div v-if="secondConfirm" class="nav-border">
<el-row>
<div class="nav-border-top">
@ -42,27 +42,27 @@
</el-row>
</div>
</el-col>
<el-col v-if="!trainOperationShow" :span="10">
<el-col v-if="operationType === 'cmd'" :span="10">
<div class="nav-border">
<div class="nav-border-top">
<el-button :id="commandId" class="fl" :class="{'disabled': !isLogin||canCommand||secondConfirm}" style="line-height: 18px; margin-top: 4px;" plain :disabled="!isLogin||canCommand||secondConfirm" @click="interceptLogin(command)()">执行</el-button>
<el-button class="fr" style="line-height: 18px; margin-top: 4px;" plain :class="{'disabled': !isLogin}" :disabled="!isLogin" @click="interceptLogin(cancle)()">取消</el-button>
</div>
<div class="el-print">
<div v-for="(el,i) in tempData" :key="i" class="selected-row" :class="{'active' : route&&el.code===route.code}" @click="interceptLogin(selectRouteParam)(el.code)">
<div v-for="(el,i) in tempData" :key="i" class="selected-row" :class="{'active' : route&&el.code===route.code || overlap&&el.code===overlap.code}" @click="interceptLogin(selectRouteParam)(el.code)">
{{ el.commandTip || el.name }}
</div>
</div>
</div>
</el-col>
<el-col v-if="trainOperationShow" :span="10" style="padding: 1px;">
<el-col v-if="operationType === 'train'" :span="10" style="padding: 1px;">
<div class="nav-border" style="padding: 5px;">
<el-row style="height: 25px;">
<div style="display: flex;justify-content: space-between">
<el-button size="mini" plain>车次号修改</el-button>
<el-button size="mini" plain :disabled="true">车次号删除</el-button>
<el-button size="mini" plain :disabled="true">车次号创建</el-button>
<el-button size="mini" plain :disabled="true">车次号步进</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='update'" @click="handleTrainOperate('update')">车次号修改</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='delete'" @click="handleTrainOperate('delete')">车次号删除</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='create'" @click="handleTrainOperate('create')">车次号创建</el-button>
<el-button size="mini" plain :disabled="trainOperateType==='move'" @click="handleTrainOperate('move')">车次号步进</el-button>
</div>
</el-row>
<el-row style="height: 25px;line-height: 25px;border-top: 2px solid #7E8076;border-left: 2px solid #6A6B64;border-right: 2px solid #FBFBFA;">
@ -79,35 +79,85 @@
</el-row>
</div>
</el-col>
<el-col v-if="trainOperationShow" :span="5" style="padding: 1px;">
<el-col v-if="operationType === 'train'" :span="5" style="padding: 1px;">
<div class="nav-border" style="padding: 5px;">
<el-row style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">车次号</el-col>
<el-col :span="17"><el-input v-model="formModelTripNum" size="mini" style="height: 20px;" :disabled="true" /></el-col>
<el-col :span="17">
<el-input v-if="trainOperateType!=='create'" v-model="formModelTripNum" size="mini" style="height: 20px;" :disabled="true" />
<el-input v-if="trainOperateType==='create'" v-model="formModelNewTrip" size="mini" style="height: 20px;" />
</el-col>
</el-row>
<el-row style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">轨道号</el-col>
<el-col :span="17"><el-input v-model="formModelSectionName" size="mini" style="height: 20px;" :disabled="true" /></el-col>
</el-row>
<el-row style="display: flex;align-items: center;">
<el-row v-if="trainOperateType ==='update'" style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">新车次号</el-col>
<el-col :span="17"><el-input v-model="formModelNewTrip" size="mini" style="height: 20px;" /></el-col>
</el-row>
<el-row v-if="trainOperateType ==='create'" style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">新车组号</el-col>
<el-col :span="17"><el-input v-model="formModelNewGroup" size="mini" style="height: 20px;" /></el-col>
</el-row>
<el-row v-if="trainOperateType === 'move'" style="display: flex;align-items: center;">
<el-col :span="7" style="height: 25px;line-height: 25px;">新轨道号</el-col>
<el-col :span="17">
<el-select v-model="formModelNewSection" filterable size="mini" style="height: 20px;" placeholder="请选择">
<el-option
v-for="item in sectionList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-col>
</el-row>
</div>
</el-col>
<el-col v-if="trainOperationShow" :span="6" style="padding: 1px;">
<el-col v-if="operationType === 'train'" :span="6" style="padding: 1px;">
<div class="nav-border">
<div style="display: flex;justify-content: space-around;width: 100%;height: 45px;align-items: center;border-bottom: 2px solid #FBFBFA;">
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!trainModel.groupNumber" @click="trainCommit"> </el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!trainCommitDisabled" @click="trainCommit"> </el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain @click="doClose"> </el-button>
</div>
</div>
</el-col>
<el-col v-if="operationType === 'run'" :span="15" style="padding: 1px;">
<div class="nav-border" style="font-size: 14px;">
<div style="display: flex;justify-content: space-between;">
<div style="border: 1px solid #c0c0c0;margin: 10px;padding: 0 10px 5px 10px;">
<div style="position: relative;top: -8px;left: -5px;background: #fff;width: 81px;">所有时刻表</div>
<el-select v-model="newRunPlanId" style="width: 140px;" placeholder="请选择" size="mini">
<el-option
v-for="item in runPlanList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</div>
<div style="border: 1px solid #c0c0c0;margin: 10px;padding: 0 10px 5px 10px;">
<div style="position: relative;top: -8px;left: -5px;background: #fff;width: 81px;">当前时刻表</div>
<div class="moni_input" style="width: 140px;">{{ runPlanName }}</div>
</div>
</div>
<div style="display: flex;justify-content: space-between;">
<el-button style="line-height: 18px; width: 100px; margin-left: 20px;" plain :disabled="!newRunPlanId" @click="handleClickLoadRunPlan">加载</el-button>
<el-button style="line-height: 18px; width: 100px; margin-right: 20px;" plain @click="changeShowMode('cmd')">退出</el-button>
</div>
</div>
</el-col>
<el-col v-if="operationType === 'run'" :span="6" style="padding: 1px;">
<div class="nav-border" style="padding-top: 10px;">
<span style="font-size: 14px;color: #000;">{{ `TIP端加载时刻表内部号为${runPlanName}` }}</span>
</div>
</el-col>
<el-col :span="3">
<div class="nav-border flex-box">
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!isLogin" @click="interceptLogin(changeShowMode)(false)">联锁操作</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!isLogin">时刻表操作</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!isLogin" @click="interceptLogin(changeShowMode)(true)">ATS操作</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!isLogin" @click="interceptLogin(changeShowMode)('cmd')">联锁操作</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!isLogin" @click="interceptLogin(changeShowMode)('run')">时刻表操作</el-button>
<el-button style="line-height: 18px; width: 100px; margin: 0;" plain :disabled="!isLogin" @click="interceptLogin(changeShowMode)('train')">ATS操作</el-button>
</div>
</el-col>
</el-row>
@ -228,6 +278,8 @@ import { EventBus } from '@/scripts/event-bus';
import * as adapter from '@/jmapNew/utils/adapter';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import BanIcon from '@/assets/ban-heb.png';
import { queryRunPlanList } from '@/api/runplan';
import { simulationLoadRunPlan } from '@/api/simulation';
export default {
props: {
@ -258,6 +310,8 @@ export default {
oldDevice: null, //
canCommand: true,
cr1Confrim: false,
runPlanList: [],
newRunPlanId: '',
operate: '',
cmdType: '',
securityCommand: '',
@ -267,6 +321,7 @@ export default {
selectedObj: null,
oldClickObj: null, //
route: null, //
overlap: null, //
selectRouteList: [],
menuCmdList: new Array(15).fill({}),
ciStationParamList: [],
@ -285,11 +340,14 @@ export default {
commandInfo: {},
banIcon: BanIcon,
timer: null,
trainOperationShow: false,
operationType: 'cmd',
trainModel: {},
formModelTripNum: '',
formModelSectionName: '',
formModelNewTrip: '',
formModelNewGroup: '',
trainOperateType: '',
formModelNewSection: '',
dialogVisible: false,
tipList: [],
modeMatch: false,
@ -312,7 +370,10 @@ export default {
...mapGetters('map', [
'routeList',
'stationList',
'routeData'
'routeData',
'overlapList',
'overlapData',
'sectionList'
]),
commandId() {
return OperationEvent.Command.commandHaerbin.confirm.domId;
@ -349,11 +410,19 @@ export default {
},
menuPosition() {
return this.$store.state.menuOperation.menuPosition;
},
runPlanName() {
return this.$store.state.runPlan.runPlanInfo.name;
},
trainCommitDisabled() {
return (this.trainOperateType === 'create' && this.formModelNewTrip && this.formModelNewTrip.length === 7 && this.formModelNewGroup && this.formModelNewGroup.length === 6) ||
(this.trainOperateType === 'update' && this.formModelNewTrip && this.formModelNewTrip.length === 7) || (this.trainOperateType === 'delete') ||
(this.trainOperateType === 'move' && this.formModelNewSection);
}
},
watch: {
'$store.state.training.prdType': function (val) {
this.trainOperationShow = false;
this.operationType = 'cmd';
this.initMenus();
},
'$store.state.training.started':function (val) {
@ -435,6 +504,15 @@ export default {
this.param = {};
this.initMenus();
this.handleBasicMenu();
queryRunPlanList(this.$route.query.mapId).then(resp =>{
if (resp.data && resp.data.length) {
resp.data.forEach(item => {
this.runPlanList.push(item);
});
}
}).catch(() => {
this.$message.error('获取地图模板运行图列表失败!');
});
EventBus.$on('sendMsg', ({message = ''}) => {
this.tempData = [{name: message}];
});
@ -449,6 +527,9 @@ export default {
}
}
},
handleTrainOperate(type) {
this.trainOperateType = type;
},
initCentralizedStationList(list) {
const stationContorl = this.stationContorl;
this.menuCmdList = new Array(15).fill({});
@ -508,7 +589,7 @@ export default {
}
break;
case 'Section':
if (this.trainOperationShow) {
if (this.operationType === 'train') {
this.handleTrainParam();
} else {
this.handleSectionMenu();
@ -526,6 +607,13 @@ export default {
}
}
},
handleClickLoadRunPlan(row) {
simulationLoadRunPlan(this.$route.query.group, this.newRunPlanId).then(response => {
this.$message.success('仿真加载指定运行计划成功!');
}).catch(() => {
this.$message.error('仿真加载指定运行计划失败!');
});
},
handleIbpShow() {
if (this.selectedObj._type == 'StationStand' && this.$store.state.menuOperation.subType == 'StationPlatform') {
if (!(this.selectedObj.assignSkip || this.selectedObj.allSkip || this.selectedObj.centerHoldTrain || this.selectedObj.stationHoldTrain)) {
@ -577,13 +665,25 @@ export default {
return control;
},
selectRouteParam(code) {
this.route = this.routeData[code];
if (this.route) {
this.param = {
routeCode: this.route.code
};
if (this.cmdType === CMD.Signal.CMD_SIGNAL_SET_OVERLAP) {
this.overlap = this.overlapData[code];
if (this.overlap) {
this.param = {
signalCode: this.selectedObj.code,
overlapCode: this.overlap.code
};
this.canCommand = false;
}
} else {
this.route = this.routeData[code];
if (this.route) {
this.param = {
routeCode: this.route.code
};
}
this.initCentralizedStationList(this.routeParamList);
}
this.initCentralizedStationList(this.routeParamList);
},
handleSwicthMenu() { //
//
@ -783,11 +883,20 @@ export default {
if (row.commandTip) {
EventBus.$emit('sendMsg', {message: row.commandTip});
}
if (row.cmdType === CMD.Signal.CMD_SIGNAL_SET_OVERLAP) {
const overlapList = [];
this.overlapList.forEach(item => {
if (item.signalCode === this.selectedObj.code) {
overlapList.push(item);
}
});
this.tempData = [...overlapList];
}
if (this.tempData.length) {
this.operate = row.operate.operation;
this.cmdType = row.cmdType;
this.canCommand = false;
this.canCommand = row.cmdType === CMD.Signal.CMD_SIGNAL_SET_OVERLAP;
step.operation = this.operate;
if (row.next) {
@ -915,12 +1024,13 @@ export default {
},
doClose() {
this.deviceHighLight(this.oldDevice, false); //
this.changeShowMode(false);
this.changeShowMode('cmd');
this.operate = ''; //
this.cmdType = '';
this.securityCommand = '';
this.speedLimitValue = '';
this.secondConfirm = false;
this.overlap = null;
this.cr1Confrim = false;
if (this.oldClickObj) {
this.deviceHighLight(this.oldClickObj, false);
@ -946,17 +1056,16 @@ export default {
this.allowDetain = true;
},
handleTrainParam() {
if (this.selectedObj.type === '01') {
this.formModelSectionName = this.selectedObj.name;
// this.$store.state.map.activeTrainList.forEach(trainCode => {
// const trainModel = this.$store.getters['map/getDeviceByCode'](trainCode);
// if (trainModel && trainModel.physicalCode === this.selectedObj.code) {
// this.formModelTripNum = trainModel.serviceNumber + trainModel.destinationCode + (trainModel.tripNumber.substring(1));
// this.trainModel = trainModel;
// this.formModelNewTrip = '';
// }
// });
}
this.formModelSectionName = this.selectedObj.name;
this.trainOperateType = '';
this.$store.state.map.activeTrainList.forEach(trainCode => {
const trainModel = this.$store.getters['map/getDeviceByCode'](trainCode);
if (trainModel && trainModel.sectionCode === this.selectedObj.code) {
this.formModelTripNum = trainModel.destinationCode + (trainModel.serviceNumber.substring(1)) + (trainModel.tripNumber.substring(1));
this.trainModel = trainModel;
this.formModelNewTrip = '';
}
});
},
pushTempData(list) {
this.tempData = [];
@ -964,44 +1073,63 @@ export default {
this.tempData.push(el);
});
},
changeShowMode(flag) {
changeShowMode(type) {
if (this.$store.state.training.prdType === '01') {
this.trainModel = {};
this.formModelTripNum = '';
this.formModelSectionName = '';
this.formModelNewTrip = '';
this.trainOperationShow = flag;
this.formModelNewGroup = '';
this.trainOperateType = '';
this.operationType = type;
this.formModelNewSection = '';
}
},
trainCommit() {
if (this.formModelNewTrip && this.formModelNewTrip.length === 9) {
const params = {
groupNumber: this.trainModel.groupNumber,
tripNumber: this.formModelNewTrip.slice(6, 9),
serviceNumber: this.formModelNewTrip.slice(3, 6)
};
const step = {
over: true,
cmdType: CMD.TrainWindow.CMD_TRAIN_SET_PLAN,
operation: OperationEvent.Train.setPlanTrainId.menu.operation,
param: params
};
this.$store.dispatch('training/nextNew', step).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.changeShowMode(true);
}
}).catch((error) => {
console.error(error);
if (error && error.code == '10017') {
EventBus.$emit('sendMsg', {message: error.message});
} else {
EventBus.$emit('sendMsg', {message: '命令执行失败!'});
}
});
} else {
EventBus.$emit('sendMsg', {message: '请输入正确的车次号'});
const params = {};
const step = {
over: true
};
if (this.trainOperateType === 'update') {
params.groupNumber = this.trainModel.groupNumber;
params.serviceNumber = '0' + this.formModelNewTrip.slice(3, 5);
params.tripNumber = '0' + this.formModelNewTrip.slice(5, 7);
step.cmdType = CMD.TrainWindow.CMD_TRAIN_SET_PLAN;
step.operation = OperationEvent.Train.setPlanTrainId.menu.operation;
step.param = params;
} else if (this.trainOperateType === 'create') {
params.sectionCode = this.selectedObj.code;
params.groupNumber = this.formModelNewGroup;
params.dn = this.formModelNewTrip.slice(0, 3);
params.sn = '0' + this.formModelNewTrip.slice(3, 5);
params.tn = '0' + this.formModelNewTrip.slice(5, 7);
step.cmdType = CMD.TrainWindow.CMD_TRAIN_ADD_TRAIN_TRACE;
step.operation = OperationEvent.Train.addTrainId.menu.operation;
step.param = params;
} else if (this.trainOperateType === 'delete') {
params.groupNumber = this.trainModel.groupNumber;
step.cmdType = CMD.TrainWindow.CMD_TRAIN_REMOVE_TRAIN_TRACE;
step.operation = OperationEvent.Train.delTrainId.menu.operation;
step.param = params;
} else if (this.trainOperateType === 'move') {
params.groupNumber = this.trainModel.groupNumber;
params.sectionCode = this.formModelNewSection;
step.cmdType = CMD.TrainWindow.CMD_TRAIN_MOVE_TRAIN_TRACE;
step.operation = OperationEvent.Train.moveTrainId.menu.operation;
step.param = params;
}
this.$store.dispatch('training/nextNew', step).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.changeShowMode('train');
}
}).catch((error) => {
if (error && error.code == '10017') {
EventBus.$emit('sendMsg', {message: error.message});
} else {
EventBus.$emit('sendMsg', {message: '命令执行失败!'});
}
});
},
stationToCommand() {
const step = {
@ -1067,7 +1195,7 @@ export default {
this.basicParamList = this.$store.state.training.prdType === '01' ? [
{ name: '自排全开', commandTip: '自排全开', cmdType: CMD.Station.CMD_STATION_OPEN_AUTO_SETTING, operate: OperationEvent.Station.atsAutoControlALL.menu, fillStationCode: true, disabledCb: (stationControl) => ['Center', 'None'].includes(stationControl.controlMode) },
{ name: '自排全关', commandTip: '自排全关', cmdType: CMD.Station.CMD_STATION_CLOSE_AUTO_SETTING, operate: OperationEvent.Station.humanControlALL.menu, fillStationCode: true, disabledCb: (stationControl) => ['Center', 'None'].includes(stationControl.controlMode) },
{ name: '释放指令', commandTip: '释放指令', cmdType: '', operate: '', fillStationCode: true, disabledCb: (stationControl) => true },
{ name: '释放指令', commandTip: '释放指令', cmdType: CMD.Station.CMD_STATION_RELEASE, operate: OperationEvent.Station.stationRelease.menuButton, securityCommand: true, fillStationCode: true, disabledCb: (stationControl) => ['Center', 'None'].includes(stationControl.controlMode) },
{ name: '重启令解', commandTip: '重启令解', cmdType: CMD.Station.CMD_STATION_RESTART, operate: OperationEvent.Station.stationRestart.menuButton, securityCommand: true, fillStationCode: true, disabledCb: (stationControl) => ['Center', 'None'].includes(stationControl.controlMode) },
{ name: '追踪全开', commandTip: '追踪全开', cmdType: CMD.Station.CMD_STATION_SET_CI_AUTO_TRIGGER, operate: OperationEvent.Station.setAutoTrigger.menu, fillStationCode: true, disabledCb: (stationControl) => ['Center', 'None'].includes(stationControl.controlMode) },
{ name: '追踪全关', commandTip: '追踪全关', cmdType: CMD.Station.CMD_STATION_CANCEL_CI_AUTO_TRIGGER, operate: OperationEvent.Station.cancelAutoTrigger.menu, fillStationCode: true, disabledCb: (stationControl) => ['Center', 'None'].includes(stationControl.controlMode) },
@ -1144,7 +1272,7 @@ export default {
{ name: '车队单开', commandTip: '对单架信号机开启车队模式,主要是信号机不关闭的情况下排列所有进路', cmdType: CMD.Signal.CMD_SIGNAL_SET_CI_AUTO, operate: OperationEvent.Signal.setAutoInterlock.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '车队单关', commandTip: '对单架信号机关闭车队模式', cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_CI_AUTO, operate: OperationEvent.Signal.cancelAutoInterlock.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '设置保护', cmdType: '', operate: OperationEvent.Signal.reopenSignal.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '设置保护', commandTip: '设置保护', cmdType: CMD.Signal.CMD_SIGNAL_SET_OVERLAP, operate: OperationEvent.Signal.reopenSignal.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '未评限区', cmdType: '', operate: OperationEvent.Signal.reopenSignal.menuButton, securityCommand: true, disabledCb: (stationControl) => !this.modeMatch }
] : [
{ name: '关闭信号', commandTip: '设置信号机为关闭状态', cmdType: CMD.Signal.CMD_SIGNAL_CLOSE_SIGNAL, operate: OperationEvent.Signal.signalClose.menuButton, disabledCb: (stationControl) => !this.modeMatch },
@ -1160,7 +1288,7 @@ export default {
{ name: '开放引导', commandTip: '开放引导信号', cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE, operate: OperationEvent.Signal.guide.menuButton, securityCommand: true, disabledCb: (stationControl) => !this.modeMatch },
{ name: '车队单开', commandTip: '对单架信号机开启车队模式,主要是信号机不关闭的情况下排列所有进路', cmdType: CMD.Signal.CMD_SIGNAL_SET_CI_AUTO, operate: OperationEvent.Signal.reopenSignal.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '车队单关', commandTip: '对单架信号机关闭车队模式', cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_CI_AUTO, operate: OperationEvent.Signal.reopenSignal.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '设置保护', cmdType: '', operate: OperationEvent.Signal.reopenSignal.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '设置保护', commandTip: '设置保护', cmdType: CMD.Signal.CMD_SIGNAL_SET_OVERLAP, operate: OperationEvent.Signal.setOverlap.menuButton, disabledCb: (stationControl) => !this.modeMatch },
{ name: '未评限区', cmdType: '', operate: OperationEvent.Signal.reopenSignal.menuButton, securityCommand: true, disabledCb: (stationControl) => !this.modeMatch }
];
this.stationParamList = this.$store.state.training.prdType === '01' ? [
@ -1458,6 +1586,13 @@ export default {
.station_close{
float: right;
}
.moni_input{
border-top: 2px solid #585858;
border-left: 2px solid #585858;
border-right: 2px solid #F9F9F9;
border-bottom: 2px solid #F9F9F9;
background: #D4D0C8;
}
.stationButton{
font-size: 12px;
width: 100px;

View File

@ -33,6 +33,15 @@ export const loginInfo = {
navigationMarginLeft: '60px',
systemType: '013'
},
zzww: {
title: '共赢列车仿真驾驶系统',
loginPath: '/login?project=zzww',
loginParam: 'ZZWW',
titleDistance: '-150px',
navigationLogoWidth: '40px',
navigationMarginLeft: '60px',
systemType: '011'
},
bjd: {
title: '城市轨道交通列车运行智慧辅助系统',
loginPath: '/login?project=bjd',
@ -419,6 +428,7 @@ export const loginInfo = {
export const ProjectIcon = {
xty: FaviconXty,
zzww: FaviconXty,
login: Favicon,
design: Favicon,
designxty: FaviconXty,
@ -462,6 +472,7 @@ export const ProjectCode = {
design: 'DEFAULT',
xty: 'XTY',
designxty: 'XTY',
zzww: 'ZZWW',
gzb: 'GZB',
designgzb: 'GZB',
heb: 'HEB',
@ -485,12 +496,12 @@ export const ProjectCode = {
designcgy: 'CGY'
};
export const BottomColumnOnlyConInfo = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls', 'designhls', 'hyd', 'designhyd', 'cgy', 'designcgy']; // 底部栏仅展示公司信息不展示备案号
export const GetMapListByProjectList = ['xty', 'designxty', 'gzb', 'designgzb', 'xadt', 'designxadt', 'heb', 'designheb', 'designdrts', 'drts', 'wjls', 'nty', 'designnty', 'sdy', 'designsdy', 'ntyc', 'designntyc', 'ntyl', 'designntyl', 'designbjd', 'cgy', 'designcgy']; // 实训设计平台通过项目code获取地图列表的项目
export const GetMapListByProjectList = ['xty', 'designxty', 'gzb', 'designgzb', 'xadt', 'designxadt', 'heb', 'designheb', 'designdrts', 'drts', 'wjls', 'nty', 'designnty', 'sdy', 'designsdy', 'ntyc', 'designntyc', 'ntyl', 'designntyl', 'designbjd', 'cgy', 'designcgy', 'zzww']; // 实训设计平台通过项目code获取地图列表的项目
export const CaseHideProjectList = ['heb', 'designheb', 'cgy', 'designcgy']; // 案例展示隐藏的项目
export const VersionBaseNoShow = ['heb', 'designheb', 'hls', 'designhls', 'drts', 'wjls', 'hyd', 'designhyd', 'cgy', 'designcgy']; // 登录页右下角版本开发基于不展示
export const MainBodyNoShow = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls', 'designhls', 'hyd', 'designhyd', 'cgy', 'designcgy']; // 登录页右下角主体不展示
export const ProjectLoginStyleList = ['gzb', 'designgzb', 'xty', 'designxty', 'xadt', 'designxadt', 'tky', 'designtky', 'jyd', 'designjyd', 'bxkc', 'designbxkc',
'crsc', 'designcrsc', 'hls', 'designhls', 'drts', 'wjls', 'hyd', 'designhyd', 'nty', 'designnty', 'bjd', 'designbjd', 'sdy', 'designsdy', 'ntyc', 'designntyc', 'ntyl', 'designntyl', 'cgy', 'designcgy']; // 登录页样式
'crsc', 'designcrsc', 'hls', 'designhls', 'drts', 'wjls', 'hyd', 'designhyd', 'nty', 'designnty', 'bjd', 'designbjd', 'sdy', 'designsdy', 'ntyc', 'designntyc', 'ntyl', 'designntyl', 'cgy', 'designcgy', 'zzww']; // 登录页样式
export const NoQrcodeList = ['heb', 'designheb', 'cgy', 'designcgy', 'ntyl', 'designntyl'];
export const NoSimulationQrCodeList = ['heb', 'bjd'];
export const RegisterCodeList = ['cgy', 'designcgy'];
@ -543,7 +554,8 @@ export const ProjectList = [
{value: 'urtss', label: '陪标项目'},
{value: 'sdy', label: '苏电院'},
{value: 'cgy', label: '成都工业'},
{value: 'wjls', label: '微机联锁'}
{value: 'wjls', label: '微机联锁'},
{value: 'zzww', label: '郑州共赢'}
];
export const localPackageProject = {
localdesign: 'designheb',

View File

@ -124,7 +124,9 @@ export default {
/** 取消自动折返 */
CMD_SIGNAL_CANCEL_AUTO_TURN_BACK: {value: 'Signal_Cancel_Auto_Turn_Back', label: '取消自动折返'},
/** 信号机总取消 */
CMD_SIGNAL_TOTAL_CANCLE:{value:'Signal_Total_Cancel', label: '信号机总取消'}
CMD_SIGNAL_TOTAL_CANCLE:{value:'Signal_Total_Cancel', label: '信号机总取消'},
/** 设置保护 */
CMD_SIGNAL_SET_OVERLAP : {value: 'Signal_Set_Overlap', label: '设置保护'}
},
// 物理区段操作
@ -263,7 +265,9 @@ export default {
/** 取消计轴预复位 */
CMD_STATION_CANCEL_PRE_RESET: {value: 'Station_Cancel_Pre_Reset', label: '取消计轴预复位'},
/** 重启联锁机 */
CMD_STATION_RESTART_INTERLOCK_MACHINE: {value: 'Station_Restart_Interlock_Machine', label: '重启联锁机'}
CMD_STATION_RESTART_INTERLOCK_MACHINE: {value: 'Station_Restart_Interlock_Machine', label: '重启联锁机'},
/** 释放指令 */
CMD_STATION_RELEASE : {value:'Station_Release', label: '释放指令' }
},
// 列车

View File

@ -1697,6 +1697,12 @@ export const OperationEvent = {
operation: '3201',
domId: '_Tips-Signal-cancelinterlock-Menu{BOTTOM}'
}
},
setOverlap: {
menuButton: {
operation: '3211',
domId: '_Tips-Signal-setOverlap-Menu{BOTTOM}'
}
}
},
@ -2761,6 +2767,12 @@ export const OperationEvent = {
operation: '619',
domId: '_Tips-Station-restartInterlockMachine-Menu'
}
},
stationRelease: {
menuButton: {
operation: '620',
domId: '_Tips-Station-stationRelease'
}
}
},

View File

@ -261,6 +261,9 @@ const map = {
routeData: (state) => {
return state.routeData;
},
overlapList: (state) => {
return state.overlapList;
},
overlapData: (state) => {
return state.overlapData;
},

View File

@ -4,7 +4,7 @@
<el-row>
<div class="title-text">场景语音训练结果</div>
</el-row>
<el-row>
<el-row v-loading="loading">
<el-col :span="6" :offset="1">
<span>用户</span>
<el-select v-model="userId" size="mini" filterable placeholder="请选择">
@ -108,13 +108,8 @@ export default {
},
methods: {
async initFunction() {
this.loading = true;
const userListData = await getHavaAudoUserList(this.$route.query.sceneId);
this.userList = userListData.data;
if (this.userList.length) {
this.userId = this.userList[0].id;
this.queryData();
}
const scriptData = await getScriptByIdNew(this.$route.query.scriptId);
const dispatcher = scriptData.data.memberList.find(member => member.type === 'DISPATCHER');
this.actionList = scriptData.data.actionList.filter(action => {

View File

@ -169,6 +169,17 @@
<el-input v-model="selected.text" ></el-input>
</el-form-item>
<el-form-item label="提示功能:" v-if="selected.explainPaneType">
<el-select v-model="selected.explainPaneType" placeholder="请选择">
<el-option
v-for="explainType in explainPaneTypes"
:key="explainType.value"
:label="explainType.name"
:value="explainType.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="说明画面:" v-if="selected.picurl">
<el-input v-model="selected.picurl" ></el-input>
</el-form-item>
@ -295,6 +306,16 @@
],
jobDataList:[],
value:'',
explainPaneTypes:[
{
name:"无",
value:"null",
},
{
name:"跳转",
value:"jump",
}
],
}
},
computed: {

View File

@ -7,6 +7,34 @@
:lessonTools='lessonTools'
></LessonTools-Manager>
<div id="" class="lessonsetupdiv" v-show="showSetup">
<div style="text-align:center;top:10%;font-size:30px">课程内容设置</div>
<el-form ref="form" label-width="80px">
<el-form-item label="考试模式">
<el-switch
v-model="examMode"
active-text="开启考试模式"
inactive-text="关闭考试模式">
</el-switch>
</el-form-item>
<el-form-item label="可用角色">
<el-checkbox-group v-model="checkedRole">
<el-checkbox v-for="role in jobPaneData.dataList" :label="role.name" :key="role.name">{{role.name}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<!-- <el-form-item label="课程简介">
<el-input type="textarea" v-model="form.desc"></el-input>
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="onSubmit">修改完成</el-button>
<el-button @click="unSubmit" >关闭</el-button>
</el-form-item>
</el-form>
</div>
<div class="lesson3dedit">
<Step-Tips
:lessonData='lessonData'
@ -50,7 +78,6 @@
</Lesson-Progress>
<div class="lessonsetup" >
<el-row>
当前课程信息
</el-row>
@ -118,6 +145,9 @@
data() {
return {
jl3d: null,
showSetup:false,
examMode:false,
checkedRole:[],
netData:{
name:'',
type:'',
@ -186,9 +216,10 @@
if(data.data.data){
loadData = JSON.parse(data.data.data);
console.log(loadData);
this.checkedRole = loadData.setup.checkedRole;
this.examMode = loadData.setup.examMode;
this.jobPaneData.dataList = loadData.toolJobPane;
console.log(this.jobPaneData.dataList);
this.$refs.jobpane.initJobList(this.jobPaneData.dataList);
this.lessonTools = loadData.lessonTools;
@ -197,8 +228,7 @@
this.lessonData.initLessonProgress();
this.$refs.jobpane.initJobList(this.jobPaneData.dataList);
}
console.log("loaddata----------------");
console.log(loadData);
this.jl3d = new Lesson3dEditor(dom,loadData);
}).catch(() => {
});
@ -212,13 +242,15 @@
let assetModelData = this.jl3d.saveAssetModel();
saveData.assetList = assetModelData.assetList;
saveData.modelList = assetModelData.modelList;
saveData.setup.examMode = this.examMode;
saveData.setup.checkedRole = this.checkedRole;
this.netData.data = JSON.stringify(saveData);
// console.log();
updateLesson3dData(this.$route.query.lessonId,this.netData).then(data => {
console.log(data);
}).catch(() => {
this.$message('保存成功');
}).catch(() => {
this.$message('保存失败');
});
},
addProgress(){
@ -245,6 +277,7 @@
},
setupclick(){
this.showSetup = true;
},
createModel(assetData,mousePos){
this.jl3d.createModelTrigger(assetData,mousePos);
@ -258,6 +291,13 @@
this.$router.push({ path: '/design/jlmap3d/lesson3dplayer', query: {lessonId: this.$route.query.lessonId} });
},
onSubmit() {
this.showSetup = false;
},
unSubmit(){
this.showSetup = false;
},
},
}
@ -318,4 +358,25 @@
.el-tabs__content{
position: absolute;
}
.lessonsetupdiv {
position: absolute;
width: 30%;
height: 40%;
top:30%;
left:35%;
background-color: #fff;
border-radius: 18px;
border:solid 2px #000;
z-index: 5;
}
.nextbuttondiv{
width:30px;
height:30px;
background-size: 100%;
position: absolute;
right:0;
bottom:0;
}
</style>

View File

@ -9,6 +9,11 @@
<div class="explainpanetext" >
{{lessonData.lessonData.lessonProgress[lessonEditIndex].explainPane.text}}
</div>
<div class="nextbuttondiv"
:style="{'background-image': 'url('+staticImg+'/lesson3d/nextbutton.png)'}"
v-if="lessonData.lessonData.lessonProgress[lessonEditIndex].explainPane.explainPaneType=='jump'"></div>
</div>
</template>
<script>
@ -26,6 +31,7 @@
data() {
return {
localStatic:BASE_ASSET_API,
staticImg:JL3D_LOCAL_STATIC,
}
},
computed: {
@ -61,6 +67,7 @@
border-radius:10px;
border:solid 2px #000;
background-color: #fff;
color:#000;
z-index:1;
}
.explainpanetittle{
@ -70,15 +77,28 @@
}
.explainpanepic{
height:65%;
position:relative;
width:90%;
left:5%;
height:45%;
border:solid 2px #000;
background-size: 100%;
}
.explainpanetext{
position:relative;
left:5%;
width:90%;
font-size: 14px;
// height:20%;
}
.nextbuttondiv{
width:30px;
height:30px;
background-size: 100%;
position: absolute;
right:0;
bottom:0;
}
</style>

View File

@ -2,6 +2,21 @@
<div id="lesson3ddiv" class="lesson3ddiv">
<div class="selectjobdiv"
:style="{'background-image': 'url('+staticImg+'/texture/bg.jpg)'}"
v-if="showSelectJob">
<div class="selectjobbuttondiv">
<div
class="selectjobimg"
v-for="(job,index) in selectJobList"
@click="selectJob(job)"
:style="{'background-image': 'url('+staticImg+'/lesson3d/mst.png)'}">
<!-- <div>{{job}}</div> -->
<div style="width:100%;position:absolute;bottom:0;font-size:30px;textAlign:center;">{{job}}</div>
</div>
</div>
</div>
<div class="lesson3dplayer">
<Step-Tips
:lessonData='lessonData'
@ -19,13 +34,16 @@
<Explain-Pane
:lessonData='lessonData'
:lessonPlayIndex='lessonPlayIndex'
v-show="lessonTools[2].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
:nowRole ='nowRole'
v-show="lessonTools[2].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'"
@jumpEvent="jumpEvent">
</Explain-Pane>
<Job-Pane
:jobPaneData='jobPaneData'
:lessonData='lessonData'
:lessonPlayIndex='lessonPlayIndex'
:nowRole='nowRole'
ref="jobpane"
v-show="lessonTools[3].isShow && lessonData.lessonData.lessonProgress[lessonPlayIndex].progressScene == 'standstation'">
</Job-Pane>
@ -62,6 +80,9 @@
import { JobPaneData } from '@/jlmap3d/lesson3d/toolsmodel/jobpanedata.js';
import { getLesson3dData,updateLesson3dData } from '@/api/jmap/lesson3d';
import { JL3D_LOCAL_STATIC,BASE_ASSET_API } from '@/api/jlmap3d/assets3d.js';
export default {
name: 'Lesson3dPlayer',
components: {
@ -76,6 +97,10 @@
},
data() {
return {
staticImg:JL3D_LOCAL_STATIC,
showSelectJob:true,
selectJobList:[],
nowRole:"",
jl3d: null,
netData:{
name:'',
@ -146,7 +171,7 @@
let loadData;
if(data.data.data){
loadData = JSON.parse(data.data.data);
this.selectJobList = loadData.setup.checkedRole;
this.jobPaneData.dataList = loadData.toolJobPane;
this.$refs.jobpane.initJobList(this.jobPaneData.dataList);
@ -163,6 +188,17 @@
}).catch(() => {
});
},
selectJob(job){
this.showSelectJob = false;
for(let i=0;i<this.jobPaneData.dataList.length;i++){
if(job == this.jobPaneData.dataList[i].name){
this.nowRole = this.jobPaneData.dataList[i].value;
console.log(this.nowRole);
this.jl3d.initNowRole(this.nowRole);
}
}
},
startLesson(){
this.$refs.processlog.startLog();
},
@ -190,6 +226,9 @@
if(type == "tools"){
this.lessonPlayIndex = action.nextNode;
}
if(type == "jump"){
this.lessonPlayIndex = action.nextNode;
}
console.log(type);
console.log(action);
this.jl3d.changeIndex(this.lessonPlayIndex);
@ -219,6 +258,40 @@
touch-action: none;
}
.selectjobdiv{
width:100%;
height:100%;
position: absolute;
z-index: 5;
background-size: 100%;
}
.selectjobimg{
width:250px;
height:250px;
background-size: 100%;
// float:left;
display: inline-block;
position:relative;
}
.selectjobbuttondiv{
position:absolute;
width:80%;
height:30%;
left:10%;
top:35%;
overflow-x:scroll;
overflow-y:hidden;
text-align: center;
}
.selectjobbackdiv{
}
.lesson3ddiv {
width: 100%;
@ -266,4 +339,5 @@
.el-tabs__content{
position: absolute;
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<div class="explainpanediv"
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex]"
@click="selectTool"
:style="{'background-image': 'url('+lessonbg+')'}">
<div class="explainpanetittle" >
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.tittle}}
@ -12,6 +12,10 @@
<div class="explainpanetext" >
{{lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.text}}
</div>
<div class="nextbuttondiv"
:style="{'background-image': 'url('+staticImg+'/lesson3d/nextbutton.png)'}"
v-if="lessonData.lessonData.lessonProgress[lessonPlayIndex].explainPane.explainPaneType=='jump' "
@click="explainJump"></div>
</div>
</template>
<script>
@ -22,13 +26,14 @@
export default {
name: 'ExplainPane',
props:['lessonData','lessonPlayIndex'],
props:['lessonData','lessonPlayIndex','nowRole'],
components: {
},
data() {
return {
localStatic:BASE_ASSET_API,
staticImg:JL3D_LOCAL_STATIC,
lessonbg:JL3D_LOCAL_STATIC+"/lesson3d/lessonbg.png",
}
},
@ -45,8 +50,13 @@
},
methods: {
selectTool(){
lesson3dSelect('toolproperty','explainpane');
// selectTool(){
// lesson3dSelect('toolproperty','explainpane');
// },
explainJump(){
if(this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane.explainPaneType == "jump"){
this.$emit('jumpEvent','jump',this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].explainPane);
}
},
},
@ -77,7 +87,7 @@
position:relative;
width:90%;
left:5%;
height:65%;
height:45%;
border:solid 2px #000;
background-size: 100%;
}
@ -90,5 +100,13 @@
// height:20%;
}
.nextbuttondiv{
width:30px;
height:30px;
background-size: 100%;
position: absolute;
right:0;
bottom:0;
}
</style>

View File

@ -48,7 +48,7 @@
//
export default {
name: 'JobPane',
props:['jobPaneData','lessonData','lessonPlayIndex'],
props:['jobPaneData','lessonData','lessonPlayIndex','nowRole'],
components: {
@ -98,7 +98,8 @@
console.log(selectTool);
let nowProgress = this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex];
console.log(nowProgress.id);
if(selectTool.sceneId == nowProgress.id){
console.log(this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex]);
if(selectTool.sceneId == nowProgress.id && this.lessonData.lessonData.lessonProgress[this.lessonPlayIndex].roleName == this.nowRole){
jumpEvent("tools",selectTool);
}
// console.log(this.lessonData.lessonProgress[this.lessonPlayIndex]);

View File

@ -136,8 +136,8 @@ export default {
menu = getDeviceMenuByDeviceType('StationControl');
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
this.$store.dispatch('training/emitTipFresh');
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
return;
} else if (em.subType == 'light' && em.deviceType == 'Station') { // 线
const equipment = this.getDeviceByEm(em);
@ -145,8 +145,8 @@ export default {
menu = getDeviceMenuByDeviceType('StationLight');
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
this.$store.dispatch('training/emitTipFresh');
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
return;
} else if (em.subType == 'preReset' && em.deviceType == 'Station') { // 线
const equipment = this.getDeviceByEm(em);
@ -154,19 +154,21 @@ export default {
menu = getDeviceMenuByDeviceType('StationPreReset');
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
this.$store.dispatch('training/emitTipFresh');
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
return;
} else if (em.subType == 'enabled' && em.deviceType == 'Switch') {
menu = getDeviceMenuByDeviceType('Enabled');
this.$store.dispatch('menuOperation/setSelected', { device: equipment, subType: em.subType });
const equipment = this.getDeviceByEm(em);
this.$store.dispatch('menuOperation/setSelected', { device: equipment, subType: em.subType });
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};
return;
} else if (em.subType === 'enabled' && em.deviceType === 'Signal') {
menu = getDeviceMenuByDeviceType('Enabled');
this.$store.dispatch('menuOperation/setSelected', { device: equipment, subType: em.subType });
const equipment = this.getDeviceByEm(em);
this.$store.dispatch('menuOperation/setSelected', { device: equipment, subType: em.subType });
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu});
device = this.getDeviceByEm(em);
this.selected = { ...device, _event: MouseEvent.Right};

File diff suppressed because it is too large Load Diff

BIN
static/lesson3d/mst.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB