rt-sim-training-client/src/views/scriptManage/getAction.vue
2020-11-04 14:48:36 +08:00

330 lines
14 KiB
Vue

<template>
<el-scrollbar ref="elActionScrollbar" wrap-class="scrollbar-wrapper" class="scriptBottom" :style="{width:370+'px',height:size.height+'px'}">
<el-timeline :reverse="reverse" class="el_timeline">
<el-timeline-item v-for="(actionInfo,index) in actionInfoList" :key="index">
<el-card>
<div class="actionTable">
<span class="detail" v-html="actionInfo.detail" />
<span class="otherInfo" v-html="actionInfo.otherInfo" />
<span v-if="actionInfo.isStartCoversition">
<span class="roleClass">{{ actionInfo.memberName }}</span>
<span>邀请</span>
<span class="roleClass">{{ actionInfo.targetName }}</span>
<span>开始会话</span>
</span>
<span v-else-if="actionInfo.isDrive">
<span class="roleClass">{{ actionInfo.memberName }}</span>
<span>把车开到</span>
<span class="commandStyle">区段{{ actionInfo.targetName }}</span>
</span>
<!-- <span v-else-if="actionInfo.isClose">
<span class="roleClass">{{ actionInfo.memberName }}</span>
<span>结束了会话</span>
</span> -->
<span v-else-if="actionInfo.isCoversition">
<span class="roleClass">{{ actionInfo.memberName }}</span>
<!-- <span>{{ $t('scriptRecord.speakTo') }}</span> -->
<!-- <span class="roleClass">{{ actionInfo.targetName }}</span> -->
<span>: </span>
<span v-if="!actionInfo.isModify">{{ actionInfo.reply }}</span>
<textarea v-else v-model="actionInfo.modifyText" type="text" class="modifyText" />
</span>
<span v-else-if="actionInfo.isOperation">
<span class="roleClass">{{ actionInfo.memberName }}</span>
<span>{{ $t('scriptRecord.executeCommandTips') }}</span>
<span class="commandStyle">{{ actionInfo.command }}</span>
</span>
<span v-else-if="actionInfo.isCommand">
<span class="roleClass">{{ actionInfo.memberName }}</span>
<span>对</span>
<span class="roleClass">{{ actionInfo.targetName }}</span>
<span>下达了</span>
<span class="commandStyle">{{ actionInfo.command }}</span>
</span>
</div>
<div class="btnGroup">
<el-button type="primary" size="mini" @click="handleCondition(actionInfo)">触发条件</el-button>
<el-button v-if="actionInfo.visible && !actionInfo.isModify" type="primary" size="mini" style="margin-left:10px;" @click="modifyAction(actionInfo)">{{ $t('scriptRecord.modifyConversitionButton') }}</el-button>
<el-button v-if="actionInfo.visible && actionInfo.isModify" :loading="modifyTextLoading" type="danger" size="mini" style="margin-left:10px;" @click="confirmModify(actionInfo)">确定</el-button>
<el-button v-if="actionInfo.visible && actionInfo.isModify" type="" size="mini" style="margin-left:10px;" @click="cancleModify(actionInfo)">取消</el-button>
<el-button v-if="actionInfo.visible && !actionInfo.isModify" type="danger" size="mini" :loading="deleteLoading" @click="deleteAction(actionInfo.id)">删除</el-button>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</template>
<script>
import {getScriptAllAction, modifyScriptActionNew } from '@/api/simulation';
import {deleteScriptAction } from '@/api/script';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
export default {
name: 'GetActionNew',
props: {
group: {
type: String,
required: true
},
size: {
type: Object,
required: true
},
memberList:{
type:Array,
required:true
}
},
data() {
return {
actionInfoList: [],
deviceCommandList: [],
reverse: false,
loading: true,
// isModify:false,
// modifyText:'',
modifyTextLoading:false,
deleteLoading:false,
// behaviorName:"",
memberName: ''
};
},
watch: {
actionInfoList: function(val) {
this.$nextTick(function() {
var div = this.$refs['elActionScrollbar'].$refs['wrap'];
div.scrollTop = this.$refs['elActionScrollbar'].wrap.scrollHeight;
});
},
'$store.state.socket.scriptAction':function(val) {
this.covertData(this.memberList, val);
},
'memberList':function(val) {
this.loadInitData();
}
},
mounted() {
},
methods: {
loadInitData() {
this.loadOtherData(this.$route.query);
},
handleCondition(actionInfo) {
this.$emit('showConditionManage', actionInfo);
},
covertData(memberList, element) {
const member = memberList.find(elem=>{ return elem.id == element.memberId; });
const memberName = member.type + member.deviceName + (member.name ? member.name : '');
switch (element.type) {
case 'Start_Conversation': {
// isStartCoversition
const targetNameList = [];
if (element.communicationObject) {
if (element.communicationObject == 'ALL_STATION') {
targetNameList.push('所有车站');
} else if (element.communicationObject == 'ALL_TRAIN') {
targetNameList.push('所有司机');
}
} else {
element.conversationMemberIds.forEach(id=>{
if (member.id != id) {
const userName = memberList.find(elem=>{ return elem.id == id; });
targetNameList.push(userName.type + userName.deviceName + (userName.name ? userName.name : ''));
}
});
}
this.actionInfoList.push({id: element.id, isStartCoversition: true, memberName: memberName, targetName:targetNameList.toString() });
break;
}
case 'Drive': {
this.actionInfoList.push({id: element.id, isDrive: true, memberName: memberName, targetName:this.covertSection(element.targetSectionCode)});
break;
}
case 'Conversation':
{
this.actionInfoList.push({id: element.id, isCoversition: true, memberName: memberName, reply: element.content, row: element, visible: true, isModify:false, modifyText:''});
break;
}
// case 'Exit_Conversation': {
// this.actionInfoList.push({id: element.id, isClose: true, memberName: memberName});
// break;
// }
case 'Operation':
{
// const command = CommandHandler.getScriptDefinition(element.operationType);
const commandName = element.operationType;
if (commandName != 'Set_Fault' && commandName != 'Cancel_Fault' ) {
const list = ['Train_Update_Type',
'Train_Add_Train_Trace',
'Train_Remove_Train_Trace',
'Train_Move_Train_Trace',
'Train_Set_Plan',
'Train_Set_Head',
'Train_Set_Manual',
'Train_Set_Crew_Number',
'Train_Tag_Atp_Cut',
'Train_Tag_Atp_Recover',
'Train_Allow_Pass',
'Train_Info'];
let operateType = commandName.split('_')[0];
if (list.includes(commandName)) {
operateType = 'TrainWindow';
}
if (operateType == 'CM') {
operateType = 'ControlConvertMenu';
}
const operateName = Object.values(CMD[operateType]).find(res=>{ return res.value == commandName; });
const deviceTypeList = {Section:'区段', Switch:'道岔', Signal:'信号机', Stand:'站台', Station:'车站', TrainWindow:'车次窗', ControlConvertMenu:'控制模式', Driver:'司机', Train:'列车'};
const operateTypeName = deviceTypeList[operateType];
this.actionInfoList.push({id: element.id, isOperation: true, memberName: memberName, command: operateTypeName + '(' + operateName.label + ')', row: element, visible: false});
} else {
// deviceFaultType
// element.operationParamMap.faultType;
// '(' + operateName.label + ')'
if (commandName == 'Set_Fault') {
this.actionInfoList.push({id: element.id, isOperation: true, memberName: memberName, command: '设置故障', row: element, visible: false});
} else if (commandName == 'Cancel_Fault') {
this.actionInfoList.push({id: element.id, isOperation: true, memberName: memberName, command: '取消故障', row: element, visible: false});
}
}
break;
}
case 'Command': {
const targetName = memberList.find(elem=>{ return elem.id == element.commandInitiateVO.targetMemberId; });
const CommandList = {
Drive_Ahead:'确认运行至前方站',
Route_Block_Drive:'进路闭塞法行车',
Drive_Through_The_Guide_Signal:'越引导信号行驶',
Drive_Through_The_Red_Light:'越红灯行驶',
Drive_In_Urm_Mode:'URM模式驾驶',
Set_Speed_Limit:'设置限速',
Open_Or_Close_Door:'开关门',
Switch_Hook_Lock: '道岔钩锁'
};
this.actionInfoList.push({id: element.id, isCommand: true, memberName: memberName, command: CommandList[element.commandInitiateVO.commandType], targetName:targetName.name, row: element, visible: false});
break;
}
}
},
covertSection(sectionCode) {
const section = this.$store.getters['map/getDeviceByCode'](sectionCode);
if (section && section.name) {
return section.name;
} else {
return '';
}
},
loadOtherData(obj) {
const group = obj.group;
getScriptAllAction(group).then(resp=>{
this.actionInfoList = [];
const actionList = resp.data;
actionList.forEach(element => {
this.covertData(this.memberList, element);
});
}).catch(error => {
this.$message(error.message);
});
},
reloadTable() {
this.loadInitData();
},
modifyAction(actionInfo) {
actionInfo.modifyText = actionInfo.row.content;
actionInfo.isModify = true;
},
cancleModify(actionInfo) {
actionInfo.modifyText = '';
actionInfo.isModify = false;
this.modifyTextLoading = false;
},
confirmModify(actionInfo) {
const row = actionInfo.row;
if (actionInfo.modifyText != row.content) {
const data = {id:row.id};
data.content = actionInfo.modifyText;
this.modifyTextLoading = true;
modifyScriptActionNew(this.group, data).then(response=>{
actionInfo.modifyText = '';
actionInfo.isModify = false;
this.modifyTextLoading = false;
this.reloadTable();
this.$store.dispatch('scriptRecord/updateCoversitionInfo');
}).catch(error=>{
this.modifyTextLoading = false;
this.$messageBox('修改会话失败:' + error.message);
});
} else {
if (!actionInfo.modifyText) {
this.$messageBox('请输入修改的会话');
} else {
actionInfo.modifyText = '';
actionInfo.isModify = false;
}
}
},
deleteAction(actionId) {
this.deleteLoading = true;
deleteScriptAction(this.group, actionId).then(res=>{
this.deleteLoading = false;
this.reloadTable();
}).catch(error=>{
this.deleteLoading = false;
this.$messageBox('删除会话/动作失败:' + error.message);
});
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss";
.actionTable{
width:280px;
padding: 15px 0px 10px 15px;
display: inline-block;
line-height: 200%;
}
.btnGroup{
padding: 0px 10px 10px 10px;
float: right;
vertical-align: top;
display: inline-block;
}
.el_timeline{
width: 350px;
margin-top:5px;
padding-left: 25px;
}
.el-timeline{
font-size:13px;
}
.roleClass{
color:#409EFF
}
.commandStyle{
color:#F00;
}
.scriptPane{
height: 100%;
padding-top:200px;
}
.scriptBottom{
margin-left:300px;
margin-top: 0px;
font-size:13px;
}
.modifyText{
height: 70px;
border: 1px #ccc solid;
border-radius: 3px;
width: 270px;
outline: none;
font-size: 13px;
resize: none;
vertical-align: top;
padding: 5px;
line-height: 20px;
}
</style>