Commit 8f5f2fe022247f9d3a671906baf190a1f645e7e2

Authored by 潘钊
2 parents aaaf39cd aed3442c

Merge branch 'minhang' into pudong

Showing 35 changed files with 3030 additions and 166 deletions
src/main/java/com/bsth/entity/realcontrol/ChildTaskPlan.java
@@ -88,6 +88,21 @@ public class ChildTaskPlan { @@ -88,6 +88,21 @@ public class ChildTaskPlan {
88 */ 88 */
89 private String destroyReason; 89 private String destroyReason;
90 90
  91 + /**
  92 + * 包括 烂班原因、进出场原因、换车原因 等
  93 + */
  94 + private String reason;
  95 +
  96 + /**
  97 + * 车辆 如果为空,继承主任务
  98 + */
  99 + private String nbbm;
  100 +
  101 + /**
  102 + * 为true 则无售票员, 否则继承主任务
  103 + */
  104 + private boolean noClerk;
  105 +
91 /** 创建日期 */ 106 /** 创建日期 */
92 @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") 107 @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
93 private Date createDate; 108 private Date createDate;
@@ -238,4 +253,28 @@ public class ChildTaskPlan { @@ -238,4 +253,28 @@ public class ChildTaskPlan {
238 public void setCreateDate(Date createDate) { 253 public void setCreateDate(Date createDate) {
239 this.createDate = createDate; 254 this.createDate = createDate;
240 } 255 }
  256 +
  257 + public String getReason() {
  258 + return reason;
  259 + }
  260 +
  261 + public void setReason(String reason) {
  262 + this.reason = reason;
  263 + }
  264 +
  265 + public String getNbbm() {
  266 + return nbbm;
  267 + }
  268 +
  269 + public void setNbbm(String nbbm) {
  270 + this.nbbm = nbbm;
  271 + }
  272 +
  273 + public boolean isNoClerk() {
  274 + return noClerk;
  275 + }
  276 +
  277 + public void setNoClerk(boolean noClerk) {
  278 + this.noClerk = noClerk;
  279 + }
241 } 280 }
src/main/java/com/bsth/repository/StationRepository.java
@@ -40,10 +40,17 @@ public interface StationRepository extends BaseRepository<Station, Integer> { @@ -40,10 +40,17 @@ public interface StationRepository extends BaseRepository<Station, Integer> {
40 /*@Query(value = "SELECT s.b_jwpoints,s.id FROM bsth_c_station s where s.station_name like ?1" 40 /*@Query(value = "SELECT s.b_jwpoints,s.id FROM bsth_c_station s where s.station_name like ?1"
41 , nativeQuery=true) 41 , nativeQuery=true)
42 List<Object[]> findStationName(String stationName);*/ 42 List<Object[]> findStationName(String stationName);*/
43 - @Query(value = " SELECT t.b_jwpoints,t.id FROM (" + 43 + /*@Query(value = " SELECT t.b_jwpoints,t.id FROM (" +
44 " SELECT b.id,b.b_jwpoints,b.station_name,a.directions FROM (" + 44 " SELECT b.id,b.b_jwpoints,b.station_name,a.directions FROM (" +
45 " SELECT s.station,s.station_name,s.directions FROM bsth_c_stationroute s where s.destroy = 0 and s.directions = ?1) a " + 45 " SELECT s.station,s.station_name,s.directions FROM bsth_c_stationroute s where s.destroy = 0 and s.directions = ?1) a " +
46 " LEFT JOIN bsth_c_station b on a.station = b. id) t where t.station_name LIKE ?2" 46 " LEFT JOIN bsth_c_station b on a.station = b. id) t where t.station_name LIKE ?2"
  47 + , nativeQuery=true)*/
  48 + @Query(value = " SELECT t.b_jwpoints,t.id FROM (" +
  49 + " SELECT b.id,b.b_jwpoints,b.station_name,a.directions FROM (" +
  50 + " SELECT s.station,s.station_name,s.directions FROM bsth_c_stationroute s where s.destroy = 0 and s.directions = ?1) a " +
  51 + " LEFT JOIN " +
  52 + " (SELECT r.id,r.b_jwpoints,r.station_name from bsth_c_station r where r.destroy = 0 and r.station_name LIKE ?2 ) " +
  53 + " b on a.station = b. id) t where t.station_name LIKE ?2 "
47 , nativeQuery=true) 54 , nativeQuery=true)
48 List<Object[]> findStationName(Integer dir , String stationName); 55 List<Object[]> findStationName(Integer dir , String stationName);
49 56
@@ -101,18 +108,24 @@ public interface StationRepository extends BaseRepository&lt;Station, Integer&gt; { @@ -101,18 +108,24 @@ public interface StationRepository extends BaseRepository&lt;Station, Integer&gt; {
101 "y = ?9 , " + 108 "y = ?9 , " +
102 "b_polygon_grid = ST_GeomFromText(?10) , " + 109 "b_polygon_grid = ST_GeomFromText(?10) , " +
103 "g_polygon_grid = ST_GeomFromText(?11) , " + 110 "g_polygon_grid = ST_GeomFromText(?11) , " +
104 - "destroy = ?12 , " +  
105 - "radius = ?13 , " +  
106 - "shapes_type = ?14 , " +  
107 - "versions = ?15 , " +  
108 - "descriptions = ?16 " +  
109 - " WHERE id = ?17 ", nativeQuery=true) 111 + /*"destroy = ?12 , " +*/
  112 + "radius = ?12 , " +
  113 + "shapes_type = ?13 , " +
  114 + "versions = ?14 , " +
  115 + "descriptions = ?15 " +
  116 + " WHERE id = ?16 ", nativeQuery=true)
110 public void stationUpdate(String stationCod,String stationName,String roadCoding,String dbType,String bJwpoints, 117 public void stationUpdate(String stationCod,String stationName,String roadCoding,String dbType,String bJwpoints,
  118 +
  119 + Float gLonx,Float gLaty,Float x,Float y, String bPolygonGrid,String gPolygonGrid,
  120 +
  121 + Integer radius,String shapesType, Integer versions,String descriptions,Integer stationId);
  122 +
  123 + /*public void stationUpdate(String stationCod,String stationName,String roadCoding,String dbType,String bJwpoints,
111 124
112 Float gLonx,Float gLaty,Float x,Float y, String bPolygonGrid,String gPolygonGrid, 125 Float gLonx,Float gLaty,Float x,Float y, String bPolygonGrid,String gPolygonGrid,
113 126
114 Integer destroy, Integer radius,String shapesType, Integer versions,String descriptions,Integer stationId); 127 Integer destroy, Integer radius,String shapesType, Integer versions,String descriptions,Integer stationId);
115 - 128 + */
116 129
117 @Query(value = "select st_astext(g_polygon_grid) as g_polygon_grid, shapes_type,concat(g_lonx, ' ', g_laty) as g_center_point ,radius, station_cod,station_name from bsth_c_station where station_cod=?1", nativeQuery = true) 130 @Query(value = "select st_astext(g_polygon_grid) as g_polygon_grid, shapes_type,concat(g_lonx, ' ', g_laty) as g_center_point ,radius, station_cod,station_name from bsth_c_station where station_cod=?1", nativeQuery = true)
118 public Object[][] bufferAera(String stationCode); 131 public Object[][] bufferAera(String stationCode);
src/main/java/com/bsth/service/impl/StationServiceImpl.java
@@ -930,7 +930,8 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -930,7 +930,8 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
930 Float x = map.get("x").equals("") ? null : Float.parseFloat(map.get("x").toString()); 930 Float x = map.get("x").equals("") ? null : Float.parseFloat(map.get("x").toString());
931 Float y = map.get("y").equals("") ? null : Float.parseFloat(map.get("y").toString()); 931 Float y = map.get("y").equals("") ? null : Float.parseFloat(map.get("y").toString());
932 // 更新 932 // 更新
933 - repository.stationUpdate(stationCod, zdmc, roadCoding, dbType, bJwpoints, gLonx, gLaty, x, y, bPloygonGrid, gPloygonGrid, destroy, radius, shapesType, versions, descriptions, stationId); 933 + /*repository.stationUpdate(stationCod, zdmc, roadCoding, dbType, bJwpoints, gLonx, gLaty, x, y, bPloygonGrid, gPloygonGrid, destroy, radius, shapesType, versions, descriptions, stationId);*/
  934 + repository.stationUpdate(stationCod, zdmc, roadCoding, dbType, bJwpoints, gLonx, gLaty, x, y, bPloygonGrid, gPloygonGrid, radius, shapesType, versions, descriptions, stationId);
934 // 站点路由Id 935 // 站点路由Id
935 Integer stationRouteId = map.get("stationRouteId").equals("") ? null : Integer.parseInt(map.get("stationRouteId").toString()); 936 Integer stationRouteId = map.get("stationRouteId").equals("") ? null : Integer.parseInt(map.get("stationRouteId").toString());
936 StationRoute resultS = routeRepository.findOne(stationRouteId); 937 StationRoute resultS = routeRepository.findOne(stationRouteId);
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
@@ -45,14 +45,21 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon @@ -45,14 +45,21 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon
45 try { 45 try {
46 ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId()); 46 ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId());
47 //保存起终点名称 47 //保存起终点名称
48 - String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_"; 48 + //String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
49 if(StringUtils.isEmpty(t.getStartStationName())) 49 if(StringUtils.isEmpty(t.getStartStationName()))
50 - t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix)); 50 + t.setStartStationName(getStationName(sch.getXlBm(), t.getStartStation()));
  51 + //t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix));
51 52
52 if(StringUtils.isEmpty(t.getEndStationName())) 53 if(StringUtils.isEmpty(t.getEndStationName()))
53 - t.setEndStationName(BasicData.getStationNameByCode(t.getEndStation(), prefix)); 54 + t.setEndStationName(getStationName(sch.getXlBm(), t.getEndStation()));
  55 + //t.setEndStationName(BasicData.getStationNameByCode(t.getEndStation(), prefix));
54 if(t.getDestroyReason() == null) 56 if(t.getDestroyReason() == null)
55 t.setDestroyReason(""); 57 t.setDestroyReason("");
  58 +
  59 + //烂班说明,为兼容之前的数据结构
  60 + if(t.isDestroy() && StringUtils.isEmpty(t.getDestroyReason()))
  61 + t.setDestroyReason(t.getReason());
  62 +
56 //先持久化子任务 63 //先持久化子任务
57 rs = super.save(t); 64 rs = super.save(t);
58 //关联主任务 65 //关联主任务
@@ -71,6 +78,17 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon @@ -71,6 +78,17 @@ public class ChildTaskPlanServiceImpl extends BaseServiceImpl&lt;ChildTaskPlan, Lon
71 return rs; 78 return rs;
72 } 79 }
73 80
  81 + private String getStationName(String lineCode, String stationCode){
  82 + String name;
  83 + String prefix1 = lineCode + "_" + 0 + "_",
  84 + prefix2 = lineCode + "_" + 1 + "_";
  85 +
  86 + name = BasicData.getStationNameByCode(stationCode, prefix1);
  87 + if(StringUtils.isEmpty(name))
  88 + name = BasicData.getStationNameByCode(stationCode, prefix2);
  89 + return name;
  90 + }
  91 +
74 @Override 92 @Override
75 public Map<String, Object> delete(Long id) { 93 public Map<String, Object> delete(Long id) {
76 Map<String, Object> rs; 94 Map<String, Object> rs;
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -3714,7 +3714,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -3714,7 +3714,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3714 List<ScheduleRealInfo> list3 = this.realScheduleList(line, date); 3714 List<ScheduleRealInfo> list3 = this.realScheduleList(line, date);
3715 3715
3716 Map<String, Object> nMap=new HashMap<String, Object>(); 3716 Map<String, Object> nMap=new HashMap<String, Object>();
3717 - nMap.put("date", date); 3717 + nMap.put("date", xlName+date);
3718 nMap.put("jls", list1.get(0).get("jls")); 3718 nMap.put("jls", list1.get(0).get("jls"));
3719 nMap.put("sjgl", list1.get(0).get("sjgl")); 3719 nMap.put("sjgl", list1.get(0).get("sjgl"));
3720 for (Map<String, Object> m : list1) { 3720 for (Map<String, Object> m : list1) {
src/main/resources/static/pages/base/line/add.html
@@ -228,7 +228,14 @@ @@ -228,7 +228,14 @@
228 </div> 228 </div>
229 </div> 229 </div>
230 <!-- 是否营运 END --> 230 <!-- 是否营运 END -->
231 - 231 + <!-- 权证车辆数 START -->
  232 + <div class="col-md-6">
  233 + <label class="control-label col-md-5"> 权证车辆数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </label>
  234 + <div class="col-md-4">
  235 + <input type="text" class="form-control" name="warrantCar" id="warrantCarInput" placeholder="权证车辆数">
  236 + </div>
  237 + </div>
  238 + <!-- 权证车辆数 END -->
232 239
233 </div> 240 </div>
234 <!-- 表单分组组件 form-group END --> 241 <!-- 表单分组组件 form-group END -->
src/main/resources/static/pages/base/line/details.html
@@ -220,7 +220,14 @@ @@ -220,7 +220,14 @@
220 </div> 220 </div>
221 </div> 221 </div>
222 <!-- 是否营运 END --> 222 <!-- 是否营运 END -->
223 - 223 + <!-- 权证车辆数 START -->
  224 + <div class="col-md-6">
  225 + <label class="control-label col-md-5"> 权证车辆数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </label>
  226 + <div class="col-md-4">
  227 + <input type="text" class="form-control" name="warrantCar" id="warrantCarInput" placeholder="权证车辆数">
  228 + </div>
  229 + </div>
  230 + <!-- 权证车辆数 END -->
224 231
225 </div> 232 </div>
226 <!-- 表单分组组件 form-group END --> 233 <!-- 表单分组组件 form-group END -->
src/main/resources/static/pages/base/line/edit.html
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 <!-- 表单内容 START --> 43 <!-- 表单内容 START -->
44 <div class="form-body"> 44 <div class="form-body">
45 <input type="hidden" name="id" id="lineId"> 45 <input type="hidden" name="id" id="lineId">
46 - 46 + <input type="hidden" name="inUse" id="inUse">
47 <!-- 表单分组组件 form-group START --> 47 <!-- 表单分组组件 form-group START -->
48 <div class="form-group"> 48 <div class="form-group">
49 <!-- 线路编码 (* 必填项) START --> 49 <!-- 线路编码 (* 必填项) START -->
@@ -229,7 +229,14 @@ @@ -229,7 +229,14 @@
229 </div> 229 </div>
230 <!-- 是否营运 END --> 230 <!-- 是否营运 END -->
231 231
232 - 232 + <!-- 权证车辆数 START -->
  233 + <div class="col-md-6">
  234 + <label class="control-label col-md-5"> 权证车辆数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </label>
  235 + <div class="col-md-4">
  236 + <input type="text" class="form-control" name="warrantCar" id="warrantCarInput" placeholder="权证车辆数">
  237 + </div>
  238 + </div>
  239 + <!-- 权证车辆数 END -->
233 </div> 240 </div>
234 <!-- 表单分组组件 form-group END --> 241 <!-- 表单分组组件 form-group END -->
235 <!-- 表单分组组件 form-group START --> 242 <!-- 表单分组组件 form-group START -->
src/main/resources/static/pages/base/line/js/line-add-form.js
@@ -116,6 +116,7 @@ $(function(){ @@ -116,6 +116,7 @@ $(function(){
116 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度. 116 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度.
117 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度. 117 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度.
118 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度. 118 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度.
  119 + 'warrantCar' : {number : true,digits : true,maxlength: 8},
119 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。 120 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。
120 'descriptions' : {maxlength: 200}// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。 121 'descriptions' : {maxlength: 200}// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。
121 }, 122 },
src/main/resources/static/pages/base/line/js/line-edit-form.js
@@ -171,6 +171,7 @@ @@ -171,6 +171,7 @@
171 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度. 171 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度.
172 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度. 172 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度.
173 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度. 173 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度.
  174 + 'warrantCar' : {number : true,digits : true,maxlength: 8},
174 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。 175 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。
175 'descriptions' : {maxlength: 200}// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。 176 'descriptions' : {maxlength: 200}// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。
176 }, 177 },
src/main/resources/static/pages/base/timesmodel/js/base-fun.js
@@ -382,13 +382,14 @@ var BaseFun = function() { @@ -382,13 +382,14 @@ var BaseFun = function() {
382 * 382 *
383 * 383 *
384 **/ 384 **/
385 - abstractBcByWorkTime : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs ,deletebcNum) { 385 + abstractBcByWorkTime : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs ,deletebcNum ,zwxeLpNum) {
386 var rsultA = new Array() , dgzjsj = baseF.getDateTime('13:00'); 386 var rsultA = new Array() , dgzjsj = baseF.getDateTime('13:00');
387 // 定义13:00 ~ 晚高峰开始以前剔除规则. 如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次. 387 // 定义13:00 ~ 晚高峰开始以前剔除规则. 如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次.
388 var xwmaxtcbcNum = parseInt(( dataMap.wgfsjd[0].st - dgzjsj) / (60000 * saa[0].zzsj.dgzzsj)); 388 var xwmaxtcbcNum = parseInt(( dataMap.wgfsjd[0].st - dgzjsj) / (60000 * saa[0].zzsj.dgzzsj));
389 // 定义早高峰结束 ~ 13:00 剔除规则.如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次. 389 // 定义早高峰结束 ~ 13:00 剔除规则.如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次.
390 var swmaxtcbcNum = parseInt(( dgzjsj - dataMap.zgfsjd[0].ed) / (60000 * saa[0].zzsj.dgzzsj)); 390 var swmaxtcbcNum = parseInt(( dgzjsj - dataMap.zgfsjd[0].ed) / (60000 * saa[0].zzsj.dgzzsj));
391 var sumGs = 0; 391 var sumGs = 0;
  392 + dgminpcs = zwxeLpNum==0 ? bxlpbc.length : dgminpcs;
392 for(var a = 0 ; a < bxlpbc.length ; a++) { 393 for(var a = 0 ; a < bxlpbc.length ; a++) {
393 // 定义该版型下对应的路牌的班次数组、班次数组长度、该路牌上是否有首末班车。 394 // 定义该版型下对应的路牌的班次数组、班次数组长度、该路牌上是否有首末班车。
394 var lpbc = bxlpbc[a].lpbc, lpbclen_ = lpbc.length; 395 var lpbc = bxlpbc[a].lpbc, lpbclen_ = lpbc.length;
@@ -396,6 +397,7 @@ var BaseFun = function() { @@ -396,6 +397,7 @@ var BaseFun = function() {
396 continue; 397 continue;
397 var isFlag = baseF.lpDownIsHaveFirstAndLastBc(lpbc , dataMap.smbcsjArr) , tcbcgzA = new Array(); 398 var isFlag = baseF.lpDownIsHaveFirstAndLastBc(lpbc , dataMap.smbcsjArr) , tcbcgzA = new Array();
398 if(bxrcObj.type == '五工二休') { 399 if(bxrcObj.type == '五工二休') {
  400 + // continue;
399 // 定义晚高峰后能剔除多少班次数. 401 // 定义晚高峰后能剔除多少班次数.
400 var wgfhtcbcNum = parseInt(( dataMap.wgfzhsjd[0].ed - dataMap.wgfsjd[0].ed ) / (60000 * saa[0].zzsj.dgzzsj)); 402 var wgfhtcbcNum = parseInt(( dataMap.wgfzhsjd[0].ed - dataMap.wgfsjd[0].ed ) / (60000 * saa[0].zzsj.dgzzsj));
401 if(isFlag) { 403 if(isFlag) {
@@ -409,11 +411,12 @@ var BaseFun = function() { @@ -409,11 +411,12 @@ var BaseFun = function() {
409 // 剔除不在高峰时间段内的班次. 411 // 剔除不在高峰时间段内的班次.
410 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , 'desc' , false); 412 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , 'desc' , false);
411 }else { 413 }else {
  414 + //continue;
412 // 单档 一个路牌一档劳动力 415 // 单档 一个路牌一档劳动力
413 if(bxlpbc[a].keepOff==1) { 416 if(bxlpbc[a].keepOff==1) {
414 // 如果低谷至少配车数大于零,则该班型下的路牌 存在一些 分班路牌,这里的分班 指的是 这个路牌先满足的前提条件就是 是单档。 417 // 如果低谷至少配车数大于零,则该班型下的路牌 存在一些 分班路牌,这里的分班 指的是 这个路牌先满足的前提条件就是 是单档。
415 - // 为了满足工时的要求,在低谷断开一段时间.  
416 - if(dgminpcs > 0) { 418 + // 为了满足工时的要求,在低谷断开一段时间.a <= dgminpcs
  419 + if(a <= dgminpcs) {
417 if( a % 2 == 0) { 420 if( a % 2 == 0) {
418 if(deletebcNum < swmaxtcbcNum || isFlag) { 421 if(deletebcNum < swmaxtcbcNum || isFlag) {
419 tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum}); 422 tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum});
@@ -433,10 +436,10 @@ var BaseFun = function() { @@ -433,10 +436,10 @@ var BaseFun = function() {
433 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , true); 436 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , true);
434 baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , true , a); 437 baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , true , a);
435 // 该班型下的路牌 不存在分班路牌. 438 // 该班型下的路牌 不存在分班路牌.
436 - }else if(dgminpcs == 0){ 439 + }else {
437 // 按规则剔除班次.不分班.路牌班次不会断开. 440 // 按规则剔除班次.不分班.路牌班次不会断开.
438 baseF.isdk02(lpbc , dataMap , saa , deletebcNum , false); 441 baseF.isdk02(lpbc , dataMap , saa , deletebcNum , false);
439 - //baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , false , a); 442 + baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , false , a);
440 } 443 }
441 // 双档 一个路牌两档劳动力 444 // 双档 一个路牌两档劳动力
442 }else if(bxlpbc[a].keepOff==2) { 445 }else if(bxlpbc[a].keepOff==2) {
@@ -459,8 +462,8 @@ var BaseFun = function() { @@ -459,8 +462,8 @@ var BaseFun = function() {
459 var markAfterGs = baseF.getSumWorkTime(tList , dataMap, saa); 462 var markAfterGs = baseF.getSumWorkTime(tList , dataMap, saa);
460 var gsDx = parseFloat((markAfterGs - bzgs).toFixed(2)); 463 var gsDx = parseFloat((markAfterGs - bzgs).toFixed(2));
461 lpbc.sort(function(m,n){return m.fcno-n.fcno}); 464 lpbc.sort(function(m,n){return m.fcno-n.fcno});
462 - if(isOff) {  
463 - if(gsDx > 1.5) { 465 + if(gsDx > 1.5) {
  466 + if(isOff) {
464 var hoursDx = parseFloat((gsDx - 1.5).toFixed(2)); 467 var hoursDx = parseFloat((gsDx - 1.5).toFixed(2));
465 // console.log(gsDx , hoursDx ,Math.ceil(hoursDx*60)); 468 // console.log(gsDx , hoursDx ,Math.ceil(hoursDx*60));
466 var minueDx = Math.ceil(hoursDx*60); 469 var minueDx = Math.ceil(hoursDx*60);
@@ -471,14 +474,15 @@ var BaseFun = function() { @@ -471,14 +474,15 @@ var BaseFun = function() {
471 lpbc.splice( (s+1) , bs*2); 474 lpbc.splice( (s+1) , bs*2);
472 }else { 475 }else {
473 lpbc.splice( s , bs*2); 476 lpbc.splice( s , bs*2);
  477 + lpbc[s-bs*2 +1].isfb = 1;
  478 + lpbc[s-bs*2 +1].STOPTIME = 0;
474 } 479 }
475 break; 480 break;
476 } 481 }
477 } 482 }
  483 + }else {
478 484
479 } 485 }
480 - }else {  
481 -  
482 } 486 }
483 }, 487 },
484 488
@@ -606,8 +610,10 @@ var BaseFun = function() { @@ -606,8 +610,10 @@ var BaseFun = function() {
606 // 判断是否在高峰时间范围.【true--表示在,false--表示不在】. 610 // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
607 if(!baseF.isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) { 611 if(!baseF.isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
608 if(order == 'asc') { 612 if(order == 'asc') {
609 - arr[a-1].isfb = isfb ? 1 : 0;  
610 - arr[a-1].STOPTIME = 0; 613 + if(a>0) {
  614 + arr[a-1].isfb = isfb ? 1 : 0;
  615 + arr[a-1].STOPTIME = 0;
  616 + }
611 }else if(order == 'desc') { 617 }else if(order == 'desc') {
612 var index_ = a + tcbcgzA[t].deletebcNum * 2; 618 var index_ = a + tcbcgzA[t].deletebcNum * 2;
613 arr[index_].STOPTIME = 0; 619 arr[index_].STOPTIME = 0;
@@ -636,6 +642,7 @@ var BaseFun = function() { @@ -636,6 +642,7 @@ var BaseFun = function() {
636 dgmaxtzsj = parseInt(map.dgmaxtzsj); 642 dgmaxtzsj = parseInt(map.dgmaxtzsj);
637 // 计算低谷最少配车数 (低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙. 643 // 计算低谷最少配车数 (低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙.
638 var dgminpcs = Math.round((dataMap.dgxxsjArr[0] + dataMap.dgxxsjArr[1] + dataMap.dgtzsj[0] + dataMap.dgtzsj[1]) / dgmaxfcjx); 644 var dgminpcs = Math.round((dataMap.dgxxsjArr[0] + dataMap.dgxxsjArr[1] + dataMap.dgtzsj[0] + dataMap.dgtzsj[1]) / dgmaxfcjx);
  645 + var zwxeLpNum = baseF.cuontZwxeLpNum(bxrclist);
639 // var dgminpcs = 4; 646 // var dgminpcs = 4;
640 // 定义返回数组. 647 // 定义返回数组.
641 var rs = new Array(); 648 var rs = new Array();
@@ -710,12 +717,23 @@ var BaseFun = function() { @@ -710,12 +717,23 @@ var BaseFun = function() {
710 avgMakerCarNum = parseInt(avgMakerCarNum / bxlpbc.length); 717 avgMakerCarNum = parseInt(avgMakerCarNum / bxlpbc.length);
711 // console.log(bxlpbc); 718 // console.log(bxlpbc);
712 // 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班. 719 // 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班.
713 - rs = rs.concat(baseF.abstractBcByWorkTime(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs , avgMakerCarNum)); 720 + rs = rs.concat(baseF.abstractBcByWorkTime(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs , avgMakerCarNum ,zwxeLpNum));
714 } 721 }
715 } 722 }
716 return rs; 723 return rs;
717 }, 724 },
718 725
  726 + cuontZwxeLpNum : function(list) {
  727 + var count = 0;
  728 + for(var c = 0 ; c<list.length;c++) {
  729 + if(list[c].type == '五工二休') {
  730 + count = list[c].fpcls;
  731 + break;
  732 + }
  733 + }
  734 + return count;
  735 + },
  736 +
719 /** 737 /**
720 * @description (TODO) 更新路牌数组的路牌名称. 738 * @description (TODO) 更新路牌数组的路牌名称.
721 * @param cara 路牌数组 739 * @param cara 路牌数组
@@ -762,7 +780,11 @@ var BaseFun = function() { @@ -762,7 +780,11 @@ var BaseFun = function() {
762 * 相同班型下的日平均工时满足 参数的日平均工时 范围在 [10分钟]内浮动. 780 * 相同班型下的日平均工时满足 参数的日平均工时 范围在 [10分钟]内浮动.
763 * 781 *
764 * 782 *
765 - * 第七步 确定吃饭时间. 783 + * 第七步 确定吃饭时间(吃时间初步定位20分钟). 一般情况下
  784 + *
  785 + * 早餐 :10:15以后到12:30之间用餐的12:30是指用餐结束时间哦.
  786 + *
  787 + * 午餐 :一般在18:00以后在19:00以前.
766 * 788 *
767 * 第八步 确定进出场、早晚例保时间. 789 * 第八步 确定进出场、早晚例保时间.
768 * 790 *
@@ -771,19 +793,17 @@ var BaseFun = function() { @@ -771,19 +793,17 @@ var BaseFun = function() {
771 BXPplaceClassesTime02 : function(saa , cara , map , seMap , dataMap) { 793 BXPplaceClassesTime02 : function(saa , cara , map , seMap , dataMap) {
772 794
773 // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数]. 795 // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
774 - var jsonArray = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap);  
775 - 796 + var allLMapBc = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap);
  797 +
776 // 第二步 纵向调整 798 // 第二步 纵向调整
777 - baseF.evenStartDepartSpace(jsonArray , dataMap); 799 + baseF.evenStartDepartSpace(allLMapBc , dataMap);
778 800
779 // 第三步 剔除首末班车以外的班次,并确认首末班车. 801 // 第三步 剔除首末班车以外的班次,并确认首末班车.
780 - var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(jsonArray , dataMap);  
781 - 802 + var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(allLMapBc , dataMap);
  803 + // return {'json':markArray,'bxrcgs':null};
782 // 第四步 横向调整 804 // 第四步 横向调整
783 baseF.resizeByPitStopTime(cara , markArray , dataMap); 805 baseF.resizeByPitStopTime(cara , markArray , dataMap);
784 -  
785 // return {'json':markArray,'bxrcgs':null}; 806 // return {'json':markArray,'bxrcgs':null};
786 -  
787 /** 807 /**
788 * 第五步 把班型合理的分配到各个路牌上. 808 * 第五步 把班型合理的分配到各个路牌上.
789 * 809 *
@@ -797,7 +817,132 @@ var BaseFun = function() { @@ -797,7 +817,132 @@ var BaseFun = function() {
797 baseF.bxAlloTotLp(list,cara); 817 baseF.bxAlloTotLp(list,cara);
798 // 第六步 抽车来满足工时. 818 // 第六步 抽车来满足工时.
799 var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map); 819 var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map);
800 - return {'json':baseF.addjcclcbc01(cara,tempA,dataMap,saa,map),'bxrcgs':null}; 820 + // return {'json':tempA,'bxrcgs':null};
  821 + // 第七步 确定吃饭时间.
  822 + baseF.markeEatTime(list , tempA , cara , saa , dataMap ,map);
  823 + baseF.resizeByPitStopTime(cara , tempA , dataMap);
  824 + baseF.updfcno01(tempA,0);
  825 + // return {'json':tempA,'bxrcgs':null};
  826 + // 确定进出场、早晚例保时间.并返回班次数组集合
  827 + return {'json':baseF.addInOutFieldBc(cara,tempA,dataMap,saa,map),'bxrcgs':null};
  828 + },
  829 +
  830 + markeEatTime : function(list , markArray , cara , saa , dataMap ,map) {
  831 + var cfddDm = parseInt(map.cfdd);
  832 + var mLen = markArray.length,cLen=cara.length,sLen =list.length ;
  833 + if(mLen<=0 || cLen<=0 || sLen<=0)
  834 + return false;
  835 + for(var c = 0 ; c<cLen ; c++) {
  836 + var lpNo=cara[c].lpNo,lpType;
  837 + for(var s = 0 ; s<sLen;s++ ) {
  838 + if(list[s].sslp[0].lpNo==lpNo) {
  839 + lpType = list[s].type;
  840 + break;
  841 + }
  842 + }
  843 + if(lpType=='五工二休')
  844 + continue;
  845 + var lpbcArray = new Array();
  846 + for(var m = 0 ; m < mLen; m++) {
  847 + if(markArray[m].lpNo==lpNo)
  848 + lpbcArray.push(markArray[m]);
  849 + }
  850 + lpbcArray.sort(function(a,b){return a.fcint - b.fcint});
  851 + baseF.isHaveBc(baseF.getDateTime('10:15') , baseF.getDateTime('12:15'),lpbcArray,cfddDm ,dataMap , cara[c] ,map, markArray, 0);
  852 + //baseF.isHaveBc(baseF.getDateTime('18:00') , baseF.getDateTime('19:00'),lpbcArray,cfddDm ,dataMap , cara[c] ,map, markArray, 1);
  853 + }
  854 + },
  855 +
  856 + isHaveBc : function(kssj , jssj , bcArray,cfddDm , dataMap , lpObj , map, markArray , cfIndex) {
  857 + var canCf = new Array(), countTzsj = 0, isLast = new Array();
  858 + for(var b = 0 ; b<bcArray.length;b++) {
  859 + var bcddsj = baseF.getDateTime(bcArray[b].ARRIVALTIME);
  860 + if(bcddsj<=jssj) {
  861 + countTzsj += bcArray[b].STOPTIME;
  862 + canCf.push(bcArray[b]);
  863 + }
  864 + /*if(bcddsj>= kssj && bcddsj<=jssj) {
  865 + countTzsj += bcArray[b].STOPTIME;
  866 + canCf.push(bcArray[b]);
  867 + }
  868 + if(bcddsj < kssj)
  869 + isLast.push(bcArray[b]);*/
  870 + }
  871 + if(canCf.length>0) {
  872 + console.log('countTzsj:' + countTzsj + 'length:' + canCf.length);
  873 + var fxDm = baseF.dirDmToIndex(canCf[canCf.length-1].xlDir);
  874 + // console.log(countTzsj , canCf[canCf.length-1].fcsj);
  875 + if(cfddDm == fxDm && canCf.length>2) {
  876 + var tzdx = canCf[canCf.length-2].STOPTIME - dataMap.zwcArr[cfIndex];
  877 + canCf[canCf.length-2].STOPTIME = tzdx >= 0 ? tzdx : 0;
  878 + var obj = baseF.getbcObj(
  879 + baseF.getDateTime(canCf[canCf.length-2].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  880 + dataMap.dira[cfddDm], canCf[canCf.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  881 + markArray.push(obj);
  882 + if(tzdx<0) {
  883 + // canCf[canCf.length-1].STOPTIME = 0;
  884 + var fcsj = baseF.getDateTime(canCf[canCf.length-2].ARRIVALTIME);
  885 + fcsj.setMinutes(fcsj.getMinutes() + canCf[canCf.length-2].STOPTIME + dataMap.zwcArr[cfIndex]);
  886 + canCf[canCf.length-1].fcsj = baseF.getTimeStr(fcsj);
  887 + fcsj.setMinutes(fcsj.getMinutes() + canCf[canCf.length-1].bcsj);
  888 + canCf[canCf.length-1].ARRIVALTIME = baseF.getTimeStr(fcsj);
  889 + }
  890 + }else {
  891 + var obj = baseF.getbcObj(
  892 + baseF.getDateTime(canCf[canCf.length-1].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  893 + dataMap.dira[cfddDm], canCf[canCf.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  894 + markArray.push(obj);
  895 +
  896 + }
  897 + }
  898 + /*if(canCf.length>0) {
  899 + var fxDm = baseF.dirDmToIndex(canCf[canCf.length-1].xlDir);
  900 + // console.log(countTzsj , canCf[canCf.length-1].fcsj);
  901 + if(cfddDm == fxDm && canCf.length>2) {
  902 + var tzdx = canCf[canCf.length-2].STOPTIME - dataMap.zwcArr[cfIndex];
  903 + canCf[canCf.length-2].STOPTIME = tzdx >= 0 ? tzdx : 0;
  904 + var obj = baseF.getbcObj(
  905 + baseF.getDateTime(canCf[canCf.length-2].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  906 + dataMap.dira[cfddDm], canCf[canCf.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  907 + markArray.push(obj);
  908 + if(tzdx<0) {
  909 + // canCf[canCf.length-1].STOPTIME = 0;
  910 + var fcsj = baseF.getDateTime(canCf[canCf.length-2].ARRIVALTIME);
  911 + fcsj.setMinutes(fcsj.getMinutes() + canCf[canCf.length-2].STOPTIME + dataMap.zwcArr[cfIndex]);
  912 + canCf[canCf.length-1].fcsj = baseF.getTimeStr(fcsj);
  913 + fcsj.setMinutes(fcsj.getMinutes() + canCf[canCf.length-1].bcsj);
  914 + canCf[canCf.length-1].ARRIVALTIME = baseF.getTimeStr(fcsj);
  915 + }
  916 + }else {
  917 + var obj = baseF.getbcObj(
  918 + baseF.getDateTime(canCf[canCf.length-1].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  919 + dataMap.dira[cfddDm], canCf[canCf.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  920 + markArray.push(obj);
  921 +
  922 + }
  923 + }else if(isLast.length>0) {
  924 + var fxDm = baseF.dirDmToIndex(isLast[isLast.length-1].xlDir);
  925 + if(cfddDm ==fxDm && canCf.length>2) {
  926 + var tzdx = canCf[canCf.length-2].STOPTIME - dataMap.zwcArr[cfIndex];
  927 + canCf[canCf.length-2].STOPTIME = tzdx >= 0 ? tzdx : 0;
  928 + var obj = baseF.getbcObj(
  929 + baseF.getDateTime(isLast[isLast.length-2].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  930 + dataMap.dira[cfddDm], isLast[isLast.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  931 + markArray.push(obj);
  932 + if(tzdx<0) {
  933 + var fcsj = baseF.getDateTime(isLast[isLast.length-2].ARRIVALTIME);
  934 + fcsj.setMinutes(fcsj.getMinutes() + isLast[isLast.length-2].STOPTIME + dataMap.zwcArr[cfIndex]);
  935 + isLast[isLast.length-1].fcsj = baseF.getTimeStr(fcsj);
  936 + fcsj.setMinutes(fcsj.getMinutes() +isLast[isLast.length-1].bcsj);
  937 + isLast[isLast.length-1].ARRIVALTIME = baseF.getTimeStr(fcsj);
  938 + }
  939 + }else {
  940 + var obj = baseF.getbcObj(
  941 + baseF.getDateTime(isLast[isLast.length-1].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  942 + dataMap.dira[cfddDm], isLast[isLast.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  943 + markArray.push(obj);
  944 + }
  945 + }*/
801 }, 946 },
802 947
803 /** 948 /**
@@ -930,12 +1075,13 @@ var BaseFun = function() { @@ -930,12 +1075,13 @@ var BaseFun = function() {
930 var lLen = list.length , cLen = clzs.length; 1075 var lLen = list.length , cLen = clzs.length;
931 if(lLen<= 0 || cLen<=0 ) 1076 if(lLen<= 0 || cLen<=0 )
932 return false; 1077 return false;
933 - // 最多车次与总车次的比例.  
934 - var blnum = Math.round(cLen/list[0].fpcls); 1078 + list.sort(function(a,b){return a.fpcls-b.fpcls});
935 // 定义已经分配出去的路牌. 1079 // 定义已经分配出去的路牌.
936 var rs = new Array(); 1080 var rs = new Array();
937 // 遍历 1081 // 遍历
938 for(var r = 0 ; r < lLen ; r++) { 1082 for(var r = 0 ; r < lLen ; r++) {
  1083 + // 车次与总车次的比例.
  1084 + var blnum = Math.round(cLen/list[r].fpcls);
939 // 得到没有分配出去的路牌. 1085 // 得到没有分配出去的路牌.
940 var dxa = baseF.chaji_array(clzs,rs); 1086 var dxa = baseF.chaji_array(clzs,rs);
941 // 定义当前车次数. 1087 // 定义当前车次数.
@@ -943,29 +1089,32 @@ var BaseFun = function() { @@ -943,29 +1089,32 @@ var BaseFun = function() {
943 // 定义记录当前分割路牌的次数下标.分配到班型车次下的路牌数组. 1089 // 定义记录当前分割路牌的次数下标.分配到班型车次下的路牌数组.
944 var index = 0 , sslp = new Array(); 1090 var index = 0 , sslp = new Array();
945 // 当前车次所有占比例. 1091 // 当前车次所有占比例.
946 - var tempint = parseInt(rsnum/blnum); 1092 + //var tempint = parseInt(rsnum/blnum);
947 // 判断如果比例小1 则为当前车次数. 1093 // 判断如果比例小1 则为当前车次数.
948 - blnum = tempint <= 1 ? rsnum : blnum; 1094 + //blnum = tempint <= 1 ? rsnum : blnum;
949 // 判断当前班型车次数组下标值.如果为倒数第二个或者之前. 1095 // 判断当前班型车次数组下标值.如果为倒数第二个或者之前.
950 if(r < lLen-1) { 1096 if(r < lLen-1) {
951 // 遍历 1097 // 遍历
952 - for(var c = 0 ; c < tempint ; c++) { 1098 + for(var c = 0 ; c < rsnum ; c++) {
953 // 创建新的没有分配出去的路牌数组. 1099 // 创建新的没有分配出去的路牌数组.
954 var temp = dxa.concat(); 1100 var temp = dxa.concat();
955 // 创建切割路牌数组. 1101 // 创建切割路牌数组.
956 var tagA = new Array(); 1102 var tagA = new Array();
957 // 判断切割的下标值是否小于等于路牌数组的倒数第二个或者之前. 1103 // 判断切割的下标值是否小于等于路牌数组的倒数第二个或者之前.
958 if(index <= (dxa.length-blnum) ) { 1104 if(index <= (dxa.length-blnum) ) {
959 - tagA = temp.splice(index,blnum); 1105 + /*tagA = temp.splice(index,blnum);*/
  1106 + tagA = temp.splice(index,1);
960 }else { 1107 }else {
961 - tagA = temp.splice((dxa.length-blnum),blnum); 1108 + /*tagA = temp.splice((dxa.length-blnum),blnum);*/
  1109 + tagA = temp.splice((dxa.length-blnum),1);
962 } 1110 }
963 // 组合切割路牌数组.赋值给已分配出去的路牌. 1111 // 组合切割路牌数组.赋值给已分配出去的路牌.
964 rs = rs.concat(tagA); 1112 rs = rs.concat(tagA);
965 // 赋值给分配到班型车次下的路牌数组. 1113 // 赋值给分配到班型车次下的路牌数组.
966 sslp = sslp.concat(tagA); 1114 sslp = sslp.concat(tagA);
967 // 记录切割下标. 1115 // 记录切割下标.
968 - index = index + 1 + blnum; 1116 + index = index + blnum;
  1117 + // index = index + blnum;
969 } 1118 }
970 // 分配到班型车次下的路牌数组. 1119 // 分配到班型车次下的路牌数组.
971 list[r].sslp = sslp; 1120 list[r].sslp = sslp;
@@ -1084,6 +1233,7 @@ var BaseFun = function() { @@ -1084,6 +1233,7 @@ var BaseFun = function() {
1084 if(len_>0 && bcCount > 0) { 1233 if(len_>0 && bcCount > 0) {
1085 // 定义该时间区间内的发车间隙. 1234 // 定义该时间区间内的发车间隙.
1086 var _fcjx = parseInt(Math.ceil(zzsj/bcCount)); 1235 var _fcjx = parseInt(Math.ceil(zzsj/bcCount));
  1236 + console.log(_fcjx);
1087 if(tagboolean) { 1237 if(tagboolean) {
1088 if(_fcjx>gfmaxfcjx) 1238 if(_fcjx>gfmaxfcjx)
1089 _fcjx = 20; 1239 _fcjx = 20;
@@ -1091,7 +1241,6 @@ var BaseFun = function() { @@ -1091,7 +1241,6 @@ var BaseFun = function() {
1091 if(_fcjx>dgmaxfcjx) 1241 if(_fcjx>dgmaxfcjx)
1092 _fcjx = dgmaxfcjx; 1242 _fcjx = dgmaxfcjx;
1093 } 1243 }
1094 - // console.log(_fcjx);  
1095 // 定义修改班次的起始时间点. 1244 // 定义修改班次的起始时间点.
1096 var fcnosj = new Date(kssj); 1245 var fcnosj = new Date(kssj);
1097 for(var l = 0 ; l< len_ ; l++) { 1246 for(var l = 0 ; l< len_ ; l++) {
@@ -1154,8 +1303,10 @@ var BaseFun = function() { @@ -1154,8 +1303,10 @@ var BaseFun = function() {
1154 var sslpbcA = new Array(); 1303 var sslpbcA = new Array();
1155 for(var j =0 ; j < tLen ; j++) { 1304 for(var j =0 ; j < tLen ; j++) {
1156 // 判断当期遍历的班次是否属于当前的路牌.如果是则添加到当前的路牌班次数组集合. 1305 // 判断当期遍历的班次是否属于当前的路牌.如果是则添加到当前的路牌班次数组集合.
1157 - if(tempa[j].lpNo == cara[t].lpNo) 1306 + if(tempa[j].lpNo == cara[t].lpNo) {
  1307 + tempa[j].fcint = baseF.getDateTime(tempa[j].fcsj).getTime();
1158 sslpbcA.push(tempa[j]); 1308 sslpbcA.push(tempa[j]);
  1309 + }
1159 } 1310 }
1160 if(sslpbcA.length > 0) { 1311 if(sslpbcA.length > 0) {
1161 // 按发车时间顺序排序. 1312 // 按发车时间顺序排序.
@@ -1166,10 +1317,10 @@ var BaseFun = function() { @@ -1166,10 +1317,10 @@ var BaseFun = function() {
1166 var sgbcfcsj = baseF.getDateTime(sslpbcA[r+1].fcsj), 1317 var sgbcfcsj = baseF.getDateTime(sslpbcA[r+1].fcsj),
1167 dqbcddsj = baseF.getDateTime(sslpbcA[r].ARRIVALTIME), 1318 dqbcddsj = baseF.getDateTime(sslpbcA[r].ARRIVALTIME),
1168 dqbcfcsj = baseF.getDateTime(sslpbcA[r].fcsj); 1319 dqbcfcsj = baseF.getDateTime(sslpbcA[r].fcsj);
  1320 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  1321 + var cctag = baseF.dirDmToIndex(sslpbcA[r].xlDir); // dataMap.smbcsjArr
1169 // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.) 1322 // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.)
1170 var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000); 1323 var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
1171 - // 定义当前班次方向下标代码[0代表上行;1代表下行].  
1172 - var cctag = baseF.dirDmToIndex(sslpbcA[r].xlDir);  
1173 // 定义是否高峰 1324 // 定义是否高峰
1174 var flag = baseF.isPeakTimeScope(dqbcfcsj , dataMap); 1325 var flag = baseF.isPeakTimeScope(dqbcfcsj , dataMap);
1175 // 获取行驶时间. 1326 // 获取行驶时间.
@@ -1178,40 +1329,75 @@ var BaseFun = function() { @@ -1178,40 +1329,75 @@ var BaseFun = function() {
1178 baseF.dirDmToIndex(sslpbcA[r].xlDir)); 1329 baseF.dirDmToIndex(sslpbcA[r].xlDir));
1179 normmintzsj = xxsj*0.1; 1330 normmintzsj = xxsj*0.1;
1180 normmaxtzsj = xxsj*0.15; 1331 normmaxtzsj = xxsj*0.15;
  1332 + var flag = false;
1181 // 如果小于零 1333 // 如果小于零
1182 - if(dxmin <= 0 && sslpbcA[r].isfb ==0 ) { 1334 + if(dxmin < 0 && sslpbcA[r].isfb ==0) {
1183 // 根据不同时段的停站时间.重新赋值停站时间. 1335 // 根据不同时段的停站时间.重新赋值停站时间.
1184 - dxmin = flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag]; 1336 + if(sslpbcA[r].bcType=='normal' && sslpbcA[r+1].bcType =='normal')
  1337 + dxmin = flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  1338 + else
  1339 + dxmin = 0;
  1340 + flag = true;
  1341 + }else if(dxmin==0){
  1342 + dxmin = 0;
  1343 + flag = true;
1185 }else { 1344 }else {
1186 // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间. 1345 // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
1187 - if(dxmin >= dgmaxtzsj && dxmin < 180) { 1346 + if(dxmin >= dgmaxtzsj && dxmin < 180 && sslpbcA[r].isfb==0) {
1188 dxmin = dgmaxtzsj; 1347 dxmin = dgmaxtzsj;
  1348 + flag = true;
1189 // 如果大于零 并且 小于等于行业标准的最小停站时间 1349 // 如果大于零 并且 小于等于行业标准的最小停站时间
1190 }else if(dxmin > 0 && dxmin <= normmintzsj ) { 1350 }else if(dxmin > 0 && dxmin <= normmintzsj ) {
1191 // dxmin = dxmin; 1351 // dxmin = dxmin;
  1352 + flag = true;
1192 // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间 1353 // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
1193 }else if(dxmin > normmintzsj && dxmin <= normmaxtzsj ) { 1354 }else if(dxmin > normmintzsj && dxmin <= normmaxtzsj ) {
1194 // dxmin = dxmin; 1355 // dxmin = dxmin;
  1356 + flag = true;
1195 // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间 1357 // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
1196 }else if(dxmin > normmaxtzsj && dxmin < dgmaxtzsj ) { 1358 }else if(dxmin > normmaxtzsj && dxmin < dgmaxtzsj ) {
1197 // dxmin = dxmin; 1359 // dxmin = dxmin;
  1360 + flag = true;
  1361 + }else if (dxmin >= 180){
  1362 + dxmin = 0;
  1363 + }
  1364 + }
  1365 + if(flag) {
  1366 + if(!baseF.isDirSmbc(baseF.dirDmToIndex(sslpbcA[r+1].xlDir) , sslpbcA[r+1].fcsj , dataMap)) {
  1367 + // 修改当前班次的停站时间.
  1368 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1369 + // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
  1370 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
  1371 + // 修改下一个班次的发车时间.
  1372 + sslpbcA[r+1].fcsj = baseF.getTimeStr(dqbcddsj);
  1373 + // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
  1374 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
  1375 + // 修改下一个班次的到达时间.
  1376 + sslpbcA[r+1].ARRIVALTIME = baseF.getTimeStr(dqbcddsj);
  1377 + }else {
  1378 + if(r>0) {
  1379 + // 修改当前班次的停站时间.
  1380 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1381 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].STOPTIME);
  1382 + sslpbcA[r].ARRIVALTIME = baseF.getTimeStr(sgbcfcsj);
  1383 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].bcsj);
  1384 + sslpbcA[r].fcsj = baseF.getTimeStr(sgbcfcsj);
  1385 + sslpbcA[r-1].STOPTIME = parseInt( ( sgbcfcsj - baseF.getDateTime(sslpbcA[r-1].ARRIVALTIME))/60000);
  1386 + }
1198 } 1387 }
1199 } 1388 }
1200 - // 修改当前班次的停站时间.  
1201 - sslpbcA[r].STOPTIME = parseInt(dxmin) ;  
1202 - // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.  
1203 - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);  
1204 - // 修改下一个班次的发车时间.  
1205 - sslpbcA[r+1].fcsj = baseF.getTimeStr(dqbcddsj);  
1206 - // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.  
1207 - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);  
1208 - // 修改下一个班次的到达时间.  
1209 - sslpbcA[r+1].ARRIVALTIME = baseF.getTimeStr(dqbcddsj);  
1210 } 1389 }
1211 } 1390 }
1212 } 1391 }
1213 }, 1392 },
1214 1393
  1394 + isDirSmbc : function(dirDm , fcsj , dataMap) {
  1395 + var falg = false;
  1396 + if(fcsj == dataMap.smbcsjArr[dirDm].kssj || fcsj == dataMap.smbcsjArr[dirDm].jssj)
  1397 + falg = true;
  1398 + return falg;
  1399 + },
  1400 +
1215 BXPplaceClassesTime01 : function(saa,cara,map,seMap,dataMap,lpNoA) { 1401 BXPplaceClassesTime01 : function(saa,cara,map,seMap,dataMap,lpNoA) {
1216 var jsonArray = baseF.plgfbc(saa,cara,map,seMap,dataMap); 1402 var jsonArray = baseF.plgfbc(saa,cara,map,seMap,dataMap);
1217 var list = baseF.splitBxRc(map.bxrc); 1403 var list = baseF.splitBxRc(map.bxrc);
@@ -1297,10 +1483,19 @@ var BaseFun = function() { @@ -1297,10 +1483,19 @@ var BaseFun = function() {
1297 dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj,dataMap);*/ 1483 dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj,dataMap);*/
1298 var rsjar = baseF.tzsztest(cara,jar3,dataMap); 1484 var rsjar = baseF.tzsztest(cara,jar3,dataMap);
1299 // return {'json':rsjar,'bxrcgs':bxrcgs}; 1485 // return {'json':rsjar,'bxrcgs':bxrcgs};
1300 - return {'json':baseF.addjcclcbc01(cara,rsjar,dataMap,saa,map),'bxrcgs':bxrcgs}; 1486 + return {'json':baseF.addInOutFieldBc(cara,rsjar,dataMap,saa,map),'bxrcgs':bxrcgs};
1301 }, 1487 },
1302 1488
1303 - addjcclcbc01 : function(cara,rsjar,dataMap,saa,map) { 1489 + /**
  1490 + * @description (TODO) 添加进出场班次.
  1491 + * @param cara 路牌
  1492 + * @param rsjar 班次集合数组
  1493 + * @param dataMap dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  1494 + * @param saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等.
  1495 + * @param map 表单参数对象.
  1496 + *
  1497 + */
  1498 + addInOutFieldBc : function(cara,rsjar,dataMap,saa,map) {
1304 var resultJA = new Array(),bcs = 0; 1499 var resultJA = new Array(),bcs = 0;
1305 for(var m = 0 ; m < cara.length; m++) { 1500 for(var m = 0 ; m < cara.length; m++) {
1306 // 获取路牌编号. 1501 // 获取路牌编号.
@@ -1319,7 +1514,7 @@ var BaseFun = function() { @@ -1319,7 +1514,7 @@ var BaseFun = function() {
1319 lpbc_.sort(function(a,b){return a.fcno-b.fcno}); 1514 lpbc_.sort(function(a,b){return a.fcno-b.fcno});
1320 baseF.addcfbc01(lpbc_,dataMap,map); 1515 baseF.addcfbc01(lpbc_,dataMap,map);
1321 // 按照发车序号顺序排序. 1516 // 按照发车序号顺序排序.
1322 - // lpbc_.sort(function(a,b){return a.fcno-b.fcno}); 1517 + lpbc_.sort(function(a,b){return a.fcno-b.fcno});
1323 var tt = baseF.addjclbbc01(lpbc_,dataMap,saa[0].lbsj,map); 1518 var tt = baseF.addjclbbc01(lpbc_,dataMap,saa[0].lbsj,map);
1324 bcs = baseF.updfcno01(tt,bcs); 1519 bcs = baseF.updfcno01(tt,bcs);
1325 resultJA = resultJA.concat(tt); 1520 resultJA = resultJA.concat(tt);
@@ -1344,8 +1539,8 @@ var BaseFun = function() { @@ -1344,8 +1539,8 @@ var BaseFun = function() {
1344 addcfbc01 : function(lpbcar,dataMap,map) { 1539 addcfbc01 : function(lpbcar,dataMap,map) {
1345 var gs = 0 ,sicftag = true; 1540 var gs = 0 ,sicftag = true;
1346 for(var g = 0 ; g <lpbcar.length-1;g++ ) { 1541 for(var g = 0 ; g <lpbcar.length-1;g++ ) {
1347 - if( parseInt((baseF.getDateTime(lpbcar[g+1].fcsj) - baseF.getDateTime(lpbcar[g].ARRIVALTIME))/60000) > 80  
1348 - && lpbcar[g].STOPTIME==0 ) { 1542 + if( parseInt((baseF.getDateTime(lpbcar[g+1].fcsj) - baseF.getDateTime(lpbcar[g].ARRIVALTIME))/60000) > 180
  1543 + && lpbcar[g].STOPTIME==0 && lpbcar[g].bcType =='normal' ) {
1349 lpbcar[g].isfb = 1; 1544 lpbcar[g].isfb = 1;
1350 } 1545 }
1351 /*gs = gs + lpbcar[g].bcsj + lpbcar[g].STOPTIME; 1546 /*gs = gs + lpbcar[g].bcsj + lpbcar[g].STOPTIME;
@@ -1767,25 +1962,7 @@ var BaseFun = function() { @@ -1767,25 +1962,7 @@ var BaseFun = function() {
1767 dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.out, 1962 dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.out,
1768 dataMap.dira[fxdm],2,dataMap.cclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 出场班次 1963 dataMap.dira[fxdm],2,dataMap.cclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 出场班次
1769 fcno ++; 1964 fcno ++;
1770 - }/*else if(b > 0 && b < bc.length-1){  
1771 - var jcbckssj = baseF.getDateTime(bc[b].ARRIVALTIME)  
1772 - var ccbckssj = baseF.getDateTime(bc[b+1].fcsj)  
1773 - var dx = parseInt((ccbckssj - jcbckssj)/60000);  
1774 - if(bc[b].STOPTIME==0) {  
1775 - // bc[b].STOPTIME = 0;  
1776 - //console.log(bc[b].fcno);  
1777 - var fcno_ = bc[b].fcno + 2;  
1778 - stas = true;  
1779 - // console.log(bc[b],bc[b+1],b);  
1780 - result.push(baseF.getbcObj(  
1781 - jcbckssj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_,  
1782 - dataMap.dira[fxdm],fcno_++,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次  
1783 - var ccfx = baseF.dirDmToIndex(bc[b+1].xlDir);  
1784 - result.push(baseF.getbcObj(  
1785 - ccbckssj,dataMap.ccsjArr[ccfx],car,dataMap.bcTypeArr.out,  
1786 - dataMap.dira[ccfx],fcno_++,dataMap.cclcArr[ccfx],gatps,0,dataMap.qdzArr[ccfx],null,null,0,0));// 出场班次  
1787 - }  
1788 - }*/else if(b==bc.length-1){ 1965 + }else if(b==bc.length-1){
1789 var fcno_ = dxfno + 2; 1966 var fcno_ = dxfno + 2;
1790 var qdbcddsj = baseF.getDateTime(bc[b].ARRIVALTIME); 1967 var qdbcddsj = baseF.getDateTime(bc[b].ARRIVALTIME);
1791 result.push(baseF.getbcObj( 1968 result.push(baseF.getbcObj(
src/main/resources/static/pages/base/timesmodel/js/d3.relationshipgraph.js
@@ -968,7 +968,7 @@ var RelationshipGraph = function () { @@ -968,7 +968,7 @@ var RelationshipGraph = function () {
968 for(var z = 0 ;z < tza.length;z++) { 968 for(var z = 0 ;z < tza.length;z++) {
969 if(tza[z].lpNo == lpNo && tza[z].bcsj >0 ) { 969 if(tza[z].lpNo == lpNo && tza[z].bcsj >0 ) {
970 timeNum = timeNum + tza[z].bcsj + tza[z].STOPTIME; 970 timeNum = timeNum + tza[z].bcsj + tza[z].STOPTIME;
971 - if( tza[z].bcType !='bd' && tza[z].bcType !='lc' ) { 971 + if( tza[z].bcType !='bd' && tza[z].bcType !='lc' && tza[z].bcType !='cf') {
972 tempNum ++; 972 tempNum ++;
973 } 973 }
974 } 974 }
@@ -983,32 +983,6 @@ var RelationshipGraph = function () { @@ -983,32 +983,6 @@ var RelationshipGraph = function () {
983 $(textNodes[1]).text("总班次:"+(tempNum)); 983 $(textNodes[1]).text("总班次:"+(tempNum));
984 // $_this.pptjbx($("."+className).children("rect")[2],zgs*1,lpNo,$_this); 984 // $_this.pptjbx($("."+className).children("rect")[2],zgs*1,lpNo,$_this);
985 } 985 }
986 - /*for(var a=0;a<array.length;a++) {  
987 - debugger;  
988 - var tempNum = 0,timeNum = 0,lpNo = '';  
989 - for(var g = 0 ; g <gdata.length;g++) {  
990 - var temp_i = parseInt(d3.select(gdata[g]).attr('y'))-this.configuration.offsetY;  
991 - if(temp_i<array[a] && temp_i>minValue) {  
992 - var parentNodeCName = d3.select(gdata[g]).attr('id'),  
993 - // nodes = d3.selectAll('text[parent-node='+ parentNodeCName +']')[0]  
994 - $_d = d3.select(gdata[g]).data()[0];  
995 - lpNo = $_d.lpNo;  
996 - timeNum = timeNum + parseInt($_d.STOPTIME) + parseInt($_d.bcsj);  
997 - if($_d.bcType!='bd' && $_d.bcType!='lc' && $_d.bcType!='cf' && $_d.bcsj>0)  
998 - tempNum++;  
999 - }  
1000 - }  
1001 - minValue = array[a];  
1002 - var className = 'statis_container_' + array[a];  
1003 - var textNodes = $("."+className).children("text");  
1004 - var hours = parseInt(timeNum/60);  
1005 - var mimus = timeNum%60,zgs = hours + (mimus==0? "": "." + mimus);  
1006 - var zgs = parseFloat((timeNum/60).toFixed(2));  
1007 - var zgs = timeNum;  
1008 - $(textNodes[0]).text("总工时:" + zgs);  
1009 - $(textNodes[1]).text("总班次:"+(tempNum));  
1010 - $_this.pptjbx($("."+className).children("rect")[2],zgs*1,lpNo,$_this);  
1011 - }*/  
1012 } 986 }
1013 987
1014 }, { 988 }, {
@@ -3027,7 +3001,9 @@ var RelationshipGraph = function () { @@ -3027,7 +3001,9 @@ var RelationshipGraph = function () {
3027 nowDate.setMinutes(parseInt(tm.min)+d.bcsj);// 10.3.1、设置分钟. 3001 nowDate.setMinutes(parseInt(tm.min)+d.bcsj);// 10.3.1、设置分钟.
3028 // 9.1.4、修改当前班次的到达时间. 3002 // 9.1.4、修改当前班次的到达时间.
3029 d.ARRIVALTIME = BaseFun.getTimeStr(nowDate); 3003 d.ARRIVALTIME = BaseFun.getTimeStr(nowDate);
3030 - d.STOPTIME = d.isfb ==1 ? 0 : parseInt((BaseFun.getDateTime(nodeContext.nextData.fcsj) - BaseFun.getDateTime(d.ARRIVALTIME))/ 60000); 3004 + d.STOPTIME = d.isfb == 1 ? 0 : parseInt((BaseFun.getDateTime(nodeContext.nextData.fcsj) - BaseFun.getDateTime(d.ARRIVALTIME))/ 60000);
  3005 + // parseInt((BaseFun.getDateTime(nodeContext.nextData.fcsj) - BaseFun.getDateTime(d.ARRIVALTIME))/ 60000)
  3006 +
3031 /** 3007 /**
3032 * 9.2、修改元素沿X轴方向的X坐标属性值. 3008 * 9.2、修改元素沿X轴方向的X坐标属性值.
3033 * 3009 *
@@ -3144,6 +3120,38 @@ var RelationshipGraph = function () { @@ -3144,6 +3120,38 @@ var RelationshipGraph = function () {
3144 } 3120 }
3145 } 3121 }
3146 }else { 3122 }else {
  3123 + var dataMap = $_GlobalGraph.configuration.dataMap;
  3124 + // 定义是否高峰
  3125 + var flag = BaseFun.isPeakTimeScope(BaseFun.getDateTime(nodeContext.lastData.fcsj) , dataMap);
  3126 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  3127 + var cctag = BaseFun.dirDmToIndex(nodeContext.lastData.xlDir);
  3128 + // 获取行驶时间.
  3129 + var xxsj = BaseFun.getByDirTravelTime(dataMap.zgfsjd , dataMap.wgfsjd , nowDate, dataMap.pcxssjArr , dataMap.gfxxsjArr , cctag);
  3130 + var normmintzsj = xxsj*0.1,normmaxtzsj = xxsj*0.15;
  3131 + // 如果小于零
  3132 + if(dxMinues <= 0 && nodeContext.lastData.isfb ==0 ) {
  3133 + // 根据不同时段的停站时间.重新赋值停站时间.
  3134 + dxmin = flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  3135 + }else {
  3136 + // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
  3137 + if(dxMinues >= dataMap.dgmaxtzsj && dxMinues < 180) {
  3138 + dxMinues = dataMap.dgmaxtzsj;
  3139 + // 如果大于零 并且 小于等于行业标准的最小停站时间
  3140 + }else if(dxMinues > 0 && dxMinues <= normmintzsj ) {
  3141 + // dxmin = dxmin;
  3142 + // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
  3143 + }else if(dxMinues > normmintzsj && dxMinues <= normmaxtzsj ) {
  3144 + // dxmin = dxmin;
  3145 + // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
  3146 + }else if(dxMinues > normmaxtzsj && dxMinues < dataMap.dgmaxtzsj ) {
  3147 + // dxmin = dxmin;
  3148 + }else if (dxMinues >= 180){
  3149 + dxMinues = 0;
  3150 + }
  3151 + }
  3152 + // 修改当前班次的停站时间.
  3153 + // nodeContext.lastData.STOPTIME = dxMinues;
  3154 + // d.STOPTIME = parseInt(dxmin) ;
3147 /** 3155 /**
3148 * 11.2.1、如果是正常班次 3156 * 11.2.1、如果是正常班次
3149 * 3157 *
@@ -3370,11 +3378,41 @@ var RelationshipGraph = function () { @@ -3370,11 +3378,41 @@ var RelationshipGraph = function () {
3370 } 3378 }
3371 } 3379 }
3372 }else { 3380 }else {
  3381 + var dxMinues = parseInt((BaseFun.getDateTime(d.fcsj) - BaseFun.getDateTime(_obj.lastData.ARRIVALTIME)) / 60000);
3373 /** 3382 /**
3374 * 1.5.6、修改上个元素班次与当前班次的停站时间和text元素的文本属性值. 3383 * 1.5.6、修改上个元素班次与当前班次的停站时间和text元素的文本属性值.
3375 * 3384 *
3376 **/ 3385 **/
3377 - _obj.lastData.STOPTIME = parseInt((BaseFun.getDateTime(d.fcsj) - BaseFun.getDateTime(_obj.lastData.ARRIVALTIME)) / 60000); 3386 + var dataMap = $_GlobalGraph.configuration.dataMap;
  3387 + // 定义是否高峰
  3388 + var flag = BaseFun.isPeakTimeScope(BaseFun.getDateTime(nodeContext.lastData.fcsj) , dataMap);
  3389 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  3390 + var cctag = BaseFun.dirDmToIndex(nodeContext.lastData.xlDir);
  3391 + // 获取行驶时间.
  3392 + var xxsj = BaseFun.getByDirTravelTime(dataMap.zgfsjd , dataMap.wgfsjd , nowDate, dataMap.pcxssjArr , dataMap.gfxxsjArr , cctag);
  3393 + var normmintzsj = xxsj*0.1,normmaxtzsj = xxsj*0.15;
  3394 + // 如果小于零
  3395 + if(dxMinues <= 0 && nodeContext.lastData.isfb ==0 ) {
  3396 + // 根据不同时段的停站时间.重新赋值停站时间.
  3397 + dxmin = flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  3398 + }else {
  3399 + // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
  3400 + if(dxMinues >= dataMap.dgmaxtzsj && dxMinues < 180) {
  3401 + dxMinues = dataMap.dgmaxtzsj;
  3402 + // 如果大于零 并且 小于等于行业标准的最小停站时间
  3403 + }else if(dxMinues > 0 && dxMinues <= normmintzsj ) {
  3404 + // dxmin = dxmin;
  3405 + // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
  3406 + }else if(dxMinues > normmintzsj && dxMinues <= normmaxtzsj ) {
  3407 + // dxmin = dxmin;
  3408 + // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
  3409 + }else if(dxMinues > normmaxtzsj && dxMinues < dataMap.dgmaxtzsj ) {
  3410 + // dxmin = dxmin;
  3411 + }else if (dxMinues >= 180){
  3412 + dxMinues = 0;
  3413 + }
  3414 + }
  3415 + _obj.lastData.STOPTIME = dxMinues;
3378 for(var t = 0 ; t < _obj.lastTextNodes.length ;t++) { 3416 for(var t = 0 ; t < _obj.lastTextNodes.length ;t++) {
3379 var nowTextNode = d3.select(_obj.lastTextNodes[t]); 3417 var nowTextNode = d3.select(_obj.lastTextNodes[t]);
3380 if(nowTextNode.attr('text-type')=='gap') 3418 if(nowTextNode.attr('text-type')=='gap')
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -420,7 +420,8 @@ @@ -420,7 +420,8 @@
420 * @return 返回甘特图的参数配置信息. 420 * @return 返回甘特图的参数配置信息.
421 * */ 421 * */
422 function getGraphArgus(p) { 422 function getGraphArgus(p) {
423 - var MULTIPLE = Math.round(105/parseInt(p.stopAraay[0].sxsj)) >=4 ? Math.round(90/parseInt(p.stopAraay[0].sxsj)) : Math.round(90/parseInt(p.stopAraay[0].sxsj)) *2; 423 + var bs = p.stopAraay[0].sxsj > 40 ? 4 : 2;
  424 + var MULTIPLE = Math.round(105/parseInt(p.stopAraay[0].sxsj)) >3 ? Math.round(90/parseInt(p.stopAraay[0].sxsj)) : Math.round(90/parseInt(p.stopAraay[0].sxsj)) *bs;
424 var VALUEKEYNAME = 'Worldwide Gross' , 425 var VALUEKEYNAME = 'Worldwide Gross' ,
425 DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240, 426 DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240,
426 MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60, 427 MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60,
src/main/resources/static/pages/forms/mould/countByBus1.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/countByBus2.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/mould/countByLine.xls 0 → 100644
No preview for this file type
src/main/resources/static/pages/forms/statement/scheduleDaily.html
@@ -70,7 +70,7 @@ word-wrap: break-word; @@ -70,7 +70,7 @@ word-wrap: break-word;
70 <table class="table table-bordered table-hover table-checkable" id="forms"> 70 <table class="table table-bordered table-hover table-checkable" id="forms">
71 <thead> 71 <thead>
72 <tr> 72 <tr>
73 - <th colspan="40">线路调度日报</th> 73 + <th colspan="40"><lable id="xlmc"></lable>线路调度日报</th>
74 </tr> 74 </tr>
75 <tr> 75 <tr>
76 <td rowspan="3"><span >路线名</span></td> 76 <td rowspan="3"><span >路线名</span></td>
@@ -407,6 +407,7 @@ word-wrap: break-word; @@ -407,6 +407,7 @@ word-wrap: break-word;
407 layer.msg("请选择时间"); 407 layer.msg("请选择时间");
408 return; 408 return;
409 } 409 }
  410 + $("#xlmc").html(xlName);
410 $("#ddrbBody").height($(window).height()-100); 411 $("#ddrbBody").height($(window).height()-100);
411 $("c").html("全日"); 412 $("c").html("全日");
412 $("#export").removeAttr("disabled"); 413 $("#export").removeAttr("disabled");
src/main/resources/static/pages/scheduleApp/Gruntfile.js
@@ -87,7 +87,8 @@ module.exports = function (grunt) { @@ -87,7 +87,8 @@ module.exports = function (grunt) {
87 'module/common/dts2/bcGroup/saBcgroup.js', // 班次选择整合指令 87 'module/common/dts2/bcGroup/saBcgroup.js', // 班次选择整合指令
88 'module/common/dts2/ttinfotable/saTimeTable.js', // 时刻表显示指令 88 'module/common/dts2/ttinfotable/saTimeTable.js', // 时刻表显示指令
89 'module/common/dts2/scheduleplan/saScpdate.js', // saScpdate指令(非通用指令,只在排版计划form中使用) 89 'module/common/dts2/scheduleplan/saScpdate.js', // saScpdate指令(非通用指令,只在排版计划form中使用)
90 - 'module/common/dts2/scheduleplan/saPlaninfoedit.js' // saPlaninfoedit指令(非通用指令,只在调度执勤日报中使用) 90 + 'module/common/dts2/scheduleplan/saPlaninfoedit.js', // saPlaninfoedit指令(非通用指令,只在调度执勤日报中使用)
  91 + 'module/common/dts2/scheduleplan/saPlaninfoedit2.js' // saPlaninfoedit2指令(非通用指令,只在调度执勤日报中使用)
91 ], 92 ],
92 dest: 'module/common/prj-common-directive.js' 93 dest: 'module/common/prj-common-directive.js'
93 }, 94 },
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect5.js
@@ -196,8 +196,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -196,8 +196,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
196 */ 196 */
197 scope[ctrlAs].$$internal_validate_model = function() { 197 scope[ctrlAs].$$internal_validate_model = function() {
198 // TODO: 198 // TODO:
199 - console.log(scope[ctrlAs].$$internal_select_value);  
200 - console.log(scope[ctrlAs].$$data_real); 199 + //console.log(scope[ctrlAs].$$internal_select_value);
  200 + //console.log(scope[ctrlAs].$$data_real);
201 201
202 if (scope[ctrlAs].$$internal_select_value) { 202 if (scope[ctrlAs].$$internal_select_value) {
203 var select_value_temp = scope[ctrlAs].$$internal_select_value; 203 var select_value_temp = scope[ctrlAs].$$internal_select_value;
src/main/resources/static/pages/scheduleApp/module/common/dts2/scheduleplan/saPlanInfoEdit2.js 0 → 100644
  1 +/**
  2 + * saPlaninfoedit2指令,排班明细编辑控件,用在调度执勤日报的修改功能
  3 + * name(必须),控件的名字
  4 + * ds,外部数据源
  5 + * fd, 表单数据源
  6 + */
  7 +angular.module('ScheduleApp').directive(
  8 + 'saPlaninfoedit2',
  9 + [
  10 + function() {
  11 + return {
  12 + restrict: 'E',
  13 + templateUrl: '/pages/scheduleApp/module/common/dts2/scheduleplan/saPlaninfoeditTemplate.html',
  14 + scope: { // 独立作用域
  15 + ds: '=ngModel', // 时刻明细数据源头
  16 + fd: '=formData' // 表单数据源(车辆、驾驶员、售票员信息)
  17 + },
  18 + controllerAs: '$saPlanInfoEditCtrl',
  19 + bindToController: true,
  20 + controller: function() {
  21 + //var self = this;
  22 +
  23 + },
  24 +
  25 + compile: function(tElem, tAttrs) {
  26 + // 获取属性
  27 + var $attr_name = tAttrs["name"]; // 控件的名字
  28 + if (!$attr_name) {
  29 + throw {msg: "saPlaninfoedit2指令name属性不能为空"};
  30 + }
  31 +
  32 + // 内部controlAs名字
  33 + var ctrlAs = '$saPlanInfoEditCtrl';
  34 +
  35 +
  36 + // 内部变量,原始车辆,人员数据
  37 + var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组
  38 + var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组
  39 + var old_s = {}; // key:{售票员id_姓名_工号}, value:所在list下标数组
  40 + var old_isfb = false; // 是否有分班
  41 + var old_isfb_index = 0; // 分班开始索引
  42 + var old_hasJCBC = false; // 是否有进场班次
  43 + var old_max_fcno = 0; // 最大发车顺序号
  44 + var old_firstJCBCFcno = 0; // 第一个进场班次发车顺序号
  45 + var old_half_bcs = 0; // 一般的班次数量
  46 +
  47 + // 内部变量,变更的车辆,变更的人员
  48 + var new_cl1 = undefined; // 新的车辆1(车辆id_车辆自编号)
  49 + var new_cl2 = undefined; // 新的车辆2(车辆id_车辆自编号)
  50 + var new_j1 = undefined; // 新的驾驶员1(驾驶员id_姓名_工号)
  51 + var new_j2 = undefined; // 新的驾驶员2(驾驶员id_姓名_工号)
  52 + var new_s1 = undefined; // 新的售票员1(售票员id_姓名_工号)
  53 + var new_s2 = undefined; // 新的售票员2(售票员id_姓名_工号)
  54 +
  55 +
  56 + // 表单值,被赋值的次数
  57 + var form_data_assign_count = {
  58 + cl1 : 1,
  59 + cl2 : 1,
  60 + j1 : 1,
  61 + j2 : 1,
  62 + j3 : 1,
  63 + s1 : 1,
  64 + s2 : 1,
  65 + s3 : 1
  66 + };
  67 +
  68 + return {
  69 + pre: function(scope, element, attr) {
  70 +
  71 + },
  72 + post: function(scope, element, attr) {
  73 +
  74 + /**
  75 + * 刷新车辆数据。
  76 + */
  77 + scope[ctrlAs].$$internal_refresh_dsdata_cl = function() {
  78 + if (new_cl1) {
  79 + var new_cl1_id = new_cl1.split("_")[0];
  80 + var new_cl1_zbh = new_cl1.split("_")[1];
  81 +
  82 + if (new_cl2) {
  83 + var new_cl2_id = new_cl2.split("_")[0];
  84 + var new_cl2_zbh = new_cl2.split("_")[1];
  85 +
  86 + if (old_isfb) { // 使用分班判定
  87 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  88 + if (index < old_isfb_index) {
  89 + obj.cl = new_cl1_id;
  90 + obj.clZbh = new_cl1_zbh;
  91 + } else {
  92 + obj.cl = new_cl2_id;
  93 + obj.clZbh = new_cl2_zbh;
  94 + }
  95 + });
  96 +
  97 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  98 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  99 + if (obj.fcno <= old_firstJCBCFcno) {
  100 + obj.cl = new_cl1_id;
  101 + obj.clZbh = new_cl1_zbh;
  102 + } else {
  103 + obj.cl = new_cl2_id;
  104 + obj.clZbh = new_cl2_zbh;
  105 + }
  106 + });
  107 + } else { // 使用一半一半班次判定
  108 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  109 + if (index < old_half_bcs) {
  110 + obj.cl = new_cl1_id;
  111 + obj.clZbh = new_cl1_zbh;
  112 + } else {
  113 + obj.cl = new_cl2_id;
  114 + obj.clZbh = new_cl2_zbh;
  115 + }
  116 + });
  117 + }
  118 +
  119 + } else {
  120 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  121 + obj.cl = new_cl1_id;
  122 + obj.clZbh = new_cl1_zbh;
  123 + });
  124 + }
  125 +
  126 + } else {
  127 + // 清空,不使用旧的
  128 + angular.forEach(old_cl, function(value, key) {
  129 + angular.forEach(value, function(i) {
  130 + //scope[ctrlAs].ds[i].cl = key.split("_")[0];
  131 + //scope[ctrlAs].ds[i].clZbh = key.split("_")[1];
  132 + scope[ctrlAs].ds[i].cl = undefined;
  133 + scope[ctrlAs].ds[i].clZbh = undefined;
  134 + });
  135 + });
  136 + }
  137 + };
  138 +
  139 + /**
  140 + * 刷新驾驶员数据。
  141 + */
  142 + scope[ctrlAs].$$internal_refresh_dsdata_j = function() {
  143 + if (new_j1) {
  144 + var new_j1_id = new_j1.split("_")[0];
  145 + var new_j1_name = new_j1.split("_")[1];
  146 + var new_j1_gh = new_j1.split("_")[2];
  147 + if (new_j1_gh && new_j1_gh.indexOf("-") > 0) {
  148 + new_j1_gh = new_j1_gh.substr(3); // 修正工号,把 55- 这种前缀去掉
  149 + }
  150 +
  151 + if (new_j2) {
  152 + var new_j2_id = new_j2.split("_")[0];
  153 + var new_j2_name = new_j2.split("_")[1];
  154 + var new_j2_gh = new_j2.split("_")[2];
  155 + if (new_j2_gh && new_j2_gh.indexOf("-") > 0) {
  156 + new_j2_gh = new_j2_gh.substr(3); // 修正工号,把 55- 这种前缀去掉
  157 + }
  158 +
  159 + if (old_isfb) { // 使用分班判定
  160 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  161 + if (index < old_isfb_index) {
  162 + obj.j = new_j1_id;
  163 + obj.jGh = new_j1_gh;
  164 + obj.jName = new_j1_name;
  165 + } else {
  166 + obj.j = new_j2_id;
  167 + obj.jGh = new_j2_gh;
  168 + obj.jName = new_j2_name;
  169 + }
  170 + });
  171 +
  172 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  173 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  174 + if (obj.fcno <= old_firstJCBCFcno) {
  175 + obj.j = new_j1_id;
  176 + obj.jGh = new_j1_gh;
  177 + obj.jName = new_j1_name;
  178 + } else {
  179 + obj.j = new_j2_id;
  180 + obj.jGh = new_j2_gh;
  181 + obj.jName = new_j2_name;
  182 + }
  183 + });
  184 + } else { // 使用一半一半班次判定
  185 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  186 + if (index < old_half_bcs) {
  187 + obj.j = new_j1_id;
  188 + obj.jGh = new_j1_gh;
  189 + obj.jName = new_j1_name;
  190 + } else {
  191 + obj.j = new_j2_id;
  192 + obj.jGh = new_j2_gh;
  193 + obj.jName = new_j2_name;
  194 + }
  195 + });
  196 + }
  197 +
  198 + } else {
  199 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  200 + obj.j = new_j1_id;
  201 + obj.jGh = new_j1_gh;
  202 + obj.jName = new_j1_name;
  203 + });
  204 + }
  205 +
  206 + } else {
  207 + // 清空,不使用使用旧的
  208 + angular.forEach(old_j, function(value, key) {
  209 + angular.forEach(value, function(i) {
  210 + //scope[ctrlAs].ds[i].j = key.split("_")[0];
  211 + //scope[ctrlAs].ds[i].jName = key.split("_")[1];
  212 + //scope[ctrlAs].ds[i].jGh = key.split("_")[2];
  213 + scope[ctrlAs].ds[i].j = undefined;
  214 + scope[ctrlAs].ds[i].jName = undefined;
  215 + scope[ctrlAs].ds[i].jGh = undefined;
  216 + });
  217 + });
  218 + }
  219 + };
  220 +
  221 + /**
  222 + * 刷新售票员数据(和驾驶员配对的,有驾驶员,才有售票员)。
  223 + */
  224 + scope[ctrlAs].$$internal_refresh_dsdata_s = function() {
  225 + var j_id = undefined;
  226 + var s_id = undefined;
  227 + var s_gh = undefined;
  228 + var s_name = undefined;
  229 +
  230 + if (new_j1) {
  231 + j_id = new_j1.split("_")[0];
  232 + if (new_s1) {
  233 + s_id = new_s1.split("_")[0];
  234 + s_name = new_s1.split("_")[1];
  235 + s_gh = new_s1.split("_")[2];
  236 + if (s_gh && s_gh.indexOf("-") > 0) { // 修正工号,把 55- 这种前缀去掉
  237 + s_gh = s_gh.substr(3);
  238 + }
  239 + } else {
  240 + s_id = undefined;
  241 + s_gh = undefined;
  242 + s_name = undefined
  243 + }
  244 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  245 + if (obj.j == j_id) {
  246 + obj.s = s_id;
  247 + obj.sGh = s_gh;
  248 + obj.sName = s_name;
  249 + }
  250 + });
  251 + }
  252 + if (new_j2) {
  253 + j_id = new_j2.split("_")[0];
  254 + if (new_s2) {
  255 + s_id = new_s2.split("_")[0];
  256 + s_name = new_s2.split("_")[1];
  257 + s_gh = new_s2.split("_")[2];
  258 + if (s_gh && s_gh.indexOf("-") > 0) { // 修正工号,把 55- 这种前缀去掉
  259 + s_gh = s_gh.substr(3);
  260 + }
  261 + } else {
  262 + s_id = undefined;
  263 + s_gh = undefined;
  264 + s_name = undefined
  265 + }
  266 +
  267 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  268 + if (obj.j == j_id) {
  269 + obj.s = s_id;
  270 + obj.sGh = s_gh;
  271 + obj.sName = s_name;
  272 + }
  273 + });
  274 + }
  275 + };
  276 +
  277 +
  278 + //-------------- 监控表单车辆1的变化 ----------------//
  279 + scope.$watch(
  280 + function() {
  281 + return scope[ctrlAs].fd.cl1;
  282 + },
  283 + function(newValue, oldValue) {
  284 + // 初始化new_cl1
  285 + if (newValue.id) {
  286 + if (newValue.id && newValue.zbh) {
  287 + new_cl1 = newValue.id + "_" + newValue.zbh;
  288 + } else {
  289 + new_cl1 = undefined;
  290 + }
  291 + } else {
  292 + new_cl1 = undefined;
  293 + }
  294 +
  295 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
  296 + },
  297 + true
  298 + );
  299 +
  300 + //-------------- 监控表单车辆2的变化 ----------------//
  301 + scope.$watch(
  302 + function() {
  303 + return scope[ctrlAs].fd.cl2;
  304 + },
  305 + function(newValue, oldValue) {
  306 + // 初始化new_cl2
  307 + if (newValue.id) {
  308 + if (newValue.id && newValue.zbh) {
  309 + new_cl2 = newValue.id + "_" + newValue.zbh;
  310 + } else {
  311 + new_cl2 = undefined;
  312 + }
  313 + } else {
  314 + new_cl2 = undefined;
  315 + }
  316 +
  317 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
  318 + },
  319 + true
  320 + );
  321 +
  322 + //-------------- 监控表单驾驶员1的变化 ----------------//
  323 + scope.$watch(
  324 + function() {
  325 + return scope[ctrlAs].fd.j1;
  326 + },
  327 + function(newValue, oldValue) {
  328 + // 初始化j1
  329 + if (newValue.id) {
  330 + if (newValue.id && newValue.name && newValue.jobCode) {
  331 + new_j1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  332 + } else {
  333 + new_j1 = undefined;
  334 + }
  335 + } else {
  336 + new_j1 = undefined;
  337 + }
  338 +
  339 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  340 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  341 + },
  342 + true
  343 + );
  344 +
  345 + //-------------- 监控表单售票员1的变化 ----------------//
  346 + scope.$watch(
  347 + function() {
  348 + return scope[ctrlAs].fd.s1;
  349 + },
  350 + function(newValue, oldValue) {
  351 + // 初始化s1
  352 + if (newValue.id) {
  353 + if (newValue.id && newValue.name && newValue.jobCode) {
  354 + new_s1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  355 + } else {
  356 + new_s1 = undefined;
  357 + }
  358 + } else {
  359 + new_s1 = undefined;
  360 + }
  361 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  362 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  363 + },
  364 + true
  365 + );
  366 +
  367 + //-------------- 监控表单驾驶员2的变化 ----------------//
  368 + scope.$watch(
  369 + function() {
  370 + return scope[ctrlAs].fd.j2;
  371 + },
  372 + function(newValue, oldValue) {
  373 + // 初始化j2
  374 + if (newValue.id) {
  375 + if (newValue.id && newValue.name && newValue.jobCode) {
  376 + new_j2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  377 + } else {
  378 + new_j2 = undefined;
  379 + }
  380 + } else {
  381 + new_j2 = undefined;
  382 + }
  383 +
  384 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  385 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  386 + },
  387 + true
  388 + );
  389 +
  390 + //-------------- 监控表单售票员2的变化 ----------------//
  391 + scope.$watch(
  392 + function() {
  393 + return scope[ctrlAs].fd.s2;
  394 + },
  395 + function(newValue, oldValue) {
  396 + // 初始化s2
  397 + if (newValue && newValue.id) {
  398 + if (newValue.id && newValue.name && newValue.jobCode) {
  399 + new_s2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  400 + } else {
  401 + new_s2 = undefined;
  402 + }
  403 + } else {
  404 + new_s2 = undefined;
  405 + }
  406 +
  407 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  408 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  409 + },
  410 + true
  411 + );
  412 +
  413 + //-------------------- 监控ds的变化,更新数据源,初始化formdata的数据 ---------------//
  414 + scope.$watch(
  415 + function() {
  416 + return scope[ctrlAs].ds;
  417 + },
  418 + function(newValue, oldValue) {
  419 + if (newValue && newValue.length > 0) {
  420 + var j1 = newValue[0].j;
  421 +
  422 + var cl_ids = []; // 车辆ids数组(有顺序)
  423 + var j_s_ids = []; // 驾驶员ids,售票员ids,[{j:id,s:id},...](有顺序)
  424 + var isRepeat = false;
  425 + var i = 0;
  426 +
  427 + angular.forEach(newValue, function(obj, index) {
  428 + var k1 = obj.cl + "_" + obj.clZbh;
  429 + var k2 = !obj.j? undefined: obj.j + "_" + obj.jName + "_" + obj.jGh;
  430 + var k3 = !obj.s? undefined: obj.s + "_" + obj.sName + "_" + obj.sGh;
  431 +
  432 + if (!old_cl[k1]) {
  433 + old_cl[k1] = [];
  434 + }
  435 + if (!old_j[k2] && k2) {
  436 + old_j[k2] = [];
  437 + }
  438 + if (!old_s[k3] && k3) {
  439 + old_s[k3] = [];
  440 + }
  441 +
  442 + // 闭包
  443 + (function(i) {
  444 + old_cl[k1].push(i);
  445 + if (k2) {
  446 + old_j[k2].push(i);
  447 + }
  448 + if (k3) {
  449 + old_s[k3].push(i);
  450 + }
  451 + })(index);
  452 +
  453 + // 判断是否分班
  454 + if (j1 != obj.j && !old_isfb) {
  455 + old_isfb = true;
  456 + old_isfb_index = index;
  457 + }
  458 +
  459 + // 判断进出场
  460 + if (obj.bcType == 'in' && !old_hasJCBC) {
  461 + old_hasJCBC = true;
  462 + old_firstJCBCFcno = obj.fcno;
  463 + }
  464 +
  465 + //-------------- formdata用数据处理 -------------//
  466 + // 车辆处理
  467 + isRepeat = false;
  468 + if (obj.cl) {
  469 + for (i = 0; i < cl_ids.length; i++) {
  470 + if (cl_ids[i] == obj.cl) {
  471 + isRepeat = true;
  472 + break;
  473 + }
  474 + }
  475 + if (!isRepeat) {
  476 + cl_ids.push(obj.cl);
  477 + }
  478 + }
  479 +
  480 + // 人员处理(以驾驶员id为主,没有的话,售票员不管了)
  481 + isRepeat = false;
  482 + if (obj.j) {
  483 + for (i = 0; i < j_s_ids.length; i++) {
  484 + if (j_s_ids[i].j == obj.j) {
  485 + isRepeat = true;
  486 + break;
  487 + }
  488 + }
  489 + if (!isRepeat) {
  490 + j_s_ids.push({
  491 + j: obj.j,
  492 + s: !obj.s? undefined: obj.s
  493 + });
  494 + }
  495 + }
  496 + });
  497 +
  498 + old_max_fcno = newValue[newValue.length - 1].fcno;
  499 + old_half_bcs = newValue.length / 2;
  500 +
  501 + // 更新formdata
  502 + for (i = 0; i < cl_ids.length; i++) { // 车辆更新前两辆
  503 + if (i >= 2) {
  504 + break;
  505 + } else {
  506 + form_data_assign_count["cl" + (i + 1)] = 0;
  507 + scope[ctrlAs].fd["cl" + (i + 1)].id = cl_ids[i];
  508 + }
  509 + }
  510 + for (i = 0; i < j_s_ids.length; i++) { // 人员更新
  511 + if (i >= 3) {
  512 + break;
  513 + } else {
  514 + form_data_assign_count["j" + (i + 1)] = 0;
  515 + scope[ctrlAs].fd["j" + (i + 1)].id = j_s_ids[i].j;
  516 +
  517 + form_data_assign_count["s" + (i + 1)] = 0;
  518 + scope[ctrlAs].fd["s" + (i + 1)].id = j_s_ids[i].s;
  519 + }
  520 + }
  521 + }
  522 + }
  523 + );
  524 + }
  525 + }
  526 + }
  527 + };
  528 + }
  529 + ]
  530 +);
0 \ No newline at end of file 531 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
@@ -1501,8 +1501,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -1501,8 +1501,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1501 */ 1501 */
1502 scope[ctrlAs].$$internal_validate_model = function() { 1502 scope[ctrlAs].$$internal_validate_model = function() {
1503 // TODO: 1503 // TODO:
1504 - console.log(scope[ctrlAs].$$internal_select_value);  
1505 - console.log(scope[ctrlAs].$$data_real); 1504 + //console.log(scope[ctrlAs].$$internal_select_value);
  1505 + //console.log(scope[ctrlAs].$$data_real);
1506 1506
1507 if (scope[ctrlAs].$$internal_select_value) { 1507 if (scope[ctrlAs].$$internal_select_value) {
1508 var select_value_temp = scope[ctrlAs].$$internal_select_value; 1508 var select_value_temp = scope[ctrlAs].$$internal_select_value;
@@ -1515,7 +1515,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [ @@ -1515,7 +1515,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
1515 } 1515 }
1516 } 1516 }
1517 if (obj) { // 在data中判定有没有 1517 if (obj) { // 在data中判定有没有
1518 - // TODO: 1518 + // 初始化的时候,模拟选中uiselect
1519 scope[ctrlAs].$$internal_select_fn(obj); 1519 scope[ctrlAs].$$internal_select_fn(obj);
1520 1520
1521 for (var k = 0; k < scope[ctrlAs].$$data.length; k++) { 1521 for (var k = 0; k < scope[ctrlAs].$$data.length; k++) {
@@ -4771,4 +4771,534 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -4771,4 +4771,534 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4771 }; 4771 };
4772 } 4772 }
4773 ] 4773 ]
  4774 +);
  4775 +/**
  4776 + * saPlaninfoedit2指令,排班明细编辑控件,用在调度执勤日报的修改功能
  4777 + * name(必须),控件的名字
  4778 + * ds,外部数据源
  4779 + * fd, 表单数据源
  4780 + */
  4781 +angular.module('ScheduleApp').directive(
  4782 + 'saPlaninfoedit2',
  4783 + [
  4784 + function() {
  4785 + return {
  4786 + restrict: 'E',
  4787 + templateUrl: '/pages/scheduleApp/module/common/dts2/scheduleplan/saPlaninfoeditTemplate.html',
  4788 + scope: { // 独立作用域
  4789 + ds: '=ngModel', // 时刻明细数据源头
  4790 + fd: '=formData' // 表单数据源(车辆、驾驶员、售票员信息)
  4791 + },
  4792 + controllerAs: '$saPlanInfoEditCtrl',
  4793 + bindToController: true,
  4794 + controller: function() {
  4795 + //var self = this;
  4796 +
  4797 + },
  4798 +
  4799 + compile: function(tElem, tAttrs) {
  4800 + // 获取属性
  4801 + var $attr_name = tAttrs["name"]; // 控件的名字
  4802 + if (!$attr_name) {
  4803 + throw {msg: "saPlaninfoedit2指令name属性不能为空"};
  4804 + }
  4805 +
  4806 + // 内部controlAs名字
  4807 + var ctrlAs = '$saPlanInfoEditCtrl';
  4808 +
  4809 +
  4810 + // 内部变量,原始车辆,人员数据
  4811 + var old_cl = {}; // key:{车辆id_车辆自编号},value:所在list下标数组
  4812 + var old_j = {}; // key:{驾驶员id_姓名_工号}, value:所在list下标数组
  4813 + var old_s = {}; // key:{售票员id_姓名_工号}, value:所在list下标数组
  4814 + var old_isfb = false; // 是否有分班
  4815 + var old_isfb_index = 0; // 分班开始索引
  4816 + var old_hasJCBC = false; // 是否有进场班次
  4817 + var old_max_fcno = 0; // 最大发车顺序号
  4818 + var old_firstJCBCFcno = 0; // 第一个进场班次发车顺序号
  4819 + var old_half_bcs = 0; // 一般的班次数量
  4820 +
  4821 + // 内部变量,变更的车辆,变更的人员
  4822 + var new_cl1 = undefined; // 新的车辆1(车辆id_车辆自编号)
  4823 + var new_cl2 = undefined; // 新的车辆2(车辆id_车辆自编号)
  4824 + var new_j1 = undefined; // 新的驾驶员1(驾驶员id_姓名_工号)
  4825 + var new_j2 = undefined; // 新的驾驶员2(驾驶员id_姓名_工号)
  4826 + var new_s1 = undefined; // 新的售票员1(售票员id_姓名_工号)
  4827 + var new_s2 = undefined; // 新的售票员2(售票员id_姓名_工号)
  4828 +
  4829 +
  4830 + // 表单值,被赋值的次数
  4831 + var form_data_assign_count = {
  4832 + cl1 : 1,
  4833 + cl2 : 1,
  4834 + j1 : 1,
  4835 + j2 : 1,
  4836 + j3 : 1,
  4837 + s1 : 1,
  4838 + s2 : 1,
  4839 + s3 : 1
  4840 + };
  4841 +
  4842 + return {
  4843 + pre: function(scope, element, attr) {
  4844 +
  4845 + },
  4846 + post: function(scope, element, attr) {
  4847 +
  4848 + /**
  4849 + * 刷新车辆数据。
  4850 + */
  4851 + scope[ctrlAs].$$internal_refresh_dsdata_cl = function() {
  4852 + if (new_cl1) {
  4853 + var new_cl1_id = new_cl1.split("_")[0];
  4854 + var new_cl1_zbh = new_cl1.split("_")[1];
  4855 +
  4856 + if (new_cl2) {
  4857 + var new_cl2_id = new_cl2.split("_")[0];
  4858 + var new_cl2_zbh = new_cl2.split("_")[1];
  4859 +
  4860 + if (old_isfb) { // 使用分班判定
  4861 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4862 + if (index < old_isfb_index) {
  4863 + obj.cl = new_cl1_id;
  4864 + obj.clZbh = new_cl1_zbh;
  4865 + } else {
  4866 + obj.cl = new_cl2_id;
  4867 + obj.clZbh = new_cl2_zbh;
  4868 + }
  4869 + });
  4870 +
  4871 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  4872 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  4873 + if (obj.fcno <= old_firstJCBCFcno) {
  4874 + obj.cl = new_cl1_id;
  4875 + obj.clZbh = new_cl1_zbh;
  4876 + } else {
  4877 + obj.cl = new_cl2_id;
  4878 + obj.clZbh = new_cl2_zbh;
  4879 + }
  4880 + });
  4881 + } else { // 使用一半一半班次判定
  4882 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4883 + if (index < old_half_bcs) {
  4884 + obj.cl = new_cl1_id;
  4885 + obj.clZbh = new_cl1_zbh;
  4886 + } else {
  4887 + obj.cl = new_cl2_id;
  4888 + obj.clZbh = new_cl2_zbh;
  4889 + }
  4890 + });
  4891 + }
  4892 +
  4893 + } else {
  4894 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4895 + obj.cl = new_cl1_id;
  4896 + obj.clZbh = new_cl1_zbh;
  4897 + });
  4898 + }
  4899 +
  4900 + } else {
  4901 + // 清空,不使用旧的
  4902 + angular.forEach(old_cl, function(value, key) {
  4903 + angular.forEach(value, function(i) {
  4904 + //scope[ctrlAs].ds[i].cl = key.split("_")[0];
  4905 + //scope[ctrlAs].ds[i].clZbh = key.split("_")[1];
  4906 + scope[ctrlAs].ds[i].cl = undefined;
  4907 + scope[ctrlAs].ds[i].clZbh = undefined;
  4908 + });
  4909 + });
  4910 + }
  4911 + };
  4912 +
  4913 + /**
  4914 + * 刷新驾驶员数据。
  4915 + */
  4916 + scope[ctrlAs].$$internal_refresh_dsdata_j = function() {
  4917 + if (new_j1) {
  4918 + var new_j1_id = new_j1.split("_")[0];
  4919 + var new_j1_name = new_j1.split("_")[1];
  4920 + var new_j1_gh = new_j1.split("_")[2];
  4921 + if (new_j1_gh && new_j1_gh.indexOf("-") > 0) {
  4922 + new_j1_gh = new_j1_gh.substr(3); // 修正工号,把 55- 这种前缀去掉
  4923 + }
  4924 +
  4925 + if (new_j2) {
  4926 + var new_j2_id = new_j2.split("_")[0];
  4927 + var new_j2_name = new_j2.split("_")[1];
  4928 + var new_j2_gh = new_j2.split("_")[2];
  4929 + if (new_j2_gh && new_j2_gh.indexOf("-") > 0) {
  4930 + new_j2_gh = new_j2_gh.substr(3); // 修正工号,把 55- 这种前缀去掉
  4931 + }
  4932 +
  4933 + if (old_isfb) { // 使用分班判定
  4934 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4935 + if (index < old_isfb_index) {
  4936 + obj.j = new_j1_id;
  4937 + obj.jGh = new_j1_gh;
  4938 + obj.jName = new_j1_name;
  4939 + } else {
  4940 + obj.j = new_j2_id;
  4941 + obj.jGh = new_j2_gh;
  4942 + obj.jName = new_j2_name;
  4943 + }
  4944 + });
  4945 +
  4946 + } else if (old_hasJCBC && old_firstJCBCFcno < old_max_fcno) { // 使用进出场判定
  4947 + angular.forEach(scope[ctrlAs].ds, function(obj) {
  4948 + if (obj.fcno <= old_firstJCBCFcno) {
  4949 + obj.j = new_j1_id;
  4950 + obj.jGh = new_j1_gh;
  4951 + obj.jName = new_j1_name;
  4952 + } else {
  4953 + obj.j = new_j2_id;
  4954 + obj.jGh = new_j2_gh;
  4955 + obj.jName = new_j2_name;
  4956 + }
  4957 + });
  4958 + } else { // 使用一半一半班次判定
  4959 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4960 + if (index < old_half_bcs) {
  4961 + obj.j = new_j1_id;
  4962 + obj.jGh = new_j1_gh;
  4963 + obj.jName = new_j1_name;
  4964 + } else {
  4965 + obj.j = new_j2_id;
  4966 + obj.jGh = new_j2_gh;
  4967 + obj.jName = new_j2_name;
  4968 + }
  4969 + });
  4970 + }
  4971 +
  4972 + } else {
  4973 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  4974 + obj.j = new_j1_id;
  4975 + obj.jGh = new_j1_gh;
  4976 + obj.jName = new_j1_name;
  4977 + });
  4978 + }
  4979 +
  4980 + } else {
  4981 + // 清空,不使用使用旧的
  4982 + angular.forEach(old_j, function(value, key) {
  4983 + angular.forEach(value, function(i) {
  4984 + //scope[ctrlAs].ds[i].j = key.split("_")[0];
  4985 + //scope[ctrlAs].ds[i].jName = key.split("_")[1];
  4986 + //scope[ctrlAs].ds[i].jGh = key.split("_")[2];
  4987 + scope[ctrlAs].ds[i].j = undefined;
  4988 + scope[ctrlAs].ds[i].jName = undefined;
  4989 + scope[ctrlAs].ds[i].jGh = undefined;
  4990 + });
  4991 + });
  4992 + }
  4993 + };
  4994 +
  4995 + /**
  4996 + * 刷新售票员数据(和驾驶员配对的,有驾驶员,才有售票员)。
  4997 + */
  4998 + scope[ctrlAs].$$internal_refresh_dsdata_s = function() {
  4999 + var j_id = undefined;
  5000 + var s_id = undefined;
  5001 + var s_gh = undefined;
  5002 + var s_name = undefined;
  5003 +
  5004 + if (new_j1) {
  5005 + j_id = new_j1.split("_")[0];
  5006 + if (new_s1) {
  5007 + s_id = new_s1.split("_")[0];
  5008 + s_name = new_s1.split("_")[1];
  5009 + s_gh = new_s1.split("_")[2];
  5010 + if (s_gh && s_gh.indexOf("-") > 0) { // 修正工号,把 55- 这种前缀去掉
  5011 + s_gh = s_gh.substr(3);
  5012 + }
  5013 + } else {
  5014 + s_id = undefined;
  5015 + s_gh = undefined;
  5016 + s_name = undefined
  5017 + }
  5018 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  5019 + if (obj.j == j_id) {
  5020 + obj.s = s_id;
  5021 + obj.sGh = s_gh;
  5022 + obj.sName = s_name;
  5023 + }
  5024 + });
  5025 + }
  5026 + if (new_j2) {
  5027 + j_id = new_j2.split("_")[0];
  5028 + if (new_s2) {
  5029 + s_id = new_s2.split("_")[0];
  5030 + s_name = new_s2.split("_")[1];
  5031 + s_gh = new_s2.split("_")[2];
  5032 + if (s_gh && s_gh.indexOf("-") > 0) { // 修正工号,把 55- 这种前缀去掉
  5033 + s_gh = s_gh.substr(3);
  5034 + }
  5035 + } else {
  5036 + s_id = undefined;
  5037 + s_gh = undefined;
  5038 + s_name = undefined
  5039 + }
  5040 +
  5041 + angular.forEach(scope[ctrlAs].ds, function(obj, index) {
  5042 + if (obj.j == j_id) {
  5043 + obj.s = s_id;
  5044 + obj.sGh = s_gh;
  5045 + obj.sName = s_name;
  5046 + }
  5047 + });
  5048 + }
  5049 + };
  5050 +
  5051 +
  5052 + //-------------- 监控表单车辆1的变化 ----------------//
  5053 + scope.$watch(
  5054 + function() {
  5055 + return scope[ctrlAs].fd.cl1;
  5056 + },
  5057 + function(newValue, oldValue) {
  5058 + // 初始化new_cl1
  5059 + if (newValue.id) {
  5060 + if (newValue.id && newValue.zbh) {
  5061 + new_cl1 = newValue.id + "_" + newValue.zbh;
  5062 + } else {
  5063 + new_cl1 = undefined;
  5064 + }
  5065 + } else {
  5066 + new_cl1 = undefined;
  5067 + }
  5068 +
  5069 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
  5070 + },
  5071 + true
  5072 + );
  5073 +
  5074 + //-------------- 监控表单车辆2的变化 ----------------//
  5075 + scope.$watch(
  5076 + function() {
  5077 + return scope[ctrlAs].fd.cl2;
  5078 + },
  5079 + function(newValue, oldValue) {
  5080 + // 初始化new_cl2
  5081 + if (newValue.id) {
  5082 + if (newValue.id && newValue.zbh) {
  5083 + new_cl2 = newValue.id + "_" + newValue.zbh;
  5084 + } else {
  5085 + new_cl2 = undefined;
  5086 + }
  5087 + } else {
  5088 + new_cl2 = undefined;
  5089 + }
  5090 +
  5091 + scope[ctrlAs].$$internal_refresh_dsdata_cl();
  5092 + },
  5093 + true
  5094 + );
  5095 +
  5096 + //-------------- 监控表单驾驶员1的变化 ----------------//
  5097 + scope.$watch(
  5098 + function() {
  5099 + return scope[ctrlAs].fd.j1;
  5100 + },
  5101 + function(newValue, oldValue) {
  5102 + // 初始化j1
  5103 + if (newValue.id) {
  5104 + if (newValue.id && newValue.name && newValue.jobCode) {
  5105 + new_j1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  5106 + } else {
  5107 + new_j1 = undefined;
  5108 + }
  5109 + } else {
  5110 + new_j1 = undefined;
  5111 + }
  5112 +
  5113 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  5114 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  5115 + },
  5116 + true
  5117 + );
  5118 +
  5119 + //-------------- 监控表单售票员1的变化 ----------------//
  5120 + scope.$watch(
  5121 + function() {
  5122 + return scope[ctrlAs].fd.s1;
  5123 + },
  5124 + function(newValue, oldValue) {
  5125 + // 初始化s1
  5126 + if (newValue.id) {
  5127 + if (newValue.id && newValue.name && newValue.jobCode) {
  5128 + new_s1 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  5129 + } else {
  5130 + new_s1 = undefined;
  5131 + }
  5132 + } else {
  5133 + new_s1 = undefined;
  5134 + }
  5135 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  5136 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  5137 + },
  5138 + true
  5139 + );
  5140 +
  5141 + //-------------- 监控表单驾驶员2的变化 ----------------//
  5142 + scope.$watch(
  5143 + function() {
  5144 + return scope[ctrlAs].fd.j2;
  5145 + },
  5146 + function(newValue, oldValue) {
  5147 + // 初始化j2
  5148 + if (newValue.id) {
  5149 + if (newValue.id && newValue.name && newValue.jobCode) {
  5150 + new_j2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  5151 + } else {
  5152 + new_j2 = undefined;
  5153 + }
  5154 + } else {
  5155 + new_j2 = undefined;
  5156 + }
  5157 +
  5158 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  5159 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  5160 + },
  5161 + true
  5162 + );
  5163 +
  5164 + //-------------- 监控表单售票员2的变化 ----------------//
  5165 + scope.$watch(
  5166 + function() {
  5167 + return scope[ctrlAs].fd.s2;
  5168 + },
  5169 + function(newValue, oldValue) {
  5170 + // 初始化s2
  5171 + if (newValue && newValue.id) {
  5172 + if (newValue.id && newValue.name && newValue.jobCode) {
  5173 + new_s2 = newValue.id + "_" + newValue.name + "_" + newValue.jobCode;
  5174 + } else {
  5175 + new_s2 = undefined;
  5176 + }
  5177 + } else {
  5178 + new_s2 = undefined;
  5179 + }
  5180 +
  5181 + scope[ctrlAs].$$internal_refresh_dsdata_j();
  5182 + scope[ctrlAs].$$internal_refresh_dsdata_s();
  5183 + },
  5184 + true
  5185 + );
  5186 +
  5187 + //-------------------- 监控ds的变化,更新数据源,初始化formdata的数据 ---------------//
  5188 + scope.$watch(
  5189 + function() {
  5190 + return scope[ctrlAs].ds;
  5191 + },
  5192 + function(newValue, oldValue) {
  5193 + if (newValue && newValue.length > 0) {
  5194 + var j1 = newValue[0].j;
  5195 +
  5196 + var cl_ids = []; // 车辆ids数组(有顺序)
  5197 + var j_s_ids = []; // 驾驶员ids,售票员ids,[{j:id,s:id},...](有顺序)
  5198 + var isRepeat = false;
  5199 + var i = 0;
  5200 +
  5201 + angular.forEach(newValue, function(obj, index) {
  5202 + var k1 = obj.cl + "_" + obj.clZbh;
  5203 + var k2 = !obj.j? undefined: obj.j + "_" + obj.jName + "_" + obj.jGh;
  5204 + var k3 = !obj.s? undefined: obj.s + "_" + obj.sName + "_" + obj.sGh;
  5205 +
  5206 + if (!old_cl[k1]) {
  5207 + old_cl[k1] = [];
  5208 + }
  5209 + if (!old_j[k2] && k2) {
  5210 + old_j[k2] = [];
  5211 + }
  5212 + if (!old_s[k3] && k3) {
  5213 + old_s[k3] = [];
  5214 + }
  5215 +
  5216 + // 闭包
  5217 + (function(i) {
  5218 + old_cl[k1].push(i);
  5219 + if (k2) {
  5220 + old_j[k2].push(i);
  5221 + }
  5222 + if (k3) {
  5223 + old_s[k3].push(i);
  5224 + }
  5225 + })(index);
  5226 +
  5227 + // 判断是否分班
  5228 + if (j1 != obj.j && !old_isfb) {
  5229 + old_isfb = true;
  5230 + old_isfb_index = index;
  5231 + }
  5232 +
  5233 + // 判断进出场
  5234 + if (obj.bcType == 'in' && !old_hasJCBC) {
  5235 + old_hasJCBC = true;
  5236 + old_firstJCBCFcno = obj.fcno;
  5237 + }
  5238 +
  5239 + //-------------- formdata用数据处理 -------------//
  5240 + // 车辆处理
  5241 + isRepeat = false;
  5242 + if (obj.cl) {
  5243 + for (i = 0; i < cl_ids.length; i++) {
  5244 + if (cl_ids[i] == obj.cl) {
  5245 + isRepeat = true;
  5246 + break;
  5247 + }
  5248 + }
  5249 + if (!isRepeat) {
  5250 + cl_ids.push(obj.cl);
  5251 + }
  5252 + }
  5253 +
  5254 + // 人员处理(以驾驶员id为主,没有的话,售票员不管了)
  5255 + isRepeat = false;
  5256 + if (obj.j) {
  5257 + for (i = 0; i < j_s_ids.length; i++) {
  5258 + if (j_s_ids[i].j == obj.j) {
  5259 + isRepeat = true;
  5260 + break;
  5261 + }
  5262 + }
  5263 + if (!isRepeat) {
  5264 + j_s_ids.push({
  5265 + j: obj.j,
  5266 + s: !obj.s? undefined: obj.s
  5267 + });
  5268 + }
  5269 + }
  5270 + });
  5271 +
  5272 + old_max_fcno = newValue[newValue.length - 1].fcno;
  5273 + old_half_bcs = newValue.length / 2;
  5274 +
  5275 + // 更新formdata
  5276 + for (i = 0; i < cl_ids.length; i++) { // 车辆更新前两辆
  5277 + if (i >= 2) {
  5278 + break;
  5279 + } else {
  5280 + form_data_assign_count["cl" + (i + 1)] = 0;
  5281 + scope[ctrlAs].fd["cl" + (i + 1)].id = cl_ids[i];
  5282 + }
  5283 + }
  5284 + for (i = 0; i < j_s_ids.length; i++) { // 人员更新
  5285 + if (i >= 3) {
  5286 + break;
  5287 + } else {
  5288 + form_data_assign_count["j" + (i + 1)] = 0;
  5289 + scope[ctrlAs].fd["j" + (i + 1)].id = j_s_ids[i].j;
  5290 +
  5291 + form_data_assign_count["s" + (i + 1)] = 0;
  5292 + scope[ctrlAs].fd["s" + (i + 1)].id = j_s_ids[i].s;
  5293 + }
  5294 + }
  5295 + }
  5296 + }
  5297 + );
  5298 + }
  5299 + }
  5300 + }
  5301 + };
  5302 + }
  5303 + ]
