Commit ed76fd372d21192d8326a1818e33ba34f01c3b2b

Authored by 潘钊
1 parent 41dbae84

update...

src/main/java/com/bsth/data/forecast/ForecastRealServer.java
1 package com.bsth.data.forecast; 1 package com.bsth.data.forecast;
2 2
  3 +import com.bsth.Application;
3 import com.bsth.data.forecast.entity.ForecastResult; 4 import com.bsth.data.forecast.entity.ForecastResult;
4 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem; 5 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem;
5 import com.bsth.data.forecast.entity.SimpleRoute; 6 import com.bsth.data.forecast.entity.SimpleRoute;
@@ -20,6 +21,7 @@ import java.util.ArrayList; @@ -20,6 +21,7 @@ import java.util.ArrayList;
20 import java.util.HashMap; 21 import java.util.HashMap;
21 import java.util.List; 22 import java.util.List;
22 import java.util.Map; 23 import java.util.Map;
  24 +import java.util.concurrent.TimeUnit;
23 25
24 /** 26 /**
25 * 27 *
@@ -58,7 +60,7 @@ public class ForecastRealServer implements CommandLineRunner { @@ -58,7 +60,7 @@ public class ForecastRealServer implements CommandLineRunner {
58 @Override 60 @Override
59 public void run(String... arg0) throws Exception { 61 public void run(String... arg0) throws Exception {
60 //2小时更新一次站点间耗时数据 62 //2小时更新一次站点间耗时数据
61 - //Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS); 63 + Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);
62 } 64 }
63 65
64 /** 66 /**
src/main/java/com/bsth/data/gpsdata/arrival/entity/SignalState.java
@@ -37,8 +37,8 @@ public class SignalState { @@ -37,8 +37,8 @@ public class SignalState {
37 * @return 37 * @return
38 */ 38 */
39 public static SignalState reverseSignalSTate(ScheduleRealInfo sch, RouteReverse reverse) { 39 public static SignalState reverseSignalSTate(ScheduleRealInfo sch, RouteReverse reverse) {
40 - if(reverse.isVague())  
41 - return null; 40 + /*if(reverse.isVague())
  41 + return null;*/
42 42
43 SignalState state = new SignalState(); 43 SignalState state = new SignalState();
44 state.setSchId(sch.getId()); 44 state.setSchId(sch.getId());
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
@@ -38,7 +38,7 @@ public class ReverseSignalHandle extends SignalHandle { @@ -38,7 +38,7 @@ public class ReverseSignalHandle extends SignalHandle {
38 if (isReverse(gps, prev)) { 38 if (isReverse(gps, prev)) {
39 RouteReverse reverse = reverseSearch(prevs, gps); 39 RouteReverse reverse = reverseSearch(prevs, gps);
40 40
41 - if (reverse.getCount() >= 4 41 + if (reverse.getCount() >= 3
42 && reverse.isClose() 42 && reverse.isClose()
43 && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) { 43 && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) {
44 scheduleSignalState.reverseAnalyse(reverse); 44 scheduleSignalState.reverseAnalyse(reverse);
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
@@ -60,7 +60,7 @@ public class GpsDataRecovery implements ApplicationContextAware { @@ -60,7 +60,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
60 for (String nbbm : keys) { 60 for (String nbbm : keys) {
61 Collections.sort(listMap.get(nbbm), comp); 61 Collections.sort(listMap.get(nbbm), comp);
62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count)); 62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
63 - /*if(nbbm.equals("YT-CD008")) 63 + /*if(nbbm.equals("W9H-003"))
64 new RecoveryThread(listMap.get(nbbm), count).run();*/ 64 new RecoveryThread(listMap.get(nbbm), count).run();*/
65 } 65 }
66 66
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -563,7 +563,7 @@ public class DayOfSchedule implements CommandLineRunner { @@ -563,7 +563,7 @@ public class DayOfSchedule implements CommandLineRunner {
563 */ 563 */
564 public boolean isFirstOut(ScheduleRealInfo sch){ 564 public boolean isFirstOut(ScheduleRealInfo sch){
565 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh()); 565 List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
566 - if(list.get(0).equals(sch) && sch.getBcType().equals("out")) 566 + if(list.get(0) == sch && sch.getBcType().equals("out"))
567 return true; 567 return true;
568 return false; 568 return false;
569 } 569 }
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -58,7 +58,7 @@ public class GpsServiceImpl implements GpsService { @@ -58,7 +58,7 @@ public class GpsServiceImpl implements GpsService {
58 58
59 int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR); 59 int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR);
60 /* 60 /*
61 - * if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){ 61 + * if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){
62 * System.out.println("暂时不支持跨天查询..."); return null; } 62 * System.out.println("暂时不支持跨天查询..."); return null; }
63 */ 63 */
64 64
@@ -195,7 +195,7 @@ public class GpsServiceImpl implements GpsService { @@ -195,7 +195,7 @@ public class GpsServiceImpl implements GpsService {
195 inv = inv.substring(0, inv.length() - 1); 195 inv = inv.substring(0, inv.length() - 1);
196 196
197 // 查询到离站数据 197 // 查询到离站数据
198 - //Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv); 198 + Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv);
199 199
200 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in (" 200 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in ("
201 + inv + ") and ts > ? and ts < ?"; 201 + inv + ") and ts > ? and ts < ?";
@@ -239,11 +239,12 @@ public class GpsServiceImpl implements GpsService { @@ -239,11 +239,12 @@ public class GpsServiceImpl implements GpsService {
239 inOutStop = rs.getInt("INOUT_STOP"); 239 inOutStop = rs.getInt("INOUT_STOP");
240 map.put("inout_stop", inOutStop); 240 map.put("inout_stop", inOutStop);
241 241
242 - /*analyse = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));  
243 - if (analyse != null) {  
244 - map.put("inout_stop_info", analyse);  
245 - map.put("inout_stop", analyse.getInOut());  
246 - }*/ 242 + arrival = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));
  243 + if (arrival != null) {
  244 + map.put("inout_stop_info", arrival);
  245 + map.put("inout_stop", arrival.getInOut());
  246 + }
  247 +
247 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID"))); 248 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID")));
248 map.put("state", 0); 249 map.put("state", 0);
249 // 上下行 250 // 上下行
@@ -272,11 +273,17 @@ public class GpsServiceImpl implements GpsService { @@ -272,11 +273,17 @@ public class GpsServiceImpl implements GpsService {
272 273
273 rs = ps.executeQuery(); 274 rs = ps.executeQuery();
274 ArrivalEntity arr; 275 ArrivalEntity arr;
275 - int inOut; 276 + int inOut, updown;
  277 + String prefix, stationName, lineId;
276 while (rs.next()) { 278 while (rs.next()) {
277 - arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), rs.getString("LINE_ID"),  
278 - rs.getInt("UP_DOWN"), rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),  
279 - rs.getInt("WEEKS_YEAR"), BasicData.stationCode2NameMap.get(rs.getString("STOP_NO"))); 279 + lineId = rs.getString("LINE_ID");
  280 + updown = rs.getInt("UP_DOWN");
  281 + prefix = lineId + "_" + updown + "_";
  282 + stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix);
  283 +
  284 + arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId,
  285 + updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),
  286 + rs.getInt("WEEKS_YEAR"), stationName);
280 287
281 // 设备号_时间戳_进出状态 为key 288 // 设备号_时间戳_进出状态 为key
282 // 反转进出状态 289 // 反转进出状态
@@ -382,7 +389,7 @@ public class GpsServiceImpl implements GpsService { @@ -382,7 +389,7 @@ public class GpsServiceImpl implements GpsService {
382 389
383 gpsRealData.remove(device); 390 gpsRealData.remove(device);
384 rs.put("status", ResponseCode.SUCCESS); 391 rs.put("status", ResponseCode.SUCCESS);
385 - }catch (Exception e){ 392 + } catch (Exception e) {
386 rs.put("status", ResponseCode.ERROR); 393 rs.put("status", ResponseCode.ERROR);
387 } 394 }
388 return rs; 395 return rs;
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
@@ -43,7 +43,6 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon @@ -43,7 +43,6 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon
43 ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId()); 43 ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId());
44 Map<String, Object> rs; 44 Map<String, Object> rs;
45 //保存起终点名称 45 //保存起终点名称
46 - Map<String, String> map = BasicData.stationCode2NameMap;  
47 String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_"; 46 String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
48 47
49 t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix)); 48 t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix));
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -286,6 +286,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -286,6 +286,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
286 t.setCreateBy(user); 286 t.setCreateBy(user);
287 t.setSflj(true); 287 t.setSflj(true);
288 t.setLate(false); 288 t.setLate(false);
  289 + t.setDfsj(t.getFcsj());
289 t.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + t.getZdsj()).getTime()); 290 t.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + t.getZdsj()).getTime());
290 291
291 292
@@ -293,8 +294,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -293,8 +294,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
293 t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60); 294 t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
294 295
295 //起终点名称 296 //起终点名称
296 - t.setQdzName(BasicData.stationCode2NameMap.get(t.getQdzCode()));  
297 - t.setZdzName(BasicData.stationCode2NameMap.get(t.getZdzCode())); 297 + String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
  298 + t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
  299 + t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
