Merge remote-tracking branch 'origin/test'

This commit is contained in:
fan 2023-06-01 18:15:18 +08:00
commit 3855087abd
24 changed files with 512 additions and 188 deletions

View File

@ -265,3 +265,11 @@ export function loadTrainingBg(group, trainingId) {
method: 'post'
});
}
/** 预备开始场景 */
export function prepareScene(group, params) {
return request({
url:`/api/training2Simulation/${group}/prepare/start`,
method: 'post',
params
});
}

View File

@ -182,3 +182,10 @@ export function importTrainingData(data) {
data
});
}
/** 实训跳转到当前步骤*/
export function jumpToTraining(group, stepId) {
return request({
url: `/api/training2Simulation/${group}/jumpTo/${stepId}`,
method: 'put'
});
}

View File

@ -318,11 +318,12 @@ export default class Switch extends Group {
/** 名称动画*/
nameTextAnimation() {
this.name.getNameText().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(1000, { textFill: this.style.Switch.text.lossColor })
.when(2000, { textFill: this.style.backgroundColor })
.start();
if (this.name.getNameText()) {
this.name.getNameText().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(1000, { textFill: this.style.Switch.text.lossColor })
.when(2000, { textFill: this.style.backgroundColor });
}
this.name.getTextRect().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })

View File