4774 ); 5304 );
4775 \ No newline at end of file 5305 \ No newline at end of file
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html
@@ -59,14 +59,14 @@ @@ -59,14 +59,14 @@
59 iterobjexp="item.insideCode" 59 iterobjexp="item.insideCode"
60 searchph="请输拼音..." 60 searchph="请输拼音..."
61 searchexp="this.insideCode" 61 searchexp="this.insideCode"
62 - <!--required --> 62 + required
63 > 63 >
64 </sa-Select5> 64 </sa-Select5>
65 </div> 65 </div>
66 - <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->  
67 - <!--<div class="alert alert-danger well-sm" ng-show="myForm.cl1.$error.required">-->  
68 - <!--车辆1必须选择-->  
69 - <!--</div>--> 66 + <!-- 隐藏块,显示验证信息 -->
  67 + <div class="alert alert-danger well-sm" ng-show="myForm.cl1.$error.required">
  68 + 车辆1必须选择
  69 + </div>
70 </div> 70 </div>
71 <div class="form-group has-success has-feedback"> 71 <div class="form-group has-success has-feedback">
72 <label class="col-md-5 control-label">车辆2:</label> 72 <label class="col-md-5 control-label">车辆2:</label>
@@ -99,14 +99,14 @@ @@ -99,14 +99,14 @@
99 iterobjexp="item.personnelName + '(' + item.jobCode + ')'" 99 iterobjexp="item.personnelName + '(' + item.jobCode + ')'"
100 searchph="请输拼音..." 100 searchph="请输拼音..."
101 searchexp="this.personnelName" 101 searchexp="this.personnelName"
102 - <!--required --> 102 + required
103 > 103 >
104 </sa-Select5> 104 </sa-Select5>
105 </div> 105 </div>
106 - <!--&lt;!&ndash; 隐藏块,显示验证信息 &ndash;&gt;-->  
107 - <!--<div class="alert alert-danger well-sm" ng-show="myForm.j1.$error.required">-->  
108 - <!--驾驶员必须选择-->  
109 - <!--</div>--> 106 + <!-- 隐藏块,显示验证信息 -->
  107 + <div class="alert alert-danger well-sm" ng-show="myForm.j1.$error.required">
  108 + 驾驶员必须选择
  109 + </div>
