Compare commits

..

442 Commits

Author SHA1 Message Date
joylink_fanyuhong
99fc3ffcfb Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 8m29s
2024-09-30 14:35:00 +08:00
joylink_fanyuhong
0d34d83747 现地工作站添加运行图加载 2024-09-30 14:33:11 +08:00
joylink_fanyuhong
4e37183818 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 6m37s
2024-09-30 09:32:05 +08:00
joylink_fanyuhong
92c66ab4d6 画面管理处理设备map为空 2024-09-29 14:11:41 +08:00
joylink_fanyuhong
5a7c5fdbeb 成都三号线折返进路办理调整 2024-09-29 14:11:09 +08:00
joylink_fanyuhong
ae826ac205 成都三号线折返进路排列调整 2024-09-27 11:03:20 +08:00
joylink_fanyuhong
84b9f52c8f 信号重启逻辑判断调整 2024-09-26 19:34:02 +08:00
joylink_fanyuhong
526fd047e7 成都三设备样式调整 2024-09-26 18:12:26 +08:00
joylink_fanyuhong
529c122278 成都三号线添加站后折返操作 2024-09-26 17:54:59 +08:00
joylink_fanyuhong
5b1362f94b 成都三号线现地仿真操作控制权判断调整 2024-09-26 16:10:09 +08:00
joylink_fanyuhong
2d1da55ffc 草稿地图成员一键生成添加派班员 2024-09-26 15:15:44 +08:00
joylink_fanyuhong
97e121a65a 成都三号线连锁控调整 2024-09-26 13:42:03 +08:00
joylink_fanyuhong
327533c003 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 11m23s
2024-09-24 11:22:39 +08:00
joylink_fanyuhong
e9a71a1116 成都三号线调整 2024-09-24 11:22:16 +08:00
joylink_fanyuhong
8a80a7d732 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 8m31s
2024-09-24 11:11:40 +08:00
joylink_fanyuhong
cbdfc57243 成都三号线现地仿真无特殊操作调整 2024-09-24 10:59:08 +08:00
joylink_fanyuhong
8fbaa85b99 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 11m22s
2024-09-19 09:10:22 +08:00
joylink_fanyuhong
5c81fc4dcf 实训测验统计得分调整 2024-09-18 14:00:17 +08:00
joylink_fanyuhong
b0ef9e5242 实训总分统计调整 2024-09-18 13:30:36 +08:00
joylink_fanyuhong
f14d998f19 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 8m32s
2024-09-14 13:58:04 +08:00
joylink_fanyuhong
f2efa437df 实训消失问题调整2 2024-09-14 13:50:40 +08:00
joylink_fanyuhong
32430607dd 实训提示消失问题调整 2024-09-14 11:30:31 +08:00
joylink_fanyuhong
a1c8b4f662 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 9m44s
2024-09-13 09:27:49 +08:00
joylink_fanyuhong
954ee991fa 实训列表调整 2024-09-11 13:44:23 +08:00
joylink_fanyuhong
13f16e5570 f仿真重置后清楚区故解连续操作状态 2024-09-11 11:18:26 +08:00
joylink_fanyuhong
5470a32bb7 成工院大铁标准线实训测验模式结束后弹出的结果优化 2024-09-11 09:37:17 +08:00
joylink_fanyuhong
eff99d3609 成工院大铁标准站区故解连续操作问题 2024-09-10 16:21:03 +08:00
joylink_fanyuhong
60e7a09d69 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 9m4s
2024-09-10 12:01:42 +08:00
joylink_fanyuhong
45fbdf0dd7 设备柜 atp切除状态同步 2024-09-10 12:01:14 +08:00
joylink_fanyuhong
904434caf3 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m18s
2024-09-10 10:47:00 +08:00
joylink_fanyuhong
9045d2a118 司机驾驶切除ATP调整 2024-09-10 10:37:45 +08:00
joylink_fanyuhong
1f9541eb31 Merge branch 'develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 13m8s
2024-08-20 17:13:02 +08:00
joylink_fanyuhong
10e27697fb 代码调整 2024-08-20 15:16:56 +08:00
joylink_fanyuhong
acf3109c0b 添加ats客户端 只能操作特殊操作 2024-08-20 15:13:45 +08:00
joylink_fanyuhong
a21524b839 Merge branch 'develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 10m57s
2024-08-19 18:42:03 +08:00
joylink_fanyuhong
2b8116afd3 现地客户端列车显示问题调整 2024-08-16 23:09:34 +08:00
joylink_fanyuhong
478261512c Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m48s
2024-08-16 09:59:38 +08:00
joylink_fanyuhong
f66844bc27 实训调整 2024-08-15 15:35:43 +08:00
joylink_fanyuhong
364bd1e539 tms订阅调整 2024-06-28 14:04:27 +08:00
joylink_fanyuhong
0c4c5bebb0 运行图编制问题调整 2024-06-24 19:40:07 +08:00
joylink_fanyuhong
22a2e11517 发布信息提示 2024-06-24 18:43:00 +08:00
joylink_fanyuhong
4841ebdda7 TMS切换客户端调整 2024-06-24 18:20:30 +08:00
joylink_fanyuhong
0147f270f2 Merge remote-tracking branch 'origin/develop'
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m6s
2024-06-18 15:56:31 +08:00
joylink_fanyuhong
916bc645ed 添加运行图测试客户端 2024-06-18 15:36:57 +08:00
joylink_fanyuhong
37e0779d23 成都工业学院第三方新开页面关闭调整 2024-06-04 11:42:34 +08:00
joylink_fanyuhong
081d5bf630 成都工业学院登录调整 2024-06-04 11:17:37 +08:00
joylink_zhaoerwei
27418dc041 Squashed commit of the following:
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 10m24s
commit 1b0ddc2740
Author: joylink_zhaoerwei <Bob_Engineer@163.com>
Date:   Mon May 27 17:39:39 2024 +0800

    Squashed commit of the following:

    commit cef55a4c6b
    Author: joylink_zhaoerwei <Bob_Engineer@163.com>
    Date:   Mon May 27 17:09:01 2024 +0800

        三维url调整

    commit 869c86b94d
    Author: joylink_zhaoerwei <Bob_Engineer@163.com>
    Date:   Mon May 27 16:57:01 2024 +0800

        更改三维地址

    commit dc2165733e
    Author: joylink_zhaoerwei <Bob_Engineer@163.com>
    Date:   Mon May 27 16:33:48 2024 +0800

        场景添加三维场景,实训中可根据url打开三维场景(待测试)

commit 7d774db362
Merge: b66515eba 0c5bba7c0
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Tue May 21 16:48:35 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 0c5bba7c0f
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Tue May 21 16:47:37 2024 +0800

    传输信号机调整

commit ef9165faa4
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Thu May 16 15:43:56 2024 +0800

    third

commit ae74123f18
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Wed May 8 09:17:37 2024 +0800

    成都工学院第三方登录调整

commit b1baeaabcd
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Tue May 7 15:46:29 2024 +0800

    成都工业学院第三方登录调整

commit b66515ebad
Merge: 5cf57c4d2 91a8410dc
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Wed Apr 24 11:01:32 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 91a8410dc2
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Wed Apr 24 10:58:02 2024 +0800

    道岔名称背景颜色更换透明色

commit 5cf57c4d2f
Merge: 5ca4f2be8 c97def5fc
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 17:16:40 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 5ca4f2be8d
Merge: 66a376298 31376bc22
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 16:10:23 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 66a3762987
Merge: 9dab09e4d 5be2cea1c
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 15:53:54 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 9dab09e4d0
Merge: b8f90509e dda44c870
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Mon Apr 22 09:33:42 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit b8f90509eb
Merge: 26d9cc892 5548806ea
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Sun Apr 21 17:51:33 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit 26d9cc892f
Merge: ce8d3f453 3fc31777a
Author: joylink_fanyuhong <18706759286@163.com>
Date:   Fri Apr 19 22:27:07 2024 +0800

    Merge remote-tracking branch 'origin/develop' into local-test

commit ce8d3f4531
Author: fan <fanyuhong@joylink.club>
Date:   Fri Apr 19 22:25:43 2024 +0800

    iscs退出仿真调整&iscs绘制地图调整

commit 98662ec177
Author: fan <fanyuhong@joylink.club>
Date:   Fri Apr 19 18:25:09 2024 +0800

    实时广播问题调整&注释iscs信号系统&stationNav换成车站名称&iscs点击修改mode
2024-05-27 18:06:53 +08:00
joylink_zhaoerwei
cef55a4c6b 三维url调整 2024-05-27 17:09:01 +08:00
joylink_zhaoerwei
869c86b94d 更改三维地址 2024-05-27 16:57:01 +08:00
joylink_zhaoerwei
dc2165733e 场景添加三维场景,实训中可根据url打开三维场景(待测试) 2024-05-27 16:33:48 +08:00
joylink_fanyuhong
0c5bba7c0f 传输信号机调整 2024-05-21 16:47:37 +08:00
joylink_fanyuhong
ef9165faa4 third 2024-05-16 15:43:56 +08:00
joylink_fanyuhong
ae74123f18 成都工学院第三方登录调整 2024-05-08 09:17:37 +08:00
joylink_fanyuhong
b1baeaabcd 成都工业学院第三方登录调整 2024-05-07 15:46:29 +08:00
joylink_fanyuhong
91a8410dc2 道岔名称背景颜色更换透明色 2024-04-24 11:00:44 +08:00
joylink_fanyuhong
c97def5fca 没有综合演练不显示联机
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m34s
2024-04-22 17:15:20 +08:00
joylink_fanyuhong
31376bc221 道岔钩锁调整
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m29s
2024-04-22 16:09:03 +08:00
joylink_fanyuhong
5be2cea1ca 列车pis和站台pis调整
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m30s
2024-04-22 15:52:58 +08:00
joylink_fanyuhong
dda44c870f pa客户端车站选择禁用
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 6m54s
2024-04-22 09:31:41 +08:00
joylink_fanyuhong
5548806ea5 pa客户端调整&标准线未开放调整
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 8m54s
2024-04-21 17:49:03 +08:00
fan
3fc31777a2 iscs退出仿真调整&iscs绘制地图调整
All checks were successful
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 14m22s
2024-04-19 22:26:30 +08:00
fan
d5eb68ea1c 实时广播问题调整&注释iscs信号系统&stationNav换成车站名称&iscs点击修改mode 2024-04-19 20:10:06 +08:00
fan
bd10b05228 iscs调整
All checks were successful
local-test分支构建发布到本地服务器 / Build-Publish (push) Successful in 8m28s
2024-04-17 17:08:47 +08:00
joylink_fanyuhong
2b13ff0a5a 提示调整 2024-04-11 19:19:19 +08:00
joylink_fanyuhong
5212b6417a 推出考试销毁提交事件 2024-04-11 19:04:50 +08:00
joylink_fanyuhong
5666af96cc createId为空删除参数 2024-04-11 18:17:14 +08:00
fan
6b3d83979d 接口调整 2024-04-11 11:45:51 +08:00
fan
a21e880a18 考试调整 2024-04-11 11:20:28 +08:00
fan
27129e8b21 试卷调整 2024-04-11 11:10:03 +08:00
fan
6c3b06c4a0 考试管理调整 2024-04-10 14:33:10 +08:00
joylink_fanyuhong
d1f8927355 南京二信号机故障调整again 2024-04-08 16:39:33 +08:00
joylink_fanyuhong
f1e6121a8f 南京二信号机故障调整&南京二进路排列方式调整 2024-04-08 16:05:24 +08:00
joylink_fanyuhong
8f14259db7 客户端调整
All checks were successful
local-test分支构建发布到本地服务器 / Build-Publish (push) Successful in 6m38s
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 6m54s
2024-03-29 11:14:08 +08:00
joylink_fanyuhong
2c79bd847f subTypeParam参数调整 2024-03-27 13:38:05 +08:00
db8f007ca8 修改任务及步骤名称
All checks were successful
local-test分支构建发布到本地服务器 / Build-Publish (push) Successful in 8m29s
master分支构建发布到公网服务器 / Build-Publish (push) Successful in 7m29s
2024-03-26 19:44:28 +08:00
8d4e0d2a89 修改yaml格式错误(tab换成空格)
All checks were successful
local-test分支构建发布到本地服务器 / Build-Publish (push) Successful in 7m20s
2024-03-26 17:57:39 +08:00
abdce5a30d 修改工作流文件名
添加公网构建发布工作流
2024-03-26 17:31:03 +08:00
86aaa5d5b1 测试yarn build
local-test分支构建发布工作流
2024-03-26 17:13:36 +08:00
joylink_zhaoerwei
06aef16a5d Squashed commit of the following:
commit 6e6737a7c6
Author: joylink_zhaoerwei <Bob_Engineer@163.com>
Date:   Thu Mar 21 16:57:58 2024 +0800

    播放视频调整
2024-03-21 17:28:59 +08:00
joylink_fanyuhong
506fcd481b Merge remote-tracking branch 'origin/test' 2024-03-12 11:16:44 +08:00
joylink_fanyuhong
7971fce1b6 url调整 2024-03-12 11:16:26 +08:00
joylink_fanyuhong
fdaf9d81f8 Merge remote-tracking branch 'origin/test' 2024-03-12 10:34:45 +08:00
joylink_fanyuhong
29d5474e40 Merge branch 'master' of https://git.code.tencent.com/lian-cbtc/jl-client 2024-03-12 10:33:51 +08:00
joylink_fanyuhong
720546f99b Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-12 10:31:36 +08:00
joylink_fanyuhong
21e5b5b659 对象校验调整&&客户端初始化调整 2024-03-12 10:31:16 +08:00
joylink_zhaoerwei
0b92511070 修改表格颜色 2024-03-12 09:52:57 +08:00
joylink_fanyuhong
b57ea909b4 pa调整 2024-03-12 09:18:34 +08:00
joylink_fanyuhong
991121f9d8 pa调整 2024-03-11 18:59:56 +08:00
joylink_fanyuhong
f134ea6b5f Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-11 18:05:05 +08:00
joylink_fanyuhong
2b3b7c189d pa放开语音播放 2024-03-11 18:04:39 +08:00
joylink_zhaoerwei
51e700a2ad 视频播放调整 2024-03-11 17:30:28 +08:00
joylink_zhaoerwei
a763880dac 微调 2024-03-11 16:28:53 +08:00
joylink_zhaoerwei
f4e0552a61 场景视频的上传编辑与播放 2024-03-11 16:03:35 +08:00
joylink_fanyuhong
e9facb70f5 调整:新增pa客戶端 2024-03-11 15:45:29 +08:00
joylink_fanyuhong
71ed5445c3 调整:iscs进入加载动画出不来 2024-03-11 10:44:12 +08:00
joylink_fanyuhong
f0cea7706c 赛季内容编辑器调整 2024-03-11 09:57:48 +08:00
fan
8a15cd0d1c Merge remote-tracking branch 'origin/test' 2024-03-08 19:05:37 +08:00
fan
bb8678e486 多选调整 2024-03-08 19:04:19 +08:00
fan
aeb581dced Merge remote-tracking branch 'origin/test' 2024-03-08 15:46:16 +08:00
fan
ee36444dc7 多选提示调整 2024-03-08 15:41:48 +08:00
fan
5ea69acaf8 Merge remote-tracking branch 'origin/test' 2024-03-08 11:29:24 +08:00
fan
b2989b0eb5 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-08 10:56:05 +08:00
fan
ceaf44950d 分值调整 2024-03-08 10:55:56 +08:00
fan
6dbe1dc14c Merge remote-tracking branch 'origin/test' 2024-03-08 09:33:28 +08:00
fan
7b07b17e13 Merge remote-tracking branch 'origin/test' 2024-03-08 09:33:09 +08:00
joylink_zhaoerwei
a1ed6248bf 更换试卷菜单组件 2024-03-07 20:31:30 +08:00
fan
c7a622eadf Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-07 18:00:44 +08:00
fan
2134f027e7 理论题调整 2024-03-07 18:00:34 +08:00
joylink_zhaoerwei
bb8e6938a6 微调 2024-03-07 17:12:06 +08:00
joylink_zhaoerwei
d17dc79e24 大赛第一个页面 2024-03-07 15:12:01 +08:00
fan
68584fd5fd 赛季内容编辑 2024-03-07 14:42:35 +08:00
fan
c3bb3266a4 任务树调整 2024-03-07 10:39:22 +08:00
fan
6501cb0d1b Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-07 10:15:52 +08:00
fan
89c417ae41 发布至竞赛调整 2024-03-07 10:15:41 +08:00
fan
b0ad026724 仿真成员管理调整 2024-03-07 10:15:06 +08:00
joylink_zhaoerwei
db1c5070db 待调整,先可用 2024-03-07 08:43:53 +08:00
joylink_zhaoerwei
f220213f38 样式测试 2024-03-06 18:11:05 +08:00
fan
bb453012c8 Merge remote-tracking branch 'origin/test' 2024-03-06 09:41:39 +08:00
fan
e5c38220a2 实训调整 2024-03-06 09:40:47 +08:00
fan
cf94b2570d Merge remote-tracking branch 'origin/test' 2024-03-05 15:04:26 +08:00
fan
ce1be2d1c8 取消发送语音后处理实训步骤校验 2024-03-05 15:03:57 +08:00
fan
2ae715a936 Merge remote-tracking branch 'origin/test' 2024-03-05 13:53:17 +08:00
fan
3e5996aee4 Merge remote-tracking branch 'origin/test' 2024-03-05 13:52:28 +08:00
joylink_zhaoerwei
7de8989806 任务页修改 2024-03-05 13:44:35 +08:00
fan
bdec361003 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-05 13:38:12 +08:00
fan
7e7b238c34 加载场景判断调整 2024-03-05 13:38:00 +08:00
joylink_zhaoerwei
f06d766ffa 只显示有场景的得分 2024-03-05 10:17:14 +08:00
fan
4495db6d77 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-05 09:42:39 +08:00
fan
35c6d3e19f 分值显示调整 2024-03-05 09:42:25 +08:00
joylink_zhaoerwei
670e3c9b12 任务树加滚动条 2024-03-04 18:46:40 +08:00
joylink_zhaoerwei
47d6193733 展示任务树 2024-03-04 18:08:55 +08:00
fan
8cf496c2ae Merge remote-tracking branch 'origin/test' 2024-03-04 17:05:56 +08:00
fan
0444ef9c46 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-04 16:55:43 +08:00
fan
3d43eafa14 实训编制问题调整 2024-03-04 16:55:33 +08:00
joylink_zhaoerwei
a1383c9b7a 去掉报警 2024-03-04 16:44:33 +08:00
fan
5dab51356d Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-04 16:00:19 +08:00
fan
f08d9e0e8e 竞赛流程调整 2024-03-04 15:59:58 +08:00
joylink_zhaoerwei
aaa0c83514 打分去掉总分 2024-03-04 14:42:09 +08:00
joylink_zhaoerwei
899df2a574 打分页面 2024-03-04 14:30:47 +08:00
fan
6181fda6c6 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-04 14:26:56 +08:00
fan
303837765a 竞赛流程调整暂提 2024-03-04 14:26:45 +08:00
joylink_zhaoerwei
41e46a983e 增加竞赛开始接口 2024-03-04 12:15:57 +08:00
fan
31f1192de0 Merge remote-tracking branch 'origin/test' 2024-03-04 09:20:30 +08:00
joylink_zhaoerwei
c60127798c 试卷和任务增加pagesize=999 2024-03-04 09:13:31 +08:00
joylink_zhaoerwei
22457f7f49 模块名字微调 2024-03-01 17:04:18 +08:00
fan
e29dc3860e Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-01 16:58:47 +08:00
fan
cf421fe32e 维护评分规则添加生成id 2024-03-01 16:58:30 +08:00
joylink_zhaoerwei
1c80c5f56a 微调 2024-03-01 16:46:25 +08:00
fan
ff33bec539 维护评分规则id1 2024-03-01 16:45:06 +08:00
fan
1aca5f00ab Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-01 16:44:20 +08:00
fan
18860dd3e5 维护评分规则id 2024-03-01 16:44:11 +08:00
joylink_zhaoerwei
e1bdbff6ac 微调 2024-03-01 16:29:17 +08:00
joylink_zhaoerwei
ccaefdeb5e 第一个页面调整 2024-03-01 16:20:10 +08:00
fan
7810cfc993 删除日志 2024-03-01 15:32:29 +08:00
fan
e6e2b7567f 评分规则0分不展示 2024-03-01 15:28:38 +08:00
fan
44361f14f6 loading位置调整 2024-03-01 15:25:30 +08:00
fan
a1f2fab981 评分规则调整1 2024-03-01 15:23:02 +08:00
fan
f5dcc979bf 评分规则调整 2024-03-01 15:21:32 +08:00
fan
01b95a3fd4 添加二次确认 2024-03-01 14:45:15 +08:00
fan
c1376ddf8f 大赛训练产品调整 2024-03-01 14:37:54 +08:00
fan
77713154d0 大赛训练产品调整暂提 2024-03-01 14:17:50 +08:00
fan
a69657c8e6 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-03-01 13:53:30 +08:00
fan
8b92ce23e4 大赛训练产品调整暂提 2024-03-01 13:53:07 +08:00
joylink_zhaoerwei
e554cda023 增加打分结算路由 2024-03-01 13:18:44 +08:00
joylink_zhaoerwei
0478838734 微调 2024-03-01 11:11:17 +08:00
joylink_zhaoerwei
65b77a3b60 大赛训练第一个页面 2024-03-01 11:08:05 +08:00
joylink_zhaoerwei
a36b8e7c22 新建试卷去掉组别 2024-03-01 10:04:35 +08:00
joylink_zhaoerwei
c2885cb0cc 新建试卷去掉组别 2024-03-01 10:01:54 +08:00
fan
126507f87f 大赛训练产品调整暂提 2024-02-29 18:01:55 +08:00
fan
13aefab82b Merge remote-tracking branch 'origin/test' 2024-02-29 10:42:02 +08:00
fan
32866bab90 大赛训练产品调整暂提 2024-02-29 10:40:22 +08:00
fan
5016a5b175 大赛训练产品调整添加返回 2024-02-28 16:02:15 +08:00
fan
976292fc4c Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-28 15:58:59 +08:00
fan
d105130eae 大赛训练产品调整new 2024-02-28 15:58:51 +08:00
joylink_zhaoerwei
2d856bc24e 仿真试卷页 2024-02-28 15:57:07 +08:00
fan
b1766b0ac5 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-28 15:33:59 +08:00
fan
9e1d58f972 大赛训练产品调整 2024-02-28 15:33:41 +08:00
joylink_zhaoerwei
103a63494e 模块绑定评分表 2024-02-28 14:18:05 +08:00
joylink_zhaoerwei
dd4a338a4c 竞赛第一个页面壳提交 2024-02-28 13:24:13 +08:00
fan
fc554ce855 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-28 10:04:38 +08:00
fan
5ed4f1e3dc 大赛训练产品路由权限调整 2024-02-28 10:04:26 +08:00
joylink_zhaoerwei
2063900e40 任务选择的顺序 2024-02-27 18:18:01 +08:00
joylink_zhaoerwei
87a86e1de0 加分钟和阻止刷新 2024-02-27 16:52:49 +08:00
joylink_zhaoerwei
7cc8b14555 模块评分非必填 2024-02-27 15:46:03 +08:00
joylink_zhaoerwei
f47f504ada 去掉试卷是否支持拷贝 2024-02-27 15:34:59 +08:00
joylink_zhaoerwei
f42fc8a17c 任务和试卷调整 2024-02-27 14:48:44 +08:00
fan
6912d01d2c 233环境https=>http 2024-02-27 14:21:01 +08:00
fan
cc28f00377 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-27 11:13:01 +08:00
fan
dc68ba2397 竞赛产品调整暂提 2024-02-27 11:12:04 +08:00
joylink_zhaoerwei
2dd7c48786 微调 2024-02-27 10:08:56 +08:00
fan
508afb9954 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-27 08:46:32 +08:00
fan
2f767d7d31 规则详情注释场景相关内容 2024-02-27 08:46:07 +08:00
joylink_zhaoerwei
7c68ade822 竞赛任务和模块调整 2024-02-26 22:20:22 +08:00
fan
b0a93298cb 规则详情返回空值处理 2024-02-26 15:38:50 +08:00
joylink_fanyuhong
b0461baca0 竞赛调整 2024-02-23 17:02:02 +08:00
joylink_fanyuhong
0dd4837960 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-23 14:42:40 +08:00
joylink_fanyuhong
37d4739ea9 竞赛问题调整new 2024-02-23 14:42:24 +08:00
joylink_zhaoerwei
66bfacadb6 竞赛任务调整 2024-02-23 12:14:23 +08:00
joylink_fanyuhong
9949210f89 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2024-02-23 11:22:25 +08:00
joylink_fanyuhong
6071755a23 竞赛问题调整 2024-02-23 11:22:13 +08:00
joylink_zhaoerwei
de15e693e9 微调 2024-02-23 10:06:49 +08:00
joylink_zhaoerwei
fefbf3ce83 微调 2024-02-23 09:44:38 +08:00
joylink_zhaoerwei
ad8c8de231 微调,待测试接口 2024-02-22 17:56:55 +08:00
joylink_zhaoerwei
f908c8db04 去掉mock 2024-02-22 17:19:06 +08:00
joylink_zhaoerwei
9d2420920c 竞赛任务备用 2024-02-22 17:14:55 +08:00
joylink_fanyuhong
d77e872858 merge 2024-02-22 11:33:03 +08:00
joylink_fanyuhong
d9ba49392d 竞赛调整暂提 2024-02-22 11:10:39 +08:00
joylink_zhaoerwei
8c59b44de1 竞赛模块代码备用 2024-02-21 16:38:20 +08:00
joylink_zhaoerwei
e48289b953 试卷管理代码备用 2024-02-21 10:53:44 +08:00
joylink_zhaoerwei
757f661a22 竞赛任务api提交 2024-02-20 18:16:50 +08:00
joylink_fanyuhong
0be7c03f81 竞赛调整 2024-02-20 09:23:30 +08:00
joylink_fanyuhong
47c5168e4b Merge remote-tracking branch 'origin/test' 2024-02-19 13:28:54 +08:00
joylink_fanyuhong
5564e354b4 url调整 2024-02-19 13:23:20 +08:00
joylink_fanyuhong
c769dcf49a 3.233=>33.233 2024-02-19 11:04:05 +08:00
joylink_zhaoerwei
0585807c1e 增加竞赛相关数据管理路由 2024-01-31 16:22:03 +08:00
fan
4804cebfcd Merge remote-tracking branch 'origin/test' 2024-01-16 09:36:39 +08:00
fan
d8219cc2eb 联系方式展示调整 2024-01-16 09:35:55 +08:00
fan
5e38fa05e2 成都工学院第二个项目增加叶佳提供小车操作 2023-12-29 10:51:02 +08:00
fan
ab31f2cefa 语音前缀调整 2023-12-19 16:15:33 +08:00
fan
933a1367c4 还原pis语音播放 2023-12-19 15:40:26 +08:00
fan
28dc2c3739 设备配置关闭时清值 2023-12-19 13:09:56 +08:00
fan
1aaa427dac tms&pis可视化配置 2023-12-19 11:21:24 +08:00
fan
388f4593f1 浙大网新操作调整1207 2023-12-07 17:45:44 +08:00
fan
6e477bef89 浙大网新操作调整 2023-12-06 17:23:47 +08:00
fan
72f730aaa6 浙大网新操作调整
(cherry picked from commit 1ecab822f4)
2023-12-05 11:23:35 +08:00
fan
1ecab822f4 浙大网新操作调整 2023-12-05 10:34:14 +08:00
fan
a9f18f6d61 Merge remote-tracking branch 'origin/test' 2023-12-04 17:55:44 +08:00
fan
241dbcd36f 浙大网新操作调整(控制权操作) 2023-12-04 17:55:20 +08:00
fan
3cb71dce37 浙大网新操作调整(控制权显示&请求中控调整&列车停车) 2023-12-04 16:35:54 +08:00
fan
9d039b3f58 福州一号线新增列车故障操作停车 2023-12-04 10:32:09 +08:00
fan
bd310dbc28 实训管理和项目设备登录调整 2023-12-01 13:27:31 +08:00
fan
3fcf066e66 设备配置调整 2023-12-01 09:28:18 +08:00
fan
c33c50005c Merge remote-tracking branch 'origin/test' 2023-11-30 17:54:51 +08:00
Yuan
29197c56ee tms页面数据修改 2023-11-30 15:55:14 +08:00
fan
ef230ae278 运行环境标注 2023-11-30 14:13:42 +08:00
fan
90a87a73e1 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2023-11-30 14:12:06 +08:00
fan
d89b457c78 运行环境标注 2023-11-30 14:11:45 +08:00
fan
111df40c91 运行环境标注 2023-11-30 14:11:31 +08:00
dong
6d2dd68108 语言来电铃声,语言其他BUG 2023-11-30 10:51:51 +08:00
fan
81c1806603 列车操作增加受电弓操作 2023-11-30 10:00:42 +08:00
fan
c0bf588334 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2023-11-30 09:41:55 +08:00
fan
cf2801288f 国赛校验失败不关闭dialog处理 2023-11-30 09:41:22 +08:00
dong
8e68e6e974 语音提示音改为之前电话铃声、语音播完再播另一个、其他语言问题 2023-11-29 17:24:46 +08:00
dong
a95c91f640 收到新消息添加铃声提醒、当前会话接收到新语音直接播放 2023-11-29 10:15:26 +08:00
fan
7094bca4f4 地车通信&受电弓操作 2023-11-24 16:29:22 +08:00
fan
ed9340f261 电力调度=》工电调度 2023-11-24 14:26:28 +08:00
fan
42cb54bf72 实训编制预览调整 2023-11-24 13:17:43 +08:00
fan
a981965452 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2023-11-23 14:26:21 +08:00
fan
bf54424109 调度大赛控制权调整 2023-11-23 14:25:56 +08:00
Yuan
05788794cd bugfix - 信号机站控操作 2023-11-22 17:14:57 +08:00
Yuan
c6c3a3a377 bugfix - 站台扣车操作菜单 2023-11-22 14:47:50 +08:00
Yuan
e29028ec0e bugfix - 站控信号机操作 2023-11-22 14:17:48 +08:00
Yuan
c513a3e80b bugfix - ZCControl高亮问题 2023-11-22 14:11:17 +08:00
Yuan
9b2db3957e 站控允许信号机操作 2023-11-22 13:28:50 +08:00
Yuan
c2298f9995 站控允许排列进路 2023-11-22 11:31:17 +08:00
fan
74bfcf49f1 成都工学院添加双icon(调换透明icon) 2023-11-16 15:14:21 +08:00
fan
56eea551fb Merge remote-tracking branch 'origin/test' 2023-11-16 15:08:19 +08:00
fan
19fde5c7fc 成都工学院添加双icon 2023-11-16 15:07:43 +08:00
fan
8a3670f51d 国赛列车操作调整 2023-11-15 15:04:35 +08:00
fan
5aefd0dea0 Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test 2023-11-13 17:24:46 +08:00
fan
af3b4b1d97 编辑设备配置NCC,OCC角色显示 2023-11-13 17:24:31 +08:00
Yuan
ad6d96890c tms页面放大 2023-11-13 10:38:30 +08:00
Yuan
8020075b98 tms页面微调 2023-11-10 17:22:37 +08:00
Yuan
dd4bbab000 tms 2023-11-10 10:55:42 +08:00
Yuan
907a88c6ea tms页面数据 2023-11-09 14:57:31 +08:00
fan
0b688dea64 tms客户端新增 2023-11-08 09:57:34 +08:00
Yuan
2bfdb557d1 tms页面 2023-11-07 17:24:15 +08:00
Yuan
f62f8ff273 Merge branch 'test' of git.code.tencent.com:lian-cbtc/jl-client into test 2023-11-03 17:37:57 +08:00
Yuan
ae9748a649 tms页面 2023-11-03 17:37:52 +08:00
fan
007548623d Revert "乘客信息发布系统拆分"
This reverts commit 4c67af284c.
2023-11-02 17:02:16 +08:00
fan
285b40091f 乘客信息发布系统拆分
(cherry picked from commit 4c67af284c)
2023-11-02 17:00:09 +08:00
fan
4c67af284c 乘客信息发布系统拆分 2023-11-02 16:59:37 +08:00
fan
684f32c481 Merge remote-tracking branch 'origin/test' 2023-10-31 17:51:57 +08:00
fan
597d4ea7d1 南京二ATP级别灯柱颜色修改&CR2操作完毕交互调整 2023-10-31 16:46:29 +08:00
fan
0867248df3 驾驶方式删除“无”&南京二增加NRM模式和停车 2023-10-30 17:13:35 +08:00
fan
313f716613 岔芯边缘道岔区段关联道岔导致报错调整 2023-10-30 16:26:58 +08:00
fan
c98c50f401 进路增加单列车进路属性&取消进路状态变化更新执行通知 2023-10-30 09:50:56 +08:00
fan
a5d260a340 加载备用车初始化调整 2023-10-26 16:23:33 +08:00
fan
4ba24892fc 南京二叶老师问题调整1 2023-10-26 15:40:25 +08:00
fan
1c76b26541 南京二叶老师问题调整 2023-10-26 13:10:49 +08:00
fan
2ef158851d Merge remote-tracking branch 'origin/test' 2023-10-25 14:05:58 +08:00
fan
e795ba1573 换端指令调整 2023-10-25 13:31:45 +08:00
fan
f9c47cbac6 Merge remote-tracking branch 'origin/test' 2023-10-25 10:36:11 +08:00
fan
efbd29a70a 南京二号线RM调整 2023-10-25 10:35:07 +08:00
fan
8fbddfe40d Merge remote-tracking branch 'origin/test' 2023-10-23 16:42:09 +08:00
fan
ca183eed7e 南京二号线哈尔滨线早晚点显示调整 2023-10-23 16:41:09 +08:00
fan
d9b03b30f6 仿真数据异常loading不关闭问题修复 2023-10-10 15:56:21 +08:00
910082305d Merge branch 'test'
# Conflicts:
#	src/views/newMap/display/terminals/index.vue
2023-09-27 18:11:19 +08:00
fan
16d9ee72bb 实训编制调整 2023-09-27 18:02:34 +08:00
fan
90d52176f2 添加仿真成员角色 2023-09-27 17:32:49 +08:00
fan
82e67c69e6 memberId丢失判定 2023-09-27 16:22:32 +08:00
fan
f01c445b25 实训问题修复
(cherry picked from commit 0598da9a2d)
2023-09-27 15:47:09 +08:00
fan
0598da9a2d 实训问题修复 2023-09-27 15:46:10 +08:00
fan
ac096dd663 Merge remote-tracking branch 'origin/test' 2023-09-20 14:51:28 +08:00
fan
fbdb48dc08 成都三号线现地仿真控制权切换问题调整 2023-09-20 14:51:03 +08:00
fan
2d7cdff431 错误数据跳过 2023-08-29 16:43:32 +08:00
fan
9b3cfdab78 运行图显示调整 2023-08-21 17:25:33 +08:00
fan
5efcec96ec bugfix:双击修改车次号 2023-08-18 13:50:35 +08:00
fan
2b035003e2 bugfix:打开运行图预览没有数据 2023-08-18 10:51:09 +08:00
fan
dd6f8bace4 列车操作速度显示调整 2023-08-17 13:21:53 +08:00
fan
cad848ce8e 自动运行 添加 2023-08-17 10:39:37 +08:00
fan
9bc7126509 登录路径处理调整 2023-08-16 17:50:39 +08:00
fan
b9830714c7 登录路径处理调整 2023-08-16 16:17:52 +08:00
fan
ae8c202dbe 南工院增加列车操作 2023-08-14 10:07:07 +08:00
fan
aea0436cbc 道岔生成逻辑调整 2023-08-09 17:05:03 +08:00
fan
acb8c3455f 车辆段放开故障操作 2023-07-28 11:11:06 +08:00
fan
52a5a78861 标准线调整 2023-07-13 10:46:07 +08:00
fan
e08677eabe 成员一键生成 2023-07-06 09:55:25 +08:00
fan
3dd44c3243 设备登录退出路径丢失调整 2023-07-05 10:56:02 +08:00
fan
ee58c53b83 Merge remote-tracking branch 'origin/test' 2023-06-12 10:13:52 +08:00
fan
0600abc0c9 实训室功能隐藏 2023-06-12 10:03:57 +08:00
fan
8e34a0f267 Merge remote-tracking branch 'origin/test' 2023-06-08 13:27:05 +08:00
fan
a8e2c9ef3b 注册找回账号手机号校验格式调整 2023-06-08 10:59:50 +08:00
fan
6b18628b7c Merge remote-tracking branch 'origin/test' 2023-06-07 18:01:28 +08:00
fan
d232546e8c 新增宁波一号线特殊线路 2023-06-07 09:38:15 +08:00
fan
f20378c4b4 福州一号线&宁波一号线新增列车连挂操作 2023-06-06 17:21:01 +08:00
fan
42779dc952 Merge remote-tracking branch 'origin/test' 2023-06-06 10:09:00 +08:00
fan
9aab60fe9c 区域选择未初始化控制人调整 2023-06-06 10:07:31 +08:00
fan
e1f35c56e9 项目配置添加删除logo功能 2023-06-06 09:53:50 +08:00
fan
92e3e5db31 福州一号线道岔失表调整 2023-06-05 14:23:07 +08:00
fan
3855087abd Merge remote-tracking branch 'origin/test' 2023-06-01 18:15:18 +08:00
fan
ca329a4db7 Merge remote-tracking branch 'origin/test' 2023-05-30 17:55:25 +08:00
fan
e32d8f9b6b Merge remote-tracking branch 'origin/test' 2023-05-26 17:59:19 +08:00
fan
23975cd271 Merge remote-tracking branch 'origin/test' 2023-05-26 17:43:20 +08:00
fan
f4e27a6e31 Merge remote-tracking branch 'origin/test' 2023-05-26 17:18:59 +08:00
fan
4424137da9 Merge remote-tracking branch 'origin/test' 2023-05-26 15:56:44 +08:00
fan
ac82fad041 Merge remote-tracking branch 'origin/test' 2023-05-26 15:34:23 +08:00
fd5af534af Merge remote-tracking branch 'origin/test' 2023-05-24 19:19:48 +08:00
fan
06e4bb93c7 Revert "Revert "修改新会话实训问题""
This reverts commit 7fa5b1d62e.
2023-05-22 11:18:37 +08:00
fan
8a966ac5ae Revert "Revert "群消息已读""
This reverts commit 204aef15
2023-05-22 11:18:16 +08:00
fan
5eb2a3f80c Revert "Revert "NCC行调名称调整成NCC调度""
This reverts commit a7b0609389.
2023-05-22 11:18:02 +08:00
fan
e1bf3dbcea Revert "Revert "添加角色NCC行调""
This reverts commit 5c72107b
2023-05-22 11:16:59 +08:00
fan
67ea7ef5ae Revert "Revert "Squashed commit of the following:""
This reverts commit b6edc491
2023-05-22 11:16:27 +08:00
fan
3fc6f13c6a Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/store/modules/map.js
#	src/views/newMap/display/index.vue
#	src/views/newMap/display/newChat/chatContent.vue
#	src/views/newMap/display/newChat/chatDialog.vue
#	src/views/newMap/display/newChat/editGroup.vue
#	src/views/newMap/newMapdraft/mapoperate/simulationMember/index.vue
#	src/views/organization/index.vue
#	src/views/publish/examRule/draft/editRule.vue
2023-05-20 18:13:52 +08:00
dongq107
ce62a19aa0 到第三方登录页面时先删除之前的token 2023-05-18 15:12:31 +08:00
dongq107
d09e415720 第三方登录必需调接口 2023-05-18 14:12:51 +08:00
fan
503c4c4ed3 扬工院教学管理隐藏班级管理 2023-05-11 15:22:37 +08:00
fff07141b6 修改错误的冲突合并 2023-05-06 19:00:17 +08:00
80178a80f6 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	src/jmapNew/painter.js
2023-05-06 18:37:26 +08:00
1d824c135e Merge remote-tracking branch 'origin/test_revert5.6' 2023-05-06 18:35:52 +08:00
Yuan
1318ecb97a Merge branch 'test_revert5.6' of git.code.tencent.com:lian-cbtc/jl-client into test_revert5.6 2023-05-06 18:03:37 +08:00
Yuan
e3857a75d0 bugfix - 试卷规则标签选项 2023-05-06 18:03:32 +08:00
joylink_zhaoerwei
f3ae97f7f8 故障提示NCC 2023-05-06 17:26:09 +08:00
Yuan
b472601fbc bugfix - 查看规则时标签字段未填充
(cherry picked from commit 2e51c9ee4c)
2023-05-06 16:31:37 +08:00
dong
d0a6b8e951 切换考试时实训模式弹窗关闭 2023-05-06 16:17:38 +08:00
dong
dd45877e1c 实训标签只可添加,不能删除 2023-05-06 16:01:16 +08:00
fan
b6edc4913b Revert "Squashed commit of the following:"
This reverts commit 77560336
2023-05-06 10:54:30 +08:00
fan
5c72107b90 Revert "添加角色NCC行调"
This reverts commit 6d848115b3.
2023-05-06 10:53:25 +08:00
fan
c4028ee8c6 Revert "会话群代码调整"
This reverts commit 79fbb8d071.
2023-05-06 10:53:15 +08:00
fan
a7b0609389 Revert "NCC行调名称调整成NCC调度"
This reverts commit fcae8539d9.
2023-05-06 10:53:02 +08:00
fan
204aef1583 Revert "群消息已读"
This reverts commit 0805383f
2023-05-06 10:52:15 +08:00
fan
c563fe8efa Revert "会话群代码调整"
This reverts commit 2d15eee9f8.
2023-05-06 10:49:24 +08:00
fan
1b1ddad29e Revert "修改语音最长秒数"
This reverts commit 20de76047b.
2023-05-06 10:49:05 +08:00
fan
7fa5b1d62e Revert "修改新会话实训问题"
This reverts commit eb4cd6ab4a.
2023-05-06 10:48:54 +08:00
fan
e353289594 第三方登录增加组织选择 2023-05-05 09:33:54 +08:00
fan
210a7d0fdd 第三方登录页项目配置调整 2023-04-27 13:23:14 +08:00
fan
a373d21deb 线路数据设置归属项目管理项目数据通过接口查询 2023-04-27 13:23:07 +08:00
dong
f2039927db Squashed commit of the following:
commit d082dc2fbc
Author: dong <58670809@qq.com>
Date:   Wed Apr 19 10:41:17 2023 +0800

    修改收令单位不显示调度命令问题

commit c52925960c
Merge: a3bc0de08 1f5d891c5
Author: joylink_zhangsai <1021828630@qq.com>
Date:   Tue Apr 18 16:25:03 2023 +0800

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

commit a3bc0de08a
Author: joylink_zhangsai <1021828630@qq.com>
Date:   Tue Apr 18 16:24:34 2023 +0800

    处理列车异常显示问题 by fan

commit 1f5d891c55
Author: dong <58670809@qq.com>
Date:   Mon Apr 17 14:40:39 2023 +0800

    修改苏电院交控线路顶部菜单展开后没法收回去问题

commit 0d50ac586b
Author: dong <58670809@qq.com>
Date:   Mon Apr 17 13:26:39 2023 +0800

    修改弹窗没有高度问题

commit 73c9c0777e
Author: dong <58670809@qq.com>
Date:   Fri Apr 14 16:25:38 2023 +0800

    去掉实训管理查询项缓存
2023-04-19 10:42:38 +08:00
dong
c020d69150 Squashed commit of the following:
commit 1f5d891c55
Author: dong <58670809@qq.com>
Date:   Mon Apr 17 14:40:39 2023 +0800

    修改苏电院交控线路顶部菜单展开后没法收回去问题
2023-04-17 14:51:08 +08:00
dong
f27fd63e29 Squashed commit of the following:
commit 0d50ac586b
Author: dong <58670809@qq.com>
Date:   Mon Apr 17 13:26:39 2023 +0800

    修改弹窗没有高度问题
2023-04-17 13:28:06 +08:00
dong
857472ba72 Squashed commit of the following:
commit 73c9c0777e
Author: dong <58670809@qq.com>
Date:   Fri Apr 14 16:25:38 2023 +0800

    去掉实训管理查询项缓存
2023-04-14 16:26:57 +08:00
fan
1aca150711 Merge remote-tracking branch 'origin/test' 2023-04-14 13:09:38 +08:00
fan
8593174685 Merge remote-tracking branch 'origin/test' 2023-04-13 16:23:01 +08:00
dong
2bb8c6df92 Squashed commit of the following:
commit 30763300ac
Author: dong <58670809@qq.com>
Date:   Wed Apr 12 18:31:39 2023 +0800

    修改前端配置带id

commit cde33feb22
Author: fan <fanyuhong@joylink.club>
Date:   Wed Apr 12 18:07:47 2023 +0800

    宁波三进路选择表示样式不取消

commit 34a94e2c6d
Author: fan <fanyuhong@joylink.club>
Date:   Wed Apr 12 17:58:11 2023 +0800

    区域选择界面调整

commit 52af1d994b
Author: fan <fanyuhong@joylink.club>
Date:   Wed Apr 12 13:33:03 2023 +0800

    系统管理-教学考试数据管理

commit 6187b449c1
Author: dong <58670809@qq.com>
Date:   Fri Apr 7 15:22:33 2023 +0800

    代码调整

commit 074453ece7
Author: weizhihong <weizhihong@joylink.club>
Date:   Fri Mar 31 16:52:08 2023 +0800

    【删除注释】
2023-04-12 18:34:06 +08:00
dong
54fb5eb47a Squashed commit of the following:
commit 6187b449c1
Author: dong <58670809@qq.com>
Date:   Fri Apr 7 15:22:33 2023 +0800

    代码调整

commit 074453ece7
Author: weizhihong <weizhihong@joylink.club>
Date:   Fri Mar 31 16:52:08 2023 +0800

    【删除注释】
2023-04-07 15:27:22 +08:00
fan
95b6d019dd Merge remote-tracking branch 'origin/test' 2023-04-06 17:32:19 +08:00
fan
ed1c4c0e53 Merge remote-tracking branch 'origin/test' 2023-03-23 17:51:52 +08:00
fan
6fd16fcc95 三方跳转调整 2023-03-13 15:23:19 +08:00
fan
8ec88a84a2 Merge remote-tracking branch 'origin/test' 2023-03-10 09:37:53 +08:00
fan
8e7b653bd3 设备管理配置调整 2023-03-01 15:53:20 +08:00
fan
710dd576d4 Merge remote-tracking branch 'origin/test' 2023-02-18 12:21:53 +08:00
fan
3e3d3622dc Merge remote-tracking branch 'origin/test' 2023-02-17 18:17:00 +08:00
dong
916688b47c Merge remote-tracking branch 'remotes/origin/test' 2023-01-16 18:04:58 +08:00
dong
1c2912285b Merge remote-tracking branch 'remotes/origin/test' 2023-01-16 15:52:07 +08:00
dong
47e87c0457 Merge remote-tracking branch 'remotes/origin/test' 2023-01-16 14:20:18 +08:00
fan
910e0c5712 北京一号线折返策略 2023-01-16 10:08:07 +08:00
fan
00866bde38 Merge remote-tracking branch 'origin/test' 2023-01-13 18:50:42 +08:00
fan
da4020e8c6 Merge remote-tracking branch 'origin/test' 2023-01-13 18:48:27 +08:00
fan
bf1d744b34 Merge remote-tracking branch 'origin/test' 2023-01-13 18:14:05 +08:00
dong
c9dd8752c1 Merge remote-tracking branch 'remotes/origin/test' 2023-01-13 16:09:21 +08:00
dong
22064af280 Merge remote-tracking branch 'remotes/origin/test' 2023-01-13 13:30:50 +08:00
fan
d9a06f3f1e Merge remote-tracking branch 'origin/test' 2023-01-13 13:11:24 +08:00
fan
a03b16e60a Merge remote-tracking branch 'origin/test' 2023-01-11 17:49:25 +08:00
fan
6897cb6c0b Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/scripts/ProjectConfig.js
#	src/utils/baseUrl.js
#	src/views/login/index.vue
#	src/views/newMap/displayBaSiDi/index.vue
#	src/views/newMap/displayCity/demonMenu.vue
#	src/views/newMap/displayCity/index.vue
#	src/views/system/deviceManage/index.vue
#	src/views/trainingPlatform/demonList.vue
2023-01-10 18:01:34 +08:00
fan
082c075290 成都工业跳转调度大赛 2022-11-21 18:52:54 +08:00
joylink_fanyuhong
3a35705576 苏安院调整 2022-11-20 14:28:28 +08:00
fan
313c587314 三方跳转不设置子系统节点 2022-10-28 14:21:35 +08:00
fan
401e09cdee 代码调整 2022-10-27 18:45:09 +08:00
fan
b35ca66983 京津冀职业发展联盟 2022-10-27 17:53:58 +08:00
fan
24d64b91ac Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/views/newMap/mapDraftPicture/createPicture.vue
2022-10-08 18:44:43 +08:00
fan
c5d4e425e4 红河财经 隐藏案例 2022-09-08 09:46:32 +08:00
fan
f9f05f12fd 红河财经CCTV调整 2022-09-01 16:14:55 +08:00
fan
e47e38003e 大屏显示调整 2022-08-25 15:10:26 +08:00
fan
6802e297a8 Merge remote-tracking branch 'origin/test' 2022-08-24 18:03:36 +08:00
ef7c7601b8 Merge remote-tracking branch 'origin/test' 2022-08-04 21:09:33 +08:00
5dda532435 Merge remote-tracking branch 'origin/master' 2022-08-04 21:09:10 +08:00
76de50fc6a Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/jmapNew/theme/datie_02/menus/menuButton.vue
2022-08-04 21:08:53 +08:00
fan
ff9101233c Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/jmapNew/theme/datie_02/menus/menuButton.vue
2022-07-26 18:08:14 +08:00
44363cc3e8 Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/jmapNew/config/skinCode/datie_02.js
2022-07-21 18:09:03 +08:00
fan
577c1f7141 长兴技术=》长兴技师 2022-07-20 10:06:46 +08:00
Yuan
fa8f5dca6c Merge branch 'test' 2022-07-15 18:17:16 +08:00
fan
d2cf5489b3 Merge remote-tracking branch 'origin/test' 2022-07-14 18:15:52 +08:00
fan
1fe561222c Merge remote-tracking branch 'origin/test' 2022-07-05 18:03:57 +08:00
fan
3e60f4b8e1 Merge remote-tracking branch 'origin/test' 2022-06-27 18:08:41 +08:00
fan
131e70c729 子系统栏显示调整 2022-06-27 13:22:43 +08:00
fan
a8ce60f33e 子系统栏显示调整 2022-06-27 13:10:02 +08:00
fan
15cf33c850 Merge remote-tracking branch 'origin/test' 2022-06-21 13:22:00 +08:00
fan
d568be81ec Merge remote-tracking branch 'origin/test' 2022-06-20 17:47:12 +08:00
fan
0929b54f9d 实训双击问题调整 2022-06-06 16:51:06 +08:00
fan
215dab7074 Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/jmapNew/theme/datie_02/menus/menuTrain.vue
2022-05-30 17:44:09 +08:00
fan
013e667452 实训仿真结束 退出实训界面 2022-05-30 17:38:16 +08:00
b05cedd44c Merge remote-tracking branch 'origin/master'
# Conflicts:
#	src/jmapNew/config/skinCode/datie_02.js
#	src/jmapNew/theme/datie_02/menus/menuButton.vue
#	src/jmapNew/theme/datie_02/menus/menuTrain.vue
2022-05-20 18:24:36 +08:00
b73395f840 Merge remote-tracking branch 'origin/test'
# Conflicts:
#	src/jmapNew/config/skinCode/datie_02.js
#	src/jmapNew/constant/deviceRender.js
#	src/jmapNew/constant/deviceType.js
#	src/jmapNew/parser/parser-graph.js
#	src/jmapNew/shape/graph/SaidLamp/EPickOrDepartArrow.js
#	src/jmapNew/shape/graph/SaidLamp/index.js
#	src/jmapNew/shape/graph/SignalButton/index.js
#	src/jmapNew/shape/graph/Station/index.js
#	src/jmapNew/shape/graph/index.js
#	src/jmapNew/theme/datie_02/menus/dialog/childDialog/passwordInputBox.vue
#	src/jmapNew/theme/datie_02/menus/index.vue
#	src/jmapNew/theme/datie_02/menus/menuButton.vue
#	src/jmapNew/theme/datie_02/menus/menuSection.vue
#	src/jmapNew/theme/datie_02/menus/menuSignal.vue
#	src/jmapNew/theme/datie_02/menus/menuStation.vue
#	src/jmapNew/theme/datie_02/menus/menuStationStand.vue
#	src/jmapNew/theme/datie_02/menus/menuSwitch.vue
#	src/jmapNew/theme/datie_02/menus/menuTrain.vue
#	src/jmapNew/theme/factory.js
#	src/scripts/cmdPlugin/OperationHandler.js
#	src/views/newMap/newMapdraft/mapoperate/controlLamp.vue
#	src/views/newMap/newMapdraft/mapoperate/models.js
#	src/views/newMap/newMapdraft/mapoperate/signalButton.vue
2022-05-20 18:24:17 +08:00
joylink_cuiweidong
b9fa32a96a Merge remote-tracking branch 'remotes/origin/test'
# Conflicts:
#	src/jmapNew/config/skinCode/datie_02.js
#	src/jmapNew/constant/deviceRender.js
#	src/jmapNew/constant/deviceType.js
#	src/jmapNew/parser/parser-graph.js
#	src/jmapNew/shape/graph/SaidLamp/EPickOrDepartArrow.js
#	src/jmapNew/shape/graph/SaidLamp/index.js
#	src/jmapNew/shape/graph/SignalButton/index.js
#	src/jmapNew/shape/graph/Station/index.js
#	src/jmapNew/shape/graph/index.js
#	src/jmapNew/theme/datie_02/menus/dialog/childDialog/passwordInputBox.vue
#	src/jmapNew/theme/datie_02/menus/index.vue
#	src/jmapNew/theme/datie_02/menus/menuButton.vue
#	src/jmapNew/theme/datie_02/menus/menuSection.vue
#	src/jmapNew/theme/datie_02/menus/menuSignal.vue
#	src/jmapNew/theme/datie_02/menus/menuStation.vue
#	src/jmapNew/theme/datie_02/menus/menuStationStand.vue
#	src/jmapNew/theme/datie_02/menus/menuSwitch.vue
#	src/jmapNew/theme/datie_02/menus/menuTrain.vue
#	src/jmapNew/theme/factory.js
#	src/scripts/cmdPlugin/OperationHandler.js
#	src/views/newMap/newMapdraft/mapoperate/controlLamp.vue
#	src/views/newMap/newMapdraft/mapoperate/models.js
#	src/views/newMap/newMapdraft/mapoperate/signalButton.vue
2022-05-12 11:38:28 +08:00
0cb4088f6c Merge remote-tracking branch 'origin/master' 2022-05-12 11:08:12 +08:00
joylink_cuiweidong
7677fa4607 代码调整 2022-05-12 11:03:35 +08:00
joylink_cuiweidong
226744e7f7 代码调整 2022-05-12 11:01:33 +08:00
joylink_cuiweidong
ad47f33d16 代码调整 2022-05-12 11:01:31 +08:00
joylink_cuiweidong
bf1886a534 代码调整 2022-05-12 11:01:31 +08:00
joylink_cuiweidong
f61785fc5e 代码调整 2022-05-12 11:01:30 +08:00
joylink_cuiweidong
d82ab8f93c 代码调整 2022-05-12 11:01:29 +08:00
joylink_cuiweidong
62be008849 代码调整 2022-05-12 11:01:28 +08:00
joylink_cuiweidong
25c8ddd667 代码调整 2022-05-12 11:01:27 +08:00
joylink_cuiweidong
62e0f34ef6 代码调整 2022-05-12 10:58:58 +08:00
joylink_cuiweidong
03611598e1 成绩统计代码调整 2022-05-12 10:57:23 +08:00
joylink_cuiweidong
fc9c148753 学生统计信息代码调整 2022-05-12 10:56:12 +08:00
joylink_cuiweidong
87dc324d74 代码调整 2022-05-12 10:55:50 +08:00
joylink_cuiweidong
e5240b10ca 代码调整 2022-05-12 10:54:35 +08:00
joylink_cuiweidong
f876c33603 学生统计页面添加 2022-05-12 10:54:08 +08:00
joylink_cuiweidong
a56505a3d0 成绩统计 代码调整 2022-05-12 10:52:48 +08:00
joylink_cuiweidong
ecb4c2569e 学生单次考试成绩 页面添加 2022-05-12 10:50:33 +08:00
fan
6ed22109af 大铁线路调整2 2022-04-18 14:57:12 +08:00
fan
7fbe309f70 大铁线路调整 2022-04-15 16:49:11 +08:00
fan
c8ba0b63b7 Merge remote-tracking branch 'origin/test' 2022-03-25 14:00:34 +08:00
fan
3fdff6d329 Merge remote-tracking branch 'origin/test' 2022-03-15 10:06:37 +08:00
joylink_fanyuhong
38b1beeef5 iscs调整 2022-01-20 19:07:15 +08:00
joylink_fanyuhong
4431fe9dd4 Merge remote-tracking branch 'origin/test' 2022-01-20 18:02:40 +08:00
joylink_fanyuhong
5bf48a83f0 Merge remote-tracking branch 'origin/test'
# Conflicts:
#	.env.production
2022-01-05 17:58:55 +08:00
joylink_fanyuhong
204995be22 Merge remote-tracking branch 'origin/test' 2021-12-29 14:04:20 +08:00
joylink_fanyuhong
958a469ba7 ip调整 2021-12-29 10:21:08 +08:00
joylink_fanyuhong
c1698252aa 正式ip调整 2021-12-29 10:04:07 +08:00
000cbada55 Merge remote-tracking branch 'origin/test' 2021-10-26 18:48:57 +08:00
505 changed files with 68666 additions and 6651 deletions

View File

@ -0,0 +1,52 @@
---
name: local-test分支构建发布到本地服务器
run-name: ${{ gitea.actor }} is testing out Gitea Actions
on:
push:
branches:
- local-test
jobs:
Build-Publish:
runs-on: joylink-local233
steps:
- name: 检出代码
uses: https://gitea.joylink.club/actions/checkout@v4
with:
submodules: recursive
- name: 设置node环境
uses: https://gitea.joylink.club/actions/local-setup-node@v0.1.1
with:
version: v14.21.3
cache: yarn
cache-dependency-path: yarn.lock
- name: 安装yarn,并build
run: |
node -v
npm config set registry https://registry.npmmirror.com
npm install --global yarn
yarn config set registry https://registry.npmmirror.com
yarn
yarn run buildas local-test
tar czvf ./dist-local-test.tar.gz ./dist
- name: 打包发送到服务器
uses: https://gitea.joylink.club/appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.LOCAL_233_SSH_HOST }}
username: ${{ secrets.LOCAL_233_SSH_USER }}
password: ${{ secrets.LOCAL_233_SSH_PASSWORD }}
port: ${{ secrets.LOCAL_233_SSH_PORT }}
source: ./dist-local-test.tar.gz
target: /home/minio/oss/rt-sim-training-client
overwrite: true
- name: SSH连接并解压发布
uses: https://gitea.joylink.club/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.LOCAL_233_SSH_HOST }}
port: ${{ secrets.LOCAL_233_SSH_PORT }}
username: ${{ secrets.LOCAL_233_SSH_USER }}
password: ${{ secrets.LOCAL_233_SSH_PASSWORD }}
script: |
cd /home/minio/oss/rt-sim-training-client
rm -rf /usr/local/joylink/client/cbtc
mkdir -p /usr/local/joylink/client
tar xz --strip 2 -C /usr/local/joylink/client -f dist-local-test.tar.gz

View File

@ -0,0 +1,52 @@
name: master分支构建发布到公网服务器
run-name: ${{ gitea.actor }} is testing out Gitea Actions
on:
push:
branches:
- master
jobs:
Build-Publish:
runs-on: joylink-local233
steps:
- name: 检出代码
uses: https://gitea.joylink.club/actions/checkout@v4
with:
submodules: recursive
- name: 设置node环境
uses: https://gitea.joylink.club/actions/local-setup-node@v0.1.1
with:
version: 'v14.21.3'
cache: 'yarn'
cache-dependency-path: 'yarn.lock'
- name: 安装yarn,并build
run: |
node -v
npm config set registry https://registry.npmmirror.com
npm install --global yarn
yarn config set registry https://registry.npmmirror.com
yarn
yarn run build
tar czvf ./dist-master.tar.gz ./dist
- name: 打包发送到服务器
uses: https://gitea.joylink.club/appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.PUB1_DOMAIN_SSH_HOST }}
port: ${{ secrets.PUB1_DOMAIN_SSH_PORT }}
username: ${{ secrets.PUB1_DOMAIN_SSH_USER }}
password: ${{ secrets.PUB1_DOMAIN_SSH_PASSWORD }}
source: ./dist-master.tar.gz
target: /mnt/data/published/rt-sim-training-client
overwrite: true
- name: SSH连接并解压发布
uses: https://gitea.joylink.club/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.PUB1_DOMAIN_SSH_HOST }}
port: ${{ secrets.PUB1_DOMAIN_SSH_PORT }}
username: ${{ secrets.PUB1_DOMAIN_SSH_USER }}
password: ${{ secrets.PUB1_DOMAIN_SSH_PASSWORD }}
script: |
cd /mnt/data/published/rt-sim-training-client
rm -rf /usr/local/joylink/client/cbtc
mkdir -p /usr/local/joylink/client
tar xz --strip 2 -C /usr/local/joylink/client -f dist-master.tar.gz

1
.gitignore vendored
View File

@ -4,7 +4,6 @@ dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
tests/**/coverage/
src/utils/baseUrl.js*

View File

@ -4,3 +4,6 @@ English | [简体中文](./README-zh.md)
Copyright (c) 2018-present Joylink
### 项目环境
- "node": "<=14.21.3";
- "webpack": ">=4 < 4.29";

View File

@ -19,6 +19,8 @@
},
"dependencies": {
"@stomp/stompjs": "^5.4.4",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^1.0.2",
"axios": "^0.18.0",
"dayjs": "^1.11.5",
"echarts": "^4.7.0",
@ -44,6 +46,7 @@
"vue-i18n": "^8.12.0",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.1.6",
"vue-video-player": "^5.0.1",
"vuedraggable": "^2.24.3",
"vuex": "^3.1.0",
"wangeditor": "^4.6.17",

416
src/api/contest.js Normal file
View File

@ -0,0 +1,416 @@
import request from '@/utils/request';
/**
* 获取竞赛试卷分页列表
* @param {Object} params
* @param {String} params.name 试卷名称
*/
export function getPaperList(params) {
return request({
url: '/api/exercise/race/paper/page',
method: 'GET',
params
});
}
/**
* 创建试卷
* @param {Object} data
* @param {String} data.name 试卷名称
* @param {String} data.desc 基础描述
* @param {Number} data.seasonId 所属赛季id
* @param {Boolean} data.supportCopy 是否支持拷贝
*/
export function createPaper(data) {
return request({
url: '/api/exercise/race/paper',
method: 'POST',
data
});
}
/**
* @param {Object} data 同创建试卷
* @param {Number} id 试卷id
*/
export function editPaper(id, data) {
return request({
url: `/api/exercise/race/paper/${id}`,
method: 'POST',
data
});
}
/**
* @param {Number} id 任务id
*/
export function deletePaper(id) {
return request({
url: `/api/exercise/race/paper/${id}`,
method: 'DELETE'
});
}
/**
* 获取竞赛试卷菜单
* @param {Object} params
* @param {String} params.group 分组ZZ=中职;GZ=高职
*/
export function getPaperMenu(params) {
return request({
url: '/api/exercise/race/paper/menu',
method: 'GET',
params
});
}
/**
* @param {Object} data
* @param {Array} data.modules 所有模块
* @param {Number} data.modules[i].module_name 模块名字
* @param {Number} data.modules[i].duration 考试总时间
* @param {Number} data.modules[i].group 任务分组
* @param {Number} data.modules[i].group.taskIds 此分组中的任务id
* @param {Number} data.modules[i].group.name 此组的名字
* @param {Number} data.modules[i].group.group 此分组的子分组
*/
export function paperModuleTaskSetting(paperId, data) {
return request({
url: `/api/exercise/race/paper/${paperId}/config`,
method: 'POST',
data
});
}
/**
* @param {Number} id 模块id
*/
export function getPaperDetail(id) {
return request({
url: `/api/exercise/race/paper/${id}`,
method: 'GET'
});
}
/**
* @param {Number} id 模块id
*/
export function copyPaper(id) {
console.log(id);
return request({
url: `/api/exercise/race/paper/${id}/copy`,
method: 'PUT'
});
}
/** 查看所有任务数据 */
export function getTaskTreeDatas() {
return request({
url: '/api/exercise/race/task/tree',
method: 'GET'
});
}
/**
* 创建任务
* @param {Object} data
* @param {String} data.name 任务名称
* @param {String} data.desc 基础描述
* @param {String} data.content 考核内容
* @param {String} data.standards 评价标准
* @param {Number} data.parentId 如果是子任务需要父任务的id
*/
export function createTask(data) {
return request({
url: '/api/exercise/race/task',
method: 'POST',
data
});
}
/**
* @param {Object} data 同创建任务
* @param {Number} id 任务id
*/
export function editTask(id, data) {
return request({
url: `/api/exercise/race/task/${id}`,
method: 'POST',
data
});
}
/**
* @param {Number} id 任务id
*/
export function deleteTask(id) {
return request({
url: `/api/exercise/race/task/${id}`,
method: 'DELETE'
});
}
/**
* @param {Number} id 任务id
*/
export function getTaskDetail(id) {
return request({
url: `/api/exercise/race/task/${id}`,
method: 'GET'
});
}
/**
* @param {Number} id 任务id
*/
export function getchildrenTaskDatas(id) {
return request({
url: `/api/exercise/race/task/${id}/children`,
method: 'GET'
});
}
/**
* @param {Array} data
* @param {Number} taskId 任务id
* @param {Number} data[i].bindId 绑定id根据bindtype来区分对应的id
* @param {String} data[i].bindType rule =0评分规则;scene=1场景
* @param {Number} data[i].status 0=绑定 1=解绑
*/
export function bindTask(taskId, data) {
return request({
url: `/api/exercise/race/task/${taskId}/bind`,
method: 'POST',
data
});
}
/**
* @param {Object} data
* @param {Number} data.group 分组 1-高职 2中职
* @param {String} data.term 赛季
* @param {String} data.code 编号
*/
export function addContestSeason(data) {
return request({
url: '/api/exercise/race/season',
method: 'post',
data
});
}
/**
* @param {Object} params
* @param {Number} params.group 分组 1-高职 2中职
* @param {String} params.term 赛季
* @param {String} params.code 编号
*/
export function queryContestSeasonPaged(params) {
return request({
url: '/api/exercise/race/season/page',
method: 'get',
params
});
}
/**
* @param {Object} data
* @param {Number} id 赛季id
* @param {String} data.group 分组 ZZ=中职GZ=高职
* @param {String} data.term 赛季
* @param {String} data.code 编号
*/
export function updateContestSeason(id, data) {
return request({
url: `/api/exercise/race/season/${id}`,
method: 'post',
data
});
}
/**
* @param {Number} id 赛季id
*/
export function deleteContestSeason(id) {
return request({
url: `/api/exercise/race/season/${id}`,
method: 'delete'
});
}
/**
* @param {Object} data
* @param {String} data.name 名称
*/
export function createContextScore(data) {
return request({
url: '/api/exercise/race/score',
method: 'post',
data
});
}
/**
* @param {Object} params
* @param {String} params.name 名称
*/
export function queryContextScorePaged(params) {
return request({
url: '/api/exercise/race/score/page',
method: 'get',
params
});
}
/**
* @param {Number} id 评分id
*/
export function deleteContextScore(id) {
return request({
url: `/api/exercise/race/score/${id}`,
method: 'delete'
});
}
/**
* @param {Number} id 评分id
* @param {Object} data
* @param {Array [object]} data.units 评分单元
* @param {String} data.units[0].text 文字描述
* @param {Number} data.units[0].sceneStepId 场景步骤ID
* @param {Number} data.units[0].score 分值
* @param {String} data.units[0].worker 作业程序
* @param {String} data.units[0].criteria 评分标准
*/
export function updateContextScoreDetail(id, data) {
return request({
url: `/api/exercise/race/score/edit/rule/${id}`,
method: 'post',
data
});
}
/**
* @param {Number} id 评分id
*/
export function getContextScoreDetail(id) {
return request({
url: `/api/exercise/race/score/${id}`,
method: 'get'
});
}
/**
* @param {Object} params
* @param {String} params.type 竞赛类型 local=场景;link=3D
*/
export function queryContestSencePaged(params) {
return request({
url: '/api/exercise/race/scene/page',
method: 'get',
params
});
}
/**
* @param {Number} id 场景id
*/
export function deleteContestSence(id) {
return request({
url: `/api/exercise/race/scene/${id}`,
method: 'delete'
});
}
/**
* @param {Number} id 场景id
*/
export function getContextSenceDetail(id) {
return request({
url: `/api/exercise/race/scene/${id}`,
method: 'get'
});
}
/**
* @param {Object} data
* @param {Number} data.traningPublishId 草稿实训场景id
* @param {String} data.name 大赛场景名称
*/
export function publishContextSence(data) {
return request({
url: `/api/exercise/race/scene/publish/training`,
method: 'post',
data
});
}
/**
* @param {Object} data
* @param {String} data.name 场景名称
* @param {String} data.type Video=视频
* @param {Object} data.scene 大赛场景
* @param {String} data.scene.url 地址
* @param {String} data.scene.fileName 文件名
*/
export function saveSceneVideo(data) {
return request({
url: `/api/exercise/race/scene/custom/edit`,
method: 'post',
data
});
}
/** 场景视频编辑 */
export function editSceneVideo(sceneId, data) {
return request({
url: `/api/exercise/race/scene/custom/${sceneId}/edit`,
method: 'post',
data
});
}
/**
* @param {String} paperId 试卷id
* @param {String} moduleId 模块id
*/
export function getTaskTree(paperId, moduleId) {
return request({
url: `/api/exercise/race/paper/${paperId}/module/${moduleId}/task`,
method: 'get'
});
}
/**
* @param {String} paperId 试卷id
* @param {String} moduleId 模块id
*/
export function beginContestExercise(paperId, moduleId) {
return request({
url: `/api/race/${paperId}/${moduleId}`,
method: 'POST'
});
}
/** 竞赛完成训练 */
export function finishContestExercise() {
return request({
url: '/api/race/finish',
method: 'PUT'
});
}
/** html
* @param {String} id 赛季id
* @param {String} data.htmlContent 内容
*/
export function editSeasonContent(id, data) {
return request({
url: `/api/exercise/race/season/${id}/html`,
method: 'post',
data
});
}
/** html
* @param {String} id 赛季id
*/
export function getSeasonContent(id) {
return request({
url: `/api/exercise/race/season/${id}/html`,
method: 'get'
});
}
export function getTheoryList() {
return request({
url: '/api/exercise/race/paper/questions',
method: 'get'
});
}

View File

@ -344,3 +344,13 @@ export function queryTagList(data) {
data
});
}
/**
* 获取试卷创建者list
*/
export function queryPaperCreatorList(data) {
return request({
url: `/api/v2/paper/composition/list/creatorInfo`,
method: 'POST',
data
})
}

View File

@ -323,3 +323,11 @@ export function isExistEmail(params) {
});
}
// 成工院第三方登录
export function cgyThirdLogin(data) {
return request({
url: '/api/login/cgy/third',
method: 'post',
data
});
}

View File

@ -15,3 +15,20 @@ export function selectQuestionTypeNum(companyId) {
method: 'get'
});
}
/** 加载场景 */
export function loadRace(simulationId, sceneId) {
return request({
url: `/api/race/${simulationId}/load/${sceneId}`,
method: 'put'
});
}
/** 完成任务 */
export function overTask(taskId, data) {
return request({
url: `/api/race/${taskId}/finish`,
method: 'put',
data
});
}

View File

@ -523,29 +523,6 @@ export function sandTableTrainControl(group, params) {
params
});
}
/** 设置轨道占用 */
export function setOccupy(simulationId, sectionCodes) {
return request({
url: `/api/sandTable/${simulationId}/occupy`,
method: 'put',
params: { sectionCodes, occupy: true }
})
}
/** 按计划运行 */
export function sandTableRunAsPlan(simulationId, data) {
return request({
url: `/api/sandTable/${simulationId}/runAsPlan`,
method: 'put',
data,
})
}
/** 获取运行计划详情 */
export function getSandTableRunPlanDetail(simulationId) {
return request({
url: `/api/sandTable/${simulationId}/runPlanDetail`,
method: 'get',
});
}
/** 条件查询仿真中的ISCS资源 */
export function queryIscsResourcesByGroup(group, params) {
return request({
@ -606,3 +583,27 @@ export function enterSimulationByTeacher(group) {
method: 'post'
});
}
/** 切换角色后触发消息 */
export function getUnreceivedMessages(simulationId, memberId) {
return request({
url: `/simulation/${simulationId}/${memberId}/unreceivedMessages`,
method: 'get'
});
}
/** 控制叶佳供货的小车 */
export function controlYjTrain(simulationId, right) {
return request({
url: `/api/realDevice/${simulationId}/train`,
method: 'put',
params: { right }
});
}
/** 创建仿真不通过功能id */
export function createSimulationNoFunction(mapId, data) {
return request({
url: `/simulation/new/${mapId}`,
method: 'post',
data
});
}

View File

@ -32,14 +32,21 @@ export function updateTraining(data) {
data
});
}
/** 更新实训标签 */
export function updateTrainingLabel(data) {
/** 更新发布实训信息(标签 描述, 标题) */
export function updateTrainingInfo(data) {
return request({
url: `/api/v2/training/published/update/label`,
url: `/api/v2/training/published/update`,
method: 'put',
data
});
}
/** 已发布实训转为草稿 */
export function saveAsTrainingDraft(trainingId) {
return request({
url: `/api/v2/training/published/${trainingId}/saveAsDraft`,
method: 'post'
});
}
/** 查询步骤列表 */
export function getTrainingStepList(trainingId) {
return request({

BIN
src/assets/bg_pis.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
src/assets/bg_tms.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -4,10 +4,10 @@
<qrcode-vue v-loading="loading" :value="url" :size="400" />
</div>
<div v-if="group" class="qrcodeGroup">
<span>{{ 'Simulation number:'+group }}</span>
<span>{{ $t('global.roomId')+group }}</span>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="doClose">Close</el-button>
<el-button @click="doClose">{{ $t('global.close') }}</el-button>
</span>
</el-dialog>
</template>

View File

@ -32,7 +32,7 @@ import trainingManage from './trainingManage';
import newRouter from './newRouter';
export default {
...enLocale,
enLocale,
map,
global,
router,

View File

@ -38,6 +38,12 @@ export default {
permissionManage: 'Permission',
authorityTransferManage: 'Privilege distribution management',
userRulesManage: 'User Rights Statistics',
contestDataManage:'Contest data management',
contestSubjectManage:'contest subject management',
contestTaskManage:'contest task management',
contestSceneManage:'contest scene management',
contestTaskScoreManage:'contest task score management',
contestSeasonManage:'contest season management',
fileManage: 'File Manage',
frontResourceManage: 'Front-End Resource Management',
iscsPrerecordManage: 'ISCS Advance record management',

View File

@ -1,110 +1,112 @@
export default {
homePage: 'Home',
homePage: 'Home',
mapManage: 'Map',
skinManage: 'Skin management',
mapDraw: 'Map draw',
runPlanManage: 'Run plan',
productEdit: 'Product editor',
mapManage: 'Map',
skinManage: 'Skin management',
mapDraw: 'Map draw',
runPlanManage: 'Run plan',
productEdit: 'Product editor',
newDesignEditor: 'Editor',
newDesignEditorList: 'Editor List',
newDesignDraftEditorList: 'Draft Editor List',
uploadPdf: 'Upload Pdf',
fileManage: 'File Manage',
newDesignEditor: 'Editor',
newDesignEditorList: 'Editor List',
newDesignDraftEditorList: 'Draft Editor List',
uploadPdf: 'Upload Pdf',
fileManage: 'File Manage',
designhomePage: 'Public map',
designUserPage: 'Personal map',
newDesignUserPage: 'Personal map',
designhomePage: 'Public map',
designUserPage: 'Personal map',
newDesignUserPage: 'Personal map',
lessaonManage: 'Lesson',
lessonEdit: 'Lesson editor',
trainingRecord: 'Trainning recording',
trainingRule: 'Training rules',
trainingManage: 'Training management',
taskManage: 'Task management',
scriptManage: 'Script',
lessaonManage: 'Lesson',
lessonEdit: 'Lesson editor',
trainingRecord: 'Trainning recording',
trainingRule: 'Training rules',
trainingManage: 'Training management',
taskManage: 'Task management',
scriptManage: 'Script',
teachSystem: 'Teaching',
teachSystem: 'Teaching',
examSystem: 'Examination',
examSystem: 'Examination',
demonstrationSystem: 'Simulation',
demonstrationSystem: 'Simulation',
dpSystem: 'Large screen',
dpSystem: 'Large screen',
planSystem: 'Lian plan',
planSystem: 'Lian plan',
replayManage: 'Playback',
replayManage: 'Playback',
permissionManage: 'Permission',
selfPermission: 'My Permission',
permissionManage: 'Permission',
selfPermission: 'My Permission',
pulishManage: 'Publication',
publishMapManage: 'Publishing map management',
productStateManage: 'Product state management',
publishLessonManage: 'Publishing lesson management',
runPlanTemplateManage: 'Template plan management',
runPlanCommonManage: 'Loading Plan Managemen',
runPlanEveryDayManage: 'Daily plan Management',
examRuleManage: 'Management of examination rules',
pulishManage: 'Publication',
publishMapManage: 'Publishing map management',
productStateManage: 'Product state management',
publishLessonManage: 'Publishing lesson management',
runPlanTemplateManage: 'Template plan management',
runPlanCommonManage: 'Loading Plan Managemen',
runPlanEveryDayManage: 'Daily plan Management',
examRuleManage: 'Management of examination rules',
orderAuthorityManage: 'Order&Authority',
commodityManage: 'Commodity management',
orderManage: 'Order management',
authorityManage: 'authority management',
authorityTransferManage: 'Privilege distribution management',
userRulesManage: 'User Rights Statistics',
addCommodity: 'Adding goods',
addOrder: 'Adding orders',
addCoursePermissions: 'Adding course permissions',
orderAuthorityManage: 'Order&Authority',
commodityManage: 'Commodity management',
orderManage: 'Order management',
authorityManage: 'authority management',
authorityTransferManage: 'Privilege distribution management',
userRulesManage: 'User Rights Statistics',
addCommodity: 'Adding goods',
addOrder: 'Adding orders',
addCoursePermissions: 'Adding course permissions',
systemManage: 'System',
dataDictionary: 'Data dictionary',
dataDictionaryDetails: 'Data dictionary details',
userManage: 'user management',
loginUserManage: 'login user Manage',
cacheManage: 'cache management',
userTrainingManage: 'User training management',
userExamManage: 'User examination management',
userSimulationManage: 'User simulation management',
existingSimulation: 'Existence simulation management',
ibpDraw: 'Ibp Draw',
trainingPlatform: 'trainingPlatform',
releaseApplication: 'Release application',
courseApplication: 'Course release application',
scriptReleaseApplication: 'Script release application',
runGraphReleaseApplication: 'Run graph release application',
subsystemGeneration: 'Subsystem generation',
newsBulletin: 'New bulletin',
notificationBulletin: 'Systematic notification',
commandDictionary: 'Command dictionary',
configLine: 'Line management',
deviceManage: 'Device management',
iscsDraw: 'Iscs Draw',
iscsSystem: 'Iscs System',
studentManage: 'Student manage',
examDetail: 'Exam detail',
raceManage: 'Race manage',
practiceManage: 'Practice manage',
bankManage: 'Bank manage',
sceneManage: 'Scene manage',
companyManage: 'Company manage',
authorApply: 'Grant application',
AuthorList: 'Authorization code list',
questionsRuleManage: 'Question rule manage',
preTheoryData: 'Pre Theory Data',
boardManage: 'Message Board Manage',
publishIBPManage: 'publish IBP Manage',
publishISCSManage: 'publish ISCS Manage',
publishTrainingManage: 'publish Training Manage',
voiceTraining: 'Voice Training',
mapGroup: 'Map Group',
drawingMange: 'Drawing Mange',
projectServer: 'Project Server',
audioResourcesManage: 'Audio Resources Manage',
iscsDeviceManage: 'ISCS Device Manage',
iscsResourcesManage: 'ISCS Resources Manage',
projectManage: 'Project Manage',
frontProjectConfigManage: 'Front Project Config Manage',
}
systemManage: 'System',
dataDictionary: 'Data dictionary',
dataDictionaryDetails: 'Data dictionary details',
userManage: 'user management',
loginUserManage: 'login user Manage',
cacheManage: 'cache management',
userTrainingManage: 'User training management',
userExamManage: 'User examination management',
userSimulationManage: 'User simulation management',
existingSimulation: 'Existence simulation management',
ibpDraw: 'Ibp Draw',
trainingPlatform: 'trainingPlatform',
releaseApplication: 'Release application',
courseApplication: 'Course release application',
scriptReleaseApplication: 'Script release application',
runGraphReleaseApplication: 'Run graph release application',
subsystemGeneration: 'Subsystem generation',
newsBulletin: 'New bulletin',
notificationBulletin: 'Systematic notification',
commandDictionary: 'Command dictionary',
configLine: 'Line management',
deviceManage: 'Device management',
iscsDraw: 'Iscs Draw',
iscsSystem: 'Iscs System',
studentManage: 'Student manage',
examDetail: 'Exam detail',
raceManage: 'Race manage',
practiceManage: 'Practice manage',
bankManage: 'Bank manage',
sceneManage: 'Scene manage',
companyManage: 'Company manage',
authorApply: 'Grant application',
AuthorList: 'Authorization code list',
questionsRuleManage: 'Question rule manage',
preTheoryData: 'Pre Theory Data',
boardManage: 'Message Board Manage',
publishIBPManage: 'publish IBP Manage',
publishISCSManage: 'publish ISCS Manage',
publishTrainingManage: 'publish Training Manage',
voiceTraining: 'Voice Training',
mapGroup: 'Map Group',
drawingMange: 'Drawing Mange',
projectServer: 'Project Server',
audioResourcesManage: 'Audio Resources Manage',
iscsDeviceManage: 'ISCS Device Manage',
iscsResourcesManage: 'ISCS Resources Manage',
projectManage: 'Project Manage',
frontProjectConfigManage: 'Front Project Config Manage',
training: 'Training',
theory: 'Theory'
};

View File

@ -51,7 +51,7 @@ export default {
menuSignal: {
routeSelect: '进路选排',
routeCancel: '进路取消',
signalBlock: '信号封',
signalBlock: '信号封',
signalDeblock: '信号解封',
signalReopen: '信号重开',
guideRouteHandle: '引导进路办理',

View File

@ -1,7 +1,7 @@
export default {
simulation: 'Simulation',
simulation: '仿真',
multiplayerSimulation: '多人仿真',
regulationSimulation: 'Regulation of the simulation',
regulationSimulation: '监管仿真',
teachingManagement: '教学管理',
classroom: '班级管理',
student: '学生管理',
@ -38,6 +38,12 @@ export default {
permissionManage: '权限管理',
authorityTransferManage: '权限分发管理',
userRulesManage: '用户权限管理',
contestDataManage:'竞赛数据管理',
contestSubjectManage:'竞赛题目管理',
contestTaskManage:'竞赛任务管理',
contestSceneManage:'竞赛场景管理',
contestTaskScoreManage:'竞赛任务评分管理',
contestSeasonManage:'竞赛赛季管理',
fileManage: '文件管理',
frontResourceManage: '前端资源管理',
iscsPrerecordManage: 'ISCS预录管理',

View File

@ -1,114 +1,116 @@
export default {
homePage: '首页',
homePage: '首页',
designhomePage: '公共地图',
designUserPage: '个人地图',
newDesignUserPage: '地图绘制',
newDesignEditor: '编辑器',
newDesignEditorList: '图文列表',
newDesignDraftEditorList: '文章草稿',
uploadPdf: 'PDF上传',
fileManage: '文件管理',
designhomePage: '公共地图',
designUserPage: '个人地图',
newDesignUserPage: '地图绘制',
newDesignEditor: '编辑器',
newDesignEditorList: '图文列表',
newDesignDraftEditorList: '文章草稿',
uploadPdf: 'PDF上传',
fileManage: '文件管理',
mapManage: '地图管理',
skinManage: '皮肤管理',
mapDraw: '地图绘制',
runPlanManage: '运行图管理',
productEdit: '产品编辑',
mapManage: '地图管理',
skinManage: '皮肤管理',
mapDraw: '地图绘制',
runPlanManage: '运行图管理',
productEdit: '产品编辑',
lessaonManage: '课程管理',
trainingRecord: '实训录制',
taskManage: '任务管理',
trainingRule: '操作定义',
trainingManage: '实训管理',
lessonEdit: '课程编辑',
scriptManage: '剧本管理',
lessaonManage: '课程管理',
trainingRecord: '实训录制',
taskManage: '任务管理',
trainingRule: '操作定义',
trainingManage: '实训管理',
lessonEdit: '课程编辑',
scriptManage: '剧本管理',
teachSystem: '教学系统',
teachSystem: '教学系统',
examSystem: '考试系统',
examSystem: '考试系统',
demonstrationSystem: '仿真系统',
demonstrationSystem: '仿真系统',
dpSystem: '大屏系统',
dpSystem: '大屏系统',
planSystem: '琏计划',
planSystem: '琏计划',
replayManage: '回放管理',
replayManage: '回放管理',
permissionManage: '权限管理',
selfPermission: '我的权限',
permissionManage: '权限管理',
selfPermission: '我的权限',
pulishManage: '发布内容管理',
publishMapManage: '发布地图管理',
productStateManage: '产品状态管理',
publishLessonManage: '发布课程管理',
runPlanTemplateManage: '模板运行图管理',
runPlanCommonManage: '加载计划运行图管理',
runPlanEveryDayManage: '每日运行图管理',
examRuleManage: '试卷规则管理',
pulishManage: '发布内容管理',
publishMapManage: '发布地图管理',
productStateManage: '产品状态管理',
publishLessonManage: '发布课程管理',
runPlanTemplateManage: '模板运行图管理',
runPlanCommonManage: '加载计划运行图管理',
runPlanEveryDayManage: '每日运行图管理',
examRuleManage: '试卷规则管理',
orderAuthorityManage: '订单权限管理',
commodityManage: '商品管理',
orderManage: '订单管理',
authorityManage: '权限管理',
authorityTransferManage: '权限分发管理',
userRulesManage: '用户权限统计',
addCommodity: '添加商品',
addOrder: '添加订单',
addCoursePermissions: '添加课程权限',
orderAuthorityManage: '订单权限管理',
commodityManage: '商品管理',
orderManage: '订单管理',
authorityManage: '权限管理',
authorityTransferManage: '权限分发管理',
userRulesManage: '用户权限统计',
addCommodity: '添加商品',
addOrder: '添加订单',
addCoursePermissions: '添加课程权限',
systemManage: '系统管理',
dataDictionary: '数据字典',
dataDictionaryDetails: '数据字典明细',
userManage: '用户管理',
loginUserManage: '在线用户管理',
cacheManage: '缓存管理',
userTrainingManage: '用户实训统计',
userExamManage: '用户考试统计',
userSimulationManage: '用户仿真统计',
existingSimulation: '存在仿真管理',
systemManage: '系统管理',
dataDictionary: '数据字典',
dataDictionaryDetails: '数据字典明细',
userManage: '用户管理',
loginUserManage: '在线用户管理',
cacheManage: '缓存管理',
userTrainingManage: '用户实训统计',
userExamManage: '用户考试统计',
userSimulationManage: '用户仿真统计',
existingSimulation: '存在仿真管理',
ibpDraw: 'Ibp盘绘制',
trainingPlatform: '实训平台',
releaseApplication: '发布申请',
courseApplication: '课程发布申请',
scriptReleaseApplication: '剧本发布申请',
runGraphReleaseApplication: '运行图发布申请',
subsystemGeneration: '子系统生成',
newsBulletin: '消息公告',
notificationBulletin: '系统通知',
commandDictionary: '指令字典',
configLine: '线路管理',
deviceManage: '设备管理',
iscsDraw: 'Iscs绘制',
iscsSystem: 'Iscs系统',
studentManage: '学生管理',
competitionManage: '竞赛管理',
refereeJManage: '仿真管理',
homeJsxt: '首页',
examDetail: '考试详情',
raceManage: '竞赛管理',
recaList: '报名列表',
bankManage: '题库列表',
practiceManage: '实操列表',
sceneManage: '场景列表',
companyManage: '组织管理',
authorApply: '授权申请',
AuthorList: '授权列表',
questionsRuleManage: '出题规则管理',
preTheoryData: '理论导入预处理',
boardManage: '留言板管理',
publishIBPManage: '发布IBP盘管理',
publishISCSManage: '发布ISCS管理',
publishTrainingManage: '发布实训管理',
voiceTraining: '语音训练',
mapGroup: '地图分组',
drawingMange: '图纸管理',
projectServer: '项目域名',
audioResourcesManage: '音频资源管理',
iscsDeviceManage: 'ISCS设备管理',
iscsResourcesManage: 'ISCS资源管理',
projectManage: '项目管理',
frontProjectConfigManage: '前端项目配置管理',
}
ibpDraw: 'Ibp盘绘制',
trainingPlatform: '实训平台',
releaseApplication: '发布申请',
courseApplication: '课程发布申请',
scriptReleaseApplication: '剧本发布申请',
runGraphReleaseApplication: '运行图发布申请',
subsystemGeneration: '子系统生成',
newsBulletin: '消息公告',
notificationBulletin: '系统通知',
commandDictionary: '指令字典',
configLine: '线路管理',
deviceManage: '设备管理',
iscsDraw: 'Iscs绘制',
iscsSystem: 'Iscs系统',
studentManage: '学生管理',
competitionManage: '竞赛管理',
refereeJManage: '仿真管理',
homeJsxt: '首页',
examDetail: '考试详情',
raceManage: '竞赛管理',
recaList: '报名列表',
bankManage: '题库列表',
practiceManage: '实操列表',
sceneManage: '场景列表',
companyManage: '组织管理',
authorApply: '授权申请',
AuthorList: '授权列表',
questionsRuleManage: '出题规则管理',
preTheoryData: '理论导入预处理',
boardManage: '留言板管理',
publishIBPManage: '发布IBP盘管理',
publishISCSManage: '发布ISCS管理',
publishTrainingManage: '发布实训管理',
voiceTraining: '语音训练',
mapGroup: '地图分组',
drawingMange: '图纸管理',
projectServer: '项目域名',
audioResourcesManage: '音频资源管理',
iscsDeviceManage: 'ISCS设备管理',
iscsResourcesManage: 'ISCS资源管理',
projectManage: '项目管理',
frontProjectConfigManage: '前端项目配置管理',
training: '实训',
theory: '理论'
};

View File

@ -9,7 +9,15 @@ const mapDeviceStyle = {
'09': 'xian_02',
'10': 'xian_01', // 西安一号线
'11': 'xian_01', // 西安三号线
'12': 'ningbo_03' // 宁波三号线
'12': 'ningbo_03', // 宁波三号线
'13': 'race_01', // 2020国赛线路
'14':'nanjing_02', // 南京二号线
'15': 'datie_01', // 大铁线路一
'16': 'datie_02', // 大铁线路二
'17':'datie_tky', // 铁科院大铁线路
'18':'datie_jd1a',
'19': 'datie_ksk', // 大铁 卡斯柯
'20': 'ningbo_01'
};
export function selectLineCode(code) {

View File

@ -396,7 +396,7 @@ export function JobPaneData() {
],
},
{
name:"调度",
name:"电调度",
value:"dldd",
text:"负责供电系统的正常运行。",
picurl:"",

View File

@ -17,7 +17,8 @@ const mapDeviceStyle = {
'16': 'datie_02', // 大铁线路二
'17':'datie_tky', // 铁科院大铁线路
'18':'datie_jd1a',
'19': 'datie_ksk' // 大铁 卡斯柯
'19': 'datie_ksk', // 大铁 卡斯柯
'20': 'ningbo_special'
};
export function selectLineCode(code) {

View File

@ -346,14 +346,15 @@ class SkinCode extends defaultStyle {
this[deviceType.StationTurnBack] = { // 站后折返
lamp: {
fill: '#f1f1f1', // 填充色
radiusR: 7 // 控制灯大小
fill: '#ccc', // 填充色
radiusR: 6,
otherFill: '#0F0' // 控制灯大小
},
text: {
titleTextShow: false,
fontWeight: 580,
fontSize: 10,
distance: 10
distance: 5
},
rect: {
fill: 'rgba(0,0,0,0)',

View File

@ -415,24 +415,24 @@ class SkinCode extends defaultStyle {
lineWidth: 1
},
emergencyControl: { // 紧急站控
show: true,
offset: { x: 10, y: 0 },
text: 'Emergency Ctrl',
show: false,
offset: { x: 0, y: 0 },
text: '紧急站控',
arrowShow: false,
grayColor: '#7F7F7F'
},
centerControl: { // 中控
show: true,
offset: { x: -190, y: 0 },
text: 'Center Ctrl',
show: false,
offset: { x: 0, y: 0 },
text: '中控',
buttonShow: false,
arrowShow: false,
grayColor: '#7F7F7F'
},
substationControl: { // 站控按钮
show: true,
offset: { x: -160, y: 0 },
text: 'Station Ctrl',
show: false,
offset: { x: 0, y: 0 },
text: '站控',
arrowShow: false,
grayColor: '#7F7F7F'
},
@ -444,34 +444,34 @@ class SkinCode extends defaultStyle {
grayColor: '#7F7F7F'
},
veryControl: {
show: false,
offset: { x: 50, y: 0 },
show: true,
offset: { x: 0, y: 0 },
lightColor: '#f00',
defaultColor: '#7F7F7F',
text: 'Very station controlled'
text: '非常站控'
},
selfDiscipline: {
show: true,
offset: { x: 0, y: 0 },
text: '允许自律',
defaultColor: '#7F7F7F',
lightColor: '#ff0'
},
// selfDiscipline: {
// show: false,
// offset: { x: -140, y: 0 },
// text: 'Self-regulation allowed',
// defaultColor: '#7F7F7F',
// lightColor: '#ff0'
// },
selfDisciplineControl: {
show: false,
offset: { x: -50, y: 0 },
show: true,
offset: { x: 0, y: 0 },
lightColor: '#0f0',
defaultColor: '#7F7F7F',
text: 'Self-discipline control'
text: '自律控制'
},
veryControlButton: {
offset: { x: 0, y: 0 },
text: '非常站控',
lightColor: '#ff0',
border:true, // 有边框
borderLine:1,
defaultColor: '#ccc'
},
// veryControlButton: {
// offset: { x: 140, y: 0 },
// text: 'Very station controlled',
// lightColor: '#ff0',
// border:true, // 有边框
// borderLine:1,
// defaultColor: '#ccc'
// },
selfDisciplineThree: {
offset: { x: 0, y: 0 },
text: '分散自律',
@ -487,41 +487,27 @@ class SkinCode extends defaultStyle {
},
planControl: {
show: true,
offset: { x: -20, y: 0 },
text: 'Plan Ctrl',
offset: { x: 0, y: 0 },
text: '计划控制',
lightColor: '#0f0',
defaultColor: '#7F7F7F'
},
centerCommunication: {
show: true,
offset: { x: 100, y: 0 },
text: 'COMM',
offset: { x: 0, y: 30 },
text: '中心通信',
lightColor: '#FF0000',
defaultColor: '#0f0'
},
etcs2: {
show: true,
offset: { x: 40, y: 0 },
text: 'ETCS-2',
lightColor: '#FF0000',
defaultColor: '#0f0'
},
etcs3: {
show: true,
offset: { x: 100, y: 0 },
text: 'ETCS-3',
lightColor: '#FF0000',
defaultColor: '#ccc'
},
selfDisciplineCommunication: {
show: false,
show: true,
offset: { x: 0, y: 30 },
text: '自律机通信',
lightColor: '#7F7F7F',
defaultColor: '#0f0'
},
allowedTurnBack: {
show: false,
show: true,
offset: { x: 0, y: 30 },
text: '允许转回',
lightColor: '#ff0',
@ -861,18 +847,16 @@ class SkinCode extends defaultStyle {
trainBody: {
fontFamily: 'consolas',
trainBodyLineWidth: 1, // 车身line宽
changeTrainWidth: true, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
changeTrainWidth: false, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
specialTrainType: [
{
type: '03',
serviceNumber: '---',
// nameFormat: 'groupNumber:serviceNumber'
nameFormat:'groupNumber'
nameFormat: 'groupNumber:serviceNumber'
},
{
type: '03',
// nameFormat: 'serviceNumber:trainNumber'
nameFormat:'groupNumber'
nameFormat: 'serviceNumber:trainNumber'
}
], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
@ -881,7 +865,7 @@ class SkinCode extends defaultStyle {
trainSidelineColor: '#F00',
trainSidelineStopColor: '#000',
// trainNameFormat: 'serviceNumber:targetCode'// 列车显示格式
trainNameFormat:'groupNumber'
trainNameFormat:'tripNumber'
},
directionArrow: {
},
@ -970,15 +954,15 @@ class SkinCode extends defaultStyle {
directionType: [
{
type: 1,
lineLShow: false,
lineRShow: false,
lineLShow: true,
lineRShow: true,
arrowLShow: false,
arrowRShow: true
},
{
type: 0,
lineLShow: false,
lineRShow: false,
lineLShow: true,
lineRShow: true,
arrowLShow: true,
arrowRShow: false
}

View File

@ -189,6 +189,13 @@ class SkinCode extends defaultStyle {
},
lowButton:{
display: false // 现地 信号机按钮
},
transmission: { // 传输信号机
fillColor: '#f00',
fillColorVirtual: '#f00',
sideLength: 20,
textColor: '#fff',
strokeColor: '#00FFFF'
}
};
@ -441,7 +448,8 @@ class SkinCode extends defaultStyle {
monolockLocationColor: '#ea282c', // 道岔单锁'定位'颜色
monolockInversionColor: '#ea282c', // 道岔单锁'反位'颜色
block: true, // 封锁名称
faultFlashing: true // 故障闪烁
faultFlashing: true, // 故障闪烁
lossRect: true // 道岔失表矩形
},
sectionAction: {
flag: false, // 道岔 关联区段显示

View File

@ -192,6 +192,7 @@ class SkinCode extends defaultStyle {
closeSignalVerColor: '#FF1F10', // 关闭信号 灯柱竖柱颜色 level 1
guideSignalVerColor: '#FFFF00', // 引导信号控制级 灯柱竖柱颜色 level 2
autoRouteVerColor: '#9DFF6E', // 联锁自动进路颜色
atpLevelColor: '#009600', // ATP级别灯柱颜色
standardVerticalShape: '8', // 灯柱 竖杆 8边型
standardLength: 12, // 高柱长度
standardHeight: 5, // 灯柱高度
@ -561,7 +562,7 @@ class SkinCode extends defaultStyle {
this[deviceType.Switch] = {
shapeFlash: true, // 道岔转动失去表示 道岔遮罩删除
faultNoHandle: true, // 南京二 道岔长闪 道岔无状态 道岔区段 bc 闪烁
faultNoHandle: false, // 南京二 道岔长闪 道岔无状态 道岔区段 bc 闪烁 (南京叶老师要求有短闪)
text: {
show: true, // 道岔名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称

View File

@ -0,0 +1,870 @@
import defaultStyle from '../defaultStyle';
import deviceType from '../../constant/deviceType';
class SkinCode extends defaultStyle {
constructor() {
super();
this.fontFamily = '宋体';
this[deviceType.Section] = {
elemnetType:['name', 'standTrackText', 'reentryTrackText', 'transferTrackText', 'destinationText', 'line', 'separator', 'speedLimit'],
active: {
routeColor: false // 进路触发颜色
},
name: {
z: 10,
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 10, // 文字离区段距离
fontSize: 12, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: 'lightgreen', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle', // 文字垂直对齐方式
approachColor: '#FFFFFF'
},
logicText: { // 逻辑区段名称
z: 10,
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 12, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
standTrackText: { // 站台
z: 10,
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 24, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
reentryTrackText: { // 折返
z: 10,
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 36, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
transferTrackText: { // 转换轨
z: 10,
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 36, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
destinationText: { // 目的地
z: 10,
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
distance: 12, // 文字离区段距离
fontSize: 11, // 字体大小
fontWeight: 'bold', // 字体粗细
fontColor: 'yellow', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
},
line: {
z: 0,
width: 5, // 区段宽度
beyondWidth: 0, // 区段宽超出宽度
invadeColor: '#FFFFFF', // 区段侵入颜色
spareColor: '#5578B6', // 区段空闲颜色
communicationOccupiedColor: 'red', // 区段通信车占用颜色 // 调整 未确定
unCommunicationOccupiedColor: '#FF0000', // 区段非通讯车占用颜色
routeLockColor: '#00ff00', // 区段进路锁定颜色
faultLockColor: 'white', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
blockColor: '#d659d6', // 区段封锁颜色(淡紫色)
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
invalidColor: '#AC8F40', // 计轴故障颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#03C85C', // 区段保护锁闭 延续保护
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: 'white' // 逻辑区段名称颜色 (未用)
},
speedLimit: { // 限速元素
z: 2,
width: 1, // 限速线的宽度
distance: 5, // 限速线距离区段距离
lineColor: '#C0C000', // 限速线颜色 (黄色透明光)
nameShow: false // 名称显示
},
separator: {
z: 3, // 分割符层级
width: 1.5, // 物理区段分隔符宽度
logicWidth:1.5, // 逻辑区段分隔符宽度
endWidth: 1.5, // 尽头分隔符宽度
endColor: '#FFFFFF', // 尽头分隔符颜色
color: 'white', // 区段边界符颜色
halfHeight: 5 // 区段分隔符高度的一半
},
block: {
blockGlint: true // 区段封锁闪烁显示
},
trainPosition:{
display: false // 列车实时位置显示
},
mouseOverStyle: {
borderColor: '#fff',
borderBackgroundColor: '#22DFDF',
textShadowColor: '#22DFDF',
nameShow: true,
nameBackgroundColor: '#000',
lineDash: [3, 3],
lineWidthMore: 2.5
}
};
this[deviceType.Signal] = {
distance: 8, // 设备距离区段的距离
post: {
standardLength: 6, // 高柱长度
standardHeight: 6, // 灯柱高度
standardColor: '#C0C0C0', // 灯柱颜色
standardVerticalWidth: 2, // 灯柱竖杆宽度
standardRailWidth: 2, // 灯柱横杆宽度
approachLockColor: '#FFFF00' // 接近锁闭灯柱颜色
},
text: {
show: true, // 信号机名称显示
distance: 3, // 文字和灯杆的距离
isAlignCenter: false, // 信号字体对其方式
fontSize: 11, // 信号机名称字体大小
fontWeight: 'bold', // 信号机名称字体粗细
defaultColor: 'white', // 信号灯字体默认色
blockColor: '#EF0C08', // 信号灯字体锁定颜色
checkColor: '#00FF00' // 信号保护区段检查颜色
},
lamp: {
bgShow: false, // 是否被选中
guidName: 'double', // 默认引导类型
borderVariable: true, // 信号灯边框可变
stopWidth: 2, // 禁止线宽度
borderWidth: 2, // 信号灯边框线宽度
borderColor: '#EF0C08', // 信号灯边框线颜色
radiusR: 5, // 信号灯半径
grayColor: '#C0C0C0', // 信号灯灰色
redColor: 'red', // 信号灯红色
greenColor: 'green', // 信号灯绿色
yellowColor: 'yellow', // 信号灯黄色
whiteColor: '#FFFFFF', // 信号灯白色
blueColor: '#0070C0', // 信号灯蓝色
blockColor: '#339933', // 信号灯墨绿色
blockFlash: true // 信号机封锁闪烁
},
route: {
direction: false, // 自动通过方向
radiusR: 8, // 自动通过三角半径
offset: { x: 2, y: 0 }, // 自动通过偏移量
routeColor: '#00FF00' // 自动进路
},
auto: {
signalFrontTriangle: true, // 信号灯前三角展示
direction: true, // 自动通过方向
offset: { x: 4, y: 0 }, // 自动通过偏移量
width: 5, // 自动宽度
manualControl: '#FFFF00', // 人工控制
autoRoute: '#00FF00', // 自动进路 (绿色)
autoTrigger: '#FFFF00', // 自动触发
outConflict: '#C00808' // 出车冲突
},
delay: {
direction: false, // 延时解锁方向
offset: { x: -5, y: 0 }, // 延时解锁偏移量
fontSize: 11, // 延迟解锁字体大小
fontColor: '#C00808', // 延迟解锁颜色
fontWeight: 'bold' // 字体粗细
},
button: {
distance: 5, // 信号灯按钮距离区段的距离
borderDashColor: '#FFFFFF', // 信号灯按钮边线
buttonColor: 'darkgreen', // 信号灯按钮颜色
buttonLightenColor: 'yellow' // 信号灯按钮闪烁颜色
},
lowButton:{
display: false // 现地 信号机按钮
},
mouseOverStyle: {
borderLineColor: '#FFFFFF',
borderLineDash: [3, 3],
nameBackgroundColor: '#22DFDF',
lampBorderLineColor: '#22DFDF'
}
};
this[deviceType.Station] = {
// 宁波一号线 车站元素 车站名称
elemnetType:['stationText'],
stationText:{
z:0,
fontWeight:'normal', // 字体粗细
textPadding:[0, 0], // 字体边距
borderColor:'', // 字体边框颜色
textBorderWidth:0 // 字体边框宽度
},
kmPostShow: false, // 公里标显示
kilometerPosition: 'up', // 公里标朝向
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#FFFF00' // 控制灯颜色
},
turnBack: { // 按图折返
lamp: 1, // 灯数量
lampSpace: 60 // 灯间距
},
StationControl: {
text: {
distance: 12, // 灯和文字之间的距离
fontSize: 12, // 字体大小
fontFormat: 'consolas', // 字体格式
fontColor: '#ffffff', // 字体颜色
fontWeight: 'normal', // 字体粗细
textAlign: 'middle', // 字体水平对齐
textVerticalAlign: 'top' // 字体垂直对齐
},
lamp: {
count: 4, // 控制模式的个数
offset: { x: 20, y: 0 }, // 偏移量
emergencyOffset: {x: 0, y: 0},
radiusR: 6, // 控制模式灯的半径
distance: 46, // 控制模式之间灯之间的距离
grayColor: '#C0C0C0', // 控制模式灰色
greenColor: 'green', // 控制模式绿色
redColor: 'red', // 控制模式红色
yellowColor: 'yellow', // 控制模式黄色
stroke: '#FFFFFF', // 框的颜色
fill: 'rgba(0,0,0,0)', // 填充色
textColorNoChange: true
},
emergencyControl: { // 紧急站控
show: true,
offset: { x: 0, y: 0 },
text: '紧急站控',
arrowShow: false,
grayColor: '#7F7F7F'
},
centerControl: { // 中控
show: true,
offset: { x: 0, y: 0 },
text: '遥控',
buttonText: '站遥控按钮',
buttonShow: true,
arrowShow: false,
grayColor: '#7F7F7F',
lightShow: true,
lightText: '强制点灯',
preResetShow: true,
preResetText: '计轴复位'
},
substationControl: { // 站控按钮
show: true,
offset: { x: 0, y: 0 },
text: '站控',
arrowShow: false,
grayColor: '#7F7F7F'
},
interconnectedControl: { // 联锁控
show: false,
offset: { x: 0, y: 0 },
text: '联锁控',
arrowShow: false,
grayColor: '#7F7F7F'
},
mouseOverStyle: { // 鼠标悬浮样式
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top'
}
}
};
this[deviceType.Switch] = {
text: {
show: true, // 道岔名称显示
position: 0, // 区段名称位置 1 上面 -1 下面 0 对称
offset: { x: 5, y: -10 }, // 道岔名称与区段距离
fontSize: 11, // 字体大小
fontColor: '#C0C0C0', // 道岔名称颜色
fontWeight: 'normal', // 字体粗细
borderColor: '#FE0000', // 道岔名称边框颜色
lossColor: 'lightgreen', // 道岔名称失去颜色
locateColor: 'lightgreen', // 道岔定位颜色
inversionColor: '#FFFF00', // 道岔反位颜色
monolockLocationColor: 'lightgreen', // 道岔单锁'定位'颜色 (浅绿色)
monolockInversionColor: '#FFFF00', // 道岔单锁'反位'颜色 (黄色)
block: true, // 封锁名称
faultFlashing: true, // 故障闪烁
lossRect: false // 道岔失表矩形
},
sectionAction: {
flag: false, // 道岔 关联区段显示
spareColor: '#5b5b5b' // 区段显示颜色
},
core: {
length: 6 // 道岔单边长度
},
jointImg: { // 道岔 A B C D四元素属性配置
trapezoidLength: 8, // 直角梯形元素默认长度
block: true, // 联合图形封锁状态
flashingColors: '#D600D5', // 联合图形封锁闪烁显示颜色
fork: true, // 挤岔专用(如有挤岔操作 变为true
faultStatus: true, // 宁波失表状态用 挤岔表示
forKColor: 'red' // 挤岔颜色 配合挤岔专用
},
arcBlcok: { // 圆形封锁图形
show: true, // 显示
shapeR: 5,
arcBorderColor: 'green', // 默认边框颜色
locationColor: 'green', // 定位封锁颜色
inversionColor: '#FFFF00' // 反位封锁颜色
},
rectLock: { // 矩形封锁框图形
rectWidth: 22, // 矩形框 宽高
rectBorderColor: '#fff', // 矩形边框颜色
monolock: false, // 单锁显示
block: false // 封锁显示
},
mouseOverStyle: {
borderBackgroundColor: '#22DFDF', // 边框背景色
borderColor: '#fff', // 边框颜色
textShadowColor: '#22DFDF', // 字体阴影颜色
coreBackgroundColor: '#00BFFF', // 岔心颜色 浅蓝色
coreBackgroundColorOver: '#001AFC' // 岔心颜色 深蓝色
}
};
// 屏蔽门
this[deviceType.Psd] = {
// 宁波一号线 屏蔽门
elemnetType:['safetyDoorNormal'],
safetyDoorNormal: { // 屏蔽门
z:0,
height: 3, // 站台屏蔽门高度
distance: 4, // 站台和屏蔽门之间的距离
defaultColor: 'green', // 屏蔽门默认颜色
splitDoorColor: 'green' // 屏蔽门切除颜色
}
};
this[deviceType.StationStand] = {
// 宁波一号线站台元素 站台 站台紧急关闭 扣车元素 停站时间 运行等级
elemnetType:['solidStand', 'emergentRhombus', 'detainNormal', 'stopTime', 'level'],
// 站台
solidStand:{
// 层级
z:0,
spareColor: 'white', // 站台空闲颜色
jumpStopColor: '#6260f3', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue', // 站台指定列车跳停颜色
headFontSize: 10, // 站台首端字体大小
stopColor: 'yellow' // 站台列车停站颜色
},
// 站台紧急关闭
emergentRhombus:{
z:1,
mergentR: 4, // 站台紧急关闭半径
mergentN: 4, // 站台紧急关闭边数
insideOffset: { x: 0, y: 25 }, // 内站台紧急关闭偏移量
outsideOffset: { x: 0, y: -25 }, // 外站台紧急关闭偏移量
closeColor: 'red' // 站台紧急关闭颜色
},
// 扣车元素 普通扣车
detainNormal:{
z:0,
position: 1, // 扣车标识在站台上显示方向
text: 'H', // 扣车显示内容
insideOffset: { x: -8, y: 10 }, // 内站台扣车偏移量
outsideOffset: { x: -8, y: 10 }, // 外站台扣车偏移量
centerTrainColor: 'white', // 中心扣车颜色
andCenterTrainColor: 'red', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50', // 车站扣除文字颜色
fontSize: 10, // 字体大小
fontWeight: 'normal'
},
// 停站时间
stopTime:{
z:1,
textFontSize: 10, // 停站时间字体大小
textColor: 'white', // 停站时间字体颜色
position: 1, // 停站时间方向
offset: { x: -8, y: 4 } // 停站时间偏移量
},
// 运行等级
level:{
z:1,
textFontSize: 10, // 运行等级字体大小
position: -1, // 运行等级方向
offset: { x: -8, y: 4 }, // 运行等级偏移量
textColor: '#FFF000' // 停站等级字体颜色
},
common: { // 通用属性
textFontSize: 10, // 站台默认字体大小
functionButtonShow: '03' // 功能灯按钮显示条件01所有模式下显示 02 行调显示 03现地显示
},
lamp: {
radiusR: 6, // 控制灯大小
lampColor: '#5A5D5A' // 功能按钮颜色
},
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
mouseOverStyle: {
borderLineColor: '#FFFFFF',
borderLineDash: [3, 3],
standBackgroundColor: '#00BFFF', // 浅蓝色
standBackgroundColorOver: '#001AFC' // 深蓝色
}
// reentry: {}, // 站台折返策略
// jump: {},
// trainStop: {}, // 停车标志
// trainDepart: {}, // 停车计时
};
this[deviceType.StationTurnBack] = { // 站后折返
lamp: {
fill: '#FFFF00', // 填充色
radiusR: 6 // 控制灯大小
},
text: {
titleTextShow: false,
fontWeight: 580,
fontSize: 12,
distance: 10
},
rect: {
fill: 'rgba(0,0,0,0)',
stroke: '#fff',
lineWidth: 2,
padding: 6
}
};
this[deviceType.AutoTurnBack] = {
// 是否显示
visibleConditions: '01',
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
subtitleText: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 17 // 等于副标题距离
},
lamp: {
borderShow: true, // 是否显示边框
lineDash: null, // 灯的包围框
stroke: '#FFFFFF', // 框的颜色
fill: 'rgba(0,0,0,0)', // 填充色
radiusR: 6, // 控制灯大小
controlColor: '#b5b3b3', // 控制灯颜色 (灰色)
lightUpColor: '#ffff00' // 点亮灯颜色
},
OutFrame: {
}
};
/** 引导总锁 */
this[deviceType.GuideLock] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
fill: 'rgba(0,0,0,0)', // 填充色
radiusR: 6, // 控制灯大小
controlColor: '#b5b3b3', // 控制灯颜色 (灰色)
lightUpColor: '#FF0000' // 点亮灯颜色
}
};
this[deviceType.StationCounter] = {
text: {
distance: 2, // 计数器名称和文字的距离
fontColor: '#FFFFFF', // 计数器字体颜色
borderColor: '#E4EF50' // 计数器边框颜色
}
};
// 供电线路
this[deviceType.Power] = {
noElectricStrokeColor:'#808080', // 无电颜色
defaultStrokeColor: '#F00', // 线条颜色
extendLength: 10 // 延伸长度
};
// 延续保护计时
this[deviceType.OverAp] = {
show: false
};
this[deviceType.StationDelayUnlock] = {
text: {
distance: 3, // 延迟解锁和设备之间的距离
fontColor: '#FFFFFF', // 延时解锁字体颜色
borderColor: '#FFFFFF' // 延迟解锁边框颜色
}
};
this[deviceType.LcControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#FFFF00' // 控制灯颜色
},
mouseOverStyle: {
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top',
arcColor: '#00FFFF',
textColor: '#000000'
}
};
this[deviceType.ZcControl] = {
// 是否显示
visible: true,
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#00FF00', // 控制灯颜色
activeColor:'#ff0000' // 控制灯激活颜色
},
mouseOverStyle: {
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top',
arcColor: '#00FFFF',
textColor: '#000000'
}
};
this[deviceType.LimitControl] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
radiusR: 6, // 控制灯大小
controlColor: '#ECE9D8' // 控制灯颜色
},
mouseOverStyle: {
fontSize: 10,
fontFormat: 'consolas',
fontColor: '#FFF000',
fontWeight: 'normal',
textAlign: 'middle',
textVerticalAlign: 'top',
textColor: '#000000',
arcColor: '#00FFFF'
}
};
this[deviceType.Line] = {
lineColor: '#FFFFFF' // 线条颜色
};
this[deviceType.AutomaticRoute] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
fill: 'rgba(0,0,0,0)', // 填充色
radiusR: 6, // 控制灯大小
controlColor: '#b5b3b3' // 控制灯颜色 (灰色)
}
};
this[deviceType.AxleReset] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
fill: 'rgba(0,0,0,0)', // 填充色
radiusR: 6, // 控制灯大小
controlColor: 'red' // 控制灯颜色 (灰色)
}
};
/* 上电解锁 */
this[deviceType.PowerUnLock] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
fill: 'rgba(0,0,0,0)', // 填充色
radiusR: 6, // 控制灯大小
controlColor: 'red' // 控制灯颜色 (灰色)
}
};
/** 引导总锁 */
this[deviceType.GuideLock] = {
text: {
fontSize: 11, // 字体大小
fontWeight: 'normal', // 字体粗细
distance: 5 // 灯跟文字距离
},
lamp: {
fill: 'rgba(0,0,0,0)', // 填充色
radiusR: 6, // 控制灯大小
controlColor: '#b5b3b3' // 控制灯颜色 (灰色)
}
};
this[deviceType.TrainWindow] = {
lineColor: '#fff', // 车次窗颜色
lineDash: [3], // 车次窗虚线间隔
lineWidth: 0.5, // 车次窗线宽
trainWindowSmooth: 0, // 车次窗矩形圆滑程度
show: true // 车次窗是否显示
};
this[deviceType.SplitStation] = {
lineLength: 15, // 箭头线长度
lineWidth: 2, // 线宽
height: 35, // 分隔整体高度
strokeColor: '#00FF00', // 线颜色
triangleFillColor: '#00FF00', // 三角填充颜色
textFill: '#FFFFFF', // 文字颜色
verticalDistance: 10, // 箭头三角垂直高度
horizontalDistance: 7// 箭头三角水平高度
};
this[deviceType.Train] = {
trainBody: {
fontFamily: 'consolas',
trainBodyLineWidth: 1, // 车身line宽
changeTrainWidth: false, // 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度
specialTrainType: [
{
type: 'MANUAL',
serviceNumber: '',
nameFormat: 'groupNumber:targetCode'
},
{
type: 'HEAD',
nameFormat: 'serviceNumber:tripNumber:targetCode'
}
], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
upPadding: 4, // 上边距离
trainSidelineColor: '#ABFE9B',
trainBodyFillColor: '#A388B1', // 列车车身填充颜色
trainNameFormat: 'serviceNumber:tripNumber:targetCode'// 列车显示格式
},
directionArrow: {
hasArrow: true,
width: 6,
radiusR: 4,
fillColor: '#00FF00',
distanceTop: 15,
distanceBottom: 35
},
hsda: {
lrPaddingHSDA: 3, // HSDA两边间隔
upPaddingHSDA: 4, // HSDA上边距离
trainHSDATextFontSize: 12, // 列车HDSA字号
textHContent: 'H', // textH文本
textSContent: 'S', // textS文本
textDContent: 'D', // textD文本
textAContent: 'A' // textA文本
},
trainNumber: {
targetCodePrefix: '00', // 目的地码前缀
defaultTargetCode: 'DD', // 默认目的地码
trainTargetTextAlign: 'left', // 目的地码文字显示位置
trainNumberOffset: { x: 36, y: 4 }, // 目的地码偏移量
headTypeColor: '#1CBAFD', // 头码车目的地号显示颜色
manualTypeColor: '#1CBAFD' // 人工车目的地号显示颜色
},
trainServer: {
serviceNumberPrefix: '000', // 服务号(表号)前缀
defaultServiceNumber: 'TTT', // 默认服务号(表号)
defaultServerNoColor: '#FFFFFF', // 默认服务号状态显示颜色
trainServerOffset: { x: 4, y: 4 } // 列车服务号偏移
},
trainTarget: {
tripNumberPrefix: '00', // 车次号前缀
defaultTripNumber: 'DD', // 默认车次号2
trainTargetOffset: { x: 24, y: 4 }, // 列车车次号偏移
trainTargetTextAlign: 'right' // 车次号文字显示位置
},
trainTargetNumber: {
groupNumberPrefix: '00000', // 车组号前缀
defaultGroupNumber: 'EEEEE', // 默认车组号
trainTargetNumberOffset: {x: -4, y: 4}, // 车组号偏移量
lineNumber: '01', // 线路号在人工车时车组号拼接线路号
manualTypeColor: '#FA7FD7', // 人工车车组号显示颜色
maskText: '0' // 车组号遮罩
},
trainHead: {
trainConntWidth: 2, // 列车竖杠的宽度
trainHeadFillColor: '#000000', // 列车车头矩形填充颜色
trainHeadRectHeight: 20, // 列车车头矩形高度
directionStopType:'normal', // special 西安二号线 停车 列车方向图标不消失 normal 正常
trainHeadHeight: 'trainBox', // 列车车头高度取决于trainBox高度
trainHeadArrowWidth: 5, // 列车车头三角宽度
trainHeadArrowOffsetX: 4 // 列车车头三角偏移
},
common: {
trainHeight: 20, // 列车高度
trainHeadDistance: 2, // 列车和车头之间的间距
trainWidth: 70, // 列车长度
trainTextFontSize: 16, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
haveTextHSDA: true, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
textOffset: 4, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 8, // 计算列车长度时--列车长比text多出尺寸
trainHeadColorChangeMode: 1, // 1:driveMode + runlevel
trainTip:false // 鼠标悬停列车状态信息框是否显示
},
mouseOverStyle:{
borderLineColor: '#FFFFFF',
borderLineDash: [3, 3],
leftOffset:30,
rightOffset:30
},
trainStatusStyle: {
defaultDestinationColor: '#FFFFFF', // 默认目的地状态显示颜色
destinationStatusSetText: 'trainTarget', // 目的地状态设置的对应哪个text的颜色
destinationStatus: [
{ status: '01', showColor: '#FFFFFF' },
{ status: '02', showColor: '#00FF00' },
{ status: '03', showColor: '#A0522D' },
{ status: '04', showColor: '#FFFF00' }
], // 目的地状态 01准点 02早点 03晚点 04头码车
serverNoType: [
{ type: '01', showColor: '#FFFFFF' },
{ type: '02', showColor: '#FFF000' }
], // 服务号状态类型 01显示服务号 计划车 02显示车组号: 头码车与人工车
directionType: [
{
type: 1,
lineLShow: false,
lineRShow: true,
arrowLShow: false,
arrowRShow: true
},
{
type: 0,
lineLShow: true,
lineRShow: false,
arrowLShow: true,
arrowRShow: false
}
], // 列车运行方向状态类型对应车头显示状态 1从左往右 0从右往左
directionStopType: [
{
type: 1,
lineLShow: false,
lineRShow: true
},
{
type: 0,
lineLShow: true,
lineRShow: false
}
], // 列车停止方向类型对应车头显示状态 1从左往右 0从右往左
driveModeStatus: [
{
status: 'AMCBTC',
trainLColor: '#FFCE4D',
trainRColor: '#FFCE4D'
},
{
status: 'CMCBTC',
trainLColor: '#FFFFCD',
trainRColor: '#FFFFCD'
},
{
status: 'AMITC',
trainLColor: '#B903E1',
trainRColor: '#B903E1'
},
{
status: 'CMITC',
trainLColor: '#9370DB',
trainRColor: '#9370DB'
},
{
status: 'RMIL',
trainLColor: '#808080',
trainRColor: '#808080'
},
{
status: 'RMITC',
trainLColor: '#808080',
trainRColor: '#808080'
},
{
status: 'RMCBTC',
trainLColor: '#808080',
trainRColor: '#808080'
},
{
status: 'NRMCBTC',
trainLColor: 'rgba(0, 0, 0, 0)',
trainRColor: 'rgba(0, 0, 0, 0)'
}
], // 列车运行模式对应车头颜色 ATO自动驾驶模式AM ATP监控下的人工驾驶模式CM 限制人工驾驶模式RM 非限制人工驾驶模式NRM
communicationStatus: [
] // 设置通信状态 cbtc级别CBTC 点式通信ITC 联锁级IL
}
};
this[deviceType.FloodGate] = {};
this[deviceType.DirectionRod] = {};
this[deviceType.IndicatorLight] = {};
}
}
export default new SkinCode();

View File

@ -233,6 +233,13 @@ class SkinCode extends defaultStyle {
fontSize: 12,
distance: 20,
defaultText: 'E'
},
transmission: { // 传输信号机
fillColor: '#f00',
fillColorVirtual: '#f00',
sideLength: 20,
textColor: '#fff',
strokeColor: '#00FFFF'
}
};
@ -282,6 +289,7 @@ class SkinCode extends defaultStyle {
position: -1, // 扣车标识在站台上显示方向
text: 'H', // 扣车显示内容
offset: {x: 8, y: 0}, // 扣车偏移量
ibpTrainColor: '#E4EF50', // ibp扣车颜色
centerTrainColor: '#E400E4', // 中心扣车颜色
andCenterTrainColor: 'red', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50', // 车站扣除颜色
@ -475,7 +483,10 @@ class SkinCode extends defaultStyle {
spareColor: '#5b5b5b' // 区段显示颜色
},
core: {
length: 10 // 道岔单边长度
length: 10, // 道岔单边长度
graphShow: true, // 图形显示
graphInversionColor: '#FFFF00', // 反位颜色
graphLocalColor: '#00FF00' // 定位颜色
},
jointImg: { // 道岔 A B C D四元素属性配置
trapezoidLength: 8 // 直角梯形元素默认长度

View File

@ -440,7 +440,7 @@ class Jlmap {
const trainList = [];
list.forEach(item => {
const device = this.mapDevice[item];
if (device && device._type !== deviceType.Switch && device._type !== deviceType.Train) {
if (device && device._type !== deviceType.Switch && device._type !== deviceType.Train && device._type !== deviceType.TrainWindow) {
const pictureDevice = store.getters['map/getPictureDeviceByCode'](item);
device._pictureHide = pictureDevice ? pictureDevice.pictureHide : false;
this.$painter.updatePicture(device);
@ -585,18 +585,16 @@ class Jlmap {
if (elem.hasOwnProperty('applicantId')) {
controlTransferList.push(elem);
}
if (!elem.applicantId) {
const oDevice = this.mapDevice[code] || deviceFactory(type, elem, this.showConfig);
const guideLock = this.mapDevice[oDevice.guideLockCode];
const guideLockStatus = {totalGuideLock: elem.totalGuideLock};
if (guideLock && this.hookHandle(guideLock, guideLockStatus)) {
this.$painter.update(guideLock);
}
if (elem.dispose) {
this.$painter.delete(oDevice);
} else {
this.$painter.update(oDevice);
}
const oDevice = this.mapDevice[code] || deviceFactory(type, elem, this.showConfig);
const guideLock = this.mapDevice[oDevice.guideLockCode];
const guideLockStatus = {totalGuideLock: elem.totalGuideLock};
if (guideLock && this.hookHandle(guideLock, guideLockStatus)) {
this.$painter.update(guideLock);
}
if (elem.dispose) {
this.$painter.delete(oDevice);
} else {
this.$painter.update(oDevice);
}
store.commit('map/mapStationStateUpdate');
} else if (elem.deviceType === 'STATION_DIRECTION') {

View File

@ -27,7 +27,11 @@ export function parser(data, skinCode, showConfig) {
zrUtil.each(centralStationList, elem => {
mapDevice[elem.code].stationCode = elem.code;
zrUtil.each(elem.chargeStationCodeList || [], item => {
mapDevice[item].stationCode = elem.code;
if (mapDevice[item]) {
mapDevice[item].stationCode = elem.code;
} else {
console.error('未获取到设备' + item);
}
});
});
zrUtil.each(data.sectionList || [], elem => {

View File

@ -177,10 +177,7 @@ class ETextName extends Group {
this.text && this.text.stopAnimation(false);
}
setState(bool) {
if (this.text) {
bool ? this.text.show() : this.text.hide();
}
setState() {
// 区段名称类暂时不做状态处理
}
}

View File

@ -483,6 +483,9 @@ export default class Section extends Group {
// 哈尔滨线路 南京二 道岔相关区段设置 默认颜色
if (this.style.Switch.sectionAction.flag && model.relSwitchCode && !flag) {
const switchModel = this.mapDevice[model.relSwitchCode];
if (!switchModel) {
return;
}
const sectionB = switchModel.sectionBCode === model.code ? this.mapDevice[switchModel.sectionBCode] : null;
const sectionC = switchModel.sectionCCode === model.code ? this.mapDevice[switchModel.sectionCCode] : null;
const sectionA = this.mapDevice[switchModel.sectionACode];
@ -599,7 +602,6 @@ export default class Section extends Group {
// 分路不良
// model.shuntingTypeList.length > 0 &&
model.badShunt && this.badShuntStatus();
this.name.setState(model.nameShow);
// 停车倒计时
if (this.remainTimeText) {
if (model.stopCountDown) {

View File

@ -847,6 +847,15 @@ class Signal extends Group {
case 'LIGHTING_UNIT_FAULT_HEAD':
this.lightingUnitFaultHead();
break;
case 'R_WIRE_FAULT':
this.lightingUnitFaultName();
break;
case 'G_WIRE_FAULT':
this.lightingUnitFaultName();
break;
case 'Y_WIRE_FAULT':
this.lightingUnitFaultName();
break;
}
}
@ -922,8 +931,8 @@ class Signal extends Group {
// 隐藏自动信号和自动进路
setAutoClose() {
if (this.style.Signal.auto.autoRouteType != 'text') {
this.sigAuto.hide();
this.sigAuto.setColor(this.style.backgroundColor);
this.sigAuto && this.sigAuto.hide();
this.sigAuto && this.sigAuto.setColor(this.style.backgroundColor);
} else {
this.sigName.setColor(this.style.Signal.text.defaultColor);
}
@ -1188,8 +1197,8 @@ class Signal extends Group {
this.sigPost.setVerColor(this.style.Signal.post.closeSignalVerColor);
} else if (model.level === 1 && this.style.Signal.post.guideSignalVerColor && !model.fleetMode) {
this.sigPost.setVerColor(this.style.Signal.post.guideSignalVerColor);
} else if (model.level === 2 && this.style.Signal.post.autoRouteVerColor && !model.fleetMode) {
this.sigPost.setVerColor(this.style.Signal.post.autoRouteVerColor);
} else if (model.level === 2 && this.style.Signal.post.atpLevelColor && !model.fleetMode) {
this.sigPost.setVerColor(this.style.Signal.post.atpLevelColor);
}
if (this.style.Signal.lamp.special) {

View File

@ -186,68 +186,11 @@ export default class Station extends Group {
this.createInterconnectedControl(); // 联锁控
this.createVeryControl();
this.createSelfDiscipline();
this.createTaiguo();
}
}
}
this.setState(model);
}
createTaiguo() {
const computedControlModePoint = this.computedControlModePoint;
this.centerCommunication = new ESingleControl({
_subType: 'centerCommunication',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: computedControlModePoint.x - this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.centerCommunication.offset.x,
y: computedControlModePoint.y + this.style.Station.StationControl.centerCommunication.offset.y
},
context: this.style.Station.StationControl.centerCommunication.text,
pop: false
});
this.add(this.centerCommunication);
// 计划控制
this.planControl = new ESingleControl({
_subType: 'planControl',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: computedControlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.planControl.offset.x,
y: computedControlModePoint.y + this.style.Station.StationControl.planControl.offset.y
},
context: this.style.Station.StationControl.planControl.text,
pop: false
});
this.add(this.planControl);
this.etcs2 = new ESingleControl({
_subType: 'etcs2',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: computedControlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.etcs2.offset.x,
y: computedControlModePoint.y + this.style.Station.StationControl.etcs2.offset.y
},
context: this.style.Station.StationControl.etcs2.text,
pop: false
});
this.add(this.etcs2);
this.etcs3 = new ESingleControl({
_subType: 'etcs3',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: computedControlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.etcs3.offset.x,
y: computedControlModePoint.y + this.style.Station.StationControl.etcs3.offset.y
},
context: this.style.Station.StationControl.etcs3.text,
pop: false
});
this.add(this.etcs3);
}
createCtcControlMode() { // 大铁
// 非常站控
// const model = this.model;
@ -414,7 +357,7 @@ export default class Station extends Group {
zlevel: this.zlevel,
z: this.z,
style: {
x: computedControlModePoint.x + this.style.Station.StationControl.text.offsetX,
x: computedControlModePoint.x,
y: computedControlModePoint.y + this.style.Station.StationControl.text.offsetY,
fontWeight: this.style.Station.StationControl.text.fontWeight,
fontSize: this.style.Station.StationControl.text.fontSize,
@ -692,7 +635,7 @@ export default class Station extends Group {
_subType: 'veryControlButtonText',
position: [0, 0],
style: {
x: computedControlModePoint.x + this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.veryControlButton.offset.x,
x: computedControlModePoint.x + this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.veryControlButton.offset.y,
y: computedControlModePoint.y + this.style.Station.StationControl.veryControlButton.offset.y + this.style.Station.StationControl.lamp.radiusR + this.style.Station.StationControl.text.distance,
fontWeight: this.style.Station.StationControl.text.fontWeight,
fontSize: this.style.Station.StationControl.text.fontSize,
@ -934,7 +877,9 @@ export default class Station extends Group {
if (this.graphRoad && model.routeSetMode == 'Manual_Set_Route') {
this.graphRoad.setColor(this.style.Station.StationControl.graphRoad.lightColor);
}
if (this.planControl && model.planControl) {
this.planControl.setColor(this.style.Station.StationControl.planControl.lightColor);
}
// if (this.style.Station.StationControl.disPlayNone) {
// this.stationText && this.stationText.setStyle('textFill', '#fff');
// if (this.model.subheadDisplay) { // 副标题
@ -1009,6 +954,7 @@ export default class Station extends Group {
this.substationArrowsControl && this.substationArrowsControl.setColor(this.style.Station.StationControl.lamp.grayColor);
this.emergencyArrowsControl && this.emergencyArrowsControl.setColor(this.style.Station.StationControl.lamp.grayColor);
this.stationControlCC && this.stationControlCC.setStyle({text:'EL', textFill:this.style.Station.StationControl.text.emergencyControlColor});
this.stationControlCC && this.stationControlCC.stopAnimation(true);
this.veryControl && this.veryControl.setColor(this.style.Station.StationControl.veryControl.defaultColor);
this.selfDiscipline && this.selfDiscipline.setColor(this.style.Station.StationControl.selfDiscipline.defaultColor);
this.selfDisciplineControl && this.selfDisciplineControl.setColor(this.style.Station.StationControl.selfDisciplineControl.defaultColor);
@ -1017,7 +963,6 @@ export default class Station extends Group {
this.graphRoad && this.graphRoad.setColor(this.style.Station.StationControl.graphRoad.defaultColor);
this.planControl && this.planControl.setColor(this.style.Station.StationControl.planControl.defaultColor);
this.trainControl && this.trainControl.setColor(this.style.Station.StationControl.trainControl.defaultColor);
this.etcs2 && this.etcs2.setColor(this.style.Station.StationControl.etcs2.defaultColor);
this.allowedTurnBack && this.allowedTurnBack.setColor(this.style.Station.StationControl.allowedTurnBack.defaultColor);
this.selfDisciplineCommunication && this.selfDisciplineCommunication.setColor(this.style.Station.StationControl.selfDisciplineCommunication.defaultColor);
if (this.selfDisciplineThree) {
@ -1065,9 +1010,6 @@ export default class Station extends Group {
model.controlApplicant && this.handleControlApplicant(model);
model.allowAutonomy && this.handleAllowAutonomy(model);
// this.handlePowerUnlockShow(model);
if (this.planControl && model.planControl) {
this.planControl.setColor(this.style.Station.StationControl.planControl.lightColor);
}
this.handleGuideLock(model);
if (this.style.Station.syncCentralizeStation && (model.controlMode || model.controller || model.emergencyController != undefined) && model.centralized) {
model.chargeStationCodeList.forEach(item => {
@ -1106,7 +1048,25 @@ export default class Station extends Group {
device && device.instance && device.instance.setCount(countNum);
}
}
if (this.style.Station.StationControl.special && model.apply2TheControlMode) {
this.controlTextFlash(model.apply2TheControlMode);
}
}
}
controlTextFlash(apply2TheControlMode) {
if (this.stationControlCC && apply2TheControlMode) {
let color;
if (apply2TheControlMode === 'Local') {
color = this.style.Station.StationControl.text.stationControlColor;
this.stationControlCC && this.stationControlCC.setStyle({text:'LC', textFill:color});
} else if (apply2TheControlMode === 'Center') {
color = this.style.Station.StationControl.text.centerControlColor;
this.stationControlCC && this.stationControlCC.setStyle({text:'CC', textFill:color});
}
this.stationControlCC.animateStyle(true)
.when(500, {textFill: '#000'})
.when(1000, {textFill: color})
.when(1500, {textFill: '#000'}).start();
}
}
handleGuideLock(model) {

View File

@ -18,7 +18,19 @@ class EDetainCircle extends Group {
const x = computedPosition.x + (model.width / 2) * detainD + detainD * style.StationStand.detainCircle.offset.x + detainD * style.StationStand.detainCircle.circleWidth / 2;
const y = computedPosition.y;
const radius = style.StationStand.detainCircle.circleWidth / 2;
this.ibpDetainCircle = new Circle({
zlevel: this.model.zlevel,
z: this.model.z,
shape: {
cx: x + detainD * 12,
cy: y,
r: 3
},
style:{
lineWidth:2,
stroke: '#ffff00'
}
});
this.detainCircle = new Circle({
zlevel: this.model.zlevel,
z: this.model.z,
@ -61,6 +73,7 @@ class EDetainCircle extends Group {
}
});
this.add(this.detainCircle);
this.add(this.ibpDetainCircle);
this.add(this.line1);
this.add(this.line2);
}
@ -74,6 +87,7 @@ class EDetainCircle extends Group {
recover() {
const style = this.model.style;
this.detainCircle && this.detainCircle.show();
this.ibpDetainCircle && this.ibpDetainCircle.hide();
this.line1 && this.line1.show();
this.line2 && this.line2.show();
this.setColor(style.StationStand.detainCircle.defaultColor);
@ -88,6 +102,8 @@ class EDetainCircle extends Group {
this.setColor(style.StationStand.detainCircle.centerTrainColor);
} else if (model.centerHoldTrain) {
this.setColor(style.StationStand.detainCircle.centerTrainColor);
} else if (model.ibpHoldTrain) {
this.ibpDetainCircle && this.ibpDetainCircle.show();
}
}
}

View File

@ -166,6 +166,11 @@ export default class StationTurnBack extends Group {
this.control && this.control.highlightType3(this.style.ReturnModeGroup.highlightColor);
}
}
if (this.style.StationTurnBack.lamp.otherFill) {
if (name == '自动折返' || name == '固定折返轨1' || name == '固定折返轨1') {
this.control && this.control.setStyle({fill: this.style.StationTurnBack.lamp.otherFill});
}
}
}
setAshShow() {

View File

@ -326,9 +326,9 @@ export default class Switch extends Group {
}
this.name.getTextRect().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(0, { textFill: this.style.transparentColor })
.when(1000, { textFill: this.style.Switch.text.borderColor })
.when(2000, { textFill: this.style.backgroundColor })
.when(2000, { textFill: this.style.transparentColor })
.start();
}
@ -354,7 +354,7 @@ export default class Switch extends Group {
this.lockCircle && this.lockCircle.hide(); // 圆形包围框
this.lockArc && this.lockArc.hide(); // 圆形单锁框
this.name.getNameText().stopAnimation(false);
this.name.getTextRect().setStyle({ fill: this.style.backgroundColor });
this.name.getTextRect().setStyle({ fill: this.style.transparentColor });
this.shapeModelC && this.shapeModelC.hide(); // 形状 C
this.shapeModelA && this.shapeModelA.hide(); // 形状 A
this.shapeModelB && this.shapeModelB.hide(); // 形状 B
@ -474,12 +474,6 @@ export default class Switch extends Group {
this.specialCircle && this.specialCircle.animate();
}
this.lossShow && this.lossShow.show(); // 西安线路专有
this.lossShow && this.lossShow.animateStyle(true)
.when(0, { stroke: this.style.backgroundColor })
.when(500, { stroke: '#F00' })
.when(1000, { stroke: this.style.backgroundColor })
.start();
if (this.style.Switch.jointImg.loseNameFlash) {
this.name.getNameText().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
@ -509,6 +503,14 @@ export default class Switch extends Group {
}
}
}
if (pos === 'NO' && fault && faultList.includes(fault)) {
this.lossShow && this.lossShow.show(); // 西安线路专有
this.lossShow && this.lossShow.animateStyle(true)
.when(0, { stroke: this.style.backgroundColor })
.when(500, { stroke: '#F00' })
.when(1000, { stroke: this.style.backgroundColor })
.start();
}
// stopAnimation
this.shapeModelB.stopAnimation(false);
this.shapeModelC.stopAnimation(false);
@ -624,7 +626,7 @@ export default class Switch extends Group {
}
if (this.style.Switch.core.specialCircle) {
this.name.getTextRect().setStyle({ fill: this.style.backgroundColor });
this.name.getTextRect().setStyle({ fill: this.style.transparentColor });
this.setTextColor(this.style.Switch.text.guideMasterLockColor);
} else {
this.setTextColor(this.style.Switch.text.monolockLocationColor);
@ -834,7 +836,6 @@ export default class Switch extends Group {
// N-定位 R-反位 NO-无(失表) EX-挤叉
// model.pos = 'EX';
if (model.pos == 'N') {
this.switchPosition = 'normal';
this.setLocationAction(model); /** 定位*/
@ -910,7 +911,7 @@ export default class Switch extends Group {
this.setHasTextBorder(1, this.style.Switch.text.fpLockBorderColor);
}
if (this.style.Switch.core.specialCircle) {
this.name.getTextRect().setStyle({ fill: this.style.backgroundColor });
this.name.getTextRect().setStyle({ fill: this.style.transparentColor });
this.setTextColor(this.style.Switch.text.fpLockColor);
}
}

View File

@ -2,7 +2,7 @@ import Group from 'zrender/src/container/Group';
import TrainBodyBox from './TrainBodyBox';
// import '../StationStand/EDetain';
import ETextName from '../element/ETextName'; // 名称文字 (共有)
// import EMouse from './EMouse';
import EMouse from './EMouse';
import store from '@/store/index';
import Circle from 'zrender/src/graphic/shape/Circle';
import BoundingRect from 'zrender/src/core/BoundingRect';
@ -21,26 +21,26 @@ export default class TrainBody extends Group {
}
createMouse() {
// this.mouseEvent = new EMouse(this);
// this.add(this.mouseEvent);
// if (this.deviceModel.__down) {
// store.dispatch('map/setTrainDetails', this.deviceModel);
// this.mouseEvent.mouseover();
// }
// if (this.deviceModel.__click) {
// this.mouseEvent.mouseClick();
// }
// this.on('mouseover', () => {
// store.dispatch('map/setTrainDetails', this.deviceModel);
// this.mouseEvent.mouseover();
// });
// this.on('mouseout', () => {
// store.dispatch('map/setTrainDetails', null);
// this.mouseEvent.mouseout();
// });
// this.on('click', () => {
// this.mouseEvent.mouseClick();
// });
this.mouseEvent = new EMouse(this);
this.add(this.mouseEvent);
if (this.deviceModel.__down) {
store.dispatch('map/setTrainDetails', this.deviceModel);
this.mouseEvent.mouseover();
}
if (this.deviceModel.__click) {
this.mouseEvent.mouseClick();
}
this.on('mouseover', () => {
store.dispatch('map/setTrainDetails', this.deviceModel);
this.mouseEvent.mouseover();
});
this.on('mouseout', () => {
store.dispatch('map/setTrainDetails', null);
this.mouseEvent.mouseout();
});
this.on('click', () => {
this.mouseEvent.mouseClick();
});
}
create() {
@ -261,12 +261,13 @@ export default class TrainBody extends Group {
this.add(this.travelNum);
}
if (style.Train.common.hasDelayTime) {
const time = Math.abs(model.dt) <= 15 ? Math.abs(model.dt) : (model.dt > 0 ? '-' + model.dt : '+' + Math.abs(model.dt));
this.delayTime = new ETextName({
zlevel: model.zlevel,
z: model.z + 1,
x: parseInt(model.point.x + style.Train.delayTime.trainDelayTimeOffset.x),
y: parseInt(model.point.y + style.Train.delayTime.trainDelayTimeOffset.y),
text: model.dt > 0 ? '+' + model.dt : model.dt,
text: time,
textFill: '#DADA00',
textStroke: style.trainTextColor,
textStrokeWidth: 0,
@ -308,12 +309,12 @@ export default class TrainBody extends Group {
setTrainBorderColor(color) {
this.trainBodyBox && this.trainBodyBox.setColor('stroke', color);
}
setHShow(isShow) {
setHShow(isShow, parking) {
if (this.textH) {
isShow ? this.textH.show() : this.textH.hide();
}
if (this.style.Train.common.HSDASpliceShow) {
isShow ? this.trainBodyBox.buckleTrain() : this.trainBodyBox.release();
if (this.style.Train.common.HSDASpliceShow && isShow) {
this.trainBodyBox.buckleTrain(parking);
}
}
setSShow(isShow) {
@ -550,9 +551,12 @@ export default class TrainBody extends Group {
trainBodyFault() {
this.trainBodyBox && this.trainBodyBox.trainBodyFault();
}
untrainBodyFault() {
this.trainBodyBox && this.trainBodyBox.untrainBodyFault();
recoverTrainBoxAnimation() {
this.trainBodyBox && this.trainBodyBox.recoverAnimation();
}
// untrainBodyFault() {
// this.trainBodyBox && this.trainBodyBox.untrainBodyFault();
// }
updateTextPosition(point) {
this.mouseEvent.updateTextPosition(point);
}

View File

@ -38,10 +38,10 @@ export default class TrainBodyBox extends Group {
}
}
// 列车扣车
buckleTrain() {
buckleTrain(parking) {
if (this.trainBodyBox) {
this.trainBodyBox.setStyle('fill', 'yellow');
if (!this.model.speed) { // 列车停稳状态下开始闪烁
if (parking) { // 列车停稳状态下开始闪烁
this.trainBodyBox.setStyle('fill', 'yellow');
this.trainBodyBox.animateStyle(true)
.when(0, { fill: this.model.style.backgroundColor })
.when(1000, { fill: 'yellow' })
@ -50,13 +50,13 @@ export default class TrainBodyBox extends Group {
}
}
}
// 列车放行
release() {
if (this.trainBodyBox) {
this.trainBodyBox.setStyle('fill', this.model.style.Train.trainBody.trainBodyFillColor);
this.trainBodyBox.stopAnimation(false);
}
}
// // 列车放行
// release() {
// if (this.trainBodyBox) {
// this.trainBodyBox.setStyle('fill', this.model.style.Train.trainBody.trainBodyFillColor);
// this.trainBodyBox.stopAnimation(false);
// }
// }
// 西安二号线 列车停车状态 闪烁红色
trainBodyFault() {
if (this.trainBodyBox) {
@ -69,8 +69,14 @@ export default class TrainBodyBox extends Group {
}
}
// 西安二号线 列车取消停车状态
untrainBodyFault() {
// // 西安二号线 列车取消停车状态
// untrainBodyFault() {
// if (this.trainBodyBox) {
// this.trainBodyBox.setStyle('fill', this.model.style.Train.trainBody.trainBodyFillColor);
// this.trainBodyBox.stopAnimation(false);
// }
// }
recoverAnimation() {
if (this.trainBodyBox) {
this.trainBodyBox.setStyle('fill', this.model.style.Train.trainBody.trainBodyFillColor);
this.trainBodyBox.stopAnimation(false);

View File

@ -221,7 +221,7 @@ export default class Train extends Group {
// 恢复颜色状态
recover() {
this.trainB && this.trainB.setHShow(false);
this.trainB && this.trainB.setHShow(false, false);
this.trainB && this.trainB.setSShow(false);
this.trainB && this.trainB.setDShow(false);
this.trainB && this.trainB.setAShow(false);
@ -231,6 +231,7 @@ export default class Train extends Group {
this.trainL && this.trainL.setArrowShow(false);
this.trainR && this.trainR.setArrowShow(false);
this.trainB && this.trainB.setTrainBorderColor(this.style.Train.trainBody.trainSidelineColor || this.style.trainSidelineColor);
this.trainB && this.trainB.recoverTrainBoxAnimation();
}
// 设置运行方向状态类型
@ -327,11 +328,11 @@ export default class Train extends Group {
this.trainB && this.trainB.setSoonerOrLater(dt);
}
// 设置扣车状态
setHoldStatus(status) {
setHoldStatus(status, parking) {
if (status) {
this.trainB && this.trainB.setHShow(true);
this.trainB && this.trainB.setHShow(true, parking);
} else {
this.trainB && this.trainB.setHShow(false);
this.trainB && this.trainB.setHShow(false, parking);
}
}
@ -408,7 +409,7 @@ export default class Train extends Group {
}
this.setDoorStatus(model.doorCloseLock);
this.setAlarmStatus(model.alarmStatus);
this.setHoldStatus(model.hold);
this.setHoldStatus(model.hold, model.parking);
this.setJumpStatus(model.jump);
// this.setSoonerOrLater(model.dt);
this.setTrainTypeColor(model.type);
@ -421,9 +422,11 @@ export default class Train extends Group {
if (store.state.map.picture == 'largePassengerView') {
this.handlePassagerColor(model.num);
}
if (style.Train.trainBody.trainBodyFaultFlashColor) {
// 西安二号线 列车停车状态 闪烁红色
this.updateTrainBodyFault(model.orderStop);
// 西安二号线 列车停车状态 闪烁红色
this.updateTrainBodyFault(model.orderStop);
if (!model.groundCommunicable) {
this.trainL && this.trainL.setColor('#f00');
this.trainR && this.trainR.setColor('#f00');
}
}
}
@ -438,16 +441,9 @@ export default class Train extends Group {
}
updateTrainBodyFault(orderStop) {
if (orderStop) {
// 西安二号线 列车停车状态 闪烁红色
if (this.trainB) {
this.trainB.trainBodyFault();
}
} else {
// 西安二号线 列车取消停车状态
if (this.trainB) {
this.trainB.untrainBodyFault();
}
// 西安二号线 列车停车状态 闪烁红色
if (this.style.Train.trainBody.trainBodyFaultFlashColor && orderStop && this.trainB) {
this.trainB.trainBodyFault();
}
}

View File

@ -48,7 +48,8 @@ export default class EMouse extends Group {
e.target._subType == 'Text') {
this.text.hide();
} else {
this.device.control.setControlColor(this.device.style.ZcControl.lamp.controlColor);
// this.device.control.setControlColor(this.device.style.ZcControl.lamp.controlColor);
this.device.setState(this.device.model)
this.device.control.setTextColor('#FFFFFF');
this.device.control.setTextBorder(false);
this.device.control.setArcBorder(false);

View File

@ -73,7 +73,6 @@ export default class ZcControl extends Group {
// 设置状态
setState(model) {
this.recover();
// 只响应前端自定义类型的状态变化
if (model._free) {
this.setAshShow();

View File

@ -0,0 +1,373 @@
<template>
<div class="menus" :style="{width: width + 'px'}">
<menu-station-stand ref="menuStationStand" :selected="selected" :work="'atsWork'" />
<menu-switch ref="menuSwitch" :selected="selected" :work="'atsWork'" />
<menu-signal ref="menuSignal" :selected="selected" :work="'atsWork'" />
<menu-section ref="menuSection" :selected="selected" :work="'atsWork'" />
<menu-train ref="menuTrain" :selected="selected" :work="'atsWork'" />
<menu-station ref="menuStation" :selected="selected" :work="'atsWork'" />
<menu-limit ref="menuLimit" :selected="selected" :work="'atsWork'" />
<passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="beijing-01__systerm" />
<passive-timeout ref="passiveTimeout" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import MenuSignal from './menuSignal';
import MenuStationStand from './menuStationStand';
import MenuSwitch from './menuSwitch';
import MenuSection from './menuSection';
import MenuTrain from './menuTrain';
import MenuStation from './menuStation';
import MenuLimit from './menuLimit';
import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import PassiveTimeout from './passiveDialog/timeout';
export default {
name: 'AtsWorkMenus',
components: {
MenuSignal,
MenuSwitch,
MenuSection,
MenuStationStand,
MenuStation,
MenuTrain,
MenuLimit,
PassiveAlarm,
PassiveContorl,
PassiveTimeout
},
props: {
selected: {
type: Object,
default() {
return null;
}
}
},
computed: {
...mapGetters('config', [
'width'
])
},
watch: {
'$store.state.trainingNew.trainingSwitch': function (val) {
if (val) {
this.$store.dispatch('menuOperation/setButtonOperation', null);
}
}
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('config/updateMenuBar');
this.$refs['menuSignal'].setRouteSignal();
});
this.$root.$on('dialogOpen', e => {
if (this.selected == e &&
this.selected &&
this.selected.instance &&
this.selected.instance.mouseEvent) {
this.selected.instance.mouseEvent.mouseover();
}
});
this.$root.$on('dialogClose', e => {
if (this.selected == e &&
this.selected &&
this.selected.instance &&
this.selected.instance.mouseEvent) {
this.selected.instance.__down = false;
this.selected.instance.mouseEvent.mouseout();
this.$jlmap.clearEvent();
}
});
},
beforeDestroy() {
this.$root.$off('dialogOpen');
this.$root.$off('dialogClose');
}
};
</script>
<style>
.menus .pop-menu {
background: #F0F0F0;
}
.menus .pop-menu span {
color: #000;
}
.menus .pop-menu .is-disabled span {
color: #B4B3B8;
}
.beijing-01__systerm {
overflow: hidden !important;
}
.beijing-01__systerm .el-dialog {
background: rgba(100, 100, 100, 0.3);
border: 2px solid rgb(144, 144, 144, 0.8);
border-radius: 6px;
color: #000;
font-size: 14px;
}
.beijing-01__systerm .el-dialog .el-dialog__header {
padding: 10px;
height: 26px;
}
.beijing-01__systerm .el-dialog .el-dialog__footer {
background: #F0F0F0;
opacity: 1;
}
.beijing-01__systerm .el-dialog .el-dialog__body {
padding: 10px;
margin: 5px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #F0F0F0;
opacity: 1;
}
.beijing-01__systerm .el-dialog .el-dialog__title {
position: absolute;
top: 6px;
color: #000;
border-radius: 4px;
padding: 0px 2px;
height: 20px;
line-height: 20px
}
.beijing-01__systerm .el-dialog .el-dialog__title::before {
content: '';
position: absolute;
top: 0;
left: 0;
filter: blur(7px);
height: 20px;
width: -webkit-fill-available;
background: rgba(190, 190, 190, 0.8);
z-index: -1;
}
.beijing-01__systerm .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 5px;
right: 5px;
line-height: 18px;
}
.beijing-01__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.beijing-01__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.beijing-01__systerm .el-dialog .el-button {
height: 32px;
line-height: 32px;
padding: 0px;
width: 80px;
border: 2px outset #E2E2E2;
border-radius: 0px !important;
color: #000;
background: #F0F0F0;
}
.beijing-01__systerm .el-dialog .expand {
width: 120px;
}
.beijing-01__systerm .el-dialog .el-button:focus span {
border: 1px dashed gray;
}
.beijing-01__systerm .el-dialog .el-button:active {
border: 2px inset #E2E2E2;
}
.beijing-01__systerm .el-dialog .el-button:disabled {
border: 2px inset #E2E2E2;
}
.beijing-01__systerm .el-dialog .el-button:disabled span {
border: 0px;
}
.beijing-01__systerm .el-dialog .el-input {
border: 2px inset #E9E9E9;
}
.beijing-01__systerm .el-dialog .el-input .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.beijing-01__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #F0F0F0 !important;
}
.beijing-01__systerm .el-dialog .el-textarea {
border: 2px inset #E9E9E9;
border-radius: 0px;
}
.beijing-01__systerm .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.beijing-01__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.beijing-01__systerm .el-dialog .el-table--border th.gutter {
background: #EBEADB !important;
}
.beijing-01__systerm .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.beijing-01__systerm .el-dialog .el-table .cell {
line-height: unset !important;
}
.beijing-01__systerm .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.beijing-01__systerm .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.beijing-01__systerm .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
}
.beijing-01__systerm .el-dialog .current-row>td {
background: #3399FF !important;
color: #fff !important;
}
.beijing-01__systerm .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.beijing-01__systerm .el-dialog .el-checkbox__label {
color: #000 !important;
}
.beijing-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.beijing-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.beijing-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.beijing-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
.beijing-01__systerm .el-dialog .el-radio__inner {
border: 1px inset #dcdfe6 !important;
}
.beijing-01__systerm .el-dialog .el-radio__label {
color: #000 !important;
}
.beijing-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.beijing-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
width: 4px;
height: 4px;
border-radius: 100%;
background-color: #000 !important;
position: absolute;
left: 50%;
top: 50%;
}
.beijing-01__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
background: #E6E6E6 !important;
}
.beijing-01__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
color: #C5C9CC !important;
}
.beijing-01__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -15px;
top: -18px;
}
.beijing-01__systerm .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
}
.beijing-01__systerm .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
}
.beijing-01__systerm .el-dialog .table {
margin-top: 10px;
}
.beijing-01__systerm .el-dialog .notice {
margin-left: 62px;
line-height: 30px;
}
.beijing-01__systerm .el-dialog .button-group {
margin-top: 10px;
}
</style>

View File

@ -0,0 +1,435 @@
<template>
<div class="chengdou-01__menus" :style="{width: width + 'px'}">
<menu-request ref="menuRequest" />
<menu-station-stand ref="menuStationStand" :selected="selected" :work="work" />
<menu-switch ref="menuSwitch" :selected="selected" :work="work" />
<menu-signal ref="menuSignal" :selected="selected" :work="work" />
<menu-section ref="menuSection" :selected="selected" :work="work" />
<menu-train ref="menuTrain" :selected="selected" :work="work" />
<menu-station ref="menuStation" :selected="selected" :work="work" />
<menu-station-platform ref="menuStationPlatform" :selected="selected" @popMenuStationStand="popMenuStationStand" />
<passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="chengdou-01__system" :work="work" />
<passive-Timeout ref="passiveTimeout" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import MenuRequest from './menuRequest';
import MenuSignal from './menuSignal';
import MenuStationStand from './menuStationStand';
import MenuSwitch from './menuSwitch';
import MenuSection from './menuSection';
import MenuTrain from './menuTrain';
import MenuStation from './menuStation';
import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import PassiveTimeout from './passiveDialog/timeout';
import MenuStationPlatform from './menuStationPlatform';
export default {
name: 'AtsWorkMenu',
components: {
MenuRequest,
// MenuCancel,
MenuSignal,
MenuSwitch,
MenuSection,
MenuStationStand,
MenuStation,
MenuTrain,
PassiveAlarm,
PassiveContorl,
PassiveTimeout,
MenuStationPlatform
},
props: {
selected: {
type: Object,
default() {
return null;
}
}
},
data() {
return {
work: 'atsWork'
};
},
computed: {
...mapGetters('config', [
'width'
])
},
watch: {
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('config/updateMenuBar');
});
},
methods: {
popMenuStationStand(param) {
this.$refs.menuStationStand.doShow(param.position, param.type);
}
}
};
</script>
<style>
.chengdou-01__menus .pop-menu {
background: #5F9EA0;
}
.chengdou-01__menus .pop-menu .el-popover{
background: #5F9EA0;
}
.chengdou-01__menus .pop-menu span {
color: #000;
}
.chengdou-01__menus .pop-menu .is-disabled span {
color: #B4B3B8;
}
.chengdou-01__systerm {
overflow: hidden !important;
}
.chengdou-01__system .el-dialog {
background: #0055E8;
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
border: 1px solid rgb(69, 134, 247);
border-radius: 6px;
font-size: 13px !important;
color: #000;
}
.chengdou-01__system .el-dialog span {
font-size: 13px !important;
line-height: 22px;
}
.chengdou-01__system .el-dialog .el-dialog__footer {
background: #5F9EA0;
opacity: 1;
}
.chengdou-01__system .el-dialog .el-dialog__body {
padding: 20px;
margin: 0px 3px 3px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #5F9EA0;
opacity: 1;
}
.chengdou-01__system .station-stand .el-dialog__body {
background: #000;
color: #E8E8E8;
}
.chengdou-01__system .el-dialog .el-dialog__title {
font-size: 16px;
color: #fff;
position: absolute;
top: 4px;
left:25px;
}
.chengdou-01__system .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 6px;
right: 3px;
line-height: 16px;
}
.chengdou-01__system .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.chengdou-01__system .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.chengdou-01__system .el-dialog .el-button {
height: 24px;
line-height: 22px;
padding: 0px;
width: 80px;
border: 2px outset #B7D4D5;
border-radius: 0 !important;
color: #000;
background: #5F9EA0;
}
.chengdou-01__system .el-dialog .expand {
width: 120px;
}
.chengdou-01__system .el-dialog .el-button:focus span {
border: 1px dashed #315253;
}
.chengdou-01__system .el-dialog .el-button:active {
border: 2px inset #B7D4D5;
}
.chengdou-01__system .el-dialog .el-button:disabled {
border: 2px inset #B7D4D5;
}
.chengdou-01__system .el-dialog .el-button:disabled span {
border: 0px;
}
.chengdou-01__select-option .el-select-dropdown__item{
background: #5F9EA0;
}
.chengdou-01__select-option .el-scrollbar__wrap {
background-color: #5F9EA0;
overflow: hidden;
overflow-y: scroll;
}
.chengdou-01__select-option{
border-style: solid;
border-width: 1px;
border-color: #335658 #99C1C3 #99C1C3 #335658;
border-radius: 0;
background:#5F9EA0;
}
.chengdou-01__select-option .el-scrollbar{
border-style: solid;
border-width: 1px;
border-color: #467576 #A0C6C7 #A0C6C7 #467576;
border-radius: 0;
}
.chengdou-01__select-option .el-select-dropdown__item.selected{
color: #fff;
}
.chengdou-01__select-option .el-select-dropdown__item{
color: #000;
}
.chengdou-01__system .el-dialog .el-transfer-panel{
border-style: solid;
border-width: 1px;
border-color: #467576 #A0C6C7 #A0C6C7 #467576;
border-radius: 0;
background: #5F9EA0;
}
.chengdou-01__system .el-dialog .el-transfer .el-button{
width: 40px;
}
.chengdou-01__system .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span {
color: #000;
}
.chengdou-01__system .el-dialog .el-transfer-panel .el-transfer-panel__header {
background: #5F9EA0;
border-bottom: 1px solid #467576;
}
.chengdou-01__system .el-dialog .el-transfer-panel .el-transfer-panel__empty {
color: #5F9EA0;
}
.chengdou-01__system .el-dialog .el-input {
border-style:solid;
border-width: 1px;
border-color: #335658 #99C1C3 #99C1C3 #335658;
height: 22px !important;
line-height: 22px !important;
background: #5F9EA0;
}
.chengdou-01__system .el-dialog .el-input__inner {
color: #000;
background: #5F9EA0 !important;
border-style:solid;
border-width: 1px;
border-color: #467576 #A0C6C7 #A0C6C7 #467576;
border-radius: 0px !important;
box-sizing: border-box;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-01__system .el-dialog .el-input.is-disabled .el-input__inner {
background: #F0F0F0 !important;
}
.chengdou-01__system .el-dialog .el-textarea {
border-style:solid;
border-width: 1px;
border-color: #335658 #99C1C3 #99C1C3 #335658;
border-radius: 0;
}
.chengdou-01__system .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #5F9EA0 !important;
border-style:solid;
border-width: 1px;
border-color: #467576 #A0C6C7 #A0C6C7 #467576;
border-radius: 0px !important;
box-sizing: border-box;
}
.chengdou-01__system .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.chengdou-01__system .el-dialog .el-table--border th.gutter {
background: #EBEADB !important;
}
.chengdou-01__system .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.chengdou-01__system .el-dialog .el-table .cell {
height: 22px;
line-height: 22px;
}
.chengdou-01__system .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.chengdou-01__system .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.chengdou-01__system .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
}
.chengdou-01__system .el-dialog .current-row>td {
background: #3399FF !important;
color: #fff !important;
}
.chengdou-01__system .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.chengdou-01__system .el-dialog .el-checkbox__label {
color: #000 !important;
}
.chengdou-01__system .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.chengdou-01__system .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.chengdou-01__system .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.chengdou-01__system .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
.chengdou-01__system .el-dialog .el-radio__inner {
border: 1px inset #dcdfe6 !important;
}
.chengdou-01__system .el-dialog .el-radio__label {
color: #000 !important;
}
.chengdou-01__system .el-dialog .el-radio__input.is-checked .el-radio__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.chengdou-01__system .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
width: 4px;
height: 4px;
border-radius: 100%;
background-color: #000 !important;
position: absolute;
left: 50%;
top: 50%;
}
.chengdou-01__system .el-dialog .el-radio.is-disabled .el-radio__inner {
background: #E6E6E6 !important;
}
.chengdou-01__system .el-dialog .el-radio.is-disabled .el-radio__label {
color: #C5C9CC !important;
}
.chengdou-01__system .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -15px;
top: -18px;
}
.chengdou-01__system .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
}
.chengdou-01__system .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
}
.chengdou-01__system .el-dialog .table {
margin-top: 10px;
}
.chengdou-01__system .el-dialog .notice {
margin-left: 62px;
line-height: 30px;
}
.chengdou-01__system .el-dialog .button-group {
margin-top: 20px;
}
.chengdou-01__system.request_box .content-box .el-table__body-wrapper .el-table__row{
background: #000;
height: 30px;
color: #518E86;
}
.chengdou-01__system.request_box .content-box .el-table__body-wrapper .el-table__row.hover-row td{
background: #d5ecf7;
}
.chengdou-01__system.request_box .content-box .el-table__body-wrapper .el-table__row.current-row td{
background: #d5ecf7;
}
.chengdou-01__system .el-select .el-input__suffix {
top: 5px;
}
.chengdou-01__system .el-select .is-focus .el-input__suffix {
top: -5px;
}
.chengdou-01__select-option .el-scrollbar__thumb {
border-style:solid;
border-width: 1px;
border-color: #335658 #99C1C3 #99C1C3 #335658;
background: #518E86;
}
</style>

View File

@ -52,7 +52,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE,
isDisabled: (signal, work) => {
return false;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '取消进路',
@ -60,7 +61,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE,
isDisabled: (signal, work) => {
return false;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '开放自动进路',
@ -68,7 +70,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_SET_CI_AUTO,
isDisabled: (signal, work) => {
return false;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '关闭自动进路',
@ -76,7 +79,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_CI_AUTO,
isDisabled: (signal, work) => {
return false;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '终端信号封锁',
@ -84,7 +88,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_BLOCK,
isDisabled: (signal, work) => {
return signal.blockade !== 0;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '终端信号解封',
@ -92,7 +97,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_UNBLOCK,
isDisabled: (signal, work) => {
return signal.blockade === 0;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '引导信号',
@ -100,7 +106,8 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE,
isDisabled: (signal, work) => {
return false;
}
},
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '设备标签',
@ -113,7 +120,8 @@ export default {
cmdType: '',
show: false
}
]
],
isShow: (signal, work) => work !== 'atsWork'
},
{
label: '模拟',

View File

@ -66,7 +66,8 @@ export default {
} else {
return switchDevice.normalPosition === 1;
}
}
},
isShow: (switchDevice, work) => work !== 'atsWork'
},
{
label: '道岔反位',
@ -78,7 +79,8 @@ export default {
} else {
return switchDevice.reversePosition === 1;
}
}
},
isShow: (switchDevice, work) => work !== 'atsWork'
},
{
label: '道岔单锁',
@ -90,7 +92,8 @@ export default {
} else {
return switchDevice.singleLock !== 0;
}
}
},
isShow: (switchDevice, work) => work !== 'atsWork'
},
{
label: '道岔单解',
@ -102,7 +105,8 @@ export default {
} else {
return switchDevice.singleLock !== 1;
}
}
},
isShow: (switchDevice, work) => work !== 'atsWork'
}
],
menuForce: [

View File

@ -0,0 +1,346 @@
<template>
<div class="menus" :style="{width: width + 'px'}">
<menu-station-stand ref="menuStationStand" :selected="selected" :work="'atsWork'" />
<menu-switch ref="menuSwitch" :selected="selected" :work="'atsWork'" />
<menu-signal ref="menuSignal" :selected="selected" :work="'atsWork'" />
<menu-section ref="menuSection" :selected="selected" :work="'atsWork'" />
<menu-station ref="menuStation" :selected="selected" :work="'atsWork'" />
<menu-train ref="menuTrain" :selected="selected" :work="'atsWork'" />
<passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="chengdou-03__systerm" />
<passive-Timeout ref="passiveTimeout" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import MenuSignal from './menuSignal';
import MenuStationStand from './menuStationStand';
import MenuSwitch from './menuSwitch';
import MenuSection from './menuSection';
import MenuStation from './menuStation';
import MenuTrain from './menuTrain';
import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import PassiveTimeout from './passiveDialog/timeout';
export default {
name: 'AtsWorkMenu',
components: {
MenuSignal,
MenuStationStand,
MenuSwitch,
MenuSection,
MenuStation,
MenuTrain,
PassiveAlarm,
PassiveContorl,
PassiveTimeout
},
props: {
selected: {
type: Object,
default() {
return null;
}
}
},
computed: {
...mapGetters('config', [
'width'
])
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('config/updateMenuBar');
const _that = this;
window.onclick = function (e) {
if (!_that.$store.state.training.trainingStart) {
_that.$refs.menuBar && _that.$refs.menuBar.blankClickClose();
}
};
});
},
beforeDestroy() {
window.onclick = function (e) {};
}
};
</script>
<style>
.menus .pop-menu {
background: #F0F0F0;
}
.menus .pop-menu span {
color: #000;
}
.menus .pop-menu .is-disabled span {
color: #B4B3B8;
}
.chengdou-03__systerm {
overflow: hidden !important;
}
.chengdou-03__systerm .el-dialog {
background: #0055E8;
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
border: 1px solid rgb(69, 134, 247);
border-radius: 6px;
font-size: 13px !important;
color: #000;
}
.chengdou-03__systerm .el-dialog span {
font-size: 13px !important;
line-height: 22px;
}
.chengdou-03__systerm .el-dialog span .el-icon-arrow-up{
line-height: 18px;
}
.chengdou-03__systerm .el-dialog .el-dialog__footer {
background: #ECE9D8;
opacity: 1;
}
.chengdou-03__systerm .el-dialog .el-dialog__body {
padding: 20px;
margin: 0px 3px 3px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #ECE9D8;
opacity: 1;
}
.chengdou-03__systerm .el-dialog .el-dialog__title {
font-size: 16px;
color: #fff;
position: absolute;
top: 4px;
left: 7px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 6px;
right: 3px;
line-height: 16px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.chengdou-03__systerm .el-dialog .el-button {
height: 24px;
line-height: 22px;
padding: 0px;
width: 80px;
border: 2px outset #E2E2E2;
border-radius: 4px !important;
color: #000;
background: #F0F0F0;
}
.chengdou-03__systerm .el-dialog .expand {
width: 120px;
}
.chengdou-03__systerm .el-dialog .el-button:focus span {
border: 1px dashed gray;
}
.chengdou-03__systerm .el-dialog .el-button:active {
border: 2px inset #E2E2E2;
}
.chengdou-03__systerm .el-dialog .el-button:disabled {
border: 2px inset #E2E2E2;
}
.chengdou-03__systerm .el-dialog .el-button:disabled span {
border: 0px;
}
.chengdou-03__systerm .el-dialog .el-input {
border: 2px inset #E9E9E9;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-03__systerm .el-dialog .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-03__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #F0F0F0 !important;
}
.chengdou-03__systerm .el-dialog .el-textarea {
border: 2px inset #E9E9E9;
border-radius: 0px;
}
.chengdou-03__systerm .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.chengdou-03__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.chengdou-03__systerm .el-dialog .el-table--border th.gutter {
background: #EBEADB !important;
}
.chengdou-03__systerm .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-table .cell {
height: 22px;
line-height: 22px;
}
.chengdou-03__systerm .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.chengdou-03__systerm .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.chengdou-03__systerm .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
}
.chengdou-03__systerm .el-dialog .current-row>td {
background: #3399FF !important;
color: #fff !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__label {
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
.chengdou-03__systerm .el-dialog .el-radio__inner {
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-radio__label {
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
width: 4px;
height: 4px;
border-radius: 100%;
background-color: #000 !important;
position: absolute;
left: 50%;
top: 50%;
}
.chengdou-03__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
background: #E6E6E6 !important;
}
.chengdou-03__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
color: #C5C9CC !important;
}
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -15px;
top: -18px;
}
.chengdou-03__systerm .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
}
.chengdou-03__systerm .el-dialog .table {
margin-top: 10px;
}
.chengdou-03__systerm .el-dialog .notice {
margin-left: 62px;
line-height: 30px;
}
.chengdou-03__systerm .el-dialog .button-group {
margin-top: 20px;
}
</style>

View File

@ -0,0 +1,174 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-run-level"
:title="title"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div style="font-size: 16px; margin-bottom: 5px;">变通节点</div>
<div style="margin-bottom: 5px;">
<el-input v-model="stationName" size="mini" disabled />
</div>
<div style="font-size: 16px; margin-bottom: 5px;">当前变通策略</div>
<div style="margin-bottom: 5px;">
<el-input v-model="stationStrategy" size="mini" disabled />
</div>
<div style="font-size: 16px; margin-bottom: 5px;">变通策略选项</div>
<el-table
ref="table"
:data="strategyList"
border
:cell-style="tableStyle"
style="width: 100%; margin-top:10px"
size="mini"
height="180"
highlight-current-row
:show-header="false"
@row-click="clickEvent"
>
<el-table-column :id="domIdChoose" prop="label" style="margin-left:30px" />
</el-table>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" :disabled="!isConfirm" @click="commit">
确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import { mapGetters } from 'vuex';
export default {
name: 'StandBackStrategy',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
strategyList: [],
stationName: '',
stationStrategy: '',
selection: [],
isConfirm: false,
strategyId: '',
tableStyle: {
'border-bottom': 'none'
}
};
},
computed: {
...mapGetters('map', [
'stationList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Station.setBackStrategy.menu.domId : '';
},
domIdChoose() {
return this.dialogShow ? OperationEvent.Station.setBackStrategy.choose.domId : '';
},
title() {
return '策略选择';
}
},
methods: {
doShow(operate, selected) {
this.selected = selected;
if (!this.dialogShow) {
const name = selected.optionList.find(ele => ele.id == selected.tbStrategyId).label;
this.stationName = selected.name || '';
this.stationStrategy = selected.tbStrategyId ? name : '无策略折返'; //
this.strategyList = selected.optionList; //
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
clickEvent(row, column, event) {
const operate = {
operation: OperationEvent.Station.setBackStrategy.choose.operation
};
this.strategyId = row.id;
this.isConfirm = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
},
checkTableDataSelction(data) {
const selection = [];
if (data && data.length > 0) {
data.forEach(row => {
if (row.check && !row.disabled) {
selection.push(row);
}
});
}
this.disabledSend = !selection.length;
if (JSON.stringify(selection) !== JSON.stringify(this.selection)) {
this.selection = selection;
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
if (this.isConfirm) {
this.loading = true;
commitOperate(menuOperate.StationControl.setBackStrategy, {id: this.strategyId}, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
this.doClose();
}
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -8,6 +8,7 @@
<menu-section ref="menuSection" :selected="selected" :work="'dispatchWork'" />
<menu-station ref="menuStation" :selected="selected" :work="'dispatchWork'" />
<menu-train ref="menuTrain" :selected="selected" :work="'dispatchWork'" />
<menu-station-turn-back ref="menuStationTurnBack" :selected="selected" :work="'dispatchWork'" />
<passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="chengdou-03__systerm" />
@ -24,6 +25,7 @@ import MenuSwitch from './menuSwitch';
import MenuSection from './menuSection';
import MenuStation from './menuStation';
import MenuTrain from './menuTrain';
import MenuStationTurnBack from './menuStationTurnBack.vue';
import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
@ -40,7 +42,8 @@ export default {
MenuTrain,
PassiveAlarm,
PassiveContorl,
PassiveTimeout
PassiveTimeout,
MenuStationTurnBack
},
props: {
selected: {

View File

@ -2,7 +2,14 @@
<div class="menus" :style="{width: width + 'px'}">
<menu-bar ref="menuBar" :selected="selected" />
<menu-button ref="menuButton" />
<menu-station-stand ref="menuStationStand" :selected="selected" :work="'localWork'" />
<menu-switch ref="menuSwitch" :selected="selected" :work="'localWork'" />
<menu-signal ref="menuSignal" :selected="selected" :work="'localWork'" />
<menu-section ref="menuSection" :selected="selected" :work="'localWork'" />
<menu-station ref="menuStation" :selected="selected" :work="'localWork'" />
<menu-train ref="menuTrain" :selected="selected" :work="'localWork'" />
</div>
</template>
<script>
@ -10,12 +17,22 @@ import { mapGetters } from 'vuex';
import MenuTrain from './menuTrain';
import MenuButton from './menuButton';
import MenuBar from './localWorkMenuBar';
import MenuSignal from './menuSignal';
import MenuStationStand from './menuStationStand';
import MenuSwitch from './menuSwitch';
import MenuSection from './menuSection';
import MenuStation from './menuStation';
export default {
name: 'LocalWorkMenu',
components: {
MenuTrain,
MenuButton,
MenuBar
MenuBar,
MenuSignal,
MenuStationStand,
MenuSwitch,
MenuSection,
MenuStation
},
props: {
selected: {

View File

@ -350,7 +350,7 @@ export default {
}
}
//
if (signal.aspect == 'R' && isArrangementRoute) { //
if (signal.lockedRouteCode) { //
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL;
operate.code = deviceList[0].code;
@ -370,7 +370,8 @@ export default {
this.routeList.forEach(item => {
// item.endButtonSignalCode
//
if (item.startSignalCode === deviceList[0].code && item.endSignalCode === deviceList[1].code) {
const endSignalCode = item.endButtonSignalCode || item.endSignalCode;
if (item.startSignalCode === deviceList[0].code && endSignalCode === deviceList[1].code) {
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_SET_ROUTE;
operate.code = deviceList[1].code;
@ -396,19 +397,28 @@ export default {
operation: this.$store.state.menuOperation.buttonOperation,
param: {}
};
if (model._type === 'StationStand' && subType === 'StopJumpLamp') {
let controlMode = '';
const station = this.$store.getters['map/getDeviceByCode'](model.stationCode);
if (station) {
controlMode = station.controlMode;
// if (station.controlMode == 'Local' || station.controlMode == 'Emergency') {
// controlFlag = true;Interlock
// }
}
const list2 = ['Local', 'Emergency'];
if (model._type === 'StationStand' && subType === 'StopJumpLamp' && list2.includes(controlMode)) {
operate.cmdType = CMD.Stand.CMD_STAND_SET_JUMP_STOP;
operate.param = {standCode: model.code, trainGroupNumber: ''};
operate.code = model.code;
} else if (model._type === 'StationStand' && subType === 'CancelStopJumpLamp') {
} else if (model._type === 'StationStand' && subType === 'CancelStopJumpLamp' && list2.includes(controlMode)) {
operate.cmdType = CMD.Stand.CMD_STAND_CANCEL_JUMP_STOP;
operate.param = {standCode: model.code, trainGroupNumber: ''};
operate.code = model.code;
} else if (model._type === 'AutoTurnBack' ) {
} else if (model._type === 'AutoTurnBack' && controlMode === 'Interlock') {
operate.cmdType = CMD.Signal.CMD_SIGNAL_SET_AUTO_TURN_BACK;
operate.param = {cycleCode: model.cycleCode};
operate.code = model.code;
} else if (model._type === 'AutomaticRoute') {
} else if (model._type === 'AutomaticRoute' && controlMode === 'Interlock') {
const route = this.routeData[model.automaticRouteCode];
operate.cmdType = CMD.Signal.CMD_SIGNAL_SET_CI_AUTO;
operate.param = {signalCode: route.startSignalCode};
@ -423,31 +433,34 @@ export default {
break;
case 'center':
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_APPLY_FOR_CENTER_CONTROL;
// delete operate.over;
delete operate.over;
operate.subType = 'center';
operate.param = {stationCodes: [model.code]};
operate.code = model.code;
break;
case 'emergency':
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_EMERGENCY_STATION_CONTROL;
// delete operate.over;
delete operate.over;
operate.subType = 'emergency';
operate.param = {stationCodes: [model.code]};
operate.code = model.code;
break;
case 'interconnected':
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_EMERGENCY_STATION_CONTROL;
// delete operate.over;
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_INTERLOCK_CONTROL;
delete operate.over;
operate.subType = 'interconnected';
operate.param = {stationCodes: [model.code]};
operate.code = model.code;
break;
}
} else {
this.$message.info('请检查操作设备或控制权');
return;
}
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
//
// const operate = Object.assign({}, operate);
if (subType == 'center ' || subType == 'emergency' || subType == 'interconnected' ) {
if (subType == 'center' || subType == 'emergency' || subType == 'interconnected' ) {
operate['operateNext'] = operate.operation = this.Command.close.password.operation;
if (subType == 'center') {
operate['nextCmdType'] = CMD.ControlConvertMenu.CMD_CM_APPLY_FOR_CENTER_CONTROL;
@ -559,7 +572,8 @@ export default {
};
let flag = false;
this.routeList.forEach(item => {
if (item.startSignalCode === deviceList[0].code && item.endSignalCode === deviceList[1].code) {
const endSignalCode = item.endButtonSignalCode || item.endSignalCode;
if (item.startSignalCode === deviceList[0].code && endSignalCode === deviceList[1].code) {
operate.param = {routeCode: item.code, signalCode: deviceList[0].code};
this.deviceList = [];
flag = true;
@ -705,38 +719,37 @@ export default {
this.handelFunctionButton(model, subType);
} else {
const station = this.$store.getters['map/getDeviceByCode'](model.stationCode);
const list1 = ['Local', 'Emergency', 'Interlock'];
const list2 = ['Local', 'Emergency'];
if (station) {
if (station.controlMode == 'Local' || station.controlMode == 'Emergency') {
if (buttonOperation && this.commandTypeList.includes(model._type)) {
this.deviceList.push(model);
if (buttonOperation === this.Signal.arrangementRoute.button.operation) {
if (buttonOperation === this.Signal.arrangementRoute.button.operation && list1.includes(station.controlMode)) {
this.arrangementRouteOperation(this.deviceList);
} else if (buttonOperation === this.MixinCommand.totalCancel.button.operation) {
this.handelTotalCancel(model, subType);
} else if (buttonOperation === this.Signal.humanTrainRoute.button.operation) {
} else if (buttonOperation === this.Signal.humanTrainRoute.button.operation && list1.includes(station.controlMode)) {
this.handleTotalHumanSolution(model);
} else if (buttonOperation === this.Signal.guide.button.operation) {
} else if (buttonOperation === this.Signal.guide.button.operation && list1.includes(station.controlMode)) {
this.handleGuideRoute(this.deviceList);
} else if (buttonOperation === this.Signal.atsAutoControl.button.operation || buttonOperation === this.Signal.humanControl.button.operation) {
} else if ((buttonOperation === this.Signal.atsAutoControl.button.operation || buttonOperation === this.Signal.humanControl.button.operation) && list2.includes(station.controlMode)) {
this.handelControlRoute(model);
} else if (switchOperation.includes(buttonOperation)) {
} else if (switchOperation.includes(buttonOperation) && list1.includes(station.controlMode)) {
this.handelSwitchOperate(model);
} else if (buttonOperation === this.MixinCommand.block.button.operation || buttonOperation === this.MixinCommand.unblock.button.operation) {
} else if ((buttonOperation === this.MixinCommand.block.button.operation || buttonOperation === this.MixinCommand.unblock.button.operation) && list1.includes(station.controlMode)) {
this.handelBlockOrUnblock(model);
} else if (buttonOperation === this.Station.guideLock.button.operation) {
} else if (buttonOperation === this.Station.guideLock.button.operation && station.controlMode === 'Interlock') {
this.handelGuideLock(model);
} else if (buttonOperation === this.Section.fault.button.operation) {
} else if (buttonOperation === this.Section.fault.button.operation && list1.includes(station.controlMode)) {
this.handelFaultSection(model);
} else {
this.clearOperate();
this.operatemode != OperateMode.FAULT && this.$message.info('请检查操作设备或控制权');
}
} else {
this.clearOperate();
this.operatemode != OperateMode.FAULT && this.$message.info('请检查操作设备或控制权');
}
} else {
this.clearOperate();
this.operatemode != OperateMode.FAULT && this.$message.info('请先切换到站控或紧急站控');
}
}
}
},

View File

@ -0,0 +1,105 @@
<template>
<div>
<pop-menu ref="popMenu" :menu="menu" />
<station-back-strategy ref="stationBackStrategy" />
</div>
</template>
<script>
import PopMenu from '@/components/PopMenu';
import StationBackStrategy from './dialog/stationBackStrategy';
import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'MenuStationTurnBack',
components: {
PopMenu,
StationBackStrategy
},
props: {
selected: {
type: Object,
default() {
return null;
}
},
work: {
type: String,
default() {
return '';
}
}
},
data() {
return {
menu: [],
menuNormal: [
{
label: '设置折返策略',
handler: this.setBackStrategy,
cmdType: CMD.Station.CMD_STATION_SET_TURN_BACK_STRATEGY
}
],
menuForce: [
]
};
},
computed: {
...mapGetters('training', [
'mode',
'operatemode'
]),
...mapGetters('menuOperation', [
'buttonOperation'
])
},
watch: {
'$store.state.menuOperation.menuCount': function (val) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.StationTurnBack) && !this.buttonOperation) {
this.doShow(this.$store.state.menuOperation.menuPosition);
} else {
this.doClose();
}
}
},
methods: {
initMenu() {
//
this.menu = [];
this.menuNormal.forEach(menuItem => {
menuItem.disabled = menuItem.isDisabled ? menuItem.isDisabled(this.selected, this.work) : false;
menuItem.show = menuItem.isShow ? menuItem.isShow(this.selected, this.work) : true;
this.menu.push(menuItem);
});
//
if (this.operatemode === OperateMode.FAULT) {
this.menu = this.menuForce;
}
},
doShow(point) {
this.initMenu();
if (this.menu && this.menu.length > 0) {
this.setBackStrategy();
}
},
doClose() {
if (this.$refs && this.$refs.popMenu) {
this.$refs.popMenu.close();
}
},
//
setBackStrategy() {
commitOperate(menuOperate.StationControl.setBackStrategy, {stationCode: this.selected.stationCode}, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.stationBackStrategy.doShow(operate, this.selected);
}
});
}
}
};
</script>

View File

@ -13,48 +13,48 @@
>
<div class="main">
<div class="left">
<div class="left-type">Station</div>
<div class="left-type">车站</div>
<div class="type-content">
<div class="content-item">
<img :src="shouxinImg" style="width: 58px; height: 58px">
<div>Receive order box</div>
<div>收令箱</div>
</div>
</div>
</div>
<div class="content-box">
<div class="box-top">
<div class="top-title">Receive order box</div>
<div class="top-title">收令箱</div>
<div class="top-table">
<el-table :data="cmdTableData" border style="width: 100%" height="160" highlight-current-row :row-class-name="tableRowClassName" @current-change="handleCurrentChange">
<el-table-column prop="title" label="Title" show-overflow-tooltip />
<el-table-column prop="cmdCode" label="Number" width="80" />
<el-table-column label="Order type" width="100">
<el-table-column prop="title" label="标题" show-overflow-tooltip />
<el-table-column prop="cmdCode" label="号码" width="80" />
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column label="Date of receipt" width="160">
<el-table-column label="收令日期" width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getStateInfo(scope.row.rcvCompanies).time || '' }}</span>
</template>
</el-table-column>
<el-table-column label="Issuing unit" show-overflow-tooltip>
<el-table-column label="发令单位" show-overflow-tooltip>
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.sendCompany ? scope.row.sendCompany.name : '' }}</span>
</template>
</el-table-column>
<el-table-column prop="sender" label="Initiator" show-overflow-tooltip/>
<el-table-column label="Signed or not">
<el-table-column prop="sender" label="发令人" show-overflow-tooltip />
<el-table-column label="签否">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getSignedStatus(getStateInfo(scope.row.rcvCompanies)) }}</span>
</template>
</el-table-column>
<el-table-column label="Signatory" show-overflow-tooltip>
<el-table-column label="签收人" show-overflow-tooltip>
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getSignedBy(scope.row.rcvCompanies) || '' }}</span>
</template>
</el-table-column>
<el-table-column label="Receipt time" width="160">
<el-table-column label="签收时间" width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getStateInfo(scope.row.rcvCompanies).time || '' }}</span>
</template>
@ -64,26 +64,26 @@
</div>
<div class="box-middle">
<div class="middle-left">
<el-input v-model="currentInfo.content" readonly type="textarea" rows="19" resize="none" placeholder="Please enter the content" />
<el-input v-model="currentInfo.content" readonly type="textarea" rows="19" resize="none" placeholder="请输入内容" />
</div>
<div class="middle-right">
<div class="middle-right-top">
<el-table :data="getTableData" border style="width: 100%" height="190">
<el-table-column type="index" label="Index" width="53" />
<el-table-column prop="name" label="Ordered unit" width="105" />
<el-table-column prop="copyers" label="Place of receipt" />
<el-table-column type="index" label="序" width="50" />
<el-table-column prop="name" label="受令单位" />
<el-table-column prop="copyers" label="抄知处所" />
</el-table>
</div>
<div class="middle-right-middle">
<span>Read information</span>
<el-checkbox v-model="needRead">To be read</el-checkbox>
<el-checkbox v-model="stopRead">Stop reading</el-checkbox>
<span>阅读信息</span>
<el-checkbox v-model="needRead">需阅读</el-checkbox>
<el-checkbox v-model="stopRead">停止阅读</el-checkbox>
</div>
<div class="middle-right-bottom">
<el-table :data="readList" border style="width: 100%" height="200">
<el-table-column type="index" label="Index" width="53" />
<el-table-column prop="reader" label="Read by" />
<el-table-column prop="readTime" label="Reading time" />
<el-table-column type="index" label="序" width="50" />
<el-table-column prop="reader" label="阅读人" />
<el-table-column prop="readTime" label="阅读时间" />
</el-table>
</div>
</div>
@ -91,9 +91,9 @@
</div>
</div>
<div class="bottom-btn">
<el-button :id="getDomObj('signCmdFalse').domId" :disabled="!commandId || currentHasSigned" @click="signCmd(false)">Refusal</el-button>
<el-button :id="getDomObj('signCmdTrue').domId" :disabled="!commandId || currentHasSigned" @click="signCmd(true)">Sign</el-button>
<el-button @click="doClose">Close</el-button>
<el-button :id="getDomObj('signCmdFalse').domId" :disabled="!commandId || currentHasSigned" @click="signCmd(false)">拒签</el-button>
<el-button :id="getDomObj('signCmdTrue').domId" :disabled="!commandId || currentHasSigned" @click="signCmd(true)">签收</el-button>
<el-button @click="doClose">关闭</el-button>
</div>
</el-dialog>
</template>
@ -115,21 +115,21 @@ export default {
currentInfo: {},
queryResData: {},
typeObj: {
Normal: 'General scheduling command',
Construct: 'Construction scheduling command',
Forward: 'Forward scheduling command',
Request: 'Request scheduling command',
LongTerm: 'Long-acting scheduling command',
ShiftScheduling: 'Shift scheduling command',
Other: 'Other'
Normal: '普通调度命令',
Construct: '施工调度命令',
Forward: '转发调度命令',
Request: '请求调度命令',
LongTerm: '长效调度命令',
ShiftScheduling: '班计划调度命令',
Other: '其他调度命令'
},
signedStatusObj: {
Cache: 'Cache',
Sent: 'Send',
SrmReceived: 'Self-regulating machine received',
Received: 'Received',
Signed: 'Signed',
Reject: 'Reject'
Cache: '缓存',
Sent: '已发送',
SrmReceived: '自律机接收',
Received: '已接收',
Signed: '已签收',
Reject: '已拒签'
}
};
},
@ -147,7 +147,7 @@ export default {
return this.$route.query.group;
},
title() {
return 'Scheduling command management';
return '调度命令管理';
},
commandId() {
return this.currentInfo.cmdId || '';

View File

@ -33,6 +33,16 @@
</el-select>
</el-col>
</el-row>
<el-row>
<el-col :span="11">预选模式</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-select v-model="addModel.preselectionMode" size="small">
<el-option v-for="option in modeList" :key="option.value" :label="option.label" :value="option.value" />
</el-select>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="10">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
@ -71,10 +81,18 @@ export default {
addModel: {
groupNumber: '',
right: '',
sectionCode: ''
sectionCode: '',
preselectionMode: 'RM'
},
dialogShow: false,
loading: false
loading: false,
modeList: [
{ value: 'AM_C', label: 'AM-C模式' },
{ value: 'SM_C', label: 'SM-C模式' },
{ value: 'AM_I', label: 'AM-I模式'},
{ value: 'SM_I', label: 'SM-I模式' },
{ value: 'RM', label: 'RM模式' }
]
};
},
computed: {
@ -119,7 +137,8 @@ export default {
this.addModel = {
groupNumber: '',
right: '',
sectionCode: ''
sectionCode: '',
preselectionMode: 'RM'
};
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
@ -133,7 +152,8 @@ export default {
const params = {
groupNumber: this.addModel.groupNumber,
sectionCode: this.addModel.sectionCode,
right: this.addModel.right
right: this.addModel.right,
preselectionMode: this.addModel.preselectionMode
};
this.messageTip1 = '';
this.loading = true;

View File

@ -16,24 +16,23 @@
<el-row>
<el-form ref="form" :model="formModel" :rules="rules">
<el-col :span="24">
<el-form-item prop="speedLimit" label="Speed limit">
<el-form-item prop="speedLimit" label="限速">
<el-input v-model="formModel.speedLimit" style="width: 115px;margin-right: 10px;" size="small" />
<span>km/h</span>
<el-tooltip style="margin-left: 10px;" effect="dark" content="Value between 5 and 65, leave blank to cancel speed limit" placement="top-start">
<el-tooltip style="margin-left: 10px;" effect="dark" content="值为5-65之间不填为取消限速" placement="top-start">
<i class="el-icon-warning" />
</el-tooltip>
</el-form-item>
<el-form-item prop="through" label="Mode">
<el-radio-group v-model="formModel.through">
<el-radio :label="1">Drive through red lights</el-radio><br>
<el-radio style="margin-top: 10px" :label="2">Oversteer</el-radio><br>
<el-radio style="margin-top: 10px" :label="3">Running to the station ahead</el-radio><br>
<el-radio style="margin-top: 10px" :label="4">Approach blocking method of travel</el-radio><br>
<el-radio style="margin-top: 10px" :label="0">No</el-radio>
<el-form-item prop="through" label="方式:">
<el-radio-group v-model="formModel.through" style="text-align: left;">
<el-radio :label="1">越红灯行驶</el-radio><br>
<el-radio style="margin-top: 10px" :label="2">越引导行驶</el-radio><br>
<el-radio style="margin-top: 10px" :label="3">运行至前方车站</el-radio><br>
<el-radio style="margin-top: 10px" :label="0">进路闭塞法行车</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="targetDeviceCode" label="Destination:">
<el-select ref="faultSelect1" v-model="formModel.targetDeviceCode" filterable clearable size="small" style="height: 32px;line-height: 32px;" placeholder="Please select">
<el-form-item prop="targetDeviceCode" label="目的地:">
<el-select ref="faultSelect1" v-model="formModel.targetDeviceCode" filterable clearable size="small" style="height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in selectedList"
:key="item.code"
@ -41,7 +40,7 @@
:value="item.code"
/>
</el-select>
<el-tooltip style="margin-left: 10px;" effect="dark" content="Point-and-click on the station map" placement="top-start">
<el-tooltip style="margin-left: 10px;" effect="dark" content="可在站场图上进行点选" placement="top-start">
<i class="el-icon-warning" />
</el-tooltip>
<!--<el-button-->
@ -56,8 +55,8 @@
</template>
<template v-else>
<el-row class="header">
<el-col :span="11"><span>Equipment:</span></el-col>
<el-col :span="11" :offset="2"><span>Fault type:</span></el-col>
<el-col :span="11"><span>设备:</span></el-col>
<el-col :span="11" :offset="2"><span>故障类型:</span></el-col>
</el-row>
<el-row>
<el-form ref="form" :model="form" :rules="rules">
@ -68,7 +67,7 @@
</el-col>
<el-col :span="11" :offset="2">
<el-form-item prop="faultType">
<el-select ref="faultSelect2" v-model="form.faultType" size="small" style="height: 32px;line-height: 32px;" placeholder="Please select">
<el-select ref="faultSelect2" v-model="form.faultType" size="small" style="height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in faultList"
:key="item.value"
@ -83,10 +82,10 @@
</template>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">Confirm</el-button>
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel">Cancel</el-button>
<el-button :id="domIdCancel" @click="cancel">取消</el-button>
</el-col>
</el-row>
</div>
@ -135,7 +134,7 @@ export default {
selected: null,
rules: {
faultType: [
{ required: true, message: 'Please select fault type', trigger: 'change'}
{ required: true, message: '请选择故障类型', trigger: 'change'}
]
}
};
@ -161,11 +160,11 @@ export default {
},
title() {
if (this.operation == OperationEvent.MixinCommand.stoppage.menu.operation) {
return 'Set faults';
return '设置故障';
} else if (this.operation == OperationEvent.MixinCommand.cancelStoppage.menu.operation) {
return 'Cancel faults';
return '取消故障';
} else if (this.operation == OperationEvent.MixinCommand.collocation.menu.operation) {
return 'Driving';
return '驾驶';
}
return '';
}
@ -204,7 +203,7 @@ export default {
if (name) {
this.deviceName = deviceType[selected._type] + '-' + name;
} else if (selected._type == 'Server') {
this.deviceName = 'Server';
this.deviceName = '服务器';
} else {
this.deviceName = deviceType[selected._type];
}
@ -217,38 +216,70 @@ export default {
// }
if (selected._type === 'Section' && this.popClass === 'haerbin-01__systerm') {
this.faultList = [
{label: 'Gauge shaft fault', value: 'FAULT'},
{label: 'Communication train occupancy', value: 'CBTC_OCCUPIED_FAULT'}
{label: '计轴故障', value: 'FAULT'},
{label: '通信车占用', value: 'CBTC_OCCUPIED_FAULT'}
];
} else if (selected._type === 'Section' && this.popClass === 'datie-02__systerm') {
this.faultList = [
{label: 'Circuit failure', value: 'FAULT'},
{label: 'Fault lockout', value: 'FAULT_LOCK'}
{label: '电路故障', value: 'FAULT'},
{label: '故障锁闭', value: 'FAULT_LOCK'}
// {label: '', value: 'CBTC_OCCUPIED_FAULT'}
];
// } else if (selected._type === 'Switch' && this.popClass === 'haerbin-01__systerm') {
// this.faultList = [
// {label: 'Split', value: 'SPLIT'},
// {label: 'Normal split', value: 'NORMAL_SPLIT'},
// {label: 'Reverse split', value: 'REVERSE_SPLIT'},
// {label: 'Squeeze', value: 'SQUEEZE'},
// {label: 'Communication train occupancy', value: 'CBTC_OCCUPIED_FAULT'},
// {label: 'Axle fault', value: 'AXLE_FAULT'}
// ];
} else if (selected._type === 'Switch' && this.popClass === 'haerbin-01__systerm') {
this.faultList = [
{label: '失表', value: 'SPLIT'},
{label: '定位失表', value: 'NORMAL_SPLIT'},
{label: '反位失表', value: 'REVERSE_SPLIT'},
{label: '挤岔', value: 'SQUEEZE'},
{label: '通信车占用', value: 'CBTC_OCCUPIED_FAULT'},
{label: '计轴故障', value: 'AXLE_FAULT'}
];
} else if (selected._type === 'Switch' && this.popClass === 'datie-02__systerm') {
this.faultList = [
{label: 'Out of position', value: 'SPLIT'},
{label: 'Normal Out of position', value: 'NORMAL_SPLIT'},
{label: 'Reverse Out of position', value: 'REVERSE_SPLIT'},
{label: 'Squeeze off', value: 'SQUEEZE'},
{label: '失表', value: 'SPLIT'},
{label: '定位失表', value: 'NORMAL_SPLIT'},
{label: '反位失表', value: 'REVERSE_SPLIT'},
{label: '挤岔', value: 'SQUEEZE'},
// {label: '', value: 'CBTC_OCCUPIED_FAULT'},
{label: 'Circuit failure', value: 'AXLE_FAULT'}
{label: '电路故障', value: 'AXLE_FAULT'}
];
} else if (selected._type === 'Section' && this.popClass === 'xian-01__systerm') {
this.faultList = [
{label: '红光带故障', value: 'FAULT'},
{label: '粉光带故障', value: 'CBTC_OCCUPIED_FAULT'},
{label: '橙光带故障', value: 'ARB'}
];
} else if (selected._type === 'Switch' && this.popClass === 'xian-01__systerm' ) {
this.faultList = [
{label: '失表', value: 'SPLIT'},
{label: '定位失表', value: 'NORMAL_SPLIT'},
{label: '反位失表', value: 'REVERSE_SPLIT'},
{label: '挤岔', value: 'SQUEEZE'},
{label: '粉光带故障', value: 'CBTC_OCCUPIED_FAULT'},
{label: '红光带故障', value: 'AXLE_FAULT'},
{label: '橙光带故障', value: 'ARB'}
];
} else if (selected._type === 'Switch' && this.popClass === 'nanjing-02__systerm' ) {
this.faultList = [
{label: '短闪', value: 'SPLIT'},
{label: '短闪(转动后恢复)', value: 'SPLIT_1'},
{label: '定位短闪', value: 'NORMAL_SPLIT'},
{label: '反位短闪', value: 'REVERSE_SPLIT'},
{label: '长闪', value: 'SQUEEZE'},
{label: '道岔区段灰显', value: 'SECTION_NO_STATUS'},
{label: '红光带故障', value: 'CBTC_OCCUPIED_FAULT'},
{label: '紫光带故障', value: 'AXLE_FAULT'},
{label: '计轴受扰', value: 'ARB'}
];
} else if (selected._type === 'Server' && this.popClass === 'nanjing-02__systerm') {
this.faultList = [
{label: 'ATS故障', value: 'ATS_FAULT' }
];
} else if (selected._type === 'Signal' && this.popClass === 'nanjing-02__systerm') {
this.faultList = [
{label: '无法开放(非CTC)', value: 'NO_OPEN'},
{label: '编号闪', value: 'LIGHTING_UNIT_FAULT_NAME'},
{label: '机头闪', value: 'LIGHTING_UNIT_FAULT_HEAD'}
{label: '红灯断丝', value: 'R_WIRE_FAULT'},
{label: '绿灯断丝', value: 'G_WIRE_FAULT'},
{label: '黄灯断丝', value: 'Y_WIRE_FAULT'}
];
} else if (selected._type === 'Section' && this.popClass === 'nanjing-02__systerm') {
this.faultList = [
@ -377,12 +408,12 @@ export default {
this.doClose();
} else {
this.doClose();
this.$messageBox('Failed to set or cancel the fault!');
this.$messageBox('设置或取消故障操作失败!');
}
}).catch((error) => {
this.loading = false;
this.doClose();
this.$messageBox(error.message || 'Failed to set or cancel the fault!');
this.$messageBox(error.message || '设置或取消故障操作失败!');
});
},

View File

@ -11,8 +11,8 @@
:close-on-click-modal="false"
>
<el-row class="header">
<el-col :span="11"><span>Station name</span></el-col>
<el-col :span="11" :offset="2"><span>Switch</span></el-col>
<el-col :span="11"><span>车站名称</span></el-col>
<el-col :span="11" :offset="2"><span>道岔</span></el-col>
</el-row>
<el-row>
<el-col :span="11">
@ -23,20 +23,20 @@
</el-col>
</el-row>
<div style="padding: 10px 15px; border: 1px double lightgray;height: 60px;margin-top: 15px;">
<span class="base-label" style="left:-10px;background:#f0f0f0;">Hook lock position</span>
<div style=" position: relative; top:-10px;">
<span class="base-label" style="left:-10px;background:#f0f0f0;">钩锁位置</span>
<div style=" position: relative; top:10px;">
<el-radio-group v-model="normal">
<el-radio :label="true">Normal</el-radio>
<el-radio :label="false">Reverse</el-radio>
<el-radio :label="true">定位</el-radio>
<el-radio :label="false">反位</el-radio>
</el-radio-group>
</div>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button type="primary" :loading="loading" @click="commit">Confirm</el-button>
<el-button type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button @click="doClose">Cancel</el-button>
<el-button @click="doClose"></el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" :pop-class="popClass" />

View File

@ -1,7 +1,7 @@
<template>
<el-dialog
v-dialogDrag
title="Train Control"
title="列车操作"
:visible.sync="dialogVisible"
width="30%"
:modal="false"
@ -20,7 +20,7 @@
/>
</el-col>
<el-col :span="3" :offset="2">
<el-button size="mini" type="danger" style="margin-top: 15px;" @click="brakeTrain">brake</el-button>
<el-button size="mini" type="danger" style="margin-top: 15px;" @click="brakeTrain">刹车</el-button>
</el-col>
</el-row>
<el-row style="margin-top: 40px">
@ -35,7 +35,7 @@
</el-col>
</el-row>
<el-row style="text-align: center;margin-top: 15px;">
<el-button type="primary" size="mini" @click="handleRun">Run</el-button>
<el-button type="primary" size="mini" @click="handleRun">自动运行</el-button>
</el-row>
</el-dialog>
</template>
@ -44,7 +44,7 @@
import LeftTrain from '@/assets/left_train.png';
import RightTrain from '@/assets/right_train.png';
import { sandTableTrainControl } from '@/api/simulation';
import { menuOperate } from '@/jmapNew/theme/components/utils/menuOperate';
import {menuOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'TrainOperation',
data() {
@ -117,7 +117,7 @@ export default {
adjustDirection() {
sandTableTrainControl(this.$route.query.group, { groupNumber: this.groupNumber, right: !this.right, speed: this.speed }).then(resp => {
this.right = !this.right;
}).catch(err => { this.$message.error(err.message); });
}).catch(err => { this.$message.error(err.message); }).finally(() => { this.changeSpeedFlag = false; });
},
brakeTrain() {
sandTableTrainControl(this.$route.query.group, { groupNumber: this.groupNumber, right: this.right, speed: 0 }).then(resp => {
@ -146,7 +146,7 @@ export default {
}
}).catch((error) => {
this.$messageBox(error.message || 'Failed to set or cancel the fault!');
});
}).finally(() => { this.changeSpeedFlag = false; });
}
}
};

View File

@ -13,7 +13,7 @@
>
<el-form ref="form" size="small" label-width="80px" :model="addModel" @submit.native.prevent>
<div style="width: 96%;">
<el-form-item label="is or isn't EB:" label-width="95px" prop="speedLimit">
<el-form-item label="是否EB:" label-width="95px" prop="speedLimit">
<div style="display: flex;align-items: center;">
<el-checkbox v-model="addModel.eb" />
</div>
@ -22,10 +22,10 @@
</el-form>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button type="primary" :loading="loading" @click="commit">Confirm</el-button>
<el-button type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button @click="doClose">Cancel</el-button>
<el-button @click="doClose"></el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" :pop-class="popClass" />
@ -67,7 +67,7 @@ export default {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
return 'Input speed limit';
return '输入限速值';
}
},
watch:{

View File

@ -13,6 +13,7 @@ import SetTrainOperation from '@/jmapNew/theme/components/menus/dialog/setTrainO
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import { DeviceMenu } from '@/scripts/ConstDic';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
export default {
name: 'MenuTrain',
components: {
@ -87,6 +88,31 @@ export default {
{
label: '回库',
handler: this.setInbound
},
{
label: '受电弓操作',
children: [
{
label: '受电弓1升',
handler: this.pantogrphOneUp,
cmdType: CMD.Driver.CMD_SPECIAL_PANTOGRAPH_UP_DOWN
},
{
label: '受电弓1降',
handler: this.pantogrphOneDown,
cmdType: CMD.Driver.CMD_SPECIAL_PANTOGRAPH_UP_DOWN
},
{
label: '受电弓2升',
handler: this.pantogrphTwoUp,
cmdType: CMD.Driver.CMD_SPECIAL_PANTOGRAPH_UP_DOWN
},
{
label: '受电弓2降',
handler: this.pantogrphTwoDown,
cmdType: CMD.Driver.CMD_SPECIAL_PANTOGRAPH_UP_DOWN
}
]
}
]
};
@ -211,6 +237,34 @@ export default {
this.$refs.popMenu.close();
// this.$store.dispatch('map/setTrainWindowShow', false);
}
},
pantogrphOneUp() {
commitOperate(menuOperate.Driver.specialPantographUpDown, { index: 1, up: true, groupNumber: this.selected.code }, 3).then(({valid, operate}) => {
}).catch((error)=> {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
pantogrphOneDown() {
commitOperate(menuOperate.Driver.specialPantographUpDown, { index: 1, up: false, groupNumber: this.selected.code }, 3).then(({valid, operate}) => {
}).catch((error)=> {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
pantogrphTwoUp() {
commitOperate(menuOperate.Driver.specialPantographUpDown, { index: 2, up: true, groupNumber: this.selected.code }, 3).then(({valid, operate}) => {
}).catch((error)=> {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
pantogrphTwoDown() {
commitOperate(menuOperate.Driver.specialPantographUpDown, { index: 2, up: false, groupNumber: this.selected.code }, 3).then(({valid, operate}) => {
}).catch((error)=> {
console.error(error);
this.$refs.noticeInfo.doShow();
});
}
}
};

View File

@ -2,7 +2,7 @@
<el-dialog
v-dialogDrag
:class="popClass+' passive-control'"
title="Request Control Mode"
title="控制模式请求"
:visible.sync="show"
width="700px"
:before-close="doClose"
@ -11,7 +11,7 @@
:modal="false"
:close-on-click-modal="false"
>
<span class="control-label">{{ `${requestInfo} request control mode for the following areas` }}</span>
<span class="control-label">{{ `${requestInfo}请求如下区域的控制模式` }}</span>
<el-table
ref="multipleTable"
:data="tableData"
@ -23,35 +23,35 @@
size="mini"
highlight-current-row
>
<el-table-column prop="operate" label="Operating area">
<el-table-column prop="operate" label="操作区域">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.operate }}</span>
</template>
</el-table-column>
<el-table-column prop="control" label="Current control mode" width="120">
<el-table-column prop="control" label="当前控制模式" width="120">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.control.name }}</span>
</template>
</el-table-column>
<el-table-column prop="target" label="Request control mode" width="120">
<el-table-column prop="target" label="请求控制模式" width="120">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.target.name }}</span>
</template>
</el-table-column>
<el-table-column prop="agree" label="Agree" width="140">
<el-table-column prop="agree" label="是否同意" width="140">
<template slot-scope="scope">
<el-checkbox ref="agree" v-model="scope.row.agree" :disabled="scope.row.disabled" />
</template>
</el-table-column>
</el-table>
<span class="control-label">Two {{ count }} to speak. Respond.</span>
<span class="control-label">距离对话还有{{ count }}请应答</span>
<el-row class="button-group">
<el-col :span="10" :offset="3">
<el-button :id="domAgree" :disabled="disabledAgree" @click="agree">Agree
<el-button :id="domAgree" :disabled="disabledAgree" @click="agree">同意
</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdRefuse" :disabled="disabledRefuse" @click="refuse">Refuse</el-button>
<el-button :id="domIdRefuse" :disabled="disabledRefuse" @click="refuse">拒绝</el-button>
</el-col>
</el-row>
<!-- ningbo-01__systerm -->
@ -83,11 +83,11 @@ export default {
dialogShow: false,
disabledAgree: false,
disabledRefuse: false,
requestInfo: 'Dispatcher 1 workstation',
requestInfo: '调度员1工作站',
controlProps: {
'Center': 'Center',
'Local': 'Local',
'Emergency':'Emergency'
'Center': this.$t('menu.passiveDialog.inTheControl'),
'Local': this.$t('menu.passiveDialog.stationControl'),
'Emergency':this.$t('menu.passiveDialog.emergencyControl')
},
selection: [],
tableData: [],
@ -206,9 +206,7 @@ export default {
let info = SimulationType[member.type];
if (member.deviceCode) {
const device = this.$store.getters['map/getDeviceByCode'](member.deviceCode);
if (device) {
info = info + `(${device.name})`;
}
info = info + `(${device.name})`;
}
if (member.userId) {
simulationUserList.forEach(item => {
@ -271,7 +269,7 @@ export default {
}
});
} else if (!selection) {
this.$messageBox('Please select a piece of data');
this.$messageBox('请选择一条数据');
}
},
agree() {

View File

@ -1,20 +1,35 @@
import store from '@/store/index';
import store from "@/store/index";
/**
* 判断菜单行值控制全
* @param {String} stationCode 所属车站code
* @param {String} centralStationCode 所属集中站code
* @param {String} work 当前客户端
* */
export function judgeStationControl(stationCode, centralStationCode, work) {
const centralStation = store.getters['map/getDeviceByCode'](centralStationCode);
// 角色车站是 设备所属车站或所属集中站
if (work === 'localWork') {
const flag1 = store.state.training.roleDeviceCode === stationCode || store.state.training.roleDeviceCode === centralStationCode;
const flag2 = centralStation.controlMode === 'Local' || centralStation.controlMode === 'Emergency';
return flag1 && flag2;
} else if ( work === 'dispatchWork' ) {
return centralStation.controlMode === 'Center';
} else {
return true;
}
export function judgeStationControl(
stationCode,
centralStationCode,
work,
isAvailableInOtherControlMode
) {
const centralStation = store.getters["map/getDeviceByCode"](
centralStationCode
);
const isCenterMode = centralStation.controlMode === "Center";
const isLocalMode =
centralStation.controlMode === "Local" ||
centralStation.controlMode === "Emergency";
// 角色车站是 设备所属车站或所属集中站
if (work === "localWork") {
const isBelongingStation =
store.state.training.roleDeviceCode === stationCode ||
store.state.training.roleDeviceCode === centralStationCode;
return (
((isCenterMode && isAvailableInOtherControlMode) || isLocalMode) &&
isBelongingStation
);
} else if (work === "dispatchWork") {
return isCenterMode || (isLocalMode && isAvailableInOtherControlMode);
} else {
return true;
}
}

View File

@ -388,6 +388,14 @@ export const menuOperate = {
// 非常站控 大铁线路
operation: OperationEvent.StationControl.requestVeryControl.menu.operation,
cmdType:CMD.ControlConvertMenu.CMD_CM_SPECIAL_STATION_CONTROL
},
replyStationControl: {
operation: OperationEvent.StationControl.controlResponse.agree.operation,
cmdType: CMD.ControlConvertMenu.CMD_CM_REPLY_STATION_CONTROL
},
replyCenterControl: {
operation: OperationEvent.StationControl.controlResponse.agree.operation,
cmdType: CMD.ControlConvertMenu.CMD_CM_REPLY_CENTER_CONTROL
}
},
TrainWindow: {
@ -631,6 +639,10 @@ export const menuOperate = {
takeOver: {
operation: OperationEvent.Driver.takeOver.menu.operation,
cmdType: CMD.Driver.CMD_DRIVER_TAKEOVER
},
specialPantographUpDown: {
operation: OperationEvent.Driver.pantograph.menu.operation,
cmdType: CMD.Driver.CMD_SPECIAL_PANTOGRAPH_UP_DOWN
}
},
CTC: {

View File

@ -0,0 +1,141 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm confirm-control"
:title="title"
:visible.sync="show"
width="360px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div class="context">
<template v-for="(message, index) in messages">
<span :key="index">{{ message }}</span>
</template>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
export default {
name: 'ConfirmControl',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
operate: {},
messages: '',
operation: null
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
if (this.operation === OperationEvent.Signal.signalClose.menu.operation) {
return '信号关灯';
}
return '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
if (this.dialogShow) {
if (this.operation === OperationEvent.Signal.signalClose.menu.operation) {
/** 信号关灯*/
return OperationEvent.Signal.signalClose.confirm.domId;
}
}
return '';
}
},
methods: {
doShow(operate) {
if (!this.dialogShow) {
this.loading = false;
this.operate = operate || {};
this.messages = operate.messages;
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
if (this.operation === OperationEvent.Signal.signalClose.menu.operation) {
/** 信号关灯*/
this.signalClose();
}
},
//
signalClose() {
const operate = {
over: true,
operation: OperationEvent.Signal.signalClose.confirm.operation,
cmdType: CMD.Signal.CMD_SIGNAL_CLOSE_SIGNAL
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style>
.confirm-control .context {
padding-bottom: 40px !important;
border: 1px solid lightgray;
}
</style>

View File

@ -0,0 +1,156 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm confirm-control-speed"
:title="title"
:visible.sync="show"
width="540px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div style="height: 60px; padding-left: 20px">
<span style="font-size: 18px">{{ message }}</span>
</div>
<el-row justify="center" class="button-group">
<el-col :span="6" :offset="6">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="10" :offset="2">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'ConfirmControlSpeed',
data() {
return {
dialogShow: false,
loading: false,
type: '',
operation: '',
message: ''
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
if (this.operation === OperationEvent.Section.setSpeed.order.operation) {
return '区段设置限速';
} else if (this.operation === OperationEvent.Section.cancelSpeed.order.operation) {
return '区段取消限速';
} else if (this.operation === OperationEvent.Switch.setSpeed.order.operation) {
return '道岔设置限速';
} else if (this.operation === OperationEvent.Switch.cancelSpeed.order.operation) {
return '道岔取消限速';
}
return '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
if (this.operation === OperationEvent.Section.setSpeed.order.operation) {
/** 区段设置限速*/
return OperationEvent.Section.setSpeed.confirm.domId;
} else if (this.operation === OperationEvent.Section.cancelSpeed.order.operation) {
/** 区段取消限速*/
return OperationEvent.Section.cancelSpeed.confirm.domId;
} else if (this.operation === OperationEvent.Switch.setSpeed.order.operation) {
/** 道岔设置限速*/
return OperationEvent.Switch.setSpeed.confirm.domId;
} else if (this.operation === OperationEvent.Switch.cancelSpeed.order.operation) {
/** 道岔取消限速*/
return OperationEvent.Switch.cancelSpeed.confirm.domId;
}
return '';
}
},
methods: {
doShow(operate) {
if (!this.dialogShow) {
this.type = operate.type;
this.operation = operate.operation;
this.message = operate.message;
}
this.loading = false;
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
const operate = {
type: this.type
};
if (this.operation === OperationEvent.Section.setSpeed.order.operation) {
/** 区段设置限速*/
operate.operation = OperationEvent.Section.setSpeed.confirm.operation;
} else if (this.operation === OperationEvent.Section.cancelSpeed.order.operation) {
/** 区段取消限速*/
operate.operation = OperationEvent.Section.cancelSpeed.confirm.operation;
} else if (this.operation === OperationEvent.Switch.setSpeed.order.operation) {
/** 道岔设置限速*/
operate.operation = OperationEvent.Switch.setSpeed.confirm.operation;
} else if (this.operation === OperationEvent.Switch.cancelSpeed.order.operation) {
/** 道岔取消限速*/
operate.operation = OperationEvent.Switch.cancelSpeed.confirm.operation;
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
if (valid) {
this.$emit('setOperate', { step: 1, success: true });
this.doClose();
}
}).catch(() => {
this.loading = false;
this.$emit('setOperate', { step: 0, success: false });
this.doClose();
});
},
cancel() {
const operate = {
type: this.type,
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
if (valid) {
this.$emit('setOperate', { step: 0, success: false });
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style>
.confirm-control-speed .context {
padding-bottom: 40px !important;
border: 1px solid lightgray;
}
</style>

View File

@ -0,0 +1,74 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm confirm-control-speed"
:title="title"
:visible.sync="show"
width="340px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div style="height: 60px; padding-left: 20px">
<span style="font-size: 18px">{{ message }}</span>
</div>
<el-row justify="center" class="button-group">
<el-col :span="11">
<el-button :id="confirmId" type="primary" @click="confirm">确定</el-button>
</el-col>
<el-col :span="11" :offset="2">
<el-button @click="doClose"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
export default {
name: 'ConfirmTip',
data() {
return {
dialogShow: false,
message: '',
confirmId: ''
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
return '提示';
}
},
mounted() {
},
methods: {
doShow(operate) {
this.message = operate.message;
this.dialogShow = true;
this.confirmId = operate.confirmId;
},
confirm() {
this.$emit('close');
},
doClose() {
this.dialogShow = false;
}
}
};
</script>
<style scoped>
.confirm-control-speed .context {
padding-bottom: 40px !important;
border: 1px solid lightgray;
}
.chengdou-03__systerm .el-dialog .el-button{
display: block;
margin: 0 auto;
}
</style>

View File

@ -0,0 +1,173 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm confirm-control"
:title="title"
:visible.sync="show"
width="360px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div class="context">
<template v-for="(message, index) in messages">
<span :key="index">{{ message }}</span>
</template>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'ConfirmTrain',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
operate: {},
messages: '',
operation: null
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
if (this.operation === OperationEvent.Train.addTrainId.menu.operation) {
return '添加列车识别号';
} else if (this.operation === OperationEvent.Train.editTrainId.menu.operation) {
return '修改列车识别号';
} else if (this.operation === OperationEvent.Train.delTrainId.menu.operation) {
return '删除列车识别号';
} else if (this.operation === OperationEvent.Train.moveTrainId.menu.operation) {
return '移动列车识别号';
} else if (this.operation === OperationEvent.Train.switchTrainId.menu.operation) {
return '交换列车识别号';
} else if (this.operation === OperationEvent.Train.editTrainNo.menu.operation) {
return '修改车组号';
}
return '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
if (this.operation === OperationEvent.Train.addTrainId.menu.operation) {
/** 添加列车识别号*/
return OperationEvent.Train.addTrainId.confirm.domId;
} else if (this.operation === OperationEvent.Train.editTrainId.menu.operation) {
/** 修改列车识别号*/
return OperationEvent.Train.editTrainId.confirm.domId;
} else if (this.operation === OperationEvent.Train.delTrainId.menu.operation) {
/** 删除列车识别号*/
return OperationEvent.Train.delTrainId.confirm.domId;
} else if (this.operation === OperationEvent.Train.moveTrainId.menu.operation) {
/** 移动列车识别号*/
return OperationEvent.Train.moveTrainId.confirm.domId;
} else if (this.operation === OperationEvent.Train.switchTrainId.menu.operation) {
/** 交换列车识别号*/
return OperationEvent.Train.switchTrainId.confirm.domId;
} else if (this.operation === OperationEvent.Train.editTrainNo.menu.operation) {
/** 修改车组号*/
return OperationEvent.Train.editTrainNo.confirm.domId;
}
return '';
}
},
methods: {
doShow(operate) {
if (!this.dialogShow) {
this.loading = false;
this.operate = operate || {};
this.messages = operate.messages;
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('map/setTrainWindowShow', false);
this.$store.dispatch('training/emitTipFresh');
},
commit() {
if (this.operation === OperationEvent.Train.addTrainId.menu.operation) {
this.routeSetting();
} else if (this.operation === OperationEvent.Train.editTrainId.menu.operation) {
this.routeSetting();
} else if (this.operation === OperationEvent.Train.delTrainId.menu.operation) {
this.routeSetting();
} else if (this.operation === OperationEvent.Train.moveTrainId.menu.operation) {
this.routeSetting();
} else if (this.operation === OperationEvent.Train.switchTrainId.menu.operation) {
this.routeSetting();
} else if (this.operation === OperationEvent.Train.editTrainNo.menu.operation) {
this.routeSetting();
}
},
//
routeSetting() {
const operate = {
send: true,
type: this.operate.type,
operation: OperationEvent.Train.addTrainId.confirm.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
type: this.operate.type,
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style>
.confirm-control .context {
padding-bottom: 40px !important;
border: 1px solid lightgray;
}
</style>

View File

@ -0,0 +1,194 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm"
:visible.sync="show"
width="360px"
:before-close="doClose"
:z-index="2000"
:modal="false"
title="密码校验"
:close-on-click-modal="false"
append-to-body
>
<el-row>
<el-col :span="22" :offset="1">
<el-input v-model="encryptionPassword" placeholder="请使用软键盘输入" size="medium" :disabled="true" />
</el-col>
</el-row>
<el-row v-if="showMistake">
<el-col :span="22" :offset="1">
<span class="password-error">*密码输入错误请重新输入*</span>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button @click="inputNum(7)">7</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputNum(8)">8</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputNum(9)">9</el-button>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button @click="inputNum(4)">4</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputNum(5)">5</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputNum(6)">6</el-button>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button @click="inputNum(1)">1</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputNum(2)">2</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputNum(3)">3</el-button>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button @click="inputNum(0)">0</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="inputClear">C</el-button>
</el-col>
<el-col :span="4" :offset="4">
<el-button @click="backSpace"> &lt; </el-button>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="4" :offset="12">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'PasswordBox',
data() {
return {
/* 写死的初始密码*/
correctPassword: '123',
dialogShow: false,
operation: '',
checkHasInput: false,
/* 输入值*/
passwordCheck: '',
/* 输入值替换为对应长度的星号*/
encryptionPassword: '',
loading: false,
showMistake: false
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.password.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationHandler.getDomIdByOperation(this.operation) : '';
}
},
methods: {
doShow(operate) {
this.operate = operate || {};
this.operation = operate.operation;
if (operate.operateNext) {
this.operation = operate.operateNext;
}
this.dialogShow = true;
this.checkHasInput = false;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.showMistake = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() { //
if (this.passwordCheck === this.correctPassword) {
this.$emit('checkOver', this.operate);
this.doClose();
this.inputClear();
} else {
this.showMistake = true;
}
},
/* 软键盘输入*/
inputNum(num) {
this.showMistake = false;
this.passwordCheck += num;
this.encryptionPassword = this.passwordCheck.replace(/./g, '*');
},
/* 软键盘清除*/
inputClear() {
this.showMistake = false;
this.passwordCheck = '';
this.encryptionPassword = '';
},
/* 软键盘回退*/
backSpace() {
this.showMistake = false;
const password = this.passwordCheck;
if (password !== '') {
this.passwordCheck = password.substring(0, password.length - 1);
this.encryptionPassword = this.passwordCheck;
}
},
cancel() {
const operate = {
send: false,
type: this.operate.type,
operation: OperationEvent.Command.cancel.password.operation
};
this.$emit('checkCancel');
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
this.inputClear();
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
}).catch(() => {
this.loading = false;
this.$refs.noticeInfo && this.$refs.noticeInfo.doShow();
});
}
}
};
</script>
<style>
.notice-info .context {
padding-bottom: 40px !important;
border: 1px solid lightgray;
}
.password-error {
color: red;
}
</style>

View File

@ -0,0 +1,94 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm popup-alarm"
:title="title"
:visible.sync="show"
width="500px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<el-row>
<el-col :offset="2">
<span v-for="(message, index) in messages" :key="index">{{ message }}</span><br>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="8">
<el-button :id="domIdSure" type="primary" @click="commit">确定</el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'PopupAlarm',
data() {
return {
dialogShow: false,
messages: [],
operate: null,
operation: ''
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
return '弹出式告警';
},
domIdSure() {
return this.dialogShow ? OperationEvent.Command.close.alarm.domId : '';
}
},
methods: {
doShow(operate, messages) {
this.operate = operate || {};
this.operation = operate.operation;
this.dialogShow = true;
this.messages = messages || [];
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
if (this.operation == OperationEvent.Section.alxeEffective.menu.operation) {
//
this.alxeEffective();
}
},
alxeEffective() {
const operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.alarm.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.doClose();
}
});
}
}
};
</script>
<style>
.popup-alarm .context {
padding-bottom: 40px !important;
border: 1px solid lightgray;
}
</style>

View File

@ -0,0 +1,163 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="600px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div>
<el-form v-if="selected" :inline="true" :model="form" class="demo-form-inline">
<el-form-item label="设备类型:">
<el-select v-model="form.deviceType" :disabled="true" style="width: 150px;">
<el-option
v-for="item in deviceTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="设备名称:">
<el-input v-model="form.deviceName" :disabled="true" style="width: 150px;" />
</el-form-item>
</el-form>
<el-card>
<el-table
v-loading="loading"
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="fileName"
label="文件"
width="400"
/>
<el-table-column
prop="name"
label="操作"
>
<template slot-scope="scope">
<div class="text-button" @click="openPdf(scope.row)">打开</div>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import CancelMouseState from '@/mixin/CancelMouseState';
import { getUploadFile } from '@/api/pdf';
import { DrawingType } from '@/scripts/ConstDic';
export default {
name: 'TrainMove',
mixins: [
CancelMouseState
],
data() {
return {
selected: null,
selectedType: '',
dialogShow: false,
loading: false,
tableData: [],
deviceTypeList: [
{ label: '区段', value: 'Section' },
{ label: '信号机', value: 'Signal' },
{ label: '道岔', value: 'Switch' },
{ label: '车站', value: 'Station' }
],
deviceIdList: [],
form: {
mapId: '',
deviceId: '',
deviceCode: '',
deviceName: ''
}
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
if (this.selectedType === 'normStudy') {
return '规范学习';
} else if (this.selectedType === 'clCaAn') {
return '经典案例分析';
} else if (this.selectedType === 'baDeTr') {
return '基础设备培训';
} else {
return '图纸检索';
}
}
},
methods: {
doShow(selected, selectedType) {
this.selectedType = selectedType;
const params = { mapId: this.$route.query.mapId, fileType: DrawingType[selectedType] };
this.selected = selected;
if (this.selected) {
this.form.deviceName = selected.name;
this.form.deviceType = selected._type;
params.deviceType = selected._type.toUpperCase();
params.deviceId = selected.code;
}
this.loading = true;
getUploadFile(params).then(resp => {
this.tableData = resp.data;
this.loading = false;
}).catch(() => {
this.loading = false;
this.$message.error('图纸检索失败!');
});
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
openPdf(row) {
const url = `https://joylink.club/oss/joylink/${row.filePath}`;
window.open(url, '_blank');
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.text-button{
color: #148ad0;
cursor:pointer;
}
.text-button:active{
color: #b938e1;
text-decoration: underline;
}
.text-button:hover{
color: #b938e1;
text-decoration: underline;
}
</style>

View File

@ -0,0 +1,196 @@
<template>
<div>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm route-detail"
:title="title"
:visible.sync="show"
width="460px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row>
<el-col :span="2"><span>车站</span></el-col>
<el-col :span="6">
<el-input v-model="stationName" size="small" disabled />
</el-col>
<el-col :span="6" :offset="1"><span>始端信号机</span></el-col>
<el-col :span="6">
<el-input v-model="signalName" size="small" disabled />
</el-col>
</el-row>
<div style="margin-top: 20px">
<el-table
ref="tempTable"
:data="tempData"
border
style="width: 100%"
size="mini"
highlight-current-row
:height="140"
>
<el-table-column :id="domIdChoose" prop="name" label="进路" style="margin-left:30px;" width="150px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleRouteName(scope.row.name) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="startSignalCode" label="方向" style="margin-left: 30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleDirection(scope.row.startSignalCode) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="turnBack" label="属性" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.turnBack ? '折返': '直通' }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="controlType" label="控制" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.atsControl == '0' ? '人工' : '自动' }}
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'RouteDetail',
components: {
NoticeInfo
},
mixins: [
CancelMouseState
],
data() {
return {
dialogShow: false,
loading: false,
selected: null,
tempData: [],
stationName: '',
signalName: '',
domIdChoose: ''
};
},
computed: {
...mapGetters('map', [
'signalList',
'mapConfig'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Signal.detail.menu.domId : '';
},
title() {
return '查询进路状态';
}
},
methods: {
doShow(operate, selected, tempData) {
this.selected = selected;
//
if (!this.dialogShow) {
this.signalName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
this.signalName = selected.name;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
this.tempData = tempData || [];
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
handleRouteName(name) {
return name.replace(/-/, '-->');
},
handleDirection(signalCode) {
let signalDirection = '';
this.signalList.some(item => {
if (item.code === signalCode) {
signalDirection = item.right;
return true;
}
});
if ((signalDirection && this.mapConfig.upRight) || (!signalDirection && !this.mapConfig.upRight)) {
return '上行';
} else {
return '下行';
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
const operate = {
operation: OperationEvent.Signal.detail.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -0,0 +1,278 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm route-setting"
:title="title"
:visible.sync="show"
width="460px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row>
<el-col :span="2"><span class="item-lable">车站</span></el-col>
<el-col :span="6">
<el-input v-model="stationName" size="small" disabled />
</el-col>
<el-col :span="4" :offset="1"><span class="item-lable">始端信号机</span></el-col>
<el-col :span="6">
<el-input v-model="signalName" size="small" disabled />
</el-col>
</el-row>
<div class="route-table-box">
<span class="route-table-tip">进路列表</span>
<el-table ref="table" :data="tempData" border :cell-style="tableStyle" style="width: 99%;" size="mini" height="90" highlight-current-row @row-click="clickEvent">
<el-table-column :id="domIdChoose" prop="name" label="进路" style="margin-left:30px;" width="150px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleRouteName(scope.row.name) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="startSignalCode" label="方向" style="margin-left: 30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleDirection(scope.row.startSignalCode) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="turnBack" label="属性" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.turnBack ? '折返': '直通' }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="controlType" label="控制" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.atsControl == '0' ? '人工' : '自动' }}
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-row justify="center" style="margin-top: 40px">
<el-col :span="12" :offset="12">
<el-button
:id="domIdConfirm"
type="primary"
:loading="loading"
:disabled="commitDisabled"
@click="commit"
>执行</el-button>
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<!--<password-box ref="passwordBox" @checkOver="passWordCommit" />-->
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
// import PasswordBox from './childDialog/passwordInputBox.vue';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import { mapGetters } from 'vuex';
export default {
name: 'RouteSelection',
components: {
NoticeInfo
// PasswordBox
},
mixins: [
CancelMouseState
],
data() {
return {
tempData: [],
beforeSectionList: [],
dialogShow: false,
loading: false,
selected: null,
operation: '',
display: true,
stationName: '',
signalName: '',
tableStyle: {
'border-bottom': 'none'
},
commitDisabled:true,
controlTypeNameMap: {
'01': '折返',
'02': '直通'
},
row: ''
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdChoose() {
return this.dialogShow ? OperationEvent.Signal.guide.choose.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Signal.guide.confirm.domId : '';
},
title() {
return '办理引导进路';
},
...mapGetters('map', [
'signalList',
'mapConfig'
])
},
methods: {
getProtectedSectionName(row) {
let name = '';
if (row &&
row.overlapSectionList &&
row.overlapSectionList &&
row.overlapSectionList.length > 0) {
const protect = row.overlapSectionList[0];
name = `${protect.name}`;
const station = this.$store.getters['map/getDeviceByCode'](protect.stationCode);
if (station) {
name = `${name}(${station.name})`;
}
}
return name;
},
handleRouteName(name) {
return name.replace(/-/, '-->');
},
handleDirection(signalCode) {
let signalDirection = '';
this.signalList.some(item => {
if (item.code === signalCode) {
signalDirection = item.right;
return true;
}
});
if ((signalDirection && this.mapConfig.upRight) || (!signalDirection && !this.mapConfig.upRight)) {
return '上行';
} else {
return '下行';
}
},
doShow(operate, selected, tempData) {
this.selected = selected;
this.commitDisabled = true;
//
if (!this.dialogShow) {
this.signalName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
this.signalName = selected.name;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
this.tempData = tempData || [];
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$refs.table.setCurrentRow();
this.$store.dispatch('training/emitTipFresh');
},
clickEvent(row, event, column) {
this.commitDisabled = false;
this.row = row;
if (row) {
const operate = {
operation: OperationEvent.Signal.guide.choose.operation,
val: row.code
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
}
},
//
commit() {
if (this.row && this.row.code) {
const operate = {
over: true,
operation: OperationEvent.Signal.guide.confirm.operation,
cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE,
param: {
routeCode: this.row.code
}
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
} else {
this.doClose();
this.$refs.noticeInfo.doShow();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
}
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style scoped>
.route-table-tip {
position: relative !important;
color: #3C72DF !important;
background: #ECE9D8 !important;
font-size: 12px;
top: -7px;
left: 7px;
}
.route-table-box {
margin-top: 20px !important;
line-height: 10px !important;
border: 2px solid #FFFFFF !important;
border-radius: 5px !important;
z-index: 1;
padding-bottom: 40px;
}
.item-lable {
line-height: 26px !important;
font-size: 13px;
}
</style>

View File

@ -0,0 +1,268 @@
<template>
<div>
<el-dialog v-dialogDrag class="chengdou-03__systerm route-hand-control" :title="title" :visible.sync="show" width="500px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<el-row class="header">
<el-col :span="11"><span>车站</span></el-col>
<el-col :span="11" :offset="2"><span>始端信号机</span></el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-input v-model="stationName" size="small" disabled />
</el-col>
<el-col :span="11" :offset="2">
<el-input v-model="signalName" size="small" disabled />
</el-col>
</el-row>
<div class="table">
<el-table ref="tempTable" :data="tempData" border style="width: 100%" size="mini" :highlight-current-row="highlight" :height="140" @row-click="clickEvent">
<el-table-column :id="domIdChoose" prop="name" label="进路" style="margin-left:30px;" width="150px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleRouteName(scope.row.name) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="startSignalCode" label="方向" style="margin-left: 30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleDirection(scope.row.startSignalCode) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="turnBack" label="属性" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.turnBack ? '折返': '直通' }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="controlType" label="控制" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.atsControl == '0' ? '人工' : '自动' }}
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :disabled="commitDisabled" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<confirm-control ref="confirmControl" />
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { UserOperationType } from '@/scripts/ConstDic';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import ConfirmControl from './childDialog/confirmControl';
import CancelMouseState from '@/mixin/CancelMouseState';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'RouteHandControl',
components: {
ConfirmControl,
NoticeInfo
},
mixins: [
CancelMouseState
],
data() {
return {
dialogShow: false,
loading: false,
selected: null,
tempData: [],
operation: null,
selection: [],
stationName: '',
signalName: '',
highlight: true,
row: '',
commitDisabled: true
};
},
computed: {
...mapGetters('map', [
'signalList',
'mapConfig'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdChoose() {
if (this.operation == OperationEvent.Signal.humanControl.menu.operation) {
return OperationEvent.Signal.humanControl.choose.domId;
} else if (this.operation == OperationEvent.Signal.atsAutoControl.menu.operation) {
return OperationEvent.Signal.atsAutoControl.choose.domId;
}
return '';
},
domIdConfirm() {
return this.dialogShow ? OperationHandler.getDomIdByOperation(this.operation) : '';
},
title() {
if (this.operation == OperationEvent.Signal.humanControl.menu.operation) {
return '进路收人工控';
} else if (this.operation == OperationEvent.Signal.atsAutoControl.menu.operation) {
return '进路交自动控';
}
return '';
}
},
methods: {
doShow(operate, selected, tempData) {
this.selected = selected;
this.selection = [];
this.commitDisabled = true;
//
if (!this.dialogShow) {
this.signalName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
this.signalName = selected.name;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
if (tempData && tempData.length > 0) {
tempData.forEach(elem => {
elem.check = false;
elem.disabled = false;
//
if (operate.operation === OperationEvent.Signal.humanControl.menu.operation &&
(elem.atsControl == '0') ) {
elem.disabled = true;
} if (operate.operation === OperationEvent.Signal.atsAutoControl.menu.operation &&
(elem.atsControl == '1') ) {
elem.disabled = true;
}
});
}
this.tempData = tempData || [];
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
handleRouteName(name) {
return name.replace(/-/, '-->');
},
handleDirection(signalCode) {
let signalDirection = '';
this.signalList.some(item => {
if (item.code === signalCode) {
signalDirection = item.right;
return true;
}
});
if ((signalDirection && this.mapConfig.upRight) || (!signalDirection && !this.mapConfig.upRight)) {
return '上行';
} else {
return '下行';
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$refs.tempTable.setCurrentRow();
this.$store.dispatch('training/emitTipFresh');
},
clickEvent(row, event, column) {
this.highlight = false;
if (row && row.code) {
this.highlight = true;
this.selection = [row];
this.beforeSectionList = row.containSectionList || [];
this.row = row;
//
const operate = {
operation: '',
val: row.code
};
if (this.operation == OperationEvent.Signal.humanControl.menu.operation) {
/** 进路交人工控*/
operate.operation = OperationEvent.Signal.humanControl.choose.operation;
this.commitDisabled = !row.atsControl;
} else if (this.operation == OperationEvent.Signal.atsAutoControl.menu.operation) {
/** 进路交自动控*/
this.commitDisabled = Boolean(row.atsControl);
operate.operation = OperationEvent.Signal.atsAutoControl.choose.operation;
}
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
}
},
commit() {
if (this.operation == OperationEvent.Signal.humanControl.menu.operation) {
/** 进路交人工控*/
this.humanControl();
} else if (this.operation == OperationEvent.Signal.atsAutoControl.menu.operation) {
/** 进路交自动控*/
this.atsAutoControl();
}
},
//
humanControl() {
commitOperate(menuOperate.Signal.humanControl, {routeCodeList: [this.row.code]}, 2).then(({valid, operate}) => {
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
//
atsAutoControl() {
commitOperate(menuOperate.Signal.atsAutoControl, {routeCodeList: [this.row.code]}, 2).then(({valid, operate}) => {
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
userOperationType: UserOperationType.LEFTCLICK,
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>

View File

@ -0,0 +1,325 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm route-setting"
:title="title"
:visible.sync="show"
width="500px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row>
<el-col :span="2"><span class="item-lable">车站</span></el-col>
<el-col :span="6">
<el-input v-model="stationName" size="small" disabled />
</el-col>
<el-col :span="4" :offset="1"><span class="item-lable">始端信号机</span></el-col>
<el-col :span="6">
<el-input v-model="signalName" size="small" disabled />
</el-col>
</el-row>
<div class="route-table-box">
<span class="route-table-tip">进路列表</span>
<el-table
ref="table"
:data="tempData"
border
:cell-style="tableStyle"
style="width: 99%;"
size="mini"
height="150"
highlight-current-row
@row-click="clickEvent"
>
<el-table-column :id="domIdChoose" prop="name" label="进路" style="margin-left:30px;" width="150px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleRouteName(scope.row.name) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="startSignalCode" label="方向" style="margin-left: 30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ handleDirection(scope.row.startSignalCode) }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="turnBack" label="属性" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.turnBack ? '折返': '直通' }}
</div>
</template>
</el-table-column>
<el-table-column :id="domIdChoose" prop="controlType" label="控制" style="margin-left:30px">
<template slot-scope="scope">
<div :style="{color: scope.row.turnBack? '#00FFFF':'#000000'}">
{{ scope.row.atsControl == '0' ? '人工' : '自动' }}
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-row justify="center" style="margin-top: 70px">
<el-col :span="12" :offset="12">
<el-button
:id="domIdConfirm"
type="primary"
:loading="loading"
:disabled="commitDisabled"
@click="commit"
>执行</el-button>
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<password-box ref="passwordBox" @checkOver="passWordCommit" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { mapGetters } from 'vuex';
import { deepAssign } from '@/utils/index';
import PasswordBox from './childDialog/passwordInputBox.vue';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'RouteSelection',
components: {
NoticeInfo,
PasswordBox
},
mixins: [
CancelMouseState
],
data() {
return {
tempData: [],
beforeSectionList: [],
dialogShow: false,
loading: false,
selected: null,
row: null,
operation: '',
display: true,
stationName: '',
signalName: '',
commitDisabled:true,
tableStyle: {
'border-bottom': 'none'
}
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdChoose() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.choose.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.confirm.domId : '';
},
title() {
return '办理进路';
},
...mapGetters('map', [
'signalList',
'sectionList',
'mapConfig'
])
},
methods: {
getProtectedSectionName(row) {
let name = '';
if (row &&
row.overlapSectionList &&
row.overlapSectionList &&
row.overlapSectionList.length > 0) {
const protect = row.overlapSectionList[0];
name = `${protect.name}`;
const station = this.$store.getters['map/getDeviceByCode'](protect.stationCode);
if (station) {
name = `${name}(${station.name})`;
}
}
return name;
},
handleRouteName(name) {
return name.replace(/-/, '-->');
},
handleDirection(signalCode) {
let signalDirection = '';
this.signalList.some(item => {
if (item.code === signalCode) {
signalDirection = item.right;
return true;
}
});
if ((signalDirection && this.mapConfig.upRight) || (!signalDirection && !this.mapConfig.upRight)) {
return '上行';
} else {
return '下行';
}
},
doShow(operate, selected, tempData) {
this.selected = selected;
this.commitDisabled = true;
//
if (!this.dialogShow) {
this.signalName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
this.signalName = selected.name;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
this.tempData = tempData || [];
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.restoreBeforeDevices();
this.$refs.table.setCurrentRow();
this.$store.dispatch('training/emitTipFresh');
},
restoreBeforeDevices() {
//
if (this.beforeSectionList && this.beforeSectionList.length) {
this.beforeSectionList.forEach(elem => {
elem.cutOff = false;
});
}
this.$store.dispatch('training/updateMapState', [...this.beforeSectionList]);
this.beforeSectionList = [];
},
clickEvent(row, event, column) {
this.row = row;
if (row) {
//
this.restoreBeforeDevices();
row.canSetting = true;
this.commitDisabled = false;
//
const containSectionList = [];
if (row.routeSectionList && row.routeSectionList.length) {
//
row.routeSectionList.forEach(elem => {
const section = deepAssign({}, this.$store.getters['map/getDeviceByCode'](elem));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(item => {
const sec = deepAssign({}, this.$store.getters['map/getDeviceByCode'](item));
sec.cutOff = true;
containSectionList.push(sec);
});
} else {
section.cutOff = true;
containSectionList.push(section);
}
});
}
this.$store.dispatch('training/updateMapState', [...containSectionList]);
this.beforeSectionList = containSectionList || [];
//
const operate = {
operation: OperationEvent.Signal.arrangementRoute.choose.operation,
val: row.code
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
}
},
commit() {
if (this.row && this.row.canSetting) {
this.loading = true;
commitOperate({operation:OperationEvent.Signal.arrangementRoute.confirm.operation}, {routeCode: this.row.code}, 1).then(({valid, operate})=>{
this.loading = false;
if (valid) {
this.$refs.passwordBox.doShow({operation:OperationEvent.Signal.arrangementRoute.menu.operation});
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
}
},
passWordCommit(data) {
this.loading = true;
commitOperate(menuOperate.Signal.arrangementRoute, {}, 2).then(({valid, operate})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style scoped>
.route-table-tip {
position: relative !important;
color: #3C72DF !important;
background: #ECE9D8 !important;
font-size: 12px;
top: -7px;
left: 7px;
}
.route-table-box {
margin-top: 15px !important;
line-height: 10px !important;
border: 2px solid #FFFFFF !important;
border-radius: 5px !important;
z-index: 1;
}
.item-lable {
line-height: 26px !important;
font-size: 13px;
}
</style>

View File

@ -0,0 +1,114 @@
<template>
<div>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm section-detail"
:title="title"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-form ref="form" label-position="left" :model="formModel" label-width="100px">
<el-form-item label="区段名称">
<el-input v-model="formModel.sectionName" disabled />
</el-form-item>
<el-form-item label="车站名称">
<el-input v-model="formModel.stationName" disabled />
</el-form-item>
<el-form-item label="公里标(Km)">
<el-input v-model="formModel.kmPost" disabled />
</el-form-item>
<el-form-item label="长度(m)">
<el-input v-model="formModel.lengthFact" disabled />
</el-form-item>
</el-form>
<el-row justify="center" style="margin-top: 50px">
<el-col :span="7" :offset="17">
<el-button :id="domIdConfirm" @click="commit">确定</el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'RouteDetail',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
selected: null,
formModel: {
sectionName: '',
stationName: '',
kmPost: '',
lengthFact: ''
}
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Section.detail.menu.domId : '';
},
title() {
return '无岔区段属性对话框';
}
},
methods: {
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
if (selected && selected._type.toUpperCase() === 'Section'.toUpperCase()) {
const hasParentCode = (this.selected.type == '02');
this.formModel.sectionName = hasParentCode ? selected.parentName + '-' + selected.name : selected.name;
this.formModel.lengthFact = selected.lengthFact;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.formModel.stationName = station.name;
this.formModel.kmPost = station.kmPost;
}
}
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
const operate = {
operation: OperationEvent.Section.detail.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -0,0 +1,603 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-detain-train"
:title="title"
:visible.sync="show"
width="400px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row class="header">
<el-col :span="11">
<span>车站</span>
<el-input v-model="stationName" style="width: 110px; margin-left: 10px;" size="small" disabled />
</el-col>
<el-col :span="11" :offset="1">
<span>站台</span>
<el-input v-model="standName" style="width: 110px; margin-left: 10px;" size="small" disabled />
</el-col>
</el-row>
<div v-if="DetainTrain">
<div
style="padding: 15px; margin-bottom: 25px; margin-top: 20px; border: 1px solid lightgray;"
>
<span class="base-label" style="left: -5px; top: -22px; background: #ECE9D8; padding: 0 4px;">范围</span>
<el-row style="margin-top: -13px;">
<el-radio-group v-model="radio" @change="choose">
<el-col :span="24">
<el-radio
:id="domIdDetainCar"
label="01"
style="display: block; text-align: left; float: left; margin-right: 10px;"
>本站台
</el-radio>
<el-radio
:id="isUpDirection? domIdDetainChoose: ''"
v-if="radio1 == 2"
:disabled="!isUpDirection"
:label="`${isUpDirection}`"
style="display: block; text-align: left; float: left; margin-right: 10px;"
>上行全线
</el-radio>
<el-radio
:id="isUpDirection ? '': domIdDetainChoose"
v-if="radio1 == 2"
:label="`${!isUpDirection}`"
:disabled="isUpDirection"
style="display: block; text-align: left; float: left;"
>下行全线</el-radio>
</el-col>
</el-radio-group>
</el-row>
</div>
<div style="padding: 15px; margin-top: 20px; border: 1px solid lightgray;">
<span class="base-label" style="left: -5px; top: -22px; background: #ECE9D8; padding: 0 4px;">功能</span>
<el-row style="margin-top: -13px;">
<el-col :span="11">
<el-radio
v-model="radio1"
label="1"
:disabled="radio1 == '2'"
style="display: block; text-align: left;"
>
扣车</el-radio>
</el-col>
<el-col :span="11" :offset="2">
<el-radio
v-model="radio1"
label="2"
:disabled="radio1 == '1'"
style="display: block; text-align: left;"
>
取消扣车</el-radio>
</el-col>
</el-row>
</div>
</div>
<div v-if="JumpStop">
<div
style="padding: 15px; margin-bottom: 25px; margin-top: 20px; border: 1px solid lightgray; height: 115px;"
>
<span class="base-label" style="left: -5px; top: -22px; background: #ECE9D8; padding: 0 4px;">范围</span>
<el-row style="margin-top: -13px;">
<el-col :span="24">
<el-radio-group v-model="radio" @change="chooseJumpStop">
<el-radio
:id="radio == '02' ? domIdChoose : ''"
label="01"
style="display: block; text-align: left; margin-right: 10px; margin-bottom: 20px; width: 80px;"
>
站台跳停
</el-radio>
<el-radio
:id="radio == '01' ? domIdChoose : ''"
label="02"
style="display: block; text-align: left; margin-left: 0; float: left;"
>
指定列车跳停</el-radio>
<div style="float: left;">
<span>车组号</span>
<el-select
:id="domIdCancelJumpStop"
v-model="tripNumber"
style="width: 120px; margin-left: 20px;"
size="mini"
:disabled="radio == '01'"
@change="trainNoSelectChange"
>
<el-option
v-for="option in trainList"
:key="option.groupNumber"
:label="option.groupNumber"
:value="option.groupNumber"
/>
</el-select>
</div>
</el-radio-group>
</el-col>
</el-row>
</div>
<div style="padding: 15px; margin-top: 20px; border: 1px solid lightgray;">
<span class="base-label" style="left: -5px; top: -22px; background: #ECE9D8; padding: 0 4px;">功能</span>
<el-row style="margin-top: -13px;">
<el-col :span="11">
<el-radio
v-model="radio1"
label="1"
:disabled="radio1 == 2"
style="display: block; text-align: left;"
>
跳停</el-radio>
</el-col>
<el-col :span="11" :offset="2">
<el-radio
v-model="radio1"
label="2"
:disabled="radio1 == 1"
style="display: block; text-align: left;"
>
取消跳停</el-radio>
</el-col>
</el-row>
</div>
</div>
<div v-if="RunLevel">
<div
style="padding: 15px; margin-bottom: 25px; margin-top: 20px; border: 1px solid lightgray; height: 105px;"
>
<span class="base-label" style="left: -5px; top: -22px; background: #ECE9D8; padding: 0 4px;">范围</span>
<el-row style="margin-top: -13px;">
<el-radio-group v-model="radio" @change="chooseStopTime">
<el-col :span="24">
<el-radio
:id="radio == '02' ? domIdChoose1 : ''"
label="01"
style="display: block; text-align: left; margin-right: 10px; margin-bottom:10px; width: 60px;"
>
自动
</el-radio>
<el-radio
:id="radio == '01' ? domIdChoose1 : ''"
label="02"
style="display: block; text-align: left; margin-left: 0; float: left;"
>
人工</el-radio>
<div v-if="radio2 == 2" style="float: left; margin-left: 20px;">
<span>运行等级</span>
<el-select
:id="domIdRunLevel"
v-model="trainRunlevel"
style="width: 120px; margin-left: 20px;"
size="mini"
:disabled="radio == '01'"
@change="trainNoSelectLevel"
>
<el-option
v-for="option in runLevelList"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</div>
<div v-if="radio2 == 1" style="float: left; margin-left: 20px;">
<span>停站时间</span>
<el-input-number
:id="domIdStopTime"
v-model="trainStopTime"
:min="15"
:max="300"
:step="1"
size="mini"
:controls="false"
style="width:100px;display:inline-block;margin-left:10px;height:34px;"
:disabled="radio == '01'"
@blur="handleTrainStopTime"
/>
<div style="margin-left: 5px;display: inline-block;font-size: 14px;"></div>
</div>
</el-col>
</el-radio-group>
</el-row>
</div>
<div style="padding: 15px; margin-top: 20px; border: 1px solid lightgray;">
<span class="base-label" style="left: -5px; top: -22px; background: #ECE9D8; padding: 0 4px;">功能</span>
<el-row style="margin-top: -13px;">
<el-radio-group v-model="effective" :disabled="disabledTime" @change="chooseEffective">
<el-radio :id="effective === false? '': domIdChoose2" :label="false">一次有效</el-radio>
<el-radio :id="effective === true? '': domIdChoose2" :label="true">一直有效</el-radio>
</el-radio-group>
<!-- <el-radio-group v-model="effective" :disabled="disabledTime" @change="chooseEffective">
<el-col :span="11">
<el-radio
:id="effective == '02' ? '': domIdChoose2"
label="01"
style="display: block; text-align: left;"
>
一次有效</el-radio>
</el-col>
<el-col :span="11" :offset="2">
<el-radio
:id="effective == '01' ? '': domIdChoose2"
label="02"
style="display: block; text-align: left;"
>
一直有效</el-radio>
</el-col>
</el-radio-group> -->
</el-row>
</div>
</div>
<el-row class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'StandDetainTrain',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
standName: '',
stationName: '',
selected: null,
operation: null,
isUpDirection:true,
radio: '01',
radio1: '1',
radio2: '1',
DetainTrain: false,
JumpStop: false,
RunLevel: false,
trainList: [],
runLevelList: [
{ value: 2, label: '常速' },
{ value: 1, label: '低速' },
{ value: 3, label: '高速' }
],
tripNumber: '',
effective: '01',
trainRunlevel: 2,
trainStopTime: 30,
disabledTime: true
};
},
computed: {
...mapGetters('map', [
'map',
'mapConfig'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationHandler.getDomIdByOperation(this.operation) : '';
},
domIdDetainCar() {
return this.dialogShow ? OperationEvent.StationStand.cancelDetainTrain.choose.domId : '';
},
domIdDetainChoose() {
return this.dialogShow ? OperationEvent.Command.common.choose.domId : '';
},
domIdChoose() {
if (this.radio1 == '1') { //
return this.dialogShow ? OperationEvent.StationStand.setJumpStop.select.domId : '';
} else { //
return this.dialogShow ? OperationEvent.StationStand.cancelJumpStop.select.domId : '';
}
},
// domIdJumpStop() {
// return this.dialogShow ? OperationEvent.StationStand.setJumpStop.choose.domId : '';
// },
domIdCancelJumpStop() {
return this.dialogShow ? OperationEvent.StationStand.cancelJumpStop.choose.domId : '';
},
domIdChoose1() {
if (this.radio2 == '1') { //
return this.dialogShow ? OperationEvent.StationStand.setStopTime.choose1.domId : '';
} else { //
return this.dialogShow ? OperationEvent.StationStand.setRunLevel.choose1.domId : '';
}
},
domIdChoose2() {
if (this.radio2 == '1') { //
return this.dialogShow ? OperationEvent.StationStand.setStopTime.choose2.domId : '';
} else { //
return this.dialogShow ? OperationEvent.StationStand.setRunLevel.choose2.domId : '';
}
},
domIdStopTime() {
return this.dialogShow ? OperationEvent.StationStand.setStopTime.input.domId : '';
},
domIdRunLevel() {
return this.dialogShow ? OperationEvent.StationStand.setRunLevel.chooseTrain.domId : '';
},
title() {
if (this.operation == OperationEvent.StationStand.setDetainTrain.menu.operation) {
return '扣车';
} else if (this.operation == OperationEvent.StationStand.cancelDetainTrain.menu.operation || this.operation == OperationEvent.StationStand.cancelDetainTrainAll.menu.operation) {
return '取消扣车';
} else if (this.operation == OperationEvent.StationStand.setJumpStop.menu.operation) {
return '设置跳停';
} else if (this.operation == OperationEvent.StationStand.cancelJumpStop.menu.operation) {
return '取消跳停';
} else if (this.operation == OperationEvent.StationStand.setStopTime.menu.operation) {
return '设置停站时间';
} else if (this.operation == OperationEvent.StationStand.setRunLevel.menu.operation) {
return '设置站间运行等级';
}
return '';
}
},
watch: {
operation(data) {
if (data != OperationEvent.StationStand.cancelDetainTrainAll.menu.operation) {
this.JumpStop = false;
this.RunLevel = false;
this.DetainTrain = false;
this.radio = '01';
this.radio1 = '1';
this.radio2 = '1';
if (data == OperationEvent.StationStand.setDetainTrain.menu.operation) {
this.radio1 = '1';
this.radio = '01';
this.DetainTrain = true;
} else if (data == OperationEvent.StationStand.cancelDetainTrain.menu.operation) {
this.radio1 = '2';
this.radio = '01';
this.DetainTrain = true;
} else if (data == OperationEvent.StationStand.setJumpStop.menu.operation) {
this.JumpStop = true;
this.radio1 = '1';
} else if (data == OperationEvent.StationStand.cancelJumpStop.menu.operation) {
this.JumpStop = true;
this.radio1 = '2';
} else if (data == OperationEvent.StationStand.setStopTime.menu.operation) {
this.RunLevel = true;
this.radio2 = '1';
} else if (data == OperationEvent.StationStand.setRunLevel.menu.operation) {
this.RunLevel = true;
this.radio2 = '2';
}
}
}
},
methods: {
doShow(operate, selected, tempDate = null) {
this.selected = selected;
if (!this.dialogShow) {
this.tripNumber = '';
this.standName = '';
this.stationName = '';
this.operation = operate.operation;
if (selected) {
this.getDirection(selected);
}
if (selected && selected._type.toUpperCase() === 'StationStand'.toUpperCase()) {
this.getDirection(selected);
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
if (this.operation == OperationEvent.StationStand.setJumpStop.menu.operation || this.operation == OperationEvent.StationStand.setJumpStop.menu.operation) {
this.radio = selected.direction;
}
this.effective = false;
this.radio = '01';
this.disabledTime = true;
this.trainList = this.map.trainList; //
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
getDirection(selected) {
if (this.mapConfig.upRight) {
this.standName = selected.right ? '上行' : '下行';
this.isUpDirection = selected.right;
} else if (!this.mapConfig.upRight) {
this.standName = selected.right ? '下行' : '上行';
this.isUpDirection = !selected.right;
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.operation = '';
this.trainStopTime = 30;
},
choose(upDown) { // code
const operate = {
operation: upDown == '01'
? OperationEvent.StationStand.cancelDetainTrain.choose.operation
: OperationEvent.Command.common.choose.operation,
val: this.radio
};
if (this.radio == '02' || this.radio == '03') {
this.operation = OperationEvent.StationStand.cancelDetainTrainAll.menu.operation;
} else {
this.operation = OperationEvent.StationStand.cancelDetainTrain.menu.operation;
}
this.handleBreak(operate);
},
trainNoSelectChange(upDown) { //
const operate = {
operation: OperationEvent.StationStand.cancelDetainTrain.choose.operation
};
this.handleBreak(operate);
},
chooseJumpStop(upDown) {
const operate = {
operation: ''
};
if (this.radio1 == '1') { //
operate.operation = OperationEvent.StationStand.setJumpStop.select.operation;
} else { //
operate.operation = OperationEvent.StationStand.cancelJumpStop.select.operation;
}
this.handleBreak(operate);
},
chooseEffective(effective) {
const operate = {
operation: '',
val: effective
};
if (this.radio2 == '1') { //
operate.operation = OperationEvent.StationStand.setStopTime.choose2.operation;
} else { //
operate.operation = OperationEvent.StationStand.setRunLevel.choose2.operation;
}
this.handleBreak(operate);
},
chooseStopTime(upDown) {
const operate = {
operation: '',
val: this.radio
};
if (this.radio2 == '1') { //
operate.operation = OperationEvent.StationStand.setStopTime.choose1.operation;
} else { //
operate.operation = OperationEvent.StationStand.setRunLevel.choose1.operation;
}
if (this.radio === '01') {
this.disabledTime = true;
this.trainRunlevel = 2;
this.effective = false;
} else {
this.disabledTime = false;
this.effective = true;
}
this.handleBreak(operate);
},
trainNoSelectLevel(upDown) {
const operate = {
operation: OperationEvent.StationStand.setRunLevel.chooseTrain.operation,
val: `${upDown}`,
param: {
standRunLevel: `${upDown}`
}
};
this.handleBreak(operate);
},
handleTrainStopTime() {
const operate = {
operation: OperationEvent.StationStand.setStopTime.input.operation,
val: `${this.trainStopTime}`
};
this.handleBreak(operate);
},
handleBreak(operate) { //
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
valid && this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
});
},
commit() {
if (this.operation == OperationEvent.StationStand.setDetainTrain.menu.operation) {
this.setDetainTrain(); /** 设置扣车*/
} else if (this.operation == OperationEvent.StationStand.cancelDetainTrain.menu.operation || this.operation == OperationEvent.StationStand.cancelDetainTrainAll.menu.operation) {
this.cancelDetainTrain(); /** 取消扣车*/
} else if (this.operation == OperationEvent.StationStand.setJumpStop.menu.operation) {
this.setJumpStop(); /** 设置跳停*/
} else if (this.operation == OperationEvent.StationStand.cancelJumpStop.menu.operation) {
this.cancelJumpStop(); /** 取消跳停*/
} else if (this.operation == OperationEvent.StationStand.setStopTime.menu.operation) {
this.setStopTime(); /** 设置停站时间*/
} else if (this.operation == OperationEvent.StationStand.setRunLevel.menu.operation) {
this.setRunLevel(); /** 设置站间运行等级*/
}
},
//
setDetainTrain() {
this.sendCommand(menuOperate.StationStand.setDetainTrain);
},
//
cancelDetainTrain() {
if (this.operation == OperationEvent.StationStand.cancelDetainTrain.menu.operation) {
this.sendCommand(menuOperate.StationStand.cancelDetainTrain);
} else {
this.sendCommand(menuOperate.StationStand.cancelDetainTrainAll);
}
},
//
setJumpStop() {
this.sendCommand(menuOperate.StationStand.setJumpStop, {trainGroupNumber:this.tripNumber});
},
//
cancelJumpStop() {
this.sendCommand(menuOperate.StationStand.cancelJumpStop, {trainGroupNumber:this.tripNumber});
},
//
setStopTime() {
this.sendCommand(menuOperate.StationStand.setStopTime, {parkingTime: this.radio == '01' ? -1 : this.trainStopTime, parkingAlwaysValid: this.effective});
},
//
setRunLevel() {
this.sendCommand(menuOperate.StationStand.setRunLevel, {runLevelTime:this.radio === '02' ? this.trainRunlevel : 2, runLevelTimeForever: this.effective});
},
sendCommand(operate, param) {
this.loading = true;
commitOperate(operate, param, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.loading = false;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style lang="scss" scoped>
.stand-detain-train .context {
height: 80px !important;
}
/deep/ {
.el-input--mini .el-input__icon{
line-height: 100%;
}
}
</style>

View File

@ -0,0 +1,217 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-detail"
:title="title"
:visible.sync="show"
width="380px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row class="header">
<el-col :span="10">
<span>车站</span>
</el-col>
<el-col :span="10" :offset="2">
<span>站台</span>
</el-col>
</el-row>
<el-row class="header">
<el-col :span="10">
<el-input v-model="stationName" size="small" disabled />
</el-col>
<el-col :span="10" :offset="2">
<el-input v-model="standName" style="padding: 0 3px;" size="small" disabled />
</el-col>
</el-row>
<el-row class="content">
<el-col :span="6">
<span>停站时间</span>
</el-col>
<el-col :span="18">
<el-input v-model="modelData.stopTime" size="small" disabled />
</el-col>
</el-row>
<el-row class="content">
<el-col :span="6">
<span>运行等级</span>
</el-col>
<el-col :span="18">
<el-input v-model="modelData.runLevel" size="small" disabled />
</el-col>
</el-row>
<el-row class="content">
<el-col :span="6">
<span>扣车</span>
</el-col>
<el-col :span="18">
<el-input v-model="modelData.detainCar" size="small" disabled />
</el-col>
</el-row>
<el-row class="content">
<el-col :span="6">
<span>跳停</span>
</el-col>
<el-col :span="18">
<el-input v-model="modelData.jumpStop" size="small" disabled />
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="18">
<span style="opacity: 0;">1</span>
</el-col>
<el-col :span="4">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">退出</el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
// import CMD from '@/scripts/cmdPlugin/CommandEnum';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'StandDetail',
components: {
NoticeInfo
},
mixins: [
CancelMouseState
],
data() {
return {
dialogShow: false,
loading: false,
tempData: [],
stationName: '',
standName: '',
runLevelList: [
'自动',
'低速',
'常速',
'高速'
],
modelData: {
stopTime: '自动',
runLevel: '自动',
detainCar: '无扣车',
jumpStop: '无跳停'
}
};
},
computed: {
...mapGetters('map', [
'mapConfig',
'stationList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
},
title() {
return '站台信息';
}
},
methods: {
loadInitData(selected, opts) {
this.tempData = [];
// const stationList = this.stationList.slice();
// const index = this.stationList.findIndex(n => n.code == selected.stationCode);
// let stationStand, station;
// if (selected.direction == '01') { //
// //
// if (index != 0) {
// stationStand = this.$store.getters['map/getDeviceByCode'](this.stationList[index - 1].code);
// station = this.$store.getters['map/getDeviceByCode'](stationStand.stationCode);
// }
// } else {
// //
// if (index != this.stationList.length - 1) {
// stationStand = this.$store.getters['map/getDeviceByCode'](this.stationList[index + 1].code);
// station = this.$store.getters['map/getDeviceByCode'](stationStand.stationCode);
// }
// }
this.modelData = {
stopTime: selected.parkingTime < 0 ? '自动' : `${selected.parkingTime}`,
runLevel: this.runLevelList[selected.runLevelTime],
detainCar: selected.stationHoldTrain || selected.centerHoldTrain ? '已设置' : '无扣车',
jumpStop: selected.allSkip || selected.assignSkip ? '已设置' : '无跳停'
};
},
doShow(operate, selected, opts) {
this.selected = selected;
if (!this.dialogShow) {
this.standName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'StationStand'.toUpperCase()) {
if (this.mapConfig.upRight) {
this.standName = selected.right ? '上行' : '下行';
} else if (!this.mapConfig.upRight) {
this.standName = selected.right ? '下行' : '上行';
}
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
this.loadInitData(selected, opts);
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
const operate = {
operation: OperationEvent.Command.close.confirm.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style>
.content {
margin-top: 20px;
}
</style>

View File

@ -0,0 +1,332 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm train-control"
:title="title"
:visible.sync="show"
width="480px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="el-dialog-div">
<el-form ref="form" size="small" label-width="80px" :model="addModel" :rules="rules" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="stationName">
<span slot="label">车站</span>
<el-input v-model="addModel.stationName" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item v-if="operation != '70c'" prop="sectionCode">
<span slot="label">轨道</span>
<el-input v-model="addModel.sectionCode" />
</el-form-item>
<el-form-item v-else prop="trainWindowCode">
<span slot="label">车次窗</span>
<el-input v-model="addModel.trainWindowCode" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="车组号:" prop="groupNumber">
<el-select v-model="addModel.groupNumber" filterable>
<el-option
v-for="train in trainList"
:key="train.groupNumber"
:label="train.groupNumber"
:value="train.groupNumber"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item v-if="operation == '708'" prop="serviceNumber">
<span slot="label">服务号</span>
<el-input v-model="addModel.serviceNumber" />
</el-form-item>
<el-form-item v-else-if="operation == '70c'" prop="targetCode">
<span slot="label">目的地</span>
<el-input v-model="addModel.targetCode" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item v-if="operation == '708'" prop="trainCode">
<span slot="label">序列号</span>
<el-input v-model="addModel.trainCode" />
</el-form-item>
<el-form-item v-else-if="operation == '70c'" prop="serviceNumber">
<span slot="label">服务号</span>
<el-input v-model="addModel.serviceNumber" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item v-if="operation == '70c'" prop="trainType">
<span slot="label">运行模式</span>
<br>
<el-radio-group v-model="addModel.runningMode" style="margin-left: 15px;">
<el-radio :label="'01'">普通</el-radio>
<el-radio :label="'02'">专列</el-radio>
<el-radio :label="'03'">不停站直达</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<confirm-train ref="confirmTrain" />
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
import ConfirmTrain from './childDialog/confirmTrain';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'TrainControl',
components: {
ConfirmTrain,
NoticeInfo
},
mixins: [
CancelMouseState
],
data() {
return {
trainList: [],
selected: null,
addModel: {
stationName: '',
sectionCode: '',
trainWindowCode: '',
groupNumber: '',
serviceNumber: '',
targetCode: '',
trainCode: '',
runningMode: ''
},
rules: {
stationName: [
{ required: true, message: '请输入车站', trigger: 'blur'}
],
sectionCode: [
{ required: true, message: '请输入轨道', trigger: 'blur'}
],
trainWindowCode: [
{ required: true, message: '请输入车次窗', trigger: 'blur'}
],
groupNumber: [
{ required: true, message: '请选择车组号', trigger: 'change' }
],
serviceNumber: [
{ required: true, message: '请输入服务号', trigger: 'blur'}
],
targetCode: [
{ required: true, message: '请输入目的地号', trigger: 'blur'}
],
trainCode: [
{ required: true, message: '请输入序列号', trigger: 'blur'}
],
runningMode: [
{ required: true, message: '请选择运行模式', trigger: 'blur'}
]
},
operation: null,
dialogShow: false,
loading: false,
direction: 0
};
},
computed: {
...mapGetters('map', [
'map'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
if (this.dialogShow) {
if (this.operation == OperationEvent.Train.destinationTrainId.menu.operation) {
/* 设目的地*/
return OperationEvent.Train.destinationTrainId.menu.domId;
} else if (this.operation == OperationEvent.Train.setPlanTrainId.menu.operation) {
/* 设计划车*/
return OperationEvent.Train.setPlanTrainId.menu.domId;
} else if (this.operation == OperationEvent.Train.artificialTrainId.menu.operation) {
/* 设人工车*/
return OperationEvent.Train.artificialTrainId.menu.domId;
}
return '';
}
return '';
},
title() {
if ( this.operation == OperationEvent.Train.destinationTrainId.menu.operation) {
return '设目的地车';
} else if ( this.operation == OperationEvent.Train.setPlanTrainId.menu.operation ) {
return '设计划车';
} else if ( this.operation == OperationEvent.Train.artificialTrainId.menu.operation ) {
return '设人工车';
}
return '';
}
},
methods: {
loadInitData(map) {
},
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.operation = operate.operation;
}
this.addModel = {
tripNumber: '',
groupNumber: '',
trainType: '01',
serviceNumber: '',
targetCode: ''
};
/** 加载列车数据*/
this.loadInitData(this.map);
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
if ( this.operation == OperationEvent.Train.destinationTrainId.menu.operation ) {
this.destinationTrainId();
} else if (this.operation == OperationEvent.Train.setPlanTrainId.menu.operation ) {
this.setPlanTrainId();
} else if (this.operation == OperationEvent.Train.artificialTrainId.menu.operation ) {
this.artificialTrainId();
}
},
//
destinationTrainId() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
operation: OperationEvent.Train.destinationTrainId.menu.operation,
message: [`设目的地车:成功`],
val: ''
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.doClose();
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
//
setPlanTrainId() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
operation: OperationEvent.Train.setPlanTrainId.menu.operation,
message: [`设计划车:成功`],
val: ''
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.doClose();
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
//
artificialTrainId() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
operation: OperationEvent.Train.artificialTrainId.menu.operation,
message: [`设人工车:成功`],
val: ''
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.doClose();
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>
<style scoped>
.el-dialog-div {
height: 400px;
overflow: auto;
}
</style>

View File

@ -0,0 +1,133 @@
<template>
<el-dialog v-dialogDrag class="chengdou-03__systerm route-create" :title="title" :visible.sync="show" width="380px" label-position="top" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<div style="padding: 10px 20px; border: 1px solid lightgray;">
<el-form size="small" label-width="100px">
<el-form-item label="列车:" prop="trainCode">
<el-select v-model="trainCode" filterable placeholder="列车">
<el-option
v-for="item in trainList"
:key="item.code"
:label="item.groupNumber"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="列车方向:" prop="direction">
<el-select v-model="direction" filterable placeholder="列车方向">
<el-option v-for="no in directionList" :key="no.value" :label="no.label" :value="no.value" />
</el-select>
<!-- <div style="font-size: 12px;">(上行路线车次号选择偶数下行路线车次号选择基数)</div> -->
</el-form-item>
</el-form>
<el-row>
<el-col style="text-align: right;">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</div>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
export default {
name: 'RouteCreate',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
trainList: [],
trainNoList: [],
directionList: [
{
value: '2',
label: '上行'
},
{
value: '1',
label: '下行'
}
],
trainCode: '',
tripNumber: '',
direction: '',
selected: null
};
},
computed: {
...mapGetters('map', [
'map'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return OperationEvent.Section.newtrain.menu.domId;
},
title() {
return '设置列车';
}
},
methods: {
doShow(operate, selected) {
this.dialogShow = true;
this.selected = selected;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.trainCode = '';
this.direction = '';
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
const operate = {
send: true,
operation: OperationEvent.Section.newtrain.menu.operation,
cmdType: CMD.Section.CMD_NEW_TRAIN,
val: '' + this.direction + '::' + this.trainCode
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -0,0 +1,181 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="480px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="el-dialog-div">
<el-form ref="form" size="small" label-width="80px" :model="addModel" :rules="rules" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="stationName">
<span slot="label">车站</span>
<el-input v-model="addModel.stationName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="trainWindowCode">
<span slot="label">车次窗</span>
<el-input v-model="addModel.trainWindowCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="车 组 号:" prop="groupNumber">
<el-select v-model="addModel.groupNumber" filterable>
<el-option
v-for="train in trainList"
:key="train.groupNumber"
:label="train.groupNumber"
:value="train.groupNumber"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainCreateNumber',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
trainList: [],
selected: null,
addModel: {
stationName:'',
trainWindowCode: '',
groupNumber:''
},
rules: {
groupNumber: [
{ required: true, message: '请输入车组号', trigger: 'blur'}
]
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.editTrainNo.menu.domId : '';
},
title() {
return '新建车组号';
}
},
methods: {
loadInitData(map) {
},
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.addModel = {
stationName:'',
trainWindowCode: '',
groupNumber:''
};
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.createTrainNo.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.el-dialog-div {
height: 400px;
overflow: auto;
}
</style>

View File

@ -0,0 +1,150 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-form ref="form" size="small" label-width="90px" :model="addModel" :rules="rules">
<el-form-item label="车 组 号:" prop="groupNumber">
<el-input v-model="addModel.groupNumber" />
</el-form-item>
</el-form>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<confirm-control ref="confirmControl" />
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
// import { getPublishMapTrainNos } from '@/api/runplan';
import CancelMouseState from '@/mixin/CancelMouseState';
import ConfirmControl from './childDialog/confirmControl';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'TrainDelete',
components: {
ConfirmControl,
NoticeInfo
},
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
selected: null,
addModel: {
groupNumber: ''
},
rules: {
groupNumber: [
{ required: true, message: '请输入车组号', trigger: 'blur' }
]
},
operation: null,
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'map'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.delTrainId.menu.domId : '';
},
title() {
return '删除列车识别号';
}
},
methods: {
loadInitData(map) {
if (map) {
// getPublishMapTrainNos(map.skinCode).then(response => {
// this.trainNoList = response.data;
// }).catch(() => {
// this.$messageBox(``);
// });
}
},
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.delTrainId.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>

View File

@ -0,0 +1,176 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="480px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="el-dialog-div">
<el-form ref="form" size="small" label-width="80px" :model="addModel" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="stationName">
<span slot="label">车站</span>
<el-input v-model="addModel.stationName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="trainWindowCode">
<span slot="label">车次窗</span>
<el-input v-model="addModel.trainWindowCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="车 组 号:" prop="groupNumber">
<el-select v-model="addModel.groupNumber" filterable disabled>
<el-option
v-for="train in trainList"
:key="train.groupNumber"
:label="train.groupNumber"
:value="train.groupNumber"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainDeleteNumber',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
trainList: [],
selected: null,
addModel: {
stationName:'',
trainWindowCode: '',
groupNumber:''
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.editTrainNo.menu.domId : '';
},
title() {
return '删除车组号';
}
},
methods: {
loadInitData(map) {
},
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.addModel = {
stationName:'',
trainWindowCode: '',
groupNumber:''
};
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.deleteTrainNo.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.el-dialog-div {
height: 400px;
overflow: auto;
}
</style>

View File

@ -0,0 +1,378 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="480px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="el-dialog-div">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane :id="domIdBasicInfo" label="基本信息" name="first">
<el-form ref="form" size="small" label-width="80px" :model="addModel" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="groupNumber">
<span slot="label">车组号</span>
<el-input v-model="addModel.groupNumber" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="type">
<span slot="label">服务类型</span>
<el-input v-model="addModel.type" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="serviceNumber">
<span slot="label">服务号</span>
<el-input v-model="addModel.serviceNumber" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="trainCode">
<span slot="label">序列号</span>
<el-input v-model="addModel.trainCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="driverCode">
<span slot="label">司机号</span>
<el-input v-model="addModel.driverCode" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="targetCode">
<span slot="label">目的地号</span>
<el-input v-model="addModel.targetCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="stationName">
<span slot="label">车站</span>
<el-input v-model="addModel.stationName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="sectionCode">
<span slot="label">轨道</span>
<el-input v-model="addModel.sectionCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="nextStation">
<span slot="label">下一站</span>
<el-input v-model="addModel.nextStation" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="targetName">
<span slot="label">目的地</span>
<el-input v-model="addModel.targetName" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="trackingMode">
<span slot="label">跟踪模式</span>
<el-input v-model="addModel.trackingMode" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="runStatus">
<span slot="label">运行状态</span>
<el-input v-model="addModel.runStatus" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="departureTime">
<span slot="label">出发时刻</span>
<el-input v-model="addModel.departureTime" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="arrivedTime">
<span slot="label">到达时刻</span>
<el-input v-model="addModel.arrivedTime" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="planDeviation">
<span slot="label">计划偏离</span>
<el-input v-model="addModel.planDeviation" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane :id="domIdMarshalInfo" label="编组信息" name="second">
<el-form ref="form" size="small" label-width="80px" :model="addModel" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="marshallingNo">
<span slot="label">编组号</span>
<el-input v-model="addModel.marshallingNo" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="carNo1">
<span slot="label">车头号1</span>
<el-input v-model="addModel.carNo1" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="carNo2">
<span slot="label">车头号2</span>
<el-input v-model="addModel.carNo2" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-table :data="tableData" style="width: 100%" height="250">
<el-table-column prop="carriage" label="车厢" width="80" />
<el-table-column prop="carriageNumber" label="车厢号" width="80" />
</el-table>
</el-tab-pane>
<el-tab-pane :id="domIdAtpInfo" label="ATP信息" name="third">
<el-form ref="form" size="small" label-width="80px" :model="addModel" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="trainId">
<span slot="label">车载ID</span>
<el-input v-model="addModel.trainId" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="directionType">
<span slot="label">运行方向</span>
<el-input v-model="addModel.directionType" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="drivingMode">
<span slot="label">驾驶模式</span>
<el-input v-model="addModel.drivingMode" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="speed">
<span slot="label">速度</span>
<el-input v-model="addModel.speed" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="stopQuasiState">
<span slot="label">停准状态</span>
<el-input v-model="addModel.stopQuasiState" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="doorStatus">
<span slot="label">车门状态</span>
<el-input v-model="addModel.doorStatus" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="runLevel">
<span slot="label">运行等级</span>
<el-input v-model="addModel.runLevel" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="stopState">
<span slot="label">停跳状态</span>
<el-input v-model="addModel.stopState" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="position">
<span slot="label">车头位置</span>
<el-input v-model="addModel.position" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="loadingRate">
<span slot="label">载重率</span>
<el-input v-model="addModel.loadingRate" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane :id="domIdCarAlarm" label="车辆报警" name="fourth" />
</el-tabs>
</div>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="19">
<el-button :id="domIdCancel" @click="cancel">退出</el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainDetailInfo',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
trainList: [],
selected: null,
addModel: {
stationName:'',
groupNumber:'',
type:'',
serviceNumber:'',
trainCode:'',
driverCode:'',
targetCode:'',
sectionCode:'',
nextStation:'',
targetName:'',
trackingMode:'',
runStatus:'',
departureTime:'',
arrivedTime:'',
planDeviation:'',
marshallingNo:'',
carNo1:'',
carNo2:'',
trainId:'',
directionType:'',
drivingMode:'',
speed:'',
stopQuasiState:'',
doorStatus:'',
runLevel:'',
stopState:'',
position:'',
loadingRate:''
},
activeName:'first',
dialogShow: false,
loading: false,
tableData:[
{carriage:'1', carriageNumber:'101'},
{carriage:'2', carriageNumber:'102'},
{carriage:'3', carriageNumber:'103'},
{carriage:'4', carriageNumber:'104'},
{carriage:'5', carriageNumber:'105'},
{carriage:'6', carriageNumber:'106'}
]
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdCarAlarm() {
return this.dialogShow ? OperationEvent.Train.detailTrainInfo.carAlarm.domId : '';
},
domIdBasicInfo() {
return this.dialogShow ? OperationEvent.Train.detailTrainInfo.basicInfo.domId : '';
},
domIdMarshalInfo() {
return this.dialogShow ? OperationEvent.Train.detailTrainInfo.marshalInfo.domId : '';
},
domIdAtpInfo() {
return this.dialogShow ? OperationEvent.Train.detailTrainInfo.atpInfo.domId : '';
},
title() {
return '列车信息显示';
}
},
methods: {
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.addModel = {
stationName:'',
tripNumber: '',
groupNumber:''
};
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
handleClick() {
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.el-dialog-div {
height: 400px;
overflow: auto;
}
</style>

View File

@ -0,0 +1,174 @@
<template>
<el-dialog v-dialogDrag class="chengdou-03__systerm stand-stop-time" :title="title" :visible.sync="show" width="480px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<div class="el-dialog-div">
<el-form ref="form" size="small" label-width="80px" :model="addModel" :rules="rules" label-position="left">
<el-form-item>
<el-col :span="11">
<el-form-item prop="stationName">
<span slot="label">车站</span>
<el-input v-model="addModel.stationName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="trainWindowCode">
<span slot="label">车次窗</span>
<el-input v-model="addModel.trainWindowCode" :disabled="true" />
</el-form-item>
</el-col>
</el-form-item>
<el-row>
<el-col :span="11">
<el-form-item label="旧车组号" prop="oldGroupNumber">
<el-select v-model="addModel.oldGroupNumber" filterable disabled>
<el-option v-for="train in trainList" :key="train.oldGroupNumber" :label="train.oldGroupNumber" :value="train.oldGroupNumber" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item label="新车组号" prop="newGroupNumber">
<el-select v-model="addModel.newGroupNumber">
<el-option v-for="train in trainList" :key="train.newGroupNumber" :label="train.newGroupNumber" :value="train.newGroupNumber" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-row justify="center" class="button-group-train">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainEditNumber',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
trainList: [],
selected: null,
addModel: {
stationName: '',
trainWindowCode: '',
oldGroupNumber: '',
newGroupNumber: ''
},
rules: {
newGroupNumber: [
{ required: true, message: '请输入新车组号', trigger: 'blur'}
]
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.editTrainNo.menu.domId : '';
},
title() {
return '修改车组号';
}
},
methods: {
loadInitData(map) {
},
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.addModel = {
stationName: '',
trainWindowCode: '',
oldGroupNumber: '',
newGroupNumber: ''
};
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.editTrainNo.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.el-dialog-div {
height: 400px;
overflow: auto;
}
</style>

View File

@ -0,0 +1,200 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="640px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-form ref="form" size="small" label-width="80px" :model="addModel" :rules="rules">
<div style="width: 46%;">
<el-form-item label="车 组 号:" label-width="95px" prop="tripNumber">
<el-input v-model="addModel.tripNumber" disabled />
</el-form-item>
</div>
<div style="overflow: hidden;">
<div
style="width: 48%; float: left; padding: 10px 15px; border: 1px double lightgray; margin: 20px 0px; height: 120px; margin-right: 4%;"
>
<span class="base-label">源车次窗</span>
<div style="position: relative; top:-10px;">
<el-form-item prop="stationStandSource">
<span slot="label">&emsp; :</span>
<el-select v-model="addModel.stationStandSource" filterable placeholder="请选择">
<el-option
v-for="item in stationStandList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="车 次 窗:" prop="trainSource">
<el-input v-model="addModel.trainSource" />
</el-form-item>
</div>
</div>
<div
style="width: 48%; float: left; padding: 10px 15px; border: 1px double lightgray; margin: 20px 0px; height: 120px;"
>
<span class="base-label">目的车次窗</span>
<div style="position: relative; top:-10px;">
<el-form-item prop="stationStandGoal">
<span slot="label">&emsp; :</span>
<el-select v-model="addModel.stationStandGoal" filterable placeholder="请选择">
<el-option
v-for="item in stationStandList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="车 次 窗:" prop="trainGoal">
<el-input v-model="addModel.trainGoal" />
</el-form-item>
</div>
</div>
</div>
</el-form>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainMove',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
selected: null,
addModel: {
tripNumber: '',
trainSource: '',
stationStandSource: '',
trainGoal: '',
stationStandGoal: ''
},
rules: {
tripNumber: [
{ required: true, message: '请输入车组号', trigger: 'blur' }
],
trainSource: [
{ required: true, message: '请输入车次号', trigger: 'blur' }
],
stationStandSource: [
{ required: true, message: '请选择车站', trigger: 'change' }
],
trainGoal: [
{ required: true, message: '请输入车次号', trigger: 'blur' }
],
stationStandGoal: [
{ required: true, message: '请选择车站', trigger: 'change' }
]
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.moveTrainId.menu.domId : '';
},
title() {
return '移动列车识别号';
}
},
methods: {
doShow(operate, selected) {
this.selected = selected;
//
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.moveTrainId.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,193 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="480px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="el-dialog-div">
<el-form ref="form" size="small" label-width="90px" :model="addModel" label-position="left">
<el-row>
<el-col :span="11">
<el-form-item prop="stationName">
<span slot="label">车站</span>
<el-input v-model="addModel.stationName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="trainWindowCode">
<span slot="label">车次窗</span>
<el-input v-model="addModel.trainWindowCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="车 组 号:" prop="groupNumber">
<el-select v-model="addModel.groupNumber" filterable disabled>
<el-option
v-for="train in trainList"
:key="train.groupNumber"
:label="train.groupNumber"
:value="train.groupNumber"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item prop="purposeStationName">
<span slot="label">车站</span>
<el-input v-model="addModel.purposeStationName" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="11" :offset="1">
<el-form-item prop="purposeTrainWindowCode">
<span slot="label">目的车次窗</span>
<el-input v-model="addModel.purposeTrainWindowCode" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainMoveNumber',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
trainList: [],
selected: null,
addModel: {
stationName: '',
trainWindowCode: '',
groupNumber: '',
purposeStationName: '',
purposeTrainWindowCode: ''
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.editTrainNo.menu.domId : '';
},
title() {
return '移动车组号';
}
},
methods: {
loadInitData(map) {
},
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
this.addModel = {
stationName: '',
trainWindowCode: '',
groupNumber: '',
purposeStationName: '',
purposeTrainWindowCode: ''
};
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.moveTrainNo.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.el-dialog-div {
height: 400px;
overflow: auto;
}
</style>

View File

@ -0,0 +1,209 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="640px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-form ref="form" size="small" label-width="80px" :model="addModel" :rules="rules">
<div style="overflow: hidden;">
<div
style="width: 48%; float: left; padding: 10px 15px; border: 1px double lightgray; margin: 20px 0px; height: 177px; margin-right: 4%;"
>
<span class="base-label">源车次窗</span>
<div style="position: relative; top:-10px;">
<el-form-item label="车 组 号:" prop="trainNumberSource">
<el-input v-model="addModel.trainNumberSource" />
</el-form-item>
<el-form-item prop="stationStandSource">
<span slot="label">&emsp; :</span>
<el-select v-model="addModel.stationStandSource" filterable placeholder="请选择">
<el-option
v-for="item in stationStandList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="车 次 窗:" prop="trainSource">
<el-input v-model="addModel.trainSource" />
</el-form-item>
</div>
</div>
<div
style="width: 48%; float: left; padding: 10px 15px; border: 1px double lightgray; margin: 20px 0px; height: 177px;"
>
<span class="base-label">目的车次窗</span>
<div style="position: relative; top:-10px;">
<el-form-item label="车 组 号:" prop="trainNumberGoal">
<el-input v-model="addModel.trainNumberGoal" />
</el-form-item>
<el-form-item prop="stationStandGoal">
<span slot="label">&emsp; :</span>
<el-select v-model="addModel.stationStandGoal" filterable placeholder="请选择">
<el-option
v-for="item in stationStandList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="车 次 窗:" prop="trainGoal">
<el-input v-model="addModel.trainGoal" />
</el-form-item>
</div>
</div>
</div>
</el-form>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import CancelMouseState from '@/mixin/CancelMouseState';
export default {
name: 'TrainSwitch',
mixins: [
CancelMouseState
],
data() {
return {
trainNoList: [],
selected: null,
addModel: {
trainNumberSource: '',
trainSource: '',
stationStandSource: '',
trainGoal: '',
stationStandGoal: '',
trainNumberGoal: ''
},
rules: {
trainNumberSource: [
{ required: true, message: '请输入车组号', trigger: 'blur' }
],
trainSource: [
{ required: true, message: '请输入车次号', trigger: 'blur' }
],
stationStandSource: [
{ required: true, message: '请选择车站', trigger: 'change' }
],
trainNumberGoal: [
{ required: true, message: '请输入车组号', trigger: 'blur' }
],
trainGoal: [
{ required: true, message: '请输入车次号', trigger: 'blur' }
],
stationStandGoal: [
{ required: true, message: '请选择车站', trigger: 'change' }
]
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.moveTrainId.menu.domId : '';
},
title() {
return '移动列车识别号';
}
},
methods: {
doShow(operate, selected) {
this.selected = selected;
//
if (!this.dialogShow) {
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
this.mouseCancelState(this.selected);
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Train.moveTrainId.menu.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(error => {
this.loading = false;
this.doClose();
console.error(error);
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,364 @@
<template>
<div class="menus" :style="{width: width + 'px'}">
<!--<menu-bar v-show="isShowBar" ref="menuBar" :selected="selected" />-->
<menu-button ref="menuButton" :selected="selected" />
<menu-station-stand ref="menuStationStand" :selected="selected" />
<menu-switch ref="menuSwitch" :selected="selected" />
<menu-signal ref="menuSignal" :selected="selected" />
<menu-section ref="menuSection" :selected="selected" />
<menu-train ref="menuTrain" :selected="selected" />
<menu-station ref="menuStation" :selected="selected" />
<passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="chengdou-03__systerm" />
<passive-Timeout ref="passiveTimeout" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import MenuSignal from './menuSignal';
import MenuButton from './menuButton';
import MenuStationStand from './menuStationStand';
import MenuSwitch from './menuSwitch';
import MenuSection from './menuSection';
import MenuTrain from './menuTrain';
import MenuStation from './menuStation';
import MenuBar from './menuBar';
import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import PassiveTimeout from './passiveDialog/timeout';
export default {
name: 'Menus',
components: {
MenuBar,
MenuButton,
MenuSignal,
MenuSwitch,
MenuSection,
MenuStationStand,
MenuStation,
MenuTrain,
PassiveAlarm,
PassiveContorl,
PassiveTimeout
},
props: {
selected: {
type: Object,
default() {
return null;
}
}
},
computed: {
...mapGetters('config', [
'width'
]),
isShowBar() {
return this.$store.state.training.prdType && this.$store.state.training.prdType !== '07';
}
},
watch: {
isShowBar(val) {
val && this.$store.dispatch('config/updateMenuBar');
}
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('config/updateMenuBar');
const _that = this;
window.onclick = function (e) {
if (!_that.$store.state.training.trainingStart) {
_that.$refs.menuBar && _that.$refs.menuBar.blankClickClose();
}
_that.$refs.menuStationStand.doClose();
_that.$refs.menuSwitch.doClose();
_that.$refs.menuSignal.doClose();
_that.$refs.menuSection.doClose();
_that.$refs.menuTrain.doClose();
_that.$refs.menuStation.doClose();
};
});
},
beforeDestroy() {
window.onclick = function (e) {};
}
};
</script>
<style>
.menus .pop-menu {
background: #F0F0F0;
}
.menus .pop-menu span {
color: #000;
}
.menus .pop-menu .is-disabled span {
color: #B4B3B8;
}
.chengdou-03__systerm {
overflow: hidden !important;
}
.chengdou-03__systerm .el-dialog {
background: #0055E8;
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
border: 1px solid rgb(69, 134, 247);
border-radius: 6px;
font-size: 13px !important;
color: #000;
}
.chengdou-03__systerm .el-dialog span {
font-size: 13px !important;
line-height: 22px;
}
.chengdou-03__systerm .el-dialog span .el-icon-arrow-up{
line-height: 18px;
}
.chengdou-03__systerm .el-dialog .el-dialog__footer {
background: #ECE9D8;
opacity: 1;
}
.chengdou-03__systerm .el-dialog .el-dialog__body {
padding: 20px;
margin: 0px 3px 3px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #ECE9D8;
opacity: 1;
}
.chengdou-03__systerm .el-dialog .el-dialog__title {
font-size: 16px;
color: #fff;
position: absolute;
top: 4px;
left: 7px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 6px;
right: 3px;
line-height: 16px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.chengdou-03__systerm .el-dialog .el-button {
height: 24px;
line-height: 22px;
padding: 0px;
width: 80px;
border: 2px outset #E2E2E2;
border-radius: 4px !important;
color: #000;
background: #F0F0F0;
}
.chengdou-03__systerm .el-dialog .expand {
width: 120px;
}
.chengdou-03__systerm .el-dialog .el-button:focus span {
border: 1px dashed gray;
}
.chengdou-03__systerm .el-dialog .el-button:active {
border: 2px inset #E2E2E2;
}
.chengdou-03__systerm .el-dialog .el-button:disabled {
border: 2px inset #E2E2E2;
}
.chengdou-03__systerm .el-dialog .el-button:disabled span {
border: 0px;
}
.chengdou-03__systerm .el-dialog .el-input {
border: 2px inset #E9E9E9;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-03__systerm .el-dialog .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-03__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #F0F0F0 !important;
}
.chengdou-03__systerm .el-dialog .el-textarea {
border: 2px inset #E9E9E9;
border-radius: 0px;
}
.chengdou-03__systerm .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.chengdou-03__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.chengdou-03__systerm .el-dialog .el-table--border th.gutter {
background: #EBEADB !important;
}
.chengdou-03__systerm .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-table .cell {
height: 22px;
line-height: 22px;
}
.chengdou-03__systerm .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.chengdou-03__systerm .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.chengdou-03__systerm .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
}
.chengdou-03__systerm .el-dialog .current-row>td {
background: #3399FF !important;
color: #fff !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__label {
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
.chengdou-03__systerm .el-dialog .el-radio__inner {
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-radio__label {
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.chengdou-03__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
width: 4px;
height: 4px;
border-radius: 100%;
background-color: #000 !important;
position: absolute;
left: 50%;
top: 50%;
}
.chengdou-03__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
background: #E6E6E6 !important;
}
.chengdou-03__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
color: #C5C9CC !important;
}
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -15px;
top: -18px;
}
.chengdou-03__systerm .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
}
.chengdou-03__systerm .el-dialog .table {
margin-top: 10px;
}
.chengdou-03__systerm .el-dialog .notice {
margin-left: 62px;
line-height: 30px;
}
.chengdou-03__systerm .el-dialog .button-group {
margin-top: 20px;
}
</style>

View File

@ -0,0 +1,685 @@
<template>
<div id="menuBarChengdu3">
<menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%" />
<station-control-convert ref="stationControlConvert" />
<password-box ref="passwordBox" @setLoginResult="getLoginResult" />
<view-name ref="viewName" />
<train-add ref="trainAdd" />
<train-transtalet ref="trainTranstalet" />
<train-delete ref="trainDelete" />
<manage-user ref="manageUser" />
<help-about ref="helpAbout" />
<set-limit-speed ref="setLimitSpeed" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import MenuBar from '@/jmapNew/theme/components/menus/menuBar';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import StationControlConvert from './menuDialog/stationControlConvert';
import TrainAdd from './menuDialog/trainAdd';
import TrainTranstalet from './menuDialog/trainTranstalet';
import TrainDelete from './menuDialog/trainDelete';
import PasswordBox from './menuDialog/passwordBox';
import ViewName from './menuDialog/viewName';
import ManageUser from './menuDialog/manageUser';
import HelpAbout from './menuDialog/helpAbout';
import SetLimitSpeed from './menuDialog/setLimitSpeed';
export default {
name: 'MenuBarChengdu03',
components: {
MenuBar,
StationControlConvert,
PasswordBox,
ViewName,
TrainAdd,
TrainTranstalet,
TrainDelete,
ManageUser,
HelpAbout,
SetLimitSpeed
},
data() {
return {
menuNormal: {
Local: [
{
title: '系统',
// operate: OperationEvent.Command.mBar.system,
operate: '',
children: [
{
title: '登录',
click: this.undeveloped
},
{
title: '注销',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '连接主用中心',
click: this.undeveloped
},
{
title: '连接备用中心',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '退出',
click: this.undeveloped
}
]
},
{
title: '临时限速',
operate: OperationEvent.Command.mBar.limitSpeed,
children: [
{
title: '设置临时限速',
operate: OperationEvent.Section.setLimitSpeed,
click: this.setLimitSpeed
},
{
title: '取消临时限速',
operate: OperationEvent.Section.cancelSpeed,
click: this.cancleLimitSpeed
}
]
},
{
title: '查看',
// operate: OperationEvent.Command.mBar.check,
operate: '',
children: [
{
title: '运行图',
click: this.undeveloped
},
{
title: '报告分析',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '视图',
click: this.undeveloped,
operate: '',
children: [{
title: '报警',
click: this.undeveloped
},
{
title: '列车运行信息',
click: this.undeveloped
},
{
title: '设备状态',
click: this.undeveloped
},
{
title: '列车详细信息',
click: this.undeveloped
},
{
title: '站台详细信息',
click: this.undeveloped
}]
},
{
title: '终端站发车列表',
click: this.undeveloped
},
{
title: '详细设备状态',
click: this.undeveloped
},
{
title: '查找列车',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '显示目的地号',
click: this.undeveloped
},
{
title: '显示轨道名',
click: this.undeveloped
},
{
title: '显示道岔名',
click: this.undeveloped
},
{
title: '显示信号机名',
click: this.undeveloped
},
{
title: '显示车次窗位置',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '显示车次号',
click: this.undeveloped
},
{
title: '显示车组号',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '全屏',
click: this.undeveloped
},
{
title: '放大',
click: this.undeveloped
},
{
title: '缩小',
click: this.undeveloped
},
{
title: '恢复',
click: this.undeveloped
}
]
},
// {
// title: '',
// operate: '',
// children: [
// ]
// },
{
title: '显示',
// operate: OperationEvent.Command.mBar.view,
operate: '',
hide: true,
children: [
{
title: '设置列车识别号显示',
click: this.setTrainIdDisplay,
operate: OperationEvent.Command.view.setTrainIdDisplay
},
{
title: '设置名称显示',
click: this.setNameDisplay,
operate: OperationEvent.Command.view.setNameDisplay
},
{
title: '设置设备显示',
click: this.setDeviceDisplay,
operate: OperationEvent.Command.view.setDeviceDisplay
}
]
},
{
title: 'ATS终端操作',
operate: '',
children: [
{
title: '当天运行车计划',
click: this.undeveloped
},
{
title: '出入库预告',
click: this.undeveloped
}
]
},
{
title: '计划车操作',
operate: '',
children: [
{
title: '添加计划车',
click: this.undeveloped
},
{
title: '平移计划车',
click: this.undeveloped
},
{
title: '删除计划车',
click: this.undeveloped
}
]
},
{
title: '批处理命令',
operate: '',
children: [
{
title: '全线扣车',
click: this.undeveloped
},
{
title: '取消全线扣车',
click: this.undeveloped
},
{
title: '取消上行全线扣车',
click: this.undeveloped
},
{
title: '取消下行全线扣车',
click: this.undeveloped
}
]
},
{
title: '信息管理',
operate: '',
children: [
{
title: '调度日志',
click: this.undeveloped
},
{
title: '调度留言提醒',
click: this.undeveloped
},
{
title: '报警设置',
click: this.undeveloped
}
]
},
{
title: '帮助',
operate: '',
children: [
{
title: '关于ITS GPC 工作站',
click: this.about,
operate: OperationEvent.Command.help.about
}
]
}
],
Center: [
{
title: '系统',
operate: OperationEvent.Command.mBar.system,
children: [
{
title: '登录',
click: this.undeveloped
},
{
title: '注销',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '连接主用中心',
click: this.undeveloped
},
{
title: '连接备用中心',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '退出',
click: this.undeveloped
}
]
},
{
title: '临时限速',
operate: OperationEvent.Command.mBar.limitSpeed,
children: [
{
title: '设置临时限速',
operate: OperationEvent.Section.setLimitSpeed,
click: this.setLimitSpeed
},
{
title: '取消临时限速',
operate: OperationEvent.Section.cancelSpeed,
click: this.cancleLimitSpeed
}
]
},
{
title: '查看',
operate: OperationEvent.Command.mBar.check,
children: [
{
title: '运行图',
click: this.undeveloped
},
{
title: '报告分析',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '视图',
click: this.undeveloped,
operate: '',
children: [{
title: '报警',
click: this.undeveloped
},
{
title: '列车运行信息',
click: this.undeveloped
},
{
title: '设备状态',
click: this.undeveloped
},
{
title: '列车详细信息',
click: this.undeveloped
},
{
title: '站台详细信息',
click: this.undeveloped
}]
},
{
title: '终端站发车列表',
click: this.undeveloped
},
{
title: '详细设备状态',
click: this.undeveloped
},
{
title: '查找列车',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '显示目的地号',
click: this.undeveloped
},
{
title: '显示轨道名',
click: this.undeveloped
},
{
title: '显示道岔名',
click: this.undeveloped
},
{
title: '显示信号机名',
click: this.undeveloped
},
{
title: '显示车次窗位置',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '显示车次号',
click: this.undeveloped
},
{
title: '显示车组号',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '全屏',
click: this.undeveloped
},
{
title: '放大',
click: this.undeveloped
},
{
title: '缩小',
click: this.undeveloped
},
{
title: '恢复',
click: this.undeveloped
}
]
},
{
title: '车站定位',
operate: '',
children: [
]
},
{
title: '显示',
operate: OperationEvent.Command.mBar.view,
hide: true,
children: [
{
title: '设置列车识别号显示',
click: this.setTrainIdDisplay,
operate: OperationEvent.Command.view.setTrainIdDisplay
},
{
title: '设置名称显示',
click: this.setNameDisplay,
operate: OperationEvent.Command.view.setNameDisplay
},
{
title: '设置设备显示',
click: this.setDeviceDisplay,
operate: OperationEvent.Command.view.setDeviceDisplay
}
]
},
{
title: 'ATS终端操作',
operate: '',
children: [
{
title: '当天运行车计划',
click: this.undeveloped
},
{
title: '出入库预告',
click: this.undeveloped
}
]
},
{
title: '计划车操作',
operate: '',
children: [
{
title: '添加计划车',
click: this.undeveloped
},
{
title: '平移计划车',
click: this.undeveloped
},
{
title: '删除计划车',
click: this.undeveloped
}
]
},
{
title: '批处理命令',
operate: '',
children: [
{
title: '全线扣车',
click: this.undeveloped
},
{
title: '取消全线扣车',
click: this.undeveloped
},
{
title: '取消上行全线扣车',
click: this.undeveloped
},
{
title: '取消下行全线扣车',
click: this.undeveloped
}
]
},
{
title: '信息管理',
operate: '',
children: [
{
title: '调度日志',
click: this.undeveloped
},
{
title: '调度留言提醒',
click: this.undeveloped
},
{
title: '报警设置',
click: this.undeveloped
}
]
},
{
title: '帮助',
operate: '',
children: [
{
title: '关于ITS GPC 工作站',
click: this.about,
operate: OperationEvent.Command.help.about
}
]
}
]
}
};
},
computed: {
...mapGetters('map', [
'stationList'
])
},
created() {
this.menuNormal['Center'][3].children = this.initStationList();
},
methods: {
initStationList() {
const list = [];
this.stationList.forEach(station => {
if (station.visible) {
const node = {
title: station.name,
operate: station.code,
show: true,
click: this.mapLocation,
code: station.code
};
list.push(node);
}
});
return list;
},
//
mapLocation(code) {
if (code) {
this.$store.dispatch('training/updateOffsetStationCode', { offsetStationCode: code });
}
},
//
about(order) {
const operate = {
operation: order.operate
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.helpAbout.doShow(operate);
}
});
},
getLoginResult(operate) {
/** 密码校验*/
if (operate.operation == OperationEvent.StationControl.forcedStationControl.passwordConfirm.operation) {
if (operate.success) {
/** 校验成功*/
this.$refs.stationControlConvert.doShow({ operation: OperationEvent.StationControl.forcedStationControl.mbar.operation });
}
}
},
setLimitSpeed(order) {
const operate = {
operation: order.operate
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.setLimitSpeed.doShow(operate, true);
}
});
},
blankClickClose() {
this.$refs.menuBar.doClose();
},
cancleLimitSpeed(order) {
const operate = {
operation: order.operate
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.setLimitSpeed.doShow(operate, false);
}
});
},
undeveloped() {
this.$refs.menuBar.doClose();
this.$alert('实现中......', '提示', {
confirmButtonText: '确定',
callback: action => {
}
});
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss">
#menuBarChengdu3{
line-height:30px;
}
#menuBarChengdu3 #menuBar .menu-li-block .label{
padding: 0px 30px 0px 5px !important;
}
</style>

View File

@ -0,0 +1,133 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm two-confirmation"
title="二次确认"
:visible.sync="show"
width="360px"
:before-close="doClose"
:show-close="false"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div class="context">
<template v-for="(message, index) in messages">
<span :key="index">{{ message }}</span>
</template>
</div>
<el-row class="button-group">
<el-col :span="10" :offset="3">
<el-button :id="show? domIdConfirm: ''" :loading="loading" @click="commit">确认</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdCancel" @click="cancel">关闭</el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'TwoConfirmation',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
operate: '',
timer: null,
domIdConfirm: ''
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
},
messages() {
if (this.operate) {
return this.operate.messages;
}
return [];
}
},
methods: {
doShow(operate) {
this.domIdConfirm = '';
if (OperationHandler.checkOperationIsCurrentOperate(operate.operation, OperationEvent.StationControl.forcedStationControl)) {
this.domIdConfirm = OperationEvent.StationControl.forcedStationControl.confirm.domId;
} else if (OperationHandler.checkOperationIsCurrentOperate(operate.operation, OperationEvent.StationControl.requestStationControl)) {
this.domIdConfirm = OperationEvent.StationControl.requestStationControl.confirm.domId;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl)) {
this.domIdConfirm = OperationEvent.StationControl.requestCentralControl.confirm.domId;
}
this.operate = operate || {};
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
cancel() {
const operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.confirm.operation
};
this.$emit('setOperate', { selection: this.operate.selection, cancel: true });
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.doClose();
}
});
},
commit() {
if (this.operate && this.operate.selection) {
const operate = {
send: true,
type: this.operate.type,
val: this.operate.val,
selection: this.operate.selection
};
if (OperationHandler.checkOperationIsCurrentOperate(this.operate.operation, OperationEvent.StationControl.forcedStationControl)) {
operate.operation = OperationEvent.StationControl.forcedStationControl.confirm.operation;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operate.operation, OperationEvent.StationControl.requestStationControl)) {
operate.operation = OperationEvent.StationControl.requestStationControl.confirm.operation;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operate.operation, OperationEvent.StationControl.requestCentralControl)) {
operate.operation = OperationEvent.StationControl.requestCentralControl.confirm.operation;
}
this.loading = true;
this.doClose();
this.$emit('setOperate', { selection: this.operate.selection, commit: true });
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
if (valid) {
this.loading = false;
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
}, 1000).catch(() => {
this.loading = true;
this.$refs.noticeInfo.doShow();
});
}
}
}
};
</script>

View File

@ -0,0 +1,157 @@
<template>
<el-dialog class="chengdou-03__systerm user-add" :title="title" :visible.sync="show" width="420px"
:before-close="doClose" :zIndex="2000" :modal="false" :close-on-click-modal="false" append-to-body v-dialogDrag>
<div style="padding: 15px 40px; border: 1px double lightgray; margin: 20px 10px; ">
<el-form size="small" label-width="90px" :model="model" label-position="left" :rules="rules" ref="form">
<el-form-item label="工号:" prop="jobNumber">
<el-input v-model="model.jobNumber"></el-input>
</el-form-item>
<el-form-item label="用户名:" prop="userName">
<el-input v-model="model.userName"></el-input>
</el-form-item>
<el-form-item label="密码:" prop="password">
<el-input type="password" v-model="model.password"></el-input>
</el-form-item>
<el-form-item label="确认密码:" prop="confirm">
<el-input type="password" v-model="model.confirm"></el-input>
</el-form-item>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="8" :offset="6">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="0">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'UserAdd',
components: {
},
data() {
return {
operate: {},
operation: null,
dialogShow: false,
loading: false,
model: {
type: 'ADD',
jobNumber: '',
userName: '',
password: '',
confirm: '',
},
rules: {
jobNumber: [
{ required: true, message: '请输入工号', trigger: 'blur' }
],
userName: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'change' }
],
confirm: [
{ required: true, message: '请再次输入密码', trigger: 'change' }
],
},
}
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
},
title() {
return '增加用户'
}
},
methods: {
doShow(operate) {
//
if (!this.dialogShow) {
this.loading = false;
this.operate = operate || {};
this.operation = operate.operation;
this.$nextTick(() => {
this.$refs.form.resetFields();
});
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.confirm.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
if (this.model.password === this.model.confirm) {
this.doClose();
this.$emit('operateUser', this.model);
} else {
this.$messageBox('二次输入密码不一致');
}
}
})
} else {
return false;
}
});
},
cancel() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.cancel.menu.operation,
}
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); this.model });
}
}
}
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -10px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,129 @@
<template>
<el-dialog class="chengdou-03__systerm user-delete" :title="title" :visible.sync="show" width="260px"
:before-close="doClose" :zIndex="2000" :modal="false" :close-on-click-modal="false" append-to-body v-dialogDrag>
<div style="padding-left: 10px; padding-bottom: 10px">
<i class="el-icon-info"></i>
<template v-for="message in messages">
<span>{{message}}</span>
</template>
</div>
<el-row justify="center" class="button-group">
<el-col :span="8" :offset="3">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="2">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'UserDelete',
components: {
},
data() {
return {
operate: {},
messages: [],
model: {
type: 'DELETE',
jobNumber: '',
userName: '',
},
operation: null,
dialogShow: false,
loading: false,
}
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
},
title() {
return '删除用户'
}
},
methods: {
doShow(operate, selected) {
//
if (!this.dialogShow) {
this.loading = false;
this.operate = operate || {};
this.operation = operate.operation;
this.messages = operate.messages;
this.model.userName = '';
this.model.jobNumber = '';
if (selected) {
this.model.userName = selected.userName;
this.model.jobNumber = selected.jobNumber;
}
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
if (this.model.userName && this.model.jobNumber) {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.confirm.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
this.$emit('operateUser', this.model);
}
})
} else {
this.$messageBox('选择的用户名或工号为空');
}
},
cancel() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.cancel.menu.operation,
}
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
}
}
}
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -10px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,173 @@
<template>
<el-dialog class="chengdou-03__systerm user-edit" :title="title" :visible.sync="show" width="420px"
:before-close="doClose" :zIndex="2000" :modal="false" :close-on-click-modal="false" append-to-body v-dialogDrag>
<div style="padding: 15px 40px; border: 1px double lightgray; margin: 20px 10px; ">
<el-form size="small" label-width="90px" :model="model" label-position="left" :rules="rules" ref="form">
<el-form-item label="工号:" prop="jobNumber">
<el-input v-model="model.jobNumber" disabled></el-input>
</el-form-item>
<el-form-item label="用户名:" prop="userName">
<el-input v-model="model.userName" disabled></el-input>
</el-form-item>
<el-form-item label="原始密码:" prop="oldPassword">
<el-input type="oldPassword" v-model="model.oldPassword"></el-input>
</el-form-item>
<el-form-item label="密码:" prop="password">
<el-input type="password" v-model="model.password"></el-input>
</el-form-item>
<el-form-item label="确认密码:" prop="confirm">
<el-input type="password" v-model="model.confirm"></el-input>
</el-form-item>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="8" :offset="6">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="0">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'UserEdit',
components: {
},
data() {
return {
operate: {},
selected: {},
operation: null,
dialogShow: false,
loading: false,
model: {
type: 'EDIT',
jobNumber: '',
userName: '',
oldPassword: '',
password: '',
confirm: '',
},
rules: {
jobNumber: [
{ required: true, message: '请输入工号', trigger: 'blur' }
],
userName: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
oldPassword: [
{ required: true, message: '请输入原始密码', trigger: 'change' }
],
password: [
{ required: true, message: '请输入新密码', trigger: 'change' }
],
confirm: [
{ required: true, message: '请再次输入新密码', trigger: 'change' }
],
},
}
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
},
title() {
return '用户编辑页面'
}
},
methods: {
doShow(operate, selected) {
//
if (!this.dialogShow) {
this.loading = false;
this.operate = operate || {};
this.operation = operate.operation;
this.$nextTick(() => {
this.$refs.form.resetFields();
this.selected = selected;
if (selected) {
this.model.jobNumber = selected.jobNumber;
this.model.userName = selected.userName;
}
});
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.confirm.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid)
if (this.selected.password !== this.model.oldPassword) {
this.$messageBox('原始密码错误');
} else if (this.model.password !== this.model.confirm) {
this.$messageBox('二次输入的密码错误');
} else if (this.model.oldPassword === this.model.password) {
this.$messageBox('老密码和新密相同');
} else {
this.doClose();
this.$emit('operateUser', this.model);
}
})
} else {
return false;
}
});
},
cancel() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.cancel.menu.operation,
}
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
}
}
}
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -10px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,138 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'TrainAdd',
components: {
},
data() {
return {
trainNoList: [],
addModel: {
},
rules: {
// groupNumber: [
// { required: true, message: '', trigger: 'blur' }
// ],
// stationStandCode: [
// { required: true, message: '', trigger: 'change' }
// ],
},
operation: null,
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.planTrain.addPlanTrain.domId : '';
},
title() {
return '设置限速';
}
},
methods: {
doShow(operate) {
this.operate = operate || {};
this.operation = operate.operation;
if (!this.dialogShow) {
this.loading = false;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Command.planTrain.addPlanTrain.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(error => {
this.loading = false;
this.doClose();
console.error(error);
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,285 @@
<template>
<el-dialog class="chengdou-03__systerm manage-user" :title="title" :visible.sync="show" width="420px"
:before-close="doClose" :zIndex="2000" :modal="false" :close-on-click-modal="false" v-dialogDrag>
<div style="padding: 5px 5px; border: 1px double lightgray; margin: 20px 0px; ">
<span class="base-label">用户列表</span>
<el-row>
<el-col :span="18">
<el-table ref="multipleTable" :data="tableData" border row-key="code" style="width: 100%"
height="450" center size="mini" highlight-current-row @row-click="chooseUser">
<el-table-column prop="jobNumber" label="工号" width="120">
<template slot-scope="scope">
<span>{{scope.row.jobNumber}}</span>
</template>
</el-table-column>
<el-table-column prop="userName" label="用户名">
<template slot-scope="scope">
<span>{{scope.row.userName}}</span>
</template>
</el-table-column>
<el-table-column width="20">
</el-table-column>
</el-table>
</el-col>
<el-col :span="4">
<el-button style="margin-top: 140px; margin-left: 10px;" :id="domIdFreshUser" @click="freshUser">刷新
</el-button>
<el-button style="margin-top: 30px; margin-left: 10px;" :id="domIdAddUser" @click="addUser">增加
</el-button>
<el-button style="margin-top: 30px; margin-left: 10px;" :id="domIdEditUser" @click="editUser">修改
</el-button>
<el-button style="margin-top: 30px; margin-left: 10px;" :id="domIdDelUser" @click="delUser">删除
</el-button>
</el-col>
</el-row>
</div>
<el-row justify="center" class="button-group">
<el-col :span="8" :offset="6">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="0">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<user-add ref="userAdd" @operateUser="operateUser"></user-add>
<user-edit ref="userEdit" @operateUser="operateUser"></user-edit>
<user-delete ref="userDelete" @operateUser="operateUser"></user-delete>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import UserAdd from './childDialog/userAdd';
import UserEdit from './childDialog/userEdit';
import UserDelete from './childDialog/userDelete';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'ManageUser',
components: {
UserAdd,
UserEdit,
UserDelete
},
data() {
return {
tableData: [],
operate: {},
operation: null,
dialogShow: false,
loading: false,
selected: null,
}
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdAddUser() {
return this.dialogShow ? OperationEvent.Command.manage.addUser.domId : '';
},
domIdEditUser() {
return this.dialogShow ? OperationEvent.Command.manage.editUser.domId : '';
},
domIdDelUser() {
return this.dialogShow ? OperationEvent.Command.manage.delUser.domId : '';
},
domIdFreshUser() {
return this.dialogShow ? OperationEvent.Command.manage.freshUser.domId : '';
},
domIdChooseUser() {
return this.dialogShow ? OperationEvent.Command.manage.chooseUser.domId : '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.close.menu.domId : '';
},
title() {
return '用户管理'
}
},
methods: {
doShow(operate) {
//
if (!this.dialogShow) {
this.loading = false;
this.operate = operate || {};
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
//
addUser() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.manage.addUser.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.$refs.userAdd.doShow(operate);
}
}).catch(error => {
this.loading = false;
})
},
//
editUser() {
if (this.selected) {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.manage.editUser.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.$refs.userEdit.doShow(operate, this.selected);
}
}).catch(error => {
this.loading = false;
})
} else {
this.$messageBox('请先选择用户');
}
},
//
delUser() {
if (this.selected) {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.manage.delUser.operation,
messages: [`你确定删除用户${this.selected.userName}吗?`]
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.$refs.userDelete.doShow(operate, this.selected);
}
}).catch(error => {
this.loading = false;
})
} else {
this.$messageBox('请先选择用户');
}
},
//
freshUser() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.manage.freshUser.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
}).catch(error => {
this.loading = false;
})
},
//
chooseUser(row) {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.manage.chooseUser.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
this.selected = row;
}).catch(error => {
this.loading = false;
})
},
commit() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.menu.operation,
}
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(error => {
this.loading = false;
this.doClose();
})
},
cancel() {
let operate = {
type: this.operate.type,
operation: OperationEvent.Command.cancel.menu.operation,
}
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
},
//
operateUser(data) {
if (data && data.type === 'ADD') {
let index = this.tableData.indexOf(this.tableData.find(elem => { return elem.jobNumber === data.jobNumber }));
if (index < 0) {
this.tableData.push({
jobNumber: data.jobNumber,
userName: data.userName,
password: data.password
});
} else {
this.$messageBox('添加失败,存在相同工号的用户');
}
} else if (data && data.type === 'EDIT') {
let index = this.tableData.indexOf(this.tableData.find(elem => { return elem.jobNumber === data.jobNumber }));
if (index >= 0) {
this.tableData[index].password = data.password;
this.tableData[index].userName = data.userName;
} else {
this.$messageBox('修改失败');
}
} else if (data && data.type === 'DELETE') {
let index = this.tableData.indexOf(this.tableData.find(elem => { return elem.jobNumber === data.jobNumber }));
if (index >= 0) {
this.tableData.splice(index, 1);
} else {
this.$messageBox('删除失败');
}
}
}
}
}
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -10px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -0,0 +1,221 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm password-box"
title="密码框"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="context" style="overflow:hidden">
<el-form label-width="80px" size="mini">
<el-form-item prop="username">
<span slot="label">用户名</span>
<el-input v-model="model.username" disabled />
</el-form-item>
<el-form-item prop="password">
<span slot="label">&emsp;</span>
<el-input v-model="model.password" type="password" />
</el-form-item>
</el-form>
<div class="operate">
<el-button-group v-model="key" class="left" size="mini">
<el-button size="mini" @click="click(1)">1</el-button>
<el-button size="mini" @click="click(2)">2</el-button>
<el-button size="mini" @click="click(3)">3</el-button>
<el-button size="mini" @click="click(4)">4</el-button>
<el-button size="mini" @click="click(5)">5</el-button>
</el-button-group>
<el-button-group v-model="key" class="right" size="mini">
<el-button @click="esc">回退</el-button>
</el-button-group>
<el-button-group v-model="key" class="left" size="mini">
<el-button size="mini" @click="click(6)">6</el-button>
<el-button size="mini" @click="click(7)">7</el-button>
<el-button size="mini" @click="click(8)">8</el-button>
<el-button size="mini" @click="click(9)">9</el-button>
<el-button size="mini" @click="click(0)">0</el-button>
</el-button-group>
<el-button-group v-model="key" class="right" size="mini">
<el-button @click="clr">清空</el-button>
</el-button-group>
</div>
</div>
<el-row class="button-group">
<el-col :span="6" :offset="4">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'PasswordBox',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
operate: null,
operation: null,
model: {
username: '',
password: ''
},
key: ''
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.close.password.domId : '';
},
domIdConfirm() {
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl)) {
/** 强制站控*/
return OperationEvent.StationControl.forcedStationControl.passwordConfirm.domId;
}
return '';
}
},
methods: {
loadInitData(operate) {
this.model.username = '';
this.model.password = '';
this.operate = operate || {};
this.operation = operate.operation;
this.model.username = this.$store.state.user.name;
},
doShow(operate) {
/** 如果不是断点激活,而是第一次显示需要初始化数据*/
if (!this.dialogShow) {
this.loadInitData(operate);
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
cancel() {
const operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.password.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
});
},
commit() {
const operate = {
type: this.operate.type
};
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl)) {
/** 强制站控*/
operate.operation = OperationEvent.StationControl.forcedStationControl.passwordConfirm.operation;
}
if (this.model.password == '123456') {
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
if (valid) {
this.$emit('setLoginResult', {
operation: operate.operation,
success: valid
});
this.doClose();
}
}).catch(() => {
this.loading = false;
this.$emit('setLoginResult', {
operation: operate.operation,
success: false
});
});
} else {
this.$refs.noticeInfo.doShow('密码输入错误!');
}
},
click(key) {
if (!this.model.password) {
this.model.password = '';
}
this.model.password += key;
},
esc() {
if (this.model.password) {
this.model.password = this.model.password.substring(0, this.model.password.length - 1);
}
},
clr() {
this.model.password = '';
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss";
.password-box .el-form {
margin-top: 10px !important;
margin-right: 20px !important;
}
.password-box .el-form-item {
margin-bottom: 5px !important;
}
.password-box .context {
height: 170px !important;
}
.password-box .operate {
margin-top: 10px !important;
padding-bottom: 10px !important;
}
.password-box .left {
margin-left: 10px !important;
}
.password-box .left .el-button {
color: #000;
background: #F0F0F0;
text-align: center;
width: 30px !important;
}
.password-box .right {
color: #000;
margin-left: 10px !important;
background: #F0F0F0;
width: 80px !important;
}
</style>

View File

@ -0,0 +1,286 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="800px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row>
<el-col :span="14">
<div class="card-box">
<span class="tip-label">请求</span>
<el-row style="margin: 5px">
<el-col :span="6" class="item-label">线路选择</el-col>
<el-col :span="6">
<el-select v-model="data.path">
<el-option
v-for="item in pathList"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="6" class="item-label">限制速度</el-col>
<el-col :span="6">
<el-select v-model="data.speed">
<el-option
v-for="item in speedList"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-col>
</el-row>
<el-row>
<el-col :span="6" class="item-label">起始公里标</el-col>
<el-col :span="6">
<el-input v-model="data.begKmPost" />
</el-col>
<el-col :span="6" class="item-label">结束公里标</el-col>
<el-col :span="6">
<el-input v-model="data.endKmPost" />
</el-col>
</el-row>
<el-row>
<el-col :span="6" class="item-label">限速区段长度</el-col>
<el-col :span="6">
<el-input v-model="data.length" />
</el-col>
<el-col :span="3">
<el-button>查看</el-button>
</el-col>
<el-col :span="3">
<el-button>请求</el-button>
</el-col>
</el-row>
</div>
<div class="card-box">
<span class="tip-label">执行</span>
<el-row style="margin: 5px">
<el-col :span="6" class="item-label">线路选择</el-col>
<el-col :span="6">
<el-select v-model="form.path">
<el-option
v-for="item in pathList"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="6" class="item-label">限制速度</el-col>
<el-col :span="6">
<el-select v-model="form.speed">
<el-option
v-for="item in speedList"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-col>
</el-row>
<el-row>
<el-col :span="6" class="item-label">起始公里标</el-col>
<el-col :span="6">
<el-input v-model="form.begKmPost" />
</el-col>
<el-col :span="6" class="item-label">结束公里标</el-col>
<el-col :span="6">
<el-input v-model="form.endKmPost" />
</el-col>
</el-row>
<el-row>
<el-col :span="6" class="item-label">限速区段长度</el-col>
<el-col :span="6">
<el-input v-model="form.length" />
</el-col>
<el-col :span="3">
<el-button>查看</el-button>
</el-col>
<el-col :span="3">
<el-button>请求</el-button>
</el-col>
</el-row>
</div>
<div class="card-box">
<span class="tip-label">操作提示</span>
</div>
</el-col>
<el-col :span="9" :offset="1">
<div class="card-box">
<span class="tip-label">设备列表</span>
<el-table class="card-table" :data="deviceData" border style="width: 100%" height="300">
<el-table-column prop="stationName" label="站名" />
<el-table-column prop="deviceCode" label="设备号" />
<el-table-column prop="deviceName" label="设备名" />
</el-table>
</div>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'TrainAdd',
components: {
},
data() {
return {
operation: null,
dialogShow: false,
loading: false,
data: {
path: '',
speed: '',
begKmPost: '',
endKmPost: '',
length: ''
},
form: {
path: '',
speed: '',
begKmPost: '',
endKmPost: '',
length: ''
},
pathList: [
{ name: '上行站线', value: '01' },
{ name: '下行站线', value: '02' }
],
speedList: [
{ name: '10Km/h', value: '10' },
{ name: '15Km/h', value: '15' },
{ name: '20Km/h', value: '20' },
{ name: '25Km/h', value: '25' }
],
deviceData: []
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.planTrain.addPlanTrain.domId : '';
},
title() {
return '设置临时限速';
}
},
methods: {
doShow(operate) {
this.operate = operate || {};
this.operation = operate.operation;
if (!this.dialogShow) {
this.loading = false;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Command.planTrain.addPlanTrain.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(error => {
this.loading = false;
this.doClose();
console.error(error);
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.card-box {
border: 1px solid #c0c0c0;
margin-bottom: 20px;
}
.card-table {
position: relative;
top: -15px;
}
.tip-label {
position: relative;
left: 5px;
top: -15px;
background: #ECE9D8;
}
.item-label {
text-align: center;
}
</style>

View File

@ -2,7 +2,7 @@
<el-dialog
v-dialogDrag
class="chengdou-03__systerm station-control-convert"
title="Control Mode Conversion"
title="控制模式转换"
:visible.sync="show"
width="700px"
:before-close="doClose"
@ -22,41 +22,42 @@
size="mini"
highlight-current-row
>
<el-table-column :id="domIdChoose" prop="check" label="Select" width="60" style="margin-left:30px">
<el-table-column :id="domIdChoose" prop="check" label="选择" width="60" style="margin-left:30px">
<template slot-scope="scope">
<el-checkbox ref="check" v-model="scope.row.check" :disabled="scope.row.disabled" />
</template>
</el-table-column>
<el-table-column prop="operate" label="Operating Area" width="140">
<el-table-column prop="operate" label="操作区域" width="140">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.operate }}</span>
</template>
</el-table-column>
<el-table-column prop="control" label="Control Mode" width="80">
<el-table-column prop="control" label="控制模式" width="80">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.control }}</span>
</template>
</el-table-column>
<el-table-column prop="status" label="Center Station Communication Status" width="140">
<el-table-column prop="status" label="中心-车站通信状态" width="140">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.status }}</span>
</template>
</el-table-column>
<el-table-column prop="result" label="Transfer Execution Status">
<el-table-column prop="result" label="转换执行状态">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.result }}</span>
</template>
</el-table-column>
</el-table>
<el-row class="button-group">
<el-col :span="10" :offset="3" class="control_button">
<el-button style="width: 200px" v-if="isFork" :id="domIdFork" :disabled="disabledCommit" @click="forkCommit">Emergency Station Control</el-button>
<el-button style="width: 150px" v-if="isRequest" :id="domIdRequest" :disabled="disabledCommit" @click="requestCommit">To Station Control</el-button>
<el-button style="width: 150px" v-if="isConter" :id="domIdConter" :disabled="disabledCommit" @click="conterCommit">To Center Control</el-button>
<el-col :span="10" :offset="3">
<el-button v-if="isFork" :id="domIdFork" :disabled="disabledCommit" @click="forkCommit">强制站控</el-button>
<el-button v-if="isRequest" :id="domIdRequest" :disabled="disabledCommit" @click="requestCommit">请求站控
</el-button>
<el-button v-if="isConter" :id="domIdConter" :disabled="disabledCommit" @click="conterCommit">请求中控
</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdCancel" :disabled="disabledClose" @click="cancel">Close
</el-button>
<el-button :id="domIdCancel" :disabled="disabledClose" @click="cancel">关闭</el-button>
</el-col>
</el-row>
<two-confirmation ref="twoConfirmation" @setOperate="getOperate" />
@ -74,14 +75,6 @@ export default {
components: {
TwoConfirmation
},
props: {
work: {
type: String,
default() {
return '';
}
}
},
data() {
return {
operate: null,
@ -91,13 +84,15 @@ export default {
disabledClose: false,
operation: '',
controlProps: {
'Center': 'Center',
'Local': 'Local'
'01': '中控',
'02': '站控'
},
selection: [],
tableData: [],
timer: null,
count: 0
count: 0,
backOperate: '',
timeout: 61
};
},
computed: {
@ -118,19 +113,19 @@ export default {
if (this.dialogShow) {
return OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl);
}
return false;
return '';
},
isRequest() {
if (this.dialogShow) {
return OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl);
}
return false;
return '';
},
isConter() {
if (this.dialogShow) {
return OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl);
}
return false;
return '';
},
domIdChoose() {
if (this.dialogShow) {
@ -142,7 +137,7 @@ export default {
return OperationEvent.StationControl.requestCentralControl.choose.domId;
}
}
return false;
return '';
},
domIdConter() {
return this.dialogShow ? OperationEvent.StationControl.requestCentralControl.menu.domId : '';
@ -158,10 +153,31 @@ export default {
}
},
watch: {
'$store.state.map.controlTransfer':function (controlTransferList) {
controlTransferList.forEach(controlTransfer=>{
this.updateTableValue(controlTransfer);
});
'$store.state.socket.msgHead': function (elem) {
if (elem) {
if (elem.hasOwnProperty('timeout')) {
this.updateTableValue(elem.stationControlCode, { result: `接受转换应答超时` }, false);
} else if (elem.hasOwnProperty('success')) {
if (elem.success) {
this.updateTableValue(elem.stationControlCode, { result: '控制模式转换成功' }, true);
} else {
this.updateTableValue(elem.stationControlCode, { result: `控制模式转换失败` }, false);
}
}
}
},
backOperate: function (operate) {
if (this.dialogShow && operate) {
if (operate.selection && operate.selection.length) {
operate.selection.forEach(elem => {
if (operate.commit) {
this.updateTableValue(elem.code, { result: `已发送转换请求,${this.timeout}秒后超时.` }, false);
} else if (operate.cancel) {
this.updateTableValue(elem.code, { result: '' }, false);
}
});
}
}
},
//
tableData: {
@ -172,31 +188,23 @@ export default {
}
},
mounted() {
// this.loadTableData();
this.loadTableData();
},
methods: {
updateTableValue(controlTransfer) {
updateTableValue(code, result, success) {
this.tableData.forEach((row, index) => {
if (row.code == controlTransfer.code) {
if (controlTransfer.applicantId) {
row.result = 'A transfer request has been sent and timed out after,' + controlTransfer.validDuration + 'seconds.';
if (row.code == code) {
for (const prop in result) {
row[prop] = result[prop];
}
if (success) {
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl) || OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl)) {
row.control = this.controlProps['02']; // 01: 02:
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl)) {
row.control = this.controlProps['01']; // 01: 02:
}
row.disabled = true;
row.check = false;
} else {
if (row.control != this.controlProps[controlTransfer.controlMode]) {
row.result = 'Control mode transfer success';
row.control = this.controlProps[controlTransfer.controlMode];
this.removeSelection(controlTransfer.code);
row.disabled = true;
row.check = false;
} else {
row.result = 'Control mode transfer failed';
this.removeSelection(controlTransfer.code);
row.disabled = false;
row.check = false;
}
this.disabledClose = false;
this.disabledSure = false;
}
}
});
@ -218,13 +226,13 @@ export default {
}
},
checkBoxDisabled(row) {
const control = (this.$store.getters['map/getDeviceByCode'](row.code) || {});
const control = (this.$store.getters('map/getDeviceByCode')(row.code) || {});
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl) || OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl)) {
if (control && control.controlMode == 'Local') { // Center: Local:
if (control && control.status == '02') { // 01: 02:
return true;
}
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl)) {
if (control && control.controlMode == 'Center') { // Center: Local:
if (control && control.status == '01') { // 01: 02:
return true;
}
}
@ -232,55 +240,29 @@ export default {
},
loadTableData() {
this.tableData = [];
if (this.stationList) {
this.stationList.forEach(station => {
if (station.createControlMode) {
this.tableData.push({
code: station.code,
operate: station.name || '',
control: '',
check: false,
disabled: false,
status: 'normal',
result: ''
});
}
this.stationList.forEach(station => {
// const station = this.$store.getters['map/getDeviceByCode'](control.stationCode);
this.tableData.push({
code: station.code,
operate: station.name || '',
control: '',
check: false,
disabled: false,
status: '正常',
result: ''
});
}
});
},
initTableDataStatus() {
this.tableData = [];
if (this.work === 'dispatchWork') {
this.stationList && this.stationList.forEach(station => {
if (station.createControlMode) {
const control = this.$store.getters['map/getDeviceByCode'](station.code);
this.tableData.push({
code: station.code,
operate: station.name || '',
control: control ? this.controlProps[control.controlMode] : '',
check: false,
disabled: this.checkBoxDisabled(station),
status: 'normal',
result: ''
});
}
});
} else if (this.work === 'localWork') {
const stationCodeList = this.$store.state.map.stationControlMap[this.$store.state.training.roleDeviceCode] || [];
const list = [...new Set(stationCodeList)]; //
list && list.forEach(stationCode => {
const station = this.$store.getters['map/getDeviceByCode'](stationCode);
this.tableData.push({
code: station.code,
operate: station.name || '',
control: station ? this.controlProps[station.controlMode] : '',
check: false,
disabled: this.checkBoxDisabled(station),
status: 'normal',
result: ''
});
});
}
this.tableData.forEach(row => {
row.disabled = this.checkBoxDisabled(row);
row.check = false;
row.result = '';
const control = (this.$store.getters('map/getDeviceByCode')(row.code) || {}).state;
if (control) {
row.control = this.controlProps[control.status];
}
});
},
doShow(operate) {
if (!this.dialogShow) {
@ -295,9 +277,11 @@ export default {
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
this.$refs.multipleTable.setCurrentRow();
},
cancel() {
const operate = {
type: 'bar',
operation: OperationEvent.Command.cancel.menu.operation
};
@ -307,24 +291,29 @@ export default {
}
});
},
removeSelection(code) {
let selectionIndex = -1;
this.selection.forEach((item, index) => {
if (item.code === code) {
selectionIndex = index;
}
});
if (selectionIndex > -1) {
this.selection.splice(selectionIndex, 1);
clearTimer() {
this.count = 0;
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
},
serializeCodeListWithSeparator(sep) {
const codeList = [];
if (this.selection && this.selection.length) {
this.selection.forEach(elem => {
codeList.push(elem.code);
});
}
return codeList.join(sep);
},
handleChooseChange(selection) {
this.selection = selection;
const stationCodeList = selection.map(elem => { return elem.code; });
if (selection && selection.length) {
const operate = {
operation: '',
val: stationCodeList.join('::'),
val: this.serializeCodeListWithSeparator('::'),
selection: selection
};
@ -339,31 +328,29 @@ export default {
this.disabledSure = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.disabledSure = false;
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
this.disabledSure = false;
});
} else if (!selection) {
this.$messageBox('Please select a piece of data');
this.$messageBox('请选择一条数据');
}
},
requestCommit() {
const stationCodeList = this.selection.map(elem => { return elem.code; });
const operate = {
messages: ['Confirm that the control mode of the following operation area is changed from central control to station control:'],
messages: ['确认将如下操作区域的控制模式由中控转为站控:'],
operation: OperationEvent.StationControl.requestStationControl.menu.operation,
val: stationCodeList.join('::'),
selection: this.selection,
param: {
stationCodes: stationCodeList
}
val: this.serializeCodeListWithSeparator('::'),
selection: this.selection
};
this.selection.forEach((elem, index) => {
operate.messages.push(`Operating Area ${index + 1}:${elem.operate}`);
operate.messages.push(`操作区域${index + 1}:${elem.operate}`);
});
this.disabledSure = true;
this.disabledClose = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
@ -373,25 +360,24 @@ export default {
}
}).catch(() => {
this.disabledSure = false;
this.disabledClose = false;
});
},
forkCommit() {
const stationCodeList = this.selection.map(elem => { return elem.code; });
const operate = {
messages: ['Confirm that the control mode of the following operation area is changed from station control to central control:'],
messages: ['确认将如下操作区域的控制模式由中控转为站控:'],
operation: OperationEvent.StationControl.forcedStationControl.menu.operation,
val: stationCodeList.join('::'),
selection: this.selection,
param: {
stationCodes: stationCodeList
}
val: this.serializeCodeListWithSeparator('::'),
selection: this.selection
};
this.selection.forEach((elem, index) => {
operate.messages.push(`Operating Area ${index + 1}:${elem.operate}`);
operate.messages.push(`操作区域${index + 1}:${elem.operate}`);
});
this.disabledSure = true;
this.disabledClose = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
@ -401,25 +387,24 @@ export default {
}
}).catch(() => {
this.disabledSure = false;
this.disabledClose = false;
});
},
conterCommit() {
const stationCodeList = this.selection.map(elem => { return elem.code; });
conterCommit() { //
const operate = {
messages: ['Confirm that the control mode of the following operation area is changed from station control to central control:'],
messages: ['确认将如下操作区域的控制模式由站控转为中控:'],
operation: OperationEvent.StationControl.requestCentralControl.menu.operation,
val: stationCodeList.join('::'),
selection: this.selection,
param: {
stationCodes: stationCodeList
}
val: this.serializeCodeListWithSeparator('::'),
selection: this.selection
};
this.selection.forEach((elem, index) => {
operate.messages.push(`Operating Area ${index + 1}:${elem.operate}`);
operate.messages.push(`操作区域${index + 1}:${elem.operate}`);
});
this.disabledSure = true;
this.disabledClose = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
@ -429,27 +414,20 @@ export default {
}
}).catch(() => {
this.disabledSure = false;
this.disabledClose = false;
});
},
getOperate(operate) {
this.backOperate = operate;
if (operate.cancel) {
this.disabledSure = this.disabledSend = false;
this.disabledClose = false;
this.disabledSure = this.disabledSend = false;
}
if (operate.commit || operate.timeout) {
this.disabledSend = this.disabledSure = true;
this.disabledClose = true;
this.disabledClose = false;
}
}
}
};
</script>
<style lang="scss" scoped>
.xian-01__systerm .el-dialog .control_button button{
max-width:180px;
width:auto ;
padding-left: 5px ;
padding-right: 5px ;
min-width: 80px;
}
</style>

View File

@ -0,0 +1,168 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
:title="title"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-form ref="form" size="small" label-width="100px" :model="addModel" :rules="rules">
<div style="padding: 10px 15px; border: 1px double lightgray; margin: 20px 0px; height: 120px;">
<span class="base-label">添加位置</span>
<div style="position: relative; top:-10px;">
<el-form-item prop="stationStandCode">
<span slot="label">&emsp;&emsp;&emsp;:</span>
<el-select v-model="addModel.stationStandCode" filterable placeholder="请选择">
<el-option
v-for="item in stationStandList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="前车车次号:" prop="trainNumberLimber">
<el-input v-model="addModel.trainNumberLimber" />
</el-form-item>
</div>
</div>
<el-form-item label="添加车次号:" label-width="115px" prop="groupNumber">
<el-input v-model="addModel.groupNumber" />
</el-form-item>
</el-form>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
export default {
name: 'TrainAdd',
components: {
},
data() {
return {
trainNoList: [],
addModel: {
groupNumber: '',
stationStandCode: '',
trainNumberLimber: ''
},
rules: {
groupNumber: [
{ required: true, message: '请输入车次号', trigger: 'blur' }
],
// trainNumberLimber: [
// { required: true, message: '', trigger: 'blur' }
// ],
stationStandCode: [
{ required: true, message: '请选择终端', trigger: 'change' }
]
},
operation: null,
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.planTrain.addPlanTrain.domId : '';
},
title() {
return '添加计划车';
}
},
methods: {
doShow(operate) {
this.operate = operate || {};
this.operation = operate.operation;
//
if (!this.dialogShow) {
this.loading = false;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs['form'].validate((valid) => {
if (valid) {
const operate = {
send: true,
operation: OperationEvent.Command.planTrain.addPlanTrain.operation
};
this.loading = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(error => {
this.loading = false;
this.doClose();
console.error(error);
// this.$refs.noticeInfo.doShow();
});
} else {
return false;
}
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(error => { this.doClose(); });
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

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