This commit is contained in:
joylink_cuiweidong 2020-08-20 20:28:12 +08:00
commit 66587a17fb
38 changed files with 1801 additions and 567 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -76,6 +76,7 @@ export default {
temporaryLimit: 'temporary speed restriction',
lcControl: 'Lc control',
image: 'image',
floodGate: 'flood gate',
station: 'station',
controlMode: 'control mode',
platform: 'platform',

View File

@ -53,6 +53,7 @@ export default {
lcControl: 'Lc控制',
buttonControl: '按钮',
image: '图片',
floodGate: '防淹门',
station: '车站',
controlMode: '控制模式',
platform: '站台',

View File

@ -732,6 +732,7 @@ class SkinCode extends defaultStyle {
defaultServerNoColor: '#FFFFFF' // 默认服务号状态显示颜色
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -658,6 +658,7 @@ class SkinCode extends defaultStyle {
] // 设置通信状态 cbtc级别CBTC 点式通信ITC 联锁级IL
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -842,6 +842,7 @@ class SkinCode extends defaultStyle {
] // 设置通信状态 cbtc级别CBTC 点式通信ITC 联锁级IL
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -409,7 +409,7 @@ class SkinCode extends defaultStyle {
// 延续保护计时
this[deviceType.OverAp] = {
show: false
show: true
};
this[deviceType.Switch] = {
@ -686,6 +686,7 @@ class SkinCode extends defaultStyle {
serverNoType: []// 服务号状态类型 eg:{type: '01', showColor: '#FFFFFF'}
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -690,6 +690,7 @@ class SkinCode extends defaultStyle {
serverNoType: []// 服务号状态类型 eg:{type: '01', showColor: '#FFFFFF'}
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -421,7 +421,7 @@ class SkinCode extends defaultStyle {
};
// 延续保护计时
this[deviceType.OverAp] = {
show: true
show: false
};
this[deviceType.Switch] = {
@ -748,6 +748,7 @@ class SkinCode extends defaultStyle {
serverNoType: []// 服务号状态类型 eg:{type: '01', showColor: '#FFFFFF'}
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -756,6 +756,7 @@ class SkinCode extends defaultStyle {
] // 设置通信状态 cbtc级别CBTC 点式通信ITC 联锁级IL
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -133,7 +133,11 @@ class SkinCode extends defaultStyle {
blockGlint: true // 区段封锁闪烁显示
},
trainPosition:{
display: false // 列车实时位置显示
display: true, // 列车实时位置显示
specialShow: true, // 列车特殊显示
specialBackground: 'rgba(36, 219, 219, 0.8)',
specialRectWidth: 14,
stopTrainRectWidth: 7
}
};
@ -219,7 +223,11 @@ class SkinCode extends defaultStyle {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
distance: 5, // 灯跟文字距离
borderShow: true,
borderColor: '#000',
textPadding: [3, 20],
textBorderWidth: 2
},
lamp: {
radiusR: 6, // 控制灯大小
@ -354,10 +362,11 @@ class SkinCode extends defaultStyle {
lineWidth: 3, // 站台线宽
spareColor: '#0080C0', // 站台空闲颜色
spareStrokeColor: '#000000', // 站台空闲描边颜色
openStrokeColor: '#00FF00', // 站台开门描边颜色
doorOpenColor:'#00FF00', // 车门开启状态颜色
stopColor: 'yellow', // 站台列车停站颜色
jumpStopColor: '#6260f3', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue' // 站台指定列车跳停颜色
jumpStopColor: '#C00000', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue', // 站台指定列车跳停颜色
virtualColor: '#585858' // 虚拟站台颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
@ -371,11 +380,12 @@ class SkinCode extends defaultStyle {
position: 1, // 扣车标识在站台上显示方向
text: 'H', // 扣车显示内容
offset: { x: -8, y: 10 }, // 扣车偏移量
centerTrainColor: 'white', // 中心扣车颜色
andCenterTrainColor: 'red', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50', // 车站扣除文字颜色
centerTrainColor: '#00FF00', // 中心扣车颜色
andCenterTrainColor: '#00FF00', // 车站+中心扣车颜色
detainTrainTextColor: '#FFFF00', // 车站扣除文字颜色
fontSize: 10,
fontWeight: 'normal'
fontWeight: 'normal',
specialShape: 'rect' // 扣车标志形状
},
stopTime: { // 停站时间
offset: { x: -8, y: 4 }, // 运行时间偏移量
@ -614,12 +624,12 @@ class SkinCode extends defaultStyle {
], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
upPadding: 4, // 上边距离
trainSidelineColor: '#ABFE9B',
trainBodyFillColor: '#A388B1', // 列车车身填充颜色
trainSidelineColor: 'rgba(0,0,0,0)',
trainBodyFillColor: 'rgba(0,0,0,0)', // 列车车身填充颜色
trainNameFormat: 'serviceNumber:tripNumber:targetCode'// 列车显示格式
},
directionArrow: {
hasArrow: true,
hasArrow: false,
width: 6,
radiusR: 4,
fillColor: '#00FF00',
@ -638,6 +648,8 @@ class SkinCode extends defaultStyle {
trainNumber: {
targetCodePrefix: '00', // 目的地码前缀
defaultTargetCode: 'DD', // 默认目的地码
fontColor: '#000',
fontSize: 10,
trainTargetTextAlign: 'left', // 目的地码文字显示位置
trainNumberOffset: { x: 36, y: 4 }, // 目的地码偏移量
headTypeColor: '#1CBAFD', // 头码车目的地号显示颜色
@ -645,12 +657,16 @@ class SkinCode extends defaultStyle {
},
trainServer: {
serviceNumberPrefix: '000', // 服务号(表号)前缀
fontColor: '#000',
fontSize: 10,
defaultServiceNumber: 'TTT', // 默认服务号(表号)
defaultServerNoColor: '#FFFFFF', // 默认服务号状态显示颜色
defaultServerNoColor: '#000', // 默认服务号状态显示颜色
trainServerOffset: { x: 4, y: 4 } // 列车服务号偏移
},
trainTarget: {
tripNumberPrefix: '00', // 车次号前缀
fontColor: '#000',
fontSize: 10,
defaultTripNumber: 'DD', // 默认车次号2
trainTargetOffset: { x: 24, y: 4 }, // 列车车次号偏移
trainTargetTextAlign: 'right' // 车次号文字显示位置
@ -664,13 +680,13 @@ class SkinCode extends defaultStyle {
maskText: '0' // 车组号遮罩
},
trainHead: {
trainConntWidth: 2, // 列车竖杠的宽度
trainConntWidth: 0, // 列车竖杠的宽度
trainHeadFillColor: '#000000', // 列车车头矩形填充颜色
trainHeadRectHeight: 20, // 列车车头矩形高度
directionStopType:'normal', // special 西安二号线 停车 列车方向图标不消失 normal 正常
trainHeadHeight: 'trainBox', // 列车车头高度取决于trainBox高度
trainHeadArrowWidth: 5, // 列车车头三角宽度
trainHeadArrowOffsetX: 4 // 列车车头三角偏移
trainHeadArrowWidth: 0, // 列车车头三角宽度
trainHeadArrowOffsetX: 0 // 列车车头三角偏移
},
common: {
trainHeight: 20, // 列车高度
@ -678,7 +694,7 @@ class SkinCode extends defaultStyle {
trainWidth: 70, // 列车长度
trainTextFontSize: 16, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
haveTextHSDA: true, // 是否需创建textHSDA对象
haveTextHSDA: false, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
textOffset: 4, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 8, // 计算列车长度时--列车长比text多出尺寸
@ -687,7 +703,7 @@ class SkinCode extends defaultStyle {
trainTip:false // 鼠标悬停列车状态信息框是否显示
},
mouseOverStyle:{
borderLineColor: '#FFFFFF',
borderLineColor: 'rgba(0,0,0,0)',
borderLineDash: [3, 3],
leftOffset:30,
rightOffset:30
@ -779,6 +795,15 @@ class SkinCode extends defaultStyle {
] // 设置通信状态 cbtc级别CBTC 点式通信ITC 联锁级IL
}
};
this[deviceType.FloodGate] = {
displayCondition: '01', // 显示条件 01所有模式下显示 02 行调显示 03现地显示
lineWidth: 2, // 防淹门描边宽度
spareStrokeColor: '#000', // 打开并锁闭-非打开并锁闭描边颜色
spareFillColor: 'rgba(0, 0, 0, 0)', // 打开并锁闭填充颜色
closeFillColor: '#C10000', // 非打开并锁闭填充颜色
allowCloseFillColor: '#FF0000', // 允许关门填充颜色
allowCLoseStrokeColor: '#FFFF00' // 允许关门描边颜色
};
}
}

View File

@ -748,6 +748,7 @@ class SkinCode extends defaultStyle {
serverNoType: []// 服务号状态类型 eg:{type: '01', showColor: '#FFFFFF'}
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -288,7 +288,7 @@ class SkinCode extends defaultStyle {
fontWeight: 'normal',
circleWidth:14, // 西安二号线特殊样式 圆圈的宽度
defaultColor:'#808080', // 默认颜色
special:true // 西安二号线特殊样式
specialShape: 'circle' // 西安二号线特殊样式
},
stopTime: { // 停站时间
position: 1, // 停站时间方向
@ -828,6 +828,7 @@ class SkinCode extends defaultStyle {
] // 设置通信状态 cbtc级别CBTC 点式通信ITC 联锁级IL
}
};
this[deviceType.FloodGate] = {};
}
}

View File

@ -260,4 +260,8 @@ deviceRender[deviceType.OverAp] = {
_type: deviceType.OverAp,
zlevel: 1
};
deviceRender[deviceType.FloodGate] = {
_type: deviceType.FloodGate,
zlevel: 1
};
export default deviceRender;

View File

@ -136,7 +136,9 @@ deviceState[deviceType.StationStand] = {
/** 是否故障*/
fault: 0 /** 非故障*/
};
deviceState[deviceType.FloodGate] = {
/** 防淹门状态 */
};
deviceState[deviceType.Train] = {
// /** 列车类型*/
// type: {

View File

@ -45,7 +45,8 @@ const deviceType = {
Arrow: 'Arrow',
Power: 'Power',
StationTurnBack: 'StationTurnBack',
OverAp: 'OverAp'
OverAp: 'OverAp',
FloodGate: 'FloodGate'
};
export default deviceType;

View File

@ -121,6 +121,9 @@ class Status {
handleStationTurnBack(device) {
this.statusObj = { };
}
handleFloodGate(device) {
this.statusObj = { };
}
getStatus() {
return this.statusObj;
}

View File

@ -164,7 +164,6 @@ class MouseController extends Eventful {
click(e) {
var em = this.checkEvent(e);
// console.log(e, em, '====');
this.trigger(this.events.Selected, em);
}

View File

@ -0,0 +1,84 @@
/*
* 防淹门
*/
import Group from 'zrender/src/container/Group';
import Rect from 'zrender/src/graphic/shape/Rect';
import {isShowThePrdType} from '../../utils/handlePath';
export default class FloodGate extends Group {
constructor(model, style) {
super();
this.z = 20;
this._code = model.code;
this._type = model._type;
this.zlevel = model.zlevel;
this.z = model.z;
this.model = model;
this.style = style;
this.isShowShape = true;
if (isShowThePrdType(model.prdType, style.FloodGate.displayCondition) || model.previewOrMapDraw) {
this.create();
this.createMouseEvent();
this.setState(model);
}
if (model.previewOrMapDraw) {
this.setShowMode();
}
}
create() {
this.floodGate = new Rect({
zlevel: this.zlevel,
z: this.z,
shape: {
x: this.model.position.x,
y: this.model.position.y,
width: this.model.width,
height: this.model.height
},
style: {
lineWidth: this.style.FloodGate.lineWidth,
stroke: this.style.FloodGate.spareStrokeColor,
fill: this.style.FloodGate.spareFillColor
}
});
this.add(this.floodGate);
}
recover() {
this.floodGate.setStyle({ stroke: this.style.FloodGate.spareStrokeColor, fill: this.style.FloodGate.spareFillColor });
}
// 设置状态
setState(model) {
if (!this.isShowShape) return;
this.recover();
}
createMouseEvent() {
}
setShowMode() {
const showMode = this.model.showMode;
const showConditions = this.style.FloodGate.displayCondition;
if (!showConditions || showConditions === '01' || showMode === showConditions) {
this.showMode();
} else {
this.hideMode();
}
}
setShowStation(stationCode) {
if (!stationCode || this.model.stationCode === stationCode) {
this.isShowShape = true;
this.showMode();
} else {
this.isShowShape = false;
this.hideMode();
}
}
showMode() {
this.floodGate && this.floodGate.show();
this.setState(this.model);
}
hideMode() {
this.floodGate && this.floodGate.hide();
}
}

View File

@ -137,10 +137,11 @@ export default class ELines extends Group {
});
}
show() {
this.eachChild((child) => {
// console.log(child);
child.show();
});
// this.eachChild((child) => {
// // console.log(child);
// child.show();
// });
this.section && this.section.show();
}
animateStyle(loop, animates) {
@ -180,15 +181,6 @@ export default class ELines extends Group {
}
getBoundingRect() {
// if (this.model.isCurve) {
return this.section.getBoundingRect().clone();
// } else {
// return this.section.getBoundingRect().clone();
// const rect = this.sections[0].getBoundingRect();
// this.sections.forEach(section => {
// rect.union(section.getBoundingRect().clone());
// });
// return rect;
// }
}
}

View File

@ -52,9 +52,9 @@ export default class Station extends Group {
if (style.Station.text.borderShow) { // 哈尔滨线路单独显示
this.stationText.attr({
style: {
textPadding: [2, 6],
textBorderColor: model.nameFontColor,
textBorderWidth: 1
textPadding: style.Station.text.textPadding || [2, 6],
textBorderColor: style.Station.text.borderColor || model.nameFontColor,
textBorderWidth: style.Station.text.textBorderWidth || 1
}
});
}

View File

@ -0,0 +1,54 @@
import Group from 'zrender/src/container/Group';
import Rect from 'zrender/src/graphic/shape/Rect';
class EDetainCircle extends Group {
constructor(model) {
super();
this.model = model;
this.create();
}
create() {
const model = this.model;
const style = this.model.style;
let y;
if (model.right && model.inside) {
y = model.y + model.height / 2;
} else if (model.right && !model.inside) {
y = model.y;
} else if (!model.right && model.inside) {
y = model.y;
} else if (!model.right && !model.inside) {
y = model.y + model.height / 2;
}
this.detainRect = new Rect({
zlevel: model.zlevel,
z: model.z + 1,
shape: {
x: model.x,
y: y,
width: model.width,
height: model.height / 2
},
style: {
lineWidth: style.StationStand.stand.lineWidth || 0,
stroke: style.StationStand.stand.spareStrokeColor,
fill: '#000'
}
});
this.add(this.detainRect);
this.detainRect.hide();
}
setColor(color) {
this.detainRect.setStyle('stroke', color);
}
setShow() {
this.detainRect.show();
}
setHide() {
this.detainRect.hide();
}
}
export default EDetainCircle;

View File

@ -12,6 +12,7 @@ import ETrainStop from './ETrainStop';
import ETrainDepart from './ETrainDepart';
import EControl from '../element/EControl';
import EDetainCircle from './EDetainCircle';
import EDetainRect from './EDetainRect';
import EPatternFilter from './EPatternFilter';
import {isShowThePrdType} from '../../utils/handlePath';
@ -148,7 +149,7 @@ class StationStand extends Group {
this.add(this.reentry);
}
if (style.StationStand.detainCar.special) {
if (style.StationStand.detainCar.specialShape === 'circle') {
const detainD = model.right ? 1 : -1;
this.detainCircle = new EDetainCircle({
zlevel: this.zlevel,
@ -159,6 +160,19 @@ class StationStand extends Group {
radius:style.StationStand.detainCar.circleWidth / 2
});
this.add(this.detainCircle);
} else if (style.StationStand.detainCar.specialShape === 'rect') {
this.detainRect = new EDetainRect({
zlevel: this.zlevel,
z: this.z,
style: style,
x: standX,
y: standY,
inside: model.inside,
right: model.right,
width: model.width,
height: model.height
});
this.add(this.detainRect);
} else {
/** 站台扣车*/
const detainD = model.right ? 1 : -1;
@ -381,6 +395,7 @@ class StationStand extends Group {
this.reentry && this.reentry.hideMode();
this.jump && this.jump.hideMode();
this.detainCircle && this.detainCircle.setColor(this.style.StationStand.detainCar.defaultColor);
this.detainRect && this.detainRect.setHide();
}
/** 空闲*/
@ -402,7 +417,7 @@ class StationStand extends Group {
/** 车门开启 */
doorOpen() {
if (this.style.StationStand.common.standType && this.style.StationStand.common.standType == 'notFill') {
if (this.style.StationStand.stand.doorOpenColor) {
this.safeStand && this.safeStand.setColor(this.style.StationStand.stand.doorOpenColor);
}
}
@ -439,6 +454,8 @@ class StationStand extends Group {
this.detain && this.detain.showMode();
this.detain && this.detain.setColor(this.style.StationStand.detainCar.detainTrainTextColor);
this.detainCircle && this.detainCircle.setColor(this.style.StationStand.detainCar.centerTrainColor);
this.detainRect && this.detainRect.setShow();
this.detainRect && this.detainRect.setColor(this.style.StationStand.detainCar.detainTrainTextColor);
}
/** 中心扣车*/
@ -446,6 +463,8 @@ class StationStand extends Group {
this.detain && this.detain.showMode();
this.detain && this.detain.setColor(this.style.StationStand.detainCar.centerTrainColor);
this.detainCircle && this.detainCircle.setColor(this.style.StationStand.detainCar.centerTrainColor);
this.detainRect && this.detainRect.setShow();
this.detainRect && this.detainRect.setColor(this.style.StationStand.detainCar.centerTrainColor);
}
/** 中心+车站扣车*/
@ -453,6 +472,8 @@ class StationStand extends Group {
this.detain && this.detain.showMode();
this.detain && this.detain.setColor(this.style.StationStand.detainCar.andCenterTrainColor);
this.detainCircle && this.detainCircle.setColor(this.style.StationStand.detainCar.centerTrainColor);
this.detainRect && this.detainRect.setShow();
this.detainRect && this.detainRect.setColor(this.style.StationStand.detainCar.centerTrainColor);
}
/** 人工设置停战时间*/

View File

@ -82,10 +82,10 @@ class EMouse extends Group {
z: this.device.model.z + 10,
silent: true,
shape: {
x:rect.x - 30,
y:rect.y,
width:rect.width + 60,
height:rect.height
x: rect.x - 30,
y: rect.y,
width: rect.width + 60,
height: rect.height
},
style: {
lineDash: [3, 3],

View File

@ -1,5 +1,6 @@
import Group from 'zrender/src/container/Group';
import Polygon from 'zrender/src/graphic/shape/Polygon';
import Rect from 'zrender/src/graphic/shape/Rect';
/** 创建三角形*/
export default class ETriangle extends Group {
@ -7,6 +8,7 @@ export default class ETriangle extends Group {
super();
this.model = model;
this.zlevel = model.zlevel;
this.style = model.style;
this.z = model.z;
this.create(model);
}
@ -14,6 +16,57 @@ export default class ETriangle extends Group {
create(model) {
if (model && model.point) {
const right = model.right == 1 ? 1 : -1;
if (this.style.Section.trainPosition.specialShow) {
this.stopRect = new Rect({ // 停车标识
zlevel: model.zlevel,
z: model.z,
shape: {
x: model.point.x - this.style.Section.trainPosition.stopTrainRectWidth,
y: model.point.y - this.style.Section.line.width / 4,
width: this.style.Section.trainPosition.stopTrainRectWidth,
height: this.style.Section.line.width - 2
},
style: {
lineWidth: 0,
fill: 'rgba(26, 54, 88, 0.7)'
}
});
this.angle1 = new Rect({
zlevel: model.zlevel,
z: model.z,
shape: {
x: model.point.x - this.style.Section.trainPosition.specialRectWidth,
y: model.point.y - this.style.Section.line.width / 2,
width: this.style.Section.trainPosition.specialRectWidth,
height: this.style.Section.line.width + 2
},
style: {
lineWidth: 0,
fill: this.style.Section.trainPosition.specialBackground
},
cursor: 'pointer'
});
this.angle = new Polygon({
zlevel: model.zlevel,
z: model.z,
shape: {
points:[
[model.point.x + 5 * right, model.point.y + 1],
[model.point.x, model.point.y - this.style.Section.line.width / 2],
[model.point.x, model.point.y + this.style.Section.line.width / 2 + 2]
]
},
style: {
// stroke:'#00FF00',
lineWidth: 0,
fill: this.style.Section.trainPosition.specialBackground
}
});
this.add(this.angle1);
this.add(this.angle);
this.add(this.stopRect);
this.stopRect.hide();
} else {
this.angle = new Polygon({
zlevel: model.zlevel,
z: model.z,
@ -29,12 +82,23 @@ export default class ETriangle extends Group {
this.add(this.angle);
}
}
}
updateTriangle(model, right) {
updateTriangle(model, right, trainB) {
if (this.angle) {
const trainRight = right == 1 ? 1 : -1;
const data = [[model.x + 10 * trainRight, model.y], [model.x, model.y - 6], [model.x, model.y + 6]];
// this.angle.shape.points.push([model.x + 10 * trainRight, model.y]);
// this.angle.attr('shape', { points: this.angle.shape.points });
let data = [
[model.x + 10 * trainRight, model.y],
[model.x, model.y - 6],
[model.x, model.y + 6]
];
if (this.style.Section.trainPosition.specialShow) {
data = [
[model.x + 5 * trainRight, model.y + 1],
[model.x, model.y - this.style.Section.line.width / 2],
[model.x, model.y + this.style.Section.line.width / 2 + 2]
];
}
this.angle.attr({
shape: {
points:data
@ -46,6 +110,59 @@ export default class ETriangle extends Group {
}
}, 10, 0, 'elasticOut', function () {
});
this.dirty();
this.angle.dirty();
}
if (this.angle1) {
let trainRight = model.x;
if (right == 1) {
trainRight = model.x - this.style.Section.trainPosition.specialRectWidth;
}
const pointsData = {
x: trainRight,
y: model.y - this.style.Section.line.width / 2,
width: this.style.Section.trainPosition.specialRectWidth,
height: this.style.Section.line.width + 2
};
this.angle1.attr({
shape: pointsData
});
this.angle1.animateTo({
shape: pointsData
}, 10, 0, 'elasticOut', function () {
});
this.angle1.dirty();
}
if (this.stopRect) {
const offset = (this.style.Section.trainPosition.specialRectWidth - this.style.Section.trainPosition.stopTrainRectWidth) / 2;
let trainRight = model.x + offset;
if (right == 1) {
trainRight = model.x - offset - this.style.Section.trainPosition.stopTrainRectWidth;
}
const pointsData = {
x: trainRight,
y: model.y - this.style.Section.line.width / 4,
width: this.style.Section.trainPosition.stopTrainRectWidth,
height: this.style.Section.line.width - 2
};
this.stopRect.attr({
shape: pointsData
});
this.stopRect.animateTo({
shape: pointsData
}, 10, 0, 'elasticOut', function () {
});
this.stopRect.dirty();
}
if (this.style.Section.trainPosition.specialShow) {
trainB.setPositionText(model, right);
}
}
setStopShow(flag) {
if (flag) {
this.stopRect && this.stopRect.show();
} else {
this.stopRect && this.stopRect.hide();
}
}
}

View File

@ -53,7 +53,7 @@ export default class TrainBody extends Group {
y: parseInt(model.point.y + style.Train.trainServer.trainServerOffset.y),
text: serviceNumber.substring(serviceNumber.length - style.Train.trainServer.serviceNumberPrefix.length),
textFill: model.style.Train.trainServer.fontColor || style.trainTextColor,
fontSize: model.fontSize,
fontSize: model.style.Train.trainServer.fontSize || model.fontSize,
fontFamily: style.Train.common.fontFamily,
textAlign: 'left',
textVerticalAlign: 'top'
@ -66,7 +66,7 @@ export default class TrainBody extends Group {
y: parseInt(model.point.y + model.style.Train.trainTarget.trainTargetOffset.y),
text: tripNumber.substring(tripNumber.length - style.Train.trainTarget.tripNumberPrefix.length),
textFill: model.style.Train.trainTarget.fontColor || style.trainTextColor,
fontSize: model.fontSize,
fontSize: model.style.Train.trainTarget.fontSize || model.fontSize,
fontFamily: style.Train.common.fontFamily,
textAlign: 'left',
textVerticalAlign: 'top'
@ -80,7 +80,7 @@ export default class TrainBody extends Group {
textFill: model.style.Train.trainNumber.fontColor || style.trainTextColor,
textStroke: style.trainTextColor,
textStrokeWidth: 0,
fontSize: model.fontSize,
fontSize: model.style.Train.trainNumber.fontSize || model.fontSize,
fontFamily: style.Train.common.fontFamily,
textAlign: 'left',
textVerticalAlign: 'top'
@ -401,4 +401,61 @@ export default class TrainBody extends Group {
}
}
}
setPositionText(model, right) {
let widthText = 0;
let point = {
x: model.x - 10,
y: model.y
};
if (right == 1) {
point = {
x: model.x - 20,
y: model.y
};
}
if (this.textTrainTarget) {
this.textTrainTarget.attr({
style: {
x: parseInt(point.x + widthText),
y: parseInt(point.y - this.style.Section.line.width),
textVerticalAlign: 'middle'
}
});
widthText += this.textTrainTarget.getBoundingRect().width;
this.textTrainTarget.dirty();
}
if (this.textTrainServer) {
this.textTrainServer.attr({
style: {
x: parseInt(point.x + widthText),
y: parseInt(point.y - this.style.Section.line.width),
textVerticalAlign: 'middle'
}
});
widthText += this.textTrainServer.getBoundingRect().width;
this.textTrainServer.dirty();
}
if (this.textTrainTrip) {
this.textTrainTrip.attr({
style: {
x: parseInt(point.x + widthText),
y: parseInt(point.y - this.style.Section.line.width),
textVerticalAlign: 'middle'
}
});
widthText += this.textTrainTrip.getBoundingRect().width;
this.textTrainTrip.dirty();
}
if (this.textTrainGroup) {
this.textTrainGroup.attr({
style: {
x: parseInt(point.x + widthText),
y: parseInt(point.y - this.style.Section.line.width),
textVerticalAlign: 'middle'
}
});
widthText += this.textTrainGroup.getBoundingRect().width;
this.textTrainGroup.dirty();
}
}
}

View File

@ -1,6 +1,6 @@
import Group from 'zrender/src/container/Group';
import Rect from 'zrender/src/graphic/shape/Rect';
import BoundingRect from 'zrender/src/core/BoundingRect';
// import BoundingRect from 'zrender/src/core/BoundingRect';
export default class TrainBodyBox extends Group {
constructor(model) {

View File

@ -60,6 +60,7 @@ export default class Train extends Group {
this._computed();
const model = this.model;
const style = this.style;
if (this.point) {
this.trainB = new TrainBody({
zlevel: this.zlevel,
@ -153,6 +154,7 @@ export default class Train extends Group {
right: this.model.right,
point: { x: this.startX, y: this.startY }
});
this.add(this.triangle);
}
@ -193,7 +195,7 @@ export default class Train extends Group {
});
const point = { x: this.startX, y: this.startY };
this.triangle.point = point;
this.triangle.updateTriangle(point, train.right);
this.triangle.updateTriangle(point, train.right, this.trainB);
this.triangle.dirty();
}
}
@ -230,6 +232,7 @@ export default class Train extends Group {
this.trainL && this.trainL.setArrowShow(arrowLShow);
this.trainR && this.trainR.setLineShow(lineRShow);
this.trainR && this.trainR.setArrowShow(arrowRShow);
this.triangle && this.triangle.setStopShow(false); // 运行
return true;
}
});
@ -246,6 +249,7 @@ export default class Train extends Group {
} else {
this.trainL && this.trainL.setLineShow(item.lineLShow);
this.trainR && this.trainR.setLineShow(item.lineRShow);
this.triangle && this.triangle.setStopShow(true); // 停车
}
return true;
}

View File

@ -27,6 +27,7 @@ import Arrow from './Arrow/index';
import Power from './Power/index';
import StationTurnBack from './StationTurnBack/index';
import OverAp from './OverAp/index.js';
import FloodGate from './FloodGate/index';
/** 图库*/
const mapShape = {};
@ -75,6 +76,7 @@ mapShape[deviceType.Arrow] = Arrow;
mapShape[deviceType.Power] = Power;
mapShape[deviceType.StationTurnBack] = StationTurnBack;
mapShape[deviceType.OverAp] = OverAp;
mapShape[deviceType.FloodGate] = FloodGate;
function shapefactory(device, jmap) {
const type = device._type;

View File

@ -3,6 +3,7 @@ class Theme {
this._code = '02';
this._mapMenu = {
'01': 'chengdu_01',
// '01': 'ningbo_03',
'02': 'fuzhou_01',
'03': 'beijing_01',
'04': 'chengdu_03',

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,256 @@
<template>
<el-dialog v-dialogDrag class="ningbo-01__systerm route-setting" :title="title" :visible.sync="show" width="350px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<el-row>
<el-col :span="10">
<el-table :data="tableData">
<el-table-column prop="groupNumber" label="列车" />
<el-table-column prop="groupNumber" label="班次" />
<el-table-column prop="groupNumber" label="运行线" />
<el-table-column prop="groupNumber" label="模式" />
</el-table>
</el-col>
<el-col :span="14">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="站台" name="first">站台</el-tab-pane>
<el-tab-pane label="信号机" name="second">信号机</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
<!--<el-row class="header">-->
<!--<el-col :span="11"><span>集中站</span></el-col>-->
<!--<el-col :span="11" :offset="2"><span>始端信号机</span></el-col>-->
<!--</el-row>-->
<!--<el-row>-->
<!--<el-col :span="11">-->
<!--<el-input v-model="stationName" size="small" disabled />-->
<!--</el-col>-->
<!--<el-col :span="11" :offset="2">-->
<!--<el-input v-model="signalName" size="small" disabled />-->
<!--</el-col>-->
<!--</el-row>-->
<!--<el-row style="margin-top: 10px; line-height: 30px;">-->
<!--<el-col :span="11"><span>进路列表</span></el-col>-->
<!--<el-col :span="11" :offset="2">-->
<!--&lt;!&ndash; <el-button class="expand" @click="expandPath">展开进路预览</el-button> &ndash;&gt;-->
<!--</el-col>-->
<!--</el-row>-->
<!--<el-table ref="table" :data="tempData" border :cell-style="tableStyle" style="width: 100%; height: 120px; margin-top:10px" size="mini" highlight-current-row :show-header="false" @row-click="clickEvent">-->
<!--<el-table-column :id="domIdChoose" prop="name" style="margin-left:30px" />-->
<!--</el-table>-->
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button :id="domIdConfirm" type="primary" :loading="loading" :disabled="commitDisabled" @click="commit">确定(O)</el-button>
</el-col>
<el-col :span="4" :offset="2">
<el-button>应用(A)</el-button>
</el-col>
<el-col :span="4" :offset="2">
<el-button :id="domIdCancel" @click="cancel">关闭(C)</el-button>
</el-col>
<el-col :span="4" :offset="2">
<el-button>帮助(H)</el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="ningbo-01__systerm" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import { deepAssign } from '@/utils/index';
import {mouseCancelState} from '@/jmapNew/theme/components/utils/menuItemStatus';
import { mapGetters } from 'vuex';
export default {
name: 'RouteSelection',
components: {
NoticeInfo
},
data() {
return {
tempData: [],
tableData: [{}],
activeName: 'first',
beforeSectionList: [],
dialogShow: false,
loading: false,
selected: null,
row: null,
operation: '',
display: true,
stationName: '',
signalName: '',
tableStyle: {
'border-bottom': 'none'
}
};
},
computed: {
...mapGetters('map', [
'overlapData'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdChoose() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.choose.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.menu.domId : '';
},
title() {
return '进路设置';
},
commitDisabled() {
let disabled = true;
if (this.row) {
disabled = !this.row.canSetting;
}
return disabled;
}
},
watch: {
'$store.state.map.keyboardEnterCount': function (val) {
if (this.show && !this.commitDisabled) {
this.commit();
}
}
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('training/tipReload');
});
},
methods: {
expandPath() {
console.log('展开进路预览');
},
doShow(operate, selected, tempData) {
this.selected = selected;
//
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.restoreBeforeDevices();
this.$refs.table.setCurrentRow();
this.$store.dispatch('training/emitTipFresh');
mouseCancelState(this.selected);
},
restoreBeforeDevices() {
//
if (this.beforeSectionList && this.beforeSectionList.length) {
this.beforeSectionList.forEach(elem => {
elem.cutOff = false;
});
}
this.$store.dispatch('training/updateMapState', [...this.beforeSectionList]);
this.beforeSectionList = [];
},
clickEvent(row, event, column) {
this.row = row;
if (row) {
//
this.row.canSetting = true;
this.restoreBeforeDevices();
const containSectionList = [];
if (!row.setting) {
//
if (row.routeSectionList && row.routeSectionList.length) {
//
row.routeSectionList.forEach(elem => {
const section = deepAssign({}, this.$store.getters['map/getDeviceByCode'](elem));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(item => {
const sec = deepAssign({}, this.$store.getters['map/getDeviceByCode'](item));
sec.cutOff = true;
containSectionList.push(sec);
});
} else {
section.cutOff = true;
containSectionList.push(section);
}
});
}
if (this.overlapData[row.overlapCode] && this.overlapData[row.overlapCode].pathList && this.overlapData[row.overlapCode].pathList.length) {
this.overlapData[row.overlapCode].pathList.forEach(item => {
if (item.sectionList && item.sectionList.length) {
item.sectionList.forEach(elem => {
const section = deepAssign({}, this.$store.getters['map/getDeviceByCode'](elem));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(logicSectionCode => {
const sec = deepAssign({}, this.$store.getters['map/getDeviceByCode'](logicSectionCode));
sec.cutOff = true;
containSectionList.push(sec);
});
} else {
section.cutOff = true;
containSectionList.push(section);
}
});
}
});
}
this.$store.dispatch('training/updateMapState', [...containSectionList]);
this.beforeSectionList = containSectionList || [];
//
const operate = {
operation: OperationEvent.Signal.arrangementRoute.choose.operation,
val: row.code
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
} else {
this.$refs.noticeInfo.doShow('当前进路不允许排列, 与其他进路可能发生冲突');
}
}
},
commit() {
if (this.row && this.row.canSetting) {
this.loading = true;
commitOperate(menuOperate.Signal.arrangementRoute, {routeCode:this.row.code}, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
}
},
handleClick() {
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -226,6 +226,10 @@ export function parser(data, skinCode, showConfig) {
}
}
}, this);
zrUtil.each(data.floodGateList || [], elem=> {
mapDevice[elem.code] = createDevice(deviceType.FloodGate, elem, propConvert, showConfig);
}, this);
}
return mapDevice;
@ -296,6 +300,7 @@ export function updateMapData(state, model) {
case deviceType.Arrow: updateForList(model, state, 'arrowList'); break;
case deviceType.Power: updateForList(model, state, 'powerLineList'); break;
case deviceType.StationTurnBack : updateForList(model, state, 'tbStrategyList'); break;
case deviceType.FloodGate: updateForList(model, state, 'floodGateList'); break;
}
}
}

View File

@ -5,6 +5,7 @@ import FaviconGzb from '@/assets/icon/favicon_gzb.png';
import FaviconHeb from '@/assets/icon/favicon_hyd.png';
import FaviconXadt from '@/assets/icon/favicon_xas.png';
import FaviconJyd from '@/assets/icon/favicon_jyd.png';
import FaviconHls from '@/assets/icon/favicon_hls.png';
import Bottom_Jyd from '@/assets/icon/bottom_jyd.png';
import Link_Jyd from '@/assets/icon/link_jyd.png';
import FaviconTky from '@/assets/icon/favicon_tky.png';
@ -12,6 +13,7 @@ import FaviconBxkc from '@/assets/icon/favicon_bxkc.png';
import FaviconCrsc from '@/assets/icon/favicon_crsc.png';
import Link_Bxkc from '@/assets/icon/link_bxkc.png';
import Link_Crsc from '@/assets/icon/link_crsc.png';
import Link_Hls from '@/assets/icon/link_hls.png';
// title:页面title; loginPath:退出登录跳转路径; loginParam:登录接口参数project;loginTitle:登录页左上角titlelogoWidth登录页左上角logo宽度
// homeTitle:导航栏title(没有采用title); browserTitle:浏览器窗口titlebottomColumn底部栏描述bottomIcon底部栏Icon;linkIcon:浏览器窗口icon(没有采用ProjectIcon)
@ -211,7 +213,7 @@ export const loginInfo = {
},
crsc: {
title: '城市轨道交通实训平台',
loginPath: '/login?project=xagy',
loginPath: '/login?project=crsc',
loginTitle: '空串',
logoWidth: '600px',
bottomIcon: FaviconCrsc,
@ -225,7 +227,7 @@ export const loginInfo = {
},
designcrsc: {
title: '城市轨道交通设计平台',
loginPath: '/design/login?project=xagy',
loginPath: '/design/login?project=crsc',
loginTitle: '空串',
logoWidth: '600px',
bottomIcon: FaviconCrsc,
@ -236,6 +238,30 @@ export const loginInfo = {
navigationLogoWidth: '100px',
navigationMarginLeft: '125px',
systemType: '011'
},
hls: {
title: '城市轨道交通实训平台',
loginPath: '/login?project=hls',
loginTitle: '空串',
logoWidth: '300px',
linkIcon: Link_Hls,
bottomColumn: '北京和利时系统工程有限公司',
loginParam: 'DEFAULT',
navigationLogoWidth: '180px',
navigationMarginLeft: '195px',
systemType: '011'
},
designhls: {
title: '城市轨道交通设计平台',
loginPath: '/design/login?project=hls',
loginTitle: '空串',
logoWidth: '300px',
linkIcon: Link_Hls,
bottomColumn: '北京和利时系统工程有限公司',
loginParam: 'DEFAULT',
navigationLogoWidth: '180px',
navigationMarginLeft: '195px',
systemType: '011'
}
};
@ -259,7 +285,9 @@ export const ProjectIcon = {
bxkc: FaviconBxkc,
designbxkc: FaviconBxkc,
crsc: FaviconCrsc,
designcrsc: FaviconCrsc
designcrsc: FaviconCrsc,
hls: FaviconHls,
designhls: FaviconHls
};
export const ProjectCode = {
@ -272,13 +300,13 @@ export const ProjectCode = {
xadt: 'XADT',
designxadt: 'XADT'
};
export const BottomColumnOnlyConInfo = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc']; // 底部栏仅展示公司信息不展示备案号
export const BottomColumnOnlyConInfo = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls', 'designhls']; // 底部栏仅展示公司信息不展示备案号
export const GetMapListByProjectList = ['xty', 'designxty', 'gzb', 'designgzb', 'xadt', 'designxadt', 'heb', 'designheb']; // 实训设计平台通过项目code获取地图列表的项目
export const CaseHideProjectList = ['heb', 'designheb']; // 案例展示隐藏的项目
export const VersionBaseNoShow = ['heb', 'designheb']; // 登录页右下角版本开发基于不展示
export const MainBodyNoShow = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc']; // 登录页右下角主体不展示
export const MainBodyNoShow = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls', 'designhls']; // 登录页右下角主体不展示
export const GenerateRouteProjectList = ['jsxt', 'refereeJsxt'];// 需要在公共路由中生成登录页面的项目
export const ProjectLoginStyleList = ['jsxt', 'refereeJsxt', 'gzb', 'designgzb', 'xty', 'designxty', 'xadt', 'designxadt', 'tky', 'designtky', 'jyd', 'designjyd', 'bxkc', 'designbxkc', 'crsc', 'designcrsc']; // 登录页样式
export const ProjectLoginStyleList = ['jsxt', 'refereeJsxt', 'gzb', 'designgzb', 'xty', 'designxty', 'xadt', 'designxadt', 'tky', 'designtky', 'jyd', 'designjyd', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls', 'designhls']; // 登录页样式
export const NoQrcodeList = ['heb', 'designheb'];
export const goOtherPlatformMenu = { // 导航栏快速切换平台
login: '/design/login',
@ -298,90 +326,92 @@ export const goOtherPlatformMenu = { // 导航栏快速切换平台
bxkc: '/design/login?project=bxkc',
designbxkc: '/login?project=bxkc',
crsc: '/design/login?project=crsc',
designcrsc: '/login?project=crsc'
};
export const PermissionParam = { // 路径权限处理所需参数配置(跳转白名单,路由处理类型)
heb: {
whitePage: '/login?project=heb',
systemType: '019'
},
designheb: {
whitePage: '/design/login?project=heb',
systemType: '019'
},
login: {
whitePage: '/login',
systemType: '011'
},
design: {
whitePage: '/design/login',
systemType: '011'
},
designxty: {
whitePage: '/design/login?project=xty',
systemType: '013'
},
designgzb: {
whitePage: '/design/login?project=gzb',
systemType: '014'
},
designxadt: {
whitePage: '/design/login?project=xadt',
systemType: '012'
},
designjyd: {
whitePage: '/design/login?project=jyd',
systemType: '017'
},
designtky: {
whitePage: '/design/login?project=tky',
systemType: '018'
},
designbxkc: {
whitePage: '/design/login?project=bxkc',
systemType: '011'
},
designcrsc: {
whitePage: '/design/login?project=crsc',
systemType: '011'
},
xty: {
whitePage: '/login?project=xty',
systemType: '013'
},
gzb: {
whitePage: '/login?project=gzb',
systemType: '014'
},
xadt: {
whitePage: '/login?project=xadt',
systemType: '012'
},
jyd: {
whitePage: '/login?project=jyd',
systemType: '017'
},
tky: {
whitePage: '/login?project=tky',
systemType: '018'
},
bxkc: {
whitePage: '/login?project=bxkc',
systemType: '011'
},
crsc: {
whitePage: '/login?project=crsc',
systemType: '011'
},
jsxt: {
whitePage: '/jsxt/login',
systemType: '015'
},
refereeJsxt: {
whitePage: '/refereeJsxt/login',
systemType: '015'
}
designcrsc: '/login?project=crsc',
hls: '/design/login?project=hls',
designhls: '/login?project=hls'
};
// export const PermissionParam = { // 路径权限处理所需参数配置(跳转白名单,路由处理类型)
// heb: {
// whitePage: '/login?project=heb',
// systemType: '019'
// },
// designheb: {
// whitePage: '/design/login?project=heb',
// systemType: '019'
// },
// login: {
// whitePage: '/login',
// systemType: '011'
// },
// design: {
// whitePage: '/design/login',
// systemType: '011'
// },
// designxty: {
// whitePage: '/design/login?project=xty',
// systemType: '013'
// },
// designgzb: {
// whitePage: '/design/login?project=gzb',
// systemType: '014'
// },
// designxadt: {
// whitePage: '/design/login?project=xadt',
// systemType: '012'
// },
// designjyd: {
// whitePage: '/design/login?project=jyd',
// systemType: '017'
// },
// designtky: {
// whitePage: '/design/login?project=tky',
// systemType: '018'
// },
// designbxkc: {
// whitePage: '/design/login?project=bxkc',
// systemType: '011'
// },
// designcrsc: {
// whitePage: '/design/login?project=crsc',
// systemType: '011'
// },
// xty: {
// whitePage: '/login?project=xty',
// systemType: '013'
// },
// gzb: {
// whitePage: '/login?project=gzb',
// systemType: '014'
// },
// xadt: {
// whitePage: '/login?project=xadt',
// systemType: '012'
// },
// jyd: {
// whitePage: '/login?project=jyd',
// systemType: '017'
// },
// tky: {
// whitePage: '/login?project=tky',
// systemType: '018'
// },
// bxkc: {
// whitePage: '/login?project=bxkc',
// systemType: '011'
// },
// crsc: {
// whitePage: '/login?project=crsc',
// systemType: '011'
// },
// jsxt: {
// whitePage: '/jsxt/login',
// systemType: '015'
// },
// refereeJsxt: {
// whitePage: '/refereeJsxt/login',
// systemType: '015'
// }
// };
export const ProjectList = [
{value:'xty', label:'西铁院'},
{value: 'gzb', label: '贵州装备'},

View File

@ -335,6 +335,13 @@ const map = {
return [];
}
},
floodGateList: (state) => {
if (state.map) {
return state.map.floodGateList;
} else {
return [];
}
},
buttonList: (state) => {
if (state.map) {
return state.map.buttonList;

View File

@ -0,0 +1,211 @@
<template>
<el-tabs v-model="activeName" class="card">
<el-tab-pane class="view-control" :label="$t('map.property')" name="first" :lazy="lazy">
<operate-property
ref="dataform"
:form="dataForm"
:edit-model="editModel"
:rules="rules"
type="Resource"
@updateMapModel="updateMapModel"
/>
</el-tab-pane>
<el-tab-pane class="view-control" :label="$t('map.newConstruction')" name="second" :lazy="lazy">
<create-operate
ref="createForm"
:create-form="makeForm"
:add-model="addModel"
:create-rules="rules"
@create="create"
/>
</el-tab-pane>
</el-tabs>
</template>
<script>
import { mapGetters } from 'vuex';
import { getUID } from '@/jmapNew/utils/Uid';
import OperateProperty from './components/operateProperty';
import CreateOperate from './components/createOperate';
import { deepAssign } from '@/utils/index';
export default {
name: 'FloodGate',
components: {
OperateProperty,
CreateOperate
},
props: {
selected: {
type: Object,
default: function () {
return null;
}
}
},
data() {
return {
activeName: 'first',
lazy: true,
mapData: null,
editModel: {
code: '',
width: '',
height: '',
name: '',
position: {
x: 0,
y: 0
}
},
addModel: {
width: 8,
height: 20,
name: '',
position: {
x: 0,
y: 0
}
},
rules: {
width: [
{ required: true, message: '请输入防淹门宽度', trigger: 'blur' }
],
height: [
{ required: true, message: '请输入防淹门高度', trigger: 'blur' }
],
'position.x': [
{ required: true, message: '请输入x坐标', trigger: 'blur' }
],
'position.y': [
{ required: true, message: '请输入y坐标', trigger: 'blur' }
]
}
};
},
computed: {
...mapGetters('map', [
'floodGateList'
]),
dataForm() {
const form = {
labelWidth: '130px',
items: {
code: {
name: '',
item: []
},
draw: {
name: this.$t('map.drawData'),
item: [
{ prop: 'code', label: `${this.$t('map.floodGate')}${this.$t('map.code')}`, type: 'select', optionLabel: 'code', optionValue: 'code', options: this.resourceList, deviceChange: this.deviceChange },
{ prop: 'width', label: '宽度:', type: 'number', min: 0 },
{ prop: 'height', label: '高度:', type: 'number', min: 0 },
{ prop: 'position', label: '坐标:', type: 'coordinate', width: '120px', children: [
{ prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '20px' },
{ prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '20px' }
] }
]
},
map: {
name: this.$t('map.mapData'),
item: []
}
}
};
return form;
},
makeForm() {
const form = {
labelWidth: '150px',
items:{
all:{
name:'',
item: [
{ prop: 'width', label: '宽度:', type: 'number', min: 0 },
{ prop: 'height', label: '高度:', type: 'number', min: 0 },
{ prop: 'position', label: '坐标:', type: 'coordinate', width: '140px', children: [
{ prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '20px' },
{ prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '20px' }
] }
]
}
}
};
return form;
}
},
mounted() {
},
methods: {
deviceChange(code) {
this.$emit('setCenter', code);
this.deviceSelect(this.$store.getters['map/getDeviceByCode'](code));
},
deviceSelect(selected) {
this.$refs.form && this.$refs.form.resetFields();
this.$refs.make && this.$refs.make.resetFields();
if (selected && selected._type.toUpperCase() === 'FloodGate'.toUpperCase()) {
this.activeName = 'first';
this.editModel = deepAssign(this.editModel, selected);
}
},
create() {
const uid = getUID('FloodGate', this.floodGateList || []);
const model = {
_type: 'FloodGate',
code: uid,
name: uid,
width: this.addModel.width,
height: this.addModel.height,
position: {
x: this.addModel.position.x,
y: this.addModel.position.y
}
};
this.$emit('updateMapModel', model);
this.$refs.createForm.resetForm();
},
updateMapModel(data) {
this.$emit('updateMapModel', data);
},
deleteObj() {
this.$refs.dataform.deleteObj();
},
//
edit() {
this.$refs.dataform.edit();
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss";
.card {
height: 100%;
}
.coordinate {
overflow: hidden;
.title {
text-align: right;
font-size: 14px;
color: #606266;
line-height: 40px;
padding: 0 12px 0 0;
-webkit-box-sizing: border-box;
box-sizing: border-box;
line-height: 28px;
width: 160px;
font-weight: bold;
display: block;
float: left;
}
}
.map-draft-group {
color: #3E44BE;
}
</style>

View File

@ -64,6 +64,7 @@ import ControlLamp from './controlLamp';
import SplitStation from './splitStation';
import Arrow from './arrow';
import SplitScreen from './splitScreen';
import FloodGate from './floodGate';
import { EventBus } from '@/scripts/event-bus';
export default {
@ -91,7 +92,8 @@ export default {
ControlLamp,
SplitStation,
Arrow,
SplitScreen
SplitScreen,
FloodGate
},
props: {
selected: {
@ -129,7 +131,8 @@ export default {
{label:this.$t('map.image'), name:'Resource', menus:ImageControlDraft},
{label:this.$t('map.boundingBox'), name:'CheckBox', menus:CheckboxDraft},
{label:'站间分隔', name:'SplitStation', menus:SplitStation},
{label:'箭头', name:'Arrow', menus:Arrow}
{label:'箭头', name:'Arrow', menus:Arrow},
{label: '防淹门', name: 'FloodGate', menus: FloodGate}
],
selectDevice:'',
enabledTab: 'Section',