110 </div> 110 </div>
111 111
112 <div class="form-group has-success has-feedback"> 112 <div class="form-group has-success has-feedback">
@@ -204,18 +204,26 @@ @@ -204,18 +204,26 @@
204 <div class="form-group has-success has-feedback"> 204 <div class="form-group has-success has-feedback">
205 <label class="col-md-2 control-label">排班明细:</label> 205 <label class="col-md-2 control-label">排班明细:</label>
206 <div class="col-md-10"> 206 <div class="col-md-10">
207 - <sa-Planinfoedit name="spi"  
208 - ng-model="ctrl.formData.planInfos"  
209 - ng-model-options="{ getterSetter: true }"  
210 - cl1="{{ctrl.formData.cl1}}"  
211 - cl2="{{ctrl.formData.cl2}}"  
212 - j1="{{ctrl.formData.j1}}"  
213 - j2="{{ctrl.formData.j2}}"  
214 - s1="{{ctrl.formData.s1}}"  
215 - s2="{{ctrl.formData.s2}}" 207 + <!--<sa-Planinfoedit name="spi"-->
  208 + <!--ng-model="ctrl.planInfos"-->
  209 + <!--ng-model-options="{ getterSetter: true }"-->
  210 + <!--cl1="{{ctrl.formData.cl1}}"-->
  211 + <!--cl2="{{ctrl.formData.cl2}}"-->
  212 + <!--j1="{{ctrl.formData.j1}}"-->
  213 + <!--j2="{{ctrl.formData.j2}}"-->
  214 + <!--s1="{{ctrl.formData.s1}}"-->
  215 + <!--s2="{{ctrl.formData.s2}}"-->
  216 + <!-->
  217 +
  218 + <!--</sa-Planinfoedit>-->
  219 +
  220 + <sa-Planinfoedit2 name="spi"
  221 + ng-model="ctrl.planInfos"
  222 + ng-model-options="{ getterSetter: true }"
  223 + form-data="ctrl.formData"
