This commit is contained in:
zyy 2020-05-26 18:12:57 +08:00
commit 438ccb2404
19 changed files with 673 additions and 263 deletions

View File

@ -0,0 +1,9 @@
import request from '@/utils/request';
/** 获取实操列表(题库)*/
export function getPracticeList() {
return request({
url: `/api/v1/competitionPractical/competition`,
method: 'get'
});
}

View File

@ -77,5 +77,7 @@ export default {
iscsSystem: 'Iscs System',
studentManage: 'Student manage',
examDetail: 'Exam detail',
raceManage: 'Race manage'
raceManage: 'Race manage',
practiceManage:'Practice manage',
bankManage: 'Bank manage'
};

View File

@ -83,5 +83,6 @@ export default {
examDetail: '考试详情',
raceManage: '竞赛管理',
recaList: '报名列表',
bankManage: '题库列表'
bankManage: '题库列表',
practiceManage:'实操列表'
};

File diff suppressed because one or more lines are too long

View File

@ -291,6 +291,13 @@ class Jlmap {
(list || []).forEach(elem => {
const code = elem.code;
const type = elem._type;
if (elem.deviceType === 'TRAIN' && elem.type === 'HEAD') {
elem.serviceNumber = '';
} else if (elem.deviceType === 'TRAIN' && elem.type === 'MANUAL') {
elem.serviceNumber = '';
elem.tripNumber = '';
elem.destinationCode = '';
}
const oDevice = this.mapDevice[code] || deviceFactory(type, elem);
this.hookHandle(oDevice, elem);
});

View File

@ -99,7 +99,7 @@ export default class TrainBody extends Group {
textAlign: 'middle',
textVerticalAlign: 'top'
}) : '';
const serviceNumber = style.Train.trainServer.serviceNumberPrefix + (model.serviceNumber || style.Train.trainServer.defaultServiceNumber) + '';// 服务号(表号)
const serviceNumber = style.Train.trainServer.serviceNumberPrefix + (model.serviceNumber || model.model.specialServiceNumber || style.Train.trainServer.defaultServiceNumber) + '';// 服务号(表号)
const tripNumber = style.Train.trainTarget.tripNumberPrefix + (style.Train.trainTarget.defaultDirectionCode
? (model.directionCode || style.Train.trainTarget.defaultDirectionCode) + (model.tripNumber || style.Train.trainTarget.defaultTripNumber)
: model.tripNumber || style.Train.trainTarget.defaultTripNumber) + ''; // 车次号

View File

@ -29,12 +29,11 @@ export default class Train extends Group {
style.Train.trainBody.specialTrainType.some((item) => {
if (model.type === item.type) {
this.nameFormat = item.nameFormat;
model.serviceNumber = item.serviceNumber ? item.serviceNumber : model.serviceNumber;
model.specialServiceNumber = item.serviceNumber ? item.serviceNumber : model.serviceNumber;
return true;
}
});
}
this.create();
this.setState(model, this);
this.initShowStation(model);

View File