@ -0,0 +1,163 @@
<template>
<el-dialog
v-dialogDrag
:class="popClass+' train-set-plan'"
:title="title"
:visible.sync="show"
width="360px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row>
<el-col :span="11">车组号</el-col>
<el-col :span="11" :offset="1">
<el-select v-model="addModel.groupNumber" size="mini">
<el-option
v-for="item in trainList"
:key="item.code"
:disabled="disabledTrain(item.code)"
:label="item.code"
:value="item.code"
/>
</el-select>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="10">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="5">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="ningbo-01__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import {mouseCancelState} from '@/jmapNew/theme/components/utils/menuItemStatus';
export default {
name: 'TrainSetPlan',
components: {
NoticeInfo
},
props:{
popClass:{
type:String,
required:true
}
},
data() {
return {
trainNoList: [],
selected: null,
messageTip1:'',
addModel: {
groupNumber: '',
sectionCode: ''
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'mapConfig',
'trainList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.editTrainId.menu.domId : '';
},
title() {
return '加载备用车';
}
},
watch:{},
methods: {
doShow(operate, selected) {
this.$root.$emit('dialogOpen', selected);
this.selected = selected;
//
this.addModel.sectionCode = selected.code;
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.addModel = {
groupNumber: '',
sectionCode: ''
};
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
mouseCancelState(this.selected);
},
commit() {
if (!this.addModel.groupNumber) {
this.messageTip1 = '请输入车组号';
return;
}
const params = {
groupNumber: this.addModel.groupNumber,
sectionCode: this.addModel.sectionCode,
right: true
};
this.messageTip1 = '';
this.loading = true;
commitOperate(menuOperate.Section.loadSpareTrain, params, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
},
disabledTrain(code) {
return this.$store.state.map.activeTrainList.includes(code);
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
/deep/ .el-row {
margin: 10px
}
.ningbo-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

@ -4,6 +4,7 @@
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<train-add-plan ref="trainAddPlan" pop-class="chengdou-03__systerm" />
<set-fault ref="setFault" pop-class="datie-02__systerm" />
<load-spare-train ref="loadSpareTrain" pop-class="datie-02__systerm" />
<add-spare-train ref="addSpareTrain" />
<draw-select ref="drawSelect" />
<fork-directive ref="forkDirective" />
@ -22,6 +23,7 @@ import { menuOperate, commitOperate } from '@/jmapNew/theme/components/utils/men
import AddSpareTrain from './dialog/addSpareTrain';
import DrawSelect from './dialog/drawSelect';
import ForkDirective from './dialog/forkDirective';
import LoadSpareTrain from './dialog/loadSpareTrain';
export default {
name: 'SectionMenu',
@ -32,7 +34,8 @@ export default {
SetFault,
AddSpareTrain,
DrawSelect,
ForkDirective
ForkDirective,
LoadSpareTrain
},
props: {
selected: {
@ -84,6 +87,11 @@ export default {
label: '取消故障',
handler: this.cancelStoppage,
cmdType: CMD.Fault.CMD_CANCEL_FAULT
},
{
label: '设置备用车',
handler: this.loadSpare,
cmdType: CMD.Section.CMD_TRAIN_LOAD_SPARE_TRAIN
}
]
};
@ -107,14 +115,14 @@ export default {
}
},
mounted() {
const isDev = process.env.NODE_ENV === 'development';
if (isDev) {
this.menuNormal.push( {
label: '新建计划列车',
handler: this.createPlanTrain,
cmdType: CMD.Section.CMD_Train_Init_Plan
});
}
// const isDev = process.env.NODE_ENV === 'development';
// if (isDev) {
// this.menuNormal.push( {
// label: '',
// handler: this.createPlanTrain,
// cmdType: CMD.Section.CMD_Train_Init_Plan
// });
// }
},
methods: {
initMenu() {
@ -202,6 +210,13 @@ export default {
this.$refs.trainAddPlan.doShow(operate);
}
});
},
loadSpare() {
commitOperate(menuOperate.Section.loadSpareTrain, {sectionCode:this.selected.code}).then(({valid, operate})=>{
if (valid) {
this.$refs.loadSpareTrain.doShow(operate, this.selected);
}
});
}
}
};

View File

@ -516,7 +516,9 @@ export default {
CMD_Conversation_Group_Text_Chat: {value: 'Conversation_Group_Text_Chat', label: '发送会话群文字消息'},
CMD_Conversation_Group_Audio_Base64: {value: 'Conversation_Group_Audio_Base64', label: '发送会话群语音消息'},
CMD_Conversation_Group_Private_Text_Chat: {value: 'Conversation_Group_Private_Text_Chat', label: '发送私聊文字消息'},
CMD_Conversation_Group_Private_Audio_Base64: {value: 'Conversation_Group_Private_Audio_Base64', label: '发送私聊语音消息'}
CMD_Conversation_Group_Private_Audio_Base64: {value: 'Conversation_Group_Private_Audio_Base64', label: '发送私聊语音消息'},
CMD_Conversation_Group_Create: {value: 'Conversation_Group_Create', label: '创建会话群'},
CMD_Conversation_Group_Invite_Member: {value: 'Conversation_Group_Invite_Member', label: '邀请人员入群'}
},
PSL: {
CMD_PSL_PRESS_BUTTON: {value: 'PSL_PRESS_BUTTON', label: 'PSL按钮操作'}

View File

@ -4389,11 +4389,11 @@ export const OperationEvent = {
},
moonDay: {
operation: 'b101',
domId: '_Tips-TicketOrRegister-RegisterInput-MoonDay'
domId: '_Tips-TicketOrRegister-RegisterInput-MoonDay{BOTTOM}'
},
hourMinute: {
operation: 'b102',
domId: '_Tips-TicketOrRegister-RegisterInput-HourMinute'
domId: '_Tips-TicketOrRegister-RegisterInput-HourMinute{BOTTOM}'
},
result: {
operation: 'b103',
@ -4401,11 +4401,11 @@ export const OperationEvent = {
},
noticeTimeMoonDay: {
operation: 'b104',
domId: '_Tips-TicketOrRegister-RegisterInput-NoticeTimeMoonDay'
domId: '_Tips-TicketOrRegister-RegisterInput-NoticeTimeMoonDay{BOTTOM}'
},
noticeTimeHourMinute: {
operation: 'b105',
domId: '_Tips-TicketOrRegister-RegisterInput-NoticeTimeHourMinute'
domId: '_Tips-TicketOrRegister-RegisterInput-NoticeTimeHourMinute{BOTTOM}'
},
noticeTimeInfo: {
operation: 'b106',
@ -4413,11 +4413,11 @@ export const OperationEvent = {
},
arriveTimeMoonDay: {
operation: 'b107',
domId: '_Tips-TicketOrRegister-RegisterInput-ArriveTimeMoonDay'
domId: '_Tips-TicketOrRegister-RegisterInput-ArriveTimeMoonDay{BOTTOM}'
},
arriveTimeHourMinute: {
operation: 'b108',
domId: '_Tips-TicketOrRegister-RegisterInput-ArriveTimeHourMinute'
domId: '_Tips-TicketOrRegister-RegisterInput-ArriveTimeHourMinute{BOTTOM}'
},
arriveTimeInfo: {
operation: 'b109',
@ -4425,11 +4425,11 @@ export const OperationEvent = {
},
endTimeMoonDay: {
operation: 'b110',
domId: '_Tips-TicketOrRegister-RegisterInput-EndTimeMoonDay'
domId: '_Tips-TicketOrRegister-RegisterInput-EndTimeMoonDay{BOTTOM}'
},
endTimeHourMinute: {
operation: 'b111',
domId: '_Tips-TicketOrRegister-RegisterInput-EndTimeHourMinute'
domId: '_Tips-TicketOrRegister-RegisterInput-EndTimeHourMinute{BOTTOM}'
},
endTimeInfo: {
operation: 'b112',
@ -5027,7 +5027,7 @@ export const OperationEvent = {
},
requestDate:{
operation: '120a',
domId: '_Tips-Rail-equipmentConstructionFill-requestDate'
domId: '_Tips-Rail-equipmentConstructionFill-requestDate{BOTTOM}'
},
requestDetails:{
operation: '120b',
@ -5035,7 +5035,7 @@ export const OperationEvent = {
},
planSpendTime:{
operation: '120c',
domId: '_Tips-Rail-equipmentConstructionFill-planSpendTime'
domId: '_Tips-Rail-equipmentConstructionFill-planSpendTime{BOTTOM}'
},
acceptDetail:{
operation: '120d',
@ -5043,7 +5043,7 @@ export const OperationEvent = {
},
confirmReviewDate:{
operation: '120e',
domId: '_Tips-Rail-equipmentConstructionFill-confirmReviewDate'
domId: '_Tips-Rail-equipmentConstructionFill-confirmReviewDate{BOTTOM}'
},
confirmReviewDetail:{
operation: '120f',
@ -5165,6 +5165,14 @@ export const OperationEvent = {
record: {
operation: '1403',
domId: '_Tips-Conversation-Chat-record'
},
createGroup: {
operation: '1404',
domId: '_Tips-Conversation-Chat-createGroup'
},
inviteToGroup: {
operation: '1405',
domId: '_Tips-Conversation-Chat-inviteToGroup'
}
}
},

View File

@ -83,7 +83,6 @@ class ValidateHandler {
if (stepOperation.val) {
valid = ((operate.val).toString() === stepOperation.val.toString()) && valid;
}
const opParam = operate.param === undefined ? {} : operate.param;
if ((opParam || stepOperation.params) && !opParam.hasOwnProperty('fileBase64Str')) {
valid = this.checkParamConsistent(opParam, stepOperation.params, operate.operation) && valid;
@ -100,7 +99,7 @@ class ValidateHandler {
Handler.judgeIsTextSendOperation();
} else {
store.dispatch('trainingNew/handleStepRecord', { type:'ERROR', stepOperation });
console.error('校验失败;');
console.error('校验失败;', stepOperation, operate);
}
return valid;
}

View File

@ -20,7 +20,8 @@ const training = {
voiceStepList: [], // 实训特殊语音步骤列表
voiceStepIndex: -1,
examSwitch: false, // 考试开始结束标注
stepRecord: [] // 操作记录
stepRecord: [], // 操作记录
joinTrainingInfo: null
},
getters: {
teachMode: (state) => {
@ -51,7 +52,9 @@ const training = {
state.trainingSwitch = flag;
state.stepInfo = {};
state.operateOrder = 0;
state.stepRecord = [];
if (flag) {
state.stepRecord = [];
}
},
setTrainingOperate: (state, trainingOperate) => {
state.trainingOperate = trainingOperate;
@ -125,6 +128,9 @@ const training = {
if (type === 'OVER') {
step.success = true;
}
},
setJoinTrainingInfo: (state, joinTrainingInfo) => {
state.joinTrainingInfo = joinTrainingInfo;
}
},
actions: {
@ -200,7 +206,7 @@ const training = {
},
handleMatchVoice: ({ commit }, info) => {
const stepOperation = Handler.getTrainingOperation();
if (info && info.content === 'true') {
if (info && info.content === 'true' && store.state.training.myMemberId == info.memberId) {
const rightMsg = {errMsg: LangStorage.getLang() === 'en' ? "Correct operation! That's great!" : '操作正确!真棒!', color: 'green'};
commit('setOperateErrMsg', rightMsg);
if (Handler.isLastOperation()) {
@ -225,6 +231,9 @@ const training = {
},
handleStepRecord: ({ commit }, { type, stepOperation }) => {
commit('handleStepRecord', { type, stepOperation });
},
setJoinTrainingInfo: ({ commit }, joinTrainingInfo ) => {
commit('setJoinTrainingInfo', joinTrainingInfo);
}
}
};

View File

@ -213,6 +213,16 @@ function handle(data) {
case 'Simulation_Control_Transfer_Result':
store.dispatch('socket/setControlTransfer', msg);
break;
case 'Simulation_Training_Prepare_Start': // 仿真预加载
store.dispatch('trainingNew/setJoinTrainingInfo', msg);
break;
case 'Simulation_Training_Status': // 仿真实训开始结束状态
if (msg == 1) {
store.dispatch('trainingNew/trainingStart');
} else {
store.dispatch('trainingNew/trainingEnd');
}
break;
}
}
// 仿真内部聊天

View File

@ -138,7 +138,7 @@ export default {
return this.$route.query.projectDevice;
},
projectCode() {
return this.$store.state.projectConfig.projectCode;
return this.$store.state.projectConfig.markKey;
}
},
watch: {
@ -250,7 +250,7 @@ export default {
},
judgeOtherPage(params) {
// itemMap: {DEFAULT_MEMBER: '1'}type: "METRO"
getBackProjectConfigByCode(this.projectCode).then(res=>{
getBackProjectConfigByCode(this.$store.state.projectConfig.projectCode).then(res=>{
if (res.data) {
const {mapId, functionId} = res.data;
if (functionId && mapId) {
@ -354,7 +354,7 @@ export default {
const model = Object.assign({}, this.loginForm);
model.password = md5(model.password);
model.type = 'class';
model.project = this.projectCode;
model.project = this.$store.state.projectConfig.projectCode;
if (this.$route.query.projectDevice) {
model.deviceCode = this.$route.query.projectDevice;
}

View File

@ -334,7 +334,7 @@ export default {
);
}
}
}).catch(() => { console.error('操作失败!'); });
}).catch((e) => { console.error('操作失败!', e); });
} else {
this.stopRecording(); //
}

View File

@ -111,7 +111,7 @@ export default {
submitAnswer(postData).then(resp => {
this.$set(this.questionStateList[1], this.currentQuestionIndex, true);
this.$store.dispatch('trainingNew/trainingEnd');
// this.$store.dispatch('trainingNew/trainingEnd');
}).catch(() => {
this.$message.error('记录数据失败!');
});

View File

@ -33,8 +33,8 @@
<div class="activeLine" />
</div>
<div class="nullDiv" />
<div class="editFilter " :class="myMemberId ? 'pointer' : 'disable'">
<i class="el-icon-plus" title="创建会话群" @click="createGroup" />
<div class="editFilter" :class="myMemberId ? 'pointer' : 'disable'">
<i :id="createGroupDomId" class="el-icon-plus" title="创建会话群" @click="createGroup" />
<!-- <i class="el-icon-more" /> -->
</div>
</div>
@ -63,7 +63,7 @@
<address-book ref="addressBook" :member-tree-data="memberTreeData" @sendPrivateMsg="sendPrivateMsg" />
</div>
</div>
<edit-group ref="editGroup" :member-tree-data="memberTreeData" />
<edit-group ref="editGroup" :member-tree-data="memberTreeData" @handleEditGroup="handleEditGroup" />
<pop-menu ref="popMenu" :menu="menu" />
<dialog-member ref="dialogMember" :member-tree-data="memberTreeData" @updateLeaderId="updateLeaderId" />
</el-dialog>
@ -79,6 +79,7 @@ import AddressBook from './addressBook';
import PopMenu from '@/components/PopMenu';
import DialogMember from './dialogMember';
import { objectIsEqual } from '@/utils/date';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'ChatDialog',
components: {
@ -95,6 +96,7 @@ export default {
return {
logoImgUrl: '',
dialogVisible: false,
showEditGroup: false,
tabs: [
{label:'消息', icon:'el-icon-chat-dot-square'},
{label:'通讯录', icon:'el-icon-notebook-1'}
@ -119,6 +121,9 @@ export default {
groupId() {
return this.$route.query.group;
},
createGroupDomId() {
return this.showEditGroup ? '' : OperationEvent.Conversation.Chat.createGroup.domId;
},
myMemberId() {
return this.$store.state.training.myMemberId;
},
@ -275,6 +280,9 @@ export default {
this.handleClose();
},
methods: {
handleEditGroup(val) {
this.showEditGroup = val;
},
showMenu(event, item) {
this.groupClick(item);
this.initMenu(item);

View File

@ -59,7 +59,7 @@
</el-form-item> -->
<el-form-item v-if="showSubmitBtn">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="onSubmit">确定</el-button>
<el-button :id="submitDomId" type="primary" @click="onSubmit">确定</el-button>
</el-form-item>
</el-form>
</div>
@ -69,8 +69,11 @@
</template>
<script>
import { createGroup, inviteMemberToGroup } from '@/api/newChat';
import { inviteMemberToGroup } from '@/api/newChat';
import { getUploadUrl } from '@/api/projectConfig';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {UserOperationType} from '@/scripts/ConstDic';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
export default {
name: 'EditGroup',
components: {
@ -118,6 +121,15 @@ export default {
groupId() {
return this.$route.query.group;
},
submitDomId() {
let domId = '';
if (this.title == '邀请成员') {
domId = OperationEvent.Conversation.Chat.inviteToGroup.domId;
} else if (this.title == '创建会话群') {
domId = OperationEvent.Conversation.Chat.createGroup.domId;
}
return this.dialogVisible ? domId : '';
},
memberData() {
return this.$store.state.training.memberData;
},
@ -155,6 +167,12 @@ export default {
this.treeDisabled = true;
this.nameDisabled = true;
}
},
dialogVisible() {
this.$emit('handleEditGroup', this.dialogVisible);
this.$nextTick(() => {
this.$store.dispatch('training/emitTipFresh');
});
}
},
mounted() {
@ -231,21 +249,27 @@ export default {
}).catch(err => {
this.$message.error(`邀请成员失败!${err.message}`);
});
} else if (this.title == '创建会话群') {
const list = [];
this.selectTreeNode.forEach(item => {
list.push(item.id);
});
const params = {
name: this.form.name,
imageUrl: this.form.imageUrl,
memberIds: list
const operate = {
over: true,
cmdType: CMD.Conversation.CMD_Conversation_Group_Create,
operation: OperationEvent.Conversation.Chat.createGroup.operation,
userOperationType: UserOperationType.LEFTCLICK,
param: {
name: this.form.name,
memberIds: list
}
};
createGroup(this.groupId, params).then(res => {
this.initData();
this.handleClose();
this.$message.success('创建会话群成功!');
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.initData();
this.handleClose();
this.$message.success('创建会话群成功!');
}
}).catch(err => {
this.$message.error(`创建会话群失败!${err.message}`);
});

View File

@ -21,9 +21,10 @@
<span v-else>{{ scope.row.projectName }}</span>
</template>
</el-table-column>
<el-table-column prop="requestDate" :label="'月日\n时分'" width="80">
<el-table-column prop="requestDate" :label="'月日\n时分'" width="160">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="constructionFill.requestDate.domId" v-model="scope.row.requestDate" @blur="requestDateChange(scope.row.requestDate)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="constructionFill.requestDate.domId" v-model="scope.row.requestDate" @blur="requestDateChange(scope.row.requestDate)" /> -->
<el-date-picker v-if="dataIndex === scope.$index" :id="constructionFill.requestDate.domId" v-model="scope.row.requestDate" format="M月d日 HH:mm" value-format="M月d日 HH:mm" class="dateClass" :clearable="false" type="datetime" @change="requestDateChange(scope.row.requestDate)" />
<span v-else>{{ scope.row.requestDate }}</span>
</template>
</el-table-column>
@ -33,9 +34,10 @@
<span v-else>{{ scope.row.requestDetails }}</span>
</template>
</el-table-column>
<el-table-column prop="planSpendTime" :label="'所需\n时分'" width="80">
<el-table-column prop="planSpendTime" :label="'所需\n时分'" width="100">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="constructionFill.planSpendTime.domId" v-model="scope.row.planSpendTime" @blur="planSpendTimeChange(scope.row.planSpendTime)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="constructionFill.planSpendTime.domId" v-model="scope.row.planSpendTime" @blur="planSpendTimeChange(scope.row.planSpendTime)" /> -->
<el-time-picker v-if="dataIndex === scope.$index" :id="constructionFill.planSpendTime.domId" v-model="scope.row.planSpendTime" :picker-options="{format:'HH:mm'}" format="HH:mm" value-format="HH:mm" class="timeClass" :clearable="false" @change="planSpendTimeChange(scope.row.planSpendTime)" />
<span v-else>{{ scope.row.planSpendTime }}</span>
</template>
</el-table-column>
@ -49,9 +51,10 @@
</el-table-column>
</el-table-column>
<el-table-column label="施工后开通检查确认、销记">
<el-table-column prop="confirmReviewDate" :label="'月日\n时分'" width="80">
<el-table-column prop="confirmReviewDate" :label="'月日\n时分'" width="160">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="constructionFill.confirmReviewDate.domId" v-model="scope.row.confirmReviewDate" @blur="confirmReviewDateChange(scope.row.confirmReviewDate)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="constructionFill.confirmReviewDate.domId" v-model="scope.row.confirmReviewDate" @blur="confirmReviewDateChange(scope.row.confirmReviewDate)" /> -->
<el-date-picker v-if="dataIndex === scope.$index" :id="constructionFill.confirmReviewDate.domId" v-model="scope.row.confirmReviewDate" format="M月d日 HH:mm" value-format="M月d日 HH:mm" class="dateClass" :clearable="false" type="datetime" @change="confirmReviewDateChange(scope.row.confirmReviewDate)" />
<span v-else>{{ scope.row.confirmReviewDate }}</span>
</template>
</el-table-column>
@ -253,7 +256,7 @@ export default {
</script>
<style lang="scss" scoped>
.equipmentConstructionTable{
width:91%;margin-left:15px
width: 100%;
}
.el-table .cell {
white-space: pre-line;
@ -262,4 +265,14 @@ export default {
margin-right: 20px;
margin-bottom: 10px;
}
.dateClass {
width: 139px;
}
.timeClass {
width: 79px;
}
/deep/ .el-input--suffix .el-input__inner {
padding-right: 10px;
padding-left: 28px;
}
</style>

View File

@ -11,15 +11,17 @@
style="width: 100%"
:height="tableHeight"
>
<el-table-column prop="date" label="月 日" width="95">
<el-table-column prop="date" label="月 日" width="120">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.moonDay.domId" v-model="scope.row.moonDay" @blur="moonDayChange(scope.row.moonDay)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.moonDay.domId" v-model="scope.row.moonDay" @blur="moonDayChange(scope.row.moonDay)" /> -->
<el-date-picker v-if="dataIndex === scope.$index" :id="registerInput.moonDay.domId" v-model="scope.row.moonDay" format="M月d日" value-format="M月d日" class="dateClass" :clearable="false" type="date" @change="moonDayChange(scope.row.moonDay)" />
<span v-else>{{ scope.row.moonDay }}</span>
</template>
</el-table-column>
<el-table-column prop="time" label="时 分" width="95">
<el-table-column prop="time" label="时 分" width="100">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.hourMinute.domId" v-model="scope.row.hourMinute" @blur="hourMinuteChange(scope.row.hourMinute)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.hourMinute.domId" v-model="scope.row.hourMinute" @blur="hourMinuteChange(scope.row.hourMinute)" /> -->
<el-time-picker v-if="dataIndex === scope.$index" :id="registerInput.hourMinute.domId" v-model="scope.row.hourMinute" :picker-options="{format:'HH:mm'}" format="HH:mm" value-format="HH:mm" class="timeClass" :clearable="false" @change="hourMinuteChange(scope.row.hourMinute)" />
<span v-else>{{ scope.row.hourMinute }}</span>
</template>
</el-table-column>
@ -30,15 +32,17 @@
</template>
</el-table-column>
<el-table-column label="通 知 时 间">
<el-table-column prop="noticeDate" label="月 日" width="100">
<el-table-column prop="noticeDate" label="月 日" width="120">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.noticeTimeMoonDay.domId" v-model="scope.row.noticeTime.moonDay" @blur="noticeTimeMoonDayChange(scope.row.noticeTime.moonDay)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.noticeTimeMoonDay.domId" v-model="scope.row.noticeTime.moonDay" @blur="noticeTimeMoonDayChange(scope.row.noticeTime.moonDay)" /> -->
<el-date-picker v-if="dataIndex === scope.$index" :id="registerInput.noticeTimeMoonDay.domId" v-model="scope.row.noticeTime.moonDay" format="M月d日" value-format="M月d日" class="dateClass" :clearable="false" type="date" @change="noticeTimeMoonDayChange(scope.row.noticeTime.moonDay)" />
<span v-else>{{ scope.row.noticeTime.moonDay }}</span>
</template>
</el-table-column>
<el-table-column prop="noticeTime" label="时 分" width="100">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.noticeTimeHourMinute.domId" v-model="scope.row.noticeTime.hourMinute" @blur="noticeTimeHourMinuteChange(scope.row.noticeTime.hourMinute)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.noticeTimeHourMinute.domId" v-model="scope.row.noticeTime.hourMinute" @blur="noticeTimeHourMinuteChange(scope.row.noticeTime.hourMinute)" /> -->
<el-time-picker v-if="dataIndex === scope.$index" :id="registerInput.noticeTimeHourMinute.domId" v-model="scope.row.noticeTime.hourMinute" :picker-options="{format:'HH:mm'}" format="HH:mm" value-format="HH:mm" class="timeClass" :clearable="false" @change="noticeTimeHourMinuteChange(scope.row.noticeTime.hourMinute)" />
<span v-else>{{ scope.row.noticeTime.hourMinute }}</span>
</template>
</el-table-column>
@ -50,15 +54,17 @@
</el-table-column>
</el-table-column>
<el-table-column label="到 达 时 间">
<el-table-column prop="arriveDate" label="月 日" width="100">
<el-table-column prop="arriveDate" label="月 日" width="120">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.arriveTimeMoonDay.domId" v-model="scope.row.arriveTime.moonDay" @blur="arriveTimeMoonDayChange(scope.row.arriveTime.moonDay)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.arriveTimeMoonDay.domId" v-model="scope.row.arriveTime.moonDay" @blur="arriveTimeMoonDayChange(scope.row.arriveTime.moonDay)" /> -->
<el-date-picker v-if="dataIndex === scope.$index" :id="registerInput.arriveTimeMoonDay.domId" v-model="scope.row.arriveTime.moonDay" format="M月d日" value-format="M月d日" class="dateClass" :clearable="false" type="date" @change="arriveTimeMoonDayChange(scope.row.arriveTime.moonDay)" />
<span v-else>{{ scope.row.arriveTime.moonDay }}</span>
</template>
</el-table-column>
<el-table-column prop="arriveTime" label="时 分" width="100">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.arriveTimeHourMinute.domId" v-model="scope.row.arriveTime.hourMinute" @blur="arriveTimeHourMinuteChange(scope.row.arriveTime.hourMinute)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.arriveTimeHourMinute.domId" v-model="scope.row.arriveTime.hourMinute" @blur="arriveTimeHourMinuteChange(scope.row.arriveTime.hourMinute)" /> -->
<el-time-picker v-if="dataIndex === scope.$index" :id="registerInput.arriveTimeHourMinute.domId" v-model="scope.row.arriveTime.hourMinute" :picker-options="{format:'HH:mm'}" format="HH:mm" value-format="HH:mm" class="timeClass" :clearable="false" @change="arriveTimeHourMinuteChange(scope.row.arriveTime.hourMinute)" />
<span v-else>{{ scope.row.arriveTime.hourMinute }}</span>
</template>
</el-table-column>
@ -70,15 +76,17 @@
</el-table-column>
</el-table-column>
<el-table-column label="销除不良及破损的时分及盖章">
<el-table-column prop="repairDate" label="月 日" width="100">
<el-table-column prop="repairDate" label="月 日" width="120">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.endTimeMoonDay.domId" v-model="scope.row.endTime.moonDay" @blur="endTimeMoonDayChange(scope.row.endTime.moonDay)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.endTimeMoonDay.domId" v-model="scope.row.endTime.moonDay" @blur="endTimeMoonDayChange(scope.row.endTime.moonDay)" /> -->
<el-date-picker v-if="dataIndex === scope.$index" :id="registerInput.endTimeMoonDay.domId" v-model="scope.row.endTime.moonDay" format="M月d日" value-format="M月d日" class="dateClass" :clearable="false" type="date" @change="endTimeMoonDayChange(scope.row.endTime.moonDay)" />
<span v-else>{{ scope.row.endTime.moonDay }}</span>
</template>
</el-table-column>
<el-table-column prop="repairTime" label="时 分" width="100">
<template slot-scope="scope">
<el-input v-if="dataIndex === scope.$index" :id="registerInput.endTimeHourMinute.domId" v-model="scope.row.endTime.hourMinute" @blur="endTimeHourMinuteChange(scope.row.endTime.hourMinute)" />
<!-- <el-input v-if="dataIndex === scope.$index" :id="registerInput.endTimeHourMinute.domId" v-model="scope.row.endTime.hourMinute" @blur="endTimeHourMinuteChange(scope.row.endTime.hourMinute)" /> -->
<el-time-picker v-if="dataIndex === scope.$index" :id="registerInput.endTimeHourMinute.domId" v-model="scope.row.endTime.hourMinute" :picker-options="{format:'HH:mm'}" format="HH:mm" value-format="HH:mm" class="timeClass" :clearable="false" @change="endTimeHourMinuteChange(scope.row.endTime.hourMinute)" />
<span v-else>{{ scope.row.endTime.hourMinute }}</span>
</template>
</el-table-column>
@ -304,6 +312,15 @@ export default {
};
</script>
<style scoped>
<style lang="scss" scoped>
.dateClass {
width: 99px;
}
.timeClass {
width: 79px;
}
/deep/ .el-input--suffix .el-input__inner {
padding-right: 10px;
padding-left: 28px;
}
</style>

View File

@ -351,6 +351,7 @@ export default {
list.push(obj);
});
await updateTrainingStep(this.group, this.editData.id, { step2VOList: list, playerIdList: this.playerIdList });
this.getStepList(this.editData);
this.$message.success('保存实训成功!');
} catch {
this.$message.error('保存实训失败');

View File

@ -1,6 +1,8 @@
<template>
<div>
<div style="text-align: right;padding-right: 10px;">
<el-button v-if="showJumpToTraining" size="small" type="text" @click="jumpToTraining">仿真到当前步骤</el-button>
<el-divider v-if="showJumpToTraining" direction="vertical" />
<el-button size="small" type="text" @click="clearOperation">清空</el-button>
<el-divider direction="vertical" />
<el-button size="small" type="text" @click="backDesignPane">返回</el-button>
@ -36,6 +38,7 @@
<script>
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { jumpToTraining} from '@/api/trainingManage';
export default {
name: 'EditOperateNew',
data() {
@ -48,6 +51,18 @@ export default {
stepIndex: ''
};
},
computed: {
showJumpToTraining() {
let s = false;
if (this.stepDetail.id) {
s = true;
}
return s;
},
group() {
return this.$route.query.group;
}
},
watch: {
'$store.state.trainingNew.trainingOperate': function (val) {
if (val && this.editMode) {
@ -97,6 +112,15 @@ export default {
this.$store.dispatch('trainingNew/editDraftStepList', null);
},
methods: {
jumpToTraining() {
if (this.group && this.stepDetail.id) {
jumpToTraining(this.group, this.stepDetail.id).then(res => {
console.log(res, '跳转成功!');
}).catch(err => {
this.$message.error(`跳转失败!${err.message}`);
});
}
},
initData(data) {
this.editMode = true;
this.stepIndex = data.index;

View File

@ -8,7 +8,7 @@
center
>
<template v-for="user in userList">
<div :key="user.id" style="display: flex;justify-content: space-between;">
<div :key="user.id" style="display: flex;justify-content: space-between;margin-bottom: 10px;">
<div>{{ user.nickName }}</div>
<el-select v-model="user.memberId" size="mini" placeholder="请选择">
<el-option

View File

@ -4,9 +4,9 @@
<div ref="drapBox" class="reminder-box">
<div class="tip-title">
<div style="display: flex;justify-content: center;align-items: center;">
<i v-if="!trainingDesign && !examSwitch" class="icon el-icon-document" @click="trainingListShow" />
<i v-show="!isShrink && !trainingSwitch && trainingDetail" class="icon el-icon-video-play" @click="handlerStart" />
<i v-show="!isShrink && trainingSwitch" class="icon el-icon-switch-button" @click="handlerEnd" />
<i v-if="!trainingDesign && !examSwitch && simulationCreator" class="icon el-icon-document" @click="trainingListShow" />
<i v-show="!isShrink && !trainingSwitch && trainingDetail && simulationCreator" class="icon el-icon-video-play" @click="handlerStart" />
<i v-show="!isShrink && trainingSwitch && simulationCreator" class="icon el-icon-switch-button" @click="handlerEnd" />
<i v-show="isShrink" class="icon el-icon-minus" @click="shrink" />
<i v-show="!isShrink" class="icon el-icon-plus" @click="shrink" />
</div>
@ -26,7 +26,7 @@
<p v-if="!examSwitch" class="list-item">
<span class="list-label">实训模式</span>
<span class="list-elem">
<el-radio-group v-model="demoMode" :disabled="trainingSwitch" class="mode" size="small" @change="changeMode">
<el-radio-group v-model="demoMode" :disabled="trainingSwitch || !simulationCreator" class="mode" size="small" @change="changeMode">
<el-radio :label="TrainingMode.TEACH" border>{{ $t('display.lesson.teachingMode') }}</el-radio>
<el-radio :label="TrainingMode.PRACTICE" border>{{ $t('display.lesson.practiceMode') }}</el-radio>
<el-radio :label="TrainingMode.TEST" border>{{ $t('display.lesson.testMode') }}</el-radio>
@ -37,18 +37,18 @@
<span class="list-label" style="vertical-align: top;"> {{ $t('display.training.trainingInstructions') }}</span>
<span class="list-elem elem-span">{{ trainingDetail ?trainingDetail.description:'' }}</span>
</p>
<p class="list-item">
<p v-if="simulationCreator" class="list-item">
<span class="list-label">操作按钮</span>
<span class="list-elem">
<el-button v-if="!trainingSwitch && trainingDetail" size="small" type="success" @click="handlerStart">开始</el-button>
<el-button v-if="trainingSwitch" size="small" type="danger" @click="handlerEnd">结束</el-button>
</span>
</p>
<p v-if="!examSwitch" class="list-item">
<p v-if="!examSwitch && simulationCreator" class="list-item">
<span class="list-label"> </span>
<span class="list-elem elem-span training-box" @click="loadTraining(previousTraining)">{{ previousTraining? previousTraining.name: '' }}</span>
</p>
<p v-if="!examSwitch" class="list-item">
<p v-if="!examSwitch && simulationCreator" class="list-item">
<span class="list-label"> </span>
<span class="list-elem elem-span training-box" @click="loadTraining(nextTraining)">{{ nextTraining? nextTraining.name:'' }}</span>
</p>
@ -68,7 +68,7 @@
<script>
import { ScriptMode } from '@/scripts/ConstDic';
import { startTraining, endTraining, getPublishTrainingDetail, loadPublishTraining } from '@/api/jmap/training';
import { startTraining, endTraining, getPublishTrainingDetail, loadPublishTraining, prepareScene } from '@/api/jmap/training';
import ScenePlayRole from './scenePlayRole';
import TestResult from './testResult';
import { EventBus } from '@/scripts/event-bus';
@ -116,11 +116,25 @@ export default {
},
examSwitch() {
return this.$store.state.trainingNew.examSwitch;
},
simulationCreator() {
return this.$store.state.training.simulationCreator;
}
},
watch: {
'$store.state.trainingNew.trainingDetail': function(val) {
this.initAdjacentTraining();
},
'$store.state.trainingNew.joinTrainingInfo': function(val) {
if (!this.simulationCreator && val && val.id) {
this.loadTraining({ id: val.id });
this.changeMode(val.mode);
}
},
'$store.state.trainingNew.trainingSwitch': function(val) {
if (!val && !this.simulationCreator) {
this.handlerEnd();
}
}
},
mounted() {
@ -159,15 +173,22 @@ export default {
handlerStart() {
Handler.clear();
if (this.trainingDetail.type === 'SCENE' && !this.examSwitch) {
this.$refs.scenePlayRole.doShow();
this.handlePrepareScene();
} else {
this.startTraining();
}
},
handlePrepareScene() {
prepareScene(this.group, {mode: this.demoMode}).then(() => {
this.$refs.scenePlayRole.doShow();
}).catch(() => {
this.$message.error('预开始场景实训失败!');
});
},
startTraining() {
this.$store.dispatch('trainingNew/changeTeachMode', this.demoMode);
startTraining(this.group, {mode: this.demoMode}).then(() => {
this.$store.dispatch('trainingNew/trainingStart');
// this.$store.dispatch('trainingNew/trainingStart');
}).catch(() => {
this.$message.error('开始实训失败!');
});
@ -185,7 +206,7 @@ export default {
if (this.demoMode === ScriptMode.TEST) {
this.$refs.testResult.doShow(resp.data);
}
this.$store.dispatch('trainingNew/trainingEnd');
// this.$store.dispatch('trainingNew/trainingEnd');
}).catch((e) => {
this.$message.error('结束实训失败!');
});

View File

@ -21,6 +21,9 @@ export default {
},
myMemberId() {
return this.$store.state.training.myMemberId;
},
simulationCreator() {
return this.$store.state.training.simulationCreator;
}
},
watch: {
@ -33,11 +36,16 @@ export default {
},
'$store.state.trainingNew.trainingSwitch': function(val) {
if (!val) {
this.trainingTipMessage = '';
if (!this.simulationCreator) {
this.trainingTipMessage = '当前实训已结束!';
setTimeout(() => { this.trainingTipMessage = ''; }, 3000);
} else {
this.trainingTipMessage = '';
}
}
},
'$store.state.socket.trainingOverCount': function(val) {
if (this.teachMode === ScriptMode.TEACH || this.teachMode === ScriptMode.PRACTICE) {
if ((this.teachMode === ScriptMode.TEACH || this.teachMode === ScriptMode.PRACTICE) && this.simulationCreator) {
this.trainingTipMessage = '实训完成,请点击结束按钮。';
}
},

View File

@ -22,7 +22,7 @@
</el-select>
</el-form-item>
<el-form-item label="关联角色:" prop="roleCode">
<el-select v-model="formIbp.roleCode" placeholder="请选择" size="small" @change="changeRoleIBP">
<el-select v-model="formIbp.roleCode" placeholder="请选择" size="small">
<el-option
v-for="item in roleList"
:key="item.value"
@ -35,16 +35,16 @@
<el-select v-model="formIbp.client" placeholder="请选择" size="small">
<el-option
v-for="item in clientList"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<el-form v-show="['IM','CW','DRIVE','DEPOT'].includes(data.type)" ref="formIm" :model="formIm" label-width="100px" :rules="rulesIm">
<el-form-item label="关联角色:" prop="roleCode">
<el-select v-model="formIm.roleCode" placeholder="请选择" size="small" @change="changeRoleIM">
<el-select v-model="formIm.roleCode" placeholder="请选择" size="small">
<el-option
v-for="item in roleList"
:key="item.value"
@ -57,9 +57,9 @@
<el-select v-model="formIm.client" placeholder="请选择" size="small">
<el-option
v-for="item in clientList"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
@ -76,7 +76,7 @@
</el-select>
</el-form-item>
<el-form-item label="关联角色:" prop="roleCode">
<el-select v-model="formLw.roleCode" placeholder="请选择" size="small" @change="changeRoleLW">
<el-select v-model="formLw.roleCode" placeholder="请选择" size="small">
<el-option
v-for="item in roleList"
:key="item.value"
@ -89,9 +89,9 @@
<el-select v-model="formLw.client" placeholder="请选择" size="small">
<el-option
v-for="item in clientList"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
@ -128,7 +128,7 @@
</el-select>
</el-form-item>
<el-form-item label="关联角色:" prop="roleCode">
<el-select v-model="formIscs.roleCode" placeholder="请选择" size="small" @change="changeRoleIscs">
<el-select v-model="formIscs.roleCode" placeholder="请选择" size="small">
<el-option
v-for="item in roleList"
:key="item.value"
@ -141,9 +141,9 @@
<el-select v-model="formIscs.client" placeholder="请选择" size="small">
<el-option
v-for="item in clientList"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
@ -157,17 +157,15 @@
<script>
import { getDeviceDetail, getDevicesByType, setDeviceConfig } from '@/api/project';
import { getAllMapOnline, querySimulationMemberByMapId, querySimulationStationsByMapId } from '@/api/jmap/map';
import { getClientDataById, querySimulationMemberByMapId, querySimulationStationsByMapId } from '@/api/jmap/map';
import { getBackProjectConfigByCode } from '@/api/projectConfig';
import { getMapFunctioById } from '@/api/trainingPlatform';
import ConstConfig from '@/scripts/ConstConfig';
export default {
name: 'EditConfig',
data() {
return {
dialogVisible: false,
data: {},
clientListMap:{},
roleList:[],
lwList: [],
formIm:{
@ -300,7 +298,9 @@ export default {
this.dialogVisible = true;
this.roleList = [];
if (data.functionId) {
if (data.mapId) { this.mapIdChange(data.mapId, data.functionId); }
if (data.mapId) {
this.mapIdChange(data.mapId, data.functionId);
}
} else {
this.$message.error('请先配置项目信息');
}
@ -387,7 +387,6 @@ export default {
},
mapIdChange(mapId, functionId) {
if (mapId) {
// const stationResp = await querySimulationStationsByMapId(this.$route.query.mapId);
querySimulationStationsByMapId(mapId).then(resp => {
if (resp.data && resp.data.length) {
this.stationList = resp.data;
@ -395,54 +394,29 @@ export default {
}).catch(() => {
this.$message.error('获取车站列表失败');
});
querySimulationMemberByMapId(mapId).then(resp => {
if (resp.data) {
getMapFunctioById(functionId).then(response=>{
if (resp.data) {
const roleList = resp.data[response.data.simType];
const clientListMapIn = ConstConfig.ConstSelect.clientMap;
this.clientListMap = clientListMapIn[response.data.simType];
const covertRoleList = [];
roleList.forEach(member => {
const data = this.handleMember(member, this.stationList);
covertRoleList.push(data);
});
this.clientList = [];
this.roleList = covertRoleList;
const roleCode = this.formIbp.roleCode || this.formIm.roleCode || this.formLw.roleCode || this.formIscs.roleCode;
const role = this.roleList.find(each=>{ return each.value == roleCode; });
if (role) { this.clientList = this.clientListMap[role.memberType] || []; }
}
getMapFunctioById(functionId).then(functionResp => {
const simType = functionResp.data.simType;
querySimulationMemberByMapId(mapId).then(resp => {
const roleList = resp.data[simType];
const covertRoleList = [];
roleList.forEach(member => {
const data = this.handleMember(member, this.stationList);
covertRoleList.push(data);
});
}
}).catch(() => {
this.$message.error('获取角色列表失败');
});
this.roleList = covertRoleList;
}).catch(() => {
this.$message.error('获取角色列表失败');
});
getClientDataById(mapId).then(resp => {
this.clientList = resp.data[simType];
}).catch(() => {
this.$message.error('获取客户端列表失败');
});
}).catch(() => { this.$message.error('获取线路功能数据失败!'); });
} else {
this.stationList = [];
}
},
changeRoleIBP(role) {
this.formIbp.client = '';
this.changeRole(role);
},
changeRoleIM(role) {
this.formIm.client = '';
this.changeRole(role);
},
changeRoleLW(role) {
this.formLw.client = '';
this.changeRole(role);
},
changeRoleIscs(role) {
this.formIscs.client = '';
this.changeRole(role);
},
changeRole(role) {
const roleMember = this.roleList.find(each=>{ return each.value == role; });
this.clientList = this.clientListMap[roleMember.memberType] || [];
},
handleMember(member, stationList) {
const data = { value: member.id, label: '', memberType: member.type };
const device = stationList.find(station => station.code === member.deviceCode) || {};

View File

@ -11,8 +11,7 @@
<script>
import { getDevicesByType, getDeviceDetail, setDeviceConfig } from '@/api/project';
// getStationListNeedAttendant
import { getAllMapOnline, getPublishMapListOnline, querySimulationStationsByMapId, getPsdListByStandCode, getStandListByStationCode, querySimulationMemberByMapId} from '@/api/jmap/map';
import ConstConfig from '@/scripts/ConstConfig';
import { querySimulationStationsByMapId, getPsdListByStandCode, getStandListByStationCode, querySimulationMemberByMapId, getClientDataById} from '@/api/jmap/map';
import { getBackProjectConfigByCode } from '@/api/projectConfig';
import { getMapFunctioById } from '@/api/trainingPlatform';
export default {
@ -70,8 +69,7 @@ export default {
stationList: [],
standList: [],
psdList: [],
roleList:[],
clientListMap:{}
roleList:[]
};
},
computed: {
@ -97,8 +95,8 @@ export default {
{ prop: 'stationCode', label: '关联车站:', type: 'select', options: this.stationList, optionLabel: 'name', optionValue: 'code', deviceChange: this.stationCodeChange},
{ prop: 'standCode', label: '关联站台:', type: 'select', options: this.standList, optionLabel: 'name', optionValue: 'code', deviceChange: this.standCodeChange},
{ prop: 'psdCode', label: '关联屏蔽门:', type: 'select', options: this.psdList, optionLabel: 'code', optionValue: 'code' },
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value', deviceChange:this.roleChange },
{ prop: 'client', label: '关联客户端:', type: 'select', options: this.clientList, optionLabel: 'label', optionValue: 'value' }
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value' },
{ prop: 'client', label: '关联客户端:', type: 'select', options: this.clientList, optionLabel: 'name', optionValue: 'id' }
]
};
} else if (this.data.type === 'LSW') {
@ -107,7 +105,7 @@ export default {
items: [
{ prop: 'deviceCode', label: '教研机:', type: 'select', options: this.deviceList, optionLabel: 'code', optionValue: 'code' },
{ prop: 'quadrant', label: '屏幕配置:', type: 'select', options: this.screenList, optionLabel: 'label', optionValue: 'value'},
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value', deviceChange:this.roleChange },
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value' },
{ prop: 'client', label: '关联客户端:', type: 'select', options: this.clientList, optionLabel: 'label', optionValue: 'value' }
]
};
@ -116,7 +114,7 @@ export default {
labelWidth: '150px',
items: [
{ prop: 'deviceCode', label: '教研机:', type: 'select', options: this.deviceList, optionLabel: 'code', optionValue: 'code' },
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value', deviceChange:this.roleChange },
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value' },
{ prop: 'client', label: '关联客户端:', type: 'select', options: this.clientList, optionLabel: 'label', optionValue: 'value' }
]
};
@ -125,7 +123,7 @@ export default {
labelWidth: '150px',
items: [
{ prop: 'deviceCode', label: '教研机', type: 'select', options: this.deviceList, optionLabel: 'code', optionValue: 'code'},
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value', deviceChange:this.roleChange },
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value' },
{ prop: 'client', label: '关联客户端:', type: 'select', options: this.clientList, optionLabel: 'label', optionValue: 'value' }
]
};
@ -134,7 +132,7 @@ export default {
labelWidth: '150px',
items: [
{ prop: 'deviceCode', label: '教研机', type: 'select', options: this.deviceList, optionLabel: 'code', optionValue: 'code'},
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value', deviceChange:this.roleChange },
{ prop: 'roleCode', label: '关联角色:', type: 'select', options: this.roleList, optionLabel: 'label', optionValue: 'value' },
{ prop: 'client', label: '关联客户端:', type: 'select', options: this.clientList, optionLabel: 'label', optionValue: 'value' }
]
};
@ -194,40 +192,54 @@ export default {
if (resp.data && resp.data.length) {
this.stationList = resp.data;
}
const self = this;
querySimulationMemberByMapId(mapId).then(resp => {
if (resp.data) {
getMapFunctioById(functionId).then(response=>{
if (resp.data) {
const roleList = resp.data[response.data.simType];
const clientListMapIn = ConstConfig.ConstSelect.clientMap;
this.clientListMap = clientListMapIn[response.data.simType];
const covertRoleList = [];
roleList.forEach(member => {
const data = self.handleMember(member, self.stationList);
covertRoleList.push(data);
});
this.clientList = [];
self.roleList = covertRoleList;
const roleCode = this.formData.roleCode;
const role = this.roleList.find(each=>{ return each.value == roleCode; });
if (role) { this.clientList = this.clientListMap[role.memberType] || []; }
}
getMapFunctioById(functionId).then(functionResp => {
const simType = functionResp.data.simType;
querySimulationMemberByMapId(mapId).then(resp => {
const roleList = resp.data[simType];
const covertRoleList = [];
roleList.forEach(member => {
const data = this.handleMember(member, this.stationList);
covertRoleList.push(data);
});
}
}).catch(() => {
this.$message.error('获取角色列表失败');
});
this.roleList = covertRoleList;
}).catch(() => {
this.$message.error('获取角色列表失败');
});
getClientDataById(mapId).then(resp => {
this.clientList = resp.data[simType];
}).catch(() => {
this.$message.error('获取客户端列表失败');
});
}).catch(() => { this.$message.error('获取线路功能数据失败!'); });
// const self = this;
// querySimulationMemberByMapId(mapId).then(resp => {
// if (resp.data) {
// getMapFunctioById(functionId).then(response=>{
// if (resp.data) {
// const roleList = resp.data[response.data.simType];
// const clientListMapIn = ConstConfig.ConstSelect.clientMap;
// this.clientListMap = clientListMapIn[response.data.simType];
// const covertRoleList = [];
// roleList.forEach(member => {
// const data = self.handleMember(member, self.stationList);
// covertRoleList.push(data);
// });
// this.clientList = [];
// self.roleList = covertRoleList;
// const roleCode = this.formData.roleCode;
// const role = this.roleList.find(each=>{ return each.value == roleCode; });
// if (role) { this.clientList = this.clientListMap[role.memberType] || []; }
// }
// });
// }
// }).catch(() => {
// this.$message.error('');
// });
}).catch(() => {
this.$message.error('获取车站列表失败');
});
}
},
roleChange(role) {
this.formData.client = '';
const roleMember = this.roleList.find(each=>{ return each.value == role; });
if (roleMember) { this.clientList = this.clientListMap[roleMember.memberType] || []; }
},
handleMember(member, stationList) {
const data = { value: member.id, label: '', memberType: member.type };
const device = stationList.find(station => station.code === member.deviceCode) || {};