集中站分隔调整&线路管理配置调整
This commit is contained in:
parent
7f9953323a
commit
a1869a531f
@ -625,6 +625,7 @@ export default {
|
||||
buttonMainName: 'Button main name:',
|
||||
buttonViceName: 'Button vice name:',
|
||||
automaticRouteCode: 'Automatic route code:',
|
||||
cycleCode: 'Automatic reentry code:'
|
||||
|
||||
cycleCode: 'Automatic reentry code:',
|
||||
rightCentralStationName: 'Right central station name:',
|
||||
leftCentralStationName: 'Left central station name:'
|
||||
};
|
||||
|
@ -324,5 +324,7 @@ export default {
|
||||
selectBelongProject: 'Please select belongs to project',
|
||||
selectSaidLampType: 'Please select type of said status',
|
||||
enterSaidLampName: 'Please enter said status name',
|
||||
selectFunctionType: 'Please select type of function'
|
||||
selectFunctionType: 'Please select type of function',
|
||||
enterNameOfTheCentralStationOnTheRight: 'Please enter the name of the central station on the right',
|
||||
enterNameOfTheCentralStationOnTheLeft: 'Please enter the name of the central station on the left'
|
||||
};
|
||||
|
@ -620,6 +620,7 @@ export default {
|
||||
buttonMainName: '按钮主名称:',
|
||||
buttonViceName: '按钮副名称:',
|
||||
automaticRouteCode: '自动进路code:',
|
||||
cycleCode: '自动折返code'
|
||||
|
||||
cycleCode: '自动折返code',
|
||||
rightCentralStationName: '右侧集中站名称:',
|
||||
leftCentralStationName: '左侧集中站名称:'
|
||||
};
|
||||
|
@ -326,5 +326,7 @@ export default {
|
||||
selectBelongProject: '请选择所属项目',
|
||||
selectSaidLampType: '请选择表示状态类型',
|
||||
enterSaidLampName: '请输入表示状态名称',
|
||||
selectFunctionType: '请选择功能类型'
|
||||
selectFunctionType: '请选择功能类型',
|
||||
enterNameOfTheCentralStationOnTheRight: '请输入右侧集中站名称',
|
||||
enterNameOfTheCentralStationOnTheLeft: '请输入左侧集中站名称'
|
||||
};
|
||||
|
@ -596,6 +596,16 @@ class SkinCode extends defaultStyle {
|
||||
defaultColor: '#9F9C9C', // 默认颜色
|
||||
warningColor: '#FFFF00' // 告警颜色
|
||||
};
|
||||
this[deviceType.SplitStation] = {
|
||||
lineLength: 15, // 箭头线长度
|
||||
lineWidth: 2, // 线宽
|
||||
height: 35, // 分隔整体高度
|
||||
strokeColor: '#00FF00', // 线颜色
|
||||
triangleFillColor: '#00FF00', // 三角填充颜色
|
||||
textFill: '#FFFFFF', // 文字颜色
|
||||
verticalDistance: 10, // 箭头三角垂直高度
|
||||
horizontalDistance: 7// 箭头三角水平高度
|
||||
};
|
||||
this[deviceType.Train] = {
|
||||
trainBody: {
|
||||
trainBodyLineWidth: 1, // 车身line宽
|
||||
|
@ -230,4 +230,9 @@ deviceRender[deviceType.Axle] = {
|
||||
_type:deviceType.Axle,
|
||||
zlevel: 1
|
||||
};
|
||||
/** SplitStation 集中站分隔 */
|
||||
deviceRender[deviceType.SplitStation] = {
|
||||
_type: deviceType.SplitStation,
|
||||
zlevel: 1
|
||||
};
|
||||
export default deviceRender;
|
||||
|
@ -39,7 +39,8 @@ const deviceType = {
|
||||
LampFilament: 'LampFilament',
|
||||
ReturnModeGroup: 'ReturnModeGroup',
|
||||
ControlSwitch: 'ControlSwitch',
|
||||
Axle: 'Axle'
|
||||
Axle: 'Axle',
|
||||
SplitStation:'SplitStation'
|
||||
};
|
||||
|
||||
export default deviceType;
|
||||
|
@ -1,23 +1,26 @@
|
||||
import Group from 'zrender/src/container/Group';
|
||||
import Line from 'zrender/src/graphic/shape/Line';
|
||||
import Polygon from 'zrender/src/graphic/shape/Polygon';
|
||||
// import Text from 'zrender/src/graphic/Text';
|
||||
import Text from 'zrender/src/graphic/Text';
|
||||
|
||||
export default class SplitStation extends Group {
|
||||
constructor(model) {
|
||||
constructor(model, style) {
|
||||
super();
|
||||
this.z = model.z;
|
||||
this.z = 10;
|
||||
this._code = model.code;
|
||||
this._type = model._type;
|
||||
this.zlevel = model.zlevel;
|
||||
this.model = model;
|
||||
this.style = model.style;
|
||||
this.style = style;
|
||||
this.create();
|
||||
}
|
||||
create() {
|
||||
const model = this.model;
|
||||
const style = this.style;
|
||||
this.line1 = new Line({
|
||||
if (!style.SplitStation) {
|
||||
return;
|
||||
}
|
||||
this.verticalLine = new Line({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
shape: {
|
||||
@ -35,14 +38,100 @@ export default class SplitStation extends Group {
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
shape: {
|
||||
points: [[model.position.x, model.position.y + style.SplitStation.height / 2 - style.SplitStation.verticalDistance / 2]]
|
||||
points: [
|
||||
[model.position.x, model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2],
|
||||
[model.position.x - style.SplitStation.horizontalDistance, model.position.y + style.SplitStation.height],
|
||||
[model.position.x - style.SplitStation.horizontalDistance, model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance]
|
||||
]
|
||||
},
|
||||
style: {
|
||||
fill: style.SplitStation.triangleFillColor
|
||||
}
|
||||
});
|
||||
this.triangleRight = new Polygon({
|
||||
|
||||
});
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
shape: {
|
||||
points: [
|
||||
[model.position.x, model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2],
|
||||
[model.position.x + style.SplitStation.horizontalDistance, model.position.y + style.SplitStation.height],
|
||||
[model.position.x + style.SplitStation.horizontalDistance, model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance]
|
||||
]
|
||||
},
|
||||
style: {
|
||||
fill: style.SplitStation.triangleFillColor
|
||||
}
|
||||
});
|
||||
this.leftLine = new Line({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
shape: {
|
||||
x1: model.position.x - style.SplitStation.horizontalDistance,
|
||||
y1: model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2,
|
||||
x2: model.position.x - style.SplitStation.horizontalDistance - style.SplitStation.lineLength,
|
||||
y2: model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2
|
||||
},
|
||||
style: {
|
||||
lineWidth: style.SplitStation.lineWidth,
|
||||
stroke: style.SplitStation.strokeColor
|
||||
}
|
||||
});
|
||||
this.rightLine = new Line({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
shape: {
|
||||
x1: model.position.x + style.SplitStation.horizontalDistance,
|
||||
y1: model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2,
|
||||
x2: model.position.x + style.SplitStation.horizontalDistance + style.SplitStation.lineLength,
|
||||
y2: model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2
|
||||
},
|
||||
style: {
|
||||
lineWidth: style.SplitStation.lineWidth,
|
||||
stroke: style.SplitStation.strokeColor
|
||||
}
|
||||
});
|
||||
this.leftText = new Text({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
style: {
|
||||
x: model.x,
|
||||
y: model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2,
|
||||
fontWeight: style.textStyle.fontWeight,
|
||||
fontSize: style.SplitStation.fontSize,
|
||||
fontFamily: style.fontFamily,
|
||||
text: model.leftStationName,
|
||||
textFill: style.SplitStation.textFill,
|
||||
textAlign: style.textStyle.textAlign,
|
||||
textVerticalAlign: style.textStyle.textVerticalAlign
|
||||
}
|
||||
});
|
||||
this.rightText = new Text({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z,
|
||||
style: {
|
||||
x: model.position.x + style.SplitStation.horizontalDistance + style.SplitStation.lineLength,
|
||||
y: model.position.y + style.SplitStation.height - style.SplitStation.verticalDistance / 2,
|
||||
fontWeight: style.textStyle.fontWeight,
|
||||
fontSize: style.SplitStation.fontSize,
|
||||
fontFamily: style.fontFamily,
|
||||
text: model.rightStationName,
|
||||
textFill: style.SplitStation.textFill,
|
||||
textAlign: style.textStyle.textAlign,
|
||||
textVerticalAlign: style.textStyle.textVerticalAlign
|
||||
}
|
||||
});
|
||||
const leftTextWidth = this.leftText.getBoundingRect().width;
|
||||
const rightTextWidth = this.rightText.getBoundingRect().width;
|
||||
this.leftText.setStyle('x', model.position.x - style.SplitStation.horizontalDistance - style.SplitStation.lineLength - leftTextWidth / 2);
|
||||
this.rightText.setStyle('x', model.position.x + style.SplitStation.horizontalDistance + style.SplitStation.lineLength + rightTextWidth / 2);
|
||||
this.add(this.verticalLine);
|
||||
this.add(this.triangleLeft);
|
||||
this.add(this.triangleRight);
|
||||
this.add(this.leftLine);
|
||||
this.add(this.rightLine);
|
||||
this.add(this.leftText);
|
||||
this.add(this.rightText);
|
||||
}
|
||||
setShowMode() {}
|
||||
setShowStation() {}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import OutFrame from './OutFrame/index.js';
|
||||
import CheckBox from './checkBox/checkBox.js';
|
||||
import AutomaticRoute from './AutomacticRoute/index.js';
|
||||
import SaidLamp from './SaidLamp/index.js';
|
||||
import SplitStation from './SplitStation/index';
|
||||
|
||||
/** 图库*/
|
||||
const mapShape = {};
|
||||
@ -64,6 +65,7 @@ mapShape[deviceType.ModeStatusGroup] = SaidLamp;
|
||||
mapShape[deviceType.FaultStatusGroup] = SaidLamp;
|
||||
mapShape[deviceType.ReturnModeGroup] = SaidLamp;
|
||||
mapShape[deviceType.Axle] = SaidLamp;
|
||||
mapShape[deviceType.SplitStation] = SplitStation;
|
||||
|
||||
function shapefactory(device, jmap) {
|
||||
const type = device._type;
|
||||
|
@ -25,7 +25,7 @@
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
<el-table :data="tempData" border style="width: 100%" size="mini" highlight-current-row height="200">
|
||||
<el-table :data="tempData" border style="width: 100%; height: 200px" size="mini" highlight-current-row>
|
||||
<el-table-column prop="order" :width="110" :label="this.$t('menu.serialNumber2')" />
|
||||
<el-table-column prop="date" :width="160" :label="this.$t('menu.time')" />
|
||||
<el-table-column prop="context" :width="180" :label="this.$t('menu.implementationProcess')" />
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-box" :class="{'is-active': unfold}">
|
||||
<el-table ref="table" :data="tempData" border :cell-style="tableStyle" style="width: 100%;background: #000;border: none;outline: none;" size="mini" height="120" highlight-current-row :show-header="false" @row-click="clickEvent">
|
||||
<el-table ref="table" :data="tempData" border :cell-style="tableStyle" style="width: 100%;background: #000;border: none;outline: none; height: 120px;" size="mini" highlight-current-row :show-header="false" @row-click="clickEvent">
|
||||
<el-table-column prop="station" style="margin-left:10px" />
|
||||
<el-table-column prop="operation" style="margin-left:10px" />
|
||||
</el-table>
|
||||
|
@ -3,7 +3,7 @@
|
||||
:before-close="doClose" :showClose="true" :zIndex="2000" :modal="false" :close-on-click-modal="false"
|
||||
v-dialogDrag>
|
||||
<span class="control-label">{{`${requestInfo}请求如下区域的控制模式`}}</span>
|
||||
<el-table ref="multipleTable" :data="tableData" border row-key="code" style="width: 100%" height="250" center
|
||||
<el-table ref="multipleTable" :data="tableData" border row-key="code" style="width: 100%; height: 250px" center
|
||||
size="mini" highlight-current-row>
|
||||
<el-table-column prop="operate" label="操作区域">
|
||||
<template slot-scope="scope">
|
||||
|
@ -78,7 +78,7 @@
|
||||
交路:
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-table :data="model.route" border :height="180">
|
||||
<el-table :data="model.route" border style="height: 180px;">
|
||||
<el-table-column prop="date" label="日期" width="180" />
|
||||
<el-table-column prop="name" label="姓名" width="180" />
|
||||
<el-table-column prop="address" label="地址" />
|
||||
@ -89,7 +89,7 @@
|
||||
详情:
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-table :data="model.detail" border :height="180">
|
||||
<el-table :data="model.detail" border style="height: 180px">
|
||||
<el-table-column prop="date" label="日期" width="180" />
|
||||
<el-table-column prop="name" label="姓名" width="180" />
|
||||
<el-table-column prop="address" label="地址" />
|
||||
|
@ -15,7 +15,7 @@
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="17">
|
||||
<el-table :data="serviceData" border style="width: 100%" height="160">
|
||||
<el-table :data="serviceData" border style="width: 100%; height: 160px">
|
||||
<el-table-column prop="startStationCode" label="起点站" />
|
||||
<el-table-column prop="startStationStandCode" label="起点站台" />
|
||||
<el-table-column prop="endStationCode" label="终点站" />
|
||||
@ -67,7 +67,7 @@
|
||||
<el-col :offset="10">线路详细信息</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-table :data="tripData" border style="width: 100%" height="200">
|
||||
<el-table :data="tripData" border style="width: 100%; height: 200px;">
|
||||
<el-table-column prop="arriveTime" label="到站时间" />
|
||||
<el-table-column prop="stationCode" label="车站" />
|
||||
<el-table-column prop="stationStandCode" label="站台" />
|
||||
|
@ -155,7 +155,7 @@
|
||||
交路:
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-table :data="model.route" border :height="140">
|
||||
<el-table :data="model.route" border style="height: 140px">
|
||||
<el-table-column prop="beginStationCode" label="起始站">
|
||||
<template slot-scope="scope">
|
||||
{{ formatName(scope.row.beginStationCode) }}
|
||||
@ -176,7 +176,7 @@
|
||||
详情:
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-table :data="model.detail" border :height="140">
|
||||
<el-table :data="model.detail" border style="height: 140px;">
|
||||
<el-table-column prop="stationCode" label="站台" :width="160">
|
||||
<template slot-scope="scope">
|
||||
{{ formatName(scope.row.stationCode) }}
|
||||
|
@ -135,7 +135,9 @@ export function parser(data, skinCode, showConfig) {
|
||||
zrUtil.each(data.outerFrameList || [], elem => { // 矩形框列表
|
||||
mapDevice[elem.code] = createDevice(deviceType.OutFrame, elem, propConvert, showConfig);
|
||||
}, this);
|
||||
|
||||
zrUtil.each(data.splitStationList || [], elem => {
|
||||
mapDevice[elem.code] = createDevice(deviceType.SplitStation, elem, propConvert, showConfig);
|
||||
}, this);
|
||||
zrUtil.each(data.indicatorLightList || [], elem => {
|
||||
switch (elem.type) {
|
||||
case 'AtsControl':
|
||||
@ -295,6 +297,7 @@ export function updateMapData(state, model) {
|
||||
case deviceType.ReturnModeGroup: updateForList(model, state, 'indicatorLightList'); break;
|
||||
case deviceType.ControlSwitch: updateForList(model, state, 'indicatorLightList'); break;
|
||||
case deviceType.Axle: updateForList(model, state, 'indicatorLightList'); break;
|
||||
case deviceType.SplitStation: updateForList(model, state, 'splitStationList'); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -373,6 +373,13 @@ const map = {
|
||||
return [];
|
||||
}
|
||||
},
|
||||
splitStationList: (state) => {
|
||||
if (state.map) {
|
||||
return state.map.splitStationList || [];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
},
|
||||
automaticRouteButtonList: (state) => {
|
||||
if (state.map) {
|
||||
return state.map.automaticRouteButtonList || [];
|
||||
|
@ -2,9 +2,9 @@ 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.3.5:9000'; // 袁琪
|
||||
BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
||||
// BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
||||
// BASE_API = 'http://192.168.3.41:9000'; // 张赛
|
||||
// BASE_API = 'http://192.168.3.82:9000'; // 杜康
|
||||
// BASE_API = 'http://192.168.3.41:9000'; // 张赛
|
||||
|
@ -111,8 +111,7 @@ export default {
|
||||
position: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
deviceStationCode: ''
|
||||
}
|
||||
},
|
||||
addModel: {
|
||||
code: '',
|
||||
@ -122,8 +121,7 @@ export default {
|
||||
position: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
deviceStationCode: ''
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
code: [
|
||||
|
@ -164,6 +164,14 @@
|
||||
@setCenter="setCenter"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="站间分隔" class="tab_pane_box" name="SplitStation">
|
||||
<split-station
|
||||
ref="SplitStation"
|
||||
:selected="selected"
|
||||
@updateMapModel="updateMapModel"
|
||||
@setCenter="setCenter"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</div>
|
||||
@ -189,6 +197,7 @@ import LcControlDraft from './lcControl';
|
||||
import ImageControlDraft from './ImageControl';
|
||||
import CheckboxDraft from './checkboxDraft';
|
||||
import ControlLamp from './controlLamp';
|
||||
import SplitStation from './splitStation';
|
||||
|
||||
import { ViewMode } from '@/scripts/ConstDic';
|
||||
|
||||
@ -213,7 +222,8 @@ export default {
|
||||
LcControlDraft,
|
||||
ImageControlDraft,
|
||||
CheckboxDraft,
|
||||
ControlLamp
|
||||
ControlLamp,
|
||||
SplitStation
|
||||
},
|
||||
props: {
|
||||
selected: {
|
||||
|
234
src/views/newMap/newMapdraft/mapoperate/splitStation.vue
Normal file
234
src/views/newMap/newMapdraft/mapoperate/splitStation.vue
Normal file
@ -0,0 +1,234 @@
|
||||
<template>
|
||||
<el-tabs v-model="activeName" class="card" @tab-click="handleClick">
|
||||
<el-tab-pane class="view-control" :label="$t('map.property')" name="first">
|
||||
<div style="height: calc(100% - 46px);">
|
||||
<el-scrollbar wrap-class="scrollbar-wrapper">
|
||||
<config-list ref="dataform" :form="form" :form-model="editModel" :rules="createRules" />
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
<div class="button_box">
|
||||
<el-button-group class="map-draft-group">
|
||||
<el-button type="primary" size="small" @click="edit">{{ $t('map.updateObj') }}</el-button>
|
||||
<el-button type="danger" size="small" @click="deleteObj">{{ $t('map.deleteObj') }}</el-button>
|
||||
</el-button-group>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane class="view-control" :label="$t('map.newConstruction')" name="second">
|
||||
<div style="height: calc(100% - 46px);">
|
||||
<el-scrollbar wrap-class="scrollbar-wrapper">
|
||||
<config-data ref="make" :form="formMake" :form-model="addModel" :rules="createRules" />
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
<div class="button_box">
|
||||
<el-button-group class="map-draft-group">
|
||||
<el-button type="primary" size="small" @click="create">{{ $t('map.create') }}</el-button>
|
||||
</el-button-group>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import { getUID } from '@/jmapNew/utils/Uid';
|
||||
import ConfigList from './config/list';
|
||||
import ConfigData from './config/data';
|
||||
import { deepAssign } from '@/utils/index';
|
||||
export default {
|
||||
name: 'SplitStation',
|
||||
components: {
|
||||
ConfigList,
|
||||
ConfigData
|
||||
},
|
||||
props: {
|
||||
selected: {
|
||||
type: Object,
|
||||
default: function () {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
activeName: 'first',
|
||||
editModel: {
|
||||
code: '',
|
||||
type: 'SplitStation',
|
||||
rightStationName: '',
|
||||
leftStationName: '',
|
||||
position: {
|
||||
x: 0,
|
||||
y: 0
|
||||
}
|
||||
},
|
||||
addModel: {
|
||||
code: '',
|
||||
type: 'SplitStation',
|
||||
rightStationName: '',
|
||||
leftStationName: '',
|
||||
position: {
|
||||
x: 0,
|
||||
y: 0
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters('map', [
|
||||
'splitStationList'
|
||||
]),
|
||||
form() {
|
||||
const form = {
|
||||
labelWidth: '150px',
|
||||
items: {
|
||||
code: {
|
||||
name: '',
|
||||
item: []
|
||||
},
|
||||
draw: {
|
||||
name: this.$t('map.drawData'),
|
||||
item: [
|
||||
{ prop: 'code', label: `${this.$t('map.code')}`, type: 'select', optionLabel: 'name&&code', optionValue: 'code', options: this.splitStationList},
|
||||
{ prop: 'rightStationName', label: this.$t('map.rightCentralStationName'), type: 'input'},
|
||||
{ prop: 'leftStationName', label: this.$t('map.leftCentralStationName'), type: 'input'},
|
||||
{ prop: 'position', label: this.$t('map.textPoints'), 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;
|
||||
},
|
||||
formMake() {
|
||||
const form = {
|
||||
labelWidth: '150px',
|
||||
items: [
|
||||
{ prop: 'rightStationName', label: this.$t('map.rightCentralStationName'), type: 'input'},
|
||||
{ prop: 'leftStationName', label: this.$t('map.leftCentralStationName'), type: 'input'},
|
||||
{ prop: 'position', label: this.$t('map.textPoints'), type: 'coordinate', width: '140px', children: [
|
||||
{ prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px' },
|
||||
{ prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px' }
|
||||
] }
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
createRules: function () {
|
||||
return {
|
||||
rightStationName: [
|
||||
{ required: true, message: '请输入右侧集中站名称', trigger: 'blur' }
|
||||
],
|
||||
leftStationName: [
|
||||
{ required: true, message: '请输入左侧集中站名称', trigger: 'blur' }
|
||||
],
|
||||
'position.x': [
|
||||
{ required: true, message: this.$t('rules.trainPositionX'), trigger: 'blur' }
|
||||
],
|
||||
'position.y': [
|
||||
{ required: true, message: this.$t('rules.trainPositionY'), trigger: 'blur' }
|
||||
]
|
||||
};
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
selected(val) {
|
||||
this.deviceSelect(val);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deviceSelect(selected) {
|
||||
this.$refs.dataform.resetFields();
|
||||
this.$refs.make.resetFields();
|
||||
if (selected) {
|
||||
this.activeName = 'first';
|
||||
this.editModel = deepAssign(this.editModel, selected);
|
||||
this.editModel.type = selected._type;
|
||||
}
|
||||
},
|
||||
// 创建对象
|
||||
create() {
|
||||
this.$refs.make.validate((valid) => {
|
||||
if (valid) {
|
||||
const uid = getUID(this.addModel.type, this.splitStationList); // 根据类型写 uid 前缀命名
|
||||
const models = [];
|
||||
const model = {
|
||||
_type: this.addModel.type,
|
||||
type: this.addModel.type,
|
||||
code: uid,
|
||||
rightStationName: this.addModel.rightStationName,
|
||||
leftStationName: this.addModel.leftStationName,
|
||||
position: {
|
||||
x: this.addModel.position.x,
|
||||
y: this.addModel.position.y
|
||||
}
|
||||
};
|
||||
models.push(model);
|
||||
this.$emit('updateMapModel', models);
|
||||
this.$refs.make.resetForm();
|
||||
}
|
||||
});
|
||||
},
|
||||
// 修改对象
|
||||
edit() {
|
||||
this.$refs['dataform'].validate((valid) => {
|
||||
if (valid) {
|
||||
const data = Object.assign({_type: this.editModel.type}, this.editModel);
|
||||
this.$emit('updateMapModel', [data]);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 删除对象
|
||||
deleteObj() {
|
||||
const selected = this.$store.getters['map/getDeviceByCode'](this.editModel.code);
|
||||
if (selected && this.controlLampTypeList.includes(selected._type)) {
|
||||
this.$confirm(this.$t('tip.confirmDeletion'), this.$t('tip.hint'), {
|
||||
confirmButtonText: this.$t('tip.confirm'),
|
||||
cancelButtonText: this.$t('tip.cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$emit('updateMapModel', {...selected, _dispose: true});
|
||||
this.$refs.dataform.resetFields();
|
||||
}).catch(() => {
|
||||
this.$message.info(this.$t('tip.cancelledDelete'));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
@import "src/styles/mixin.scss";
|
||||
.view-control{
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.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>
|
@ -6,13 +6,23 @@
|
||||
<el-table-column prop="configKey" label="key" />
|
||||
<el-table-column prop="configValue" label="value">
|
||||
<template slot-scope="scope">
|
||||
<div v-if="!scope.row.boolean">
|
||||
<div v-if="!scope.row.focus" style="width: 100%;cursor: pointer;" @click="scope.row.focus = true">{{ scope.row.configValue }}</div>
|
||||
<el-input v-if="scope.row.focus" v-model="scope.row.configValue" style="width: 100%" @blur="scope.row.focus = false" />
|
||||
<div v-if="scope.row.type === 'input'">
|
||||
<div v-if="!scope.row.focus" style="width: 100%;cursor: pointer;" @click="changeFocus(scope.row, '1')">{{ scope.row.configValue }}</div>
|
||||
<el-input v-if="scope.row.focus" v-model="scope.row.configValue" size="mini" style="width: 100%" @blur="changeFocus(scope.row, '0')" />
|
||||
</div>
|
||||
<div v-if="scope.row.boolean">
|
||||
<div v-else-if="scope.row.type === 'boolean'">
|
||||
<el-checkbox v-model="scope.row.configValue">{{ scope.row.configValue }}</el-checkbox>
|
||||
</div>
|
||||
<div v-else-if="scope.row.type === 'select'">
|
||||
<el-select v-model="scope.row.configValue" size="mini" style="width: 80px;">
|
||||
<el-option
|
||||
v-for="item in scope.row.options"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="description" label="描述" /> -->
|
||||
@ -61,7 +71,11 @@ export default {
|
||||
id: '',
|
||||
tableData: [],
|
||||
focus: false,
|
||||
icloudList: ['lockFirst', 'switchSingleHandle']
|
||||
booleanList: ['lockFirst', 'switchSingleHandle'],
|
||||
selectList: ['upDirection'],
|
||||
optionsMap: {
|
||||
upDirection: [{label: 'right', value: 'right'}, {label: 'left', value: 'left'}]
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -75,6 +89,13 @@ export default {
|
||||
this.getList();
|
||||
}
|
||||
},
|
||||
changeFocus(row, flag) {
|
||||
if (flag === '0') {
|
||||
this.$set(row, 'focus', false);
|
||||
} else {
|
||||
this.$set(row, 'focus', true);
|
||||
}
|
||||
},
|
||||
async getList() {
|
||||
try {
|
||||
const res = await getRealLineConfigList(this.id);
|
||||
@ -83,17 +104,21 @@ export default {
|
||||
this.tableData = [];
|
||||
keys.forEach(key => {
|
||||
// let value = '';
|
||||
let boolean = false;
|
||||
if (this.icloudList.indexOf(key) >= 0) {
|
||||
// value = JSON.stringify(res.data[key]);
|
||||
boolean = true;
|
||||
let type = 'input';
|
||||
let options = [];
|
||||
if (this.booleanList.indexOf(key) >= 0) {
|
||||
type = 'boolean';
|
||||
} else if (this.selectList.indexOf(key) >= 0) {
|
||||
type = 'select';
|
||||
options = this.optionsMap[key];
|
||||
} else {
|
||||
// value = res.data[key];
|
||||
type = 'input';
|
||||
}
|
||||
const param = {
|
||||
configKey: key,
|
||||
configValue: res.data[key],
|
||||
boolean: boolean
|
||||
type: type,
|
||||
options: options
|
||||
};
|
||||
this.tableData.push(param);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user