This commit is contained in:
sunzhenyu 2019-08-29 17:16:33 +08:00
parent 14a2db04f7
commit d7efef41e4
408 changed files with 29142 additions and 15349 deletions

1
.gitignore vendored
View File

@ -6,6 +6,7 @@ yarn-debug.log*
yarn-error.log*
package-lock.json
tests/**/coverage/
src/utils/baseUrl*
# Editor directories and files
.idea

View File

@ -17,7 +17,7 @@ pipeline {
}
stage('Publish') {
steps {
sh 'cp -rf ./dist/* /usr/local/joylink/jl-nclient'
sh 'cp -rf ./dist/* /usr/local/joylink/jlclient'
}
}
}

View File

@ -1,17 +1,17 @@
import request from '@/utils/request';
/** 根据皮肤获取地图版本信息*/
export function getPublishMapVersion(skinStyle) {
export function getPublishMapVersion(skinCode) {
return request({
url: `/api/map/skin/${skinStyle}/version`,
url: `/api/map/skin/${skinCode}/version`,
method: 'get'
});
}
/** 根据皮肤获取发布地图详细内容*/
export function getPublishMapDetail(skinStyle) {
export function getPublishMapDetail(skinCode) {
const datad = request({
url: `/api/map/skin/${skinStyle}/details`,
url: `/api/map/skin/${skinCode}/details`,
method: 'get'
});
return datad.then();
@ -66,9 +66,9 @@ export function loadmap3dModel() {
method: 'get'
});
}
export function getPublish3dMapDetail(skinStyle) {
export function getPublish3dMapDetail(skinCode) {
const datad = request({
url: `/api/map/${skinStyle}/3dMapData`,
url: `/api/map/${skinCode}/3dMapData`,
method: 'get'
});
return datad.then();

View File

@ -10,25 +10,25 @@ export function getPublishMapList(params) {
}
/** 根据皮肤获取发布地图列表*/
export function getPublishMapListBySkinStyle(skinStyle) {
export function getPublishMapListBySkinCode(skinCode) {
return request({
url: `/api/map/${skinStyle}/list`,
url: `/api/map/${skinCode}/list`,
method: 'get'
});
}
/** 根据皮肤获取地图版本信息*/
export function getPublishMapVersion(skinStyle) {
export function getPublishMapVersion(skinCode) {
return request({
url: `/api/map/skin/${skinStyle}/version`,
url: `/api/map/skin/${skinCode}/version`,
method: 'get'
});
}
/** 根据皮肤获取发布地图详细内容*/
export function getPublishMapDetail(skinStyle) {
export function getPublishMapDetail(skinCode) {
return request({
url: `/api/map/skin/${skinStyle}/details`,
url: `/api/map/skin/${skinCode}/details`,
method: 'get'
});
}
@ -50,9 +50,9 @@ export function getPublishMapDetailById(id) {
}
/** 获取发布地图列车列表*/
export function getPublishTrainList(skinStyle) {
export function getPublishTrainList(skinCode) {
return request({
url: `/api/map/${skinStyle}/train`,
url: `/api/map/${skinCode}/train`,
method: 'get'
});
}
@ -113,3 +113,12 @@ export function updatePublishMapName(data) {
data: data
});
}
/** 修改发布地图名称*/
export function getPublishMapDetailList(params, code) {
return request({
url: `/api/map/${code}/versions`,
method: 'get',
params: params
});
}

View File

@ -98,124 +98,52 @@ export function postBuildMapImport(data) {
});
}
/** 获取延续保护道岔数据列表*/
export function listOverlapSwitch(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/overlapSwitch`,
method: 'get'
});
}
/** 获取自动触发区段数据列表*/
export function listTriggerSection(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/triggerSection`,
method: 'get'
});
}
/** 获取延续保护区段数据列表*/
export function listOverlapSection(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/overlapSection`,
method: 'get'
});
}
/** 获取物理区段数据列表*/
export function listPhysicsSection(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/physicsSection`,
method: 'get'
});
}
/** 获取屏蔽门数据列表*/
export function listStationStand(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/stationStand`,
method: 'get'
});
}
/** 获取道岔段数据列表*/
export function listSwitch(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/switch`,
method: 'get'
});
}
/** 获取敌对进路数据列表*/
export function listAgainstRoute(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/againstRoute`,
method: 'get'
});
}
/** 查询进路侧防道岔*/
export function listFlankProtectionSwitch(mapId, routeCode) {
return request({
url: `/api/mapBuild/${mapId}/${routeCode}/flankProtection`,
method: 'get'
});
}
/** 查询进路列表*/
export function listRouteAccess(mapId, params) {
export function listRouteRoute(mapId, params) {
return request({
url: `/api/mapBuild/${mapId}/access`,
url: `/api/mapBuild/${mapId}/route`,
method: 'get',
params: params
});
}
/** 查询进路地图列表*/
export function listRouteMapAccess(mapId) {
export function listRouteMapRoute(mapId) {
return request({
url: `/api/mapBuild/${mapId}/access/all`,
url: `/api/mapBuild/${mapId}/route/all`,
method: 'get'
});
}
/** 查询进路明细*/
export function queryRouteAccessDetail(data) {
export function queryRouteRouteDetail(data) {
return request({
url: `/api/mapBuild/${data.mapId}/access/${data.id}`,
url: `/api/mapBuild/route/${data.id}`,
method: 'get'
});
}
/** 创建进路*/
export function createRouteAccess(data) {
export function createRouteRoute(data) {
return request({
url: `/api/mapBuild/${data.mapId}/access`,
url: `/api/mapBuild/route`,
method: 'post',
data: data
});
}
/** 删除进路*/
export function deleteRouteAccess(mapId, id) {
export function deleteRouteRoute(id) {
return request({
url: `/api/mapBuild/${mapId}/access/${id}`,
url: `/api/mapBuild/route/${id}`,
method: 'delete'
});
}
/** 更新进路*/
export function updateRouteAccess(data) {
export function updateRouteRoute(data) {
return request({
url: `/api/mapBuild/${data.mapId}/access/${data.id}`,
url: `/api/mapBuild/route/${data.id}`,
method: 'put',
data: data
});
}
/** 更新敌对进路*/
export function updateAgainstAccess(data) {
return request({
url: `/api/mapBuild/${data.mapId}/access/${data.id}/againstRel`,
method: 'post',
data: data
});
}
/** 创建联动道岔*/
export function createLinkageSwitch(data) {
return request({
@ -226,9 +154,9 @@ export function createLinkageSwitch(data) {
}
/** 删除联动道岔*/
export function deleteLinkageSwitch(mapId, coupleId) {
export function deleteLinkageSwitch(coupleId) {
return request({
url: `/api/mapBuild/switchCoupled/${mapId}/${coupleId}`,
url: `/api/mapBuild/switchCoupled/${coupleId}`,
method: 'delete'
});
}
@ -236,7 +164,7 @@ export function deleteLinkageSwitch(mapId, coupleId) {
/** get联动道岔列表*/
export function listLinkageSwitch(mapId, params) {
return request({
url: `/api/mapBuild/switchCoupled/list/${mapId}`,
url: `/api/mapBuild/${mapId}/switchCoupled`,
method: 'get',
params: params
});

View File

@ -53,24 +53,13 @@ export function getTrainingTree() {
}
/** 获取章节基本信息*/
export function getTrainingDetail(args) {
export function getTrainingDetail(trainingId) {
return request({
url: `/api/training/${args.id}`,
url: `/api/training/${trainingId}`,
method: 'get'
});
}
/** 获取实训详细内容*/
export function getTrainingMapDetail(args) {
return request({
url: `/api/training/${args.id}/map`,
method: 'get',
params: {
group: args.group
}
});
}
/** 添加实训*/
export function addTraining(data) {
return request({

View File

@ -62,9 +62,9 @@ export function deleteTrainingCategory(data) {
/**
* 获取地图下的产品列表
*/
export function getCommodityMapProduct(skinStyle) {
export function getCommodityMapProduct(skinCode) {
return request({
url: `/api/mapPrd/${skinStyle}/list`,
url: `/api/mapPrd/${skinCode}/list`,
method: 'get'
});
}

View File

@ -1,7 +1,7 @@
import request from '@/utils/request';
/** 分页查询皮肤*/
export function getSkinStylePageList(params) {
export function getSkinCodePageList(params) {
return request({
url: `/api/mapSkin`,
method: 'get',
@ -10,7 +10,7 @@ export function getSkinStylePageList(params) {
}
/** 添加皮肤*/
export function addSkinStyle(data) {
export function addSkinCode(data) {
return request({
url: `/api/mapSkin`,
method: 'post',
@ -19,7 +19,7 @@ export function addSkinStyle(data) {
}
/** 删除皮肤*/
export function delSkinStyle(id) {
export function delSkinCode(id) {
return request({
url: `/api/mapSkin/${id}`,
method: 'delete'
@ -27,7 +27,7 @@ export function delSkinStyle(id) {
}
/** 查询地图皮肤 */
export function querySkinStyle(id) {
export function querySkinCode(id) {
return request({
url: `/api/mapSkin/${id}`,
method: 'get'
@ -35,7 +35,7 @@ export function querySkinStyle(id) {
}
/** 修改地图皮肤*/
export function updateSkinStyle(data) {
export function updateSkinCode(data) {
return request({
url: `/api/mapSkin/${data.id}`,
method: 'put',
@ -44,7 +44,7 @@ export function updateSkinStyle(data) {
}
/** 通过皮肤Code更新地图皮肤*/
export function updateSkinStyleByCode(data) {
export function updateSkinCodeByCode(data) {
return request({
url: `/api/mapSkin/${data.code}/update`,
method: 'put',
@ -53,7 +53,7 @@ export function updateSkinStyleByCode(data) {
}
/** 查询皮肤是否存在*/
export function querySkinStyleExistByCode(code) {
export function querySkinCodeExistByCode(code) {
return request({
url: `/api/mapSkin/${code}/exist`,
method: 'get'
@ -61,7 +61,7 @@ export function querySkinStyleExistByCode(code) {
}
/** 获取皮肤列表*/
export function getSkinStyleList() {
export function getSkinCodeList() {
return request({
url: `/api/mapSkin/list`,
method: 'get'

View File

@ -90,9 +90,9 @@ export function deleteOperateStepData(id) {
/**
* 批量生成操作列表
*/
export function addTrainingRulesList(skinStyle, data) {
export function addTrainingRulesList(skinCode, data) {
return request({
url: `/api/operate/${skinStyle}/generate`,
url: `/api/operate/${skinCode}/generate`,
method: 'post',
data: data
});
@ -107,7 +107,7 @@ export function getPlaceholderList(data) {
method: 'get',
params: {
trainingType: data.trainingType,
skinStyle: data.skinStyle
skinCode: data.skinCode
}
});
}
@ -121,7 +121,7 @@ export function getOperateTrainingList(data) {
method: 'get',
params: {
productType: data.productType,
skinStyle: data.skinStyle
skinCode: data.skinCode
}
});
}

View File

@ -44,14 +44,6 @@ export function updateQuest(id, data) {
data
});
}
/** 更新任务地图定位信息 */
export function updateMapLocation(id, data) {
return request({
url: `/api/quest/${id}/mapLocation`,
method: 'put',
data
});
}
/** 分页查找上线的仿真任务*/
export function getQuestPageListOnline(params) {

View File

@ -5,7 +5,7 @@ import request from '@/utils/request';
*/
export function getRunPlanList() {
return request({
url: '/api/rp/tree',
url: '/api/runPlan/draft/tree',
method: 'get'
});
}
@ -13,9 +13,9 @@ export function getRunPlanList() {
/**
* 获取地图速度等级列表
*/
export function getSpeedLevels(skinStyle) {
export function getSpeedLevels(skinCode) {
return request({
url: `/api/rp/${skinStyle}/speed`,
url: `/api/runPlan/draft/${skinCode}/speed`,
method: 'get'
});
}
@ -25,7 +25,7 @@ export function getSpeedLevels(skinStyle) {
*/
export function newSpeedLevels(data) {
return request({
url: '/api/rp/speed',
url: '/api/runPlan/draft/speed',
method: 'post',
data: data
});
@ -36,7 +36,7 @@ export function newSpeedLevels(data) {
*/
export function getStationList(mapId) {
return request({
url: `/api/rp/station/${mapId}`,
url: `/api/runPlan/draft/station/${mapId}`,
method: 'get'
});
}
@ -44,9 +44,9 @@ export function getStationList(mapId) {
/**
* 通过皮肤获取运行图车站列表
*/
export function getStationListBySkinStyle(skinStyle) {
export function getStationListBySkinCode(skinCode) {
return request({
url: `/api/rp/station/${skinStyle}/bySkin`,
url: `/api/runPlan/draft/station/${skinCode}/bySkin`,
method: 'get'
});
}
@ -56,7 +56,7 @@ export function getStationListBySkinStyle(skinStyle) {
*/
export function newRunPlan(data) {
return request({
url: '/api/rp',
url: '/api/runPlan/draft',
method: 'post',
data: data
});
@ -67,7 +67,7 @@ export function newRunPlan(data) {
*/
export function queryRunPlan(planId) {
return request({
url: `/api/rp/${planId}`,
url: `/api/runPlan/draft/${planId}`,
method: 'get'
});
}
@ -77,7 +77,7 @@ export function queryRunPlan(planId) {
*/
export function deleteRunPlan(planId) {
return request({
url: `/api/rp/${planId}`,
url: `/api/runPlan/draft/${planId}`,
method: 'delete'
});
}
@ -87,7 +87,7 @@ export function deleteRunPlan(planId) {
*/
export function publishRunPlan(data) {
return request({
url: `/api/rp/${data.planId}/publish`,
url: `/api/runPlan/draft/${data.planId}/publish`,
method: 'post',
data: data
});
@ -98,16 +98,16 @@ export function publishRunPlan(data) {
*/
export function importRunPlan(data) {
return request({
url: `/api/rp/${data.skinStyle}/prdPlan`,
url: `/api/runPlan/draft/${data.skinCode}/prdPlan`,
method: 'post',
data: data.runPlanList
});
}
/** 获取运行图停车点列表*/
export function getRunPlanStopPointList(skinStyle) {
export function getRunPlanStopPointList(skinCode) {
return request({
url: `/api/rp/stopPoint/${skinStyle}`,
url: `/api/runPlan/draft/stopPoint/${skinCode}`,
method: 'get'
});
}
@ -115,23 +115,23 @@ export function getRunPlanStopPointList(skinStyle) {
/** 运行图*/
export function getRpListByMapId(mapId) {
return request({
url: `/api/rp/${mapId}/list`,
url: `/api/runPlan/draft/${mapId}/list`,
method: 'get'
});
}
/** 获取站间运行时间*/
export function getStationRunning(skinStyle) {
export function getStationRunning(skinCode) {
return request({
url: `/api/rp/${skinStyle}/stationRunning`,
url: `/api/runPlan/draft/${skinCode}/stationRunning`,
method: 'get'
});
}
/** 设置站间运行时间*/
export function setStationRunning(skinStyle, data) {
export function setStationRunning(skinCode, data) {
return request({
url: `/api/rp/${skinStyle}/stationRunning`,
url: `/api/runPlan/draft/${skinCode}/stationRunning`,
method: 'put',
data: data
});
@ -140,7 +140,7 @@ export function setStationRunning(skinStyle, data) {
/** 创建运行图*/
export function createEmptyPlan(data) {
return request({
url: `/api/rp`,
url: `/api/runPlan/draft`,
method: 'post',
data: data
});
@ -149,7 +149,7 @@ export function createEmptyPlan(data) {
/** 查询运行图服务号是否存在*/
export function checkServiceNumberExist({ planId, serviceNumber }) {
return request({
url: `/api/rp/${planId}/${serviceNumber}/service`,
url: `/api/runPlan/draft/${planId}/${serviceNumber}/service`,
method: 'get'
});
}
@ -157,7 +157,7 @@ export function checkServiceNumberExist({ planId, serviceNumber }) {
/** 查询交路列表*/
export function getRoutingList(planId) {
return request({
url: `/api/rp/${planId}/routingList`,
url: `/api/runPlan/draft/${planId}/routingList`,
method: 'get'
});
}
@ -165,7 +165,7 @@ export function getRoutingList(planId) {
/** 根据交路查询交路区段列表*/
export function querySectionListByRouting({ planId, routingCode }) {
return request({
url: `/api/rp/${planId}/${routingCode}/routingSectionList`,
url: `/api/runPlan/draft/${planId}/${routingCode}/routingSectionList`,
method: 'get'
});
}
@ -173,7 +173,7 @@ export function querySectionListByRouting({ planId, routingCode }) {
/** 有效性检查*/
export function planEffectiveCheck(planId) {
return request({
url: `/api/rp/${planId}/check`,
url: `/api/runPlan/draft/${planId}/check`,
method: 'get'
});
}
@ -181,7 +181,7 @@ export function planEffectiveCheck(planId) {
/** 增加计划*/
export function addPlanService(data) {
return request({
url: `/api/rp/${data.planId}/service`,
url: `/api/runPlan/draft/${data.planId}/service`,
method: 'post',
data: data
});
@ -190,7 +190,7 @@ export function addPlanService(data) {
/** 删除计划*/
export function deletePlanService(data) {
return request({
url: `/api/rp/${data.planId}/service/${data.serviceNumber}`,
url: `/api/runPlan/draft/${data.planId}/service/${data.serviceNumber}`,
method: 'delete'
});
}
@ -198,7 +198,7 @@ export function deletePlanService(data) {
/** 复制计划*/
export function duplicateService(data) {
return request({
url: `/api/rp/${data.planId}/service/${data.serviceNumber}`,
url: `/api/runPlan/draft/${data.planId}/service/${data.serviceNumber}`,
method: 'post',
data: data
});
@ -207,7 +207,7 @@ export function duplicateService(data) {
/** 修改计划*/
// export function updatePlanService(data) {
// return request({
// url: `/api/rp/${data.planId}/service/${data.serviceNumber}`,
// url: `/api/runPlan/draft/${data.planId}/service/${data.serviceNumber}`,
// method: 'put',
// data: data
// })
@ -216,7 +216,7 @@ export function duplicateService(data) {
/** 增加任务*/
export function addPlanTrip(data) {
return request({
url: `/api/rp/${data.planId}/${data.serviceNumber}/trip`,
url: `/api/runPlan/draft/${data.planId}/${data.serviceNumber}/trip`,
method: 'post',
data: data
});
@ -225,7 +225,7 @@ export function addPlanTrip(data) {
/** 删除任务*/
export function deletePlanTrip(params) {
return request({
url: `/api/rp/${params.planId}/trip/${params.SDTNumber}`,
url: `/api/runPlan/draft/${params.planId}/trip/${params.SDTNumber}`,
method: 'delete',
params: { deleteBefore: params.deleteBefore }
});
@ -234,7 +234,7 @@ export function deletePlanTrip(params) {
/** 修改任务*/
export function updatePlanTrip(data) {
return request({
url: `/api/rp/${data.planId}/trip/${data.SDTNumber}`,
url: `/api/runPlan/draft/${data.planId}/trip/${data.SDTNumber}`,
method: 'put',
data: data
});
@ -243,7 +243,7 @@ export function updatePlanTrip(data) {
/** 根据车次号查询交路*/
export function getRoutingBySDTNumber(params) {
return request({
url: `/api/rp/${params.planId}/routing`,
url: `/api/runPlan/draft/${params.planId}/routing`,
method: 'get',
params: {
SDTNumber: params.SDTNumber
@ -254,7 +254,7 @@ export function getRoutingBySDTNumber(params) {
/** 运行图仿真测试*/
export function runPlanNotify({ planId }) {
return request({
url: `/api/rp/${planId}/simulation`,
url: `/api/runPlan/draft/${planId}/simulation`,
method: 'get'
});
}
@ -309,17 +309,17 @@ export function deleteRunPlanEveryDay(planId) {
}
/** 获取地图运行图的车次号*/
export function getPublishMapTrainNos(skinStyle) {
export function getPublishMapTrainNos(skinCode) {
return request({
url: `/api/runPlan/daily/${skinStyle}/trainNos`,
url: `/api/runPlan/daily/${skinCode}/trainNos`,
method: 'get'
});
}
/** 获取服务号、车组号*/
export function getPublishMapTrainServerNos(skinStyle) {
export function getPublishMapTrainServerNos(skinCode) {
return request({
url: `/api/runPlan/daily/${skinStyle}/serverNos`,
url: `/api/runPlan/daily/${skinCode}/serverNos`,
method: 'get'
});
}

26
src/api/script.js Normal file
View File

@ -0,0 +1,26 @@
import request from '@/utils/request';
/** 分页查找上线的剧本*/
export function getScriptPageListOnline(params) {
return request({
url: `/api/script/paging/online`,
method: 'get',
params: params
});
}
/** 通过ID查询剧本的基础信息 */
export function getScriptByIdList(id) {
return request({
url: `/api/script/${id}/basic`,
method: 'get'
});
}
/** 通过ID查询剧本的基础信息 */
export function getScriptById(id) {
return request({
url: `/api/script/${id}/detail`,
method: 'get'
});
}

View File

@ -179,24 +179,75 @@ export function scriptRecordNotify(scriptId) {
/** 保存剧本背景*/
export function saveScriptScenes(group) {
return request({
url: `/api/simulation/${group}/questRecord/scenes`,
method: 'post'
url: `/api/simulation/${group}/scriptWrite/scenes`,
method: 'put'
});
}
/** 保存录制任务数据*/
export function saveScriptData(group) {
return request({
url: `/api/simulation/${group}/questRecord`,
method: 'post'
url: `/api/simulation/${group}/scriptWrite/saveData`,
method: 'put'
});
}
/** 更新任务地图定位信息*/
export function updateMapLocation(group, data) {
return request({
url: `/api/simulation/${group}/scriptWrite/mapLocation`,
method: 'put',
data
});
}
/** 获取剧本编制的所有成员角色*/
export function getScriptMemberData(group) {
return request({
url: `/api/simulation/${group}/scriptWrite/members`,
method: 'get'
});
}
/** 获取剧本出演成员角色 */
export function getScriptPlayMember(group) {
return request({
url: `/api/simulation/${group}/scriptWrite/players`,
method: 'get'
});
}
/** 取消剧本演出成员角色 */
export function cancleScriptMembers(group, data) {
return request({
url: `/api/simulation/${group}/scriptWrite/removePlayers`,
method: 'put',
data
});
}
/** 选择剧本演出成员角色 */
export function selectScriptMembers(group, data) {
return request({
url: `/api/simulation/${group}/scriptWrite/choosePlayers`,
method: 'put',
data
});
}
/** 修改剧本演出成员性别 */
export function modifyScriptMemberSex(group, playerId, data) {
return request({
url: `/api/simulation/${group}/scriptWrite/player/${playerId}?gender=${data.gender}`,
method: 'put',
});
}
/** 清除仿真剧本数据*/
export function dumpScriptData(scriptId) {
export function dumpScriptData(group) {
return request({
url: `/api/simulation/${scriptId}/clearScriptRecord`,
method: 'post'
url: `/api/simulation/${group}/scriptWrite/saveData`,
method: 'delete'
});
}
@ -216,85 +267,110 @@ export function getDesignatedTimeTrainNum(params, group) {
params
});
}
/** 根据成员角色查询设备列表*/
export function getDevicesByRole(group, params) {
/** 添加剧本动作 */
export function addScriptAction(group, data) {
return request({
url: `/api/simulation/${group}/role/devices`,
method: 'get',
params
});
}
/** 获取任务录制的成员角色列表 */
export function getMembersByGroup(group) {
return request({
url: `/api/simulation/${group}/questRecord/members`,
method: 'get'
});
}
/** 添加任务角色成员 */
export function postQuestMember(group, data) {
return request({
url: `/api/simulation/${group}/questRecord/member`,
url: `/api/simulation/${group}/scriptWrite/action`,
method: 'post',
data
});
}
/** 删除任务角色成员 */
export function deleteQuestMember(group, memberId) {
/** 删除剧本动作 */
export function deleteScriptAction(group, actionId) {
return request({
url: `/api/simulation/${group}/questRecord/member/${memberId}`,
url: `/api/simulation/${group}/scriptWrite/action/${actionId}`,
method: 'delete'
});
}
// /** 添加/修改任务角色行为 */
export function postMemberBehavior(group, memberId, data) {
/** 修改剧本动作 */
export function modifyScriptAction(group, actionId, data) {
return request({
url: `/api/simulation/${group}/questRecord/${memberId}/behavior`,
method: 'post',
url: `/api/simulation/${group}/scriptWrite/action/${actionId}`,
method: 'put',
data
});
}
/** 删除任务角色行为 */
export function deleteMemberBehavior(group, memberId, behaviorId) {
return request({
url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}`,
method: 'delete'
});
}
/** 删除任务角色行为动作 */
export function deleteMemberBehaviorAction(group, memberId, behaviorId, actionId) {
return request({
url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}/action/${actionId}`,
method: 'delete'
});
}
/** 添加/修改任务角色行为动作 */
export function postMemberBehaviorAction(group, memberId, behaviorId, data) {
return request({
url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}/action`,
method: 'post',
data
});
}
/** 添加/修改任务目标条件*/
export function postTargetConditionAction(group, data) {
return request({
url: `/api/simulation/${group}/questRecord/targetCondition`,
method: 'post',
data
});
}
/** 删除任务目标条件*/
export function deleteTargetConditionAction(group, tcId) {
return request({
url: `/api/simulation/${group}/questRecord/targetCondition/${tcId}`,
method: 'delete'
});
}
// /** 根据成员角色查询设备列表*/
// export function getDevicesByRole(group, params) {
// return request({
// url: `/api/simulation/${group}/role/devices`,
// method: 'get',
// params
// });
// }
// /** 获取任务录制的成员角色列表 */
// export function getMembersByGroup(group) {
// return request({
// url: `/api/simulation/${group}/questRecord/members`,
// method: 'get'
// });
// }
// /** 添加任务角色成员 */
// export function postQuestMember(group, data) {
// return request({
// url: `/api/simulation/${group}/questRecord/member`,
// method: 'post',
// data
// });
// }
// /** 删除任务角色成员 */
// export function deleteQuestMember(group, memberId) {
// return request({
// url: `/api/simulation/${group}/questRecord/member/${memberId}`,
// method: 'delete'
// });
// }
// // /** 添加/修改任务角色行为 */
// export function postMemberBehavior(group, memberId, data) {
// return request({
// url: `/api/simulation/${group}/questRecord/${memberId}/behavior`,
// method: 'post',
// data
// });
// }
// /** 删除任务角色行为 */
// export function deleteMemberBehavior(group, memberId, behaviorId) {
// return request({
// url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}`,
// method: 'delete'
// });
// }
// /** 删除任务角色行为动作 */
// export function deleteMemberBehaviorAction(group, memberId, behaviorId, actionId) {
// return request({
// url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}/action/${actionId}`,
// method: 'delete'
// });
// }
// /** 添加/修改任务角色行为动作 */
// export function postMemberBehaviorAction(group, memberId, behaviorId, data) {
// return request({
// url: `/api/simulation/${group}/questRecord/${memberId}/behavior/${behaviorId}/action`,
// method: 'post',
// data
// });
// }
// /** 添加/修改任务目标条件*/
// export function postTargetConditionAction(group, data) {
// return request({
// url: `/api/simulation/${group}/questRecord/targetCondition`,
// method: 'post',
// data
// });
// }
// /** 删除任务目标条件*/
// export function deleteTargetConditionAction(group, tcId) {
// return request({
// url: `/api/simulation/${group}/questRecord/targetCondition/${tcId}`,
// method: 'delete'
// });
// }
/** 分页查询存在的仿真 */
export function getExistingSimulation(params) {
@ -320,28 +396,45 @@ export function getDeviceCodeByDeviceType(group, params) {
params
});
}
/** 根据设备类型获取设备条件列表 */
export function getDeviceCoditionByDeviceType(params) {
// /** 根据设备类型获取设备条件列表 */
// export function getDeviceCoditionByDeviceType(params) {
// return request({
// url: `/api/simulation/deviceType/conditions`,
// method: 'get',
// params
// });
// }
/** 获取任务录制的数据 */
export function getScriptRecord(group) {
return request({
url: `/api/simulation/deviceType/conditions`,
method: 'get',
params
});
}
/** 获取任务录制的数据*/
export function getQuestRecord(group) {
return request({
url: `/api/simulation/${group}/questRecord`,
url: `/api/simulation/${group}/scriptWrite`,
method: 'get'
});
}
/** 加载任务*/
export function loadQuest(questId, memberId, group) {
return request({
url: `/api/simulation/${group}/quest/${questId}?memberId=${memberId}`,
method: 'post'
});
return request({
url: `/api/simulation/${group}/quest/${questId}?memberId=${memberId}`,
method: 'post'
});
}
/** 加载剧本 */
export function loadScript(scriptId, memberId, group) {
return request({
url: `api/simulation/${group}/script/${scriptId}?memberId=${memberId}`,
method: 'post'
});
}
/** 退出剧本*/
export function quitScript(group) {
return request({
url: `/api/simulation/${group}/script`,
method: 'delete'
});
}
/** 退出任务*/
@ -361,10 +454,11 @@ export function getSimulationInfo(group) {
}
/** 获取可用的设备指令*/
export function getAvailableDeviceCommand() {
export function getAvailableDeviceCommand(params) {
return request({
url: `/api/simulation/deviceCommand/available`,
method: 'get'
method: 'get',
params
});
}
@ -376,3 +470,19 @@ export function saveTaskScript(group, data) {
data
});
}
/** 暂停剧本编制的仿真 */
export function scriptPause(group) {
return request({
url: `/api/simulation/${group}/scriptWrite/pause`,
method: 'post'
});
}
/** 恢复仿真运行并执行刚编辑的剧本动作 */
export function executeScript(group) {
return request({
url: `/api/simulation/${group}/scriptWrite/execute`,
method: 'post'
});
}

89
src/api/statistics.js Normal file
View File

@ -0,0 +1,89 @@
import request from '@/utils/request';
// 课程列表
export function getLessonList(code) {
return request({
url: '/api/stats/lesson/list',
method: 'get',
params: {
wmCode: code
}
});
}
// 课程内实训数据统计
export function getLessonTimeChart(data) {
return request({
url: `/api/stats/lesson/${data.id}/stats`,
method: 'get',
params: {
wmCode: data.code
}
});
}
// 查询参与考试的课程列表
export function getExamTree(code) {
return request({
url: '/api/stats/exam/lessonList',
method: 'get',
params: {
wmCode: code
}
});
}
// 查询参与考试的试题列表
export function getstatsExamList(data) {
return request({
url: `/api/stats/exam/${data.lessonId}/list`,
method: 'get',
params: {
wmCode: data.code
}
});
}
// 个人考试数据统计
export function getExamChart(data) {
return request({
url: `/api/stats/exam/${data.examId}/stats`,
method: 'get',
params: {
wmCode: data.code
}
});
}
// 个人关注地图数据统计列表
export function getRelevanceMapList(code) {
return request({
url: `/api/user/subscribe`,
method: 'get',
params: {
wmCode: code
}
});
}
// 仿真地图下产品列表
export function getSimulationPrdList(mapId, code) {
return request({
url: `/api/stats/simulation/${mapId}/prdList`,
method: 'get',
params: {
wmCode: code
}
});
}
// 个人仿真数据统计
export function getSimulationTimeChart(data) {
return request({
url: `/api/stats/simulation/${data.mapId}/stats`,
method: 'get',
params: {
wmCode: data.code
}
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -69,6 +69,7 @@
</el-button>
<el-button
v-else
id="testId"
class="dsp-block"
type="text"
:disabled="checkIfDisabled(item)"
@ -169,6 +170,11 @@ export default {
},
close() {
this.show = false;
// popover
const popoverList = document.getElementsByClassName('el-popover');
for (let i = 0; i < popoverList.length; i++) {
popoverList[i].style.display = 'none';
}
},
checkIfDisabled(menuObj) {
return menuObj.disabled === true;
@ -221,6 +227,7 @@ export default {
width: 100%;
border-radius: unset;
border: 1px solid transparent;
color: #000;
}
.dsp-block:hover {
@ -234,6 +241,7 @@ export default {
width: 100%;
cursor: pointer;
border: 1px solid transparent;
color: #000;
input {
opacity: 0;

View File

@ -4,7 +4,7 @@
<qrcode-vue v-loading="loading" :value="url" :size="400" />
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="doClose">关闭</el-button>
<el-button @click="doClose">{{ $t('global.close') }}</el-button>
</span>
</el-dialog>
</template>

View File

@ -32,7 +32,7 @@
v-model="formModel[name]"
type="date"
:value-format="field.valueFormat || 'yyyy-MM-dd'"
:placeholder="field.placeholder || '选择日期'"
:placeholder="field.placeholder || $t('global.chooseDate')"
/>
</el-form-item>
</template>
@ -42,7 +42,7 @@
v-model="formModel[name]"
type="daterange"
:value-format="field.valueFormat || 'yyyy-MM-dd'"
range-separator=""
:range-separator="$t('global.to')"
/>
</el-form-item>
</template>
@ -52,7 +52,7 @@
v-model="formModel[name]"
type="time"
:value-format="field.valueFormat || 'HH:mm:ss'"
:placeholder="field.placeholder || '选择时间'"
:placeholder="field.placeholder || $t('global.chooseTime')"
/>
</el-form-item>
</template>
@ -63,7 +63,7 @@
type="timerange"
is-range
:value-format="field.valueFormat || 'HH:mm:ss'"
range-separator=""
:range-separator="$t('global.to')"
/>
</el-form-item>
</template>
@ -73,7 +73,7 @@
v-model="formModel[name]"
type="datetime"
:value-format="field.valueFormat || 'yyyy-MM-dd HH:mm:ss'"
:placeholder="field.placeholder || '选择日期时间'"
:placeholder="field.placeholder || $t('global.chooseDateTime')"
/>
</el-form-item>
</template>
@ -83,7 +83,7 @@
v-model="formModel[name]"
type="datetimerange"
:value-format="field.valueFormat || 'yyyy-MM-dd HH:mm:ss'"
range-separator=""
:range-separator="$t('global.to')"
/>
</el-form-item>
</template>
@ -95,7 +95,7 @@
v-model="formModel[name]"
:multiple="field.config.multiple"
clearable
:placeholder="field.placeholder || '请选择'"
:placeholder="field.placeholder || $t('global.choose')"
filterable
@change="selectChange(field, formModel)"
>
@ -128,9 +128,9 @@
</template>
</el-col>
<el-col :span="5" :offset="1">
<el-button type="primary" size="small" :disabled="!canQuery" @click="query">查询</el-button>
<el-button v-if="queryForm.reset" type="primary" size="small" :disabled="!canQuery" @click="doClean">重置</el-button>
<el-button v-if="exportFlag" type="primary" size="small" :disabled="!canQuery" @click="doExport">导出</el-button>
<el-button type="primary" size="small" :disabled="!canQuery" @click="query">{{ $t('global.query') }}</el-button>
<el-button v-if="queryForm.reset" type="primary" size="small" :disabled="!canQuery" @click="doClean">{{ $t('global.reset') }}</el-button>
<el-button v-if="exportFlag" type="primary" size="small" :disabled="!canQuery" @click="doExport">{{ $t('global.export') }}</el-button>
<template v-for="(button, index) in queryList.actions">
<el-button
v-if="button.hasOwnProperty('show') ? button.show: true"

View File

@ -29,7 +29,7 @@
>
<el-table-column v-if="queryList.selectCheckShow" type="selection" width="55" />
<el-table-column v-if="queryList.indexShow" type="index" width="50" />
<el-table-column v-if="queryList.radioShow" label="#选择" width="60">
<el-table-column v-if="queryList.radioShow" :label="`#${$t('global.select')}`" width="60">
<template slot-scope="scope">
<el-radio v-model="choose" :label="scope.row">{{ `` }}</el-radio>
</template>
@ -131,7 +131,7 @@
:type="'primary'"
:disabled="!queryList.selection.length"
@click="queryList.selectAllClick(queryList.selection)"
>选中添加</el-button>
>{{ $t('global.selectAdd') }}</el-button>
</div>
<div class="page-container " style="text-align: center; margin: 10px 0; height: 40px;">
<el-pagination
@ -226,7 +226,7 @@ export default {
};
},
mounted() {
this.commitQuery();
// this.commitQuery();
// this.tableHeight = this.$refs.table2.$el.offsetHeight + 23;
},
methods: {
@ -280,7 +280,7 @@ export default {
self.enableQuery();
}).catch(error => {
self.enableQuery();
self.$message.error('导出执行异常:' + error.message);
self.$message.error(`${this.$t('error.exportFailed')}: ${error.message}`);
});
});
},
@ -406,7 +406,7 @@ export default {
this.$set(this.queryList, 'total', resultData.total);
}).catch(error => {
self.enableQuery();
this.$message.error('获取列表数据失败:' + error.message);
this.$message.error(`${this.$t('error.getListFailed')}${error.message}`);
});
} else {
const data = this.queryList.data;

View File

@ -1,6 +1,6 @@
<template>
<div class="turnback-bar">
<el-button type="text" size="medium" icon="el-icon-arrow-left" @click="turnback">返回</el-button>
<el-button type="text" size="medium" icon="el-icon-arrow-left" @click="turnback">{{ $t('global.back') }}</el-button>
<div class="title">{{ title }}</div>
</div>
</template>

View File

@ -0,0 +1,10 @@
export default {
simulationSystem: 'Urban rail transit simulation system',
simulationSystemDescription: 'Based on the subway signal system, the urban rail transit simulation system is reformed for the training part, aiming to build a set of professional simulation system for driving demonstration. The system has high flexibility for future expansion and upgrading. Meanwhile, the simulation system has two modes of normal operation and fault operation. Besides normal functional operation, it can also conduct fault simulation of equipment.',
simulationName: 'Simulation name:',
noSimulationProducts: 'No simulation products',
productDescription: 'Product description:',
startSimulation: 'Start the simulation',
createRoom: 'Create a room',
enterRoom: 'Enter the room'
};

View File

@ -3,8 +3,65 @@ export default {
createSimulationFailed: 'Failure to create simulation',
loadMapDataFailed: 'Failed to load map data',
getMapStepsFailed: 'Failed to get map step data',
getMapDetailFailed: 'Failed to get map detail',
resetFailed: 'Reset failure',
startTrainingFailed: 'Failure to start training',
saveBackgroundFailed: 'Failed to save background',
deleteFailed: 'Failed to delete'
deleteFailed: 'Failed to delete',
exportFailed: 'Export Execution Exceptions',
getListFailed: 'Failed to retrieve list data',
getDistributeQrcodeFailed: 'Failure to obtain permission to distribute two-dimensional code',
obtainMaxNumberFailed: 'Failed to obtain the maximum number of user privileges',
getTransferQrcodeFailed: 'Failure to obtain permission to transfer two-dimensional code',
requestFailed: 'Failed to request',
transferredQRCodeFailed: 'Failed to acquiring transferred qrcode',
loadingDataFailed: 'Failed to loading data',
addingFailure: 'Failure to add',
cancelled: 'Cancelled',
getItemListFailed: 'Failed to get the item list',
getItemDetailFailed: 'Failed to obtain product details',
getMapProductListFailed: 'Failed to get map product list',
getLessonListFailed: 'Failed to get product course list',
remoteQueryError: 'Remote query error',
obtainOperationGraphFailed: 'Failed to obtain operation graph data',
obtainStationListFailed: 'Failed to get station list',
loadingOperationGraphFailed: 'Failed to load operation graph data',
cannotPublished: 'Data in creation cannot be published',
cannotDeleted: 'Deletion cannot be done while creating',
refreshOperationGraphFailed: 'Failed to refresh the running diagram list',
getSpeedLevelFailed: 'Failed to get speed level',
speedRatingExists: 'The speed rating already exists',
createSpeedLevelFailed: 'Failed to create speed level',
createOperationGraphFailed: 'Failed to create operation diagram',
loadingCityListFailed: 'Failed to load city list',
cannotNarrowDown: 'You cannot narrow down the training list you created last time',
scanningError: 'Scanning error',
serviceException: 'Service exception',
codeHasExist: 'Coding already exists',
formartError: 'The format is incorrect, only characters/numbers/_',
createDictionaryFailed: 'Failed to create dictionary',
updateDictionaryFailed: 'Failed to update dictionary',
createDetailFailed: 'Failed to create details',
updateDetailFailed: 'Failed to update details',
addFailed: 'Failure to add',
updateFailed: 'Failure to update',
exportException: 'Export exception',
operationFailure: 'Operation Failure',
createCommonRunPlanFailed: 'Failed to create a common run plan',
templateHasBeUse: 'The template has been used by the load plan and cannot be deleted',
setFailed: 'Setup failed',
deleteException: 'To remove exceptions, contact your administrator',
paperHasUseNotDel: 'The paper has been used and cannot be deleted',
batchCreateFailed: 'Batch build operation definition failed',
createOperateRuleFailed: 'Failed to create operation definition',
createOperateStepFailed: 'The create action step failed',
updateOperateStepFailed: 'The update action step failed',
packagePermissionFailed: 'Packaging authority failed',
acquisitionTimeFailed: 'Acquisition Time Failed',
getProductListFailed: 'Failed to get product list',
obtainChapterDataFailed: 'Failed to obtain chapter data',
obtainCourseDetailsFailed: 'Failed to obtain course details',
obtainCourseInformationFailed: 'Failed to obtain course information',
obtainStepDataFailed: 'Failed to obtain step data'
};

16
src/i18n/langs/en/exam.js Normal file
View File

@ -0,0 +1,16 @@
export default {
testSystem: '城市轨道交通考试系统',
testSystemDescription: ' 该系统具有自定义考试规则、自动生成考卷、学员成绩统计、数据曲线分析及题库管理等功能,从实战操作、业务流程、故障模拟及考试规则等多角度出发,力求打造最符合用户需求的城市轨道交通在线交互实操类考试系统',
examResultsDetails: '考试结果详情',
testQuestionsName: '试题名称',
testScores: '考试得分',
points: '分',
whetherThrough: '是否通过',
didNotCalculate: '未计算',
pass: '通过',
notPass: '未通过',
examTime: '考试用时',
trainingName: '实训名称',
trainingScore: '实训得分',
returnToExamList: '返回考试列表'
};

View File

@ -10,5 +10,101 @@ export default {
operate: 'Operate',
edit: 'Edit',
delete: 'Delete',
add: 'Add'
add: 'Add',
query: 'Query',
detail: 'Details',
quickEntry: 'Quick entry',
scan: 'Scan',
chooseDate: 'Please choose the date',
chooseTime: 'Please choose the time',
chooseDateTime: 'Please choose the date and time',
choose: 'Please choose',
select: 'Select',
selectAdd: 'Select Add',
export: 'Export',
to: 'To',
close: 'Close',
back: 'Back',
chooseCityAndRoute: 'Please choose cities and routes',
font: 'Font',
size: 'Size',
distributeQrcode: 'Privilege Distribution Two-Dimensional Code',
remainPermissionNumber: 'Number of remaining maximum permissions',
distributeLessonPermission: 'Distribution of Privileges in Classes',
distributeExamPermission: 'Distribution of Examination Authority',
distributeSimulationPermission: 'Distribution of simulation privileges',
distributeScreenPermission: 'Large Screen Privilege Distribution',
email: 'Email',
nickName: 'nickname',
mobile: 'mobile',
name: 'Name',
code: 'Code',
status: 'Status',
remarks: 'Remarks',
selectionTime: 'Selection of time',
permissionNumber: 'Number of permissions',
pleaseInputPermissionNumber: 'Please enter the number of permissions',
permissionGreaterThen0: 'The number of permissions must be greater than 0',
enterStartTime: 'Please enter the start time',
enterEndTime: 'Please enter the end time',
enterDate: 'Input date',
transferQrcode: 'Privilege Transfer Two-Dimensional Code',
transferLessonPermission: 'Transfer of Class Authority',
transferExamPermission: 'Transfer of Examination Authority',
transferSimulationPermission: 'Transfer of simulation privileges',
transferScreenPermission: 'Large screen rights transfer',
today: 'Today',
total: 'Total',
index: 'Indexes',
startTime: 'Start time',
endTime: 'End time',
isForever: 'Forever',
remains: 'Remainder',
hasPermissionTip: 'Public permission is {0}, private permission is {1}',
create: 'Create',
update: 'Update',
return: 'Return',
toBeDeveloped: 'Functions to be developed',
yuan: '¥',
filteringKeywords: 'Enter keywords for filtering',
lastStep: 'Last Step',
nextStep: 'Next Step ',
skip: 'Skip',
modify: 'Modify',
language: 'Language',
exit: 'Exit',
chooseLanguage: 'Please choose the language',
switchLanguage: 'Switch language',
joinRoom: 'Join Room',
synthesisTrainingTitle: 'Synthesis Training Fast Entrance',
pleaseChooseRoom: 'You did not choose a room',
inviteJoinRoom: 'Invite you to join the synthesis training!',
trainingHasStart: "{name}'s room has begun",
trainingNotStart: "{name}'s room hasn't started yet",
inputRoomNumber: 'Please enter the room number.',
chooseRoom: 'Choose Room',
month: 'month',
putaway: 'Putaway',
soldOut: 'Sold out',
exportMap: 'Export Map',
preview: 'Preview',
notBeUse: 'This function is not enabled for the time being',
fastCreate: 'Quickly Create',
duration: 'duration',
isTry: 'Try',
buy: 'Buy',
distributePermission: 'Distribute permission',
transferQRCode: 'Transfer QRCode',
minutes: 'minutes',
minute: 'minute',
totoal: 'Totoal',
publishPermission: 'The public authority',
specialPermission: 'Special permission',
mapList: 'Map list',
updateTime: 'Update time:',
line: 'Line:',
permissionList: 'Permissions list:',
remove: 'remove',
append: 'append',
release: 'release'
};

View File

@ -8,6 +8,15 @@ import rules from './rules';
import scriptRecord from './scriptRecord';
import tip from './tip';
import system from './system';
import orderAuthor from './orderAuthor';
import teach from './teach';
import publish from './publish';
import permission from './permission';
import replay from './replay';
import planMonitor from './planMonitor';
import screenMonitor from './screenMonitor';
import demonstration from './demonstration';
import exam from './exam';
export default {
...enLocale,
@ -15,9 +24,18 @@ export default {
global,
router,
lesson,
teach,
error,
rules,
scriptRecord,
tip,
system
system,
orderAuthor,
publish,
permission,
replay,
planMonitor,
screenMonitor,
demonstration,
exam
};

View File

@ -7,6 +7,7 @@ export default {
hasCalcelDelete: 'Canceled deletion',
isConfirmDelete: 'Whether to confirm deletion?',
trainingName: 'Training Name',
trainingType: 'Training Type',
stationList: 'Station List',
stepInfo: 'Step Information',
selectMap: 'Please select the map',
@ -21,5 +22,70 @@ export default {
startRecording: 'Start Recording',
endRecording: 'End Recording',
nextStep: 'Next Step',
selectMode: 'Mode'
selectMode: 'Mode',
deleteSuccess: 'Delete successfully',
wellDelTrainingRule: 'This action will delete the training rule. Do you want to continue?',
stepDetail: 'Detail',
generation: 'Generation',
skinType: 'Skin Type',
minDuration: 'The Best Available',
maxDuration: 'The Largest Available',
trainingRemark: 'Explain',
createOperateRule: 'Create Action Rules',
editOperateRule: 'Edit Action Rules',
tipNamePlaceholderInfo: "Select the placeholder '{}' not to be deleted, otherwise the name will display incorrectly!",
tipExplainPlaceholderInfo: "Select placeholder '{}' not to be deleted, otherwise the display will be problematic!",
generationOperation: 'Automatic Generation Operation',
wellClearOperate: 'This operation clears all operation definitions under the skin. Do you want to continue?',
batchCreateSuccess: 'Batch build operation definition successful',
createOperateSuccess: 'The operation definition was created successfully',
updateOperateSuccess: 'The update steps were successful',
wellDelOperate: 'This action will delete the training step. Do you want to continue?',
operateCode: 'Opcode',
stepReturn: 'Return Value',
stepTips: 'Tips',
createStepInfo: 'Create Step Information',
eidtStepInfo: 'Edit Step Information',
product: 'Product',
remarks: 'Remarks',
operateSuccess: 'Operation successfully',
createChapter: 'Create chapter',
contentSorting: 'Content sorting',
courseList: 'Course list',
createNewCoursesFromRelease: 'Create new courses from release',
courseName: 'Course name',
parentChapter: 'Parent chapter',
chapterName: 'Chapter name',
chapterInstructions: 'Chapter instructions',
associatedTraining: 'Associated training',
updateChapter: 'Update chapter',
automaticOrManual: 'Auto/Manual',
automatic: 'Automatic',
manual: 'Manual',
publishCourseName: 'Publish course name',
draftCourseName: 'Draft course name',
associatedSkin: 'Associated skin',
associatedProducts: 'Associated products',
courseDescription: 'Course description',
editCourse: 'Edit course',
createCourse: 'Create course',
courseRelease: 'Course release',
releaseAssociatedCity: 'Release associated city',
releaseAssociatedMap: 'Release associated map',
trainingSequence: 'Training sequence',
creationTime: 'Creation time',
finishTime: 'Finish time',
createResults: 'Create results',
start: 'start',
toPerform: 'To perform',
productType: 'Product type:',
minTime: 'Minimum time:',
maxTime: 'Largest time:',
trainingDescription: 'Training description:',
generateTraining: 'Generate training',
updateTraining: 'Update training',
deleteTraining: 'Delete training',
automaticGenerationOfTraining: 'Automatic generation of training',
modifyTrainingByCategory: 'Modify training by category',
deleteAutoGeneratedTraining: 'Delete auto-generated training'
};

View File

@ -1,460 +1,502 @@
export default {
pleaseSelect: '请选择',
sketchMap: '草稿地图列表',
newConstruction: '新建',
importMap: '导入地图',
createNewMap: '新建地图',
normalCreate: '正常创建',
saveMapAs: '地图另存为',
create: '创建',
dataVerification: '数据校验',
logicalView: '逻辑视图',
physicalView: '物理视图',
mixedView: '混合视图',
normal: '正常',
add: '添加',
are: '是',
deny: '否',
drawData: 'The drawing data',
mapData: 'Map data',
pleaseSelect: 'please choose',
sketchMap: 'Draft map list',
newConstruction: 'create',
importMap: 'Import the map',
createNewMap: 'A new map',
normalCreate: 'The normal to create',
saveMapAs: 'Save the map as',
create: 'establish',
dataVerification: 'data verification',
logicalView: 'logical view',
physicalView: 'Physical view',
mixedView: 'The mixed view',
normal: 'normal',
add: 'add',
are: 'yes',
deny: 'no',
drawMap: 'draw',
advanced: 'advanced',
viewLayer: 'The view layer',
layerDisplay: 'The layer display',
viewShows: 'View shows',
contentShows: 'content show',
createBatch: 'Create a batch',
save: '保存',
updata: '更新',
updateObj: '修改',
updateObjAxis: '更新坐标',
saveAs: '另存为',
publish: '发布',
deleteObj: '删除',
remove: '移除',
lastStep: '上一步',
confirm: '确 定',
cancel: '取 消',
cancelledDelete: '已取消删除',
confirmDeletion: '是否确认删除?',
hint: '提示',
save: 'save',
updata: 'update',
updateObj: 'modification',
updateObjAxis: 'Update the coordinate',
saveAs: 'save as',
publish: 'publish',
deleteObj: 'delete',
remove: 'remove',
lastStep: 'last step',
confirm: 'confirm',
cancel: 'cancel',
link: 'link',
section: '区段',
switch: '道岔',
signal: '信号机',
zcZoneControl: 'zc区域控制',
temporaryLimit: '全线临时限速',
lcControl: 'Lc控制',
image: '图片',
station: '车站',
controlMode: '控制模式',
platform: '站台',
counter: '计数器',
delayUnlock: '延迟解锁',
train: '列车',
trainWindow: '车次窗',
line: '线条',
text: '文字',
section: 'section',
switch: 'switch',
signal: 'signal',
zcZoneControl: 'zc zone control',
temporaryLimit: 'temporary speed restriction',
lcControl: 'Lc control',
image: 'image',
station: 'station',
controlMode: 'control mode',
platform: 'platform',
counter: 'counter',
delayUnlock: 'Delay to unlock',
train: 'train',
trainWindow: 'train window',
line: 'line',
text: 'text',
mapName: '地图名称:',
skinName: '皮肤风格:',
selectCity: '所属城市:',
offsetXColon: 'X偏移:',
offsetYColon: 'Y偏移:',
scalingColon: '缩放比例:',
operationUnusual: '操作异常:',
offsetX: 'X偏移',
offsetY: 'Y偏移',
scaling: '缩放比例',
statusSignalName: '状态信号名称:',
stateSignalsPlotCoordinates: '状态信号画图坐标:',
equipmentStation: '所属设备集中站:',
mapName: 'Name of the map:',
skinName: 'Skin style:',
selectCity: 'city:',
offsetXColon: 'X Offset:',
offsetYColon: 'Y Offset:',
scalingColon: 'scaling:',
operationUnusual: 'abnormal operation:',
offsetX: 'X Offset',
offsetY: 'Y Offset',
scaling: 'scaling',
statusSignalName: 'Status signal name:',
stateSignalsPlotCoordinates: 'State signals plot coordinates:',
equipmentStation: 'Equipment centralization station:',
lineCoding: '线条编码:',
lineType: '线条类型:',
lineWidth: '线条宽度:',
segmentCoordinates: '区段显示坐标:',
lineCoding: 'Line coding:',
lineType: 'Line type:',
lineWidth: 'Line width:',
segmentCoordinates: 'Segment display coordinates:',
publishMapCreation: '从发布地图创建',
publishMapCreation: 'Create from the publish map',
pleaseEnterMapName: '请输入地图名称',
pleaseChooseSkinStyle: '请选择皮肤风格',
pleaseSelectMapSource: '请选择地图来源',
pleaseSelectAssociatedCity: '请选择关联城市',
pleaseSelectAssociatedSkin: '请选择关联皮肤',
pleaseEnteMapLinkWidth: '请输入地图Link宽度',
pleaseEnterMapSectionWidth: '请输入地图区段宽度',
failedLoadListPublishedMaps: 'Failed to load the list of published maps',
creatingSuccessful: 'Created successfully!',
mapUpdateSuccessful: 'Map update successful!',
createFailure: 'Create a failure',
importSuccessful: 'Import successful!',
importFailure: 'Import failure',
updateSuccessfully: 'update successfully',
updateFailed: 'Update failed',
failedLoadCityList: 'Failed to load city list',
successfullyDelete: 'successfully delete',
failDelete: 'fail to delete',
dataValidationFailed: 'Publishing failed, data validation failed',
releaseSuccess: 'Release success!',
abnormalOperation: 'abnormal operation',
datQuestion: 'Data in question',
dataList: 'Data list',
saveFailed: 'Save failed',
failedLoadListPublishedMaps: '加载已发布地图列表失败',
creatingSuccessful: '创建成功!',
mapUpdateSuccessful: '更新地图成功!',
createFailure: '创建失败',
importSuccessful: '导入成功!',
importFailure: '导入失败',
updateSuccessfully: '更新成功',
updateFailed: '更新失败',
failedLoadCityList: '加载城市列表失败',
successfullyDelete: '删除成功',
failDelete: '删除失败',
dataValidationFailed: '发布失败,数据校验不通过',
releaseSuccess: '发布成功!',
abnormalOperation: '操作异常',
datQuestion: '有问题数据',
dataList: '数据列表',
saveFailed: '另存失败',
mapEditor: 'map editor',
mapPublished: 'Map published as',
publishingAssociatedCity: 'Publishing associated city:',
publishMapName: 'Publish map name:',
mapEditor: '地图编辑',
mapPublished: '地图发布为',
publishingAssociatedCity: '发布关联城市:',
publishMapName: '发布地图名称:',
editRoute: 'Edit route',
editRouting: 'Edit/road',
editAutoRouting: 'Edit automatic signal',
setSwitch: 'Linkage switch',
pathUnit: 'The path to the unit',
jlmap3d: '3d editing',
editRoute: '编辑进路',
editRouting: '编辑交路',
editAutoRouting: '编辑自动信号',
setSwitch: '联动道岔',
pathUnit: '路径单元',
jlmap3d: '三维化编辑',
automaticSignalList: 'Automatic signal list',
automaticSignalCode: 'Automatic signal coding',
signalCodeName: 'Signal name',
signalCode: 'Signal code',
sectionData: 'Section data',
preview: 'preview',
operation: 'operation',
compile: 'compile',
empty: 'empty',
reset: 'reset',
sectionName: 'name of the section',
sectionList: 'Section lists',
automaticSignal: 'automatic signal',
automaticSignalList: '自动信号列表',
automaticSignalCode: '自动信号编码',
signalCodeName: '信号机名称',
signalCode: '信号机code',
sectionData: '区段数据',
preview: '预览',
operation: '操作',
compile: '编辑',
delete: '删除',
empty: '清空',
reset: '重置',
sectionName: '区段名称',
sectionList: '区段列表',
automaticSignal: '自动信号',
signalID: 'Signal ID:',
activate: 'activate',
signalID: '信号机ID:',
activate: '激活',
segmentData: '进路自动触发区段数据:',
pleaseSelectSignal: 'Please select the signal',
triggerSegmentData: 'Select approach to automatically trigger segment data',
automaticSignalSuccessful: 'Automatic signal creation successful!',
failedCreateSignal: 'Failed to create automatic signal',
automaticSignalUpdateSucceeded: 'Automatic signal update successful!',
automaticSignalUpdateFailed: 'Automatic signal update failed',
pleaseSelectSignal: '请选择信号机',
triggerSegmentData: '请选择进路自动触发区段数据',
automaticSignalSuccessful: '创建自动信号成功!',
failedCreateSignal: '创建自动信号失败',
automaticSignalUpdateSucceeded: '更新自动信号成功!',
automaticSignalUpdateFailed: '更新自动信号失败',
stationName: 'The station name:',
stationName: '车站名称:',
property: 'attribute',
counterCoding: 'Counter coding:',
counterName: 'Counter name:',
belongsStation: 'Belongs to the station:',
counterType: 'Counter type:',
countMax: 'Counter maximum:',
pointX: 'coordinates x:',
pointY: 'coordinates y:',
meter: 'meter',
property: '属性',
counterCoding: '计数器编码:',
counterName: '计数器名称:',
belongsStation: '所属车站:',
counterType: '计数器类型:',
countMax: '计数器最大值:',
pointX: '坐标 x:',
pointY: '坐标 y:',
meter: '米',
code: 'code:',
imageName: 'Image name:',
imageWidth: 'Image width:',
imageHeight: 'Picture height:',
imagePoint: 'Image coordinates:',
imageZindex: 'Image level:',
imageSelect: 'Pictures to choose:',
rotateAngle: 'Rotation Angle:',
code: '编码:',
imageName: '图片名称:',
imageWidth: '图片宽度:',
imageHeight: '图片高度:',
imagePoint: '图片坐标:',
imageZindex: '图片层级:',
imageSelect: '图片选择:',
rotateAngle: '旋转角度:',
areaSolution: 'Area so the solution',
alwaysSolution: 'People always solution',
areaSolution: '区故解',
alwaysSolution: '总人解',
pleaseSelectMap: 'Please select map',
selectCounterType: 'Select the counter type',
selectStation: 'Please select station',
pleaseSelectDevice: 'Please re-select the device',
pleaseSelectCountName: 'Please enter a counter name',
pleaseCounterValue: 'please enter counter maximum',
pleaseEnterXCoordinate: 'Please enter the x coordinate',
pleaseEnterYCoordinate: 'Please enter the y coordinate',
pleaseEnterDelayTime: 'Please enter delay time',
pleaseEnterFontColor: 'Please enter the font color',
pleaseEnterFontFormat: 'Please enter the font format',
pleaseEnterImageWidth: 'Please enter image width',
pleaseEnterImageHeight: 'Please enter image width',
pleaseSelectMap: '请选择地图',
selectCounterType: '请选择计数器类型',
selectStation: '请选择车站',
pleaseSelectDevice: '请重新选择设备',
pleaseSelectCountName: '请输入计数器名称',
pleaseCounterValue: '请输入计数器最大值',
pleaseEnterXCoordinate: '请输入x坐标',
pleaseEnterYCoordinate: '请输入y坐标',
pleaseEnterDelayTime: '请输入延时时间',
pleaseEnterFontColor: '请输入字体颜色',
pleaseEnterFontFormat: '请输入字体格式',
pleaseEnterImageWidth: '请输入图片宽度',
pleaseEnterImageHeight: '请输入图片高度',
delayUnlockingCode: 'Delay unlocking code:',
delayTime: 'Delay time:',
font: 'font:',
color: 'color:',
delayUnlockingCode: '延时解锁编码:',
delayTime: '延时时间:',
font: '字体:',
color: '颜色:',
upside: 'In the upper',
hypomere: 'The period of',
upside: '上段',
hypomere: '下段',
linkType: 'The Link type',
linkCode: 'The Link code:',
linkName: 'The Link name:',
linkDisplayLength: 'Link display length:',
linkActualLength: 'Actual Link length:',
linkColor: 'The Link colors:',
linkLeftFdCode: 'Left forward Link:',
linkLeftSdCode: 'Left lateral Link:',
linkRightFdCode: 'Right forward Link:',
linkRightSdCode: 'Right lateral Link:',
linkLp: 'Link Start point coordinates:',
linkRp: 'Link End point coordinates:',
linkType: 'Link类型',
linkCode: 'Link编码:',
linkName: 'Link名称:',
linkDisplayLength: 'Link显示长度:',
linkActualLength: 'Link实际长度:',
linkColor: 'Link颜色:',
linkLeftFdCode: '左侧正向Link:',
linkLeftSdCode: '左侧侧向Link:',
linkRightFdCode: '右侧正向Link:',
linkRightSdCode: '右侧侧向Link:',
linkLp: 'Link 起点坐标:',
linkRp: 'Link 终点坐标:',
rulesChange: 'The rules change',
splitMerge: 'Split/merge',
linkSet: 'The Link set',
selectLink: 'Select the Link',
splitOffset: 'Split offset:',
split: 'Split',
merge: 'merge',
logicBlock: 'Logical extents',
aux: 'The first',
sectionLine: 'Section of the line',
sectionPolyline: 'Section polyline',
switchSection: 'The switch section',
trainDirection: 'Direction of train:',
deleteSwitchSection: 'One key to delete the switch section',
createSwitchSection: 'One key creates the turnout section',
sectionLogicalNumber: 'Number of logical extents',
sectionLsectioncode: 'Left section name:',
sectionRsectioncode: 'Right section name:',
associatedSection: 'Associated physical section:',
blockCoding: 'Block coding:',
sectionType: 'Section type:',
sectionNameColon: 'The name of the section:',
sectionNameOffset: 'Extentname offset:',
leftKilometerMark: 'Left kilometer mark (meter):',
rightKilometerMark: 'Right kilometer mark (meter):',
sectionColon: 'interval:',
displayExtentName: 'Whether to display the extent name:',
displayAxleCounter: 'Whether to display axis gauge:',
displayLogicalExtents: 'Whether to display logical extents:',
displayLogicalWxtentNames: 'Whether to display logical extent names:',
isStandTrack: 'Platform rail:',
standTrackName: 'Platform track name:',
standTrackNamePosition: 'Platform track name offset:',
relStandCode: 'The platform code:',
isReentryTrack: 'Whether to return to orbit:',
reentryTrackName: 'Name of reentrant rail:',
reentryTrackNamePosition: 'Backtrack name offset:',
isTransferTrack: 'Conversion rail:',
transferTrackName: 'Transfer rail name:',
transferTrackNamePosition: 'Conversion rail name offset:',
destinationCode: 'Destination code:',
destinationCodePoint: 'Destination code coordinates:',
destinationCodeShow: 'Whether to display destination code:',
leftStopPointOffset: 'Left stop point offset:',
rightStopPointOffset: 'Right stop point offset:',
isSwitchSection: 'Whether switch section:',
relSwitchCode: 'Relate turnout Code:',
logicSectionNameSort: 'Logical extent sort:',
fromSmallToLarge: 'From small to big',
fromLargeToSmall: 'From big to small',
relevanceLinkCode: 'The associated Link:',
sepTypeLeft: 'The left delimiter type:',
sectionOffsetLeft: 'Left Link offset:',
sepTypeRight: 'Right separator type:',
sectionOffsetRight: 'Right Link offset:',
isSegmentation: 'Whether or not split:',
segmentationPosition: 'The default setting:',
isCurve: 'Whether the curve:',
physicalSegmentName: 'Physical segment name:',
rulesChange: '规则修改',
sectionNameC: '区段名称:',
splitMerge: '拆分/合并',
linkSet: 'Link集合',
selectLink: '选择Link',
splitOffset: '拆分偏移量:',
split: '拆分',
merge: '合并',
logicBlock: '逻辑区段',
aux: '第',
sectionLine: '段折线',
sectionPolyline: '区段折线',
switchSection: '道岔区段',
trainDirection: '列车所在方向:',
deleteSwitchSection: '一键删除道岔区段',
createSwitchSection: '一键创建道岔区段',
sectionLogicalNumber: '逻辑区段数量',
sectionLsectioncode: '左侧区段名称:',
sectionRsectioncode: '右侧区段名称:',
associatedSection: '关联物理区段:',
blockCoding: '区段编码:',
sectionType: '区段类型:',
sectionNameColon: '区段名称:',
sectionNameOffset: '区段名称偏移量:',
leftKilometerMark: '左侧公里标(米):',
rightKilometerMark: '右侧公里标(米):',
sectionColon: '区间:',
displayExtentName: '是否显示区段名称:',
displayAxleCounter: '是否显示计轴:',
displayLogicalExtents: '是否显示逻辑区段:',
displayLogicalWxtentNames: '是否显示逻辑区段名称:',
isStandTrack: '是否站台轨:',
standTrackName: '站台轨名称:',
standTrackNamePosition: '站台轨名称偏移量:',
relStandCode: '站台编码:',
isReentryTrack: '是否折返轨:',
reentryTrackName: '折返轨名称:',
reentryTrackNamePosition: '折返轨名称偏移量:',
isTransferTrack: '是否转换轨:',
transferTrackName: '转换轨名称:',
transferTrackNamePosition: '转换轨名称偏移量:',
destinationCode: '目的地码:',
destinationCodePoint: '目的地码坐标:',
destinationCodeShow: '是否显示目的地码:',
leftStopPointOffset: '左向停车点偏移量:',
rightStopPointOffset: '右向停车点偏移量:',
isSwitchSection: '是否道岔区段:',
relSwitchCode: '关联道岔Code:',
logicSectionNameSort: '逻辑区段排序:',
fromSmallToLarge: '从小到大',
fromLargeToSmall: '从大到小',
relevanceLinkCode: '关联的Link:',
sepTypeLeft: '左侧分隔符类型:',
sectionOffsetLeft: '左侧Link偏移量:',
sepTypeRight: '右侧分隔符类型:',
sectionOffsetRight: '右侧Link偏移量:',
isSegmentation: '是否分割:',
segmentationPosition: '默认背景:',
isCurve: '是否曲线:',
sectionPoints: '区段显示坐标:',
trainPosType: '列车所在方向:',
physicalSegmentName: '物理区段名称:',
directionType: 'Form the direction:',
leftOrRight: 'About the position:',
positionType: 'Upper and lower position:',
directionType: '形式方向:',
leftOrRight: '左右位置:',
positionType: '上下位置:',
signalFilamentAlarm: 'Filament alarm',
signalCodeColon: 'Signal code:',
signalNameColon: 'Signal name:',
signalUniqueName: 'Unique name of signal:',
signalDisplayName: 'signal name is displayed:',
lampPostType: 'lamp type:',
lampPositionType: 'Lamp type:',
signalUseType: 'Use the type:',
potLampType: 'Light type:',
signalDirectionType: 'The direction of the type:',
signalPositionType: 'Signal position type:',
signalOffset: 'The offset:',
signalPositionX: 'Signal x:',
signalPositionY: 'Signal y:',
signalNamePositionX: 'Signal name offset x:',
signalNamePositionY: 'Signal name offset y:',
signalButtonShow: 'Display button:',
signalButtonPositionX: 'button x:',
signalButtonPositionY: 'button y:',
signalGuideShow: 'Whether the boot semaphore is displayed:',
signalGuidePositionX: 'Guiding signal x:',
signalGuidePositionY: 'Guiding signal y:',
signalFilamentAlarm: '灯丝报警',
signalCodeColon: '信号机编码:',
signalNameColon: '信号机名称:',
signalUniqueName: '信号机唯一名称:',
signalDisplayName: '是否显示信号机名称:',
lampPostType: '灯柱类型:',
lampPositionType: '灯位类型:',
signalUseType: '用途类型:',
potLampType: '点灯类型:',
signalDirectionType: '方向类型:',
signalPositionType: '信号机位置类型:',
signalOffset: '偏移量:',
signalPositionX: '信号机x:',
signalPositionY: '信号机y:',
signalRotate: '旋转角度:',
signalNamePositionX: '信号机名字偏移量 x:',
signalNamePositionY: '信号机名字偏移量 y:',
signalButtonShow: '是否显示按钮:',
signalButtonPositionX: '按钮x:',
signalButtonPositionY: '按钮y:',
signalGuideShow: '是否显示引导信号灯:',
signalGuidePositionX: '引导信号x:',
signalGuidePositionY: '引导信号y:',
concentrateStationCode: 'Interlocking station coding:',
stationCode: 'The station code:',
zcCode: 'Zc region:',
centralized: 'Centralized station or not:',
stationRunPlanName: 'True name:',
stationVisible: 'Whether or not shown:',
stationNameFont: 'The font:',
stationNameFontColor: 'Station font color:',
stationKmPostShow: 'Whether to display the name of the kilometer marker:',
stationKmRange: 'Kilometer mark distance:',
stationKmPost: 'Kilometer mark name:',
stationKmPostFont: 'Kilometer mark font:',
stationKmPostFontColor: 'Font color of kilometer mark:',
stationPositionX: 'X coordinate:',
stationPositionY: 'Y coordinate:',
concentrateStationCode: '所属联锁站编码:',
stationCode: '车站编码:',
zcCode: '所属zc区域编码:',
centralized: '是否集中站:',
stationNameColon: '车站名称:',
stationRunPlanName: '真实名称:',
stationVisible: '是否显示:',
stationNameFont: '车站字体:',
stationNameFontColor: '车站字体颜色:',
stationKmPostShow: '是否显示公里标名称:',
stationKmRange: '公里标距离:',
stationKmPost: '公里标名称:',
stationKmPostFont: '公里标字体:',
stationKmPostFontColor: '公里标字体颜色:',
stationPositionX: 'x坐标:',
stationPositionY: 'y坐标:',
stationControlCode: 'Control mode coding:',
stationControlName: 'Control mode name:',
zokContent: 'Central content:',
zakContent: 'Stand accused of content:',
jjzkContent: 'Emergency station control/general alarm content:',
zzkContent: 'Station control content:',
stationControlZok: 'central',
stationControlCode: '控制模式编码:',
stationControlName: '控制模式名称:',
zokContent: '中控内容:',
zakContent: '站控内容:',
jjzkContent: '紧急站控/总报警内容:',
zzkContent: '站中控内容:',
stationControlPositionX: '坐标 x:',
stationControlPositionY: '坐标 y:',
stationControlZok: '中控',
skinStyleColon: 'Skin type:',
skinDesignation: 'SkinName',
skinCoding: 'SkinCoding',
coordinatesOrigin: 'CoordinatesOrigin',
addMapSkin: 'AddMapSkin',
updateMapSkin: 'UpdateMapSkin',
stationKilometerMark: 'StationKilometerMark',
arrivalTime: 'ArrivalTime',
operationGraphPublished: 'The operation diagram is published as',
operationGraphName: 'OperationGraphName:',
createOperationGraph: 'CreateOperationGraph',
importOperationGraph: 'ImportOperationGraph',
publishOperationGraph: 'PublishOperationGraph',
deleteOperationGraph: 'DeleteOperationGraph',
mapList: 'MapList',
import: 'Import',
createNewOperationGraph: 'CreateNewOperationGraph',
setOperatingSpeed: 'SetOperatingSpeed',
speedClass1: 'SpeedLevel 1',
speedClass2: 'SpeedLevel 2',
speedClass3: 'SpeedLevel 3',
speedClass4: 'SpeedLevel 4',
name: 'name',
startingRunningDirection: 'StartingRunningDirection',
timeBetweenDepartures: 'TimeBetweenDepartures',
stopTime: 'StopTime',
entranceStation: 'EntranceStation',
exportStation: 'ExportStation',
validityCheck: 'ValidityCheck',
setupOperationGraph: 'SetupOperationGraph',
selectOperationGraphDataRange: 'SelectOperationGraphDataRange',
to: 'to',
selectionTimeRange: 'Please select time range',
pointSystem1: 'OnePointSystem',
pointSystem2: 'TwoPointSystem',
pointSystem5: 'FivePointSystem',
skinType: 'SkinType',
turnoverTime: 'TurnoverTime',
productList: 'ProductList',
belongsToMapName: 'BelongsToMapName',
productType: 'ProductType',
productCode: 'ProductCode',
productName: 'ProductName',
createProductCategories: 'Create product categories',
productDescription: 'ProductDescription',
associateTrainingTypes: 'AssociateTrainingTypes',
createTrainingCategories: 'CreateTrainingCategories',
editTraining: 'Edit product categories',
productCategories: 'The product category',
selectOperation: 'Please select operation',
editTrainingCategories: 'EditTrainingCategories',
linkWidth: 'LinkWidth',
maxLinkWidth: '(Link width is at most 20)',
sectionWidth: 'SectionWidth',
maxSectionWidth: '(Section width is maximum 30)',
showWatermarkOrNot: 'ShowWatermarkOrNot',
stationstandName: 'Select station name:',
stationstandDirection: 'Direction of the platform:',
stationstandHasDoor: 'Whether to display screen door:',
stationstandNameColon: 'Name of the platform:',
stationstandTopBottom: 'Up-and-down direction:',
stationstandShowName: 'Show name or not:',
stationstandWidth: 'width w:',
stationstandHeight: 'highly h:',
stationstandName: '选择车站名称:',
stationstandDirection: '站台方向:',
stationstandHasDoor: '是否显示屏蔽门:',
stationstandNameColon: '站台名称:',
stationstandTopBottom: '上下行方向:',
stationstandShowName: '是否显示名称:',
stationstandWidth: '宽度 w:',
stationstandHeight: '高度 h:',
stationstandPositionX: '坐标 x:',
stationstandPositionY: '坐标 y:',
switchCode: 'Switch coding:',
switchName: 'The name of the switch:',
switchNameC: 'The name of the switch',
switchShowName: 'Whether the switch name is displayed:',
switchPositionX: 'Switch name x offset:',
switchPositionY: 'Switch name y offset:',
turnTime: 'The switch changes time:',
timeoutShow: 'Whether to display switch countdown time:',
sectionACode: 'Associated with A Section Code:',
sectionBCode: 'Associated with B Section Code:',
sectionCCode: 'Associated with C Section Code:',
switchTpX: 'Time x offset:',
switchTpY: 'Time y offset:',
switchCode: '道岔编码:',
switchName: '道岔名称:',
switchNameC: '道岔名称',
switchShowName: '是否显示道岔名称:',
switchPositionX: '道岔名称x偏移量:',
switchPositionY: '道岔名称y偏移量:',
turnTime: '道岔时间:',
timeoutShow: '是否显示道岔时间:',
sectionACode: '关联的A Section Code:',
sectionBCode: '关联的B Section Code:',
sectionCCode: '关联的C Section Code:',
switchTpX: '时间x坐标偏移量:',
switchTpY: '时间y坐标偏移量:',
textCode: 'Literal encoding:',
textContent: 'The text content:',
textFont: 'Font format:',
textFontColor: 'The font color:',
textCode: '文字编码:',
textContent: '文本内容:',
textFont: '字体格式:',
textFontColor: '字体颜色:',
trainCode: 'Train number:',
groupNumber: 'The number of:',
groupNumberInterval: 'Group number interval:',
modelCode: 'Car type:',
trainCode: '列车编号:',
groupNumber: '车组号:',
modelCode: '车类型:',
trainmodelCreate: 'New car type',
trainmodelUpdate: 'Update train model',
trainTypeName: 'Train type name:',
trainLength: 'The length of the train:',
trainSafeDistance: 'A safe distance from:',
trainMaxSafeDistance: 'Maximum safe distance:',
averageVelocity: 'The average velocity:',
averageDeceleration: 'Mean deceleration:',
defaultVelocity: 'The default rate:',
maxVelocity: 'Maximum speed:',
trainmodelCreate: '新建车类型',
trainmodelUpdate: '更新列车模型',
trainTypeName: '列车类型名称:',
trainLength: '列车长度:',
trainSafeDistance: '安全距离:',
trainMaxSafeDistance: '最大安全距离:',
averageVelocity: '平均速度:',
averageDeceleration: '平均减速度:',
defaultVelocity: '默认速度:',
maxVelocity: '最大速度:',
trainWindowCode: 'Number window code:',
trainWindowWidth: 'Train window width:',
trainWindowHeight: 'Number window height:',
trainWindowSectionCode: 'Related sections:',
trainWindowCode: '车次窗编码:',
trainWindowWidth: '车次窗宽度:',
trainWindowHeight: '车次窗高度:',
trainWindowSectionCode: '关联区段:',
deleteTrainWindow: 'Delete the number window with one click',
createTrainWindow: 'Create a train window with one click',
deleteTrainWindow: '一键删除车次窗',
createTrainWindow: '一键创建车次窗',
showZc: 'Whether or not visible:',
zcCodeColon: '编码:',
showZc: '是否可见:',
pathUnitList: 'Path unit list',
startSectionCode: 'Starting stop',
endSectionCode: 'Terminal stop',
pathUnitCode: 'Path unit code',
pathUnitMapName: 'Map name',
orderNum: 'priority',
pathName: 'In the name of the',
startingSignalName: 'Name of starting signal',
endingSignalName: 'Name of terminal signal',
pathUnitList: '路径单元列表',
startSectionCode: '始端停车点',
endSectionCode: '终端停车点',
pathUnitCode: '路径单元code',
pathUnitMapName: '所属地图名称',
orderNum: '优先级',
pathName: '进路名称',
affiliationStationCode: '所属车站名称',
startingSignalName: '始端信号机名称',
endingSignalName: '终端信号机名称',
routeID: 'Route ID',
routeName: 'In the name of the:',
routeStationName: 'Station name',
routeID: '进路ID',
routeName: '进路名称:',
routeMapId: '所属地图名称',
routeStationName: '所属车站名称',
routeStartSignalCode: '始端信号机名称',
routeEndSignalCode: '终端信号机名称',
startSectionCodeColon: 'Starting stop:',
endSectionCodeColon: 'Terminal stop:',
startSectionCodeColon: '始端停车点:',
endSectionCodeColon: '终端停车点:',
routePreview: 'In the preview',
accessType: 'Access property type',
automaticAccessType: 'Automatic access type',
nearSectionCode: 'Close to segment name',
continueProtectSwitchData: 'Continue to protect switch data',
accessSideTurnoutData: 'Access side turnout data',
routePreview: '进路预览',
accessType: '进路性质类型',
automaticAccessType: '自动进路类型',
nearSectionCode: '接近区段名称',
continueProtectSwitchData: '延续保护道岔数据',
accessSideTurnoutData: '进路侧防道岔数据',
turnBackRailName: 'Name of reentrant rail',
routeSegmentData: 'The approach automatically triggers the segment data',
routeProtectsData: 'Path continuation protects segment data',
accessPhysical: 'Access physical segment data',
routeAccessScreenData: 'Access screen door data',
routeAccessTurnoutData: 'access switch data ',
hostileApproachData: 'hostileApproachData ',
professor: 'relation',
associatedRoute: 'associatedRoute:',
turnBackRailName: '折返轨名称',
routeSegmentData: '进路自动触发区段数据',
routeProtectsData: '进路延续保护区段数据',
accessPhysical: '进路物理区段数据',
routeAccessScreenData: '进路屏蔽门数据',
routeAccessTurnoutData: '进路道岔数据',
hostileApproachData: '敌对进路数据',
relation: '关系',
associatedRoute: '关联进路:',
associatedHostileRecord: 'Associated hostile record',
routeArc: 'Whether automatic tracking/interlock triggers automatically:',
routeFlt: 'Whether convoy/interlock automatic approach:',
delayUnlockingTime: 'Delay unlocking time:',
accessTypeColon: 'Access property type:',
associatedHostileRecord: '关联敌对记录',
routeArc: '是否自动追踪/联锁自动触发:',
routeFlt: '是否车队/联锁自动进路:',
delayUnlockingTime: '延时解锁时间:',
accessTypeColon: '进路性质类型:',
automaticAccessTypeColon: 'Automatic access type:',
startSignalId: 'Initial signal ID:',
endSignalId: 'Terminal signal machine ID:',
automaticAccessTypeColon: '自动进路类型:',
startSignalId: '始端信号机ID:',
endSignalId: '终端信号机ID:',
switchType: 'Switch type',
switchId: 'Switch ID',
accessSwitchList: 'Access turnout data:',
accessStandList: 'Access screen door data:',
accessSectionList: 'Access physical segment data:',
turnBackSectionCode: 'Turn back track ID:',
routeFlankProtectionList: 'Side turnout data:',
routeOverlapSwitchList: 'Continue to protect switch data:',
routeOverlapSectionList: 'Path continuation protects segment data:',
routeTriggerSectionList: 'The approach automatically triggers the segment data:',
nearSectionCodeColon: 'Close to extent ID:',
switchType: '道岔类型',
switchId: '道岔ID',
accessSwitchList: '进路道岔数据:',
accessStandList: '进路屏蔽门数据:',
accessSectionList: '进路物理区段数据:',
turnBackSectionCode: '折返轨ID:',
routeFlankProtectionList: '侧防道岔数据:',
routeOverlapSwitchList: '延续保护道岔数据:',
routeOverlapSectionList: '进路延续保护区段数据:',
routeTriggerSectionList: '进路自动触发区段数据:',
nearSectionCodeColon: '接近区段ID:',
thenList: 'Then list',
startStation: 'Originating station',
endStation: 'Into standing',
thenList: '交路列表',
startStation: '起始站',
endStation: '终到站',
routingCode: 'Routing code',
routingName: 'Pay the road name',
startStationCodeColon: 'Originating station:',
startStationCode: 'The starting platform',
endStationCode: 'Into the platform',
destination: 'destination',
routingDirection: 'The direction of',
remarks: 'describe',
remarksColon: 'describe:',
trafficSegmentData: 'Traffic segment data:',
startSectionColon: 'The starting blocks:',
endStationColon: 'Into standing:',
endSectionColon: 'Into sections:',
routingCode: '交路code',
routingName: '交路名称',
startStationCodeColon: '起始站:',
startStationCode: '起始站台',
endStationCode: '终到站台',
routingDirection: '方向',
remarks: '描述',
remarksColon: '描述:',
trafficSegmentData: '交路区段数据:',
startSectionColon: '起始区段:',
endStationColon: '终到站:',
endSectionColon: '终到区段:',
stationCodeClomn: 'The station code',
blockCodingClomn: 'Block coding',
stationCodeClomn: '车站编码',
blockCodingClomn: '区段编码',
routing: 'Pay the way',
routing: '交路',
linkageSwitchList: 'Linkage switch list',
linkageSwitchList: '联动道岔列表',
switchACode: 'Switch number 1',
switchBCode: 'Switch number 2',
switchACode: '道岔1编号',
switchBCode: '道岔2编号',
switchACodeNum: '道岔ID 1:',
switchBCodeNum: '道岔ID 2:'
switchACodeNum: 'Switch ID 1:',
switchBCodeNum: 'Switch ID 2:',
wellDelTrianModel: 'Deleting the train model will delete the associated class cars together, please confirm whether to continue?',
clear: 'Clear'
};

View File

@ -0,0 +1,88 @@
export default {
name: 'Name',
productType: 'Product type',
map: 'Map',
state: 'State',
commodityName: 'Commodity name',
mapName: 'Map name',
courseName: 'Course name',
price: 'Price',
describtion: 'Describtion',
creationTime: 'Creation time',
setupFailure: 'Setup failure',
setupEffective: 'Setup effective',
organizationOrEnterprise: 'Organization/Enterprise',
userName: 'User Name',
permissionType: 'Permission type',
permissionNumber: 'Permission number',
permanenceOrNot: 'Permanence or not',
startDate: 'StartDate',
purchaseMonths: 'Purchase months',
totalPrice: 'Total price',
paymentMethod: 'Payment method',
creationDate: 'Creation date',
orderType: 'Order type',
contractNumber: 'Contract number',
businessType: 'Business type',
paymentStatus: 'Payment status',
salesman: 'Salesman',
obtainQrCode: 'Obtain QrCode',
userMobile: 'User mobile',
mapProductName: 'Map product name',
publicOrPrivate: 'Public/Private',
totalPermissions: 'Total permissions',
residualPermissionNumber: 'Residual permissionNumber',
authorityStatus: 'Authority status',
startTime: 'StartTime',
endTime: 'EndTime',
courseAuthorityStatus: 'Course authority status',
source: 'Source',
founderPhone: 'Founder phone',
founder: 'Founder',
privilegePackaging: 'Privilege packaging',
packaging: 'Packaging',
unpacking: 'Unpacking',
authorityDetails: 'Authority details',
renew: 'Renew',
productName: 'Product name',
recovery: 'Recovery',
permissionPack: 'Permission pack',
privilegeTransferQRCode: 'Privilege transfer QRCode',
generatingQRCode: 'Generating QRCode',
transferQRCode: 'Transfer QRCode',
today: 'Today',
yesterday: 'Yesterday',
addOrder: 'AddOrder',
aWeekAgo: 'A week ago',
updateOrder: 'Update order',
renewOrder: 'Renew order',
unknownRouter: 'Unknown router',
increasePurchaseTime: 'Increase purchase time',
choosePurchaseTime: 'Choose purchase time',
increasePermissionNumber: 'Increase permission number',
choosePermissionNumber: 'Choose permission number',
itemPricing: 'itemPricing',
addUserPermissions: 'Add user permissions',
publicAuthority: 'Public authority',
privateAuthority: 'Private authority',
optionPrivilegeTransfer: 'Option privilege transfer',
trainingList: 'Training list',
selectPermissionsPackage: 'Select package authority',
addRecords: 'Add records',
totalNumber: 'Total number',
permissionToDistributeQRCode: 'Permission to distribute qr code',
editPermissionRules: 'Edit permission rules',
addGoods: 'Add goods',
updateGoods: 'Update goods',
lesson: 'Lesson',
whetherTrial: 'WhetherTrial',
unitOfTime: 'Unit of time',
trialTime: 'Trial time',
distributionUser: 'Distribution user',
orderNumber: 'Order Number',
select: 'Select',
sourcesOfInformation: 'Sources of information',
distributePermission: 'Distribute permission',
orderCreation: 'Order creation',
chooseGoods: 'Choose goods'
};

View File

@ -0,0 +1,31 @@
export default {
permissionPack: 'Package',
setSuccess: 'Set successfully',
isSureSetBelonger: 'Are you sure to set {name} to be the owner of the permission?',
setBelonger: 'Set Owner',
lessonName: 'Lesson Name',
mapName: 'Map Name',
mapProductName: 'Product Name',
permissionType: 'Permission Type',
permissionStatus: 'Permission Status',
permissionUseType: 'Public/Private',
permissionTotal: 'Total',
permissionRemains: 'Remains',
isForever: 'Permanent',
startTime: 'Start Time',
endTime: 'End Time',
belonger: 'Owner',
userList: 'User List',
customPackageRules: 'Custom packaging rules',
addRules: 'Add rules',
package: 'Pack',
getQrcode: 'Get qr code',
hasExitRule: 'This type rule already exists',
pleaseAddRule: 'Please add rules',
selectDate: 'Select time',
addPermissionPackageRule: 'Add authority packaging rules',
editPermissionPackageRule: 'edit authority packaging rule',
restPermissionMaxNumber: '(maximum number of remaining permissions: {0})',
pleaseSelectTransferPermission: 'Select transfer permissions'
};

View File

@ -0,0 +1,6 @@
export default {
buy: 'Buy',
offlineMappingSoftware: 'Offline mapping software',
lianPlanSystem: 'Urban rail transit lian planning system',
lianPlanDescription: 'Lian plan is a map compiling test system, can be real simulation to achieve the simulation of running test of new operation diagram, the system can realize editing operation diagram, import operation diagram and according to the standard of operation diagram simulation real driving environment, solve the problem that can not be updated for operation diagram test. It can find out the unreasonable places in the new diagram in time and make real-time adjustment on the diagram, so as to avoid the problem of finding problems in the operation of the new diagram and requiring manual intervention of dispatchers, and minimize the impact of the fault on the normal operation of subway.',
};

View File

@ -0,0 +1,47 @@
export default {
city: 'City',
skinType: 'Skin Type',
mapName: 'Map Name',
lessonName: 'Lesson Name',
updateMapName: 'Update Map Name',
updateTime: 'Update Time',
operationSuccess: 'Operate successfully',
deleteSuccess: 'Delete successfully',
wellDelType: 'This action deletes the type. Do you want to continue?',
wellPutawayMap: 'This will launch the map. Do you want to continue?',
wellSoldOutMap: 'This operation will remove this map. Do you want to continue?',
productName: 'Product Name',
productType: 'Product Type',
productCode: 'Product Code',
lessonIntroduction: 'Lesson Introduction',
updateSuccess: 'Update successfully',
wellPutawayTraining: 'Will this operation continue on the last sortie?',
wellSoldOutTraining: 'Will this operation continue for the next sortie?',
wellPutawayProduct: 'This operation will put the product on the shelf. Do you want to continue?',
wellSoldOutProduct: 'This operation will be removed from the shelves. Do you want to continue?',
runPlanName: 'Run Plan Name',
runEveryDayTime: 'Daily Running Time',
userId: 'User Id',
wellDelRunPlanEveryDay: 'This action deletes the daily running plan. Do you want to continue?',
taskName: 'Task Name',
createTime: 'Creation Time',
detail: 'Detail',
generateRunPlan: 'Generate Daily Paln',
selectTemplateRunPlan: 'Select Template Run Plan',
pleaseSelectTemplate: 'Please Select Template Run Plan',
selectMap: 'Select Map',
createCommonRunPlan: 'Create Common Run Plan',
createCommonSuccess: 'Creation of a common run plan was successful',
wellGenerateEveryRunPlan: 'This operation generates a daily running diagram. Do you want to continue?',
wellDelTemplate: 'This action deletes the diagram template. Do you want to continue?',
fullMark: 'Full Mark',
passScore: 'Passing Score',
examTime: 'Exam Time',
creator: 'Creator',
paperName: 'Name Of Test Paper',
setSuccess: 'Set successfully',
wellPutawayPaper: 'This operation puts the paper on the shelf. Do you want to continue?',
wellSoldOutPaper: 'This operation removes the paper from the shelf. Do you want to continue?',
wellDelPaper: 'This operation will delete the paper. Do you want to continue?'
};

View File

@ -0,0 +1,9 @@
export default {
replay: 'Play',
mapName: 'Map Name',
creatorId: 'Creator of ID',
createTime: 'Create Time',
deleteSuccess: 'Delete successfully',
wellDelReplay: 'This action will delete the playback. Do you want to continue?'
};

View File

@ -23,7 +23,7 @@ export default {
dpSystem: 'Large screen',
planSystem: 'Lian Plan',
planSystem: 'Lian plan',
replayManage: 'Playback',

View File

@ -1,147 +1,242 @@
export default {
pleaseSelect: '请选择',
selectEquipment: '请选择设备',
deviceTypeNotNull: '设备类型码不能为空',
operationTypeNotNull: '操作码不能为空',
tipsNotNull: '提示信息不能为空',
pleaseSelectEncoding: '请选择唯一编码',
pleaseEnterStatusSignal: '请输入状态信号名称',
pleaseEnterXCoordinate: '请输入x坐标',
pleaseEnterYCoordinate: '请输入y坐标',
pleaseSelect: 'Please select',
selectEquipment: 'Please select equipment',
deviceTypeNotNull: 'The device type code cannot be empty',
operationTypeNotNull: 'The opcode cannot be empty',
tipsNotNull: 'The prompt message cannot be empty',
pleaseSelectEncoding: 'Please select a unique encoding',
pleaseEnterStatusSignal: 'Please enter the name of the status signal',
pleaseEnterXCoordinate: 'Please enter the x coordinate',
pleaseEnterYCoordinate: 'Please enter the y coordinate',
pleaseSelectLine: '请选择Line',
pleaseSelectLineType: '请选择Line类型',
pleaseSelectLineWidth: '请输入线条宽度',
pleaseSelectLine: 'Please select a Line',
pleaseSelectLineType: 'Select type Line',
pleaseSelectLineWidth: 'Please enter line width',
linkXCoordinate: '请输入Link x坐标',
linkYCoordinate: '请输入Link y坐标',
linkEnterLength: '请输入显示长度',
linkEnterDisplayLength: '请输入真实长度',
linkXCoordinate: 'Please enter the Link x coordinate',
linkYCoordinate: 'Please enter the Link y coordinate',
linkEnterLength: 'Please enter display length',
linkEnterDisplayLength: 'Please enter the true length',
linkSelectBase: '请选择基础Link',
linkEnterLeft: '请输入左侧正向Link',
linkEnterRight: '请输入右侧正向Link',
linkSelectName: '请输入Link名称',
linkSelectDisplayLength: '请输入Link实际长度',
linkSelectBase: 'Select the base Link',
linkEnterLeft: 'Please enter the left forward Link',
linkEnterRight: 'Please enter the forward Link on the right',
linkSelectName: 'Enter the Link name',
linkSelectDisplayLength: 'Please enter the actual length of the Link',
lengthShow: '显示长度:',
lengthFact: '真实长度:',
color: '颜色:',
lengthShow: 'According to the length of the:',
lengthFact: 'The real length:',
color: 'color:',
pointX: '坐标 x:',
pointY: '坐标 y:',
direct: '方向:',
basisLink: '基础Link:',
pointX: 'Coordinates x:',
pointY: 'Coordinates y:',
direct: 'The direction of:',
basisLink: 'Based on the Link:',
sectionRelSwitchCode: 'sectionRelSwitchCode',
pleaseSelectSectionName: '请选择区段名称',
pleaseFillOffset: '请填写偏移量',
pleaseFillValue: '请填写数值',
pleaseSelectLeftSectionName: '请选择左侧区段名称',
pleaseSelectRightSectionName: '请选择右侧区段名称',
pleaseEnterYValue: '请输入坐标Y值',
pleaseEnterSectionType: '请输入区段类型',
pleaseEnterSectionName: '请输入区段名称',
pleaseSelectAssociatedPlatform: '请选择关联站台',
pleaseEnterLeftStopPointOffset: '请输入左向停车点偏移量',
rightStopPointOffset: '请输入右向停车点偏移量',
destinationCode: '请输入目的地码',
destinationCodePointX: '请输入目的地码坐标X',
destinationCodePointY: '请输入目的地码坐标Y',
sectionNamePointX: '请输入区段名称坐标X',
sectionNamePointY: '请输入区段名称坐标Y',
logicSectionNameSort: '请选择逻辑区段名称排序',
sectionOffsetLeft: '请输入左侧Link偏移量',
sectionSepTypeLeft: '请选择左侧分隔符',
sectionOffsetRight: '请输入右侧Link偏移量',
sectionSepTypeRight: '请选择右侧分隔符',
selectPhysicalExtentName: '请选择物理区段名称',
pleaseSelectSectionName: 'Select the section name',
pleaseFillOffset: 'Please fill in the offset',
pleaseFillValue: 'Please fill in the value',
pleaseSelectLeftSectionName: 'Please select the left section name',
pleaseSelectRightSectionName: 'Select the right section name',
pleaseEnterYValue: 'Please enter the coordinate Y value',
pleaseEnterSectionType: 'Please enter the section type',
pleaseEnterSectionName: 'Please enter a section name',
pleaseSelectAssociatedPlatform: 'Please select the associated platform',
pleaseEnterLeftStopPointOffset: 'Please enter left stop point offset',
rightStopPointOffset: 'Please enter an offset to the right stop point',
destinationCode: 'Please enter destination code',
destinationCodePointX: 'Please enter destination code coordinate X',
destinationCodePointY: 'Please enter destination code coordinate Y',
sectionNamePointX: 'Please enter the section name coordinate X',
sectionNamePointY: 'Please enter the section name coordinate Y',
logicSectionNameSort: 'Select logical extent name sort',
sectionOffsetLeft: 'Please enter the left Link offset',
sectionSepTypeLeft: 'Please select the left separator',
sectionOffsetRight: 'Please enter the right Link offset',
sectionSepTypeRight: 'Select the right separator',
selectPhysicalExtentName: 'Select the physical extent name',
pleaseEnterSemaphoreName: '请输入信号灯名称',
pleaseEnterSignalName: '请输入信号机唯一名称',
pleaseEnterSignalOffset: '请输入偏移量',
pleaseEnterSignalStation: '请输入设备集中站',
pleaseEnterSignalPositionX: '请输入信号机x',
pleaseEnterSignalPositionY: '请输入信号机y',
signalButtonPositionX: '请输入按钮x',
signalButtonPositionY: '请输入按钮y',
signalGuidePositionX: '请输入引导信号x',
signalGuidePositionY: '请输入引导信号y',
pleaseEnterSemaphoreName: 'Please enter a semaphore name',
pleaseEnterSignalName: 'Please enter a unique name for the signal',
pleaseEnterSignalOffset: 'Please enter an offset',
pleaseEnterSignalStation: 'Please enter device central station',
pleaseEnterSignalPositionX: 'Please input signal x',
pleaseEnterSignalPositionY: 'Please input signal y',
signalButtonPositionX: 'Please enter button x',
signalButtonPositionY: 'Please enter button y',
signalGuidePositionX: 'Please enter the boot signal x',
signalGuidePositionY: 'Please enter the boot signal y',
stationName: '请输入车站名称',
stationKmRange: '请输入公里标距离',
stationKmPost: '请输入公里标名称',
stationPositionX: '请输入x坐标',
stationPositionY: '请输入y坐标',
stationName: 'Please enter station name',
stationKmRange: 'Please enter kilometer mark distance',
stationKmPost: 'Please enter the name of the kilometer mark',
stationControlStationName: '请选择车站名称',
stationControlStationCode: '请选择所属车站',
stationControlZokContent: '请输入中控内容',
stationControlZakContent: '请输入站控内容',
stationControlJjzkContent: '请输入紧急站控内容',
stationControlZzkContent: '请输入站中控内容',
stationControlPositionX: '请输入坐标x',
stationControlPositionY: '请输入坐标y',
stationControlStationName: 'Please select the station name',
stationControlStationCode: 'Please select your station',
stationControlZokContent: 'Please enter the content of central control',
stationControlZakContent: 'Please enter the content of station control',
stationControlJjzkContent: 'Please enter emergency station control',
stationControlZzkContent: 'Please input the content of station central control',
stationControlPositionX: 'Please enter coordinate x',
stationControlPositionY: 'Please enter coordinate y',
pleaseReSelectDevice: '请重新选择设备',
stationCode: '请选择关联车站',
stationstandCountName: '请输入计数器名称',
doorLocationType: '请选择站台方向',
deviceStationCode: '请选择所属设备集中站',
stationstandDirection: '请选择上下行方向',
stationstandWidth: '请输入车站宽度',
stationstandHeight: '请输入车站高度',
stationstandPositionX: '请输入x坐标',
stationstandPositionY: '请输入y坐标',
pleaseReSelectDevice: 'Please re-select the device',
stationCode: 'Please select the associated station',
stationstandCountName: 'Please enter a counter name',
doorLocationType: 'Please choose the platform direction',
deviceStationCode: 'Please select your own centralized station',
stationstandDirection: 'Please choose the upstream and downstream direction',
stationstandWidth: 'Please enter station width',
stationstandHeight: 'Please enter station height',
switchName: '请输入道岔名称',
switchNamePointX: '请输入道岔名称坐标x',
switchNamePointY: '请输入道岔名称坐标y',
switchStationCode: '请输入设备集中站',
switchTurnTime: '请输入道岔时间',
switchTpX: '请输入时间坐标x',
switchTpY: '请输入时间坐标y',
switchName: 'Please enter the switch name',
switchNamePointX: 'Please enter switch name coordinate x',
switchNamePointY: 'Please enter switch name coordinate y',
switchStationCode: 'Please enter device central station',
switchTurnTime: 'Please enter switch time',
switchTpX: 'Please enter the time coordinate x',
switchTpY: 'Please enter the time coordinate y',
selectText: '请选择Text',
pleaseEnterContent: '请输入内容',
textFont: '请选择文字格式',
textFontColor: '请选择文字颜色',
pleaseEnterGroupNumber: '请输入车组号',
selectTrainType: '请选择车类型',
trainPositionX: '请输入x坐标位置',
trainPositionY: '请输入y坐标位置',
pleaseEnterTrainNumber: '请填写车组号',
selectText: 'Please select the Text',
pleaseEnterContent: 'Please enter content',
textFont: 'Please select the text format',
textFontColor: 'Please select the text color',
pleaseEnterGroupNumber: 'Please enter the group number',
selectTrainType: 'Please select car type',
trainPositionX: 'Please enter the x position',
trainPositionY: 'Please enter the y position',
pleaseEnterTrainNumber: 'Please fill in the group number',
trainCode: '列车模型Code不能为空',
pleaseEnterTrainTypeName: '请输入列车类型名称',
trainLength: '请输入列车长度',
safeDistance: '请输入安全距离',
maxSafeDistance: '请输入最大安全距离',
averageVelocity: '请输入平均速度',
averageDeceleration: '请输入平均减速度',
defaultVelocity: '请输入默认速度',
maxVelocity: '请输入最大速度',
trainCode: 'The train model Code cannot be empty',
pleaseEnterTrainTypeName: 'Please enter train type name',
trainLength: 'Please enter train length',
safeDistance: 'Please enter a safe distance',
maxSafeDistance: 'Please enter the maximum safe distance',
averageVelocity: 'Please enter average speed',
averageDeceleration: 'Please enter average deceleration',
defaultVelocity: 'Please enter the default speed',
maxVelocity: 'Please enter the maximum speed',
trainWindowWidth: '请输入车次窗宽度',
trainWindowHeight: '请输入车次窗高度',
trainWindowSectionCode: '请输入关联区段',
trainWindowWidth: 'Please enter the number window width',
trainWindowHeight: 'Please enter the number window height',
trainWindowSectionCode: 'Please enter the association section',
visible: '请选择是否可见',
pleaseSelectStartSignal: '请选择开始信号机',
pleaseSelectEndSignal: '请选择结束信号机',
visible: 'Please select whether it is visible',
pleaseSelectStartSignal: 'Please select start signal',
pleaseSelectEndSignal: 'Please select end signal',
pleaseEnterPathName: '请输入进路名称',
proximitySection: '请选择接近区段',
accessPropertyType: '请选择进路性质类型',
autoAccessType: '请选择自动进路类型',
physicalSegmentData: '请选择进路物理区段数据',
pleaseEnterPathName: 'Please enter the path name',
proximitySection: 'Please select the proximity section',
accessPropertyType: 'Please select the access property type',
autoAccessType: 'Please select auto - access type',
physicalSegmentData: 'Select access physical segment data',
routingName: '请输入交路名称',
startStationCode: '请选择起始车站',
startSectionCode: '请选择起始区段',
endStationCode: '请选择终到车站',
endSectionCode: '请选择终到区段',
routingName: 'Please enter the traffic name',
startStationCode: 'Please select the starting station',
startSectionCode: 'Select the start section',
endStationCode: 'Please choose the terminal',
endSectionCode: 'Please select end to section',
selectTurnoutID: '请选择道岔ID',
switchesCannot: '道岔不能为同一个'
selectTurnoutID: 'Please select the turnout ID',
switchesCannot: 'Switches cannot be identical',
pleaseInputName: 'Please enter name',
pleaseSelectStatus: 'Please select state',
pleaseInputCode: 'Please enter code',
strLength1To25: 'The length is between 1 and 25 characters',
strLengthNotExceed50: 'No more than 50 characters',
pleaseEnterMapName: 'Please enter a map name',
pleaseChooseSkinCode: 'Please choose skin style',
pleaseSelectMapSource: 'Please select the map source',
pleaseSelectAssociatedCity: 'Please select the associated city',
pleaseSelectAssociatedSkin: 'Please select associated skin',
pleaseEnteMapLinkWidth: 'Please enter map Link width',
pleaseEnterMapSectionWidth: 'Please enter map section width',
organizationInput: 'Please enter the name of the organization or business',
productSelect: 'Please select products',
itemPricingInput: 'Please enter unit price',
orderTypeSelect: 'Please select the order type',
contractNumberInput: 'Please enter the contract number',
salesmanInput: 'Please select a salesperson',
authorAmountInput: 'Please enter the number of permissions to purchase',
authorAmountInputError: 'Please enter the number of valid permissions',
totalPriceInput: 'Please enter the total price',
totalPriceInputError1: 'Please enter the price in two decimal places',
totalPriceInputError2: 'Please enter valid total price',
monthAmountInput: 'Please enter purchase month',
monthAmountInputError: 'Please enter valid months of purchase',
startTimePick: 'Please select a start date',
bizTypeSelect: 'Select a business type',
payWaysSelect: 'Please select payment method',
payStatusSelect: 'Please select payment status',
goodsNameInput: 'Please enter product name',
productTypeInput: 'Please select product type',
mapInput: 'Please select map',
productInput: 'Please select product',
lessonInput: 'Please select courses',
trialTimeInput: 'Please enter trial duration',
unitOfTimeRadio: 'Please select a time unit',
goodsDescribtionInput: 'Please enter product description',
userNameInput: 'Please enter user name',
permissionTypeInput: 'Please select the permission type',
timeInput: 'Please enter the time',
chooseUser: 'Please select the user',
pleaseInputLessonName: 'Please enter the course name',
pleaseSelectTraining: 'Please select training',
maxScaling: '(The maximum scale is 8 steps)',
skinCodingInput: 'Please enter skin code',
skinDesignationInput: 'Please enter skin name',
coordinatesOriginInput: 'Please enter the origin coordinates',
scalingInput: 'Please enter the scale',
scalingInputPrompt: 'Please enter a valid scale',
selectImportFiles: 'Select the file you want to import',
speedLevelEnter1: 'Please enter speed level 1',
speedLevelEnter2: 'Please enter speed level 2',
speedLevelEnter3: 'Please enter speed level 3',
speedLevelEnter4: 'Please enter speed level 4',
drivingDirectionSelect: 'Please choose your driving direction',
timeBetweenDeparturesEnter: 'Please enter the interval',
stopTimeEnter: 'Please enter the docking time',
entranceStationSelect: 'Please select the entrance',
exportStationSelect: 'Please select the exit gate',
selectDataRange: 'Please select the data range range',
productCodeEnter: 'Please enter the product code',
productNameEnter: 'Please enter product name',
productDescriptionEnter: 'Please enter product description',
trainingTypeSelect: 'Please select the associated training type',
linkWidthInput: 'Please enter Link width',
linkWidthInputPrompt: 'Please enter a valid Link width',
sectionWidthInput: 'Please enter section width',
sectionWidthInputPrompt: 'Please enter a valid segment width',
selectShowWatermark: 'Select whether or not to watermark',
pleaseInputMapName: 'Please enter a new name for the map',
inputTemplateRunPlan: 'Please select the template run diagram',
inputSkinType: 'Please select skin type',
inputOperateCode: 'Please enter the step code',
inputStepNo: 'Please enter the step number',
inputStepTips: 'Please enter step number. Please enter step prompt',
selectMapName: 'Please select a map name',
selectMapProductName: 'Please select map product name',
inputTime: 'Please enter time',
inputPermissionNumber: 'Please enter the number of permissions',
permissionNumberGreater0: 'The number of permissions must be greater than 0',
enterChapterName: 'Please enter chapter name',
enterChapterInstructions: 'Please enter chapter instructions',
selectCourseName: 'Please select the course name',
enterCourseName: 'Please enter the course name',
selectAssociatedProduct: 'Please select the associated product',
enterCourseDescription: 'Please enter the course description',
courseIdIsEmpty: 'Course Id is empty',
selectCity: 'Please select city',
enterStandardTime: 'Please enter standard time',
enterNumericValue: 'Please enter a numeric value',
greaterThanMinTime: 'Must be greater than the minimum time',
selectTrainingType: 'Please select training type',
selectOneTrainingType: 'Only one training type can be selected',
enterProductType: 'Please enter product type',
selectAssociatedStation: 'Please select the associated station'
};

View File

@ -0,0 +1,6 @@
export default {
screenSystem: 'Large screen system of urban rail transit',
screenSystemDescription: 'Based on the subway signal system and real subway line data, the big screen system of urban rail transit aims to build a professional simulation system of driving demonstration. The system has high flexibility to switch line data freely.',
productTrialDuration: 'product Trial Duration',
aTSScreenSimulation: 'ATS line tuning center screen simulation'
};

View File

@ -1,8 +1,51 @@
export default {
code: 'code',
name: 'name',
status: 'status',
remarks: 'remarks',
code: 'Code',
name: 'Name',
status: 'Status',
remarks: 'Remarks',
createDirectory: 'Create dictionary',
editDictionary: 'Edit dictionary'
editDictionary: 'Edit dictionary',
deleteSuccess: 'Successful deletion',
createSuccess: 'Create successful',
updateSuccess: 'Update successful',
destory: 'Destory',
simulationGroup: 'Simulation Group',
userName: 'User Name',
skinCode: 'Skin Code',
prdType: 'Product Type',
simulationType: 'Simulation Type',
simulationGroupId: 'Simulation Member ID',
productName: 'Product Name',
isError: 'Is Error',
isSuspend: 'Is Suspend',
isDrivingAsplanned: 'Whether to drive as planned',
wellDelUserSimulation: 'This operation will delete the user simulation data. Do you want to continue?',
createDetail: 'Create details',
editDetail: 'Editorial details',
mapName: 'Map Name',
trainingName: 'Training Name',
trainingUseTime: 'Training Time',
minute: 'Minute',
second: 'Second',
createSimulationTitle: 'Create Simulation Information',
addSuccess: 'Added Successfully',
pleaseInputNames: 'Please enter your nickname/name/cell phone number',
examUser: 'Examination Users',
examScore: 'Examination Score',
examResult: 'Examination Results',
examName: 'Paper Name',
wellDelExamResult: 'This operation will delete the test result. Do you want to continue?',
editExamDetail: 'Edit exam details',
subscribeMap: 'Subscribe',
roles: 'Roles',
nickname: 'Nickname',
wellDelType: 'This operation will delete the type. Do you want to continue?',
permission: 'Permission',
editUserPermission: 'Edit User Rights',
lessonName: 'Lesson Name',
selectTraining: 'Selection Training',
createUserTraining: 'Creating User Training',
editTrainingDetail: 'Editor Training Details',
trainingTime: 'Training duration'
};

View File

@ -0,0 +1,19 @@
export default {
title: 'Urban rail transit teaching system',
describe: 'This system is equipped with real business logic and software architecture based on the business and process-driven mode of metro employees and training sites. From the perspective of business process, standard operation, training mode and open principle, it strives to build a practical training and teaching system that best meets user needs and responds to changes quickly.',
trainingName: 'Training name:',
trainingTime: 'Best time to complete the training:',
trainingMaximum: 'Maximum time to complete the training:',
trainingInstructions: 'Training instructions:',
startTraining: 'Began to practice',
courseName: 'Course name',
courseDescription: 'Course description',
courseDetails: 'Course details',
free: 'free',
permissionsDetails: 'Permissions for details',
buy: 'buy',
permissionDistribute: 'Permission distribution (class)',
authorityTransferred: 'Authority transferred',
courseList: 'Course list'
};

View File

@ -1,52 +1,130 @@
export default {
confirm: '确 定',
cancel: '取 消',
creatingSuccessful: '创建成功!',
confirmDeletion: '是否确认删除?',
confirmBatchGeneration: '是否确认批量生成?',
hint: '提示',
cancelledDelete: '已取消删除',
cancelGeneration: '已取消批量生成',
confirm: 'confirm',
cancel: 'cancel',
creatingSuccessful: 'Created successfully!',
creatingFailed: 'Create a failure',
confirmDeletion: 'Confirm deletion?',
confirmBatchGeneration: 'Is batch generation confirmed?',
confirmBatchDelete: 'Is batch deletion confirmed?',
hint: 'Tips',
cancelledDelete: 'Cancelled delete',
cancelGeneration: 'Batch generation has been cancelled',
refreshFailure: 'Refresh failure',
updateSuccessfully: '更新成功',
saveSuccessfully: '保存成功',
saveFailed: '保存失败',
updateFailed: '更新失败',
successfullyDelete: '删除成功',
failDelete: '删除失败',
operationAbnormal: '操作异常',
createSuccess: '创建成功',
updateSuccessfully: 'The update is successful',
saveSuccessfully: 'Save success',
saveFailed: 'Save failed',
updateFailed: 'Update failed',
successfullyDelete: 'Delete the success',
failDelete: 'Delete failed',
operationAbnormal: 'Abnormal operation',
createSuccess: 'Creating a successful',
cannotCoincide: '起始坐标和结束坐标不能重合',
cannotMerged: '存在非物理区段,不能合并',
linkCannotMerged: '不在同一Link上的物理区段不能合并',
cannotCoincide: 'The starting and ending coordinates cannot coincide',
cannotMerged: 'Non-physical extents exist and cannot be merged',
linkCannotMerged: 'Physical extents that are not on the same Link cannot be merged',
selectedSectionEmpty: '选择的区段为空',
selectedStationEmpty: '选择的车站为空',
selectedSectionEmpty: 'The selected section is empty',
selectedStationEmpty: 'The selected station is empty',
selectMap: '请先选择地图',
selectTrainType: '请选择查看的列车模型',
enterKeywordsFiltering: 'Enter keywords for filtering',
stationFont: '车站字体',
kilometerFont: '公里标字体',
meter: '米',
angle: '度',
selectMap: 'Please select the map first',
selectTrainType: 'Please select the train model to view',
pleaseEnterNameQuery: '请输入名称查询',
routeSameID: '相同ID的数据已存在',
pathCreationSuccessful: '创建交路成功!',
createRoutingFailed: '创建交路失败',
pathUpdataSuccessful: '更新交路成功!',
pathUpdataFailed: '更新交路失败',
stationFont: 'The font',
kilometerFont: 'Kilometer mark font',
meter: 'meter',
angle: 'angle',
failedLoadMap: '加载地图数据失败',
sectionPointsDeficiency: '区段坐标缺失',
operationSuccessfully: 'Operation is successful',
operationFailed: 'The operation failure',
setupSuccessfully: 'Set up the success',
setupFailed: 'Setup failed',
recoveryPrivilegesSuccessful: 'Successful recovery authority',
recoveryPrivilegesFailed: 'Recovery authority failed',
unpackingSuccessful: 'Unpack the success',
unpackingFailed: 'Unpack the failure',
pleaseEnterNameQuery: 'Please enter name query',
routeSameID: 'Data with the same ID already exists',
dataValidationFailed: '数据校验不通过',
dataValidationSuccess: '数据校验通过!',
skinDeleteSuccessfully: 'Skin removed successfully',
skinDeleteFailed: 'Failed to remove skin',
publishedOperationalGraphSuccessfully: 'Published operational diagram successfully',
publishedOperationalGraphFailed: 'Failed to publish operation diagram',
deleteOperationGraphFailed: 'Failed to delete operation diagram',
importOperationGraphSuccessfully: 'The operation diagram was successfully imported!',
importOperationGraphFailed: 'Failed to import operation diagram!',
parsingOperationGraphFailed: 'Failed to parse the operational diagram!',
productCreationSuccessfully: 'Product creation success',
productCreationFailed: 'Failed to create product',
updateProductSuccessfully: 'Product update is successful.',
updateProductFailed: 'Product update failed',
deleteProductSuccessfully: 'Product deleted successfully',
deleteProductFailed: 'Product deletion failed',
cannotDeleteProduct: 'The product has been used and cannot be deleted',
productCodeExists: 'The product Code already exists',
narrowScope: 'You cannot narrow down the training list you created last time',
requestFailed: '请求失败',
pathCreationSuccessful: 'Create road successfully!',
createRoutingFailed: 'Failed to create junction',
pathUpdataSuccessful: 'Road update successful!',
pathUpdataFailed: 'Update traffic failed',
failedLoadMap: 'Failed to load map data',
sectionPointsDeficiency: 'Segment coordinates missing',
dataValidationFailed: 'Data validation failed',
dataValidationSuccess: 'Data verified!',
requestFailed: 'The request failed',
dataQuestion: 'Data in question',
dataList: 'Data list',
updateProductTip: 'Will this operation modify the commodity status?',
deleteProductTip: 'This operation will delete the item. Do you want to continue?',
getQRCodeFailure: 'Failed to obtain the package authority qr code',
recoveryPrivilegeTip: 'This action will reclaim permissions. Do you want to continue?',
unpackingTip: 'This operation will be unpacked. Do you want to continue?',
updatePrivilegeTip: 'This action will modify the permission status. Do you want to continue?',
addOrganizationPrefix: 'Whether to add "',
addOrganizationSuffix: '" Organization/enterprise entry information?',
packagingFailed: 'Authority distribution packaging failed',
selectPackagingRecord: 'Please select the packaging record',
skinDeleteConfirmation: 'This will permanently remove the skin. Do you want to continue?',
skinCodingExist: 'Map skin codes already exist',
underImport: 'UnderImport...',
deleteTypeHint: 'This action deletes the type. Do you want to continue?',
selectValidInterval: 'Please select a valid interval',
failedCourse: 'Failed to obtain course information',
createSimulationFaild: 'Failed to create simulation',
accessCourseNo: 'No access to this course, please go and buy it!',
failedSubmitOrder: 'Failed to submit order',
permissionsNumber: 'Please enter the number of valid permissions',
purchaseMonth: 'Please enter a valid purchase month',
createRoomFailedHint: 'Each user can only create one comprehensive drill room. Do you want to enter the room?',
noPermissionHint: 'You do not have permission, please go to purchase products',
trainModelNameRepeat: 'Train model data duplication',
coursePublishSuccessful: 'Successful course release',
coursePublishFailed: 'Course launch failed',
startOperationHint: 'This operation will start the task. Do you want to continue?',
cancelsTaskHint: 'This action cancels the task. Do you want to continue?',
automaticGenerationTrainingSuccess: 'Automatic generation of training success',
automaticGenerationTrainingFailure: 'Automatic generation of training failure',
updateAutomaticGenerationTrainingSuccess: 'Update automatically generated training successfully',
updateAutomaticGenerationTrainingFailure: 'Update automatically generated training failure',
deleteAutomaticGenerationTrainingSuccess: 'Delete automatic generation training successfully',
deleteAutomaticGenerationTrainingFailure: 'Delete automatic generation training failure',
addTrainingSuccessfully: 'Add training successfully!',
addTrainingFailed: 'Failed to add training',
updateTrainingSuccessfully: 'Update training successfully!',
updateTrainingFailed: 'Failed to update training',
savedStepDataSuccessfully: 'Saved step data successfully',
savedStepDataFailed: 'Failed to save step data'
dataQuestion: '有问题数据',
dataList: '数据列表'
};

View File

@ -0,0 +1,10 @@
export default {
simulationSystem: '城市轨道交通仿真系统',
simulationSystemDescription: '城市轨道交通仿真系统以各地铁信号系统为基础,针对培训部分进行改造,旨在构建一套用于行车演示的专业仿真模拟系统。该系统具有高灵活性以便于将来的扩展升级,同时,仿真系统具备正常操作及故障操作两种模式,除了正常的功能操作以外还可以进行设备的故障模拟。',
simulationName: '仿真名称:',
noSimulationProducts: '无仿真产品',
productDescription: '产品说明:',
startSimulation: '开始仿真',
createRoom: '创建房间',
enterRoom: '进入房间'
};

View File

@ -2,9 +2,65 @@ export default {
refreshFailed: '刷新失败',
createSimulationFailed: '创建仿真失败',
loadMapDataFailed: '加载地图数据失败',
getMapStepsFailed: '获取地图步骤数据',
getMapStepsFailed: '获取地图步骤数据失败',
getMapDetailFailed: '获取地图详细信息失败',
resetFailed: '重置失败',
startTrainingFailed: '开始实训失败',
saveBackgroundFailed: '保存背景失败',
deleteFailed: '删除失败'
deleteFailed: '删除失败',
exportFailed: '导出执行异常',
getListFailed: '获取列表数据失败',
getDistributeQrcodeFailed: '获取权限分发二维码失败',
obtainMaxNumberFailed: '获取用户最大权限个数失败',
getTransferQrcodeFailed: '获取权限转赠二维码失败',
requestFailed: '请求失败',
transferredQRCodeFailed: '获取转赠二维码失败',
loadingDataFailed: '加载数据错误',
addingFailure: '加载失败',
cancelled: '已取消',
getItemListFailed: '获取商品列表失败',
getItemDetailFailed: '获取商品详情失败',
getMapProductListFailed: '获取地图产品列表失败',
getLessonListFailed: '获取产品课程列表失败',
remoteQueryError: '远程查询失败',
obtainOperationGraphFailed: '获取运行图数据失败',
obtainStationListFailed: '获取车站列表失败',
loadingOperationGraphFailed: '加载运行图数据失败',
cannotPublished: '创建中的数据不能发布',
cannotDeleted: '正创建中不能做删除操作',
refreshOperationGraphFailed: '刷新运行图列表失败',
getSpeedLevelFailed: '获取速度等级失败',
speedRatingExists: '速度等级已存在',
createSpeedLevelFailed: '创建速度等级失败',
createOperationGraphFailed: '创建运行图失败',
loadingCityListFailed: '加载城市列表失败',
cannotNarrowDown: '不能缩小上次创建的实训列表的范围',
scanningError: '扫码错误',
serviceException: '服务异常',
codeHasExist: '编码已存在',
formartError: '格式不正确,只能是字符/数字/_',
createDictionaryFailed: '创建字典失败',
updateDictionaryFailed: '更新字典失败',
createDetailFailed: '创建明细失败',
updateDetailFailed: '更新明细失败',
addFailed: '添加失败',
updateFailed: '更新失败',
exportException: '导出异常',
operationFailure: '操作失败',
createCommonRunPlanFailed: '创建通用运行图失败',
templateHasBeUse: '该模板已被加载计划使用,无法删除',
setFailed: '设置失败',
deleteException: '删除异常,请联系管理员',
paperHasUseNotDel: '该试卷已被使用,不能删除',
batchCreateFailed: '批量生成操作定义失败',
createOperateRuleFailed: '创建操作定义失败',
createOperateStepFailed: '创建操作步骤失败',
updateOperateStepFailed: '更新操作步骤失败',
packagePermissionFailed: '打包权限失败',
acquisitionTimeFailed: '获取时间失败',
getProductListFailed: '获取产品列表失败',
obtainChapterDataFailed: '获取章节数据失败',
obtainCourseDetailsFailed: '获取课程详情失败',
obtainCourseInformationFailed: '获取课程信息失败',
obtainStepDataFailed: '获取步骤数据失败'
};

16
src/i18n/langs/zh/exam.js Normal file
View File

@ -0,0 +1,16 @@
export default {
testSystem: '城市轨道交通考试系统',
testSystemDescription: ' 该系统具有自定义考试规则、自动生成考卷、学员成绩统计、数据曲线分析及题库管理等功能,从实战操作、业务流程、故障模拟及考试规则等多角度出发,力求打造最符合用户需求的城市轨道交通在线交互实操类考试系统',
examResultsDetails: '考试结果详情',
testQuestionsName: '试题名称',
testScores: '考试得分',
points: '分',
whetherThrough: '是否通过',
didNotCalculate: '未计算',
pass: '通过',
notPass: '未通过',
examTime: '考试用时',
trainingName: '实训名称',
trainingScore: '实训得分',
returnToExamList: '返回考试列表'
};

View File

@ -10,5 +10,140 @@ export default {
operate: '操 作',
edit: '编 辑',
delete: '删 除',
add: '新 增'
add: '新 增',
query: '查 询',
detail: '明 细',
quickEntry: '快速入口',
scan: '扫码',
chooseDate: '请选择日期',
chooseTime: '请选择时间',
chooseDateTime: '请选择日期时间',
choosh: '请选择',
select: '选 择',
selectAdd: '选中添加',
export: '导 出',
to: '至',
close: '关 闭',
back: '返 回',
chooseCityAndRoute: '请选择城市和线路',
font: '字 体',
size: '大 小',
distributeQrcode: '权限分发二维码',
remainPermissionNumber: '剩余最大权限个数',
distributeLessonPermission: '上课权限分发',
distributeExamPermission: '考试权限分发',
distributeSimulationPermission: '仿真权限分发',
distributeScreenPermission: '大屏权限分发',
email: '邮箱',
nickName: '昵称',
mobile: '手机号',
name: '名称',
code: '编码',
status: '状态',
remarks: '说明',
selectionTime: '选择时间',
permissionNumber: '权限个数',
pleaseInputPermissionNumber: '请输入权限个数',
permissionGreaterThen0: '权限个数必须大于0',
enterStartTime: '请输入开始时间',
enterEndTime: '请输入结束时间',
enterDate: '请输入日期',
transferQrcode: '权限转赠二维码',
transferLessonPermission: '上课权限转赠',
transferExamPermission: '考试权限转赠',
transferSimulationPermission: '仿真权限转赠',
transferScreenPermission: '大屏权限转赠',
today: '今天',
total: '合计',
index: '索引',
startTime: '开始时间',
endTime: '结束时间',
isForever: '是否永久',
remains: '剩余数量',
hasPermissionTip: '公用权限{0}个, 专用权限{1}个',
create: '创 建',
update: '更 新',
return: '返 回',
toBeDeveloped: '功能待开发',
choose: '选 择',
yuan: '元',
filteringKeywords: '输入关键字进行过滤',
lastStep: '上一步',
nextStep: '下一步',
skip: '跳过',
modify: '修改',
language: '语言',
exit: '退出',
chooseLanguage: '请选择语言',
switchLanguage: '切换语言',
joinRoom: '加入房间',
synthesisTrainingTitle: '综合演练快速入口',
pleaseChooseRoom: '您没有选择房间',
inviteJoinRoom: '邀请你加入综合演练!',
trainingHasStart: '{name}的房间已开始',
trainingNotStart: '{name}的房间未开始',
inputRoomNumber: '请输入房间号',
chooseRoom: '选择房间',
month: '月',
permissions: '权限',
yuanMonth: '元/月',
permissionType: '权限类型:',
purchaseDuration: '购买时长:',
custom: '自定义',
permissionNum: '权限数量:',
orderCode: '订单编码:',
creationTime: '创建时间:',
amountPayable: '应付金额:',
indexA: '个',
purchasePrice: '购买总价:',
submitOrders: '提交订单',
completePayment: '完成支付',
weChatPay: '微信支付',
alipayPayment: '支付宝支付',
clickRefresh: '请点击刷新',
buyProject: '你将购买的商品为虚拟内容服务,购买后不支持退货、转让、退换,请斟酌确认。',
relatedServices: '购买后可在“权限详情”区查看和使用相关服务。',
paymentSuccessful: '支付成功,点击返回',
cancelSuccessfully: '取消成功,点击返回',
paymentFailed: '支付失败,点击返回',
checkstand: '收银台',
january: '一月',
march: '三月',
year: '一年',
twoYears: '两年',
fiveYears: '五年',
tenYears: '十年',
courseName: '课程名称',
screenName: '大屏名称',
productName: '产品名称',
coursePrice: '课程单价',
testPrice: '考试单价',
simulationPrice: '仿真单价',
timeUnitPrice: '大屏单价',
putaway: '上 架',
soldOut: '下 架',
exportMap: '导出地图',
preview: '预览',
notBeUse: '该功能暂时未开启',
fastCreate: '快速创建',
duration: '时长',
isTry: '是否试用',
buy: '购 买',
distributePermission: '权限分发',
transferQRCode: '权限转赠',
minutes: '分钟',
minute: '分钟',
totoal: '总数',
publishPermission: '公用权限',
specialPermission: '专用权限',
mapList: '地图列表',
updateTime: '更新时间:',
line: '线路:',
permissionList: '权限列表:',
remove: '移除',
append: '添加',
release: '发布'
};

View File

@ -8,6 +8,15 @@ import rules from './rules';
import scriptRecord from './scriptRecord';
import tip from './tip';
import system from './system';
import orderAuthor from './orderAuthor';
import teach from './teach';
import publish from './publish';
import permission from './permission';
import replay from './replay';
import planMonitor from './planMonitor';
import screenMonitor from './screenMonitor';
import demonstration from './demonstration';
import exam from './exam';
export default {
...cnLocale,
@ -16,8 +25,17 @@ export default {
router,
lesson,
error,
teach,
rules,
scriptRecord,
tip,
system
system,
orderAuthor,
publish,
permission,
replay,
planMonitor,
screenMonitor,
demonstration,
exam
};

View File

@ -7,6 +7,7 @@ export default {
hasCalcelDelete: '已取消删除',
isConfirmDelete: '是否确认删除?',
trainingName: '实训名称',
trainingType: '实训类型',
stationList: '车站列表',
stepInfo: '步骤信息',
selectMap: '请选择地图',
@ -21,5 +22,71 @@ export default {
startRecording: '开始录制',
endRecording: '结束录制',
nextStep: '下一步',
selectMode: '模式选择'
selectMode: '模式选择',
deleteSuccess: '删除成功',
wellDelTrainingRule: '此操作将删除此实训规则, 是否继续?',
stepDetail: '步骤明细',
generation: '自动生成',
skinType: '皮肤类型',
minDuration: '最佳用时',
maxDuration: '最大用时',
trainingRemark: '实训说明',
createOperateRule: '创建操作规则',
editOperateRule: '编辑操作规则',
tipNamePlaceholderInfo: '选择占位符 {} 不可删除,否则名称显示会有问题!',
tipExplainPlaceholderInfo: '选择占位符 {} 不可删除,否则说明显示会有问题!',
generationOperation: '自动生成操作',
wellClearOperate: '此操作将清空改皮肤下所有操作定义, 是否继续?',
batchCreateSuccess: '批量生成操作定义成功',
createOperateSuccess: '创建操作定义成功',
updateOperateSuccess: '更新操作步骤成功',
wellDelOperate: '此操作将删除此实训步骤, 是否继续?',
operateCode: '操作码',
stepReturn: '步骤返回值',
stepTips: '步骤提示信息',
createStepInfo: '创建步骤信息',
editStepInfo: '编辑步骤信息',
product: '产品',
remarks: '描述',
operateSuccess: '操作成功',
createChapter: '创建章节',
contentSorting: '内容排序',
courseList: '课程列表',
createNewCoursesFromRelease: '从发布课程新建',
courseName: '课程名称:',
parentChapter: '父级章节:',
chapterName: '章节名称:',
chapterInstructions: '章节说明:',
associatedTraining: '关联实训:',
updateChapter: '更新章节',
automaticOrManual: '自动/人工',
automatic: '自动',
manual: '人工',
publishCourseName: '发布课程名称:',
draftCourseName: '草稿课程名称:',
associatedSkin: '关联皮肤:',
associatedProducts: '关联产品:',
courseDescription: '课程说明:',
editCourse: '编辑课程',
createCourse: '创建课程',
courseRelease: '课程发布',
releaseAssociatedCity: '发布关联城市:',
releaseAssociatedMap: '发布关联地图:',
trainingSequence: '实训排序',
creationTime: '创建时间',
finishTime: '完成时间',
createResults: '创建结果',
start: '开始',
toPerform: '重新执行',
productType: '产品类型:',
minTime: '最小用时:',
maxTime: '最大用时:',
trainingDescription: '实训描述:',
generateTraining: '生成实训',
updateTraining: '修改实训',
deleteTraining: '删除实训',
automaticGenerationOfTraining: '自动生成实训',
modifyTrainingByCategory: '按类别修改实训',
deleteAutoGeneratedTraining: '删除自动生成实训'
};

View File

@ -1,8 +1,12 @@
export default {
drawData: '绘图数据',
mapData: '地图数据',
pleaseSelect: '请选择',
pleaseEnter: '请输入',
sketchMap: '草稿地图列表',
newConstruction: '新建',
importMap: '导入地图',
bothCreate: '批量生成',
importMap: '导入',
createNewMap: '新建地图',
normalCreate: '正常创建',
saveMapAs: '地图另存为',
@ -15,6 +19,14 @@ export default {
add: '添加',
are: '是',
deny: '否',
drawMap: '绘图',
advanced: '高级',
viewLayer: '显示',
layerDisplay: '显示',
viewShows: '视图显示',
contentShows: '设备显示',
createBatch: '批量创建',
deleteBoth: '批量删除',
save: '保存',
updata: '更新',
@ -22,14 +34,12 @@ export default {
updateObjAxis: '更新坐标',
saveAs: '另存为',
publish: '发布',
publishMap: '发布地图',
deleteObj: '删除',
remove: '移除',
lastStep: '上一步',
confirm: '确 定',
cancel: '取 消',
cancelledDelete: '已取消删除',
confirmDeletion: '是否确认删除?',
hint: '提示',
link: 'link',
section: '区段',
@ -50,12 +60,12 @@ export default {
text: '文字',
mapName: '地图名称:',
skinName: '皮肤风格:',
skinName: '皮肤:',
selectCity: '所属城市:',
offsetXColon: 'X偏移:',
offsetYColon: 'Y偏移:',
scalingColon: '缩放比例:',
operationUnusual: '操作异常',
operationUnusual: '操作异常:',
offsetX: 'X偏移',
offsetY: 'Y偏移',
scaling: '缩放比例',
@ -70,14 +80,6 @@ export default {
publishMapCreation: '从发布地图创建',
pleaseEnterMapName: '请输入地图名称',
pleaseChooseSkinStyle: '请选择皮肤风格',
pleaseSelectMapSource: '请选择地图来源',
pleaseSelectAssociatedCity: '请选择关联城市',
pleaseSelectAssociatedSkin: '请选择关联皮肤',
pleaseEnteMapLinkWidth: '请输入地图Link宽度',
pleaseEnterMapSectionWidth: '请输入地图区段宽度',
failedLoadListPublishedMaps: '加载已发布地图列表失败',
creatingSuccessful: '创建成功!',
mapUpdateSuccessful: '更新地图成功!',
@ -112,23 +114,21 @@ export default {
automaticSignalCode: '自动信号编码',
signalCodeName: '信号机名称',
signalCode: '信号机code',
sectionData: '区段数据',
sectionData: '区段列表',
preview: '预览',
operation: '操作',
compile: '编辑',
delete: '删除',
empty: '清空',
reset: '重置',
sectionName: '区段名称',
sectionList: '区段列表',
automaticSignal: '自动信号',
signalID: '信号机ID:',
signalID: '信号机:',
activate: '激活',
segmentData: '进路自动触发区段数据:',
pleaseSelectSignal: '请选择信号机',
triggerSegmentData: '请选择进路自动触发区段数据',
triggerSegmentData: '请选择进路自动触发区段',
automaticSignalSuccessful: '创建自动信号成功!',
failedCreateSignal: '创建自动信号失败',
automaticSignalUpdateSucceeded: '更新自动信号成功!',
@ -147,6 +147,7 @@ export default {
meter: '米',
code: '编码:',
codeC: '编码',
imageName: '图片名称:',
imageWidth: '图片宽度:',
imageHeight: '图片高度:',
@ -194,7 +195,6 @@ export default {
linkRp: 'Link 终点坐标:',
rulesChange: '规则修改',
sectionNameC: '区段名称:',
splitMerge: '拆分/合并',
linkSet: 'Link集合',
selectLink: '选择Link',
@ -212,7 +212,7 @@ export default {
sectionLogicalNumber: '逻辑区段数量',
sectionLsectioncode: '左侧区段名称:',
sectionRsectioncode: '右侧区段名称:',
associatedSection: '关联物理区段:',
associatedSection: '所属物理/道岔区段:',
blockCoding: '区段编码:',
sectionType: '区段类型:',
sectionNameColon: '区段名称:',
@ -239,21 +239,19 @@ export default {
destinationCodeShow: '是否显示目的地码:',
leftStopPointOffset: '左向停车点偏移量:',
rightStopPointOffset: '右向停车点偏移量:',
isSwitchSection: '是否道岔区段:',
relSwitchCode: '关联道岔Code:',
isSwitchSection: '是否关联道岔:',
relSwitchCode: '关联道岔:',
logicSectionNameSort: '逻辑区段排序:',
fromSmallToLarge: '从小到大',
fromLargeToSmall: '从大到小',
relevanceLinkCode: '关联的Link:',
relevanceLinkCode: '所在Link:',
sepTypeLeft: '左侧分隔符类型:',
sectionOffsetLeft: '左侧Link偏移量:',
sepTypeRight: '右侧分隔符类型:',
sectionOffsetRight: '右侧Link偏移量:',
isSegmentation: '是否分割:',
segmentationPosition: '默认背景:',
segmentationPosition: '分割坐标:',
isCurve: '是否曲线:',
sectionPoints: '区段显示坐标:',
trainPosType: '列车所在方向:',
physicalSegmentName: '物理区段名称:',
directionType: '形式方向:',
@ -271,24 +269,27 @@ export default {
potLampType: '点灯类型:',
signalDirectionType: '方向类型:',
signalPositionType: '信号机位置类型:',
signalOffset: '偏移量:',
signalOffset: '所属link偏移量:',
signalLinkCode: '所属link',
signalPositionX: '信号机x:',
signalPositionY: '信号机y:',
signalRotate: '旋转角度:',
signalPosition: '信号机坐标:',
signalNamePositionX: '信号机名字偏移量 x:',
signalNamePositionY: '信号机名字偏移量 y:',
signalNamePosition: '信号机名字偏移量:',
signalButtonShow: '是否显示按钮:',
signalButtonPositionX: '按钮x:',
signalButtonPositionY: '按钮y:',
signalButtonPosition: '按钮:',
signalGuideShow: '是否显示引导信号灯:',
signalGuidePositionX: '引导信号x:',
signalGuidePositionY: '引导信号y:',
signalGuidePosition: '引导信号:',
concentrateStationCode: '所属联锁站编码:',
concentrateStationCode: '所属联锁站:',
stationCode: '车站编码:',
zcCode: '所属zc区域编码:',
zcCode: '所属zc区域:',
centralized: '是否集中站:',
stationNameColon: '车站名称:',
stationRunPlanName: '真实名称:',
stationVisible: '是否显示:',
stationNameFont: '车站字体:',
@ -300,15 +301,15 @@ export default {
stationKmPostFontColor: '公里标字体颜色:',
stationPositionX: 'x坐标:',
stationPositionY: 'y坐标:',
stationPosition: '车站坐标:',
stationControlPosition: '控制模式坐标:',
stationControlCode: '控制模式编码:',
stationControlName: '控制模式名称:',
zokContent: '中控内容:',
zakContent: '站控内容:',
jjzkContent: '紧急站控/总报警内容:',
zzkContent: '站中控内容:',
stationControlPositionX: '坐标 x:',
stationControlPositionY: '坐标 y:',
stationControlZok: '中控',
stationstandName: '选择车站名称:',
@ -319,8 +320,7 @@ export default {
stationstandShowName: '是否显示名称:',
stationstandWidth: '宽度 w:',
stationstandHeight: '高度 h:',
stationstandPositionX: '坐标 x:',
stationstandPositionY: '坐标 y:',
stationstandPosition: '车站坐标:',
switchCode: '道岔编码:',
switchName: '道岔名称:',
@ -328,13 +328,19 @@ export default {
switchShowName: '是否显示道岔名称:',
switchPositionX: '道岔名称x偏移量:',
switchPositionY: '道岔名称y偏移量:',
turnTime: '道岔时间:',
timeoutShow: '是否显示道岔时间:',
switchPosition: '道岔名称偏移量:',
turnTime: '道岔转换时间:',
timeoutShow: '是否显示道岔倒计时时间:',
sectionACode: '关联的A Section Code:',
sectionBCode: '关联的B Section Code:',
sectionCCode: '关联的C Section Code:',
switchTpX: '时间x坐标偏移量:',
switchTpY: '时间y坐标偏移量:',
switchTp: '时间坐标偏移量:',
counterPosition: '计数器坐标:',
delayUnlockPosition: '延迟解锁坐标:',
trainWindowPoints: '车次窗坐标:',
textPoints: '坐标:',
textCode: '文字编码:',
textContent: '文本内容:',
@ -343,6 +349,8 @@ export default {
trainCode: '列车编号:',
groupNumber: '车组号:',
groupNumberInterval: '车组号区间:',
trainNumber: '车组号',
modelCode: '车类型:',
trainmodelCreate: '新建车类型',
@ -364,7 +372,6 @@ export default {
deleteTrainWindow: '一键删除车次窗',
createTrainWindow: '一键创建车次窗',
zcCodeColon: '编码:',
showZc: '是否可见:',
pathUnitList: '路径单元列表',
@ -374,34 +381,30 @@ export default {
pathUnitMapName: '所属地图名称',
orderNum: '优先级',
pathName: '进路名称',
affiliationStationCode: '所属车站名称',
startingSignalName: '始端信号机名称',
endingSignalName: '终端信号机名称',
routeID: '进路ID',
routeID: '进路',
routeName: '进路名称:',
routeMapId: '所属地图名称',
routeStationName: '所属车站名称',
routeStartSignalCode: '始端信号机名称',
routeEndSignalCode: '终端信号机名称',
startSectionCodeColon: '始端停车点:',
endSectionCodeColon: '终端停车点:',
routePreview: '进路预览',
accessType: '进路性质类型',
automaticAccessType: '自动进路类型',
automaticRouteType: '自动进路类型',
nearSectionCode: '接近区段名称',
continueProtectSwitchData: '延续保护道岔数据',
accessSideTurnoutData: '进路侧防道岔数据',
continueProtectSwitchData: '延续保护道岔',
accessSideTurnoutData: '进路侧防道岔',
turnBackRailName: '折返轨名称',
routeSegmentData: '进路自动触发区段数据',
routeProtectsData: '进路延续保护区段数据',
accessPhysical: '进路物理区段数据',
routeAccessScreenData: '进路屏蔽门数据',
routeAccessTurnoutData: '进路道岔数据',
hostileApproachData: '敌对进路数据',
routeSegmentData: '进路自动触发区段',
routeProtectsData: '进路延续保护区段',
accessPhysical: '进路物理区段',
routeRouteScreenData: '进路屏蔽门',
routeRouteTurnoutData: '进路道岔',
hostileApproachData: '敌对进路',
relation: '关系',
associatedRoute: '关联进路:',
@ -411,35 +414,92 @@ export default {
delayUnlockingTime: '延时解锁时间:',
accessTypeColon: '进路性质类型:',
automaticAccessTypeColon: '自动进路类型:',
startSignalId: '始端信号机ID:',
endSignalId: '终端信号机ID:',
automaticRouteTypeColon: '自动进路类型:',
startSignalId: '始端信号机:',
endSignalId: '终端信号机:',
switchType: '道岔类型',
switchId: '道岔ID',
accessSwitchList: '进路道岔数据:',
accessStandList: '进路屏蔽门数据:',
accessSectionList: '进路物理区段数据:',
turnBackSectionCode: '折返轨ID:',
routeFlankProtectionList: '侧防道岔数据:',
routeOverlapSwitchList: '延续保护道岔数据:',
routeOverlapSectionList: '进路延续保护区段数据:',
routeTriggerSectionList: '进路自动触发区段数据:',
nearSectionCodeColon: '接近区段ID:',
switchId: '道岔',
accessSwitchList: '进路道岔:',
accessStandList: '进路屏蔽门:',
accessSectionList: '进路物理区段:',
turnBackSectionCode: '折返轨:',
routeFlankProtectionList: '侧防道岔:',
routeOverlapSwitchList: '延续保护道岔:',
routeOverlapSectionList: '进路延续保护区段:',
routeTriggerSectionList: '进路自动触发区段:',
nearSectionCodeColon: '接近区段:',
thenList: '交路列表',
startStation: '起始站',
endStation: '终到站',
skinStyleColon: '皮肤类型:',
skinDesignation: '皮肤名称',
skinCoding: '皮肤编码',
coordinatesOrigin: '坐标原点',
addMapSkin: '添加地图皮肤',
updateMapSkin: '更新地图皮肤',
stationKilometerMark: '车站公里标',
arrivalTime: '到站时间',
operationGraphPublished: '运行图发布为',
operationGraphName: '运行图名称:',
createOperationGraph: '创建运行图',
importOperationGraph: '导入运行图',
publishOperationGraph: '发布运行图',
deleteOperationGraph: '删除运行图',
mapList: '地图列表',
import: '导入',
createNewOperationGraph: '新建运行图',
setOperatingSpeed: '设置运行速度',
speedClass1: '速度等级1',
speedClass2: '速度等级2',
speedClass3: '速度等级3',
speedClass4: '速度等级4',
name: '名称',
startingRunningDirection: '始发运行方向',
timeBetweenDepartures: '发车间隔时间',
stopTime: '停靠时间',
entranceStation: '入口车站',
exportStation: '出口车站',
validityCheck: '有效性检查',
setupOperationGraph: '设置运行图',
selectOperationGraphDataRange: '选取运行图数据范围',
to: '至',
selectionTimeRange: '选择时间范围',
pointSystem1: '1分制',
pointSystem2: '2分制',
pointSystem5: '5分制',
skinType: '皮肤风格',
turnoverTime: '更新时间',
productList: '产品列表',
belongsToMapName: '所属地图名称',
productType: '产品类型',
productCode: '产品编码',
productName: '产品名称',
createProductCategories: '创建产品类目',
productDescription: '产品说明',
associateTrainingTypes: '关联实训类型',
createTrainingCategories: '创建实训类目',
editTraining: '编辑产品类目',
productCategories: '产品类目',
selectOperation: '请选择操作',
editTrainingCategories: '编辑实训类目',
linkWidth: 'link宽度',
maxLinkWidth: '(Link宽度最大为20)',
sectionWidth: '区段宽度',
maxSectionWidth: '(区段宽度最大为30)',
showWatermarkOrNot: '是否显示水印',
routingCode: '交路code',
routingName: '交路名称',
startStationCodeColon: '起始站:',
startStationCode: '起始站台',
endStationCode: '终到站台',
destination: '目的地码',
routingDirection: '方向',
remarks: '描述',
remarksColon: '描述:',
trafficSegmentData: '交路区段数据:',
trafficSegmentData: '交路区段:',
startSectionColon: '起始区段:',
endStationColon: '终到站:',
endSectionColon: '终到区段:',
@ -455,6 +515,9 @@ export default {
switchBCode: '道岔2编号',
switchACodeNum: '道岔ID 1:',
switchBCodeNum: '道岔ID 2:'
switchBCodeNum: '道岔ID 2:',
wellDelTrianModel: '删除车模型会将关联的类车一起删除,请确认是否继续?',
clear: '清空'
};

View File

@ -0,0 +1,88 @@
export default {
name: '名称',
productType: '产品类型',
map: '地图',
state: '状态',
commodityName: '商品名称',
mapName: '地图名称',
courseName: '课程名称',
price: '价格',
describtion: '描述',
creationTime: '创建时间',
setupFailure: '设置失效',
setupEffective: '设置有效',
organizationOrEnterprise: '组织机构/企业',
userName: '用户名称',
permissionType: '权限类型',
permissionNumber: '权限个数',
permanenceOrNot: '是否永久',
startDate: '开始日期',
purchaseMonths: '购买月数',
totalPrice: '购买总价',
paymentMethod: '支付方式',
creationDate: '创建日期',
orderType: '订单类型',
contractNumber: '合同编号',
businessType: '业务类型',
paymentStatus: '支付状态',
salesman: '销售人员',
obtainQrCode: '获取二维码',
userMobile: '用户手机号',
mapProductName: '地图产品名称',
publicOrPrivate: '公用/专用',
totalPermissions: '权限总数',
residualPermissionNumber: '剩余权限数量',
authorityStatus: '权限状态',
startTime: '开始时间',
endTime: '结束时间',
courseAuthorityStatus: '课程权限状态',
source: '来源',
founderPhone: '创建人手机号',
founder: '创建人员',
privilegePackaging: '权限打包',
packaging: '打包',
unpacking: '解包',
authorityDetails: '权限详情',
renew: '续费',
productName: '产品名称',
recovery: '回收',
permissionPack: '权限包',
privilegeTransferQRCode: '权限转赠二维码',
generatingQRCode: '生成二维码',
transferQRCode: '转赠二维码',
today: '今天',
yesterday: '昨天',
aWeekAgo: '一周前',
addOrder: '添加订单',
updateOrder: '修改订单',
renewOrder: '订单续费',
unknownRouter: '未知路由',
increasePurchaseTime: '增加购买时长',
choosePurchaseTime: '选择购买时长',
increasePermissionNumber: '增加权限数量',
choosePermissionNumber: '选择权限数量',
itemPricing: '商品单价',
addUserPermissions: '添加用户权限',
publicAuthority: '公用权限',
privateAuthority: '专用权限',
optionPrivilegeTransfer: '选择权限转赠',
trainingList: '实训列表',
selectPermissionsPackage: '选择打包权限',
addRecords: '添加记录',
totalNumber: '总数',
permissionToDistributeQRCode: '权限分发二维码',
editPermissionRules: '编辑权限规则',
addGoods: '添加商品',
updateGoods: '修改商品',
lesson: '课程',
whetherTrial: '是否试用',
unitOfTime: '时间单位',
trialTime: '试用时长',
distributionUser: '分发用户',
orderNumber: '订单号',
sourcesOfInformation: '信息来源',
distributePermission: '权限分发',
orderCreation: '订单创建',
select: '选择',
chooseGoods: '选择商品'
};

View File

@ -0,0 +1,31 @@
export default {
permissionPack: '权限打包',
setSuccess: '设置成功',
isSureSetBelonger: '是否确定设置{name}为权限所属人?',
setBelonger: '设置归属人',
lessonName: '课程名称',
mapName: '地图名称',
mapProductName: '产品名称',
permissionType: '权限类型',
permissionStatus: '权限状态',
permissionUseType: '公用/专用',
permissionTotal: '权限总数',
permissionRemains: '生于权限',
isForever: '是否永久',
startTime: '开始时间',
endTime: '结束时间',
belonger: '归属人',
userList: '用户列表',
customPackageRules: '定制打包规则',
addRules: '添加规则',
package: '打包',
getQrcode: '获取二维码',
hasExitRule: '已存在此类型规则',
pleaseAddRule: '请添加规则',
selectDate: '选择时间',
addPermissionPackageRule: '增加权限打包规则',
editPermissionPackageRule: '编辑权限打包规则',
restPermissionMaxNumber: '(剩余最大权限个数:{0}',
pleaseSelectTransferPermission: '选择转赠权限'
};

View File

@ -0,0 +1,6 @@
export default {
buy: '购买',
offlineMappingSoftware: '离线编图软件',
lianPlanSystem: '城市轨道交通琏计划系统',
lianPlanDescription: '琏计划是一款编图测试系统,能够真实模拟实现对新运行图的仿真运行测试,该系统能够实现编辑运行图、导入运行图并按照运行图标准模拟真实行车环境,解决了无法针对运行图更新进行测试的问题。能够及时找出新图中不合理的地方并且在图上实时作出调整,避免了新运行图在运营过程中发现问题需要调度员人工进行干预的情况,最大程度降低故障对地铁正常运营的影响。'
};

View File

@ -0,0 +1,47 @@
export default {
city: '所属城市',
skinType: '皮肤类型',
mapName: '地图名称',
lessonName: '课程名称',
updateMapName: '更新地图名称',
updateTime: '更新时间',
operationSuccess: '操作成功',
deleteSuccess: '删除成功',
wellDelType: '此操作将删除该类型, 是否继续?',
wellPutawayMap: '此操作将上架此地图, 是否继续?',
wellSoldOutMap: '此操作将下架此地图, 是否继续?',
productName: '产品名称',
productType: '产品类型',
productCode: '产品编码',
lessonIntroduction: '课程简介',
updateSuccess: '更新成功',
wellPutawayTraining: '此操作将上架此实训, 是否继续?',
wellSoldOutTraining: '此操作将下架此实训, 是否继续?',
wellPutawayProduct: '此操作将上架此产品, 是否继续?',
wellSoldOutProduct: '此操作将下架此产品, 是否继续?',
runPlanName: '运行图名称',
runEveryDayTime: '每日运行时间',
userId: '用户Id',
wellDelRunPlanEveryDay: '此操作将删除每日运行图, 是否继续?',
taskName: '任务名称',
createTime: '创建时间',
detail: '详情',
generateRunPlan: '生成每日运行图',
selectTemplateRunPlan: '选择模板运行图',
pleaseSelectTemplate: '请选择模板运行图',
selectMap: '选择地图',
createCommonRunPlan: '创建通用运行图',
createCommonSuccess: '创建通用运行图成功',
wellGenerateEveryRunPlan: '此操作将生成每日运行图, 是否继续?',
wellDelTemplate: '此操作将删除此运行图模板, 是否继续?',
fullMark: '满分',
passScore: '及格分',
examTime: '考试时间',
creator: '创建人',
paperName: '试卷名称',
setSuccess: '设置成功',
wellPutawayPaper: '此操作将此试卷上架, 是否继续?',
wellSoldOutPaper: '此操作将此试卷下架, 是否继续?',
wellDelPaper: '此操作将删除该试卷, 是否继续?'
};

View File

@ -0,0 +1,8 @@
export default {
replay: '回放',
mapName: '地图名称',
creatorId: '创建人ID',
createTime: '创建时间',
deleteSuccess: '删除成功',
wellDelReplay: '此操作将删除该回放, 是否继续?'
};

View File

@ -70,8 +70,6 @@ export default {
stationName: '请输入车站名称',
stationKmRange: '请输入公里标距离',
stationKmPost: '请输入公里标名称',
stationPositionX: '请输入x坐标',
stationPositionY: '请输入y坐标',
stationControlStationName: '请选择车站名称',
stationControlStationCode: '请选择所属车站',
@ -90,14 +88,12 @@ export default {
stationstandDirection: '请选择上下行方向',
stationstandWidth: '请输入车站宽度',
stationstandHeight: '请输入车站高度',
stationstandPositionX: '请输入x坐标',
stationstandPositionY: '请输入y坐标',
switchName: '请输入道岔名称',
switchNamePointX: '请输入道岔名称坐标x',
switchNamePointY: '请输入道岔名称坐标y',
switchStationCode: '请输入设备集中站',
switchTurnTime: '请输入道岔时间',
switchTurnTime: '请输入道岔转换时间',
switchTpX: '请输入时间坐标x',
switchTpY: '请输入时间坐标y',
@ -142,6 +138,120 @@ export default {
endSectionCode: '请选择终到区段',
selectTurnoutID: '请选择道岔ID',
switchesCannot: '道岔不能为同一个'
switchesCannot: '道岔不能为同一个',
pleaseInputName: '请输入名称',
pleaseSelectStatus: '请选择状态',
pleaseInputCode: '请输入编码',
strLength1To25: '长度在 1 到 25 个字符',
strLengthNotExceed50: '不能超过 50 个字符',
pleaseEnterMapName: '请输入地图名称',
pleaseChooseSkinCode: '请选择皮肤风格',
pleaseSelectMapSource: '请选择地图来源',
pleaseSelectAssociatedCity: '请选择关联城市',
pleaseSelectAssociatedSkin: '请选择关联皮肤',
pleaseEnteMapLinkWidth: '请输入地图Link宽度',
pleaseEnterMapSectionWidth: '请输入地图区段宽度',
organizationInput: '请输入组织或者企业名称',
productSelect: '请选择商品',
itemPricingInput: '请输入商品单价',
orderTypeSelect: '请选择订单类型',
contractNumberInput: '请输入合同编号',
salesmanInput: '请选择销售人员',
authorAmountInput: '请输入购买的权限个数',
authorAmountInputError: '请输入有效权限个数',
totalPriceInput: '请输入总价格',
totalPriceInputError1: '请输入的价格在两位小数',
totalPriceInputError2: '请输入有效总价格',
monthAmountInput: '请输入购买月数',
monthAmountInputError: '请输入有效购买月数',
startTimePick: '请选择开始日期',
bizTypeSelect: '请选择业务类型',
payWaysSelect: '请选择支付方式',
payStatusSelect: '请选择支付状态',
goodsNameInput: '请输入商品名称',
productTypeInput: '请选择产品类型',
mapInput: '请选择地图',
productInput: '请选择产品',
lessonInput: '请选择课程',
trialTimeInput: '请输入试用时长',
unitOfTimeRadio: '请选择时间单位',
goodsDescribtionInput: '请输入商品描述',
userNameInput: '请输入用户名称',
permissionTypeInput: '请选择权限类型',
timeInput: '请输入时长',
chooseUser: '请选择用户',
pleaseInputLessonName: '请输入课程名称',
pleaseSelectTraining: '请选择实训',
sectionRelSwitchCode: '请选择关联道岔',
maxScaling: '(缩放比例最大为8级)',
skinCodingInput: '请输入皮肤编码',
skinDesignationInput: '请输入皮肤名称',
coordinatesOriginInput: '请输入原点坐标',
scalingInput: '请输入缩放比例',
scalingInputPrompt: '请输入有效的缩放比例',
selectImportFiles: '请选择需要导入的文件',
speedLevelEnter1: '请输入速度等级1',
speedLevelEnter2: '请输入速度等级2',
speedLevelEnter3: '请输入速度等级3',
speedLevelEnter4: '请输入速度等级4',
drivingDirectionSelect: '请选择行驶方向',
timeBetweenDeparturesEnter: '请输入发车间隔时间',
stopTimeEnter: '请输入停靠时间',
entranceStationSelect: '请选择入站口',
exportStationSelect: '请选择出站口',
selectDataRange: '请选择数据范围区间',
productCodeEnter: '请输入产品编码',
productNameEnter: '请输入产品名称',
productDescriptionEnter: '请输入产品说明',
trainingTypeSelect: '请选择关联实训类型',
linkWidthInput: '请输入Link宽度',
linkWidthInputPrompt: '请输入有效Link宽度',
sectionWidthInput: '请输入区段宽度',
sectionWidthInputPrompt: '请输入有效区段宽度',
selectShowWatermark: '请选择是否水印',
courseNameEmpty: '课程名称不能为空',
purchaseMonth: '请输入购买月数',
accessNumber: '请输入权限数量',
pleaseInputMapName: '请输入地图新名称',
inputTemplateRunPlan: '请选择模板运行图',
inputSkinType: '请选择皮肤类型',
inputTrainingName: '请输入实训名称',
inputTrainingType: '请输入实训类型',
inputOperationType: '请输入操作类型',
inputMinDuration: '请输入最佳用时',
inputMaxDuration: '请输入最大用时',
inputTrainingRemark: '请输入实训说明',
inputOperateCode: '请输入步骤操作码',
inputStepNo: '请输入步骤序号',
inputStepTips: '请输入步骤提示信息',
selectMapName: '请选择地图名称',
selectMapProductName: '请选择地图产品名称',
inputTime: '请输入时间',
inputPermissionNumber: '请输入权限个数',
permissionNumberGreater0: '权限个数必须大于0',
enterChapterName: '请输入章节名称',
enterChapterInstructions: '请输入章节说明',
selectCourseName: '请选择课程名称',
enterCourseName: '请输入课程名称',
selectAssociatedProduct: '请选择关联产品',
enterCourseDescription: '请输入课程说明',
courseIdIsEmpty: '课程Id为空',
selectCity: '请选择城市',
enterStandardTime: '请输入标准用时',
enterNumericValue: '请输入数字值',
greaterThanMinTime: '必须大于最小时间',
selectTrainingType: '请选择实训类型',
selectOneTrainingType: '只能选择一个实训类型',
enterProductType: '请输入产品类型',
selectAssociatedStation: '请选择关联的车站',
enterScale: '请输入缩放比例',
enterXOffset: '请输入X偏移',
enterYOffset: '请输入Y偏移'
};

View File

@ -0,0 +1,6 @@
export default {
screenSystem: '城市轨道交通大屏系统',
screenSystemDescription: '城市轨道交通大屏系统以各地铁信号系统及真实地铁线路数据为基础,旨在构建一套行车演示的专业模拟系统。 该系统具有高灵活性可自由切换线路数据。',
productTrialDuration: '产品试用时长:',
aTSScreenSimulation: 'ATS行调中心大屏仿真'
};

View File

@ -4,5 +4,48 @@ export default {
status: '状态',
remarks: '备注',
createDirectory: '创建目录',
editDictionary: '编辑目录'
editDictionary: '编辑目录',
deleteSuccess: '删除成功',
createSuccess: '创建成功',
updateSuccess: '更新成功',
destory: '销 毁',
simulationGroup: '仿真Group',
userName: '用户名',
skinCode: '皮肤编号',
prdType: '产品类型',
simulationType: '仿真类型',
simulationGroupId: '仿真成员ID',
productName: '产品名称',
isError: '是否错误',
isSuspend: '是否暂停',
isDrivingAsplanned: '是否按计划行车',
wellDelUserSimulation: '此操作将删除此用户仿真数据, 是否继续?',
createDetail: '创建明细',
editDetail: '编辑明细',
mapName: '地图名称',
trainingName: '实训名称',
trainingUseTime: '实训用时',
minute: '分',
second: '秒',
createSimulationTitle: '创建仿真信息',
addSuccess: '添加成功',
pleaseInputNames: '请输入昵称/名字/手机号',
examUser: '考试用户',
examScore: '考试成绩',
examResult: '考试结果',
examName: '试卷名称',
wellDelExamResult: '此操作将删除此考试结果, 是否继续?',
editExamDetail: '编辑考试详情',
subscribeMap: '订阅地图',
roles: '角色',
nickname: '昵称',
wellDelType: '此操作将删除该类型, 是否继续?',
permission: '权限',
editUserPermission: '编辑用户权限',
lessonName: '课程名称',
selectTraining: '选择实训',
createUserTraining: '创建用户实训',
editTrainingDetail: '编辑实训详情',
trainingTime: '实训时长'
};

View File

@ -0,0 +1,19 @@
export default {
title: '城市轨道交通教学系统',
describe: '该系统具备真实的业务逻辑,以地铁员工和培训点为要素的业务和流程驱动方式进行软件架构,从业务流程、标准作业、培训方式及开放原则等角度出发,力求打造最符合用户需求及快速响应变化的实训教学系统。',
trainingName: '实训名称:',
trainingTime: '完成实训最佳用时:',
trainingMaximum: '完成实训最大用时:',
trainingInstructions: '实训说明:',
startTraining: '开始实训',
courseName: '课程名称',
courseDescription: '课程说明',
courseDetails: '课程详情',
free: '免费',
permissionsDetails: '权限详情',
buy: '购买',
permissionDistribute: '权限分发(上课)',
authorityTransferred: '权限转赠',
courseList: '课程列表'
};

View File

@ -2,11 +2,14 @@ export default {
confirm: '确 定',
cancel: '取 消',
creatingSuccessful: '创建成功!',
creatingFailed: '创建失败',
confirmDeletion: '是否确认删除?',
confirmBatchGeneration: '是否确认批量生成?',
confirmBatchDelete: '是否确认批量删除?',
hint: '提示',
cancelledDelete: '已取消删除',
cancelGeneration: '已取消批量生成',
refreshFailure: '刷新失败',
updateSuccessfully: '更新成功',
saveSuccessfully: '保存成功',
@ -24,6 +27,8 @@ export default {
selectedSectionEmpty: '选择的区段为空',
selectedStationEmpty: '选择的车站为空',
enterKeywordsFiltering: '输入关键字进行过滤',
selectMap: '请先选择地图',
selectTrainType: '请选择查看的列车模型',
@ -32,8 +37,35 @@ export default {
meter: '米',
angle: '度',
operationSuccessfully: '操作成功',
operationFailed: '操作失败',
setupSuccessfully: '设置成功',
setupFailed: '设置失败',
recoveryPrivilegesSuccessful: '回收权限成功',
recoveryPrivilegesFailed: '回收权限失败',
unpackingSuccessful: '解包成功',
unpackingFailed: '解包失败',
pleaseEnterNameQuery: '请输入名称查询',
routeSameID: '相同ID的数据已存在',
skinDeleteSuccessfully: '删除皮肤成功',
skinDeleteFailed: '删除皮肤失败',
publishedOperationalGraphSuccessfully: '发布运行图成功',
publishedOperationalGraphFailed: '发布运行图失败',
deleteOperationGraphFailed: '删除运行图失败',
importOperationGraphSuccessfully: '导入运行图成功!',
importOperationGraphFailed: '导入运行图失败!',
parsingOperationGraphFailed: '解析运行图失败!',
productCreationSuccessfully: '创建产品成功',
productCreationFailed: '创建产品失败',
updateProductSuccessfully: '更新产品成功',
updateProductFailed: '更新产品失败',
deleteProductSuccessfully: '删除产品成功',
deleteProductFailed: '删除产品失败',
cannotDeleteProduct: '产品已被使用无法删除',
productCodeExists: '产品Code已存在',
narrowScope: '不能缩小上次创建的实训列表的范围',
pathCreationSuccessful: '创建交路成功!',
createRoutingFailed: '创建交路失败',
pathUpdataSuccessful: '更新交路成功!',
@ -48,5 +80,54 @@ export default {
requestFailed: '请求失败',
dataQuestion: '有问题数据',
dataList: '数据列表'
dataList: '数据列表',
updateProductTip: '此操作将修改商品状态?',
deleteProductTip: '此操作将删除该商品, 是否继续?',
getQRCodeFailure: '获取打包权限二维码失败',
recoveryPrivilegeTip: '此操作将回收权限, 是否继续?',
unpackingTip: '此操作将解包, 是否继续?',
updatePrivilegeTip: '此操作将修改权限状态,是否继续?',
addOrganizationPrefix: '是否添加 "',
addOrganizationSuffix: '" 组织/企业条目信息?',
packagingFailed: '权限分发打包失败',
selectPackagingRecord: '请选择打包记录',
skinDeleteConfirmation: '此操作将永久删除该皮肤, 是否继续?',
skinCodingExist: '地图皮肤编码已存在',
underImport: '正在导入中...',
deleteTypeHint: '此操作将删除该类型, 是否继续?',
selectValidInterval: '请选择有效的区间',
failedCourse: '获取课程信息失败',
createSimulationFaild: '创建仿真失败',
accessCourseNo: '无此课程权限, 请前往购买!',
failedSubmitOrder: '提交订单失败',
permissionsNumber: '请输入有效的权限个数',
purchaseMonth: '请输入有效的购买月数',
totalAmount: '获取总金额失败',
wxCodePayFailde: '获取微信支付二维码失败',
aliCodePayFailde: '获取支付宝支付二维码失败',
cancelOrderFailed: '取消订单失败',
createRoomFailedHint: '每个用户只能创建一个综合演练房间, 是否进入房间?',
noPermissionHint: '您没有权限,请前往购买产品',
trainModelNameRepeat: '列车模型数据重复',
coursePublishSuccessful: '课程发布成功',
coursePublishFailed: '课程发布失败',
startOperationHint: '此操作将开始任务, 是否继续?',
cancelsTaskHint: '此操作将取消任务, 是否继续?',
automaticGenerationTrainingSuccess: '自动生成实训成功',
automaticGenerationTrainingFailure: '自动生成实训失败',
updateAutomaticGenerationTrainingSuccess: '更新自动生成实训成功',
updateAutomaticGenerationTrainingFailure: '更新自动生成实训失败',
deleteAutomaticGenerationTrainingSuccess: '删除自动生成实训成功',
deleteAutomaticGenerationTrainingFailure: '删除自动生成实训失败',
addTrainingSuccessfully: '添加实训成功!',
addTrainingFailed: '添加实训失败',
updateTrainingSuccessfully: '更新实训成功!',
updateTrainingFailed: '更新实训失败',
savedStepDataSuccessfully: '保存步骤数据成功',
savedStepDataFailed: '保存步骤数据失败'
};

View File

@ -0,0 +1,44 @@
import deviceType from './deviceType';
const deviceRender = {};
/** Text渲染配置*/
deviceRender[deviceType.Text] = {
zlevel: 1
};
/** SquareButton渲染配置*/
deviceRender[deviceType.SquareButton] = {
zlevel: 1
};
/** WarnButton渲染配置*/
deviceRender[deviceType.WarnButton] = {
zlevel: 1
};
/** Arrow渲染配置*/
deviceRender[deviceType.Arrow] = {
zlevel: 1
};
/** RotatingButton渲染配置*/
deviceRender[deviceType.RotatingButton] = {
zlevel: 1
};
/** Tip渲染配置*/
deviceRender[deviceType.Tip] = {
zlevel: 1
};
/** BackGround渲染配置*/
deviceRender[deviceType.Background] = {
zlevel: 0
};
/** CircularLamp渲染配置 */
deviceRender[deviceType.CircularLamp] = {
zlevel: 1
};
export default deviceRender;

View File

@ -0,0 +1,12 @@
const deviceType = {
Text: 'Text',
SquareButton: 'SquareButton',
WarnButton: 'WarnButton',
Arrow: 'Arrow',
RotatingButton: 'RotatingButton',
Tip: 'Tip',
Background: 'Background',
CircularLamp: 'CircularLamp'
};
export default deviceType;

View File

@ -0,0 +1,51 @@
const ibpData = {
background: {
type: 'Background',
code: 'bg_0000'
},
arrowList: [
{
type: 'Arrow',
code: '1111_arrow',
point: {
x: 510,
y: 400
},
length: 488,
stroke: '#0000CD',
fill: '#0000CD',
lineWidth: 1,
direction: '上行',
stationstandDirection: '三桥方向'
},
{
type: 'Arrow',
code: '1222_arrow',
point: {
x: 510,
y: 200
},
length: 488,
stroke: '#0000CD',
fill: '#0000CD',
lineWidth: 1,
direction: '下行',
stationstandDirection: '车辆段方向'
}
],
circularLampList: [
{
type: 'CircularLamp',
code: '1333_lamp',
point: {
x: 600,
y: 600
},
r: 40,
fillColor: '#332C22'
}
]
};
export default ibpData;

306
src/ibp/ibpPan.js Normal file
View File

@ -0,0 +1,306 @@
import zrender from 'zrender';
import * as zrUtil from 'zrender/src/core/util';
import localStore from 'storejs';
import Options from './options';
import MouseController from './mouseController';
import Painter from './painter';
import deviceState from '../jmap/constant/deviceState';
import deviceType from './constant/deviceType';
import {calculateDCenter, createBoundingRect, deviceFactory} from './utils/parser';
const renderer = 'canvas';
const devicePixelRatio = 1;
class IbpPan {
constructor(opts) {
this.methods = opts.methods;
// 鼠标事件
this.events = { __Pan: 'pan', __Zoom: 'zoom', Selected: 'selected', Contextmenu: 'contextmenu', DataZoom: 'dataZoom'};
// 皮肤参数
// this.skinCode = '';
// 设备数据
this.ibpDevice = {};
// 默认状态
this.defaultStateDict = this.loadDefaultState();
this.initIbpPage(opts);
}
initIbpPage(opts) {
const width = opts.config.width;
const height = opts.config.height;
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 || {}), (dataZoom) => { this.$mouseController.trigger(this.events.DataZoom, dataZoom); }); // 缩放
this.$painter = new Painter(this);
this.$painter.updateZrSize({width: this.$ibpZr.getWidth(), height: this.$ibpZr.getHeight()});
this.$painter.updateTransform(this.$options);
this.optionsHandler = this.setOptions.bind(this);
this.$mouseController = new MouseController(this);
this.$mouseController.enable();
this.$mouseController.on(this.events.__Pan, this.optionsHandler);
this.$mouseController.on(this.events.__Zoom, this.optionsHandler);
}
loadDefaultState() {
const defaultStateDict = {};
zrUtil.each(Object.keys(deviceState), (type) => {
defaultStateDict[type] = {};
zrUtil.each(Object.keys(deviceState[type] || {}), (state) => {
defaultStateDict[type][state] = deviceState[type][state].Default;
}, this);
}, this);
return defaultStateDict;
}
setMap(config, ibpDevice) {
// 保存皮肤类型
if (config.config) {
this.$options.scaleRate = config.scaling;
this.$options.offsetX = config.origin.x;
this.$options.offsetY = config.origin.y;
this.$painter.updateTransform({ scaleRate: config.scaling, offsetX: config.origin.x, offsetY: config.origin.y });
}
// 保存原始数据
this.data = config;
// 解析地图数据
this.ibpDevice = ibpDevice;
// 加载对应皮肤
// this.style = this.loadStyle(this.skinCode);
// 数据加载完成 回调
if (this.methods.dataLoaded instanceof Function) { this.methods.dataLoaded(this.ibpDevice); }
// 初次渲染视图
this.$painter.repaint(this.ibpDevice);
// 视图加载完成 回调
if (this.methods.viewLoaded instanceof Function) { this.methods.viewLoaded(this.ibpDevice); }
}
setDefaultState() {
const list = [];
this.update(list);
if (this.methods.stateLoaded instanceof Function) { this.methods.stateLoaded(list); }
}
setOptions(opts) {
const options = this.pullBack(opts);
this.$options.update(options);
this.$painter.updateTransform(this.$options);
if (this.$options.disabled == true) {
this.$mouseController.disable();
} else {
this.$mouseController.enable(opts);
}
if (this.methods.optionsUpdate instanceof Function) { this.methods.optionsUpdate(this.$options); }
}
setCenter(deviceCode) {
const device = this.ibpDevice[deviceCode];
if (device && device.instance) {
var rect = createBoundingRect(device.instance);
var dcenter = calculateDCenter(rect, { width: this.$ibpZr.getWidth(), height: this.$ibpZr.getHeight() });
this.setOptions(dcenter);
}
}
setLevelVisible(list) {
this.$painter.setLevelVisible(list);
}
render(list) {
(list || []).forEach(elem => {
const code = elem.code;
const type = elem._type;
const oDevice = this.ibpDevice[code] || deviceFactory(type, elem);
const nDevice = Object.assign(oDevice || {}, elem);
this.dataSync(nDevice);
this.$painter.delete(oDevice);
if (!elem._dispose) {
this.ibpDevice[code] = nDevice;
this.$painter.add(nDevice);
}
});
if (this.methods.viewUpdate instanceof Function) { this.methods.viewUpdate(list); }
}
// 中间处理
hookHandle(oDevice, elem) {
const code = elem.code;
const type = elem._type;
// 如果是延时计时,需要保存计数值到全局
if (type === deviceType.StationCounter) {
let val = '' + elem.val;
if (val === '0' || !elem.val) {
val = elem.val = localStore.get(code) || '0';
}
localStore(code, val);
}
for (var prop in elem) {
if (elem[prop] != oDevice[prop]) {
Object.assign(oDevice, elem);
return true;
}
}
return false;
}
update(list) {
(list || []).forEach(elem => {
const code = elem.code;
const oDevice = this.ibpDevice[code];
if (elem.dispose) {
this.$painter.delete(oDevice);
} else {
if (this.hookHandle(oDevice, elem)) {
this.$painter.update(oDevice);
}
}
});
if (this.methods.stateUpdate instanceof Function) { this.methods.stateUpdate(list); }
}
pullBack(payload) {
if (payload.type === 'zoom') {
const zrWidth = this.$ibpZr.getWidth();
const zrHeight = this.$ibpZr.getHeight();
const originX = payload.originX || zrWidth / 2;
const originY = payload.originY || zrHeight / 2;
const x = (this.$options.offsetX + originX) / this.$options.scaleRate;
const y = (this.$options.offsetY + originY) / this.$options.scaleRate;
const newScaleRate = this.$options.getScaleRate(payload.scale);
const dx = originX - (x * newScaleRate - this.$options.offsetX);
const dy = originY - (y * newScaleRate - this.$options.offsetY);
payload.dx = dx;
payload.dy = dy;
}
return payload || {};
}
dataSync(model) {
var prop = null;
var type = model._type;
var code = model.code;
switch (type) {
case deviceType.Link: prop = 'linkList'; break;
}
const list = this.data[prop] || [];
const idex = list.findIndex(elem => { return elem.code == code; });
if (list) {
if (model._dispose) {
idex >= 0 && list.splice(idex, 1);
} else {
const elem = list[idex];
if (elem) {
Object.keys(elem).forEach(key => {
elem[key] = model[key];
});
} else {
list.push(Object.assign({}, model));
}
}
}
}
getZr() {
return this.$ibpZr;
}
getEvents() {
return this.events;
}
getDeviceByCode(code) {
return this.ibpDevice[code];
}
getShapeTipPoint(opts) {
const device = this.ibpDevice[opts.code];
if (device) {
return this.$painter.getShapeTipPoint(device.instance, opts);
}
}
resize(opt) {
this.$ibpZr.resize(opt);
this.$painter.updateZrSize(opt);
}
refresh() {
this.$painter.refresh();
}
clear() {
this.skinCode = '';
this.style = {};
this.ibpDevice = {};
this.$painter.clear();
}
dispose() {
this.off(this.events.Pan, this.optionsHandler);
this.off(this.events.Zoom, this.optionsHandler);
this.clear();
this.$mouseController.dispose();
this.$ibpZr && zrender.dispose(this.$ibpZr);
this.$painter.dispose();
}
on(eventname, cb, context) {
const idx = Object.values(this.events).indexOf(eventname);
if (idx >= 0) {
switch (eventname) {
case this.events.Selected:
this.$mouseController.on(this.events.Selected, cb, context);
break;
case this.events.Contextmenu:
this.$mouseController.on(this.events.Contextmenu, cb, context);
break;
case this.events.DataZoom:
this.$mouseController.on(this.events.DataZoom, cb, context);
break;
}
}
}
off(eventname, cb) {
const idx = Object.values(this.events).indexOf(eventname);
if (idx >= 0) {
switch (eventname) {
case this.events.Selected:
this.$mouseController.off(this.events.Selected, cb);
break;
case this.events.Contextmenu:
this.$mouseController.off(this.events.Contextmenu, cb);
break;
case this.events.DataZoom:
this.$mouseController.off(this.events.DataZoom, cb);
break;
}
}
}
}
export default IbpPan;

201
src/ibp/mouseController.js Normal file
View File

@ -0,0 +1,201 @@
import deviceType from './constant/deviceType';
import Eventful from 'zrender/src/mixin/Eventful';
import * as eventTool from 'zrender/src/core/event';
import store from '@/store';
class EventModel {
constructor(e) {
this.clientX = e.event.clientX;
this.clientY = e.event.clientY;
let view = e.target;
while (view) {
if (Object.values(deviceType).includes(view._type)) {
this.deviceCode = view._code;
this.deviceType = view._type;
break;
}
if (view._subType) {
this.subType = view._subType;
}
if (view._val) {
this.val = view._val;
}
view = view.parent;
}
}
}
class MouseController extends Eventful {
constructor(ibp) {
super();
this.$ibp = ibp;
this.$zr = ibp.getZr();
this.events = ibp.getEvents();
this.initHandler(this.$zr);
}
initHandler(zr) {
if (zr) {
zr.on('click', this.click, this);
zr.on('contextmenu', this.contextmenu, this);
zr.on('mousemove', this.moveEvent, this);
this.enable = function (opts) {
opts = opts || {};
this._moveOnMouseMove = opts.moveOnMouseMove || true;
this._zoomOnMouseWheel = opts.zoomOnMouseWheel || false;
this._preventDefaultMouseMove = opts.preventDefaultMouseMove || true;
this.disable();
zr.on('mousedown', this.mousedown, this);
zr.on('mousemove', this.mousemove, this);
zr.on('mouseup', this.mouseup, this);
zr.on('mousewheel', this.mousewheel, this);
};
this.disable = function () {
zr.off('mousedown', this.mousedown);
zr.off('mousemove', this.mousemove);
zr.off('mouseup', this.mouseup);
zr.off('mousewheel', this.mousewheel);
};
this.dispose = function () {
zr.off('click', this.click);
zr.off('contextmenu', this.contextmenu);
zr.off('mousemove', this.moveEvent);
this.disable();
};
this.isDragging = function () { return this._dragging; };
}
}
mousedown(e) {
if (eventTool.notLeftMouse(e)) {
return;
}
var x = e.offsetX;
var y = e.offsetY;
this._x = x;
this._y = y;
this._dragging = true;
}
mousemove(e) {
if (eventTool.notLeftMouse(e) ||
!this._moveOnMouseMove ||
!this._dragging
) {
return;
}
const oldX = this._x;
const oldY = this._y;
const dx = e.offsetX - oldX;
const dy = e.offsetY - oldY;
this._x = e.offsetX;
this._y = e.offsetY;
this._preventDefaultMouseMove && eventTool.stop(e.event);
this.trigger(this.events.__Pan, { dx, dy, oldX, oldY, newX: this._x, newY: this._y });
}
mouseup(e) {
if (!eventTool.notLeftMouse(e)) {
this._dragging = false;
}
}
mousewheel(e) {
const shouldZoom = this._zoomOnMouseWheel;
const wheelDelta = e.wheelDelta;
const originX = e.offsetX;
const originY = e.offsetY;
if (wheelDelta === 0 || !shouldZoom) {
return;
}
if (shouldZoom) {
eventTool.stop(e.event);
let scale = 1;
if (wheelDelta > 0) {
scale = 1;
} else if (wheelDelta < 0) {
scale = -1;
}
this.trigger(this.events.__Zoom, {type: 'zoom', scale, originX, originY });
}
}
click(e) {
var em = this.checkEvent(e);
this.trigger(this.events.Selected, em);
}
contextmenu(e) {
var em = this.checkEvent(e);
this.trigger(this.events.Contextmenu, em);
}
moveEvent(e) {
const newEm = new EventModel(e);
const trainDetails = store.state.map.trainDetails;
if (trainDetails) {
if (newEm.deviceType != deviceType.Train || trainDetails.code != newEm.deviceCode) {
var instance = (this.$ibp.getDeviceByCode(trainDetails.code) || {} ).instance;
instance && instance.removeTrainDetail && instance.removeTrainDetail();
}
}
}
checkEvent(e) {
var oldEm = new EventModel(this.$zr.curEvent || { event: {} });
var newEm = new EventModel(e);
if ([1, 3].includes(e.which)) {
// 查找之前和当前鼠标选中的实例
var oldDevice = this.$ibp.getDeviceByCode(oldEm.deviceCode) || {};
var newDevice = this.$ibp.getDeviceByCode(newEm.deviceCode) || {};
var oldInstance = (this.$ibp.getDeviceByCode(oldEm.deviceCode) || {}).instance || {};
var newInstance = (this.$ibp.getDeviceByCode(newEm.deviceCode) || {}).instance || {};
// 如果之前和当前选中的实例不一致
if (oldInstance != newInstance) {
// 如果实例有取消选择函数并且被点击,则执行取消选中函数
if (oldInstance.mouseEvent && oldInstance.mouseEvent.mouseout) {
// 视图数据设置点击标志,同步执行
oldDevice['down'] = false;
oldInstance.mouseEvent['mouseout'](e);
}
// 如果实例有选中函数并且被点击,则执行选中函数
if (e.which == 3 && newInstance.mouseEvent && newInstance.mouseEvent.mouseover) {
newDevice['down'] = true;
newInstance.mouseEvent['mouseover'](e);
}
}
// 保存当前实例到全局
this.$zr.curEvent = e;
}
return newEm;
}
updateDatazoom(zoom) {
this.trigger(this.events.Datazoom, zoom);
}
}
export default MouseController;

100
src/ibp/options.js Normal file
View File

@ -0,0 +1,100 @@
class Options {
constructor(opts, trigger) {
this.scaleIndex = 0;
this.scaleList = [
0.5, 0.6, 0.7, 0.8, 0.9,
1, 1.2, 1.4, 1.6, 1.8,
2, 2.2, 2.4, 2.6, 2.8,
3, 3.2, 3.4, 3.6, 3.8,
4, 4.2, 4.4, 4.6, 4.8,
5, 5.2, 5.4, 5.6, 5.8,
6, 6.2, 6.4, 6.6, 6.8,
7, 7.2, 7.4, 7.6, 7.8,
8, 8.2, 8.4, 8.6, 8.8
];
if (Number.isFinite(opts.scaleRate)) {
const idx = this.scaleList.indexOf(opts.scaleRate);
if (idx >= 0) {
this.scaleIndex = idx;
}
}
this.scaleRate = opts.scaleRate || this.scaleList[this.scaleIndex]; // 缩放比例
this.offsetX = opts.offsetX || 0; // x偏移
this.offsetY = opts.offsetY || 0; // y偏移
this.throttle = opts.throttle || 100; // 刷新频率
this.disabled = false;
this.moveOnMouseMove = true;
this.zoomOnMouseWheel = false;
this.preventDefaultMouseMove = true;
this.trigger = trigger;
}
update(payload) {
if (Number.isFinite(payload.dx)) {
this.offsetX -= payload.dx;
}
if (Number.isFinite(payload.dy)) {
this.offsetY -= payload.dy;
}
if (Number.isFinite(payload.offsetX)) {
this.offsetX = payload.offsetX;
}
if (Number.isFinite(payload.offsetY)) {
this.offsetY = payload.offsetY;
}
if (Number.isFinite(payload.scale)) {
if (Number.isFinite(payload.scale)) {
if ((this.scaleIndex + payload.scale) >= 0 && (this.scaleIndex + payload.scale) < this.scaleList.length) {
this.scaleIndex = this.scaleIndex + payload.scale;
}
}
this.scaleRate = this.scaleList[this.scaleIndex];
}
if (Number.isFinite(payload.scaleRate)) {
const idx = this.scaleList.indexOf(payload.scaleRate);
if (idx < 0) {
return;
}
this.scaleIndex = idx;
this.scaleRate = payload.scaleRate;
}
if (payload.disabled === true || payload.disabled === false) {
this.disabled = payload.disabled;
}
if (payload.moveOnMouseMove === true || payload.moveOnMouseMove === false) {
this.moveOnMouseMove = payload.moveOnMouseMove;
}
if (payload.zoomOnMouseWheel === true || payload.zoomOnMouseWheel === false) {
this.zoomOnMouseWheel = payload.zoomOnMouseWheel;
}
if (this.trigger instanceof Function) { this.trigger(this); }
}
getScaleRate(scale) {
if (Number.isFinite(scale)) {
if ((this.scaleIndex + scale) >= 0 && (this.scaleIndex + scale) < this.scaleList.length) {
return this.scaleList[this.scaleIndex + scale];
}
}
return this.scaleList[this.scaleIndex];
}
}
export default Options;

194
src/ibp/painter.js Normal file
View File

@ -0,0 +1,194 @@
import * as zrUtil from 'zrender/src/core/util';
import * as vector from 'zrender/src/core/vector';
import Group from 'zrender/src/container/Group';
import deviceType from './constant/deviceType';
import shapefactory from './shape/factory';
import TransformHandle from './transformHandle';
class Painter {
constructor(ibp) {
// 父级实例
this.$ibp = ibp;
this.$ibpZr = ibp.getZr();
// 图层数据
this.ibpInstanceLevel = {};
// 初始图层
this.initLevels();
// 视图控制器
this.$transformHandle = new TransformHandle(this);
}
/**
* 初始绘图实例
* @param {*} dom
* @param {*} config
*/
initLevels() {
// 添加父级图层
this.parentLevel = new Group({ name: '__parent__' });
this.$ibpZr.add(this.parentLevel);
// 添加子级图层
zrUtil.each(Object.values(deviceType), (type) => {
const level = new Group({ name: `__${type}__` });
this.ibpInstanceLevel[type] = level;
this.parentLevel.add(level);
});
}
/**
* 重绘视图
* @param {*} ibpDevice
*/
repaint(ibpDevice) {
// 清空视图
this.clear();
// 创建视图
Object.values(ibpDevice).forEach(device => {
this.add(device);
});
}
/**
* 添加视图
* @param {*} device
*/
add(device) {
const instance = shapefactory(device, this.$ibp);
if (instance) {
device.instance = instance;
this.$transformHandle.transformView(instance);
this.ibpInstanceLevel[device._type].add(instance);
}
}
/**
* 删除视图
* @param {*} device
*/
delete(device) {
const instance = device.instance;
if (instance) {
this.ibpInstanceLevel[device._type].remove(instance);
}
}
/**
* 更新视图
* @param {*} device
*/
update(device) {
if (device) {
if (device._dispose) {
this.delete(device);
} else {
const instance = device.instance;
if (instance) {
instance.setState(device);
}
}
}
}
/**
* 更新transform变化
* @param {*} opt
*/
updateTransform(opt,) {
this.$transformHandle.updateTransform(opt);
}
/**
* 更新zrender尺寸
* @param {*} opt
*/
updateZrSize(opt) {
this.$transformHandle.updateZrSize(opt);
}
/**
* 过去坐标提示位置
* @param {*} opts
*/
getShapeTipPoint(instance, opts) {
if (instance) {
var point = instance.getShapeTipPoint(opts);
if (point) {
// 矩阵变换
var transform = this.$transformHandle.transform;
var transPoint = vector.applyTransform([], [point.x, point.y], transform);
return {
x: transPoint[0],
y: transPoint[1]
};
}
}
}
/**
* 设置图层可见
* @param {*} code
*/
setLevelVisible(list) {
zrUtil.each(Object.values(deviceType), type => {
const level = this.ibpInstanceLevel[type];
if (list.includes(type)) {
level.show();
} else {
level.hide();
}
}, this);
}
/**
* 刷新图层
*/
refresh() {
this.$ibpZr.refresh();
}
/**
* 清除图层
*/
clearLevel(type) {
const level = this.ibpInstanceLevel[type];
if (level) {
level.removeAll();
}
}
/**
* 清除canvas
*/
clear() {
zrUtil.each(Object.values(this.ibpInstanceLevel), (level) => {
level && level.removeAll();
}, this);
this.refresh();
}
/**
* 销毁图层
*/
dispose() {
this.ibpInstanceLevel = {};
this.parentLevel = null;
}
/**
* 父级图层
*/
getParentLevel() {
return this.parentLevel;
}
}
export default Painter;

37
src/ibp/shape/arrow.js Normal file
View File

@ -0,0 +1,37 @@
import Polygon from 'zrender/src/graphic/shape/Polygon';
import Group from 'zrender/src/container/Group';
import {arrow} from '../../jmap/shape/utils/ShapePoints';
class Arrow extends Group {
constructor(model) {
super();
this.model = model;
this.create();
}
create() {
const model = this.model;
const point = arrow(this.model.point.x, this.model.point.y, this.model.length, 10);
this.arrow = new Polygon({
zlevel: model.zlevel,
z: model.z,
shape: {
points: point
},
style: {
stroke: model.stroke,
lineWidth: model.lineWidth,
fill: model.fill
}
});
this.add(this.arrow);
}
// 箭头颜色
setColor(color) {
this.arrow.setStyle('fill', color);
}
}
export default Arrow;

View File

@ -0,0 +1,50 @@
import Group from 'zrender/src/container/Group';
import Image from 'zrender/src/graphic/Image';
import Rect from 'zrender/src/graphic/shape/Rect';
import ibpBg from '@/assets/ibp_images/ibp_bg.png';
export default class background extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this.z = 1;
this.create();
}
create() {
this.imageBg = new Image({
zlevel: this.zlevel,
z: this.z,
style: {
x: 0,
y: 0,
image: ibpBg,
width: 2048,
height: 1024
}
});
this.tailorRect = new Rect({
zlevel: this.zlevel,
z: this.z,
shape: {
x: 0,
y: 0,
width: this.model.width,
height: this.model.height
}
});
this.tailorBgImage();
}
tailorBgImage() {
// this.imageBg.setClipPath(this.tailorRect);
this.add(this.imageBg);
}
setInitialPosition(opt) {
const x = this.imageBg.style.x;
const y = this.imageBg.style.y;
this.imageBg.setStyle('x', x-opt.offsetX);
this.imageBg.setStyle('y', y-opt.offsetY);
this.tailorRect.setShape('x', x-opt.offsetX);
this.tailorRect.setShape('y', y-opt.offsetY);
}
}

163
src/ibp/shape/button.js Normal file
View File

@ -0,0 +1,163 @@
import Group from 'zrender/src/container/Group';
import Image from 'zrender/src/graphic/Image';
// import Eventful from 'zrender/src/mixin/Eventful';
import * as eventTool from 'zrender/src/core/event';
import buttonPic from '@/assets/ibp_images/red_button.png';
import buttonPicOn from '@/assets/ibp_images/red_button_on.png';
export default class button extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this.z = model.z;
this.create();
this.createMouseEvent();
}
create() {
const model = this.model;
this.imageBg = new Image({
zlevel: this.zlevel,
z: this.z,
style: {
image: model.status === '01' ? buttonPic : buttonPicOn,
x: this.model.point.x,
y: this.model.point.y,
width: this.model.width,
height: this.model.height
}
});
this.add(this.imageBg);
}
// 设置按钮状态
setState(model) {
switch (model.status) {
case '01': this.close(); break; // 关闭
case '02': this.open(); break; // 开放
}
}
// 绑定按钮事件
createMouseEvent() {
this.model.isDraging=true;
if (this.model.isDraging) {
// 按钮拖拽事件监听
this.imageBg.on('mousedown', (e) => {
if (eventTool.notLeftMouse(e)) {
return;
}
eventTool.stop(e.event);
var x = e.offsetX;
var y = e.offsetY;
this._x = x;
this._y = y;
this._dragginger = true;
});
this.imageBg.on('mousemove', (e) => {
// !this._moveOnMouseMove ||
if (eventTool.notLeftMouse(e) || !this._dragginger) {
return;
}
// eventTool.stop(e.event);
const oldX = this._x;
const oldY = this._y;
const dx = e.offsetX - oldX;
const dy = e.offsetY - oldY;
this._x = e.offsetX;
this._y = e.offsetY;
debugger;
// this.imageBg.preventDefaultMouseMove &&
eventTool.stop(e.event);
// debugger;
this.imageBg.setStyle({x: oldX+dx, y: oldY+dy });
});
this.imageBg.on('mouseup', (e) => {
if (!eventTool.notLeftMouse(e)) {
this._dragginger = false;
}
});
} else {
// 按钮的点击监听
this.imageBg.on('click', (e) => {
switch (this.model.status) {
case '01': {
this.open();
this.model.status='02';
break;
}
case '02': {
this.close();
this.model.status='01';
break;
}
}
});
}
}
// if (this.model.isDraging) {
// // this.mouseEvent = new EMouse(this);
// // this.add(this.mouseEvent);
// this.imageBg.on('mousedown', (e) => {
// // debugger;
// if (eventTool.notLeftMouse(e)) {
// return;
// }
// var x = e.offsetX;
// var y = e.offsetY;
// this._x = x;
// this._y = y;
// this._dragging = true;
// });
// this.imageBg.on('mousemove', (e) => {
// if (eventTool.notLeftMouse(e) || !this._moveOnMouseMove ||!this._dragging) {
// return;
// }
// const oldX = this._x;
// const oldY = this._y;
// const dx = e.offsetX - oldX;
// const dy = e.offsetY - oldY;
// this._x = e.offsetX;
// this._y = e.offsetY;
// debugger;
// this.imageBg.preventDefaultMouseMove && eventTool.stop(e.event);
// debugger;
// this.imageBg.setStyle({x: dx, y: dy});
// // this.trigger(this.events.__Pan, { dx, dy, oldX, oldY, newX: this._x, newY: this._y });
// });
// this.on('mouseup', (e) => { });
// }
// else {
// this.on('mousedown', (e) => { this.mouseEvent.mouseout(e); });
// // this.on('mousemove', (e) => { this.mouseEvent.mouseover(e); });
// this.on('mouseup', (e) => { this.mouseEvent.mouseover(e); });
// }
// 关闭
close() {
this.imageBg.setStyle({image: buttonPic});
}
// 开放
open() {
this.imageBg.setStyle({image: buttonPicOn});
}
getShapeTipPoint() {
if (this.imageBg) {
var distance = 2;
var rect = this.imageBg.getBoundingRect();
return {
x: rect.x + rect.width / 2,
y: rect.y - distance
};
}
return null;
}
}

View File

@ -0,0 +1,33 @@
import Group from 'zrender/src/container/Group';
import Circle from 'zrender/src/graphic/shape/Circle';
import MouseController from '../mouseController';
export default class CircularLamp extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this.z = model.z;
this.create();
}
create() {
this.lamp = new Circle({
zlevel: this.zlevel,
z: this.z,
shape: {
cx: this.model.point.x,
cy: this.model.point.y,
r: this.model.r
},
style: {
fill: this.model.fillColor
}
});
this.add(this.lamp);
}
setCircularLampColor(color) {
this.lamp.setStyle('fill', color);
}
}

View File

@ -0,0 +1,25 @@
// import Group from 'zrender/src/container/Group';
import Text from 'zrender/src/graphic/Text';
/** 名称元素*/
export default function ETextName(model) {
const TextName = new Text({
zlevel: model.zlevel,
z: model.z,
silent: model.silent || false,
style: {
x: model.x,
y: model.y,
fontWeight: model.fontWeight,
fontSize: model.fontSize,
fontFamily: model.fontFamily,
text: model.text,
textStrokeWidth: model.textStrokeWidth,
textFill: model.textFill,
textAlign: model.textAlign,
textPosition: model.textPosition || 'inside',
textVerticalAlign: model.textVerticalAlign || null
}
});
return TextName;
}

20
src/ibp/shape/factory.js Normal file
View File

@ -0,0 +1,20 @@
import Arrow from './arrow';
import deviceType from '../constant/deviceType';
import Background from './background';
import CircularLamp from './circularLamp'
const ibpShape = {};
ibpShape[deviceType.Arrow] = Arrow;
ibpShape[deviceType.Background] = Background;
ibpShape[deviceType.CircularLamp] = CircularLamp;
function shapefactory(device, ibp) {
const type = device._type;
const shape = ibpShape[type];
if (shape instanceof Function) {
// eslint-disable-next-line
return new shape(device, ibp.style);
}
}
export default shapefactory;

View File

@ -0,0 +1,71 @@
import {createTransform, createBoundingRect} from './utils/parser';
class TransformHandle {
constructor(painter) {
this.$painter = painter;
this.parentLevel = painter.getParentLevel();
this.rect = { x: 0, y: 0, width: 0, height: 0 };
this.transform = createTransform({ scaleRate: 1, offsetX: 0, offsetY: 0 });
}
checkVisible(view) {
return createBoundingRect(view).intersect(this.rect);
}
revisibleView(view) {
if (this.checkVisible(view)) {
view.show();
} else {
view.hide();
}
view.dirty();
}
// 视图进行缩放/平移
transformView(view) {
if (view) {
view.transform = this.transform;
view.decomposeTransform();
this.revisibleView(view);
}
// return view;
}
// 处理所有视图缩放/平移
transformAll() {
this.traverse(this.transformView, this);
}
// 重新计算显示图形
revisibleAll() {
this.traverse(this.revisibleView, this);
}
// 更新偏移量
updateTransform(opts) {
this.transform = createTransform(opts);
this.transformAll();
}
// 更新画布尺寸
updateZrSize(opts) {
this.rect = { x: 0, y: 0, width: opts.width, height: opts.height };
this.revisibleAll();
}
// 遍历group执行回调
traverse(cb, context) {
this.parentLevel.eachChild(level => {
level.eachChild((view) => {
cb.call(context, view);
}, context);
}, context);
}
}
export default TransformHandle;

78
src/ibp/utils/parser.js Normal file
View File

@ -0,0 +1,78 @@
import * as zrUtil from 'zrender/src/core/util';
import * as matrix from 'zrender/src/core/matrix';
import deviceType from '../constant/deviceType';
import deviceRender from '../constant/deviceRender';
export function createTransform(opts) {
let transform = matrix.create();
transform = matrix.scale(matrix.create(), transform, [opts.scaleRate, opts.scaleRate]);
transform = matrix.translate(matrix.create(), transform, [-opts.offsetX, -opts.offsetY]);
return transform;
}
export function createBoundingRect(view) {
const rect = view.getBoundingRect();
const scale = view.scale[0];
const offsetX = view.position[0];
const offsetY = view.position[1];
rect.x = rect.x * scale + offsetX;
rect.y = rect.y * scale + offsetY;
rect.width = rect.width * scale;
rect.height = rect.height * scale;
return rect;
}
export function calculateDCenter(viewRect, zrbound) {
var dx = (zrbound.width - viewRect.width) / 2 - viewRect.x;
var dy = 0;
return { dx: dx, dy: dy };
}
export function deviceFactory(type, elem) {
return Object.assign({ _type: type }, deviceRender[type], elem);
}
export function createDevice(type, model, propConvert) {
const device = deviceFactory(type, model);
return propConvert ? propConvert.initPrivateProps(device) : device;
}
export function parser(data, config) {
var ibpDevice = {};
const propConvert = null;
// var propConvert = skinCode ? Vue.prototype.$theme.loadPropConvert(skinCode): null;
if (data) {
Object.assign(data.background, config);
ibpDevice[data.background.code] = createDevice(deviceType.Background, data.background, propConvert);
zrUtil.each(data.textList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.Text, elem, propConvert);
}, this);
zrUtil.each(data.squareButtonList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.SquareButton, elem, propConvert);
}, this);
zrUtil.each(data.circularLampList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.CircularLamp, elem, propConvert);
}, this);
zrUtil.each(data.warnButtonList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.WarnButton, elem, propConvert);
}, this);
zrUtil.each(data.arrowList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.Arrow, elem, propConvert);
}, this);
zrUtil.each(data.rotatingButtonList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.RotatingButton, elem, propConvert);
}, this);
zrUtil.each(data.tipList || [], elem => {
ibpDevice[elem.code] = createDevice(deviceType.Tip, elem, propConvert);
}, this);
}
return ibpDevice;
}

View File

@ -1,36 +1,35 @@
import Vue from 'vue';
//模型loader
// 模型loader
import { AssetLoader } from '@/jlmap3d/main/loaders/AssetLoader.js';
import {DDSLoader} from '@/jlmap3d/main/loaders/DDSLoader.js';
import {OBJLoader} from '@/jlmap3d/main/loaders/OBJLoader.js';
import {MTLLoader} from '@/jlmap3d/main/loaders/MTLLoader.js';
import { FBXLoader } from '@/jlmap3d/main/loaders/FBXLoader.js';
//controls
// controls
import {OrbitControls} from '@/jlmap3d/main/control/OrbitControls.js';
import { DragControls } from '@/jlmap3d/main/control/DragControls.js';
//component
// component
//data
// data
import { Jl3ddata } from '@/jlmap3d/main/model/jl3ddata';
//setconfig
// setconfig
import { SetCamera } from '@/jlmap3d/config/SetCamera';
import { SetRender } from '@/jlmap3d/config/SetRender';
import { SetScene } from '@/jlmap3d/config/SetScene';
import { SetLights } from '@/jlmap3d/config/SetLights';
//加载器
// 加载器
import { ModelLoad } from '@/jlmap3d/main/loaders/simulationloader';
//connect
// connect
import {Jl3dDriving} from '@/jlmap3d/jl3ddrive/moveupdate/DrivingConnect';
import { getPublishMapVersion, getPublishMapDetail,getPublish3dMapDetail} from '@/api/jlmap3d/load3ddata';
import { getPublishMapVersion, getPublishMapDetail, getPublish3dMapDetail} from '@/api/jlmap3d/load3ddata';
//utils
// utils
import { UpdateTrain } from '@/jlmap3d/jl3ddrive/moveupdate/UpdateTrain';
//import { UpdateTrain } from '@/jlmap3d/main/utils/UpdateTrainTest';
// import { UpdateTrain } from '@/jlmap3d/main/utils/UpdateTrainTest';
import { ReStart } from '@/jlmap3d/main/utils/ReStart';
import {Stats} from '@/jlmap3d/main/lib/stats.min.js';
@ -39,357 +38,377 @@ import {MouseControls} from '@/jlmap3d/main/control/FirstControls';
var clock = new THREE.Clock();
export function JLmapDriving(dom, data,skinStyle) {
export function JLmapDriving(dom, data, skinCode) {
let scope = this;
this.dom = dom;
//渲染循环开关
this.animateswitch = false;
//初始化webgl渲染
let renderer = SetRender(dom);
renderer.domElement.style.position = "absolute";
renderer.domElement.style.top = "0";
document.getElementById('jlsimulation').appendChild(renderer.domElement);
//定义相机
let camera = SetCamera(dom);
//定义场景(渲染容器)
let scene = SetScene();
const scope = this;
this.dom = dom;
// 渲染循环开关
this.animateswitch = false;
// 初始化webgl渲染
const renderer = SetRender(dom);
renderer.domElement.style.position = 'absolute';
renderer.domElement.style.top = '0';
let speed = 0;
var renderercctv = new THREE.WebGLRenderer();
renderercctv.setSize(dom.offsetWidth*0.2, dom.offsetHeight*0.2);
renderercctv.domElement.style.position = 'absolute';
renderercctv.domElement.style.top = '0';
let drivingcode = null;
document.getElementById('jlsimulation').appendChild(renderer.domElement);
document.getElementById('jlcctv').appendChild(renderercctv.domElement);
// 定义相机
let camera = SetCamera(dom);
// 定义场景(渲染容器)
const scene = SetScene();
//模型加载器
this.assetloader = new AssetLoader();
//替换材质组,例:信号机不同灯光
this.materiallist = [];
//初始化场景线框和灯光 暂时
SetLights(scene);
//点击选中的模型
this.selectmodel = null;
//鼠标点击模型切换
this.raycasterswitch = "stand";
//选中物体描边方框
this.helpbox = null;
//车门,站台门道岔动画构造器
this.mixers = [];
//模型操作命令组
this.actions = {};
this.nowspeed = null;
this.nowmxlen = null;
this.atpspeed = null;
this.atospeed = null;
this.trainnum = null;
this.stime = null;
this.webwork=new Worker("../../static/workertest/trainworker.js");
//地图模型数据
let mapdata = new Jl3ddata();
const speed = 0;
let camera2 = new THREE.PerspectiveCamera( 60,window.innerWidth / window.innerHeight, 1, 2000 );
camera2.name = "camera2";
let drivingcode = null;
let controls3 = new MouseControls(camera2, 1.6);
// 模型加载器
this.assetloader = new AssetLoader();
// 替换材质组,例:信号机不同灯光
this.materiallist = [];
// 初始化场景线框和灯光 暂时
SetLights(scene);
// 点击选中的模型
this.selectmodel = null;
// 鼠标点击模型切换
this.raycasterswitch = 'stand';
// 选中物体描边方框
this.helpbox = null;
// 车门,站台门道岔动画构造器
this.mixers = [];
// 模型操作命令组
this.actions = {};
this.nowspeed = null;
this.nowmxlen = null;
this.atpspeed = null;
this.atospeed = null;
this.trainnum = null;
this.stime = null;
this.drivecount = 0;
this.drivedata = null;
this.webwork=new Worker('../../static/workertest/trainworker.js');
// 地图模型数据
let mapdata = new Jl3ddata();
const camera2 = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 2000 );
camera2.name = 'camera2';
const controls3 = new MouseControls(camera2, 1.6);
controls3.enabled = true;
scene.add(controls3.getObject());
//订阅仿真socket
this.Subscribe = new Jl3dDriving(scope);
//连接到通信
//console.log(this.Subscribe.config);
//this.webwork.postMessage(this.Subscribe.teststomp);
let cameracctv = new THREE.PerspectiveCamera(70, dom.clientWidth/dom.clientHeight, 1, 20);
cameracctv.position.set( 5, 1,27 );
this.Subscribe.socketon(scope.Subscribe.topic);
cameracctv.rotation.y = Math.PI/5*3;
camera2.add(cameracctv);
// 订阅仿真socket
this.Subscribe = new Jl3dDriving(scope);
// 连接到通信
// console.log(this.Subscribe.config);
//初始化加载数据和模型
getPublish3dMapDetail(skinStyle).then(netdata => {
ModelLoad(data,scope,netdata.data,mapdata,camera,controls3,scene);
});
// this.webwork.postMessage(this.Subscribe.teststomp);
//let stats = new Stats();
//dom.appendChild( stats.dom );
//开启渲染
animate();
startWorker();
//动画时间
let delta;
//循环渲染函数
function animate() {
//循环渲染
//requestAnimationFrame(animate);
//renderer.setAnimationLoop(animate);
requestAnimationFrame(animate);
//判断渲染是否开启
if(scope.animateswitch == true){
//根据相机渲染场景
renderer.render(scene,camera2);
//updatcontrols();
controls3.update();
//检测动画构造器播放动画
this.Subscribe.socketon(scope.Subscribe.topic);
}
// 初始化加载数据和模型
getPublish3dMapDetail(skinCode).then(netdata => {
ModelLoad(data, scope, netdata.data, mapdata, camera, controls3, scene);
});
}
// let stats = new Stats();
// dom.appendChild( stats.dom );
// 开启渲染
animate();
startWorker();
// 动画时间
let delta;
// 循环渲染函数
function animate() {
// 循环渲染
// requestAnimationFrame(animate);
// renderer.setAnimationLoop(animate);
requestAnimationFrame(animate);
// 判断渲染是否开启
if (scope.animateswitch == true) {
// 根据相机渲染场景
renderer.render(scene, camera2);
renderercctv.render(scene,cameracctv);
// updatcontrols();
// renderercctv
controls3.update();
// 检测动画构造器播放动画
function updatcontrols(){
if(drivingcode){
controls3.getObject().position.x = mapdata.trainlisttest.list[drivingcode].matrixWorld.elements[12]-27;
controls3.getObject().position.y=10;
controls3.getObject().position.z = mapdata.trainlisttest.list[drivingcode].children[0].matrixWorld.elements[14];
}
}
}
}
function startWorker(){
function updatcontrols() {
if (drivingcode) {
controls3.getObject().position.x = mapdata.trainlisttest.list[drivingcode].matrixWorld.elements[12]-27;
controls3.getObject().position.y=10;
controls3.getObject().position.z = mapdata.trainlisttest.list[drivingcode].children[0].matrixWorld.elements[14];
if(typeof(Worker)!=="undefined"){
}
}
function startWorker() {
scope.webwork.onmessage = function (event) {
//更新列车位置
// stats.update();
UpdateTrain(camera,mapdata.trainlisttest);
delta = clock.getDelta();
for(let i=scope.mixers.length-1;i>=0;i--){
if ( scope.mixers[i] ){
scope.mixers[i].update( delta );
}
}
if (typeof (Worker)!=='undefined') {
};
}
scope.webwork.onmessage = function (event) {
// 更新列车位置
// stats.update();
UpdateTrain(camera, mapdata.trainlisttest);
delta = clock.getDelta();
for (let i=scope.mixers.length-1; i>=0; i--) {
if ( scope.mixers[i] ) {
scope.mixers[i].update( delta );
}
}
}
this.updatenowspeed = function(speed){
scope.nowspeed = speed;
}
this.updatenowlen = function(maLen){
scope.nowmxlen = maLen;
}
this.updateatpspeed = function(atpspeed){
scope.atpspeed = atpspeed;
}
this.updateatospeed = function(atospeed){
scope.atospeed = atospeed;
}
this.updatetrainnum = function(trainnum){
scope.trainnum = trainnum;
}
this.updatestoptime = function(stime){
scope.stime = stime;
}
};
}
this.updatedrivingcode = function(code){
drivingcode = code;
mapdata.trainlisttest.list[drivingcode].children[0].add(controls3.getObject());
mapdata.trainlisttest.list[drivingcode].children[0].add(scope.assetloader.modellist[4].mesh);
controls3.getObject().position.x = 40;
controls3.getObject().position.y= 12.5;
controls3.getObject().rotation.y = -Math.PI/2;
scope.assetloader.modellist[4].mesh.position.x = 34;
scope.assetloader.modellist[4].mesh.position.y = 0;
}
}
this.updatenowspeed = function(speed) {
scope.nowspeed = speed;
};
this.updatenowlen = function(maLen) {
scope.nowmxlen = maLen;
};
this.updateatpspeed = function(atpspeed) {
scope.atpspeed = atpspeed;
};
this.updateatospeed = function(atospeed) {
scope.atospeed = atospeed;
};
this.updatetrainnum = function(trainnum) {
scope.trainnum = trainnum;
};
this.updatestoptime = function(stime) {
scope.stime = stime;
};
this.updatedrivedata = function(drivedata){
scope.drivecount += 1;
scope.drivedata = drivedata;
};
this.dispose = function(){
renderer.setAnimationLoop(null);
renderer.dispose();
scene.dispose();
// controls.dispose();
camera = null;
scope.assetloader = null;
this.updatedrivingcode = function(code) {
drivingcode = code;
mapdata.trainlisttest.list[drivingcode].children[0].add(controls3.getObject());
mapdata.trainlisttest.list[drivingcode].children[0].add(scope.assetloader.modellist[4].mesh);
controls3.getObject().position.x = 40;
controls3.getObject().position.y= 12.5;
controls3.getObject().rotation.y = -Math.PI/2;
scope.assetloader.modellist[4].mesh.position.x = 34;
scope.assetloader.modellist[4].mesh.position.y = 0;
};
mapdata = null;
scope.selectmodel = null;
this.dispose = function() {
renderer.setAnimationLoop(null);
renderer.dispose();
scene.dispose();
// controls.dispose();
camera = null;
scope.assetloader = null;
scope.materiallist = null;
scope.selectmodel = null;
scope.helpbox = null;
scope.mixers = null;
scope.actions = null;
scope.Subscribe = null;
//console.log(scope);
//scope = null;
}
mapdata = null;
scope.selectmodel = null;
this.rayswitch = function(value){
this.raycasterswitch = value;
if(scope.helpbox){
scene.remove( scope.helpbox );
scope.helpbox = null;
}
};
scope.materiallist = null;
scope.selectmodel = null;
scope.helpbox = null;
scope.mixers = null;
scope.actions = null;
scope.Subscribe = null;
// console.log(scope);
// scope = null;
};
this.showstationmsg = function(showtype){
if(showtype == "show"){
for(let st=0;st<mapdata.stationstandlist.group.children.length;st++){
mapdata.stationstandlist.group.children[st].add(mapdata.stationstandlist.textlist[st]);
}
}else{
for(let st=0;st<mapdata.stationstandlist.group.children.length;st++){
mapdata.stationstandlist.group.children[st].remove(mapdata.stationstandlist.textlist[st]);
}
}
};
this.rayswitch = function(value) {
this.raycasterswitch = value;
if (scope.helpbox) {
scene.remove( scope.helpbox );
scope.helpbox = null;
}
};
this.showtrainmsg = function(showtype){
if(showtype == "show"){
for(let st=0;st<mapdata.trainlisttest.textlist.length;st++){
mapdata.trainlisttest.list[mapdata.trainlisttest.textlist[st].tcode].children[0].add(mapdata.trainlisttest.textlist[st]);
}
}else{
for(let st=0;st<mapdata.trainlisttest.textlist.length;st++){
mapdata.trainlisttest.list[mapdata.trainlisttest.textlist[st].tcode].children[0].remove(mapdata.trainlisttest.textlist[st]);
}
}
};
this.showstationmsg = function(showtype) {
if (showtype == 'show') {
for (let st=0; st<mapdata.stationstandlist.group.children.length; st++) {
mapdata.stationstandlist.group.children[st].add(mapdata.stationstandlist.textlist[st]);
}
} else {
for (let st=0; st<mapdata.stationstandlist.group.children.length; st++) {
mapdata.stationstandlist.group.children[st].remove(mapdata.stationstandlist.textlist[st]);
}
}
};
this.restart = function(){
ReStart(mapdata);
};
this.showtrainmsg = function(showtype) {
if (showtype == 'show') {
for (let st=0; st<mapdata.trainlisttest.textlist.length; st++) {
mapdata.trainlisttest.list[mapdata.trainlisttest.textlist[st].tcode].children[0].add(mapdata.trainlisttest.textlist[st]);
}
} else {
for (let st=0; st<mapdata.trainlisttest.textlist.length; st++) {
mapdata.trainlisttest.list[mapdata.trainlisttest.textlist[st].tcode].children[0].remove(mapdata.trainlisttest.textlist[st]);
}
}
};
this.animateon = function(){
//controls.enabled = false;
scope.animateswitch = true;
};
this.restart = function() {
ReStart(mapdata);
};
this.animateoff = function(){
//controls.enabled = false;
scope.animateswitch = false;
};
this.animateon = function() {
// controls.enabled = false;
scope.animateswitch = true;
};
this.endsocket = function(){
scope.Subscribe.socketoff(scope.Subscribe.topic);
};
this.animateoff = function() {
// controls.enabled = false;
scope.animateswitch = false;
};
this.eventon = function(){
//raycaster交互模型点击事件
document.getElementById("jlsimulation").addEventListener( "mousedown", onselect, false );
//窗口自适应
window.addEventListener( 'resize', onWindowResized, false );
this.endsocket = function() {
scope.Subscribe.socketoff(scope.Subscribe.topic);
};
//controls.update();
};
this.eventon = function() {
// raycaster交互模型点击事件
document.getElementById('jlsimulation').addEventListener( 'mousedown', onselect, false );
// 窗口自适应
window.addEventListener( 'resize', onWindowResized, false );
this.eventoff = function(){
//console.log("off");
//raycaster交互模型点击事件
document.getElementById("jlsimulation").removeEventListener( "mousedown", onselect, false );
//窗口自适应
window.removeEventListener( 'resize', onWindowResized, false );
};
// controls.update();
};
this.updatecamera = function(mesh,type){
this.eventoff = function() {
// console.log("off");
// raycaster交互模型点击事件
document.getElementById('jlsimulation').removeEventListener( 'mousedown', onselect, false );
// 窗口自适应
window.removeEventListener( 'resize', onWindowResized, false );
};
if(type == "simulation"){
this.updatecamera = function(mesh, type) {
camera.position.x = mesh.position.x-300;
camera.position.y = 100;
camera.position.z = mesh.children[0].position.z;
//controls.target = new THREE.Vector3(mesh.position.x,0,mesh.children[0].position.z);
}
//console.log(mesh);
if(type == "station"){
camera.position.x = mesh.position.x;
camera.position.y = mesh.position.y+800;
camera.position.z = mesh.position.z+300;
//更新相机方向
//controls.target = new THREE.Vector3(mesh.position.x,mesh.position.y,mesh.position.z);
}
if(type == "train"){
camera.position.x = mesh.position.x;
camera.position.y = mesh.position.y+800;
camera.position.z = mesh.children[2].matrixWorld.elements[14]+300;
}
if (type == 'simulation') {
}
camera.position.x = mesh.position.x-300;
camera.position.y = 100;
camera.position.z = mesh.children[0].position.z;
// controls.target = new THREE.Vector3(mesh.position.x,0,mesh.children[0].position.z);
}
// console.log(mesh);
if (type == 'station') {
camera.position.x = mesh.position.x;
camera.position.y = mesh.position.y+800;
camera.position.z = mesh.position.z+300;
// 更新相机方向
// controls.target = new THREE.Vector3(mesh.position.x,mesh.position.y,mesh.position.z);
}
if (type == 'train') {
camera.position.x = mesh.position.x;
camera.position.y = mesh.position.y+800;
camera.position.z = mesh.children[2].matrixWorld.elements[14]+300;
}
};
function onWindowResized() {
//窗口自适应
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}
function onWindowResized() {
// 窗口自适应
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}
//三维交互点击事件函数
function onselect(event) {
if(event.button == "0"){
// 三维交互点击事件函数
function onselect(event) {
if (event.button == '0') {
//定义光线
let raycaster = new THREE.Raycaster();
//定义平面鼠标点击坐标
let mouse = new THREE.Vector2();
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
// 定义光线
const raycaster = new THREE.Raycaster();
// 定义平面鼠标点击坐标
const mouse = new THREE.Vector2();
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera( mouse, camera );
if(scope.helpbox){
scene.remove( scope.helpbox );
scope.helpbox = null;
}
raycaster.setFromCamera( mouse, camera );
if (scope.helpbox) {
scene.remove( scope.helpbox );
scope.helpbox = null;
}
if(scope.raycasterswitch == "stand"){
//从站台对象组获取点击目标
let intersects1 = raycaster.intersectObjects( mapdata.stationstandlist.textlist);
//获取最近处点击到的模型对象
if(intersects1[0]){
//遍历对象组获取对象坐标更新相机数据
for(let j=0;j<mapdata.stationstandlist.list.length;j++){
if(intersects1[0].object.name == mapdata.stationstandlist.list[j].mesh.code){
camera.position.x = mapdata.stationstandlist.list[j].mesh.position.x;
camera.position.y = mapdata.stationstandlist.list[j].mesh.position.y+200;
camera.position.z = mapdata.stationstandlist.list[j].mesh.position.z+300;
//更新相机方向
// controls.target = new THREE.Vector3(mapdata.stationstandlist.list[j].mesh.position.x,mapdata.stationstandlist.list[j].mesh.position.y,mapdata.stationstandlist.list[j].mesh.position.z);
// controls.update();
}
}
}
}
if (scope.raycasterswitch == 'stand') {
// 从站台对象组获取点击目标
const intersects1 = raycaster.intersectObjects( mapdata.stationstandlist.textlist);
// 获取最近处点击到的模型对象
if (intersects1[0]) {
// 遍历对象组获取对象坐标更新相机数据
for (let j=0; j<mapdata.stationstandlist.list.length; j++) {
if (intersects1[0].object.name == mapdata.stationstandlist.list[j].mesh.code) {
camera.position.x = mapdata.stationstandlist.list[j].mesh.position.x;
camera.position.y = mapdata.stationstandlist.list[j].mesh.position.y+200;
camera.position.z = mapdata.stationstandlist.list[j].mesh.position.z+300;
// 更新相机方向
// controls.target = new THREE.Vector3(mapdata.stationstandlist.list[j].mesh.position.x,mapdata.stationstandlist.list[j].mesh.position.y,mapdata.stationstandlist.list[j].mesh.position.z);
// controls.update();
}
}
}
}
if(scope.raycasterswitch == "train"){
let intersects = raycaster.intersectObjects( mapdata.trainlisttest.textlist);
if(intersects[0]){
for(let j=0;j<mapdata.trainlisttest.list.length;j++){
if(intersects[0].object.name == mapdata.trainlisttest.list[j].name){
camera.position.x = mapdata.trainlisttest.list[j].position.x;
camera.position.y = 200;
camera.position.z = mapdata.trainlisttest.list[j].children[2].matrixWorld.elements[14]+300;
}
}
}
}
if (scope.raycasterswitch == 'train') {
const intersects = raycaster.intersectObjects( mapdata.trainlisttest.textlist);
if (intersects[0]) {
for (let j=0; j<mapdata.trainlisttest.list.length; j++) {
if (intersects[0].object.name == mapdata.trainlisttest.list[j].name) {
camera.position.x = mapdata.trainlisttest.list[j].position.x;
camera.position.y = 200;
camera.position.z = mapdata.trainlisttest.list[j].children[2].matrixWorld.elements[14]+300;
}
}
}
}
if(scope.raycasterswitch == "section"){
//console.log(mapdata.sectionlist.sections.modellist);
let intersects = raycaster.intersectObjects( mapdata.sectionlist.sections.modellist,true);
if(intersects[0]){
if (scope.raycasterswitch == 'section') {
// console.log(mapdata.sectionlist.sections.modellist);
const intersects = raycaster.intersectObjects( mapdata.sectionlist.sections.modellist, true);
if (intersects[0]) {
scope.helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
scene.add( scope.helpbox );
}
}
scope.helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
scene.add( scope.helpbox );
}
}
if(scope.raycasterswitch == "signal"){
if (scope.raycasterswitch == 'signal') {
let intersects = raycaster.intersectObjects( mapdata.signallist.group.children,true);
const intersects = raycaster.intersectObjects( mapdata.signallist.group.children, true);
if(intersects[0]){
scope.helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
scene.add( scope.helpbox );
}
}
if (intersects[0]) {
scope.helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
scene.add( scope.helpbox );
}
}
if(scope.raycasterswitch == "switch"){
let intersects = raycaster.intersectObjects( mapdata.sectionlist.switchs.modellist,true);
if (scope.raycasterswitch == 'switch') {
const intersects = raycaster.intersectObjects( mapdata.sectionlist.switchs.modellist, true);
if(intersects[0]){
scope.helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
if (intersects[0]) {
scope.helpbox = new THREE.BoxHelper( intersects[0].object, 0xff0000 );
scene.add( scope.helpbox );
}
}
}
scene.add( scope.helpbox );
}
}
}
}
}

View File

@ -93,12 +93,13 @@ export function Jl3dDriving(jlmap3d) {
//
//
// }
if (data.type == 'Simulation_Driver_Change') {
drivingcode = data.body.code;
jlmap3d.updatedrivingcode( data.body.code);
}
if(data.type == 'Simulation_Drive_Data_Routing'){
jlmap3d.updatedrivedata(data.body);
}
if (data.type == 'Simulation_TrainSpeed') {
if (trainlisttest) {
@ -167,14 +168,14 @@ export function Jl3dDriving(jlmap3d) {
} else {
syncdata.percent = sectionlist.sections.datalist[data.body[i].sectionCode].lstop/trainlisttest.list[code].len;
}
scope.teststomp.send('/app/topic/simulation/wgu3d', syncdata);
//scope.teststomp.send('/app/topic/simulation/wgu3d', syncdata);
} else {
if (data.body[i].directionType == '02') {
syncdata.percent = trainlisttest.list[code].progress;
} else {
syncdata.percent = 1 - trainlisttest.list[code].progress;
}
scope.teststomp.send('/app/topic/simulation/wgu3d', syncdata);
//scope.teststomp.send('/app/topic/simulation/wgu3d', syncdata);
}
if (data.body[i].parkRemainTime>0) {

View File

@ -37,7 +37,7 @@ import {Stats} from '@/jlmap3d/main/lib/stats.min.js';
var clock = new THREE.Clock();
export function JLmap3d(dom, data,skinStyle) {
export function JLmap3d(dom, data,skinCode) {
let scope = this;
@ -89,7 +89,7 @@ export function JLmap3d(dom, data,skinStyle) {
this.Subscribe.socketon(scope.Subscribe.topic);
//初始化加载数据和模型
getPublish3dMapDetail(skinStyle).then(netdata => {
getPublish3dMapDetail(skinCode).then(netdata => {
ModelLoad(data,scope,netdata.data,mapdata,camera,controls,scene);
});
//

View File

@ -564,6 +564,7 @@ THREE.FBXLoader = ( function () {
if ( parameters.opacity < 1.0 ) {
parameters.transparent = true;
parameters.alphaTest = 0.1;
}
if ( materialNode.ReflectionFactor ) {
@ -634,6 +635,7 @@ THREE.FBXLoader = ( function () {
case 'TransparentColor':
parameters.alphaMap = self.getTexture( textureMap, child.ID );
parameters.transparent = true;
parameters.alphaTest = 0.1;
break;
case 'AmbientColor':

View File

@ -834,7 +834,7 @@
* @param {number} polygonVertexIndex - Index of vertex in draw order (which index of the index buffer refers to this vertex).
* @param {number} polygonIndex - Index of polygon in geometry.
* @param {number} vertexIndex - Index of vertex inside vertex buffer (used because some data refers to old index buffer that we don't use anymore).
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to access data.
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to route data.
* @returns {number[]}
*/
function getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {
@ -848,7 +848,7 @@
* @param {number} polygonVertexIndex - Index of vertex in draw order (which index of the index buffer refers to this vertex).
* @param {number} polygonIndex - Index of polygon in geometry.
* @param {number} vertexIndex - Index of vertex inside vertex buffer (used because some data refers to old index buffer that we don't use anymore).
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to access data.
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to route data.
* @returns {number[]}
*/
Direct: function ( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {
@ -862,7 +862,7 @@
* @param {number} polygonVertexIndex - Index of vertex in draw order (which index of the index buffer refers to this vertex).
* @param {number} polygonIndex - Index of polygon in geometry.
* @param {number} vertexIndex - Index of vertex inside vertex buffer (used because some data refers to old index buffer that we don't use anymore).
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to access data.
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to route data.
* @returns {number[]}
*/
IndexToDirect: function ( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {
@ -881,7 +881,7 @@
* @param {number} polygonVertexIndex - Index of vertex in draw order (which index of the index buffer refers to this vertex).
* @param {number} polygonIndex - Index of polygon in geometry.
* @param {number} vertexIndex - Index of vertex inside vertex buffer (used because some data refers to old index buffer that we don't use anymore).
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to access data.
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to route data.
* @returns {number[]}
*/
Direct: function ( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {
@ -895,7 +895,7 @@
* @param {number} polygonVertexIndex - Index of vertex in draw order (which index of the index buffer refers to this vertex).
* @param {number} polygonIndex - Index of polygon in geometry.
* @param {number} vertexIndex - Index of vertex inside vertex buffer (used because some data refers to old index buffer that we don't use anymore).
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to access data.
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to route data.
* @returns {number[]}
*/
IndexToDirect: function ( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {
@ -914,7 +914,7 @@
* @param {number} polygonVertexIndex - Index of vertex in draw order (which index of the index buffer refers to this vertex).
* @param {number} polygonIndex - Index of polygon in geometry.
* @param {number} vertexIndex - Index of vertex inside vertex buffer (used because some data refers to old index buffer that we don't use anymore).
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to access data.
* @param {{datasize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}} infoObject - Object containing data and how to route data.
* @returns {number[]}
*/
IndexToDirect: function ( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {

View File

@ -99,11 +99,23 @@ export function StationStandList() {
textt.dispose();
}else{
for(let j=0;j<assetloader.modellist.length;j++){
if(assetloader.modellist[j].id == netstand[map[k].index].modelid){
num = j;
for(let netnum =0;netnum <netstand.length;netnum++){
if(netstand[netnum].code == k ){
for(let j=0;j<assetloader.modellist.length;j++){
if(assetloader.modellist[j].id == netstand[netnum].modelid){
num = j;
map[k].index = netnum;
j = assetloader.modellist.length;
}
}
netnum = netstand.length;
}
}
}
map[k].mesh = assetloader.modellist[num].mesh.clone(true);
let newclip = assetloader.modellist[num].mesh.animations[ 0 ];

View File

@ -6,6 +6,6 @@ const mapDeviceStyle = {
'05': 'batong_01' // 暂时没有画北京八通线
};
export function selectSkinStyle(code) {
return Object.assign({}, require(`./skinStyle/${mapDeviceStyle[code || '02']}`).default);
export function selectSkinCode(code) {
return Object.assign({}, require(`./skinCode/${mapDeviceStyle[code || '02']}`).default);
}

View File

@ -0,0 +1,16 @@
import defaultStyle from '../defaultStyle';
import deviceType from '../../constant/deviceType';
class SkinCode extends defaultStyle {
constructor() {
super();
this[deviceType.Link] = {
lineWidthColor: '#FFFFFF', // line 颜色
linkWidth: 4.4, // link 宽度
linkColor: '#3F3F3F', // link 线条颜色
linkTextColor: '#FFFFFF' // link 字体颜色
};
}
}
export default new SkinCode();

View File

@ -0,0 +1,584 @@
import defaultStyle from '../defaultStyle';
import deviceType from '../../constant/deviceType';
class SkinCode extends defaultStyle {
constructor() {
super();
this[deviceType.Link] = {
lineWidthColor: '#FFFFFF', // line 颜色
linkWidth: 4.4, // link 宽度
linkColor: '#3F3F3F', // link 线条颜色
linkTextColor: '#FFFFFF' // link 字体颜色
};
this[deviceType.Section] = {
active: {
routeColor: false // 进路触发颜色
},
text: { // 物理区段名称
show: true, // 物理区段名称显示
position: -1, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 11, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
logicText: { // 逻辑区段名称
show: false, // 逻辑区段名称显示
position: -1, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 11, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
standText: { // 站台轨名称
show: true, // 站台轨名称显示
opposite: true, // 对称相反
position: 1, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 11, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
reentryText: { // 折返轨名称
show: true, // 折返轨名称显示
opposite: true, // 对称相反
position: 1, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 11, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
transferText: { // 转换轨名称
show: true, // 转换轨名称显示
opposite: true, // 对称相反
position: 1, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 11, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
destinationText: { // 目的码名称
show: true, // 目的码名称显示
position: 1, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 11, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'bold', // 字体粗细
fontColor: 'yellow', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
mouseOverStyle: {
borderColor: '#fff',
borderBackgroundColor: '#22DFDF',
textShadowColor: '#22DFDF'
},
line: {
width: 5, // 区段宽度
beyondWidth: 0, // 区段宽超出宽度
invadeColor: '#EF0C08', // 区段侵入颜色
spareColor: '#606060', // 区段空闲颜色
communicationOccupiedColor: '#FF0000', // 区段通信车占用颜色
unCommunicationOccupiedColor: '#800080', // 区段非通讯车占用颜色
routeLockColor: '#FFFFFF', // 区段路由锁定颜色
faultLockColor: '#006400', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
protectionLockedColor: '#FEFF00', // 保护区段锁闭(未用)
blockColor: '#800080', // 区段封锁颜色
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#FFFF00', // 区段保护锁闭
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: '#C0C0C0' // 逻辑区段名称颜色 (未用)
},
axle: {
radius: 3, // 计轴 半径
distance: 5, // 计轴和区段之间的距离 (未用)
color: '#C0C0C0', // 区段计轴颜色
resetColor: '#00FFFF', // 区段计轴预复位颜色
Failure: '#E6A23C' // #FFFF00 计轴失效
},
speedLimit: { // 限速元素
width: 1, // 限速线的宽度
distance: 5, // 限速线距离区段距离
lineColor: '#FFFF00', // 限速线颜色
nameShow: false // 名称显示
},
separator: {
z: 1, // 分割符层级
width: 1.5, // 分隔符宽度
endWidth: 1.5, // 尽头分隔符宽度
endColor: '#7F7F7F', // 尽头分隔符颜色
color: '#7F7F7F' // 区段边界符颜色
}
};
this[deviceType.Signal] = {
distance: 0, // 设备距离区段的距离
post: {
standardColor: '#5578B6', // 灯灯柱颜色
standardWidth: 1.5 // 灯柱宽度
},
text: {
show: true, // 信号机名称显示
distance: 3, // 文字和灯杆的距离
isNoRotation: true, // 是否禁止旋转
isAlignCenter: false, // 信号字体对其方式
fontSize: 11, // 信号机名称字体大小
fontWeight: 'bold', // 信号机名称字体粗细
defaultColor: '#C0C0C0', // 信号灯字体默认色
blockColor: '#EF0C08', // 信号灯字体锁定颜色
checkColor: '#00FF00' // 信号字体
},
lamp: {
stopWidth: 2, // 禁止线宽度
borderVariable: true, // 信号灯边框可变
borderWidth: 0.5, // 信号灯边框线宽度
borderColor: '#3149C3', // 信号灯边框线颜色
radiusR: 5, // 信号机宽度
blockColor: '#EF0C08', // 信号灯锁闭
grayColor: '#7F7F7F', // 信号灯灰色
redColor: '#FF0000', // 信号灯红色
greenColor: '#00FF00', // 信号灯绿色
yellowColor: '#FFFF00', // 信号灯黄色
whiteColor: '#FFFFFF', // 信号灯白色
blueColor: '#0070C0' // 信号灯蓝色
},
route: {
direction: false, // 自动进路方向
offset: { x: 1, y: -2 }, // 自动进路偏移量
routeColor: '#00FF00' // 自动进路
},
auto: {
direction: true, // 自动通过方向
offset: { x: 4, y: 0}, // 自动通过偏移量
width: 5, // 自动宽度
autoRoute: '#00FF00', // 自动进路
autoTrigger: '#FFFF00', // 自动触发
manualControl: '#FFFF00', // 人工控制
outConflict: '#C00808' // 出车冲突
},
delay: {
direction: false, // 延时解锁方向
offset: { x: 0, y: -5}, // 延时解锁偏移量
fontSize: 9, // 延迟解锁字体大小
fontColor: '#FF0000', // 延迟解锁颜色
fontWeight: 'bold' // 字体粗细
},
button: {
distance: 5, // 信号灯按钮距离区段的距离
borderDashColor: '#FFFFFF', // 信号灯按钮边线
buttonColor: 'darkgreen', // 信号灯按钮颜色
buttonLightenColor: '#E4EF50' // 信号灯按钮闪烁颜色
},
mouseOverStyle: {
borderLineColor: '#FFFFFF',
borderLineDash: [3, 3],
nameBackgroundColor: '#22DFDF',
lampBorderLineColor: '#22DFDF'
}
};
this[deviceType.StationStand] = {
common: { // 通用属性
textFontSize: 8 // 站台默认字体大小
},
safetyDoor: { // 屏蔽门
height: 1.6, // 站台屏蔽门高度
distance: 9, // 站台和屏蔽门之间的距离
defaultColor: '#00FF00', // 屏蔽门默认颜色
splitDoorColor: '#F61107' // 屏蔽门切除颜色
},
stand: { // 站台
headFontSize: 8, // 站台首端字体大小
spareColor: '#606060', // 站台空闲颜色
stopColor: '#FEFE00', // 站台列车停站颜色
jumpStopColor: '#9A99FF', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue' // 站台指定列车跳停颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
offset: {x: 0, y: 0}, // 站台紧急关闭偏移量
closeColor: '#F61107' // 站台紧急关闭颜色
},
reentry: { // 站台折返策略
position: 0, // 折返方向
offset: {x: -16, y: 18}, // 折返偏移量
noHumanColor: '#0F16DA', // 站台无人折返
autoChangeEndsColor: '#0BF400' // 站台自动换端
},
detainCar: { // 扣车
text: 'H', // 扣车显示内容
position: 1, // 扣车方向
offset: {x: -8, y: 13}, // 扣车偏移量
trainColor: '#E4EF50', // 车站扣车颜色
centerTrainColor: '#FFFFFF', // 中心扣车颜色
andCenterTrainColor: '#F61107', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50' // 车站扣除文字颜色
},
stopTime: { // 停站时间
position: 1, // 运行时间方向
offset: {x: -8, y: 3}, // 运行时间偏移量
textColor: '#FFFFFF' // 停站时间字体颜色
},
level: { // 运行等级
position: 1, // 运行等级方向
offset: {x: -8, y: 22}, // 运行等级偏移量
textColor: '#FFFFFF' // 停站等级字体颜色
},
mouseOverStyle: {
borderLineColor: '#FFFFFF',
borderLineDash: [3, 3]
}
};
this[deviceType.StationControl] = {
text: {
distance: 2, // 灯和文字之间的距离
fontSize: 10, // 控制模式字体大小
fontFormat: 'consolas', // 控制模式字体格式
fontColor: '#ffffff', // 控制模式字体颜色
fontWeight: 'normal', // 控制模式字体粗细
textAlign: 'middle', // 控制模式水平对齐
textVerticalAlign: 'top' // 控制模式垂直对齐
},
lamp: {
count: 3, // 控制模式灯个数
offset: { x: 20, y: 0 }, // 偏移量
radiusR: 6, // 控制模式灯的半径
distance: 36, // 控制模式之间灯之间的距离
grayColor: '#7F7F7F', // 控制模式灰色
greenColor: '#00FF00', // 控制模式绿色
redColor: '#FF0000', // 控制模式红色
yellowColor: '#FFFF00', // 控制模式黄色
emergencyControlShow: true, // 紧急站控显示
centerControlShow: true, // 中控显示
substationControlShow: true, // 站控按钮显示
turnedAroundControlShow: false // 按图折返显示
},
arrow: {
show: false // 控制模式箭头显隐
},
mouseOverStyle: { // 鼠标悬浮样式
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top'
}
};
this[deviceType.StationCounter] = {
text: {
distance: 2, // 计数器名称和文字的距离
fontColor: '#FFFFFF', // 计数器字体颜色
borderColor: '#E4EF50' // 计数器边框颜色
}
};
this[deviceType.StationDelayUnlock] = {
text: {
distance: 3, // 延迟解锁和设备之间的距离
fontColor: '#FFFFFF', // 延时解锁字体颜色
borderColor: '#FFFFFF' // 延迟解锁边框颜色
}
};
this[deviceType.Station] = {
text: {
show: true // 公里标名称显示
},
kmPostShow: true, // 公里标显示
kilometerPosition: 'down', // 公里标位置
fontWeight: 'bold' // 文字错细
};
this[deviceType.Switch] = {
text: {
show: true, // 道岔名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
offset: {x: -15, y: -10}, // 道岔名称与区段距离
fontSize: 10, // 字体大小
fontColor: '#C0C0C0', // 道岔名称颜色
fontWeight: 'normal', // 字体粗细
borderColor: '#FE0000', // 道岔边框颜色
lossColor: '#FFFFFF', // 道岔失去颜色
locateColor: '#00FF00', // 道岔定位颜色
inversionColor: '#9C9D09', // 道岔反位颜色
monolockColor: '#870E10' // 道岔单锁颜色
},
core: {
length: 6 // 道岔单边长度
},
monolock: { // 道岔单锁配置
locationColor: '#870E10', // 道岔单锁定位颜色 (红色)
inversionColor: '#870E10', // 道岔单锁反位颜色 (红色)
rectShow: false // 道岔单锁 矩形框是否显示
},
block: { // 道岔封锁配置
nameBorderShow: true, // 道岔名称是否有包围框 显示
contentRectShow: false // 道岔封锁显示
},
mouseOverStyle: {
borderBackgroundColor: '#22DFDF', // 边框背景色
borderColor: '#fff', // 边框颜色
textShadowColor: '#22DFDF' // 字体阴影颜色
}
};
this[deviceType.LcControl] = {
text: {
fontSize: 10, // 灯字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 灯大小
controlColor: '#FFFF00' // 灯颜色
},
mouseOverStyle: {
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top',
arcColor: '#00FFFF',
textColor: '#000000'
}
};
this[deviceType.ZcControl] = {
text: {
fontSize: 10, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 灯大小
controlColor: '#00FF00' // 灯颜色
},
mouseOverStyle: {
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top',
arcColor: '#00FFFF',
textColor: '#000000'
}
};
this[deviceType.LimitControl] = {
text: {
fontSize: 10, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 灯大小
controlColor: '#ECE9D8' // 灯颜色
},
mouseOverStyle: {
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top',
textColor: '#000000',
arcColor: '#00FFFF'
}
};
this[deviceType.Line] = {
lineColor: '#FFFFFF' // 线条颜色
};
this[deviceType.TrainWindow] = {
lineColor: '#FFF', // 车次窗颜色
lineDash: [3, 3], // 车次窗虚线间隔
lineWidth: 1, // 车次窗线宽
trainWindowSmooth: 0.01 // 车次窗矩形圆滑程度
};
this[deviceType.Train] = {
trainBody: {
trainBodyLineWidth: 0.1, // 车身line宽
changeTrainWidth: false, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
specialTrainType: [
{
type: '03',
serviceNumber: 'M0',
nameFormat: 'serviceNumber:groupNumber'
},
{
type: '02',
nameFormat: 'targetCode:groupNumber'
}
], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
upPadding: 4, // 上边距离
trainBodyFillColor: '#725A64', // 列车车身填充颜色
trainNameFormat: 'serviceNumber:tripNumber'// 列车显示格式
},
hsda: {
lrPaddingHSDA: 3, // HSDA两边间隔
upPaddingHSDA: 4, // HSDA上边距离
trainHSDATextFontSize: 9, // 列车HDSA字号
textHContent: 'H', // textH文本
textSContent: 'S', // textS文本
textDContent: 'D', // textD文本
textAContent: 'A'// textA文本
},
trainNumber: {
trainNumberOffset: { x: 0, y: 1}// 目的地码偏移量
},
trainServer: {
serviceNumberPrefix: '00', // 服务号(表号)前缀
defaultServiceNumber: 'AA', // 默认服务号(表号)
trainServerOffset: { x: 4, y: 4}// 列车服务号偏移
},
trainTarget: {
tripNumberPrefix: '000', // 车次号前缀
defaultTripNumber: 'DDD', // 默认车次号2
trainTargetOffset: { x: 36, y: 4}, // 列车车次号偏移
trainTargetTextAlign: 'left'// 车次号文字显示位置
},
trainTargetNumber: {
trainTargetNumberOffset: {x: 0, y: 0}// 车组号偏移量
},
trainHead: {
trainMoreLength: 0, // 列车车头比车身高出的长度,上下相比车体伸出去的边框
trainHeadTriangleFirst: { x: 7, y: 1}, // 列车车头三角坐标1偏移量
trainHeadTriangleSecond: { x: 13, y: 10}, // 列车车头三角坐标2偏移量
trainHeadTriangleThird: { x: 7, y: 19}, // 列车车头三角坐标3偏移量
trainHeadRectHeight: 20, // 列车车头矩形高度
trainConntWidth: 3, // 列车竖杠的宽度
trainHeadFillColor: '#000000'// 列车车头矩形填充颜色
},
common: {
trainHeight: 20, // 列车高度
trainHeadDistance: 4, // 列车和车头之间的间距
trainWidth: 40, // 列车长度
trainTextFontSize: 12, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
haveTextHSDA: true, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
haveTrainBorder: false, // 是否需创建trainBorder对象
textOffset: 4, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 8, // 计算列车长度时--列车长比text多出尺寸
useSelfFormat: true, // 使用配置项的nameFormat
useSelfText: true // 使用配置项的字体大小
},
trainStatusStyle: {
destinationStatus: [
{status: '01', showColor: '#FFFFFF'},
{status: '02', showColor: '#00FF00'},
{status: '03', showColor: '#A0522D'},
{status: '04', showColor: '#FFFF00'}
], // 目的地状态 01准点 02早点 03晚点 04头码车
defaultDestinationColor: '#FFFFFF', // 默认目的地状态显示颜色
destinationStatusSetText: 'trainTarget', // 目的地状态设置的对应哪个text的颜色
directionType: [
{
type: '01',
lineLShow: true,
lineRShow: true,
arrowLShow: false,
arrowRShow: false
},
{
type: '02',
lineLShow: false,
lineRShow: true,
arrowLShow: false,
arrowRShow: true
},
{
type: '03',
lineLShow: true,
lineRShow: false,
arrowLShow: true,
arrowRShow: false
}
], // 列车运行方向状态类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
directionStopType: [
{type: '01', lineLShow: false, lineRShow: false},
{type: '02', lineLShow: false, lineRShow: true},
{type: '03', lineLShow: true, lineRShow: false}
], // 列车停止方向类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
runModeStatus: [
{
status: '01',
trainLColor: '#FFFFFF',
trainRColor: '#FFFFFF'
},
{
status: '02',
trainLColor: '#00FF00',
trainRColor: '#00FF00'
},
{
status: '03',
trainLColor: '#FFFF00',
trainRColor: '#FFFF00'},
{
status: '04',
trainLColor: '#A0522D',
trainRColor: '#A0522D'
},
{
status: '05',
trainLColor: '#A0522D',
trainRColor: '#A0522D'
}
], // 列车运行模式对应车头颜色 01未知 02 ATO自动驾驶模式AM 03 ATP监控下的人工驾驶模式CM 04 限制人工驾驶模式RM 05 非限制人工驾驶模式RM
runControlStatus: [
{status: '01', hShow: false, sShow: false},
{status: '02', hShow: true, sShow: false},
{status: '03', hShow: false, sShow: true}
], // 设置运行控制状态类型 01正常 02扣车 03停跳
doorStatus: [
{status: '01', dShow: false},
{status: '02', dShow: true}
], // 设置车门状态类型 01关门 02开门
communicationStatus: [
{status: '01', trainColor: '#725A64'},
{status: '02', trainColor: '#C0C0C0'}
], // 设置通信状态 01正常 02故障
alarmStatus: [
{status: '01', aShow: false},
{status: '02', aShow: true}
], // 设置报警状态 01不报警 02报警
serverNoType: [
{type: '01', showColor: '#FFFFFF'},
{type: '02', showColor: '#FFF000'}
], // 服务号状态类型 01显示服务号 计划车 02显示车组号: 头码车与人工车
defaultServerNoColor: '#FFFFFF' // 默认服务号状态显示颜色
}
};
}
}
export default new SkinCode();

View File

@ -0,0 +1,578 @@
import defaultStyle from '../defaultStyle';
import deviceType from '../../constant/deviceType';
class SkinCode extends defaultStyle {
constructor() {
super();
this[deviceType.Link] = {
lineWidthColor: '#FFFFFF', // line 颜色
linkWidth: 4.4, // link 宽度
linkColor: '#3F3F3F', // link 线条颜色
linkTextColor: '#FFFFFF' // link 字体颜色
};
this[deviceType.Section] = {
active: {
routeColor: true // 进路触发颜色
},
text: {
show: true, // 物理区段名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 10, // 文字离区段距离
fontSize: 12, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
logicText: {
show: false, // 逻辑区段名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 12, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
standText: {
show: true, // 站台轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 24, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
reentryText: {
show: true, // 折返轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 36, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
transferText: {
show: true, // 转换轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 36, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
destinationText: {
show: true, // 目的码名称显示
opposite: true, // 对称相反
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 12, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'bold', // 字体粗细
fontColor: 'yellow', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
line: {
width: 5, // 区段宽度
beyondWidth: 0, // 区段宽超出宽度
invadeColor: '#FFFFFF', // 区段侵入颜色
spareColor: '#5578B6', // 区段空闲颜色
communicationOccupiedColor: '#FF00FF', // 区段通信车占用颜色
unCommunicationOccupiedColor: '#DE310C', // 区段非通讯车占用颜色
routeLockColor: '#FFFFFF', // 区段路由锁定颜色
faultLockColor: '#006400', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
protectionLockedColor: '#FFFFFF', // 保护区段锁闭
blockColor: '#00FF00', // 区段封锁颜色
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#FFFF00', // 区段保护锁闭
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: '#C0C0C0' // 逻辑区段名称颜色 (未用)
},
axle: {
radius: 3, // 计轴 半径
distance: 5, // 计轴和区段之间的距离 (未用)
color: '#C0C0C0', // 区段计轴颜色
resetColor: '#00FFFF', // 区段计轴预复位颜色
Failure: '#E6A23C' // #FFFF00 计轴失效
},
speedLimit: { // 限速元素
width: 1, // 限速线的宽度
distance: 5, // 限速线距离区段距离
lineColor: '#C0C000', // 限速线颜色 (黄色透明光)
nameBackground: '#C0C000', // 限速名称背景颜色
nameShow: true, // 名称显示
nameNumberColor: '#C00808', // 限速值颜色
nameNumberFontSize: 11, // 限速值大小
kilometerColor: '#fff', // 公里标颜色
kilometerFontSize: 8, // 公里标大小
drogueWidth: 19, // 浮标宽度
drogueHeight: 12 // 浮标高度
},
separator: {
z: 6, // 分割符层级
width: 1.5, // 分隔符宽度
endWidth: 1.5, // 尽头分隔符宽度
endColor: '#FFFFFF', // 尽头分隔符颜色
color: '#FFFFFF' // 区段边界符颜色
},
shuttleBack: { // 折返进路 (存在此对象 显示折返箭头)
distance: 5 // 限速线距离区段距离
}
};
this[deviceType.Signal] = {
distance: 10, // 设备距离区段的距离
post: {
standardColor: '#FFFFFF', // 灯柱颜色
standardWidth: 2 // 灯柱宽度
},
text: {
show: true, // 信号机名称显示
distance: 3, // 文字和灯杆的距离
isNoRotation: true, // 是否禁止旋转
isAlignCenter: false, // 信号字体对其方式
fontSize: 11, // 信号机名称字体大小
fontWeight: 'bold', // 信号机名称字体粗细
defaultColor: '#FFFFFF', // 信号灯字体默认色
blockColor: '#EF0C08', // 信号灯字体锁定颜色
checkColor: '#00FF00' // 信号保护区段检查颜色
},
lamp: {
borderVariable: true, // 信号灯边框可变
stopWidth: 2, // 禁止线宽度
borderWidth: 2, // 信号灯边框线宽度
borderColor: '#3149C3', // 信号灯边框线颜色
radiusR: 6, // 信号灯半径
blockColor: '#EF0C08', // 信号灯锁闭
grayColor: '#7F7F7F', // 信号灯灰色
redColor: '#FF0000', // 信号灯红色
greenColor: '#00FF00', // 信号灯绿色
yellowColor: '#FFFF00', // 信号灯黄色
whiteColor: '#FFFFFF', // 信号灯白色
blueColor: '#0070C0' // 信号灯蓝色
},
route: {
direction: true, // 自动通过方向
offset: { x: 4, y: 0}, // 自动通过偏移量
routeColor: '#00FF00' // 自动进路
},
auto: {
direction: false, // 自动通过方向
offset: { x: -4, y: 0}, // 自动通过偏移量
width: 5, // 自动宽度
manualControl: '#FFFF00', // 人工控制
autoRoute: '#00FF00', // 自动进路
autoTrigger: '#FFFF00', // 自动触发
outConflict: '#C00808' // 出车冲突
},
delay: {
direction: false, // 延时解锁方向
offset: { x: -5, y: 0}, // 延时解锁偏移量
fontSize: 11, // 延迟解锁字体大小
fontColor: '#C00808', // 延迟解锁颜色
fontWeight: 'bold' // 字体粗细
},
button: {
distance: 5, // 信号灯按钮距离区段的距离
borderDashColor: '#FFFFFF', // 信号灯按钮边线
buttonColor: 'darkgreen', // 信号灯按钮颜色
buttonLightenColor: '#E4EF50' // 信号灯按钮闪烁颜色
}
};
this[deviceType.StationStand] = {
common: { // 通用属性
textFontSize: 10, // 站台默认字体大小
haveJumpShow: true // 站台是否有列车停跳显示
},
safetyDoor: { // 屏蔽门
height: 3, // 站台屏蔽门高度
distance: 8, // 站台和屏蔽门之间的距离
defaultColor: '#00FF00', // 屏蔽门默认颜色
splitDoorColor: '#C00808' // 屏蔽门切除颜色
},
stand: { // 站台
headFontSize: 10, // 站台首端字体大小
spareColor: '#808080', // 站台空闲颜色
stopColor: '#FFF000', // 站台列车停站颜色
jumpStopColor: '#808080', // 站台跳停颜色
designatedJumpStopColor: '#808080' // 站台指定列车跳停颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
offset: {x: 0, y: 40}, // 站台紧急关闭偏移量
closeColor: '#F61107' // 站台紧急关闭颜色
},
reentry: { // 站台折返策略
position: 0, // 折返方向
offset: {x: -16, y: 20}, // 折返偏移量
noHumanColor: '#0F16DA', // 站台无人折返
autoChangeEndsColor: '#0BF400' // 站台自动换端
},
detainCar: { // 扣车
text: '扣', // 扣车显示内容
position: -1, // 扣车方向
offset: {x: -8, y: -20}, // 扣车偏移量
trainColor: '#FFFF00', // 车站扣车颜色
centerTrainColor: '#C0C0C0', // 中心扣车颜色
andCenterTrainColor: '#C0C0C0', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50' // 车站扣除文字颜色
},
stopTime: { // 停站时间
position: 1, // 运行时间方向
offset: {x: -8, y: -4}, // 运行时间偏移量
textColor: '#C0C0C0' // 停站时间字体颜色
},
jump: {
text: '跳', // 停跳显示内容
position: -1, // 停跳方向
offset: {x: -8, y: 0},
textColor: '#0000FF', // 停跳文字颜色
arcColor: '#0000FF', // 停跳圆圈颜色
fillColor: 'rgba(0,0,0,0)', // 透明填充颜色
r: 8 // 圆半径大小
},
level: { // 运行等级
position: 1, // 运行等级方向
offset: {x: -8, y: 30}, // 运行等级偏移量
textColor: '#FFF000' // 停站等级字体颜色
}
};
this[deviceType.StationControl] = {
text: {
distance: 2, // 灯和文字之间的距离
fontSize: 11, // 字体大小
fontFormat: 'consolas', // 字体格式
fontColor: '#ffffff', // 字体颜色
fontWeight: 'normal', // 字体粗细
textAlign: 'middle', // 字体水平对齐
textVerticalAlign: 'top' // 字体垂直对齐
},
lamp: {
count: 4, // 控制模式的个数
offset: {x: 0, y: 0}, // 偏移量
radiusR: 6, // 控制模式灯的半径
distance: 36, // 控制模式之间灯之间的距离
grayColor: '#7F7F7F', // 控制模式灰色
greenColor: '#00FF00', // 控制模式绿色
redColor: '#FF0000', // 控制模式红色
yellowColor: '#FFFF00', // 控制模式黄色
emergencyControlShow: true, // 紧急站控显示
centerControlShow: true, // 中控显示
substationControlShow: true, // 站控按钮显示
turnedAroundControlShow: true // 按图折返显示
},
arrow: {
show: false // 控制模式箭头显隐
}
};
this[deviceType.StationCounter] = {
text: {
distance: 2, // 计数器名称和文字的距离
fontColor: '#FFFFFF', // 计数器字体颜色
borderColor: '#E4EF50' // 计数器边框颜色
}
};
this[deviceType.StationDelayUnlock] = {
text: {
distance: 3, // 延迟解锁和设备之间的距离
fontColor: '#FFFFFF', // 延时解锁字体颜色
borderColor: '#FFFFFF' // 延迟解锁边框颜色
}
};
this[deviceType.Station] = {
text: {
show: true // 公里标名称显示
},
kmPostShow: false, // 公里标显示
kilometerPosition: 'up' // 公里标朝向
};
this[deviceType.Switch] = {
text: {
show: true, // 道岔名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
offset: {x: 5, y: -10}, // 道岔名称与区段距离
fontSize: 11, // 字体大小
fontColor: '#fff', // 道岔名称颜色
fontWeight: 'normal', // 字体粗细
borderColor: '#FE0000', // 道岔边框颜色
lossColor: '#C00808', // 道岔失去颜色
locateColor: '#00FF00', // 道岔定位颜色
inversionColor: '#FFFF00', // 道岔反位颜色
monolockColor: '#FFFFFF' // 道岔单锁颜色
},
core: {
length: 6 // 道岔单边长度
},
monolock: { // 道岔单锁配置
locationColor: '#00FF00', // 道岔单锁'定位'颜色 (绿色)
inversionColor: '#FFFF00', // 道岔单锁'反位'颜色 (黄色)
rectShow: true, // 道岔单锁 矩形框是否显示
rectWidth: 18, // 矩形框 宽高
rectBorderColor: '#fff' // 矩形边框颜色
},
block: { // 道岔封锁配置
nameBorderShow: false, // 道岔名称是否有包围框 显示
contentRectShow: true, // 道岔封锁显示
contentRectColor: 'red' // 道岔封锁边框颜色
}
};
this[deviceType.LcControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#FFFF00' // 控制灯颜色
}
};
this[deviceType.ZcControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#00FF00' // 控制灯颜色
}
};
this[deviceType.LimitControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#ECE9D8' // 控制灯颜色
}
};
this[deviceType.Line] = {
lineColor: '#FFFFFF' // 线条颜色
};
this[deviceType.TrainWindow] = {
lineColor: '#4DD43F', // 车次窗颜色
lineDash: null, // 车次窗虚线间隔
lineWidth: 1, // 车次窗线宽
trainWindowSmooth: 0 // 车次窗矩形圆滑程度
};
this[deviceType.Train] = {
trainBody: {
trainBodyLineWidth: 1, // 车身line宽
changeTrainWidth: false, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
specialTrainType: [
{
type: '03',
serviceNumber: '---',
nameFormat: 'groupNumber:serviceNumber'
},
{
type: '03',
nameFormat: 'serviceNumber:trainNumber'
}
], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
upPadding: 4, // 上边距离
trainBodyFillColor: '#000099', // 列车车身填充颜色
trainNameFormat: 'serviceNumber:targetCode'// 列车显示格式
},
hsda: {
lrPaddingHSDA: 3, // HSDA两边间隔
upPaddingHSDA: 4, // HSDA上边距离
trainHSDATextFontSize: 9, // 列车HDSA字号
textHContent: '扣', // textH文本
textSContent: '跳', // textS文本
textDContent: '门', // textD文本
textAContent: '警' // textA文本
},
trainNumber: {
targetCodePrefix: '000', // 目的地码前缀
defaultTargetCode: 'DDD', // 默认目的地码
trainTargetTextAlign: 'left', // 目的地码文字显示位置
trainNumberOffset: { x: 24, y: 4}// 目的地码偏移量
},
trainServer: {
serviceNumberPrefix: '000', // 服务号(表号)前缀
defaultServiceNumber: 'TTT', // 默认服务号(表号)
defaultServerNoColor: '#FFFFFF', // 默认服务号状态显示颜色
trainServerOffset: { x: 4, y: 4} // 列车服务号偏移
},
trainTarget: {
tripNumberPrefix: '000', // 车次号前缀
defaultTripNumber: 'DDD', // 默认车次号2
trainTargetOffset: { x: 36, y: 4}, // 列车车次号偏移
trainTargetTextAlign: 'right' // 车次号文字显示位置
},
trainTargetNumber: {
trainTargetNumberOffset: {x: 0, y: 0}// 车组号偏移量
},
trainHead: {
trainMoreLength: 0, // 列车车头比车身高出的长度,上下相比车体伸出去的边框
trainHeadTriangleFirst: { x: 7, y: 1}, // 列车车头三角坐标1偏移量
trainHeadTriangleSecond: { x: 13, y: 10}, // 列车车头三角坐标2偏移量
trainHeadTriangleThird: { x: 7, y: 19}, // 列车车头三角坐标3偏移量
trainConntWidth: 3, // 列车竖杠的宽度
trainHeadFillColor: '#000000', // 列车车头矩形填充颜色
trainHeadRectHeight: 20 // 列车车头矩形高度
},
common: {
trainHeight: 20, // 列车高度
trainHeadDistance: 4, // 列车和车头之间的间距
trainWidth: 48, // 列车长度
trainTextFontSize: 12, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
haveTextHSDA: true, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
haveTrainBorder: false, // 是否需创建trainBorder对象
textOffset: 4, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 8, // 计算列车长度时--列车长比text多出尺寸
useSelfFormat: true, // 使用配置项的nameFormat
useSelfText: true // 使用配置项的字体大小
},
trainStatusStyle: {
trainTypeStatus: [
{type: '03', serviceNumberColor: '#FFF000', groupNumberColor: '#FFF000'},
{type: '02', trainNumberColor: '#FFF000', groupNumberColor: '#FFF000'}
], // 列车类型对应的识别号样式
defaultDestinationColor: '#FFFFFF', // 默认目的地状态显示颜色
destinationStatusSetText: 'trainWindowBorder', // 目的地状态设置的对应哪个颜色
destinationStatus: [
{status: '01', showColor: '#FFFFFF'},
{status: '02', showColor: '#00FF00'},
{status: '03', showColor: '#A0522D'}
], // 目的地状态 01准点 02早点 03晚点 04头码车
serverNoType: [
{type: '01', showColor: '#FFFFFF'},
{type: '02', showColor: '#FFF000'}
], // 服务号状态类型 01显示服务号 计划车 02显示车组号: 头码车与人工车
directionType: [
{
type: '01',
lineLShow: true,
lineRShow: true,
arrowLShow: false,
arrowRShow: false
},
{
type: '02',
lineLShow: false,
lineRShow: true,
arrowLShow: false,
arrowRShow: true
},
{
type: '03',
lineLShow: true,
lineRShow: false,
arrowLShow: true,
arrowRShow: false
}
], // 列车运行方向状态类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
directionStopType: [
{
type: '01',
lineLShow: false,
lineRShow: false
},
{
type: '02',
lineLShow: false,
lineRShow: true
},
{
type: '03',
lineLShow: true,
lineRShow: false
}
], // 列车停止方向类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
runModeStatus: [
{
status: '01',
trainLColor: '#00FF00',
trainRColor: '#00FF00'
},
{
status: '02',
trainLColor: '#FF8000',
trainRColor: '#FF8000'
},
{
status: '03',
trainLColor: '#FFFF00',
trainRColor: '#FFFF00'
},
{
status: '04',
trainLColor: '#C2C2C2',
trainRColor: '#C2C2C2'
},
{
status: '05',
trainLColor: '#C2C2C2',
trainRColor: '#C2C2C2'
}
], // 列车运行模式对应车头颜色 01未知 02 ATO自动驾驶模式AM 03 ATP监控下的人工驾驶模式CM 04 限制人工驾驶模式RM 05 非限制人工驾驶模式RM
runControlStatus: [
{
status: '01',
hShow: false,
sShow: false
},
{
status: '02',
hShow: true,
sShow: false
},
{
status: '03',
hShow: false,
sShow: true
}
], // 设置运行控制状态类型 01正常 02扣车 03停跳
doorStatus: [
{status: '01', dShow: false},
{status: '02', dShow: true}
], // 设置车门状态类型 01关门 02开门
communicationStatus: [
{status: '01', trainColor: '#725A64'},
{status: '02', trainColor: '#C0C0C0'}
], // 设置通信状态 01正常 02故障
alarmStatus: [
{status: '01', aShow: false},
{status: '02', aShow: true}
] // 设置报警状态 01不报警 02报警
}
};
}
}
export default new SkinCode();

View File

@ -0,0 +1,563 @@
import defaultStyle from '../defaultStyle';
import deviceType from '../../constant/deviceType';
class SkinCode extends defaultStyle {
constructor() {
super();
this[deviceType.Link] = {
lineWidthColor: '#FFFFFF', // line 颜色
linkWidth: 4, // link 宽度
linkColor: '#4e8de6', // link 线条颜色
linkTextColor: '#FFFFFF' // link 字体颜色
};
this[deviceType.Section] = {
active: {
routeColor: false // 进路触发颜色
},
text: {
show: true, // 物理区段名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 10, // 文字离区段距离
fontSize: 12, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: 'lightgreen', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
logicText: { // 逻辑区段名称
show: false, // 逻辑区段名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 12, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
standText: { // 站台
show: true, // 站台轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 24, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
reentryText: { // 折返
show: true, // 折返轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 36, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
transferText: { // 转换轨
show: true, // 转换轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 36, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
destinationText: { // 目的地
show: true, // 目的码名称显示
opposite: true, // 对称相反
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 12, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'bold', // 字体粗细
fontColor: 'yellow', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
line: {
width: 5, // 区段宽度
beyondWidth: 0, // 区段宽超出宽度
invadeColor: '#FFFFFF', // 区段侵入颜色
spareColor: '#5578B6', // 区段空闲颜色
communicationOccupiedColor: 'lightpink', // 区段通信车占用颜色
unCommunicationOccupiedColor: 'red', // 区段非通讯车占用颜色
routeLockColor: 'rgba(0, 255, 0, 1)', // 区段路由锁定颜色
faultLockColor: 'white', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
protectionLockedColor: '#FFFFFF', // 保护区段锁闭
blockColor: 'pink', // 区段封锁颜色
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#92D14F', // 区段保护锁闭
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: 'white' // 逻辑区段名称颜色 (未用)
},
axle: {
radius: 3, // 计轴 半径
distance: 5, // 计轴和区段之间的距离 (未用)
color: 'white', // 区段计轴颜色
resetColor: '#00FFFF', // 区段计轴预复位颜色
Failure: '#E6A23C' // #FFFF00 计轴失效
},
speedLimit: { // 限速元素
width: 1, // 限速线的宽度
distance: 5, // 限速线距离区段距离
lineColor: '#C0C000', // 限速线颜色 (黄色透明光)
nameBackground: '#C0C000', // 限速名称背景颜色
nameShow: true, // 名称显示
nameNumberColor: '#C00808', // 限速值颜色
nameNumberFontSize: 11, // 限速值大小
kilometerColor: '#fff', // 公里标颜色
kilometerFontSize: 8, // 公里标大小
drogueWidth: 19, // 浮标宽度
drogueHeight: 12 // 浮标高度
},
separator: {
z: 6, // 分割符层级
width: 1.5, // 分隔符宽度
endWidth: 1.5, // 尽头分隔符宽度
endColor: '#FFFFFF', // 尽头分隔符颜色
color: 'white' // 区段边界符颜色
}
};
this[deviceType.Signal] = {
distance: 3, // 设备距离区段的距离
post: {
standardColor: '#C0C0C0', // 灯柱颜色
standardWidth: 2 // 灯柱宽度
},
text: {
show: true, // 信号机名称显示
distance: 3, // 文字和灯杆的距离
isNoRotation: true, // 是否禁止旋转
isAlignCenter: false, // 信号字体对其方式
fontSize: 11, // 信号机名称字体大小
fontWeight: 'bold', // 信号机名称字体粗细
defaultColor: 'white', // 信号灯字体默认色
blockColor: '#EF0C08', // 信号灯字体锁定颜色
checkColor: '#00FF00' // 信号保护区段检查颜色
},
lamp: {
borderVariable: true, // 信号灯边框可变
stopWidth: 2, // 禁止线宽度
borderWidth: 2, // 信号灯边框线宽度
borderColor: '#3149C3', // 信号灯边框线颜色
radiusR: 3, // 信号灯半径
blockColor: '#EF0C08', // 信号灯锁闭
grayColor: '#C0C0C0', // 信号灯灰色
redColor: 'red', // 信号灯红色
greenColor: 'green', // 信号灯绿色
yellowColor: 'yellow', // 信号灯黄色
whiteColor: '#FFFFFF', // 信号灯白色
blueColor: '#0070C0' // 信号灯蓝色
},
route: {
direction: true, // 自动通过方向
offset: { x: 4, y: 0}, // 自动通过偏移量
routeColor: '#00FF00' // 自动进路
},
auto: {
direction: false, // 自动通过方向
offset: { x: -4, y: 0}, // 自动通过偏移量
width: 5, // 自动宽度
manualControl: '#FFFF00', // 人工控制
autoRoute: '#00FF00', // 自动进路
autoTrigger: '#FFFF00', // 自动触发
outConflict: '#C00808' // 出车冲突
},
delay: {
direction: false, // 延时解锁方向
offset: { x: -5, y: 0}, // 延时解锁偏移量
fontSize: 11, // 延迟解锁字体大小
fontColor: '#C00808', // 延迟解锁颜色
fontWeight: 'bold' // 字体粗细
},
button: {
distance: 5, // 信号灯按钮距离区段的距离
borderDashColor: '#FFFFFF', // 信号灯按钮边线
buttonColor: 'darkgreen', // 信号灯按钮颜色
buttonLightenColor: 'yellow' // 信号灯按钮闪烁颜色
}
};
this[deviceType.StationStand] = {
common: { // 通用属性
textFontSize: 10, // 站台默认字体大小
haveJumpShow: true // 站台是否有列车停跳显示
},
safetyDoor: { // 屏蔽门
height: 3, // 站台屏蔽门高度
distance: 4, // 站台和屏蔽门之间的距离
defaultColor: 'green', // 屏蔽门默认颜色
splitDoorColor: 'green' // 屏蔽门切除颜色
},
stand: { // 站台
headFontSize: 10, // 站台首端字体大小
spareColor: 'white', // 站台空闲颜色
stopColor: 'yellow', // 站台列车停站颜色
jumpStopColor: 'blue', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue' // 站台指定列车跳停颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
offset: {x: 0, y: 40}, // 站台紧急关闭偏移量
closeColor: 'red' // 站台紧急关闭颜色
},
reentry: { // 站台折返策略
position: 0, // 折返方向
offset: {x: -16, y: 20}, // 折返偏移量
noHumanColor: '#0F16DA', // 站台无人折返
autoChangeEndsColor: '#0BF400' // 站台自动换端
},
detainCar: { // 扣车
text: '扣', // 扣车显示内容
position: -1, // 扣车方向
offset: {x: -8, y: -20}, // 扣车偏移量
trainColor: 'yellow', // 车站扣车颜色
centerTrainColor: 'white', // 中心扣车颜色
andCenterTrainColor: 'red', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50' // 车站扣除文字颜色
},
stopTime: { // 停站时间
position: 1, // 运行时间方向
offset: {x: -8, y: -4}, // 运行时间偏移量
textColor: 'white' // 停站时间字体颜色
},
jump: {
text: '跳', // 停跳显示内容
position: -1, // 停跳方向
offset: {x: -8, y: 0},
textColor: '#0000FF', // 停跳文字颜色
arcColor: '#0000FF', // 停跳圆圈颜色
fillColor: 'rgba(0,0,0,0)', // 透明填充颜色
r: 8 // 圆半径大小
},
level: { // 运行等级
position: 1, // 运行等级方向
offset: {x: -8, y: 30}, // 运行等级偏移量
textColor: '#FFF000' // 停站等级字体颜色
}
};
this[deviceType.StationControl] = {
text: {
distance: 2, // 灯和文字之间的距离
fontSize: 12, // 字体大小
fontFormat: 'consolas', // 字体格式
fontColor: '#ffffff', // 字体颜色
fontWeight: 'normal', // 字体粗细
textAlign: 'middle', // 字体水平对齐
textVerticalAlign: 'top' // 字体垂直对齐
},
lamp: {
count: 4, // 控制模式的个数
offset: {x: 0, y: 0}, // 偏移量
radiusR: 4, // 控制模式灯的半径
distance: 36, // 控制模式之间灯之间的距离
grayColor: '#C0C0C0', // 控制模式灰色
greenColor: 'green', // 控制模式绿色
redColor: 'red', // 控制模式红色
yellowColor: 'yellow', // 控制模式黄色
emergencyControlShow: true, // 紧急站控显示
centerControlShow: true, // 中控显示
substationControlShow: true, // 站控按钮显示
turnedAroundControlShow: false // 按图折返显示
},
arrow: {
show: false // 控制模式箭头显隐
}
};
this[deviceType.StationCounter] = {
text: {
distance: 2, // 计数器名称和文字的距离
fontColor: '#FFFFFF', // 计数器字体颜色
borderColor: '#E4EF50' // 计数器边框颜色
}
};
this[deviceType.StationDelayUnlock] = {
text: {
distance: 3, // 延迟解锁和设备之间的距离
fontColor: '#FFFFFF', // 延时解锁字体颜色
borderColor: '#FFFFFF' // 延迟解锁边框颜色
}
};
this[deviceType.Station] = {
text: {
show: true // 公里标名称显示
},
kmPostShow: false, // 公里标显示
kilometerPosition: 'up' // 公里标朝向
};
this[deviceType.Switch] = {
text: {
show: true, // 道岔名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
offset: {x: 5, y: -10}, // 道岔名称与区段距离
fontSize: 11, // 字体大小
fontColor: '#C0C0C0', // 道岔名称颜色
fontWeight: 'normal', // 字体粗细
borderColor: '#FE0000', // 道岔边框颜色
lossColor: 'lightgreen', // 道岔失去颜色
locateColor: 'lightgreen', // 道岔定位颜色
inversionColor: 'lightgreen', // 道岔反位颜色
monolockColor: '#FFFFFF' // 道岔单锁颜色
},
core: {
length: 10 // 道岔单边长度
},
monolock: { // 道岔单锁配置
locationColor: '#00FF00', // 道岔单锁'定位'颜色 (绿色)
inversionColor: '#FFFF00', // 道岔单锁'反位'颜色 (黄色)
rectShow: true, // 道岔单锁 矩形框是否显示
rectWidth: 18, // 矩形框 宽高
rectBorderColor: '#fff' // 矩形边框颜色
},
block: { // 道岔封锁配置
nameBorderShow: false, // 道岔名称是否有包围框 显示
contentRectShow: true, // 道岔封锁显示
contentRectColor: 'red' // 道岔封锁边框颜色
}
};
this[deviceType.LcControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#FFFF00' // 控制灯颜色
}
};
this[deviceType.ZcControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#00FF00' // 控制灯颜色
}
};
this[deviceType.LimitControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#ECE9D8' // 控制灯颜色
}
};
this[deviceType.Line] = {
lineColor: '#FFFFFF' // 线条颜色
};
this[deviceType.TrainWindow] = {
lineColor: '#4DD43F', // 车次窗颜色
lineDash: null, // 车次窗虚线间隔
lineWidth: 1, // 车次窗线宽
trainWindowSmooth: 0 // 车次窗矩形圆滑程度
};
this[deviceType.Train] = {
trainBody: {
trainBodyLineWidth: 1, // 车身line宽
changeTrainWidth: false, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
specialTrainType: [], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
upPadding: 4, // 上边距离
trainBodyFillColor: '#000099', // 列车车身填充颜色
trainNameFormat: 'serviceNumber:targetCode'// 列车显示格式
},
hsda: {
lrPaddingHSDA: 3, // HSDA两边间隔
upPaddingHSDA: 4, // HSDA上边距离
trainHSDATextFontSize: 8, // 列车HDSA字号
textHContent: '扣', // textH文本
textSContent: '跳', // textS文本
textDContent: '门', // textD文本
textAContent: '警' // textA文本
},
trainNumber: {
targetCodePrefix: '000', // 目的地码前缀
defaultTargetCode: 'DDD', // 默认目的地码
trainTargetTextAlign: 'left', // 目的地码文字显示位置
trainNumberOffset: { x: 24, y: 4}// 目的地码偏移量
},
trainServer: {
serviceNumberPrefix: '000', // 服务号(表号)前缀
defaultServiceNumber: 'TTT', // 默认服务号(表号)
defaultServerNoColor: '#FFFFFF', // 默认服务号状态显示颜色
trainServerOffset: { x: 4, y: 4} // 列车服务号偏移
},
trainTarget: {
tripNumberPrefix: '000', // 车次号前缀
defaultTripNumber: 'DDD', // 默认车次号2
trainTargetOffset: { x: 36, y: 4}, // 列车车次号偏移
trainTargetTextAlign: 'right' // 车次号文字显示位置
},
trainTargetNumber: {
trainTargetNumberOffset: {x: 0, y: 0}// 车组号偏移量
},
trainHead: {
trainMoreLength: 1, // 列车车头比车身高出的长度,上下相比车体伸出去的边框
trainHeadTriangleFirst: { x: 7, y: 1}, // 列车车头三角坐标1偏移量
trainHeadTriangleSecond: { x: 13, y: 10}, // 列车车头三角坐标2偏移量
trainHeadTriangleThird: { x: 7, y: 19}, // 列车车头三角坐标3偏移量
trainConntWidth: 4, // 列车竖杠的宽度
trainHeadFillColor: '#000000', // 列车车头矩形填充颜色
trainHeadRectHeight: 20 // 列车车头矩形高度
},
common: {
trainHeight: 20, // 列车高度
trainHeadDistance: 2, // 列车和车头之间的间距
trainWidth: 55, // 列车长度
trainTextFontSize: 16, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
haveTextHSDA: true, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
haveTrainBorder: false, // 是否需创建trainBorder对象
aspectRatio: 7/5, // 字体宽高比例用以拼接text是计算位置
textOffset: 4, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 8, // 计算列车长度时--列车长比text多出尺寸
useSelfFormat: true, // 使用配置项的nameFormat
useSelfText: true // 使用配置项的字体大小
},
trainStatusStyle: {
defaultDestinationColor: '#FFFFFF', // 默认目的地状态显示颜色
destinationStatusSetText: 'trainTarget', // 目的地状态设置的对应哪个text的颜色
destinationStatus: [
{status: '01', showColor: '#FFFFFF'},
{status: '02', showColor: '#00FF00'},
{status: '03', showColor: '#A0522D'},
{status: '04', showColor: '#FFFF00'}
], // 目的地状态 01准点 02早点 03晚点 04头码车
serverNoType: [
{type: '01', showColor: '#FFFFFF'},
{type: '02', showColor: '#FFF000'}
], // 服务号状态类型 01显示服务号 计划车 02显示车组号: 头码车与人工车
directionType: [
{
type: '01',
lineLShow: true,
lineRShow: true,
arrowLShow: false,
arrowRShow: false
},
{
type: '02',
lineLShow: false,
lineRShow: true,
arrowLShow: false,
arrowRShow: true
},
{
type: '03',
lineLShow: true,
lineRShow: false,
arrowLShow: true,
arrowRShow: false
}
], // 列车运行方向状态类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
directionStopType: [
{
type: '01',
lineLShow: false,
lineRShow: false
},
{
type: '02',
lineLShow: false,
lineRShow: true
},
{
type: '03',
lineLShow: true,
lineRShow: false
}
], // 列车停止方向类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
runModeStatus: [
{
status: '01',
trainLColor: '#FFFFFF',
trainRColor: '#FFFFFF'
},
{
status: '02',
trainLColor: '#00FF00',
trainRColor: '#00FF00'
},
{
status: '03',
trainLColor: '#FFFF00',
trainRColor: '#FFFF00'
},
{
status: '04',
trainLColor: '#A0522D',
trainRColor: '#A0522D'
},
{
status: '05',
trainLColor: '#A0522D',
trainRColor: '#A0522D'
}
], // 列车运行模式对应车头颜色 01未知 02 ATO自动驾驶模式AM 03 ATP监控下的人工驾驶模式CM 04 限制人工驾驶模式RM 05 非限制人工驾驶模式RM
runControlStatus: [
{
status: '01',
hShow: false,
sShow: false
},
{
status: '02',
hShow: true,
sShow: false
},
{
status: '03',
hShow: false,
sShow: true
}
], // 设置运行控制状态类型 01正常 02扣车 03停跳
doorStatus: [
{status: '01', dShow: false},
{status: '02', dShow: true}
], // 设置车门状态类型 01关门 02开门
communicationStatus: [
{status: '01', trainColor: '#725A64'},
{status: '02', trainColor: '#C0C0C0'}
], // 设置通信状态 01正常 02故障
alarmStatus: [
{status: '01', aShow: false},
{status: '02', aShow: true}
] // 设置报警状态 01不报警 02报警
}
};
}
}
export default new SkinCode();

View File

@ -0,0 +1,478 @@
import defaultStyle from '../defaultStyle';
import deviceType from '../../constant/deviceType';
class SkinCode extends defaultStyle {
constructor() {
super();
this[deviceType.Link] = {
lineWidthColor: '#FFFFFF', // line 颜色
linkWidth: 4.4, // link 宽度
linkColor: '#3F3F3F', // link 线条颜色
linkTextColor: '#FFFFFF' // link 字体颜色
};
this[deviceType.Section] = {
active: {
routeColor: false // 进路触发颜色
},
text: {
show: true, // 物理区段名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 18, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
logicText: {
show: true, // 逻辑区段名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 6, // 文字离区段距离
fontSize: 8, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
standText: {
show: true, // 站台轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 30, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
reentryText: {
show: true, // 折返轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 30, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
transferText: {
show: true, // 转换轨名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 28, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
destinationText: {
show: true, // 目的码名称显示
opposite: true, // 对称相反
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 10, // 文字离区段距离
fontSize: 10, // 字体大小
fontWeight: 'bold', // 字体粗细
fontColor: 'yellow', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
line: {
width: 5, // 区段宽度
beyondWidth: 1, // 区段宽超出宽度
invadeColor: '#EF0C08', // 区段侵入颜色
spareColor: '#3F3F3F', // 区段空闲颜色
communicationOccupiedColor: '#FF329A', // 区段通信车占用颜色
unCommunicationOccupiedColor: '#FE0000', // 区段非通讯车占用颜色
routeLockColor: '#FFFFFF', // 区段路由锁定颜色
faultLockColor: '#9B4A0A', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
protectionLockedColor: '#FEFF00', // 保护区段锁闭(未用)
blockColor: '#800080', // 区段封锁颜色
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#FFFF00', // 区段保护锁闭
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: '#FFFFFF' // 逻辑区段名称颜色 (未用)
},
axle: {
radius: 3, // 计轴 半径
distance: 5, // 计轴和区段之间的距离 (未用)
color: '#FFFFFF', // 区段计轴颜色
resetColor: '#00FFFF', // 区段计轴预复位颜色
Failure: '#E6A23C' // #FFFF00 计轴失效
},
speedLimit: { // 限速元素
width: 1, // 限速线的宽短
distance: 5, // 限速线距离区段距离
lineColor: '#FFFF00', // 限速线颜色
nameShow: false // 名称显示
},
separator: {
z: 6, // 分割符层级
width: 1.2, // 分隔符宽度
endWidth: 3.5, // 尽头分隔符宽度
endColor: '#3F3F3F', // 尽头分隔符颜色
color: '#3149C3' // 区段边界符颜色
}
};
this[deviceType.Signal] = {
distance: 10, // 设备距离区段的距离
post: {
standardColor: '#3149C3', // 灯珠颜色
standardWidth: 2 // 灯珠宽度
},
text: {
show: true, // 信号机名称显示
distance: 0, // 文字和灯杆的距离
isNoRotation: true, // 是否禁止旋转
isAlignCenter: true, // 信号字体对其方式
fontSize: 11, // 信号机名称字体大小
fontWeight: 'bold', // 信号机名称字体粗细
defaultColor: '#FFFFFF', // 信号灯字体默认色
blockColor: '#EF0C08', // 信号灯字体锁定颜色
checkColor: '#00FF00', // 信号字体
nameBorderShow: true // 信号机名字边框显示
},
lamp: {
stopWidth: 2, // 禁止线宽度
borderWidth: 1, // 信号灯边框线宽度
borderColor: '#3149C3', // 信号灯边框线颜色
radiusR: 6, // 信号灯半径
blockColor: '#EF0C08', // 信号灯锁闭
grayColor: '#7F7F7F', // 信号灯灰色
redColor: '#FF0000', // 信号灯红色
greenColor: '#00FF00', // 信号灯绿色
yellowColor: '#FFFF00', // 信号灯黄色
whiteColor: '#FFFFFF', // 信号灯白色
blueColor: '#0070C0' // 信号灯蓝色
},
route: {
direction: false, // 自动进路方向
offset: { x: -4, y: 0 }, // 自动进路偏移量
routeColor: '#00FF00' // 自动进路
},
auto: {
direction: false, // 自动通过方向
offset: { x: -4, y: 0}, // 自动通过偏移量
width: 5, // 自动宽度
autoRoute: '#00FF00', // 自动进路
autoTrigger: '#FFFF00', // 自动触发
manualControl: '#FFFF00', // 人工控制
outConflict: '#C00808' // 出车冲突
},
delay: {
direction: true, // 延时解锁方向
offset: { x: 15, y: -10}, // 延时解锁偏移量
fontSize: 11, // 延迟解锁字体大小
fontColor: '#FF0000', // 延迟解锁颜色
fontWeight: 'bold' // 字体粗细
},
button: {
distance: 5, // 信号灯按钮距离区段的距离
borderDashColor: '#FFFFFF', // 信号灯按钮边线
buttonColor: 'darkgreen', // 信号灯按钮颜色
buttonLightenColor: '#E4EF50' // 信号灯按钮闪烁颜色
}
};
this[deviceType.StationStand] = {
common: { // 通用属性
textFontSize: 11 // 站台默认字体大小
},
safetyDoor: { // 屏蔽门
height: 3, // 站台屏蔽门高度
distance: 8, // 站台和屏蔽门之间的距离
defaultColor: '#00FF00', // 屏蔽门默认颜色
splitDoorColor: '#F61107' // 屏蔽门切除颜色
},
stand: { // 站台
headFontSize: 11, // 站台首端字体大小
spareColor: '#606060', // 站台空闲颜色
stopColor: '#FEFE00', // 站台列车停站颜色
jumpStopColor: '#9A99FF', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue' // 站台指定列车跳停颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
offset: {x: 0, y: 40}, // 站台紧急关闭偏移量
closeColor: '#F61107' // 站台紧急关闭颜色
},
reentry: { // 站台折返策略
position: 0, // 折返方向
offset: {x: -16, y: 20}, // 折返偏移量
noHumanColor: '#0F16DA', // 站台无人折返
autoChangeEndsColor: '#0BF400' // 站台自动换端
},
detainCar: { // 扣车
text: 'H', // 扣车显示内容
position: -1, // 扣车方向
offset: {x: -8, y: -6}, // 扣车偏移量
trainColor: '#E4EF50', // 车站扣车颜色
centerTrainColor: '#FFFFFF', // 中心扣车颜色
andCenterTrainColor: '#F61107', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50' // 车站扣除文字颜色
},
stopTime: { // 停站时间
position: 1, // 运行时间方向
offset: {x: -8, y: 26}, // 运行时间偏移量
textColor: '#FFFFFF' // 停站时间字体颜色
},
level: { // 运行等级
position: 1, // 运行等级方向
offset: {x: -8, y: 6}, // 运行等级偏移量
textColor: '#FFFFFF' // 停站等级字体颜色
}
};
this[deviceType.StationControl] = {
text: {
distance: 2, // 灯和文字之间的距离
fontSize: 11, // 字体大小
fontFormat: 'consolas', // 字体格式
fontColor: '#ffffff', // 字体颜色
fontWeight: 'normal', // 字体粗细
textAlign: 'middle', // 字体水平对齐
textVerticalAlign: 'top' // 字体垂直对齐
},
lamp: {
count: 2, // 控制模式灯个数
offset: {x: 0, y: 0}, // 控制模式灯偏移量
radiusR: 4, // 控制模式灯的半径
distance: 36, // 控制模式之间灯之间的距离
grayColor: '#7F7F7F', // 控制模式灰色
greenColor: '#00FF00', // 控制模式绿色
redColor: '#FF0000', // 控制模式红色
yellowColor: '#FFFF00', // 控制模式黄色
emergencyControlShow: false, // 紧急站控显示
centerControlShow: true, // 中控显示
substationControlShow: true, // 站控按钮显示
turnedAroundControlShow: false // 按图折返显示
},
arrow: {
show: true // 控制模式箭头显隐
}
};
this[deviceType.StationCounter] = {
text: {
distance: 2, // 计数器名称和文字的距离
fontColor: '#FFFFFF', // 计数器字体颜色
borderColor: '#E4EF50' // 计数器边框颜色
}
};
this[deviceType.StationDelayUnlock] = {
text: {
distance: 3, // 延迟解锁和设备之间的距离
fontColor: '#FFFFFF', // 延时解锁字体颜色
borderColor: '#FFFFFF' // 延迟解锁边框颜色
}
};
this[deviceType.Station] = {
text: {
show: true // 公里标名称显示
},
kmPostShow: true, // 公里标显示
kilometerPosition: 'up' // 公里标朝向
};
this[deviceType.Switch] = {
text: {
show: true, // 道岔名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
offset: {x: 0, y: 8}, // 道岔名称与区段距离
fontSize: 11, // 字体大小
fontColor: '#C0C0C0', // 道岔名称颜色
fontWeight: 'normal', // 字体粗细
borderColor: '#FE0000', // 道岔边框颜色
lossColor: '#FFFFFF', // 道岔失去颜色
locateColor: '#00FF00', // 道岔定位颜色
inversionColor: '#9C9D09', // 道岔反位颜色
monolockColor: '#870E10' // 道岔单锁颜色
},
core: {
length: 6 // 道岔单边长度
},
block: { // 道岔封锁配置
nameBorderShow: true, // 道岔名称是否有包围框 显示
contentRectShow: false // 道岔封锁显示
},
monolock: { // 道岔单锁配置
locationColor: '#870E10', // 道岔单锁定位颜色 (红色)
inversionColor: '#870E10', // 道岔单锁反位颜色 (红色)
rectShow: false // 道岔单锁 矩形框是否显示
}
};
this[deviceType.Line] = {
lineColor: '#FFFFFF' // 线条颜色
};
this[deviceType.LcControl] = {};
this[deviceType.ZcControl] = {};
this[deviceType.LimitControl] = {};
this[deviceType.TrainWindow] = {
lineColor: '#4DD43F', // 车次窗颜色
lineDash: null, // 车次窗虚线间隔
lineWidth: 1, // 车次窗线宽
trainWindowSmooth: 0 // 车次窗矩形圆滑程度
};
this[deviceType.Train] = {
trainBody: {
trainBodyLineWidth: 0, // 车身line宽
changeTrainWidth: true, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
specialTrainType: [
{
type: '03',
serviceNumber: 'MM',
nameFormat: 'serviceNumber:groupNumber'
},
{
type: '02',
nameFormat: 'targetCode:groupNumber'
}
], // 特殊列车类型需设置显示格式
lrPadding: 1, // 两边间隔
upPadding: 1, // 上边距离
trainBodyFillColor: '#000000', // 列车车身填充颜色
trainNameFormat: 'targetCode:serviceNumber:tripNumber'// 列车显示格式
},
hsda: {
trainHSDATextFontSize: 8// 列车HDSA字号
},
trainNumber: {
targetCodePrefix: '000', // 目的地码前缀
defaultTargetCode: 'AAA', // 默认目的地码
trainTargetTextAlign: 'left', // 车次号文字显示位置
trainNumberOffset: { x: 1, y: 1}// 目的地码偏移量
},
trainServer: {
serviceNumberPrefix: '00', // 服务号(表号)前缀
defaultServiceNumber: 'BB', // 默认服务号(表号)
trainServerOffset: { x: 26, y: 1}// 列车服务号偏移
},
trainTarget: {
tripNumberPrefix: '0000', // 车次号前缀
defaultDirectionCode: 'D', // 默认车次号1
defaultTripNumber: 'CCC', // 默认车次号2
trainTargetOffset: { x: 42, y: 1}// 列车车次号偏移
},
trainTargetNumber: {
groupNumberPrefix: '000', // 车组号前缀
defaultGroupNumber: 'EEE', // 默认车组号
trainTargetNumberOffset: {x: 0, y: 1}// 车组号偏移量
},
trainHead: {
trainMoreLength: 1, // 列车车头比车身高出的长度,上下相比车体伸出去的边框
trainHeadTriangleFirst: { x: 0, y: 0}, // 列车车头三角坐标1偏移量
trainHeadTriangleSecond: { x: 4, y: 7.5}, // 列车车头三角坐标2偏移量
trainHeadTriangleThird: { x: 0, y: 15}, // 列车车头三角坐标3偏移量
trainHeadRectHeight: 15, // 列车车头矩形高度
trainConntWidth: 4, // 列车竖杠的宽度
trainHeadFillColor: '#EF0C08'// 列车车头矩形填充颜色
},
common: {
trainHeight: 17, // 列车高度
trainHeadDistance: 2, // 列车和车头之间的间距
trainWidth: 76, // 列车长度
trainTextFontSize: 15, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
nameFontSize: 15, // 字体大小
haveTextHSDA: false, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
haveTrainBorder: false, // 是否需创建trainBorder对象
aspectRatio: 8/15, // 字体宽高比例用以拼接text是计算位置
textOffset: 1, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 2 // 计算列车长度时--列车长比text多出尺寸
},
trainStatusStyle: {
destinationStatus: [
{status: '01', showColor: '#FFFFFF'},
{status: '02', showColor: '#00FF00'},
{status: '03', showColor: '#3265FF'},
{status: '04', showColor: '#9B4A09'},
{status: '05', showColor: '#EF0C08'},
{status: '06', showColor: '#FFFFFF'},
{status: '07', showColor: '#FFFF00'}
], // 目的地状态 01准点 02早点 03严重早点 04晚点 05严重晚点 06头码车 07ATP切除
destinationStatusSetText: 'trainServer', // 目的地状态设置的对应哪个text的颜色
directionType: [
{
type: '01',
lineLShow: false,
lineRShow: false,
arrowLShow: false,
arrowRShow: false
},
{
type: '02',
lineLShow: false,
lineRShow: false,
arrowLShow: false,
arrowRShow: true
},
{
type: '03',
lineLShow: false,
lineRShow: false,
arrowLShow: true,
arrowRShow: false
}
], // 运行方向状态类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
directionStopType: [
{type: '01', lineLShow: false, lineRShow: false},
{type: '02', lineLShow: false, lineRShow: true},
{type: '03', lineLShow: true, lineRShow: false}
], // 列车停止方向类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行
runModeStatus: [
{
status: '01',
trainLColor: '#EF0C08',
trainRColor: '#EF0C08'
},
{
status: '02',
trainLColor: '#00FF00',
trainRColor: '#00FF00'
},
{
status: '03',
trainLColor: '#FFFF00',
trainRColor: '#FFFF00'
},
{
status: '04',
trainLColor: '#EA700D',
trainRColor: '#EA700D'
},
{
status: '05',
trainLColor: '#A0522D',
trainRColor: '#A0522D'
}
], // 列车运行模式对应车头颜色 01信号中断 02 ATO自动驾驶模式AM 03 ATP监控下的人工驾驶模式CM 04 限制人工驾驶模式RM 05 非限制人工驾驶模式RM
runControlStatus: [], // 设置运行控制状态类型 eg:{status: '01', hShow: false, sShow: false}
doorStatus: [], // 设置车门状态类型 eg:{status: '01', dShow: false}
communicationStatus: [], // 设置通信状态 eg:{status: '01', trainColor:'#725A64'}
alarmStatus: [], // 设置报警状态 eg:{status: '01', aShow: false}
serverNoType: []// 服务号状态类型 eg:{type: '01', showColor: '#FFFFFF'}
}
};
}
}
export default new SkinCode();

View File

@ -112,7 +112,7 @@ deviceState[deviceType.Signal] = {
State04: '04' /** 信号机进路自动触发模式状态类型 */
},
/** 信号机自动通过信号状态类型 */
autoAccessType: {
autoRouteType: {
Default: '01', /** 不自动通过(缺省值)*/
State01: '01', /** 不自动通过 */
State02: '02' /** 自动通过 */

View File

@ -6,7 +6,7 @@ import Options from './options';
import MouseController from './mouseController';
import deviceState from './constant/deviceState';
import deviceType from './constant/deviceType';
import { selectSkinStyle } from './config/deviceStyle';
import { selectSkinCode } from './config/deviceStyle';
import { deviceFactory, createBoundingRect, calculateDCenter } from './utils/parser';
const renderer = 'canvas';
@ -24,7 +24,7 @@ class Jlmap {
this.data = {};
// 皮肤参数
this.skinStyle = '';
this.skinCode = '';
// 皮肤风格
this.style = this.loadStyle();
@ -59,8 +59,8 @@ class Jlmap {
this.$mouseController.on(this.events.__Zoom, this.optionsHandler);
}
loadStyle(skinStyle) {
return selectSkinStyle(skinStyle);
loadStyle(skinCode) {
return selectSkinCode(skinCode);
}
loadDefaultState() {
@ -79,7 +79,11 @@ class Jlmap {
setMap(map, mapDevice) {
// 保存皮肤类型
if (map.skinVO) {
this.skinStyle = map.skinVO.code;
this.skinCode = map.skinVO.code;
this.$options.scaleRate = map.skinVO.scaling || 1;
this.$options.offsetX = map.skinVO.origin ? map.skinVO.origin.x : 0;
this.$options.offsetY = map.skinVO.origin ? map.skinVO.origin.y : 0;
this.$painter.updateTransform({ scaleRate: this.$options.scaleRate, offsetX: this.$options.offsetX, offsetY: this.$options.offsetY });
}
// 保存原始数据
@ -89,7 +93,7 @@ class Jlmap {
this.mapDevice = mapDevice;
// 加载对应皮肤
this.style = this.loadStyle(this.skinStyle);
this.style = this.loadStyle(this.skinCode);
// 数据加载完成 回调
if (this.methods.dataLoaded instanceof Function) { this.methods.dataLoaded(this.mapDevice); }
@ -144,8 +148,8 @@ class Jlmap {
this.$painter.setLayerVisible(layer);
}
setLevelVisible(list, show) {
this.$painter.setLevelVisible(list, show);
setLevelVisible(list) {
this.$painter.setLevelVisible(list);
}
render(list) {
@ -248,7 +252,7 @@ class Jlmap {
});
// 状态后处理
this.postHandle(list);
this.postHandle(list || []);
if (this.methods.stateUpdate instanceof Function) { this.methods.stateUpdate(list); }
}
@ -304,8 +308,10 @@ class Jlmap {
} else {
const elem = list[idex];
if (elem) {
Object.keys(elem).forEach(key => {
elem[key] = model[key];
Object.keys(model).forEach(key => {
if (key != 'instance') {
elem[key] = model[key];
}
});
} else {
list.push(Object.assign({}, model));
@ -352,7 +358,7 @@ class Jlmap {
}
clear() {
this.skinStyle = '';
this.skinCode = '';
this.style = {};
this.mapDevice = {};
this.$painter.clear();

View File

@ -67,11 +67,15 @@ class Painter {
* @param {*} device
*/
add(device) {
const instance = shapefactory(device, this.$jmap);
if (instance) {
device.instance = instance;
this.$transformHandle.transformView(instance);
this.mapInstanceLevel[device._type].add(instance);
try {
const instance = shapefactory(device, this.$jmap);
if (instance) {
device.instance = instance;
this.$transformHandle.transformView(instance);
this.mapInstanceLevel[device._type].add(instance);
}
} catch (err) {
console.error(err);
}
}
@ -136,15 +140,19 @@ class Painter {
*/
update(device) {
if (device) {
if (device._dispose) {
this.delete(device);
} else if (deviceType.Train == device._type) {
this.updateTrain(device);
} else {
const instance = device.instance;
if (instance) {
instance.setState(device);
try {
if (device._dispose) {
this.delete(device);
} else if (deviceType.Train == device._type) {
this.updateTrain(device);
} else {
const instance = device.instance;
if (instance) {
instance.setState(device);
}
}
} catch (err) {
console.error(err);
}
}
}

View File

@ -46,7 +46,6 @@ export default class Section extends Group {
createMouseEvent() {
// 鼠标事件
if (this.style.Section.mouseOverStyle) {
// console.log(this.model.relSwitchCode);
this.mouseEvent = new EMouse(this, this.model.relSwitchCode);
this.add(this.mouseEvent);
this.on('mouseout', (e) => { this.mouseEvent.mouseout(e); });
@ -133,6 +132,8 @@ export default class Section extends Group {
});
this.add(this.turnBack);
this.add(this.turnBackriangle);
this.turnBack.hide();
this.turnBackriangle.hide();
}
}
@ -227,8 +228,8 @@ export default class Section extends Group {
const y = Math.min(model.points[0].y, model.points[model.points.length - 1].y) + Math.abs(model.points[model.points.length - 1].y - model.points[0].y) / 2;
const traingle = new JTriangle(model.points[0], model.points[model.points.length - 1]);
const drict = model.trainPosType != '01' ? 1 : -1;
/** 区段名称*/
if (model.nameShow) {
/** 区段名称 (逻辑区段名称 或 物理区段名称 是否显示)*/
if (style.Section.logicText.show || style.Section.text.show) {
let tempx = x;
let tempy = y;
// 创建区段名称
@ -237,23 +238,26 @@ export default class Section extends Group {
const opposite = style.Section.logicText.opposite ? -1: 1;
tempx += traingle.getSin(style.Section.logicText.distance);
tempy += traingle.getCos(style.Section.logicText.distance) * (style.Section.logicText.position || opposite * drict);
this.name = new ETextName({
zlevel: this.zlevel,
z: this.z + 2,
style: this.style,
silent: false,
x: tempx + model.namePosition.x,
y: tempy + model.namePosition.y,
fontWeight: style.Section.logicText.fontWeight,
fontSize: style.Section.logicText.fontSize,
fontFamily: style.fontFamily,
text: model.name,
textFill: style.Section.logicText.fontColor,
textAlign: style.Section.logicText.textAlign,
textPosition: style.Section.logicText.textPosition,
textVerticalAlign: style.Section.logicText.textVerticalAlign
});
} else {
if (style.Section.logicText.show) {
this.name = new ETextName({
zlevel: this.zlevel,
z: this.z + 2,
style: this.style,
silent: false,
x: tempx + model.namePosition.x,
y: tempy + model.namePosition.y,
fontWeight: style.Section.logicText.fontWeight,
fontSize: style.Section.logicText.fontSize,
fontFamily: style.fontFamily,
text: model.name,
textFill: style.Section.logicText.fontColor,
textAlign: style.Section.logicText.textAlign,
textPosition: style.Section.logicText.textPosition,
textVerticalAlign: style.Section.logicText.textVerticalAlign
});
this.add(this.name);
}
} else if (style.Section.text.show && !model.isSwitchSection) {
const opposite = style.Section.text.opposite ? -1: 1;
tempx += traingle.getSin(style.Section.text.distance);
tempy += traingle.getCos(style.Section.text.distance) * (style.Section.text.position || opposite * drict);
@ -273,30 +277,33 @@ export default class Section extends Group {
textPosition: style.Section.text.textPosition,
textVerticalAlign: style.Section.text.textVerticalAlign
});
this.add(this.name);
}
} else {
this.name = new ETextName({
zlevel: this.zlevel,
z: this.z + 2,
style: this.style,
silent: false,
x: tempx + model.namePosition.x,
y: tempy + model.namePosition.y + style.Section.text.distance * drict,
fontWeight: style.Section.text.fontWeight,
fontSize: style.Section.text.fontSize,
fontFamily: style.fontFamily,
text: model.name,
textFill: style.Section.text.fontColor,
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
textVerticalAlign: style.Section.text.textVerticalAlign
});
if (style.Section.text.show) {
this.name = new ETextName({
zlevel: this.zlevel,
z: this.z + 2,
style: this.style,
silent: false,
x: tempx + model.namePosition.x,
y: tempy + model.namePosition.y + style.Section.text.distance * drict,
fontWeight: style.Section.text.fontWeight,
fontSize: style.Section.text.fontSize,
fontFamily: style.fontFamily,
text: model.name,
textFill: style.Section.text.fontColor,
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
textVerticalAlign: style.Section.text.textVerticalAlign
});
this.add(this.name);
}
}
this.add(this.name);
}
/** 站台轨名称*/
if (model.isStandTrack && model.standTrackNameShow) {
if (model.isStandTrack && model.standTrackNameShow && style.Section.standText.show) {
const opposite = style.Section.standText.opposite ? -1: 1;
const tempx = x + traingle.getSin(style.Section.standText.distance);
const tempy = y + traingle.getCos(style.Section.standText.distance) * (style.Section.standText.position || opposite * drict);
@ -319,7 +326,7 @@ export default class Section extends Group {
}
/** 折返轨名称*/
if (model.isReentryTrack && model.reentryTrackNameShow) {
if (model.isReentryTrack && model.reentryTrackNameShow && style.Section.reentryText.show) {
const opposite = style.Section.reentryText.opposite ? -1: 1;
const tempx = x + traingle.getSin(style.Section.reentryText.distance);
const tempy = y + traingle.getCos(style.Section.reentryText.distance) * (style.Section.reentryText.position || opposite * drict);
@ -342,7 +349,7 @@ export default class Section extends Group {
}
/** 转换轨名称*/
if (model.isTransferTrack && model.transferTrackNameShow) {
if (model.isTransferTrack && model.transferTrackNameShow && style.Section.transferText.show) {
const opposite = style.Section.transferText.opposite ? -1: 1;
const tempx = x + traingle.getSin(style.Section.transferText.distance);
const tempy = y + traingle.getCos(style.Section.transferText.distance) * (style.Section.transferText.position || opposite * drict);
@ -365,7 +372,7 @@ export default class Section extends Group {
}
/** 目的码名称*/
if (model.destinationCode && model.destinationCodeShow) {
if (model.destinationCode && model.destinationCodeShow && style.Section.destinationText.show) {
const opposite = style.Section.destinationText.opposite ? -1: 1;
const tempx = x + traingle.getSin(style.Section.destinationText.distance);
const tempy = y + traingle.getCos(style.Section.destinationText.distance) * (style.Section.destinationText.position || opposite * drict);
@ -730,12 +737,21 @@ export default class Section extends Group {
/** 设置状态*/
setState(model) {
this.recover();
if (model.status == '01' || model.status == '00' || model.status == undefined) {
if (this.name && this.style.Section.active.routeColor) {
this.name.setStyle({textFill: this.style.Section.text.fontColor});
}
} else {
if (this.name && this.style.Section.active.routeColor) {
this.name.setStyle({textFill: 'green'});
}
}
switch (model.status) {
case '00': /** 未定义*/
this.undefine();
break;
case '01': /** 空闲*/
this.spare();
this.spare(); // 空闲状态下 名称白色 其他条件为绿色
break;
case '02': /** 通信车占用*/
this.communicationOccupied();

View File

@ -47,7 +47,7 @@ export default class EMouse extends Group {
this.device.lamps.forEach(elem => {
elem.setBorderColor(this.style.Signal.mouseOverStyle.lampBorderLineColor);
});
this.device.sigName.setColor(this.style.backgroundColor);
this.device.sigName && this.device.sigName.setColor(this.style.backgroundColor);
}
mouseout(e) {

View File

@ -150,7 +150,7 @@ class Signal extends Group {
this.add(this.sigPost);
this.lamps.forEach(lamp => { this.add(lamp); });
this.model.nameShow ? this.add(this.sigName) : null;
this.style.Signal.text.show ? this.add(this.sigName) : null;
this.add(this.sigAuto);
this.add(this.sigRoute);
this.add(this.sigDelay);
@ -391,7 +391,7 @@ class Signal extends Group {
}
// 信号机进路自动触发模式状态类型
setAutoAccessOpen() {
setAutoTriggerOpen() {
this.sigAuto.setColor(this.style.Signal.auto.autoTrigger);
if (this.model.atsAutoTriggerShow) {
this.sigAuto.show();
@ -462,7 +462,7 @@ class Signal extends Group {
case '01': this.setAutoClose(); break; // 隐藏 隐藏自动信号和自动进路
case '02': this.setAutoSignalOpen(); break; // 显示 设置自动信号模式状态类型
case '03': this.setAutoRouteOpen(); break; // 显示 设置自动进路模式状态类型
case '04': this.setAutoAccessOpen(); break; // 显示 信号机进路自动触发模式状态类型
case '04': this.setAutoTriggerOpen(); break; // 显示 信号机进路自动触发模式状态类型
}
/** 延时解锁*/

View File

@ -21,7 +21,8 @@ export default class Station extends Group {
const model = this.model;
const style = this.style;
if (model.visible) {
if (style.Station.text.show) {
// 公里标名称是否显示
this.stationText = new ETextName({
zlevel: this.zlevel,
z: this.z,
@ -36,6 +37,11 @@ export default class Station extends Group {
textVerticalAlign: 'top',
textFill: model.nameFontColor
});
this.add(this.stationText);
}
if (style.Station.kmPostShow) {
// 公里标是否显示
let direction = 1;
if (this.style.Station.kilometerPosition == 'up') {
direction = -1;
@ -54,19 +60,7 @@ export default class Station extends Group {
textVerticalAlign: 'top',
textFill: model.kmPostFontColor
});
this.add(this.stationText);
this.add(this.mileageText);
this.setShowMileageText(model.kmPostShow);
}
}
/** 设置公里标是否显示*/
setShowMileageText(show) {
if (show) {
this.mileageText.show();
} else {
this.mileageText.hide();
}
}

View File

@ -25,56 +25,70 @@ export default class StationControl extends Group {
create() {
const model = this.model;
this.emergencyControl = new ESingleControl({
_subType: 'emergency',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x - this.style.StationControl.lamp.distance * 3 / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: model.jjzkContent,
pop: false
});
this.centerControl = new ESingleControl({
_subType: 'center',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x - this.style.StationControl.lamp.distance / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: model.zokContent,
pop: false
});
this.substationControl = new ESingleControl({
_subType: 'substation',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x + this.style.StationControl.lamp.distance / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: model.zakContent,
pop: false
});
this.turnedAroundControl = new ESingleControl({
_subType: 'turnedAround',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x + this.style.StationControl.lamp.distance * 3 / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: '按图折返',
pop: false
});
// 紧急站控
if (this.style.StationControl.lamp.emergencyControlShow) {
this.emergencyControl = new ESingleControl({
_subType: 'emergency',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x - this.style.StationControl.lamp.distance * 3 / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: model.jjzkContent,
pop: false
});
this.add(this.emergencyControl);
}
// 中控按钮
if (this.style.StationControl.lamp.centerControlShow) {
this.centerControl = new ESingleControl({
_subType: 'center',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x - this.style.StationControl.lamp.distance / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: model.zokContent,
pop: false
});
this.add(this.centerControl);
}
// 站控按钮
if (this.style.StationControl.lamp.substationControlShow) {
this.substationControl = new ESingleControl({
_subType: 'substation',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x + this.style.StationControl.lamp.distance / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: model.zakContent,
pop: false
});
this.add(this.substationControl);
}
// 按图折返
if (this.style.StationControl.lamp.turnedAroundControlShow) {
this.turnedAroundControl = new ESingleControl({
_subType: 'turnedAround',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.position.x + this.style.StationControl.lamp.distance * 3 / 2 + this.style.StationControl.lamp.offset.x,
y: model.position.y + this.style.StationControl.lamp.offset.y
},
context: '按图折返',
pop: false
});
this.add(this.turnedAroundControl);
}
// 箭头
if (this.style.StationControl.arrow.show) {
const point = arrow(this.model.position.x, this.model.position.y + this.style.StationControl.lamp.radiusR / 2, this.style.StationControl.lamp.distance / 6, this.style.StationControl.lamp.radiusR * 0.8);
@ -93,38 +107,30 @@ export default class StationControl extends Group {
});
this.add(this.arrowsControl);
}
this.add(this.substationControl);
this.add(this.centerControl);
if (this.style.StationControl.lamp.count == 3) {
this.add(this.emergencyControl);
} else if (this.style.StationControl.lamp.count == 4) {
this.add(this.emergencyControl);
this.add(this.turnedAroundControl);
}
}
// 设置状态
setState(model) {
switch (model.status) {
case '00': // 无状态
this.emergencyControl.setColor(this.style.StationControl.lamp.grayColor);
this.substationControl.setColor(this.style.StationControl.lamp.grayColor);
this.centerControl.setColor(this.style.StationControl.lamp.grayColor);
this.emergencyControl && this.emergencyControl.setColor(this.style.StationControl.lamp.grayColor);
this.substationControl && this.substationControl.setColor(this.style.StationControl.lamp.grayColor);
this.centerControl && this.centerControl.setColor(this.style.StationControl.lamp.grayColor);
break;
case '01': // 中控
this.emergencyControl.setColor(this.style.StationControl.lamp.grayColor);
this.substationControl.setColor(this.style.StationControl.lamp.grayColor);
this.centerControl.setColor(this.style.StationControl.lamp.greenColor);
this.emergencyControl && this.emergencyControl.setColor(this.style.StationControl.lamp.grayColor);
this.substationControl && this.substationControl.setColor(this.style.StationControl.lamp.grayColor);
this.centerControl && this.centerControl.setColor(this.style.StationControl.lamp.greenColor);
break;
case '02': // 站控
this.emergencyControl.setColor(this.style.StationControl.lamp.grayColor);
this.substationControl.setColor(this.style.StationControl.lamp.yellowColor);
this.centerControl.setColor(this.style.StationControl.lamp.grayColor);
this.emergencyControl && this.emergencyControl.setColor(this.style.StationControl.lamp.grayColor);
this.substationControl && this.substationControl.setColor(this.style.StationControl.lamp.yellowColor);
this.centerControl && this.centerControl.setColor(this.style.StationControl.lamp.grayColor);
break;
case '03': // 紧急站控
this.emergencyControl.setColor(this.style.StationControl.lamp.redColor);
this.substationControl.setColor(this.style.StationControl.lamp.grayColor);
this.centerControl.setColor(this.style.StationControl.lamp.grayColor);
this.emergencyControl && this.emergencyControl.setColor(this.style.StationControl.lamp.redColor);
this.substationControl && this.substationControl.setColor(this.style.StationControl.lamp.grayColor);
this.centerControl && this.centerControl.setColor(this.style.StationControl.lamp.grayColor);
break;
}
}

View File

@ -196,7 +196,7 @@ class StationStand extends Group {
/** 空闲*/
spare() {
this.safeStand.setColor(this.style.StationStand.stand.spareColor);
this.safeStand && this.safeStand.setColor(this.style.StationStand.stand.spareColor);
}
/** 列车停站*/

View File

@ -25,7 +25,7 @@ class ESwName extends Group {
text: model.name,
textAlign: model.triangle.drictx === 1 ? 'left' : 'right',
textVerticalAlign: 'middle',
textFill: style.textFontColor
textFill: style.Switch.text.fontColor
}
});

View File

@ -65,7 +65,7 @@ export default class Switch extends Group {
const point2 = [point1[0] + directx * switchWidth / this.triangle.getSinRate(), point1[1]];
const point3 = [point2[0] + directx * this.triangle.getCotRate() * swPadding, point2[1] + directy * swPadding];
const point4 = [point3[0] + direct * this.triangle.getSin(switchWidth), point3[1] - direct * this.triangle.getCos(switchWidth)];
this.locShelter = new ESwLocal({
this.locShelter = new ESwLocal({ // 定位
zlevel: this.zlevel,
z: this.z,
style: style,
@ -92,7 +92,7 @@ export default class Switch extends Group {
const spoint3 = [model.intersection.x - directx * width3, model.intersection.y + directy * switchWidth1];
const spoint4 = [spoint1[0] + directx * (width2 + width1) - directx * width3, spoint3[1]];
this.relocShelter = new ESwLnversion({
this.relocShelter = new ESwLnversion({ // 反位
zlevel: this.zlevel,
z: this.z,
style: style,
@ -135,7 +135,7 @@ export default class Switch extends Group {
nameTextY: nameTextY,
sectionName: model.sectionName,
name: model.name,
nameShow: model.nameShow,
nameShow: style.Switch.text.show,
triangle: this.triangle
});
@ -148,7 +148,7 @@ export default class Switch extends Group {
createLockRect() {
const offsetX = this.model.locateType == '01' ? 3 : 0;
this.lockRect = new ELockRect({
this.lockRect = new ELockRect({ // 锁定矩形
zlevel: this.zlevel,
z: this.z + 6,
x: this.model.intersection.x - this.style.Switch.monolock.rectWidth / 2 + offsetX,
@ -188,7 +188,7 @@ export default class Switch extends Group {
/** 设置岔芯颜色*/
setSwitchCoreColor(color) {
this.swCore.setColor(color);
this.swCore && this.swCore.setColor(color);
}
/** 设置道岔文字颜色*/

View File

@ -17,6 +17,13 @@ class EMouse extends Group {
case '05': destinationText = '严重晚点'; break;
default: destinationText = '未知'; break;
}
let trainType = '';
switch (this.device.model.type) {
case '01': trainType = '计划车'; break;
case '02': trainType = '头码车'; break;
case '03': trainType = '人工车'; break;
default: trainType = '未知'; break;
}
// 文字描述
this.arrowText = new Text({
zlevel: this.device.model.zlevel,
@ -24,7 +31,7 @@ class EMouse extends Group {
style: {
x: this.device.model.point.x + 50,
y: this.device.model.point.y + 25,
text: `列车类型: 计划车\n\0\0\0\0号: ${this.device.model.serviceNumber}\n\0\0号: ${this.device.model.tripNumber}\n目的地号: ${this.device.model.targetCode ? this.device.model.targetCode : ''}\n\0\0号: ${this.device.model.groupNumber}\n\0\0点: ${destinationText}\n运行方向: ${this.device.model.directionType == '02' ? '上行' : '下行'}\n乘务组号: \n起点站名: \n终点站名: \n占用轨道: ${this.device.model.sectionModel ? this.device.model.sectionModel.name : ''}\n所在车站: \n车地通信: 正常\n运行等级: 4\n扣车状态: ${this.device.model.runControlStatus == '01' ? '正常' : this.device.model.runControlStatus == '03' ? '跳停' : '扣车'}\n停稳状态: ${this.device.model.runStatus == '02' ? '未停稳' : '停稳'}\n阻塞状态: 无\n列车速度: ${this.device.model.speed || 0} km/h\n列车移动授权距离: ${this.device.model.maLen || 0} m`,
text: `列车类型: ${trainType} \n\0\0\0\0号: ${this.device.model.serviceNumber}\n\0\0号: ${this.device.model.tripNumber}\n目的地号: ${this.device.model.targetCode ? this.device.model.targetCode : ''}\n\0\0号: ${this.device.model.groupNumber}\n\0\0点: ${destinationText}\n运行方向: ${this.device.model.directionType == '02' ? '上行' : '下行'}\n乘务组号: \n起点站名: \n终点站名: \n占用轨道: ${this.device.model.sectionModel ? this.device.model.sectionModel.name : ''}\n所在车站: \n车地通信: 正常\n运行等级: 4\n扣车状态: ${this.device.model.runControlStatus == '01' ? '正常' : this.device.model.runControlStatus == '03' ? '跳停' : '扣车'}\n停稳状态: ${this.device.model.runStatus == '02' ? '未停稳' : '停稳'}\n阻塞状态: 无\n列车速度: ${this.device.model.speed || 0} km/h\n列车移动授权距离: ${this.device.model.maLen || 0} m`,
textFill: '#000',
textAlign: 'letf',
textFont: 10 + 'px consolas',

View File

@ -96,7 +96,7 @@ export default class TrainBody extends Group {
textAlign: 'middle',
textVerticalAlign: 'top'
}) : '';
let serviceNumber = style.Train.trainServer.serviceNumberPrefix + (model.serviceNumber || style.Train.trainServer.defaultServiceNumber) + '';// 服务号(表号)
const serviceNumber = style.Train.trainServer.serviceNumberPrefix + (model.serviceNumber || style.Train.trainServer.defaultServiceNumber) + '';// 服务号(表号)
const tripNumber = style.Train.trainTarget.tripNumberPrefix + (style.Train.trainTarget.defaultDirectionCode
?(model.directionCode||style.Train.trainTarget.defaultDirectionCode) + (model.tripNumber || style.Train.trainTarget.defaultTripNumber)
:model.tripNumber || style.Train.trainTarget.defaultTripNumber) + ''; // 车次号
@ -151,19 +151,10 @@ export default class TrainBody extends Group {
textStroke: style.trainTextColor,
textStrokeWidth: 0,
fontSize: model.fontSize,
fontFamily: style.Train.common.fontFamily,
textAlign: 'left',
textVerticalAlign: 'top'
});
// 根据列车类型设置显示格式
if ( style.Train.trainBody.specialTrainType.length > 0) {
style.Train.trainBody.specialTrainType.some((item) =>{
if (model.type === item.type) {
serviceNumber = item.serviceNumber;
this.nameFormat = item.nameFormat;
return true;
}
});
}
this.formatChangePosition(model, style);
this.add(this.trainBodyBox);
if (style.Train.common.haveTextHSDA) {
@ -183,12 +174,20 @@ export default class TrainBody extends Group {
this.trainBodyBox && this.trainBodyBox.setStyle('fill', color);
}
setTextTrainServerColor(color) {
this.textTrainServer.setStyle('textFill', color);
this.textTrainServer.setStyle('textStroke', color);
this.textTrainServer&&this.textTrainServer.setStyle('textFill', color);
this.textTrainServer&&this.textTrainServer.setStyle('textStroke', color);
}
setTextTrainTargetColor(color) {
this.textTrainTarget.setStyle('textFill', color);
this.textTrainTarget.setStyle('textStroke', color);
this.textTrainTarget&&this.textTrainTarget.setStyle('textFill', color);
this.textTrainTarget&&this.textTrainTarget.setStyle('textStroke', color);
}
setTextTrainNumberColor(color) {
this.textTrainNumber&&this.textTrainNumber.setStyle('textFill', color);
this.textTrainNumber&&this.textTrainNumber.setStyle('textStroke', color);
}
setTextTrainTargetNumberColor(color) {
this.textTrainTargetNumber&&this.textTrainTargetNumber.setStyle('textFill', color);
this.textTrainTargetNumber&&this.textTrainTargetNumber.setStyle('textStroke', color);
}
setHShow(isShow) {
if (this.textH) {
@ -216,23 +215,23 @@ export default class TrainBody extends Group {
formatChangePosition(model, style) {
if (this.nameFormat) {
const arr = this.nameFormat.split(':');
let fontNumber = 0;
let widthText = 0;
arr.forEach(ele => {
if (ele == 'targetCode') {
this.textTrainNumber.setStyle('x', parseInt(model.point.x + fontNumber * model.fontSize * style.Train.common.aspectRatio + style.Train.common.textOffset) );
fontNumber += (style.Train.trainNumber.targetCodePrefix || '').length;
this.textTrainNumber.setStyle('x', parseInt(model.point.x + widthText + style.Train.common.textOffset) );
widthText += this.textTrainNumber.getBoundingRect().width;
this.add(this.textTrainNumber);
} else if (ele == 'serviceNumber') {
this.textTrainServer.setStyle('x', parseInt(model.point.x + fontNumber * model.fontSize * style.Train.common.aspectRatio + style.Train.common.textOffset));
fontNumber += (style.Train.trainServer.serviceNumberPrefix || '').length;
this.textTrainServer.setStyle('x', parseInt(model.point.x + widthText + style.Train.common.textOffset));
widthText += this.textTrainServer.getBoundingRect().width;
this.add(this.textTrainServer);
} else if (ele == 'tripNumber') {
this.textTrainTarget.setStyle('x', parseInt(model.point.x + fontNumber * model.fontSize * style.Train.common.aspectRatio + style.Train.common.textOffset));
fontNumber += (style.Train.trainTarget.tripNumberPrefix || '').length;
this.textTrainTarget.setStyle('x', parseInt(model.point.x + widthText + style.Train.common.textOffset));
widthText += this.textTrainTarget.getBoundingRect().width;
this.add(this.textTrainTarget);
} else if (ele == 'groupNumber') {
this.textTrainTargetNumber.setStyle('x', parseInt(model.point.x + fontNumber * model.fontSize * style.Train.common.aspectRatio + style.Train.common.textOffset));
fontNumber += (style.Train.trainTargetNumber.groupNumberPrefix || '').length;
this.textTrainTargetNumber.setStyle('x', parseInt(model.point.x + widthText + style.Train.common.textOffset));
widthText += this.textTrainTargetNumber.getBoundingRect().width;
this.add(this.textTrainTargetNumber);
}
});

View File

@ -19,6 +19,15 @@ export default class Train extends Group {
this.fontSize = style.Train.common.useSelfText?style.Train.common.nameFontSize || style.Train.common.trainTextFontSize:model.nameFontSize || style.Train.common.nameFontSize || style.Train.common.trainTextFontSize;
this.newScale = this.fontSize / style.Train.common.trainTextFontSize;
this.nameFormat = style.Train.common.useSelfFormat?style.Train.trainBody.trainNameFormat:model.nameFormat || style.Train.trainBody.trainNameFormat;
if ( style.Train.trainBody.specialTrainType.length > 0) {
style.Train.trainBody.specialTrainType.some((item) =>{
if (model.type === item.type) {
this.nameFormat = item.nameFormat;
model.serviceNumber = item.serviceNumber?item.serviceNumber : model.serviceNumber;
return true;
}
});
}
this.create();
this.setState(model);
}
@ -273,7 +282,18 @@ export default class Train extends Group {
});
}
}
setTrainTypeStatus(type) {
if (this.style.Train.trainStatusStyle.trainTypeStatus) {
this.style.Train.trainStatusStyle.trainTypeStatus.some((item) => {
if ( type === item.type) {
item.serviceNumberColor && this.trainB && this.trainB.setTextTrainServerColor(item.serviceNumberColor);
item.trainNumberColor && this.trainB && this.trainB.setTextTrainNumberColor(item.trainNumberColor);
item.trainTargetColor && this.trainB && this.trainB.setTextTrainTargetColor(item.trainTargetColor);
item.groupNumberColor && this.trainB && this.trainB.setTextTrainTargetNumberColor(item.groupNumberColor);
}
});
}
}
// 设置状态
setState(model) {
this.model = model;
@ -287,6 +307,7 @@ export default class Train extends Group {
this.setDoorStatus(model.doorStatus); // 设置车门状态类型
this.setCommunicationStatus(model.communicationStatus); // 设置通信状态类型
this.setAlarmStatus(model.alarmStatus); // 设置报警状态
this.setTrainTypeStatus(model.type); // 根据列车类型设置列车识别号样式
}
}
// 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度

View File

@ -205,7 +205,7 @@
methods: {
loadInitData(map) {
if (map) {
getPublishTrainList(map.skinStyle).then(resp => {
getPublishTrainList(map.skinCode).then(resp => {
this.trainList = resp.data;
}).catch(error => {
this.$messageBox(`获取列车车组号失败`);

View File

@ -92,7 +92,7 @@
methods: {
loadInitData(map) {
if (Object.keys(map || {}).length) {
getPublishTrainList(map.skinStyle).then(response => {
getPublishTrainList(map.skinCode).then(response => {
this.trainList = response.data;
}).catch(error => {
this.$messageBox(`获取列车列表失败`);

Some files were not shown because too many files have changed in this diff Show More