216 > 224 >
217 225
218 - </sa-Planinfoedit> 226 + </sa-Planinfoedit2>
219 </div> 227 </div>
220 </div> 228 </div>
221 </div> 229 </div>
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/module.js
@@ -264,7 +264,7 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -264,7 +264,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
264 self.formData.j3 = {}; // 驾驶员3 264 self.formData.j3 = {}; // 驾驶员3
265 self.formData.s3 = {}; // 售票员3 265 self.formData.s3 = {}; // 售票员3
266 266
267 - self.formData.planInfos = undefined; // 排班明细 267 + self.planInfos = undefined; // 排班明细
268 268
269 var sdd = new Date(); 269 var sdd = new Date();
270 sdd.setTime(self.sd); 270 sdd.setTime(self.sd);
@@ -277,12 +277,12 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -277,12 +277,12 @@ angular.module(&#39;ScheduleApp&#39;).controller(
277 277
278 // 获取排班明细数据 278 // 获取排班明细数据
279 SPlanInfo.list(params, function(rst) { 279 SPlanInfo.list(params, function(rst) {
280 - self.formData.planInfos = rst.content; 280 + self.planInfos = rst.content;
281 }); 281 });
282 282
283 // 提交方法 283 // 提交方法
284 self.submit = function() { 284 self.submit = function() {
285 - service.batchUpdatePlanInfo(self.formData.planInfos).then( 285 + service.batchUpdatePlanInfo(self.planInfos).then(
286 function() { 286 function() {
287 $state.go("schedulePlanReportExtManage"); 287 $state.go("schedulePlanReportExtManage");
288 }, 288 },
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -691,7 +691,7 @@ label.destroy-sch small{ @@ -691,7 +691,7 @@ label.destroy-sch small{
691 text-align: center; 691 text-align: center;
692 } 692 }
693 .sub-task-table dl dt:nth-of-type(2), .sub-task-table dl dd:nth-of-type(2) { 693 .sub-task-table dl dt:nth-of-type(2), .sub-task-table dl dd:nth-of-type(2) {
694 - width: 15%; 694 + width: 13%;
695 } 695 }
696 .sub-task-table dl dt:nth-of-type(3), .sub-task-table dl dd:nth-of-type(3) { 696 .sub-task-table dl dt:nth-of-type(3), .sub-task-table dl dd:nth-of-type(3) {
697 width: 16%; 697 width: 16%;
@@ -706,7 +706,7 @@ label.destroy-sch small{ @@ -706,7 +706,7 @@ label.destroy-sch small{
706 width: 11%; 706 width: 11%;
707 } 707 }
708 .sub-task-table dl dt:nth-of-type(7), .sub-task-table dl dd:nth-of-type(7) { 708 .sub-task-table dl dt:nth-of-type(7), .sub-task-table dl dd:nth-of-type(7) {
709 - width: 14%; 709 + width: 16%;
710 } 710 }
711 .sub-task-table dl dt:nth-of-type(8), .sub-task-table dl dd:nth-of-type(8) { 711 .sub-task-table dl dt:nth-of-type(8), .sub-task-table dl dd:nth-of-type(8) {
712 width: 9%; 712 width: 9%;
src/main/resources/static/real_control_v2/css/main.css
@@ -1255,4 +1255,183 @@ ul.left_tabs_lg li{ @@ -1255,4 +1255,183 @@ ul.left_tabs_lg li{
1255 text-indent: 12px; 1255 text-indent: 12px;
1256 margin-bottom: 0; 1256 margin-bottom: 0;
1257 padding: 18px 5px; 1257 padding: 18px 5px;
  1258 +}
  1259 +
  1260 +.sub_task_form_v2{
  1261 + background: #f9f9f9;
  1262 + padding: 12px 15px;
  1263 + border-radius: 5px 0 5px 5px;
  1264 + border: 1px solid #dfdfdf;
  1265 + position: relative;
  1266 + margin-bottom: 20px;
  1267 +}
  1268 +
  1269 +.task_form_close_icon{
  1270 + background: #f9f9f9;
  1271 + padding: 0px 4px;
  1272 + position: absolute;
  1273 + top: -8px;
  1274 + right: -8px;
  1275 + color: #898989;
  1276 + font-size: 15px;
  1277 + border: 1px solid #dfdfdf;
  1278 + border-radius: 100%;
  1279 + border-left: none;
  1280 + border-bottom: none;
  1281 + transition: all .03s;
  1282 +}
  1283 +
  1284 +.task_form_close_icon:hover{
  1285 + border: 1px solid #ff1515;
  1286 + border-left: none;
  1287 + border-bottom: none;
  1288 + color: #e03e3e;
  1289 +}
  1290 +
  1291 +.sub_task_form_v2:hover::after{
  1292 + color: #5f5b5b;
  1293 +}
  1294 +
  1295 +.sub_task_form_v2.uk-form-horizontal .uk-form-label{
  1296 + width: 80px;
  1297 +}
  1298 +
  1299 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls{
  1300 + margin-left: 85px;
  1301 +}
  1302 +
  1303 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text],
  1304 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time],
  1305 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls select{
  1306 + width: 100%;
  1307 +}
  1308 +
  1309 +#add-sub-task-main-modal .uk-modal-footer{
  1310 + background: none;
  1311 + border-top: none;
  1312 +}
  1313 +
  1314 +#add-sub-task-main-modal .uk-grid+.uk-grid{
  1315 + margin-top: 12px;
  1316 +}
  1317 +
  1318 +#add-sub-task-main-modal .plus_icon_span{
  1319 + font-size: 26px;
  1320 + color: #b2b2b2;
  1321 + padding: 10px 64px;
  1322 + display: inline-block;
  1323 + border: 1px dashed grey;
  1324 + margin: 15px 0;
  1325 + border-radius: 5px;
  1326 + cursor: pointer;
  1327 +}
  1328 +
  1329 +#add-sub-task-main-modal .uk-animation-fade{
  1330 + animation-duration: .3s;
  1331 +}
  1332 +
  1333 +#add-sub-task-main-modal .forms{
  1334 + max-height: 488px;
  1335 + overflow-y: auto;
  1336 + overflow-x: hidden;
  1337 + padding: 8px 8px 0 0;
  1338 +}
  1339 +
  1340 +.add_custom_wrap .forms .sub_task_form_v2:last-child{
  1341 + margin-bottom: 0;
  1342 +}
  1343 +
  1344 +.sub_task_form_v2.repeat_main:before{
  1345 + content: '复';
  1346 + position: absolute;
  1347 + top: -10px;
  1348 + font-size: 12px;
  1349 + color: #2196F3;
  1350 + background: #ffffff;
  1351 + padding: 0 3px;
  1352 + font-weight: 600;
  1353 +}
  1354 +
  1355 +.sub_task_form_v2.repeat_main.destroy_form:before{
  1356 + color: #F44336;
  1357 +}
  1358 +
  1359 +.sub_task_form_v2.repeat_main{
  1360 + background: #f4faff;
  1361 +}
  1362 +
  1363 +.sub_task_form_v2.destroy_form{
  1364 + background-color: #fff5f4 !important;
  1365 +}
  1366 +
  1367 +.uk-form>.half_change_car_box{
  1368 + margin: -10px 0 15px;
  1369 + padding: 3px 5px;
  1370 + display: inline-block;
  1371 + border: 1px solid #dfdddd;
  1372 + color: #918f8f;
  1373 +}
  1374 +
  1375 +.half_change_car_box input[type=checkbox]{
  1376 + vertical-align: top;
  1377 +}
  1378 +
  1379 +.uk-form>.half_change_car_box.active{
  1380 + background: #4CAF50;
  1381 + color: #fff;
  1382 +}
  1383 +
  1384 +.uk-form>.half_change_car_box.active input[type=checkbox]{
  1385 + background: #4caf50;
  1386 + border-color: #4caf50;
  1387 +}
  1388 +
  1389 +.uk-form>.half_change_car_box.active input[type=checkbox]:before{
  1390 + color: #ffffff;
  1391 +}
  1392 +
  1393 +.sub_task_form_v2.change_car{
  1394 + z-index: 99;
  1395 +}
  1396 +
  1397 +.st_range_top_form{
  1398 + padding: 0 0 15px 5px;
  1399 + border: 1px solid #c4bb76;
  1400 + background: #e5e1c1;
  1401 + margin-bottom: 15px;
  1402 + box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19);
  1403 +}
  1404 +
  1405 +.st_range_top_form .uk-form-row{
  1406 + margin-top: 20px;
  1407 +}
  1408 +
  1409 +.uk-form-horizontal.st_range_top_form .uk-form-label{
  1410 + width: 80px;
  1411 +}
  1412 +
  1413 +.uk-form-horizontal.st_range_top_form .uk-form-controls{
  1414 + margin-left: 84px;
  1415 +}
  1416 +
  1417 +.uk-form-horizontal.st_range_top_form .uk-form-controls select{
  1418 + width: calc(100% - 2px);
  1419 +}
  1420 +
  1421 +.sub_task_form_v2.service_st_form{
  1422 + background: #f4faff;
  1423 +}
  1424 +
  1425 +.uk-modal .uk-form.fv-form.sub_task_form_v2{
  1426 + margin-bottom: 20px !important;
  1427 +}
  1428 +
  1429 +.sub_task_table_wrap .ct_table>.ct_table_body{
  1430 + border-bottom: none;
  1431 +}
  1432 +
  1433 +.add_range_wrap>.err_panel{
  1434 + font-size: 16px;
  1435 + color: #a44a4a;
  1436 + font-family: 微软雅黑;
1258 } 1437 }
1259 \ No newline at end of file 1438 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <a href="" class="uk-modal-close uk-close"></a> 3 <a href="" class="uk-modal-close uk-close"></a>
4 <div class="uk-modal-header"> 4 <div class="uk-modal-header">
5 <h2>临加/子任务</h2></div> 5 <h2>临加/子任务</h2></div>
6 - <div class="uk-panel uk-panel-box uk-panel-box-primary"> 6 + <div class="uk-panel uk-panel-box uk-panel-box-primary" style="padding: 12px;">
7 <form class="uk-form uk-form-horizontal search-form"> 7 <form class="uk-form uk-form-horizontal search-form">
8 <div class="uk-grid"> 8 <div class="uk-grid">
9 <div class="uk-width-1-3"> 9 <div class="uk-width-1-3">
@@ -51,13 +51,13 @@ @@ -51,13 +51,13 @@
51 </div> 51 </div>
52 </div> 52 </div>
53 53
54 - <div class="uk-panel uk-panel-box uk-panel-box-secondary" style="padding-bottom: 0;"> 54 + <div class="uk-panel uk-panel-box uk-panel-box-secondary" style="padding-bottom: 0;box-shadow: 0px -2px 4px 0 rgba(214, 214, 214, 0.2), 0px -2px 3px 0 rgba(123, 122, 122, 0.19);">
55 <h3 class="uk-panel-title" id="childTaskTitle"> 55 <h3 class="uk-panel-title" id="childTaskTitle">
56 子任务列表 56 子任务列表
57 <a id="addChildTaskBtn" data-uk-tooltip title="添加子任务"><i 57 <a id="addChildTaskBtn" data-uk-tooltip title="添加子任务"><i
58 class="uk-icon-plus"></i> </a> 58 class="uk-icon-plus"></i> </a>
59 </h3> 59 </h3>
60 - <div class="ct_table_wrap ct_table_no_border sub_task_table_wrap" style="height: 142px;"> 60 + <div class="ct_table_wrap ct_table_no_border sub_task_table_wrap" style="height: 147px;">
61 <div class="ct_table sub-task-table"> 61 <div class="ct_table sub-task-table">
62 <div class="ct_table_head"> 62 <div class="ct_table_head">
63 <dl> 63 <dl>
@@ -126,7 +126,12 @@ @@ -126,7 +126,12 @@
126 {{each list as task i}} 126 {{each list as task i}}
127 <dl data-id="{{task.id}}"> 127 <dl data-id="{{task.id}}">
128 <dd>{{i+1}}</dd> 128 <dd>{{i+1}}</dd>
129 - <dd><span class="nt-dictionary" data-group="ChildTaskType">{{task.type2}}</span></dd> 129 + <dd>
  130 + <span class="nt-dictionary" data-group="ChildTaskType">{{task.type2}}</span>
  131 + {{if task.noClerk}}
  132 + (无售)
  133 + {{/if}}
  134 + </dd>
130 <dd>{{task.startStationName}}</dd> 135 <dd>{{task.startStationName}}</dd>
131 <dd>{{task.endStationName}}</dd> 136 <dd>{{task.endStationName}}</dd>
132 <dd>{{task.startDate}}</dd> 137 <dd>{{task.startDate}}</dd>
@@ -137,9 +142,12 @@ @@ -137,9 +142,12 @@
137 {{if task.destroy}} 142 {{if task.destroy}}
138 <small style="color:red;">烂班</small> 143 <small style="color:red;">烂班</small>
139 {{/if}} 144 {{/if}}
  145 + {{if task.nbbm!=null}},{{task.nbbm}}{{/if}}
140 ) 146 )
141 </dd> 147 </dd>
142 - <dd title="{{task.remarks}}">{{task.remarks}}</dd> 148 + <dd title="{{task.remarks}}">
  149 + {{task.remarks}}
  150 + </dd>