298 300
299 //计算班次实际时间 301 //计算班次实际时间
300 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t); 302 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
src/main/resources/static/index.html
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="zh"> 2 <html lang="zh">
3 <head> 3 <head>
4 -<meta name="renderer" content="webkit" />  
5 -<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />  
6 -<meta charset="UTF-8">  
7 -<title>调度系统</title>  
8 -  
9 -<meta http-equiv="Pragma" content="no-cache">  
10 -<meta http-equiv="Cache-control" content="no-cache">  
11 -<meta http-equiv="Cache" content="no-cache">  
12 -  
13 -<!-- Font Awesome 图标字体 -->  
14 -<link href="/metronic_v4.5.4/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />  
15 -<!-- Bootstrap style -->  
16 -<link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />  
17 -<!-- jsTree 数插件 -->  
18 -<link href="/metronic_v4.5.4/plugins/jstree/dist/themes/default/style.min.css" rel="stylesheet" type="text/css" />  
19 -<!-- MULTI-select 多选下拉框美化 -->  
20 -<link href="/metronic_v4.5.4/plugins/jquery-multi-select/css/multi-select.css" rel="stylesheet" type="text/css" />  
21 -  
22 -<!-- editable -->  
23 -<link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet" type="text/css" />  
24 -<!-- METRONIC style -->  
25 -<link href="/metronic_v4.5.4/layout4/css/themes/light.min.css" rel="stylesheet" type="text/css" id="style_color" />  
26 -<link href="/metronic_v4.5.4/css/components.css" rel="stylesheet" type="text/css" />  
27 -<link href="/metronic_v4.5.4/css/plugins.css" rel="stylesheet" type="text/css" />  
28 -<link href="/metronic_v4.5.4/layout4/css/layout.min.css" rel="stylesheet" type="text/css" />  
29 -<link href="/metronic_v4.5.4/layout4/css/custom.min.css" rel="stylesheet" type="text/css" />  
30 -<!-- select2 下拉框插件 -->  
31 -<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />  
32 -<link href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css" />  
33 -<!-- layer 弹层 插件 -->  
34 -<link href="/assets/plugins/layer-v2.4/layer/skin/layer.css" rel="stylesheet" type="text/css" />  
35 -<!-- fileinput 上传 插件 -->  
36 -<link href="/assets/plugins/fileinput/css/fileinput.min.css" rel="stylesheet" type="text/css" />  
37 -<!-- iCheck 单选框和复选框 -->  
38 -<link href="/metronic_v4.5.4/plugins/icheck/skins/all.css" rel="stylesheet" type="text/css" />  
39 -<!-- 日期控件 -->  
40 -<link href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css" />  
41 -<!-- table 表格控件 -->  
42 -<link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" type="text/css" />  
43 -  
44 -<!-- handsontable样式 -->  
45 -<link rel="stylesheet" href="/assets/bower_components/handsontable/dist/handsontable.full.css"/>  
46 -<!-- schedule计划调度AngularJS模块主css -->  
47 -<link rel="stylesheet" href="/pages/scheduleApp/module/common/main.css" type="text/css"/>  
48 -  
49 -<style type="text/css">  
50 -.searchForm{  
51 -  
52 -}  
53 -.searchForm .form-group .control-label{  
54 - padding-right: 0px;  
55 - text-align: right;  
56 - margin-top: 7px;  
57 -}  
58 -.searchForm .form-group>div{  
59 - padding-left: 10px;  
60 - padding-right: 0px;  
61 -}  
62 -.searchForm .row>div{  
63 - padding-left: 0px;  
64 - padding-right: 0px;  
65 - padding: 5px 0 5px 0;  
66 - width: 270px;  
67 - display: inline-block;  
68 -}  
69 -.searchForm .form-actions{  
70 -  
71 -}  
72 -tr.row-active td {  
73 - border-bottom: 1px solid blue!important;  
74 - color: blue;  
75 -}  
76 -.ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {  
77 - font-size: 14px;  
78 -}  
79 -.ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection{  
80 - padding: 6px 26px;  
81 -}  
82 -.ms-container .ms-list{  
83 - height: 306px;  
84 -}  
85 -.ms-container .ms-selectable, .ms-container .ms-selection{  
86 - width: 47%;  
87 -}  
88 -.ms-container {  
89 - width: 470px;  
90 - margin: auto;  
91 -}  
92 -.multi-custom-header-left{  
93 - text-align: center;  
94 - padding: 7px;  
95 - color: #3B3F51;  
96 -}  
97 -.multi-custom-header-right{  
98 - text-align: center;  
99 - padding: 7px;  
100 - font-weight: bold;  
101 - color: #36C6D3;  
102 -}  
103 -.mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content {  
104 - padding: 0 55px 0 0px;  
105 -}  
106 -.mt-element-list .list-simple.mt-list-container ul > .mt-list-item {  
107 - padding: 3.3px 0;  
108 -}  
109 -  
110 -#route-container{  
111 - display: none;  
112 -}  
113 -  
114 -.page-content.active{  
115 - display: block !important;  
116 -}  
117 -  
118 -.page-header.navbar .page-logo .logo-default {  
119 - margin: 0;  
120 -}  
121 -.page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle {  
122 - background-color: #284a99;  
123 -}  
124 -.page-header.navbar .page-logo{  
125 - padding-right: 10px;  
126 -}  
127 -  
128 -.page-logo .logo-default.logo-default-text{  
129 - font-weight: 600;  
130 - color: white !important;  
131 - margin-top: 19px !important;  
132 - font-size: 24px;  
133 - text-decoration: none;  
134 -}  
135 -.page-logo .logo-default.logo-default-text:HOVER{  
136 - color: #dedede !important;  
137 -}  
138 -  
139 -</style>  
140 -  
141 -<!-- ocLazyLoading载入文件的位置 -->  
142 -<link id="ng_load_plugins_before" /> 4 + <meta name="renderer" content="webkit"/>
  5 + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  6 + <meta charset="UTF-8">
  7 + <title>调度系统</title>
  8 +
  9 + <meta http-equiv="Pragma" content="no-cache">
  10 + <meta http-equiv="Cache-control" content="no-cache">
  11 + <meta http-equiv="Cache" content="no-cache">
  12 +
  13 + <!-- Font Awesome 图标字体 -->
  14 + <link href="/metronic_v4.5.4/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
  15 + <!-- Bootstrap style -->
  16 + <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
  17 + <!-- jsTree 数插件 -->
  18 + <link href="/metronic_v4.5.4/plugins/jstree/dist/themes/default/style.min.css" rel="stylesheet" type="text/css"/>
  19 + <!-- MULTI-select 多选下拉框美化 -->
  20 + <link href="/metronic_v4.5.4/plugins/jquery-multi-select/css/multi-select.css" rel="stylesheet" type="text/css"/>
  21 +
  22 + <!-- editable -->
  23 + <link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css"
  24 + rel="stylesheet" type="text/css"/>
  25 + <!-- METRONIC style -->
  26 + <link href="/metronic_v4.5.4/layout4/css/themes/light.min.css" rel="stylesheet" type="text/css" id="style_color"/>
  27 + <link href="/metronic_v4.5.4/css/components.css" rel="stylesheet" type="text/css"/>
  28 + <link href="/metronic_v4.5.4/css/plugins.css" rel="stylesheet" type="text/css"/>
  29 + <link href="/metronic_v4.5.4/layout4/css/layout.min.css" rel="stylesheet" type="text/css"/>
  30 + <link href="/metronic_v4.5.4/layout4/css/custom.min.css" rel="stylesheet" type="text/css"/>
  31 + <!-- select2 下拉框插件 -->
  32 + <link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css"/>
  33 + <link href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css"/>
  34 + <!-- layer 弹层 插件 -->
  35 + <link href="/assets/plugins/layer-v2.4/layer/skin/layer.css" rel="stylesheet" type="text/css"/>
  36 + <!-- fileinput 上传 插件 -->
  37 + <link href="/assets/plugins/fileinput/css/fileinput.min.css" rel="stylesheet" type="text/css"/>
  38 + <!-- iCheck 单选框和复选框 -->
  39 + <link href="/metronic_v4.5.4/plugins/icheck/skins/all.css" rel="stylesheet" type="text/css"/>
  40 + <!-- 日期控件 -->
  41 + <link href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css"
  42 + rel="stylesheet" type="text/css"/>
  43 + <!-- table 表格控件 -->
  44 + <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css"
  45 + type="text/css"/>
  46 +
  47 + <!-- handsontable样式 -->
  48 + <link rel="stylesheet" href="/assets/bower_components/handsontable/dist/handsontable.full.css"/>
  49 + <!-- schedule计划调度AngularJS模块主css -->
  50 + <link rel="stylesheet" href="/pages/scheduleApp/module/common/main.css" type="text/css"/>
  51 +
  52 + <style type="text/css">
  53 + .searchForm {
  54 +
  55 + }
  56 +
  57 + .searchForm .form-group .control-label {
  58 + padding-right: 0px;
  59 + text-align: right;
  60 + margin-top: 7px;
  61 + }
  62 +
  63 + .searchForm .form-group > div {
  64 + padding-left: 10px;
  65 + padding-right: 0px;
  66 + }
  67 +
  68 + .searchForm .row > div {
  69 + padding-left: 0px;
  70 + padding-right: 0px;
  71 + padding: 5px 0 5px 0;
  72 + width: 270px;
  73 + display: inline-block;
  74 + }
  75 +
  76 + .searchForm .form-actions {
  77 +
  78 + }
  79 +
  80 + tr.row-active td {
  81 + border-bottom: 1px solid blue !important;
  82 + color: blue;
  83 + }
  84 +
  85 + .ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {
  86 + font-size: 14px;
  87 + }
  88 +
  89 + .ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {
  90 + padding: 6px 26px;
  91 + }
  92 +
  93 + .ms-container .ms-list {
  94 + height: 306px;
  95 + }
  96 +
  97 + .ms-container .ms-selectable, .ms-container .ms-selection {
  98 + width: 47%;
  99 + }
  100 +
  101 + .ms-container {
  102 + width: 470px;
  103 + margin: auto;
  104 + }
  105 +
  106 + .multi-custom-header-left {
  107 + text-align: center;
  108 + padding: 7px;
  109 + color: #3B3F51;
  110 + }
  111 +
  112 + .multi-custom-header-right {
  113 + text-align: center;
  114 + padding: 7px;
  115 + font-weight: bold;
  116 + color: #36C6D3;
  117 + }
  118 +
  119 + .mt-element-list .list-simple.mt-list-container ul > .mt-list-item > .list-item-content {
  120 + padding: 0 55px 0 0px;
  121 + }
  122 +
  123 + .mt-element-list .list-simple.mt-list-container ul > .mt-list-item {
  124 + padding: 3.3px 0;
  125 + }
  126 +
  127 + #route-container {
  128 + display: none;
  129 + }
  130 +
  131 + .page-content.active {
  132 + display: block !important;
  133 + }
  134 +
  135 + .page-header.navbar .page-logo .logo-default {
  136 + margin: 0;
  137 + }
  138 +
  139 + .page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle {
  140 + background-color: #284a99;
  141 + }
  142 +
  143 + .page-header.navbar .page-logo {
  144 + padding-right: 10px;
  145 + }
  146 +
  147 + .page-logo .logo-default.logo-default-text {
  148 + font-weight: 600;
  149 + color: white !important;
  150 + margin-top: 19px !important;
  151 + font-size: 24px;
  152 + text-decoration: none;
  153 + }
  154 +
  155 + .page-logo .logo-default.logo-default-text:HOVER {
  156 + color: #dedede !important;
  157 + }
  158 +
  159 + </style>
  160 +
  161 + <!-- ocLazyLoading载入文件的位置 -->
  162 + <link id="ng_load_plugins_before"/>