@ -82,9 +82,6 @@ export default {
data() {
return {
trainList: [],
categoryList: [
{ name: 'MM', value: '01' }
],
formModel: {
tripNumber: '',
groupNumber: '',
@ -121,27 +118,15 @@ export default {
...mapGetters('map', [
'map'
]),
trainNoIsDisabled() {
return false;
},
serverNoIsDisabled() {
return true;
},
targetCodeIsDisabled() {
return true;
},
trainNumberIsDisabled() {
if (this.operation != OperationEvent.Train.addTrainId.menu.operation) {
return true;
}
return '';
},
// trainTypeIsDisabled() {
// if (this.operation != OperationEvent.Train.addTrainId.menu.operation) {
// return true;
// }
// return '';
// },
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
@ -227,30 +212,9 @@ export default {
return this.$t('menu.menuTrain.editTrainId');
}
return '';
},
istargetCode() {
if (this.formModel.serviceNumber && this.formModel.targetCode) {
return false;
}
return true;
}
},
watch: {
// 'formModel.tripNumber': function(val) {
// if (val.length == 4) {
// // this.trainNoChange(val);
// } else {
// this.formModel = {
// groupNumber: this.formModel.groupNumber,
// tripNumber: val,
// type: this.formModel.type,
// serviceNumber: '',
// destinationCode: '',
// category: 'MM'
// };
// }
// }
},
watch: {},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('training/tipReload');
@ -287,18 +251,16 @@ export default {
},
trainNumberChange(groupNumber) {
const operate = {
val: `${groupNumber}`,
groupNumber: groupNumber,
operation: ''
};
if (this.operation == OperationEvent.Train.addTrainId.menu.operation) {
operate.operation = OperationEvent.Train.addTrainId.trainNumberChange.operation;
} else if (this.operation == OperationEvent.Train.editTrainId.menu.operation) {
operate.operation = OperationEvent.Train.editTrainId.trainNumberChange.operation;
}
this.$store.dispatch('training/next', operate).then(({ valid }) => {
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
@ -306,18 +268,15 @@ export default {
},
trainTypeChange(trainType) {
const operate = {
val: `${trainType}`,
type: trainType,
operation: ''
};
if (this.operation == OperationEvent.Train.addTrainId.menu.operation) {
operate.operation = OperationEvent.Train.addTrainId.trainTypeChange.operation;
} else if (this.operation == OperationEvent.Train.editTrainId.menu.operation) {
operate.operation = OperationEvent.Train.editTrainId.trainTypeChange.operation;
}
this.$store.dispatch('training/next', operate).then(({ valid }) => {
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
@ -325,42 +284,18 @@ export default {
},
trainNoChange(tripNumber) {
const operate = {
send: true,
val: tripNumber,
tripNumber: tripNumber,
operation: ''
};
if (this.operation == OperationEvent.Train.addTrainId.menu.operation) {
operate.operation = OperationEvent.Train.addTrainId.trainNoChange.operation;
operate.cmdType = CMD.Train.addTrainId;
} else if (this.operation == OperationEvent.Train.editTrainId.menu.operation) {
operate.operation = OperationEvent.Train.editTrainId.trainNoChange.operation;
operate.cmdType = CMD.Train.editTrainId;
}
Handler.undo(1);
this.$store.dispatch('training/next', operate).then(({ valid, response }) => {
this.$store.dispatch('training/tripNumber', operate).then(({ valid }) => {
if (valid) {
if (response.data) {
this.formModel = {
groupNumber: this.formModel.groupNumber,
tripNumber: tripNumber,
trainType: this.formModel.trainType,
serviceNumber: response.data.serviceNumber,
targetCode: response.data.targetCode,
category: 'MM'
};
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
} else {
this.formModel = {
groupNumber: this.formModel.groupNumber,
tripNumber: tripNumber,
trainType: this.formModel.trainType,
serviceNumber: '',
targetCode: '',
category: 'MM'
};
}
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
},
@ -377,23 +312,25 @@ export default {
addTrainId() {
this.$refs['form'].validate((valid) => {
if (valid) {
const model = this.formModel;
const operate = {
send: true,
operation: OperationEvent.Train.addTrainId.menu.operation,
cmdType: CMD.Train.CMD_ADD_TRAIN_ID,
messages: [this.$t('tip.addTrainIdTip')],
val: `${model.groupNumber}::${model.trainType}::${model.serviceNumber}::${model.tripNumber}::${model.targetCode}`
const params = {
groupNumber: this.formModel.groupNumber,
type: this.formModel.type,
serviceNumber: '',
tripNumber: '',
destinationCode: ''
};
this.loading = true;
this.$store.dispatch('training/next', operate).then(({ valid }) => {
if (this.formModel.type === 'PLAN') {
params.serviceNumber = this.formModel.serviceNumber;
params.tripNumber = this.formModel.tripNumber;
params.destinationCode = this.formModel.destinationCode;
} else if (this.formModel.type === 'HEAD') {
params.tripNumber = this.formModel.tripNumber;
params.destinationCode = this.formModel.destinationCode;
}
commitOperate(menuOperate.TrainWindow.addTrainId, params, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.confirmTrain.doShow(operate);
}
}).catch(() => {
this.loading = false;

View File

@ -268,6 +268,10 @@ export const menuOperate = {
editTrainId: {
operation: OperationEvent.Train.editTrainId.menu.operation,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
addTrainId: {
operation: OperationEvent.Train.addTrainId.menu.operation,
cmdType: ''
}
},
Common: {

View File

@ -0,0 +1,181 @@
<template>
<el-dialog
v-dialogDrag
class="xian-02__system train-move"
: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="12">车体号:</el-col>
<el-col :span="12">追踪号:</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-input :id="domIdInput" v-model="addModel.groupNumber" @change="inputGroupNumber" />
</el-col>
</el-row>
<el-row>
<el-col :span="12">车站</el-col>
<el-col :span="11" :offset="1">车次窗</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-input v-model="addModel.stationName" :disabled="true" />
</el-col>
<el-col :span="11" :offset="1">
<el-input v-model="addModel.trainWindowCode" :disabled="true" />
</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" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { MapDeviceType, OperationEvent } from '@/scripts/ConstDic';
import NoticeInfo from './childDialog/childDialog/noticeInfo';
export default {
name: 'TrainMove',
components: {
NoticeInfo
},
data() {
return {
trainNoList: [],
selected: null,
addModel: {
stationName: '',
trainWindowCode: '',
groupNumber: ''
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdInput() {
return this.dialogShow ? OperationEvent.Train.addTrainId.input.domId : '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.addTrainId.menu.domId : '';
},
title() {
return '移动车组号';
}
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('training/tipReload');
});
},
methods: {
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
const section = this.$store.getters['map/getDeviceByCode'](selected.sectionCode);
if (section) {
const station = this.$store.getters['map/getDeviceByCode'](section.stationCode);
if (station) {
this.addModel.stationName = station.name;
}
}
this.addModel.trainWindowCode = selected.code;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
inputGroupNumber() {
const operate = {
type: MapDeviceType.Train.type,
operation: OperationEvent.Train.addTrainId.input.operation,
val: this.addModel.groupNumber
};
this.$store.dispatch('training/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
},
commit() {
const operate = {
send: true,
type: MapDeviceType.Train.type,
operation: OperationEvent.Train.addTrainId.menu.operation,
val: this.addModel.groupNumber
};
this.loading = true;
this.$store.dispatch('training/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow(operate);
});
},
cancel() {
const operate = {
type: MapDeviceType.Train.type,
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('training/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
/deep/ .el-row {
margin: 10px
}
.xian-02__system .el-dialog .base-label {
background: rgba(0, 0, 0, 0.3);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -1,18 +1,16 @@
<template>
<div>
<pop-menu ref="popMenu" :menu="menu" :tip-msg="topTip" :tip-subhead="tipSubhead" />
<pop-menu ref="popMenu" :menu="menu" :tip-msg="topTip" :tip-subhead="tipSubhead" pop-class="xian-02__pop_tip_station" />
<notice-info ref="noticeInfo" />
<train-delete ref="trainDelete" />
<train-define ref="trainDefine" />
<train-move ref="trainMove" />
<!-- <train-edit ref="trainEdit" /> -->
<train-set-plan ref="trainSetPlan" />
<train-add-plan ref="trainAddPlan" />
<!-- <train-move-evently ref="trainMoveEvently" /> -->
<!-- <train-delete-plan ref="trainDeletePlan" /> -->
<train-set-head ref="trainSetHead" />
<train-set-work ref="trainSetWork" />
<trainSetWorkATP ref="trainSetWorkATP" />
<train-destination ref="trainDestination" />
</div>
</template>
@ -28,6 +26,7 @@ import TrainAddPlan from './dialog/trainAddPlan';
import TrainSetHead from './dialog/trainSetHead';
import TrainSetWork from './dialog/trainSetWork';
import trainSetWorkATP from './dialog/trainSetWorkATP';
import TrainDestination from './dialog/trainDestination';
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
@ -47,7 +46,8 @@ export default {
TrainAddPlan,
TrainSetHead,
TrainSetWork,
trainSetWorkATP
trainSetWorkATP,
TrainDestination
},
props: {
selected: {
@ -64,75 +64,6 @@ export default {
menu: [],
menuNormal: {
Local: [
// {
// label: '',
// handler: this.addTrainId,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.delTrainId,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.moveTrainId,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.addPlanTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// type: 'separator'
// },
// {
// label: '',
// handler: this.setPlanTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.setHeadTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.setWorkTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.undeveloped,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// type: 'separator'
// },
// {
// label: 'ATP',
// handler: this.setTrainATPdel,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: 'ATP',
// handler: this.setTrainATPRec,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// type: 'separator'
// },
// {
// label: '',
// handler: this.undeveloped,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.undeveloped,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// }
],
Center: [
{
@ -140,41 +71,51 @@ export default {
children: [
{
label: '目的地ID',
handler: this.atsAutoControlALL
// handler: this.updateDestination,
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '删除ID',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '更改追踪号',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '交换追踪号',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '运行等级',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '列车模式',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '惰性模式',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '旁路模式',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
}
]
},
{
label: '列车明细',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '请求',
@ -184,37 +125,45 @@ export default {
children:[
{
label: '扣车',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '发车 ',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
}
]
},
{
label: '停车/放行',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '就绪状态',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '测试',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '救援列车',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '开车门',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '关车门',
handler: this.atsAutoControlALL
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
}
]
},
@ -223,19 +172,23 @@ export default {
children: [
{
label: '创建设备标签',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '查看设备标签',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '更改设备标签',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '删除设备标签',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
}
]
},
@ -244,87 +197,21 @@ export default {
children: [
{
label: '完整性报警确认',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
}
]
},
{
label: '更新列车计划',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
},
{
label: '帮助',
handler: this.undeveloped
handler: this.undeveloped,
cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE
}
// {
// label: '',
// handler: this.addTrainId,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.delTrainId,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.moveTrainId,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.addPlanTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// type: 'separator'
// },
// {
// label: '',
// handler: this.setPlanTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.setHeadTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.setWorkTrain,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.undeveloped,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// type: 'separator'
// },
// {
// label: 'ATP',
// handler: this.setTrainATPdel,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: 'ATP',
// handler: this.setTrainATPRec,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// type: 'separator'
// },
// {
// label: '',
// handler: this.undeveloped,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// },
// {
// label: '',
// handler: this.undeveloped,
// cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
// }
]
},
menuForce: [
@ -375,14 +262,16 @@ export default {
},
initMenu() {
//
this.menu = MenuContextHandler.covert(this.menuNormal);
if (this.$store.state.training.prdType === '02') {
this.menu = this.menuNormal.Center;
}
//
if (this.operatemode === OperateMode.FAULT) {
this.menu = this.menuForce;
}
},
doShow(point) {
this.topTip = `道岔: ${this.selected.name}`;
this.topTip = `车辆: ${this.selected.serviceNumber}`;
this.clickEvent();
this.initMenu();
@ -604,6 +493,23 @@ export default {
this.$refs.trainSetWorkATP.doShow(operate, this.selected);
}
});
},
updateDestination() {
const operate = {
start: true,
code: this.selected.code,
operation: OperationEvent.Train.destinationTrainId.menu.operation,
param: {
trainCode: this.selected.code
}
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) =>{
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', {break: true});
this.$refs.trainDestination.doShow(operate, this.selected);
this.doClose();
}
});
}
}
};

View File

@ -122,10 +122,12 @@ const RunPlanApproval = () => import('@/views/approval/runPlan/index');
const DeviceManage = () => import('@/views/system/deviceManage/index');
const MapSort = () => import('@/views/publish/publishMap/mapSort');
const StudentManage = () => import('@/views/studentManage');
const RaceManage = () => import('@/views/competitionManage/index');
const RaceManage = () => import('@/views/competitionManage/competition/index');
const BankManage = () => import('@/views/competitionManage/bankList/index');
const PracticeManage = () => import('@/views/competitionManage/practiceList/index');
const QuestionCreatePage = () => import('@/views/competitionManage/bankList/question-create-page');
const QuestionUpdatePage = () => import('@/views/competitionManage/bankList/question-update-page');
const GeneratePaper = () => import('@/views/competitionManage/generatePaper');
const CompetitionDetail = () => import('@/views/jsxt/competition/examDetail');
const CompetitionManage = () => import('@/views/jsxt/competition/index');
@ -940,6 +942,14 @@ export const asyncRouter = [
icon: 'design'
}
},
{
path: 'practice',
component: PracticeManage,
meta: {
i18n: 'router.practiceManage',
icon: 'design'
}
},
{
path: 'questionCreate',
component: QuestionCreatePage,
@ -949,6 +959,11 @@ export const asyncRouter = [
path: 'questionUpdate/:questionId',
component: QuestionUpdatePage,
hidden: true
},
{
path: 'generate',
component: GeneratePaper,
hidden: true
}
]
}

View File

@ -9,7 +9,7 @@ export function getBaseUrl() {
BASE_API = 'http://192.168.3.82:9000'; // 杜康
// BASE_API = 'http://b29z135112.zicp.vip';
// BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康
// BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛
// BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛
} else {
BASE_API = process.env.VUE_APP_BASE_API;
}

View File

@ -86,6 +86,7 @@ export default {
&__container {
width: 55%;
margin: auto;
padding:20px 0px;
&-header {
margin-bottom: 10px;
.step-group {

View File

@ -85,6 +85,10 @@ export default {
{
name: '裁判地址',
handleClick: this.showRefereeUrl
},
{
name: '生成试卷',
handleClick: this.generatePaper
}
]
}
@ -168,6 +172,9 @@ export default {
document.execCommand('Copy'); //
this.$message.success('报名路径已经复制到粘贴板');
});
},
generatePaper(index, row) {
this.$router.push({ path: `/design/race/generate`, query: {raceId:row.id} });
}
}
};

View File

@ -0,0 +1,105 @@
<template>
<div style="width: 100%;height: 100%;">
<div style="margin-top: 10px;position: absolute; right: 50px;">
<el-button size="small" type="primary">导出试题</el-button>
<el-button size="small" type="primary" @click="goBack">返回</el-button>
</div>
<el-card style="width: 45%;margin-left: 50px;margin-top: 60px;display: inline-block;">
<div slot="header">
<span>理论试题列表</span>
<el-button style="float: right; padding: 3px 0" type="text">添加试题</el-button>
<el-button style="float: right; padding: 3px 0;margin-right: 5px" type="text">预览</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="type"
label="类型"
>
<template slot-scope="scope">
<el-tag
type="primary"
disable-transitions
>{{ QuestionTypeMap[scope.row.type] }}</el-tag>
</template>
</el-table-column>
<el-table-column
prop="topic"
label="题目"
/>
<el-table-column
prop="score"
label="分值"
/>
<el-table-column prop="operate" label="操作">
<template slot-scope="scope">
<el-button type="warning" size="mini" @click="removeQuestion(index, scope)">移出</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card style="width: 45%;margin-left: calc(10% - 100px);margin-top: 60px;display: inline-block;">
<div slot="header">
<span>实操试题列表</span>
<el-button style="float: right; padding: 3px 0" type="text">添加试题</el-button>
<el-button style="float: right; padding: 3px 0;margin-right: 5px" type="text">预览</el-button>
</div>
<el-table
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="type"
label="类型"
>
<template slot-scope="scope">
<el-tag
type="primary"
disable-transitions
>{{ QuestionTypeMap[scope.row.type] }}</el-tag>
</template>
</el-table-column>
<el-table-column
prop="topic"
label="题目"
/>
<el-table-column
prop="score"
label="分值"
/>
<el-table-column prop="operate" label="操作">
<template slot-scope="scope">
<el-button type="warning" size="mini" @click="removeQuestion(index, scope)">移出</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</template>
<script>
export default {
name: 'GeneratPaper',
data() {
return {
tableData: [],
QuestionTypeMap: {
select: '选择题',
judge: '判断题'
}
};
},
methods: {
removeQuestion(index, row) {},
goBack() {
this.$router.go(-1);
}
}
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,110 @@
<template>
<el-dialog :title="title" :visible.sync="dialogVisible" width="500px" :before-close="doClose" center>
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="doCreate">{{ $t('global.confirm') }}</el-button>
<el-button @click="doClose">{{ $t('global.cancel') }}</el-button>
</span>
</el-dialog>
</template>
<script>
import { getScriptByIdBasic} from '@/api/script';
export default {
name: 'ScriptDraft',
props: {
title: {
type: String,
default() {
return '';
}
}
},
data() {
return {
dialogVisible: false,
mapList: [],
taskStatusList: [],
formModel: {
name: '',
mapId: '',
description:''
}
};
},
computed: {
form() {
const form = {
labelWidth: '150px',
items: [
{ prop: 'name', label: '实操名称', type: 'text' },
{ prop: 'description', label: '实操描述', type: 'textarea' }
]
};
return form;
},
rules() {
const crules = {
name: [
{ validator: this.validateScriptName, trigger: 'blur' },
{ validator: this.validateScriptName, trigger: 'change' }
],
description: [
{ validator: this.validateDescription, trigger: 'blur' },
{ validator: this.validateDescription, trigger: 'change' }
]
};
return crules;
}
},
methods: {
validateScriptName(rule, value, callback) {
if (value.trim().length === 0) {
this.formModel.name = this.formModel.name.replace(/\s/g, '');
return callback(new Error('请输入实操名称'));
} else {
return callback();
}
},
validateDescription(rule, value, callback) {
if (value.trim().length === 0) {
this.formModel.description = this.formModel.description.replace(/\s/g, '');
return callback(new Error('请输入实操描述'));
} else {
return callback();
}
},
doShow(questid) {
if (questid) {
getScriptByIdBasic(questid).then(resp=>{
const data = {'name':resp.data.name, 'description':resp.data.description, 'mapId':resp.data.mapId};
this.formModel = data;
this.formModel.id = questid;
this.dialogVisible = true;
});
} else {
this.formModel.mapId = this.$route.params.mapId;
this.dialogVisible = true;
}
},
doCreate() {
const self = this;
this.$refs.dataform.validateForm(() => {
self.$emit('create', Object.assign({}, this.formModel));
self.doClose();
});
},
doClose() {
this.$refs.dataform.resetForm();
this.dialogVisible = false;
}
}
};
</script>
<style lang="scss" scoped>
/deep/ .el-dialog--center .el-dialog__body{
padding: 25px 65px 30px 10px;
}
</style>

View File

@ -0,0 +1,126 @@
<template>
<div>
<query-list-page ref="user" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
<create-practice ref="createPractice" title="创建实操" @reloadTable="reloadTable" @create="handleConfirmCreate" />
<create-practice ref="modifyPractice" title="修改实操" @reloadTable="reloadTable" @create="handleConfirmModify" />
</div>
</template>
<script>
import { getPracticeList } from '@/api/competitionManage';
import CreatePractice from './create';
export default {
name:'PracticeManage',
components:{
CreatePractice
},
data() {
return {
pagerConfig: {
pageSize: 'pageSize',
pageIndex: 'pageNum'
},
queryForm: {
reset: true,
labelWidth: '80px',
queryObject: {
raceId: {
type: 'select',
label: '竞赛名称',
config: {
data: []
}
},
name: {
type: 'text',
label: '实操名称'
}
}
},
queryList: {
// query: getPracticeList,
data:[],
selectCheckShow: false,
indexShow: true,
columns: [
{
title: '竞赛名称',
prop: 'raceId',
type: 'tag',
width: '320',
columnValue: (row) => { return this.$ConstSelect.translate(row.type, 'QuestionTypeList'); },
tagType: (row) => {
return '';
}
},
{
title: '实操名称',
prop: 'topic'
},
{
title: '创建人',
prop: 'createUserName',
width: '100'
},
{
type: 'button',
title: '操 作',
width: '420',
buttons: [
{
name: '录 制',
handleClick: this.doRecord,
type: 'success'
},
{
name: '更 新',
handleClick: this.doUpdate,
type: 'primary'
},
{
name: '删 除',
handleClick: this.doDelete,
type: 'danger'
},
{
name: '预 览',
handleClick: this.doDetail
}
]
}
],
actions: [
{ text: '添 加', handler: this.doCreate }
]
}
};
},
methods:{
doCreate() {
this.$refs.createPractice.doShow(null);
},
doDetail() {
},
doDelete() {
},
doRecord() {
},
doUpdate() {
},
reloadTable() {
if (this.queryList && this.queryList.reload) {
this.queryList.reload();
}
},
handleConfirmCreate() {
},
handleConfirmModify() {
}
}
};
</script>