143 </dl> 151 </dl>
144 {{/each}} 152 {{/each}}
145 </script> 153 </script>
@@ -328,8 +336,6 @@ @@ -328,8 +336,6 @@
328 }, modal_opts); 336 }, modal_opts);
329 }; 337 };
330 338
331 - $('#addChildTaskBtn').on('click', add_sub_task_other);  
332 -  
333 //回场子任务 339 //回场子任务
334 var add_sub_task_in = function () { 340 var add_sub_task_in = function () {
335 var sch = getActiveSch(); 341 var sch = getActiveSch();
@@ -408,6 +414,18 @@ @@ -408,6 +414,18 @@
408 }, modal_opts); 414 }, modal_opts);
409 }; 415 };
410 416
  417 + var add_sub_task = function () {
  418 + var sch = getActiveSch();
  419 + if (!sch)
  420 + return notify_err('无法获取到主任务信息!');
  421 +
  422 + open_modal(folder + '/sub_task_v2/main.html', {
  423 + sch: sch
  424 + }, modal_opts);
  425 + };
  426 +
  427 + $('#addChildTaskBtn').on('click', add_sub_task);
  428 +
411 var callbackHandler = { 429 var callbackHandler = {
412 add_temp_sch: add_temp_sch, 430 add_temp_sch: add_temp_sch,
413 remove_sch: remove_sch, 431 remove_sch: remove_sch,
@@ -416,7 +434,9 @@ @@ -416,7 +434,9 @@
416 remove_sub_task: remove_sub_task, 434 remove_sub_task: remove_sub_task,
417 add_sub_task_out: add_sub_task_out, 435 add_sub_task_out: add_sub_task_out,
418 add_sub_task_range_turn: add_sub_task_range_turn, 436 add_sub_task_range_turn: add_sub_task_range_turn,
419 - add_oil: add_oil 437 + add_oil: add_oil,
  438 +
  439 + add_sub_task: add_sub_task
420 }; 440 };
421 441
422 //右键菜单 442 //右键菜单
@@ -431,7 +451,7 @@ @@ -431,7 +451,7 @@
431 name: "临加班次" 451 name: "临加班次"
432 }, 452 },
433 "add_sub_task": { 453 "add_sub_task": {
434 - name: "添加子任务", 454 + name: "添加子任务"/*,
435 items: { 455 items: {
436 'add_oil':{ 456 'add_oil':{
437 name: '空驶进出场' 457 name: '空驶进出场'
@@ -448,7 +468,7 @@ @@ -448,7 +468,7 @@
448 'add_sub_task_other': { 468 'add_sub_task_other': {
449 name: '自定义' 469 name: '自定义'
450 } 470 }
451 - } 471 + }*/
452 }, 472 },
453 'remove_sch': { 473 'remove_sch': {
454 name: '删除' 474 name: '删除'
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_custom.html 0 → 100644
  1 +<div class="add_custom_wrap">
  2 + <div class="forms"></div>
  3 + <span class="plus_icon_span">
  4 + <i class="uk-icon-plus"></i>
  5 + </span>
  6 + <form class="uk-form remarks_form">
  7 + <div class="uk-grid">
  8 + <div class="uk-width-1-1">
  9 + <div class="uk-form-row ct-stacked">
  10 + <div class="uk-form-controls" style="margin-top: 5px;">
  11 + <textarea id="form-s-t" rows="4" name="remarks" data-fv-stringlength="true" style="width: 100%;"
  12 + data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
  13 + </div>
  14 + </div>
  15 + </div>
  16 + </div>
  17 + </form>
  18 + <div class="uk-modal-footer uk-text-right" style="margin-top: 5px;">
  19 + <button type="button" class="uk-button uk-modal-close">取消</button>
  20 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  21 + </div>
  22 +
  23 + <script>
  24 + (function () {
  25 + var wrap = '#add-sub-task-main-modal .add_custom_wrap',
  26 + sch, fs=[];
  27 +
  28 + $(wrap).on('init', function (e, data) {
  29 + e.stopPropagation();
  30 + sch = data.sch;
  31 + $('.plus_icon_span', wrap).trigger('click');
  32 + });
  33 +
  34 + //plsu icon
  35 + $('.plus_icon_span', wrap).on('click', addTaskForm);
  36 +
  37 + var bcTypeMap = {'in': 2, 'out': 3, 'normal': 1};
  38 + function addTaskForm() {
  39 + var htmlStr = template('sub-task-v2-form-temp', {sch: sch})
  40 + var f = $(htmlStr);
  41 + $('.forms', wrap).append(f);
  42 + //字典转换
  43 + dictionaryUtils.transformDom($('.nt-dictionary', f));
  44 +
  45 + //班次类型切换
  46 + if(bcTypeMap[sch.bcType])
  47 + $('[name=type2]', f).val(bcTypeMap[sch.bcType])
  48 + $('[name=type2]', f).trigger('change');
  49 +
  50 + //滚动条到底
  51 + $('.forms', wrap).scrollTop($('.forms', wrap)[0].scrollHeight);
  52 +
  53 + //起点站trigger change
  54 + $('[name=startStation]',f).trigger('change');
  55 +
  56 + f.prev('.sub_task_form_v2').find('[name=endDate]').trigger('input');
  57 +
  58 + f.formValidation({
  59 + framework: 'uikit',
  60 + locale: 'zh_CN'
  61 + }).on('add_reason_field', function () {
  62 + $(this).formValidation('addField', 'reason');
  63 + });
  64 + }
  65 +
  66 + //提交
  67 + $('button[type=submit]', wrap).on('click', function () {
  68 + $(this).addClass('disabled').attr('disabled','disabled');
  69 + dataArray = [];
  70 + $('form.sub_task_form_v2', wrap).data('valid', false)
  71 + .formValidation('validate');
  72 + });
  73 +
  74 + var dataArray = [];
  75 + $(wrap).on('success.form.fv', 'form.sub_task_form_v2', function (e) {
  76 + e.preventDefault();
  77 +
  78 + dataArray.push($.extend($(this).serializeJSON(), gb_common.getDisabledVal(this)
  79 + , {remarks: $('#form-s-t',wrap).val(), 'schedule.id': sch.id}));
  80 + $(this).data('valid', true);
  81 +
  82 + if(allValidSuccess()){
  83 + var i = 0, rst;
  84 + (function () {
  85 + var f = arguments.callee;
  86 + if(i >= dataArray.length){
  87 + //完成后更新前端数据
  88 + gb_schedule_table.updateSchedule(rst);
  89 + UIkit.modal('#add-sub-task-main-modal').hide();
  90 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  91 + return;
  92 + }
  93 + var data = dataArray[i];
  94 + //里程为0的不保存
  95 + if(data.mileage==0){
  96 + i++;
  97 + f();
  98 + }
  99 + else{
  100 + //营运子任务不写备注
  101 + if(data.mileageType == 'service' && !data.destroy)
  102 + data.remarks = '';
  103 + gb_common.$post('/childTask', data, function (rs) {
  104 + notify_succ('子任务添加成功');
  105 + rst = rs.t;
  106 + i++;
  107 + f();
  108 + });
  109 + }
  110 + })();
  111 + }
  112 + });
  113 + //校验不过
  114 + $(wrap).on('err.field.fv','form.sub_task_form_v2', function () {
  115 + $('button[type=submit]', wrap).removeClass('disabled').removeAttr('disabled');
  116 + });
  117 +
  118 + function allValidSuccess() {
  119 + var flag = true;
  120 + $('form.sub_task_form_v2', wrap).each(function (i, f) {
  121 + if(!$(f).data('valid')){
  122 + flag = false;
  123 + return false;
  124 + }
  125 + });
  126 + return flag;
  127 + }
  128 +
  129 + function $f(name, f) {
  130 + return $('[name=' + name + ']', f);
  131 + }
  132 + })();
  133 + </script>
  134 +</div>
0 \ No newline at end of file 135 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_in_out.html 0 → 100644
  1 +<div class="add_inOut_wrap">
  2 + <div class="forms"></div>
  3 + <form class="uk-form remarks_form">
  4 + <div class="uk-grid">
  5 + <div class="uk-width-1-1">
  6 + <div class="uk-form-row ct-stacked">
  7 + <div class="uk-form-controls" style="margin-top: 5px;">
  8 + <textarea id="form-s-t" rows="4" name="remarks" data-fv-stringlength="true" style="width: 100%;"
  9 + data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
  10 + </div>
  11 + </div>
  12 + </div>
  13 + </div>
  14 + </form>
  15 + <div class="uk-modal-footer uk-text-right" style="margin-top: 5px;">
  16 + <button type="button" class="uk-button uk-modal-close">取消</button>
  17 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  18 + </div>
  19 +
  20 + <script>
  21 + (function () {
  22 + var wrap = '#add-sub-task-main-modal .add_inOut_wrap',
  23 + sch, sf, inf, outf, destroyf;
  24 +
  25 + $(wrap).on('init', function (e, data) {
  26 + e.stopPropagation();
  27 + sch = data.sch;
  28 +
  29 + //线路上
  30 + sf = addTaskForm();
  31 + //进场
  32 + inf = addTaskForm();
  33 + //出场
  34 + outf = addTaskForm();
  35 +
  36 + setTimeout(function () {
  37 + //复主任务
  38 + repeat_main(sf);
  39 + //进场子任务
  40 + repeat_In(inf);
  41 + //出场子任务
  42 + repeat_Out(outf);
  43 + }, 500);
  44 +
  45 + //营运终点和进场起点改变事件
  46 + $f('endStation', sf).on('change', changeServiceEnd);
  47 + //$f('startStation', inf).on('change', changeServiceEnd);
  48 + });
  49 +
  50 + function addTaskForm() {
  51 + var htmlStr = template('sub-task-v2-form-temp', {sch: sch});
  52 + var f = $(htmlStr);
  53 + $('.forms', wrap).append(f);
  54 + //字典转换
  55 + dictionaryUtils.transformDom($('.nt-dictionary', f));
  56 +
  57 + //班次类型切换
  58 + $('select[name=type2]', f).trigger('change');
  59 +
  60 + //滚动条到底
  61 + $('.forms', wrap).scrollTop($('.forms', wrap)[0].scrollHeight);
  62 +
  63 + f.formValidation({
  64 + framework: 'uikit',
  65 + locale: 'zh_CN'
  66 + }).on('add_reason_field', function () {
  67 + $(this).formValidation('addField', 'reason');
  68 + });
  69 + return f;
  70 + }
  71 +
  72 + /**
  73 + * 复主任务
  74 + * @param f
  75 + */
  76 + function repeat_main(f) {
  77 + f.addClass('repeat_main');
  78 + $f('type2', f).html('<option value="1">线路上站点间</option>');
  79 + $f('mileage', f).val(sch.jhlc).trigger('input');
  80 + $f('mileageType', f).val('service').attr('disabled', 'disabled');
  81 + //主任务是烂班
  82 + if (sch.status == -1) {
  83 + $f('destroy', f)[0].checked = true;
  84 + $f('reason', f).val(sch.adjustExps);
  85 + $('.destroy_reason_wrap', f).show();
  86 + $f('mileage', f).val(sch.jhlcOrig);
  87 + $('input,select', f).attr('disabled', 'disabled');
  88 + f.addClass('destroy_form');
  89 + }
  90 + else if (sch.status == 2) {
  91 + $f('destroy', f).parents('label').hide();
  92 + $f('endDate', f).val(sch.zdsjActual);
  93 + $('input,select', f).attr('disabled', 'disabled');
  94 + }
  95 + }
  96 +
  97 + function repeat_In(f) {
  98 + $f('type2', f).html('<option value="2">进场</option>').trigger('change');
  99 + if (sch.status != -1)
  100 + $f('startStation', f).val(sch.zdzCode);//主任务终点进场
  101 +
  102 + //起点改变
  103 + $f('startStation', f).on('change', function () {
  104 + $f('endStation', outf).val($(this).val());//.trigger('change');
  105 + }).trigger('change');
  106 +
  107 + //烂班原因
  108 + if(sch.status == -1 &&
  109 + gb_common.inOutExps.indexOf(sch.adjustExps)!=-1)
  110 + $f('inOutReason',inf).val(sch.adjustExps).trigger('change');
  111 + }
  112 +
  113 + function repeat_Out(f) {
  114 + $f('type2', f).html('<option value="3">出场</option>').trigger('change');
  115 +
  116 + var code;
  117 + if (sch.status != -1)
  118 + code=sch.zdzCode;
  119 + else
  120 + code=sch.qdzCode;
  121 + $f('endStation', f).val(code).trigger('change'); //出场到主任务终点
  122 + $f('startDate', f).val($f('endDate', inf).val()).trigger('input');//开始时间
  123 + }
  124 +
  125 + function $f(name, f) {
  126 + return $('[name=' + name + ']', f);
  127 + }
  128 +
  129 + /**
  130 + * 切换营运终点
  131 + */
  132 + function changeServiceEnd() {
  133 + var eCode = $(this).val();
  134 + if(half_form){
  135 + half_form.remove();
  136 + changeCarBox.remove();
  137 + }
  138 + if(eCode==sch.qdzCode || eCode==sch.zdzCode){
  139 + $f('startStation',inf).val(eCode).trigger('change');
  140 + return;
  141 + }
  142 +
  143 + //进场起点
  144 + $f('startStation',inf).val(eCode);
  145 +
  146 + //中途进场
  147 + showHalfPanel(eCode);
  148 + }
  149 +
  150 + var half_form, changeCarBox;
  151 + function showHalfPanel(station) {
  152 + half_form = $(template('sub-task-v2-form-temp', {sch: sch}));
  153 + half_form.addClass('repeat_main destroy_form');
  154 + //字典转换
  155 + dictionaryUtils.transformDom($('.nt-dictionary', half_form));
  156 + sf.after(half_form);
  157 +
  158 +
  159 + //班次类型切换
  160 + $f('type2', half_form).trigger('change');
  161 + //设置起点
  162 + $f('startStation',half_form).val(station).trigger('change');
  163 + //烂班
  164 + $f('destroy',half_form)[0].checked=true;
  165 + $f('mileageType',half_form).attr('disabled','disabled');
  166 + $f('type2',half_form).html('<option value="1">线路上站点间</option>');
  167 + $('.destroy_reason_wrap',half_form).show();
  168 + half_form.attr('destroy', true);
  169 +
  170 + setTimeout(function () {
  171 + //烂班开始时间
  172 + $f('startDate',half_form).val($f('endDate',sf).val()).trigger('input');
  173 + }, 300);
  174 +
  175 + //换车营运
  176 + var se = $f('startStation',half_form)[0],
  177 + sname = se.options[se.options.selectedIndex].text;
  178 + changeCarBox = $('<form class="uk-form"><label class="half_change_car_box"><input type="checkbox"> 换车出场至【'+sname+'】继续营运</label></form>');
  179 + half_form.after(changeCarBox);
  180 +
  181 + //删除
  182 + $('.task_form_close_icon', half_form).on('click', function () {
  183 + changeCarBox.remove();
  184 + $f('type2',outf).trigger('change');
  185 + });
  186 +
  187 + //校验
  188 + half_form.formValidation({
  189 + framework: 'uikit',
  190 + locale: 'zh_CN'
  191 + }).on('add_reason_field', function () {
  192 + $(this).formValidation('addField', 'reason');
  193 + });
  194 + }
  195 +
  196 + $(wrap).on('click', '.half_change_car_box>input[type=checkbox]', function () {
  197 + var box=$(this).parents('.half_change_car_box');
  198 + if(this.checked){
  199 + box.addClass('active');
  200 + enableChangeCar();
  201 + }
  202 + else{
  203 + box.removeClass('active');
  204 + disabledChangeCar();
  205 + }
  206 + });
  207 +
  208 + /**
  209 + * 换车出场
  210 + */
  211 + function enableChangeCar() {
  212 + var htmlStr = template('st-v2-domains-changecar-form-temp', {inOutExps: gb_common.inOutExps});
  213 + $('.domains', half_form).html(htmlStr);
  214 + $('.domains', outf).html(htmlStr);
  215 + half_form.css('z-index', 99).trigger('add_reason_field');
  216 + outf.trigger('add_reason_field');
  217 +
  218 + //车辆 autocomplete
  219 + var data = gb_data_basic.carsArray();
  220 + gb_common.carAutocomplete($('.autocomplete-cars', half_form), data);
  221 +
  222 + //同步车辆编码
  223 + $f('nbbm', half_form).on('input change', function () {
  224 + $f('nbbm', outf).val($(this).val());
  225 + });
  226 +
  227 + half_form.removeClass('destroy_form');
  228 +
  229 + //出场终点
  230 + $f('endStation',outf).val($f('endStation',sf).val());
  231 + }
  232 +
  233 + function disabledChangeCar() {
  234 + $f('type2',outf).trigger('change');
  235 + $f('endStation',sf).trigger('change');
  236 + }
  237 +
  238 +
  239 + //提交
  240 + $('button[type=submit]', wrap).on('click', function () {
  241 + $(this).addClass('disabled').attr('disabled','disabled');
  242 + dataArray = [];
  243 + $('form.sub_task_form_v2', wrap).data('valid', false)
  244 + .formValidation('validate');
  245 + });
  246 +
  247 + var dataArray = [];
  248 + $(wrap).on('success.form.fv', 'form.sub_task_form_v2', function (e) {
  249 + e.preventDefault();
  250 +
  251 + dataArray.push($.extend($(this).serializeJSON(), gb_common.getDisabledVal(this)
  252 + , {remarks: $('#form-s-t',wrap).val(), 'schedule.id': sch.id}));
  253 + $(this).data('valid', true);
  254 +
  255 + if(allValidSuccess()){
  256 + var i = 0, rst;
  257 + (function () {
  258 + var f = arguments.callee;
  259 + if(i >= dataArray.length){
  260 + //完成后更新前端数据
  261 + gb_schedule_table.updateSchedule(rst);
  262 + UIkit.modal('#add-sub-task-main-modal').hide();
  263 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  264 + return;
  265 + }
  266 + var data = dataArray[i];
  267 + //里程为0的不保存
  268 + if(data.mileage==0){
  269 + i++;
  270 + f();
  271 + }
  272 + else{
  273 + //营运子任务不写备注
  274 + if(data.mileageType == 'service' && !data.destroy)
  275 + data.remarks = '';
  276 + gb_common.$post('/childTask', data, function (rs) {
  277 + notify_succ('子任务添加成功');
  278 + rst = rs.t;
  279 + i++;
  280 + f();
  281 + });
  282 + }
  283 + })();
  284 + }
  285 + });
  286 + //校验不过
  287 + $(wrap).on('err.field.fv','form.sub_task_form_v2', function () {
  288 + $('button[type=submit]', wrap).removeClass('disabled').removeAttr('disabled');
  289 + });
  290 +
  291 + function allValidSuccess() {
  292 + var flag = true;
  293 + $('form.sub_task_form_v2', wrap).each(function (i, f) {
  294 + if(!$(f).data('valid')){
  295 + flag = false;
  296 + return false;
  297 + }
  298 + });
  299 + return flag;
  300 + }
  301 + })();
  302 + </script>
  303 +</div>
0 \ No newline at end of file 304 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/add_range_turn.html 0 → 100644
  1 +<div class="add_range_wrap">
  2 + <div>
  3 + <form class="uk-form uk-form-horizontal st_range_top_form">
  4 + <div class="uk-grid">
  5 + <div class="uk-width-1-3">
  6 + <div class="uk-form-row" style="padding-left: 10px;">
  7 + <label class="uk-form-label">调头站点</label>
  8 + <div class="uk-form-controls">
  9 + <select id="turnStationSelect">
  10 + <option value="">请选择...</option>
  11 + </select>
  12 + </div>
  13 + </div>
  14 + </div>
  15 + <div class="uk-width-1-3">
  16 + <div class="uk-form-row">
  17 + <label class="uk-form-label">调头原因</label>
  18 + <div class="uk-form-controls">
  19 + <select id="turnReason" style="width: calc(100% - 13px);">
  20 + <option value="">请选择...</option>
  21 + </select>
  22 + </div>
  23 + </div>
  24 + </div>
  25 + <div class="uk-width-1-3" style="padding: 28px 0 0 28px;">
  26 + <label id="emptyTurnCbox"></label>
  27 + </div>
  28 + </div>
  29 + </form>
  30 + </div>
  31 +
  32 + <div class="forms"></div>
  33 + <form class="uk-form remarks_form">
  34 + <div class="uk-grid">
  35 + <div class="uk-width-1-1">
  36 + <div class="uk-form-row ct-stacked">
  37 + <div class="uk-form-controls" style="margin-top: 5px;">
  38 + <textarea id="form-s-t" rows="4" name="remarks" data-fv-stringlength="true" style="width: 100%;"
  39 + data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
  40 + </div>
  41 + </div>
  42 + </div>
  43 + </div>
  44 + </form>
  45 + <div class="uk-modal-footer uk-text-right" style="margin-top: 5px;">
  46 + <button type="button" class="uk-button uk-modal-close">取消</button>
  47 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  48 + </div>
  49 +
  50 + <script>
  51 + (function () {
  52 + var wrap = '#add-sub-task-main-modal .add_range_wrap',
  53 + sch, nextSch, stationRoutes, f1, f2, df1, df2, topf = $('.st_range_top_form', wrap);
  54 +
  55 + $(wrap).on('init', function (e, data) {
  56 + e.stopPropagation();
  57 + sch = data.sch;
  58 + nextSch = gb_schedule_table.getNextNormalSch(sch);
  59 + if(!nextSch || nextSch.bcType!='normal'){
  60 + $(wrap).html('<div class="err_panel">无法做区间调头,原因是没有找到返程班次!</div>');
  61 + return;
  62 + }
  63 +
  64 + //站点路由
  65 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  66 + return a.stationRouteCode - b.stationRouteCode;
  67 + }), 'directions');
  68 + //第一段营运
  69 + f1 = addTaskForm();
  70 + $f('startStation', f1).trigger('change');
  71 +
  72 + disabled_form(f1);
  73 + $('.domains', f1).empty();
  74 + //top form 站点select
  75 + $('#turnStationSelect', topf).append($f('startStation', f1).html()).on('change', changeTurnStation);
  76 + //top form 原因select
  77 + var opts = '';
  78 + $.each(gb_common.adjustExps, function () {
  79 + opts += '<option value="' + this + '">' + this + '</option>';
  80 + });
  81 + $('#turnReason', topf).append(opts).on('change', changeTurnReason);
  82 + //调头空驶
  83 + $('#emptyTurnCbox',topf).html('<input type="checkbox"> 调头空驶回 ' + sch.qdzName);
  84 + $('#emptyTurnCbox input',topf).on('click', emptyTurn);
  85 + });
  86 +
  87 +
  88 + function addTaskForm() {
  89 + var htmlStr = template('sub-task-v2-form-temp', {sch: sch});
  90 + var f = $(htmlStr);
  91 + $('.forms', wrap).append(f);
  92 + //字典转换
  93 + dictionaryUtils.transformDom($('.nt-dictionary', f));
  94 +
  95 + //班次类型切换
  96 + $('select[name=type2]', f).trigger('change');
  97 +
  98 + //滚动条到底
  99 + //$('.forms', wrap).scrollTop($('.forms', wrap)[0].scrollHeight);
  100 +
  101 + f.formValidation({
  102 + framework: 'uikit',
  103 + locale: 'zh_CN'
  104 + }).on('add_reason_field', function () {
  105 + $(this).formValidation('addField', 'reason');
  106 + });
  107 + return f;
  108 + }
  109 +
  110 + function disabled_form(f) {
  111 + //$('input,select',f).attr('disabled', 'disabled');
  112 + $f('type2', f).attr('disabled', 'disabled');
  113 + $f('startStation', f).attr('disabled', 'disabled');
  114 + $f('endStation', f).attr('disabled', 'disabled');
  115 + $f('mileageType', f).attr('disabled', 'disabled');
  116 + $f('destroy', f).attr('disabled', 'disabled');
  117 + return f;
  118 + }
  119 +
  120 + function $f(name, f) {
  121 + return $('[name=' + name + ']', f);
  122 + }
  123 +
  124 +
  125 + /**
  126 + * 切换调头站点
  127 + */
  128 + function changeTurnStation() {
  129 + f1.nextAll('.sub_task_form_v2').remove();
  130 +
  131 + //烂班1
  132 + df1 = destroyForm(disabled_form(addTaskForm()));
  133 + //烂班2
  134 + df2 = destroyForm(disabled_form(addTaskForm()));
  135 + //营运2
  136 + f2 = disabled_form(addTaskForm());
  137 + $('.domains', f2).empty();
  138 + //掉头站点编码
  139 + var eCode = $('#turnStationSelect', topf).val();
  140 +
  141 + //营运1终点
  142 + $f('endStation', f1).val(eCode).trigger('change');
  143 + //烂班1起点
  144 + $f('startStation', df1).val(eCode).trigger('change');
  145 + //烂班2
  146 + $f('startStation', df2).val(sch.zdzCode);
  147 + $f('endStation', df2).val(eCode);
  148 + $f('mileage', df2).val($f('mileage', df1).val()).trigger('input');
  149 + $('[sch_id_inp]', df2).val(nextSch.id);
  150 + //营运2
  151 + $f('startStation', f2).val(eCode);
  152 + $f('endStation', f2).val(sch.qdzCode);
  153 + $f('startDate',f2).val($f('endDate',f1).val());
  154 + $f('mileage', f2).val($f('mileage', f1).val()).trigger('input');
  155 + $('[sch_id_inp]', f2).val(nextSch.id);
  156 +
  157 + //set css
  158 + setCss();
  159 + //reason
  160 + changeTurnReason();
  161 + }
  162 +
  163 + /**
  164 + * 切换调头原因
  165 + */
  166 + function changeTurnReason() {
  167 + var reason = $('#turnReason',topf).val();
  168 + if(reason){
  169 + $('.sub_task_form_v2 [name=reason]', wrap).val(reason).trigger('change');
  170 + //var reInput=$('.remarks_form [name=remarks]', wrap);
  171 + //reInput.val(reInput.val() + reason + ',');
  172 + }
  173 + }
  174 +
  175 + function destroyForm(f) {
  176 + $f('destroy', f)[0].checked = true;
  177 + $('.destroy_reason_wrap', f).show();
  178 + f.addClass('destroy_form');
  179 + f.attr('destroy', true);
  180 + return f;
  181 + }
  182 +
  183 + function setCss() {
  184 + $('.sub_task_form_v2', wrap).each(function () {
  185 + if($(this).hasClass('destroy_form'))
  186 + return true;
  187 +
  188 + if($f('mileageType', this).val()=='service')
  189 + $(this).addClass('service_st_form');
  190 + else
  191 + $(this).removeClass('service_st_form');
  192 + });
  193 + }
  194 +
  195 + /**
  196 + * 空驶调头
  197 + */
  198 + function emptyTurn() {
  199 + if($('#turnStationSelect', topf).val()==''){
  200 + notify_err('你必须先选择调头站点!');
  201 + this.checked=false;
  202 + return;
  203 + }
  204 + if(this.checked){
  205 + //烂班2 烂全程
  206 + $f('startStation', df2).val(sch.zdzCode);
  207 + $f('endStation', df2).val(sch.qdzCode);
  208 + $f('mileage', df2).val(nextSch.jhlcOrig);
  209 + $f('startDate', df2).val(nextSch.dfsj);
  210 + $f('endDate', df2).val(nextSch.zdsj);
  211 + //营运2 变空驶
  212 + f2.removeClass('service_st_form');
  213 + $f('mileageType',f2).val('empty');
  214 + }
  215 + else{
  216 + changeTurnStation();
  217 + }
  218 + }
  219 +
  220 + //提交
  221 + $('button[type=submit]', wrap).on('click', function () {
  222 + $(this).addClass('disabled').attr('disabled','disabled');
  223 + dataArray = [];
  224 + $('form.sub_task_form_v2', wrap).data('valid', false)
  225 + .formValidation('validate');
  226 + });
  227 +
  228 + var dataArray = [];
  229 + $(wrap).on('success.form.fv', 'form.sub_task_form_v2', function (e) {
  230 + e.preventDefault();
  231 +
  232 + dataArray.push($.extend($(this).serializeJSON(), gb_common.getDisabledVal(this)
  233 + , {remarks: $('#form-s-t',wrap).val()}));
  234 + $(this).data('valid', true);
  235 +
  236 + if (allValidSuccess()) {
  237 + var i = 0;
  238 + (function () {
  239 + var f = arguments.callee;
  240 + if (i >= dataArray.length) {
  241 + /**
  242 + * 为班次添加备注
  243 + */
  244 + //var remarks = '调头' + $('[name=endDate]', csf).val() + ' 因 ' + $.trim($('#turnReason', modal).val()) + '在' + $('[name=endStation] option:selected', csf).text() + '调头';
  245 + //gb_schedule_table.addRemarks([sch, nextSch], gb_common.trim(remarks, 'g'));
  246 + UIkit.modal('#add-sub-task-main-modal').hide();
  247 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  248 + return;
  249 + }
  250 + var data = dataArray[i];
  251 + //营运子任务不写备注
  252 + if(data.mileageType == 'service' && !data.destroy)
  253 + data.remarks = '';
  254 + gb_common.$post('/childTask', data, function (rs) {
  255 + notify_succ('子任务添加成功');
  256 + gb_schedule_table.updateSchedule(rs.t);
  257 + i++;
  258 + f();
  259 + });
  260 + })();
  261 + }
  262 + });
  263 + //校验不过
  264 + $(wrap).on('err.field.fv','form.sub_task_form_v2', function () {
  265 + $('button[type=submit]', wrap).removeClass('disabled').removeAttr('disabled');
  266 + });
  267 +
  268 + function allValidSuccess() {
  269 + var flag = true;
  270 + $('form.sub_task_form_v2', wrap).each(function (i, f) {
  271 + if(!$(f).data('valid')){
  272 + flag = false;
  273 + return false;
  274 + }
  275 + });
  276 + return flag;
  277 + }
  278 + })();
  279 + </script>
  280 +</div>