143 163
144 </head> 164 </head>
145 <body class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed"> 165 <body class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed">
146 - <div class="page-header navbar navbar-fixed-top" style="background: linear-gradient(to bottom ,#124e78, #125688);">  
147 - <div class="page-header-inner ">  
148 - <!-- LOGO -->  
149 - <div class="page-logo">  
150 - <a href="index.html" class="logo-default logo-default-text" > 闵行公交调度系统 </a>  
151 - <div class="menu-toggler sidebar-toggler">  
152 - </div>  
153 - </div>  
154 - <!-- END LOGO -->  
155 - <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"> </a>  
156 - <div class="page-top">  
157 - <div class="top-menu">  
158 - <ul class="nav navbar-nav pull-right">  
159 - <!-- 信息通知区 -->  
160 - <li class="dropdown dropdown-extended dropdown-notification dropdown-dark" id="header_notification_bar">  
161 - <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">  
162 - <i class="fa fa-bell"></i>  
163 - <span class="badge badge-success"> 0 </span>  
164 - </a>  
165 - <ul class="dropdown-menu" style="max-width: 345px;width: 345px;">  
166 - <li class="external">  
167 - <h3>今日 <span class="bold">0 条</span> 通知</h3>  
168 - <a href="javascript:;">查看全部</a>  
169 - </li>  
170 - <li>  
171 - <ul class="dropdown-menu-list scroller" style="height: 250px;" data-handle-color="#637283">  
172 - </ul>  
173 - </li>  
174 - </ul>  
175 - </li>  
176 - <li class="dropdown dropdown-user dropdown-dark">  
177 - <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">  
178 - <span id="indexTopUName" class="username username-hide-on-mobile" style="vertical-align: middle;"> <i class="fa fa-user"></i></span>  
179 - </a>  
180 - <ul class="dropdown-menu dropdown-menu-default">  
181 - <li>  
182 - <a href="javascript:;">  
183 - <i class="fa fa-user"></i> 我的信息 </a>  
184 - </li>  
185 - <li>  
186 - <a href="javascript:;" id="changePWD">  
187 - <i class="fa fa-unlock-alt"></i> 修改密码</a>  
188 - </li>  
189 - <li class="divider"> </li>  
190 - <li>  
191 - <a href="javascript:;">  
192 - <i class="fa fa-lock"></i> 锁屏 </a>  
193 - </li>  
194 - <li>  
195 - <a href="/logout">  
196 - <i class="fa fa-key"></i> 注销登陆 </a>  
197 - </li>  
198 - </ul>  
199 - </li>  
200 - </ul>  
201 - </div> 166 +<div class="page-header navbar navbar-fixed-top" style="background: linear-gradient(to bottom ,#124e78, #125688);">
  167 + <div class="page-header-inner ">
  168 + <!-- LOGO -->
  169 + <div class="page-logo">
  170 + <a href="index.html" class="logo-default logo-default-text"> 闵行公交调度系统 </a>
  171 + <div class="menu-toggler sidebar-toggler">
202 </div> 172 </div>
203 </div> 173 </div>
204 - </div>  
205 - <div class="page-container">  
206 - <div class="page-sidebar-wrapper">  
207 - <div class="page-sidebar navbar-collapse collapse">  
208 - <ul class="page-sidebar-menu page-sidebar-menu-fixed" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" id="leftMenuSidebar"> 174 + <!-- END LOGO -->
  175 + <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse"
  176 + data-target=".navbar-collapse"> </a>
  177 + <div class="page-top">
  178 + <div class="top-menu">
  179 + <ul class="nav navbar-nav pull-right">
  180 + <!-- 信息通知区 -->
  181 + <li class="dropdown dropdown-extended dropdown-notification dropdown-dark"
  182 + id="header_notification_bar">
  183 + <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"
  184 + data-close-others="true">
  185 + <i class="fa fa-bell"></i>
  186 + <span class="badge badge-success"> 0 </span>
  187 + </a>
  188 + <ul class="dropdown-menu" style="max-width: 345px;width: 345px;">
  189 + <li class="external">
  190 + <h3>今日 <span class="bold">0 条</span> 通知</h3>
  191 + <a href="javascript:;">查看全部</a>
  192 + </li>
  193 + <li>
  194 + <ul class="dropdown-menu-list scroller" style="height: 250px;"
  195 + data-handle-color="#637283">
  196 + </ul>
  197 + </li>
  198 + </ul>
  199 + </li>
  200 + <li class="dropdown dropdown-user dropdown-dark">
  201 + <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"
  202 + data-close-others="true">
  203 + <span id="indexTopUName" class="username username-hide-on-mobile"
  204 + style="vertical-align: middle;"> <i class="fa fa-user"></i></span>
  205 + </a>
  206 + <ul class="dropdown-menu dropdown-menu-default">
  207 + <li>
  208 + <a href="javascript:;">
  209 + <i class="fa fa-user"></i> 我的信息 </a>
  210 + </li>
  211 + <li>
  212 + <a href="javascript:;" id="changePWD">
  213 + <i class="fa fa-unlock-alt"></i> 修改密码</a>
  214 + </li>
  215 + <li class="divider"></li>
  216 + <li>
  217 + <a href="javascript:;">
  218 + <i class="fa fa-lock"></i> 锁屏 </a>
  219 + </li>
  220 + <li>
  221 + <a href="/logout">
  222 + <i class="fa fa-key"></i> 注销登陆 </a>
  223 + </li>
  224 + </ul>
  225 + </li>
209 </ul> 226 </ul>
210 </div> 227 </div>
211 </div> 228 </div>
212 - <div class="page-content-wrapper">  
213 - <div id="pjax-container" class="page-content"></div>  
214 -  
215 - <div id="route-container">  
216 - <div ng-app="ScheduleApp">  
217 - <div ng-controller="ScheduleAppController">  
218 -  
219 - <!-- loading widget -->  
220 - <div id="loadingWidget" class="flyover mask" loading-widget>  
221 - <div class="alert alert-info">  
222 - <strong>载入中......</strong>  
223 - </div>  
224 - </div>  
225 -  
226 - <div ui-view class="fade-in-up"> </div> 229 + </div>
  230 +</div>
  231 +<div class="page-container">
  232 + <div class="page-sidebar-wrapper">
  233 + <div class="page-sidebar navbar-collapse collapse">
  234 + <ul class="page-sidebar-menu page-sidebar-menu-fixed" data-keep-expanded="false" data-auto-scroll="true"
  235 + data-slide-speed="200" id="leftMenuSidebar">
  236 + </ul>
  237 + </div>
  238 + </div>
  239 + <div class="page-content-wrapper">
  240 + <div id="pjax-container" class="page-content"></div>
  241 +
  242 + <div id="route-container">
  243 + <div ng-app="ScheduleApp">
  244 + <div ng-controller="ScheduleAppController">
  245 +
  246 + <!-- loading widget -->
  247 + <div id="loadingWidget" class="flyover mask" loading-widget>
  248 + <div class="alert alert-info">
  249 + <strong>载入中......</strong>
227 </div> 250 </div>
228 </div> 251 </div>
  252 +
  253 + <div ui-view class="fade-in-up"></div>
229 </div> 254 </div>
230 - </div> 255 + </div>
  256 + </div>
231 </div> 257 </div>
  258 +</div>
