rt-sim-training-client/src/views/scriptManage/scriptRecord/getAction.vue

285 lines
11 KiB
Vue
Raw Normal View History

2019-07-26 13:32:43 +08:00
<template>
2019-08-20 13:21:38 +08:00
<div class="actionPaneInner">
2019-08-09 10:33:11 +08:00
<div class="actionList">
2019-08-20 18:31:48 +08:00
<span class="titleStyle">剧本编制</span>
2019-08-09 10:33:11 +08:00
</div>
2019-08-09 17:26:33 +08:00
<div class="tab-pane-big">
2019-08-21 20:16:47 +08:00
<el-card class="scriptTop">
<add-role :group="group" ref="addRole"></add-role>
</el-card>
2019-08-21 18:45:16 +08:00
<div class="scriptPane">
<!-- <el-card class="scriptTop">
<template>
<div class="selectRole">选择角色</div>
<el-transfer v-model="selectRoleData" :data="allRoleData" class="elTransfer" :titles="['待选成员角色', '已选成员角色']"></el-transfer>
</template>
</el-card> -->
2019-08-21 20:16:47 +08:00
2019-08-21 18:45:16 +08:00
<div class="scriptBottom">
<el-scrollbar wrapClass="scrollbar-wrapper" ref="elScrollbar" class="elScrollbar">
<add-action ref="addBehavior" :group="group" @create="create" :buttonName="buttonName" :operateType="operateType" @modifyButtonName="modifyButtonName" class="addScript"></add-action>
</el-scrollbar>
<div class="block actionListTable">
<el-scrollbar wrapClass="scrollbar-wrapper" ref="elActionScrollbar">
<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>
<span class="otherInfo" v-html="actionInfo.otherInfo"></span>
<span v-if="actionInfo.isCoversition">
<span class="roleClass">{{actionInfo.memberName}}</span>
<span></span>
<span class="roleClass">{{actionInfo.targetName}}</span>
<span>: </span>
<span>{{actionInfo.reply}}</span>
</span>
<span v-else>
<span class="roleClass">{{actionInfo.memberName}}</span>
<span>执行指令: </span>
<span class="commandStyle">{{actionInfo.command}}</span>
</span>
</div>
<div class="btnGroup">
<el-button type="primary" size="mini" style="margin-left:10px;" @click="modifyAction(actionInfo.row)" v-if="actionInfo.visible">修改</el-button>
<!-- <el-button type="danger" size="mini" @click="deleteAction(actionInfo.id)">删除</el-button> -->
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</div>
</div>
2019-08-16 19:33:40 +08:00
</div>
2019-08-09 17:26:33 +08:00
</div>
2019-07-26 13:32:43 +08:00
</div>
</template>
<script>
import Vue from 'vue';
2019-08-08 10:31:46 +08:00
import AddAction from './addAction';
2019-08-21 18:45:16 +08:00
import AddRole from './addRole';
import {getScriptRecord,deleteScriptAction,getAvailableDeviceCommand,getScriptPlayMember,getScriptMemberData} from '@/api/simulation';
2019-08-16 19:33:40 +08:00
import ConstConfig from '@/scripts/ConstConfig';
2019-07-26 13:32:43 +08:00
export default {
2019-08-08 10:31:46 +08:00
name: 'getAction',
2019-07-26 13:32:43 +08:00
props: {
group: {
type: String,
required: true
},
},
data() {
return {
2019-08-16 19:33:40 +08:00
// actionList:[],
actionInfoList:[],
deviceCommandList:[],
reverse:true,
2019-08-08 10:31:46 +08:00
loading:true,
behaviorName:"",
memberName:"",
operateType:"add",
2019-08-20 18:31:48 +08:00
buttonName:"添加对话",
2019-07-26 13:32:43 +08:00
}
},
2019-08-08 10:31:46 +08:00
components: {
AddAction,
2019-08-21 18:45:16 +08:00
AddRole
2019-08-08 10:31:46 +08:00
},
2019-07-26 13:32:43 +08:00
mounted(){
2019-08-19 18:24:06 +08:00
this.loadInitData();
2019-07-26 13:32:43 +08:00
},
2019-08-20 18:31:48 +08:00
watch:{
actionInfoList: function(val){
this.$nextTick(function(){
var div = this.$refs['elActionScrollbar'].$refs['wrap'];
div.scrollTop=this.$refs['elActionScrollbar'].wrap.scrollHeight;
});
}
},
2019-07-26 13:32:43 +08:00
methods:{
2019-08-19 18:24:06 +08:00
loadInitData() {
let group=this.$route.query.group;
2019-08-20 17:54:40 +08:00
let data={role:"Driver"};
getAvailableDeviceCommand(data).then(response=>{
2019-08-16 19:33:40 +08:00
this.deviceCommandList=response.data;
this.loadOtherData(this.$route.query);
});
},
loadOtherData(obj){
2019-07-26 13:32:43 +08:00
let group=obj.group;
2019-08-16 09:25:12 +08:00
getScriptRecord(group).then(response=>{
2019-08-21 14:28:34 +08:00
this.$store.dispatch('scriptRecord/updateBgSet', response.data.bgSet);
2019-08-16 19:33:40 +08:00
this.actionInfoList=[];
let roleTypeList=ConstConfig.ConstSelect.roleType;
let memberVOList=JSON.stringify(response.data.memberVOList);
roleTypeList.forEach(function(element){
let rolename=element.value;
memberVOList=memberVOList.replace(new RegExp(rolename,'g'),element.label);
});
memberVOList=JSON.parse(memberVOList);
let actionList=response.data.actionVOList;
actionList.forEach(element => {
let member=memberVOList.find(elem=>{return elem.id==element.memberId});
let memberName=member.name==undefined?"":" - "+member.name;
switch(element.type)
{
case "Conversation":
{
let target=memberVOList.find(elem=>{return elem.id==element.targetId});
let targetName=target.name==undefined?"":" - "+target.name;
this.actionInfoList.push({id:element.id,isCoversition:true,memberName:member.role+memberName,targetName:target.role+targetName,reply:element.reply,row:element,visible:true});
2019-08-16 19:33:40 +08:00
break;
}
case "Command":
{
let deviceCommand=this.deviceCommandList.find(elem=>{return elem.deviceCommand==element.deviceCommand});
switch(element.deviceCommand)
{
case 'Train_Manual_Route_Blocking_Drive':
{
this.actionInfoList.push({id:element.id,isCoversition:false,memberName:member.role+memberName,command:deviceCommand.label,row:element,visible:false});
2019-08-16 19:33:40 +08:00
break;
}
case 'Train_Manual_Limit_Drive':
{
this.actionInfoList.push({id:element.id,isCoversition:false,memberName:member.role+memberName,command:deviceCommand.label,row:element,visible:false});
2019-08-16 19:33:40 +08:00
break;
}
default:
{
}
}
break;
}
}
});
2019-08-16 09:25:12 +08:00
if(response.data.mapLocation)
{
let mapLocation={"offsetX":response.data.mapLocation.x,"offsetY":response.data.mapLocation.y,"scaleRate":response.data.mapLocation.scale};
this.$store.dispatch('scriptRecord/updateMapLocation', mapLocation);
}
2019-08-08 18:41:44 +08:00
this.loading=false;
2019-07-26 13:32:43 +08:00
});
},
deleteAction(row){
let group=this.$props.group;
2019-08-16 19:33:40 +08:00
deleteScriptAction(group,row).then(resp => {
2019-07-26 13:32:43 +08:00
this.reloadTable();
2019-08-08 10:31:46 +08:00
this.$message.success('删除行为动作成功');
2019-07-26 13:32:43 +08:00
}).catch(error => {
2019-08-08 10:31:46 +08:00
this.$messageBox(`删除行为动作失败: ${error.message}`);
2019-07-26 13:32:43 +08:00
});
},
reloadTable(){
2019-08-19 18:24:06 +08:00
this.loadInitData();
2019-07-26 13:32:43 +08:00
},
2019-08-20 18:31:48 +08:00
create(data){
2019-08-08 10:31:46 +08:00
this.reloadTable();
},
modifyAction(row){
this.operateType="modify";
2019-08-20 18:31:48 +08:00
this.buttonName="修改对话"
2019-08-08 10:31:46 +08:00
this.$refs.addBehavior.doShow(row);
},
modifyButtonName(){
2019-08-20 18:31:48 +08:00
this.buttonName="添加对话",
2019-08-08 10:31:46 +08:00
this.operateType="add"
}
2019-07-26 13:32:43 +08:00
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss";
2019-08-20 13:21:38 +08:00
.actionPaneInner{
height:100%;
2019-08-21 20:16:47 +08:00
padding-top:45px;
2019-08-20 13:21:38 +08:00
}
.addScript{
float:left;
2019-08-21 10:24:55 +08:00
width:380px;
display: inline-block;
}
2019-07-26 13:32:43 +08:00
.actionListTable{
font-size: 15px;
2019-08-21 10:24:55 +08:00
width:380px;
display: inline-block;
2019-08-21 10:24:55 +08:00
margin-left:380px;
2019-08-20 13:21:38 +08:00
height:100%;
2019-07-26 13:32:43 +08:00
}
.actionList{
2019-08-21 20:16:47 +08:00
height: 35px;
font-size: 18px;
padding-top: 5px;
2019-08-20 13:21:38 +08:00
position: absolute;
top: 0;
left: 0;
2019-08-21 10:24:55 +08:00
width: 740px;
2019-08-20 13:21:38 +08:00
border-bottom: 1px #ccc solid;
2019-07-26 13:32:43 +08:00
}
2019-08-08 10:31:46 +08:00
.titleStyle{
margin-left:10px;
}
2019-08-09 17:26:33 +08:00
.tab-pane-big{
2019-08-20 13:21:38 +08:00
height:100%;
padding-bottom: 20px;
position: relative;
2019-08-09 17:26:33 +08:00
}
2019-08-16 19:33:40 +08:00
.actionTable{
2019-08-21 10:24:55 +08:00
width:280px;
padding: 15px 0px 10px 15px;
2019-08-16 20:06:14 +08:00
display: inline-block;
line-height: 200%;
2019-08-16 19:33:40 +08:00
}
.btnGroup{
2019-08-16 20:06:14 +08:00
padding: 10px 10px 10px 10px;
float:right;
vertical-align: top;
display: inline-block;
2019-08-16 19:33:40 +08:00
}
2019-08-19 18:24:06 +08:00
.vertialLine{
2019-08-20 13:21:38 +08:00
height: 100%;
2019-08-19 18:24:06 +08:00
margin-left: 440px;
border-right: 1px #dadada solid;
2019-08-20 13:21:38 +08:00
position:absolute;
2019-08-19 18:24:06 +08:00
width: 0px;
}
2019-08-20 13:21:38 +08:00
.el_timeline{
2019-08-21 10:24:55 +08:00
width: 360px;
2019-08-20 13:21:38 +08:00
margin-top:10px;
}
2019-08-20 15:41:54 +08:00
.elScrollbar{
2019-08-21 10:24:55 +08:00
width: 380px;
2019-08-20 15:41:54 +08:00
position: absolute;
}
.roleClass{
color:#409EFF
}
.commandStyle{
color:#F00;
}
2019-08-21 18:45:16 +08:00
.scriptPane{
height: 100%;
2019-08-21 20:16:47 +08:00
padding-top:200px;
2019-08-21 18:45:16 +08:00
}
.scriptBottom{
height: 100%;
position: relative;
}
.scriptTop{
position: absolute;
top: 0;
left: 20px;
2019-08-21 20:16:47 +08:00
padding: 10px 10px;
2019-08-21 18:45:16 +08:00
width: 730px;
}
// .elTransfer{
// height:230px;
// margin-left:100px;
// }
// .selectRole{
// font-size: 15px;
// padding: 0px 20px 15px 15px;
// }
2019-07-26 13:32:43 +08:00
</style>