Merge remote-tracking branch 'remotes/origin/test'

This commit is contained in:
joylink_cuiweidong 2021-06-11 18:19:24 +08:00
commit 1c112b6ecb
33 changed files with 1334 additions and 349 deletions

View File

@ -145,6 +145,50 @@ export function generateOfflineUser(data) {
data: data
});
}
// 创建第三方用户
export function createThirdCount(data) {
return request({
url: `/api/user`,
method: 'post',
data: data
});
}
// 第三方用户登陆通过url登陆
export function thirdCountLogin(data) {
return request({
url: `/api/login/third`,
method: 'post',
data: data
});
}
/** 查询在线的用户列表*/
export function getLoginUserList(params) {
return request({
url: `/api/loginUser/paging`,
method: 'get',
params: params
});
}
/** 将权限分发包分发给指定账户 */
export function distributePackage(id, accountId) {
return request({
url: `/api/distribute/${id}/distribute/${accountId} `,
method: 'post'
});
}
/** 删除账户(逻辑删除) */
export function deleteUserInLogic(id) {
return request({
url: `/api/user/${id}`,
method: 'delete'
});
}
// 导入学生成绩
export function importStudentResults(projectCode, data) {
return request({

View File

@ -63,6 +63,7 @@ export default {
dataDictionary: 'Data dictionary',
dataDictionaryDetails: 'Data dictionary details',
userManage: 'user management',
loginUserManage:'login user Manage',
cacheManage: 'cache management',
userTrainingManage: 'User training management',
userExamManage: 'User examination management',

View File

@ -62,6 +62,7 @@ export default {
dataDictionary: '数据字典',
dataDictionaryDetails: '数据字典明细',
userManage: '用户管理',
loginUserManage:'在线用户管理',
cacheManage: '缓存管理',
userTrainingManage: '用户实训统计',
userExamManage: '用户考试统计',

View File

@ -8,6 +8,7 @@ import zrender from 'zrender';
import localStore from 'storejs';
import Options from './options';
import MouseController from './mouseController';
import KeyboardController from './keyboardController';
import Painter from './painter';
import deviceType from './constant/deviceType';
import {calculateDCenter, createBoundingRect, deviceFactory} from './utils/parser';
@ -22,7 +23,7 @@ class IbpPan {
this.methods = opts.methods;
// 鼠标事件
this.events = { __Pan: 'pan', Selected: 'selected', MouseDown: 'mouseDown', Contextmenu: 'contextmenu'};
this.events = { __Pan: 'pan', Selected: 'selected', MouseDown: 'mouseDown', MouseUp: 'mouseUp', Contextmenu: 'contextmenu', Keyboard: 'keyboard'};
// 设备数据
this.ibpDevice = {};
@ -41,8 +42,10 @@ class IbpPan {
this.$ibpZr = zrender.init(opts.dom, Object.assign({ renderer, devicePixelRatio, width, height }, opts.config));
this.$options = new Options(Object.assign({ scaleRate: 1, offsetX: 0, offsetY: 0 }, opts.options || {})); // 缩放
this.$mouseController = new MouseController(this);
this.$keyboardController = new KeyboardController(this);
this.$mouseController.enable();
this.$keyboardController.enable();
this.$painter = new Painter(this);
this.$painter.updateZrSize({width: this.$ibpZr.getWidth(), height: this.$ibpZr.getHeight()});
@ -285,6 +288,7 @@ class IbpPan {
this.clear();
this.$mouseController.dispose();
this.$keyboardController.disable();
this.$ibpZr && zrender.dispose(this.$ibpZr);
this.$painter.dispose();
}
@ -299,6 +303,9 @@ class IbpPan {
case this.events.MouseDown:
this.$mouseController.on(this.events.MouseDown, cb, context);
break;
case this.events.MouseUp:
this.$mouseController.on(this.events.MouseUp, cb, context);
break;
case this.events.Contextmenu:
this.$mouseController.on(this.events.Contextmenu, cb, context);
break;
@ -308,6 +315,9 @@ class IbpPan {
case this.events.__Pan:
this.$mouseController.on(this.events.__Pan, this.optionsHandler);
break;
case this.events.Keyboard:
this.$keyboardController.on(this.events.Keyboard, cb, context);
break;
}
}
}
@ -322,6 +332,9 @@ class IbpPan {
case this.events.MouseDown:
this.$mouseController.off(this.events.MouseDown, cb);
break;
case this.events.MouseUp:
this.$mouseController.off(this.events.MouseUp, cb);
break;
case this.events.Contextmenu:
this.$mouseController.off(this.events.Contextmenu, cb);
break;
@ -331,6 +344,9 @@ class IbpPan {
case this.events.__Pan:
this.$mouseController.off(this.events.__Pan, cb);
break;
case this.events.Keyboard:
this.$keyboardController.off(this.events.Keyboard, cb);
break;
}
}
}

View File

@ -0,0 +1,33 @@
import Eventful from "zrender/src/mixin/Eventful";
export default class keyboardController extends Eventful {
constructor(ibp) {
super();
this.$ibp = ibp;
this.$zr = ibp.getZr();
this.events = ibp.getEvents();
this.initHandler(this.$zr);
}
initHandler(zr) {
if (zr) {
let keyActionHandler = this.keyAction.bind(this);
this.enable = (opt = {}) => {
window.addEventListener("keyup", keyActionHandler, false);
window.addEventListener("keydown", keyActionHandler, false);
};
this.disable = () => {
window.removeEventListener("keyup", keyActionHandler, false);
window.removeEventListener("keydown", keyActionHandler, false);
};
}
}
keyAction(e) {
if (!e.repeat) {
this.trigger(this.events.Keyboard, e);
}
}
}

View File

@ -163,6 +163,7 @@ class MouseController extends Eventful {
this.eventTarget = '';
this._dragging = false;
this.deviceList = [];
this.trigger(this.events.MouseUp, new EventModel(e));
}
contextmenu(e) {

View File

@ -135,8 +135,6 @@ export function JLmapDriving(dom,data,mapId,storemod,translation,routegroup,proj
// sound.play();
// });
let controls3 = new MouseControls(camera, 1.6);
controls3.enabled = false;
// controls3.getObject().rotation.x = Math.PI/2;

View File

@ -42,7 +42,7 @@ export default {
operateType: 'CM_Apply_For_Center_Control',
skinCode: '02',
trainingName: '转为中控({1})',
trainingRemark: '控制权限转换,站控转中控',
trainingRemark: '控制权收回行调办理时使用,行调获得控制权后,行调可对设备进行操作,集中站无法对设备进行操作',
trainingType: 'ControlConvertMenu',
productTypes: ['02'],
stepVOList: [
@ -61,7 +61,7 @@ export default {
operateType: 'CM_Apply_For_Station_Control',
skinCode: '02',
trainingName: '转为站控({1})',
trainingRemark: '控制权限转换,中控转站控',
trainingRemark: 'ATS 系统的控制模式有中控和站控两种控制模式且某一时刻只能为其中的一种模式在信号系统工作正常时一般使用ATS系统的中控模式当个别车站有表示故障或信号设备故障如计轴故障等出问题的车站可以转为站控请求站控请求控制权下放车站办理需行调同意后方可转为站控转为站控后集中站可对设备进行操作。',
trainingType: 'ControlConvertMenu',
productTypes: ['01'],
stepVOList: [
@ -80,7 +80,7 @@ export default {
operateType: 'CM_Force_Station_Control',
skinCode: '02',
trainingName: '强制站控({1})',
trainingRemark: '控制权限转换,强制站控',
trainingRemark: '出现故障时,应先尝试站控,无法恢复后,可强制获得站控权',
trainingType: 'ControlConvertMenu',
productTypes: ['01'],
stepVOList: [
@ -127,7 +127,7 @@ export default {
operateType: 'Stand_Set_Hold_Train',
skinCode: '02',
trainingName: '站台扣车({10}-{12}站台)',
trainingRemark: '设置扣车功能',
trainingRemark: '对指定站台设置扣车,设置后当列车运行至该站台时,将会执行扣车,列车不再行驶',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -141,7 +141,7 @@ export default {
operateType: 'Stand_Cancel_Hold_Train',
skinCode: '02',
trainingName: '站台取消扣车({10}-{12}站台)',
trainingRemark: '设置取消扣车功能',
trainingRemark: '对指定站台取消之前设置的扣车',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -155,7 +155,7 @@ export default {
operateType: 'Stand_Force_Cancel_Hold_Train',
skinCode: '02',
trainingName: '强制取消扣车({10}-{12}站台)',
trainingRemark: '强制取消扣车功能',
trainingRemark: '对指定站台强制取消之前设置的扣车 1中心与车站通信中断时在现地控制工作站在站控模式下可强制取消中心设置的扣车 2存在 ATP 扣车但是扣车位置未知时现地控制工作站在站控模式下可强制取消 ATP 扣车。',
trainingType: 'Stand',
productTypes: ['01'],
stepVOList: [
@ -198,7 +198,7 @@ export default {
operateType: 'Stand_Set_Jump_Stop',
skinCode: '02',
trainingName: '站台跳停({10}-{12}站台)',
trainingRemark: '设置跳停功能',
trainingRemark: '对指定站台设置跳停命令,命令后续列车不停站通过该站台',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -212,7 +212,7 @@ export default {
operateType: 'Stand_Cancel_Jump_Stop',
skinCode: '02',
trainingName: '取消跳停({10}-{12}站台)',
trainingRemark: '设置取消跳停功能',
trainingRemark: '对指定站台取消之前设置的跳停命令',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -226,7 +226,7 @@ export default {
operateType: 'Stand_View_Status',
skinCode: '02',
trainingName: '查询站台状态({10}-{12}站台)',
trainingRemark: '查询站台状态功能',
trainingRemark: '用于查看站台上已设置的命令信息,包括人工设置的停站时间、运行等级、扣车命令、跳停命令等',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -240,7 +240,7 @@ export default {
operateType: 'Stand_Set_Park_Time',
skinCode: '02',
trainingName: '设置停站时间({10}-{12}站台)',
trainingRemark: '设置停站时间(自动, 一直有效)',
trainingRemark: '对某一指定站台设置列车停站时间 (自动, 一直有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -256,7 +256,7 @@ export default {
operateType: 'Stand_Set_Park_Time',
skinCode: '02',
trainingName: '设置停站时间({10}-{12}站台)',
trainingRemark: '设置停站时间(人工, 20秒, 一直有效)',
trainingRemark: '对某一指定站台设置列车停站时间 (人工, 20秒, 一直有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -274,7 +274,7 @@ export default {
operateType: 'Stand_Set_Park_Time',
skinCode: '02',
trainingName: '设置停站时间({10}-{12}站台)',
trainingRemark: '设置停站时间(人工, 20秒, 一次有效)',
trainingRemark: '对某一指定站台设置列车停站时间 (人工, 20秒, 一次有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -291,7 +291,7 @@ export default {
operateType: 'Stand_Set_Run_Time',
skinCode: '02',
trainingName: '设置运行等级({10}-{12}站台)',
trainingRemark: '设置运行等级(设置区间运行时间为60一直有效)',
trainingRemark: '设置某一指定站台到下一站台的区间运行时间 (设置区间运行时间为60一直有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -308,7 +308,7 @@ export default {
operateType: 'Stand_Set_Run_Time',
skinCode: '02',
trainingName: '设置运行等级({10}-{12}站台)',
trainingRemark: '设置运行等级(设置区间运行时间为60一次有效)',
trainingRemark: '设置某一指定站台到下一站台的区间运行时间 (设置区间运行时间为60一次有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -324,7 +324,7 @@ export default {
operateType: 'Stand_Early_Depart',
skinCode: '02',
trainingName: '设置提前发车({10}-{12}站台)',
trainingRemark: '设置提前发车功能',
trainingRemark: '对指定站台设置提前发车命令,允许该站台当前停站列车立即发车,不论是否还剩余停站时间',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -338,7 +338,7 @@ export default {
operateType: 'Stand_Set_Reentry_Strategy',
skinCode: '02',
trainingName: '人工折返策略设置({10}-{12}站台)',
trainingRemark: '人工折返策略设置功能',
trainingRemark: '设定车辆运行至该站时的折返方式 (无折返)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -354,7 +354,7 @@ export default {
operateType: 'Section_Fault_Unlock',
skinCode: '02',
trainingName: '区段故障解锁({8}{9})',
trainingRemark: '故障解锁功能',
trainingRemark: '列车通过进路时,因进路中设备故障,无法正常解锁时,需采用故障解锁使未解锁的部分解锁',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -371,7 +371,7 @@ export default {
operateType: 'Section_Cut_Off',
skinCode: '02',
trainingName: '区段切除({8}{9})',
trainingRemark: '区段切除',
trainingRemark: '对某一计轴设置切除状态ATS不再使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -385,7 +385,7 @@ export default {
operateType: 'Section_Active',
skinCode: '02',
trainingName: '区段激活({8}{9})',
trainingRemark: '区段激活功能',
trainingRemark: '取消某一计轴上被设置的切除状态ATS重新使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -399,7 +399,7 @@ export default {
operateType: 'Section_Axis_Pre_Reset',
skinCode: '02',
trainingName: '计轴预复位({8}{9})',
trainingRemark: '计轴预复位功能',
trainingRemark: '预复位是在计轴故障时预重置计轴区段',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -416,7 +416,7 @@ export default {
operateType: 'Section_Block',
skinCode: '02',
trainingName: '区段封锁({8}{9})',
trainingRemark: '区段封锁功能',
trainingRemark: '封锁后,禁止通过该区段排列进路',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -430,7 +430,7 @@ export default {
operateType: 'Section_Unblock',
skinCode: '02',
trainingName: '区段解封({8}{9})',
trainingRemark: '区段解封功能',
trainingRemark: '允许通过该区段排列进路',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -447,7 +447,7 @@ export default {
operateType: 'Section_Set_Limit_Speed',
skinCode: '02',
trainingName: '区段设置限速({8}{9})',
trainingRemark: '区段设置限速功能限速值5',
trainingRemark: '区段设置限速限速值5',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -469,7 +469,7 @@ export default {
operateType: 'Section_Cancel_Limit_Speed',
skinCode: '02',
trainingName: '区段取消限速({8}{9})',
trainingRemark: '区段取消限速功能',
trainingRemark: '取消对区段的限速',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -491,7 +491,7 @@ export default {
operateType: 'Switch_Single_Lock',
skinCode: '02',
trainingName: '道岔单锁({7})',
trainingRemark: '道岔单锁功能',
trainingRemark: '锁定单个道岔,阻止转换',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -505,7 +505,7 @@ export default {
operateType: 'Switch_Single_Unlock',
skinCode: '02',
trainingName: '道岔单解({7})',
trainingRemark: '道岔单解功能',
trainingRemark: '取消对单个道岔的锁定,道岔可以转换',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -522,7 +522,7 @@ export default {
operateType: 'Switch_Block',
skinCode: '02',
trainingName: '道岔封锁({7})',
trainingRemark: '道岔封锁功能',
trainingRemark: '禁止通过道岔排列进路,但道岔可通过转换道岔命令进行位置转换。',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -536,7 +536,7 @@ export default {
operateType: 'Switch_Unblock',
skinCode: '02',
trainingName: '道岔解封({7})',
trainingRemark: '道岔解封功能',
trainingRemark: '允许通过道岔排列进路',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -553,7 +553,7 @@ export default {
operateType: 'Switch_Turn',
skinCode: '02',
trainingName: '道岔转动({7})',
trainingRemark: '道岔转动功能({15}转{16})',
trainingRemark: '转换道岔至{16}(道岔区段逻辑空闲;道岔没有被锁闭(没有被进路、保护区段、侧防征用);道岔没有挤岔。道岔没有(单独)锁定。)',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -567,7 +567,7 @@ export default {
operateType: 'Switch_Fault_Unlock',
skinCode: '02',
trainingName: '道岔区段故障解锁({7})',
trainingRemark: '道岔区段故障解锁功能',
trainingRemark: '列车通过进路时,因进路中设备故障,无法正常解锁时,需采用故障解锁使未解锁的部分解锁',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -584,7 +584,7 @@ export default {
operateType: 'Switch_Axle_Pre_Reset',
skinCode: '02',
trainingName: '道岔计轴预复位({7})',
trainingRemark: '道岔计轴预复位功能',
trainingRemark: '预复位是在计轴故障时预重置计轴区段',
trainingType: 'Switch',
productTypes: ['01'],
stepVOList: [
@ -601,7 +601,7 @@ export default {
operateType: 'Switch_Cut_Off',
skinCode: '02',
trainingName: '道岔区段切除({7})',
trainingRemark: '道岔区段切除',
trainingRemark: '对某一计轴设置切除状态ATS不再使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -615,7 +615,7 @@ export default {
operateType: 'Switch_Active',
skinCode: '02',
trainingName: '道岔区段激活({7})',
trainingRemark: '道岔区段激活功能',
trainingRemark: '取消某一计轴上被设置的切除状态ATS重新使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -629,7 +629,7 @@ export default {
operateType: 'Switch_Set_Limit_Speed',
skinCode: '02',
trainingName: '道岔区段设置限速({7})',
trainingRemark: '道岔区段设置限速功能限速值5',
trainingRemark: '道岔设置限速限速值5',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -648,7 +648,7 @@ export default {
operateType: 'Switch_Cancel_Limit_Speed',
skinCode: '02',
trainingName: '道岔区段取消限速({7})',
trainingRemark: '道岔区段取消限速功能',
trainingRemark: '取消对道岔的限速',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -667,7 +667,7 @@ export default {
operateType: 'Signal_Set_Route',
skinCode: '02',
trainingName: '进路选排({3})',
trainingRemark: '选择排列进路',
trainingRemark: '进路:列车在站内运行时所经由的路径。依据进路是否建立,可以将进路状态分成锁闭状态和解锁状态。建立了进路,即指利用该进路排列了进路,称该进路处于锁闭状态。进路处于锁闭状态时,进路上的所有道岔被锁闭在规定位置(不能转换位置),防护该进路的信号机才能开放,列车才可能在该进路上运行。',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -683,7 +683,7 @@ export default {
operateType: 'Signal_Find_Routes_Status',
skinCode: '04',
trainingName: '查询进路控制模式({5} 信号机)',
trainingRemark: '查询进路控制模式',
trainingRemark: '查看某个信号机为始端的进路是否处于ATS自动触发状态',
trainingType:'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -697,7 +697,7 @@ export default {
operateType: 'Signal_Cancel_Route',
skinCode: '02',
trainingName: '进路取消({3})',
trainingRemark: '进路取消',
trainingRemark: '当列车运行通过锁闭的进路后,该进路将被解锁而处于解锁状态。解锁状态时进路上道岔随时有转换位置的可能,列车在该进路上运行将极其危险,因而一般不允许列车在没有锁闭的进路上运行。',
trainingType: 'Signal',
productTypes: ['02'],
stepVOList: [
@ -712,7 +712,7 @@ export default {
operateType: 'Signal_Cancel_Route',
skinCode: '02',
trainingName: '进路取消({3})',
trainingRemark: '进路取消',
trainingRemark: '当列车运行通过锁闭的进路后,该进路将被解锁而处于解锁状态。解锁状态时进路上道岔随时有转换位置的可能,列车在该进路上运行将极其危险,因而一般不允许列车在没有锁闭的进路上运行。',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -726,7 +726,7 @@ export default {
operateType: 'Signal_Block',
skinCode: '02',
trainingName: '信号封闭({5})',
trainingRemark: '信号封闭',
trainingRemark: '封锁在关闭状态下的信号机,信号机被封锁后,将不能开放主信号',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -740,7 +740,7 @@ export default {
operateType: 'Signal_Unblock',
skinCode: '02',
trainingName: '信号解封({5})',
trainingRemark: '信号解封',
trainingRemark: '取消对关闭状态下的信号机的封锁',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -758,7 +758,7 @@ export default {
operateType: 'Signal_Close_Signal',
skinCode: '02',
trainingName: '信号关灯({5})',
trainingRemark: '信号关灯',
trainingRemark: '设置信号机为关闭状态',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -773,7 +773,7 @@ export default {
operateType: 'Signal_Reopen_Signal',
skinCode: '02',
trainingName: '信号重开({5})',
trainingRemark: '信号重开',
trainingRemark: '信号由于故障(如锁闭的进路区段故障)或人工干预导致信号关闭,此后调度运营想再次开放此信号(前提是信号开放的条件具备,如故障区段已恢复),可以执行信号重开使信号重新开放',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -788,7 +788,7 @@ export default {
operateType: 'Signal_Set_Guide',
skinCode: '02',
trainingName: '进路引导({3})',
trainingRemark: '进路办理信号引导',
trainingRemark: '接车进路上轨道电路故障占用或进站信号机无法开放允许灯光时,以引导进路方式接车。',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -805,7 +805,7 @@ export default {
operateType: 'Signal_Set_Guide',
skinCode: '02',
trainingName: '引导进路办理({3})',
trainingRemark: '进路办理信号引导',
trainingRemark: '接车进路上轨道电路故障占用或进站信号机无法开放允许灯光时,以引导进路方式接车。',
trainingType: 'Signal',
productTypes: ['02'],
stepVOList: [
@ -822,7 +822,7 @@ export default {
operateType: 'Signal_Open_Auto_Setting',
skinCode: '02',
trainingName: '进路交ATS自动控({3})',
trainingRemark: '进路交ATS自动控',
trainingRemark: '将某个信号机为始端的某条进路设置为由ATS自动触发使能',
trainingType: 'Signal',
productTypes: ['02'],
stepVOList: [
@ -837,7 +837,7 @@ export default {
operateType: 'Signal_Close_Auto_Setting',
skinCode: '02',
trainingName: '进路交人工控({3})',
trainingRemark: '进路交人工控',
trainingRemark: '将某个信号机为始端的进路取消ATS自动触发使能转为人工办理',
trainingType: 'Signal',
productTypes: ['02'],
stepVOList: [
@ -846,27 +846,27 @@ export default {
{ deviceType: '04', orderNum: 3, operateCode: '314', tip: '鼠标左键点击【确定】按钮', val: '{4}' }
]
},
{
maxDuration: 15,
minDuration: 8,
operateType: 'Signal_Find_Routes_Status',
skinCode: '02',
trainingName: '查询进路控制状态({5})',
trainingRemark: '查询进路控制状态',
trainingType: 'Signal',
productTypes: ['02'],
stepVOList: [
{ deviceType: '04', orderNum: 1, operateCode: '316', tip: '鼠标右键菜单选择【查询进路控制模式】' },
{ deviceType: '04', orderNum: 2, operateCode: '316', tip: '鼠标左键点击【确定】按钮' }
]
},
// {
// maxDuration: 15,
// minDuration: 8,
// operateType: 'Signal_Find_Routes_Status',
// skinCode: '02',
// trainingName: '查询进路控制状态({5})',
// trainingRemark: '查询进路控制状态',
// trainingType: 'Signal',
// productTypes: ['02'],
// stepVOList: [
// { deviceType: '04', orderNum: 1, operateCode: '316', tip: '鼠标右键菜单选择【查询进路控制模式】' },
// { deviceType: '04', orderNum: 2, operateCode: '316', tip: '鼠标左键点击【确定】按钮' }
// ]
// },
{
maxDuration: 15,
minDuration: 8,
operateType: 'Signal_Set_CI_Auto',
skinCode: '02',
trainingName: '设置联锁自动进路({5})',
trainingRemark: '设置联锁自动进路',
trainingRemark: '进行联锁进路排列为NRM驾驶模式及RM驾驶模式的列车提供行车的进路',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -880,7 +880,7 @@ export default {
operateType: 'Signal_Cancel_CI_Auto',
skinCode: '02',
trainingName: '取消联锁自动进路({5})',
trainingRemark: '取消联锁自动进路',
trainingRemark: '取消联锁进路排列',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -894,7 +894,7 @@ export default {
operateType: 'Signal_Set_CI_Auto_Trigger',
skinCode: '02',
trainingName: '设置联锁自动触发({5})',
trainingRemark: '设置联锁自动触发',
trainingRemark: '设置单架信号机处于联锁自动排列进路',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -908,7 +908,7 @@ export default {
operateType: 'Signal_Cancel_CI_Auto_Trigger',
skinCode: '02',
trainingName: '取消联锁自动触发({5})',
trainingRemark: '取消联锁自动触发',
trainingRemark: '取消单架信号机处于联锁自动排列进路',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [

View File

@ -6,7 +6,7 @@ export default {
operateType: 'Stand_Set_Hold_Train',
skinCode: '06',
trainingName: '扣车({10}-{12} 站台)',
trainingRemark: '设置扣车功能',
trainingRemark: '对指定站台设置扣车,设置后当列车运行至该站台时,将会执行扣车,列车不再行驶',
trainingType: 'Stand',
productTypes: ['01', '02'], // 产品类型 01 现地 02 行调
stepVOList: [
@ -21,7 +21,7 @@ export default {
operateType: 'Stand_Cancel_Hold_Train',
skinCode: '06',
trainingName: '取消扣车({10}-{12} 站台)',
trainingRemark: '取消扣车功能',
trainingRemark: '对指定站台取消之前设置的扣车',
trainingType: 'Stand',
productTypes: ['01', '02'], // 产品类型 01 现地 02 行调
stepVOList: [
@ -64,7 +64,7 @@ export default {
operateType: 'Stand_Early_Depart',
skinCode: '06',
trainingName: '提前发车({10}-{12}站台)',
trainingRemark: '提前发车功能',
trainingRemark: '对指定站台设置提前发车命令,允许该站台当前停站列车立即发车,不论是否还剩余停站时间',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -79,7 +79,7 @@ export default {
operateType: 'Stand_Set_Jump_Stop',
skinCode: '06',
trainingName: '设置跳停({10}-{12}站台)',
trainingRemark: '设置跳停功能',
trainingRemark: '对指定站台设置跳停命令,命令后续列车不停站通过该站台',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -93,7 +93,7 @@ export default {
operateType: 'Stand_Set_Jump_Stop',
skinCode: '06',
trainingName: '设置跳停({10}-{12}站台)',
trainingRemark: '设置指定001号列车跳停功能',
trainingRemark: '对指定站台指定列车设置跳停命令,命令该列车不停站通过该站台(001号车)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -109,7 +109,7 @@ export default {
operateType: 'Stand_Cancel_Jump_Stop',
skinCode: '06',
trainingName: '取消跳停({10}-{12}站台)',
trainingRemark: '设置取消跳停功能',
trainingRemark: '对指定站台取消之前设置的跳停命令',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -138,7 +138,7 @@ export default {
operateType: 'Stand_Set_Park_Time',
skinCode: '06',
trainingName: '设置停站时间({10}-{12}站台)',
trainingRemark: '设置停站时间(人工, 20秒, 一直有效)',
trainingRemark: '对某一指定站台设置列车停站时间 (人工, 20秒, 一直有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -155,7 +155,7 @@ export default {
operateType: 'Stand_Set_Park_Time',
skinCode: '06',
trainingName: '设置停站时间({10}-{12}站台)',
trainingRemark: '设置停站时间(人工, 20秒, 一次有效)',
trainingRemark: '对某一指定站台设置列车停站时间 (人工, 20秒, 一次有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -171,7 +171,7 @@ export default {
operateType: 'Stand_Set_Run_Time',
skinCode: '06',
trainingName: '设置运行等级({10}-{12} 站台)',
trainingRemark: '设置运行等级(设置区间 运行等级1运行时间为115一直有效)',
trainingRemark: '设置某一指定站台到下一站台的区间运行时间 (设置区间 运行等级1运行时间为115一直有效)',
trainingType: 'Stand',
productTypes: ['02'],
stepVOList: [
@ -232,7 +232,7 @@ export default {
operateType: 'Stand_View_Status',
skinCode: '06',
trainingName: '站台详细信息({10}-{12}站台)',
trainingRemark: '站台详细信息功能',
trainingRemark: '用于查看站台上已设置的命令信息,包括人工设置的停站时间、运行等级、扣车命令、跳停命令等',
trainingType: 'Stand',
productTypes: ['01', '02'],
stepVOList: [
@ -246,7 +246,7 @@ export default {
operateType: 'Section_Fault_Unlock',
skinCode: '06',
trainingName: '区故解({8}{9})',
trainingRemark: '区故解',
trainingRemark: '列车通过进路时,因进路中设备故障,无法正常解锁时,需采用故障解锁使未解锁的部分解锁',
trainingType: 'Section',
productTypes: ['01'],
stepVOList: [
@ -263,7 +263,7 @@ export default {
operateType: 'Section_Cut_Off',
skinCode: '06',
trainingName: '区段跟踪切除({8}{9})',
trainingRemark: '区段跟踪切除',
trainingRemark: '对某一计轴设置切除状态ATS不再使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -278,7 +278,7 @@ export default {
operateType: 'Section_Active',
skinCode: '06',
trainingName: '区段跟踪激活({8}{9})',
trainingRemark: '区段跟踪激活功能',
trainingRemark: '取消某一计轴上被设置的切除状态ATS重新使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Section',
productTypes: ['01', '02'],
stepVOList: [
@ -293,7 +293,7 @@ export default {
operateType: 'Section_Set_Limit_Speed',
skinCode: '06',
trainingName: '设置临时限速({8}{9})',
trainingRemark: '设置临时限速功能限速值5',
trainingRemark: '对区段设置限速限速值5',
trainingType: 'Section',
productTypes: ['02'],
stepVOList: [
@ -312,7 +312,7 @@ export default {
operateType: 'Section_Cancel_Limit_Speed',
skinCode: '06',
trainingName: '取消临时限速({8}{9})',
trainingRemark: '取消临时限速功能',
trainingRemark: '取消对区段的限速',
trainingType: 'Section',
productTypes: ['02'],
stepVOList: [
@ -331,7 +331,7 @@ export default {
operateType: 'Section_Block',
skinCode: '06',
trainingName: '封锁({8}{9})',
trainingRemark: '区段封锁功能',
trainingRemark: '封锁后,禁止通过该区段排列进路',
trainingType: 'Section',
productTypes: ['01'],
stepVOList: [
@ -345,7 +345,7 @@ export default {
operateType: 'Section_Unblock',
skinCode: '06',
trainingName: '解封({8}{9})',
trainingRemark: '区段解封功能',
trainingRemark: '允许通过该区段排列进路',
trainingType: 'Section',
productTypes: ['01'],
stepVOList: [
@ -362,7 +362,7 @@ export default {
operateType: 'Section_Confirm_Axis_Valid',
skinCode: '06',
trainingName: '确认计轴有效({8}{9})',
trainingRemark: '确认计轴有效功能',
trainingRemark: '发送命令给ZC设备确认某个被报告失效的计轴已被修复要求ZC将该计轴置为有效状态。',
trainingType: 'Section',
productTypes: ['02'],
stepVOList: [
@ -410,7 +410,7 @@ export default {
operateType: 'Switch_Cut_Off',
skinCode: '06',
trainingName: '区段切除({7})',
trainingRemark: '区段切除功能',
trainingRemark: '对某一计轴设置切除状态ATS不再使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Switch',
productTypes: ['02'],
stepVOList: [
@ -424,7 +424,7 @@ export default {
operateType: 'Switch_Active',
skinCode: '06',
trainingName: '区段激活({7})',
trainingRemark: '区段激活功能',
trainingRemark: '取消某一计轴上被设置的切除状态ATS重新使用该计轴的占用出清状态变化跟踪列车',
trainingType: 'Switch',
productTypes: ['02'],
stepVOList: [
@ -438,7 +438,7 @@ export default {
operateType: 'Switch_Confirm_Axis_Valid',
skinCode: '06',
trainingName: '确认计轴有效({7})',
trainingRemark: '确认计轴有效功能',
trainingRemark: '发送命令给ZC设备确认某个被报告失效的计轴已被修复要求ZC将该计轴置为有效状态。',
trainingType: 'Switch',
productTypes: ['02'],
stepVOList: [
@ -456,7 +456,7 @@ export default {
operateType: 'Switch_Single_Lock',
skinCode: '06',
trainingName: '道岔单锁({7})',
trainingRemark: '道岔单锁功能',
trainingRemark: '锁定单个道岔,阻止转换',
trainingType: 'Switch',
productTypes: ['01'],
stepVOList: [
@ -471,7 +471,7 @@ export default {
operateType: 'Switch_Single_Unlock',
skinCode: '06',
trainingName: '道岔单解({7})',
trainingRemark: '道岔单解功能',
trainingRemark: '取消对单个道岔的锁定,道岔可以转换',
trainingType: 'Switch',
productTypes: ['01'],
stepVOList: [
@ -488,7 +488,7 @@ export default {
operateType: 'Switch_Block',
skinCode: '06',
trainingName: '道岔封锁({7})',
trainingRemark: '道岔封锁功能',
trainingRemark: '禁止通过道岔排列进路,但道岔可通过转换道岔命令进行位置转换。',
trainingType: 'Switch',
productTypes: ['01'],
stepVOList: [
@ -503,7 +503,7 @@ export default {
operateType: 'Switch_Unblock',
skinCode: '06',
trainingName: '道岔解封({7})',
trainingRemark: '道岔解封功能',
trainingRemark: '允许通过道岔排列进路',
trainingType: 'Switch',
productTypes: ['01'],
stepVOList: [
@ -520,7 +520,7 @@ export default {
operateType: 'Switch_Set_Limit_Speed',
skinCode: '06',
trainingName: '设置临时限速({7})',
trainingRemark: '设置临时限速功能限速值10',
trainingRemark: '对道岔设置限速限速值10',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -539,7 +539,7 @@ export default {
operateType: 'Switch_Set_Limit_Speed',
skinCode: '06',
trainingName: '设置临时限速({7})',
trainingRemark: '设置临时限速功能-取消临时限速(限速值:不限速)',
trainingRemark: '取消对道岔的限速(限速值:不限速)',
trainingType: 'Switch',
productTypes: ['01', '02'],
stepVOList: [
@ -558,7 +558,7 @@ export default {
operateType: 'Signal_Set_Route',
skinCode: '06',
trainingName: '排列进路({28})',
trainingRemark: '排列进路',
trainingRemark: '进路:列车在站内运行时所经由的路径。依据进路是否建立,可以将进路状态分成锁闭状态和解锁状态。建立了进路,即指利用该进路排列进路,称该进路处于锁闭状态。进路处于锁闭状态时,进路上的所有道岔被锁闭在规定位置(不能转换位置),防护该进路的信号机才能开放,列车才可能在该进路上运行。',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -579,7 +579,7 @@ export default {
operateType: 'Signal_Cancel_Route',
skinCode: '06',
trainingName: '取消列车进路({3})',
trainingRemark: '取消列车进路',
trainingRemark: '当列车运行通过锁闭的进路后,该进路将被解锁而处于解锁状态。解锁状态时进路上道岔随时有转换位置的可能,列车在该进路上运行将极其危险,因而一般不允许列车在没有锁闭的进路上运行。',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -594,7 +594,7 @@ export default {
operateType: 'Signal_Reopen_Signal',
skinCode: '06',
trainingName: '信号重开({5})',
trainingRemark: '信号重开功能',
trainingRemark: '信号由于故障(如锁闭的进路区段故障)或人工干预导致信号关闭,此后调度运营想再次开放此信号(前提是信号开放的条件具备,如故障区段已恢复),可以执行信号重开使信号重新开放',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -609,7 +609,7 @@ export default {
operateType: 'Signal_Open_Auto_Setting',
skinCode: '06',
trainingName: '进路交自动控({28})',
trainingRemark: '进路交自动控',
trainingRemark: '将某个信号机为始端的某条进路设置为由ATS自动触发使能',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -625,7 +625,7 @@ export default {
operateType: 'Signal_Close_Auto_Setting',
skinCode: '06',
trainingName: '进路交人工控({28})',
trainingRemark: '进路交人工控',
trainingRemark: '将某个信号机为始端的进路取消ATS自动触发使能转为人工办理',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -641,7 +641,7 @@ export default {
operateType: 'Signal_Set_CI_Auto',
skinCode: '06',
trainingName: '设置自动通过进路({5})',
trainingRemark: '设置自动通过进路',
trainingRemark: '向某个未开放信号机设置通过模式',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -672,7 +672,7 @@ export default {
operateType: 'Signal_Cancel_CI_Auto',
skinCode: '06',
trainingName: '取消自动通过进路({5})',
trainingRemark: '取消自动通过进路',
trainingRemark: '向某个未开放信号机取消通过模式',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -716,7 +716,7 @@ export default {
operateType: 'Signal_Set_Guide',
skinCode: '06',
trainingName: '引导({5})',
trainingRemark: '引导办理',
trainingRemark: '接车进路上轨道电路故障占用或进站信号机无法开放允许灯光时,以引导进路方式接车。',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -732,7 +732,7 @@ export default {
operateType: 'Signal_Block',
skinCode: '06',
trainingName: '封锁({5})',
trainingRemark: '信号机封锁功能',
trainingRemark: '封锁在关闭状态下的信号机,信号机被封锁后,将不能开放主信号',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -747,7 +747,7 @@ export default {
operateType: 'Signal_Unblock',
skinCode: '06',
trainingName: '解封({5})',
trainingRemark: '信号机解封功能',
trainingRemark: '取消对关闭状态下的信号机的封锁',
trainingType: 'Signal',
productTypes: ['01'],
stepVOList: [
@ -764,7 +764,7 @@ export default {
operateType: 'Signal_Find_Routes_Status',
skinCode: '06',
trainingName: '查询进路控制状态({5})',
trainingRemark: '查询进路控制状态',
trainingRemark: '查看某个信号机为始端的进路是否处于ATS自动触发状态',
trainingType: 'Signal',
productTypes: ['01', '02'],
stepVOList: [
@ -779,7 +779,8 @@ export default {
operateType: 'CM_Apply_For_Center_Control',
skinCode: '06',
trainingName: '请求遥控({1})',
trainingRemark: '控制权限转换,站控转中控',
trainingRemark: '控制权收回行调办理时使用,行调获得控制权后,行调可对设备进行操作,集中站无法对设备进行操作',
// 控制权限转换,站控转中控
trainingType: 'ControlConvertMenu',
productTypes: ['01', '02'], // 行调请求中控
stepVOList: [
@ -793,7 +794,8 @@ export default {
operateType: 'CM_Apply_For_Station_Control',
skinCode: '06',
trainingName: '请求站控({1})',
trainingRemark: '控制权限转换,中控转站控',
trainingRemark: 'ATS 系统的控制模式有中控和站控两种控制模式且某一时刻只能为其中的一种模式在信号系统工作正常时一般使用ATS系统的中控模式当个别车站有表示故障或信号设备故障如计轴故障等出问题的车站可以转为站控请求站控请求控制权下放车站办理需行调同意后方可转为站控转为站控后集中站可对设备进行操作。',
// 控制权限转换,中控转站控
trainingType: 'ControlConvertMenu',
productTypes: ['01', '02'], // 现地请求站控
stepVOList: [
@ -807,7 +809,7 @@ export default {
operateType: 'CM_Emergency_Station_Control',
skinCode: '06',
trainingName: '紧急站控({1})',
trainingRemark: '控制权限转换,中控转紧急站控',
trainingRemark: '紧急情况下,车站可以直接切换成紧急站控状态,直接和联锁下位机通讯',
trainingType: 'ControlConvertMenu',
productTypes: ['01', '02'],
stepVOList: [

View File

@ -69,7 +69,7 @@
</el-submenu>
</template>
</template>
<div class="rightGroup">
<div v-if="!thirdLogin" class="rightGroup">
<quick-entry ref="quickEntry" />
<user-logout ref="userLogout" />
</div>
@ -81,6 +81,7 @@ import { mapGetters } from 'vuex';
import UserLogout from './Logout';
import QuickEntry from './Entry';
import SystemTitle from './Title';
import {getSessionStorage } from '@/utils/auth';
export default {
components: {
@ -93,7 +94,8 @@ export default {
routes: [],
isShow: false,
activePath: '',
index: ''
index: '',
thirdLogin:''
};
},
computed: {
@ -101,6 +103,7 @@ export default {
'avatar',
'routers'
])
},
watch: {
$route(val) {
@ -112,6 +115,7 @@ export default {
}
},
mounted() {
this.thirdLogin = getSessionStorage('thirdLogin');
this.routes = this.$router.options.routes;
if (this.$route.fullPath.indexOf('design/usermap') >= 0) {
this.activePath = '/design/usermap/home';

View File

@ -7,7 +7,7 @@ import 'nprogress/nprogress.css';
import { setToken, getToken, removeToken, getSessionStorage } from '@/utils/auth';
import localStore from 'storejs';
const whiteList = ['/login', '/design/login', '/gzzbxy/relay', '/authorization', '/AUSline', '/AUStool', '/demo']; // 不重定向白名单
const whiteList = ['/login', '/design/login', '/gzzbxy/relay', '/authorization', '/AUSline', '/AUStool', '/demo', '/thirdLogin']; // 不重定向白名单
const loginList = ['/login', '/design/login']; // 登陆页面

View File

@ -59,6 +59,8 @@ const CommandDictionaryDetail = () => import('@/views/system/commandDictionary/e
const configLine = () => import('@/views/system/configLine/index');
const Notification = () => import('@/views/system/notification/index');
const LoginUserControl = () => import('@/views/system/userLoginControl/index');
const IscsSystem = () => import('@/views/iscs/iscsSystem/index');
const IscsDraw = () => import('@/views/iscs/iscsDraw/index');
const IscsDesign = () => import('@/views/iscs/iscsDesign/index');
@ -182,6 +184,8 @@ const UeditorDraftList = () => import('@/views/editor/listDraft');
const UploadPdfList = () => import('@/views/uploadPdf/list');
const ThirdLogin = () => import('@/views/thirdLogin');
// import { GenerateRouteProjectList } from '@/scripts/ProjectConfig';
// import { getSessionStorage } from '@/utils/auth';
@ -231,6 +235,11 @@ export const constantRoutes = [
component: Demo,
hidden: true
},
{
path: '/thirdLogin',
component: ThirdLogin,
hidden: true
},
{
path: '/demoTraining/:mode',
component: DemoTraining,
@ -1006,6 +1015,14 @@ export const asyncRouter = [
i18n: 'router.userManage'
}
},
{
// 用户管理
path: 'loginUserManage',
component: LoginUserControl,
meta: {
i18n: 'router.loginUserManage'
}
},
{
// 单位管理
path: 'companyManage',

View File

@ -129,7 +129,8 @@ export const IbpOperation = {
SXKM: {operate: '10', event: 'SXKM', name: '上行屏蔽门开门'},
XXYS: {operate: '09', event: 'XXYS', name: '下行钥匙'},
SXYS: {operate: '11', event: 'SXYS', name: '上行钥匙'},
PRERESET: {operate: '12', event: 'PRERESET', name: '计轴复位'}
PRERESET: {operate: '12', event: 'PRERESET', name: '计轴复位'},
AXLE_PRE_RESET: {operate: '13', event: 'AXLE_PRE_RESET', name: '计轴预复位'},
};
/**

View File

@ -211,6 +211,9 @@ const user = {
},
setBaseUrl ({commit}, baseUrl) {
commit('setBaseUrl', baseUrl);
},
setToken({commit}, token) {
commit('SET_TOKEN', token);
}
}
};

View File

@ -2,11 +2,11 @@ export function getBaseUrl() {
let BASE_API;
if (process.env.NODE_ENV === 'development') {
// BASE_API = 'https://joylink.club/jlcloud';
BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'http://192.168.8.107:9000'; // 袁琪
// BASE_API = 'http://192.168.3.83:9000'; // 旭强 有线
// BASE_API = 'http://192.168.8.114:9000'; // 旭强 无线
// BASE_API = 'http://192.168.3.120:9000'; // 张赛
BASE_API = 'http://192.168.3.120:9000'; // 张赛
// BASE_API = 'http://192.168.8.140:9000'; // 杜康
// BASE_API = 'http://b29z135112.zicp.vip';
// BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康

View File

@ -34,7 +34,7 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="form.mean === 'PRERESET'" label="关联区段" prop="sectionCode">
<el-form-item v-if="['PRERESET', 'AXLE_PRE_RESET'].includes(form.mean)" label="关联区段" prop="sectionCode">
<el-select v-model="form.sectionCode" filterable placeholder="请选择">
<el-option
v-for="item in sectionList"
@ -74,7 +74,9 @@ export default {
{ label: '报警切除', value: 'BJQC' },
{ label: '下行屏蔽门开门', value: 'XXKM' },
{ label: '上行屏蔽门开门', value: 'SXKM' },
{ label: '计轴复位', value: 'PRERESET' }
{ label: '计轴复位', value: 'PRERESET' },
{ label: '计轴预复位', value: 'AXLE_PRE_RESET' },
{ label: '计轴预复零', value: 'PRERESET_Z' },
],
form: {
code: '',

View File

@ -28,6 +28,8 @@ import { getSimulationInfoNew, getIbpInitialState } from '@/api/simulation';
import BuzzerAudio from '@/assets/buzzer.mp3';
import { getStationList } from '@/api/runplan';
let ctrlKeyPressed = false;
let timer = null;
export default {
name: 'Ibp',
props: {
@ -118,6 +120,7 @@ export default {
}
this.ibpDestroy();
},
preResetBtn: null,
methods: {
initIbp(offsetX = 0) {
this.ibpDestroy();
@ -141,9 +144,11 @@ export default {
Vue.prototype.$ibp = this.$ibp;
this.initClockTime(this.initTime || this.$store.state.socket.simulationTimeSync);
this.$ibp.on('contextmenu', this.onContextMenu, this);
this.$ibp.on('keyboard', this.onKeyboardAction, this);
if (this.$route.query.group) {
this.$ibp.on('selected', this.onSelected, this);
this.$ibp.on('mouseDown', this.onMouseDown, this);
this.$ibp.on('mouseUp', this.onMouseUp, this);
}
},
async show (deviceCode, ibpPart) {
@ -191,6 +196,7 @@ export default {
this.setIbp(data, ibpDatas);
this.$store.dispatch('ibp/setIbpData', ibpDatas);
this.handleBanOpenScreenDoorStatus();
this.preResetBtn = this.$ibp.$painter.ibpInstanceLevel.SquareButton.children().find(e=>e.model.mean === 'PRERESET_Z');
} else {
//
this.loading = false;
@ -227,16 +233,42 @@ export default {
//
onSelected(em) {
},
onKeyboardAction(e){
if (this.preResetBtn) {
if (e.type === 'keydown' && e.key === 'Control') {
ctrlKeyPressed = true;
this.preResetBtn.open();
} else if (e.type === 'keyup' && e.key === 'Control'){
ctrlKeyPressed = false;
this.preResetBtn.close();
clearTimeout(timer);
}
}
},
onMouseDown(em) {
if (em.deviceModel.mean && IbpOperation[em.deviceModel.mean] && em.deviceModel.mean === IbpOperation.PRERESET.event) {
handlerIbpEvent(this.$route.query.group, IbpOperation[em.deviceModel.mean].event, this.stationCode, em.deviceModel.sectionCode).then(() => {
}).catch(error => { this.$message.error(error.message); });
if (em.deviceModel.mean && IbpOperation[em.deviceModel.mean] && em.deviceModel.mean === IbpOperation.AXLE_PRE_RESET.event) {
if (this.preResetBtn) {
if (ctrlKeyPressed) {
timer = setTimeout(() => {
handlerIbpEvent(this.$route.query.group, IbpOperation[em.deviceModel.mean].event, this.stationCode, em.deviceModel.sectionCode).then(() => {}).catch(error => { this.$message.error(error.message); });
}, 3000);
}
} else {
handlerIbpEvent(this.$route.query.group, IbpOperation[em.deviceModel.mean].event, this.stationCode, em.deviceModel.sectionCode).then(() => {}).catch(error => { this.$message.error(error.message); });
}
} else if ( em.deviceModel.mean && IbpOperation[em.deviceModel.mean]) {
handlerIbpEvent(this.$route.query.group, IbpOperation[em.deviceModel.mean].event, this.stationCode).then(() => {
}).catch(error => { this.$message.error(error.message); });
}
},
onMouseUp(em) {
if (em.deviceModel.mean && IbpOperation[em.deviceModel.mean] && em.deviceModel.mean === IbpOperation.AXLE_PRE_RESET.event) {
if (this.preResetBtn) {
clearTimeout(timer);
}
}
},
//
onContextMenu(em) {
this.$store.dispatch('ibp/setUpdateDeviceData', em.eventTarget.model);
@ -294,6 +326,7 @@ export default {
this.$ibp = '';
Vue.prototype.$ibp = '';
}
this.preResetBtn = null;
},
handleViewLoaded() {
this.loading = false;

View File

@ -17,6 +17,7 @@
<el-option label="VR模型" value="VrModel"></el-option>
<el-option label="客流场景" value="客流模型"></el-option>
<el-option label="三维课程" value="三维课程"></el-option>
<el-option label="小程序模型" value="WxModel"></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备类型">

View File

@ -9,6 +9,7 @@
<el-option label="站台列表名称贴图" value="textureStation"></el-option>
<el-option label="信号机贴图" value="textureSignal"></el-option>
<el-option label="单体设备贴图" value="textureDevice"></el-option>
<el-option label="小程序大铁贴图" value="textureRailwayWx"></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属项目">

View File

@ -4,12 +4,12 @@
<img class="buttonimg2" :src="start" />
</div> -->
<div id="direct" class="brakebutton" style="bottom:5%;left:110px;">
<!-- <div id="direct" class="brakebutton" style="bottom:5%;left:110px;">
<img class="brakeimg" :src="brakeallimgurl" />
<img id="directimgbrakeall" class="brakeimg" :src="brakeallimgurlt" :style="{transform:braketransall}" @mousedown="touchstartbrakeall" />
</div>
</div> -->
<div id="direct" class="brakebutton" style="bottom:5%;left:440px;">
<div id="direct" class="brakebutton" style="bottom:5%;left:100px;">
<img class="brakeimg" :src="brakeimgurl" />
<img id="directimgbrake" class="brakeimg" :src="brakeimgurlt" :style="{transform:braketrans}" @mousedown="touchstartbrake" />
</div>

View File

@ -362,7 +362,7 @@ import axios from 'axios';
<style>
.drivepane{
width:60%;
width:30%;
height:333px;
right:0;
bottom:0;

View File

@ -17,19 +17,19 @@
<div class="buttontext">{{ $t('jlmap3d.emergencyBraking') }}</div>
</div> -->
<div id="stallpane" class="stalldiv" style="top:10%;left:0%;">
<!-- <div id="stallpane" class="stalldiv" style="top:10%;left:0%;">
<img id="nowstall" :style="{top:stalltop,left:stallleft}" class="nowstallimg" :src="nowstallimgurl" />
<img class="stallimg" :src="stallimgurl" />
</div>
</div> -->
<div id="directpane" class="directbutton" style="bottom:10%;left:0;">
<div id="directpane" class="directbutton" style="bottom:10%;right:5%;">
<img class="rightbuttonbcimg" :src="zuoimg" />
<img id="directimgdiv" class="rightbuttonbcimg" :src="niuimg" :style="{transform:doordirecttou}" @mousedown='doordirecttouchstart' />
</div>
<div id="clutch" class="directbutton" style="bottom:10%;left:150px;">
<!-- <div id="clutch" class="directbutton" style="bottom:10%;left:150px;">
<img class="rightbuttonbcimg" :src="liheimg" />
</div>
</div> -->
</div>
</template>
@ -199,55 +199,55 @@
this.oldDirectType = 2;
}
switch (data[3]) {
case -1:
this.stallh = 0;
this.stalll = 0;
break;
case 0:
this.stallh = 1;
this.stalll = 2;
break;
case 1:
this.stallh = 2;
this.stalll = 0;
break;
case 2:
this.stallh = 0;
this.stalll = 1;
break;
case 3:
this.stallh = 2;
this.stalll = 1;
break;
case 4:
this.stallh = 2;
this.stalll = 2;
break;
case 5:
this.stallh = 0;
this.stalll = 2;
break;
case 6:
this.stallh = 0;
this.stalll = 3;
break;
case 7:
this.stallh = 2;
this.stalll = 3;
break;
case 8:
this.stallh = 0;
this.stalll = 4;
break;
case 9:
this.stallh = 2;
this.stalll = 4;
}
this.stalltop = this.stalls[this.stallh][this.stalll].t +"px";
this.stallleft = this.stalls[this.stallh][this.stalll].l +"px";
// switch (data[3]) {
// case -1:
// this.stallh = 0;
// this.stalll = 0;
// break;
// case 0:
// this.stallh = 1;
// this.stalll = 2;
// break;
// case 1:
// this.stallh = 2;
// this.stalll = 0;
// break;
// case 2:
// this.stallh = 0;
// this.stalll = 1;
// break;
// case 3:
// this.stallh = 2;
// this.stalll = 1;
// break;
// case 4:
// this.stallh = 2;
// this.stalll = 2;
// break;
// case 5:
// this.stallh = 0;
// this.stalll = 2;
// break;
// case 6:
// this.stallh = 0;
// this.stalll = 3;
// break;
// case 7:
// this.stallh = 2;
// this.stalll = 3;
// break;
// case 8:
// this.stallh = 0;
// this.stalll = 4;
// break;
// case 9:
// this.stallh = 2;
// this.stalll = 4;
// }
//
//
// this.stalltop = this.stalls[this.stallh][this.stalll].t +"px";
// this.stallleft = this.stalls[this.stallh][this.stalll].l +"px";
},
handleKeyup(event){
const e = event || window.event || arguments.callee.caller.arguments[0];
@ -372,26 +372,42 @@
}
angle = angle + 180;
let paramGear = {
// id:this.groupNum,
id:"001",
pos:''
};
// console.log(angle);
if(angle<=356){
this.doordirecttou = "rotate("+320+"deg)";
this.directType = 1;
paramGear.pos = '4';
}
if(angle>356 && angle<372){
this.doordirecttou = "rotate("+360+"deg)";
this.directType = 0;
paramGear.pos = '0';
}
if(angle>372 && angle<421){
this.doordirecttou = "rotate("+399+"deg)";
this.directType = -1;
paramGear.pos = '4';
}
if(angle>421){
this.doordirecttou = "rotate("+442+"deg)";
this.directType = 2;
paramGear.pos = '4';
}
if(this.oldDirectType != this.directType){
this.oldDirectType = this.directType;
let param = {
@ -401,6 +417,12 @@
};
const userInfo = store.state.training.simulationUserList.find(el => el.id == store.state.user.id);
trainSimulationForce(this.group,userInfo.memberId,paramGear,"Train_Drive_Gear_Change").then(res => {
// console.log(res);
}).catch((error) => {
console.log(error);
});
trainSimulationForce(this.group,userInfo.memberId,param,"Train_Drive_Change_Over_Switch").then(res => {
// console.log(res);
}).catch((error) => {

View File

@ -109,7 +109,7 @@ export default {
lineCode: elem.lineCode
},
{
id: '1',
id: '2',
name: '系统配置绘图',
type: 'mapSystem',
mapId: elem.id,

View File

@ -50,6 +50,9 @@ export default {
if (this.type == 'Text') {
data.content = `${this.editModel.prepend}::${this.editModel.content}`;
}
if (data.type !== 'VB') {
data.signalCode = '';
}
this.$emit('updateMapModel', data);
this.$emit('clearDeviceSelect');
} else {

View File

@ -15,7 +15,7 @@
@deviceSelect="deviceSelect"
/>
</el-tab-pane>
<el-tab-pane class="view-control" :label="$t('map.newConstruction')" name="second" :lazy="lazy">
<!-- <el-tab-pane class="view-control" :label="$t('map.newConstruction')" name="second" :lazy="lazy">
<responder-create
ref="respCreate"
:field="field"
@ -29,7 +29,7 @@
@deviceChange="deviceChange"
@deviceSelect="deviceSelect"
/>
</el-tab-pane>
</el-tab-pane> -->
<el-tab-pane class="view-control" label="批量创建" name="third" :lazy="lazy">
<responder-batch
ref="respBatch"
@ -42,8 +42,7 @@
v-on="$listeners"
@hover="hover"
@deviceChange="deviceChange"
@deviceSelect="deviceSelect"
/>
@deviceSelect="deviceSelect" />
</el-tab-pane>
</el-tabs>
</template>
@ -209,4 +208,7 @@ export default {
background-color: #fff;
}
}
#pane-third {
overflow: scroll;
}
</style>

View File

@ -1,9 +1,20 @@
<template>
<el-form ref="make" label-width="140px" :model="addModel" size="mini" :rules="mergeRules">
<el-table :data="addModel.modelList" style="width: 100%">
<el-table-column label="区段" prop="sectionCode">
<template slot-scope="scope">
<el-select v-model="scope.row.sectionCode" filterable size="mini" class="responderSet" placeholder="请选择">
<el-form
ref="form"
label-width="90px"
:model="formData"
size="mini"
:rules="formRules"
>
<el-row>
<el-col :span="24">
<el-form-item label="区段" prop="sectionCode">
<el-select
v-model="formData.sectionCode"
filterable
class="responderSet"
placeholder="请选择"
>
<el-option
v-for="item in sectionList"
:key="item.code"
@ -11,64 +22,135 @@
:value="item.code"
/>
</el-select>
<el-button size="mini" :type="field === 'RelBatchSectionCode'&&rowData === scope.row?'danger':'primary'" @click="handleHover(scope.row, 'RelBatchSectionCode')">激活</el-button>
</template>
</el-table-column>
<el-table-column label="信号机" prop="signalCode">
<template slot-scope="scope">
<el-select v-model="scope.row.signalCode" filterable size="mini" class="responderSet" placeholder="请选择">
<el-option
v-for="item in signalList"
:key="item.code"
:label="item.name + '(' + item.code +')'"
:value="item.code"
/>
</el-select>
<el-button size="mini" :type="field === 'RelBatchSignalCode'&&rowData === scope.row?'danger':'primary'" @click="handleHover(scope.row, 'RelBatchSignalCode')">激活</el-button>
</template>
</el-table-column>
<el-table-column label="类型">
<template slot-scope="scope">
<el-select v-model="scope.row.type" filterable size="mini" class="responderSet" placeholder="请选择">
<el-button
@click="handleHover(-1, 'RelBatchSectionCode')"
:type="
field === 'RelBatchSectionCode' && row === -1
? 'danger'
: 'primary'
"
>
激活
</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="类型" prop="type">
<el-select
v-model="formData.type"
filterable
class="responderSet"
placeholder="请选择"
@change="changeSubFormType"
>
<el-option
v-for="item in responderTypeList"
:key="item.value"
:label="item.name"
:label="`${item.name}(${item.value})`"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="名称">
<template slot-scope="scope">
<el-input v-model="scope.row.name" placeholder="请输入内容" size="mini" />
</template>
</el-table-column>
<el-table-column width="55">
<template slot="header">
<el-button
icon="el-icon-plus"
circle
size="small"
@click="handlePush"
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="创建数量" prop="count">
<el-input
v-model="formData.count"
class="responderSet"
placeholder="请输入数量"
type="number"
min="1"
max="10"
@blur="numBlur"
/>
</el-form-item>
</el-col>
</el-row>
<div class="sub-form" v-if="subFormData.length">
<template v-for="(item, index) in subFormData">
<div :key="`subFormUnit${index}`" class="sub-form-unit">
<el-row>
<el-col :span="10">
<el-form-item label="名称">
<el-input
v-model="item.name"
placeholder="请输入名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型">
<el-select
v-model="item.type"
filterable
placeholder="请选择类型"
>
<el-option
v-for="opt in responderTypeList"
:key="opt.value"
:label="`${opt.name}(${opt.value})`"
:value="opt.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-form-item label="区段偏移值">
<el-input-number v-model="item.offset" />
</el-form-item>
</el-col>
<el-col :span="14" v-if="item.type === 'VB'">
<el-form-item label="信号机">
<el-select
v-model="item.signalCode"
filterable
placeholder="请选择信号机"
>
<el-option
v-for="opt in signalList"
:key="opt.code"
:label="`${opt.name}(${opt.code})`"
:value="opt.code"
/>
</el-select>
<el-button
@click="
handleHover(index, 'RelBatchSignalCode')
"
:type="
field === 'RelBatchSignalCode' &&
row === index
? 'danger'
: 'primary'
"
>
激活
</el-button>
</el-form-item>
</el-col>
</el-row>
</div>
</template>
<template slot-scope="scope">
<el-button size="mini" type="text" @click="handleDelete(scope.$index, scope.row)">{{ $t('map.deleteObj') }}</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top:17px">
<el-button type="primary" size="small" @click="doBatchCreate">批量创建</el-button>
<el-button type="danger" size="small" @click="doBatchReset">重置</el-button>
</div>
<div class="btn-area">
<el-button size="small" type="primary" @click="doBatchCreate"
>批量创建</el-button
>
<el-button size="small" type="danger" @click="resetForm"
>重置</el-button
>
</div>
</el-form>
</template>
<script>
import * as utils from './utils';
import * as utils from "./utils";
export default {
name: "responderBatch",
props: {
selected: {
type: Object,
@ -78,7 +160,7 @@ export default {
},
field: {
type: String,
default: ''
default: ""
},
responderTypeList: {
type: Array,
@ -99,73 +181,157 @@ export default {
},
data() {
return {
addModel: {
modelList: []
formData: {
sectionCode: "",
type: "",
count: 0
},
mergeRules: {
},
rowData: null
subFormData: [],
row: -2,
formRules: {
sectionCode: [
{
required: true,
message: "请选择区段"
}
],
type: [
{
required: true,
message: "请选择类型"
}
],
count: [
{
validator: (rule, value, cb) => {
value !== 0 ? cb() : cb(new Error("至少创建一个"));
}
}
]
}
};
},
methods: {
setModelProp(selected, prop) {
if (this.rowData) {
this.rowData[prop] = selected.code;
if (prop === "sectionCode") {
//
this.formData[prop] = selected.code;
} else if (prop === "signalCode") {
//
this.subFormData[this.row][prop] = selected.code;
}
},
handleDelete(index, row) {
this.addModel.modelList.splice(index, 1);
numBlur() {
const oldNum = this.subFormData.length;
const newNum = this.formData.count;
if (oldNum < newNum) {
this.subFormData = [
...this.subFormData,
...this.createSubForm(newNum - oldNum)
];
} else if (oldNum > newNum) {
this.subFormData = this.subFormData.slice(0, newNum);
}
},
handleHover(row, prop) {
this.rowData = row;
this.$emit('hover', prop);
},
handlePush(row) {
this.addModel.modelList.push({
sectionCode: '',
signalCode: '',
type: '',
name: ''
createSubForm(length) {
return Array.from({ length }, _ => {
return {
name: "",
type: this.formData.type,
offset: 0,
signalCode: ""
};
});
},
changeSubFormType() {
this.subFormData.forEach(_ => {
_.type = this.formData.type;
});
},
handleHover(row, prop) {
this.row = row;
this.$emit("hover", prop);
},
doBatchCreate() {
this.$refs.form.validate(valid => {
if (valid) {
const groupMap = {};
const models = [];
//
this.addModel.modelList.forEach(el => {
this.subFormData.forEach(el => {
if (el.type !== "VB") el.signalCode = "";
el.sectionCode = this.formData.sectionCode;
if (!groupMap[el.sectionCode]) {
groupMap[el.sectionCode] = [];
}
groupMap[el.sectionCode].push(el);
});
//
//
Object.keys(groupMap).forEach(code => {
const section = this.$store.getters['map/getDeviceByCode'](code);
const section = this.$store.getters[
"map/getDeviceByCode"
](code);
const list = groupMap[code];
const length = list.length;
const ox = (section.points[length - 1].x - section.points[0].x) / (length + 1);
const oy = (section.points[length - 1].y - section.points[0].y) / (length + 1);
const ox =
(section.points[section.points.length - 1].x -
section.points[0].x) /
(length + 1);
const oy =
(section.points[section.points.length - 1].y -
section.points[0].y) /
(length + 1);
list.forEach((el, i) => {
const x = section.points[0].x + ox * (i + 1);
const y = section.points[0].y + oy * (i + 1);
models.push(utils.buildModelBySection(section, {x, y}, el, this.responderList));
models.push(
utils.buildModelBySection(
section,
{ x, y },
el,
this.responderList
)
);
});
});
//
this.$emit('updateMapModel', models);
this.$emit("updateMapModel", models);
}
});
},
doBatchReset() {
this.addModel.modelList = [];
resetForm() {
this.formData = {
sectionCode: "",
type: "",
count: 0
};
this.numBlur();
}
}
};
</script>
<style scoped>
.responderSet{
width:120px;
<style lang="scss" scoped>
.sub-form {
padding: 5px;
margin-bottom: 70px;
background-color: #eee;
.sub-form-unit {
border-bottom: 1px solid #ccc;
padding: 8px 0;
.el-form-item {
margin: 5px 0;
}
}
}
.btn-area {
display: flex;
justify-content: space-evenly;
position: absolute;
bottom: 0;
width: 100%;
background-color: #fff;
padding: 10px;
}
</style>

View File

@ -145,7 +145,7 @@ export default {
] },
{ prop:'textRotate', label: '文字旋转', type: 'number' },
{ prop: 'sectionCode', label: '关联区段', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', options: this.sectionList, buttonType: 'RelModelSectionCode', hover: this.hover, buttonShowType: this.isSectionButtonType },
{ prop: 'signalCode', label: '关联信号机', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', options: this.signalList, buttonType: 'RelModelSignalCode', hover: this.hover, buttonShowType: this.isSignalButtonType },
this.editModel.type === 'VB'? { prop: 'signalCode', label: '关联信号机', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', options: this.signalList, buttonType: 'RelModelSignalCode', hover: this.hover, buttonShowType: this.isSignalButtonType } :'',
{ prop: 'stationCode', label: '关联集中站' + ':', type: 'select', optionLabel: 'name&&code', optionValue: 'code', options: this.centralizedStationList }
]
},

View File

@ -0,0 +1,182 @@
<template>
<el-dialog title="权限分发包分发" :visible.sync="dialogVisible" width="1200px" :before-close="doClose" center :close-on-click-modal="false">
<QueryListPage ref="queryListPage1" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
</el-dialog>
</template>
<script>
// v-dialogDrag
import { getUserList, distributePackage } from '@/api/management/user';
import { getCompanyList } from '@/api/company';
export default {
name:'DistributePackage',
data() {
return {
packageId:'',
dialogVisible:false,
pagerConfig: {
pageSize: 'pageSize',
pageIndex: 'pageNum'
},
companyMap: {},
companyList: [],
countTypeList:[
{label:'个人账户', value:'1'},
{label:'企业账户', value:'2'},
{label:'企业账户下子账户', value:'3'}
],
queryForm: {
labelWidth: '80px',
reset: true,
queryObject: {
name: {
type: 'text',
label: this.$t('system.name')
},
id: {
type: 'text',
label: 'id'
},
roles: {
type: 'select',
label: this.$t('system.roles'),
config: {
data: this.$ConstSelect.roleList
}
},
nickname: {
type: 'text',
label: '昵称'
},
mobile: {
type: 'text',
label: '手机号'
},
email: {
type: 'text',
label: '邮箱'
},
companyId: {
type: 'select',
label: '组织',
config: {
data: []
}
},
type:{
type: 'select',
label: '类型',
config: {
data: []
}
}
}
},
queryList: {
query: getUserList,
selectCheckShow: false,
indexShow: true,
columns: [
{
title: 'id',
prop: 'id',
width: 80
},
{
title: this.$t('system.name'),
prop: 'name'
},
{
title: this.$t('system.nickname'),
prop: 'nickname'
},
{
title: '类型',
prop: 'type',
type: 'tag',
columnValue: (row) => { return this.getCountType(row.type); },
tagType: (row) => { return 'success'; }
},
{
title: this.$t('global.mobile'),
prop: 'mobile'
},
{
title: this.$t('global.email'),
prop: 'email'
},
{
title: '组织',
prop: 'companyId',
type: 'tag',
columnValue: (row) => { return this.getCompanyName(row.companyId); },
tagType: (row) => { return 'success'; }
},
{
title: this.$t('system.roles'),
prop: 'roles',
type: 'tagMore',
columnValue: (row) => { return this.$convertField(row.roles, this.$ConstSelect.roleList, ['value', 'label'], true); },
tagType: (row) => { return 'success'; }
},
{
type: 'button',
title: this.$t('global.operate'),
width: '90',
buttons: [
{
name: '选择',
handleClick: this.distributePackage
}
]
}
]
}
};
},
created() {
this.companyMap = {};
this.companyList = [];
getCompanyList().then(resp => {
if (resp && resp.data && resp.data.length) {
resp.data.forEach(item => {
this.companyMap[item.id] = item.name;
this.companyList.push({label: item.name, value: parseInt(item.id)});
});
this.queryForm.queryObject.companyId.config.data = this.companyList;
this.queryForm.queryObject.type.config.data = this.countTypeList;
}
}).catch((error) => {
console.error(error);
});
},
methods:{
doShow(data) {
this.packageId = data.id;
this.dialogVisible = true;
},
doClose() {
this.dialogVisible = false;
},
getCountType(type) {
const countType = this.countTypeList.find(each=>{ return each.value == type; });
return countType ? countType.label : '';
},
getCompanyName(companyId) {
return this.companyMap[companyId];
},
distributePackage(index, row) {
if (this.packageId) {
const accountId = row.id;
distributePackage(this.packageId, accountId).then(resp=> {
this.$message.success('权限分发包分发给指定账户成功!');
this.$emit('reloadTable');
this.doClose();
}).catch(() => {
this.$messageBox('权限分发包分发给指定账户失败');
});
}
}
}
};
</script>

View File

@ -4,6 +4,7 @@
<qr-code ref="qrCode" />
<qcode ref="qcode" />
<project-package ref="projectPackage" @createSuccess="createSuccess" />
<distribute-package ref="distributePackage" @reloadTable="reloadTable" />
</div>
</template>
@ -14,6 +15,7 @@ import { UrlConfig } from '@/scripts/ConstDic';
import QrCode from '@/components/QrCode';
import Qcode from './Qcode';
import ProjectPackage from './projectPackage';
import DistributePackage from './distributePackage';
import { getOrganizationList } from '@/api/management/organization';
// import { getPublishMapListOnline } from '@/api/jmap/map';
import { getAdminAndSuperAdminList } from '@/api/management/user';
@ -23,7 +25,8 @@ export default {
components: {
QrCode,
Qcode,
ProjectPackage
ProjectPackage,
DistributePackage
},
data() {
return {
@ -185,6 +188,13 @@ export default {
handleClick: this.handleBelongs,
type: '',
showControl: (row) => { return row.amount !== row.remains; }
},
{
name: '领取到',
handleClick: this.distributePackage,
type: '',
// row.amount !== row.remains
showControl: (row) => { return row.remains > 0 && row.status == '1'; }
}
// {
// name: '退',
@ -323,6 +333,9 @@ export default {
},
handleBelongs(index, row) {
this.$router.push({ path: `/orderauthor/rules/manage`, query: {distributeId: row.id}});
},
distributePackage(index, row) {
this.$refs.distributePackage.doShow(row);
}
}
};

View File

@ -0,0 +1,103 @@
<template>
<el-dialog v-dialogDrag title="创建第三方账户" :visible.sync="dialogVisible" width="500px" :before-close="doClose" center :close-on-click-modal="false">
<el-form ref="form" :model="addModel" label-width="130px" :rules="rules">
<el-form-item label="账号" prop="account">
<el-input v-model="addModel.account" size="mini" style="width:220px" />
</el-form-item>
<el-form-item label="昵称" prop="nickname">
<el-input v-model="addModel.nickname" size="mini" style="width:220px" />
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="addModel.mobile" size="mini" style="width:140px" />
<el-select v-model="addModel.nationcode" size="mini" style="width:80px">
<el-option
v-for="item in countryList"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="addModel.email" size="mini" style="width:220px" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="addModel.password" size="mini" style="width:220px" type="password" autocomplete="new-password" />
</el-form-item>
<el-form-item label="真实姓名" prop="name">
<el-input v-model="addModel.name" size="mini" style="width:220px" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleCommit">{{ $t('global.confirm') }}</el-button>
<el-button @click="doClose">{{ $t('global.cancel') }}</el-button>
</span>
</el-dialog>
</template>
<script>
import { createThirdCount } from '@/api/management/user';
export default {
name:'CreateSingleUser',
data() {
return {
dialogVisible:false,
addModel:{
account:'', //
mobile:'', //
nationcode:'86', //
email:'', //
password:'', //
name:'', //
nickname:'' //
},
countryList:[
{ name: this.$t('global.china'), value: '86' },
{ name: this.$t('global.australia'), value: '61' },
{ name: this.$t('global.england'), value: '44' },
{ name: this.$t('global.hongKong'), value: '852' },
{ name: this.$t('global.Japanese'), value: '81' },
{ name: this.$t('global.macao'), value: '853' },
{ name: this.$t('global.singapore'), value: '65' },
{ name: this.$t('global.taiwan'), value: '886' },
{ name: this.$t('global.america'), value: '1' }
],
rules:{
account: [
{ required: true, message: '请输入账号', trigger: 'blur' }
],
nickname: [
{ required: true, message: '请输入昵称', trigger: 'blur' }
]
}
};
},
methods:{
doShow() {
this.dialogVisible = true;
},
doClose() {
this.dialogVisible = false;
this.$refs.form.resetFields();
},
handleCommit() {
const self = this;
this.$refs.form.validate((valid) => {
if (valid) {
const model = Object.assign({}, this.addModel);
createThirdCount(model).then(resp=> {
self.$message.success('创建第三方账户成功!');
self.$emit('reloadTable');
self.doClose();
}).catch((error) => {
if (error.code == 10012) {
this.$messageBox('此账户数据已存在!');
} else {
this.$messageBox('创建第三方账户失败!');
}
});
}
});
}
}
};
</script>

View File

@ -1,17 +1,19 @@
<template>
<div>
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
<QueryListPage ref="queryListPage1" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
<dictionary-edit ref="edit" :company-list="companyList" @reloadTable="reloadTable" />
<create-user ref="createUser" />
<create-single-user ref="createSingleUser" @reloadTable="reloadTable" />
<bind-company ref="bindCompany" :company-list="companyList" @create="create" />
</div>
</template>
<script>
import { getUserList } from '@/api/management/user';
import { getUserList, deleteUserInLogic } from '@/api/management/user';
import { getCompanyList } from '@/api/company';
import DictionaryEdit from './edit';
import CreateUser from './createUser';
import CreateSingleUser from './createSingleUser';
import BindCompany from './bindCompany';
export default {
@ -19,6 +21,7 @@ export default {
components: {
DictionaryEdit,
CreateUser,
CreateSingleUser,
BindCompany
},
data() {
@ -29,6 +32,11 @@ export default {
},
companyMap: {},
companyList: [],
countTypeList:[
{label:'个人账户', value:'1'},
{label:'企业账户', value:'2'},
{label:'企业账户下子账户', value:'3'}
],
queryForm: {
labelWidth: '80px',
reset: true,
@ -41,6 +49,14 @@ export default {
type: 'text',
label: 'id'
},
account:{
type: 'text',
label: '账号'
},
parentAccount:{
type: 'text',
label: '父账号'
},
roles: {
type: 'select',
label: this.$t('system.roles'),
@ -66,6 +82,13 @@ export default {
config: {
data: []
}
},
type:{
type: 'select',
label: '类型',
config: {
data: []
}
}
}
@ -80,6 +103,16 @@ export default {
prop: 'id',
width: 80
},
{
title: '账号',
prop: 'account',
width: 80
},
{
title: '父账号',
prop: 'parentAccount',
width: 80
},
{
title: this.$t('system.name'),
prop: 'name'
@ -88,6 +121,13 @@ export default {
title: this.$t('system.nickname'),
prop: 'nickname'
},
{
title: '类型',
prop: 'type',
type: 'tag',
columnValue: (row) => { return this.getCountType(row.type); },
tagType: (row) => { return 'success'; }
},
{
title: this.$t('global.mobile'),
prop: 'mobile'
@ -122,13 +162,18 @@ export default {
{
name: '绑定组织管理员',
handleClick: this.handleBind
},
{
name: '删除',
handleClick: this.handleDelete
}
]
}
],
actions: [
{ text: '创建本地用户', btnCode: 'employee_auto', handler: this.createLocalUsers },
{ text: '组织管理', btnCode: 'company_manage', handler: this.companyManage }
{ text: '组织管理', btnCode: 'company_manage', handler: this.companyManage },
{ text: '创建第三方账户', btnCode: 'create_user', handler: this.createSingleUser }
]
},
currentModel: {}
@ -144,6 +189,7 @@ export default {
this.companyList.push({label: item.name, value: parseInt(item.id)});
});
this.queryForm.queryObject.companyId.config.data = this.companyList;
this.queryForm.queryObject.type.config.data = this.countTypeList;
}
}).catch((error) => {
console.error(error);
@ -157,18 +203,34 @@ export default {
getCompanyName(companyId) {
return this.companyMap[companyId];
},
getCountType(type) {
const countType = this.countTypeList.find(each=>{ return each.value == type; });
return countType ? countType.label : '';
},
reloadTable() {
this.queryList.reload();
},
createLocalUsers() {
this.$refs.createUser.doShow();
},
createSingleUser() {
this.$refs.createSingleUser.doShow();
},
companyManage() {
this.$router.push({ path: `/system/companyManage`});
},
handleBind(index, row) {
this.$refs.bindCompany.doShow(row);
},
handleDelete(index, row) {
deleteUserInLogic(row.id).then(resp=> {
//
this.$message.success('删除账户成功!');
this.reloadTable();
}).catch(() => {
this.$messageBox('删除账户失败');
});
},
create() {
this.reloadTable();
}

View File

@ -0,0 +1,195 @@
<template>
<div>
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
</div>
</template>
<script>
import { getLoginUserList } from '@/api/management/user';
import { getCompanyList } from '@/api/company';
export default {
name: 'UserLoginControl',
data() {
return {
systemMap:{
'DEFAULT_Joylink':'城市轨道交通实训平台',
'DEFAULT_Design':'城市轨道交通设计平台',
'BJD_Joylink':'城市轨道交通列车运行智慧辅助系统(北交大)',
'WJLS_Joylink':'微机联锁仿真系统(大铁)',
'XTY_Joylink':'西铁院实训平台',
'XTY_Design':'西铁院设计平台',
'GZB_Joylink':'贵装备实训平台',
'GZB_Design':'贵装备设计平台',
'CGY_Joylink':'成都工业实训平台',
'CGY_Design':'成都工业设计平台',
'XADT_Joylink':'西安地铁实训平台',
'XADT_Design':'西安地铁设计平台',
'SDY_Joylink':'苏电院实训平台',
'SDY_Design':'苏电院设计平台',
'ZZWW_Joylink':'共赢列车仿真驾驶系统(郑州)',
'NTY_Joylink':'南铁院实训平台(云平台通用版)',
'NTY_Design':'南铁院设计平台(云平台通用版)',
'NTYC_Joylink':'南铁院实训平台(云平台专用版)',
'NTYC_Design':'南铁院设计平台(云平台专用版)',
'DRTS_Joylink':'调度大赛实训平台',
'DRTS_Design':'调度大赛设计平台',
'DEFAULT_Assistant':'琏课堂助手'
},
pagerConfig: {
pageSize: 'pageSize',
pageIndex: 'pageNum'
},
companyMap: {},
companyList: [],
countTypeList:[
{label:'个人账户', value:'1'},
{label:'企业账户', value:'2'},
{label:'企业账户下子账户', value:'3'}
],
queryForm: {
labelWidth: '80px',
reset: true,
queryObject: {
name: {
type: 'text',
label: this.$t('system.name')
},
id: {
type: 'text',
label: 'id'
},
roles: {
type: 'select',
label: this.$t('system.roles'),
config: {
data: this.$ConstSelect.roleList
}
},
nickname: {
type: 'text',
label: '昵称'
},
mobile: {
type: 'text',
label: '手机号'
},
email: {
type: 'text',
label: '邮箱'
},
companyId: {
type: 'select',
label: '组织',
config: {
data: []
}
},
type:{
type: 'select',
label: '类型',
config: {
data: []
}
}
}
},
queryList: {
query: getLoginUserList,
selectCheckShow: false,
indexShow: true,
columns: [
{
title: 'id',
prop: 'accountVO.id',
width: 80,
type: 'basicText',
columnValue: (row) => { return row.accountVO.id; }
},
{
title: this.$t('system.name'),
prop: 'accountVO.name',
type: 'basicText',
columnValue: (row) => { return row.accountVO.name; }
},
{
title: this.$t('system.nickname'),
prop: 'accountVO.nickname',
type: 'basicText',
columnValue: (row) => { return row.accountVO.nickname; }
},
{
title: '类型',
prop: 'accountVO.type',
type: 'tag',
columnValue: (row) => { return this.getCountType(row.accountVO.type); },
tagType: (row) => { return 'success'; }
},
{
title: this.$t('global.mobile'),
prop: 'accountVO.mobile',
type: 'basicText',
width: 160,
columnValue: (row) => { return row.accountVO.mobile; }
},
{
title: this.$t('global.email'),
prop: 'accountVO.email',
type: 'basicText',
columnValue: (row) => { return row.accountVO.email; }
},
{
title: '组织',
prop: 'accountVO.companyId',
type: 'tag',
columnValue: (row) => { return this.getCompanyName(row.accountVO.companyId); },
tagType: (row) => { return 'success'; }
},
{
title: this.$t('system.roles'),
prop: 'accountVO.roles',
type: 'tagMore',
columnValue: (row) => { return this.$convertField(row.accountVO.roles, this.$ConstSelect.roleList, ['value', 'label'], true); },
tagType: (row) => { return 'success'; }
},
{
title: '登陆系统',
prop: 'project',
type: 'basicText',
width: 260,
columnValue: (row) => { return this.systemMap[row.project + '_' + row.client] || ''; }
// tagType: (row) => { return 'success'; }
}
],
actions: []
}
};
},
created() {
this.companyMap = {};
this.companyList = [];
getCompanyList().then(resp => {
if (resp && resp.data && resp.data.length) {
resp.data.forEach(item => {
this.companyMap[item.id] = item.name;
this.companyList.push({label: item.name, value: parseInt(item.id)});
});
this.queryForm.queryObject.companyId.config.data = this.companyList;
this.queryForm.queryObject.type.config.data = this.countTypeList;
}
}).catch((error) => {
console.error(error);
});
},
methods:{
getCompanyName(companyId) {
return this.companyMap[companyId];
},
getCountType(type) {
const countType = this.countTypeList.find(each=>{ return each.value == type; });
return countType ? countType.label : '';
},
reloadTable() {
this.queryList.reload();
}
}
};
</script>

View File

@ -0,0 +1,79 @@
<template>
<div class="thirdLoginContainer">
<div class="thirdLoginMessage">
{{ message }}
</div>
</div>
</template>
<script>
import { LoginParams } from '@/utils/login';
import { thirdCountLogin } from '@/api/management/user';
import md5 from 'js-md5';
import { setToken, getToken, setSessionStorage } from '@/utils/auth';
export default {
name:'ThirdLogin',
data() {
return {
message:''
};
},
computed: {
project() {
const project = this.$route.query.project;
return project || 'login';
}
},
mounted() {
setSessionStorage('project', this.project);
const userId = this.$route.query.userId;
const paccount = this.$route.query.paccount;
const secret = this.$route.query.secret;
// const project = this.$route.query.project || '';
const deviceCode = this.$route.query.deviceCode || '';
const computeSecret = md5(paccount + '::' + userId);
if (userId && paccount && secret == computeSecret) {
const model = Object.assign({
parentAccount:paccount,
account:userId,
deviceCode:deviceCode
}, LoginParams.LianKeTang);
this.message = '正在登陆中......';
const tokenKey = getToken();
if (tokenKey) {
const header = { group: '', 'X-Token': tokenKey };
this.$store.dispatch('setToken', tokenKey);
this.$store.dispatch('subscribe', {header, type:'class'});
this.$router.replace({path:'/trainingPlatform'});
} else {
thirdCountLogin(model).then(resp=> {
const token = resp.data;
const header = { group: '', 'X-Token': token };
setToken(token);
this.$store.dispatch('setToken', token);
this.$store.dispatch('subscribe', {header, type:'class'});
this.$router.replace({path:'/trainingPlatform'});
setSessionStorage('thirdLogin', true);
}).catch(() => {
this.message = '参数有误,请检查';
});
}
} else {
this.message = '参数有误,请检查';
}
},
methods:{
}
};
</script>
<style lang="scss" scoped>
.thirdLoginContainer{
}
.thirdLoginMessage{
padding: 20px;
font-size: 20px;
}
</style>