0 \ No newline at end of file 281 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task_v2/main.html 0 → 100644
  1 +<div class="uk-modal ct_move_modal" id="add-sub-task-main-modal">
  2 + <div class="uk-modal-dialog" style="width: 1100px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>添加子任务</h2></div>
  6 +
  7 + <div class="uk-grid uk-grid-small">
  8 + <div class="uk-width-2-10">
  9 + <ul data-uk-switcher="{connect:'#tempScheduleContent',swiping:false}" class="uk-nav uk-nav-side left_tabs_lg">
  10 + <li name="normal"><a>1、子任务</a></li>
  11 + <li name="in_out"><a>2、进出场</a></li>
  12 + <li name="range_turn"><a>3、区间调头</a></li>
  13 + </ul>
  14 + </div>
  15 + <div class="uk-width-8-10">
  16 + <ul id="tempScheduleContent" class="uk-switcher">
  17 + <li class="tab_cont normalCont"></li>
  18 + <li class="tab_cont inOutCont"></li>
  19 + <li class="tab_cont rangeTurnCont"></li>
  20 + </ul>
  21 + </div>
  22 + </div>
  23 + </div>
  24 +
  25 + <script id="sub-task-v2-form-temp" type="text/html">
  26 + <form class="uk-form uk-form-horizontal uk-animation-fade sub_task_form_v2">
  27 + <span class="task_form_close_icon">
  28 + <i class="uk-icon-times"></i>
  29 + </span>
  30 + <input type="hidden" value="{{sch.id}}" name="schedule.id" sch_id_inp>
  31 + <input type="hidden" value="正常" name="type1">
  32 + <div class="uk-grid">
  33 + <div class="uk-width-1-3">
  34 + <div class="uk-form-row">
  35 + <label class="uk-form-label">班次类型</label>
  36 + <div class="uk-form-controls">
  37 + <select class="form-control nt-dictionary" data-code="-100" name="type2"
  38 + data-group=ChildTaskType></select>
  39 + </div>
  40 + </div>
  41 + </div>
  42 + <div class="uk-width-1-3">
  43 + <div class="uk-form-row">
  44 + <label class="uk-form-label">起点 </label>
  45 + <div class="uk-form-controls">
  46 + <select name="startStation" required></select>
  47 + </div>
  48 + </div>
  49 + </div>
  50 + <div class="uk-width-1-3">
  51 + <div class="uk-form-row">
  52 + <label class="uk-form-label">终点</label>
  53 + <div class="uk-form-controls">
  54 + <select name="endStation" required></select>
  55 + </div>
  56 + </div>
  57 + </div>
  58 + </div>
  59 +
  60 + <div class="uk-grid">
  61 + <div class="uk-width-1-3">
  62 + <div class="uk-form-row">
  63 + <label class="uk-form-label">开始时间</label>
  64 + <div class="uk-form-controls">
  65 + <input name="startDate" value="{{sch.fcsjActual==null?sch.dfsj:sch.fcsjActual}}" type="time"
  66 + required>
  67 + </div>
  68 + </div>
  69 + </div>
  70 + <div class="uk-width-1-3">
  71 + <div class="uk-form-row">
  72 + <label class="uk-form-label">结束时间</label>
  73 + <div class="uk-form-controls">
  74 + <input name="endDate" type="time" required>
  75 + </div>
  76 + </div>
  77 + </div>
  78 + <div class="uk-width-1-3">
  79 + <div class="uk-form-row">
  80 + <label class="uk-form-label">公里数</label>
  81 + <div class="uk-form-controls">
  82 + <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false"
  83 + required>
  84 + </div>
  85 + </div>
  86 + </div>
  87 + </div>
  88 +
  89 + <div class="uk-grid">
  90 + <div class="uk-width-2-3 domains"></div>
  91 + <div class="uk-width-1-3">
  92 + <div class="uk-form-row">
  93 + <label class="uk-form-label">里程类型</label>
  94 + <div class="uk-form-controls">
  95 + <select class="form-control nt-dictionary" required name="mileageType"
  96 + data-group="MileageType"></select>
  97 + </div>
  98 + </div>
  99 + </div>
  100 + </div>
  101 + </form>
  102 + </script>
  103 +
  104 + <script id="st-v2-domains-changecar-form-temp" type="text/html">
  105 + <div class="uk-grid">
  106 + <div class="uk-width-1-2">
  107 + <div class="uk-form-row">
  108 + <label class="uk-form-label">车辆编码</label>
  109 + <div class="uk-form-controls">
  110 + <div class="uk-autocomplete autocomplete-cars">
  111 + <input type="text" name="nbbm" placeholder="车辆自编号">
  112 + </div>
  113 + </div>
  114 + </div>
  115 + </div>
  116 + <div class="uk-width-1-2 destroy_reason_wrap">
  117 + <div class="uk-form-row">
  118 + <label class="uk-form-label">换车原因</label>
  119 + <div class="uk-form-controls">
  120 + <select class="form-control" name="reason" required>
  121 + <option value="">请选择...</option>
  122 + {{each inOutExps as exp i}}
  123 + <option value="{{exp}}">{{exp}}</option>
  124 + {{/each}}
  125 + </select>
  126 + </div>
  127 + </div>
  128 + </div>
  129 + </div>
  130 + </script>
  131 +
  132 + <script id="st-v2-domains-inout-form-temp" type="text/html">
  133 + <div class="uk-grid">
  134 + <div class="uk-width-1-2">
  135 + <div class="uk-form-row" style="padding-top: 5px;">
  136 + <label class="uk-form-label"></label>
  137 + <div class="uk-form-controls">
  138 + <label data-uk-tooltip title="如是无人售票线路,忽略这个选项">
  139 + <input type="checkbox" value=1 name="noClerk" class="i-cbox"> 无售票员
  140 + </label>
  141 + </div>
  142 + </div>
  143 + </div>
  144 + <div class="uk-width-1-2 destroy_reason_wrap">
  145 + <div class="uk-form-row">
  146 + <label class="uk-form-label">进出场原因</label>
  147 + <div class="uk-form-controls">
  148 + <select class="form-control" name="reason" required>
  149 + <option value="">请选择...</option>
  150 + {{each inOutExps as exp i}}
  151 + <option value="{{exp}}">{{exp}}</option>
  152 + {{/each}}
  153 + </select>
  154 + </div>
  155 + </div>
  156 + </div>
  157 + </div>
  158 + </script>
  159 +
  160 + <script id="st-v2-domains-service-form-temp" type="text/html">
  161 + <div class="uk-grid">
  162 + <div class="uk-width-1-2">
  163 + <div class="uk-form-row" style="padding-top: 5px;">
  164 + <label class="uk-form-label"></label>
  165 + <div class="uk-form-controls">
  166 + <label>
  167 + <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班
  168 + </label>
  169 + </div>
  170 + </div>
  171 + </div>
  172 + <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;">
  173 + <div class="uk-form-row">
  174 + <label class="uk-form-label">烂班原因</label>
  175 + <div class="uk-form-controls">
  176 + <select class="form-control" name="reason" required>
  177 + <option value="">请选择...</option>
  178 + {{each adjustExps as exp i}}
  179 + <option value="{{exp}}">{{exp}}</option>
  180 + {{/each}}
  181 + </select>
  182 + </div>
  183 + </div>
  184 + </div>
  185 + </div>
  186 + </script>
  187 + <script>
  188 + (function () {
  189 + var modal = '#add-sub-task-main-modal', sch,
  190 + stationRoutes,
  191 + parks,
  192 + information;
  193 +
  194 + $(modal).on('init', function (e, data) {
  195 + e.stopPropagation();
  196 + sch = data.sch;
  197 +
  198 + //站点路由
  199 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  200 + return a.stationRouteCode - b.stationRouteCode;
  201 + }), 'directions');
  202 + //停车场
  203 + parks = gb_data_basic.simpleParksArray();
  204 + //线路标准
  205 + information = gb_data_basic.getLineInformation(sch.xlBm);
  206 +
  207 + var st_doms = gb_schedule_context_menu.get_st_doms();
  208 + //普通
  209 + $('.normalCont', modal).html(st_doms.custom_dom);
  210 + $('.add_custom_wrap', modal).trigger('init', data);
  211 +
  212 + //进出场班次
  213 + if(sch.bcType=='in'||sch.bcType=='out'){
  214 + $('.left_tabs_lg li[name=in_out]').remove();
  215 + $('.left_tabs_lg li[name=range_turn]').remove();
  216 + }
  217 + else{
  218 + //进出场
  219 + $('.inOutCont', modal).html(st_doms.inout_dom);
  220 + $('.add_inOut_wrap', modal).trigger('init', data);
  221 + //区间调头
  222 + $('.rangeTurnCont', modal).html(st_doms.range_dom);
  223 + $('.add_range_wrap', modal).trigger('init', data);
  224 + }
  225 + });
  226 +
  227 + //班次类型切换事件
  228 + $(modal).on('change', 'select[name=type2]', reCalcInputs_type);
  229 + //烂班选项点击事件
  230 + $(modal).on('change', 'input[name=destroy]', destroyClick);
  231 + //起终点站切换事件
  232 + $(modal).on('change', 'select[name=startStation],select[name=endStation]', reCalcInputs_station);
  233 + //开始时间和公里数改变
  234 + $(modal).on('input', 'input[name=startDate], input[name=mileage]', reCalcEndTime);
  235 + //终点时间改变
  236 + $(modal).on('input', 'input[name=endDate]', reCalcNext_s_time);
  237 + //进出场原因切换
  238 + $(modal).on('change', 'select[name=reason]', reSynchroReason);
  239 + //关闭
  240 + $(modal).on('click', '.task_form_close_icon', closeTaskForm);
  241 +
  242 + /**
  243 + * 根据班次类型切换起终点下拉框
  244 + */
  245 + function reCalcInputs_type() {
  246 + var f = $(this).parents('.sub_task_form_v2');
  247 +
  248 + var routes = stationRoutes[sch.xlDir]
  249 + , lastCode = routes[routes.length - 1].stationCode
  250 + , opts = '', park_opts = '';
  251 + //station options
  252 + $.each(routes, function () {
  253 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  254 + });
  255 + //park options
  256 + for (var code in parks)
  257 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
  258 +
  259 + var qdz = $f('startStation', f), zdz = $f('endStation', f), mType = $f('mileageType', f);
  260 + var domainsTemp;
  261 + switch ($(this).val()) {
  262 + case '3'://出场
  263 + qdz.html(park_opts).val(information.carPark);
  264 + zdz.html(opts);
  265 + mType.val('empty').attr('disabled', 'disabled');
  266 + domainsTemp = 'st-v2-domains-inout-form-temp';
  267 + //如果上一个form是进场
  268 + try {
  269 + var prev_f = f.prev('.sub_task_form_v2');
  270 + if ($f('type2', prev_f).val() == 2)
  271 + zdz.val($f('startStation', prev_f).val());
  272 + } catch (e) {
  273 + console.log(e);
  274 + }
  275 + break;
  276 + case '2'://进场
  277 + qdz.html(opts)
  278 + zdz.html(park_opts).val(information.carPark);
  279 + mType.val('empty').attr('disabled', 'disabled');
  280 + domainsTemp = 'st-v2-domains-inout-form-temp';
  281 + break;
  282 + default:
  283 + qdz.html(opts);
  284 + zdz.html(opts).val(lastCode);
  285 + mType.val('service').removeAttr('disabled');
  286 + domainsTemp = 'st-v2-domains-service-form-temp';
  287 + }
  288 +
  289 + //可变选项区域
  290 + $('.domains', f).html(template(domainsTemp, {
  291 + adjustExps: gb_common.adjustExps,
  292 + inOutExps: gb_common.inOutExps
  293 + }));
  294 +
  295 + //校验reason
  296 + f.trigger('add_reason_field');
  297 + //qdz.trigger('change');
  298 + //zdz.trigger('change');
  299 + }
  300 +
  301 + /**
  302 + * 根据站位站距计算公里和时间
  303 + */
  304 + function reCalcInputs_station() {
  305 + var f = $(this).parents('.sub_task_form_v2')
  306 + , type2 = $f('type2', f).val()//班次类型
  307 + , qdzCode = $f('startStation', f).val()//起点站
  308 + , zdzCode = $f('endStation', f).val()//终点站
  309 + , startDate = $f('startDate', f).val();//开始时间
  310 + var mileage, time, upDown;
  311 + switch (type2) {
  312 + case '2':
  313 + upDown = inout_updown(qdzCode, sch);
  314 + break;
  315 + case '3':
  316 + upDown = inout_updown(zdzCode, sch);
  317 + break;
  318 + default:
  319 + upDown = sch.xlDir
  320 + }
  321 +
  322 + switch (upDown + '_' + type2) {
  323 + case '0_3'://上行出场
  324 + mileage = information.upOutMileage;
  325 + time = information.upOutTimer;
  326 + break;
  327 + case '1_3'://下行出场
  328 + mileage = information.downOutMileage;
  329 + time = information.downOutTimer;
  330 + break;
  331 + case '0_2'://上行进场
  332 + mileage = information.upInMileage;
  333 + time = information.upInTimer;
  334 + break;
  335 + case '1_2'://下行进场
  336 + mileage = information.downInMileage;
  337 + time = information.downInTimer;
  338 + break;
  339 + default:
  340 + //线路上站点间
  341 + mileage = calcMileageByRoutes(stationRoutes[upDown], qdzCode, zdzCode);
  342 + time = gb_common.mul(gb_common.accDiv(sch.bcsj, sch.jhlcOrig), mileage);
  343 + }
  344 +
  345 + $f('mileage', f).val(mileage);
  346 + var et = moment(startDate, 'HH:mm').add(time, 'minutes');
  347 + $f('endDate', f).val(et.format('HH:mm'));
  348 +
  349 + if (type2 != 1) {
  350 + reCalcEndTime.call(this);
  351 + }
  352 + }
  353 +
  354 + /**
  355 + * 计算结束时间
  356 + */
  357 + function reCalcEndTime() {
  358 + var f = $(this).parents('.sub_task_form_v2')
  359 + , startDate = $f('startDate', f).val()//开始时间
  360 + , mileage = $f('mileage', f).val()//公里
  361 + , type2 = $f('type2', f).val();//班次类型
  362 + if (!startDate || !mileage)
  363 + return;
  364 +
  365 + var time;
  366 + if (type2 == 1) {
  367 + time = gb_common.mul(gb_common.accDiv(sch.bcsj, sch.jhlcOrig), mileage);
  368 + }
  369 + else if (type2 == 2) {
  370 + //进场
  371 + var qdzCode = $f('startStation', f).val(),
  372 + updown = inout_updown(qdzCode, sch);
  373 +
  374 + if (updown == -1)
  375 + return;
  376 + time = updown == 0 ? information.upInTimer : information.downInTimer;
  377 + }
  378 + else if (type2 == 3) {
  379 + //出场
  380 + var zdzCode = $f('endStation', f).val(),
  381 + updown = inout_updown(zdzCode, sch);
  382 +
  383 + if (updown == -1)
  384 + return;
  385 + time = updown == 0 ? information.upOutTimer : information.downOutTimer;
  386 + }
  387 +
  388 + var et = moment(startDate, 'HH:mm').add(time, 'minutes');
  389 + $f('endDate', f).val(et.format('HH:mm')).trigger('input');
  390 + }
  391 +
  392 + /**
  393 + * 将结束时间写入下一个表单的开始时间
  394 + */
  395 + function reCalcNext_s_time() {
  396 + var f = $(this).parents('.sub_task_form_v2'),
  397 + et = $f('endDate', f).val();
  398 +
  399 + var nf = gb_common.next_elem('sub_task_form_v2', f);
  400 +
  401 + if (f.attr('destroy'))
  402 + et = $f('startDate', f).val();
  403 +
  404 + if (nf.length > 0) {
  405 + $f('startDate', nf).val(et).trigger('input');
  406 + }
  407 + }
  408 +
  409 + /**
  410 + * 切换原因
  411 + */
  412 + function reSynchroReason() {
  413 + var f = $(this).parents('.sub_task_form_v2'),
  414 + reason = $(this).val();
  415 +
  416 + var nf = gb_common.next_elem('sub_task_form_v2', f),
  417 + nInput = $f('reason', nf);
  418 +
  419 + if (nf.length > 0 && nInput.length > 0) {
  420 + nInput.val(reason).trigger('change');
  421 + }
  422 + else {
  423 + var cont = f.parents('li.tab_cont'),
  424 + remInput = $('.remarks_form [name=remarks]', cont);
  425 +
  426 + if(remInput.val()==reason + ',')
  427 + return;
  428 + remInput.val(remInput.val() + reason + ',');
  429 + }
  430 + }
  431 +
  432 + function calcMileageByRoutes(routes, s, e) {
  433 + var code, flag, mileage = 0;
  434 + $.each(routes, function () {
  435 + code = this['stationCode'];
  436 + if (flag) {
  437 + if (!this.distances)
  438 + this.distances = 0;
  439 + mileage = gb_common.accAdd(mileage, this.distances);
  440 + }
  441 + if (code == s)
  442 + flag = true;
  443 + if (code == e)
  444 + return false;
  445 + });
  446 + return mileage;
  447 + }
  448 +
  449 + function destroyClick() {
  450 + var f = $(this).parents('.sub_task_form_v2');
  451 + if (this.checked) {
  452 + $('.destroy_reason_wrap', f).show();
  453 + f.attr('destroy', true).addClass('destroy_form');
  454 + }
  455 + else {
  456 + $('.destroy_reason_wrap', f).hide();
  457 + f.removeAttr('destroy').removeClass('destroy_form');
  458 + }
  459 + }
  460 +
  461 + function $f(name, f) {
  462 + return $('[name=' + name + ']', f);
  463 + }
  464 +
  465 + function closeTaskForm() {
  466 + $(this).parents('.sub_task_form_v2').remove();
  467 + }
  468 +
  469 + /**
  470 + * 进出场上下行
  471 + * @param qdzCode
  472 + * @param sch
  473 + */
  474 + function inout_updown(station, sch) {
  475 + if (station == sch.qdzCode)
  476 + return sch.xlDir;
  477 + else if (station == sch.zdzCode)
  478 + return sch.xlDir == 0 ? 1 : 0;
  479 + else
  480 + return -1;
  481 + }
  482 +
  483 + })();
  484 + </script>
  485 +</div>
