This commit is contained in:
fan 2022-08-23 09:24:57 +08:00
commit 5939dc773f
21 changed files with 567 additions and 182 deletions

View File

@ -57,9 +57,9 @@ export function publishTraining(data) {
}); });
} }
/** 更新当前用户的某个实训草稿的大字段信息 */ /** 更新当前用户的某个实训草稿的大字段信息 */
export function updateTrainingBlob(data) { export function updateTrainingContent(data) {
return request({ return request({
url: `/api/v2/draft/training/update/blob`, url: `/api/v2/draft/training/update/content`,
method: 'post', method: 'post',
data data
}); });

View File

@ -28,6 +28,7 @@ import approval from './approval';
import systemGenerate from './systemGenerate'; import systemGenerate from './systemGenerate';
import login from './login'; import login from './login';
import designPlatform from './designPlatform'; import designPlatform from './designPlatform';
import trainingManage from './trainingManage';
export default { export default {
enLocale, enLocale,
@ -59,5 +60,6 @@ export default {
approval, approval,
systemGenerate, systemGenerate,
login, login,
designPlatform designPlatform,
trainingManage
}; };

View File

@ -0,0 +1,14 @@
export default {
create: 'create',
editTagTitle: 'Training establishment',
name: 'The name of the training',
description: 'description',
type: 'type',
labelJson: 'tag',
operate: 'operate',
record: 'record',
modify: 'modify',
delete: 'delete',
publish: 'publish',
preview: 'preview'
};

View File

@ -28,6 +28,7 @@ import approval from './approval';
import systemGenerate from './systemGenerate'; import systemGenerate from './systemGenerate';
import login from './login'; import login from './login';
import designPlatform from './designPlatform'; import designPlatform from './designPlatform';
import trainingManage from './trainingManage';
export default { export default {
cnLocale, cnLocale,
@ -59,5 +60,6 @@ export default {
approval, approval,
systemGenerate, systemGenerate,
login, login,
designPlatform designPlatform,
trainingManage
}; };

View File

@ -0,0 +1,14 @@
export default {
create: '创建',
editTagTitle: '实训编制',
name: '实训名称',
description: '描述',
type: '类型',
labelJson: '标签',
operate: '操作',
record: '编制',
modify: '修改',
delete: '删除',
publish: '发布',
preview: '预览'
};

View File

@ -781,6 +781,11 @@ export const menuOperate = {
operation: OperationEvent.CTCCommand.getStationTrack.menu.operation, operation: OperationEvent.CTCCommand.getStationTrack.menu.operation,
cmdType: CMD.CTC.CTC_STATION_DETAIL_LIST cmdType: CMD.CTC.CTC_STATION_DETAIL_LIST
}, },
// 修改股道信息
modifyStationTrack:{
operation: OperationEvent.CTCCommand.modifyStationTrack.menu.operation,
cmdType: CMD.CTC.CTC_STATION_DETAIL_EDIT
},
// 股道发布生效区 // 股道发布生效区
releaseStationTrack:{ releaseStationTrack:{
operation: OperationEvent.CTCCommand.releaseStationTrack.menu.operation, operation: OperationEvent.CTCCommand.releaseStationTrack.menu.operation,
@ -791,6 +796,11 @@ export const menuOperate = {
operation: OperationEvent.CTCCommand.getTrainFixedPath.menu.operation, operation: OperationEvent.CTCCommand.getTrainFixedPath.menu.operation,
cmdType: CMD.CTC.CTC_REGULAR_TRAIN_LINE_LIST cmdType: CMD.CTC.CTC_REGULAR_TRAIN_LINE_LIST
}, },
// 出入口发布生效区
releaseStationDirection:{
operation: OperationEvent.CTCCommand.releaseStationDirection.menu.operation,
cmdType: CMD.CTC.CTC_STATION_IO_GATE_PUBLISH
},
setRoute: { setRoute: {
operation: OperationEvent.CTCCommand.setRoute.menu.operation, operation: OperationEvent.CTCCommand.setRoute.menu.operation,
cmdType: CMD.CTC.CTC_SET_ROUTE cmdType: CMD.CTC.CTC_SET_ROUTE

View File

@ -0,0 +1,148 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm train-set-plan"
title="股道视图参数设置"
:visible.sync="show"
width="800px"
:before-close="doClose"
:z-index="3000"
:append-to-body="true"
:modal="true"
>
<div class="content">
<div class="block block1">
<div class="list">
<div class="item">&lt;2&gt;**站股道视图参数</div>
</div>
<div class="row">
上行铁鞋描述
<el-input style="width: 60%;"></el-input>
</div>
<div class="row">
下行铁鞋描述
<el-input style="width: 60%;"></el-input>
</div>
</div>
<div class="block block2">
<div class="row">
名称
<el-input style="width: 60%;"></el-input>
</div>
<div class="row">
车站
<el-select style="width: 60%;"></el-select>
</div>
<div class="wrapper">
<div class="list" style="width: 60%;">
<div class="item">19G --- 行数:2</div>
</div>
<div class="btngroup" style="width: 40%;">
<el-button>上移</el-button>
<el-button>下移</el-button>
<el-button>增加行数</el-button>
<el-button>减少行数</el-button>
</div>
</div>
</div>
<div class="block block3">
<div class="row">接车操作</div>
<div class="wrapper">
<div class="list" style="width: 60%;">
<div class="item">接预</div>
<div class="item">接路</div>
<div class="item">到点</div>
</div>
<div class="btngroup" style="width: 40%;">
<el-button>上移</el-button>
<el-button>下移</el-button>
</div>
</div>
</div>
<div class="block block4">
<div class="row">发车操作</div>
<div class="wrapper">
<div class="list" style="width: 60%;">
<div class="item">接预</div>
<div class="item">接路</div>
<div class="item">到点</div>
<div class="item">列检</div>
<div class="item">交票</div>
<div class="item">乘降</div>
<div class="item">交令</div>
</div>
<div class="btngroup" style="width: 40%;">
<el-button>上移</el-button>
<el-button>下移</el-button>
</div>
</div>
</div>
</div>
<div class="btn-bar">
<el-button>上传</el-button>
<el-button>保存</el-button>
<el-button @click="doClose">关闭</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'RailViewSetting',
data() {
return {
show: false,
}
},
methods: {
doShow() {
this.show = true
},
doClose() {
this.show = false
},
},
}
</script>
<style lang="scss" scoped>
.content {
height: 560px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
.block {
.wrapper {
display: flex;
justify-content: space-between;
align-items: center;
height: 70%;
.btngroup {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 70%;
}
}
.list {
background-color: #fff;
height: calc(100% - 5em);
padding: 0 5px;
overflow-y: scroll;
.item {
line-height: 1.2rem;
}
}
.row {
margin: 8px;
display: flex;
justify-content: space-around;
}
}
}
.btn-bar {
display: flex;
justify-content: space-evenly;
}
</style>

View File

@ -1,6 +1,5 @@
<template> <template>
<div v-if="dialogShow" id="faultChoose"> <div v-if="dialogShow" id="faultChoose">
<!-- <div class="falutChooseTitle">ceshi</div>-->
<div class="card" style="padding: 5px;"> <div class="card" style="padding: 5px;">
<div style="background: #999EA7;display: flex;align-items: center;"> <div style="background: #999EA7;display: flex;align-items: center;">
<div class="button-box"> <div class="button-box">
@ -31,6 +30,7 @@
</div> </div>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" /> <notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<BoardViewSetting ref="boardViewSetting" /> <BoardViewSetting ref="boardViewSetting" />
<RailViewSetting ref="railViewSetting" />
</div> </div>
</template> </template>
@ -48,13 +48,15 @@ import ShutdownPic from '@/assets/ctc_icon/shutdown.png'
import { EventBus } from '@/scripts/event-bus' import { EventBus } from '@/scripts/event-bus'
import SettingsMenu from './components/menu.vue' import SettingsMenu from './components/menu.vue'
import BoardViewSetting from './dialog/boardViewSetting.vue' import BoardViewSetting from './dialog/boardViewSetting.vue'
import RailViewSetting from './dialog/railViewSetting.vue'
export default { export default {
name: 'RouteCreate', name: 'MenuPanel',
components: { components: {
NoticeInfo, NoticeInfo,
SettingsMenu, SettingsMenu,
BoardViewSetting, BoardViewSetting,
RailViewSetting,
}, },
data() { data() {
return { return {
@ -71,7 +73,7 @@ export default {
activeMenu: '', activeMenu: '',
settingsMenuItems: [ settingsMenuItems: [
{ label: '占线板视图设置', id: 'boardView' }, { label: '占线板视图设置', id: 'boardView' },
{ label: '股道视图显示设置', id: 'trackView' }, { label: '股道视图显示设置', id: 'railView' },
{ {
label: '方向显示设置', label: '方向显示设置',
id: 'directionView', id: 'directionView',
@ -102,14 +104,14 @@ export default {
{ label: '版本信息', id: 'version' }, { label: '版本信息', id: 'version' },
], ],
T3MenuItems: [ T3MenuItems: [
{ label: '设置供电臂状态', id: 'powerSupplyArm' }, { label: '设置供电臂状态', id: 'powerSupplyArm', ctc: true },
{ label: '封锁设备操作', id: 'blockedDeviceOperation' }, { label: '封锁设备操作', id: 'blockedDeviceOperation', ctc: true },
{ label: '区域批量设备操作', id: 'regionBatchOperation', children: [{}] }, { label: '区域批量设备操作', id: 'regionBatchOperation', children: [{}], ctc: true },
{ label: '站存车管理', id: 'stationTrainManage', children: [{}] }, { label: '站存车管理', id: 'stationTrainManage', children: [{}], ctc: true },
{ label: '设备影响分析', id: 'deviceAffectAnalyze', children: [{}] }, { label: '设备影响分析', id: 'deviceAffectAnalyze', children: [{}], ctc: true },
{ label: '操作日志查询', id: 'operationLog' }, { label: '操作日志查询', id: 'operationLog', ctc: true },
{ label: '防溜设置查询', id: 'deviceAffectAnalyze' }, { label: '防溜设置查询', id: 'deviceAffectAnalyze', ctc: true },
{ label: '设备影响分析', id: 'deviceAffectAnalyze' }, { label: '设备影响分析', id: 'deviceAffectAnalyze', ctc: true },
], ],
} }
}, },
@ -150,7 +152,6 @@ export default {
mounted() { mounted() {
this.dragEvent() // 24 this.dragEvent() // 24
window.addEventListener('click', this.closeMenus) window.addEventListener('click', this.closeMenus)
window.addEventListener('click', this.closeMenus)
}, },
unmounted() { unmounted() {
window.removeEventListener('click', this.closeMenus) window.removeEventListener('click', this.closeMenus)
@ -180,6 +181,9 @@ export default {
case 'boardView': case 'boardView':
this.$refs.boardViewSetting.doShow() this.$refs.boardViewSetting.doShow()
break break
case 'railView':
this.$refs.railViewSetting.doShow()
break
} }
}, },
handleT3MenuSelect(id) { handleT3MenuSelect(id) {
@ -250,14 +254,6 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
#faultChoose .el-button--mini {
margin-left: 5px;
}
.triggerFaultListLeft {
display: inline-block;
float: left;
width: 730px;
}
// safariqq360 // safariqq360
// //
#faultChoose .el-table__body-wrapper::-webkit-scrollbar { #faultChoose .el-table__body-wrapper::-webkit-scrollbar {
@ -284,40 +280,8 @@ export default {
// box-shadow: inset 0 0 5px rgba(0,0,0,0.2); // box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
background: rgba(0, 0, 0, 0.4); background: rgba(0, 0, 0, 0.4);
} }
/*IE滚动条颜色*/
html {
scrollbar-face-color: #bfbfbf; /*滚动条颜色*/
scrollbar-highlight-color: #000;
scrollbar-3dlight-color: #000;
scrollbar-darkshadow-color: #000;
scrollbar-shadow-color: #adadad; /*滑块边色*/
scrollbar-arrow-color: rgba(0, 0, 0, 0.4); /*箭头颜色*/
scrollbar-track-color: #eeeeee; /*背景颜色*/
}
</style> </style>
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
.triggerFaultInfo {
margin-bottom: 10px;
padding: 10px 0px 10px 15px;
}
.triggerFaultList {
font-size: 14px;
margin-top: 10px;
line-height: 20px;
}
.triggerFaultTitle {
font-size: 15px;
font-weight: bold;
}
.falutChooseTitle {
cursor: all-scroll;
background-color: #c0c0c0;
height: 30px;
line-height: 30px;
color: #000;
padding-left: 10px;
border-radius: 6px 6px 0 0;
}
#faultChoose { #faultChoose {
width: 510px; width: 510px;
position: absolute; position: absolute;
@ -327,29 +291,6 @@ html {
z-index: 2009; z-index: 2009;
background-color: #e2e2e2; background-color: #e2e2e2;
} }
.faultChooseFoot {
display: inline-block;
float: right;
margin-right: 20px;
margin-top: 20px;
}
.closeFalutChoose {
position: absolute;
right: 0px;
top: 0px;
width: 30px;
height: 30px;
cursor: pointer;
line-height: 30px;
}
.closeFalutChooseIn {
font-size: 20px;
margin-left: 5px;
background-color: #f00;
color: #fff;
border: 1px solid #fff;
border-radius: 5px;
}
.img-button { .img-button {
width: 30px; width: 30px;
height: 30px; height: 30px;

View File

@ -257,6 +257,13 @@ export default {
trainingType: [ // 实训类型 trainingType: [ // 实训类型
{ enlabel: 'single operation', label: '单操', value: 'single'}, { enlabel: 'single operation', label: '单操', value: 'single'},
{ enlabel: 'scene operation', label: '场景', value: 'scene'} { enlabel: 'scene operation', label: '场景', value: 'scene'}
],
ioDirectionList:[ // 出入口类型
{value:'DOWN_IN_STATION', label:'下行进站'},
{value:'UP_IN_STATION', label :'上行进站'},
{value:'DOWN_OUT_STATION', label:'下行出站'},
{value:'UP_OUT_STATION', label:'上行出站'},
{value:'BOTH_WAY_STATION', label:'双向'}
] ]
} }
}; };

View File

@ -451,6 +451,8 @@ export default {
CTC_STATION_DETAIL_PUBLISH:{value: 'STATION_DETAIL_PUBLISH', label: '股道发布生效区'}, CTC_STATION_DETAIL_PUBLISH:{value: 'STATION_DETAIL_PUBLISH', label: '股道发布生效区'},
CTC_STATION_DETAIL_LIST:{value: 'STATION_DETAIL_LIST', label: ' 获取股道列表'}, CTC_STATION_DETAIL_LIST:{value: 'STATION_DETAIL_LIST', label: ' 获取股道列表'},
CTC_REGULAR_TRAIN_LINE_LIST:{value: 'REGULAR_TRAIN_LINE_LIST', label: ' 获取固定列车径路'}, CTC_REGULAR_TRAIN_LINE_LIST:{value: 'REGULAR_TRAIN_LINE_LIST', label: ' 获取固定列车径路'},
CTC_STATION_DETAIL_EDIT:{value: 'STATION_DETAIL_EDIT', label: '修改股道信息'},
CTC_STATION_IO_GATE_PUBLISH:{value: 'STATION_IO_GATE_PUBLISH', label: '出入口发布生效区'},
CTC_SET_ROUTE:{value: 'CTC_SET_ROUTE', label: 'CTC办理进路'}, CTC_SET_ROUTE:{value: 'CTC_SET_ROUTE', label: 'CTC办理进路'},

View File

@ -3986,6 +3986,20 @@ export const OperationEvent = {
operation: '1153', operation: '1153',
domId: '_Tips-CTC-releaseStationTrack-Menu{TOP}' domId: '_Tips-CTC-releaseStationTrack-Menu{TOP}'
} }
},
// 修改股道信息
modifyStationTrack:{
menu: {
operation: '1154',
domId: '_Tips-CTC-modifyStationTrack-Menu{TOP}'
}
},
// 出入口发布生效区
releaseStationDirection:{
menu: {
operation: '1155',
domId: '_Tips-CTC-releaseStationDirection-Menu{TOP}'
}
} }
// CTC_ZONE_SAVE_TRIP_NUMBER // CTC_ZONE_SAVE_TRIP_NUMBER
// CTC_ZONE_SAVE_STATION // CTC_ZONE_SAVE_STATION

View File

@ -3,7 +3,7 @@
<div class="BTRpMenuBarOut"> <div class="BTRpMenuBarOut">
<div class="BTRpMenuBar"> <div class="BTRpMenuBar">
<div class="eachBTRpMenuBar" @click="addTab('StationTrack')">车站股道</div> <div class="eachBTRpMenuBar" @click="addTab('StationTrack')">车站股道</div>
<div class="eachBTRpMenuBar">车站出入口</div> <div class="eachBTRpMenuBar" @click="addTab('StationDirection')">车站出入口</div>
<div class="eachBTRpMenuBar" @click="addTab('TrainFixedPath')">列车固定路径</div> <div class="eachBTRpMenuBar" @click="addTab('TrainFixedPath')">列车固定路径</div>
<div class="eachBTRpMenuBar">车站用户管理</div> <div class="eachBTRpMenuBar">车站用户管理</div>
<div class="eachBTRpMenuBar">备份区名称</div> <div class="eachBTRpMenuBar">备份区名称</div>
@ -37,6 +37,7 @@
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import StationTrack from './stationTrack'; import StationTrack from './stationTrack';
import TrainFixedPath from './trainFixedPath'; import TrainFixedPath from './trainFixedPath';
import StationDirection from './stationDirection';
import { loadMapDataById } from '@/utils/loaddata'; import { loadMapDataById } from '@/utils/loaddata';
import { creatSubscribe, clearSubscribe, getTopic, displayTopic } from '@/utils/stomp'; import { creatSubscribe, clearSubscribe, getTopic, displayTopic } from '@/utils/stomp';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo'; import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
@ -97,7 +98,7 @@ export default {
this.currentTabs = tabs.filter(tab => tab.name !== targetName); this.currentTabs = tabs.filter(tab => tab.name !== targetName);
}, },
addTab(name) { addTab(name) {
const nameMap = {'StationTrack':{title:'车站股道', component:StationTrack }, 'TrainFixedPath':{title:'列车固定路径', component:TrainFixedPath}}; const nameMap = {'StationTrack':{title:'车站股道', component:StationTrack }, 'TrainFixedPath':{title:'列车固定路径', component:TrainFixedPath}, 'StationDirection':{title:'出入口', component:StationDirection}};
const findTab = this.currentTabs.find(tab=>{ const findTab = this.currentTabs.find(tab=>{
return tab.name == name; return tab.name == name;
}); });

View File

@ -0,0 +1,110 @@
<template>
<div class="stationDirection" :style="{ height: height+'px' }">
<!-- {{ '车站股道' }} -->
<div class="stationDirectionL">
<terminal-station-list ref="terminalStationList" :currentid="'getStationDirection'" @loadStationData="loadStationData" />
</div>
<div class="stationDirectionR">
<div class="stationDirectionRMenu">
<div class="stationDirectionRMenuL">
<!-- :id="domIdConfirm" :loading="loading" @click="commit"-->
<el-button class="stationDirectionButton" size="small" @click="modifyDirection">修改</el-button>
</div>
<div class="stationDirectionRMenuR">
<span class="stationDirectionRVer">版本号</span>
<el-button class="stationDirectionButton" size="small">备份</el-button>
<el-button class="stationDirectionButton" size="small" @click="releaseStationDirection">更新至生效区</el-button>
<el-button class="stationDirectionButton" size="small">导入</el-button>
<el-button class="stationDirectionButton" size="small">比较</el-button>
</div>
</div>
<div class="stationDirectionRTable" :style="{ height: (height-40)+'px' }">
{{ '' }}
</div>
</div>
</div>
</template>
<script>
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import TerminalStationList from './terminalStationList';
export default {
name:'StationDirection',
components: {
TerminalStationList
},
data() {
return {
height: this.$store.state.app.height - 61,
currentStationCode:'',
currentRow:null
};
},
methods:{
loadStation() {
this.$refs.terminalStationList.loadStation();
},
loadStationData(stationCode) {
this.currentStationCode = stationCode;
this.handleData(stationCode);
},
handleData(stationCode) {
},
modifySection() {
if (this.currentRow) {
}
},
//
releaseStationDirection() {
const that = this;
commitOperate(menuOperate.CTC.releaseStationDirection, { stationCode:this.currentStationCode}, 3).then(({valid})=>{
if (valid) {
that.$message.success('发布成功!');
}
}).catch(() => {
that.$message.error('发布失败');
});
}
}
};
</script>
<style lang="scss" scoped>
.stationDirection{
padding-left:200px;
}
.stationDirectionL{
width: 200px;
height: 100%;
position: absolute;
border-right: 1px #797979 solid;
left: 0;
top: 0;
}
.stationDirectionR{
padding:0px 5px 0px 5px;
height: 100%;
background: #d8d8d8;
}
.stationDirectionRMenu{
background:#eeeeee;
display: inline-block;
width:100%;
padding:5px;
border-left: 1px #707070 solid;
}
.stationDirectionRMenuL{display: inline-block;}
.stationDirectionRMenuR{float:right;display: inline-block;}
.stationDirectionRTable{background:#a9a9a9;border-left: 1px #707070 solid;}
.stationDirectionRVer{
font-size: 14px;
margin-right: 10px;
color: #87a7c9;
}
.stationDirectionButton{
background-image: linear-gradient(#ffffff,#d8d8d8);
color: #000;
padding: 5px 10px;
border: 1px #737373 solid;
}
</style>

View File

@ -166,29 +166,29 @@ export default {
filterSectionMap:{}, filterSectionMap:{},
currentRow:null, currentRow:null,
lineTypeMap:{ lineTypeMap:{
1:'正线', 'RIGHT_TRACK':'正线',
2:'到发线' 'ARRIVE_DEPART_TRACK':'到发线'
}, },
directionMap:{ directionMap:{
1:'上行', 'S':'上行',
2:'下行', 'X':'下行',
3:'上下行' 'D':'上下行'
}, },
typeMap:{ typeMap:{
1:'客车', 'VAN':'客车',
2:'货车', 'GOODS_VAN':'货车',
3:'客货车' 'PASSENGER':'客货车'
}, },
transfiniteTypeMap:{ transfiniteTypeMap:{
1:'不能接发超限列车', 'NO':'不能接发超限列车',
2:'一级超限', 'TRANSFINITE_ONE_LEVEL':'一级超限',
3:'二级超限', 'TRANSFINITE_TWO_LEVEL':'二级超限',
4:'超级超限' 'TRANSFINITE_SUPER':'超级超限'
}, },
standTypeMap:{ standTypeMap:{
1:'无', 'NO':'无',
2:'高站台', 'LOW':'高站台',
3:'低站台' 'HIGH':'低站台'
}, },
allowEmuMap:{ allowEmuMap:{
true:'是', true:'是',
@ -254,7 +254,8 @@ export default {
if (this.currentRow) { if (this.currentRow) {
this.$refs.trackInformation.doShow({ this.$refs.trackInformation.doShow({
row:this.currentRow, row:this.currentRow,
filterSectionMap:this.filterSectionMap filterSectionMap:this.filterSectionMap,
stationCode:this.currentStationCode
}); });
} }
}, },

View File

@ -15,7 +15,7 @@
<!-- form --> <!-- form -->
<el-form ref="form" :model="model" label-width="85px" :rules="rules"> <el-form ref="form" :model="model" label-width="85px" :rules="rules">
<el-form-item label="股道:" prop="code"> <el-form-item label="股道:" prop="code">
<el-select v-model="model.code" placeholder="" style="width:135px;margin-right:200px"> <el-select v-model="model.code" placeholder="" style="width:125px;margin-right:230px" disabled>
<el-option <el-option
v-for="item in filterSectionList" v-for="item in filterSectionList"
:key="item.code" :key="item.code"
@ -24,8 +24,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="线路性质:" prop="lineType"> <el-form-item label="线路性质:" prop="trackNature">
<el-select v-model="model.lineType" placeholder="" style="width:145px"> <el-select v-model="model.trackNature" placeholder="" style="width:125px">
<el-option <el-option
v-for="item in lineTypeList" v-for="item in lineTypeList"
:key="item.value" :key="item.value"
@ -35,7 +35,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="接发车方向:" prop="direction"> <el-form-item label="接发车方向:" prop="direction">
<el-select v-model="model.direction" placeholder="" style="width:90px"> <el-select v-model="model.direction" placeholder="" style="width:100px">
<el-option <el-option
v-for="item in directionList" v-for="item in directionList"
:key="item.value" :key="item.value"
@ -44,8 +44,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="接发车类型:" prop="type"> <el-form-item label="接发车类型:" prop="trainType">
<el-select v-model="model.type" placeholder="" style="width:90px"> <el-select v-model="model.trainType" placeholder="" style="width:100px">
<el-option <el-option
v-for="item in typeList" v-for="item in typeList"
:key="item.value" :key="item.value"
@ -54,8 +54,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="超限类型:" prop="transfiniteType"> <el-form-item label="超限类型:" prop="transfinite">
<el-select v-model="model.transfiniteType" placeholder="" style="width:145px"> <el-select v-model="model.transfinite" placeholder="" style="width:125px">
<el-option <el-option
v-for="item in transfiniteTypeList" v-for="item in transfiniteTypeList"
:key="item.value" :key="item.value"
@ -65,7 +65,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="站台:" prop="standType"> <el-form-item label="站台:" prop="standType">
<el-select v-model="model.standType" placeholder="" style="width:90px"> <el-select v-model="model.standType" placeholder="" style="width:100px">
<el-option <el-option
v-for="item in standTypeList" v-for="item in standTypeList"
:key="item.value" :key="item.value"
@ -75,7 +75,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="允许动车组:" prop="motorCar"> <el-form-item label="允许动车组:" prop="motorCar">
<el-select v-model="model.motorCar" placeholder="" style="width:90px"> <el-select v-model="model.motorCar" placeholder="" style="width:100px">
<el-option <el-option
v-for="item in allowEmuList" v-for="item in allowEmuList"
:key="item.value" :key="item.value"
@ -85,7 +85,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="上水设备:" prop="waterSupply"> <el-form-item label="上水设备:" prop="waterSupply">
<el-select v-model="model.waterSupply" placeholder="" style="width:145px"> <el-select v-model="model.waterSupply" placeholder="" style="width:125px">
<el-option <el-option
v-for="item in addWaterEquList" v-for="item in addWaterEquList"
:key="item.value" :key="item.value"
@ -95,7 +95,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="排污设备:" prop="sewageAbsorption"> <el-form-item label="排污设备:" prop="sewageAbsorption">
<el-select v-model="model.sewageAbsorption" placeholder="" style="width:90px"> <el-select v-model="model.sewageAbsorption" placeholder="" style="width:100px">
<el-option <el-option
v-for="item in sewageEquList" v-for="item in sewageEquList"
:key="item.value" :key="item.value"
@ -105,7 +105,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="军用:" prop="military"> <el-form-item label="军用:" prop="military">
<el-select v-model="model.military" placeholder="" style="width:90px"> <el-select v-model="model.military" placeholder="" style="width:100px">
<el-option <el-option
v-for="item in militaryList" v-for="item in militaryList"
:key="item.value" :key="item.value"
@ -138,29 +138,29 @@ export default {
filterSectionList:[], filterSectionList:[],
// trackSectionCode:'', // trackSectionCode:'',
lineTypeList:[ lineTypeList:[
{label:'正线', value:'1'}, {label:'正线', value:'RIGHT_TRACK'},
{label:'到发线', value:'2'} {label:'到发线', value:'ARRIVE_DEPART_TRACK'}
], ],
directionList:[ directionList:[
{label:'上行', value:'1'}, {label:'上行', value:'S'},
{label:'下行', value:'2'}, {label:'下行', value:'X'},
{label:'上下行', value:'3'} {label:'上下行', value:'D'}
], ],
typeList:[ typeList:[
{label:'客车', value:'1'}, {label:'客车', value:'VAN'},
{label:'货车', value:'2'}, {label:'货车', value:'GOODS_VAN'},
{label:'客货车', value:'3'} {label:'客货车', value:'PASSENGER'}
], ],
transfiniteTypeList:[ transfiniteTypeList:[
{label:'不能接发超限列车', value:'1'}, {label:'不能接发超限列车', value:'NO'},
{label:'一级超限', value:'2'}, {label:'一级超限', value:'TRANSFINITE_ONE_LEVEL'},
{label:'二级超限', value:'3'}, {label:'二级超限', value:'TRANSFINITE_TWO_LEVEL'},
{label:'超级超限', value:'4'} {label:'超级超限', value:'TRANSFINITE_SUPER'}
], ],
standTypeList:[ standTypeList:[
{label:'无', value:'1'}, {label:'无', value:'NO'},
{label:'高站台', value:'2'}, {label:'高站台', value:'LOW'},
{label:'低站台', value:'3'} {label:'低站台', value:'HIGH'}
], ],
allowEmuList:[ allowEmuList:[
{label:'是', value:true}, {label:'是', value:true},
@ -178,20 +178,40 @@ export default {
{label:'是', value:true}, {label:'是', value:true},
{label:'否', value:false} {label:'否', value:false}
], ],
stationCode:'', //
model:{ model:{
trackSectionCode:'', code:'',
lineType:'', // 线 线/线 trackNature:'', // 线 线/线
direction:'', // direction:'', //
type:'', // // trainType:'', // //
transfiniteType:'', // /// transfinite:'', // ///
standType:'', // // standType:'', // //
allowEmu:'', // / motorCar:'', // /
addWaterEqu:'', // / waterSupply:'', // /
sewageEqu:'', // / sewageAbsorption:'', // /
military:'' // / military:'' // /
}, },
rules:{ rules:{
trackNature: [
{ required: true, message: '请选择线路性质', trigger: 'blur' },
{ required: true, message: '请选择线路性质', trigger: 'change' }
],
direction: [
{ required: true, message: '请选择接发车方向', trigger: 'blur' },
{ required: true, message: '请选择接发车方向', trigger: 'change' }
],
trainType: [
{ required: true, message: '请选择接发车类型', trigger: 'blur' },
{ required: true, message: '请选择接发车类型', trigger: 'change' }
],
transfinite: [
{ required: true, message: '请选择超限类型', trigger: 'blur' },
{ required: true, message: '请选择超限类型', trigger: 'change' }
],
standType: [
{ required: true, message: '请选择站台', trigger: 'blur' },
{ required: true, message: '请选择站台', trigger: 'change' }
]
} }
}; };
}, },
@ -203,15 +223,16 @@ export default {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : ''; return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
}, },
domIdConfirm() { domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.addTrainFixedPath.menu.domId : ''; return this.dialogShow ? OperationEvent.CTCCommand.modifyStationTrack.menu.domId : '';
}, },
title() { title() {
return '股道信息'; return '股道信息';
} }
}, },
methods:{ methods:{
doShow({row, filterSectionMap}) { doShow({row, filterSectionMap, stationCode}) {
this.filterSectionList = Object.values(filterSectionMap); this.filterSectionList = Object.values(filterSectionMap);
this.stationCode = stationCode;
this.dialogShow = true; this.dialogShow = true;
this.$nextTick(function () { this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh'); this.$store.dispatch('training/emitTipFresh');
@ -225,16 +246,15 @@ export default {
commit() { commit() {
this.$refs.form.validate((valid) => { this.$refs.form.validate((valid) => {
if (valid) { if (valid) {
// this.loading = true; this.loading = true;
// const param = {stationCode:this.addModel.stationCode, runPlanParamList:[this.addModel]}; commitOperate(menuOperate.CTC.modifyStationTrack, Object.assign({stationCode:this.stationCode}, this.model), 3).then(({valid})=>{
// commitOperate(menuOperate.CTC.addTrainFixedPath, param, 3).then(({valid})=>{ if (valid) {
// if (valid) { this.doClose();
// this.doClose(); }
// } }).catch(() => {
// }).catch(() => { this.doClose();
// this.doClose(); this.$emit('noticeInfo');
// this.$emit('noticeInfo'); });
// });
} }
}); });
}, },

View File

@ -99,7 +99,7 @@ export default {
if (this.$route.query.lineCode == '15' || this.$route.query.lineCode == '16') { if (this.$route.query.lineCode == '15' || this.$route.query.lineCode == '16') {
this.tabList = [ this.tabList = [
{label: '大铁进路', name:'bigRoutingOperate', menus:BigRoutingOperate}, {label: '大铁进路', name:'bigRoutingOperate', menus:BigRoutingOperate},
{label: '指示灯关联', name: 'indicatorAssociatedInfo', menus: IndicatorAssociatedInfo} {label: '出入口', name: 'indicatorAssociatedInfo', menus: IndicatorAssociatedInfo}
// {label: this.$t('map.routing'), name:'routing', menus:RoutingOperate} // {label: this.$t('map.routing'), name:'routing', menus:RoutingOperate}
]; ];
this.enabledTab = 'bigRoutingOperate'; this.enabledTab = 'bigRoutingOperate';

View File

@ -1,5 +1,5 @@
<template> <template>
<el-dialog v-dialogDrag title="指示灯关联关系预览" :visible.sync="show" width="95%" :before-do-close="doClose" append-to-body> <el-dialog v-dialogDrag title="出入口预览" :visible.sync="show" width="95%" :before-do-close="doClose" append-to-body>
<div> <div>
<QueryListPage <QueryListPage
ref="queryListPage" ref="queryListPage"
@ -39,6 +39,13 @@
queryForm: { queryForm: {
show:false show:false
}, },
ioDirectionMap:{
'DOWN_IN_STATION':'下行进站',
'UP_IN_STATION':'上行进站',
'DOWN_OUT_STATION':'下行出站',
'UP_OUT_STATION':'上行出站',
'BOTH_WAY_STATION':'双向',
},
queryList: { queryList: {
query: this.queryFunction, query: this.queryFunction,
height:'500px', height:'500px',
@ -64,6 +71,13 @@
title: '运行方向', title: '运行方向',
prop: 'labelEnum' prop: 'labelEnum'
}, },
{
title: '出入口类型',
prop: 'ioDirection',
type: 'tag',
columnValue: (row) => { return this.getIoDirectionName(row.ioDirection); },
tagType: (row) => { return ''; }
},
{ {
title: '关联区段列表', title: '关联区段列表',
prop: 'sectionList', prop: 'sectionList',
@ -139,6 +153,9 @@
const device = this.$store.getters['map/getDeviceByCode'](code); const device = this.$store.getters['map/getDeviceByCode'](code);
return device ? device.name : ''; return device ? device.name : '';
}, },
getIoDirectionName(ioDirection){
return this.ioDirectionMap[ioDirection]||'';
},
getSectionName(sectionList) { getSectionName(sectionList) {
const sectionName = []; const sectionName = [];
sectionList.forEach(item => { sectionList.forEach(item => {
@ -150,11 +167,11 @@
deleteRoute(index, row) { deleteRoute(index, row) {
// this.mapInfo.id, // this.mapInfo.id,
deleteAssist( row.id).then(res=>{ deleteAssist( row.id).then(res=>{
this.$message.success('删除指示灯关联信息成功'); this.$message.success('删除出入口信息成功');
this.reloadTable(); this.reloadTable();
this.$emit('refresh'); this.$emit('refresh');
}).catch(error=>{ }).catch(error=>{
this.$messageBox('删除指示灯关联信息失败:' + error.meessage); this.$messageBox('删除出入口信息失败:' + error.meessage);
}); });
}, },
handleUpdate(index, row) { handleUpdate(index, row) {

View File

@ -31,6 +31,16 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="出入口类型" prop="ioDirection">
<el-select v-model="addModel.ioDirection">
<el-option
v-for="item in ioDirectionList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="关联区段:" prop="sectionList"> <el-form-item label="关联区段:" prop="sectionList">
<el-select v-model="addModel.sectionList" multiple :placeholder="$t('map.pleaseSelect')"> <el-select v-model="addModel.sectionList" multiple :placeholder="$t('map.pleaseSelect')">
<el-option <el-option
@ -146,11 +156,13 @@ export default {
isModify:false, isModify:false,
mainDeviceList: [], mainDeviceList: [],
directionLabelList: ConstConfig.ConstSelect.directionLabelList, directionLabelList: ConstConfig.ConstSelect.directionLabelList,
ioDirectionList: ConstConfig.ConstSelect.ioDirectionList,
addModel:{ addModel:{
id: '', id: '',
name:'', name:'',
stationCode: '', stationCode: '',
labelEnum:'', labelEnum:'',
ioDirection:'',
sectionList: [], sectionList: [],
signalCode: '', signalCode: '',
runModel: '', runModel: '',
@ -169,6 +181,9 @@ export default {
'labelEnum': [ 'labelEnum': [
{ required: true, message: '请选择运行方向', trigger: 'change' } { required: true, message: '请选择运行方向', trigger: 'change' }
], ],
'ioDirection': [
{ required: true, message: '请选择出入口类型', trigger: 'change' }
],
'signalCode': [ 'signalCode': [
{ required: true, message: '请选择关联信号机', trigger: 'change' } { required: true, message: '请选择关联信号机', trigger: 'change' }
], ],
@ -263,6 +278,7 @@ export default {
name:'', name:'',
stationCode: '', stationCode: '',
labelEnum:'', labelEnum:'',
ioDirection:'',
sectionList: [], sectionList: [],
signalCode: '', signalCode: '',
runModel: '', runModel: '',

View File

@ -1,4 +1,10 @@
<template> <template>
<div>
<div class="editContentTab">
<div v-if="tabVisible" class="editContentTabLable" @click="minisize">
<span class="titleStyle">{{ $t('trainingManage.editTagTitle') }}</span>
</div>
</div>
<el-dialog :title="title" :visible.sync="dialogVisible" width="500px" :modal="false" :before-close="doClose" center> <el-dialog :title="title" :visible.sync="dialogVisible" width="500px" :modal="false" :before-close="doClose" center>
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" /> <data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -6,18 +12,33 @@
<el-button @click="doClose">{{ $t('global.cancel') }}</el-button> <el-button @click="doClose">{{ $t('global.cancel') }}</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div>
</template> </template>
<script> <script>
import { updateTrainingBlob, getTrainingAll } from '@/api/trainingManage'; import { updateTrainingContent, getTrainingAll } from '@/api/trainingManage';
import Vue from 'vue'; import Vue from 'vue';
export default { export default {
name: 'UpdateBlob', name: 'EditContent',
props: {}, props: {},
data() { data() {
return { return {
tabVisible: false,
dialogVisible: false, dialogVisible: false,
editData: {
id: '',
mapId: '',
mapLocation: '',
bgScene: '',
runPlanId:'',
operaList: '',
stepList: '',
scoringRuleList: '',
memberList: '',
playerIdList: '',
failureCondition: ''
},
formModel: { formModel: {
id: '', id: '',
mapId: '', mapId: '',
@ -55,17 +76,29 @@ export default {
] ]
}; };
return form; return form;
},
rules() {
const crules = {
type: [
{ required: true, message: '请选择实训类型', trigger: 'blur' }
]
};
return crules;
} }
}, },
methods: { methods: {
minisize() {
this.dialogVisible = true;
},
doShow(data) { doShow(data) {
this.getTrainingAll(data); this.getTrainingAll(data);
this.dialogVisible = true; this.dialogVisible = true;
this.tabVisible = true;
}, },
doCreate() { doCreate() {
this.$refs.dataform.validateForm(async() => { this.$refs.dataform.validateForm(async() => {
console.log(this.formModel, '---this.formModel---'); console.log(this.formModel, '---this.formModel---');
updateTrainingBlob(this.formModel).then(res => { updateTrainingContent(this.formModel).then(res => {
console.log('更新大数据成功', res); console.log('更新大数据成功', res);
this.doClose(); this.doClose();
}).catch(err => { }).catch(err => {
@ -74,7 +107,7 @@ export default {
}); });
}, },
doClose() { doClose() {
this.$refs.dataform.resetForm(); // this.$refs.dataform.resetForm();
this.dialogVisible = false; this.dialogVisible = false;
}, },
getTrainingAll(data) { getTrainingAll(data) {
@ -103,4 +136,22 @@ export default {
/deep/ .el-dialog--center .el-dialog__body{ /deep/ .el-dialog--center .el-dialog__body{
padding: 25px 65px 30px 10px; padding: 25px 65px 30px 10px;
} }
.editContentTab{
position: absolute;
z-index: 10;
right: 12px;
top: calc(45% + 100px);
}
.editContentTabLable{
position: absolute;
background: #fff;
border-radius: 5px 0px 0px 5px ;
padding: 5px 0px;
width: 23px;
text-align: center;
left: 50%;
transform: translateX(-50%);
cursor: pointer;
top:-28px;
}
</style> </style>

View File

@ -6,15 +6,18 @@
<el-button size="small" @click="showList">实训列表</el-button> <el-button size="small" @click="showList">实训列表</el-button>
</el-button-group> </el-button-group>
</div> </div>
<TrainingList ref="trainingList" /> <TrainingList ref="trainingList" @editBlob="editBlob" />
<EditContent ref="EditBlob" v-dialogDrag />
</div> </div>
</template> </template>
<script> <script>
import TrainingList from './trainingList.vue'; import TrainingList from './trainingList.vue';
import EditContent from './EditContent.vue';
export default { export default {
name:'DemonMenu', name:'DemonMenu',
components:{ components:{
TrainingList TrainingList,
EditContent
}, },
props:{ props:{
}, },
@ -48,6 +51,9 @@ export default {
}, },
showList() { showList() {
this.$refs.trainingList.doShow(); this.$refs.trainingList.doShow();
},
editBlob(data) {
this.$refs.EditBlob.doShow(data);
} }
} }

View File

@ -1,14 +1,14 @@
<template> <template>
<el-dialog v-dialogDrag title="实训管理" :visible.sync="dialogVisible" width="1000px" :before-close="doClose" center> <el-dialog v-dialogDrag title="实训管理" :visible.sync="dialogVisible" width="1000px" :before-close="doClose" center>
<div> <div>
<div class="scriptHeader"> <div class="trainingHeader">
<div class="scriptList">实训草稿列表</div> <div class="trainingList">实训草稿列表</div>
<div class="flexNull" /> <div class="flexNull" />
<el-button size="small" type="primary" class="createScript" @click="handleCreate">{{ $t('scriptRecord.scriptCreate') }}</el-button> <el-button size="small" type="primary" class="createScript" @click="handleCreate">{{ $t('trainingManage.create') }}</el-button>
</div> </div>
<QueryListPage ref="queryListPage" :card-padding="10" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" /> <QueryListPage ref="queryListPage" :card-padding="10" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
<Create ref="create" v-dialogDrag @edit="getListData" /> <Create ref="create" v-dialogDrag @edit="getListData" />
<EditBlob ref="EditBlob" v-dialogDrag />
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
@ -18,14 +18,13 @@ import { getTrainingList} from '@/api/trainingManage';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import ConstConfig from '@/scripts/ConstConfig'; import ConstConfig from '@/scripts/ConstConfig';
import Create from './create.vue'; import Create from './create.vue';
import EditBlob from './editBlob.vue';
import { deleteTraining, publishTraining, updateTrainingBlob } from '@/api/trainingManage'; import { deleteTraining, publishTraining } from '@/api/trainingManage';
export default { export default {
name: 'TrainingList', name: 'TrainingList',
components:{ components:{
Create, Create
EditBlob
}, },
props: {}, props: {},
data() { data() {
@ -46,52 +45,58 @@ export default {
indexShow: true, indexShow: true,
columns: [ columns: [
{ {
title: '实训名称', title: this.$t('trainingManage.name'),
prop: 'name' prop: 'name'
}, },
{ {
title: '描述', title: this.$t('trainingManage.description'),
prop: 'description' prop: 'description'
}, },
{ {
title: '类型', title: this.$t('trainingManage.type'),
prop: 'type', prop: 'type',
type: 'tag', type: 'tag',
columnValue: (row) => { return this.covertData(row); }, columnValue: (row) => { return this.covertData(row); },
tagType: (row) => { return ''; } tagType: (row) => { return ''; }
}, },
{ {
title: '标签', title: this.$t('trainingManage.labelJson'),
prop: 'labelJson' prop: 'labelJson'
}, },
{ {
type: 'button', type: 'button',
title: this.$t('scriptRecord.operate'), title: this.$t('trainingManage.operate'),
width: '450', width: '450',
buttons: [ buttons: [
{ {
name: this.$t('scriptRecord.scriptRecord'), name: this.$t('trainingManage.record'),
handleClick: this.drawUp, handleClick: this.drawUp,
type: 'success', type: 'success',
showControl:(row) => { return row.id; } showControl:(row) => { return row.id; }
}, },
{ {
name: this.$t('scriptRecord.scriptModify'), name: this.$t('trainingManage.modify'),
handleClick: this.handleModify, handleClick: this.handleModify,
type: 'primary', type: 'primary',
showControl:(row) => { return row.id; } showControl:(row) => { return row.id; }
}, },
{ {
name: this.$t('scriptRecord.scriptDelete'), name: this.$t('trainingManage.delete'),
handleClick: this.deleteScript, handleClick: this.deleteScript,
type: 'danger', type: 'danger',
showControl:(row) => { return row.id; } showControl:(row) => { return row.id; }
}, },
{ {
name: this.$t('scriptRecord.publish'), name: this.$t('trainingManage.publish'),
handleClick: this.publishScript, handleClick: this.publishScript,
type: 'primary', type: 'primary',
showControl:(row) => { return row.id; } showControl:(row) => { return row.id; }
},
{
name: this.$t('trainingManage.preview'),
handleClick: this.previewScript,
type: 'primary',
showControl:(row) => { return row.id; }
} }
] ]
} }
@ -137,7 +142,8 @@ export default {
}, },
drawUp(index, row) { drawUp(index, row) {
console.log('编辑', index, row); console.log('编辑', index, row);
this.$refs.EditBlob.doShow(row); this.$emit('editBlob', row);
this.doClose();
}, },
handleModify(index, row) { handleModify(index, row) {
console.log('修改', index, row); console.log('修改', index, row);
@ -164,6 +170,9 @@ export default {
console.log('发布实训失败', err); console.log('发布实训失败', err);
}); });
}, },
previewScript(index, row) {
console.log('预览', index, row);
},
getListData() { getListData() {
this.$refs.queryListPage && this.$refs.queryListPage.commitQuery(); this.$refs.queryListPage && this.$refs.queryListPage.commitQuery();
} }
@ -174,7 +183,7 @@ export default {
/deep/ .el-dialog--center .el-dialog__body{ /deep/ .el-dialog--center .el-dialog__body{
padding: 10px 25px 10px 25px; padding: 10px 25px 10px 25px;
} }
.scriptHeader { .trainingHeader {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;