232 259
233 <script id="menu_list_temp" type="text/html"> 260 <script id="menu_list_temp" type="text/html">
234 -{{each list as group i}}  
235 - <li class="heading">  
236 - <h3 class="uppercase">{{group.name}}</h3>  
237 - </li>  
238 - {{each group.children as dir j}}  
239 - <li class="nav-item">  
240 - <a href="javascript:;" class="nav-link nav-toggle ">  
241 - <i class="{{dir.icon}}"></i>  
242 - <span class="title">{{dir.name}}</span>  
243 - <span class="arrow"></span>  
244 - </a>  
245 - <ul class="sub-menu">  
246 - {{each dir.children as module s}}  
247 - <li class="nav-item ">  
248 - {{if module.container=="pjax-container"}}  
249 - <a href="/pages/{{module.path}}" class="nav-link " data-pjax>  
250 - <span class="title">{{module.name}}</span>  
251 - </a>  
252 - {{else}}  
253 - <a href="{{module.path}}" class="nav-link " data-angularjs>  
254 - <span class="title">{{module.name}}</span>  
255 - </a>  
256 - {{/if}}  
257 - </li>  
258 - {{/each}}  
259 - </ul>  
260 - </li>  
261 - {{/each}}  
262 -{{/each}} 261 + {{each list as group i}}
  262 + <li class="heading">
  263 + <h3 class="uppercase">{{group.name}}</h3>
  264 + </li>
  265 + {{each group.children as dir j}}
  266 + <li class="nav-item">
  267 + <a href="javascript:;" class="nav-link nav-toggle ">
  268 + <i class="{{dir.icon}}"></i>
  269 + <span class="title">{{dir.name}}</span>
  270 + <span class="arrow"></span>
  271 + </a>
  272 + <ul class="sub-menu">
  273 + {{each dir.children as module s}}
  274 + <li class="nav-item ">
  275 + {{if module.container=="pjax-container"}}
  276 + <a href="/pages/{{module.path}}" class="nav-link " data-pjax>
  277 + <span class="title">{{module.name}}</span>
  278 + </a>
  279 + {{else}}
  280 + <a href="{{module.path}}" class="nav-link " data-angularjs>
  281 + <span class="title">{{module.name}}</span>
  282 + </a>
  283 + {{/if}}
  284 + </li>
  285 + {{/each}}
  286 + </ul>
  287 + </li>
  288 + {{/each}}
  289 + {{/each}}