0 \ No newline at end of file 486 \ No newline at end of file
src/main/resources/static/real_control_v2/js/common.js
@@ -21,6 +21,9 @@ var gb_common = (function () { @@ -21,6 +21,9 @@ var gb_common = (function () {
21 0x12: '报警' 21 0x12: '报警'
22 }; 22 };
23 23
  24 + var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
  25 + var inOutExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
  26 +
24 var groupBy = function (list, field) { 27 var groupBy = function (list, field) {
25 var rs = {}, 28 var rs = {},
26 key; 29 key;
@@ -324,6 +327,17 @@ var gb_common = (function () { @@ -324,6 +327,17 @@ var gb_common = (function () {
324 return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e; 327 return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
325 }; 328 };
326 329
  330 + function accDiv(arg1,arg2){
  331 + var t1=0,t2=0,r1,r2;
  332 + try{t1=arg1.toString().split(".")[1].length}catch(e){}
  333 + try{t2=arg2.toString().split(".")[1].length}catch(e){}
  334 + with(Math){
  335 + r1=Number(arg1.toString().replace(".",""))
  336 + r2=Number(arg2.toString().replace(".",""))
  337 + return (r1/r2)*pow(10,t2-t1);
  338 + }
  339 + }
  340 +
327 function mul(a, b) { 341 function mul(a, b) {
328 var c = 0, 342 var c = 0,
329 d = a.toString(), 343 d = a.toString(),
@@ -372,6 +386,26 @@ var gb_common = (function () { @@ -372,6 +386,26 @@ var gb_common = (function () {
372 return rs; 386 return rs;
373 }; 387 };
374 388
  389 + var next_elem = function (clazz, e) {
  390 + var ne = e.next();
  391 + if(ne.length==0)
  392 + return [];
  393 + else if(ne.hasClass(clazz))
  394 + return ne;
  395 + else
  396 + return next_elem(clazz, ne);
  397 + };
  398 +
  399 + var getDisabledVal = function (f) {
  400 + var rs = {};
  401 + $('input,select', f).each(function () {
  402 + if($(this).attr('disabled')){
  403 + rs[$(this).attr('name')]=$(this).val();
  404 + }
  405 + });
  406 + return rs;
  407 + };
  408 +
375 return { 409 return {
376 reqCode80: reqCode80, 410 reqCode80: reqCode80,
377 groupBy: groupBy, 411 groupBy: groupBy,
@@ -395,7 +429,13 @@ var gb_common = (function () { @@ -395,7 +429,13 @@ var gb_common = (function () {
395 trim: trim, 429 trim: trim,
396 remarksAutocomplete: remarksAutocomplete, 430 remarksAutocomplete: remarksAutocomplete,
397 flatpickrDateTimeConfig: flatpickrDateTimeConfig, 431 flatpickrDateTimeConfig: flatpickrDateTimeConfig,
398 - inverse: inverse 432 + inverse: inverse,
  433 + accDiv: accDiv,
  434 + mul: mul,
  435 + adjustExps: adjustExps,
  436 + inOutExps: inOutExps,
  437 + next_elem: next_elem,
  438 + getDisabledVal: getDisabledVal
399 439
400 //whichTransitionEvent:whichTransitionEvent 440 //whichTransitionEvent:whichTransitionEvent
401 }; 441 };
src/main/resources/static/real_control_v2/js/forms/form_embed.js
@@ -61,7 +61,7 @@ var gb_embed_form_hanlde = (function () { @@ -61,7 +61,7 @@ var gb_embed_form_hanlde = (function () {
61 61
62 } 62 }
63 }); 63 });
64 - } 64 + };
65 65
66 66
67 return { 67 return {
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
@@ -7,7 +7,23 @@ var gb_schedule_context_menu = (function () { @@ -7,7 +7,23 @@ var gb_schedule_context_menu = (function () {
7 bgclose: false 7 bgclose: false
8 }, 8 },
9 folder = '/real_control_v2/fragments/line_schedule/context_menu'; 9 folder = '/real_control_v2/fragments/line_schedule/context_menu';
  10 +
  11 + //提前缓存子任务的片段页面
  12 + var st_doms={};
  13 + $.get(folder + '/sub_task_v2/add_custom.html', function (dom) {
  14 + st_doms.custom_dom=dom;
  15 + });
  16 + $.get(folder + '/sub_task_v2/add_in_out.html', function (dom) {
  17 + st_doms.inout_dom=dom;
  18 + });
  19 + $.get(folder + '/sub_task_v2/add_range_turn.html', function (dom) {
  20 + st_doms.range_dom=dom;
  21 + });
  22 +
10 var callbackHandler = { 23 var callbackHandler = {
  24 + get_st_doms: function () {
  25 + return st_doms;
  26 + },
11 dftz: function (sch) { 27 dftz: function (sch) {
12 open_modal(folder + '/dftz.html', { 28 open_modal(folder + '/dftz.html', {
13 sch: sch 29 sch: sch
@@ -234,6 +250,11 @@ var gb_schedule_context_menu = (function () { @@ -234,6 +250,11 @@ var gb_schedule_context_menu = (function () {
234 open_modal(folder + '/add_temp_sch.html', { 250 open_modal(folder + '/add_temp_sch.html', {
235 sch: sch 251 sch: sch
236 }, modal_opts); 252 }, modal_opts);
  253 + },
  254 + add_sub_task: function (sch) {
  255 + open_modal(folder + '/sub_task_v2/main.html', {
  256 + sch: sch
  257 + }, modal_opts);
237 } 258 }
238 }; 259 };
239 260
@@ -274,7 +295,7 @@ var gb_schedule_context_menu = (function () { @@ -274,7 +295,7 @@ var gb_schedule_context_menu = (function () {
274 }, 295 },
275 'lj_zrw': { 296 'lj_zrw': {
276 name: '临加/子任务' 297 name: '临加/子任务'
277 - }, 298 + }/*,
278 'shortcut': { 299 'shortcut': {
279 name: '...', 300 name: '...',
280 items: { 301 items: {
@@ -294,6 +315,13 @@ var gb_schedule_context_menu = (function () { @@ -294,6 +315,13 @@ var gb_schedule_context_menu = (function () {
294 name: '(子任务)区间调头' 315 name: '(子任务)区间调头'
295 } 316 }
296 } 317 }
  318 + }*/,
  319 + 'sep3': '---------',
  320 + 'add_temp_sch': {
  321 + name: '添加临加班次'
  322 + },
  323 + 'add_sub_task': {
  324 + name: '添加子任务'
297 }, 325 },
298 'sep4': '---------', 326 'sep4': '---------',
299 'tzrc': { 327 'tzrc': {
@@ -305,7 +333,7 @@ var gb_schedule_context_menu = (function () { @@ -305,7 +333,7 @@ var gb_schedule_context_menu = (function () {
305 'wdtz': { 333 'wdtz': {
306 name: '误点调整' 334 name: '误点调整'
307 }, 335 },
308 - 'sep3': '---------', 336 + 'sep4': '---------',
309 'lp_change': { 337 'lp_change': {
310 name: '路牌对调' 338 name: '路牌对调'
311 } 339 }
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
@@ -557,6 +557,20 @@ var gb_schedule_table = (function () { @@ -557,6 +557,20 @@ var gb_schedule_table = (function () {
557 } 557 }
558 }; 558 };
559 559
  560 + /* 下一个班次普通班次 */
  561 + var getNextNormalSch = function (sch) {
  562 +
  563 + var array = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (a) {
  564 + return a.clZbh == sch.clZbh && a.bcType=='normal';
  565 + }).sort(schedule_sort);
  566 +
  567 + for (var i = 0, item; item = array[i++];) {
  568 + if (array[i].id == sch.id) {
  569 + return i < array.length ? array[i + 1] : null;
  570 + }
  571 + }
  572 + };
  573 +
560 /** 添加备注信息 */ 574 /** 添加备注信息 */
561 var addRemarks = function (list, remarks) { 575 var addRemarks = function (list, remarks) {
562 //if(!list || list) 576 //if(!list || list)
@@ -630,6 +644,7 @@ var gb_schedule_table = (function () { @@ -630,6 +644,7 @@ var gb_schedule_table = (function () {
630 reLoadAndRefresh: reLoadAndRefresh, 644 reLoadAndRefresh: reLoadAndRefresh,
631 showLateBadge: showLateBadge, 645 showLateBadge: showLateBadge,
632 cancelLateBadge: cancelLateBadge, 646 cancelLateBadge: cancelLateBadge,
633 - refreshAll: refreshAll 647 + refreshAll: refreshAll,
  648 + getNextNormalSch: getNextNormalSch
634 }; 649 };
635 })(); 650 })();
src/main/resources/static/real_control_v2/js/main.js
@@ -169,8 +169,8 @@ var disabled_submit_btn = function (form) { @@ -169,8 +169,8 @@ var disabled_submit_btn = function (form) {
169 function showUpdateDescription() { 169 function showUpdateDescription() {
170 //更新说明 170 //更新说明
171 var updateDescription = { 171 var updateDescription = {
172 - date: '2017-06-22',  
173 - text: '<h5>优化了轨迹回放,可放大缩小窗口、可拖动进度条、手动呼出线路配车...</h5>' 172 + date: '2017-07-05',
  173 + text: '<h5>稍微调整了添加子任务的界面</h5><h5>1、现在进出场子任务也必须选择进场原因</h5><h5>2、现在进出场子任务可以勾选 “无售票员” 如果是无人售票线路,请忽略这个选项</h5><h5>3、现在做中途进场子任务时,可以勾选“换车出场至中途站继续营运”</h5>'
174 }; 174 };
175 175
176 var storage = window.localStorage 176 var storage = window.localStorage