diff --git a/package.json b/package.json index 9a08831b7..b7dc55048 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "three": "^0.107.0", "vue": "^2.6.10", "vue-i18n": "^8.12.0", + "vue-quill-editor": "^3.0.6", "vue-router": "^3.1.6", "vuedraggable": "^2.23.2", "vuex": "^3.1.0", diff --git a/src/api/chat.js b/src/api/chat.js index 7b493411a..06ec79b98 100644 --- a/src/api/chat.js +++ b/src/api/chat.js @@ -312,11 +312,11 @@ export function getSimulationConversationListNew(group) { } // 获取/创建仿真会话(新版地图) -export function getSimulationConversationIdNew(params, group) { +export function getSimulationConversationIdNew(data, group) { return request({ url: `/simulation/${group}/wx/conversation`, - method: 'get', - params: params + method: 'post', + data }); } @@ -336,3 +336,12 @@ export function getSimulationContextListNew(group, conversationId) { method: 'get' }); } + +// 获取仿真会话消息列表(新版地图) +export function getSimulationChatMemberNew(group, conversationId) { + return request({ + url: `/simulation/${group}/${conversationId}/members`, + method: 'get' + }); +} + diff --git a/src/api/competition.js b/src/api/competition.js index 1e81796d6..15fe0b588 100644 --- a/src/api/competition.js +++ b/src/api/competition.js @@ -46,10 +46,10 @@ export function getQuestionListByMapId(params) { }); } -// 加载实操及内容 -export function loadQuestionList(competitionId, data) { +// 加载试卷 +export function loadingPaper(competitionId, data) { return request({ - url: `api/v1/competitionPractical/competition/${competitionId}/distribute`, + url: `/api/v1/competition/${competitionId}/testPaper`, method: 'post', data }); @@ -64,41 +64,42 @@ export function postSignUp(id, data) { } /** 查询用户是否已经报名该竞赛 */ -export function getIsSignUp(raceId) { +export function getIsSignUp(raceId, params = {}) { return request({ url: `/api/race/${raceId}/isSignUp`, - method: 'get' + method: 'get', + params }); } /** 分页查询竞赛报名人员 */ export function getRaceUserList(params) { return request({ - url: `/api/race/${params.raceId}/raceUser`, + url: `/api/race/${params.raceId}/raceUser/page`, method: 'get', params }); } -/** 分页查询理论题列表 */ -export function getCompetitionTheory(params) { - return request({ - url: `/api/v1/competitionTheory`, - method: 'get', - params - }); -} +// /** 分页查询理论题列表 */ +// export function getCompetitionTheory(params) { +// return request({ +// url: `/api/v1/competitionTheory`, +// method: 'get', +// params +// }); +// } /** 提交试卷 */ -export function postCompetitionTheory(theoryId, data) { +export function postCompetitionTheory(data) { return request({ - url: `/api/v1/competitionTheory/${theoryId}/submit`, + url: `/api/v1/competitionTheory/submit`, method: 'post', data }); } -/** 查询用户是否已经报名该竞赛 */ +/** 查询本竞赛用的实操列表 */ export function getCompetitionPractical(competitionId) { return request({ url: `/api/v1/competitionPractical/competition/${competitionId}`, @@ -106,3 +107,42 @@ export function getCompetitionPractical(competitionId) { }); } +/** 查询竞赛报名人员详情 */ +export function getRaceUserById(raceId) { + return request({ + url: `/api/race/${raceId}/raceUser`, + method: 'get' + }); +} + +/** 查询加载的实操题 */ +export function getPracticalQuestion(competitionId) { + return request({ + url: `/api/v1/competitionPractical/competition/${competitionId}`, + method: 'get' + }); +} + +/** 查询加载的理论题 */ +export function getTheoryQuestion(competitionId) { + return request({ + url: `/api/v1/competitionTheory/competition/${competitionId}`, + method: 'get' + }); +} + +/** 查询理论题作答详情 */ +export function getCompetitionDetail(competitionId) { + return request({ + url: `/api/v1/competitionTheory/detail/competition/${competitionId}`, + method: 'get' + }); +} + +/** 根据id查询竞赛信息 */ +export function getRaceById(id) { + return request({ + url: `/api/race/${id}`, + method: 'get' + }); +} diff --git a/src/api/questionBank.js b/src/api/questionBank.js new file mode 100644 index 000000000..90c860824 --- /dev/null +++ b/src/api/questionBank.js @@ -0,0 +1,45 @@ +import request from '@/utils/request'; + +// 分页查询理论试题 +export function listQuestionPage(params) { + return request({ + url: `/api/questionBank/questions/paging`, + method: 'get', + params + }); +} + +// 创建题目 +export function createQuestion(data) { + return request({ + url: `/api/questionBank/questions`, + method: 'post', + data + }); +} + +// 删除题目 +export function deleteQuestion(questionId) { + return request({ + url: `/api/questionBank/questions/${questionId}`, + method: 'delete' + }); +} + +// 更新题目 +export function updateOption(data) { + return request({ + url: `/api/questionBank/questions/${data.id}`, + method: 'put', + data + }); +} + +// 获取题目信息 +export function getQuestionInfo(questionId) { + return request({ + url: `/api/questionBank/questions/${questionId}`, + method: 'get' + }); +} + diff --git a/src/api/race.js b/src/api/race.js index 13d7ecb91..2d8d24498 100644 --- a/src/api/race.js +++ b/src/api/race.js @@ -24,3 +24,54 @@ export function updateRace(id, data) { data }); } + +/** 获取实操试题列表(题库)*/ +export function getPracticeList() { + return request({ + url: `/api/v1/competitionPractical/competition`, + method: 'get' + }); +} + +/** 获取单个实操试题详情(题库)*/ +export function getPracticeByIdBasic() { + return request({ + url: `/api/v1/competitionPractical/competition`, + method: 'get' + }); +} + +/** 创建实操试题 */ +export function createPractice(data) { + return request({ + url: `/api/v1/competitionPractical/competition`, + method: 'post', + data + }); +} + +/** 更新实操试题信息 */ +export function putPracticeInfo(id, params) { + return request({ + url: `/api/v1/competitionPractical/competition/${id}`, + method: 'put', + data: params + }); +} + +/** 删除实操试题 */ +export function deletePractice(id) { + return request({ + url: `/api/v1/competitionPractical/competition/${id}`, + method: 'delete' + }); +} + +/** 录制实操试题 */ +export function practiceRecordNotify(practiceId) { + return request({ + url: `/api/scriptSimulation/${practiceId}/scriptWrite`, + method: 'get' + }); +} + diff --git a/src/api/simulation.js b/src/api/simulation.js index 29407127d..921119a33 100644 --- a/src/api/simulation.js +++ b/src/api/simulation.js @@ -685,3 +685,11 @@ export function simulationLoadRunPlan(group, templateId) { method: 'put' }); } +/** 根据车次号获取列车信息 */ +export function getTrainDetailBytripNumber(group, params) { + return request({ + url: `/simulation/${group}/planTripInfo`, + method: 'get', + params: params + }); +} diff --git a/src/assets/SAFS.png b/src/assets/SAFS.png new file mode 100644 index 000000000..2807e5991 Binary files /dev/null and b/src/assets/SAFS.png differ diff --git a/src/components/PopMenu/index.vue b/src/components/PopMenu/index.vue index f982ae27a..c8d1baaf5 100644 --- a/src/components/PopMenu/index.vue +++ b/src/components/PopMenu/index.vue @@ -1,5 +1,5 @@ + + diff --git a/src/directive/focus/focus.js b/src/directive/focus/focus.js index 7c3b68b65..512c0d1df 100644 --- a/src/directive/focus/focus.js +++ b/src/directive/focus/focus.js @@ -1,18 +1,21 @@ export default { - // 当被绑定的元素插入到 DOM 中时 - inserted: function (el, obj) { - // 这是需要页面刚加载就能进行聚焦操作使用的钩子函数,可以省略的,视具体需求而定 - // 对值进行判断 - if (obj.value) { - // 聚焦元素 - el.focus(); - } - }, - // 当指令所在组件的 VNode 及其子 VNode 全部更新后调用 - // 这是每当绑定的值发生改变时触发的钩子函数 - componentUpdated: function (el, obj) { - if (obj.value) { - el.focus(); - } - } + // 当被绑定的元素插入到 DOM 中时 + inserted: function (el, obj) { + // 这是需要页面刚加载就能进行聚焦操作使用的钩子函数,可以省略的,视具体需求而定 + // 对值进行判断 + const dom = el.querySelector('input') || el.querySelector('textarea'); + dom.focus(); + // el.focus(); + // if (obj.value) { + // // 聚焦元素 + // el.focus(); + // } + }, + // 当指令所在组件的 VNode 及其子 VNode 全部更新后调用 + // 这是每当绑定的值发生改变时触发的钩子函数 + componentUpdated: function (el, obj) { + if (obj.value) { + el.focus(); + } + } }; diff --git a/src/i18n/langs/en/router.js b/src/i18n/langs/en/router.js index 3d668d8a4..d9474d1a2 100644 --- a/src/i18n/langs/en/router.js +++ b/src/i18n/langs/en/router.js @@ -77,5 +77,7 @@ export default { iscsSystem: 'Iscs System', studentManage: 'Student manage', examDetail: 'Exam detail', - raceManage: 'Race manage' + raceManage: 'Race manage', + practiceManage:'Practice manage', + bankManage: 'Bank manage' }; diff --git a/src/i18n/langs/zh/map.js b/src/i18n/langs/zh/map.js index b95471af5..6e4a9e741 100644 --- a/src/i18n/langs/zh/map.js +++ b/src/i18n/langs/zh/map.js @@ -315,12 +315,12 @@ export default { centralized: '是否集中站:', stationRunPlanName: '真实名称:', stationVisible: '是否显示:', - stationNameFont: '车站字体:', + stationNameFont: '车站字体大小:', stationNameFontColor: '车站字体颜色:', stationKmPostShow: '是否显示公里标名称:', stationKmRange: '公里标距离:', stationKmPost: '公里标名称:', - stationKmPostFont: '公里标字体:', + stationKmPostFont: '公里标字体大小:', stationKmPostFontColor: '公里标字体颜色:', stationPositionX: 'x坐标:', stationPositionY: 'y坐标:', @@ -350,7 +350,7 @@ export default { stationstandPosition: '车站坐标:', subhead:'副标题:', subheadDisplay:'是否显示副标题:', - subheadFont:'副标题字体:', + subheadFont:'副标题字体大小:', subheadFontColor:'副标题字体颜色:', subheadPosition:'副标题坐标:', @@ -377,7 +377,7 @@ export default { textCode: '文字编码:', textContent: '文本内容:', - textFont: '字体格式:', + textFont: '字体大小:', textFontColor: '字体颜色:', trainCode: '列车编号:', diff --git a/src/i18n/langs/zh/router.js b/src/i18n/langs/zh/router.js index fc651d643..e46828125 100644 --- a/src/i18n/langs/zh/router.js +++ b/src/i18n/langs/zh/router.js @@ -82,5 +82,7 @@ export default { homeJsxt: '首页', examDetail: '考试详情', raceManage: '竞赛管理', - recaList: '报名列表' + recaList: '报名列表', + bankManage: '题库列表', + practiceManage:'实操列表' }; diff --git a/src/iscs/constant/iscsData.js b/src/iscs/constant/iscsData.js index 1dd16f9e9..f445843bb 100644 --- a/src/iscs/constant/iscsData.js +++ b/src/iscs/constant/iscsData.js @@ -5,7 +5,7 @@ const iscsData = { '21': { 'iscsLineList':[{'point1':{'x':72, 'y':51}, 'point2':{'x':72, 'y':171}, 'code':'IscsLine_1', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':72, 'y':51}}, {'point1':{'x':72, 'y':286}, 'point2':{'x':72, 'y':381}, 'code':'IscsLine_2', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':72, 'y':286}}, {'point1':{'x':71, 'y':381}, 'point2':{'x':161, 'y':381}, 'code':'IscsLine_3', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':71, 'y':381}}, {'point1':{'x':181, 'y':381}, 'point2':{'x':196, 'y':381}, 'code':'IscsLine_4', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':181, 'y':381}}, {'point1':{'x':51, 'y':471}, 'point2':{'x':1041, 'y':471}, 'code':'IscsLine_5', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':51, 'y':471}}, {'point1':{'x':382, 'y':51}, 'point2':{'x':382, 'y':471}, 'code':'IscsLine_6', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':382, 'y':51}}, {'point1':{'x':442, 'y':41}, 'point2':{'x':442, 'y':186}, 'code':'IscsLine_7', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':442, 'y':41}}, {'point1':{'x':442, 'y':196}, 'point2':{'x':442, 'y':356}, 'code':'IscsLine_8', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':442, 'y':196}}, {'point1':{'x':442, 'y':366}, 'point2':{'x':442, 'y':596}, 'code':'IscsLine_9', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':442, 'y':366}}, {'point1':{'x':652, 'y':41}, 'point2':{'x':652, 'y':186}, 'code':'IscsLine_10', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':652, 'y':41}}, {'point1':{'x':652, 'y':196}, 'point2':{'x':652, 'y':596}, 'code':'IscsLine_11', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':652, 'y':196}}, {'point1':{'x':737, 'y':51}, 'point2':{'x':737, 'y':186}, 'code':'IscsLine_12', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':737, 'y':51}}, {'point1':{'x':737, 'y':196}, 'point2':{'x':737, 'y':470}, 'code':'IscsLine_13', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'dashed', 'zlevel':1, 'z':4, 'point':{'x':737, 'y':196}}, {'point1':{'x':72, 'y':301}, 'point2':{'x':102, 'y':301}, 'code':'IscsLine_14', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':72, 'y':301}}, {'point1':{'x':152, 'y':301}, 'point2':{'x':162, 'y':301}, 'code':'IscsLine_15', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':152, 'y':301}}, {'point1':{'x':181, 'y':301}, 'point2':{'x':196, 'y':301}, 'code':'IscsLine_16', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':181, 'y':301}}, {'point1':{'x':210, 'y':171}, 'point2':{'x':210, 'y':281}, 'code':'IscsLine_22', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':210, 'y':171}}, {'point1':{'x':225, 'y':341}, 'point2':{'x':245, 'y':341}, 'code':'IscsLine_23', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':225, 'y':341}}, {'point1':{'x':315, 'y':341}, 'point2':{'x':390, 'y':341}, 'code':'IscsLine_24', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':315, 'y':341}}, {'point1':{'x':405, 'y':341}, 'point2':{'x':450, 'y':341}, 'code':'IscsLine_25', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':405, 'y':341}}, {'point1':{'x':465, 'y':341}, 'point2':{'x':485, 'y':341}, 'code':'IscsLine_26', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':465, 'y':341}}, {'point1':{'x':610, 'y':341}, 'point2':{'x':630, 'y':341}, 'code':'IscsLine_27', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':610, 'y':341}}, {'point1':{'x':645, 'y':341}, 'point2':{'x':745, 'y':341}, 'code':'IscsLine_28', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':645, 'y':341}}, {'point1':{'x':760, 'y':341}, 'point2':{'x':800, 'y':341}, 'code':'IscsLine_29', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':760, 'y':341}}, {'point1':{'x':365, 'y':171}, 'point2':{'x':365, 'y':511}, 'code':'IscsLine_30', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':365, 'y':171}}, {'point1':{'x':365, 'y':511}, 'point2':{'x':525, 'y':511}, 'code':'IscsLine_31', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':365, 'y':511}}, {'point1':{'x':555, 'y':511}, 'point2':{'x':675, 'y':511}, 'code':'IscsLine_32', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':555, 'y':511}}, {'point1':{'x':675, 'y':170}, 'point2':{'x':675, 'y':510}, 'code':'IscsLine_33', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':675, 'y':170}}, {'point1':{'x':485, 'y':296}, 'point2':{'x':485, 'y':386}, 'code':'IscsLine_34', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':485, 'y':296}}, {'point1':{'x':610, 'y':296}, 'point2':{'x':610, 'y':386}, 'code':'IscsLine_35', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':610, 'y':296}}, {'point1':{'x':485, 'y':296}, 'point2':{'x':545, 'y':296}, 'code':'IscsLine_36', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':485, 'y':296}}, {'point1':{'x':485, 'y':326}, 'point2':{'x':545, 'y':326}, 'code':'IscsLine_37', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':485, 'y':326}}, {'point1':{'x':485, 'y':356}, 'point2':{'x':545, 'y':356}, 'code':'IscsLine_38', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#2AF5E6', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':485, 'y':356}}, {'point1':{'x':485, 'y':386}, 'point2':{'x':545, 'y':386}, 'code':'IscsLine_39', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#2AF5E6', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':485, 'y':386}}, {'point1':{'x':555, 'y':296}, 'point2':{'x':610, 'y':296}, 'code':'IscsLine_40', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':555, 'y':296}}, {'point1':{'x':555, 'y':326}, 'point2':{'x':610, 'y':326}, 'code':'IscsLine_41', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':555, 'y':326}}, {'point1':{'x':555, 'y':356}, 'point2':{'x':610, 'y':356}, 'code':'IscsLine_42', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#2AF5E6', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':555, 'y':356}}, {'point1':{'x':555, 'y':386}, 'point2':{'x':610, 'y':386}, 'code':'IscsLine_43', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#2AF5E6', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':555, 'y':386}}, {'point1':{'x':347, 'y':380}, 'point2':{'x':347, 'y':575}, 'code':'IscsLine_44', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':347, 'y':380}}, {'point1':{'x':346, 'y':575}, 'point2':{'x':357, 'y':575}, 'code':'IscsLine_45', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':346, 'y':575}}, {'point1':{'x':372, 'y':575}, 'point2':{'x':392, 'y':575}, 'code':'IscsLine_46', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':372, 'y':575}}, {'point1':{'x':407, 'y':575}, 'point2':{'x':542, 'y':575}, 'code':'IscsLine_47', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':407, 'y':575}}, {'point1':{'x':567, 'y':575}, 'point2':{'x':727, 'y':575}, 'code':'IscsLine_48', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':567, 'y':575}}, {'point1':{'x':742, 'y':575}, 'point2':{'x':767, 'y':575}, 'code':'IscsLine_49', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':742, 'y':575}}, {'point1':{'x':767, 'y':341}, 'point2':{'x':767, 'y':575}, 'code':'IscsLine_50', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':767, 'y':341}}, {'point1':{'x':867, 'y':341}, 'point2':{'x':890, 'y':341}, 'code':'IscsLine_51', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':867, 'y':341}}, {'point1':{'x':920, 'y':381}, 'point2':{'x':935, 'y':381}, 'code':'IscsLine_52', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':920, 'y':381}}, {'point1':{'x':951, 'y':381}, 'point2':{'x':1045, 'y':381}, 'code':'IscsLine_53', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':951, 'y':381}}, {'point1':{'x':1045, 'y':286}, 'point2':{'x':1045, 'y':381}, 'code':'IscsLine_54', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':1045, 'y':286}}, {'point1':{'x':1045, 'y':51}, 'point2':{'x':1045, 'y':171}, 'code':'IscsLine_55', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':1045, 'y':51}}, {'point1':{'x':1020, 'y':51}, 'point2':{'x':1020, 'y':171}, 'code':'IscsLine_56', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':1020, 'y':51}}, {'point1':{'x':990, 'y':171}, 'point2':{'x':1021, 'y':171}, 'code':'IscsLine_57', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':990, 'y':171}}, {'point1':{'x':941, 'y':171}, 'point2':{'x':973, 'y':171}, 'code':'IscsLine_58', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':941, 'y':171}}, {'point1':{'x':859, 'y':171}, 'point2':{'x':869, 'y':171}, 'code':'IscsLine_59', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':859, 'y':171}}, {'point1':{'x':829, 'y':171}, 'point2':{'x':842, 'y':171}, 'code':'IscsLine_60', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':829, 'y':171}}, {'point1':{'x':731, 'y':171}, 'point2':{'x':772, 'y':171}, 'code':'IscsLine_61', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':731, 'y':171}}, {'point1':{'x':701, 'y':171}, 'point2':{'x':713, 'y':171}, 'code':'IscsLine_62', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':701, 'y':171}}, {'point1':{'x':671, 'y':171}, 'point2':{'x':686, 'y':171}, 'code':'IscsLine_63', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':671, 'y':171}}, {'point1':{'x':636, 'y':171}, 'point2':{'x':651, 'y':171}, 'code':'IscsLine_64', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':636, 'y':171}}, {'point1':{'x':561, 'y':171}, 'point2':{'x':619, 'y':171}, 'code':'IscsLine_65', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':561, 'y':171}}, {'point1':{'x':112, 'y':51}, 'point2':{'x':112, 'y':171}, 'code':'IscsLine_66', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':112, 'y':51}}, {'point1':{'x':112, 'y':171}, 'point2':{'x':122, 'y':171}, 'code':'IscsLine_67', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':112, 'y':171}}, {'point1':{'x':142, 'y':171}, 'point2':{'x':152, 'y':171}, 'code':'IscsLine_68', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':142, 'y':171}}, {'point1':{'x':167, 'y':171}, 'point2':{'x':227, 'y':171}, 'code':'IscsLine_69', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':167, 'y':171}}, {'point1':{'x':284, 'y':171}, 'point2':{'x':294, 'y':171}, 'code':'IscsLine_70', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':284, 'y':171}}, {'point1':{'x':314, 'y':171}, 'point2':{'x':329, 'y':171}, 'code':'IscsLine_71', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':314, 'y':171}}, {'point1':{'x':346, 'y':171}, 'point2':{'x':390, 'y':171}, 'code':'IscsLine_72', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':346, 'y':171}}, {'point1':{'x':407, 'y':171}, 'point2':{'x':415, 'y':171}, 'code':'IscsLine_73', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':407, 'y':171}}, {'point1':{'x':431, 'y':171}, 'point2':{'x':450, 'y':171}, 'code':'IscsLine_74', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':431, 'y':171}}, {'point1':{'x':468, 'y':171}, 'point2':{'x':532, 'y':171}, 'code':'IscsLine_75', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#3F566C', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':468, 'y':171}}, {'point1':{'x':1015, 'y':301}, 'point2':{'x':1045, 'y':301}, 'code':'IscsLine_76', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':1015, 'y':301}}, {'point1':{'x':950, 'y':301}, 'point2':{'x':960, 'y':301}, 'code':'IscsLine_77', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':950, 'y':301}}, {'point1':{'x':920, 'y':301}, 'point2':{'x':930, 'y':301}, 'code':'IscsLine_78', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#5DCDC8', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':920, 'y':301}}, {'point1':{'x':905, 'y':261}, 'point2':{'x':905, 'y':281}, 'code':'IscsLine_79', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':905, 'y':261}}, {'point1':{'x':905, 'y':225}, 'point2':{'x':905, 'y':245}, 'code':'IscsLine_80', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':905, 'y':225}}, {'point1':{'x':1071, 'y':223}, 'point2':{'x':1071, 'y':241}, 'code':'IscsLine_81', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#0C68E7', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':1071, 'y':223}}], 'iscsRectList':[{'point':{'x':52, 'y':171}, 'code':'IscsRect_1', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':40, 'height':115, 'zlevel':1, 'z':3}, {'point':{'x':195, 'y':281}, 'code':'IscsRect_2', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#A39A9A', 'width':30, 'height':111, 'zlevel':1, 'z':3}, {'point':{'x':890, 'y':281}, 'code':'IscsRect_3', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#A39A9A', 'width':30, 'height':111, 'zlevel':1, 'z':3}, {'point':{'x':1025, 'y':171}, 'code':'IscsRect_4', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':40, 'height':115, 'zlevel':1, 'z':3}, {'point':{'x':870, 'y':146}, 'code':'IscsRect_5', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#A39A9A', 'width':70, 'height':45, 'zlevel':1, 'z':3}], 'iscsTextList':[{'point':{'x':64, 'y':180}, 'code':'IscsText_1', '_type':'IscsText', 'context':'新\n\n\n风\n\n\n道', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':202, 'y':290}, 'code':'IscsText_2', '_type':'IscsText', 'context':'混\n\n\n风\n\n\n室', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':481, 'y':492}, 'code':'IscsText_3', '_type':'IscsText', 'context':'站台回排风/排烟风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':515, 'y':279}, 'code':'IscsText_4', '_type':'IscsText', 'context':'站厅送风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':515, 'y':309}, 'code':'IscsText_5', '_type':'IscsText', 'context':'站厅送风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':515, 'y':340}, 'code':'IscsText_6', '_type':'IscsText', 'context':'站厅送风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':515, 'y':370}, 'code':'IscsText_7', '_type':'IscsText', 'context':'站厅送风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':523, 'y':556}, 'code':'IscsText_8', '_type':'IscsText', 'context':'站台送风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':53, 'y':451}, 'code':'IscsText_9', '_type':'IscsText', 'context':'站厅层', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':53, 'y':482}, 'code':'IscsText_10', '_type':'IscsText', 'context':'站台层', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':293, 'y':53}, 'code':'IscsText_11', '_type':'IscsText', 'context':'左端环控机房', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':758, 'y':53}, 'code':'IscsText_12', '_type':'IscsText', 'context':'右端环控机房', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':386, 'y':53}, 'code':'IscsText_13', '_type':'IscsText', 'context':'左端管理\n 用房区', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':678, 'y':53}, 'code':'IscsText_14', '_type':'IscsText', 'context':'右端管理\n 用房区', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':456, 'y':55}, 'code':'IscsText_15', '_type':'IscsText', 'context':'公共区', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':598, 'y':54}, 'code':'IscsText_16', '_type':'IscsText', 'context':'公共区', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':897, 'y':290}, 'code':'IscsText_17', '_type':'IscsText', 'context':'混\n\n\n风\n\n\n室', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1039, 'y':180}, 'code':'IscsText_18', '_type':'IscsText', 'context':'新\n\n\n风\n\n\n道', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1036, 'y':37}, 'code':'IscsText_19', '_type':'IscsText', 'context':'新风井', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':993, 'y':37}, 'code':'IscsText_20', '_type':'IscsText', 'context':'排风井', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':877, 'y':164}, 'code':'IscsText_21', '_type':'IscsText', 'context':'回排风室', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':47, 'y':37}, 'code':'IscsText_22', '_type':'IscsText', 'context':'新风井', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':96, 'y':37}, 'code':'IscsText_23', '_type':'IscsText', 'context':'排风井', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':130, 'y':131}, 'code':'IscsText_24', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':123, 'y':119}, 'code':'IscsText_25', '_type':'IscsText', 'context':'MD-4', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':158, 'y':138}, 'code':'IscsText_26', '_type':'IscsText', 'context':'FD2-1', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':156, 'y':195}, 'code':'IscsText_27', '_type':'IscsText', 'context':'FD1-1', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':150, 'y':239}, 'code':'IscsText_28', '_type':'IscsText', 'context':'MD-3', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':214, 'y':220}, 'code':'IscsText_29', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':179, 'y':268}, 'code':'IscsText_30', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':145, 'y':262}, 'code':'IscsText_31', '_type':'IscsText', 'context':'MD-2', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':111, 'y':271}, 'code':'IscsText_32', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':136, 'y':356}, 'code':'IscsText_33', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':259, 'y':135}, 'code':'IscsText_34', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':307, 'y':133}, 'code':'IscsText_35', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':415, 'y':129}, 'code':'IscsText_36', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':653, 'y':131}, 'code':'IscsText_37', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':711, 'y':131}, 'code':'IscsText_38', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':809, 'y':135}, 'code':'IscsText_39', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':984, 'y':133}, 'code':'IscsText_40', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':770, 'y':301}, 'code':'IscsText_41', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':685, 'y':300}, 'code':'IscsText_42', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':682, 'y':401}, 'code':'IscsText_43', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':795, 'y':425}, 'code':'IscsText_44', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':388, 'y':408}, 'code':'IscsText_45', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':368, 'y':384}, 'code':'IscsText_46', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':347, 'y':314}, 'code':'IscsText_47', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':286, 'y':302}, 'code':'IscsText_48', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':425, 'y':302}, 'code':'IscsText_49', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':472, 'y':150}, 'code':'IscsText_50', '_type':'IscsText', 'context':'站厅回风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':550, 'y':150}, 'code':'IscsText_51', '_type':'IscsText', 'context':'站厅回风管', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':357, 'y':543}, 'code':'IscsText_52', '_type':'IscsText', 'context':'FD1-9', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':396, 'y':543}, 'code':'IscsText_53', '_type':'IscsText', 'context':'FD1-10', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':715, 'y':543}, 'code':'IscsText_54', '_type':'IscsText', 'context':'FD1-11', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':385, 'y':448}, 'code':'IscsText_55', '_type':'IscsText', 'context':'FD2-2', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':612, 'y':444}, 'code':'IscsText_56', '_type':'IscsText', 'context':'FD2-7', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':612, 'y':415}, 'code':'IscsText_57', '_type':'IscsText', 'context':'MD-14', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':707, 'y':422}, 'code':'IscsText_58', '_type':'IscsText', 'context':'MD-19', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':720, 'y':384}, 'code':'IscsText_59', '_type':'IscsText', 'context':'FD1-7', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':388, 'y':421}, 'code':'IscsText_60', '_type':'IscsText', 'context':'MD-8', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':280, 'y':397}, 'code':'IscsText_61', '_type':'IscsText', 'context':'MD-17', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':291, 'y':367}, 'code':'IscsText_62', '_type':'IscsText', 'context':'FD1-4', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':375, 'y':308}, 'code':'IscsText_63', '_type':'IscsText', 'context':'FD1-2', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':402, 'y':286}, 'code':'IscsText_64', '_type':'IscsText', 'context':'MD-16', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':317, 'y':302}, 'code':'IscsText_65', '_type':'IscsText', 'context':'MD-5', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':239, 'y':302}, 'code':'IscsText_66', '_type':'IscsText', 'context':'AHU-1', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':146, 'y':342}, 'code':'IscsText_67', '_type':'IscsText', 'context':'MD-1', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':98, 'y':257}, 'code':'IscsText_68', '_type':'IscsText', 'context':'FAF-1', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':446, 'y':361}, 'code':'IscsText_69', '_type':'IscsText', 'context':'FD1-3', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':615, 'y':310}, 'code':'IscsText_70', '_type':'IscsText', 'context':'FD1-6', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':686, 'y':287}, 'code':'IscsText_71', '_type':'IscsText', 'context':'MD-18', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':757, 'y':289}, 'code':'IscsText_72', '_type':'IscsText', 'context':'MD-15', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':726, 'y':312}, 'code':'IscsText_73', '_type':'IscsText', 'context':'FD1-5', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':799, 'y':304}, 'code':'IscsText_74', '_type':'IscsText', 'context':'AHU-2', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':974, 'y':119}, 'code':'IscsText_75', '_type':'IscsText', 'context':'MD-12', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':837, 'y':135}, 'code':'IscsText_76', '_type':'IscsText', 'context':'FD2-8', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':755, 'y':122}, 'code':'IscsText_77', '_type':'IscsText', 'context':'RAF/SEF-2', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':711, 'y':119}, 'code':'IscsText_78', '_type':'IscsText', 'context':'MD-13', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':654, 'y':118}, 'code':'IscsText_79', '_type':'IscsText', 'context':'MD-11', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':674, 'y':141}, 'code':'IscsText_80', '_type':'IscsText', 'context':'FD2-6', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':614, 'y':140}, 'code':'IscsText_81', '_type':'IscsText', 'context':'FD2-5', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':470, 'y':177}, 'code':'IscsText_82', '_type':'IscsText', 'context':'FD2-4', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':410, 'y':113}, 'code':'IscsText_83', '_type':'IscsText', 'context':'MD-7', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':374, 'y':141}, 'code':'IscsText_84', '_type':'IscsText', 'context':'FD2-3', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':332, 'y':141}, 'code':'IscsText_85', '_type':'IscsText', 'context':'FD2-9', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':288, 'y':120}, 'code':'IscsText_86', '_type':'IscsText', 'context':'MD-6', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':204, 'y':121}, 'code':'IscsText_87', '_type':'IscsText', 'context':'RAF/SEF-1', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':952, 'y':347}, 'code':'IscsText_88', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':945, 'y':264}, 'code':'IscsText_89', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':911, 'y':230}, 'code':'IscsText_90', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':998, 'y':264}, 'code':'IscsText_91', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':847, 'y':211}, 'code':'IscsText_92', '_type':'IscsText', 'context':'FD1-8', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':839, 'y':251}, 'code':'IscsText_93', '_type':'IscsText', 'context':'MD-20', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':930, 'y':251}, 'code':'IscsText_94', '_type':'IscsText', 'context':'MD-10', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':976, 'y':250}, 'code':'IscsText_95', '_type':'IscsText', 'context':'FAF-2', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':947, 'y':333}, 'code':'IscsText_96', '_type':'IscsText', 'context':'MD-9', 'textFill':'#5DCDC8', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':844, 'y':304}, 'code':'IscsText_97', '_type':'IscsText', 'context':'BAS', 'textFill':'#FFFFFF', 'fontSize':13, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}], 'volumeControlDamperList':[{'point':{'x':161, 'y':355}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_1', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':161, 'y':278}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_2', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':184, 'y':231}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_3', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':325, 'y':315}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_4', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':412, 'y':314}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_5', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':695, 'y':314}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_6', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':770, 'y':314}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_7', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':320, 'y':385}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_8', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':342, 'y':411}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_9', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':656, 'y':413}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_10', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':748, 'y':419}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_11', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':933, 'y':355}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_12', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':973, 'y':145}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_13', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':712, 'y':145}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_14', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':651, 'y':145}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_15', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':122, 'y':144}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_16', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':294, 'y':144}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_17', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':415, 'y':144}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_18', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':930, 'y':274}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_19', 'width':20, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':880, 'y':241}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_20', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}], 'ventilatorList':[{'point':{'x':103, 'y':282}, '_type':'Ventilator', 'code':'Ventilator_1', 'width':50, 'isRight':true, 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':773, 'y':150}, '_type':'Ventilator', 'code':'Ventilator_2', 'width':55, 'isRight':true, 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':227, 'y':150}, '_type':'Ventilator', 'code':'Ventilator_3', 'width':55, 'isRight':false, 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':959, 'y':280}, '_type':'Ventilator', 'code':'Ventilator_4', 'width':55, 'isRight':false, 'color':'#00ff00', 'zlevel':1, 'z':4}], 'fireDamperList':[{'point':{'x':195, 'y':195}, '_type':'FireDamper', 'code':'FireDamper_1', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':389, 'y':325}, '_type':'FireDamper', 'code':'FireDamper_2', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':449, 'y':326}, '_type':'FireDamper', 'code':'FireDamper_3', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':630, 'y':326}, '_type':'FireDamper', 'code':'FireDamper_4', 'width':15, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':745, 'y':326}, '_type':'FireDamper', 'code':'FireDamper_5', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':332, 'y':365}, '_type':'FireDamper', 'code':'FireDamper_6', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':358, 'y':559}, '_type':'FireDamper', 'code':'FireDamper_7', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':392, 'y':559}, '_type':'FireDamper', 'code':'FireDamper_8', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':727, 'y':560}, '_type':'FireDamper', 'code':'FireDamper_9', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':752, 'y':398}, '_type':'FireDamper', 'code':'FireDamper_10', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':890, 'y':209}, '_type':'FireDamper', 'code':'FireDamper_11', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}], 'airConditionerList':[{'point':{'x':238, 'y':321}, '_type':'AirConditioner', 'code':'AirConditioner_1', 'width':75, 'isRight':true, 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':800, 'y':317}, '_type':'AirConditioner', 'code':'AirConditioner_2', 'width':75, 'isRight':false, 'color':'#00ff00', 'zlevel':1, 'z':4}], 'smookExhaustFdList':[{'point':{'x':350, 'y':445}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_1', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':660, 'y':445}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_2', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':843, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_3', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':685, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_4', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':620, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_5', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':153, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_6', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':330, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_7', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':391, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_8', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':452, 'y':155}, '_type':'SmookExhaustFd', 'code':'SmookExhaustFd_9', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}], 'iscsButtonList':[{'point':{'x':1030, 'y':25}, 'code':'IscsButton_1', '_type':'IscsButton', 'levelPadding':30, 'verticalPadding':5, 'context':'图元说明', 'function':'GraphicEle', 'fontSize':14, 'zlevel':1, 'z':4}] }, '22':{ - 'iscsRectList':[{'point':{'x':60, 'y':30}, 'code':'IscsRect_1', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':150, 'y':30}, 'code':'IscsRect_2', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':240, 'y':30}, 'code':'IscsRect_3', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':330, 'y':30}, 'code':'IscsRect_4', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':555, 'y':30}, 'code':'IscsRect_5', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':125, 'height':115, 'zlevel':1, 'z':3}, {'point':{'x':680, 'y':30}, 'code':'IscsRect_6', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':355, 'height':135, 'zlevel':1, 'z':3}, {'point':{'x':60, 'y':135}, 'code':'IscsRect_7', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':110, 'height':150, 'zlevel':1, 'z':3}, {'point':{'x':170, 'y':135}, 'code':'IscsRect_8', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':45, 'height':70, 'zlevel':1, 'z':3}, {'point':{'x':215, 'y':135}, 'code':'IscsRect_9', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':45, 'height':70, 'zlevel':1, 'z':3}, {'point':{'x':170, 'y':205}, 'code':'IscsRect_10', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':80, 'zlevel':1, 'z':3}], 'iscsLineList':[{'point1':{'x':80, 'y':50}, 'point2':{'x':495, 'y':50}, 'code':'IscsLine_1', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':80, 'y':50}}, {'point1':{'x':505, 'y':50}, 'point2':{'x':560, 'y':50}, 'code':'IscsLine_2', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':505, 'y':50}}] + 'iscsRectList':[{'point':{'x':60, 'y':30}, 'code':'IscsRect_1', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':150, 'y':30}, 'code':'IscsRect_2', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':240, 'y':30}, 'code':'IscsRect_3', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':330, 'y':30}, 'code':'IscsRect_4', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':65, 'zlevel':1, 'z':3}, {'point':{'x':555, 'y':30}, 'code':'IscsRect_5', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':125, 'height':115, 'zlevel':1, 'z':3}, {'point':{'x':680, 'y':30}, 'code':'IscsRect_6', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':355, 'height':135, 'zlevel':1, 'z':3}, {'point':{'x':60, 'y':135}, 'code':'IscsRect_7', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':110, 'height':150, 'zlevel':1, 'z':3}, {'point':{'x':170, 'y':135}, 'code':'IscsRect_8', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':45, 'height':70, 'zlevel':1, 'z':3}, {'point':{'x':215, 'y':135}, 'code':'IscsRect_9', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':45, 'height':70, 'zlevel':1, 'z':3}, {'point':{'x':170, 'y':205}, 'code':'IscsRect_10', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':90, 'height':80, 'zlevel':1, 'z':3}, {'point':{'x':770, 'y':35}, 'code':'IscsRect_11', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':40, 'height':30, 'zlevel':1, 'z':3}, {'point':{'x':50, 'y':420}, 'code':'IscsRect_12', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':35, 'height':110, 'zlevel':1, 'z':3}, {'point':{'x':85, 'y':420}, 'code':'IscsRect_13', '_type':'IscsRect', 'fillColor':'rgba(0, 0, 0, 0)', 'borderWidth':1, 'strokeColor':'#FFFFFF', 'width':70, 'height':110, 'zlevel':1, 'z':3}], 'iscsLineList':[{'point1':{'x':79, 'y':50}, 'point2':{'x':495, 'y':50}, 'code':'IscsLine_1', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':79, 'y':50}}, {'point1':{'x':505, 'y':50}, 'point2':{'x':560, 'y':50}, 'code':'IscsLine_2', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':505, 'y':50}}, {'point1':{'x':575, 'y':50}, 'point2':{'x':685, 'y':50}, 'code':'IscsLine_3', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':575, 'y':50}}, {'point1':{'x':700, 'y':50}, 'point2':{'x':735, 'y':50}, 'code':'IscsLine_4', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':700, 'y':50}}, {'point1':{'x':750, 'y':50}, 'point2':{'x':770, 'y':50}, 'code':'IscsLine_5', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':750, 'y':50}}, {'point1':{'x':810, 'y':50}, 'point2':{'x':830, 'y':50}, 'code':'IscsLine_6', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':810, 'y':50}}, {'point1':{'x':80, 'y':50}, 'point2':{'x':80, 'y':100}, 'code':'IscsLine_7', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':80, 'y':50}}, {'point1':{'x':80, 'y':114}, 'point2':{'x':80, 'y':155}, 'code':'IscsLine_8', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':80, 'y':114}}, {'point1':{'x':90, 'y':185}, 'point2':{'x':90, 'y':205}, 'code':'IscsLine_9', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':90, 'y':185}}, {'point1':{'x':90, 'y':223}, 'point2':{'x':90, 'y':238}, 'code':'IscsLine_10', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':90, 'y':223}}, {'point1':{'x':90, 'y':255}, 'point2':{'x':90, 'y':310}, 'code':'IscsLine_11', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':90, 'y':255}}, {'point1':{'x':89, 'y':310}, 'point2':{'x':475, 'y':310}, 'code':'IscsLine_12', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':89, 'y':310}}, {'point1':{'x':194, 'y':314}, 'point2':{'x':194, 'y':330}, 'code':'IscsLine_13', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':194, 'y':314}}, {'point1':{'x':195, 'y':330}, 'point2':{'x':94, 'y':330}, 'code':'IscsLine_14', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':195, 'y':330}}, {'point1':{'x':94, 'y':330}, 'point2':{'x':94, 'y':480}, 'code':'IscsLine_15', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':94, 'y':330}}, {'point1':{'x':64, 'y':480}, 'point2':{'x':449, 'y':480}, 'code':'IscsLine_16', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':64, 'y':480}}, {'point1':{'x':120, 'y':114}, 'point2':{'x':120, 'y':155}, 'code':'IscsLine_17', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':120, 'y':114}}, {'point1':{'x':120, 'y':75}, 'point2':{'x':120, 'y':100}, 'code':'IscsLine_18', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':120, 'y':75}}, {'point1':{'x':120, 'y':75}, 'point2':{'x':560, 'y':75}, 'code':'IscsLine_19', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':120, 'y':75}}, {'point1':{'x':575, 'y':75}, 'point2':{'x':685, 'y':75}, 'code':'IscsLine_20', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':575, 'y':75}}, {'point1':{'x':700, 'y':75}, 'point2':{'x':710, 'y':75}, 'code':'IscsLine_21', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':700, 'y':75}}, {'point1':{'x':755, 'y':75}, 'point2':{'x':755, 'y':85}, 'code':'IscsLine_23', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':755, 'y':75}}, {'point1':{'x':725, 'y':75}, 'point2':{'x':755, 'y':75}, 'code':'IscsLine_24', '_type':'IscsLine', 'lineWidth':1, 'fillColor':'#fff', 'classify':'solid', 'zlevel':1, 'z':4, 'point':{'x':725, 'y':75}}], 'fireDamperList':[{'point':{'x':560, 'y':34}, '_type':'FireDamper', 'code':'FireDamper_1', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':685, 'y':36}, '_type':'FireDamper', 'code':'FireDamper_2', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':68, 'y':100}, '_type':'FireDamper', 'code':'FireDamper_3', 'width':25, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':75, 'y':239}, '_type':'FireDamper', 'code':'FireDamper_4', 'width':30, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':108, 'y':100}, '_type':'FireDamper', 'code':'FireDamper_5', 'width':25, 'direction':'horizontal', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':559, 'y':67}, '_type':'FireDamper', 'code':'FireDamper_6', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}, {'point':{'x':685, 'y':69}, '_type':'FireDamper', 'code':'FireDamper_7', 'width':15, 'direction':'vertical', 'color':'#00ff00', 'zlevel':1, 'z':4}], 'volumeControlDamperList':[{'point':{'x':735, 'y':34}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_1', 'width':15, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':67, 'y':201}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_2', 'width':20, 'rotateAngle':'90', 'color':'#00ff00', 'zlevel':1, 'z':5}, {'point':{'x':710, 'y':60}, '_type':'VolumeControlDamper', 'code':'VolumeControlDamper_3', 'width':15, 'rotateAngle':'0', 'color':'#00ff00', 'zlevel':1, 'z':5}], 'orbitalVentilatorList':[], 'airConditionerList':[{'point':{'x':826, 'y':33}, '_type':'AirConditioner', 'code':'AirConditioner_1', 'width':70, 'isRight':true, 'color':'#00ff00', 'zlevel':1, 'z':4}] }, '31': {'platformScreenDoorList':[{'point':{'x':135, 'y':225}, 'code':'PlatformScreenDoor_1', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':198, 'y':225}, 'code':'PlatformScreenDoor_2', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':324, 'y':225}, 'code':'PlatformScreenDoor_4', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':260, 'y':225}, 'code':'PlatformScreenDoor_5', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':385, 'y':225}, 'code':'PlatformScreenDoor_6', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':448, 'y':225}, 'code':'PlatformScreenDoor_7', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':512, 'y':225}, 'code':'PlatformScreenDoor_8', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':576, 'y':225}, 'code':'PlatformScreenDoor_9', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':830, 'y':225}, 'code':'PlatformScreenDoor_10', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':767, 'y':225}, 'code':'PlatformScreenDoor_11', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':702, 'y':225}, 'code':'PlatformScreenDoor_12', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':639, 'y':225}, 'code':'PlatformScreenDoor_13', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1330, 'y':225}, 'code':'PlatformScreenDoor_14', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1267, 'y':225}, 'code':'PlatformScreenDoor_15', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1205, 'y':225}, 'code':'PlatformScreenDoor_16', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1143, 'y':225}, 'code':'PlatformScreenDoor_17', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1080, 'y':225}, 'code':'PlatformScreenDoor_18', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1017, 'y':225}, 'code':'PlatformScreenDoor_19', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':955, 'y':225}, 'code':'PlatformScreenDoor_20', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':892, 'y':225}, 'code':'PlatformScreenDoor_21', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':143, 'y':638}, 'code':'PlatformScreenDoor_22', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':455, 'y':638}, 'code':'PlatformScreenDoor_23', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':519, 'y':638}, 'code':'PlatformScreenDoor_24', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':582, 'y':638}, 'code':'PlatformScreenDoor_25', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1085, 'y':638}, 'code':'PlatformScreenDoor_26', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1022, 'y':638}, 'code':'PlatformScreenDoor_27', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':958, 'y':638}, 'code':'PlatformScreenDoor_28', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':896, 'y':638}, 'code':'PlatformScreenDoor_29', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':833, 'y':638}, 'code':'PlatformScreenDoor_30', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':770, 'y':638}, 'code':'PlatformScreenDoor_31', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':707, 'y':638}, 'code':'PlatformScreenDoor_32', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':645, 'y':638}, 'code':'PlatformScreenDoor_33', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':331, 'y':638}, 'code':'PlatformScreenDoor_34', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':269, 'y':638}, 'code':'PlatformScreenDoor_35', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':206, 'y':638}, 'code':'PlatformScreenDoor_36', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':394, 'y':638}, 'code':'PlatformScreenDoor_37', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1333, 'y':638}, 'code':'PlatformScreenDoor_38', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1271, 'y':638}, 'code':'PlatformScreenDoor_39', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1209, 'y':638}, 'code':'PlatformScreenDoor_40', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':1147, 'y':638}, 'code':'PlatformScreenDoor_41', '_type':'PlatformScreenDoor', 'width':60, 'zlevel':1, 'z':4}], 'endDoorList':[{'point':{'x':97, 'y':209}, 'code':'EndDoor_1', '_type':'EndDoor', 'width':19, 'zlevel':1, 'z':4}, {'point':{'x':1407, 'y':210}, 'code':'EndDoor_2', '_type':'EndDoor', 'width':19, 'zlevel':1, 'z':4}, {'point':{'x':113, 'y':654}, 'code':'EndDoor_3', '_type':'EndDoor', 'width':19, 'zlevel':1, 'z':4}, {'point':{'x':1405, 'y':659}, 'code':'EndDoor_4', '_type':'EndDoor', 'width':19, 'zlevel':1, 'z':4}], 'borderRadiusList':[{'point':{'x':141, 'y':157}, 'code':'BorderRadius_1', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':391, 'y':158}, 'code':'BorderRadius_2', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':644, 'y':157}, 'code':'BorderRadius_3', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':896, 'y':157}, 'code':'BorderRadius_4', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':1148, 'y':157}, 'code':'BorderRadius_5', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':147, 'y':717}, 'code':'BorderRadius_6', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':1150, 'y':718}, 'code':'BorderRadius_7', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':649, 'y':716}, 'code':'BorderRadius_8', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':900, 'y':717}, 'code':'BorderRadius_9', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}, {'point':{'x':399, 'y':717}, 'code':'BorderRadius_10', '_type':'BorderRadius', 'width':240, 'height':26, 'zlevel':1, 'z':4}], 'iscsLineList':[{'point1':{'x':104, 'y':260}, 'point2':{'x':1438, 'y':260}, 'code':'IscsLine_1', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':104, 'y':260}}, {'point1':{'x':134, 'y':220}, 'point2':{'x':1391, 'y':220}, 'code':'IscsLine_2', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':134, 'y':220}}, {'point1':{'x':103, 'y':189}, 'point2':{'x':1436, 'y':189}, 'code':'IscsLine_3', 'classify':'solid', '_type':'IscsLine', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':103, 'y':189}}, {'point1':{'x':104, 'y':150}, 'point2':{'x':1437, 'y':150}, 'code':'IscsLine_4', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':104, 'y':150}}, {'point1':{'x':133, 'y':190}, 'point2':{'x':133, 'y':261}, 'code':'IscsLine_5', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':133, 'y':190}}, {'point1':{'x':1393, 'y':189}, 'point2':{'x':1393, 'y':260}, 'code':'IscsLine_6', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':1393, 'y':189}}, {'point1':{'x':385, 'y':149}, 'point2':{'x':385, 'y':260}, 'code':'IscsLine_7', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':385, 'y':149}}, {'point1':{'x':637, 'y':149}, 'point2':{'x':637, 'y':259}, 'code':'IscsLine_8', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':637, 'y':149}}, {'point1':{'x':1142, 'y':149}, 'point2':{'x':1142, 'y':259}, 'code':'IscsLine_9', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':1142, 'y':149}}, {'point1':{'x':892, 'y':149}, 'point2':{'x':892, 'y':259}, 'code':'IscsLine_10', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':892, 'y':149}}, {'point1':{'x':109, 'y':634}, 'point2':{'x':1439, 'y':634}, 'code':'IscsLine_11', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':109, 'y':634}}, {'point1':{'x':108, 'y':749}, 'point2':{'x':1438, 'y':749}, 'code':'IscsLine_12', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':108, 'y':749}}, {'point1':{'x':107, 'y':712}, 'point2':{'x':1437, 'y':712}, 'code':'IscsLine_13', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':107, 'y':712}}, {'point1':{'x':142, 'y':671}, 'point2':{'x':1393, 'y':671}, 'code':'IscsLine_14', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':142, 'y':671}}, {'point1':{'x':141, 'y':633}, 'point2':{'x':141, 'y':713}, 'code':'IscsLine_15', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':141, 'y':633}}, {'point1':{'x':1395, 'y':633}, 'point2':{'x':1395, 'y':713}, 'code':'IscsLine_16', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':1395, 'y':633}}, {'point1':{'x':392, 'y':633}, 'point2':{'x':392, 'y':749}, 'code':'IscsLine_17', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':392, 'y':633}}, {'point1':{'x':644, 'y':633}, 'point2':{'x':644, 'y':749}, 'code':'IscsLine_18', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':644, 'y':633}}, {'point1':{'x':894, 'y':634}, 'point2':{'x':894, 'y':749}, 'code':'IscsLine_19', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':894, 'y':634}}, {'point1':{'x':1146, 'y':634}, 'point2':{'x':1146, 'y':749}, 'code':'IscsLine_20', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':1146, 'y':634}}, {'point1':{'x':408, 'y':301}, 'point2':{'x':408, 'y':601}, 'code':'IscsLine_21', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':408, 'y':301}}, {'point1':{'x':1140, 'y':299}, 'point2':{'x':1140, 'y':600}, 'code':'IscsLine_22', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':1140, 'y':299}}, {'point1':{'x':644, 'y':301}, 'point2':{'x':644, 'y':391}, 'code':'IscsLine_23', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':644, 'y':301}}, {'point1':{'x':221, 'y':328}, 'point2':{'x':481, 'y':328}, 'code':'IscsLine_24', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':221, 'y':328}}, {'point1':{'x':221, 'y':370}, 'point2':{'x':481, 'y':370}, 'code':'IscsLine_25', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':221, 'y':370}}, {'point1':{'x':220, 'y':393}, 'point2':{'x':480, 'y':393}, 'code':'IscsLine_26', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':220, 'y':393}}, {'point1':{'x':221, 'y':415}, 'point2':{'x':481, 'y':415}, 'code':'IscsLine_27', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':221, 'y':415}}, {'point1':{'x':220, 'y':436}, 'point2':{'x':480, 'y':436}, 'code':'IscsLine_28', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':220, 'y':436}}, {'point1':{'x':221, 'y':458}, 'point2':{'x':481, 'y':458}, 'code':'IscsLine_29', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':221, 'y':458}}, {'point1':{'x':222, 'y':479}, 'point2':{'x':482, 'y':479}, 'code':'IscsLine_30', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':222, 'y':479}}, {'point1':{'x':221, 'y':500}, 'point2':{'x':481, 'y':500}, 'code':'IscsLine_31', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':221, 'y':500}}, {'point1':{'x':220, 'y':521}, 'point2':{'x':480, 'y':521}, 'code':'IscsLine_32', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':220, 'y':521}}, {'point1':{'x':220, 'y':539}, 'point2':{'x':480, 'y':539}, 'code':'IscsLine_33', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':220, 'y':539}}, {'point1':{'x':219, 'y':580}, 'point2':{'x':479, 'y':580}, 'code':'IscsLine_34', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':219, 'y':580}}, {'point1':{'x':219, 'y':560}, 'point2':{'x':479, 'y':560}, 'code':'IscsLine_35', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':219, 'y':560}}, {'point1':{'x':220, 'y':349}, 'point2':{'x':480, 'y':349}, 'code':'IscsLine_36', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':220, 'y':349}}, {'point1':{'x':511, 'y':368}, 'point2':{'x':701, 'y':368}, 'code':'IscsLine_37', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':511, 'y':368}}, {'point1':{'x':513, 'y':346}, 'point2':{'x':703, 'y':346}, 'code':'IscsLine_38', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':513, 'y':346}}, {'point1':{'x':512, 'y':323}, 'point2':{'x':702, 'y':323}, 'code':'IscsLine_39', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':512, 'y':323}}, {'point1':{'x':954, 'y':408}, 'point2':{'x':1214, 'y':408}, 'code':'IscsLine_40', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':408}}, {'point1':{'x':952, 'y':450}, 'point2':{'x':1212, 'y':450}, 'code':'IscsLine_41', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':952, 'y':450}}, {'point1':{'x':954, 'y':367}, 'point2':{'x':1214, 'y':367}, 'code':'IscsLine_42', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':367}}, {'point1':{'x':955, 'y':348}, 'point2':{'x':1215, 'y':348}, 'code':'IscsLine_43', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':955, 'y':348}}, {'point1':{'x':955, 'y':326}, 'point2':{'x':1215, 'y':326}, 'code':'IscsLine_44', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':955, 'y':326}}, {'point1':{'x':955, 'y':429}, 'point2':{'x':1215, 'y':429}, 'code':'IscsLine_45', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':955, 'y':429}}, {'point1':{'x':955, 'y':471}, 'point2':{'x':1215, 'y':471}, 'code':'IscsLine_46', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':955, 'y':471}}, {'point1':{'x':954, 'y':388}, 'point2':{'x':1214, 'y':388}, 'code':'IscsLine_47', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':388}}, {'point1':{'x':954, 'y':493}, 'point2':{'x':1214, 'y':493}, 'code':'IscsLine_48', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':493}}, {'point1':{'x':954, 'y':517}, 'point2':{'x':1214, 'y':517}, 'code':'IscsLine_49', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':517}}, {'point1':{'x':954, 'y':539}, 'point2':{'x':1214, 'y':539}, 'code':'IscsLine_50', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':539}}, {'point1':{'x':955, 'y':579}, 'point2':{'x':1214, 'y':579}, 'code':'IscsLine_51', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':955, 'y':579}}, {'point1':{'x':954, 'y':559}, 'point2':{'x':1213, 'y':559}, 'code':'IscsLine_52', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':954, 'y':559}}], 'iscsRectList':[{'point':{'x':220, 'y':300}, 'code':'IscsRect_1', '_type':'IscsRect', 'fillColor':'rgba(255, 0, 0, 0)', 'borderWidth':2, 'strokeColor':'#FFFFFF', 'width':260, 'height':300, 'zlevel':1, 'z':3}, {'point':{'x':512, 'y':300}, 'code':'IscsRect_2', '_type':'IscsRect', 'fillColor':'rgba(255, 0, 0, 0)', 'borderWidth':2, 'strokeColor':'#FFFFFF', 'width':190, 'height':90, 'zlevel':1, 'z':3}, {'point':{'x':954, 'y':300}, 'code':'IscsRect_3', '_type':'IscsRect', 'fillColor':'rgba(255, 0, 0, 0)', 'borderWidth':2, 'strokeColor':'#FFFFFF', 'width':260, 'height':300, 'zlevel':1, 'z':3}], 'iscsTextList':[{'point':{'x':229, 'y':163}, 'code':'IscsText_1', '_type':'IscsText', 'context':'车厢1', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':483, 'y':162}, 'code':'IscsText_2', '_type':'IscsText', 'context':'车厢2', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':747, 'y':161}, 'code':'IscsText_3', '_type':'IscsText', 'context':'车厢3', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':991, 'y':161}, 'code':'IscsText_4', '_type':'IscsText', 'context':'车厢4', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1243, 'y':162}, 'code':'IscsText_5', '_type':'IscsText', 'context':'车厢5', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':239, 'y':722}, 'code':'IscsText_6', '_type':'IscsText', 'context':'车厢1', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':491, 'y':722}, 'code':'IscsText_7', '_type':'IscsText', 'context':'车厢2', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':742, 'y':722}, 'code':'IscsText_8', '_type':'IscsText', 'context':'车厢3', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':989, 'y':723}, 'code':'IscsText_9', '_type':'IscsText', 'context':'车厢4', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1242, 'y':722}, 'code':'IscsText_10', '_type':'IscsText', 'context':'车厢5', 'textFill':'#FFFFFF', 'fontSize':20, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':100, 'y':131}, 'code':'IscsText_11', '_type':'IscsText', 'context':'下行', 'textFill':'#20B8C1', 'fontSize':14, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1406, 'y':755}, 'code':'IscsText_12', '_type':'IscsText', 'context':'上行', 'textFill':'#20B8C1', 'fontSize':14, 'fontWeight':400, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':280, 'y':308}, 'code':'IscsText_13', '_type':'IscsText', 'context':'下行站台', 'textFill':'#FFFFFF', 'fontSize':16, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':430, 'y':309}, 'code':'IscsText_14', '_type':'IscsText', 'context':'状态', 'textFill':'#FFFFFF', 'fontSize':16, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1011, 'y':306}, 'code':'IscsText_15', '_type':'IscsText', 'context':'上行站台', 'textFill':'#FFFFFF', 'fontSize':16, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1163, 'y':308}, 'code':'IscsText_16', '_type':'IscsText', 'context':'状态', 'textFill':'#FFFFFF', 'fontSize':16, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':334}, 'code':'IscsText_17', '_type':'IscsText', 'context':'滑动门&应急门开门故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':354}, 'code':'IscsText_18', '_type':'IscsText', 'context':'滑动门&应急门关门故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':376}, 'code':'IscsText_19', '_type':'IscsText', 'context':'滑动门互锁解除报警', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':398}, 'code':'IscsText_20', '_type':'IscsText', 'context':'紧急控制盘操作', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':442}, 'code':'IscsText_22', '_type':'IscsText', 'context':'紧急控制盘操作关门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':227, 'y':464}, 'code':'IscsText_23', '_type':'IscsText', 'context':'就地控制盘操作', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':484}, 'code':'IscsText_24', '_type':'IscsText', 'context':'就得控制盘操作开门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':506}, 'code':'IscsText_25', '_type':'IscsText', 'context':'就地控制盘操作关门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':525}, 'code':'IscsText_26', '_type':'IscsText', 'context':'自动开门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':225, 'y':545}, 'code':'IscsText_27', '_type':'IscsText', 'context':'自动关门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':226, 'y':565}, 'code':'IscsText_28', '_type':'IscsText', 'context':'所有门开到位', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':227, 'y':585}, 'code':'IscsText_29', '_type':'IscsText', 'context':'所有门关到位', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':517, 'y':306}, 'code':'IscsText_30', '_type':'IscsText', 'context':'系统驱动电源故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':518, 'y':329}, 'code':'IscsText_31', '_type':'IscsText', 'context':'系统控制电源故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':519, 'y':352}, 'code':'IscsText_32', '_type':'IscsText', 'context':'监视电源故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':520, 'y':375}, 'code':'IscsText_33', '_type':'IscsText', 'context':'现场总线故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':961, 'y':332}, 'code':'IscsText_34', '_type':'IscsText', 'context':'滑动门&应急门开门故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':960, 'y':352}, 'code':'IscsText_35', '_type':'IscsText', 'context':'滑动门&应急门关门故障', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':961, 'y':371}, 'code':'IscsText_36', '_type':'IscsText', 'context':'滑动门互锁解除报警', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':961, 'y':393}, 'code':'IscsText_37', '_type':'IscsText', 'context':'紧急控制盘操作', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':225, 'y':421}, 'code':'IscsText_38', '_type':'IscsText', 'context':'紧急控制盘操作开门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':961, 'y':413}, 'code':'IscsText_39', '_type':'IscsText', 'context':'紧急控制盘操作开门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':962, 'y':433}, 'code':'IscsText_40', '_type':'IscsText', 'context':'紧急控制盘操作关门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':963, 'y':454}, 'code':'IscsText_41', '_type':'IscsText', 'context':'就地控制盘操作', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':962, 'y':477}, 'code':'IscsText_42', '_type':'IscsText', 'context':'就得控制盘操作开门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':962, 'y':500}, 'code':'IscsText_43', '_type':'IscsText', 'context':'就地控制盘操作关门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':962, 'y':523}, 'code':'IscsText_44', '_type':'IscsText', 'context':'自动开门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':962, 'y':545}, 'code':'IscsText_45', '_type':'IscsText', 'context':'自动关门命令', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':963, 'y':565}, 'code':'IscsText_46', '_type':'IscsText', 'context':'所有门开到位', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':963, 'y':583}, 'code':'IscsText_47', '_type':'IscsText', 'context':'所有门关到位', 'textFill':'#0EDEE1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':154, 'y':265}, 'code':'IscsText_48', '_type':'IscsText', 'context':'1-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':217, 'y':266}, 'code':'IscsText_49', '_type':'IscsText', 'context':'1-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':280, 'y':266}, 'code':'IscsText_50', '_type':'IscsText', 'context':'1-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':341, 'y':266}, 'code':'IscsText_51', '_type':'IscsText', 'context':'1-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':404, 'y':267}, 'code':'IscsText_52', '_type':'IscsText', 'context':'2-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':467, 'y':267}, 'code':'IscsText_53', '_type':'IscsText', 'context':'2-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':531, 'y':266}, 'code':'IscsText_54', '_type':'IscsText', 'context':'2-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':596, 'y':266}, 'code':'IscsText_55', '_type':'IscsText', 'context':'2-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':659, 'y':266}, 'code':'IscsText_56', '_type':'IscsText', 'context':'3-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':720, 'y':267}, 'code':'IscsText_57', '_type':'IscsText', 'context':'3-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':787, 'y':267}, 'code':'IscsText_58', '_type':'IscsText', 'context':'3-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':847, 'y':267}, 'code':'IscsText_59', '_type':'IscsText', 'context':'3-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':910, 'y':266}, 'code':'IscsText_60', '_type':'IscsText', 'context':'4-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':972, 'y':267}, 'code':'IscsText_61', '_type':'IscsText', 'context':'4-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1035, 'y':266}, 'code':'IscsText_62', '_type':'IscsText', 'context':'4-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1098, 'y':267}, 'code':'IscsText_63', '_type':'IscsText', 'context':'4-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1162, 'y':267}, 'code':'IscsText_64', '_type':'IscsText', 'context':'5-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1225, 'y':267}, 'code':'IscsText_65', '_type':'IscsText', 'context':'5-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1288, 'y':267}, 'code':'IscsText_66', '_type':'IscsText', 'context':'5-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1348, 'y':266}, 'code':'IscsText_67', '_type':'IscsText', 'context':'5-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':164, 'y':619}, 'code':'IscsText_68', '_type':'IscsText', 'context':'1-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':223, 'y':619}, 'code':'IscsText_69', '_type':'IscsText', 'context':'1-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':285, 'y':619}, 'code':'IscsText_70', '_type':'IscsText', 'context':'1-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':348, 'y':619}, 'code':'IscsText_71', '_type':'IscsText', 'context':'1-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':412, 'y':618}, 'code':'IscsText_72', '_type':'IscsText', 'context':'2-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':472, 'y':618}, 'code':'IscsText_73', '_type':'IscsText', 'context':'2-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':535, 'y':619}, 'code':'IscsText_74', '_type':'IscsText', 'context':'2-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':599, 'y':620}, 'code':'IscsText_75', '_type':'IscsText', 'context':'2-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':663, 'y':618}, 'code':'IscsText_76', '_type':'IscsText', 'context':'3-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':724, 'y':618}, 'code':'IscsText_77', '_type':'IscsText', 'context':'3-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':787, 'y':617}, 'code':'IscsText_78', '_type':'IscsText', 'context':'3-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':847, 'y':619}, 'code':'IscsText_79', '_type':'IscsText', 'context':'3-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':912, 'y':619}, 'code':'IscsText_80', '_type':'IscsText', 'context':'4-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':973, 'y':620}, 'code':'IscsText_81', '_type':'IscsText', 'context':'4-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1039, 'y':619}, 'code':'IscsText_82', '_type':'IscsText', 'context':'4-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1101, 'y':619}, 'code':'IscsText_83', '_type':'IscsText', 'context':'4-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1165, 'y':618}, 'code':'IscsText_84', '_type':'IscsText', 'context':'5-1', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1225, 'y':618}, 'code':'IscsText_85', '_type':'IscsText', 'context':'5-2', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1290, 'y':620}, 'code':'IscsText_86', '_type':'IscsText', 'context':'5-3', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1350, 'y':620}, 'code':'IscsText_87', '_type':'IscsText', 'context':'5-4', 'textFill':'#FFFFFF', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':432, 'y':399}, 'code':'IscsText_88', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':421}, 'code':'IscsText_89', '_type':'IscsText', 'context':'无动作', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':443}, 'code':'IscsText_90', '_type':'IscsText', 'context':'无动作', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':431, 'y':464}, 'code':'IscsText_91', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':431, 'y':484}, 'code':'IscsText_92', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':430, 'y':506}, 'code':'IscsText_93', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':430, 'y':525}, 'code':'IscsText_94', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':430, 'y':544}, 'code':'IscsText_95', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':427, 'y':586}, 'code':'IscsText_96', '_type':'IscsText', 'context':'关到位', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1161, 'y':585}, 'code':'IscsText_97', '_type':'IscsText', 'context':'关到位', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1166, 'y':524}, 'code':'IscsText_98', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1166, 'y':501}, 'code':'IscsText_99', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1165, 'y':392}, 'code':'IscsText_100', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1166, 'y':455}, 'code':'IscsText_101', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1166, 'y':478}, 'code':'IscsText_102', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1166, 'y':545}, 'code':'IscsText_103', '_type':'IscsText', 'context':'自动', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1160, 'y':415}, 'code':'IscsText_104', '_type':'IscsText', 'context':'无动作', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1161, 'y':435}, 'code':'IscsText_105', '_type':'IscsText', 'context':'无动作', 'textFill':'#12FB35', 'fontSize':12, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}], 'arcStatusList':[{'point':{'x':443, 'y':338}, 'code':'ArcStatus_1', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':443, 'y':359}, 'code':'ArcStatus_2', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':443, 'y':381}, 'code':'ArcStatus_3', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':673, 'y':311}, 'code':'ArcStatus_4', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':673, 'y':335}, 'code':'ArcStatus_5', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':673, 'y':358}, 'code':'ArcStatus_6', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':673, 'y':380}, 'code':'ArcStatus_7', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':1175, 'y':337}, 'code':'ArcStatus_8', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':1175, 'y':357}, 'code':'ArcStatus_9', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}, {'point':{'x':1175, 'y':377}, 'code':'ArcStatus_10', '_type':'ArcStatus', 'fillColor':'#00FF00', 'r':7, 'zlevel':1, 'z':4}]}, '41': {'iscsRectList':[{'point':{'x':1, 'y':70}, 'code':'IscsRect_1', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':160, 'height':80, 'zlevel':1, 'z':3}, {'point':{'x':161, 'y':80}, 'code':'IscsRect_2', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':95, 'height':70, 'zlevel':1, 'z':3}, {'point':{'x':1, 'y':205}, 'code':'IscsRect_3', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F 7F1F1', 'width':135, 'height':100, 'zlevel':1, 'z':3}, {'point':{'x':136, 'y':225}, 'code':'IscsRect_4', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':120, 'height':80, 'zlevel':1, 'z':3}, {'point':{'x':327, 'y':116}, 'code':'IscsRect_5', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':70, 'height':60, 'zlevel':1, 'z':3}, {'point':{'x':936, 'y':26}, 'code':'IscsRect_6', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':70, 'height':90, 'zlevel':1, 'z':3}, {'point':{'x':1006, 'y':26}, 'code':'IscsRect_7', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':70, 'height':90, 'zlevel':1, 'z':3}, {'point':{'x':1076, 'y':26}, 'code':'IscsRect_8', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':70, 'height':90, 'zlevel':1, 'z':3}, {'point':{'x':1146, 'y':26}, 'code':'IscsRect_9', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':70, 'height':90, 'zlevel':1, 'z':3}, {'point':{'x':1305, 'y':40}, 'code':'IscsRect_10', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':145, 'height':90, 'zlevel':1, 'z':3}, {'point':{'x':1305, 'y':130}, 'code':'IscsRect_11', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':145, 'height':105, 'zlevel':1, 'z':3}, {'point':{'x':1340, 'y':270}, 'code':'IscsRect_12', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':45, 'height':35, 'zlevel':1, 'z':3}, {'point':{'x':1385, 'y':270}, 'code':'IscsRect_13', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':45, 'height':35, 'zlevel':1, 'z':3}, {'point':{'x':930, 'y':160}, 'code':'IscsRect_14', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':90, 'height':95, 'zlevel':1, 'z':3}, {'point':{'x':1020, 'y':160}, 'code':'IscsRect_15', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':50, 'height':95, 'zlevel':1, 'z':3}, {'point':{'x':1070, 'y':160}, 'code':'IscsRect_16', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':85, 'height':95, 'zlevel':1, 'z':3}, {'point':{'x':1155, 'y':160}, 'code':'IscsRect_17', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':90, 'height':95, 'zlevel':1, 'z':3}, {'point':{'x':760, 'y':116}, 'code':'IscsRect_18', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':65, 'height':60, 'zlevel':1, 'z':3}, {'point':{'x':1054, 'y':265}, 'code':'IscsRect_19', '_type':'IscsRect', 'fillColor':'rgba(239, 231, 231, 0)', 'borderWidth':2, 'strokeColor':'#F7F1F1', 'width':135, 'height':40, 'zlevel':1, 'z':3}], 'iscsLineList':[{'point1':{'x':0, 'y':15}, 'point2':{'x':260, 'y':15}, 'code':'IscsLine_1', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':0, 'y':15}}, {'point1':{'x':260, 'y':15}, 'point2':{'x':260, 'y':0}, 'code':'IscsLine_2', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':260, 'y':15}}, {'point1':{'x':330, 'y':0}, 'point2':{'x':330, 'y':15}, 'code':'IscsLine_3', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':330, 'y':0}}, {'point1':{'x':330, 'y':15}, 'point2':{'x':810, 'y':15}, 'code':'IscsLine_4', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':330, 'y':15}}, {'point1':{'x':810, 'y':15}, 'point2':{'x':810, 'y':0}, 'code':'IscsLine_5', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':810, 'y':15}}, {'point1':{'x':880, 'y':0}, 'point2':{'x':880, 'y':15}, 'code':'IscsLine_6', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':880, 'y':0}}, {'point1':{'x':880, 'y':15}, 'point2':{'x':1470, 'y':15}, 'code':'IscsLine_7', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':880, 'y':15}}, {'point1':{'x':0, 'y':305}, 'point2':{'x':300, 'y':305}, 'code':'IscsLine_8', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':0, 'y':305}}, {'point1':{'x':300, 'y':305}, 'point2':{'x':300, 'y':320}, 'code':'IscsLine_9', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':300, 'y':305}}, {'point1':{'x':370, 'y':320}, 'point2':{'x':370, 'y':305}, 'code':'IscsLine_10', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':370, 'y':320}}, {'point1':{'x':370, 'y':305}, 'point2':{'x':800, 'y':305}, 'code':'IscsLine_11', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':370, 'y':305}}, {'point1':{'x':800, 'y':305}, 'point2':{'x':800, 'y':320}, 'code':'IscsLine_12', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':800, 'y':305}}, {'point1':{'x':870, 'y':305}, 'point2':{'x':870, 'y':320}, 'code':'IscsLine_13', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':870, 'y':305}}, {'point1':{'x':870, 'y':305}, 'point2':{'x':1470, 'y':305}, 'code':'IscsLine_14', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':870, 'y':305}}, {'point1':{'x':746, 'y':100}, 'point2':{'x':746, 'y':110}, 'code':'IscsLine_15', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':746, 'y':100}}, {'point1':{'x':746, 'y':16}, 'point2':{'x':746, 'y':37}, 'code':'IscsLine_16', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#fff', 'zlevel':1, 'z':4, 'point':{'x':746, 'y':16}}, {'point1':{'x':729, 'y':190}, 'point2':{'x':729, 'y':212}, 'code':'IscsLine_17', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':729, 'y':190}}, {'point1':{'x':729, 'y':274}, 'point2':{'x':729, 'y':305}, 'code':'IscsLine_18', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':729, 'y':274}}, {'point1':{'x':416, 'y':14}, 'point2':{'x':416, 'y':29}, 'code':'IscsLine_19', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':416, 'y':14}}, {'point1':{'x':416, 'y':92}, 'point2':{'x':416, 'y':110}, 'code':'IscsLine_20', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':416, 'y':92}}, {'point1':{'x':436, 'y':189}, 'point2':{'x':436, 'y':216}, 'code':'IscsLine_21', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':436, 'y':189}}, {'point1':{'x':436, 'y':280}, 'point2':{'x':436, 'y':305}, 'code':'IscsLine_22', '_type':'IscsLine', 'classify':'solid', 'lineWidth':2, 'fillColor':'#F7F1F1', 'zlevel':1, 'z':4, 'point':{'x':436, 'y':280}}], 'iscsTextList':[{'point':{'x':262, 'y':9}, 'code':'IscsText_1', '_type':'IscsText', 'context':'2号出入口', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':304, 'y':296}, 'code':'IscsText_2', '_type':'IscsText', 'context':'5号出入口', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':813, 'y':10}, 'code':'IscsText_3', '_type':'IscsText', 'context':'3号出入口', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':804, 'y':297}, 'code':'IscsText_4', '_type':'IscsText', 'context':'4号出入口', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':183, 'y':107}, 'code':'IscsText_5', '_type':'IscsText', 'context':'配电间', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':33, 'y':246}, 'code':'IscsText_6', '_type':'IscsText', 'context':'空调机房', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':170, 'y':248}, 'code':'IscsText_7', '_type':'IscsText', 'context':'环控\n电控室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':333, 'y':160}, 'code':'IscsText_8', '_type':'IscsText', 'context':'客服中心', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':764, 'y':159}, 'code':'IscsText_9', '_type':'IscsText', 'context':'客服中心', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':949, 'y':38}, 'code':'IscsText_10', '_type':'IscsText', 'context':'通信\n设备室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1020, 'y':40}, 'code':'IscsText_11', '_type':'IscsText', 'context':'通信\n电源室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1088, 'y':40}, 'code':'IscsText_12', '_type':'IscsText', 'context':'AFC\n设备室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1175, 'y':41}, 'code':'IscsText_13', '_type':'IscsText', 'context':'交\n接\n班\n室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':950, 'y':171}, 'code':'IscsText_14', '_type':'IscsText', 'context':'车站\n控制室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1026, 'y':175}, 'code':'IscsText_15', '_type':'IscsText', 'context':'站长室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1091, 'y':169}, 'code':'IscsText_16', '_type':'IscsText', 'context':'信号\n设备室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1173, 'y':169}, 'code':'IscsText_17', '_type':'IscsText', 'context':'信号\n电源室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1061, 'y':273}, 'code':'IscsText_18', '_type':'IscsText', 'context':'中和监控\n设备室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1346, 'y':281}, 'code':'IscsText_19', '_type':'IscsText', 'context':'男更', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1393, 'y':280}, 'code':'IscsText_20', '_type':'IscsText', 'context':'女更', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1372, 'y':144}, 'code':'IscsText_21', '_type':'IscsText', 'context':'票务室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1355, 'y':64}, 'code':'IscsText_22', '_type':'IscsText', 'context':'环控\n电控室', 'textFill':'#C1B38D', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':13, 'y':122}, 'code':'IscsText_23', '_type':'IscsText', 'context':'01022#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':59, 'y':183}, 'code':'IscsText_24', '_type':'IscsText', 'context':'01023#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':267, 'y':263}, 'code':'IscsText_25', '_type':'IscsText', 'context':'01024#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':332, 'y':279}, 'code':'IscsText_26', '_type':'IscsText', 'context':'01001#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':333, 'y':145}, 'code':'IscsText_27', '_type':'IscsText', 'context':'01002#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':570, 'y':281}, 'code':'IscsText_28', '_type':'IscsText', 'context':'01004#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':464, 'y':59}, 'code':'IscsText_29', '_type':'IscsText', 'context':'01003#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':568, 'y':110}, 'code':'IscsText_30', '_type':'IscsText', 'context':'01028#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':523, 'y':183}, 'code':'IscsText_31', '_type':'IscsText', 'context':'01027#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':615, 'y':186}, 'code':'IscsText_32', '_type':'IscsText', 'context':'01029#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':469, 'y':238}, 'code':'IscsText_33', '_type':'IscsText', 'context':'01026#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':662, 'y':238}, 'code':'IscsText_34', '_type':'IscsText', 'context':'01030#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':766, 'y':142}, 'code':'IscsText_35', '_type':'IscsText', 'context':'01005#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':774, 'y':80}, 'code':'IscsText_36', '_type':'IscsText', 'context':'01031#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':840, 'y':64}, 'code':'IscsText_37', '_type':'IscsText', 'context':'01033#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':783, 'y':269}, 'code':'IscsText_38', '_type':'IscsText', 'context':'01006#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':849, 'y':249}, 'code':'IscsText_39', '_type':'IscsText', 'context':'01032#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':948, 'y':232}, 'code':'IscsText_40', '_type':'IscsText', 'context':'01008#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':947, 'y':97}, 'code':'IscsText_41', '_type':'IscsText', 'context':'01007#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1017, 'y':97}, 'code':'IscsText_42', '_type':'IscsText', 'context':'01009#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1089, 'y':98}, 'code':'IscsText_43', '_type':'IscsText', 'context':'01010#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':962, 'y':142}, 'code':'IscsText_44', '_type':'IscsText', 'context':'01037#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1114, 'y':142}, 'code':'IscsText_45', '_type':'IscsText', 'context':'01034#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1088, 'y':233}, 'code':'IscsText_46', '_type':'IscsText', 'context':'01011#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1176, 'y':233}, 'code':'IscsText_47', '_type':'IscsText', 'context':'01012#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1127, 'y':290}, 'code':'IscsText_48', '_type':'IscsText', 'context':'01013#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':933, 'y':292}, 'code':'IscsText_49', '_type':'IscsText', 'context':'01035#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':994, 'y':291}, 'code':'IscsText_50', '_type':'IscsText', 'context':'01036#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1317, 'y':169}, 'code':'IscsText_51', '_type':'IscsText', 'context':'01014#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':1379, 'y':211}, 'code':'IscsText_52', '_type':'IscsText', 'context':'01038#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':742, 'y':128}, 'code':'IscsText_53', '_type':'IscsText', 'context':'上', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':685, 'y':167}, 'code':'IscsText_54', '_type':'IscsText', 'context':'下', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':284, 'y':94}, 'code':'IscsText_55', '_type':'IscsText', 'context':'01025#', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':397, 'y':127}, 'code':'IscsText_56', '_type':'IscsText', 'context':'上', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}, {'point':{'x':456, 'y':169}, 'code':'IscsText_57', '_type':'IscsText', 'context':'下', 'textFill':'#F7F1F1', 'fontSize':14, 'fontWeight':450, 'fontFamily':'consolas', 'zlevel':1, 'z':4}], 'vidiconList':[{'_type':'Vidicon', 'code':'Vidicon_1', 'width':40, 'right':true, 'point':{'x':14, 'y':99}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_2', 'width':40, 'right':true, 'point':{'x':59, 'y':160}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_3', 'width':40, 'right':true, 'point':{'x':299, 'y':86}, 'rotationAngle':90, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_4', 'width':40, 'right':true, 'point':{'x':267, 'y':239}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_5', 'width':40, 'right':true, 'point':{'x':569, 'y':87}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_6', 'width':40, 'right':true, 'point':{'x':614, 'y':160}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_7', 'width':40, 'right':false, 'point':{'x':526, 'y':159}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_8', 'width':40, 'right':false, 'point':{'x':474, 'y':217}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_9', 'width':40, 'right':true, 'point':{'x':660, 'y':217}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_10', 'width':40, 'right':false, 'point':{'x':779, 'y':61}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_11', 'width':40, 'right':true, 'point':{'x':839, 'y':44}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_12', 'width':40, 'right':true, 'point':{'x':850, 'y':227}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_13', 'width':40, 'right':true, 'point':{'x':993, 'y':272}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_14', 'width':40, 'right':false, 'point':{'x':940, 'y':272}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_15', 'width':40, 'right':true, 'point':{'x':1115, 'y':120}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_16', 'width':40, 'right':false, 'point':{'x':965, 'y':120}, 'rotationAngle':0, 'zlevel':1, 'z':4}, {'_type':'Vidicon', 'code':'Vidicon_17', 'width':40, 'right':false, 'point':{'x':1387, 'y':190}, 'rotationAngle':0, 'zlevel':1, 'z':4}], 'vidiconCloudList':[{'_type':'VidiconCloud', 'code':'VidiconCloud_1', 'r':18, 'point':{'x':353, 'y':255}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_2', 'r':18, 'point':{'x':349, 'y':122}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_3', 'r':18, 'point':{'x':487, 'y':32}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_4', 'r':18, 'point':{'x':803, 'y':120}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_5', 'r':18, 'point':{'x':592, 'y':252}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_6', 'r':18, 'point':{'x':805, 'y':245}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_7', 'r':18, 'point':{'x':970, 'y':70}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_8', 'r':18, 'point':{'x':1042, 'y':70}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_9', 'r':18, 'point':{'x':1110, 'y':70}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_10', 'r':18, 'point':{'x':1198, 'y':210}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_11', 'r':18, 'point':{'x':970, 'y':210}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_12', 'r':18, 'point':{'x':1110, 'y':210}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_13', 'r':18, 'point':{'x':1149, 'y':272}, 'zlevel':1, 'z':4}, {'_type':'VidiconCloud', 'code':'VidiconCloud_14', 'r':18, 'point':{'x':1340, 'y':145}, 'zlevel':1, 'z':4}], 'brakeMachineList':[{'point':{'x':730, 'y':36}, 'isRight':false, 'code':'BrakeMachine_1', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':730, 'y':48}, 'isRight':false, 'code':'BrakeMachine_2', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':730, 'y':60}, 'isRight':false, 'code':'BrakeMachine_3', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':730, 'y':72}, 'isRight':false, 'code':'BrakeMachine_4', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':730, 'y':84}, 'isRight':false, 'code':'BrakeMachine_5', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':717, 'y':212}, 'isRight':true, 'code':'BrakeMachine_6', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':717, 'y':224}, 'isRight':true, 'code':'BrakeMachine_7', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':717, 'y':236}, 'isRight':true, 'code':'BrakeMachine_8', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':717, 'y':248}, 'isRight':true, 'code':'BrakeMachine_9', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':405, 'y':30}, 'isRight':true, 'code':'BrakeMachine_10', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':405, 'y':42}, 'isRight':true, 'code':'BrakeMachine_11', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':405, 'y':54}, 'isRight':true, 'code':'BrakeMachine_12', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':405, 'y':66}, 'isRight':true, 'code':'BrakeMachine_13', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':217}, 'isRight':true, 'code':'BrakeMachine_14', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':229}, 'isRight':true, 'code':'BrakeMachine_15', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':241}, 'isRight':true, 'code':'BrakeMachine_16', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':253}, 'isRight':true, 'code':'BrakeMachine_17', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':426, 'y':265}, 'isRight':true, 'code':'BrakeMachine_18', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':717, 'y':260}, 'isRight':true, 'code':'BrakeMachine_19', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}, {'point':{'x':405, 'y':78}, 'isRight':true, 'code':'BrakeMachine_20', '_type':'BrakeMachine', 'width':25, 'zlevel':1, 'z':4}], 'staircaseList':[{'point':{'x':700, 'y':111}, 'fill':'#fff', 'isRight':true, 'rotationAngle':180, 'code':'Staircase_1', '_type':'Staircase', 'width':60, 'zlevel':1, 'z':4}, {'point':{'x':457, 'y':192}, 'fill':'#fff', 'isRight':false, 'rotationAngle':180, 'code':'Staircase_2', '_type':'Staircase', 'width':60, 'zlevel':1, 'z':4}]}, diff --git a/src/jlmap3d/jl3dpassflow/jl3dpassflow.js b/src/jlmap3d/jl3dpassflow/jl3dpassflow.js index ada87e2ab..723a90ca9 100644 --- a/src/jlmap3d/jl3dpassflow/jl3dpassflow.js +++ b/src/jlmap3d/jl3dpassflow/jl3dpassflow.js @@ -354,7 +354,7 @@ export function Jl3dpassflow(dom) { } } } - },3000); + },1000); }; },1000); @@ -390,7 +390,7 @@ export function Jl3dpassflow(dom) { } moveanimateupdate(); - scope.anime = requestAnimationFrame(animate); + requestAnimationFrame(animate); } @@ -468,7 +468,7 @@ export function Jl3dpassflow(dom) { } if(humans[i].stage == 0){ - console.log(humans[i].doors); + // console.log(humans[i].doors); zhajiin[humans[i].doors].waiting = 0; humans[i].stage = 1; } @@ -805,8 +805,7 @@ export function Jl3dpassflow(dom) { } function zhajicontrol(type,door){ - console.log(door); - console.log(zhajiin); + let devicenum = door-1; if(type == "in"){ deviceaction[zhajiin[devicenum].id].action.reset(); diff --git a/src/jlmap3d/jl3dpassflow/jl3dpassflownew.js b/src/jlmap3d/jl3dpassflow/jl3dpassflownew.js new file mode 100644 index 000000000..b05c2fc8d --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/jl3dpassflownew.js @@ -0,0 +1,1102 @@ +import { Staticmodel } from '@/jlmap3d/jl3dpassflow/config.js'; +//loader +import { FBXLoader } from '@/jlmap3d/main/loaders/FBXLoader'; +import { OBJLoader } from '@/jlmap3d/main/loaders/OBJLoader'; + +import { OrbitControls } from '@/jlmap3d/main/control/OrbitControls'; + +import { ModelManager } from '@/jlmap3d/jl3dpassflow/loader.js'; +import { SkeletonUtils } from '@/jlmap3d/main/utils/SkeletonUtils.js'; + +import { Pathfinding } from '@/jlmap3d/jl3dpassflow/utils/Pathfinding.js'; +// const Pathfinding = window.threePathfinding.Pathfinding; +import { ZoneManager } from '@/jlmap3d/jl3dpassflow/model/zonemanager.js'; + +import StompClient from '@/utils/sock'; +import { Loading } from 'element-ui'; + +// const Pathfinding = window.threePathfinding.Pathfinding; +var clock = new THREE.Clock(); +let delta; +let scene,camerass,renderer; +let rendermode = 0; + +var mixers = []; +var testmesh1,testmesh2; +var humans = []; +var checkdoor1 = []; +var checkdoor2 = []; +var station; +var zhajiinmodel; +var zhajioutmodel; +var monitor; +let ids = 0; + +let humanlist = new THREE.Group(); + +let originhuman1 = null; +let originhuman2 = null; +let originanima1 = null; +let originanima2 = null; +let moveanimatelist = []; + +let zhajiin = []; +let zhajiout = []; + +let deviceaction = []; + +let passerwebwork = new Worker("../../static/workertest/passsimulation/passer.js"); +let stationwebwork = new Worker("../../static/workertest/passsimulation/station.js"); + +let stationzon = new ZoneManager(); + +for(let i=0;i<5;i++){ + checkdoor1[i]={ + id:"c1"+i, + status:0, + pos:[], + max:10 + }; +} + +for(let i=0;i<5;i++){ + let zhaji = { + id:"in0"+(i+1), + status:0, + waiting:0 + } + zhajiin.push(zhaji); +} + +for(let i=0;i<5;i++){ + let zhaji = { + id:"out0"+(i+1), + status:0, + waiting:0 + } + zhajiout.push(zhaji); +} + +let stationleft = []; +let stationright = []; + +for(let i=0;i<22;i++){ + let sl = { + id:"left"+i, + status:0, + waiting:0 + } + stationleft.push(sl); +} + +for(let i=0;i<22;i++){ + let sr = { + id:"right"+i, + status:0, + waiting:0 + } + stationright.push(sr); +} + +var windowWidth = window.innerWidth ; +var windowHeight = window.innerHeight; +var views = [ + { + left: 0, + bottom: 0, + width: 0.5, + height: 0.5, + background: new THREE.Color( 0.5, 0.5, 0.7 ), + eye: [ 3.7, 16, 26 ], + up: [3.7, 10 ,16 ], + fov: 30 + }, + { + left: 0, + bottom: 0.5, + width: 0.5, + height: 0.5, + background: new THREE.Color( 0.5, 0.5, 0.7 ), + eye: [ 3.7,17,-4 ], + up: [ 3.7, 10 ,16], + fov: 30 + }, + { + left: 0.5, + bottom: 0, + width: 0.5, + height: 0.5, + background: new THREE.Color( 0.7, 0.5, 0.5 ), + eye: [ -60, 6,11], + up: [ -59, 5.9,11 ], + fov: 45 + }, + { + left: 0.5, + bottom: 0.5, + width: 0.5, + height: 0.5, + background: new THREE.Color( 0.5, 0.7, 0.7 ), + eye: [ -7,17,2], + up: [-7, 10, 8], + fov: 60 + } + ]; + + +export function Jl3dpassflow(dom) { + var scope = this; + + this.dom = dom; + this.nowcode = null; + this.animateswitch = false; + this.signallights = []; + this.mixers = []; + this.showmodel = null; + //初始化webgl渲染 + renderer = new THREE.WebGLRenderer({ antialias: true }); + + renderer.setClearColor(new THREE.Color(0x000000)); + renderer.setSize(dom.offsetWidth, dom.offsetHeight); + + this.dom.appendChild(renderer.domElement); + + //定义相机 + + camerass = new THREE.PerspectiveCamera(70, dom.offsetWidth / dom.offsetHeight, 0.01, 1000); + camerass.position.set(0, 80, 40); + camerass.aspect = dom.offsetWidth / dom.offsetHeight; + camerass.updateProjectionMatrix(); + + for ( var ii = 0; ii < views.length; ++ ii ) { + + var view = views[ ii ]; + var camera = new THREE.PerspectiveCamera( view.fov, window.innerWidth / window.innerHeight, 1, 200 ); + camera.position.fromArray( view.eye ); + camera.lookAt( view.up[0],view.up[1],view.up[2] ); + view.camera = camera; + + } + + + + //定义场景(渲染容器) + scene = new THREE.Scene(); + scene.background = new THREE.Color(0xa0a0a0); + + var mesh = new THREE.Mesh(new THREE.PlaneBufferGeometry(200, 200), new THREE.MeshPhongMaterial({ color: 0x999999, depthWrite: false })); + mesh.rotation.x = - Math.PI / 2; + mesh.receiveShadow = true; + scene.add(mesh); + + var grid = new THREE.GridHelper(200, 20, 0x000000, 0x000000); + grid.material.opacity = 0.2; + grid.material.transparent = true; + scene.add(grid); + + + //定义全局光 + let ambientLight = new THREE.AmbientLight(0xffffff, 1.3); + scene.add(ambientLight); + + // + // var spotLight = new THREE.SpotLight(0xffffff); + // spotLight.position.set(-50, 60, 15); + // spotLight.castShadow = true; + // spotLight.shadow.mapSize.width = 1024; + // spotLight.shadow.mapSize.height = 1024; + // scene.add(spotLight); + + + + this.controls = new THREE.OrbitControls(camerass, dom); + this.controls.maxPolarAngle = Math.PI / 2; + this.controls.minPolarangle = Math.PI / 5; + this.controls.maxDistance = 800; + this.controls.screenSpacePanning = true; + this.controls.update(); + this.selectmodel = null; + + + const Color = { + GROUND: new THREE.Color( 0x606060 ).convertGammaToLinear( 2.2 ).getHex(), + NAVMESH: new THREE.Color( 0xFFFFFF ).convertGammaToLinear( 2.2 ).getHex(), + }; + + const ZONE = 'level'; + const SPEED = 10; + const OFFSET = 0.2; + + THREE.Pathfinding = Pathfinding; + + let level, navmesh; + + let groupID, path; + + const playerPosition = new THREE.Vector3( -3.5, 0.5, 5.5 ); + const targetPosition = new THREE.Vector3(); + + const pathfinder = new THREE.Pathfinding(); + const mouse = new THREE.Vector2(); + const raycaster = new THREE.Raycaster(); + + var loader = new THREE.OBJLoader(); + + // load a resource + loader.load( + // resource URL + '../../static/model/path/path.obj', + // called when resource is loaded + function ( object ) { + + + console.time('createZone()'); + const zone = THREE.Pathfinding.createZone(object.children[0].geometry); + console.timeEnd('createZone()'); + + pathfinder.setZoneData( ZONE, zone ); + + const navWireframe = new THREE.Mesh(object.children[0].geometry, new THREE.MeshBasicMaterial({ + color: 0x808080, + wireframe: true + })); + navWireframe.position.y = OFFSET / 2; + // scene.add(navWireframe); + + navmesh = object.children[0]; + // scene.add(navmesh); + + // Set the player's navigation mesh group + groupID = pathfinder.getGroup( ZONE, playerPosition ); + + }, + // called when loading is in progresses + function ( xhr ) { + + console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' ); + + }, + // called when loading has errors + function ( error ) { + + console.log( 'An error happened' ); + + } + ); + document.addEventListener( 'mouseup', onDocumentMouseUp, false ); + + function onDocumentMouseUp (event) { + + mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; + mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1; + + + camerass.updateMatrixWorld(); + + raycaster.setFromCamera( mouse, camerass ); + + const intersects = raycaster.intersectObject( navmesh ); + + if ( !intersects.length ) return; + console.log(intersects[0].point); + targetPosition.copy( intersects[0].point ); + + originhuman1.position.copy( playerPosition ); + // Teleport on ctrl/cmd click or RMB. + if (event.metaKey || event.ctrlKey || event.button === 2) { + + path = null; + originhuman1.position.copy( playerPosition.copy( targetPosition ) ); + + return; + + } + + path = pathfinder.findPath( playerPosition, targetPosition, ZONE, groupID ); + + let points = []; + points.push(new THREE.Vector3(originhuman1.position.x,originhuman1.position.y,originhuman1.position.z)); + for(let i=0;i 0.05 * 0.05) { + // velocity.normalize(); + // // Move player to target + // playerPosition.add( velocity.multiplyScalar( dt * SPEED ) ); + // // originhuman1.lookAt(); + // originhuman1.position.copy( playerPosition ); + // } else { + // // Remove node from the path we calculated + // path.shift(); + // } + if(originhuman1.curve){ + if(originhuman1.progress<1){ + let point = originhuman1.curve.getPointAt(originhuman1.progress); + + //更新模型坐标 + originhuman1.position.x = point.x; + originhuman1.position.y = point.y; + originhuman1.position.z = point.z; + if((originhuman1.progress+0.001)<1){ + let tangent = originhuman1.curve.getPointAt(originhuman1.progress+0.001); + originhuman1.lookAt(new THREE.Vector3(tangent.x,originhuman1.position.y,tangent.z)); + } + + originhuman1.progress += 0.05; + }else{ + playerPosition.copy( originhuman1.position ) + } + + } + + } + + window.onresize = function () { + + renderer.setSize(scope.dom.offsetWidth, scope.dom.offsetHeight); + windowWidth = scope.dom.offsetWidth ; + windowHeight = scope.dom.offsetHeight; + + camerass.aspect = scope.dom.offsetWidth / scope.dom.offsetHeight; + camerass.updateProjectionMatrix(); + } + + this.anime = null; + + this.modelmanager = new ModelManager(); + let loadingInstance = Loading.service({ fullscreen: true }); + this.modelmanager.loadpromise(Staticmodel, scope.mixers).then(function (data) { + // console.log(scope.modelmanager); + initstationanimation(scope.modelmanager.station.mesh); + initzhajiinaimation(scope.modelmanager.zhajiin.mesh); + initzhajioutanimation(scope.modelmanager.zhajiout.mesh); + + level = scope.modelmanager.station.mesh; + + monitor = scope.modelmanager.monitor.mesh; + scene.add(monitor); + + + + + inithumans(); + + loadingInstance.close(); + + scope.switchrender(true); + + animate(); + }) + + function inithumans(){ + + originhuman1 = scope.modelmanager.man1.mesh; + originhuman1.progress = 1; + scene.add(originhuman1); + originhuman2 = scope.modelmanager.man2.mesh; + let mixer1 = new THREE.AnimationMixer( originhuman1 ); + let mixer2 = new THREE.AnimationMixer( originhuman2 ); + originanima1 = originhuman1.animations[ 0 ]; + originanima2 = originhuman2.animations[ 0 ]; + originhuman1.remove(originhuman1.children[2]); + scene.add(humanlist); + scene.add(scope.modelmanager.man1.mesh); + + for(let i=0;i<200;i++){ + var mantype = Math.floor(Math.random()*(3-1+1))+1; + let newhuman; + if(mantype == 1){ + newhuman = THREE.SkeletonUtils.clone( originhuman1 ); + newhuman.animations = []; + newhuman.animations.push(originanima1.clone()); + }else{ + newhuman = THREE.SkeletonUtils.clone( originhuman2 ); + newhuman.animations = []; + newhuman.animations.push(originanima2.clone()); + } + + // zhajiin[j].waiting = 1; + + let mixer = new THREE.AnimationMixer( newhuman ); + mixer.runplay = false; + let action = mixer.clipAction( newhuman.animations[ 0 ] ); + + newhuman.status = 1; + newhuman.stage = 0; + let newone = { + id:i, + mesh:newhuman, + direct:null, + doorstatus:null, + doors:null, + action:action, + mixer:mixer, + runrail:null + }; + + + + humans.push(newone); + mixers.push(mixer); + humanlist.add(newhuman); + } + + + + } + + + let checkobject = setInterval(function(){ + // console.log(originhuman1); + if(originhuman1){ + console.log("start"); + clearInterval(checkobject); + //进站控制 + startWorker(); + // stationwebwork.postMessage("on"); + // passerwebwork.postMessage("on"); + + }; + },1000); + + + + this.switchrender = function(mode){ + if(mode){ + rendermode = 0; + renderer.setViewport( 0, 0, scope.dom.offsetWidth, scope.dom.offsetHeight ); + renderer.setScissor( 0, 0, scope.dom.offsetWidth, scope.dom.offsetHeight ); + renderer.setScissorTest( false ); + renderer.setSize(scope.dom.offsetWidth, scope.dom.offsetHeight); + camerass.aspect = dom.offsetWidth / dom.offsetHeight; + camerass.updateProjectionMatrix(); + }else{ + rendermode = 1; + } + } + + function startWorker(){ + passerwebwork.onmessage = function (event) { + if(humans){ + // console.log(humans.length); + + // console.log(humans.length); + for(let i=0;i=0;i--){ + if(mixers[i]._actions[0].isRunning()){ + mixers[i].update( delta ); + } + } + + }; + stationwebwork.onmessage = function (event) { + // console.log("stationwebwork"); + if(humans.length<200){ + newhumancreate(); + } + }; + } + + + //循环渲染函数 + function animate() { + // console.log(rendermode); + if(rendermode == 0){ + renderer.render(scene, camerass); + scope.controls.update(); + }else{ + monitorrender(); + } + + delta = clock.getDelta(); + tick(delta); + requestAnimationFrame(animate); + + } + + function moveanimateinit(model,name,points,index,speed){ + + let curve = new THREE.CatmullRomCurve3(points); + curve.curvrtype = "chordal"; + // curve.getLength(); + // curve动画轨迹 + // progress动画进度 + // enable当前动画开关 + // speed动画速度 + // console.log(curve); + let animate = { + name:index, + index:index, + curve:curve, + progress:0, + directchange:false, + enable:true, + status:"start", + speed:speed, + }; + humans[index].runrail = animate; + humans[index].status = 1; + humans[index].action.play(); + humans[index].mixer.runplay = true; + moveanimatelist.push(animate); + } + + function moveanimateupdate(){ + if(humans.length>0){ + for(let i=0;i=1){ + // let point = humans[i].runrail.curve.getPointAt(1); + //更新模型坐标 + // console.log(moveanimatelist); + if(humans[i].status == 1){ + humans[i].runrail.enable = false; + humans[i].runrail.progress = 1; + humans[i].mixer.runplay = false; + humans[i].action.stop(); + humans[i].status = 0; + + if(humans[i].stage == 4){ + + humanlist.remove(humans[i].mesh); + // humans.splice(i,1); + } + + if(humans[i].stage == 3){ + + if(humans[i].direct == 1){ + + stationleft[humans[i].doors].waiting = 0; + }else{ + + stationright[humans[i].doors].waiting = 0; + } + humans[i].stage = 4; + + } + + if(humans[i].stage == 2){ + humans[i].stage = 3; + + } + + if(humans[i].stage == 1){ + + + humans[i].stage = 2; + + } + + if(humans[i].stage == 0){ + // console.log(humans[i].doors); + zhajiin[humans[i].doors].waiting = 0; + humans[i].stage = 1; + } + + moveanimatelist.splice(i,1); + + } + + }else{ + //根据动画进度获取动画轨迹上点 + + let point = humans[i].runrail.curve.getPointAt(humans[i].runrail.progress); + + //更新模型坐标 + humans[i].mesh.position.x = point.x; + humans[i].mesh.position.y = point.y; + humans[i].mesh.position.z = point.z; + if((humans[i].runrail.progress+0.001)<1){ + let tangent = humans[i].runrail.curve.getPointAt(humans[i].runrail.progress+0.001); + humans[i].mesh.lookAt(new THREE.Vector3(tangent.x,humans[i].mesh.position.y,tangent.z)); + } + + humans[i].runrail.progress += humans[i].runrail.speed; + point = null; + + } + + } + } + } + } + + function newhumancreate(){ + var direct = Math.floor(Math.random()*(3-1+1))+1; + var mantype = Math.floor(Math.random()*(3-1+1))+1; + // console.log(direct); + let points = []; + let newhuman; + if(mantype == 1){ + newhuman = THREE.SkeletonUtils.clone( originhuman1 ); + newhuman.animations = []; + newhuman.animations.push(originanima1.clone()); + }else{ + newhuman = THREE.SkeletonUtils.clone( originhuman2 ); + newhuman.animations = []; + newhuman.animations.push(originanima2.clone()); + } + + if(direct == 1|| direct == 2){ + let testposition = stationzon.getzoneposition("enter1"); + newhuman.position.set(32,10,25); + points.push(testposition); + points.push(new THREE.Vector3(26,10,21)); + points.push(new THREE.Vector3(18,10,18)); + }else{ + let testposition = stationzon.getzoneposition("enter2"); + newhuman.position.set(32,10,-5); + points.push(testposition); + points.push(new THREE.Vector3(26,10,12)); + points.push(new THREE.Vector3(24,10,17)); + points.push(new THREE.Vector3(18,10,18)); + } + + let j = Math.floor(Math.random()*(4-1+1))+1; + points.push(new THREE.Vector3(-0.5+j*1.4,10,18.5)); + // zhajiin[j].waiting = 1; + + let mixer = new THREE.AnimationMixer( newhuman ); + mixer.runplay = false; + let action = mixer.clipAction( newhuman.animations[ 0 ] ); + + var stationdirection = Math.floor(Math.random()*(2-1+1))+1; + let newone = { + id:humans.length, + mesh:newhuman, + status:1, + stage:0, + direct:stationdirection, + doorstatus:null, + doors:j, + action:action, + mixer:mixer, + runrail:null + }; + + humans.push(newone); + mixers.push(mixer); + humanlist.add(newhuman); + + + moveanimateinit(newone,humans.length,points,newone.id,0.002); + + // return newone; + } + + function initstationanimation(object){ + let mixer = new THREE.AnimationMixer( object ); + + let newclip = object.animations[ 0 ]; + for(let j=0;j 0) { + + // Grab the lowest f(x) to process next. Heap keeps this sorted for us. + const currentNode = openHeap.pop(); + + // End case -- result has been found, return the traced path. + if (currentNode === end) { + let curr = currentNode; + const ret = []; + while (curr.parent) { + ret.push(curr); + curr = curr.parent; + } + this.cleanUp(ret); + return ret.reverse(); + } + + // Normal case -- move currentNode from open to closed, process each of its neighbours. + currentNode.closed = true; + + // Find all neighbours for the current node. Optionally find diagonal neighbours as well (false by default). + const neighbours = this.neighbours(graph, currentNode); + + for (let i = 0, il = neighbours.length; i < il; i++) { + const neighbour = neighbours[i]; + + if (neighbour.closed) { + // Not a valid node to process, skip to next neighbour. + continue; + } + + // The g score is the shortest distance from start to current node. + // We need to check if the path we have arrived at this neighbour is the shortest one we have seen yet. + const gScore = currentNode.g + neighbour.cost; + const beenVisited = neighbour.visited; + + if (!beenVisited || gScore < neighbour.g) { + + // Found an optimal (so far) path to this node. Take score for node to see how good it is. + neighbour.visited = true; + neighbour.parent = currentNode; + if (!neighbour.centroid || !end.centroid) throw new Error('Unexpected state'); + neighbour.h = neighbour.h || this.heuristic(neighbour.centroid, end.centroid); + neighbour.g = gScore; + neighbour.f = neighbour.g + neighbour.h; + + if (!beenVisited) { + // Pushing to heap will put it in proper place based on the 'f' value. + openHeap.push(neighbour); + } else { + // Already seen the node, but since it has been rescored we need to reorder it in the heap + openHeap.rescoreElement(neighbour); + } + } + } + } + + // No result was found - empty array signifies failure to find path. + return []; + } + + static heuristic (pos1, pos2) { + return Utils.distanceToSquared(pos1, pos2); + } + + static neighbours (graph, node) { + const ret = []; + + for (let e = 0; e < node.neighbours.length; e++) { + ret.push(graph[node.neighbours[e]]); + } + + return ret; + } +} + +export { AStar }; diff --git a/src/jlmap3d/jl3dpassflow/utils/BinaryHeap.js b/src/jlmap3d/jl3dpassflow/utils/BinaryHeap.js new file mode 100644 index 000000000..07e4fac18 --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/BinaryHeap.js @@ -0,0 +1,134 @@ +// javascript-astar +// http://github.com/bgrins/javascript-astar +// Freely distributable under the MIT License. +// Implements the astar search algorithm in javascript using a binary heap. + +class BinaryHeap { + constructor (scoreFunction) { + this.content = []; + this.scoreFunction = scoreFunction; + } + + push (element) { + // Add the new element to the end of the array. + this.content.push(element); + + // Allow it to sink down. + this.sinkDown(this.content.length - 1); + } + + pop () { + // Store the first element so we can return it later. + const result = this.content[0]; + // Get the element at the end of the array. + const end = this.content.pop(); + // If there are any elements left, put the end element at the + // start, and let it bubble up. + if (this.content.length > 0) { + this.content[0] = end; + this.bubbleUp(0); + } + return result; + } + + remove (node) { + const i = this.content.indexOf(node); + + // When it is found, the process seen in 'pop' is repeated + // to fill up the hole. + const end = this.content.pop(); + + if (i !== this.content.length - 1) { + this.content[i] = end; + + if (this.scoreFunction(end) < this.scoreFunction(node)) { + this.sinkDown(i); + } else { + this.bubbleUp(i); + } + } + } + + size () { + return this.content.length; + } + + rescoreElement (node) { + this.sinkDown(this.content.indexOf(node)); + } + + sinkDown (n) { + // Fetch the element that has to be sunk. + const element = this.content[n]; + + // When at 0, an element can not sink any further. + while (n > 0) { + // Compute the parent element's index, and fetch it. + const parentN = ((n + 1) >> 1) - 1; + const parent = this.content[parentN]; + + if (this.scoreFunction(element) < this.scoreFunction(parent)) { + // Swap the elements if the parent is greater. + this.content[parentN] = element; + this.content[n] = parent; + // Update 'n' to continue at the new position. + n = parentN; + } else { + // Found a parent that is less, no need to sink any further. + break; + } + } + } + + bubbleUp (n) { + // Look up the target element and its score. + const length = this.content.length, + element = this.content[n], + elemScore = this.scoreFunction(element); + + while (true) { + // Compute the indices of the child elements. + const child2N = (n + 1) << 1, + child1N = child2N - 1; + // This is used to store the new position of the element, + // if any. + let swap = null; + let child1Score; + // If the first child exists (is inside the array)... + if (child1N < length) { + // Look it up and compute its score. + const child1 = this.content[child1N]; + child1Score = this.scoreFunction(child1); + + // If the score is less than our element's, we need to swap. + if (child1Score < elemScore) { + swap = child1N; + } + } + + // Do the same checks for the other child. + if (child2N < length) { + const child2 = this.content[child2N], + child2Score = this.scoreFunction(child2); + if (child2Score < (swap === null ? elemScore : child1Score)) { + swap = child2N; + } + } + + // If the element needs to be moved, swap it, and continue. + if (swap !== null) { + this.content[n] = this.content[swap]; + this.content[swap] = element; + n = swap; + } + + // Otherwise, we are done. + else { + break; + } + } + } + +} + +export { BinaryHeap }; diff --git a/src/jlmap3d/jl3dpassflow/utils/Builder.js b/src/jlmap3d/jl3dpassflow/utils/Builder.js new file mode 100644 index 000000000..2c4a44749 --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/Builder.js @@ -0,0 +1,200 @@ +import { + Vector3, +} from 'three'; + +import { Utils } from './Utils'; + +class Builder { + /** + * Constructs groups from the given navigation mesh. + * @param {Geometry} geometry + * @return {Zone} + */ + static buildZone (geometry) { + + const navMesh = this._buildNavigationMesh(geometry); + + const zone = {}; + + navMesh.vertices.forEach((v) => { + v.x = Utils.roundNumber(v.x, 2); + v.y = Utils.roundNumber(v.y, 2); + v.z = Utils.roundNumber(v.z, 2); + }); + + zone.vertices = navMesh.vertices; + + const groups = this._buildPolygonGroups(navMesh); + + // TODO: This block represents a large portion of navigation mesh construction time + // and could probably be optimized. For example, construct portals while + // determining the neighbor graph. + zone.groups = new Array(groups.length); + groups.forEach((group, groupIndex) => { + + const indexByPolygon = new Map(); // { polygon: index in group } + group.forEach((poly, polyIndex) => { indexByPolygon.set(poly, polyIndex); }); + + const newGroup = new Array(group.length); + group.forEach((poly, polyIndex) => { + + const neighbourIndices = []; + poly.neighbours.forEach((n) => neighbourIndices.push(indexByPolygon.get(n))); + + // Build a portal list to each neighbour + const portals = []; + poly.neighbours.forEach((n) => portals.push(this._getSharedVerticesInOrder(poly, n))); + + const centroid = new Vector3( 0, 0, 0 ); + centroid.add( zone.vertices[ poly.vertexIds[0] ] ); + centroid.add( zone.vertices[ poly.vertexIds[1] ] ); + centroid.add( zone.vertices[ poly.vertexIds[2] ] ); + centroid.divideScalar( 3 ); + centroid.x = Utils.roundNumber(centroid.x, 2); + centroid.y = Utils.roundNumber(centroid.y, 2); + centroid.z = Utils.roundNumber(centroid.z, 2); + + newGroup[polyIndex] = { + id: polyIndex, + neighbours: neighbourIndices, + vertexIds: poly.vertexIds, + centroid: centroid, + portals: portals + }; + }); + + zone.groups[groupIndex] = newGroup; + }); + + return zone; + } + + /** + * Constructs a navigation mesh from the given geometry. + * @param {Geometry} geometry + * @return {Object} + */ + static _buildNavigationMesh (geometry) { + geometry.mergeVertices(); + return this._buildPolygonsFromGeometry(geometry); + } + + static _buildPolygonGroups (navigationMesh) { + + const polygons = navigationMesh.polygons; + + const polygonGroups = []; + + const spreadGroupId = function (polygon) { + polygon.neighbours.forEach((neighbour) => { + if (neighbour.group === undefined) { + neighbour.group = polygon.group; + spreadGroupId(neighbour); + } + }); + }; + + polygons.forEach((polygon) => { + if (polygon.group !== undefined) { + // this polygon is already part of a group + polygonGroups[polygon.group].push(polygon); + } else { + // we need to make a new group and spread its ID to neighbors + polygon.group = polygonGroups.length; + spreadGroupId(polygon); + polygonGroups.push([polygon]); + } + }); + + return polygonGroups; + } + + static _buildPolygonNeighbours (polygon, vertexPolygonMap) { + const neighbours = new Set(); + + const groupA = vertexPolygonMap[polygon.vertexIds[0]]; + const groupB = vertexPolygonMap[polygon.vertexIds[1]]; + const groupC = vertexPolygonMap[polygon.vertexIds[2]]; + + // It's only necessary to iterate groups A and B. Polygons contained only + // in group C cannot share a >1 vertex with this polygon. + // IMPORTANT: Bublé cannot compile for-of loops. + groupA.forEach((candidate) => { + if (candidate === polygon) return; + if (groupB.includes(candidate) || groupC.includes(candidate)) { + neighbours.add(candidate); + } + }); + groupB.forEach((candidate) => { + if (candidate === polygon) return; + if (groupC.includes(candidate)) { + neighbours.add(candidate); + } + }); + + return neighbours; + } + + static _buildPolygonsFromGeometry (geometry) { + + const polygons = []; + const vertices = geometry.vertices; + + // Constructing the neighbor graph brute force is O(n²). To avoid that, + // create a map from vertices to the polygons that contain them, and use it + // while connecting polygons. This reduces complexity to O(n*m), where 'm' + // is related to connectivity of the mesh. + const vertexPolygonMap = new Array(vertices.length); // array of polygon objects by vertex index + for (let i = 0; i < vertices.length; i++) { + vertexPolygonMap[i] = []; + } + + // Convert the faces into a custom format that supports more than 3 vertices + geometry.faces.forEach((face) => { + const poly = { vertexIds: [face.a, face.b, face.c], neighbours: null }; + polygons.push(poly); + vertexPolygonMap[face.a].push(poly); + vertexPolygonMap[face.b].push(poly); + vertexPolygonMap[face.c].push(poly); + }); + + // Build a list of adjacent polygons + polygons.forEach((polygon) => { + polygon.neighbours = this._buildPolygonNeighbours(polygon, vertexPolygonMap); + }); + + return { + polygons: polygons, + vertices: vertices + }; + } + + static _getSharedVerticesInOrder (a, b) { + + const aList = a.vertexIds; + const a0 = aList[0], a1 = aList[1], a2 = aList[2]; + + const bList = b.vertexIds; + const shared0 = bList.includes(a0); + const shared1 = bList.includes(a1); + const shared2 = bList.includes(a2); + + // it seems that we shouldn't have an a and b with <2 shared vertices here unless there's a bug + // in the neighbor identification code, or perhaps a malformed input geometry; 3 shared vertices + // is a kind of embarrassing but possible geometry we should handle + if (shared0 && shared1 && shared2) { + return Array.from(aList); + } else if (shared0 && shared1) { + return [a0, a1]; + } else if (shared1 && shared2) { + return [a1, a2]; + } else if (shared0 && shared2) { + return [a2, a0]; // this ordering will affect the string pull algorithm later, not clear if significant + } else { + console.warn("Error processing navigation mesh neighbors; neighbors with <2 shared vertices found."); + return []; + } + } +} + +export { Builder }; diff --git a/src/jlmap3d/jl3dpassflow/utils/Channel.js b/src/jlmap3d/jl3dpassflow/utils/Channel.js new file mode 100644 index 000000000..1850bd2f7 --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/Channel.js @@ -0,0 +1,93 @@ +import { Utils } from './Utils'; + +class Channel { + constructor () { + this.portals = []; + } + + push (p1, p2) { + if (p2 === undefined) p2 = p1; + this.portals.push({ + left: p1, + right: p2 + }); + } + + stringPull () { + const portals = this.portals; + const pts = []; + // Init scan state + let portalApex, portalLeft, portalRight; + let apexIndex = 0, + leftIndex = 0, + rightIndex = 0; + + portalApex = portals[0].left; + portalLeft = portals[0].left; + portalRight = portals[0].right; + + // Add start point. + pts.push(portalApex); + + for (let i = 1; i < portals.length; i++) { + const left = portals[i].left; + const right = portals[i].right; + + // Update right vertex. + if (Utils.triarea2(portalApex, portalRight, right) <= 0.0) { + if (Utils.vequal(portalApex, portalRight) || Utils.triarea2(portalApex, portalLeft, right) > 0.0) { + // Tighten the funnel. + portalRight = right; + rightIndex = i; + } else { + // Right over left, insert left to path and restart scan from portal left point. + pts.push(portalLeft); + // Make current left the new apex. + portalApex = portalLeft; + apexIndex = leftIndex; + // Reset portal + portalLeft = portalApex; + portalRight = portalApex; + leftIndex = apexIndex; + rightIndex = apexIndex; + // Restart scan + i = apexIndex; + continue; + } + } + + // Update left vertex. + if (Utils.triarea2(portalApex, portalLeft, left) >= 0.0) { + if (Utils.vequal(portalApex, portalLeft) || Utils.triarea2(portalApex, portalRight, left) < 0.0) { + // Tighten the funnel. + portalLeft = left; + leftIndex = i; + } else { + // Left over right, insert right to path and restart scan from portal right point. + pts.push(portalRight); + // Make current right the new apex. + portalApex = portalRight; + apexIndex = rightIndex; + // Reset portal + portalLeft = portalApex; + portalRight = portalApex; + leftIndex = apexIndex; + rightIndex = apexIndex; + // Restart scan + i = apexIndex; + continue; + } + } + } + + if ((pts.length === 0) || (!Utils.vequal(pts[pts.length - 1], portals[portals.length - 1].left))) { + // Append last point to path. + pts.push(portals[portals.length - 1].left); + } + + this.path = pts; + return pts; + } +} + +export { Channel }; diff --git a/src/jlmap3d/jl3dpassflow/utils/Pathfinding.js b/src/jlmap3d/jl3dpassflow/utils/Pathfinding.js new file mode 100644 index 000000000..be7925f58 --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/Pathfinding.js @@ -0,0 +1,315 @@ +import { + Vector3, + Plane, + Geometry, + Triangle, +} from 'three'; + +import { Utils } from './Utils'; +import { AStar } from './AStar'; +import { Builder } from './Builder'; +import { Channel } from './Channel'; + +/** + * Defines an instance of the pathfinding module, with one or more zones. + */ +class Pathfinding { + constructor () { + this.zones = {}; + } + + /** + * (Static) Builds a zone/node set from navigation mesh geometry. + * @param {BufferGeometry} geometry + * @return {Zone} + */ + static createZone (geometry) { + if ( geometry.isGeometry ) { + // Haven't actually implemented support for BufferGeometry yet, but Geometry is somewhat + // not-recommended these days, so go ahead and start warning. + console.warn('[three-pathfinding]: Use BufferGeometry, not Geometry, to create zone.'); + } else { + geometry = new Geometry().fromBufferGeometry(geometry); + } + + return Builder.buildZone(geometry); + } + + /** + * Sets data for the given zone. + * @param {string} zoneID + * @param {Zone} zone + */ + setZoneData (zoneID, zone) { + this.zones[zoneID] = zone; + } + + /** + * Returns a random node within a given range of a given position. + * @param {string} zoneID + * @param {number} groupID + * @param {Vector3} nearPosition + * @param {number} nearRange + * @return {Node} + */ + getRandomNode (zoneID, groupID, nearPosition, nearRange) { + + if (!this.zones[zoneID]) return new Vector3(); + + nearPosition = nearPosition || null; + nearRange = nearRange || 0; + + const candidates = []; + const polygons = this.zones[zoneID].groups[groupID]; + + polygons.forEach((p) => { + if (nearPosition && nearRange) { + if (Utils.distanceToSquared(nearPosition, p.centroid) < nearRange * nearRange) { + candidates.push(p.centroid); + } + } else { + candidates.push(p.centroid); + } + }); + + return Utils.sample(candidates) || new Vector3(); + } + + /** + * Returns the closest node to the target position. + * @param {Vector3} position + * @param {string} zoneID + * @param {number} groupID + * @param {boolean} checkPolygon + * @return {Node} + */ + getClosestNode (position, zoneID, groupID, checkPolygon = false) { + const nodes = this.zones[zoneID].groups[groupID]; + const vertices = this.zones[zoneID].vertices; + let closestNode = null; + let closestDistance = Infinity; + + nodes.forEach((node) => { + const distance = Utils.distanceToSquared(node.centroid, position); + if (distance < closestDistance + && (!checkPolygon || Utils.isVectorInPolygon(position, node, vertices))) { + closestNode = node; + closestDistance = distance; + } + }); + + return closestNode; + } + + /** + * Returns a path between given start and end points. If a complete path + * cannot be found, will return the nearest endpoint available. + * + * @param {Vector3} startPosition Start position. + * @param {Vector3} targetPosition Destination. + * @param {string} zoneID ID of current zone. + * @param {number} groupID Current group ID. + * @return {Array} Array of points defining the path. + */ + findPath (startPosition, targetPosition, zoneID, groupID) { + const nodes = this.zones[zoneID].groups[groupID]; + const vertices = this.zones[zoneID].vertices; + + const closestNode = this.getClosestNode(startPosition, zoneID, groupID, true); + const farthestNode = this.getClosestNode(targetPosition, zoneID, groupID, true); + + // If we can't find any node, just go straight to the target + if (!closestNode || !farthestNode) { + return null; + } + + const paths = AStar.search(nodes, closestNode, farthestNode); + + const getPortalFromTo = function (a, b) { + for (var i = 0; i < a.neighbours.length; i++) { + if (a.neighbours[i] === b.id) { + return a.portals[i]; + } + } + }; + + // We have the corridor, now pull the rope. + const channel = new Channel(); + channel.push(startPosition); + for (let i = 0; i < paths.length; i++) { + const polygon = paths[i]; + const nextPolygon = paths[i + 1]; + + if (nextPolygon) { + const portals = getPortalFromTo(polygon, nextPolygon); + channel.push( + vertices[portals[0]], + vertices[portals[1]] + ); + } + } + channel.push(targetPosition); + channel.stringPull(); + + // Return the path, omitting first position (which is already known). + const path = channel.path.map((c) => new Vector3(c.x, c.y, c.z)); + path.shift(); + return path; + } +} + +/** + * Returns closest node group ID for given position. + * @param {string} zoneID + * @param {Vector3} position + * @return {number} + */ +Pathfinding.prototype.getGroup = (function() { + const plane = new Plane(); + return function (zoneID, position, checkPolygon = false) { + if (!this.zones[zoneID]) return null; + + let closestNodeGroup = null; + let distance = Math.pow(50, 2); + const zone = this.zones[zoneID]; + + for (let i = 0; i < zone.groups.length; i++) { + const group = zone.groups[i]; + for (const node of group) { + if (checkPolygon) { + plane.setFromCoplanarPoints( + zone.vertices[node.vertexIds[0]], + zone.vertices[node.vertexIds[1]], + zone.vertices[node.vertexIds[2]] + ); + if (Math.abs(plane.distanceToPoint(position)) < 0.01) { + const poly = [ + zone.vertices[node.vertexIds[0]], + zone.vertices[node.vertexIds[1]], + zone.vertices[node.vertexIds[2]] + ]; + if(Utils.isPointInPoly(poly, position)) { + return i; + } + } + } + const measuredDistance = Utils.distanceToSquared(node.centroid, position); + if (measuredDistance < distance) { + closestNodeGroup = i; + distance = measuredDistance; + } + } + } + + return closestNodeGroup; + }; +}()); + +/** + * Clamps a step along the navmesh, given start and desired endpoint. May be + * used to constrain first-person / WASD controls. + * + * @param {Vector3} start + * @param {Vector3} end Desired endpoint. + * @param {Node} node + * @param {string} zoneID + * @param {number} groupID + * @param {Vector3} endTarget Updated endpoint. + * @return {Node} Updated node. + */ +Pathfinding.prototype.clampStep = (function () { + const point = new Vector3(); + const plane = new Plane(); + const triangle = new Triangle(); + + const endPoint = new Vector3(); + + let closestNode; + let closestPoint = new Vector3(); + let closestDistance; + + return function (startRef, endRef, node, zoneID, groupID, endTarget) { + const vertices = this.zones[zoneID].vertices; + const nodes = this.zones[zoneID].groups[groupID]; + + const nodeQueue = [node]; + const nodeDepth = {}; + nodeDepth[node.id] = 0; + + closestNode = undefined; + closestPoint.set(0, 0, 0); + closestDistance = Infinity; + + // Project the step along the current node. + plane.setFromCoplanarPoints( + vertices[node.vertexIds[0]], + vertices[node.vertexIds[1]], + vertices[node.vertexIds[2]] + ); + plane.projectPoint(endRef, point); + endPoint.copy(point); + + for (let currentNode = nodeQueue.pop(); currentNode; currentNode = nodeQueue.pop()) { + + triangle.set( + vertices[currentNode.vertexIds[0]], + vertices[currentNode.vertexIds[1]], + vertices[currentNode.vertexIds[2]] + ); + + triangle.closestPointToPoint(endPoint, point); + + if (point.distanceToSquared(endPoint) < closestDistance) { + closestNode = currentNode; + closestPoint.copy(point); + closestDistance = point.distanceToSquared(endPoint); + } + + const depth = nodeDepth[currentNode.id]; + if (depth > 2) continue; + + for (let i = 0; i < currentNode.neighbours.length; i++) { + const neighbour = nodes[currentNode.neighbours[i]]; + if (neighbour.id in nodeDepth) continue; + + nodeQueue.push(neighbour); + nodeDepth[neighbour.id] = depth + 1; + } + } + + endTarget.copy(closestPoint); + return closestNode; + }; +}()); + +/** + * Defines a zone of interconnected groups on a navigation mesh. + * + * @type {Object} + * @property {Array} groups + * @property {Array} vertices + */ +const Zone = {}; // jshint ignore:line + +/** + * Defines a group within a navigation mesh. + * + * @type {Object} + */ +const Group = {}; // jshint ignore:line + +/** + * Defines a node (or polygon) within a group. + * + * @type {Object} + * @property {number} id + * @property {Array} neighbours IDs of neighboring nodes. + * @property {Array} vertexIds + * @property {Vector3} centroid + * @property {Array>} portals Array of portals, each defined by two vertex IDs. + * @property {boolean} closed + * @property {number} cost + */ +const Node = {}; // jshint ignore:line + +export { Pathfinding }; diff --git a/src/jlmap3d/jl3dpassflow/utils/PathfindingHelper.js b/src/jlmap3d/jl3dpassflow/utils/PathfindingHelper.js new file mode 100644 index 000000000..20a869e9c --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/PathfindingHelper.js @@ -0,0 +1,53 @@ +import { + Color, + Object3D, + LineBasicMaterial, + MeshBasicMaterial, + SphereBufferGeometry, + BoxGeometry, + Mesh, + SphereGeometry, + Geometry, + Vector3, + Line, +} from 'three'; + +const OFFSET = 0.2; + +/** + * Helper for debugging pathfinding behavior. + */ +class PathfindingHelper extends Object3D { + constructor () { + super(); + + this._playerMarker = null; + + this._markers = [ + this._playerMarker, + ]; + + this._markers.forEach( ( marker ) => { + this.add( marker ); + + } ); + + } + + + + /** + * @param {Vector3} position + * @return {this} + */ + setPlayerPosition( position ) { + // this._playerMarker.lookAt(position); + this._playerMarker.position.copy( position ); + return this; + + } + + +} + +export { PathfindingHelper }; diff --git a/src/jlmap3d/jl3dpassflow/utils/Utils.js b/src/jlmap3d/jl3dpassflow/utils/Utils.js new file mode 100644 index 000000000..d8a80b574 --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/Utils.js @@ -0,0 +1,66 @@ +class Utils { + + static roundNumber (value, decimals) { + const factor = Math.pow(10, decimals); + return Math.round(value * factor) / factor; + } + + static sample (list) { + return list[Math.floor(Math.random() * list.length)]; + } + + static distanceToSquared (a, b) { + + var dx = a.x - b.x; + var dy = a.y - b.y; + var dz = a.z - b.z; + + return dx * dx + dy * dy + dz * dz; + + } + + //+ Jonas Raoni Soares Silva + //@ http://jsfromhell.com/math/is-point-in-poly [rev. #0] + static isPointInPoly (poly, pt) { + for (var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) + ((poly[i].z <= pt.z && pt.z < poly[j].z) || (poly[j].z <= pt.z && pt.z < poly[i].z)) && (pt.x < (poly[j].x - poly[i].x) * (pt.z - poly[i].z) / (poly[j].z - poly[i].z) + poly[i].x) && (c = !c); + return c; + } + + static isVectorInPolygon (vector, polygon, vertices) { + + // reference point will be the centroid of the polygon + // We need to rotate the vector as well as all the points which the polygon uses + + var lowestPoint = 100000; + var highestPoint = -100000; + + var polygonVertices = []; + + polygon.vertexIds.forEach((vId) => { + lowestPoint = Math.min(vertices[vId].y, lowestPoint); + highestPoint = Math.max(vertices[vId].y, highestPoint); + polygonVertices.push(vertices[vId]); + }); + + if (vector.y < highestPoint + 0.5 && vector.y > lowestPoint - 0.5 && + this.isPointInPoly(polygonVertices, vector)) { + return true; + } + return false; + } + + static triarea2 (a, b, c) { + var ax = b.x - a.x; + var az = b.z - a.z; + var bx = c.x - a.x; + var bz = c.z - a.z; + return bx * az - ax * bz; + } + + static vequal (a, b) { + return this.distanceToSquared(a, b) < 0.00001; + } +} + +export { Utils }; diff --git a/src/jlmap3d/jl3dpassflow/utils/index.js b/src/jlmap3d/jl3dpassflow/utils/index.js new file mode 100644 index 000000000..bd702f6f9 --- /dev/null +++ b/src/jlmap3d/jl3dpassflow/utils/index.js @@ -0,0 +1,4 @@ +import { Pathfinding } from './Pathfinding'; +import { PathfindingHelper } from './PathfindingHelper'; + +export { Pathfinding, PathfindingHelper }; diff --git a/src/jlmap3d/jl3dsimulation/connect/Jlmap3dSubscribeNew.js b/src/jlmap3d/jl3dsimulation/connect/Jlmap3dSubscribeNew.js index 57285b9f7..c35bdce7e 100644 --- a/src/jlmap3d/jl3dsimulation/connect/Jlmap3dSubscribeNew.js +++ b/src/jlmap3d/jl3dsimulation/connect/Jlmap3dSubscribeNew.js @@ -53,12 +53,12 @@ export function Jlmap3dSubscribeNew(jlmap3d,routegroup,jsonwebwork) { jsonwebwork.onmessage = function (event) { - + // console.log(event.data); // if(event.data.deviceType == "TRAIN"){ // // console.log(event.data); // // } - console.log(event.data); + // console.log(event.data); if(event.data.type == "Device_Load_Destroy_3D"){ DeviceDestroy(event.data); return; @@ -150,7 +150,6 @@ export function Jlmap3dSubscribeNew(jlmap3d,routegroup,jsonwebwork) { let code = data.code; if(trainlisttest.list[code].right != data.right){ - if(data.right == "0"){ trainlisttest.list[code].right = "0"; trainlisttest.list[code].rotation.y = Math.PI; @@ -442,27 +441,28 @@ export function Jlmap3dSubscribeNew(jlmap3d,routegroup,jsonwebwork) { for(let i=0,leni=data.length;i { const code = elem.code; const type = elem._type; + if (elem.deviceType === 'TRAIN' && elem.type === 'HEAD') { + elem.serviceNumber = ''; + } else if (elem.deviceType === 'TRAIN' && elem.type === 'MANUAL') { + elem.serviceNumber = ''; + elem.tripNumber = ''; + elem.destinationCode = ''; + } const oDevice = this.mapDevice[code] || deviceFactory(type, elem); this.hookHandle(oDevice, elem); }); @@ -371,7 +378,6 @@ class Jlmap { update(list) { this.setUpdateMapDevice(list || []); // 增加一个 前数据 处理 为了在区段中 获取全部的 道岔信息 const signalDeviceList = []; - const signalStatusList = []; (list || []).forEach(elem => { const code = elem.code; const type = elem._type; @@ -386,13 +392,9 @@ class Jlmap { } } const signalDevice = this.mapDevice[route.startSignalCode]; - const signalStatus = {atsControl: elem.atsControl, fleetMode: elem.fleetMode}; const index = signalDeviceList.indexOf(signalDevice); if (index === -1) { signalDeviceList.push(signalDevice); - signalStatusList.push(signalStatus); - } else { - signalStatusList[index] = {atsControl: signalStatusList[index].atsControl && elem.atsControl, fleetMode: signalStatusList[index].fleetMode || elem.fleetMode}; } } else if (elem.deviceType === 'CYCLE') { store.dispatch('map/updateAutoReentryState', elem); @@ -431,15 +433,28 @@ class Jlmap { } } }); - this.handleRouteSignalStatus(signalDeviceList, signalStatusList); + this.handleRouteSignalStatus(signalDeviceList); // 状态后处理 this.postHandle(list || []); if (this.methods.stateUpdate instanceof Function) { this.methods.stateUpdate(list); } } - handleRouteSignalStatus(signalDeviceList, signalStatusList) { + handleRouteSignalStatus(signalDeviceList) { + const routeStartSignalData = store.state.map.routeStartSignalData; signalDeviceList.forEach((item, index)=> { - if (item && this.hookHandle(item, signalStatusList[index])) { + const status = {}; + if (routeStartSignalData[item.code] && routeStartSignalData[item.code].length) { + routeStartSignalData[item.code].forEach((elem, index)=> { + if (index) { + status.atsControl = status.atsControl && elem.atsControl; + status.fleetMode = status.fleetMode || elem.fleetMode; + } else { + status.atsControl = elem.atsControl; + status.fleetMode = elem.fleetMode; + } + }); + } + if (item && this.hookHandle(item, status)) { this.$painter.update(item); } }); diff --git a/src/jmapNew/shape/Automactic/EMouse.js b/src/jmapNew/shape/AutoTurnBack/EMouse.js similarity index 95% rename from src/jmapNew/shape/Automactic/EMouse.js rename to src/jmapNew/shape/AutoTurnBack/EMouse.js index 967f6094e..8eb02756e 100644 --- a/src/jmapNew/shape/Automactic/EMouse.js +++ b/src/jmapNew/shape/AutoTurnBack/EMouse.js @@ -17,7 +17,7 @@ export default class EMouse extends Group { y: this.device.model.position.y + this.device.style.LcControl.lamp.radiusR + this.device.style.LcControl.text.distance - 30, fontWeight: 'normal', fontSize: this.device.style.LcControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.LcControl.mouseOverStyle.fontFamily, + fontFamily: this.device.style.fontFamily, text: this.device.model.name, textFill: this.device.style.LcControl.mouseOverStyle.fontColor, textAlign: this.device.style.LcControl.mouseOverStyle.textAlign, diff --git a/src/jmapNew/shape/Automactic/index.js b/src/jmapNew/shape/AutoTurnBack/index.js similarity index 99% rename from src/jmapNew/shape/Automactic/index.js rename to src/jmapNew/shape/AutoTurnBack/index.js index 942029bab..83c303df7 100644 --- a/src/jmapNew/shape/Automactic/index.js +++ b/src/jmapNew/shape/AutoTurnBack/index.js @@ -9,7 +9,7 @@ import EMouse from './EMouse'; import BoundingRect from 'zrender/src/core/BoundingRect'; import {isShowThePrdType} from '../../utils/handlePath'; -export default class Automactic extends Group { +export default class AutoTurnBack extends Group { constructor(model, style) { super(); this.z = 20; diff --git a/src/jmapNew/shape/AutomacticRoute/EMouse.js b/src/jmapNew/shape/AutomacticRoute/EMouse.js index 96e179317..f2547d8c6 100644 --- a/src/jmapNew/shape/AutomacticRoute/EMouse.js +++ b/src/jmapNew/shape/AutomacticRoute/EMouse.js @@ -17,7 +17,7 @@ export default class EMouse extends Group { y: this.device.model.position.y + this.device.style.LcControl.lamp.radiusR + this.device.style.LcControl.text.distance - 30, fontWeight: 'normal', fontSize: this.device.style.LcControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.LcControl.mouseOverStyle.fontFamily, + fontFamily: this.device.style.fontFamily, text: this.device.model.name, textFill: this.device.style.LcControl.mouseOverStyle.fontColor, textAlign: this.device.style.LcControl.mouseOverStyle.textAlign, diff --git a/src/jmapNew/shape/AxleReset/EMouse.js b/src/jmapNew/shape/AxleReset/EMouse.js index 96e179317..f2547d8c6 100644 --- a/src/jmapNew/shape/AxleReset/EMouse.js +++ b/src/jmapNew/shape/AxleReset/EMouse.js @@ -17,7 +17,7 @@ export default class EMouse extends Group { y: this.device.model.position.y + this.device.style.LcControl.lamp.radiusR + this.device.style.LcControl.text.distance - 30, fontWeight: 'normal', fontSize: this.device.style.LcControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.LcControl.mouseOverStyle.fontFamily, + fontFamily: this.device.style.fontFamily, text: this.device.model.name, textFill: this.device.style.LcControl.mouseOverStyle.fontColor, textAlign: this.device.style.LcControl.mouseOverStyle.textAlign, diff --git a/src/jmapNew/shape/GuideLock/EMouse.js b/src/jmapNew/shape/GuideLock/EMouse.js index 2241f7e1c..1589c764a 100644 --- a/src/jmapNew/shape/GuideLock/EMouse.js +++ b/src/jmapNew/shape/GuideLock/EMouse.js @@ -17,7 +17,7 @@ export default class EMouse extends Group { y: this.device.model.position.y + this.device.style.LcControl.lamp.radiusR + this.device.style.LcControl.text.distance - 30, fontWeight: 'normal', fontSize: this.device.style.LcControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.LcControl.mouseOverStyle.fontFamily, + fontFamily: this.device.style.fontFamily, text: this.device.model.name, textFill: this.device.style.LcControl.mouseOverStyle.fontColor, textAlign: this.device.style.LcControl.mouseOverStyle.textAlign, diff --git a/src/jmapNew/shape/LcControl/EMouse.js b/src/jmapNew/shape/LcControl/EMouse.js index fdb639e95..f2547d8c6 100644 --- a/src/jmapNew/shape/LcControl/EMouse.js +++ b/src/jmapNew/shape/LcControl/EMouse.js @@ -2,52 +2,52 @@ import Group from 'zrender/src/container/Group'; import Text from 'zrender/src/graphic/Text'; export default class EMouse extends Group { - constructor(device) { - super(); - this.device = device; - this.create(); - } - create() { - this.text = new Text({ - zlevel: this.device.zlevel, - z: this.device.z+1, - position: [0, 0], - style: { - x: this.device.model.position.x, - y: this.device.model.position.y + this.device.style.LcControl.lamp.radiusR + this.device.style.LcControl.text.distance-30, - fontWeight: 'normal', - fontSize: this.device.style.LcControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.LcControl.mouseOverStyle.fontFamily, - text: this.device.model.name, - textFill: this.device.style.LcControl.mouseOverStyle.fontColor, - textAlign: this.device.style.LcControl.mouseOverStyle.textAlign, - textVerticalAlign: this.device.style.LcControl.mouseOverStyle.textVerticalAlign - } - }); - this.add(this.text); - this.text.hide(); - } - mouseover(e) { - if (e.target && e.target._subType == 'Text') { - this.text.show(); - } else { - this.device.control.setControlColor(this.device.style.LcControl.mouseOverStyle.arcColor); - this.device.control.setTextColor(this.device.style.LcControl.mouseOverStyle.textColor); - this.device.control.setTextBorder(true); - this.device.control.setArcBorder(true); - } - } + constructor(device) { + super(); + this.device = device; + this.create(); + } + create() { + this.text = new Text({ + zlevel: this.device.zlevel, + z: this.device.z + 1, + position: [0, 0], + style: { + x: this.device.model.position.x, + y: this.device.model.position.y + this.device.style.LcControl.lamp.radiusR + this.device.style.LcControl.text.distance - 30, + fontWeight: 'normal', + fontSize: this.device.style.LcControl.mouseOverStyle.fontSize, + fontFamily: this.device.style.fontFamily, + text: this.device.model.name, + textFill: this.device.style.LcControl.mouseOverStyle.fontColor, + textAlign: this.device.style.LcControl.mouseOverStyle.textAlign, + textVerticalAlign: this.device.style.LcControl.mouseOverStyle.textVerticalAlign + } + }); + this.add(this.text); + this.text.hide(); + } + mouseover(e) { + if (e.target && e.target._subType == 'Text') { + this.text.show(); + } else { + this.device.control.setControlColor(this.device.style.LcControl.mouseOverStyle.arcColor); + this.device.control.setTextColor(this.device.style.LcControl.mouseOverStyle.textColor); + this.device.control.setTextBorder(true); + this.device.control.setArcBorder(true); + } + } - mouseout(e) { - if (!this.device.model.down) { - if (e.target && e.target._subType == 'Text') { - this.text.hide(); - } else { - this.device.control.setControlColor(this.device.style.LcControl.lamp.controlColor); - this.device.control.setTextColor('#FFFFFF'); - this.device.control.setTextBorder(false); - this.device.control.setArcBorder(false); - } - } - } + mouseout(e) { + if (!this.device.model.down) { + if (e.target && e.target._subType == 'Text') { + this.text.hide(); + } else { + this.device.control.setControlColor(this.device.style.LcControl.lamp.controlColor); + this.device.control.setTextColor('#FFFFFF'); + this.device.control.setTextBorder(false); + this.device.control.setArcBorder(false); + } + } + } } diff --git a/src/jmapNew/shape/LimitControl/EMouse.js b/src/jmapNew/shape/LimitControl/EMouse.js index 4abd12d5d..c650da217 100644 --- a/src/jmapNew/shape/LimitControl/EMouse.js +++ b/src/jmapNew/shape/LimitControl/EMouse.js @@ -2,53 +2,53 @@ import Group from 'zrender/src/container/Group'; import Text from 'zrender/src/graphic/Text'; export default class EMouse extends Group { - constructor(device) { - super(); - this.device = device; - this.create(); - } - create() { - this.text = new Text({ - _subType: 'Text', - zlevel: this.device.zlevel, - z: this.device.z+1, - position: [0, 0], - style: { - x: this.device.model.position.x, - y: this.device.model.position.y + this.device.style.LimitControl.lamp.radiusR + this.device.style.LimitControl.text.distance-30, - fontWeight: this.device.style.LimitControl.mouseOverStyle.fontWeight, - fontSize: this.device.style.LimitControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.LimitControl.mouseOverStyle.fontFormat, - text: this.device.model.name, - textFill: this.device.style.LimitControl.mouseOverStyle.fontColor, - textAlign: this.device.style.LimitControl.mouseOverStyle.textAlign, - textVerticalAlign: this.device.style.LimitControl.mouseOverStyle.textVerticalAlign - } - }); - this.add(this.text); - this.text.hide(); - } - mouseover(e) { - if (e.target && e.target._subType == 'Text') { - this.text.show(); - } else { - this.device.control.setControlColor(this.device.style.LimitControl.mouseOverStyle.arcColor); - this.device.control.setTextColor(this.device.style.LimitControl.mouseOverStyle.textColor); - this.device.control.setTextBorder(true); - this.device.control.setArcBorder(true); - } - } + constructor(device) { + super(); + this.device = device; + this.create(); + } + create() { + this.text = new Text({ + _subType: 'Text', + zlevel: this.device.zlevel, + z: this.device.z + 1, + position: [0, 0], + style: { + x: this.device.model.position.x, + y: this.device.model.position.y + this.device.style.LimitControl.lamp.radiusR + this.device.style.LimitControl.text.distance - 30, + fontWeight: this.device.style.LimitControl.mouseOverStyle.fontWeight, + fontSize: this.device.style.LimitControl.mouseOverStyle.fontSize, + fontFamily: this.device.style.fontFormat, + text: this.device.model.name, + textFill: this.device.style.LimitControl.mouseOverStyle.fontColor, + textAlign: this.device.style.LimitControl.mouseOverStyle.textAlign, + textVerticalAlign: this.device.style.LimitControl.mouseOverStyle.textVerticalAlign + } + }); + this.add(this.text); + this.text.hide(); + } + mouseover(e) { + if (e.target && e.target._subType == 'Text') { + this.text.show(); + } else { + this.device.control.setControlColor(this.device.style.LimitControl.mouseOverStyle.arcColor); + this.device.control.setTextColor(this.device.style.LimitControl.mouseOverStyle.textColor); + this.device.control.setTextBorder(true); + this.device.control.setArcBorder(true); + } + } - mouseout(e) { - if (!this.device.model.down) { - if (e.target && e.target._subType == 'Text') { - this.text.hide(); - } else { - this.device.control.setControlColor(this.device.style.LimitControl.lamp.controlColor); - this.device.control.setTextColor('#FFFFFF'); - this.device.control.setTextBorder(false); - this.device.control.setArcBorder(false); - } - } - } + mouseout(e) { + if (!this.device.model.down) { + if (e.target && e.target._subType == 'Text') { + this.text.hide(); + } else { + this.device.control.setControlColor(this.device.style.LimitControl.lamp.controlColor); + this.device.control.setTextColor('#FFFFFF'); + this.device.control.setTextBorder(false); + this.device.control.setArcBorder(false); + } + } + } } diff --git a/src/jmapNew/shape/SaidLamp/EMouse.js b/src/jmapNew/shape/SaidLamp/EMouse.js index 92865a4eb..156f18853 100644 --- a/src/jmapNew/shape/SaidLamp/EMouse.js +++ b/src/jmapNew/shape/SaidLamp/EMouse.js @@ -17,7 +17,7 @@ export default class EMouse extends Group { y: this.device.model.position.y + this.device.deviceStyle.lamp.radiusR + this.device.deviceStyle.text.distance - 30, fontWeight: 'normal', fontSize: this.device.deviceStyle.mouseOverStyle.fontSize, - fontFamily: this.device.deviceStyle.mouseOverStyle.fontFamily, + fontFamily: this.device.style.fontFamily, text: this.device.model.name, textFill: this.device.deviceStyle.mouseOverStyle.fontColor, textAlign: this.device.deviceStyle.mouseOverStyle.textAlign, diff --git a/src/jmapNew/shape/Section/EMouse.js b/src/jmapNew/shape/Section/EMouse.js index 03316ae93..978e9e36a 100644 --- a/src/jmapNew/shape/Section/EMouse.js +++ b/src/jmapNew/shape/Section/EMouse.js @@ -59,6 +59,7 @@ class EMouse extends Group { x: rect.x + (rect.width / 2), y: rect.y + (rect.height / 2), text: this.device.model.name, + fontFamily: this.device.style.fontFamily, textFill: this.device.style.Section.mouseOverStyle.textShadowColor, // 黄色 textAlign: 'middle', textVerticalAlign: 'top', diff --git a/src/jmapNew/shape/Section/ESeparator.js b/src/jmapNew/shape/Section/ESeparator.js index 562db4652..7aa299a93 100644 --- a/src/jmapNew/shape/Section/ESeparator.js +++ b/src/jmapNew/shape/Section/ESeparator.js @@ -8,7 +8,7 @@ export default class ESeparator extends Group { super(); this.model = model; this.zlevel = model.zlevel; - this.z = model.style.Section.separator.z || 6; + this.z = model.z || 6; this.style = model.style; this.setType(); } diff --git a/src/jmapNew/shape/Section/index.js b/src/jmapNew/shape/Section/index.js index 6815330f6..08542bfdf 100644 --- a/src/jmapNew/shape/Section/index.js +++ b/src/jmapNew/shape/Section/index.js @@ -481,6 +481,7 @@ export default class Section extends Group { this.lPartition = new ESeparator({ style: style, zlevel: this.zlevel, + z: this.z + 3, traingle: traingle, point: { x: model.points[0].x, @@ -495,6 +496,7 @@ export default class Section extends Group { this.rPartition = new ESeparator({ style: style, zlevel: this.zlevel, + z: this.z + 3, traingle: traingle, point: { x: model.points[model.points.length - 1].x, diff --git a/src/jmapNew/shape/Signal/ESigPost.js b/src/jmapNew/shape/Signal/ESigPost.js index 45322b62e..5f23398c5 100644 --- a/src/jmapNew/shape/Signal/ESigPost.js +++ b/src/jmapNew/shape/Signal/ESigPost.js @@ -33,6 +33,7 @@ class ESigPost extends Group { this.hor = new Polyline({ zlevel: model.zlevel, z: model.z, + _val: '3', shape: { points: [ [model.x, model.y], diff --git a/src/jmapNew/shape/Signal/index.js b/src/jmapNew/shape/Signal/index.js index 9fc0c362f..132a59302 100644 --- a/src/jmapNew/shape/Signal/index.js +++ b/src/jmapNew/shape/Signal/index.js @@ -67,6 +67,7 @@ class Signal extends Group { this.ciConfirm = new Text({ zlevel: this.zlevel, z: this.z, + _val: '3', silent: false, _subType: 'enabled', style: { @@ -110,6 +111,7 @@ class Signal extends Group { this.tText = new Text({ zlevel: this.zlevel, z: this.z, + _val: '3', style: { x: endPoint.x, y: endPoint.y, diff --git a/src/jmapNew/shape/Station/ESingleControl.js b/src/jmapNew/shape/Station/ESingleControl.js index f1e0607e3..ad2956851 100644 --- a/src/jmapNew/shape/Station/ESingleControl.js +++ b/src/jmapNew/shape/Station/ESingleControl.js @@ -53,7 +53,7 @@ export default class ESingleControl extends Group { y: model.point.y + model.style.Station.StationControl.lamp.radiusR + model.style.Station.StationControl.text.distance, fontWeight: model.style.Station.StationControl.text.fontWeight, fontSize: model.style.Station.StationControl.text.fontSize, - fontFamily: model.style.Station.StationControl.text.fontFormat, + fontFamily: model.style.fontFamily, text: model.context, textFill: model.style.Station.StationControl.text.fontColor, textAlign: model.style.Station.StationControl.text.textAlign, diff --git a/src/jmapNew/shape/StationStand/EDetain.js b/src/jmapNew/shape/StationStand/EDetain.js index 727941e07..a70e31784 100644 --- a/src/jmapNew/shape/StationStand/EDetain.js +++ b/src/jmapNew/shape/StationStand/EDetain.js @@ -23,7 +23,8 @@ class EDetain extends Group { x: model.x, y: model.y, text: style.StationStand.detainCar.text, - fontSize: `${style.StationStand.detainCar.fontSize} px ${style.fontFamily}`, + fontSize: `${style.StationStand.detainCar.fontSize}px`, + fontFamily: style.fontFamily, textFill: style.StationStand.detainCar.centerTrainColor, textStroke: style.backgroundColor, textAlign: style.textStyle.textAlign, diff --git a/src/jmapNew/shape/Train/TrainBody.js b/src/jmapNew/shape/Train/TrainBody.js index 4eb4519a4..665d41f82 100644 --- a/src/jmapNew/shape/Train/TrainBody.js +++ b/src/jmapNew/shape/Train/TrainBody.js @@ -99,7 +99,7 @@ export default class TrainBody extends Group { textAlign: 'middle', textVerticalAlign: 'top' }) : ''; - const serviceNumber = style.Train.trainServer.serviceNumberPrefix + (model.serviceNumber || style.Train.trainServer.defaultServiceNumber) + '';// 服务号(表号) + const serviceNumber = style.Train.trainServer.serviceNumberPrefix + (model.serviceNumber || model.model.specialServiceNumber || style.Train.trainServer.defaultServiceNumber) + '';// 服务号(表号) const tripNumber = style.Train.trainTarget.tripNumberPrefix + (style.Train.trainTarget.defaultDirectionCode ? (model.directionCode || style.Train.trainTarget.defaultDirectionCode) + (model.tripNumber || style.Train.trainTarget.defaultTripNumber) : model.tripNumber || style.Train.trainTarget.defaultTripNumber) + ''; // 车次号 @@ -320,9 +320,9 @@ export default class TrainBody extends Group { if (type === 'PLAN') { this.style.Train.trainTarget.planTypeColor && this.textTrainTarget && this.textTrainTarget.setStyle({textFill: this.style.Train.trainTarget.planTypeColor}); } else if (type === 'MANUAL') { - this.style.Train.trainTarget.manualTypeColor && this.textTrainTarget && this.textTrainTarget.setStyle({textFill: this.style.Train.trainTarget.manualTypeColor}); + this.style.Train.trainTargetNumber.manualTypeColor && this.textTrainTargetNumber && this.textTrainTargetNumber.setStyle({textFill: this.style.Train.trainTargetNumber.manualTypeColor}); } else if (type === 'HEAD') { - this.style.Train.trainTarget.headTypeColor && this.textTrainTarget && this.textTrainTarget.setStyle({textFill: this.style.Train.trainTarget.headTypeColor}); + this.style.Train.trainTargetNumber.headTypeColor && this.textTrainTargetNumber && this.textTrainTargetNumber.setStyle({textFill: this.style.Train.trainTargetNumber.headTypeColor}); } } setSoonerOrLater(dt) { diff --git a/src/jmapNew/shape/Train/index.js b/src/jmapNew/shape/Train/index.js index 092991e40..07ba2b4be 100644 --- a/src/jmapNew/shape/Train/index.js +++ b/src/jmapNew/shape/Train/index.js @@ -29,12 +29,11 @@ export default class Train extends Group { style.Train.trainBody.specialTrainType.some((item) => { if (model.type === item.type) { this.nameFormat = item.nameFormat; - model.serviceNumber = item.serviceNumber ? item.serviceNumber : model.serviceNumber; + model.specialServiceNumber = item.serviceNumber ? item.serviceNumber : model.serviceNumber; return true; } }); } - this.create(); this.setState(model, this); this.initShowStation(model); @@ -408,8 +407,8 @@ export default class Train extends Group { this.setHoldStatus(model.hold); this.setJumpStatus(model.jump); this.setSoonerOrLater(model.dt); - this.setPlanRoutingTypeColor(model.planRoutingType); this.setTrainTypeColor(model.type); + this.setPlanRoutingTypeColor(model.planRoutingType); const style = this.style; if (style.Section.trainPosition.display) { this.updateSection(object); diff --git a/src/jmapNew/shape/ZcControl/EMouse.js b/src/jmapNew/shape/ZcControl/EMouse.js index 0855053f9..fd8eb1fe8 100644 --- a/src/jmapNew/shape/ZcControl/EMouse.js +++ b/src/jmapNew/shape/ZcControl/EMouse.js @@ -2,53 +2,53 @@ import Group from 'zrender/src/container/Group'; import Text from 'zrender/src/graphic/Text'; export default class EMouse extends Group { - constructor(device) { - super(); - this.device = device; - this.create(); - } - create() { - this.text = new Text({ - _subType: 'Text', - zlevel: this.device.zlevel, - z: this.device.z+1, - position: [0, 0], - style: { - x: this.device.model.position.x, - y: this.device.model.position.y + this.device.style.ZcControl.lamp.radiusR + this.device.style.ZcControl.text.distance-30, - fontWeight: this.device.style.ZcControl.mouseOverStyle.fontWeight, - fontSize: this.device.style.ZcControl.mouseOverStyle.fontSize, - fontFamily: this.device.style.ZcControl.mouseOverStyle.fontFormat, - text: this.device.model.name, - textFill: this.device.style.ZcControl.mouseOverStyle.fontColor, - textAlign: this.device.style.ZcControl.mouseOverStyle.textAlign, - textVerticalAlign: this.device.style.ZcControl.mouseOverStyle.textVerticalAlign - } - }); - this.add(this.text); - this.text.hide(); - } - mouseover(e) { - if (e.target && e.target._subType == 'Text') { - this.text.show(); - } else { - this.device.control.setControlColor(this.device.style.ZcControl.mouseOverStyle.arcColor); - this.device.control.setTextColor(this.device.style.ZcControl.mouseOverStyle.textColor); - this.device.control.setTextBorder(true); - this.device.control.setArcBorder(true); - } - } + constructor(device) { + super(); + this.device = device; + this.create(); + } + create() { + this.text = new Text({ + _subType: 'Text', + zlevel: this.device.zlevel, + z: this.device.z + 1, + position: [0, 0], + style: { + x: this.device.model.position.x, + y: this.device.model.position.y + this.device.style.ZcControl.lamp.radiusR + this.device.style.ZcControl.text.distance - 30, + fontWeight: this.device.style.ZcControl.mouseOverStyle.fontWeight, + fontSize: this.device.style.ZcControl.mouseOverStyle.fontSize, + fontFamily: this.device.style.fontFamily, + text: this.device.model.name, + textFill: this.device.style.ZcControl.mouseOverStyle.fontColor, + textAlign: this.device.style.ZcControl.mouseOverStyle.textAlign, + textVerticalAlign: this.device.style.ZcControl.mouseOverStyle.textVerticalAlign + } + }); + this.add(this.text); + this.text.hide(); + } + mouseover(e) { + if (e.target && e.target._subType == 'Text') { + this.text.show(); + } else { + this.device.control.setControlColor(this.device.style.ZcControl.mouseOverStyle.arcColor); + this.device.control.setTextColor(this.device.style.ZcControl.mouseOverStyle.textColor); + this.device.control.setTextBorder(true); + this.device.control.setArcBorder(true); + } + } - mouseout(e) { - if (!this.device.model.down) { - if (e.target && e.target._subType == 'Text') { - this.text.hide(); - } else { - this.device.control.setControlColor(this.device.style.ZcControl.lamp.controlColor); - this.device.control.setTextColor('#FFFFFF'); - this.device.control.setTextBorder(false); - this.device.control.setArcBorder(false); - } - } - } + mouseout(e) { + if (!this.device.model.down) { + if (e.target && e.target._subType == 'Text') { + this.text.hide(); + } else { + this.device.control.setControlColor(this.device.style.ZcControl.lamp.controlColor); + this.device.control.setTextColor('#FFFFFF'); + this.device.control.setTextBorder(false); + this.device.control.setArcBorder(false); + } + } + } } diff --git a/src/jmapNew/shape/factory.js b/src/jmapNew/shape/factory.js index c943149dd..4741ab55a 100644 --- a/src/jmapNew/shape/factory.js +++ b/src/jmapNew/shape/factory.js @@ -17,7 +17,7 @@ import Line from './Line/index.js'; import Text2 from './Text/index.js'; import AxleReset from './AxleReset/index'; import GuideLock from './GuideLock/index'; -import AutoTurnBack from './Automactic/index.js'; +import AutoTurnBack from './AutoTurnBack/index.js'; import OutFrame from './OutFrame/index.js'; import CheckBox from './checkBox/checkBox.js'; import AutomaticRoute from './AutomacticRoute/index.js'; diff --git a/src/jmapNew/theme/xian_01/menus/dialog/trainControl.vue b/src/jmapNew/theme/xian_01/menus/dialog/trainControl.vue index 87cd70709..3e6bef581 100644 --- a/src/jmapNew/theme/xian_01/menus/dialog/trainControl.vue +++ b/src/jmapNew/theme/xian_01/menus/dialog/trainControl.vue @@ -21,7 +21,7 @@ {{ $t('menu.planTrain') }} @@ -29,15 +29,15 @@ {{ $t('menu.artificialTrain') }} - - {{ $t('menu.serviceNumber') }} + + {{ $t('menu.serviceNumber') + ':' }} - + - - - - - - - - - - - - - - - + + + + + @@ -82,11 +83,11 @@ + diff --git a/src/jmapNew/theme/xian_01/menus/index.vue b/src/jmapNew/theme/xian_01/menus/index.vue index d92cd369d..80e174563 100644 --- a/src/jmapNew/theme/xian_01/menus/index.vue +++ b/src/jmapNew/theme/xian_01/menus/index.vue @@ -96,6 +96,21 @@ export default { overflow: hidden !important; } + .xian-01__systerm.pop-menu{ + padding: 0; + padding-left: 20px; + } + .xian-01__systerm.pop-menu .dsp-block { + display: block; + text-align: left; + width: 100%; + border-radius: unset; + border: 1px solid transparent; + color: #000; + padding: 6px 6px; + border-left: 1px solid #bdbcbc; + } + .xian-01__systerm .el-dialog { background: rgba(100, 100, 100, 0.3); border: 2px solid rgb(144, 144, 144, 0.8); diff --git a/src/jmapNew/theme/xian_01/menus/menuSection.vue b/src/jmapNew/theme/xian_01/menus/menuSection.vue index 1589964cd..dedd28ab0 100644 --- a/src/jmapNew/theme/xian_01/menus/menuSection.vue +++ b/src/jmapNew/theme/xian_01/menus/menuSection.vue @@ -1,12 +1,10 @@ @@ -21,9 +19,7 @@ import { mapGetters } from 'vuex'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; import MenuContextHandler from '@/scripts/cmdPlugin/MenuContextHandler'; import { menuOperate, commitOperate } from './utils/menuOperate'; -import SetFault from '@/views/newMap/mapsystemNew/plugin/setFault'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; -import TrainAddPlan from './dialog/trainAddPlan'; export default { name: 'SectionMenu', @@ -32,9 +28,7 @@ export default { SectionControl, SectionCmdControl, SpeedCmdControl, - NoticeInfo, - SetFault, - TrainAddPlan + NoticeInfo }, props: { selected: { @@ -199,7 +193,7 @@ export default { this.$store.dispatch('training/nextNew', step).then(({ valid }) => { if (valid) { this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); - this.$refs.trainAddPlan.doShow(step, this.selected); + this.$store.dispatch('training/setCommonMenuStep', step); } }); }, @@ -207,7 +201,7 @@ export default { setStoppage() { commitOperate(menuOperate.Common.setFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.setFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.setFault); } }); }, @@ -215,7 +209,7 @@ export default { cancelStoppage() { commitOperate(menuOperate.Common.cancelFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.cancelFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.cancelFault); } }); }, diff --git a/src/jmapNew/theme/xian_01/menus/menuSignal.vue b/src/jmapNew/theme/xian_01/menus/menuSignal.vue index 197a15e81..b9cf196a7 100644 --- a/src/jmapNew/theme/xian_01/menus/menuSignal.vue +++ b/src/jmapNew/theme/xian_01/menus/menuSignal.vue @@ -1,6 +1,6 @@ @@ -26,7 +25,6 @@ import MenuContextHandler from '@/scripts/cmdPlugin/MenuContextHandler'; import { mapGetters } from 'vuex'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; import { menuOperate, commitOperate } from './utils/menuOperate'; -import SetFault from '@/views/newMap/mapsystemNew/plugin/setFault'; export default { name: 'SignalMenu', @@ -38,8 +36,7 @@ export default { RouteCmdControl, RouteHandControl, RouteDetail, - NoticeInfo, - SetFault + NoticeInfo }, props: { selected: { @@ -231,7 +228,7 @@ export default { setStoppage() { commitOperate(menuOperate.Common.setFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.setFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.setFault); } }); }, @@ -239,7 +236,7 @@ export default { cancelStoppage() { commitOperate(menuOperate.Common.cancelFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.cancelFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.cancelFault); } }); }, diff --git a/src/jmapNew/theme/xian_01/menus/menuStation.vue b/src/jmapNew/theme/xian_01/menus/menuStation.vue index dceee489c..ae11724e8 100644 --- a/src/jmapNew/theme/xian_01/menus/menuStation.vue +++ b/src/jmapNew/theme/xian_01/menus/menuStation.vue @@ -1,6 +1,6 @@  @@ -24,8 +22,6 @@ import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; // import MenuContextHandler from '@/scripts/cmdPlugin/MenuContextHandler'; import {menuOperate, commitOperate} from './utils/menuOperate'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; -import SetFault from '@/views/newMap/mapsystemNew/plugin/setFault'; -import TrainAddPlan from './dialog/trainAddPlan'; export default { name: 'SectionMenu', @@ -36,8 +32,6 @@ export default { SpeedLimitControl, AlxeEffective, NoticeInfo, - SetFault, - TrainAddPlan }, props: { selected: { @@ -205,7 +199,8 @@ export default { this.$store.dispatch('training/nextNew', step).then(({ valid }) => { if (valid) { this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); - this.$refs.trainAddPlan.doShow(step, this.selected); + // this.$refs.trainAddPlan.doShow(step, this.selected); + this.$store.dispatch('training/setCommonMenuStep', step); } }); }, @@ -213,7 +208,7 @@ export default { setStoppage() { commitOperate(menuOperate.Common.setFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.setFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.setFault); } }); }, @@ -221,7 +216,7 @@ export default { cancelStoppage() { commitOperate(menuOperate.Common.cancelFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.cancelFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.cancelFault); } }); }, diff --git a/src/jmapNew/theme/xian_02/menus/menuSignal.vue b/src/jmapNew/theme/xian_02/menus/menuSignal.vue index 7ed66994a..d769bb877 100644 --- a/src/jmapNew/theme/xian_02/menus/menuSignal.vue +++ b/src/jmapNew/theme/xian_02/menus/menuSignal.vue @@ -9,7 +9,6 @@ - @@ -29,7 +28,6 @@ import CMD from '@/scripts/cmdPlugin/CommandEnum'; import { mapGetters } from 'vuex'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; -import SetFault from '@/views/newMap/mapsystemNew/plugin/setFault'; export default { name: 'SignalMenu', @@ -42,8 +40,7 @@ export default { RouteHandControl, RouteDetail, RouterCommand, - NoticeInfo, - SetFault + NoticeInfo }, props: { selected: { @@ -268,7 +265,7 @@ export default { setStoppage() { commitOperate(menuOperate.Common.setFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.setFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.setFault); } }); }, @@ -276,7 +273,7 @@ export default { cancelStoppage() { commitOperate(menuOperate.Common.cancelFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.cancelFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.cancelFault); } }); }, diff --git a/src/jmapNew/theme/xian_02/menus/menuSwitch.vue b/src/jmapNew/theme/xian_02/menus/menuSwitch.vue index 62efcc86f..f785dda55 100644 --- a/src/jmapNew/theme/xian_02/menus/menuSwitch.vue +++ b/src/jmapNew/theme/xian_02/menus/menuSwitch.vue @@ -6,7 +6,6 @@ - @@ -24,7 +23,6 @@ import CMD from '@/scripts/cmdPlugin/CommandEnum'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; import {menuOperate, commitOperate} from './utils/menuOperate'; -import SetFault from '@/views/newMap/mapsystemNew/plugin/setFault'; export default { name: 'SwitchMenu', @@ -34,8 +32,7 @@ export default { SwitchUnLock, SpeedLimitControl, AlxeEffective, - NoticeInfo, - SetFault + NoticeInfo }, props: { selected: { @@ -245,7 +242,7 @@ export default { setStoppage() { commitOperate(menuOperate.Common.setFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.setFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.setFault); } }); }, @@ -253,7 +250,7 @@ export default { cancelStoppage() { commitOperate(menuOperate.Common.cancelFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.cancelFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.cancelFault); } }); }, diff --git a/src/jmapNew/theme/xian_02/menus/menuTrain.vue b/src/jmapNew/theme/xian_02/menus/menuTrain.vue index e01bbf2ec..91736ebf8 100644 --- a/src/jmapNew/theme/xian_02/menus/menuTrain.vue +++ b/src/jmapNew/theme/xian_02/menus/menuTrain.vue @@ -1,18 +1,15 @@  @@ -24,10 +21,10 @@ import TrainDelete from './dialog/trainDelete'; import TrainDefine from './dialog/trainDefine'; import TrainMove from './dialog/trainMove'; import TrainSetPlan from './dialog/trainSetPlan'; -import TrainAddPlan from './dialog/trainAddPlan'; import TrainSetHead from './dialog/trainSetHead'; import TrainSetWork from './dialog/trainSetWork'; import trainSetWorkATP from './dialog/trainSetWorkATP'; +import TrainDestination from './dialog/trainDestination'; import { mapGetters } from 'vuex'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; @@ -44,10 +41,10 @@ export default { TrainDefine, TrainMove, TrainSetPlan, - TrainAddPlan, TrainSetHead, TrainSetWork, - trainSetWorkATP + trainSetWorkATP, + TrainDestination }, props: { selected: { @@ -64,75 +61,6 @@ export default { menu: [], menuNormal: { Local: [ - // { - // label: '设置车组号', - // handler: this.addTrainId, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '删除车组号', - // handler: this.delTrainId, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '移动车组号', - // handler: this.moveTrainId, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '新建计划车', - // handler: this.addPlanTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // type: 'separator' - // }, - // { - // label: '设置计划车', - // handler: this.setPlanTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '设置头码车', - // handler: this.setHeadTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '设置人工车', - // handler: this.setWorkTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '设乘务组号', - // handler: this.undeveloped, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // type: 'separator' - // }, - // { - // label: '标记ATP切除', - // handler: this.setTrainATPdel, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '标记ATP恢复', - // handler: this.setTrainATPRec, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // type: 'separator' - // }, - // { - // label: '旅行冲突列车', - // handler: this.undeveloped, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '列车信息', - // handler: this.undeveloped, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // } ], Center: [ { @@ -140,41 +68,51 @@ export default { children: [ { label: '目的地ID', - handler: this.atsAutoControlALL + // handler: this.updateDestination, + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '删除ID', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '更改追踪号', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '交换追踪号', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '运行等级', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '列车模式', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '惰性模式', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '旁路模式', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE } ] }, { label: '列车明细', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '请求', @@ -184,37 +122,45 @@ export default { children:[ { label: '扣车', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '发车 ', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE } ] }, { label: '停车/放行', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '就绪状态', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '测试', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '救援列车', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '开车门', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '关车门', - handler: this.atsAutoControlALL + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE } ] }, @@ -223,19 +169,23 @@ export default { children: [ { label: '创建设备标签', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '查看设备标签', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '更改设备标签', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '删除设备标签', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE } ] }, @@ -244,87 +194,21 @@ export default { children: [ { label: '完整性报警确认', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE } ] }, { label: '更新列车计划', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE }, { label: '帮助', - handler: this.undeveloped + handler: this.undeveloped, + cmdType: CMD.TrainWindow.CMD_TRAIN_UPDATE_TYPE } - // { - // label: '设置车组号', - // handler: this.addTrainId, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '删除车组号', - // handler: this.delTrainId, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '移动车组号', - // handler: this.moveTrainId, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '新建计划车', - // handler: this.addPlanTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // type: 'separator' - // }, - // { - // label: '设置计划车', - // handler: this.setPlanTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '设置头码车', - // handler: this.setHeadTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '设置人工车', - // handler: this.setWorkTrain, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '设乘务组号', - // handler: this.undeveloped, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // type: 'separator' - // }, - // { - // label: '标记ATP切除', - // handler: this.setTrainATPdel, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '标记ATP恢复', - // handler: this.setTrainATPRec, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // type: 'separator' - // }, - // { - // label: '旅行冲突列车', - // handler: this.undeveloped, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // }, - // { - // label: '列车信息', - // handler: this.undeveloped, - // cmdType: CMD.TrainWindow.CMD_Train_Init_Plan - // } ] }, menuForce: [ @@ -375,14 +259,16 @@ export default { }, initMenu() { // 编辑模式菜单列表 - this.menu = MenuContextHandler.covert(this.menuNormal); + if (this.$store.state.training.prdType === '02') { + this.menu = this.menuNormal.Center; + } // 故障模式菜单列表 if (this.operatemode === OperateMode.FAULT) { this.menu = this.menuForce; } }, doShow(point) { - this.topTip = `道岔: ${this.selected.name}`; + this.topTip = `车辆: ${this.selected.serviceNumber}`; this.clickEvent(); this.initMenu(); @@ -604,6 +490,23 @@ export default { this.$refs.trainSetWorkATP.doShow(operate, this.selected); } }); + }, + updateDestination() { + const operate = { + start: true, + code: this.selected.code, + operation: OperationEvent.Train.destinationTrainId.menu.operation, + param: { + trainCode: this.selected.code + } + }; + this.$store.dispatch('training/nextNew', operate).then(({ valid }) =>{ + if (valid) { + this.$store.dispatch('menuOperation/handleBreakFlag', {break: true}); + this.$refs.trainDestination.doShow(operate, this.selected); + this.doClose(); + } + }); } } }; diff --git a/src/jmapNew/theme/xian_02/menus/popStationStand.vue b/src/jmapNew/theme/xian_02/menus/popStationStand.vue index ab4b09b25..e89137065 100644 --- a/src/jmapNew/theme/xian_02/menus/popStationStand.vue +++ b/src/jmapNew/theme/xian_02/menus/popStationStand.vue @@ -5,7 +5,6 @@ - @@ -19,7 +18,6 @@ import { mapGetters } from 'vuex'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; import CMD from '@/scripts/cmdPlugin/CommandEnum'; -import SetFault from '@/views/newMap/mapsystemNew/plugin/setFault'; import {menuOperate, commitOperate} from './utils/menuOperate'; export default { @@ -29,8 +27,7 @@ export default { NoticeInfo, UpdateStandPlan, WarningConfirm, - StopProfile, - SetFault + StopProfile }, props: { selected: { @@ -282,7 +279,7 @@ export default { setStoppage() { commitOperate(menuOperate.Common.setFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.setFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.setFault); } }); }, @@ -290,7 +287,7 @@ export default { cancelStoppage() { commitOperate(menuOperate.Common.cancelFault, { code: this.selected.code }, 0).then(({valid, operate})=>{ if (valid) { - this.$refs.setFault.doShow(menuOperate.Common.cancelFault, this.selected); + this.$store.dispatch('training/setCommonMenuStep', menuOperate.Common.cancelFault); } }); }, diff --git a/src/jmapNew/theme/xian_02/menus/utils/menuOperate.js b/src/jmapNew/theme/xian_02/menus/utils/menuOperate.js index 929324f24..ce474fd46 100644 --- a/src/jmapNew/theme/xian_02/menus/utils/menuOperate.js +++ b/src/jmapNew/theme/xian_02/menus/utils/menuOperate.js @@ -260,11 +260,11 @@ export const menuOperate = { }, Common: { setFault: { - operation: OperationEvent.Section.stoppage.menu.operation, + operation: OperationEvent.MixinCommand.stoppage.menu.operation, cmdType: CMD.Fault.CMD_SET_FAULT }, cancelFault: { - operation: OperationEvent.Section.cancelStoppage.menu.operation, + operation: OperationEvent.MixinCommand.cancelStoppage.menu.operation, cmdType: CMD.Fault.CMD_CANCEL_FAULT } } diff --git a/src/main.js b/src/main.js index bf8f2874f..f5a04a56c 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,7 @@ import 'normalize.css/normalize.css'; // A modern alternative to CSS resets import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import '@/styles/index.scss'; // global css +import 'quill/dist/quill.snow.css'; import LangStorage from '@/utils/lang'; import App from './App'; diff --git a/src/permission.js b/src/permission.js index 3f32cd3f1..96d5874f6 100644 --- a/src/permission.js +++ b/src/permission.js @@ -19,7 +19,7 @@ function hasPermission(roles, permissionRoles) { const whiteList = ['/login', '/design/login', '/gzzbxy/relay']; // 不重定向白名单 -const designPageRegex = [/^\/design/, /^\/scriptDisplay/, /^\/publish/, /^\/orderauthor/, /^\/system/, /^\/iscs/, /^\/display\/record/, /^\/display\/manage/, /^\/apply/, /^\/plan/, /^\/display\/plan/, /^\/displayNew\/record/, /^\/displayNew\/manage/, /^\/displayNew\/plan/]; +const designPageRegex = [/^\/design/, /^\/scriptDisplay/, /^\/publish/, /^\/orderauthor/, /^\/system/, /^\/iscs/, /^\/display\/record/, /^\/display\/manage/, /^\/apply/, /^\/plan/, /^\/display\/plan/, /^\/displayNew\/record/, /^\/displayNew\/manage/, /^\/displayNew\/plan/, /^\/practiceDisplayNew/]; function isDesignPage(toRoutePath) { return designPageRegex.some(item => item.test(toRoutePath) ); @@ -47,6 +47,10 @@ function getRouteInfo(to) { } else { const whitePage = PermissionParam[current_session] ? PermissionParam[current_session].whitePage : ''; loginPath = whitePage || loginPage; + if (current_session && current_session.startsWith('jsxt') || current_session && current_session.startsWith('refereeJsxt')) { + const raceId = getSessionStorage('raceId'); // 登陆时候保存 竞赛id + loginPath = `${loginPath}?raceId=${raceId}`; + } if (current_session && current_session.startsWith('design')) { removeToken(); } diff --git a/src/router/index_Common.js b/src/router/index_Common.js index 660fa8839..d73e884a4 100644 --- a/src/router/index_Common.js +++ b/src/router/index_Common.js @@ -64,6 +64,7 @@ const LessonDetail = () => import('@/views/lesson/details'); const ScriptmanageHome = () => import('@/views/scriptManage/home'); const ScriptDisplay = () => import('@/views/scriptManage/display/index'); const ScriptDisplayNew = () => import('@/views/scriptManage/display/indexNew'); +const PracticeDisplayNew = () => import('@/views/competitionManage/practiceList/display/index'); const IbpHome = () => import('@/views/ibp/home'); const IbpDraw = () => import('@/views/ibp/ibpDraw/index'); @@ -122,7 +123,12 @@ const RunPlanApproval = () => import('@/views/approval/runPlan/index'); const DeviceManage = () => import('@/views/system/deviceManage/index'); const MapSort = () => import('@/views/publish/publishMap/mapSort'); const StudentManage = () => import('@/views/studentManage'); -const RaceManage = () => import('@/views/competitionManage/index'); +const RaceManage = () => import('@/views/competitionManage/competition/index'); +const BankManage = () => import('@/views/competitionManage/bankList/index'); +const PracticeManage = () => import('@/views/competitionManage/practiceList/index'); +const QuestionCreatePage = () => import('@/views/competitionManage/bankList/question-create-page'); +const QuestionUpdatePage = () => import('@/views/competitionManage/bankList/question-update-page'); +const GeneratePaper = () => import('@/views/competitionManage/generatePaper'); const CompetitionDetail = () => import('@/views/jsxt/competition/examDetail'); const CompetitionManage = () => import('@/views/jsxt/competition/index'); @@ -277,6 +283,11 @@ export const publicAsyncRoute = [ component: ScriptDisplayNew, hidden: true }, + { // 实操试题编辑 战场图 + path: '/practiceDisplayNew/:mode', + component: PracticeDisplayNew, + hidden: true + }, { path: '/displayBigScreen/:mapId', component: BigScreen, @@ -914,11 +925,10 @@ export const asyncRouter = [ ] }, { - path: '/design/race', - redirect: '/design/race/manage', + path: '/design/race', // 竞赛管理 component: Layout, meta: { - i18n: 'route.raceManage', + i18n: 'router.raceManage', roles: [admin] }, children: [ @@ -929,6 +939,37 @@ export const asyncRouter = [ i18n: 'router.raceManage', icon: 'design' } + }, + { + path: 'bank', + component: BankManage, + meta: { + i18n: 'router.bankManage', + icon: 'design' + } + }, + { + path: 'practice', + component: PracticeManage, + meta: { + i18n: 'router.practiceManage', + icon: 'design' + } + }, + { + path: 'questionCreate', + component: QuestionCreatePage, + hidden: true + }, + { + path: 'questionUpdate/:questionId', + component: QuestionUpdatePage, + hidden: true + }, + { + path: 'generate', + component: GeneratePaper, + hidden: true } ] } diff --git a/src/scripts/ConstConfig.js b/src/scripts/ConstConfig.js index 88f8ca94d..a462dc7b9 100644 --- a/src/scripts/ConstConfig.js +++ b/src/scripts/ConstConfig.js @@ -147,6 +147,10 @@ export default { { label: '控制模式', value: 'ControlConvertMenu' }, { label: '车次窗', value: 'TrainWindow' } ], + QuestionTypeList: [ + { label: '选择题', value: 'select' }, + { label: '判断题', value: 'judge' } + ], // 新版的产品类型枚举 prdType:[ { enlabel: 'ATS local workstation', label: 'ATS现地工作站', value: '01'}, diff --git a/src/scripts/ConstDic.js b/src/scripts/ConstDic.js index 4b05c1047..0c2feb35b 100644 --- a/src/scripts/ConstDic.js +++ b/src/scripts/ConstDic.js @@ -2211,12 +2211,18 @@ export const IbpShowCondition = { Show_Open_Screen_Door: {statusKey: 'screenDoorOpenStatus', statusValue:['02'], defaultStatus: 'close'}, Show_Close_Screen_Door: {statusKey: 'screenDoorOpenStatus', statusValue: ['01'], defaultStatus: 'open'} }; - +/** 列车类型 */ +export const TrainType = { + PLAN: '计划车', + HEAD: '头码车', + MANUAL: '人工车' +}; export const UrlConfig = { display: '/display', displayNew: '/displayNew', scriptDisplay: '/scriptDisplay', scriptDisplayNew:'/scriptDisplayNew', + practiceDisplayNew:'/practiceDisplayNew', examRuleDraft: '/examRule/draft', examRuleManage: '/examRule/manage', lesson: { @@ -2307,5 +2313,9 @@ export const UrlConfig = { draft: '/trainingPlatform/draft', pay: '/trainingPlatform/pay', runPlan: '/trainingPlatform/runPlan/manage' + }, + bank: { + questionCreate: '/design/race/questionCreate', + questionUpdate: '/design/race/questionUpdate' } }; diff --git a/src/scripts/GlobalPlugin.js b/src/scripts/GlobalPlugin.js index 7e0ae1c63..af9b09c5d 100644 --- a/src/scripts/GlobalPlugin.js +++ b/src/scripts/GlobalPlugin.js @@ -5,11 +5,13 @@ import TurnbackBar from '@/components/TurnbackBar'; import ConstConfig from '@/scripts/ConstConfig'; import Dictionary from '@/scripts/DictionaryData'; import Theme from '@/jmapNew/theme/factory'; +import QuillEditor from '@/components/QuillEditor/index'; // 全局组件 Vue.component('DataForm', DataForm); Vue.component('QueryListPage', QueryListPage); Vue.component('TurnbackBar', TurnbackBar); +Vue.component('QuillEditor', QuillEditor); Vue.prototype.$ConstSelect = (function() { ConstConfig.ConstSelect.translate = function(value, codeName) { @@ -116,7 +118,7 @@ Vue.prototype.$copyClone = function(obj1, obj2 = {}) { }; Vue.prototype.$escapeHTML = function (context) { - const pattern = /<\w*>(.*)<\/\w*>/; + const pattern = /<\p>(.*)<\/\p>/; if (pattern.test(context)) { context = pattern.exec(context)[1]; diff --git a/src/scripts/cmdPlugin/CommandEnum.js b/src/scripts/cmdPlugin/CommandEnum.js index dc911ae3b..68ff8bb54 100644 --- a/src/scripts/cmdPlugin/CommandEnum.js +++ b/src/scripts/cmdPlugin/CommandEnum.js @@ -78,6 +78,8 @@ export default { CMD_SIGNAL_SET_ROUTE: {value:'Signal_Set_Route', label: '排列进路'}, /** 取消进路 */ CMD_SIGNAL_CANCEL_ROUTE: {value:'Signal_Cancel_Route', label: '取消进路'}, + /** 强制取消进路 */ + CMD_SIGNAL_FORCE_CANCEL_ROUTE: {value: 'Signal_Force_Cancel_Route', label: '强制取消进路'}, /** 人解进路 */ CMD_SIGNAL_HUMAN_RELEASE_ROUTE: {value:'Signal_Human_Release_Route', label: '人解进路'}, /** 信号关灯 */ diff --git a/src/scripts/cmdPlugin/OperationHandler.js b/src/scripts/cmdPlugin/OperationHandler.js index 69bedb83b..1cb6c3ca6 100644 --- a/src/scripts/cmdPlugin/OperationHandler.js +++ b/src/scripts/cmdPlugin/OperationHandler.js @@ -2079,6 +2079,18 @@ export const OperationEvent = { operation: '2994', domId: '_Tips-TotalCancel-Button{TOP}' } + }, + // 取消故障 + cancelStoppage: { + menu: { + operation: '2995' + } + }, + // 道岔故障 + stoppage: { + menu: { + operation: '2996' + } } } diff --git a/src/store/modules/map.js b/src/store/modules/map.js index 8de77f1b7..3205a7be4 100644 --- a/src/store/modules/map.js +++ b/src/store/modules/map.js @@ -181,6 +181,7 @@ const map = { state: { routeData: {}, // 进路数据 routeList: [], // 进路list + routeStartSignalData: {}, // 进路始端信号机数据 autoReentryData: {}, // 自动折返数据 autoReentryList: [], // 自动折返list signalApproachSectionData: {}, // 信号机接近区段数据 @@ -232,6 +233,13 @@ const map = { routeData: (state) => { return state.routeData; }, + routeStartSignalData: (state) => { + if (state.map) { + return state.map.routeStartSignalData || {}; + } else { + return {}; + } + }, overlapData: (state) => { return state.overlapData; }, @@ -719,6 +727,11 @@ const map = { setRouteData: (state, routeDataList) => { routeDataList.forEach(data => { state.routeData[data.code] = data; + if (state.routeStartSignalData[data.startSignalCode] && state.routeStartSignalData[data.startSignalCode].length) { + state.routeStartSignalData[data.startSignalCode].push(data); + } else { + state.routeStartSignalData[data.startSignalCode] = [data]; + } }); state.map.automaticRouteButtonList && state.map.automaticRouteButtonList.forEach(item => { state.routeData[item.automaticRouteCode].automaticRouteCode = item.code; diff --git a/src/store/modules/socket.js b/src/store/modules/socket.js index 470488e82..e287a3194 100644 --- a/src/store/modules/socket.js +++ b/src/store/modules/socket.js @@ -163,7 +163,7 @@ function handleSimulationInfo(state, data) { targetOnline:data.targetMember ? data.targetMember.online : null, targetName:data.targetMember ? data.targetMember : 'All', targetRole:data.targetMember ? data.targetMember.role : null, - group: data.group, + all: data.all, date: +new Date(`${myDate1} ${chatTime}`) }; state.simulationText = params; diff --git a/src/store/modules/training.js b/src/store/modules/training.js index f335e1a1d..86b1e400f 100644 --- a/src/store/modules/training.js +++ b/src/store/modules/training.js @@ -35,7 +35,9 @@ const training = { prdType: '', // 产品类型 roles: '', // 角色权限类型 group: '', // 设置全局 group - centerStationCode:'' // 当前居中的集中站code + centerStationCode:'', // 当前居中的集中站code + commonMenuCount: 0, // 公共菜单计数 + commonMenuStep: null // 公共菜单步骤 }, getters: { @@ -92,6 +94,12 @@ const training = { }); return trainList; + }, + commonMenuCount: (state) => { + return state.commonMenuCount; + }, + commonMenuStep: (state) => { + return state.commonMenuStep; } }, @@ -209,6 +217,10 @@ const training = { }, setCenterStationCode:(state, centerStationCode) => { state.centerStationCode = centerStationCode; + }, + setCommonMenuStep: (state, commonMenuStep) => { + state.commonMenuStep = commonMenuStep; + state.commonMenuCount++; } }, @@ -611,6 +623,11 @@ const training = { /** 设置当前居中的集中站code */ setCenterStationCode:({ commit }, centerStationCode) => { commit('setCenterStationCode', centerStationCode); + }, + + /** 公共菜单操作 */ + setCommonMenuStep:({ commit }, commonMenuStep) => { + commit('setCommonMenuStep', commonMenuStep); } } }; diff --git a/src/utils/baseUrl.js b/src/utils/baseUrl.js index e9046878d..778caeb7b 100644 --- a/src/utils/baseUrl.js +++ b/src/utils/baseUrl.js @@ -7,10 +7,9 @@ export function getBaseUrl() { // BASE_API = 'http://192.168.3.6:9000'; // 旭强 // BASE_API = 'http://192.168.3.41:9000'; // 张赛 // BASE_API = 'http://192.168.3.82:9000'; // 杜康 - // BASE_API = 'http://192.168.3.41:9000'; // 张赛 // BASE_API = 'http://b29z135112.zicp.vip'; // BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康 - // BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛 + // BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛 } else { BASE_API = process.env.VUE_APP_BASE_API; } diff --git a/src/views/competitionManage/bankList/dialog-detail.vue b/src/views/competitionManage/bankList/dialog-detail.vue new file mode 100644 index 000000000..22ef3c89a --- /dev/null +++ b/src/views/competitionManage/bankList/dialog-detail.vue @@ -0,0 +1,78 @@ + + + + diff --git a/src/views/competitionManage/bankList/dialog-modify-rich.vue b/src/views/competitionManage/bankList/dialog-modify-rich.vue new file mode 100644 index 000000000..e41791c43 --- /dev/null +++ b/src/views/competitionManage/bankList/dialog-modify-rich.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/views/competitionManage/bankList/index.vue b/src/views/competitionManage/bankList/index.vue new file mode 100644 index 000000000..4bff2fff2 --- /dev/null +++ b/src/views/competitionManage/bankList/index.vue @@ -0,0 +1,158 @@ + + + diff --git a/src/views/competitionManage/bankList/item-answer.vue b/src/views/competitionManage/bankList/item-answer.vue new file mode 100644 index 000000000..9f44910e3 --- /dev/null +++ b/src/views/competitionManage/bankList/item-answer.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/competitionManage/bankList/item-options.vue b/src/views/competitionManage/bankList/item-options.vue new file mode 100644 index 000000000..24b4d6117 --- /dev/null +++ b/src/views/competitionManage/bankList/item-options.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/views/competitionManage/bankList/item-rich.vue b/src/views/competitionManage/bankList/item-rich.vue new file mode 100644 index 000000000..570bc17c0 --- /dev/null +++ b/src/views/competitionManage/bankList/item-rich.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/competitionManage/bankList/question-create-page.vue b/src/views/competitionManage/bankList/question-create-page.vue new file mode 100644 index 000000000..804953422 --- /dev/null +++ b/src/views/competitionManage/bankList/question-create-page.vue @@ -0,0 +1,110 @@ + + + + diff --git a/src/views/competitionManage/bankList/question-form.vue b/src/views/competitionManage/bankList/question-form.vue new file mode 100644 index 000000000..0d128f3b4 --- /dev/null +++ b/src/views/competitionManage/bankList/question-form.vue @@ -0,0 +1,129 @@ + + + diff --git a/src/views/competitionManage/bankList/question-update-page.vue b/src/views/competitionManage/bankList/question-update-page.vue new file mode 100644 index 000000000..0e2a41161 --- /dev/null +++ b/src/views/competitionManage/bankList/question-update-page.vue @@ -0,0 +1,109 @@ + + + + diff --git a/src/views/competitionManage/create.vue b/src/views/competitionManage/competition/create.vue similarity index 100% rename from src/views/competitionManage/create.vue rename to src/views/competitionManage/competition/create.vue diff --git a/src/views/competitionManage/index.vue b/src/views/competitionManage/competition/index.vue similarity index 95% rename from src/views/competitionManage/index.vue rename to src/views/competitionManage/competition/index.vue index 7b013f3eb..eb02095ac 100644 --- a/src/views/competitionManage/index.vue +++ b/src/views/competitionManage/competition/index.vue @@ -3,6 +3,7 @@ +
@@ -84,6 +85,10 @@ export default { { name: '裁判地址', handleClick: this.showRefereeUrl + }, + { + name: '生成试卷', + handleClick: this.generatePaper } ] } @@ -167,6 +172,9 @@ export default { document.execCommand('Copy'); // 执行浏览器复制命令 this.$message.success('报名路径已经复制到粘贴板'); }); + }, + generatePaper(index, row) { + this.$router.push({ path: `/design/race/generate`, query: {raceId:row.id} }); } } }; diff --git a/src/views/competitionManage/generatePaper.vue b/src/views/competitionManage/generatePaper.vue new file mode 100644 index 000000000..f8abc9cb3 --- /dev/null +++ b/src/views/competitionManage/generatePaper.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/src/views/competitionManage/operateQuestion.vue b/src/views/competitionManage/operateQuestion.vue new file mode 100644 index 000000000..9c1f017b9 --- /dev/null +++ b/src/views/competitionManage/operateQuestion.vue @@ -0,0 +1,219 @@ + + + + diff --git a/src/views/competitionManage/practiceList/create.vue b/src/views/competitionManage/practiceList/create.vue new file mode 100644 index 000000000..e612b68b7 --- /dev/null +++ b/src/views/competitionManage/practiceList/create.vue @@ -0,0 +1,127 @@ + + + + diff --git a/src/views/competitionManage/practiceList/display/index.vue b/src/views/competitionManage/practiceList/display/index.vue new file mode 100644 index 000000000..5a1a1ea0d --- /dev/null +++ b/src/views/competitionManage/practiceList/display/index.vue @@ -0,0 +1,59 @@ + + + + diff --git a/src/views/competitionManage/practiceList/display/practiceRecord.vue b/src/views/competitionManage/practiceList/display/practiceRecord.vue new file mode 100644 index 000000000..ca5fc3c8e --- /dev/null +++ b/src/views/competitionManage/practiceList/display/practiceRecord.vue @@ -0,0 +1,10 @@ + + diff --git a/src/views/competitionManage/practiceList/index.vue b/src/views/competitionManage/practiceList/index.vue new file mode 100644 index 000000000..44d86ad87 --- /dev/null +++ b/src/views/competitionManage/practiceList/index.vue @@ -0,0 +1,186 @@ + + diff --git a/src/views/competitionManage/setExamTime.vue b/src/views/competitionManage/setExamTime.vue new file mode 100644 index 000000000..1276e6079 --- /dev/null +++ b/src/views/competitionManage/setExamTime.vue @@ -0,0 +1,172 @@ + + + + diff --git a/src/views/competitionManage/theoryQuestion.vue b/src/views/competitionManage/theoryQuestion.vue new file mode 100644 index 000000000..4085c872e --- /dev/null +++ b/src/views/competitionManage/theoryQuestion.vue @@ -0,0 +1,244 @@ + + + + diff --git a/src/views/competitionManage/theoryReview.vue b/src/views/competitionManage/theoryReview.vue new file mode 100644 index 000000000..efc2d4be4 --- /dev/null +++ b/src/views/competitionManage/theoryReview.vue @@ -0,0 +1,214 @@ + + + + diff --git a/src/views/components/StatusIcon/statusIcon.vue b/src/views/components/StatusIcon/statusIcon.vue index a61e2e20b..0dd3a0901 100644 --- a/src/views/components/StatusIcon/statusIcon.vue +++ b/src/views/components/StatusIcon/statusIcon.vue @@ -68,10 +68,9 @@ export default { this.$store.state.map.holdStandList.forEach(item => { const stand = this.$store.getters['map/getDeviceByCode'](item); const station = this.$store.getters['map/getDeviceByCode'](stand.stationCode); - console.log(station); const dir = stand.right ? '上行站台' : '下行站台'; if (stand) { - this.tip = this.tip + station.name + ':
' + dir + '站台存在扣车命令'; + this.tip = this.tip + station.name + ':
' + dir + '站台存在扣车命令
'; } }); } @@ -90,7 +89,7 @@ export default { const station = this.$store.getters['map/getDeviceByCode'](stand.stationCode); const dir = stand.right ? '上行站台' : '下行站台'; if (stand) { - this.tip = this.tip + station.name + ':
' + dir + '站台存在跳停命令'; + this.tip = this.tip + station.name + ':
' + dir + '站台存在跳停命令
'; } }); } @@ -113,6 +112,7 @@ export default { /*border-radius: 4px;*/ overflow: hidden; display: flex; + box-shadow: 0 0 5px #eee; } .textStatus { width: 50px; diff --git a/src/views/components/font/index.vue b/src/views/components/font/index.vue index 6f8ea0a1e..011f83c6d 100644 --- a/src/views/components/font/index.vue +++ b/src/views/components/font/index.vue @@ -1,71 +1,70 @@ + diff --git a/src/views/newMap/displayNew/chatView/chatMemberList.vue b/src/views/newMap/displayNew/chatView/chatMemberList.vue index ddb243928..1fc6bcdb3 100644 --- a/src/views/newMap/displayNew/chatView/chatMemberList.vue +++ b/src/views/newMap/displayNew/chatView/chatMemberList.vue @@ -5,14 +5,16 @@
{{ member.memberName }}
+ + + diff --git a/src/views/newMap/displayNew/menuScript.vue b/src/views/newMap/displayNew/menuScript.vue index 0fd47a4f0..2a98e9db5 100644 --- a/src/views/newMap/displayNew/menuScript.vue +++ b/src/views/newMap/displayNew/menuScript.vue @@ -121,7 +121,7 @@ export default { ranAsPlan(data, this.group).then(res => { this.$store.dispatch('training/simulationStart').then(() => { this.$store.dispatch('map/setRunPlanStatus', true); - this.$store.dispatch('training/setInitTime', +new Date(`${new Date().getFullYear()} ${model.initTime}`)); + this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${model.initTime}`)); this.$store.dispatch('map/setShowCentralizedStationNum'); }); }).catch((error) => { diff --git a/src/views/newMap/displayNew/menuSystemTime.vue b/src/views/newMap/displayNew/menuSystemTime.vue index de31f59f7..0e5ed6dca 100644 --- a/src/views/newMap/displayNew/menuSystemTime.vue +++ b/src/views/newMap/displayNew/menuSystemTime.vue @@ -1,5 +1,5 @@ @@ -35,8 +38,8 @@ export default { data() { return { time: '00:0000', - top: 0, - xianRight: 0 + dateString: '00/00/00', + dayString: '' }; }, computed: { @@ -44,30 +47,68 @@ export default { return this.$route.params.mode == 'demon' || this.$route.params.mode == 'dp' || this.$route.params.mode == 'plan' || - this.$route.params.mode == 'script' || + this.$route.params.mode == 'script' || + this.$route.params.mode == 'practice' || !this.$route.params.mode; }, pause() { return this.$store.state.scriptRecord.simulationPause; + }, + isShowDate() { + return (this.$route.query.lineCode == 10 || this.$route.query.lineCode == 11) && this.$route.path.includes('displayNew'); + }, + top() { + return (this.$route.query.lineCode == 10 || this.$route.query.lineCode == 11) && this.$route.path.includes('displayNew') ? 35 : this.offset; + }, + newRight() { + return (this.$route.query.lineCode == 10 || this.$route.query.lineCode == 11) && this.$route.path.includes('displayNew') ? this.$store.state.config.width - 340 - 80 : this.right; } }, watch: { '$store.state.training.initTime': function (initTime) { const date = new Date(initTime); - this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}${prefixIntrger(date.getSeconds(), 2)}`; + this.initDate(date); } }, mounted() { const initTime = this.$store.state.training.initTime; - this.top = this.offset; - this.xianRight = this.right; - if (this.$route.query.lineCode == 10 || this.$route.query.lineCode == 11) { - this.top = 35; - this.xianRight = this.$store.state.config.width - 340; - } if (initTime > 0) { const date = new Date(initTime); + this.initDate(date); + } + }, + methods: { + initDate(date) { this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}${prefixIntrger(date.getSeconds(), 2)}`; + const years = date.getFullYear() + ''; + let months = date.getMonth() + 1 + ''; + let dates = date.getDate() + ''; + if (months.length < 2) { months = '0' + months; } + if (dates.length < 2) { dates = '0' + dates; } + this.dateString = dates + '/' + months + '/' + years.slice(2); + const day = date.getDay(); + switch (day) { + case 0: + this.dayString = '星 期 一'; + break; + case 1: + this.dayString = '星 期 二'; + break; + case 2: + this.dayString = '星 期 三'; + break; + case 3: + this.dayString = '星 期 四'; + break; + case 4: + this.dayString = '星 期 五'; + break; + case 5: + this.dayString = '星 期 六'; + break; + case 6: + this.dayString = '星 期 日'; + } } } }; @@ -96,5 +137,12 @@ export default { .display-card .el-row { line-height: 32px !important; } + .display-date-box{ + height: 29px; + line-height: 29px; + background: #404040; + color: #1DEA1E; + text-align: center; + } diff --git a/src/views/newMap/displayNew/menuTrainList.vue b/src/views/newMap/displayNew/menuTrainList.vue index 30c5769a9..276455a38 100644 --- a/src/views/newMap/displayNew/menuTrainList.vue +++ b/src/views/newMap/displayNew/menuTrainList.vue @@ -1,15 +1,10 @@ + diff --git a/src/views/newMap/jointTrainingNew/chatMemberList.vue b/src/views/newMap/jointTrainingNew/chatMemberList.vue index ed497a016..eb68d680a 100644 --- a/src/views/newMap/jointTrainingNew/chatMemberList.vue +++ b/src/views/newMap/jointTrainingNew/chatMemberList.vue @@ -5,15 +5,17 @@
{{ member.memberName }}
+ + + diff --git a/src/views/newMap/mapsystemNew/common/index.vue b/src/views/newMap/mapsystemNew/common/index.vue index ccbba871a..0c55fe6b1 100644 --- a/src/views/newMap/mapsystemNew/common/index.vue +++ b/src/views/newMap/mapsystemNew/common/index.vue @@ -3,6 +3,7 @@ + @@ -13,12 +14,14 @@ import { getDeviceMenuByDeviceType, OperationEvent } from '@/scripts/ConstDic'; import deviceType from '@/jmap/constant/deviceType'; import JlmapVisual from '@/views/newMap/jlmapNew/index'; import TrainingTips from '@/views/newMap/mapsystemNew/plugin/trainingtip'; +import CommonMenu from './commonMenu'; export default { name: 'LessonCanvas', components: { JlmapVisual, - TrainingTips + TrainingTips, + CommonMenu }, data() { return { diff --git a/src/views/newMap/mapsystemNew/common/menus/noticeInfo.vue b/src/views/newMap/mapsystemNew/common/menus/noticeInfo.vue new file mode 100644 index 000000000..672cfec3d --- /dev/null +++ b/src/views/newMap/mapsystemNew/common/menus/noticeInfo.vue @@ -0,0 +1,84 @@ + + + + diff --git a/src/views/newMap/mapsystemNew/common/menus/setFault.vue b/src/views/newMap/mapsystemNew/common/menus/setFault.vue new file mode 100644 index 000000000..cf848894f --- /dev/null +++ b/src/views/newMap/mapsystemNew/common/menus/setFault.vue @@ -0,0 +1,189 @@ + + + diff --git a/src/jmapNew/theme/xian_01/menus/dialog/trainAddPlan.vue b/src/views/newMap/mapsystemNew/common/menus/trainAddPlan.vue similarity index 87% rename from src/jmapNew/theme/xian_01/menus/dialog/trainAddPlan.vue rename to src/views/newMap/mapsystemNew/common/menus/trainAddPlan.vue index 8d9d21818..d30bee7e2 100644 --- a/src/jmapNew/theme/xian_01/menus/dialog/trainAddPlan.vue +++ b/src/views/newMap/mapsystemNew/common/menus/trainAddPlan.vue @@ -1,7 +1,7 @@