263 290
264 </script> 291 </script>
265 <!-- jQuery --> 292 <!-- jQuery -->
@@ -272,24 +299,24 @@ tr.row-active td { @@ -272,24 +299,24 @@ tr.row-active td {
272 <script src="/metronic_v4.5.4/scripts/app.min.js" data-exclude=1></script> 299 <script src="/metronic_v4.5.4/scripts/app.min.js" data-exclude=1></script>
273 <script src="/metronic_v4.5.4/layout4/scripts/layout.min.js" data-exclude=1></script> 300 <script src="/metronic_v4.5.4/layout4/scripts/layout.min.js" data-exclude=1></script>
274 <!-- 虚拟滚动条 --> 301 <!-- 虚拟滚动条 -->
275 -<script src="/metronic_v4.5.4/plugins/jquery-slimscroll/jquery.slimscroll.min.js" ></script> 302 +<script src="/metronic_v4.5.4/plugins/jquery-slimscroll/jquery.slimscroll.min.js"></script>
276 <!-- jsTree 树插件 --> 303 <!-- jsTree 树插件 -->
277 -<script src="/metronic_v4.5.4/plugins/jstree/dist/jstree.min.js" ></script> 304 +<script src="/metronic_v4.5.4/plugins/jstree/dist/jstree.min.js"></script>
278 <!-- bootstrap-hover-dropDown --> 305 <!-- bootstrap-hover-dropDown -->
279 -<script src="/metronic_v4.5.4/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js" ></script> 306 +<script src="/metronic_v4.5.4/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js"></script>
280 <!-- jquery.validate 表单验证 --> 307 <!-- jquery.validate 表单验证 -->
281 <script src="/metronic_v4.5.4/plugins/jquery-validation/js/jquery.validate.min.js"></script> 308 <script src="/metronic_v4.5.4/plugins/jquery-validation/js/jquery.validate.min.js"></script>
282 <script src="/metronic_v4.5.4/plugins/jquery-validation/js/localization/messages_zh.js"></script> 309 <script src="/metronic_v4.5.4/plugins/jquery-validation/js/localization/messages_zh.js"></script>
283 <!-- 向导式插件 --> 310 <!-- 向导式插件 -->
284 <script src="/metronic_v4.5.4//plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script> 311 <script src="/metronic_v4.5.4//plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>
285 <!-- iCheck 单选框和复选框 --> 312 <!-- iCheck 单选框和复选框 -->
286 -<script src="/metronic_v4.5.4/plugins/icheck/icheck.min.js" ></script> 313 +<script src="/metronic_v4.5.4/plugins/icheck/icheck.min.js"></script>
287 <!-- select2 下拉框 --> 314 <!-- select2 下拉框 -->
288 -<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js" ></script> 315 +<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>
289 <!-- MULTI SELECT 多选下拉框 --> 316 <!-- MULTI SELECT 多选下拉框 -->
290 -<script src="/metronic_v4.5.4/plugins/jquery-multi-select/js/jquery.multi-select.js" ></script> 317 +<script src="/metronic_v4.5.4/plugins/jquery-multi-select/js/jquery.multi-select.js"></script>
291 <!-- editable.js --> 318 <!-- editable.js -->
292 -<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js" ></script> 319 +<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>
293 <!-- PJAX --> 320 <!-- PJAX -->
294 <script src="/assets/plugins/jquery.pjax.js"></script> 321 <script src="/assets/plugins/jquery.pjax.js"></script>
295 <!-- layer 弹层 --> 322 <!-- layer 弹层 -->
@@ -313,7 +340,7 @@ tr.row-active td { @@ -313,7 +340,7 @@ tr.row-active td {
313 340
314 <script src="/assets/plugins/pinyin.js"></script> 341 <script src="/assets/plugins/pinyin.js"></script>
315 <!-- 日期控件 --> 342 <!-- 日期控件 -->
316 -<script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js" ></script> 343 +<script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script>
317 <!-- 表格控件 --> 344 <!-- 表格控件 -->
318 <!-- 统计图控件 --> 345 <!-- 统计图控件 -->
319 <!--<script src="/assets/global/getEchart.js"></script> 346 <!--<script src="/assets/global/getEchart.js"></script>
@@ -322,130 +349,139 @@ tr.row-active td { @@ -322,130 +349,139 @@ tr.row-active td {
322 <script src="/assets/js/dictionary.js"></script> 349 <script src="/assets/js/dictionary.js"></script>
323 350
324 <script data-exclude=1> 351 <script data-exclude=1>
325 -//初始打开的片段地址  
326 -var initFragment = "^_^initFragment^_^";  
327 -//静态文件目录  
328 -var dir = '/pages/';  
329 -//片段容器  
330 -var pjaxContainer = '#pjax-container'  
331 - ,angJsContainer = '#route-container';  
332 -  
333 -$(function(){  
334 - $.get('/user/currentUser', function(user){  
335 - $('#indexTopUName').text(user.userName);  
336 - });  
337 -  
338 - //带 data-pjax 的链接由pjax加载  
339 - $(document).pjax('a[data-pjax]', pjaxContainer);  
340 -  
341 - //pjax左菜单点击事件  
342 - $(document).on('click','#leftMenuSidebar a[data-pjax]', function(){  
343 - $('#leftMenuSidebar li.nav-item.active').removeClass('active');  
344 - $(this).parent().addClass('active');  
345 - showPjax();  
346 - });  
347 -  
348 - //angularjs左菜单点击事件  
349 - $(document).on('click','#leftMenuSidebar a[data-angularjs]', function(){  
350 - $('#leftMenuSidebar li.nav-item.active').removeClass('active');  
351 - $(this).parent().addClass('active');  
352 - showAngJs();  
353 - });  
354 -  
355 - //加载左菜单栏  
356 - $get('/module/findByCurrentUser', null,  
357 - function(ms){  
358 - var treeArray = createTreeData(ms);  
359 - treeArray.sort(function(a, b){  
360 - return a.createDate - b.createDate;  
361 - });  
362 - var menuHtml = template('menu_list_temp', {list: treeArray});  
363 - $('#leftMenuSidebar').html(menuHtml);  
364 -  
365 - //----------- 检查URL ----------------  
366 - var h = location.hash;  
367 - if(initFragment && initFragment != ''){  
368 - showPjax();  
369 - //普通片段  
370 - loadPage(initFragment);  
371 - //选中菜单  
372 - $.each($('#leftMenuSidebar a'), function(i, item){  
373 - if(urlPattern($(item).attr('href'), initFragment)){  
374 - activeLeftMenu(item);  
375 - }  
376 - });  
377 - }else if(h){  
378 - //angularjs片段  
379 - showAngJs();  
380 - //选中菜单  
381 - $.each($('#leftMenuSidebar a'), function(i, item){  
382 - if($(item).attr('href') == h){  
383 - activeLeftMenu(item);  
384 - }  
385 - });  
386 - }  
387 - else{  
388 - //加载主页  
389 - loadPage('/pages/home.html');  
390 - }  
391 - });  
392 -  
393 - //修改密码  
394 - $('#changePWD').on('click', function(){  
395 - $.get('/pages/permission/user/changePWD.html', function(content){  
396 - layer.open({  
397 - type: 1,  
398 - area: ['600px','360px'],  
399 - content: content,  
400 - title : '修改密码',  
401 - shift: 5,  
402 - scrollbar: false,  
403 - success: function(){  
404 - }  
405 - });  
406 - });  
407 - });  
408 -});  
409 -  
410 - //modal关闭时销毁dom  
411 - $(document).on('hidden.bs.modal', '.modal', function(){  
412 - $(this).remove();  
413 - });  
414 -  
415 - //pjax加载完成事件  
416 - $(document).on('pjax:success', function(){  
417 - var dicts = $(pjaxContainer).find('.nt-dictionary');  
418 - dictionaryUtils.transformDom(dicts);  
419 - });  
420 -  
421 - function loadPage(url){  
422 - $.pjax({url: url, container: pjaxContainer})  
423 - }  
424 -  
425 - function urlPattern(a , b){  
426 - var r;  
427 - try {  
428 - r = a.substring(0, a.lastIndexOf('/')) == b.substring(0, b.lastIndexOf('/'));  
429 - } catch (e) {  
430 - r = false;  
431 - }  
432 - return r;  
433 - }  
434 -  
435 - function showPjax(){  
436 - $(angJsContainer).removeClass('page-content active').hide();  
437 - $(pjaxContainer).addClass('page-content active');  
438 - }  
439 -  
440 - function showAngJs(){  
441 - $(pjaxContainer).html('').removeClass('page-content active').hide();  
442 - $(angJsContainer).addClass('page-content active');  
443 - }  
444 -  
445 - function activeLeftMenu(item){  
446 - $(item).parent('.nav-item').addClass('active').parent('.sub-menu').show().parent().addClass('open');  
447 - }  
448 - 352 + //初始打开的片段地址
  353 + var initFragment = "^_^initFragment^_^";
  354 + //静态文件目录
  355 + var dir = '/pages/';
  356 + //片段容器
  357 + var pjaxContainer = '#pjax-container'
  358 + , angJsContainer = '#route-container';
  359 +
  360 + $(function () {
  361 + $.get('/user/currentUser', function (user) {
  362 + $('#indexTopUName').text(user.userName);
  363 + });
  364 +
  365 + //带 data-pjax 的链接由pjax加载
  366 + $(document).pjax('a[data-pjax]', pjaxContainer);
  367 +
  368 + //pjax左菜单点击事件
  369 + $(document).on('click', '#leftMenuSidebar a[data-pjax]', function () {
  370 + setTitle(this);
  371 +
  372 + $('#leftMenuSidebar li.nav-item.active').removeClass('active');
  373 + $(this).parent().addClass('active');
  374 + showPjax();
  375 + });
  376 +
  377 + //angularjs左菜单点击事件
  378 + $(document).on('click', '#leftMenuSidebar a[data-angularjs]', function () {
  379 + setTitle(this);
  380 +
  381 + $('#leftMenuSidebar li.nav-item.active').removeClass('active');
  382 + $(this).parent().addClass('active');
  383 + showAngJs();
  384 + });
  385 +
  386 + //加载左菜单栏
  387 + $get('/module/findByCurrentUser', null,
  388 + function (ms) {
  389 + var treeArray = createTreeData(ms);
  390 + treeArray.sort(function (a, b) {
  391 + return a.createDate - b.createDate;
  392 + });
  393 + var menuHtml = template('menu_list_temp', {list: treeArray});
  394 + $('#leftMenuSidebar').html(menuHtml);
  395 +
  396 + //----------- 检查URL ----------------
  397 + var h = location.hash;
  398 + if (initFragment && initFragment != '') {
  399 + showPjax();
  400 + //普通片段
  401 + loadPage(initFragment);
  402 + //选中菜单
  403 + $.each($('#leftMenuSidebar a'), function (i, item) {
  404 + if (urlPattern($(item).attr('href'), initFragment)) {
  405 + activeLeftMenu(item);
  406 + }
  407 + });
  408 + } else if (h) {
  409 + //angularjs片段
  410 + showAngJs();
  411 + //选中菜单
  412 + $.each($('#leftMenuSidebar a'), function (i, item) {
  413 + if ($(item).attr('href') == h) {
  414 + activeLeftMenu(item);
  415 + }
  416 + });
  417 + }
  418 + else {
  419 + //加载主页
  420 + loadPage('/pages/home.html');
  421 + }
  422 + });
  423 +
  424 + //修改密码
  425 + $('#changePWD').on('click', function () {
  426 + $.get('/pages/permission/user/changePWD.html', function (content) {
  427 + layer.open({
  428 + type: 1,
  429 + area: ['600px', '360px'],
  430 + content: content,
  431 + title: '修改密码',
  432 + shift: 5,
  433 + scrollbar: false,
  434 + success: function () {
  435 + }
  436 + });
  437 + });
  438 + });
  439 + });
  440 +
  441 + //modal关闭时销毁dom
  442 + $(document).on('hidden.bs.modal', '.modal', function () {
  443 + $(this).remove();
  444 + });
  445 +
  446 + //pjax加载完成事件
  447 + $(document).on('pjax:success', function () {
  448 + var dicts = $(pjaxContainer).find('.nt-dictionary');
  449 + dictionaryUtils.transformDom(dicts);
  450 + });
  451 +
  452 + function loadPage(url) {
  453 + $.pjax({url: url, container: pjaxContainer})
  454 + }
  455 +
  456 + function urlPattern(a, b) {
  457 + var r;
  458 + try {
  459 + r = a.substring(0, a.lastIndexOf('/')) == b.substring(0, b.lastIndexOf('/'));
  460 + } catch (e) {
  461 + r = false;
  462 + }
  463 + return r;
  464 + }
  465 +
  466 + function showPjax() {
  467 + $(angJsContainer).removeClass('page-content active').hide();
  468 + $(pjaxContainer).addClass('page-content active');
  469 + }
  470 +
  471 + function showAngJs() {
  472 + $(pjaxContainer).html('').removeClass('page-content active').hide();
  473 + $(angJsContainer).addClass('page-content active');
  474 + }
  475 +
  476 + function activeLeftMenu(item) {
  477 + $(item).parent('.nav-item').addClass('active').parent('.sub-menu').show().parent().addClass('open');
  478 + setTitle(item);
  479 + }
  480 +
  481 + function setTitle(menuItem){
  482 + document.title = $('span.title', menuItem).text();
  483 + }
  484 +
449 </script> 485 </script>
450 <!-- d3 --> 486 <!-- d3 -->
451 <script src="/assets/js/d3.min.js" data-exclude=1></script> 487 <script src="/assets/js/d3.min.js" data-exclude=1></script>
@@ -478,8 +514,10 @@ $(function(){ @@ -478,8 +514,10 @@ $(function(){
478 <!-- 百度 --> 514 <!-- 百度 -->
479 <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT" data-exclude=1></script> 515 <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT" data-exclude=1></script>
480 <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js" data-exclude=1></script> 516 <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js" data-exclude=1></script>
481 -<script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js" data-exclude=1></script>  
482 -<script type="text/javascript" src="http://api.map.baidu.com/library/RichMarker/1.2/src/RichMarker_min.js " data-exclude=1></script> 517 +<script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"
  518 + data-exclude=1></script>
  519 +<script type="text/javascript" src="http://api.map.baidu.com/library/RichMarker/1.2/src/RichMarker_min.js "
  520 + data-exclude=1></script>
483 <script src="/assets/js/baidu/TextIconOverlay.js" data-exclude=1></script> 521 <script src="/assets/js/baidu/TextIconOverlay.js" data-exclude=1></script>
484 <script src="/assets/js/baidu//MarkerClusterer.js" data-exclude=1></script> 522 <script src="/assets/js/baidu//MarkerClusterer.js" data-exclude=1></script>
485 <!-- 高德 --> 523 <!-- 高德 -->
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/add_temp_sch.html
@@ -13,7 +13,8 @@ @@ -13,7 +13,8 @@
13 <div class="uk-form-row"> 13 <div class="uk-form-row">
14 <label class="uk-form-label">班次类型</label> 14 <label class="uk-form-label">班次类型</label>
15 <div class="uk-form-controls"> 15 <div class="uk-form-controls">
16 - <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}" data-group=ScheduleType></select> 16 + <select class="form-control nt-dictionary" name="bcType" data-code="{{bcType}}"
  17 + data-group=ScheduleType></select>
17 </div> 18 </div>
18 </div> 19 </div>
19 </div> 20 </div>
@@ -22,8 +23,8 @@ @@ -22,8 +23,8 @@
22 <label class="uk-form-label">上下行</label> 23 <label class="uk-form-label">上下行</label>
23 <div class="uk-form-controls"> 24 <div class="uk-form-controls">
24 <select name="xlDir"> 25 <select name="xlDir">
25 - <option value="0">上行</option>  
26 - <option value="1">下行</option> 26 + <option value="0">上行</option>
  27 + <option value="1">下行</option>
27 </select> 28 </select>
28 </div> 29 </div>
29 </div> 30 </div>
@@ -35,7 +36,7 @@ @@ -35,7 +36,7 @@
35 <label class="uk-form-label">起点站</label> 36 <label class="uk-form-label">起点站</label>
36 <div class="uk-form-controls"> 37 <div class="uk-form-controls">
37 <select name="qdzCode" required> 38 <select name="qdzCode" required>
38 - </select> 39 + </select>
39 </div> 40 </div>
40 </div> 41 </div>
41 </div> 42 </div>
@@ -44,7 +45,7 @@ @@ -44,7 +45,7 @@
44 <label class="uk-form-label">终点站</label> 45 <label class="uk-form-label">终点站</label>
45 <div class="uk-form-controls"> 46 <div class="uk-form-controls">
46 <select name="zdzCode" required> 47 <select name="zdzCode" required>
47 - </select> 48 + </select>
48 </div> 49 </div>
49 </div> 50 </div>
50 </div> 51 </div>
@@ -82,7 +83,8 @@ @@ -82,7 +83,8 @@
82 <div class="uk-form-row"> 83 <div class="uk-form-row">
83 <label class="uk-form-label">里程</label> 84 <label class="uk-form-label">里程</label>
84 <div class="uk-form-controls"> 85 <div class="uk-form-controls">
85 - <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false" required> 86 + <input type="text" name="jhlc" value="{{jhlc}}" max=222 data-fv-lessthan-inclusive="false"
  87 + required>
86 </div> 88 </div>
87 </div> 89 </div>
88 </div> 90 </div>
@@ -90,7 +92,8 @@ @@ -90,7 +92,8 @@
90 <div class="uk-grid"> 92 <div class="uk-grid">
91 <div class="uk-width-1-2"> 93 <div class="uk-width-1-2">
92 <div class="uk-form-row"> 94 <div class="uk-form-row">
93 - <label class="uk-form-label">驾驶员 <!--<i class="uk-icon-question-circle" data-uk-tooltip title="如果有驾驶员未提示,请至后台“基础信息 -人员信息”里纠正该员工的“工种”类别 "></i>--></label> 95 + <label class="uk-form-label">驾驶员
  96 + <!--<i class="uk-icon-question-circle" data-uk-tooltip title="如果有驾驶员未提示,请至后台“基础信息 -人员信息”里纠正该员工的“工种”类别 "></i>--></label>
94 <div class="uk-form-controls"> 97 <div class="uk-form-controls">
95 <div class="uk-autocomplete uk-form jsy-autocom"> 98 <div class="uk-autocomplete uk-form jsy-autocom">
96 <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required> 99 <input type="text" value="{{jGh}}/{{jName}}" name="jsy" required>
@@ -116,101 +119,139 @@ @@ -116,101 +119,139 @@
116 </script> 119 </script>
117 120
118 <script> 121 <script>
119 - (function() { 122 + (function () {
120 var modal = '#schedule-addsch-modal', 123 var modal = '#schedule-addsch-modal',
121 - sch, stationRoutes, parks, information;  
122 - $(modal).on('init', function(e, data) { 124 + sch, stationRoutes, parks, information;
  125 +
  126 + var normalInfo = [];
  127 + $(modal).on('init', function (e, data) {
123 sch = data.sch; 128 sch = data.sch;
  129 + //normal 班次里程和耗时
  130 + var list = gb_common.get_vals(gb_schedule_table.findScheduleByLine(sch.xlBm));
  131 + var upPlan = getNormalSch(list, 0)
  132 + , downPlan = getNormalSch(list, 1);
  133 + normalInfo[0] = {time: upPlan.bcsj, mileage: upPlan.jhlc};
  134 + normalInfo[1] = {time: downPlan.bcsj, mileage: downPlan.jhlc};
  135 +
  136 +
124 var formHtml = template('schedule-addsch-form-temp', sch); 137 var formHtml = template('schedule-addsch-form-temp', sch);
125 $('form', modal).html(formHtml); 138 $('form', modal).html(formHtml);
126 //字典转换 139 //字典转换
127 dictionaryUtils.transformDom($('.nt-dictionary', modal)); 140 dictionaryUtils.transformDom($('.nt-dictionary', modal));
128 141
129 //----------- Autocomplete -------------- 142 //----------- Autocomplete --------------
130 - $.get('/basic/cars', function(rs) { 143 + $.get('/basic/cars', function (rs) {
131 //车辆 144 //车辆
132 gb_common.carAutocomplete($('.car-autocom', modal), rs); 145 gb_common.carAutocomplete($('.car-autocom', modal), rs);
133 }); 146 });
134 - //$.get('/basic/all_personnel', function(rs) {  
135 - //驾驶员  
136 - gb_common.personAutocomplete($('.jsy-autocom', modal));  
137 - //售票员  
138 - gb_common.personAutocomplete($('.spy-autocom', modal));  
139 - //}); 147 + //驾驶员
  148 + gb_common.personAutocomplete($('.jsy-autocom', modal));
  149 +
  150 + //售票员
  151 + gb_common.personAutocomplete($('.spy-autocom', modal));
140 152
141 //站点路由 153 //站点路由
142 - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function(a, b){  
143 - return a.stationRouteCode-b.stationRouteCode; 154 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  155 + return a.stationRouteCode - b.stationRouteCode;
144 }), 'directions'); 156 }), 'directions');
145 //停车场 157 //停车场
146 - $.get('/basic/parks', function(rs){  
147 - parks=rs; 158 + $.get('/basic/parks', function (rs) {
  159 + parks = rs;
148 }); 160 });
149 //线路标准 161 //线路标准
150 - information=gb_data_basic.getLineInformation(sch.xlBm); 162 + information = gb_data_basic.getLineInformation(sch.xlBm);
151 163
152 //submit 164 //submit
153 var f = $('form', modal).formValidation(gb_form_validation_opts); 165 var f = $('form', modal).formValidation(gb_form_validation_opts);
154 - f.on('success.form.fv', function(e) { 166 + f.on('success.form.fv', function (e) {
155 disabled_submit_btn(this); 167 disabled_submit_btn(this);
156 e.preventDefault(); 168 e.preventDefault();
157 var data = $(this).serializeJSON(); 169 var data = $(this).serializeJSON();
158 - data.xlBm=sch.xlBm;  
159 - data.xlName=sch.xlName;  
160 - data.lpName=sch.lpName; 170 + data.xlBm = sch.xlBm;
  171 + data.xlName = sch.xlName;
  172 + data.lpName = sch.lpName;
161 //拆分驾驶员工号和姓名 173 //拆分驾驶员工号和姓名
162 data.jGh = data.jsy.split('/')[0]; 174 data.jGh = data.jsy.split('/')[0];
163 data.jName = data.jsy.split('/')[1]; 175 data.jName = data.jsy.split('/')[1];
164 delete data.jsy; 176 delete data.jsy;
165 //拆分售票员工号和姓名 177 //拆分售票员工号和姓名
166 - if(data.sGh != null){  
167 - data.sGh = data.spy.split('/')[0];  
168 - data.sName = data.spy.split('/')[1];  
169 - delete data.spy; 178 + if (data.sGh != null) {
  179 + data.sGh = data.spy.split('/')[0];
  180 + data.sName = data.spy.split('/')[1];
  181 + delete data.spy;
170 } 182 }
171 183
172 - gb_common.$post('/realSchedule', data, function(rs){  
173 - //插入  
174 - gb_schedule_table.insertSchedule(rs.t, rs.ts);  
175 - $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t});  
176 - UIkit.modal(modal).hide();  
177 - notify_succ('新增临加班次成功'); 184 + gb_common.$post('/realSchedule', data, function (rs) {
  185 + //插入
  186 + gb_schedule_table.insertSchedule(rs.t, rs.ts);
  187 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t});
  188 + UIkit.modal(modal).hide();
  189 + notify_succ('新增临加班次成功');
178 }); 190 });
179 }); 191 });
180 192
181 //班次类型 和 上下行切换 193 //班次类型 和 上下行切换
182 - $('[name=bcType],[name=xlDir]', f).on('change', function(){  
183 - var bcType_e=$('[name=bcType]', f)  
184 - , xlDir_e=$('[name=xlDir]', f);  
185 -  
186 - var routes=stationRoutes[xlDir_e.val()]  
187 - ,lastCode=routes[routes.length-1].stationCode  
188 - ,opts='',park_opts='';  
189 - //station options  
190 - $.each(routes, function(){  
191 - opts+='<option value="'+this.stationCode+'">'+this.stationName+'</option>'  
192 - });  
193 - //park options  
194 - for(var code in parks)  
195 - park_opts+='<option value="'+code+'">'+parks[code]+'</option>';  
196 -  
197 - var qdz=$('[name=qdzCode]', f),zdz=$('[name=zdzCode]', f);  
198 - switch (bcType_e.val()) {  
199 - case 'out':  
200 - qdz.html(park_opts).val(information.carPark);  
201 - zdz.html(opts);  
202 - break;  
203 - case 'in':  
204 - qdz.html(opts);  
205 - zdz.html(park_opts).val(information.carPark);  
206 - break;  
207 - default:  
208 - qdz.html(opts);  
209 - zdz.html(opts).val(lastCode);  
210 - } 194 + $('[name=bcType],[name=xlDir]', f).on('change', function () {
  195 + var bcType_e = $('[name=bcType]', f)
  196 + , xlDir_e = $('[name=xlDir]', f);
  197 +
  198 + var routes = stationRoutes[xlDir_e.val()]
  199 + , lastCode = routes[routes.length - 1].stationCode
  200 + , opts = '', park_opts = '';
  201 + //station options
  202 + $.each(routes, function () {
  203 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  204 + });
  205 + //park options
  206 + for (var code in parks)
  207 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
  208 +
  209 + var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f);
  210 + var time, mileage;
  211 + switch (bcType_e.val()) {
  212 + case 'out':
  213 + qdz.html(park_opts).val(information.carPark);
  214 + zdz.html(opts);
  215 + //出场结束时间
  216 + time = xlDir_e.val() == 0 ? information.upOutTimer : information.downOutTimer;
  217 + mileage = xlDir_e.val() == 0 ? information.upOutMileage : information.downOutMileage;
  218 + break;
  219 + case 'in':
  220 + qdz.html(opts);
  221 + zdz.html(park_opts).val(information.carPark);
  222 + //进场结束时间
  223 + time = xlDir_e.val() == 0 ? information.upInTimer : information.downInTimer;
  224 + mileage = xlDir_e.val() == 0 ? information.upInMileage : information.downInMileage;
  225 + break;
  226 + default:
  227 + qdz.html(opts);
  228 + zdz.html(opts).val(lastCode);
  229 + time = xlDir_e.val() == 0?normalInfo[0].time:normalInfo[1].time;
  230 + mileage = xlDir_e.val() == 0?normalInfo[0].mileage:normalInfo[1].mileage;
  231 + }
  232 +
  233 + setEndTime(time);
  234 + $('[name=jhlc]', f).val(mileage);
211 }).trigger('change'); 235 }).trigger('change');
212 236
  237 +
  238 + function setEndTime(diff) {
  239 + var et = moment($('[name=fcsj]', f).val(), 'HH:mm').add(diff, 'minutes').format('HH:mm');
  240 + $('[name=zdsj]', f).val(et);
  241 + }
213 }); 242 });
  243 +
  244 + function getNormalSch(list, updown) {
  245 + var sch;
  246 + $.each(list, function () {
  247 + if (this.bcType == 'normal' && this.xlDir == updown) {
  248 + sch = this;
  249 + return false;
  250 + }
  251 + });
  252 +
  253 + return sch;
  254 + }
214 })(); 255 })();
215 </script> 256 </script>
216 </div> 257 </div>
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 <!--<i class="uk-icon-plus add-temp-sch-icon" title="新增临加班次" data-uk-tooltip></i>--> 28 <!--<i class="uk-icon-plus add-temp-sch-icon" title="新增临加班次" data-uk-tooltip></i>-->
29 <!--<button class="uk-button uk-button-primary add-temp-sch-icon">临加班次</button>--> 29 <!--<button class="uk-button uk-button-primary add-temp-sch-icon">临加班次</button>-->
30 <!--<a class="uk-button add-temp-sch-icon"><i class="uk-icon-plus"></i> 临加班次</a>--> 30 <!--<a class="uk-button add-temp-sch-icon"><i class="uk-icon-plus"></i> 临加班次</a>-->
31 - <a class="uk-button uk-button-link add-temp-sch-icon" > 临加班次</a> 31 + <a class="uk-button uk-button-link add-temp-sch-icon"> 临加班次</a>
32 </div> 32 </div>
33 </div> 33 </div>
34 </div> 34 </div>
@@ -152,6 +152,7 @@ @@ -152,6 +152,7 @@
152 s_t_body = '.sub-task-table .ct_table_body', 152 s_t_body = '.sub-task-table .ct_table_body',
153 folder = '/real_control_v2/fragments/line_schedule/context_menu', 153 folder = '/real_control_v2/fragments/line_schedule/context_menu',
154 sch, schList, lp2SchMap; 154 sch, schList, lp2SchMap;
  155 +
155 $(modal).on('init', function (e, data) { 156 $(modal).on('init', function (e, data) {
156 sch = data.sch; 157 sch = data.sch;
157 158
@@ -175,10 +176,16 @@ @@ -175,10 +176,16 @@
175 176
176 //路牌下拉框 177 //路牌下拉框
177 $('[name=lpName]', f).on('change', function () { 178 $('[name=lpName]', f).on('change', function () {
178 - var list = lp2SchMap[$(this).val()].sort(gb_schedule_table.schedule_sort),  
179 - htmlBody = template('schedule-main-table-temp', {  
180 - list: list  
181 - }); 179 + var list = [];
  180 +
  181 + try {
  182 + list = lp2SchMap[$(this).val()].sort(gb_schedule_table.schedule_sort);
  183 +
  184 + } catch (e) {
  185 + }
  186 + var htmlBody = template('schedule-main-table-temp', {
  187 + list: list
  188 + });
182 $(m_t_body, modal).html(htmlBody); 189 $(m_t_body, modal).html(htmlBody);
183 $(s_t_body, modal).empty(); 190 $(s_t_body, modal).empty();
184 }); 191 });
@@ -246,20 +253,20 @@ @@ -246,20 +253,20 @@
246 //检查子任务营运里程 253 //检查子任务营运里程
247 $('#childTaskTitle .child-task-status', modal).remove(); 254 $('#childTaskTitle .child-task-status', modal).remove();
248 var i = 0; 255 var i = 0;
249 - if(sch.cTasks.length == 0) 256 + if (sch.cTasks.length == 0)
250 return; 257 return;
251 - var sum=0, calcs=''; 258 + var sum = 0, calcs = '';
252 $.each(sch.cTasks, function () { 259 $.each(sch.cTasks, function () {
253 - if(this.mileageType=='service'){ 260 + if (this.mileageType == 'service') {
254 sum = gb_common.accAdd(sum, this.mileage); 261 sum = gb_common.accAdd(sum, this.mileage);
255 calcs += (' + ' + this.mileage); 262 calcs += (' + ' + this.mileage);
256 - i ++; 263 + i++;
257 } 264 }
258 }); 265 });
259 //公里与主任务不符合 266 //公里与主任务不符合
260 - if(sum != sch.jhlc){  
261 - if(i > 1)  
262 - calcs += ('='+sum); 267 + if (sum != sch.jhlc) {
  268 + if (i > 1)
  269 + calcs += ('=' + sum);
263 calcs += (' ≠ ' + sch.jhlc); 270 calcs += (' ≠ ' + sch.jhlc);
264 calcs = calcs.substr(3); 271 calcs = calcs.substr(3);
265 var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs}); 272 var htmlStr = template('sub_task-fail-status-temp', {calcs: calcs});
@@ -289,7 +296,6 @@ @@ -289,7 +296,6 @@
289 //前端数据更新 296 //前端数据更新
290 gb_schedule_table.updateSchedule(rs.ts); 297 gb_schedule_table.updateSchedule(rs.ts);
291 gb_schedule_table.deheteSchedule(rs.delete); 298 gb_schedule_table.deheteSchedule(rs.delete);
292 - //m_s_table_update();  
293 $('.main-schedule-table', modal).trigger('refresh'); 299 $('.main-schedule-table', modal).trigger('refresh');
294 }); 300 });
295 }, '确定删除'); 301 }, '确定删除');
@@ -394,6 +400,21 @@ @@ -394,6 +400,21 @@
394 gb_ct_table.fixedHead($('.ct_table_wrap', modal)); 400 gb_ct_table.fixedHead($('.ct_table_wrap', modal));
395 401
396 $('.add-temp-sch-icon', modal).on('click', add_temp_sch); 402 $('.add-temp-sch-icon', modal).on('click', add_temp_sch);
  403 + //临加路牌
  404 + $('.add-temp-lp-icon', modal).on('click', function () {
  405 + var index = 0, max;
  406 + for (var lp in lp2SchMap) {
  407 + if (lp.indexOf('临') != -1) {
  408 + max = lp.substr(lp.indexOf('临') + 1);
  409 + if (!isNaN(max))
  410 + index = parseInt(max);
  411 + }
  412 + }
  413 +
  414 + var lpName = '临' + (index + 1);
  415 + lp2SchMap[lpName] = [];
  416 + $('[name=lpName]', f).append('<option value="' + lpName + '">' + lpName + '</option>').val(lpName).trigger('change');
  417 + });
397 418
398 function sub_task_sort(a, b) { 419 function sub_task_sort(a, b) {
399 return a.id - b.id; 420 return a.id - b.id;
src/main/resources/static/real_control_v2/js/data/data_gps.js
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 var gb_data_gps = (function() { 3 var gb_data_gps = (function() {
4 4
5 //fixed time refresh delay 5 //fixed time refresh delay
6 - var delay = 1000 * 60; 6 + var delay = 1000 * 6;
7 //deviceId ——> gps 7 //deviceId ——> gps
8 var realData = {}; 8 var realData = {};
9 //refresh after callback 9 //refresh after callback
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
1 /* line schedule table context menu*/ 1 /* line schedule table context menu*/
2 2
3 -var gb_schedule_context_menu = (function() { 3 +var gb_schedule_context_menu = (function () {
4 4
5 var modal_opts = { 5 var modal_opts = {
6 center: false, 6 center: false,
@@ -8,35 +8,38 @@ var gb_schedule_context_menu = (function() { @@ -8,35 +8,38 @@ var gb_schedule_context_menu = (function() {
8 }, 8 },
9 folder = '/real_control_v2/fragments/line_schedule/context_menu'; 9 folder = '/real_control_v2/fragments/line_schedule/context_menu';
10 var callbackHandler = { 10 var callbackHandler = {
11 - dftz: function(sch) { 11 + dftz: function (sch) {
12 open_modal(folder + '/dftz.html', { 12 open_modal(folder + '/dftz.html', {
13 sch: sch 13 sch: sch
14 }, modal_opts); 14 }, modal_opts);
15 }, 15 },
16 - multi_tzrc: function(schArray) { 16 + multi_tzrc: function (schArray) {
17 open_modal(folder + '/multi_tzrc.html', { 17 open_modal(folder + '/multi_tzrc.html', {
18 list: schArray 18 list: schArray
19 }, modal_opts); 19 }, modal_opts);
20 }, 20 },
21 - multi_dftz: function(schArray) { 21 + multi_dftz: function (schArray) {
  22 + var list = schArray.filter(function (sch) {
  23 + return sch.bcType != 'out' && sch.bcType != 'in' && sch.fcsjActual == null;
  24 + });
22 open_modal(folder + '/multi_dftz.html', { 25 open_modal(folder + '/multi_dftz.html', {
23 - list: schArray 26 + list: list
24 }, modal_opts); 27 }, modal_opts);
25 }, 28 },
26 - jhlb: function(sch) { 29 + jhlb: function (sch) {
27 open_modal(folder + '/jhlb.html', { 30 open_modal(folder + '/jhlb.html', {
28 sch: sch 31 sch: sch
29 }, modal_opts); 32 }, modal_opts);
30 }, 33 },
31 - cxlb: function(sch) { 34 + cxlb: function (sch) {
32 if (!sch.destroy) 35 if (!sch.destroy)
33 return notify_err('烂掉的班次才能执行此操作!'); 36 return notify_err('烂掉的班次才能执行此操作!');
34 37
35 var content = '<h3>确定要撤销<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>的烂班设置?</h3>' 38 var content = '<h3>确定要撤销<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>的烂班设置?</h3>'
36 - alt_confirm(content, function() { 39 + alt_confirm(content, function () {
37 gb_common.$post('/realSchedule/revokeDestroy', { 40 gb_common.$post('/realSchedule/revokeDestroy', {
38 id: sch.id 41 id: sch.id
39 - }, function(rs) { 42 + }, function (rs) {
40 gb_schedule_table.updateSchedule(rs.t); 43 gb_schedule_table.updateSchedule(rs.t);
41 notify_succ('撤销烂班操作成功!'); 44 notify_succ('撤销烂班操作成功!');
42 45
@@ -45,20 +48,20 @@ var gb_schedule_context_menu = (function() { @@ -45,20 +48,20 @@ var gb_schedule_context_menu = (function() {
45 }); 48 });
46 }, '确认撤销'); 49 }, '确认撤销');
47 }, 50 },
48 - sftz: function(sch) { 51 + sftz: function (sch) {
49 open_modal(folder + '/sftz.html', { 52 open_modal(folder + '/sftz.html', {
50 sch: sch 53 sch: sch
51 }, modal_opts); 54 }, modal_opts);
52 }, 55 },
53 - cxsf: function(sch) { 56 + cxsf: function (sch) {
54 if (!sch.fcsjActual) 57 if (!sch.fcsjActual)
55 return notify_err('车辆未实发,无法执行该操作!'); 58 return notify_err('车辆未实发,无法执行该操作!');
56 59
57 var content = '<h3>确定要撤销<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>的实发时间?</h3>' 60 var content = '<h3>确定要撤销<span style="color:red;margin: 0 5px;">' + sch.clZbh + '( ' + sch.dfsj + ' )</span>的实发时间?</h3>'
58 - alt_confirm(content, function() { 61 + alt_confirm(content, function () {
59 gb_common.$post('/realSchedule/revokeRealOutgo', { 62 gb_common.$post('/realSchedule/revokeRealOutgo', {
60 id: sch.id 63 id: sch.id
61 - }, function(rs) { 64 + }, function (rs) {
62 gb_schedule_table.updateSchedule(rs.ts); 65 gb_schedule_table.updateSchedule(rs.ts);
63 notify_succ('撤销实发操作成功!'); 66 notify_succ('撤销实发操作成功!');
64 //calc 应发未发 67 //calc 应发未发
@@ -66,27 +69,27 @@ var gb_schedule_context_menu = (function() { @@ -66,27 +69,27 @@ var gb_schedule_context_menu = (function() {
66 }); 69 });
67 }, '确认撤销实发'); 70 }, '确认撤销实发');
68 }, 71 },
69 - fcxxwt: function(sch) { 72 + fcxxwt: function (sch) {
70 open_modal(folder + '/fcxxwt.html', { 73 open_modal(folder + '/fcxxwt.html', {
71 sch: sch 74 sch: sch
72 }, modal_opts); 75 }, modal_opts);
73 }, 76 },
74 - lj_zrw: function(sch) { 77 + lj_zrw: function (sch) {
75 open_modal(folder + '/lj_zrw.html', { 78 open_modal(folder + '/lj_zrw.html', {
76 sch: sch 79 sch: sch
77 }, modal_opts); 80 }, modal_opts);
78 }, 81 },
79 - tzrc: function(sch) { 82 + tzrc: function (sch) {
80 open_modal(folder + '/tzrc.html', { 83 open_modal(folder + '/tzrc.html', {
81 sch: sch 84 sch: sch
82 }, modal_opts); 85 }, modal_opts);
83 }, 86 },
84 - zlcf: function(sch) { 87 + zlcf: function (sch) {
85 var text = sch.clZbh + '重发调度指令? [路牌: ' + sch.lpName + ' 计划时间:' + sch.fcsj + ' 待发时间:' + sch.dfsj + ']'; 88 var text = sch.clZbh + '重发调度指令? [路牌: ' + sch.lpName + ' 计划时间:' + sch.fcsj + ' 待发时间:' + sch.dfsj + ']';
86 - alt_confirm(text, function() { 89 + alt_confirm(text, function () {
87 //走短语下发 90 //走短语下发
88 $.post('/directive/dispatch', {id: sch.id}, 91 $.post('/directive/dispatch', {id: sch.id},
89 - function(code) { 92 + function (code) {
90 if (code == 0) 93 if (code == 0)
91 notify_succ('发送指令成功'); 94 notify_succ('发送指令成功');
92 else 95 else
@@ -95,12 +98,12 @@ var gb_schedule_context_menu = (function() { @@ -95,12 +98,12 @@ var gb_schedule_context_menu = (function() {
95 }, '确定下发指令'); 98 }, '确定下发指令');
96 }, 99 },
97 jgtz: function (schArray) { 100 jgtz: function (schArray) {
98 - var idArr=[];  
99 - $.each(schArray, function(){  
100 - idArr.push(this.id); 101 + var idArr = [];
  102 + $.each(schArray, function () {
  103 + idArr.push(this.id);
101 }); 104 });
102 - var elem = UIkit.modal.prompt('请输入间隔(分钟)',0, function(newValue) {  
103 - if (!isNaN(newValue) && newValue>0) { 105 + var elem = UIkit.modal.prompt('请输入间隔(分钟)', 0, function (newValue) {
  106 + if (!isNaN(newValue) && newValue > 0) {
104 gb_common.$post_arr('/realSchedule/spaceAdjust', {ids: idArr, space: newValue}, function (rs) { 107 gb_common.$post_arr('/realSchedule/spaceAdjust', {ids: idArr, space: newValue}, function (rs) {
105 //刷新数据 108 //刷新数据
106 gb_schedule_table.updateSchedule(rs.ts); 109 gb_schedule_table.updateSchedule(rs.ts);
@@ -120,7 +123,7 @@ var gb_schedule_context_menu = (function() { @@ -120,7 +123,7 @@ var gb_schedule_context_menu = (function() {
120 $.contextMenu({ 123 $.contextMenu({
121 selector: '.line_schedule .ct_table_body dl:not([class="drag-active"])', 124 selector: '.line_schedule .ct_table_body dl:not([class="drag-active"])',
122 className: 'schedule-ct-menu', 125 className: 'schedule-ct-menu',
123 - callback: function(key, options) { 126 + callback: function (key, options) {
124 var $tbody = options.$trigger.parent(), 127 var $tbody = options.$trigger.parent(),
125 id = $('.context-menu-active', $tbody).data('id'), 128 id = $('.context-menu-active', $tbody).data('id'),
126 lineCode = $tbody.parents('li.line_schedule').data('id'), 129 lineCode = $tbody.parents('li.line_schedule').data('id'),
@@ -166,13 +169,13 @@ var gb_schedule_context_menu = (function() { @@ -166,13 +169,13 @@ var gb_schedule_context_menu = (function() {
166 $.contextMenu({ 169 $.contextMenu({
167 selector: '.line_schedule .ct_table_body dl.drag-active', 170 selector: '.line_schedule .ct_table_body dl.drag-active',
168 className: 'schedule-ct-menu', 171 className: 'schedule-ct-menu',
169 - callback: function(key, options) { 172 + callback: function (key, options) {
170 var $tbody = options.$trigger.parent(), 173 var $tbody = options.$trigger.parent(),
171 lineCode = $tbody.parents('li.line_schedule').data('id'), 174 lineCode = $tbody.parents('li.line_schedule').data('id'),
172 schArray = [], 175 schArray = [],
173 all = gb_schedule_table.findScheduleByLine(lineCode); 176 all = gb_schedule_table.findScheduleByLine(lineCode);
174 177
175 - $tbody.find('dl.drag-active').each(function() { 178 + $tbody.find('dl.drag-active').each(function () {
176 schArray.push(all[$(this).data('id')]); 179 schArray.push(all[$(this).data('id')]);
177 }); 180 });
178 181
src/main/resources/static/real_control_v2/js/utils/svg_data_convert.js
@@ -29,7 +29,7 @@ var gb_svg_data_convert = (function() { @@ -29,7 +29,7 @@ var gb_svg_data_convert = (function() {
29 var dIndex = station_indexof(down, upS, j); 29 var dIndex = station_indexof(down, upS, j);
30 if (dIndex == -1) { 30 if (dIndex == -1) {
31 op.type = 0; 31 op.type = 0;
32 - op.id = [upS.stationCode, -1]; 32 + op.id = [get_station_code(upS), -1];
33 //占位 33 //占位
34 down.splice(j, 0, {}); 34 down.splice(j, 0, {});
35 } else { 35 } else {
@@ -38,7 +38,7 @@ var gb_svg_data_convert = (function() { @@ -38,7 +38,7 @@ var gb_svg_data_convert = (function() {
38 data.push({ 38 data.push({
39 name: [temp.stationName], 39 name: [temp.stationName],
40 type: 1, 40 type: 1,
41 - id: [temp.stationCode] 41 + id: [get_station_code(temp)]
42 }); 42 });
43 } 43 }
44 //delete 44 //delete
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
@@ -94,6 +94,7 @@ var gb_sch_websocket = (function () { @@ -94,6 +94,7 @@ var gb_sch_websocket = (function () {
94 //到达终点 94 //到达终点
95 var zhongDian = function (msg) { 95 var zhongDian = function (msg) {
96 gb_schedule_table.updateSchedule(msg.t); 96 gb_schedule_table.updateSchedule(msg.t);
  97 + gb_schedule_table.updateSchedule(msg.nt);
97 msg.domId = 'zhongDian_' + msg.t.id + '_' + parseInt(Math.random() * 10000); 98 msg.domId = 'zhongDian_' + msg.t.id + '_' + parseInt(Math.random() * 10000);
98 99
99 var $item = $(temps['sys-note-42_1-temp'](msg)); 100 var $item = $(temps['sys-note-42_1-temp'](msg));
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
@@ -96,7 +96,7 @@ input[type=checkbox].disabled{ @@ -96,7 +96,7 @@ input[type=checkbox].disabled{
96 .real_bottom_panel{ 96 .real_bottom_panel{
97 97
98 position: absolute !important; 98 position: absolute !important;
99 - height: 256px; 99 + height: 192px;
100 bottom: 2px !important; 100 bottom: 2px !important;
101 background: #fff; 101 background: #fff;
102 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 102 box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);