Commit 7aa83666d8aa4064369907f8fd9b049345e7678c

Authored by 王通
2 parents ff49e9eb ed1eda3a

1.合并闵行变更内容

Showing 35 changed files with 4368 additions and 4187 deletions
... ... @@ -315,13 +315,15 @@
315 315 <plugins>
316 316 <plugin>
317 317 <artifactId>maven-compiler-plugin</artifactId>
  318 + <version>2.3.2</version><!--$NO-MVN-MAN-VER$ -->
318 319 <configuration>
319   - <source>1.7</source>
320   - <target>1.7</target>
  320 + <source>1.8</source>
  321 + <target>1.8</target>
321 322 </configuration>
322 323 </plugin>
323 324 <plugin>
324 325 <artifactId>maven-war-plugin</artifactId>
  326 + <version>2.2</version><!--$NO-MVN-MAN-VER$ -->
325 327 <configuration>
326 328 <failOnMissingWebXml>false</failOnMissingWebXml>
327 329 </configuration>
... ...
src/main/java/com/bsth/controller/realcontrol/PageForwardingController.java
... ... @@ -83,10 +83,10 @@ public class PageForwardingController {
83 83  
84 84 if ("v2_mobile".equals(type)) {
85 85 mv.setViewName("/real_control_v2_mobile/main");
86   - } else if("v2_".equals(type)) {
  86 + } else if ("v2_".equals(type)) {
  87 + //正常线调主页
87 88 mv.setViewName("/real_control_v2/main_");
88 89 } else {
89   - //正常线调主页
90 90 mv.setViewName("/real_control_v2/main");
91 91 }
92 92  
... ...
src/main/java/com/bsth/data/directive/DayOfDirectives.java
1   -package com.bsth.data.directive;
2   -
3   -import com.alibaba.fastjson.JSONObject;
4   -import com.bsth.data.LineConfigData;
5   -import com.bsth.entity.directive.D60;
6   -import com.bsth.entity.directive.D64;
7   -import com.bsth.entity.directive.Directive;
8   -import com.bsth.entity.directive.DirectiveReponse;
9   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
10   -import com.bsth.service.directive.DirectiveService;
11   -import com.bsth.websocket.handler.SendUtils;
12   -import org.slf4j.Logger;
13   -import org.slf4j.LoggerFactory;
14   -import org.springframework.beans.factory.annotation.Autowired;
15   -import org.springframework.stereotype.Component;
16   -
17   -import java.util.*;
18   -import java.util.concurrent.ConcurrentHashMap;
19   -import java.util.concurrent.ConcurrentLinkedQueue;
20   -import java.util.concurrent.ConcurrentMap;
21   -
22   -/**
23   - *
24   - * @ClassName: CurrDayDirectives
25   - * @Description: TODO(当天指令数据)
26   - * @author PanZhao
27   - * @date 2016年8月14日 下午5:23:59
28   - *
29   - */
30   -@Component
31   -public class DayOfDirectives {
32   -
33   - // 当日60指令缓存
34   - private static ConcurrentMap<Integer, D60> d60Map;
35   -
36   - // 线路切换指令 64
37   - public static ConcurrentMap<String, D64> d64Map;
38   -
39   - //等待插入的指令
40   - public static ConcurrentLinkedQueue<Directive> pstDirectives;
41   - //等待更新的指令
42   - public static ConcurrentLinkedQueue<D60> pstD60s;
43   -
44   - @Autowired
45   - DirectiveService directiveService;
46   -
47   - @Autowired
48   - SendUtils sendUtils;
49   -
50   - @Autowired
51   - LineConfigData lineConfigData;
52   -
53   - static Logger logger = LoggerFactory.getLogger(DayOfDirectives.class);
54   -
55   -
56   - static{
57   - d60Map = new ConcurrentHashMap<>();
58   - d64Map = new ConcurrentHashMap<>();
59   - pstDirectives = new ConcurrentLinkedQueue<>();
60   - pstD60s = new ConcurrentLinkedQueue<>();
61   - }
62   -
63   - public void put60(D60 d60) {
64   - d60Map.put(d60.getMsgId(), d60);
65   - //等待持久化
66   - pstDirectives.add(d60);
67   - }
68   -
69   - public void put64(D64 d64) {
70   - d64Map.put(d64.getKey(), d64);
71   - //等待持久化
72   - pstDirectives.add(d64);
73   - }
74   -
75   - /**
76   - *
77   - * @Title: reply @Description: TODO(指令 46,47 响应) @throws
78   - */
79   - public void reply(DirectiveReponse res) {
80   - Integer msgId = res.getMsgId();
81   - if (msgId == null) {
82   - logger.error("reply error , msgId is null.");
83   - return;
84   - }
85   -
86   - D60 d60 = d60Map.get(msgId);
87   -
88   - if (null == d60) {
89   - logger.error("找不到msgId: " + msgId + " 对应的指令数据");
90   - return;
91   - }
92   -
93   - switch (res.getStatus()) {
94   - case 0:
95   - d60.setReply46((short) -1);// 失败
96   - break;
97   - case 1:
98   - d60.setReply46((short) 0);// 发送成功
99   - d60.setReply46Time(System.currentTimeMillis());
100   - break;
101   - case 2:
102   - d60.setReply47((short) 0);// 驾驶员阅读
103   - d60.setReply47Time(System.currentTimeMillis());
104   - break;
105   - }
106   -
107   - //更新60数据
108   - pstD60s.add(d60);
109   -
110   - ScheduleRealInfo sch = d60.getSch();
111   - if (null == sch)
112   - return;
113   -
114   - if (d60.isDispatch()) {
115   - // 更新班次状态
116   - sch.setDirectiveState(res.getStatus() * 100);
117   - // 通知页面
118   - sendUtils.sendDirectiveToPage(sch);
119   - }
120   - }
121   -
122   - /**
123   - *
124   - * @Title: reply64 @Description: TODO(64 协议响应) @throws
125   - */
126   - public void reply64(JSONObject json) {
127   - String key = json.getString("deviceId") + "_" + json.getString("timestamp");
128   -
129   - D64 d64 = d64Map.get(key);
130   -
131   - if (null == d64)
132   - logger.warn("64响应 -找不到请求源,json: " + json);
133   - else {
134   - JSONObject data = json.getJSONObject("data");
135   -
136   - if (null == data)
137   - logger.warn("64响应 data is null ,json: " + json);
138   - else {
139   - logger.info(d64.getDeviceId() + "_" + d64.getData().getLineId() + "响应:" + data.getShort("requestAck"));
140   - /*d64.setRespAck(data.getShort("requestAck"));
141   - // 持久化*/
142   - //64 响应不入库了...
143   - }
144   - }
145   - }
146   -
147   - @Autowired
148   - DirectivesPstThread directivesPstThread;
149   - public void clearAll(){
150   - d60Map = new ConcurrentHashMap<>();
151   - d64Map = new ConcurrentHashMap<>();
152   - logger.info("清除指令数据 ,,,");
153   - }
154   -
155   - public Collection<D60> all60(){
156   - return d60Map.values();
157   - }
158   -
159   - public Collection<D64> all64(){
160   - return d64Map.values();
161   - }
162   -
163   - public D60 get(Integer msgId){
164   - return d60Map.get(msgId);
165   - }
166   -
167   - public Collection<Directive> all(){
168   - List<Directive> all = new ArrayList<>();
169   - all.addAll(d60Map.values());
170   - all.addAll(d64Map.values());
171   -
172   - return all;
173   - }
174   -
175   - public static class DComparator implements Comparator<Directive>{
176   -
177   - @Override
178   - public int compare(Directive d1, Directive d2) {
179   - return (int) (d2.getTimestamp() - d1.getTimestamp());
180   - }
181   - }
182   - }
  1 +package com.bsth.data.directive;
  2 +
  3 +import com.alibaba.fastjson.JSONObject;
  4 +import com.bsth.data.LineConfigData;
  5 +import com.bsth.data.schedule.DayOfSchedule;
  6 +import com.bsth.entity.directive.D60;
  7 +import com.bsth.entity.directive.D64;
  8 +import com.bsth.entity.directive.Directive;
  9 +import com.bsth.entity.directive.DirectiveReponse;
  10 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  11 +import com.bsth.service.directive.DirectiveService;
  12 +import com.bsth.websocket.handler.SendUtils;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.stereotype.Component;
  17 +
  18 +import java.util.*;
  19 +import java.util.concurrent.ConcurrentHashMap;
  20 +import java.util.concurrent.ConcurrentLinkedQueue;
  21 +import java.util.concurrent.ConcurrentMap;
  22 +
  23 +/**
  24 + *
  25 + * @ClassName: CurrDayDirectives
  26 + * @Description: TODO(当天指令数据)
  27 + * @author PanZhao
  28 + * @date 2016年8月14日 下午5:23:59
  29 + *
  30 + */
  31 +@Component
  32 +public class DayOfDirectives {
  33 +
  34 + // 当日60指令缓存
  35 + private static ConcurrentMap<Integer, D60> d60Map;
  36 +
  37 + // 线路切换指令 64
  38 + public static ConcurrentMap<String, D64> d64Map;
  39 +
  40 + //等待插入的指令
  41 + public static ConcurrentLinkedQueue<Directive> pstDirectives;
  42 + //等待更新的指令
  43 + public static ConcurrentLinkedQueue<D60> pstD60s;
  44 +
  45 + @Autowired
  46 + DirectiveService directiveService;
  47 +
  48 + @Autowired
  49 + SendUtils sendUtils;
  50 +
  51 + @Autowired
  52 + LineConfigData lineConfigData;
  53 +
  54 + @Autowired
  55 + private DayOfSchedule dayOfSchedule;
  56 +
  57 + static Logger logger = LoggerFactory.getLogger(DayOfDirectives.class);
  58 +
  59 +
  60 + static{
  61 + d60Map = new ConcurrentHashMap<>();
  62 + d64Map = new ConcurrentHashMap<>();
  63 + pstDirectives = new ConcurrentLinkedQueue<>();
  64 + pstD60s = new ConcurrentLinkedQueue<>();
  65 + }
  66 +
  67 + public void put60(D60 d60) {
  68 + d60Map.put(d60.getMsgId(), d60);
  69 + //等待持久化
  70 + pstDirectives.add(d60);
  71 + }
  72 +
  73 + public void put64(D64 d64) {
  74 + d64Map.put(d64.getKey(), d64);
  75 + //等待持久化
  76 + pstDirectives.add(d64);
  77 + }
  78 +
  79 + /**
  80 + *
  81 + * @Title: reply @Description: TODO(指令 46,47 响应) @throws
  82 + */
  83 + public void reply(DirectiveReponse res) {
  84 + Integer msgId = res.getMsgId();
  85 + if (msgId == null) {
  86 + logger.error("reply error , msgId is null.");
  87 + return;
  88 + }
  89 +
  90 + D60 d60 = d60Map.get(msgId);
  91 +
  92 + if (null == d60) {
  93 + logger.error("找不到msgId: " + msgId + " 对应的指令数据");
  94 + return;
  95 + }
  96 +
  97 + switch (res.getStatus()) {
  98 + case 0:
  99 + d60.setReply46((short) -1);// 失败
  100 + break;
  101 + case 1:
  102 + d60.setReply46((short) 0);// 发送成功
  103 + d60.setReply46Time(System.currentTimeMillis());
  104 + break;
  105 + case 2:
  106 + d60.setReply47((short) 0);// 驾驶员阅读
  107 + d60.setReply47Time(System.currentTimeMillis());
  108 + break;
  109 + }
  110 +
  111 + //更新60数据
  112 + pstD60s.add(d60);
  113 +
  114 + ScheduleRealInfo sch = d60.getSch();
  115 + if (null == sch)
  116 + return;
  117 +
  118 + if (d60.isDispatch()) {
  119 + // 更新班次状态
  120 + sch.setDirectiveState(res.getStatus() * 100);
  121 + dayOfSchedule.save(sch);
  122 + // 通知页面
  123 + sendUtils.sendDirectiveToPage(sch);
  124 + }
  125 + }
  126 +
  127 + /**
  128 + *
  129 + * @Title: reply64 @Description: TODO(64 协议响应) @throws
  130 + */
  131 + public void reply64(JSONObject json) {
  132 + String key = json.getString("deviceId") + "_" + json.getString("timestamp");
  133 +
  134 + D64 d64 = d64Map.get(key);
  135 +
  136 + if (null == d64)
  137 + logger.warn("64响应 -找不到请求源,json: " + json);
  138 + else {
  139 + JSONObject data = json.getJSONObject("data");
  140 +
  141 + if (null == data)
  142 + logger.warn("64响应 data is null ,json: " + json);
  143 + else {
  144 + logger.info(d64.getDeviceId() + "_" + d64.getData().getLineId() + "响应:" + data.getShort("requestAck"));
  145 + /*d64.setRespAck(data.getShort("requestAck"));
  146 + // 持久化*/
  147 + //64 响应不入库了...
  148 + }
  149 + }
  150 + }
  151 +
  152 + @Autowired
  153 + DirectivesPstThread directivesPstThread;
  154 + public void clearAll(){
  155 + d60Map = new ConcurrentHashMap<>();
  156 + d64Map = new ConcurrentHashMap<>();
  157 + logger.info("清除指令数据 ,,,");
  158 + }
  159 +
  160 + public Collection<D60> all60(){
  161 + return d60Map.values();
  162 + }
  163 +
  164 + public Collection<D64> all64(){
  165 + return d64Map.values();
  166 + }
  167 +
  168 + public D60 get(Integer msgId){
  169 + return d60Map.get(msgId);
  170 + }
  171 +
  172 + public Collection<Directive> all(){
  173 + List<Directive> all = new ArrayList<>();
  174 + all.addAll(d60Map.values());
  175 + all.addAll(d64Map.values());
  176 +
  177 + return all;
  178 + }
  179 +
  180 + public static class DComparator implements Comparator<Directive>{
  181 +
  182 + @Override
  183 + public int compare(Directive d1, Directive d2) {
  184 + return (int) (d2.getTimestamp() - d1.getTimestamp());
  185 + }
  186 + }
  187 + }
... ...
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
... ... @@ -47,15 +47,15 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
47 47 List<Map<String, Object>> dailyInfo(String line,String date);
48 48  
49 49 @Query(value="select d.device_id,d.sender,d.txt_content,d.timestamp,d.line_code from "
50   - + " bsth_v_directive_60 d where d.line_code=?1 and d.timestamp >=?2 and "
51   - + "d.timestamp <=?3 and d.device_id like %?4% ",nativeQuery=true)
52   - List<Object[]> historyMessage(String line,long d,long t,String code);
  50 + + " bsth_v_directive_60 d where d.rq = ?1 and d.line_code = ?2 "
  51 + + " and d.device_id like %?3% ",nativeQuery=true)
  52 + List<Object[]> historyMessage(String rq, String line, String code);
53 53  
54 54 //带指令类型字段
55 55 @Query(value="select d.device_id,d.sender,d.txt_content,d.timestamp,d.line_code from "
56   - + " bsth_v_directive_60 d where d.line_code=?1 and d.timestamp >=?2 and "
57   - + "d.timestamp <=?3 and d.device_id like %?4% and d.dispatch_instruct =?5 ",nativeQuery=true)
58   - List<Object[]> historyMessage(String line,long d,long t,String code,short dispatchInstruct);
  56 + + " bsth_v_directive_60 d where d.rq = ?1 and d.line_code = ?2 "
  57 + + " and d.device_id like %?3% and d.dispatch_instruct =?4 ",nativeQuery=true)
  58 + List<Object[]> historyMessage(String rq, String line, String code, short dispatchInstruct);
59 59  
60 60 @Query(value="SELECT r.xl_name,r.lp_name,r.cl_zbh,count(*) as cs "
61 61 + " FROM bsth_c_s_sp_info_real r RIGHT JOIN bsth_v_directive_60 d "
... ...
src/main/java/com/bsth/service/calc/impl/CalcToolServiceImpl.java
... ... @@ -236,21 +236,16 @@ public class CalcToolServiceImpl implements CalcToolService {
236 236 int lbbc=culateMileageService.culateLbbc(list_);
237 237 double lblc=culateMileageService.culateLbgl(list_);
238 238 double ssgl_lz= culateMileageService.culateCJLC(list_, "路阻");
239   - double ssgl_dm= culateMileageService.culateCJLC(list_, "吊慢");
  239 + double ssgl_dm= culateMileageService.culateCJLC(list_, "借调");
240 240 double ssgl_gz= culateMileageService.culateCJLC(list_, "故障");
241 241 double ssgl_jf= culateMileageService.culateCJLC(list_, "纠纷");
242   - double ssgl_zs= culateMileageService.culateCJLC(list_, "肇事");
  242 + double ssgl_zs= culateMileageService.culateCJLC(list_, "事故");
243 243 double ssgl_qr= culateMileageService.culateCJLC(list_, "缺人");
244   - double ssgl_qc= culateMileageService.culateCJLC(list_, "缺车");
245   - double ssgl_kx= culateMileageService.culateCJLC(list_, "客稀");
246   - double ssgl_qh= culateMileageService.culateCJLC(list_, "气候");
247   - double ssgl_yw= culateMileageService.culateCJLC(list_, "援外");
248   -
249   - double ssgl_pc=culateMileageService.culateCJLC(list_, "配车");
250   - double ssgl_by=culateMileageService.culateCJLC(list_, "保养");
251   - double ssgl_cj=culateMileageService.culateCJLC(list_, "抽减");
252   - double ssgl_qt=culateMileageService.culateCJLC(list_, "其他");
253   - double ssgl_qtz=Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj,ssgl_qt));
  244 + double ssgl_qc= culateMileageService.culateCJLC(list_, "验车");
  245 + double ssgl_kx= culateMileageService.culateCJLC(list_, "保养");
  246 + double ssgl_qh= culateMileageService.culateCJLC(list_, "天气");
  247 + double ssgl_yw= culateMileageService.culateCJLC(list_, "支援");
  248 + double ssgl_qtz=culateMileageService.culateCJLC(list_, "其他");
254 249 int fzbc=culateMileageService.culateDtfzbc(list_s, "major", "");//放站
255 250 int fzbcZgf=culateMileageService.culateDtfzbc(list_s, "major", "zgf");
256 251 int fzbcWgf=culateMileageService.culateDtfzbc(list_s, "major", "wgf");
... ...
src/main/java/com/bsth/service/calc/impl/CalcWaybillServiceImpl.java
... ... @@ -666,20 +666,16 @@ public class CalcWaybillServiceImpl extends BaseServiceImpl&lt;CalcWaybill, Integer
666 666 // }
667 667  
668 668 s.setLzlc(culateService.culateCJLC(list, "路阻"));
669   - s.setDmlc(culateService.culateCJLC(list, "吊慢"));
  669 + s.setDmlc(culateService.culateCJLC(list, "借调"));
670 670 s.setGzlc(culateService.culateCJLC(list, "故障"));
671 671 s.setJflc(culateService.culateCJLC(list, "纠纷"));
672   - s.setZslc(culateService.culateCJLC(list, "肇事"));
  672 + s.setZslc(culateService.culateCJLC(list, "事故"));
673 673 s.setQrlc(culateService.culateCJLC(list, "缺人"));
674   - s.setQclc(culateService.culateCJLC(list, "缺车"));
675   - s.setKxlc(culateService.culateCJLC(list, "客稀"));
676   - s.setQhlc(culateService.culateCJLC(list, "气候"));
677   - s.setYwlc(culateService.culateCJLC(list, "援外"));
678   - double ssgl_pc=culateService.culateCJLC(list, "配车");
679   - double ssgl_by=culateService.culateCJLC(list, "保养");
680   - double ssgl_cj=culateService.culateCJLC(list, "抽减");
681   - double ssgl_qt=culateService.culateCJLC(list, "其他");
682   - s.setQtlc(Arith.add(Arith.add(ssgl_pc, ssgl_by),Arith.add(ssgl_cj, ssgl_qt)));
  674 + s.setQclc(culateService.culateCJLC(list, "验车"));
  675 + s.setKxlc(culateService.culateCJLC(list, "保养"));
  676 + s.setQhlc(culateService.culateCJLC(list, "天气"));
  677 + s.setYwlc(culateService.culateCJLC(list, "支援"));
  678 + s.setQtlc(culateService.culateCJLC(list, "其他"));
683 679 s.setLjlc(ljgl);
684 680  
685 681 s.setJhbcq(culateService.culateJhbc(list,""));
... ...
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
... ... @@ -100,9 +100,14 @@ public class BusIntervalServiceImpl implements BusIntervalService {
100 100  
101 101 try {
102 102  
103   - String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str >= '"+startDate+"' and schedule_date_str <= '"+endDate+"'";
  103 + List<String> objList = new ArrayList<String>();
  104 + String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str >= ? and schedule_date_str <= ?";
  105 + objList.add(startDate);
  106 + objList.add(endDate);
  107 +
104 108 if(line.length() != 0){
105   - sql += " and xl_bm = '"+line+"'";
  109 + sql += " and xl_bm = ?";
  110 + objList.add(line);
106 111 }
107 112 if(times.length() != 0){
108 113 String[] split = times.split("-");
... ... @@ -117,16 +122,19 @@ public class BusIntervalServiceImpl implements BusIntervalService {
117 122 }
118 123 }
119 124 if(company.length() != 0){
120   - sql += " and gs_bm = '"+company+"'";
  125 + sql += " and gs_bm = ?";
  126 + objList.add(company);
121 127 }
122 128 if(subCompany.length() != 0){
123   - sql += " and fgs_bm = '"+subCompany+"'";
  129 + sql += " and fgs_bm = ?";
  130 + objList.add(subCompany);
124 131 }
125 132 if(normal){
126 133 sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
127 134 }
128 135  
129 136 list = jdbcTemplate.query(sql,
  137 + objList.toArray(),
130 138 new RowMapper<ScheduleRealInfo>(){
131 139 @Override
132 140 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -222,14 +230,20 @@ public class BusIntervalServiceImpl implements BusIntervalService {
222 230 });
223 231  
224 232 if(model.length() != 0){
225   -// sql = "select * from bsth_c_s_ttinfo_detail where ttinfo = '"+model+"' and bc_type != 'in' and bc_type != 'out'";
226   - sql = "select id from bsth_c_s_sp_info where tt_info = '" + model + "' and bc_type != 'in' and bc_type != 'out'" +
227   - " and bc_type != 'ldks' and schedule_date >= '"+startDate+"' and schedule_date <= '"+endDate+"'";
  233 + List<String> objList2 = new ArrayList<String>();
  234 + sql = "select id from bsth_c_s_sp_info where tt_info = ? and bc_type != 'in' and bc_type != 'out'" +
  235 + " and bc_type != 'ldks' and schedule_date >= ? and schedule_date <= ?";
  236 + objList2.add(model);
  237 + objList2.add(startDate);
  238 + objList2.add(endDate);
  239 +
228 240 if(line.length() != 0){
229   - sql += " and xl_bm = '"+line+"'";
  241 + sql += " and xl_bm = ?";
  242 + objList2.add(line);
230 243 }
231 244  
232 245 ttList = jdbcTemplate.query(sql,
  246 + objList2.toArray(),
233 247 new RowMapper<Long>(){
234 248 @Override
235 249 public Long mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -303,17 +317,22 @@ public class BusIntervalServiceImpl implements BusIntervalService {
303 317 Map<Long, Set<ChildTaskPlan>> schMap = new HashMap<Long, Set<ChildTaskPlan>>();
304 318 List<ChildTaskPlan> list = new ArrayList<ChildTaskPlan>();
305 319  
  320 + List<Object> objList = new ArrayList<Object>();
306 321 String sql = "select id,cc_id,mileage_type,destroy,destroy_reason," +
307 322 " mileage,type1,type2,schedule from bsth_c_s_child_task" +
308 323 " where 1=1";
  324 +
309 325 if(schedule1 != null && schedule1 > 0){
310   - sql += " and schedule >= '"+schedule1+"'";
  326 + sql += " and schedule >= ?";
  327 + objList.add(schedule1);
311 328 }
312 329 if(schedule2 != null && schedule2 > 0){
313   - sql += " and schedule <= '"+schedule2+"'";
  330 + sql += " and schedule <= ?";
  331 + objList.add(schedule2);
314 332 }
315 333  
316 334 list = jdbcTemplate.query(sql,
  335 + objList.toArray(),
317 336 new RowMapper<ChildTaskPlan>(){
318 337 @Override
319 338 public ChildTaskPlan mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -354,10 +373,12 @@ public class BusIntervalServiceImpl implements BusIntervalService {
354 373 String line = map.get("line").toString();
355 374  
356 375 try {
357   -
358   - String sql = "select start_station_name, end_station_name from bsth_c_line where line_code = '"+line+"'";
  376 + List<String> objList = new ArrayList<String>();
  377 + String sql = "select start_station_name, end_station_name from bsth_c_line where line_code = ?";
  378 + objList.add(line);
359 379  
360 380 list = jdbcTemplate.query(sql,
  381 + objList.toArray(),
361 382 new RowMapper<Map<String, Object>>(){
362 383 @Override
363 384 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -393,16 +414,22 @@ public class BusIntervalServiceImpl implements BusIntervalService {
393 414 String ttId = map.get("ttId").toString();
394 415  
395 416 try {
  417 + List<String> objList = new ArrayList<String>();
396 418 String sql = "select td.lp, lp.lp_name from bsth_c_s_ttinfo_detail td" +
397 419 " left join bsth_c_s_gbi lp on td.lp = lp.id" +
398 420 " left join bsth_c_line cl on cl.id = td.xl where 1=1";
399   - if(line.length() != 0)
400   - sql += " and cl.line_code = '"+line+"'";
401   - if(ttId.length() != 0)
402   - sql += " and td.ttinfo = '"+ttId+"'";
  421 + if(line.length() != 0){
  422 + sql += " and cl.line_code = ?";
  423 + objList.add(line);
  424 + }
  425 + if(ttId.length() != 0){
  426 + sql += " and td.ttinfo = ?";
  427 + objList.add(ttId);
  428 + }
403 429 sql += " group by td.lp, lp.lp_name";
404 430  
405 431 list = jdbcTemplate.query(sql,
  432 + objList.toArray(),
406 433 new RowMapper<Map<String, Object>>(){
407 434 @Override
408 435 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -2123,7 +2150,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2123 2150 if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("路阻") != -1){
2124 2151 lzbc++;
2125 2152 // lzlc = lzlc.add(lc);
2126   - }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("吊慢") != -1){
  2153 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("借调") != -1){
2127 2154 dmbc++;
2128 2155 // dmlc = dmlc.add(lc);
2129 2156 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("故障") != -1){
... ... @@ -2132,25 +2159,25 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2132 2159 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("纠纷") != -1){
2133 2160 jfbc++;
2134 2161 // jflc = jflc.add(lc);
2135   - }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("肇事") != -1){
  2162 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("事故") != -1){
2136 2163 zsbc++;
2137 2164 // zslc = zslc.add(lc);
2138 2165 }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("缺人") != -1){
2139 2166 qrbc++;
2140 2167 // qrlc = qrlc.add(lc);
2141   - }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("车") != -1){
  2168 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("车") != -1){
2142 2169 qcbc++;
2143 2170 // qclc = qclc.add(lc);
2144   - }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("客稀") != -1){
  2171 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("保养") != -1){
2145 2172 kxbc++;
2146 2173 // kxlc = kxlc.add(lc);
2147   - }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("气候") != -1){
  2174 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("天气") != -1){
2148 2175 qhbc++;
2149 2176 // qhlc = qhlc.add(lc);
2150   - }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("援外") != -1){
  2177 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("支援") != -1){
2151 2178 wybc++;
2152 2179 // wylc = wylc.add(lc);
2153   - } else {
  2180 + }else if(schedule.getAdjustExps() != null && schedule.getAdjustExps().indexOf("其他") != -1){
2154 2181 qtbc++;
2155 2182 // qtlc = qtlc.add(lc);
2156 2183 }
... ... @@ -2171,19 +2198,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2171 2198  
2172 2199 sjlc = new BigDecimal(culateService.culateSjgl(tempList) + culateService.culateLjgl(tempList));
2173 2200 lzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "路阻"));
2174   - dmlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "吊慢"));
  2201 + dmlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "借调"));
2175 2202 gzlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "故障"));
2176 2203 jflc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "纠纷"));
2177   - zslc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "肇事"));
  2204 + zslc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "事故"));
2178 2205 qrlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "缺人"));
2179   - qclc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "缺车"));
2180   - kxlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "客稀"));
2181   - qhlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "气候"));
2182   - wylc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "援外"));
2183   - qtlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "配车")).add(
2184   - new BigDecimal(culateService.culateCJLC(keyMap.get(key), "保养"))).add(
2185   - new BigDecimal(culateService.culateCJLC(keyMap.get(key), "抽减"))).add(
2186   - new BigDecimal(culateService.culateCJLC(keyMap.get(key), "其他")));
  2206 + qclc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "验车"));
  2207 + kxlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "保养"));
  2208 + qhlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "天气"));
  2209 + wylc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "支援"));
  2210 + qtlc = new BigDecimal(culateService.culateCJLC(keyMap.get(key), "其他"));
2187 2211  
2188 2212 boolean flag = true;
2189 2213 if(jhlc.doubleValue() == 0d){
... ... @@ -2359,11 +2383,14 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2359 2383 endDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
2360 2384 }
2361 2385 try {
2362   -
2363   - String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str"
2364   - + " >= '"+startDate+"' and schedule_date_str <= '"+endDate+"'";
  2386 + List<String> objList = new ArrayList<String>();
  2387 + String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str >= ? and schedule_date_str <= ?";
  2388 + objList.add(startDate);
  2389 + objList.add(endDate);
  2390 +
2365 2391 if(line.length() != 0){
2366   - sql += " and xl_bm = '"+line+"'";
  2392 + sql += " and xl_bm = ?";
  2393 + objList.add(line);
2367 2394 }
2368 2395 if(sfqr == 1 && times.length() != 0){
2369 2396 String[] split = times.split("-");
... ... @@ -2378,14 +2405,17 @@ public class BusIntervalServiceImpl implements BusIntervalService {
2378 2405 }
2379 2406 }
2380 2407 if(company.length() != 0){
2381   - sql += " and gs_bm = '"+company+"'";
  2408 + sql += " and gs_bm = ?";
  2409 + objList.add(company);
2382 2410 }
2383 2411 if(subCompany.length() != 0){
2384   - sql += " and fgs_bm = '"+subCompany+"'";
  2412 + sql += " and fgs_bm = ?";
  2413 + objList.add(subCompany);
2385 2414 }
2386 2415 sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
2387 2416  
2388 2417 list = jdbcTemplate.query(sql,
  2418 + objList.toArray(),
2389 2419 new RowMapper<ScheduleRealInfo>(){
2390 2420 @Override
2391 2421 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -3173,20 +3203,30 @@ public class BusIntervalServiceImpl implements BusIntervalService {
3173 3203 if(map.get("sfyy")!=null)
3174 3204 sfyy = map.get("sfyy").toString().trim();
3175 3205  
  3206 + List<String> objList = new ArrayList<String>();
3176 3207 String sql = "select id, cl_zbh, fcsj, fcsj_actual, j_gh, j_name, lp_name, qdz_name, " +
3177 3208 "schedule_date_str, xl_name, zdsj, zdsj_actual, fgs_bm, fgs_name, gs_name, xl_dir, xl_bm " +
3178 3209 "from bsth_c_s_sp_info_real " +
3179   - "where schedule_date_str >= '"+startDate+"' and schedule_date_str <= '"+endDate+"' " +
  3210 + "where schedule_date_str >= ? and schedule_date_str <= ? " +
3180 3211 "and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks' and cc_service = 0";
  3212 + objList.add(startDate);
  3213 + objList.add(endDate);
3181 3214  
3182   - if(company.length() != 0)
3183   - sql += " and gs_bm = '"+company+"'";
3184   - if(subCompany.length() != 0)
3185   - sql += " and fgs_bm = '"+subCompany+"'";
3186   - if(line.length() != 0)
3187   - sql += " and xl_bm = '"+line+"'";
  3215 + if(company.length() != 0){
  3216 + sql += " and gs_bm = ?";
  3217 + objList.add(company);
  3218 + }
  3219 + if(subCompany.length() != 0){
  3220 + sql += " and fgs_bm = ?";
  3221 + objList.add(subCompany);
  3222 + }
  3223 + if(line.length() != 0){
  3224 + sql += " and xl_bm = ?";
  3225 + objList.add(line);
  3226 + }
3188 3227  
3189 3228 List<ScheduleRealInfo> list = jdbcTemplate.query(sql,
  3229 + objList.toArray(),
3190 3230 new RowMapper<ScheduleRealInfo>(){
3191 3231 @Override
3192 3232 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -1286,9 +1286,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1286 1286  
1287 1287 List<Object[]> list0 = new ArrayList<Object[]>();
1288 1288 if(instructType > -1){
1289   - list0 = scheduleRealInfoRepository.historyMessage(line, d, t, device, instructType);
  1289 + list0 = scheduleRealInfoRepository.historyMessage(date, line, device, instructType);
1290 1290 } else {
1291   - list0 = scheduleRealInfoRepository.historyMessage(line, d, t, device);
  1291 + list0 = scheduleRealInfoRepository.historyMessage(date, line, device);
1292 1292 }
1293 1293 for (Object[] obj : list0) {
1294 1294 if (obj != null) {
... ... @@ -1325,9 +1325,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1325 1325 if(!device2.equals("")){
1326 1326 List<Object[]> list1 = new ArrayList<Object[]>();
1327 1327 if(instructType > -1){
1328   - list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2, instructType);
  1328 + list1 =scheduleRealInfoRepository.historyMessage(date, line, device2, instructType);
1329 1329 } else {
1330   - list1 =scheduleRealInfoRepository.historyMessage(line, d, t, device2);
  1330 + list1 =scheduleRealInfoRepository.historyMessage(date, line, device2);
1331 1331 }
1332 1332 for (Object[] obj : list1) {
1333 1333 if (obj != null) {
... ... @@ -2618,20 +2618,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2618 2618 double lbgl = culateService.culateLbgl(list_s);
2619 2619 map.put("ssgl", lbgl);
2620 2620 map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2621   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2621 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "借调"));
2622 2622 map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2623 2623 map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2624   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2624 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "事故"));
2625 2625 map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2626   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2627   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2628   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2629   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2630   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2631   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2632   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2633   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2634   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2626 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "验车"));
  2627 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "保养"));
  2628 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "天气"));
  2629 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "支援"));
  2630 + map.put("ssgl_other", culateService.culateCJLC(list_s, "其他"));
2635 2631 map.put("ssbc", culateService.culateLbbc(list_s));
2636 2632 double ljgl = culateService.culateLjgl(lists);
2637 2633 map.put("ljgl", ljgl);
... ... @@ -2715,20 +2711,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2715 2711 double lbgl = culateService.culateLbgl(list_s);
2716 2712 map.put("ssgl", lbgl);
2717 2713 map.put("ssgl_lz", culateService.culateCJLC(list_s, "路阻"));
2718   - map.put("ssgl_dm", culateService.culateCJLC(list_s, "吊慢"));
  2714 + map.put("ssgl_dm", culateService.culateCJLC(list_s, "借调"));
2719 2715 map.put("ssgl_gz", culateService.culateCJLC(list_s, "故障"));
2720 2716 map.put("ssgl_jf", culateService.culateCJLC(list_s, "纠纷"));
2721   - map.put("ssgl_zs", culateService.culateCJLC(list_s, "肇事"));
  2717 + map.put("ssgl_zs", culateService.culateCJLC(list_s, "事故"));
2722 2718 map.put("ssgl_qr", culateService.culateCJLC(list_s, "缺人"));
2723   - map.put("ssgl_qc", culateService.culateCJLC(list_s, "缺车"));
2724   - map.put("ssgl_kx", culateService.culateCJLC(list_s, "客稀"));
2725   - map.put("ssgl_qh", culateService.culateCJLC(list_s, "气候"));
2726   - map.put("ssgl_yw", culateService.culateCJLC(list_s, "援外"));
2727   - double ssgl_pc = culateService.culateCJLC(list_s, "配车");
2728   - double ssgl_by = culateService.culateCJLC(list_s, "保养");
2729   - double ssgl_cj = culateService.culateCJLC(list_s, "抽减");
2730   - double ssgl_qt = culateService.culateCJLC(list_s, "其他");
2731   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2719 + map.put("ssgl_qc", culateService.culateCJLC(list_s, "验车"));
  2720 + map.put("ssgl_kx", culateService.culateCJLC(list_s, "保养"));
  2721 + map.put("ssgl_qh", culateService.culateCJLC(list_s, "天气"));
  2722 + map.put("ssgl_yw", culateService.culateCJLC(list_s, "支援"));
  2723 + map.put("ssgl_other", culateService.culateCJLC(list_s, "其他"));
2732 2724 map.put("ssbc", culateService.culateLbbc(list_s));
2733 2725 double ljgl = culateService.culateLjgl(lists);
2734 2726 map.put("ljgl", ljgl);
... ... @@ -2811,20 +2803,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2811 2803 }
2812 2804  
2813 2805 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2814   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  2806 + map.put("ssgl_dm", culateService.culateCJLC(list, "借调"));
2815 2807 map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
2816 2808 map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
2817   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  2809 + map.put("ssgl_zs", culateService.culateCJLC(list, "事故"));
2818 2810 map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
2819   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
2820   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
2821   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
2822   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
2823   - double ssgl_pc = culateService.culateCJLC(list, "配车");
2824   - double ssgl_by = culateService.culateCJLC(list, "保养");
2825   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
2826   - double ssgl_qt = culateService.culateCJLC(list, "其他");
2827   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2811 + map.put("ssgl_qc", culateService.culateCJLC(list, "验车"));
  2812 + map.put("ssgl_kx", culateService.culateCJLC(list, "保养"));
  2813 + map.put("ssgl_qh", culateService.culateCJLC(list, "天气"));
  2814 + map.put("ssgl_yw", culateService.culateCJLC(list, "支援"));
  2815 + map.put("ssgl_other", culateService.culateCJLC(list, "其他"));
2828 2816 map.put("ssbc", culateService.culateLbbc(list));
2829 2817 map.put("ljgl", ljgl);
2830 2818 map.put("jhbc", culateService.culateJhbc(list, ""));
... ... @@ -2953,20 +2941,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
2953 2941 map.put("zt", 1);
2954 2942 }
2955 2943 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
2956   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  2944 + map.put("ssgl_dm", culateService.culateCJLC(list, "借调"));
2957 2945 map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
2958 2946 map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
2959   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  2947 + map.put("ssgl_zs", culateService.culateCJLC(list, "事故"));
2960 2948 map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
2961   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
2962   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
2963   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
2964   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
2965   - double ssgl_pc = culateService.culateCJLC(list, "配车");
2966   - double ssgl_by = culateService.culateCJLC(list, "保养");
2967   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
2968   - double ssgl_qt = culateService.culateCJLC(list, "其他");
2969   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  2949 + map.put("ssgl_qc", culateService.culateCJLC(list, "验车"));
  2950 + map.put("ssgl_kx", culateService.culateCJLC(list, "保养"));
  2951 + map.put("ssgl_qh", culateService.culateCJLC(list, "天气"));
  2952 + map.put("ssgl_yw", culateService.culateCJLC(list, "支援"));
  2953 + map.put("ssgl_other", culateService.culateCJLC(list, "其他"));
2970 2954  
2971 2955 map.put("ssbc", culateService.culateLbbc(list));
2972 2956 map.put("ljgl", ljgl);
... ... @@ -3147,20 +3131,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3147 3131 map.put("zt", 1);
3148 3132 }
3149 3133 map.put("ssgl_lz", culateService.culateCJLC(list, "路阻"));
3150   - map.put("ssgl_dm", culateService.culateCJLC(list, "吊慢"));
  3134 + map.put("ssgl_dm", culateService.culateCJLC(list, "借调"));
3151 3135 map.put("ssgl_gz", culateService.culateCJLC(list, "故障"));
3152 3136 map.put("ssgl_jf", culateService.culateCJLC(list, "纠纷"));
3153   - map.put("ssgl_zs", culateService.culateCJLC(list, "肇事"));
  3137 + map.put("ssgl_zs", culateService.culateCJLC(list, "事故"));
3154 3138 map.put("ssgl_qr", culateService.culateCJLC(list, "缺人"));
3155   - map.put("ssgl_qc", culateService.culateCJLC(list, "缺车"));
3156   - map.put("ssgl_kx", culateService.culateCJLC(list, "客稀"));
3157   - map.put("ssgl_qh", culateService.culateCJLC(list, "气候"));
3158   - map.put("ssgl_yw", culateService.culateCJLC(list, "援外"));
3159   - double ssgl_pc = culateService.culateCJLC(list, "配车");
3160   - double ssgl_by = culateService.culateCJLC(list, "保养");
3161   - double ssgl_cj = culateService.culateCJLC(list, "抽减");
3162   - double ssgl_qt = culateService.culateCJLC(list, "其他");
3163   - map.put("ssgl_other", Arith.add(Arith.add(ssgl_pc, ssgl_by), Arith.add(ssgl_cj, ssgl_qt)));
  3139 + map.put("ssgl_qc", culateService.culateCJLC(list, "验车"));
  3140 + map.put("ssgl_kx", culateService.culateCJLC(list, "保养"));
  3141 + map.put("ssgl_qh", culateService.culateCJLC(list, "天气"));
  3142 + map.put("ssgl_yw", culateService.culateCJLC(list, "支援"));
  3143 + map.put("ssgl_other", culateService.culateCJLC(list, "其他"));
3164 3144  
3165 3145 map.put("ssbc", culateService.culateLbbc(list));
3166 3146 map.put("ljgl", ljgl);
... ... @@ -3232,23 +3212,23 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
3232 3212 ssgl += childTaskPlan.getMileage();
3233 3213 if (childTaskPlan.getDestroyReason().equals("路阻")) {
3234 3214 ssgl_lz += childTaskPlan.getMileage();
3235   - } else if (childTaskPlan.getDestroyReason().equals("吊慢")) {
  3215 + } else if (childTaskPlan.getDestroyReason().equals("借调")) {
3236 3216 ssgl_dm += childTaskPlan.getMileage();
3237 3217 } else if (childTaskPlan.getDestroyReason().equals("故障")) {
3238 3218 ssgl_gz += childTaskPlan.getMileage();
3239 3219 } else if (childTaskPlan.getDestroyReason().equals("纠纷")) {
3240 3220 ssgl_jf += childTaskPlan.getMileage();
3241   - } else if (childTaskPlan.getDestroyReason().equals("肇事")) {
  3221 + } else if (childTaskPlan.getDestroyReason().equals("事故")) {
3242 3222 ssgl_zs += childTaskPlan.getMileage();
3243 3223 } else if (childTaskPlan.getDestroyReason().equals("缺人")) {
3244 3224 ssgl_qr += childTaskPlan.getMileage();
3245   - } else if (childTaskPlan.getDestroyReason().equals("车")) {
  3225 + } else if (childTaskPlan.getDestroyReason().equals("车")) {
3246 3226 ssgl_qc += childTaskPlan.getMileage();
3247   - } else if (childTaskPlan.getDestroyReason().equals("客稀")) {
  3227 + } else if (childTaskPlan.getDestroyReason().equals("保养")) {
3248 3228 ssgl_kx += childTaskPlan.getMileage();
3249   - } else if (childTaskPlan.getDestroyReason().equals("气候")) {
  3229 + } else if (childTaskPlan.getDestroyReason().equals("天气")) {
3250 3230 ssgl_qh += childTaskPlan.getMileage();
3251   - } else if (childTaskPlan.getDestroyReason().equals("援外")) {
  3231 + } else if (childTaskPlan.getDestroyReason().equals("支援")) {
3252 3232 ssgl_yw += childTaskPlan.getMileage();
3253 3233 } else {
3254 3234 ssgl_other += childTaskPlan.getMileage();
... ...
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
... ... @@ -31,7 +31,8 @@ public class CulateMileageServiceImpl implements CulateMileageService{
31 31 @Override
32 32 public List<Map<String, Object>> jobFwqk(List<ScheduleRealInfo> lists) {
33 33 // TODO Auto-generated method stub
34   - String[] lblxs = {"配车", "保养","故障","肇事","路阻","纠纷","缺人","客稀","缺车","气候","援外","吊慢","抽减","其他" };
  34 +// String[] lblxs = {"配车","保养","故障","肇事","路阻","纠纷","缺人","客稀","缺车","气候","援外","吊慢","抽减","其他" };
  35 + String[] lblxs = {"路阻","借调","故障","纠纷","事故","缺人","验车","保养","天气","支援","其他"};
35 36 List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
36 37 for (int i = 0; i < lists.size(); i++) {
37 38 ScheduleRealInfo scheduleRealInfo = lists.get(i);
... ...
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
... ... @@ -1671,7 +1671,8 @@ public class ReportServiceImpl implements ReportService{
1671 1671 @Override
1672 1672 public List<Map<String, Object>> jobFwqk(Map<String, Object> map) {
1673 1673 // TODO Auto-generated method stub
1674   - String[] lblxs = {"配车", "保养","故障","肇事","路阻","纠纷","缺人","客稀","缺车","气候","援外","吊慢","抽减","其他" };
  1674 +// String[] lblxs = {"配车","保养","故障","肇事","路阻","纠纷","缺人","客稀","缺车","气候","援外","吊慢","抽减","其他" };
  1675 + String[] lblxs = {"路阻","借调","故障","纠纷","事故","缺人","验车","保养","天气","支援","其他"};
1675 1676 String line=map.get("line").toString();
1676 1677 String date=map.get("date").toString();
1677 1678 map.put("bcType", "normal");
... ... @@ -2694,20 +2695,20 @@ public class ReportServiceImpl implements ReportService{
2694 2695 double lbss=culateService.culateSsMile(list);//烂班少驶
2695 2696 map.put("lbss", lbss);
2696 2697 map.put("ssgl_lz", culateService.culateSsMileXx(list, "路阻"));
2697   - map.put("ssgl_dm", culateService.culateSsMileXx(list, "吊慢"));
  2698 + map.put("ssgl_dm", culateService.culateSsMileXx(list, "借调"));
2698 2699 map.put("ssgl_gz", culateService.culateSsMileXx(list, "故障"));
2699 2700 map.put("ssgl_jf", culateService.culateSsMileXx(list, "纠纷"));
2700   - map.put("ssgl_zs", culateService.culateSsMileXx(list, "肇事"));
  2701 + map.put("ssgl_zs", culateService.culateSsMileXx(list, "事故"));
2701 2702 map.put("ssgl_qr", culateService.culateSsMileXx(list, "缺人"));
2702   - map.put("ssgl_qc", culateService.culateSsMileXx(list, "缺车"));
2703   - map.put("ssgl_kx", culateService.culateSsMileXx(list, "客稀"));
2704   - map.put("ssgl_qh", culateService.culateSsMileXx(list, "气候"));
2705   - map.put("ssgl_yw", culateService.culateSsMileXx(list, "援外"));
  2703 + map.put("ssgl_qc", culateService.culateSsMileXx(list, "验车"));
  2704 + map.put("ssgl_kx", culateService.culateSsMileXx(list, "保养"));
  2705 + map.put("ssgl_qh", culateService.culateSsMileXx(list, "天气"));
  2706 + map.put("ssgl_yw", culateService.culateSsMileXx(list, "支援"));
2706 2707 map.put("ssgl_other", culateService.culateSsMileXx(list, "其他"));
2707 2708  
2708 2709  
2709 2710 double zrwjcclc=culateService.culateZrwJccLc(list, "故障");
2710   - double zrwjcclc1=culateService.culateZrwJccLc(list, "肇事");
  2711 + double zrwjcclc1=Arith.add(culateService.culateZrwJccLc(list, "肇事"), culateService.culateZrwJccLc(list, "事故"));
2711 2712 double zrwjcclc2=culateService.culateZrwJccLc(list, "纠纷");
2712 2713 double zrwjcclcqt=Arith.add(culateService.culateZrwJccLc(list, "其他"),culateService.culateZrwJccLc(list, ""));
2713 2714 map.put("jhwjcclc_z", Arith.add(jhwjcclc,zrwjcclcqt));
... ...
src/main/java/com/bsth/service/schedule/impl/PeopleCarPlanServiceImpl.java
... ... @@ -46,18 +46,27 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
46 46 List<ScheduleRealInfo> list = new ArrayList<ScheduleRealInfo>();
47 47  
48 48 try {
49   - String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str = '"+date+"'";
  49 + List<String> objList = new ArrayList<String>();
  50 + String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str = ?";
  51 + objList.add(date);
50 52  
51   - if(line.length() != 0)
52   - sql += " and xl_bm = '"+line+"'";
53   - if(company.length() != 0)
54   - sql += " and gs_bm = '"+company+"'";
55   - if(subCompany.length() != 0)
56   - sql += " and fgs_bm = '"+subCompany+"'";
  53 + if(line.length() != 0){
  54 + sql += " and xl_bm = ?";
  55 + objList.add(line);
  56 + }
  57 + if(company.length() != 0){
  58 + sql += " and gs_bm = ?";
  59 + objList.add(company);
  60 + }
  61 + if(subCompany.length() != 0){
  62 + sql += " and fgs_bm = ?";
  63 + objList.add(subCompany);
  64 + }
57 65  
58 66 sql += " order by gs_bm, fgs_bm, xl_bm";
59 67  
60 68 list = jdbcTemplate.query(sql,
  69 + objList.toArray(),
61 70 new RowMapper<ScheduleRealInfo>(){
62 71 @Override
63 72 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -193,17 +202,25 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
193 202 }
194 203  
195 204 try {
196   -
197   - String sql = "select * from bsth_c_s_sp_info where schedule_date = '"+date+"'";
  205 + List<String> objList = new ArrayList<String>();
  206 + String sql = "select * from bsth_c_s_sp_info where schedule_date = ?";
  207 + objList.add(date);
  208 +
198 209 if(line.length() != 0){
199   - sql += " and xl_bm = '"+line+"'";
  210 + sql += " and xl_bm = ?";
  211 + objList.add(line);
  212 + }
  213 + if(company.length() != 0){
  214 + sql += " and gs_bm = ?";
  215 + objList.add(company);
  216 + }
  217 + if(subCompany.length() != 0){
  218 + sql += " and fgs_bm = ?";
  219 + objList.add(subCompany);
200 220 }
201   - if(company.length() != 0)
202   - sql += " and gs_bm = '"+company+"'";
203   - if(subCompany.length() != 0)
204   - sql += " and fgs_bm = '"+subCompany+"'";
205 221  
206 222 list = jdbcTemplate.query(sql,
  223 + objList.toArray(),
207 224 new RowMapper<SchedulePlanInfo>(){
208 225 @Override
209 226 public SchedulePlanInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -601,19 +618,25 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
601 618 endDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
602 619 }
603 620 try {
604   -
  621 + List<String> objList = new ArrayList<String>();
605 622 String sql = "select schedule_date_str,xl_name,bc_type,gs_name,fgs_name,fgs_bm,bcs,"
606 623 +"fcno,fcsj,fcsj_actual,zdsj,zdsj_actual,bcsj,qdz_name,sp_id,cc_service"
607   - +" from bsth_c_s_sp_info_real where schedule_date_str >= '"+startDate
608   - +"' and schedule_date_str <= '"+endDate+"'";
  624 + +" from bsth_c_s_sp_info_real where schedule_date_str >= ?"
  625 + +" and schedule_date_str <= ?";
  626 + objList.add(startDate);
  627 + objList.add(endDate);
  628 +
609 629 if(line.length() != 0){
610   - sql += " and xl_bm = '"+line+"'";
  630 + sql += " and xl_bm = ?";
  631 + objList.add(line);
611 632 }
612 633 if(company.length() != 0){
613   - sql += " and gs_bm = '"+company+"'";
  634 + sql += " and gs_bm = ?";
  635 + objList.add(company);
614 636 }
615 637 if(subCompany.length() != 0){
616   - sql += " and fgs_bm = '"+subCompany+"'";
  638 + sql += " and fgs_bm = ?";
  639 + objList.add(subCompany);
617 640 }
618 641 sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
619 642 if(Integer.valueOf(bcType) == 1){
... ... @@ -622,6 +645,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
622 645 sql += " and bc_type = 'region'";
623 646 }
624 647 list = jdbcTemplate.query(sql,
  648 + objList.toArray(),
625 649 new RowMapper<ScheduleRealInfo>(){
626 650 @Override
627 651 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -915,19 +939,26 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
915 939 endDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
916 940 }
917 941 try {
918   -
919   - String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str >= '"+startDate+"' and schedule_date_str <= '"+endDate+"'";
  942 + List<String> objList = new ArrayList<String>();
  943 + String sql = "select * from bsth_c_s_sp_info_real where schedule_date_str >= ? and schedule_date_str <= ?";
  944 + objList.add(startDate);
  945 + objList.add(endDate);
  946 +
920 947 if(line.length() != 0){
921   - sql += " and xl_bm = '"+line+"'";
  948 + sql += " and xl_bm = ?";
  949 + objList.add(line);
922 950 }
923 951 if(nbbm.length() != 0){
924   - sql += " and cl_zbh like '%"+nbbm+"%'";
  952 + sql += " and cl_zbh like ?";
  953 + objList.add("%" + nbbm + "%");
925 954 }
926 955 if(company.length() != 0){
927   - sql += " and gs_bm like '"+company+"'";
  956 + sql += " and gs_bm = ?";
  957 + objList.add(company);
928 958 }
929 959 if(subCompany.length() != 0){
930   - sql += " and fgs_bm like '"+subCompany+"'";
  960 + sql += " and fgs_bm = ?";
  961 + objList.add(subCompany);
931 962 }
932 963 sql += " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks'";
933 964 if(bcType.trim().equals("1")){
... ... @@ -937,6 +968,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
937 968 }
938 969  
939 970 list = jdbcTemplate.query(sql,
  971 + objList.toArray(),
940 972 new RowMapper<ScheduleRealInfo>(){
941 973 @Override
942 974 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -1206,20 +1238,28 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1206 1238 isCancel = map.get("isCancel").toString().trim();
1207 1239 }
1208 1240 try {
  1241 + List<String> objList = new ArrayList<String>();
1209 1242 String sql = "select tt.id, tt.name from bsth_c_s_ttinfo tt left join" +
1210 1243 " (select tt_info from bsth_c_s_sp_info where 1=1";
1211   - if(startDate.trim().length() > 0)
1212   - sql += " and schedule_date >= '"+startDate+"'";
1213   - if(endDate.trim().length() > 0)
1214   - sql += " and schedule_date <= '"+endDate+"'";
  1244 +
  1245 + if(startDate.trim().length() > 0){
  1246 + sql += " and schedule_date >= ?";
  1247 + objList.add(startDate);
  1248 + }
  1249 + if(endDate.trim().length() > 0){
  1250 + sql += " and schedule_date <= ?";
  1251 + objList.add(endDate);
  1252 + }
1215 1253 if(line.trim().length() != 0){
1216   - sql += " and xl_bm = '"+line+"'";
  1254 + sql += " and xl_bm = ?";
  1255 + objList.add(line);
1217 1256 } else {
1218 1257 return resList;
1219 1258 }
1220 1259 sql += " ) sp on sp.tt_info = tt.id where sp.tt_info is not null group by tt.id, tt.name";
1221 1260  
1222 1261 resList = jdbcTemplate.query(sql,
  1262 + objList.toArray(),
1223 1263 new RowMapper<Map<String, Object>>(){
1224 1264 @Override
1225 1265 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -1261,18 +1301,28 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1261 1301 date = sdf.format(new Date());
1262 1302  
1263 1303 try {
  1304 + List<String> objList = new ArrayList<String>();
1264 1305 String sql = "select a.schedule_date_str, a.real_exec_date, a.xl_name, a.fcsj, a.fcsj_actual, a.zdsj, a.zdsj_actual, a.qdz_name, a.zdz_name, a.xl_dir, a.status, a.gs_name, a.fgs_name,"
1265 1306 + " a.xl_bm, a.fgs_bm, a.cc_service, b.start_opt from bsth_c_s_sp_info_real a left join (select line, start_opt from bsth_c_line_config order by id desc) b on a.xl_bm = b.line"
1266   - + " where schedule_date_str = '"+date+"'"
  1307 + + " where schedule_date_str = ?"
1267 1308 + " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks' and bc_type != 'region'";
1268   - if(line.trim().length() != 0)
1269   - sql += " and xl_bm = '"+line+"'";
1270   - if(company.length() != 0)
1271   - sql += " and gs_bm = '"+company+"'";
1272   - if(subCompany.length() != 0)
1273   - sql += " and fgs_bm = '"+subCompany+"'";
  1309 + objList.add(date);
  1310 +
  1311 + if(line.trim().length() != 0){
  1312 + sql += " and xl_bm = ?";
  1313 + objList.add(line);
  1314 + }
  1315 + if(company.length() != 0){
  1316 + sql += " and gs_bm = ?";
  1317 + objList.add(company);
  1318 + }
  1319 + if(subCompany.length() != 0){
  1320 + sql += " and fgs_bm = ?";
  1321 + objList.add(subCompany);
  1322 + }
1274 1323  
1275 1324 list = jdbcTemplate.query(sql,
  1325 + objList.toArray(),
1276 1326 new RowMapper<ScheduleRealInfo>(){
1277 1327 @Override
1278 1328 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -1532,19 +1582,30 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
1532 1582 }
1533 1583  
1534 1584 try {
  1585 + List<String> objList = new ArrayList<String>();
1535 1586 String sql = "select a.schedule_date_str, a.real_exec_date, a.xl_bm, a.xl_name, a.fcsj, a.fcsj_actual, a.zdsj, a.zdsj_actual, a.qdz_name, a.zdz_name, a.xl_dir, a.status, a.gs_name, a.fgs_name,"
1536 1587 + " a.fgs_bm, a.cc_service, a.remarks, a.adjust_exps, b.start_opt from bsth_c_s_sp_info_real a left join (select line, start_opt from bsth_c_line_config order by id desc) b "
1537 1588 + " on a.xl_bm = b.line"
1538   - + " where schedule_date_str >= '"+startDate+"' and schedule_date_str <= '"+endDate+"'"
  1589 + + " where schedule_date_str >= ? and schedule_date_str <= ?"
1539 1590 + " and bc_type != 'in' and bc_type != 'out' and bc_type != 'ldks' and bc_type != 'region'";
1540   - if(line.length() != 0)
1541   - sql += " and xl_bm = '"+line+"'";
1542   - if(company.length() != 0)
1543   - sql += " and gs_bm = '"+company+"'";
1544   - if(subCompany.length() != 0)
1545   - sql += " and fgs_bm = '"+subCompany+"'";
  1591 + objList.add(startDate);
  1592 + objList.add(endDate);
  1593 +
  1594 + if(line.length() != 0){
  1595 + sql += " and xl_bm = ?";
  1596 + objList.add(line);
  1597 + }
  1598 + if(company.length() != 0){
  1599 + sql += " and gs_bm = ?";
  1600 + objList.add(company);
  1601 + }
  1602 + if(subCompany.length() != 0){
  1603 + sql += " and fgs_bm = ?";
  1604 + objList.add(subCompany);
  1605 + }
1546 1606  
1547 1607 list = jdbcTemplate.query(sql,
  1608 + objList.toArray(),
1548 1609 new RowMapper<ScheduleRealInfo>(){
1549 1610 @Override
1550 1611 public ScheduleRealInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -2150,24 +2211,30 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
2150 2211 // String code = map.get("code").toString();
2151 2212 String type = map.get("type").toString();
2152 2213  
  2214 + List<String> objList = new ArrayList<String>();
2153 2215 String sql_="select * from bsth_c_s_sp_info_real "
2154   - + " WHERE schedule_date_str = '"+date+"' ";
  2216 + + " WHERE schedule_date_str = ? ";
  2217 + objList.add(date);
  2218 +
2155 2219 if(!line.equals("")){
2156   - sql_ += " and xl_bm = '"+line+"'";
  2220 + sql_ += " and xl_bm = ?";
  2221 + objList.add(line);
2157 2222 }
2158 2223 if(company.length() != 0){
2159   - sql_ += " and gs_bm='"+company+"'";
  2224 + sql_ += " and gs_bm = ?";
  2225 + objList.add(company);
2160 2226 }
2161 2227 if(subCompany.length() != 0){
2162   - sql_ += " and fgs_bm='"+subCompany+"'";
  2228 + sql_ += " and fgs_bm = ?";
  2229 + objList.add(subCompany);
2163 2230 }
2164 2231  
2165   -
2166 2232 String sql="SELECT r.id,r.schedule_date_str,r.xl_name,r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,r.fcsj,"
2167 2233 + " r.gs_name,r.fgs_name,CONCAT(r.xl_bm,'_',r.id) as line_sch FROM ("+sql_+") AS r"
2168 2234 + " order by r.gs_bm,r.fgs_bm,r.xl_bm,r.id ";
2169 2235  
2170 2236 List<Map<String, Object>> tempList = jdbcTemplate.query(sql,
  2237 + objList.toArray(),
2171 2238 new RowMapper<Map<String, Object>>(){
2172 2239 @Override
2173 2240 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -2372,14 +2439,18 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
2372 2439 // String code = map.get("code").toString();
2373 2440 String type = map.get("type").toString();
2374 2441  
  2442 + List<String> objList = new ArrayList<String>();
2375 2443 String sql_="select * from bsth_c_s_sp_info_real "
2376   - + " WHERE schedule_date_str = '"+date+"' and xl_bm = '"+line+"'";
  2444 + + " WHERE schedule_date_str = ? and xl_bm = ?";
  2445 + objList.add(date);
  2446 + objList.add(line);
2377 2447  
2378 2448 String sql="SELECT r.id,r.schedule_date_str,r.xl_name,r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,r.fcsj,"
2379 2449 + " r.gs_name,r.fgs_name,CONCAT(r.xl_bm,'_',r.id) as gh_sch FROM ("+sql_+") AS r"
2380 2450 + " order by r.xl_name,r.id ";
2381 2451  
2382 2452 List<Map<String, Object>> list = jdbcTemplate.query(sql,
  2453 + objList.toArray(),
2383 2454 new RowMapper<Map<String, Object>>(){
2384 2455 @Override
2385 2456 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
... ... @@ -2577,14 +2648,17 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
2577 2648 if(map.get("type")!=null)
2578 2649 type = map.get("type").toString().trim();
2579 2650  
2580   - String sql_="select * from bsth_c_s_sp_info_real "
2581   - + " WHERE schedule_date_str = '"+date+"' and j_gh = '"+jgh+"'";
  2651 + List<String> objList = new ArrayList<String>();
  2652 + String sql_ = "select * from bsth_c_s_sp_info_real "
  2653 + + " WHERE schedule_date_str = ? and j_gh = ?";
  2654 + objList.add(date);
  2655 + objList.add(jgh);
2582 2656  
2583 2657 if(!line.equals("")){
2584   - sql_ +=" and xl_bm = '"+line+"'";
  2658 + sql_ +=" and xl_bm = ?";
  2659 + objList.add(line);
2585 2660 }
2586 2661  
2587   -
2588 2662 String sql="SELECT r.id,r.schedule_date_str,r.fcsj,r.xl_name,r.xl_bm,r.cl_zbh,r.j_gh,r.j_name,"
2589 2663 + " r.fcsj,d. TIMESTAMP,d.reply46,d.reply47,d.reply46time,d.reply47time,"
2590 2664 + " r.gs_name,r.fgs_name FROM ("+sql_+") "
... ... @@ -2593,6 +2667,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
2593 2667  
2594 2668  
2595 2669 List<Map<String, Object>> list = jdbcTemplate.query(sql,
  2670 + objList.toArray(),
2596 2671 new RowMapper<Map<String, Object>>(){
2597 2672 @Override
2598 2673 public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
... ...
src/main/resources/static/pages/base/stationroute/add.html
... ... @@ -381,7 +381,7 @@ $(&#39;#add_station_mobal&#39;).on(&#39;AddStationMobal.show&#39;, function(e, addMap,ajaxd,stao
381 381 staobj.setAddStation({});
382 382 var add_direction_v = $('#stationdirSelect').val();
383 383 var version = $("#versions").val();
384   - PublicFunctions.resjtreeDate(Line.id,add_direction_v,version);
  384 + fun.resjtreeDate(Line.id,add_direction_v,version);
385 385 //ajaxd.getSectionRouteInfo(Line.id,add_direction_v,version,function(data) {
386 386 // fun.linePanlThree(Line.id,data,add_direction_v,version);
387 387 //});
... ...
src/main/resources/static/pages/base/stationroute/js/stationroute-ajax-getdata.js
... ... @@ -98,12 +98,12 @@ var GetAjaxData = function(){
98 98 });
99 99 },
100 100 findUpStationRouteCode : function(lineId,diraction,stationRouteCode,callback) {
101   - $get('/stationroute/findUpStationRouteCode',{lineId:lineId,direction:diraction,stationRouteCode:stationRouteCode,version:version},function(result) {
  101 + $get('/stationroute/findUpStationRouteCode',{lineId:lineId,direction:diraction,stationRouteCode:stationRouteCode},function(result) {
102 102 callback && callback(result);
103 103 });
104 104 },
105 105 findUpSectionRouteCode : function(lineId,diraction,sectionRouteCode,callback) {
106   - $get('/sectionroute/findUpSectionRouteCode',{lineId:lineId,direction:diraction,sectionRouteCode:sectionRouteCode,version:version},function(result) {
  106 + $get('/sectionroute/findUpSectionRouteCode',{lineId:lineId,direction:diraction,sectionRouteCode:sectionRouteCode},function(result) {
107 107 callback && callback(result);
108 108 });
109 109 },
... ...
src/main/resources/static/pages/base/stationroute/js/stationroute-list-function.js
... ... @@ -118,7 +118,7 @@ var PublicFunctions = function () {
118 118 $('#inout_carpark_tree').show();
119 119 $('#InoutCarparktreeMobal .table-toolbar').show();
120 120  
121   - GetAjaxData.getRouteByStartEnd(id, version, start[0], end[0], function (result1) {
  121 + GetAjaxData.getRouteByStartEnd(id, version, start[0], end[0], function (result1){
122 122 var routes = result1.data.routes, rootNode;
123 123 WorldsBMap.clearMarkAndOverlays();
124 124 var startPoint = mapData[start.join('_')], endPoint = mapData[end.join('_')], point, points;
... ...
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
... ... @@ -549,7 +549,7 @@ window.WorldsBMap = function () {
549 549 var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'
550 550 + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'
551 551 + '</div>'
552   - + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">' + s + '</span>' + stationName + '</label>';
  552 + + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 11px;">' + s + '</span>' + stationName + '</label>';
553 553  
554 554 var myRichMarker1 = new BMapLib.RichMarker(html2, point_center, {
555 555 "title": stationName,
... ...
src/main/resources/static/pages/forms/mh_sj/scheduleDaily/scheduleDaily_mh.html
... ... @@ -95,16 +95,16 @@ word-wrap: break-word;
95 95 <td colspan="5" rowspan="2">原因</td>
96 96 </tr>
97 97 <tr>
98   - <td><span >路阻</span></td>
99   - <td><span>吊慢</span></td>
100   - <td><span >故障</span></td>
101   - <td><span >纠纷</span></td>
102   - <td><span >肇事</span></td>
  98 + <td><span>路阻</span></td>
  99 + <td><span>借调</span></td>
  100 + <td><span>故障</span></td>
  101 + <td><span>纠纷</span></td>
  102 + <td><span>事故</span></td>
103 103 <td><span>缺人</span></td>
104   - <td><span>缺车</span></td>
105   - <td><span >客稀</span></td>
106   - <td><span>气候</span></td>
107   - <td><span>援外</span></td>
  104 + <td><span>验车</span></td>
  105 + <td><span>保养</span></td>
  106 + <td><span>天气</span></td>
  107 + <td><span>支援</span></td>
108 108 <td><span>其他</span></td>
109 109 <td><span ><c>全日</c></span></td>
110 110 <td><span >早高峰</span></td>
... ...
src/main/resources/static/pages/forms/mould/lbStatuAnaly.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/scheduleDaily.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/scheduleDaily_m.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/statisticsDaily_2.xls
No preview for this file type
src/main/resources/static/pages/forms/statement/historyMessage.html
... ... @@ -31,10 +31,9 @@
31 31 <span class="item-label" style="width: 80px;">指令类型: </span>
32 32 <select class="form-control" id="directiveSelect" name="dType">
33 33 <option value="-1">全部</option>
34   - <option value="0">调度指令</option>
35   - <option value="1">运营指令</option>
36   - <option value="2">线路切换指令</option>
37   - <option value="3">消息短语</option>
  34 + <option value="2">调度指令</option>
  35 + <option value="3">运营指令</option>
  36 + <option value="0">消息短语</option>
38 37 </select>
39 38 </div>
40 39 <div style="display: inline-block;margin-left: 12px;">
... ...
src/main/resources/static/pages/forms/statement/lbStatuAnaly.html
... ... @@ -33,15 +33,15 @@
33 33 <span class="item-label" style="width: 80px;">烂班原因: </span>
34 34 <input class="form-control" type="checkbox" id="totalLb" style="width: 20px;" checked="true"/>全选
35 35 <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="0" checked="true"/>路阻
36   - <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="1" checked="true"/>吊慢
  36 + <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="1" checked="true"/>借调
37 37 <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="2" checked="true"/>故障
38 38 <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="3" checked="true"/>纠纷
39   - <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="4" checked="true"/>肇事
  39 + <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="4" checked="true"/>事故
40 40 <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="5" checked="true"/>缺人
41   - <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="6" checked="true"/>缺车
42   - <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="7" checked="true"/>客稀
43   - <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="8" checked="true"/>气候
44   - <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="9" checked="true"/>援外
  41 + <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="6" checked="true"/>验车
  42 + <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="7" checked="true"/>保养
  43 + <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="8" checked="true"/>天气
  44 + <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="9" checked="true"/>支援
45 45 <input class="form-control" type="checkbox" name="reason" style="width: 20px;" value="10" checked="true"/>其他
46 46 </div>
47 47 <div style="margin-top: 5px"></div>
... ... @@ -538,15 +538,15 @@
538 538 <tr>
539 539 <th class="hidden"></th>
540 540 {{if reason[0].checked == true}}<th colspan="3">路阻</th>{{/if}}
541   - {{if reason[1].checked == true}}<th colspan="3">吊慢</th>{{/if}}
  541 + {{if reason[1].checked == true}}<th colspan="3">借调</th>{{/if}}
542 542 {{if reason[2].checked == true}}<th colspan="3">故障</th>{{/if}}
543 543 {{if reason[3].checked == true}}<th colspan="3">纠纷</th>{{/if}}
544   - {{if reason[4].checked == true}}<th colspan="3">肇事</th>{{/if}}
  544 + {{if reason[4].checked == true}}<th colspan="3">事故</th>{{/if}}
545 545 {{if reason[5].checked == true}}<th colspan="3">缺人</th>{{/if}}
546   - {{if reason[6].checked == true}}<th colspan="3">缺车</th>{{/if}}
547   - {{if reason[7].checked == true}}<th colspan="3">客稀</th>{{/if}}
548   - {{if reason[8].checked == true}}<th colspan="3">气候</th>{{/if}}
549   - {{if reason[9].checked == true}}<th colspan="3">援外</th>{{/if}}
  546 + {{if reason[6].checked == true}}<th colspan="3">验车</th>{{/if}}
  547 + {{if reason[7].checked == true}}<th colspan="3">保养</th>{{/if}}
  548 + {{if reason[8].checked == true}}<th colspan="3">天气</th>{{/if}}
  549 + {{if reason[9].checked == true}}<th colspan="3">支援</th>{{/if}}
550 550 {{if reason[10].checked == true}}<th colspan="3">其他</th>{{/if}}
551 551 </tr>
552 552 <tr>
... ...
src/main/resources/static/pages/forms/statement/scheduleDaily.html
... ... @@ -92,15 +92,15 @@
92 92 </tr>
93 93 <tr>
94 94 <td><span>路阻</span></td>
95   - <td><span>吊慢</span></td>
  95 + <td><span>借调</span></td>
96 96 <td><span>故障</span></td>
97 97 <td><span>纠纷</span></td>
98   - <td><span>肇事</span></td>
  98 + <td><span>事故</span></td>
99 99 <td><span>缺人</span></td>
100   - <td><span>缺车</span></td>
101   - <td><span>客稀</span></td>
102   - <td><span>气候</span></td>
103   - <td><span>援外</span></td>
  100 + <td><span>验车</span></td>
  101 + <td><span>保养</span></td>
  102 + <td><span>天气</span></td>
  103 + <td><span>支援</span></td>
104 104 <td><span>其他</span></td>
105 105 <td><span>全日</span></td>
106 106 <td><span>早高峰</span></td>
... ...
src/main/resources/static/pages/forms/statement/scheduleDailyQp.html
... ... @@ -74,15 +74,15 @@
74 74 </tr>
75 75 <tr>
76 76 <td>路阻</td>
77   - <td>吊慢</td>
  77 + <td>借调</td>
78 78 <td>故障</td>
79 79 <td>纠纷</td>
80   - <td>肇事</td>
  80 + <td>事故</td>
81 81 <td>缺人</td>
82   - <td>缺车</td>
83   - <td>客稀</td>
84   - <td>气候</td>
85   - <td>援外</td>
  82 + <td>验车</td>
  83 + <td>保养</td>
  84 + <td>天气</td>
  85 + <td>支援</td>
86 86 <td>其他</td>
87 87 <td><c>全日</c></td>
88 88 <td>早高峰</td>
... ...
src/main/resources/static/pages/forms/statement/statisticsDaily.html
... ... @@ -111,16 +111,16 @@
111 111 <td rowspan="2">原因</td>
112 112 </tr>
113 113 <tr>
114   - <td><span >路阻</span></td>
115   - <td><span>吊慢</span></td>
116   - <td><span >故障</span></td>
117   - <td><span >纠纷</span></td>
118   - <td><span >肇事</span></td>
  114 + <td><span>路阻</span></td>
  115 + <td><span>借调</span></td>
  116 + <td><span>故障</span></td>
  117 + <td><span>纠纷</span></td>
  118 + <td><span>事故</span></td>
119 119 <td><span>缺人</span></td>
120   - <td><span>缺车</span></td>
121   - <td><span >客稀</span></td>
122   - <td><span>气候</span></td>
123   - <td><span>援外</span></td>
  120 + <td><span>验车</span></td>
  121 + <td><span>保养</span></td>
  122 + <td><span>天气</span></td>
  123 + <td><span>支援</span></td>
124 124 <td><span>其他</span></td>
125 125 <td><span>营运</span></td>
126 126 <td><span>空驶</span></td>
... ...
src/main/resources/static/pages/permission/user/changePWD.html
1   -<div class="row">
2   -<div class="col-md-12">
3   -<!-- BEGIN VALIDATION STATES-->
4   -<div class="portlet light portlet-fit portlet-form bordered">
5   -<div class="portlet-body">
6   - <form class="form-horizontal" id="changePWDForm">
7   - <div class="form-group" style="margin-top: 60px">
8   - <label class="control-label col-md-5">原始密码:
9   - </label>
10   - <div class="col-md-4">
11   - <div class="input-icon right">
12   - <i class="fa"></i>
13   - <input type="password" class="form-control" name="oldPWD" /> </div>
14   - </div>
15   - </div>
16   - <div class="form-group">
17   - <label class="control-label col-md-5">输入新密码:
18   - </label>
19   - <div class="col-md-4">
20   - <div class="input-icon right">
21   - <i class="fa"></i>
22   - <input type="password" class="form-control" name="newPWD" /> </div>
23   - </div>
24   - </div>
25   - <div class="form-group">
26   - <label class="control-label col-md-5">确认新密码:
27   - </label>
28   - <div class="col-md-4">
29   - <div class="input-icon right">
30   - <i class="fa"></i>
31   - <input type="password" class="form-control" name="cnewPWD" /> </div>
32   - </div>
33   - </div>
34   - <div class="form-actions">
35   - <div class="row">
36   - <div class="col-md-offset-5 col-md-7">
37   - <button type="button" id="confirm" class="btn green">确定</button>
38   - <button type="reset" class="btn default">取消</button>
39   - </div>
40   - </div>
41   - </div>
42   - </form>
43   -</div>
44   -</div>
45   -</div>
46   -</div>
47   -
48   -<script>
49   -$(function(){
50   - $("#confirm").on("click",function(){
51   - var data = $('#changePWDForm').serializeJSON();
52   - $.post('/user/changePWD',data,function(msg){
53   - layer.alert(msg);
54   - });
55   - });
56   -});
  1 +<div class="row">
  2 +<div class="col-md-12">
  3 +<!-- BEGIN VALIDATION STATES-->
  4 +<div class="portlet light portlet-fit portlet-form bordered">
  5 +<div class="portlet-body">
  6 + <form class="form-horizontal" id="changePWDForm">
  7 + <div class="alert alert-danger display-hide">
  8 + <button class="close" data-close="alert"></button>您的输入有误,请检查下面的输入项
  9 + </div>
  10 + <div class="form-group" style="margin-top: 60px">
  11 + <label class="control-label col-md-5">原始密码:
  12 + </label>
  13 + <div class="col-md-4">
  14 + <div class="input-icon right">
  15 + <i class="fa"></i>
  16 + <input type="password" class="form-control" name="oldPWD" /> </div>
  17 + </div>
  18 + </div>
  19 + <div class="form-group">
  20 + <label class="control-label col-md-5">输入新密码:
  21 + </label>
  22 + <div class="col-md-4">
  23 + <div class="input-icon right">
  24 + <i class="fa"></i>
  25 + <input type="password" class="form-control" name="newPWD" id="newPWD"/> </div>
  26 + </div>
  27 + </div>
  28 + <div class="form-group">
  29 + <label class="control-label col-md-5">确认新密码:
  30 + </label>
  31 + <div class="col-md-4">
  32 + <div class="input-icon right">
  33 + <i class="fa"></i>
  34 + <input type="password" class="form-control" name="cnewPWD" /> </div>
  35 + </div>
  36 + </div>
  37 + <div class="form-actions">
  38 + <div class="row">
  39 + <div class="col-md-offset-5 col-md-7">
  40 + <button type="submit" id="confirm" class="btn green">确定</button>
  41 + <button type="reset" class="btn default">取消</button>
  42 + </div>
  43 + </div>
  44 + </div>
  45 + </form>
  46 +</div>
  47 +</div>
  48 +</div>
  49 +</div>
  50 +
  51 +<script>
  52 +$(function(){
  53 + var form = $('#changePWDForm');
  54 + //表单 validate
  55 + var error = $('.alert-danger', form);
  56 +
  57 + var validate = function (pwd) {
  58 + var flag = true;
  59 + for (var i = 1; i < pwd.length - 1; i++) {
  60 + var first = pwd.charCodeAt(i - 1);
  61 + var second = pwd.charCodeAt(i);
  62 + var third = pwd.charCodeAt(i + 1);
  63 + if (!(first >= 48 && third <= 57 || first >= 65 && third <= 90 || first >= 97 && third <= 122)) {
  64 + continue;
  65 + }
  66 + if (third - second == 1 && second - first == 1) {
  67 + flag = false;
  68 + }
  69 + }
  70 +
  71 + return flag;
  72 + }
  73 +
  74 + $.validator.addMethod("passwordrule", function(value, element) {
  75 + var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*?[#?!@$%^&*-.]).{8,16}$/;
  76 + return this.optional(element) || reg.test(value) && validate(value);
  77 + }, "需包含大小写字母、数字、以及特殊符号的8-16位字符,并不能有123、abc这样的连续字符");
  78 +
  79 + //表单 validate
  80 + form.validate({
  81 + errorElement : 'span',
  82 + errorClass : 'help-block help-block-error',
  83 + focusInvalid : false,
  84 + rules : {
  85 + 'newPWD' : {
  86 + required : true,
  87 + minlength: 6,
  88 + maxlength: 16,
  89 + passwordrule:true
  90 + },
  91 + 'cnewPWD' : {
  92 + equalTo: '#newPWD'
  93 + }
  94 + },
  95 + invalidHandler : function(event, validator) {
  96 + error.show();
  97 + App.scrollTo(error, -200);
  98 + },
  99 +
  100 + highlight : function(element) {
  101 + $(element).closest('.form-group').addClass('has-error');
  102 + },
  103 +
  104 + unhighlight : function(element) {
  105 + $(element).closest('.form-group').removeClass('has-error');
  106 + },
  107 +
  108 + success : function(label) {
  109 + label.closest('.form-group').removeClass('has-error');
  110 + },
  111 +
  112 + submitHandler : function(f) {
  113 + var params = form.serializeJSON();
  114 + error.hide();
  115 + var keys;
  116 + $.ajax({
  117 + url: "/user/login/jCryptionKey?t="+Math.random(),
  118 + type: "Get",
  119 + async:false,
  120 + data: null,
  121 + success: function(data) {
  122 + keys = data.publickey;
  123 + }
  124 + });
  125 + //RSA加密
  126 + var encrypt = new JSEncrypt();
  127 + encrypt.setPublicKey(keys);
  128 + params.oldPWD = encrypt.encrypt(params.oldPWD);
  129 + params.newPWD = encrypt.encrypt(params.newPWD);
  130 + params.cnewPWD = encrypt.encrypt(params.cnewPWD);
  131 + $.ajax({
  132 + url: '/user/changePWD',
  133 + type: 'POST',
  134 + traditional: true,
  135 + data: params,
  136 + success: function(msg){
  137 + layer.alert(msg);
  138 + layer.closeAll('page');
  139 + }
  140 + });
  141 + }
  142 + });
  143 +});
57 144 </script>
58 145 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/fcxxwt.html
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="schedule-fcxxwt-modal">
2   - <div class="uk-modal-dialog">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>发车信息微调</h2></div>
6   - <form class="uk-form uk-form-horizontal">
7   - </form>
8   - </div>
9   -
10   - <script id="schedule-fcxxwt-form-temp" type="text/html">
11   - <input type="hidden" name="id" value="{{sch.id}}"/>
12   -
13   - <div class="uk-grid">
14   - <div class="uk-width-1-2">
15   - <div class="uk-form-row">
16   - <label class="uk-form-label" >发车站点</label>
17   - <div class="uk-form-controls">
18   - <input type="text" value="{{sch.qdzName}}" disabled>
19   - </div>
20   - </div>
21   - </div>
22   - <div class="uk-width-1-2">
23   - <div class="uk-form-row">
24   - <label class="uk-form-label" >结束站点</label>
25   - <div class="uk-form-controls">
26   - <input type="text" value="{{sch.zdzName}}" disabled>
27   - </div>
28   - </div>
29   - </div>
30   - </div>
31   - <div class="uk-grid">
32   - <div class="uk-width-1-2">
33   - <div class="uk-form-row">
34   - <label class="uk-form-label" >车辆编码</label>
35   - <div class="uk-form-controls">
36   - <div class="uk-autocomplete uk-form car-autocom">
37   - <input type="text" value="{{sch.clZbh}}" name="clZbh" required>
38   - </div>
39   - </div>
40   - </div>
41   - </div>
42   - <div class="uk-width-1-2">
43   - <div class="uk-form-row">
44   - <label class="uk-form-label" >路 牌</label>
45   - <div class="uk-form-controls">
46   - <input type="text" value="{{sch.lpName}}" disabled>
47   - </div>
48   - </div>
49   - </div>
50   - </div>
51   -
52   - <div class="uk-grid">
53   - <div class="uk-width-1-2">
54   - <div class="uk-form-row">
55   - <label class="uk-form-label" >驾驶员</label>
56   - <div class="uk-form-controls">
57   - <div class="uk-autocomplete uk-form jsy-autocom">
58   - <input type="text" value="{{sch.jGh}}/{{sch.jName}}" name="jsy" required>
59   - </div>
60   - </div>
61   - </div>
62   - </div>
63   - <div class="uk-width-1-2">
64   - <div class="uk-form-row">
65   - <label class="uk-form-label" >售票员</label>
66   - <div class="uk-form-controls">
67   - <div class="uk-autocomplete uk-form spy-autocom">
68   - <input type="text" value="{{sch.sGh}}/{{sch.sName}}" name="spy">
69   - </div>
70   - </div>
71   - </div>
72   - </div>
73   - </div>
74   -
75   - <div class="uk-grid">
76   - <div class="uk-width-1-2">
77   - <div class="uk-form-row">
78   - <label class="uk-form-label" >计发时刻</label>
79   - <div class="uk-form-controls">
80   - <input type="text" value="{{sch.fcsj}}" disabled>
81   - </div>
82   - </div>
83   - </div>
84   - <div class="uk-width-1-2">
85   - <div class="uk-form-row">
86   - <label class="uk-form-label" >实际时刻</label>
87   - <div class="uk-form-controls">
88   - <input type="time" value="{{sch.fcsjActual}}" name="fcsjActual" {{if sch.status==0}}autofocus{{/if}}>
89   - </div>
90   - </div>
91   - </div>
92   - </div>
93   -
94   - <div class="uk-grid">
95   - <div class="uk-width-1-2">
96   - <div class="uk-form-row">
97   - <label class="uk-form-label" >到达时刻</label>
98   - <div class="uk-form-controls">
99   - <input type="time" value="{{sch.zdsjActual}}" name="zdsjActual" {{if sch.status==1}}autofocus{{/if}}>
100   - </div>
101   - </div>
102   - </div>
103   - <div class="uk-width-1-2">
104   - <div class="uk-form-row">
105   - <label class="uk-form-label" >班次类型</label>
106   - <div class="uk-form-controls">
107   - <select class="form-control nt-dictionary" data-code="{{sch.bcType}}" name="bcType" data-group=ScheduleType></select>
108   - </div>
109   - </div>
110   - </div>
111   - </div>
112   -
113   - <div class="uk-grid">
114   - <div class="uk-width-1-1">
115   - <div class="uk-form-row">
116   - <label class="uk-form-label" >调整说明</label>
117   - <div class="uk-form-controls">
118   - <select name="adjustExps">
119   - <option value="">请选择..</option>
120   - {{each adjustExps as exp i}}
121   - <option value="{{exp}}">{{exp}}</option>
122   - {{/each}}
123   - </select>
124   - </div>
125   - </div>
126   - </div>
127   - </div>
128   - <div class="uk-grid">
129   - <div class="uk-width-1-1">
130   - <div class="uk-form-row ct-stacked">
131   - <div class="uk-form-controls" style="margin-top: 5px;">
132   - <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="50" placeholder="备注,不超过50个字符">{{sch.remarks}}</textarea>
133   - </div>
134   - </div>
135   - </div>
136   - </div>
137   -
138   - <hr class="modal-dotted-hr">
139   - <div class="uk-grid">
140   - <div class="uk-width-1-2">
141   - <div class="uk-form-row">
142   - <label class="uk-form-label" >里程</label>
143   - <div class="uk-form-controls">
144   - <input type="text" value="{{if sch.status==-1}}0{{else}}{{sch.jhlc}}{{/if}}" name="jhlc" required>
145   - </div>
146   - </div>
147   - </div>
148   - <div class="uk-width-1-2">
149   - <div class="uk-form-row">
150   - <div class="uk-form-controls" style="margin-left: 0;margin-top: 9px;">
151   - <label>
152   - <input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if sch.status==-1}}checked disabled{{/if}}>
153   - 是否烂班
154   - </label>
155   - </div>
156   - </div>
157   - </div>
158   - </div>
159   -
160   - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
161   - <button type="button" class="uk-button uk-modal-close">取消</button>
162   - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
163   - </div>
164   - </script>
165   -
166   - <script>
167   - (function() {
168   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
169   - var modal = '#schedule-fcxxwt-modal'
170   - ,sch;
171   - $(modal).on('init', function(e, data) {
172   - e.stopPropagation();
173   - sch=data.sch;
174   - var formHtml = template('schedule-fcxxwt-form-temp', {sch: sch, adjustExps:adjustExps});
175   - $('form', modal).html(formHtml);
176   - //字典转换
177   - dictionaryUtils.transformDom($('.nt-dictionary', modal));
178   -
179   - //车辆自动补全
180   - $.get('/basic/cars', function (rs) {
181   - gb_common.carAutocomplete($('.car-autocom', modal), rs);
182   - });
183   - //驾驶员自动补全
184   - gb_common.personAutocomplete($('.jsy-autocom', modal));
185   - //售票员
186   - gb_common.personAutocomplete($('.spy-autocom', modal));
187   -
188   - //submit
189   - var f = $('form', modal).formValidation(gb_form_validation_opts);
190   - f.on('success.form.fv', function(e) {
191   - e.preventDefault();
192   - var data = $(this).serializeJSON();
193   -
194   - //校验实发实达时间
195   - if(!validation_s_e_Time(data)){
196   - notify_err("实发时间不能晚于实达时间!");
197   - return;
198   - }
199   -
200   - //正常班次里程修改为0
201   - var normalDestory = data.jhlc==0 && sch.bcType != 'in' && sch.bcType != 'out';
202   - //修改里程
203   - var editJhlc = data.jhlc != sch.jhlc && data.jhlc != 0;
204   - if(!data.adjustExps && (data.status==-1 || normalDestory || editJhlc)){
205   - notify_err("当前操作需要选择调整原因!");
206   - return;
207   - }
208   - postData(data);
209   - });
210   -
211   - var postData = function (data) {
212   - gb_common.$post('/realSchedule/schInfoFineTune', data, function(rs){
213   - gb_schedule_table.updateSchedule(rs.ts);
214   - UIkit.modal(modal).hide();
215   - notify_succ('操作成功!');
216   - //计算应发未发
217   - gb_schedule_table.calc_yfwf_num(sch.xlBm);
218   - //更新路牌公里统计面板
219   - gb_schedule_table.showLpMileageTipBySch(sch);
220   - });
221   - };
222   -
223   - //班次类型
224   - $('select[name=bcType] option', f).each(function(){
225   - var whiteList=['venting', 'major', 'normal', sch.bcType];
226   - if(whiteList.indexOf($(this).val()) == -1)
227   - $(this).remove();
228   - });
229   - if(sch.bcType == 'out' || sch.bcType == 'in'){
230   - $('[name=bcType]', f).attr('disabled', 'disabled');
231   - }
232   -
233   - //是否烂班
234   - $('.destroy-box', f).on('click', function () {
235   - if($(this)[0].checked)
236   - $('input[name=jhlc]', f).val(0);
237   - else
238   - $('input[name=jhlc]', f).val(sch.jhlc);
239   - });
240   -
241   - $('[name=adjustExps]', f).on('change', function(){
242   - var rem=$('[name=remarks]', f);
243   - rem.val(rem.val() + $(this).val() + ',').trigger('input');
244   - });
245   -
246   -
247   - $('select[name=bcType]', modal).on('change', function(){
248   - var type = $(this).val();
249   - if(sch.bcType == 'in' || sch.bcType == 'out')
250   - return;
251   -
252   - var url, detailModal;
253   - if(type=='venting'){
254   - url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html';
255   - detailModal='#bctype-venting-modal';
256   - }
257   - else if(type=='major'){
258   - detailModal='#bctype-major-modal';
259   - url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_major.html';
260   - }
261   - else return;
262   -
263   - //重置类型,等待调整界面触发刷新事件
264   - $(this).val(sch.bcType);
265   -
266   - $.get(url, function(htmlStr){
267   - $(document.body).append(htmlStr);
268   -
269   - UIkit.modal(detailModal, {bgclose: true,modal:false}).show();
270   - $(detailModal).trigger('init', {sch: sch, parentModal: modal});
271   - })
272   - });
273   -
274   - /**
275   - * 相同选项 也触发 onchange
276   - */
277   - $('select[name=bcType]', modal).mousedown(function () {
278   - this.sindex = $(this)[0].selectedIndex;
279   - $(this)[0].selectedIndex = -1;
280   - }).mouseout(function () {
281   - if ($(this)[0].selectedIndex === -1) {
282   - $(this)[0].selectedIndex = this.sindex;
283   - }
284   - });
285   - });
286   -
287   - function validation_s_e_Time(data) {
288   - var config = gb_data_line_config.get(sch.xlBm);
289   - var st = get_time(sch.scheduleDateStr, data.fcsjActual, config);
290   - var et = get_time(sch.scheduleDateStr, data.zdsjActual, config);
291   - if(st && et && st > et)
292   - return false;
293   - return true;
294   - }
295   -
296   - var DAY_TIME = 1000 * 60 * 60 * 24;
297   - function get_time(rq, timeStr, config) {
298   - var t = null;
299   - if(timeStr){
300   - t = moment(rq + timeStr, 'YYYY-MM-DDHH:mm');
301   - if(timeStr.localeCompare(config.startOpt) < 0)
302   - return t + DAY_TIME;
303   - }
304   -
305   - return t;
306   - }
307   - })();
308   - </script>
309   -</div>
  1 +<div class="uk-modal ct-form-modal ct_move_modal" id="schedule-fcxxwt-modal">
  2 + <div class="uk-modal-dialog">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>发车信息微调</h2></div>
  6 + <form class="uk-form uk-form-horizontal">
  7 + </form>
  8 + </div>
  9 +
  10 + <script id="schedule-fcxxwt-form-temp" type="text/html">
  11 + <input type="hidden" name="id" value="{{sch.id}}"/>
  12 +
  13 + <div class="uk-grid">
  14 + <div class="uk-width-1-2">
  15 + <div class="uk-form-row">
  16 + <label class="uk-form-label" >发车站点</label>
  17 + <div class="uk-form-controls">
  18 + <input type="text" value="{{sch.qdzName}}" disabled>
  19 + </div>
  20 + </div>
  21 + </div>
  22 + <div class="uk-width-1-2">
  23 + <div class="uk-form-row">
  24 + <label class="uk-form-label" >结束站点</label>
  25 + <div class="uk-form-controls">
  26 + <input type="text" value="{{sch.zdzName}}" disabled>
  27 + </div>
  28 + </div>
  29 + </div>
  30 + </div>
  31 + <div class="uk-grid">
  32 + <div class="uk-width-1-2">
  33 + <div class="uk-form-row">
  34 + <label class="uk-form-label" >车辆编码</label>
  35 + <div class="uk-form-controls">
  36 + <div class="uk-autocomplete uk-form car-autocom">
  37 + <input type="text" value="{{sch.clZbh}}" name="clZbh" required>
  38 + </div>
  39 + </div>
  40 + </div>
  41 + </div>
  42 + <div class="uk-width-1-2">
  43 + <div class="uk-form-row">
  44 + <label class="uk-form-label" >路 牌</label>
  45 + <div class="uk-form-controls">
  46 + <input type="text" value="{{sch.lpName}}" disabled>
  47 + </div>
  48 + </div>
  49 + </div>
  50 + </div>
  51 +
  52 + <div class="uk-grid">
  53 + <div class="uk-width-1-2">
  54 + <div class="uk-form-row">
  55 + <label class="uk-form-label" >驾驶员</label>
  56 + <div class="uk-form-controls">
  57 + <div class="uk-autocomplete uk-form jsy-autocom">
  58 + <input type="text" value="{{sch.jGh}}/{{sch.jName}}" name="jsy" required>
  59 + </div>
  60 + </div>
  61 + </div>
  62 + </div>
  63 + <div class="uk-width-1-2">
  64 + <div class="uk-form-row">
  65 + <label class="uk-form-label" >售票员</label>
  66 + <div class="uk-form-controls">
  67 + <div class="uk-autocomplete uk-form spy-autocom">
  68 + <input type="text" value="{{sch.sGh}}/{{sch.sName}}" name="spy">
  69 + </div>
  70 + </div>
  71 + </div>
  72 + </div>
  73 + </div>
  74 +
  75 + <div class="uk-grid">
  76 + <div class="uk-width-1-2">
  77 + <div class="uk-form-row">
  78 + <label class="uk-form-label" >计发时刻</label>
  79 + <div class="uk-form-controls">
  80 + <input type="text" value="{{sch.fcsj}}" disabled>
  81 + </div>
  82 + </div>
  83 + </div>
  84 + <div class="uk-width-1-2">
  85 + <div class="uk-form-row">
  86 + <label class="uk-form-label" >实际时刻</label>
  87 + <div class="uk-form-controls">
  88 + <input type="time" value="{{sch.fcsjActual}}" name="fcsjActual" {{if sch.status==0}}autofocus{{/if}}>
  89 + </div>
  90 + </div>
  91 + </div>
  92 + </div>
  93 +
  94 + <div class="uk-grid">
  95 + <div class="uk-width-1-2">
  96 + <div class="uk-form-row">
  97 + <label class="uk-form-label" >到达时刻</label>
  98 + <div class="uk-form-controls">
  99 + <input type="time" value="{{sch.zdsjActual}}" name="zdsjActual" {{if sch.status==1}}autofocus{{/if}}>
  100 + </div>
  101 + </div>
  102 + </div>
  103 + <div class="uk-width-1-2">
  104 + <div class="uk-form-row">
  105 + <label class="uk-form-label" >班次类型</label>
  106 + <div class="uk-form-controls">
  107 + <select class="form-control nt-dictionary" data-code="{{sch.bcType}}" name="bcType" data-group=ScheduleType></select>
  108 + </div>
  109 + </div>
  110 + </div>
  111 + </div>
  112 +
  113 + <div class="uk-grid">
  114 + <div class="uk-width-1-1">
  115 + <div class="uk-form-row">
  116 + <label class="uk-form-label" >调整说明</label>
  117 + <div class="uk-form-controls">
  118 + <select name="adjustExps">
  119 + <option value="">请选择..</option>
  120 + {{each adjustExps as exp i}}
  121 + <option value="{{exp}}">{{exp}}</option>
  122 + {{/each}}
  123 + </select>
  124 + </div>
  125 + </div>
  126 + </div>
  127 + </div>
  128 + <div class="uk-grid">
  129 + <div class="uk-width-1-1">
  130 + <div class="uk-form-row ct-stacked">
  131 + <div class="uk-form-controls" style="margin-top: 5px;">
  132 + <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="50" placeholder="备注,不超过50个字符">{{sch.remarks}}</textarea>
  133 + </div>
  134 + </div>
  135 + </div>
  136 + </div>
  137 +
  138 + <hr class="modal-dotted-hr">
  139 + <div class="uk-grid">
  140 + <div class="uk-width-1-2">
  141 + <div class="uk-form-row">
  142 + <label class="uk-form-label" >里程</label>
  143 + <div class="uk-form-controls">
  144 + <input type="text" value="{{if sch.status==-1}}0{{else}}{{sch.jhlc}}{{/if}}" name="jhlc" required>
  145 + </div>
  146 + </div>
  147 + </div>
  148 + <div class="uk-width-1-2">
  149 + <div class="uk-form-row">
  150 + <div class="uk-form-controls" style="margin-left: 0;margin-top: 9px;">
  151 + <label>
  152 + <input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if sch.status==-1}}checked disabled{{/if}}>
  153 + 是否烂班
  154 + </label>
  155 + </div>
  156 + </div>
  157 + </div>
  158 + </div>
  159 +
  160 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  161 + <button type="button" class="uk-button uk-modal-close">取消</button>
  162 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  163 + </div>
  164 + </script>
  165 +
  166 + <script>
  167 + (function() {
  168 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  169 + var modal = '#schedule-fcxxwt-modal'
  170 + ,sch;
  171 + $(modal).on('init', function(e, data) {
  172 + e.stopPropagation();
  173 + sch=data.sch;
  174 + var formHtml = template('schedule-fcxxwt-form-temp', {sch: sch, adjustExps:adjustExps});
  175 + $('form', modal).html(formHtml);
  176 + //字典转换
  177 + dictionaryUtils.transformDom($('.nt-dictionary', modal));
  178 +
  179 + //车辆自动补全
  180 + $.get('/basic/cars', function (rs) {
  181 + gb_common.carAutocomplete($('.car-autocom', modal), rs);
  182 + });
  183 + //驾驶员自动补全
  184 + gb_common.personAutocomplete($('.jsy-autocom', modal));
  185 + //售票员
  186 + gb_common.personAutocomplete($('.spy-autocom', modal));
  187 +
  188 + //submit
  189 + var f = $('form', modal).formValidation(gb_form_validation_opts);
  190 + f.on('success.form.fv', function(e) {
  191 + e.preventDefault();
  192 + var data = $(this).serializeJSON();
  193 +
  194 + //校验实发实达时间
  195 + if(!validation_s_e_Time(data)){
  196 + notify_err("实发时间不能晚于实达时间!");
  197 + return;
  198 + }
  199 +
  200 + //正常班次里程修改为0
  201 + var normalDestory = data.jhlc==0 && sch.bcType != 'in' && sch.bcType != 'out';
  202 + //修改里程
  203 + var editJhlc = data.jhlc != sch.jhlc && data.jhlc != 0;
  204 + if(!data.adjustExps && (data.status==-1 || normalDestory || editJhlc)){
  205 + notify_err("当前操作需要选择调整原因!");
  206 + return;
  207 + }
  208 + postData(data);
  209 + });
  210 +
  211 + var postData = function (data) {
  212 + gb_common.$post('/realSchedule/schInfoFineTune', data, function(rs){
  213 + gb_schedule_table.updateSchedule(rs.ts);
  214 + UIkit.modal(modal).hide();
  215 + notify_succ('操作成功!');
  216 + //计算应发未发
  217 + gb_schedule_table.calc_yfwf_num(sch.xlBm);
  218 + //更新路牌公里统计面板
  219 + gb_schedule_table.showLpMileageTipBySch(sch);
  220 + });
  221 + };
  222 +
  223 + //班次类型
  224 + $('select[name=bcType] option', f).each(function(){
  225 + var whiteList=['venting', 'major', 'normal', sch.bcType];
  226 + if(whiteList.indexOf($(this).val()) == -1)
  227 + $(this).remove();
  228 + });
  229 + if(sch.bcType == 'out' || sch.bcType == 'in'){
  230 + $('[name=bcType]', f).attr('disabled', 'disabled');
  231 + }
  232 +
  233 + //是否烂班
  234 + $('.destroy-box', f).on('click', function () {
  235 + if($(this)[0].checked)
  236 + $('input[name=jhlc]', f).val(0);
  237 + else
  238 + $('input[name=jhlc]', f).val(sch.jhlc);
  239 + });
  240 +
  241 + $('[name=adjustExps]', f).on('change', function(){
  242 + var rem=$('[name=remarks]', f);
  243 + rem.val(rem.val() + $(this).val() + ',').trigger('input');
  244 + });
  245 +
  246 +
  247 + $('select[name=bcType]', modal).on('change', function(){
  248 + var type = $(this).val();
  249 + if(sch.bcType == 'in' || sch.bcType == 'out')
  250 + return;
  251 +
  252 + var url, detailModal;
  253 + if(type=='venting'){
  254 + url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_venting.html';
  255 + detailModal='#bctype-venting-modal';
  256 + }
  257 + else if(type=='major'){
  258 + detailModal='#bctype-major-modal';
  259 + url='/real_control_v2/fragments/line_schedule/context_menu/bc_type_major.html';
  260 + }
  261 + else return;
  262 +
  263 + //重置类型,等待调整界面触发刷新事件
  264 + $(this).val(sch.bcType);
  265 +
  266 + $.get(url, function(htmlStr){
  267 + $(document.body).append(htmlStr);
  268 +
  269 + UIkit.modal(detailModal, {bgclose: true,modal:false}).show();
  270 + $(detailModal).trigger('init', {sch: sch, parentModal: modal});
  271 + })
  272 + });
  273 +
  274 + /**
  275 + * 相同选项 也触发 onchange
  276 + */
  277 + $('select[name=bcType]', modal).mousedown(function () {
  278 + this.sindex = $(this)[0].selectedIndex;
  279 + $(this)[0].selectedIndex = -1;
  280 + }).mouseout(function () {
  281 + if ($(this)[0].selectedIndex === -1) {
  282 + $(this)[0].selectedIndex = this.sindex;
  283 + }
  284 + });
  285 + });
  286 +
  287 + function validation_s_e_Time(data) {
  288 + var config = gb_data_line_config.get(sch.xlBm);
  289 + var st = get_time(sch.scheduleDateStr, data.fcsjActual, config);
  290 + var et = get_time(sch.scheduleDateStr, data.zdsjActual, config);
  291 + if(st && et && st > et)
  292 + return false;
  293 + return true;
  294 + }
  295 +
  296 + var DAY_TIME = 1000 * 60 * 60 * 24;
  297 + function get_time(rq, timeStr, config) {
  298 + var t = null;
  299 + if(timeStr){
  300 + t = moment(rq + timeStr, 'YYYY-MM-DDHH:mm');
  301 + if(timeStr.localeCompare(config.startOpt) < 0)
  302 + return t + DAY_TIME;
  303 + }
  304 +
  305 + return t;
  306 + }
  307 + })();
  308 + </script>
  309 +</div>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/jhlb.html
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="schedule-jhlb-modal">
2   - <div class="uk-modal-dialog" style="width: 370px;">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>计划烂班</h2></div>
6   - <form class="uk-form uk-form-horizontal">
7   - </form>
8   - </div>
9   -
10   - <script id="schedule-jhlb-form-temp" type="text/html">
11   - <div class="uk-grid">
12   - <div class="uk-width-1-1">
13   - <div class="uk-form-row">
14   - <label class="uk-form-label" >内部编码</label>
15   - <div class="uk-form-controls">
16   - <input value="{{sch.clZbh}}" disabled/>
17   - </div>
18   - </div>
19   - </div>
20   - </div>
21   -
22   - <div class="uk-grid">
23   - <div class="uk-width-1-1">
24   - <div class="uk-form-row">
25   - <label class="uk-form-label" >路牌</label>
26   - <div class="uk-form-controls">
27   - <select name="lpName">
28   - {{if lps.length > 1}}
29   - <option value="-100">全部</option>
30   - {{/if}}
31   - {{each lps as lpName i}}
32   - <option value="{{lpName}}">{{lpName}}</option>
33   - {{/each}}
34   - </select>
35   - </div>
36   - </div>
37   - </div>
38   - </div>
39   -
40   - <div class="uk-grid">
41   - <div class="uk-width-1-1">
42   - <div class="uk-form-row">
43   - <label class="uk-form-label" >班次
44   - <hr>
45   - <label>全选
46   - <input class="i-cbox" name="allCheck" type="checkbox" >
47   - </label>
48   - </label>
49   - <div class="uk-form-controls sch-time-checkbox-list">
50   - {{each list as sch i}}
51   - <label data-lp="{{sch.lpName}}" {{if sch.destroy}}class="destroy-sch"{{/if}}>
52   - <input class="i-cbox" name="ids[]" value="{{sch.id}}" type="checkbox" {{if sch.destroy}}disabled{{/if}}>
53   - {{sch.dfsj}}
54   -
55   - {{if sch.bcType == "out"}}
56   - <span class="uk-badge uk-badge-success">出场</span>
57   - {{else if sch.bcType == "in"}}
58   - <span class="uk-badge uk-badge-warning">进场</span>
59   - {{else if sch.bcType == "venting"}}
60   - <span class="uk-badge uk-badge-danger">直放</span>
61   - {{else if sch.bcType == "major"}}
62   - <span class="uk-badge uk-badge-danger">放站</span>
63   - {{/if}}
64   - {{if sch.sflj}}
65   - <span class="uk-badge uk-badge-danger">临加</span>
66   - {{/if}}
67   - {{if sch.destroy}}
68   - <small>已烂班</small>
69   - {{/if}}
70   - </label>
71   - {{/each}}
72   - </div>
73   - </div>
74   - </div>
75   - </div>
76   - <div class="uk-grid">
77   - <div class="uk-width-1-1">
78   - <div class="uk-form-row">
79   - <label class="uk-form-label" >调整说明</label>
80   - <div class="uk-form-controls">
81   - <select name="adjustExps" required>
82   - <option value="">请选择..</option>
83   - {{each adjustExps as exp i}}
84   - <option value="{{exp}}">{{exp}}</option>
85   - {{/each}}
86   - </select>
87   - </div>
88   - </div>
89   - </div>
90   - </div>
91   - <div class="uk-grid">
92   - <div class="uk-width-1-1">
93   - <div class="uk-form-row ct-stacked">
94   - <div class="uk-form-controls" style="margin-top: 5px;">
95   - <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="20" placeholder="烂班说明,不超过20个字符"></textarea>
96   - </div>
97   - </div>
98   - </div>
99   - </div>
100   -
101   - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
102   - <button type="button" class="uk-button uk-modal-close">取消</button>
103   - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
104   - </div>
105   - </script>
106   -
107   - <script>
108   - (function() {
109   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
110   - var modal = '#schedule-jhlb-modal',
111   - sch;
112   - $(modal).on('init', function(e, data) {
113   - e.stopPropagation();
114   - sch = data.sch;
115   - //获取车辆所有班次
116   - var schArr = gb_common.get_vals(gb_schedule_table.findScheduleByLine(sch.xlBm)).filter(function(item) {
117   - return item.clZbh == sch.clZbh;
118   - }).sort(gb_schedule_table.schedule_sort);
119   -
120   - //获取路牌
121   - var lps = {};
122   - $.each(schArr, function () {
123   - lps[this.lpName]=1;
124   - });
125   -
126   - var formHtml = template('schedule-jhlb-form-temp', {
127   - sch: sch,
128   - list: schArr,
129   - adjustExps:adjustExps,
130   - lps: gb_common.get_keys(lps)
131   - });
132   - $('form', modal).html(formHtml);
133   -
134   - if(!sch.destroy){
135   - //选中班次
136   - var ckbox=$('input[type=checkbox][value='+sch.id+']', f).attr('checked', 'checked');
137   - //滚动到可视区域
138   - var cont=$('.sch-time-checkbox-list', f);
139   - cont.animate({
140   - scrollTop: ckbox.offset().top - cont.offset().top + cont.scrollTop() - 10
141   - }, 500);
142   - }
143   -
144   - //submit
145   - var f = $('form', modal).formValidation(gb_form_validation_opts);
146   - f.on('success.form.fv', function(e) {
147   - e.preventDefault();
148   - var data = $(this).serializeJSON();
149   - if(!data.ids || data.ids.length==0){
150   - UIkit.modal(modal).hide();
151   - return;
152   - }
153   - var idsStr='';
154   - $.each(data.ids, function(){idsStr+=(','+this)});
155   - data.idsStr=idsStr.substr(1);
156   - //提交
157   - gb_common.$post('/realSchedule/destroy', data, function(rs){
158   - gb_schedule_table.updateSchedule(rs.ts);
159   - UIkit.modal(modal).hide();
160   - notify_succ('烂班操作成功!');
161   - //calc 应发未发
162   - gb_schedule_table.calc_yfwf_num(sch.xlBm);
163   - });
164   - });
165   -
166   - $('[name=adjustExps]', f).on('change', function(){
167   - var rem=$('[name=remarks]', f);
168   - rem.val(rem.val() + $(this).val() + ',').trigger('input');
169   - });
170   -
171   - //路牌切换事件
172   - $('[name=lpName]', f).on('change', function () {
173   - var v = $(this).val();
174   - var lbs = $('.sch-time-checkbox-list label', modal);
175   - if(v=='-100'){
176   - //显示全部
177   - lbs.show();
178   - }
179   - else {
180   - lbs.hide().each(function () {
181   - if($(this).data('lp')==v)
182   - $(this).show();
183   - else{
184   - //将隐藏的checkbox取消选中
185   - $(this).find('input[type=checkbox]')[0].checked=false;
186   - }
187   - });
188   - }
189   - });
190   -
191   - //全选
192   - $('[name=allCheck]', f).on('click', function () {
193   - var cbs = $('.sch-time-checkbox-list label input[type=checkbox]:visible:enabled', modal);
194   - var status = this.checked;
195   - cbs.each(function () {
196   - this.checked = status;
197   - });
198   - });
199   - });
200   - })();
201   - </script>
202   -</div>
  1 +<div class="uk-modal ct-form-modal ct_move_modal" id="schedule-jhlb-modal">
  2 + <div class="uk-modal-dialog" style="width: 370px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>计划烂班</h2></div>
  6 + <form class="uk-form uk-form-horizontal">
  7 + </form>
  8 + </div>
  9 +
  10 + <script id="schedule-jhlb-form-temp" type="text/html">
  11 + <div class="uk-grid">
  12 + <div class="uk-width-1-1">
  13 + <div class="uk-form-row">
  14 + <label class="uk-form-label" >内部编码</label>
  15 + <div class="uk-form-controls">
  16 + <input value="{{sch.clZbh}}" disabled/>
  17 + </div>
  18 + </div>
  19 + </div>
  20 + </div>
  21 +
  22 + <div class="uk-grid">
  23 + <div class="uk-width-1-1">
  24 + <div class="uk-form-row">
  25 + <label class="uk-form-label" >路牌</label>
  26 + <div class="uk-form-controls">
  27 + <select name="lpName">
  28 + {{if lps.length > 1}}
  29 + <option value="-100">全部</option>
  30 + {{/if}}
  31 + {{each lps as lpName i}}
  32 + <option value="{{lpName}}">{{lpName}}</option>
  33 + {{/each}}
  34 + </select>
  35 + </div>
  36 + </div>
  37 + </div>
  38 + </div>
  39 +
  40 + <div class="uk-grid">
  41 + <div class="uk-width-1-1">
  42 + <div class="uk-form-row">
  43 + <label class="uk-form-label" >班次
  44 + <hr>
  45 + <label>全选
  46 + <input class="i-cbox" name="allCheck" type="checkbox" >
  47 + </label>
  48 + </label>
  49 + <div class="uk-form-controls sch-time-checkbox-list">
  50 + {{each list as sch i}}
  51 + <label data-lp="{{sch.lpName}}" {{if sch.destroy}}class="destroy-sch"{{/if}}>
  52 + <input class="i-cbox" name="ids[]" value="{{sch.id}}" type="checkbox" {{if sch.destroy}}disabled{{/if}}>
  53 + {{sch.dfsj}}
  54 +
  55 + {{if sch.bcType == "out"}}
  56 + <span class="uk-badge uk-badge-success">出场</span>
  57 + {{else if sch.bcType == "in"}}
  58 + <span class="uk-badge uk-badge-warning">进场</span>
  59 + {{else if sch.bcType == "venting"}}
  60 + <span class="uk-badge uk-badge-danger">直放</span>
  61 + {{else if sch.bcType == "major"}}
  62 + <span class="uk-badge uk-badge-danger">放站</span>
  63 + {{/if}}
  64 + {{if sch.sflj}}
  65 + <span class="uk-badge uk-badge-danger">临加</span>
  66 + {{/if}}
  67 + {{if sch.destroy}}
  68 + <small>已烂班</small>
  69 + {{/if}}
  70 + </label>
  71 + {{/each}}
  72 + </div>
  73 + </div>
  74 + </div>
  75 + </div>
  76 + <div class="uk-grid">
  77 + <div class="uk-width-1-1">
  78 + <div class="uk-form-row">
  79 + <label class="uk-form-label" >调整说明</label>
  80 + <div class="uk-form-controls">
  81 + <select name="adjustExps" required>
  82 + <option value="">请选择..</option>
  83 + {{each adjustExps as exp i}}
  84 + <option value="{{exp}}">{{exp}}</option>
  85 + {{/each}}
  86 + </select>
  87 + </div>
  88 + </div>
  89 + </div>
  90 + </div>
  91 + <div class="uk-grid">
  92 + <div class="uk-width-1-1">
  93 + <div class="uk-form-row ct-stacked">
  94 + <div class="uk-form-controls" style="margin-top: 5px;">
  95 + <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="20" placeholder="烂班说明,不超过20个字符"></textarea>
  96 + </div>
  97 + </div>
  98 + </div>
  99 + </div>
  100 +
  101 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  102 + <button type="button" class="uk-button uk-modal-close">取消</button>
  103 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  104 + </div>
  105 + </script>
  106 +
  107 + <script>
  108 + (function() {
  109 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  110 + var modal = '#schedule-jhlb-modal',
  111 + sch;
  112 + $(modal).on('init', function(e, data) {
  113 + e.stopPropagation();
  114 + sch = data.sch;
  115 + //获取车辆所有班次
  116 + var schArr = gb_common.get_vals(gb_schedule_table.findScheduleByLine(sch.xlBm)).filter(function(item) {
  117 + return item.clZbh == sch.clZbh;
  118 + }).sort(gb_schedule_table.schedule_sort);
  119 +
  120 + //获取路牌
  121 + var lps = {};
  122 + $.each(schArr, function () {
  123 + lps[this.lpName]=1;
  124 + });
  125 +
  126 + var formHtml = template('schedule-jhlb-form-temp', {
  127 + sch: sch,
  128 + list: schArr,
  129 + adjustExps:adjustExps,
  130 + lps: gb_common.get_keys(lps)
  131 + });
  132 + $('form', modal).html(formHtml);
  133 +
  134 + if(!sch.destroy){
  135 + //选中班次
  136 + var ckbox=$('input[type=checkbox][value='+sch.id+']', f).attr('checked', 'checked');
  137 + //滚动到可视区域
  138 + var cont=$('.sch-time-checkbox-list', f);
  139 + cont.animate({
  140 + scrollTop: ckbox.offset().top - cont.offset().top + cont.scrollTop() - 10
  141 + }, 500);
  142 + }
  143 +
  144 + //submit
  145 + var f = $('form', modal).formValidation(gb_form_validation_opts);
  146 + f.on('success.form.fv', function(e) {
  147 + e.preventDefault();
  148 + var data = $(this).serializeJSON();
  149 + if(!data.ids || data.ids.length==0){
  150 + UIkit.modal(modal).hide();
  151 + return;
  152 + }
  153 + var idsStr='';
  154 + $.each(data.ids, function(){idsStr+=(','+this)});
  155 + data.idsStr=idsStr.substr(1);
  156 + //提交
  157 + gb_common.$post('/realSchedule/destroy', data, function(rs){
  158 + gb_schedule_table.updateSchedule(rs.ts);
  159 + UIkit.modal(modal).hide();
  160 + notify_succ('烂班操作成功!');
  161 + //calc 应发未发
  162 + gb_schedule_table.calc_yfwf_num(sch.xlBm);
  163 + });
  164 + });
  165 +
  166 + $('[name=adjustExps]', f).on('change', function(){
  167 + var rem=$('[name=remarks]', f);
  168 + rem.val(rem.val() + $(this).val() + ',').trigger('input');
  169 + });
  170 +
  171 + //路牌切换事件
  172 + $('[name=lpName]', f).on('change', function () {
  173 + var v = $(this).val();
  174 + var lbs = $('.sch-time-checkbox-list label', modal);
  175 + if(v=='-100'){
  176 + //显示全部
  177 + lbs.show();
  178 + }
  179 + else {
  180 + lbs.hide().each(function () {
  181 + if($(this).data('lp')==v)
  182 + $(this).show();
  183 + else{
  184 + //将隐藏的checkbox取消选中
  185 + $(this).find('input[type=checkbox]')[0].checked=false;
  186 + }
  187 + });
  188 + }
  189 + });
  190 +
  191 + //全选
  192 + $('[name=allCheck]', f).on('click', function () {
  193 + var cbs = $('.sch-time-checkbox-list label input[type=checkbox]:visible:enabled', modal);
  194 + var status = this.checked;
  195 + cbs.each(function () {
  196 + this.checked = status;
  197 + });
  198 + });
  199 + });
  200 + })();
  201 + </script>
  202 +</div>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_inpark.html
1   -<div class="uk-modal ct_move_modal" id="add-sub-task-inpark-modal">
2   - <div class="uk-modal-dialog">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>回场子任务</h2></div>
6   -
7   - <div style="width: 100%;padding-left: 1%;">
8   - <div class="sub-task-card">
9   - <div class="uk-panel uk-panel-box uk-panel-box-primary twins_task_panel">
10   - <div class="uk-panel-badge uk-badge">营运</div>
11   - <h3 class="uk-panel-title">线路上站点间</h3>
12   - <form class="uk-form uk-form-horizontal inpark_form" service_form>
13   - <input type="hidden" name="type2" value="1">
14   - <input type="hidden" name="mileageType" value="service">
15   - <div class="uk-grid">
16   - <div class="uk-width-3-10">
17   - <div class="uk-form-row">
18   - <label class="uk-form-label">班次类型 </label>
19   - </div>
20   - </div>
21   - <div class="uk-width-7-10 pl5">
22   - <select name="type1" class="ct_focus" disabled>
23   - <option value="正常">正常</option>
24   - <option value="临加">临加</option>
25   - </select>
26   - </div>
27   - </div>
28   - <div class="uk-grid">
29   - <div class="uk-width-3-10">
30   - <div class="uk-form-row">
31   - <label class="uk-form-label">起点 </label>
32   - </div>
33   - </div>
34   - <div class="uk-width-7-10 pl5">
35   - <select name="startStation" disabled></select>
36   - </div>
37   - </div>
38   - <div class="uk-grid">
39   - <div class="uk-width-3-10">
40   - <div class="uk-form-row">
41   - <label class="uk-form-label">终点 </label>
42   - </div>
43   - </div>
44   - <div class="uk-width-7-10 pl5">
45   - <select name="endStation" class="ct_focus"></select>
46   - </div>
47   - </div>
48   - <div class="uk-grid">
49   - <div class="uk-width-3-10">
50   - <div class="uk-form-row">
51   - <label class="uk-form-label">营运里程</label>
52   - </div>
53   - </div>
54   - <div class="uk-width-7-10 pl5">
55   - <input type="number" step="0.01" name="mileage" required>
56   - </div>
57   - </div>
58   - <div class="uk-grid">
59   - <div class="uk-width-3-10">
60   - <div class="uk-form-row">
61   - <label class="uk-form-label">开始时间</label>
62   - </div>
63   - </div>
64   - <div class="uk-width-7-10 pl5">
65   - <input type="time" name="startDate" required>
66   - </div>
67   - </div>
68   - <div class="uk-grid">
69   - <div class="uk-width-3-10">
70   - <div class="uk-form-row">
71   - <label class="uk-form-label">结束时间</label>
72   - </div>
73   - </div>
74   - <div class="uk-width-7-10 pl5">
75   - <input type="time" name="endDate" required>
76   - </div>
77   - </div>
78   - </form>
79   - </div>
80   - </div>
81   - <div class="sub-task-card">
82   - <div class="uk-panel uk-panel-box uk-panel-box-secondary">
83   - <div class="uk-panel-badge uk-badge uk-badge-default">空驶</div>
84   - <h3 class="uk-panel-title">进场</h3>
85   - <form class="uk-form uk-form-horizontal inpark_form" empty_form>
86   - <input type="hidden" name="type2" value="2">
87   - <input type="hidden" name="mileageType" value="empty">
88   - <div class="uk-grid">
89   - <div class="uk-width-3-10">
90   - <div class="uk-form-row">
91   - <label class="uk-form-label">班次类型 </label>
92   - </div>
93   - </div>
94   - <div class="uk-width-7-10 pl5">
95   - <select name="type1" class="ct_focus">
96   - <option value="正常">正常</option>
97   - <option value="临加">临加</option>
98   - </select>
99   - </div>
100   - </div>
101   - <div class="uk-grid">
102   - <div class="uk-width-3-10">
103   - <div class="uk-form-row">
104   - <label class="uk-form-label">起点 </label>
105   - </div>
106   - </div>
107   - <div class="uk-width-7-10 pl5">
108   - <select name="startStation" ></select>
109   - </div>
110   - </div>
111   - <div class="uk-grid">
112   - <div class="uk-width-3-10">
113   - <div class="uk-form-row">
114   - <label class="uk-form-label">终点 </label>
115   - </div>
116   - </div>
117   - <div class="uk-width-7-10 pl5">
118   - <select name="endStation" class="ct_focus"></select>
119   - </div>
120   - </div>
121   - <div class="uk-grid">
122   - <div class="uk-width-3-10">
123   - <div class="uk-form-row">
124   - <label class="uk-form-label">空驶里程</label>
125   - </div>
126   - </div>
127   - <div class="uk-width-7-10 pl5">
128   - <input type="number" step="0.01" name="mileage" required style="width: calc(100% - 62px);">
129   - <a style="font-size: 12px;color: grey;cursor: default;" data-uk-tooltip title="可选择回场路径,设置途径点位。暂不开放" id="inpark_paths_link">路径(<span>0</span>)</a>
130   - </div>
131   - </div>
132   - <div class="uk-grid">
133   - <div class="uk-width-3-10">
134   - <div class="uk-form-row">
135   - <label class="uk-form-label">开始时间</label>
136   - </div>
137   - </div>
138   - <div class="uk-width-7-10 pl5">
139   - <input type="time" name="startDate" required>
140   - </div>
141   - </div>
142   - <div class="uk-grid">
143   - <div class="uk-width-3-10">
144   - <div class="uk-form-row">
145   - <label class="uk-form-label">结束时间</label>
146   - </div>
147   - </div>
148   - <div class="uk-width-7-10 pl5">
149   - <input type="time" name="endDate" required>
150   - </div>
151   - </div>
152   - </form>
153   - </div>
154   - </div>
155   - <div class="sub-task-card destroy-card uk-animation-scale">
156   - <div class="uk-panel uk-panel-box uk-panel-box-danger">
157   - <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
158   - <h3 class="uk-panel-title">线路上站点间</h3>
159   - <form class="uk-form uk-form-horizontal inpark_form" destroy_form>
160   - <input type="hidden" value="正常" name="type1">
161   - <input type="hidden" value="1" name="type2">
162   - <input type="hidden" name="mileageType" value="service">
163   - <input type="hidden" name="destroy" value="true">
164   - <div class="uk-grid" style="height: 30px;">
165   - </div>
166   - <div class="uk-grid">
167   - <div class="uk-width-3-10">
168   - <div class="uk-form-row">
169   - <label class="uk-form-label">起点 </label>
170   - </div>
171   - </div>
172   - <div class="uk-width-7-10 pl5">
173   - <select name="startStation" disabled></select>
174   - </div>
175   - </div>
176   - <div class="uk-grid">
177   - <div class="uk-width-3-10">
178   - <div class="uk-form-row">
179   - <label class="uk-form-label">终点 </label>
180   - </div>
181   - </div>
182   - <div class="uk-width-7-10 pl5">
183   - <select name="endStation" class="ct_focus" disabled></select>
184   - </div>
185   - </div>
186   - <div class="uk-grid">
187   - <div class="uk-width-3-10">
188   - <div class="uk-form-row">
189   - <label class="uk-form-label">烂班里程</label>
190   - </div>
191   - </div>
192   - <div class="uk-width-7-10 pl5">
193   - <input type="number" step="0.01" name="mileage" required>
194   - </div>
195   - </div>
196   - <div class="uk-grid">
197   - <div class="uk-width-3-10">
198   - <div class="uk-form-row">
199   - <label class="uk-form-label">开始时间</label>
200   - </div>
201   - </div>
202   - <div class="uk-width-7-10 pl5">
203   - <input type="time" name="startDate" required>
204   - </div>
205   - </div>
206   - <div class="uk-grid">
207   - <div class="uk-width-3-10">
208   - <div class="uk-form-row">
209   - <label class="uk-form-label">烂班原因</label>
210   - </div>
211   - </div>
212   - <div class="uk-width-7-10 pl5">
213   - <select name="destroyReason" required></select>
214   - </div>
215   - </div>
216   - </form>
217   - </div>
218   - </div>
219   -
220   - <form class="uk-form" style="margin-top: 15px; padding: 0 10px 0 0;">
221   - <textarea placeholder="备注" style="width: 100%;height: 70px;" id="globalRemarks"></textarea>
222   - </form>
223   - </div>
224   -
225   - <div class="uk-modal-footer uk-text-right">
226   - <button type="button" class="uk-button uk-modal-close">取消</button>
227   - <button type="button" class="uk-button uk-button-primary" id="submitChildTaskBtn">提交子任务</button>
228   -
229   - <div class="ct-footer-left">
230   - <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
231   - </div>
232   - </div>
233   - </div>
234   -
235   - <div class="ct-bottom-drawer">
236   - <div class="ct-bottom-drawer-body"></div>
237   - </div>
238   -
239   - <script id="sub-task-inpark-form-temp" type="text/html">
240   - </script>
241   -
242   - <script>
243   - (function () {
244   - var modal = '#add-sub-task-inpark-modal',
245   - serviceForm = $('form[service_form]', modal),
246   - emptyForm = $('form[empty_form]', modal),
247   - destroyForm = $('form[destroy_form]', modal),
248   - sch, stationRoutes, parks, information, esCode, timeLocStations;
249   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
250   - $(modal).on('init', function (e, data) {
251   - e.stopPropagation();
252   - sch = data.sch;
253   -
254   - //站点路由
255   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
256   - return a.stationRouteCode - b.stationRouteCode;
257   - }), 'directions')[sch.xlDir];
258   - //空驶终点(停车场)
259   - //切换进场终点
260   - $('select[name=endStation]', emptyForm).on('change', inparkNavigation);
261   - $.get('/basic/parks', function (rs) {
262   - parks = rs;
263   - var opts = '';
264   - for (var code in parks) {
265   - opts += '<option value="' + code + '">' + parks[code] + '</option>';
266   - }
267   - $('select[name=endStation]', emptyForm).html(opts).val(information.carPark).trigger('change');
268   - });
269   - //线路标准
270   - information = gb_data_basic.getLineInformation(sch.xlBm);
271   - //本地存储的站点耗时
272   - getLocStationsSpace();
273   -
274   - //设置默认值
275   - setDefaultVal();
276   -
277   - //切换营运终点
278   - $('select[name=endStation]', serviceForm).val(esCode).on('change', function () {
279   - var val = $(this).val();
280   - if (val == esCode) {
281   - $('.uk-modal-dialog', modal).removeClass('three-children');
282   - $('.sub-task-card.destroy-card').css("display", "none");
283   - }
284   - else {
285   - $('.uk-modal-dialog', modal).addClass('three-children');
286   - $('.sub-task-card.destroy-card').css("display", "inline-block");
287   - }
288   -
289   - reClac();
290   - }).trigger('change');
291   -
292   -
293   - var dataArray = [];
294   - var fs = $('form.inpark_form', modal).formValidation({
295   - framework: 'uikit',
296   - locale: 'zh_CN'
297   - });
298   - fs.on('success.form.fv', function(e) {
299   - e.preventDefault();
300   - if($(this).is(':hidden'))
301   - return;
302   - dataArray.push($.extend($(this).serializeJSON(), getDisabledVal(this)
303   - , {remarks: $('#globalRemarks',modal).val(), 'schedule.id': sch.id}));
304   - $(this).data('valid', true);
305   -
306   - if(allValidSuccess()){
307   - var i = 0, rst;
308   - (function () {
309   - var f = arguments.callee;
310   - if(i >= dataArray.length){
311   - //完成后更新前端数据
312   - gb_schedule_table.updateSchedule(rst);
313   - UIkit.modal(modal).hide();
314   - $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
315   - return;
316   - }
317   - var data = dataArray[i];
318   - //里程为0的不保存
319   - if(data.mileage==0){
320   - i++;
321   - f();
322   - }
323   - else{
324   - //营运子任务不写备注
325   - if(data.mileageType == 'service' && !data.destroy)
326   - data.remarks = '';
327   - gb_common.$post('/childTask', data, function (rs) {
328   - notify_succ('子任务添加成功');
329   - rst = rs.t;
330   - i++;
331   - f();
332   - });
333   - }
334   - })();
335   - }
336   - });
337   -
338   - //校验不过
339   - fs.on('err.field.fv', function () {
340   - $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled');
341   - });
342   -
343   - //submit
344   - $('#submitChildTaskBtn', modal).on('click', function () {
345   - $(this).addClass('disabled').attr('disabled','disabled');
346   - dataArray = [];
347   - fs.data('valid', false);
348   - fs.formValidation('validate');
349   - //fs.submit();
350   - });
351   -
352   - //选择烂班原因
353   - $('select[name=destroyReason]', destroyForm).on('change', function () {
354   - var e =$('#globalRemarks', modal);
355   - e.val(e.val() + $(this).val() + ',');
356   - });
357   -
358   - //根据主任务状态,复子任务
359   - updateTwinsTaskBySch(sch);
360   - });
361   -
362   - function allValidSuccess() {
363   - var flag = true;
364   - $('form.inpark_form:visible', modal).each(function (i, f) {
365   - if(!$(f).data('valid')){
366   - flag = false;
367   - return false;
368   - }
369   - });
370   - return flag;
371   - }
372   -
373   - //获取表单disabled 项的值
374   - function getDisabledVal(f) {
375   - var rs = {};
376   - $('input,select', f).each(function () {
377   - if($(this).attr('disabled')){
378   - rs[$(this).attr('name')]=$(this).val();
379   - }
380   - });
381   - return rs;
382   - }
383   -
384   - function setDefaultVal() {
385   - var routeOpts = '';
386   - $.each(stationRoutes, function () {
387   - routeOpts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
388   - });
389   - esCode = stationRoutes[stationRoutes.length - 1].stationCode;
390   -
391   - //营运起终点
392   - $('select[name=startStation],select[name=endStation]', serviceForm).html(routeOpts);
393   - //空驶起点
394   - $('select[name=startStation]', emptyForm).html(routeOpts).val(esCode);
395   - //烂班起终点
396   - $('select[name=startStation],select[name=endStation]', destroyForm).html(routeOpts).val(esCode);
397   -
398   - //烂班原因
399   - var adjustExpsOpts = '<option value="">请选择...</option>';
400   - $.each(adjustExps, function (i, str) {
401   - adjustExpsOpts += '<option value="' + str + '">' + str + '</option>';
402   - });
403   - $('select[name=destroyReason]', destroyForm).html(adjustExpsOpts);
404   -
405   - //营运开始时间
406   - $('input[name=startDate]', serviceForm).val(sch.fcsjActual?sch.fcsjActual:sch.dfsj);
407   -
408   - //营运班次类型
409   - $('select[name=type1]', serviceForm).val(sch['sflj']?'临加':'正常');
410   - }
411   -
412   - //点击 路径
413   - $('#inpark_paths_link', modal).on('click', function () {
414   -
415   - });
416   -
417   - //进场导航
418   - var drivingRouteResult;
419   - function inparkNavigation() {
420   - var start = $('select[name=startStation]', emptyForm).val()
421   - ,end = $('select[name=endStation]', emptyForm).val();
422   -
423   - if(!end) return;
424   -
425   - var station = getStationByCode(start).station
426   - ,park = gb_data_basic.getCarparkByCode(end);
427   -
428   - if(!park){
429   - notify_err('无法找到停车场的坐标对照!!!');
430   - return;
431   - }
432   - var tArray = park['gCenterPoint'].split(' ');
433   - var sCoord = TransGPS.wgsToBD(station['gLaty'], station['gLonx'])
434   - ,eCoord = TransGPS.wgsToBD(parseFloat(tArray[1]), parseFloat(tArray[0]));
435   -
436   - var sp = new BMap.Point(sCoord.lng,sCoord.lat);
437   - var ep = new BMap.Point(eCoord.lng,eCoord.lat);
438   -
439   - var driving = new BMap.DrivingRoute('上海', {
440   - onSearchComplete: function (rs) {
441   - drivingRouteResult = rs;
442   - calcInparkMileage(0);
443   - }
444   - });
445   - driving.search(sp,ep);
446   - }
447   -
448   - function calcInparkMileage(index) {
449   - var count = drivingRouteResult.getNumPlans();
450   -
451   - //选择方案
452   - var routePlan = drivingRouteResult.getPlan(index);
453   - //里程
454   - var mileage = routePlan.getDistance(false);
455   - $('input[name=mileage]', emptyForm).val(mileage / 1000);
456   - //结束时间
457   - var duratio = routePlan.getDuration(false);
458   - var st = $('input[name=startDate]', emptyForm).val();
459   - var ets = moment(st, 'HH:mm').add(duratio, 'seconds').format('HH:mm');
460   - $('input[name=endDate]', emptyForm).val(ets);
461   -
462   -
463   - $('#inpark_paths_link span', modal).text(count);
464   - }
465   -
466   - function getStationByCode(code) {
467   - for(var i = 0; i < stationRoutes.length; i++){
468   - if(stationRoutes[i]['stationCode']==code)
469   - return stationRoutes[i];
470   - }
471   - return null;
472   - }
473   -
474   - function reClac() {
475   - var serviceEnd = $('select[name=endStation]', serviceForm).val();
476   - //空驶起点 == 营运终点
477   - $('select[name=startStation]', emptyForm).val(serviceEnd);
478   -
479   - //计算营运里程
480   - var s = $('select[name=startStation]', serviceForm).val(),
481   - e = $('select[name=endStation]', serviceForm).val();
482   - var sMileage = calcMileage(s, e);
483   - if(sMileage >= 0)
484   - $('input[name=mileage]', serviceForm).val(sMileage);
485   -
486   - //营运结束时间
487   - var et = sch.dfsjT + (parseInt(sMileage / sch.jhlcOrig * sch.bcsj) * 60 * 1000)
488   - ,ets = et > sch.zdsjT?sch.zdsj:moment(et).format('HH:mm');
489   - $('input[name=endDate]', serviceForm).val(ets);
490   -
491   - //有烂班
492   - if (serviceEnd != esCode) {
493   - //烂班起点 == 营运终点
494   - $('select[name=startStation]', destroyForm).val(serviceEnd);
495   - //计算烂班公里
496   - s = $('select[name=startStation]', destroyForm).val();
497   - e = $('select[name=endStation]', destroyForm).val();
498   - var dMileage = calcMileage(s, e);
499   - $('input[name=mileage]', destroyForm).val(dMileage);
500   - //烂班开始时间
501   - $('input[name=startDate]', destroyForm).val(ets);
502   - }
503   -
504   - //进场开始时间
505   - $('input[name=startDate]', emptyForm).val(ets);
506   -
507   - //重新导航
508   - inparkNavigation();
509   - }
510   -
511   - function calcMileage(s, e) {
512   - var mileage = 0, flag, code;
513   - if (timeLocStations) {
514   - //空间坐标计算的站距
515   - $.each(timeLocStations, function () {
516   - code = this.station['STATION_CODE'];
517   - if (flag)
518   - mileage = gb_common.accAdd(mileage, this.toDistanceGl);
519   - if (code == s)
520   - flag = true;
521   - if (code == e)
522   - return false;
523   - });
524   - }
525   - else{
526   - //从原始站点路由字段里取值
527   - $.each(stationRoutes, function () {
528   - code = this['stationCode'];
529   - if (flag)
530   - mileage = gb_common.accAdd(mileage, this.distances);
531   - if (code == s)
532   - flag = true;
533   - if (code == e)
534   - return false;
535   - });
536   - }
537   - return mileage;
538   - }
539   -
540   - //从本地localStorage获取站间距数据
541   - function getLocStationsSpace() {
542   - try {
543   - timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
544   - if (timeLocStations)
545   - timeLocStations = JSON.parse(timeLocStations).stations[sch.xlDir == 0 ? 'up' : 'down'];
546   - } catch (e) {
547   - console.log(e);
548   - }
549   - }
550   -
551   - //站间距计算后刷新
552   - $(modal).on('refresh_station_space', function () {
553   - getLocStationsSpace();
554   - reClac();
555   - });
556   -
557   - //------ 下抽屉 ------
558   - $('#betweenStationRangeCalc', modal).on('click', function () {
559   - var id = $(this).data('drawer-id');
560   - switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
561   - });
562   -
563   - var btmDrawer = $('.ct-bottom-drawer', modal);
564   - //打开事件
565   - btmDrawer.on('drawer_show', function () {
566   - var url = $(this).data('url');
567   - if (!url) {
568   - alert('无效的地址');
569   - }
570   -
571   - var drawerPanel = $(this).data('name');
572   - $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
573   - $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
574   - });
575   - });
576   -
577   - function switchBtmDrawer(id, url) {
578   - if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
579   - btmDrawer.removeClass('open');
580   - btmDrawer.removeData('name').removeData('url');
581   - }
582   - else {
583   - btmDrawer.addClass('open');
584   - btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
585   - }
586   - }
587   -
588   -
589   - function updateTwinsTaskBySch(sch) {
590   - //主任务是烂班
591   - if(sch.destroy){
592   - serviceForm.prepend('<input type="hidden" name="destroy" value="true">');
593   - $('[name=mileage]', serviceForm).val(sch.jhlcOrig).attr('disabled', 'disabled');
594   - $('.twins_task_panel .uk-badge', modal).addClass('uk-badge-danger').text('烂班');
595   - //终点禁选
596   - $('select[name=endStation]', serviceForm).attr('disabled', 'disabled');
597   - //开始结束时间禁选
598   -
599   - //空驶起点
600   - $('select[name=startStation]', emptyForm).val(sch.qdzCode);
601   - }
602   - }
603   - })();
604   - </script>
  1 +<div class="uk-modal ct_move_modal" id="add-sub-task-inpark-modal">
  2 + <div class="uk-modal-dialog">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>回场子任务</h2></div>
  6 +
  7 + <div style="width: 100%;padding-left: 1%;">
  8 + <div class="sub-task-card">
  9 + <div class="uk-panel uk-panel-box uk-panel-box-primary twins_task_panel">
  10 + <div class="uk-panel-badge uk-badge">营运</div>
  11 + <h3 class="uk-panel-title">线路上站点间</h3>
  12 + <form class="uk-form uk-form-horizontal inpark_form" service_form>
  13 + <input type="hidden" name="type2" value="1">
  14 + <input type="hidden" name="mileageType" value="service">
  15 + <div class="uk-grid">
  16 + <div class="uk-width-3-10">
  17 + <div class="uk-form-row">
  18 + <label class="uk-form-label">班次类型 </label>
  19 + </div>
  20 + </div>
  21 + <div class="uk-width-7-10 pl5">
  22 + <select name="type1" class="ct_focus" disabled>
  23 + <option value="正常">正常</option>
  24 + <option value="临加">临加</option>
  25 + </select>
  26 + </div>
  27 + </div>
  28 + <div class="uk-grid">
  29 + <div class="uk-width-3-10">
  30 + <div class="uk-form-row">
  31 + <label class="uk-form-label">起点 </label>
  32 + </div>
  33 + </div>
  34 + <div class="uk-width-7-10 pl5">
  35 + <select name="startStation" disabled></select>
  36 + </div>
  37 + </div>
  38 + <div class="uk-grid">
  39 + <div class="uk-width-3-10">
  40 + <div class="uk-form-row">
  41 + <label class="uk-form-label">终点 </label>
  42 + </div>
  43 + </div>
  44 + <div class="uk-width-7-10 pl5">
  45 + <select name="endStation" class="ct_focus"></select>
  46 + </div>
  47 + </div>
  48 + <div class="uk-grid">
  49 + <div class="uk-width-3-10">
  50 + <div class="uk-form-row">
  51 + <label class="uk-form-label">营运里程</label>
  52 + </div>
  53 + </div>
  54 + <div class="uk-width-7-10 pl5">
  55 + <input type="number" step="0.01" name="mileage" required>
  56 + </div>
  57 + </div>
  58 + <div class="uk-grid">
  59 + <div class="uk-width-3-10">
  60 + <div class="uk-form-row">
  61 + <label class="uk-form-label">开始时间</label>
  62 + </div>
  63 + </div>
  64 + <div class="uk-width-7-10 pl5">
  65 + <input type="time" name="startDate" required>
  66 + </div>
  67 + </div>
  68 + <div class="uk-grid">
  69 + <div class="uk-width-3-10">
  70 + <div class="uk-form-row">
  71 + <label class="uk-form-label">结束时间</label>
  72 + </div>
  73 + </div>
  74 + <div class="uk-width-7-10 pl5">
  75 + <input type="time" name="endDate" required>
  76 + </div>
  77 + </div>
  78 + </form>
  79 + </div>
  80 + </div>
  81 + <div class="sub-task-card">
  82 + <div class="uk-panel uk-panel-box uk-panel-box-secondary">
  83 + <div class="uk-panel-badge uk-badge uk-badge-default">空驶</div>
  84 + <h3 class="uk-panel-title">进场</h3>
  85 + <form class="uk-form uk-form-horizontal inpark_form" empty_form>
  86 + <input type="hidden" name="type2" value="2">
  87 + <input type="hidden" name="mileageType" value="empty">
  88 + <div class="uk-grid">
  89 + <div class="uk-width-3-10">
  90 + <div class="uk-form-row">
  91 + <label class="uk-form-label">班次类型 </label>
  92 + </div>
  93 + </div>
  94 + <div class="uk-width-7-10 pl5">
  95 + <select name="type1" class="ct_focus">
  96 + <option value="正常">正常</option>
  97 + <option value="临加">临加</option>
  98 + </select>
  99 + </div>
  100 + </div>
  101 + <div class="uk-grid">
  102 + <div class="uk-width-3-10">
  103 + <div class="uk-form-row">
  104 + <label class="uk-form-label">起点 </label>
  105 + </div>
  106 + </div>
  107 + <div class="uk-width-7-10 pl5">
  108 + <select name="startStation" ></select>
  109 + </div>
  110 + </div>
  111 + <div class="uk-grid">
  112 + <div class="uk-width-3-10">
  113 + <div class="uk-form-row">
  114 + <label class="uk-form-label">终点 </label>
  115 + </div>
  116 + </div>
  117 + <div class="uk-width-7-10 pl5">
  118 + <select name="endStation" class="ct_focus"></select>
  119 + </div>
  120 + </div>
  121 + <div class="uk-grid">
  122 + <div class="uk-width-3-10">
  123 + <div class="uk-form-row">
  124 + <label class="uk-form-label">空驶里程</label>
  125 + </div>
  126 + </div>
  127 + <div class="uk-width-7-10 pl5">
  128 + <input type="number" step="0.01" name="mileage" required style="width: calc(100% - 62px);">
  129 + <a style="font-size: 12px;color: grey;cursor: default;" data-uk-tooltip title="可选择回场路径,设置途径点位。暂不开放" id="inpark_paths_link">路径(<span>0</span>)</a>
  130 + </div>
  131 + </div>
  132 + <div class="uk-grid">
  133 + <div class="uk-width-3-10">
  134 + <div class="uk-form-row">
  135 + <label class="uk-form-label">开始时间</label>
  136 + </div>
  137 + </div>
  138 + <div class="uk-width-7-10 pl5">
  139 + <input type="time" name="startDate" required>
  140 + </div>
  141 + </div>
  142 + <div class="uk-grid">
  143 + <div class="uk-width-3-10">
  144 + <div class="uk-form-row">
  145 + <label class="uk-form-label">结束时间</label>
  146 + </div>
  147 + </div>
  148 + <div class="uk-width-7-10 pl5">
  149 + <input type="time" name="endDate" required>
  150 + </div>
  151 + </div>
  152 + </form>
  153 + </div>
  154 + </div>
  155 + <div class="sub-task-card destroy-card uk-animation-scale">
  156 + <div class="uk-panel uk-panel-box uk-panel-box-danger">
  157 + <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
  158 + <h3 class="uk-panel-title">线路上站点间</h3>
  159 + <form class="uk-form uk-form-horizontal inpark_form" destroy_form>
  160 + <input type="hidden" value="正常" name="type1">
  161 + <input type="hidden" value="1" name="type2">
  162 + <input type="hidden" name="mileageType" value="service">
  163 + <input type="hidden" name="destroy" value="true">
  164 + <div class="uk-grid" style="height: 30px;">
  165 + </div>
  166 + <div class="uk-grid">
  167 + <div class="uk-width-3-10">
  168 + <div class="uk-form-row">
  169 + <label class="uk-form-label">起点 </label>
  170 + </div>
  171 + </div>
  172 + <div class="uk-width-7-10 pl5">
  173 + <select name="startStation" disabled></select>
  174 + </div>
  175 + </div>
  176 + <div class="uk-grid">
  177 + <div class="uk-width-3-10">
  178 + <div class="uk-form-row">
  179 + <label class="uk-form-label">终点 </label>
  180 + </div>
  181 + </div>
  182 + <div class="uk-width-7-10 pl5">
  183 + <select name="endStation" class="ct_focus" disabled></select>
  184 + </div>
  185 + </div>
  186 + <div class="uk-grid">
  187 + <div class="uk-width-3-10">
  188 + <div class="uk-form-row">
  189 + <label class="uk-form-label">烂班里程</label>
  190 + </div>
  191 + </div>
  192 + <div class="uk-width-7-10 pl5">
  193 + <input type="number" step="0.01" name="mileage" required>
  194 + </div>
  195 + </div>
  196 + <div class="uk-grid">
  197 + <div class="uk-width-3-10">
  198 + <div class="uk-form-row">
  199 + <label class="uk-form-label">开始时间</label>
  200 + </div>
  201 + </div>
  202 + <div class="uk-width-7-10 pl5">
  203 + <input type="time" name="startDate" required>
  204 + </div>
  205 + </div>
  206 + <div class="uk-grid">
  207 + <div class="uk-width-3-10">
  208 + <div class="uk-form-row">
  209 + <label class="uk-form-label">烂班原因</label>
  210 + </div>
  211 + </div>
  212 + <div class="uk-width-7-10 pl5">
  213 + <select name="destroyReason" required></select>
  214 + </div>
  215 + </div>
  216 + </form>
  217 + </div>
  218 + </div>
  219 +
  220 + <form class="uk-form" style="margin-top: 15px; padding: 0 10px 0 0;">
  221 + <textarea placeholder="备注" style="width: 100%;height: 70px;" id="globalRemarks"></textarea>
  222 + </form>
  223 + </div>
  224 +
  225 + <div class="uk-modal-footer uk-text-right">
  226 + <button type="button" class="uk-button uk-modal-close">取消</button>
  227 + <button type="button" class="uk-button uk-button-primary" id="submitChildTaskBtn">提交子任务</button>
  228 +
  229 + <div class="ct-footer-left">
  230 + <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
  231 + </div>
  232 + </div>
  233 + </div>
  234 +
  235 + <div class="ct-bottom-drawer">
  236 + <div class="ct-bottom-drawer-body"></div>
  237 + </div>
  238 +
  239 + <script id="sub-task-inpark-form-temp" type="text/html">
  240 + </script>
  241 +
  242 + <script>
  243 + (function () {
  244 + var modal = '#add-sub-task-inpark-modal',
  245 + serviceForm = $('form[service_form]', modal),
  246 + emptyForm = $('form[empty_form]', modal),
  247 + destroyForm = $('form[destroy_form]', modal),
  248 + sch, stationRoutes, parks, information, esCode, timeLocStations;
  249 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  250 + $(modal).on('init', function (e, data) {
  251 + e.stopPropagation();
  252 + sch = data.sch;
  253 +
  254 + //站点路由
  255 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  256 + return a.stationRouteCode - b.stationRouteCode;
  257 + }), 'directions')[sch.xlDir];
  258 + //空驶终点(停车场)
  259 + //切换进场终点
  260 + $('select[name=endStation]', emptyForm).on('change', inparkNavigation);
  261 + $.get('/basic/parks', function (rs) {
  262 + parks = rs;
  263 + var opts = '';
  264 + for (var code in parks) {
  265 + opts += '<option value="' + code + '">' + parks[code] + '</option>';
  266 + }
  267 + $('select[name=endStation]', emptyForm).html(opts).val(information.carPark).trigger('change');
  268 + });
  269 + //线路标准
  270 + information = gb_data_basic.getLineInformation(sch.xlBm);
  271 + //本地存储的站点耗时
  272 + getLocStationsSpace();
  273 +
  274 + //设置默认值
  275 + setDefaultVal();
  276 +
  277 + //切换营运终点
  278 + $('select[name=endStation]', serviceForm).val(esCode).on('change', function () {
  279 + var val = $(this).val();
  280 + if (val == esCode) {
  281 + $('.uk-modal-dialog', modal).removeClass('three-children');
  282 + $('.sub-task-card.destroy-card').css("display", "none");
  283 + }
  284 + else {
  285 + $('.uk-modal-dialog', modal).addClass('three-children');
  286 + $('.sub-task-card.destroy-card').css("display", "inline-block");
  287 + }
  288 +
  289 + reClac();
  290 + }).trigger('change');
  291 +
  292 +
  293 + var dataArray = [];
  294 + var fs = $('form.inpark_form', modal).formValidation({
  295 + framework: 'uikit',
  296 + locale: 'zh_CN'
  297 + });
  298 + fs.on('success.form.fv', function(e) {
  299 + e.preventDefault();
  300 + if($(this).is(':hidden'))
  301 + return;
  302 + dataArray.push($.extend($(this).serializeJSON(), getDisabledVal(this)
  303 + , {remarks: $('#globalRemarks',modal).val(), 'schedule.id': sch.id}));
  304 + $(this).data('valid', true);
  305 +
  306 + if(allValidSuccess()){
  307 + var i = 0, rst;
  308 + (function () {
  309 + var f = arguments.callee;
  310 + if(i >= dataArray.length){
  311 + //完成后更新前端数据
  312 + gb_schedule_table.updateSchedule(rst);
  313 + UIkit.modal(modal).hide();
  314 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  315 + return;
  316 + }
  317 + var data = dataArray[i];
  318 + //里程为0的不保存
  319 + if(data.mileage==0){
  320 + i++;
  321 + f();
  322 + }
  323 + else{
  324 + //营运子任务不写备注
  325 + if(data.mileageType == 'service' && !data.destroy)
  326 + data.remarks = '';
  327 + gb_common.$post('/childTask', data, function (rs) {
  328 + notify_succ('子任务添加成功');
  329 + rst = rs.t;
  330 + i++;
  331 + f();
  332 + });
  333 + }
  334 + })();
  335 + }
  336 + });
  337 +
  338 + //校验不过
  339 + fs.on('err.field.fv', function () {
  340 + $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled');
  341 + });
  342 +
  343 + //submit
  344 + $('#submitChildTaskBtn', modal).on('click', function () {
  345 + $(this).addClass('disabled').attr('disabled','disabled');
  346 + dataArray = [];
  347 + fs.data('valid', false);
  348 + fs.formValidation('validate');
  349 + //fs.submit();
  350 + });
  351 +
  352 + //选择烂班原因
  353 + $('select[name=destroyReason]', destroyForm).on('change', function () {
  354 + var e =$('#globalRemarks', modal);
  355 + e.val(e.val() + $(this).val() + ',');
  356 + });
  357 +
  358 + //根据主任务状态,复子任务
  359 + updateTwinsTaskBySch(sch);
  360 + });
  361 +
  362 + function allValidSuccess() {
  363 + var flag = true;
  364 + $('form.inpark_form:visible', modal).each(function (i, f) {
  365 + if(!$(f).data('valid')){
  366 + flag = false;
  367 + return false;
  368 + }
  369 + });
  370 + return flag;
  371 + }
  372 +
  373 + //获取表单disabled 项的值
  374 + function getDisabledVal(f) {
  375 + var rs = {};
  376 + $('input,select', f).each(function () {
  377 + if($(this).attr('disabled')){
  378 + rs[$(this).attr('name')]=$(this).val();
  379 + }
  380 + });
  381 + return rs;
  382 + }
  383 +
  384 + function setDefaultVal() {
  385 + var routeOpts = '';
  386 + $.each(stationRoutes, function () {
  387 + routeOpts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
  388 + });
  389 + esCode = stationRoutes[stationRoutes.length - 1].stationCode;
  390 +
  391 + //营运起终点
  392 + $('select[name=startStation],select[name=endStation]', serviceForm).html(routeOpts);
  393 + //空驶起点
  394 + $('select[name=startStation]', emptyForm).html(routeOpts).val(esCode);
  395 + //烂班起终点
  396 + $('select[name=startStation],select[name=endStation]', destroyForm).html(routeOpts).val(esCode);
  397 +
  398 + //烂班原因
  399 + var adjustExpsOpts = '<option value="">请选择...</option>';
  400 + $.each(adjustExps, function (i, str) {
  401 + adjustExpsOpts += '<option value="' + str + '">' + str + '</option>';
  402 + });
  403 + $('select[name=destroyReason]', destroyForm).html(adjustExpsOpts);
  404 +
  405 + //营运开始时间
  406 + $('input[name=startDate]', serviceForm).val(sch.fcsjActual?sch.fcsjActual:sch.dfsj);
  407 +
  408 + //营运班次类型
  409 + $('select[name=type1]', serviceForm).val(sch['sflj']?'临加':'正常');
  410 + }
  411 +
  412 + //点击 路径
  413 + $('#inpark_paths_link', modal).on('click', function () {
  414 +
  415 + });
  416 +
  417 + //进场导航
  418 + var drivingRouteResult;
  419 + function inparkNavigation() {
  420 + var start = $('select[name=startStation]', emptyForm).val()
  421 + ,end = $('select[name=endStation]', emptyForm).val();
  422 +
  423 + if(!end) return;
  424 +
  425 + var station = getStationByCode(start).station
  426 + ,park = gb_data_basic.getCarparkByCode(end);
  427 +
  428 + if(!park){
  429 + notify_err('无法找到停车场的坐标对照!!!');
  430 + return;
  431 + }
  432 + var tArray = park['gCenterPoint'].split(' ');
  433 + var sCoord = TransGPS.wgsToBD(station['gLaty'], station['gLonx'])
  434 + ,eCoord = TransGPS.wgsToBD(parseFloat(tArray[1]), parseFloat(tArray[0]));
  435 +
  436 + var sp = new BMap.Point(sCoord.lng,sCoord.lat);
  437 + var ep = new BMap.Point(eCoord.lng,eCoord.lat);
  438 +
  439 + var driving = new BMap.DrivingRoute('上海', {
  440 + onSearchComplete: function (rs) {
  441 + drivingRouteResult = rs;
  442 + calcInparkMileage(0);
  443 + }
  444 + });
  445 + driving.search(sp,ep);
  446 + }
  447 +
  448 + function calcInparkMileage(index) {
  449 + var count = drivingRouteResult.getNumPlans();
  450 +
  451 + //选择方案
  452 + var routePlan = drivingRouteResult.getPlan(index);
  453 + //里程
  454 + var mileage = routePlan.getDistance(false);
  455 + $('input[name=mileage]', emptyForm).val(mileage / 1000);
  456 + //结束时间
  457 + var duratio = routePlan.getDuration(false);
  458 + var st = $('input[name=startDate]', emptyForm).val();
  459 + var ets = moment(st, 'HH:mm').add(duratio, 'seconds').format('HH:mm');
  460 + $('input[name=endDate]', emptyForm).val(ets);
  461 +
  462 +
  463 + $('#inpark_paths_link span', modal).text(count);
  464 + }
  465 +
  466 + function getStationByCode(code) {
  467 + for(var i = 0; i < stationRoutes.length; i++){
  468 + if(stationRoutes[i]['stationCode']==code)
  469 + return stationRoutes[i];
  470 + }
  471 + return null;
  472 + }
  473 +
  474 + function reClac() {
  475 + var serviceEnd = $('select[name=endStation]', serviceForm).val();
  476 + //空驶起点 == 营运终点
  477 + $('select[name=startStation]', emptyForm).val(serviceEnd);
  478 +
  479 + //计算营运里程
  480 + var s = $('select[name=startStation]', serviceForm).val(),
  481 + e = $('select[name=endStation]', serviceForm).val();
  482 + var sMileage = calcMileage(s, e);
  483 + if(sMileage >= 0)
  484 + $('input[name=mileage]', serviceForm).val(sMileage);
  485 +
  486 + //营运结束时间
  487 + var et = sch.dfsjT + (parseInt(sMileage / sch.jhlcOrig * sch.bcsj) * 60 * 1000)
  488 + ,ets = et > sch.zdsjT?sch.zdsj:moment(et).format('HH:mm');
  489 + $('input[name=endDate]', serviceForm).val(ets);
  490 +
  491 + //有烂班
  492 + if (serviceEnd != esCode) {
  493 + //烂班起点 == 营运终点
  494 + $('select[name=startStation]', destroyForm).val(serviceEnd);
  495 + //计算烂班公里
  496 + s = $('select[name=startStation]', destroyForm).val();
  497 + e = $('select[name=endStation]', destroyForm).val();
  498 + var dMileage = calcMileage(s, e);
  499 + $('input[name=mileage]', destroyForm).val(dMileage);
  500 + //烂班开始时间
  501 + $('input[name=startDate]', destroyForm).val(ets);
  502 + }
  503 +
  504 + //进场开始时间
  505 + $('input[name=startDate]', emptyForm).val(ets);
  506 +
  507 + //重新导航
  508 + inparkNavigation();
  509 + }
  510 +
  511 + function calcMileage(s, e) {
  512 + var mileage = 0, flag, code;
  513 + if (timeLocStations) {
  514 + //空间坐标计算的站距
  515 + $.each(timeLocStations, function () {
  516 + code = this.station['STATION_CODE'];
  517 + if (flag)
  518 + mileage = gb_common.accAdd(mileage, this.toDistanceGl);
  519 + if (code == s)
  520 + flag = true;
  521 + if (code == e)
  522 + return false;
  523 + });
  524 + }
  525 + else{
  526 + //从原始站点路由字段里取值
  527 + $.each(stationRoutes, function () {
  528 + code = this['stationCode'];
  529 + if (flag)
  530 + mileage = gb_common.accAdd(mileage, this.distances);
  531 + if (code == s)
  532 + flag = true;
  533 + if (code == e)
  534 + return false;
  535 + });
  536 + }
  537 + return mileage;
  538 + }
  539 +
  540 + //从本地localStorage获取站间距数据
  541 + function getLocStationsSpace() {
  542 + try {
  543 + timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
  544 + if (timeLocStations)
  545 + timeLocStations = JSON.parse(timeLocStations).stations[sch.xlDir == 0 ? 'up' : 'down'];
  546 + } catch (e) {
  547 + console.log(e);
  548 + }
  549 + }
  550 +
  551 + //站间距计算后刷新
  552 + $(modal).on('refresh_station_space', function () {
  553 + getLocStationsSpace();
  554 + reClac();
  555 + });
  556 +
  557 + //------ 下抽屉 ------
  558 + $('#betweenStationRangeCalc', modal).on('click', function () {
  559 + var id = $(this).data('drawer-id');
  560 + switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
  561 + });
  562 +
  563 + var btmDrawer = $('.ct-bottom-drawer', modal);
  564 + //打开事件
  565 + btmDrawer.on('drawer_show', function () {
  566 + var url = $(this).data('url');
  567 + if (!url) {
  568 + alert('无效的地址');
  569 + }
  570 +
  571 + var drawerPanel = $(this).data('name');
  572 + $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
  573 + $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
  574 + });
  575 + });
  576 +
  577 + function switchBtmDrawer(id, url) {
  578 + if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
  579 + btmDrawer.removeClass('open');
  580 + btmDrawer.removeData('name').removeData('url');
  581 + }
  582 + else {
  583 + btmDrawer.addClass('open');
  584 + btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
  585 + }
  586 + }
  587 +
  588 +
  589 + function updateTwinsTaskBySch(sch) {
  590 + //主任务是烂班
  591 + if(sch.destroy){
  592 + serviceForm.prepend('<input type="hidden" name="destroy" value="true">');
  593 + $('[name=mileage]', serviceForm).val(sch.jhlcOrig).attr('disabled', 'disabled');
  594 + $('.twins_task_panel .uk-badge', modal).addClass('uk-badge-danger').text('烂班');
  595 + //终点禁选
  596 + $('select[name=endStation]', serviceForm).attr('disabled', 'disabled');
  597 + //开始结束时间禁选
  598 +
  599 + //空驶起点
  600 + $('select[name=startStation]', emptyForm).val(sch.qdzCode);
  601 + }
  602 + }
  603 + })();
  604 + </script>
605 605 </div>
606 606 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_other.html
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="add-sub-task-other-modal">
2   - <div class="uk-modal-dialog" style="width: 635px;">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>自定义子任务</h2></div>
6   - <form class="uk-form uk-form-horizontal">
7   - </form>
8   - </div>
9   -
10   - <script id="sub-task-other-form-temp" type="text/html">
11   - <input type="hidden" value="{{sch.id}}" name="schedule.id">
12   - <div class="uk-grid">
13   - <div class="uk-width-1-1">
14   - <div class="uk-form-row">
15   - <label class="uk-form-label">班次类型</label>
16   - <div class="uk-form-controls">
17   - <select class="form-control" name="type1" style="width: 65px;">
18   - <option>正常</option>
19   - <option>临加</option>
20   - </select>
21   - <select class="form-control nt-dictionary" name="type2" data-group=ChildTaskType
22   - style="width: 126px;;"></select>
23   - </div>
24   - </div>
25   - </div>
26   - </div>
27   - <div class="uk-grid">
28   - <div class="uk-width-1-2">
29   - <div class="uk-form-row">
30   - <label class="uk-form-label">起点 </label>
31   - <div class="uk-form-controls">
32   - <select name="startStation" required></select>
33   - </div>
34   - </div>
35   - </div>
36   - <div class="uk-width-1-2">
37   - <div class="uk-form-row">
38   - <label class="uk-form-label">终点</label>
39   - <div class="uk-form-controls">
40   - <select name="endStation" required></select>
41   - </div>
42   - </div>
43   - </div>
44   - </div>
45   -
46   - <div class="uk-grid">
47   - <div class="uk-width-1-2">
48   - <div class="uk-form-row">
49   - <label class="uk-form-label">里程类型</label>
50   - <div class="uk-form-controls">
51   - <select class="form-control nt-dictionary" required name="mileageType"
52   - data-group="MileageType"></select>
53   - </div>
54   - </div>
55   - </div>
56   - <div class="uk-width-1-2">
57   - <div class="uk-form-row">
58   - <label class="uk-form-label">公里数</label>
59   - <div class="uk-form-controls">
60   - <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false" required>
61   - </div>
62   - </div>
63   - </div>
64   - </div>
65   -
66   - <div class="uk-grid">
67   - <div class="uk-width-1-2">
68   - <div class="uk-form-row">
69   - <label class="uk-form-label">开始时间</label>
70   - <div class="uk-form-controls">
71   - <input name="startDate" value="{{sch.fcsj}}" type="time" required>
72   - </div>
73   - </div>
74   - </div>
75   - <div class="uk-width-1-2">
76   - <div class="uk-form-row">
77   - <label class="uk-form-label">结束时间</label>
78   - <div class="uk-form-controls">
79   - <input name="endDate" value="{{sch.zdsj}}" type="time" required>
80   - </div>
81   - </div>
82   - </div>
83   - </div>
84   -
85   - <div class="uk-grid">
86   - <div class="uk-width-1-2">
87   - <div class="uk-form-row" style="padding-top: 5px;">
88   - <label class="uk-form-label"></label>
89   - <div class="uk-form-controls">
90   - <label>
91   - <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班
92   - </label>
93   - </div>
94   - </div>
95   - </div>
96   - <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;">
97   - <div class="uk-form-row">
98   - <label class="uk-form-label">烂班原因</label>
99   - <div class="uk-form-controls">
100   - <select class="form-control" name="destroyReason" required>
101   - <option value="">请选择...</option>
102   - {{each adjustExps as exp i}}
103   - <option value="{{exp}}">{{exp}}</option>
104   - {{/each}}
105   - </select>
106   - </div>
107   - </div>
108   - </div>
109   - </div>
110   -
111   - <div class="uk-grid">
112   - <div class="uk-width-1-1">
113   - <div class="uk-form-row ct-stacked">
114   - <div class="uk-form-controls" style="margin-top: 5px;">
115   - <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true"
116   - data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
117   - </div>
118   - </div>
119   - </div>
120   - </div>
121   - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
122   - <button type="button" class="uk-button uk-modal-close">取消</button>
123   - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
124   - </div>
125   - </script>
126   -
127   - <script>
128   - (function () {
129   - var modal = '#add-sub-task-other-modal',
130   - sch, stationRoutes, parks, information;
131   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
132   - $(modal).on('init', function (e, data) {
133   - e.stopPropagation();
134   - sch = data.sch;
135   - var formHtml = template('sub-task-other-form-temp', {sch: sch, adjustExps: adjustExps});
136   - $('form', modal).html(formHtml);
137   - //字典转换
138   - dictionaryUtils.transformDom($('.nt-dictionary', modal));
139   -
140   - //站点路由
141   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
142   - return a.stationRouteCode - b.stationRouteCode;
143   - }), 'directions');
144   - //停车场
145   - $.get('/basic/parks', function (rs) {
146   - parks = rs;
147   - });
148   - //线路标准
149   - information = gb_data_basic.getLineInformation(sch.xlBm);
150   -
151   - //submit
152   - var f = $('form', modal).formValidation(gb_form_validation_opts);
153   - f.on('success.form.fv', function (e) {
154   - disabled_submit_btn(this);
155   - e.preventDefault();
156   - var data = $(this).serializeJSON();
157   -
158   - gb_common.$post('/childTask', data, function (rs) {
159   - notify_succ('子任务添加成功');
160   - gb_schedule_table.updateSchedule(rs.t);
161   - $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t});
162   - UIkit.modal(modal).hide();
163   - });
164   - });
165   -
166   - //班次类型
167   - $('[name=type2]', f).on('change', function () {
168   - var routes = stationRoutes[sch.xlDir]
169   - , lastCode = routes[routes.length - 1].stationCode
170   - , opts = '', park_opts = '';
171   - //station options
172   - $.each(routes, function () {
173   - opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
174   - });
175   - //park options
176   - for (var code in parks)
177   - park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
178   -
179   - var qdz = $('[name=startStation]', f), zdz = $('[name=endStation]', f), mType = $('[name=mileageType]', f);
180   - switch ($(this).val()) {
181   - case '3'://出场
182   - qdz.html(park_opts).val(information.carPark);
183   - zdz.html(opts);
184   - mType.val('empty');
185   - break;
186   - case '2'://进场
187   - qdz.html(opts);
188   - zdz.html(park_opts).val(information.carPark);
189   - mType.val('empty');
190   - break;
191   - default:
192   - qdz.html(opts);
193   - zdz.html(opts).val(lastCode);
194   - mType.val('service');
195   -
196   - }
197   - });
198   -
199   - //是否烂班
200   - $('[name=destroy]', f).on('click', function () {
201   - if (this.checked) {
202   - $('.destroy_reason_wrap', modal).show();//.find('[name=destroyReason]').attr('required', 'required');
203   - }
204   - else {
205   - $('.destroy_reason_wrap', modal).hide();//.find('[name=destroyReason]').removeAttr('required');
206   - }
207   - });
208   -
209   - $('[name=destroyReason]', f).on('change', function () {
210   - var rem = $('[name=remarks]', f);
211   - rem.val(rem.val() + $(this).val() + ',');
212   - });
213   - });
214   - })();
215   - </script>
216   -</div>
  1 +<div class="uk-modal ct-form-modal ct_move_modal" id="add-sub-task-other-modal">
  2 + <div class="uk-modal-dialog" style="width: 635px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>自定义子任务</h2></div>
  6 + <form class="uk-form uk-form-horizontal">
  7 + </form>
  8 + </div>
  9 +
  10 + <script id="sub-task-other-form-temp" type="text/html">
  11 + <input type="hidden" value="{{sch.id}}" name="schedule.id">
  12 + <div class="uk-grid">
  13 + <div class="uk-width-1-1">
  14 + <div class="uk-form-row">
  15 + <label class="uk-form-label">班次类型</label>
  16 + <div class="uk-form-controls">
  17 + <select class="form-control" name="type1" style="width: 65px;">
  18 + <option>正常</option>
  19 + <option>临加</option>
  20 + </select>
  21 + <select class="form-control nt-dictionary" name="type2" data-group=ChildTaskType
  22 + style="width: 126px;;"></select>
  23 + </div>
  24 + </div>
  25 + </div>
  26 + </div>
  27 + <div class="uk-grid">
  28 + <div class="uk-width-1-2">
  29 + <div class="uk-form-row">
  30 + <label class="uk-form-label">起点 </label>
  31 + <div class="uk-form-controls">
  32 + <select name="startStation" required></select>
  33 + </div>
  34 + </div>
  35 + </div>
  36 + <div class="uk-width-1-2">
  37 + <div class="uk-form-row">
  38 + <label class="uk-form-label">终点</label>
  39 + <div class="uk-form-controls">
  40 + <select name="endStation" required></select>
  41 + </div>
  42 + </div>
  43 + </div>
  44 + </div>
  45 +
  46 + <div class="uk-grid">
  47 + <div class="uk-width-1-2">
  48 + <div class="uk-form-row">
  49 + <label class="uk-form-label">里程类型</label>
  50 + <div class="uk-form-controls">
  51 + <select class="form-control nt-dictionary" required name="mileageType"
  52 + data-group="MileageType"></select>
  53 + </div>
  54 + </div>
  55 + </div>
  56 + <div class="uk-width-1-2">
  57 + <div class="uk-form-row">
  58 + <label class="uk-form-label">公里数</label>
  59 + <div class="uk-form-controls">
  60 + <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false" required>
  61 + </div>
  62 + </div>
  63 + </div>
  64 + </div>
  65 +
  66 + <div class="uk-grid">
  67 + <div class="uk-width-1-2">
  68 + <div class="uk-form-row">
  69 + <label class="uk-form-label">开始时间</label>
  70 + <div class="uk-form-controls">
  71 + <input name="startDate" value="{{sch.fcsj}}" type="time" required>
  72 + </div>
  73 + </div>
  74 + </div>
  75 + <div class="uk-width-1-2">
  76 + <div class="uk-form-row">
  77 + <label class="uk-form-label">结束时间</label>
  78 + <div class="uk-form-controls">
  79 + <input name="endDate" value="{{sch.zdsj}}" type="time" required>
  80 + </div>
  81 + </div>
  82 + </div>
  83 + </div>
  84 +
  85 + <div class="uk-grid">
  86 + <div class="uk-width-1-2">
  87 + <div class="uk-form-row" style="padding-top: 5px;">
  88 + <label class="uk-form-label"></label>
  89 + <div class="uk-form-controls">
  90 + <label>
  91 + <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班
  92 + </label>
  93 + </div>
  94 + </div>
  95 + </div>
  96 + <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;">
  97 + <div class="uk-form-row">
  98 + <label class="uk-form-label">烂班原因</label>
  99 + <div class="uk-form-controls">
  100 + <select class="form-control" name="destroyReason" required>
  101 + <option value="">请选择...</option>
  102 + {{each adjustExps as exp i}}
  103 + <option value="{{exp}}">{{exp}}</option>
  104 + {{/each}}
  105 + </select>
  106 + </div>
  107 + </div>
  108 + </div>
  109 + </div>
  110 +
  111 + <div class="uk-grid">
  112 + <div class="uk-width-1-1">
  113 + <div class="uk-form-row ct-stacked">
  114 + <div class="uk-form-controls" style="margin-top: 5px;">
  115 + <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true"
  116 + data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
  117 + </div>
  118 + </div>
  119 + </div>
  120 + </div>
  121 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  122 + <button type="button" class="uk-button uk-modal-close">取消</button>
  123 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  124 + </div>
  125 + </script>
  126 +
  127 + <script>
  128 + (function () {
  129 + var modal = '#add-sub-task-other-modal',
  130 + sch, stationRoutes, parks, information;
  131 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  132 + $(modal).on('init', function (e, data) {
  133 + e.stopPropagation();
  134 + sch = data.sch;
  135 + var formHtml = template('sub-task-other-form-temp', {sch: sch, adjustExps: adjustExps});
  136 + $('form', modal).html(formHtml);
  137 + //字典转换
  138 + dictionaryUtils.transformDom($('.nt-dictionary', modal));
  139 +
  140 + //站点路由
  141 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  142 + return a.stationRouteCode - b.stationRouteCode;
  143 + }), 'directions');
  144 + //停车场
  145 + $.get('/basic/parks', function (rs) {
  146 + parks = rs;
  147 + });
  148 + //线路标准
  149 + information = gb_data_basic.getLineInformation(sch.xlBm);
  150 +
  151 + //submit
  152 + var f = $('form', modal).formValidation(gb_form_validation_opts);
  153 + f.on('success.form.fv', function (e) {
  154 + disabled_submit_btn(this);
  155 + e.preventDefault();
  156 + var data = $(this).serializeJSON();
  157 +
  158 + gb_common.$post('/childTask', data, function (rs) {
  159 + notify_succ('子任务添加成功');
  160 + gb_schedule_table.updateSchedule(rs.t);
  161 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: rs.t});
  162 + UIkit.modal(modal).hide();
  163 + });
  164 + });
  165 +
  166 + //班次类型
  167 + $('[name=type2]', f).on('change', function () {
  168 + var routes = stationRoutes[sch.xlDir]
  169 + , lastCode = routes[routes.length - 1].stationCode
  170 + , opts = '', park_opts = '';
  171 + //station options
  172 + $.each(routes, function () {
  173 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  174 + });
  175 + //park options
  176 + for (var code in parks)
  177 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
  178 +
  179 + var qdz = $('[name=startStation]', f), zdz = $('[name=endStation]', f), mType = $('[name=mileageType]', f);
  180 + switch ($(this).val()) {
  181 + case '3'://出场
  182 + qdz.html(park_opts).val(information.carPark);
  183 + zdz.html(opts);
  184 + mType.val('empty');
  185 + break;
  186 + case '2'://进场
  187 + qdz.html(opts);
  188 + zdz.html(park_opts).val(information.carPark);
  189 + mType.val('empty');
  190 + break;
  191 + default:
  192 + qdz.html(opts);
  193 + zdz.html(opts).val(lastCode);
  194 + mType.val('service');
  195 +
  196 + }
  197 + });
  198 +
  199 + //是否烂班
  200 + $('[name=destroy]', f).on('click', function () {
  201 + if (this.checked) {
  202 + $('.destroy_reason_wrap', modal).show();//.find('[name=destroyReason]').attr('required', 'required');
  203 + }
  204 + else {
  205 + $('.destroy_reason_wrap', modal).hide();//.find('[name=destroyReason]').removeAttr('required');
  206 + }
  207 + });
  208 +
  209 + $('[name=destroyReason]', f).on('change', function () {
  210 + var rem = $('[name=remarks]', f);
  211 + rem.val(rem.val() + $(this).val() + ',');
  212 + });
  213 + });
  214 + })();
  215 + </script>
  216 +</div>
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_range_turn.html
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="add-sub-task-range_turn-modal">
2   - <div class="uk-modal-dialog" style="width: 1200px;">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>区间调头子任务</h2></div>
6   -
7   - <div style="width: 100%;padding-left: 1%;">
8   - <form class="uk-form uk-form-horizontal">
9   - <div class="uk-grid">
10   - <div class="uk-width-1-4">
11   - <div class="uk-form-row" style="margin-top: 20px;">
12   - <label class="uk-form-label">调头站点</label>
13   - <div class="uk-form-controls">
14   - <select id="turnStationSelect">
15   - <option value="">请选择...</option>
16   - </select>
17   - </div>
18   - </div>
19   - </div>
20   - <div class="uk-width-1-4">
21   - <div class="uk-form-row" style="margin-top: 20px;">
22   - <label class="uk-form-label">调头原因</label>
23   - <div class="uk-form-controls">
24   - <select id="turnReason" style="width: calc(100% - 9px);">
25   - <option value="">请选择...</option>
26   - </select>
27   - </div>
28   - </div>
29   - </div>
30   - <div class="uk-width-2-4" style="padding: 20px 0 0 28px;">
31   - <label>
32   - <input type="checkbox" id="emptyTurnCbox"> 调头后空驶回起点
33   - </label>
34   - <h6 style="color: #a7a5a5;margin-top: 0;"><i class="uk-icon-question-circle"> </i>
35   - 如果“调头站点”在另一个走向不存在,你需要手动选择第二个营运起点</h6>
36   - </div>
37   - </div>
38   - </form>
39   - </div>
40   - <hr class="modal-dotted-hr">
41   - <div class="uk-grid">
42   - <div class="uk-width-1-2">
43   - <div class="main-sch-panel curr"></div>
44   -
45   - <div style="margin-top: 5px;">
46   - <div class="sub-task-card" style="margin: 0 0 0 7px;">
47   - <div class="uk-panel uk-panel-box uk-panel-box-primary" style="padding-bottom: 32px;">
48   - <div class="uk-panel-badge uk-badge">营运</div>
49   - <h3 class="uk-panel-title">线路上站点间</h3>
50   -
51   - <form class="uk-form uk-form-horizontal" curr_service_form>
52   - </form>
53   - </div>
54   - </div>
55   - <div class="sub-task-card " style="margin: 0;">
56   - <div class="uk-panel uk-panel-box" style="padding-bottom: 32px;">
57   - <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
58   - <h3 class="uk-panel-title">线路上站点间</h3>
59   - <form class="uk-form uk-form-horizontal " curr_destroy_form>
60   - </form>
61   - </div>
62   - </div>
63   - </div>
64   - </div>
65   - <div class="uk-width-1-2">
66   - <div class="main-sch-panel next"></div>
67   -
68   - <div style="margin: 5px;">
69   - <div class="sub-task-card " style="margin: 0 0 0 7px;">
70   - <div class="uk-panel uk-panel-box" style="padding-bottom: 32px;">
71   - <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
72   - <h3 class="uk-panel-title">线路上站点间</h3>
73   - <form class="uk-form uk-form-horizontal " next_destroy_form></form>
74   - </div>
75   - </div>
76   - <div class="sub-task-card" style="margin: 0;">
77   - <div class="uk-panel uk-panel-box uk-panel-box-primary" style="padding-bottom: 32px;">
78   - <div class="uk-panel-badge uk-badge">营运</div>
79   - <h3 class="uk-panel-title">线路上站点间</h3>
80   -
81   - <form class="uk-form uk-form-horizontal" next_service_form>
82   - </form>
83   - </div>
84   - </div>
85   - </div>
86   - </div>
87   - </div>
88   -
89   -
90   - <div class="uk-modal-footer uk-text-right">
91   - <button type="button" class="uk-button uk-modal-close">取消</button>
92   - <button type="button" class="uk-button uk-button-primary" id="submitChildTaskBtn">提交子任务</button>
93   -
94   - <div class="ct-footer-left">
95   - <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
96   - </div>
97   - </div>
98   - </div>
99   - <!-- 主任务信息 -->
100   - <script id="range_turn_main_sch-temp" type="text/html">
101   - <div class="ct_row">
102   - <div class="ct_cell c_1_3">
103   - <label>待发</label>
104   - <span>{{dfsj}}</span>
105   - </div>
106   - <div class="ct_cell c_1_3">
107   - <label>计达</label>
108   - <span>{{zdsj}}</span>
109   - </div>
110   - <div class="ct_cell c_1_3">
111   - <label>车辆</label>
112   - <span>{{clZbh}}</span>
113   - </div>
114   - </div>
115   - <div class="ct_row">
116   - <div class="ct_cell c_1_3">
117   - <label>起点</label>
118   - <span>{{qdzName}}</span>
119   - </div>
120   - <div class="ct_cell c_1_3">
121   - <label>终点</label>
122   - <span>{{zdzName}}</span>
123   - </div>
124   - <div class="ct_cell c_1_3">
125   - <label>里程</label>
126   - <span>{{jhlc}}</span>
127   - </div>
128   - </div>
129   - </script>
130   -
131   - <!-- 子任务营运表单 -->
132   - <script id="range_turn_child_service-temp" type="text/html">
133   - <input type="hidden" name="schedule.id" value="{{sch.id}}">
134   - <input type="hidden" name="type2" value="1">
135   - <input type="hidden" value="正常" name="type1">
136   - <input type="hidden" name="mileageType" value="service">
137   - <div class="uk-grid">
138   - <div class="uk-width-3-10">
139   - <div class="uk-form-row">
140   - <label class="uk-form-label">起点 </label>
141   - </div>
142   - </div>
143   - <div class="uk-width-7-10 pl5">
144   - <select name="startStation">
145   - {{each routes as r i}}
146   - <option value="{{r.stationCode}}">{{r.stationName}}</option>
147   - {{/each}}
148   - </select>
149   - </div>
150   - </div>
151   - <div class="uk-grid">
152   - <div class="uk-width-3-10">
153   - <div class="uk-form-row">
154   - <label class="uk-form-label">终点 </label>
155   - </div>
156   - </div>
157   - <div class="uk-width-7-10 pl5">
158   - <select name="endStation" class="ct_focus" disabled>
159   - {{each routes as r i}}
160   - <option value="{{r.stationCode}}" {{if r.stationCode==sch.zdzCode}}selected{{/if}}>
161   - {{r.stationName}}
162   - </option>
163   - {{/each}}
164   - </select>
165   - </div>
166   - </div>
167   - <div class="uk-grid">
168   - <div class="uk-width-3-10">
169   - <div class="uk-form-row">
170   - <label class="uk-form-label mileage_label">营运里程</label>
171   - </div>
172   - </div>
173   - <div class="uk-width-7-10 pl5">
174   - <input type="number" step="0.01" name="mileage" value="{{sch.jhlc}}" required>
175   - </div>
176   - </div>
177   - <div class="uk-grid">
178   - <div class="uk-width-3-10">
179   - <div class="uk-form-row">
180   - <label class="uk-form-label">开始时间</label>
181   - </div>
182   - </div>
183   - <div class="uk-width-7-10 pl5">
184   - <input type="time" name="startDate" value="{{sch.dfsj}}" required >
185   - </div>
186   - </div>
187   - <div class="uk-grid">
188   - <div class="uk-width-3-10">
189   - <div class="uk-form-row">
190   - <label class="uk-form-label">结束时间</label>
191   - </div>
192   - </div>
193   - <div class="uk-width-7-10 pl5">
194   - <input type="time" name="endDate" value="{{sch.zdsj}}" >
195   - </div>
196   - </div>
197   - </script>
198   -
199   - <!-- 子任务烂班表单 -->
200   - <script id="range_turn_child_destroy-temp" type="text/html">
201   - <input type="hidden" name="schedule.id" value="{{sch.id}}">
202   - <input type="hidden" value="正常" name="type1">
203   - <input type="hidden" value="1" name="type2">
204   - <input type="hidden" name="mileageType" value="service">
205   - <input type="hidden" name="destroy" value="true">
206   - <div class="uk-grid">
207   - <div class="uk-width-3-10">
208   - <div class="uk-form-row">
209   - <label class="uk-form-label">起点 </label>
210   - </div>
211   - </div>
212   - <div class="uk-width-7-10 pl5">
213   - <select name="startStation" required disabled>
214   - {{each routes as r i}}
215   - <option value="{{r.stationCode}}">{{r.stationName}}</option>
216   - {{/each}}
217   - </select>
218   - </div>
219   - </div>
220   - <div class="uk-grid">
221   - <div class="uk-width-3-10">
222   - <div class="uk-form-row">
223   - <label class="uk-form-label">终点 </label>
224   - </div>
225   - </div>
226   - <div class="uk-width-7-10 pl5">
227   - <select name="endStation" required class="ct_focus">
228   - {{each routes as r i}}
229   - <option value="{{r.stationCode}}" {{if r.stationCode==sch.zdzCode}}selected{{/if}}>
230   - {{r.stationName}}
231   - </option>
232   - {{/each}}
233   - </select>
234   - </div>
235   - </div>
236   - <div class="uk-grid">
237   - <div class="uk-width-3-10">
238   - <div class="uk-form-row">
239   - <label class="uk-form-label">烂班里程</label>
240   - </div>
241   - </div>
242   - <div class="uk-width-7-10 pl5">
243   - <input type="number" step="0.01" name="mileage" required>
244   - </div>
245   - </div>
246   - <div class="uk-grid">
247   - <div class="uk-width-3-10">
248   - <div class="uk-form-row">
249   - <label class="uk-form-label">开始时间</label>
250   - </div>
251   - </div>
252   - <div class="uk-width-7-10 pl5">
253   - <input type="time" name="startDate" required disabled>
254   - </div>
255   - </div>
256   - <div class="uk-grid" style="height: 30px;">
257   - </div>
258   - </script>
259   -
260   - <div class="ct-bottom-drawer">
261   - <div class="ct-bottom-drawer-body"></div>
262   - </div>
263   -
264   - <script>
265   - (function () {
266   - var modal = '#add-sub-task-range_turn-modal',
267   - sch, nextSch, stationRoutes, information, timeLocStations;
268   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
269   -
270   - var csf = $('form[curr_service_form]', modal);
271   - var nsf = $('form[next_service_form]', modal);
272   - var cdf = $('form[curr_destroy_form]', modal);
273   - var ndf = $('form[next_destroy_form]', modal);
274   -
275   - //掉头站点
276   - var turnStation, turnStationName;
277   - $(modal).on('init', function (e, data) {
278   - e.stopPropagation();
279   - sch = data.sch;
280   - nextSch = gb_schedule_table.getNextSch(sch);
281   -
282   - //主任务信息
283   - $('.main-sch-panel.curr', modal).html(template('range_turn_main_sch-temp', sch));
284   - $('.main-sch-panel.next', modal).html(template('range_turn_main_sch-temp', nextSch));
285   -
286   - //站点路由
287   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
288   - return a.stationRouteCode - b.stationRouteCode;
289   - }), 'directions');
290   -
291   - var currData = {sch: sch, routes: stationRoutes[sch.xlDir]}
292   - , nextData = {sch: nextSch, routes: stationRoutes[nextSch.xlDir]};
293   - //营运1
294   - csf.html(template('range_turn_child_service-temp', currData));
295   - disabledField(csf, 'startStation');
296   - //营运结束时间
297   - $('[name=endDate]', csf).on('input', synchroDate);
298   -
299   - //营运2
300   - nsf.html(template('range_turn_child_service-temp', nextData));
301   - disabledField(nsf, 'startDate');
302   - //烂班1
303   - cdf.html(template('range_turn_child_destroy-temp', currData));
304   - disabledField(cdf, 'endStation');
305   - //烂班2
306   - ndf.html(template('range_turn_child_destroy-temp', nextData));
307   - $('[name=startStation]', ndf).val(nextSch.qdzCode);
308   - //烂班2终点改变
309   - $('[name=endStation]', ndf).on('change', reCalcSecond);
310   - //营运2起点改变
311   - $('[name=startStation]', nsf).on('change', reCalcSecond);
312   -
313   - //掉头站点
314   - var opts = '';
315   - $.each(currData.routes, function () {
316   - opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
317   - });
318   - $('#turnStationSelect', modal).append(opts);
319   - opts = '';
320   - $.each(adjustExps, function () {
321   - opts += '<option value="' + this + '">' + this + '</option>';
322   - });
323   - //掉头原因
324   - $('#turnReason', modal).append(opts);
325   -
326   - //线路标准
327   - information = gb_data_basic.getLineInformation(sch.xlBm);
328   - //本地存储的站点耗时
329   - getLocStationsSpace();
330   -
331   - var dataArray = [];
332   - var fs = $('.sub-task-card form', modal).formValidation({
333   - framework: 'uikit',
334   - locale: 'zh_CN'
335   - });
336   - fs.on('success.form.fv', function (e) {
337   - e.preventDefault();
338   - dataArray.push($.extend($(this).serializeJSON(), getDisabledVal(this),
339   - {remarks: $('#turnReason', modal).val(), destroyReason: $('#turnReason', modal).val()}));
340   - $(this).data('valid', true);
341   -
342   - if (allValidSuccess()) {
343   - var i = 0;
344   - (function () {
345   - var f = arguments.callee;
346   - if (i >= dataArray.length) {
347   - /**
348   - * 为班次添加备注
349   - */
350   - var remarks = '调头' + $('[name=endDate]', csf).val() + ' 因 ' + $.trim($('#turnReason', modal).val()) + '在' + $('[name=endStation] option:selected', csf).text() + '调头';
351   - gb_schedule_table.addRemarks([sch, nextSch], gb_common.trim(remarks, 'g'));
352   - UIkit.modal(modal).hide();
353   - $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
354   - return;
355   - }
356   - var data = dataArray[i];
357   - //营运子任务不写备注
358   - if(data.mileageType == 'service' && !data.destroy)
359   - data.remarks = '';
360   - gb_common.$post('/childTask', data, function (rs) {
361   - notify_succ('子任务添加成功');
362   - gb_schedule_table.updateSchedule(rs.t);
363   - i++;
364   - f();
365   - });
366   - })();
367   - }
368   - });
369   -
370   - //校验不过
371   - fs.on('err.field.fv', function () {
372   - $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled');
373   - });
374   -
375   - //submit
376   - $('#submitChildTaskBtn', modal).on('click', function () {
377   - if ($('#turnReason', modal).val() == '') {
378   - return notify_err('你必须选择调头原因!');
379   - }
380   -
381   - $(this).addClass('disabled').attr('disabled', 'disabled');
382   - dataArray = [];
383   - fs.data('valid', false);
384   - fs.formValidation('validate');
385   - });
386   -
387   - //调头站切换
388   - $('#turnStationSelect', modal).on('change', function () {
389   - turnStation = $(this).val();
390   - turnStationName = $('option:selected', this).text();
391   - reClac();
392   - });
393   - });
394   -
395   - function disabledField(f, itemName) {
396   - $('[name=' + itemName + ']', f).attr('disabled', 'disabled');
397   - }
398   -
399   - function allValidSuccess() {
400   - var flag = true;
401   - $('.sub-task-card form:visible', modal).each(function (i, f) {
402   - if (!$(f).data('valid')) {
403   - flag = false;
404   - return false;
405   - }
406   - });
407   - return flag;
408   - }
409   -
410   - //获取表单disabled 项的值
411   - function getDisabledVal(f) {
412   - var rs = {};
413   - $('input,select', f).each(function () {
414   - if ($(this).attr('disabled')) {
415   - rs[$(this).attr('name')] = $(this).val();
416   - }
417   - });
418   - return rs;
419   - }
420   -
421   - function reClac() {
422   - if (!turnStation || turnStation == '')
423   - return;
424   -
425   - var mileage, et, ets;
426   -
427   - $('#turnStationSelect', modal).val(turnStation);
428   - //营运1终点
429   - $('[name=endStation]', csf).val(turnStation);
430   - calcFormMileage(csf, sch.xlDir);//里程
431   - //结束时间
432   - ets = calcFirstEndDate();
433   -
434   - //烂班1起点
435   - $('[name=startStation]', cdf).val(turnStation);
436   - calcFormMileage(cdf, sch.xlDir);
437   - //开始时间
438   - $('[name=startDate]', cdf).val(ets);
439   - //烂班2终点
440   - try {
441   - if(!$('#emptyTurnCbox', modal)[0].checked){
442   - $('[name=endStation]', ndf).val(searchParallelStation());
443   - calcFormMileage(ndf, nextSch.xlDir);
444   - }
445   - } catch (e) {
446   - }
447   - //开始时间
448   - $('[name=startDate]', ndf).val(ets);
449   -
450   - //营运2起点
451   - try {
452   - $('[name=startStation]', nsf).val(searchParallelStation());
453   - calcFormMileage(nsf, nextSch.xlDir);
454   - } catch (e) {
455   - }
456   - //开始时间
457   - $('[name=startDate]', nsf).val(ets);
458   - //结束时间
459   - calcSecondEndDate();
460   - }
461   -
462   - function calcFirstEndDate() {
463   - var mileage = parseInt($('[name=mileage]', csf).val());
464   - var et = sch.dfsjT + (mileage / sch.jhlc * sch.bcsj * 60 * 1000);
465   - var ets = et > sch.zdsjT ? sch.zdsj : moment(et).format('HH:mm');
466   - $('[name=endDate]', csf).val(ets);
467   - return ets;
468   - }
469   -
470   - function calcSecondEndDate() {
471   - var mileage = parseInt($('[name=mileage]', nsf).val());
472   - var ets = moment($('[name=startDate]', nsf).val(), 'HH:mm')
473   - .add(mileage / nextSch.jhlc * nextSch.bcsj * 60, 'seconds')
474   - .format('HH:mm');
475   - $('[name=endDate]', nsf).val(ets);
476   - return ets;
477   - }
478   -
479   - //返回另一个走向对应的站点
480   - function searchParallelStation() {
481   - var routes = stationRoutes[nextSch.xlDir]
482   - , len = routes.length;
483   -
484   - for (var i = 0; i < len; i++) {
485   - if (routes[i].stationName == turnStationName)
486   - return routes[i].stationCode;
487   - }
488   - }
489   -
490   - //计算第二个班次
491   - function reCalcSecond() {
492   - var code = $(this).val()
493   - , updown = nextSch.xlDir;
494   -
495   - $('[name=endStation]', ndf).val(code);
496   - calcFormMileage(ndf, updown);
497   -
498   - $('[name=startStation]', nsf).val(code);
499   - calcFormMileage(nsf, updown);
500   - //结束时间
501   - calcSecondEndDate();
502   - }
503   -
504   - //同步时间
505   - function synchroDate() {
506   - var date = $(this).val();
507   - $('[name=startDate]', cdf).val(date);
508   - $('[name=startDate]', ndf).val(date);
509   - $('[name=startDate]', nsf).val(date);
510   - calcSecondEndDate();
511   - }
512   -
513   - function calcFormMileage(f, updown) {
514   - var s = $('[name=startStation]', f).val()
515   - , e = $('[name=endStation]', f).val();
516   -
517   - $('[name=mileage]', f).val(calcMileage(s, e, updown));
518   - }
519   -
520   - function calcMileage(s, e, updown) {
521   - var mileage = 0, flag, code;
522   - if (timeLocStations) {
523   - //空间坐标计算的站距
524   - $.each(timeLocStations[updown == 0 ? 'up' : 'down'], function () {
525   - code = this.station['STATION_CODE'];
526   - if (flag)
527   - mileage = gb_common.accAdd(mileage, this.toDistanceGl);
528   - if (code == s)
529   - flag = true;
530   - if (code == e)
531   - return false;
532   - });
533   - }
534   - else {
535   - //从原始站点路由字段里取值
536   - $.each(stationRoutes[updown], function () {
537   - code = this['stationCode'];
538   - if (flag)
539   - mileage = gb_common.accAdd(mileage, this.distances);
540   - if (code == s)
541   - flag = true;
542   - if (code == e)
543   - return false;
544   - });
545   - }
546   - return mileage;
547   - }
548   -
549   - //从本地localStorage获取站间距数据
550   - function getLocStationsSpace() {
551   - try {
552   - timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
553   - if (timeLocStations)
554   - timeLocStations = JSON.parse(timeLocStations).stations;
555   - } catch (e) {
556   - console.log(e);
557   - }
558   - }
559   -
560   - //站间距计算后刷新
561   - $(modal).on('refresh_station_space', function () {
562   - getLocStationsSpace();
563   - reClac();
564   - });
565   -
566   - //------ 下抽屉 ------
567   - $('#betweenStationRangeCalc', modal).on('click', function () {
568   - var id = $(this).data('drawer-id');
569   - switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
570   - });
571   -
572   - var btmDrawer = $('.ct-bottom-drawer', modal);
573   - //打开事件
574   - btmDrawer.on('drawer_show', function () {
575   - var url = $(this).data('url');
576   - if (!url) {
577   - alert('无效的地址');
578   - }
579   -
580   - var drawerPanel = $(this).data('name');
581   - $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
582   - $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
583   - });
584   - });
585   -
586   - function switchBtmDrawer(id, url) {
587   - if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
588   - btmDrawer.removeClass('open');
589   - btmDrawer.removeData('name').removeData('url');
590   - }
591   - else {
592   - btmDrawer.addClass('open');
593   - btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
594   - }
595   - }
596   -
597   - /**
598   - * 选择空驶调头
599   - */
600   - $('#emptyTurnCbox', modal).on('click', function () {
601   - if(this.checked){
602   - //全程烂班
603   - $('[name=endStation]', ndf).val(nextSch.zdzCode).attr('disabled', 'disabled');
604   - $('[name=mileage]', ndf).val(nextSch.jhlc).attr('disabled', 'disabled');
605   - //空驶回起点,营运变空驶
606   - var $panel = nsf.parents('.uk-panel').removeClass('uk-panel-box-primary')
607   - .addClass('uk-panel-box-secondary');
608   - $panel.find('.uk-panel-badge').addClass('uk-badge-default').text('空驶');
609   - $panel.find('.mileage_label').text('空驶里程');
610   -
611   - $('[name=mileageType]', nsf).val('empty');
612   - }
613   - else{
614   - //恢复
615   - $('[name=endStation]', ndf).removeAttr('disabled');
616   - $('[name=mileage]', ndf).removeAttr('disabled');
617   -
618   - //空驶变营运
619   - var $panel = nsf.parents('.uk-panel').removeClass('uk-panel-box-secondary')
620   - .addClass('uk-panel-box-primary');
621   - $panel.find('.uk-panel-badge').removeClass('uk-badge-default').text('营运');
622   - $panel.find('.mileage_label').text('营运里程');
623   -
624   - reClac();
625   - }
626   - });
627   - })();
628   - </script>
  1 +<div class="uk-modal ct-form-modal ct_move_modal" id="add-sub-task-range_turn-modal">
  2 + <div class="uk-modal-dialog" style="width: 1200px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>区间调头子任务</h2></div>
  6 +
  7 + <div style="width: 100%;padding-left: 1%;">
  8 + <form class="uk-form uk-form-horizontal">
  9 + <div class="uk-grid">
  10 + <div class="uk-width-1-4">
  11 + <div class="uk-form-row" style="margin-top: 20px;">
  12 + <label class="uk-form-label">调头站点</label>
  13 + <div class="uk-form-controls">
  14 + <select id="turnStationSelect">
  15 + <option value="">请选择...</option>
  16 + </select>
  17 + </div>
  18 + </div>
  19 + </div>
  20 + <div class="uk-width-1-4">
  21 + <div class="uk-form-row" style="margin-top: 20px;">
  22 + <label class="uk-form-label">调头原因</label>
  23 + <div class="uk-form-controls">
  24 + <select id="turnReason" style="width: calc(100% - 9px);">
  25 + <option value="">请选择...</option>
  26 + </select>
  27 + </div>
  28 + </div>
  29 + </div>
  30 + <div class="uk-width-2-4" style="padding: 20px 0 0 28px;">
  31 + <label>
  32 + <input type="checkbox" id="emptyTurnCbox"> 调头后空驶回起点
  33 + </label>
  34 + <h6 style="color: #a7a5a5;margin-top: 0;"><i class="uk-icon-question-circle"> </i>
  35 + 如果“调头站点”在另一个走向不存在,你需要手动选择第二个营运起点</h6>
  36 + </div>
  37 + </div>
  38 + </form>
  39 + </div>
  40 + <hr class="modal-dotted-hr">
  41 + <div class="uk-grid">
  42 + <div class="uk-width-1-2">
  43 + <div class="main-sch-panel curr"></div>
  44 +
  45 + <div style="margin-top: 5px;">
  46 + <div class="sub-task-card" style="margin: 0 0 0 7px;">
  47 + <div class="uk-panel uk-panel-box uk-panel-box-primary" style="padding-bottom: 32px;">
  48 + <div class="uk-panel-badge uk-badge">营运</div>
  49 + <h3 class="uk-panel-title">线路上站点间</h3>
  50 +
  51 + <form class="uk-form uk-form-horizontal" curr_service_form>
  52 + </form>
  53 + </div>
  54 + </div>
  55 + <div class="sub-task-card " style="margin: 0;">
  56 + <div class="uk-panel uk-panel-box" style="padding-bottom: 32px;">
  57 + <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
  58 + <h3 class="uk-panel-title">线路上站点间</h3>
  59 + <form class="uk-form uk-form-horizontal " curr_destroy_form>
  60 + </form>
  61 + </div>
  62 + </div>
  63 + </div>
  64 + </div>
  65 + <div class="uk-width-1-2">
  66 + <div class="main-sch-panel next"></div>
  67 +
  68 + <div style="margin: 5px;">
  69 + <div class="sub-task-card " style="margin: 0 0 0 7px;">
  70 + <div class="uk-panel uk-panel-box" style="padding-bottom: 32px;">
  71 + <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
  72 + <h3 class="uk-panel-title">线路上站点间</h3>
  73 + <form class="uk-form uk-form-horizontal " next_destroy_form></form>
  74 + </div>
  75 + </div>
  76 + <div class="sub-task-card" style="margin: 0;">
  77 + <div class="uk-panel uk-panel-box uk-panel-box-primary" style="padding-bottom: 32px;">
  78 + <div class="uk-panel-badge uk-badge">营运</div>
  79 + <h3 class="uk-panel-title">线路上站点间</h3>
  80 +
  81 + <form class="uk-form uk-form-horizontal" next_service_form>
  82 + </form>
  83 + </div>
  84 + </div>
  85 + </div>
  86 + </div>
  87 + </div>
  88 +
  89 +
  90 + <div class="uk-modal-footer uk-text-right">
  91 + <button type="button" class="uk-button uk-modal-close">取消</button>
  92 + <button type="button" class="uk-button uk-button-primary" id="submitChildTaskBtn">提交子任务</button>
  93 +
  94 + <div class="ct-footer-left">
  95 + <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
  96 + </div>
  97 + </div>
  98 + </div>
  99 + <!-- 主任务信息 -->
  100 + <script id="range_turn_main_sch-temp" type="text/html">
  101 + <div class="ct_row">
  102 + <div class="ct_cell c_1_3">
  103 + <label>待发</label>
  104 + <span>{{dfsj}}</span>
  105 + </div>
  106 + <div class="ct_cell c_1_3">
  107 + <label>计达</label>
  108 + <span>{{zdsj}}</span>
  109 + </div>
  110 + <div class="ct_cell c_1_3">
  111 + <label>车辆</label>
  112 + <span>{{clZbh}}</span>
  113 + </div>
  114 + </div>
  115 + <div class="ct_row">
  116 + <div class="ct_cell c_1_3">
  117 + <label>起点</label>
  118 + <span>{{qdzName}}</span>
  119 + </div>
  120 + <div class="ct_cell c_1_3">
  121 + <label>终点</label>
  122 + <span>{{zdzName}}</span>
  123 + </div>
  124 + <div class="ct_cell c_1_3">
  125 + <label>里程</label>
  126 + <span>{{jhlc}}</span>
  127 + </div>
  128 + </div>
  129 + </script>
  130 +
  131 + <!-- 子任务营运表单 -->
  132 + <script id="range_turn_child_service-temp" type="text/html">
  133 + <input type="hidden" name="schedule.id" value="{{sch.id}}">
  134 + <input type="hidden" name="type2" value="1">
  135 + <input type="hidden" value="正常" name="type1">
  136 + <input type="hidden" name="mileageType" value="service">
  137 + <div class="uk-grid">
  138 + <div class="uk-width-3-10">
  139 + <div class="uk-form-row">
  140 + <label class="uk-form-label">起点 </label>
  141 + </div>
  142 + </div>
  143 + <div class="uk-width-7-10 pl5">
  144 + <select name="startStation">
  145 + {{each routes as r i}}
  146 + <option value="{{r.stationCode}}">{{r.stationName}}</option>
  147 + {{/each}}
  148 + </select>
  149 + </div>
  150 + </div>
  151 + <div class="uk-grid">
  152 + <div class="uk-width-3-10">
  153 + <div class="uk-form-row">
  154 + <label class="uk-form-label">终点 </label>
  155 + </div>
  156 + </div>
  157 + <div class="uk-width-7-10 pl5">
  158 + <select name="endStation" class="ct_focus" disabled>
  159 + {{each routes as r i}}
  160 + <option value="{{r.stationCode}}" {{if r.stationCode==sch.zdzCode}}selected{{/if}}>
  161 + {{r.stationName}}
  162 + </option>
  163 + {{/each}}
  164 + </select>
  165 + </div>
  166 + </div>
  167 + <div class="uk-grid">
  168 + <div class="uk-width-3-10">
  169 + <div class="uk-form-row">
  170 + <label class="uk-form-label mileage_label">营运里程</label>
  171 + </div>
  172 + </div>
  173 + <div class="uk-width-7-10 pl5">
  174 + <input type="number" step="0.01" name="mileage" value="{{sch.jhlc}}" required>
  175 + </div>
  176 + </div>
  177 + <div class="uk-grid">
  178 + <div class="uk-width-3-10">
  179 + <div class="uk-form-row">
  180 + <label class="uk-form-label">开始时间</label>
  181 + </div>
  182 + </div>
  183 + <div class="uk-width-7-10 pl5">
  184 + <input type="time" name="startDate" value="{{sch.dfsj}}" required >
  185 + </div>
  186 + </div>
  187 + <div class="uk-grid">
  188 + <div class="uk-width-3-10">
  189 + <div class="uk-form-row">
  190 + <label class="uk-form-label">结束时间</label>
  191 + </div>
  192 + </div>
  193 + <div class="uk-width-7-10 pl5">
  194 + <input type="time" name="endDate" value="{{sch.zdsj}}" >
  195 + </div>
  196 + </div>
  197 + </script>
  198 +
  199 + <!-- 子任务烂班表单 -->
  200 + <script id="range_turn_child_destroy-temp" type="text/html">
  201 + <input type="hidden" name="schedule.id" value="{{sch.id}}">
  202 + <input type="hidden" value="正常" name="type1">
  203 + <input type="hidden" value="1" name="type2">
  204 + <input type="hidden" name="mileageType" value="service">
  205 + <input type="hidden" name="destroy" value="true">
  206 + <div class="uk-grid">
  207 + <div class="uk-width-3-10">
  208 + <div class="uk-form-row">
  209 + <label class="uk-form-label">起点 </label>
  210 + </div>
  211 + </div>
  212 + <div class="uk-width-7-10 pl5">
  213 + <select name="startStation" required disabled>
  214 + {{each routes as r i}}
  215 + <option value="{{r.stationCode}}">{{r.stationName}}</option>
  216 + {{/each}}
  217 + </select>
  218 + </div>
  219 + </div>
  220 + <div class="uk-grid">
  221 + <div class="uk-width-3-10">
  222 + <div class="uk-form-row">
  223 + <label class="uk-form-label">终点 </label>
  224 + </div>
  225 + </div>
  226 + <div class="uk-width-7-10 pl5">
  227 + <select name="endStation" required class="ct_focus">
  228 + {{each routes as r i}}
  229 + <option value="{{r.stationCode}}" {{if r.stationCode==sch.zdzCode}}selected{{/if}}>
  230 + {{r.stationName}}
  231 + </option>
  232 + {{/each}}
  233 + </select>
  234 + </div>
  235 + </div>
  236 + <div class="uk-grid">
  237 + <div class="uk-width-3-10">
  238 + <div class="uk-form-row">
  239 + <label class="uk-form-label">烂班里程</label>
  240 + </div>
  241 + </div>
  242 + <div class="uk-width-7-10 pl5">
  243 + <input type="number" step="0.01" name="mileage" required>
  244 + </div>
  245 + </div>
  246 + <div class="uk-grid">
  247 + <div class="uk-width-3-10">
  248 + <div class="uk-form-row">
  249 + <label class="uk-form-label">开始时间</label>
  250 + </div>
  251 + </div>
  252 + <div class="uk-width-7-10 pl5">
  253 + <input type="time" name="startDate" required disabled>
  254 + </div>
  255 + </div>
  256 + <div class="uk-grid" style="height: 30px;">
  257 + </div>
  258 + </script>
  259 +
  260 + <div class="ct-bottom-drawer">
  261 + <div class="ct-bottom-drawer-body"></div>
  262 + </div>
  263 +
  264 + <script>
  265 + (function () {
  266 + var modal = '#add-sub-task-range_turn-modal',
  267 + sch, nextSch, stationRoutes, information, timeLocStations;
  268 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  269 +
  270 + var csf = $('form[curr_service_form]', modal);
  271 + var nsf = $('form[next_service_form]', modal);
  272 + var cdf = $('form[curr_destroy_form]', modal);
  273 + var ndf = $('form[next_destroy_form]', modal);
  274 +
  275 + //掉头站点
  276 + var turnStation, turnStationName;
  277 + $(modal).on('init', function (e, data) {
  278 + e.stopPropagation();
  279 + sch = data.sch;
  280 + nextSch = gb_schedule_table.getNextSch(sch);
  281 +
  282 + //主任务信息
  283 + $('.main-sch-panel.curr', modal).html(template('range_turn_main_sch-temp', sch));
  284 + $('.main-sch-panel.next', modal).html(template('range_turn_main_sch-temp', nextSch));
  285 +
  286 + //站点路由
  287 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  288 + return a.stationRouteCode - b.stationRouteCode;
  289 + }), 'directions');
  290 +
  291 + var currData = {sch: sch, routes: stationRoutes[sch.xlDir]}
  292 + , nextData = {sch: nextSch, routes: stationRoutes[nextSch.xlDir]};
  293 + //营运1
  294 + csf.html(template('range_turn_child_service-temp', currData));
  295 + disabledField(csf, 'startStation');
  296 + //营运结束时间
  297 + $('[name=endDate]', csf).on('input', synchroDate);
  298 +
  299 + //营运2
  300 + nsf.html(template('range_turn_child_service-temp', nextData));
  301 + disabledField(nsf, 'startDate');
  302 + //烂班1
  303 + cdf.html(template('range_turn_child_destroy-temp', currData));
  304 + disabledField(cdf, 'endStation');
  305 + //烂班2
  306 + ndf.html(template('range_turn_child_destroy-temp', nextData));
  307 + $('[name=startStation]', ndf).val(nextSch.qdzCode);
  308 + //烂班2终点改变
  309 + $('[name=endStation]', ndf).on('change', reCalcSecond);
  310 + //营运2起点改变
  311 + $('[name=startStation]', nsf).on('change', reCalcSecond);
  312 +
  313 + //掉头站点
  314 + var opts = '';
  315 + $.each(currData.routes, function () {
  316 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
  317 + });
  318 + $('#turnStationSelect', modal).append(opts);
  319 + opts = '';
  320 + $.each(adjustExps, function () {
  321 + opts += '<option value="' + this + '">' + this + '</option>';
  322 + });
  323 + //掉头原因
  324 + $('#turnReason', modal).append(opts);
  325 +
  326 + //线路标准
  327 + information = gb_data_basic.getLineInformation(sch.xlBm);
  328 + //本地存储的站点耗时
  329 + getLocStationsSpace();
  330 +
  331 + var dataArray = [];
  332 + var fs = $('.sub-task-card form', modal).formValidation({
  333 + framework: 'uikit',
  334 + locale: 'zh_CN'
  335 + });
  336 + fs.on('success.form.fv', function (e) {
  337 + e.preventDefault();
  338 + dataArray.push($.extend($(this).serializeJSON(), getDisabledVal(this),
  339 + {remarks: $('#turnReason', modal).val(), destroyReason: $('#turnReason', modal).val()}));
  340 + $(this).data('valid', true);
  341 +
  342 + if (allValidSuccess()) {
  343 + var i = 0;
  344 + (function () {
  345 + var f = arguments.callee;
  346 + if (i >= dataArray.length) {
  347 + /**
  348 + * 为班次添加备注
  349 + */
  350 + var remarks = '调头' + $('[name=endDate]', csf).val() + ' 因 ' + $.trim($('#turnReason', modal).val()) + '在' + $('[name=endStation] option:selected', csf).text() + '调头';
  351 + gb_schedule_table.addRemarks([sch, nextSch], gb_common.trim(remarks, 'g'));
  352 + UIkit.modal(modal).hide();
  353 + $('#schedule-lj_zrw-modal .main-schedule-table').trigger('refresh', {sch: sch});
  354 + return;
  355 + }
  356 + var data = dataArray[i];
  357 + //营运子任务不写备注
  358 + if(data.mileageType == 'service' && !data.destroy)
  359 + data.remarks = '';
  360 + gb_common.$post('/childTask', data, function (rs) {
  361 + notify_succ('子任务添加成功');
  362 + gb_schedule_table.updateSchedule(rs.t);
  363 + i++;
  364 + f();
  365 + });
  366 + })();
  367 + }
  368 + });
  369 +
  370 + //校验不过
  371 + fs.on('err.field.fv', function () {
  372 + $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled');
  373 + });
  374 +
  375 + //submit
  376 + $('#submitChildTaskBtn', modal).on('click', function () {
  377 + if ($('#turnReason', modal).val() == '') {
  378 + return notify_err('你必须选择调头原因!');
  379 + }
  380 +
  381 + $(this).addClass('disabled').attr('disabled', 'disabled');
  382 + dataArray = [];
  383 + fs.data('valid', false);
  384 + fs.formValidation('validate');
  385 + });
  386 +
  387 + //调头站切换
  388 + $('#turnStationSelect', modal).on('change', function () {
  389 + turnStation = $(this).val();
  390 + turnStationName = $('option:selected', this).text();
  391 + reClac();
  392 + });
  393 + });
  394 +
  395 + function disabledField(f, itemName) {
  396 + $('[name=' + itemName + ']', f).attr('disabled', 'disabled');
  397 + }
  398 +
  399 + function allValidSuccess() {
  400 + var flag = true;
  401 + $('.sub-task-card form:visible', modal).each(function (i, f) {
  402 + if (!$(f).data('valid')) {
  403 + flag = false;
  404 + return false;
  405 + }
  406 + });
  407 + return flag;
  408 + }
  409 +
  410 + //获取表单disabled 项的值
  411 + function getDisabledVal(f) {
  412 + var rs = {};
  413 + $('input,select', f).each(function () {
  414 + if ($(this).attr('disabled')) {
  415 + rs[$(this).attr('name')] = $(this).val();
  416 + }
  417 + });
  418 + return rs;
  419 + }
  420 +
  421 + function reClac() {
  422 + if (!turnStation || turnStation == '')
  423 + return;
  424 +
  425 + var mileage, et, ets;
  426 +
  427 + $('#turnStationSelect', modal).val(turnStation);
  428 + //营运1终点
  429 + $('[name=endStation]', csf).val(turnStation);
  430 + calcFormMileage(csf, sch.xlDir);//里程
  431 + //结束时间
  432 + ets = calcFirstEndDate();
  433 +
  434 + //烂班1起点
  435 + $('[name=startStation]', cdf).val(turnStation);
  436 + calcFormMileage(cdf, sch.xlDir);
  437 + //开始时间
  438 + $('[name=startDate]', cdf).val(ets);
  439 + //烂班2终点
  440 + try {
  441 + if(!$('#emptyTurnCbox', modal)[0].checked){
  442 + $('[name=endStation]', ndf).val(searchParallelStation());
  443 + calcFormMileage(ndf, nextSch.xlDir);
  444 + }
  445 + } catch (e) {
  446 + }
  447 + //开始时间
  448 + $('[name=startDate]', ndf).val(ets);
  449 +
  450 + //营运2起点
  451 + try {
  452 + $('[name=startStation]', nsf).val(searchParallelStation());
  453 + calcFormMileage(nsf, nextSch.xlDir);
  454 + } catch (e) {
  455 + }
  456 + //开始时间
  457 + $('[name=startDate]', nsf).val(ets);
  458 + //结束时间
  459 + calcSecondEndDate();
  460 + }
  461 +
  462 + function calcFirstEndDate() {
  463 + var mileage = parseInt($('[name=mileage]', csf).val());
  464 + var et = sch.dfsjT + (mileage / sch.jhlc * sch.bcsj * 60 * 1000);
  465 + var ets = et > sch.zdsjT ? sch.zdsj : moment(et).format('HH:mm');
  466 + $('[name=endDate]', csf).val(ets);
  467 + return ets;
  468 + }
  469 +
  470 + function calcSecondEndDate() {
  471 + var mileage = parseInt($('[name=mileage]', nsf).val());
  472 + var ets = moment($('[name=startDate]', nsf).val(), 'HH:mm')
  473 + .add(mileage / nextSch.jhlc * nextSch.bcsj * 60, 'seconds')
  474 + .format('HH:mm');
  475 + $('[name=endDate]', nsf).val(ets);
  476 + return ets;
  477 + }
  478 +
  479 + //返回另一个走向对应的站点
  480 + function searchParallelStation() {
  481 + var routes = stationRoutes[nextSch.xlDir]
  482 + , len = routes.length;
  483 +
  484 + for (var i = 0; i < len; i++) {
  485 + if (routes[i].stationName == turnStationName)
  486 + return routes[i].stationCode;
  487 + }
  488 + }
  489 +
  490 + //计算第二个班次
  491 + function reCalcSecond() {
  492 + var code = $(this).val()
  493 + , updown = nextSch.xlDir;
  494 +
  495 + $('[name=endStation]', ndf).val(code);
  496 + calcFormMileage(ndf, updown);
  497 +
  498 + $('[name=startStation]', nsf).val(code);
  499 + calcFormMileage(nsf, updown);
  500 + //结束时间
  501 + calcSecondEndDate();
  502 + }
  503 +
  504 + //同步时间
  505 + function synchroDate() {
  506 + var date = $(this).val();
  507 + $('[name=startDate]', cdf).val(date);
  508 + $('[name=startDate]', ndf).val(date);
  509 + $('[name=startDate]', nsf).val(date);
  510 + calcSecondEndDate();
  511 + }
  512 +
  513 + function calcFormMileage(f, updown) {
  514 + var s = $('[name=startStation]', f).val()
  515 + , e = $('[name=endStation]', f).val();
  516 +
  517 + $('[name=mileage]', f).val(calcMileage(s, e, updown));
  518 + }
  519 +
  520 + function calcMileage(s, e, updown) {
  521 + var mileage = 0, flag, code;
  522 + if (timeLocStations) {
  523 + //空间坐标计算的站距
  524 + $.each(timeLocStations[updown == 0 ? 'up' : 'down'], function () {
  525 + code = this.station['STATION_CODE'];
  526 + if (flag)
  527 + mileage = gb_common.accAdd(mileage, this.toDistanceGl);
  528 + if (code == s)
  529 + flag = true;
  530 + if (code == e)
  531 + return false;
  532 + });
  533 + }
  534 + else {
  535 + //从原始站点路由字段里取值
  536 + $.each(stationRoutes[updown], function () {
  537 + code = this['stationCode'];
  538 + if (flag)
  539 + mileage = gb_common.accAdd(mileage, this.distances);
  540 + if (code == s)
  541 + flag = true;
  542 + if (code == e)
  543 + return false;
  544 + });
  545 + }
  546 + return mileage;
  547 + }
  548 +
  549 + //从本地localStorage获取站间距数据
  550 + function getLocStationsSpace() {
  551 + try {
  552 + timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
  553 + if (timeLocStations)
  554 + timeLocStations = JSON.parse(timeLocStations).stations;
  555 + } catch (e) {
  556 + console.log(e);
  557 + }
  558 + }
  559 +
  560 + //站间距计算后刷新
  561 + $(modal).on('refresh_station_space', function () {
  562 + getLocStationsSpace();
  563 + reClac();
  564 + });
  565 +
  566 + //------ 下抽屉 ------
  567 + $('#betweenStationRangeCalc', modal).on('click', function () {
  568 + var id = $(this).data('drawer-id');
  569 + switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
  570 + });
  571 +
  572 + var btmDrawer = $('.ct-bottom-drawer', modal);
  573 + //打开事件
  574 + btmDrawer.on('drawer_show', function () {
  575 + var url = $(this).data('url');
  576 + if (!url) {
  577 + alert('无效的地址');
  578 + }
  579 +
  580 + var drawerPanel = $(this).data('name');
  581 + $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
  582 + $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
  583 + });
  584 + });
  585 +
  586 + function switchBtmDrawer(id, url) {
  587 + if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
  588 + btmDrawer.removeClass('open');
  589 + btmDrawer.removeData('name').removeData('url');
  590 + }
  591 + else {
  592 + btmDrawer.addClass('open');
  593 + btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
  594 + }
  595 + }
  596 +
  597 + /**
  598 + * 选择空驶调头
  599 + */
  600 + $('#emptyTurnCbox', modal).on('click', function () {
  601 + if(this.checked){
  602 + //全程烂班
  603 + $('[name=endStation]', ndf).val(nextSch.zdzCode).attr('disabled', 'disabled');
  604 + $('[name=mileage]', ndf).val(nextSch.jhlc).attr('disabled', 'disabled');
  605 + //空驶回起点,营运变空驶
  606 + var $panel = nsf.parents('.uk-panel').removeClass('uk-panel-box-primary')
  607 + .addClass('uk-panel-box-secondary');
  608 + $panel.find('.uk-panel-badge').addClass('uk-badge-default').text('空驶');
  609 + $panel.find('.mileage_label').text('空驶里程');
  610 +
  611 + $('[name=mileageType]', nsf).val('empty');
  612 + }
  613 + else{
  614 + //恢复
  615 + $('[name=endStation]', ndf).removeAttr('disabled');
  616 + $('[name=mileage]', ndf).removeAttr('disabled');
  617 +
  618 + //空驶变营运
  619 + var $panel = nsf.parents('.uk-panel').removeClass('uk-panel-box-secondary')
  620 + .addClass('uk-panel-box-primary');
  621 + $panel.find('.uk-panel-badge').removeClass('uk-badge-default').text('营运');
  622 + $panel.find('.mileage_label').text('营运里程');
  623 +
  624 + reClac();
  625 + }
  626 + });
  627 + })();
  628 + </script>
629 629 </div>
630 630 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch/editor.html
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="history-sch-edit-modal">
2   - <div class="uk-modal-dialog" style="width: 900px;">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>历史路单编辑</h2></div>
6   - <form class="uk-form uk-form-horizontal sch_form">
7   - </form>
8   -
9   - <div class="uk-panel uk-panel-box uk-panel-box-secondary" style="padding-bottom: 0;">
10   - <h3 class="uk-panel-title" id="childTaskTitle">
11   - 子任务列表
12   - <a id="addChildTaskBtn" data-uk-tooltip title="添加子任务"><i
13   - class="uk-icon-plus"></i> </a>
14   - </h3>
15   - <div class="ct_table_wrap ct_table_no_border sub_task_table_wrap" style="height: 142px;">
16   - <div class="ct_table sub-task-table">
17   - <div class="ct_table_head">
18   - <dl>
19   - <dt>序号</dt>
20   - <dt>类型</dt>
21   - <dt>起点</dt>
22   - <dt>终点</dt>
23   - <dt>开始时间</dt>
24   - <dt>结束时间</dt>
25   - <dt>里程</dt>
26   - <dt>备注</dt>
27   - </dl>
28   - </div>
29   - <div class="ct_table_body">
30   - </div>
31   - </div>
32   - </div>
33   - </div>
34   - </div>
35   -
36   - <script id="history-sch-edit-form-temp" type="text/html">
37   - <input type="hidden" name="id" value="{{sch.id}}"/>
38   -
39   - <div class="uk-grid">
40   - <div class="uk-width-1-3">
41   - <div class="uk-form-row">
42   - <label class="uk-form-label" >班次类型</label>
43   - <div class="uk-form-controls">
44   - <select class="form-control nt-dictionary" data-code="{{sch.bcType}}" name="bcType" data-group=ScheduleType></select>
45   - </div>
46   - </div>
47   - </div>
48   - <div class="uk-width-1-3">
49   - <div class="uk-form-row">
50   - <label class="uk-form-label" >起点</label>
51   - <div class="uk-form-controls">
52   - <select type="text" name="qdzCode" ></select>
53   - </div>
54   - </div>
55   - </div>
56   - <div class="uk-width-1-3">
57   - <div class="uk-form-row">
58   - <label class="uk-form-label" >终点</label>
59   - <div class="uk-form-controls">
60   - <select type="text" name="zdzCode" ></select>
61   - </div>
62   - </div>
63   - </div>
64   - </div>
65   -
66   - <div class="uk-grid">
67   - <div class="uk-width-1-3">
68   - <div class="uk-form-row">
69   - <label class="uk-form-label" >车辆</label>
70   - <div class="uk-form-controls">
71   - <div class="uk-autocomplete uk-form car-autocom">
72   - <input type="text" value="{{sch.clZbh}}" name="clZbh" required>
73   - </div>
74   - </div>
75   - </div>
76   - </div>
77   - <div class="uk-width-1-3">
78   - <div class="uk-form-row">
79   - <label class="uk-form-label" >驾驶员</label>
80   - <div class="uk-form-controls">
81   - <div class="uk-autocomplete uk-form jsy-autocom">
82   - <input type="text" value="{{sch.jGh}}/{{sch.jName}}" name="jsy" required>
83   - </div>
84   - </div>
85   - </div>
86   - </div>
87   - <div class="uk-width-1-3">
88   - <div class="uk-form-row">
89   - <label class="uk-form-label" >售票员</label>
90   - <div class="uk-form-controls">
91   - <div class="uk-autocomplete uk-form spy-autocom">
92   - <input type="text" name="spy" value="{{sch.sGh}}/{{sch.sName}}" name="spy">
93   - </div>
94   - </div>
95   - </div>
96   - </div>
97   - </div>
98   -
99   - <div class="uk-grid">
100   - <div class="uk-width-1-3">
101   - <div class="uk-form-row">
102   - <label class="uk-form-label" >计发</label>
103   - <div class="uk-form-controls">
104   - <input type="time" value="{{sch.fcsj}}" disabled>
105   - </div>
106   - </div>
107   - </div>
108   - <div class="uk-width-1-3">
109   - <div class="uk-form-row">
110   - <label class="uk-form-label" >待发</label>
111   - <div class="uk-form-controls">
112   - <input type="time" name="dfsj" value="{{sch.dfsj}}" required>
113   - </div>
114   - </div>
115   - </div>
116   - <div class="uk-width-1-3">
117   - <div class="uk-form-row">
118   - <label class="uk-form-label" >实发</label>
119   - <div class="uk-form-controls">
120   - <input type="time" name="fcsjActual" value="{{sch.fcsjActual}}" >
121   - </div>
122   - </div>
123   - </div>
124   - </div>
125   -
126   - <div class="uk-grid">
127   - <div class="uk-width-1-3">
128   - <div class="uk-form-row">
129   - <label class="uk-form-label" >里程</label>
130   - <div class="uk-form-controls">
131   - <input type="text" name="jhlc" value="{{sch.jhlc}}" max=222 data-fv-lessthan-inclusive="false"
132   - required>
133   - </div>
134   - </div>
135   - </div>
136   - <div class="uk-width-1-3">
137   - <div class="uk-form-row">
138   - <label class="uk-form-label" >计达</label>
139   - <div class="uk-form-controls">
140   - <input type="time" value="{{sch.zdsj}}" disabled>
141   - </div>
142   - </div>
143   - </div>
144   - <div class="uk-width-1-3">
145   - <div class="uk-form-row">
146   - <label class="uk-form-label" >实达</label>
147   - <div class="uk-form-controls">
148   - <input type="time" name="zdsjActual" value="{{sch.zdsjActual}}" >
149   - </div>
150   - </div>
151   - </div>
152   - </div>
153   - <div class="uk-grid">
154   - <div class="uk-width-1-3">
155   - <div class="uk-form-row">
156   - <label class="uk-form-label" ></label>
157   - <label>
158   - &nbsp;<input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if sch.status==-1}}checked{{/if}}>
159   - 是否烂班
160   - </label>
161   - </div>
162   -
163   - <div class="uk-form-row adjust_exps_select_wrap {{if sch.status!=-1}}display_hide{{/if}}" >
164   - <label class="uk-form-label" >烂班原因</label>
165   - <div class="uk-form-controls">
166   - <select name="adjustExps">
167   - {{each adjustExps as exp i}}
168   - <option value="{{exp}}" {{if sch.adjustExps==exp}}selected{{/if}}>{{exp}}</option>
169   - {{/each}}
170   - </select>
171   - </div>
172   - </div>
173   - </div>
174   -
175   - <div class="uk-width-2-3">
176   - <div class="uk-form-row ct-stacked">
177   - <label class="uk-form-label" >备注</label>
178   - <div class="uk-form-controls" style="margin-top: 5px;">
179   - <textarea id="form-s-t" cols="20" rows="3" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="100" placeholder="备注">{{sch.remarks}}</textarea>
180   - </div>
181   - </div>
182   - </div>
183   - </div>
184   - <div class="uk-modal-footer uk-text-right" style="margin-bottom: 20px;">
185   - <div class="uk-button-dropdown" data-uk-dropdown>
186   - <a class="uk-button uk-button-success"><i class="uk-icon-pencil-square-o"></i> 添加子任务 <i class="uk-icon-caret-down"></i></a>
187   - <div class="uk-dropdown" style="text-align: left;">
188   - <ul class="uk-nav uk-nav-dropdown child_task_list">
189   - <!--<li data-method="add_oil"><a>空驶进出场</a></li>
190   - <li data-method="in_park"><a>进场</a></li>
191   - <li data-method="out_park"><a>出场</a></li>-->
192   - <li data-method="other"><a>自定义</a></li>
193   - </ul>
194   - </div>
195   - </div>
196   -
197   - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存主任务信息</button>
198   - </div>
199   - </script>
200   -
201   - <script id="h-sub_task-table-temp" type="text/html">
202   - {{each list as task i}}
203   - <dl data-id="{{task.id}}">
204   - <dd>{{i+1}}</dd>
205   - <dd><span class="nt-dictionary" data-group="ChildTaskType">{{task.type2}}</span></dd>
206   - <dd>{{task.startStationName}}</dd>
207   - <dd>{{task.endStationName}}</dd>
208   - <dd>{{task.startDate}}</dd>
209   - <dd>{{task.endDate}}</dd>
210   - <dd>
211   - {{task.mileage}}
212   - (<span class="nt-dictionary" data-group="MileageType">{{task.mileageType}}</span>
213   - {{if task.destroy}}
214   - <small style="color:red;">烂班</small>
215   - {{/if}}
216   - )
217   - </dd>
218   - <dd title="{{task.remarks}}">{{task.remarks}}</dd>
219   - </dl>
220   - {{/each}}
221   - </script>
222   -
223   - <script>
224   - (function() {
225   - var modal = '#history-sch-edit-modal'
226   - ,gb_sch,parentModal;
227   - var stationRoutes, parks, information;
228   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
229   - $(modal).on('init', function(e, data) {
230   - e.stopPropagation();
231   - var id = data.id;
232   - parentModal=data.parentModal;
233   -
234   - $.get('/realSchedule/'+id, function (sch) {
235   - gb_sch = sch;
236   -
237   - var htmlStr = template('history-sch-edit-form-temp', {sch: sch, adjustExps: adjustExps});
238   - $('form.sch_form', modal).html(htmlStr);
239   - //子任务列表
240   - sch.cTasks.sort(sub_task_sort);
241   - htmlStr = template('h-sub_task-table-temp', {list: sch.cTasks});
242   - $('.sub-task-table .ct_table_body', modal).html(htmlStr);
243   -
244   - //字典转换
245   - dictionaryUtils.transformDom($('.nt-dictionary', modal));
246   - //渲染表格,自动补全和下拉框等
247   - renderForm();
248   -
249   - //submit
250   - var f = $('form.sch_form', modal).formValidation(gb_form_validation_opts);
251   - //是否烂班
252   - $('[name=status]', f).on('click', function () {
253   - if(this.checked){
254   - $('[name=jhlc]', f).val(0);
255   - $('.adjust_exps_select_wrap', f).show();
256   - }
257   - else{
258   - $('[name=jhlc]', f).val(gb_sch.jhlcOrig);
259   - $('.adjust_exps_select_wrap', f).hide();
260   - }
261   - });
262   - f.on('success.form.fv', function(e) {
263   - e.preventDefault();
264   - var data = $(this).serializeJSON();
265   -
266   - //拆分驾驶员工号和姓名
267   - data.jGh = data.jsy.split('/')[0];
268   - data.jName = data.jsy.split('/')[1];
269   - delete data.jsy;
270   - //拆分售票员工号和姓名
271   - if(data.spy != null){
272   - data.sGh = data.spy.split('/')[0];
273   - data.sName = data.spy.split('/')[1];
274   - delete data.spy;
275   - }
276   -
277   - gb_common.$post('/realSchedule/history', data, function (rs) {
278   - //console.log(rs);
279   - UIkit.modal(modal).hide();
280   - $(parentModal).trigger('refresh');
281   - });
282   - });
283   - });
284   - });
285   -
286   - /**
287   - * 添加子任务
288   - */
289   - $(modal).on('click','.child_task_list>li', function () {
290   - var method = $(this).data('method');
291   - addChildTaskObj[method]();
292   - });
293   - var modal_opts = {center: false, bgclose: false, modal: false}
294   - ,folder = '/real_control_v2/fragments/north/nav/history_sch';
295   - var addChildTaskObj = {
296   - add_oil: function () {
297   - open_modal(folder + '/h_add_sub_task_oil.html', {
298   - sch: gb_sch
299   - }, modal_opts);
300   - },
301   - in_park: function () {
302   - open_modal(folder + '/h_add_sub_task_inpark.html', {
303   - sch: gb_sch
304   - }, modal_opts);
305   - },
306   - out_park: function () {
307   - open_modal(folder + '/h_add_sub_task_outpark.html', {
308   - sch: gb_sch
309   - }, modal_opts);
310   - },
311   - other: function () {
312   - open_modal(folder + '/h_add_sub_task_other.html', {
313   - sch: gb_sch
314   - }, modal_opts);
315   - }
316   - };
317   -
318   - $('#addChildTaskBtn', modal).on('click', addChildTaskObj.other);
319   -
320   -
321   - var callbackHandler = {
322   - remove_sub_task: function () {
323   - var activeDl = $('.sub-task-table .ct_table_body', modal).find('dl.context-menu-active');
324   - if (activeDl.length == 0)
325   - return;
326   - var dds = activeDl.find('dd');
327   - var id = activeDl.data('id')
328   - , str = '<h3>确定要删除子任务<span style="color:red;margin: 0 5px;">' + $(dds[4]).text() + ',' + $(dds[6]).text() + ' </span>?</h3>';
329   - alt_confirm(str, function () {
330   - gb_common.$del('/childTask/history/' + id, function (rs) {
331   - notify_succ('删除子任务成功!');
332   - //刷新界面数据
333   - $(modal).trigger('init', {id: gb_sch.id});
334   - });
335   - }, '确定删除');
336   - }
337   - };
338   - //右键菜单
339   - $.contextMenu({
340   - selector: modal + ' .sub-task-table .ct_table_body dl',
341   - className: 'schedule-ct-menu',
342   - callback: function (key, options) {
343   - callbackHandler[key] && callbackHandler[key]();
344   - },
345   - items: {
346   - "remove_sub_task": {
347   - name: "删除子任务"
348   - , icon: "delete"
349   - }
350   - }
351   - });
352   -
353   - function renderForm() {
354   - //站点路由
355   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(gb_sch.xlBm).sort(function (a, b) {
356   - return a.stationRouteCode - b.stationRouteCode;
357   - }), 'directions');
358   - //停车场
359   - parks = gb_data_basic.simpleParksArray();
360   - //线路标准
361   - information = gb_data_basic.getLineInformation(gb_sch.xlBm);
362   -
363   - //----------- Autocomplete --------------
364   - //车辆
365   - gb_common.carAutocomplete($('.car-autocom', modal), gb_data_basic.carsArray());
366   - //驾驶员
367   - gb_common.personAutocomplete($('.jsy-autocom', modal));
368   - //售票员
369   - gb_common.personAutocomplete($('.spy-autocom', modal));
370   -
371   - //班次类型切换
372   - var f = $('form.sch_form', modal);
373   - initScheduleTypeChange(f);
374   - $('[name=bcType]', f).trigger('change');
375   - }
376   -
377   -
378   - function initScheduleTypeChange(f, cb) {
379   - (function (f, cb) {
380   - $('[name=bcType]', f).on('change', function () {
381   - var bcType_e = $('[name=bcType]', f)
382   - , updown = gb_sch.xlDir;
383   -
384   - var routes = stationRoutes[updown]
385   - , lastCode = routes[routes.length - 1].stationCode
386   - , opts = '', park_opts = '';
387   - //station options
388   - $.each(routes, function () {
389   - opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
390   - });
391   - //park options
392   - for (var code in parks)
393   - park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
394   -
395   - var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f);
396   - var time, mileage;
397   - switch (bcType_e.val()) {
398   - case 'out':
399   - qdz.html(park_opts).val(information.carPark);
400   - zdz.html(opts);
401   - //出场结束时间
402   - time = updown == 0 ? information.upOutTimer : information.downOutTimer;
403   - mileage = updown == 0 ? information.upOutMileage : information.downOutMileage;
404   - break;
405   - case 'in':
406   - qdz.html(opts);
407   - zdz.html(park_opts).val(information.carPark);
408   - //进场结束时间
409   - time = updown == 0 ? information.upInTimer : information.downInTimer;
410   - mileage = updown == 0 ? information.upInMileage : information.downInMileage;
411   - break;
412   - default:
413   - qdz.html(opts);
414   - zdz.html(opts).val(lastCode);
415   - time = updown == 0?information.upTravelTime:information.downTravelTime;
416   - mileage = updown == 0?information.upMileage:information.downMileage;
417   - }
418   -
419   - cb && cb();
420   - }).trigger('change');
421   - })(f, cb);
422   - }
423   -
424   - function sub_task_sort(a, b) {
425   - return a.id - b.id;
426   - }
427   - })();
428   - </script>
429   -</div>
  1 +<div class="uk-modal ct-form-modal ct_move_modal" id="history-sch-edit-modal">
  2 + <div class="uk-modal-dialog" style="width: 900px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>历史路单编辑</h2></div>
  6 + <form class="uk-form uk-form-horizontal sch_form">
  7 + </form>
  8 +
  9 + <div class="uk-panel uk-panel-box uk-panel-box-secondary" style="padding-bottom: 0;">
  10 + <h3 class="uk-panel-title" id="childTaskTitle">
  11 + 子任务列表
  12 + <a id="addChildTaskBtn" data-uk-tooltip title="添加子任务"><i
  13 + class="uk-icon-plus"></i> </a>
  14 + </h3>
  15 + <div class="ct_table_wrap ct_table_no_border sub_task_table_wrap" style="height: 142px;">
  16 + <div class="ct_table sub-task-table">
  17 + <div class="ct_table_head">
  18 + <dl>
  19 + <dt>序号</dt>
  20 + <dt>类型</dt>
  21 + <dt>起点</dt>
  22 + <dt>终点</dt>
  23 + <dt>开始时间</dt>
  24 + <dt>结束时间</dt>
  25 + <dt>里程</dt>
  26 + <dt>备注</dt>
  27 + </dl>
  28 + </div>
  29 + <div class="ct_table_body">
  30 + </div>
  31 + </div>
  32 + </div>
  33 + </div>
  34 + </div>
  35 +
  36 + <script id="history-sch-edit-form-temp" type="text/html">
  37 + <input type="hidden" name="id" value="{{sch.id}}"/>
  38 +
  39 + <div class="uk-grid">
  40 + <div class="uk-width-1-3">
  41 + <div class="uk-form-row">
  42 + <label class="uk-form-label" >班次类型</label>
  43 + <div class="uk-form-controls">
  44 + <select class="form-control nt-dictionary" data-code="{{sch.bcType}}" name="bcType" data-group=ScheduleType></select>
  45 + </div>
  46 + </div>
  47 + </div>
  48 + <div class="uk-width-1-3">
  49 + <div class="uk-form-row">
  50 + <label class="uk-form-label" >起点</label>
  51 + <div class="uk-form-controls">
  52 + <select type="text" name="qdzCode" ></select>
  53 + </div>
  54 + </div>
  55 + </div>
  56 + <div class="uk-width-1-3">
  57 + <div class="uk-form-row">
  58 + <label class="uk-form-label" >终点</label>
  59 + <div class="uk-form-controls">
  60 + <select type="text" name="zdzCode" ></select>
  61 + </div>
  62 + </div>
  63 + </div>
  64 + </div>
  65 +
  66 + <div class="uk-grid">
  67 + <div class="uk-width-1-3">
  68 + <div class="uk-form-row">
  69 + <label class="uk-form-label" >车辆</label>
  70 + <div class="uk-form-controls">
  71 + <div class="uk-autocomplete uk-form car-autocom">
  72 + <input type="text" value="{{sch.clZbh}}" name="clZbh" required>
  73 + </div>
  74 + </div>
  75 + </div>
  76 + </div>
  77 + <div class="uk-width-1-3">
  78 + <div class="uk-form-row">
  79 + <label class="uk-form-label" >驾驶员</label>
  80 + <div class="uk-form-controls">
  81 + <div class="uk-autocomplete uk-form jsy-autocom">
  82 + <input type="text" value="{{sch.jGh}}/{{sch.jName}}" name="jsy" required>
  83 + </div>
  84 + </div>
  85 + </div>
  86 + </div>
  87 + <div class="uk-width-1-3">
  88 + <div class="uk-form-row">
  89 + <label class="uk-form-label" >售票员</label>
  90 + <div class="uk-form-controls">
  91 + <div class="uk-autocomplete uk-form spy-autocom">
  92 + <input type="text" name="spy" value="{{sch.sGh}}/{{sch.sName}}" name="spy">
  93 + </div>
  94 + </div>
  95 + </div>
  96 + </div>
  97 + </div>
  98 +
  99 + <div class="uk-grid">
  100 + <div class="uk-width-1-3">
  101 + <div class="uk-form-row">
  102 + <label class="uk-form-label" >计发</label>
  103 + <div class="uk-form-controls">
  104 + <input type="time" value="{{sch.fcsj}}" disabled>
  105 + </div>
  106 + </div>
  107 + </div>
  108 + <div class="uk-width-1-3">
  109 + <div class="uk-form-row">
  110 + <label class="uk-form-label" >待发</label>
  111 + <div class="uk-form-controls">
  112 + <input type="time" name="dfsj" value="{{sch.dfsj}}" required>
  113 + </div>
  114 + </div>
  115 + </div>
  116 + <div class="uk-width-1-3">
  117 + <div class="uk-form-row">
  118 + <label class="uk-form-label" >实发</label>
  119 + <div class="uk-form-controls">
  120 + <input type="time" name="fcsjActual" value="{{sch.fcsjActual}}" >
  121 + </div>
  122 + </div>
  123 + </div>
  124 + </div>
  125 +
  126 + <div class="uk-grid">
  127 + <div class="uk-width-1-3">
  128 + <div class="uk-form-row">
  129 + <label class="uk-form-label" >里程</label>
  130 + <div class="uk-form-controls">
  131 + <input type="text" name="jhlc" value="{{sch.jhlc}}" max=222 data-fv-lessthan-inclusive="false"
  132 + required>
  133 + </div>
  134 + </div>
  135 + </div>
  136 + <div class="uk-width-1-3">
  137 + <div class="uk-form-row">
  138 + <label class="uk-form-label" >计达</label>
  139 + <div class="uk-form-controls">
  140 + <input type="time" value="{{sch.zdsj}}" disabled>
  141 + </div>
  142 + </div>
  143 + </div>
  144 + <div class="uk-width-1-3">
  145 + <div class="uk-form-row">
  146 + <label class="uk-form-label" >实达</label>
  147 + <div class="uk-form-controls">
  148 + <input type="time" name="zdsjActual" value="{{sch.zdsjActual}}" >
  149 + </div>
  150 + </div>
  151 + </div>
  152 + </div>
  153 + <div class="uk-grid">
  154 + <div class="uk-width-1-3">
  155 + <div class="uk-form-row">
  156 + <label class="uk-form-label" ></label>
  157 + <label>
  158 + &nbsp;<input class="i-cbox destroy-box" type="checkbox" name="status" value="-1" {{if sch.status==-1}}checked{{/if}}>
  159 + 是否烂班
  160 + </label>
  161 + </div>
  162 +
  163 + <div class="uk-form-row adjust_exps_select_wrap {{if sch.status!=-1}}display_hide{{/if}}" >
  164 + <label class="uk-form-label" >烂班原因</label>
  165 + <div class="uk-form-controls">
  166 + <select name="adjustExps">
  167 + {{each adjustExps as exp i}}
  168 + <option value="{{exp}}" {{if sch.adjustExps==exp}}selected{{/if}}>{{exp}}</option>
  169 + {{/each}}
  170 + </select>
  171 + </div>
  172 + </div>
  173 + </div>
  174 +
  175 + <div class="uk-width-2-3">
  176 + <div class="uk-form-row ct-stacked">
  177 + <label class="uk-form-label" >备注</label>
  178 + <div class="uk-form-controls" style="margin-top: 5px;">
  179 + <textarea id="form-s-t" cols="20" rows="3" name="remarks" data-fv-stringlength="true" data-fv-stringlength-max="100" placeholder="备注">{{sch.remarks}}</textarea>
  180 + </div>
  181 + </div>
  182 + </div>
  183 + </div>
  184 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: 20px;">
  185 + <div class="uk-button-dropdown" data-uk-dropdown>
  186 + <a class="uk-button uk-button-success"><i class="uk-icon-pencil-square-o"></i> 添加子任务 <i class="uk-icon-caret-down"></i></a>
  187 + <div class="uk-dropdown" style="text-align: left;">
  188 + <ul class="uk-nav uk-nav-dropdown child_task_list">
  189 + <!--<li data-method="add_oil"><a>空驶进出场</a></li>
  190 + <li data-method="in_park"><a>进场</a></li>
  191 + <li data-method="out_park"><a>出场</a></li>-->
  192 + <li data-method="other"><a>自定义</a></li>
  193 + </ul>
  194 + </div>
  195 + </div>
  196 +
  197 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存主任务信息</button>
  198 + </div>
  199 + </script>
  200 +
  201 + <script id="h-sub_task-table-temp" type="text/html">
  202 + {{each list as task i}}
  203 + <dl data-id="{{task.id}}">
  204 + <dd>{{i+1}}</dd>
  205 + <dd><span class="nt-dictionary" data-group="ChildTaskType">{{task.type2}}</span></dd>
  206 + <dd>{{task.startStationName}}</dd>
  207 + <dd>{{task.endStationName}}</dd>
  208 + <dd>{{task.startDate}}</dd>
  209 + <dd>{{task.endDate}}</dd>
  210 + <dd>
  211 + {{task.mileage}}
  212 + (<span class="nt-dictionary" data-group="MileageType">{{task.mileageType}}</span>
  213 + {{if task.destroy}}
  214 + <small style="color:red;">烂班</small>
  215 + {{/if}}
  216 + )
  217 + </dd>
  218 + <dd title="{{task.remarks}}">{{task.remarks}}</dd>
  219 + </dl>
  220 + {{/each}}
  221 + </script>
  222 +
  223 + <script>
  224 + (function() {
  225 + var modal = '#history-sch-edit-modal'
  226 + ,gb_sch,parentModal;
  227 + var stationRoutes, parks, information;
  228 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  229 + $(modal).on('init', function(e, data) {
  230 + e.stopPropagation();
  231 + var id = data.id;
  232 + parentModal=data.parentModal;
  233 +
  234 + $.get('/realSchedule/'+id, function (sch) {
  235 + gb_sch = sch;
  236 +
  237 + var htmlStr = template('history-sch-edit-form-temp', {sch: sch, adjustExps: adjustExps});
  238 + $('form.sch_form', modal).html(htmlStr);
  239 + //子任务列表
  240 + sch.cTasks.sort(sub_task_sort);
  241 + htmlStr = template('h-sub_task-table-temp', {list: sch.cTasks});
  242 + $('.sub-task-table .ct_table_body', modal).html(htmlStr);
  243 +
  244 + //字典转换
  245 + dictionaryUtils.transformDom($('.nt-dictionary', modal));
  246 + //渲染表格,自动补全和下拉框等
  247 + renderForm();
  248 +
  249 + //submit
  250 + var f = $('form.sch_form', modal).formValidation(gb_form_validation_opts);
  251 + //是否烂班
  252 + $('[name=status]', f).on('click', function () {
  253 + if(this.checked){
  254 + $('[name=jhlc]', f).val(0);
  255 + $('.adjust_exps_select_wrap', f).show();
  256 + }
  257 + else{
  258 + $('[name=jhlc]', f).val(gb_sch.jhlcOrig);
  259 + $('.adjust_exps_select_wrap', f).hide();
  260 + }
  261 + });
  262 + f.on('success.form.fv', function(e) {
  263 + e.preventDefault();
  264 + var data = $(this).serializeJSON();
  265 +
  266 + //拆分驾驶员工号和姓名
  267 + data.jGh = data.jsy.split('/')[0];
  268 + data.jName = data.jsy.split('/')[1];
  269 + delete data.jsy;
  270 + //拆分售票员工号和姓名
  271 + if(data.spy != null){
  272 + data.sGh = data.spy.split('/')[0];
  273 + data.sName = data.spy.split('/')[1];
  274 + delete data.spy;
  275 + }
  276 +
  277 + gb_common.$post('/realSchedule/history', data, function (rs) {
  278 + //console.log(rs);
  279 + UIkit.modal(modal).hide();
  280 + $(parentModal).trigger('refresh');
  281 + });
  282 + });
  283 + });
  284 + });
  285 +
  286 + /**
  287 + * 添加子任务
  288 + */
  289 + $(modal).on('click','.child_task_list>li', function () {
  290 + var method = $(this).data('method');
  291 + addChildTaskObj[method]();
  292 + });
  293 + var modal_opts = {center: false, bgclose: false, modal: false}
  294 + ,folder = '/real_control_v2/fragments/north/nav/history_sch';
  295 + var addChildTaskObj = {
  296 + add_oil: function () {
  297 + open_modal(folder + '/h_add_sub_task_oil.html', {
  298 + sch: gb_sch
  299 + }, modal_opts);
  300 + },
  301 + in_park: function () {
  302 + open_modal(folder + '/h_add_sub_task_inpark.html', {
  303 + sch: gb_sch
  304 + }, modal_opts);
  305 + },
  306 + out_park: function () {
  307 + open_modal(folder + '/h_add_sub_task_outpark.html', {
  308 + sch: gb_sch
  309 + }, modal_opts);
  310 + },
  311 + other: function () {
  312 + open_modal(folder + '/h_add_sub_task_other.html', {
  313 + sch: gb_sch
  314 + }, modal_opts);
  315 + }
  316 + };
  317 +
  318 + $('#addChildTaskBtn', modal).on('click', addChildTaskObj.other);
  319 +
  320 +
  321 + var callbackHandler = {
  322 + remove_sub_task: function () {
  323 + var activeDl = $('.sub-task-table .ct_table_body', modal).find('dl.context-menu-active');
  324 + if (activeDl.length == 0)
  325 + return;
  326 + var dds = activeDl.find('dd');
  327 + var id = activeDl.data('id')
  328 + , str = '<h3>确定要删除子任务<span style="color:red;margin: 0 5px;">' + $(dds[4]).text() + ',' + $(dds[6]).text() + ' </span>?</h3>';
  329 + alt_confirm(str, function () {
  330 + gb_common.$del('/childTask/history/' + id, function (rs) {
  331 + notify_succ('删除子任务成功!');
  332 + //刷新界面数据
  333 + $(modal).trigger('init', {id: gb_sch.id});
  334 + });
  335 + }, '确定删除');
  336 + }
  337 + };
  338 + //右键菜单
  339 + $.contextMenu({
  340 + selector: modal + ' .sub-task-table .ct_table_body dl',
  341 + className: 'schedule-ct-menu',
  342 + callback: function (key, options) {
  343 + callbackHandler[key] && callbackHandler[key]();
  344 + },
  345 + items: {
  346 + "remove_sub_task": {
  347 + name: "删除子任务"
  348 + , icon: "delete"
  349 + }
  350 + }
  351 + });
  352 +
  353 + function renderForm() {
  354 + //站点路由
  355 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(gb_sch.xlBm).sort(function (a, b) {
  356 + return a.stationRouteCode - b.stationRouteCode;
  357 + }), 'directions');
  358 + //停车场
  359 + parks = gb_data_basic.simpleParksArray();
  360 + //线路标准
  361 + information = gb_data_basic.getLineInformation(gb_sch.xlBm);
  362 +
  363 + //----------- Autocomplete --------------
  364 + //车辆
  365 + gb_common.carAutocomplete($('.car-autocom', modal), gb_data_basic.carsArray());
  366 + //驾驶员
  367 + gb_common.personAutocomplete($('.jsy-autocom', modal));
  368 + //售票员
  369 + gb_common.personAutocomplete($('.spy-autocom', modal));
  370 +
  371 + //班次类型切换
  372 + var f = $('form.sch_form', modal);
  373 + initScheduleTypeChange(f);
  374 + $('[name=bcType]', f).trigger('change');
  375 + }
  376 +
  377 +
  378 + function initScheduleTypeChange(f, cb) {
  379 + (function (f, cb) {
  380 + $('[name=bcType]', f).on('change', function () {
  381 + var bcType_e = $('[name=bcType]', f)
  382 + , updown = gb_sch.xlDir;
  383 +
  384 + var routes = stationRoutes[updown]
  385 + , lastCode = routes[routes.length - 1].stationCode
  386 + , opts = '', park_opts = '';
  387 + //station options
  388 + $.each(routes, function () {
  389 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  390 + });
  391 + //park options
  392 + for (var code in parks)
  393 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
  394 +
  395 + var qdz = $('[name=qdzCode]', f), zdz = $('[name=zdzCode]', f);
  396 + var time, mileage;
  397 + switch (bcType_e.val()) {
  398 + case 'out':
  399 + qdz.html(park_opts).val(information.carPark);
  400 + zdz.html(opts);
  401 + //出场结束时间
  402 + time = updown == 0 ? information.upOutTimer : information.downOutTimer;
  403 + mileage = updown == 0 ? information.upOutMileage : information.downOutMileage;
  404 + break;
  405 + case 'in':
  406 + qdz.html(opts);
  407 + zdz.html(park_opts).val(information.carPark);
  408 + //进场结束时间
  409 + time = updown == 0 ? information.upInTimer : information.downInTimer;
  410 + mileage = updown == 0 ? information.upInMileage : information.downInMileage;
  411 + break;
  412 + default:
  413 + qdz.html(opts);
  414 + zdz.html(opts).val(lastCode);
  415 + time = updown == 0?information.upTravelTime:information.downTravelTime;
  416 + mileage = updown == 0?information.upMileage:information.downMileage;
  417 + }
  418 +
  419 + cb && cb();
  420 + }).trigger('change');
  421 + })(f, cb);
  422 + }
  423 +
  424 + function sub_task_sort(a, b) {
  425 + return a.id - b.id;
  426 + }
  427 + })();
  428 + </script>
  429 +</div>
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch/h_add_sub_task_inpark.html
1   -<div class="uk-modal ct_move_modal" id="add-sub-task-inpark-modal">
2   - <div class="uk-modal-dialog">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>回场子任务</h2></div>
6   -
7   - <div style="width: 100%;padding-left: 1%;">
8   - <div class="sub-task-card">
9   - <div class="uk-panel uk-panel-box uk-panel-box-primary twins_task_panel">
10   - <div class="uk-panel-badge uk-badge">营运</div>
11   - <h3 class="uk-panel-title">线路上站点间</h3>
12   - <form class="uk-form uk-form-horizontal inpark_form" service_form>
13   - <input type="hidden" name="type2" value="1">
14   - <input type="hidden" name="mileageType" value="service">
15   - <div class="uk-grid">
16   - <div class="uk-width-3-10">
17   - <div class="uk-form-row">
18   - <label class="uk-form-label">班次类型 </label>
19   - </div>
20   - </div>
21   - <div class="uk-width-7-10 pl5">
22   - <select name="type1" class="ct_focus" disabled>
23   - <option value="正常">正常</option>
24   - <option value="临加">临加</option>
25   - </select>
26   - </div>
27   - </div>
28   - <div class="uk-grid">
29   - <div class="uk-width-3-10">
30   - <div class="uk-form-row">
31   - <label class="uk-form-label">起点 </label>
32   - </div>
33   - </div>
34   - <div class="uk-width-7-10 pl5">
35   - <select name="startStation" disabled></select>
36   - </div>
37   - </div>
38   - <div class="uk-grid">
39   - <div class="uk-width-3-10">
40   - <div class="uk-form-row">
41   - <label class="uk-form-label">终点 </label>
42   - </div>
43   - </div>
44   - <div class="uk-width-7-10 pl5">
45   - <select name="endStation" class="ct_focus"></select>
46   - </div>
47   - </div>
48   - <div class="uk-grid">
49   - <div class="uk-width-3-10">
50   - <div class="uk-form-row">
51   - <label class="uk-form-label">营运里程</label>
52   - </div>
53   - </div>
54   - <div class="uk-width-7-10 pl5">
55   - <input type="number" step="0.01" name="mileage" required>
56   - </div>
57   - </div>
58   - <div class="uk-grid">
59   - <div class="uk-width-3-10">
60   - <div class="uk-form-row">
61   - <label class="uk-form-label">开始时间</label>
62   - </div>
63   - </div>
64   - <div class="uk-width-7-10 pl5">
65   - <input type="time" name="startDate" required>
66   - </div>
67   - </div>
68   - <div class="uk-grid">
69   - <div class="uk-width-3-10">
70   - <div class="uk-form-row">
71   - <label class="uk-form-label">结束时间</label>
72   - </div>
73   - </div>
74   - <div class="uk-width-7-10 pl5">
75   - <input type="time" name="endDate" required>
76   - </div>
77   - </div>
78   - </form>
79   - </div>
80   - </div>
81   - <div class="sub-task-card">
82   - <div class="uk-panel uk-panel-box uk-panel-box-secondary">
83   - <div class="uk-panel-badge uk-badge uk-badge-default">空驶</div>
84   - <h3 class="uk-panel-title">进场</h3>
85   - <form class="uk-form uk-form-horizontal inpark_form" empty_form>
86   - <input type="hidden" name="type2" value="2">
87   - <input type="hidden" name="mileageType" value="empty">
88   - <div class="uk-grid">
89   - <div class="uk-width-3-10">
90   - <div class="uk-form-row">
91   - <label class="uk-form-label">班次类型 </label>
92   - </div>
93   - </div>
94   - <div class="uk-width-7-10 pl5">
95   - <select name="type1" class="ct_focus">
96   - <option value="正常">正常</option>
97   - <option value="临加">临加</option>
98   - </select>
99   - </div>
100   - </div>
101   - <div class="uk-grid">
102   - <div class="uk-width-3-10">
103   - <div class="uk-form-row">
104   - <label class="uk-form-label">起点 </label>
105   - </div>
106   - </div>
107   - <div class="uk-width-7-10 pl5">
108   - <select name="startStation" ></select>
109   - </div>
110   - </div>
111   - <div class="uk-grid">
112   - <div class="uk-width-3-10">
113   - <div class="uk-form-row">
114   - <label class="uk-form-label">终点 </label>
115   - </div>
116   - </div>
117   - <div class="uk-width-7-10 pl5">
118   - <select name="endStation" class="ct_focus"></select>
119   - </div>
120   - </div>
121   - <div class="uk-grid">
122   - <div class="uk-width-3-10">
123   - <div class="uk-form-row">
124   - <label class="uk-form-label">空驶里程</label>
125   - </div>
126   - </div>
127   - <div class="uk-width-7-10 pl5">
128   - <input type="number" step="0.01" name="mileage" required style="width: calc(100% - 62px);">
129   - <a style="font-size: 12px;color: grey;cursor: default;" data-uk-tooltip title="可选择回场路径,设置途径点位。暂不开放" id="inpark_paths_link">路径(<span>0</span>)</a>
130   - </div>
131   - </div>
132   - <div class="uk-grid">
133   - <div class="uk-width-3-10">
134   - <div class="uk-form-row">
135   - <label class="uk-form-label">开始时间</label>
136   - </div>
137   - </div>
138   - <div class="uk-width-7-10 pl5">
139   - <input type="time" name="startDate" required>
140   - </div>
141   - </div>
142   - <div class="uk-grid">
143   - <div class="uk-width-3-10">
144   - <div class="uk-form-row">
145   - <label class="uk-form-label">结束时间</label>
146   - </div>
147   - </div>
148   - <div class="uk-width-7-10 pl5">
149   - <input type="time" name="endDate" required>
150   - </div>
151   - </div>
152   - </form>
153   - </div>
154   - </div>
155   - <div class="sub-task-card destroy-card uk-animation-scale">
156   - <div class="uk-panel uk-panel-box uk-panel-box-danger">
157   - <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
158   - <h3 class="uk-panel-title">线路上站点间</h3>
159   - <form class="uk-form uk-form-horizontal inpark_form" destroy_form>
160   - <input type="hidden" value="正常" name="type1">
161   - <input type="hidden" value="1" name="type2">
162   - <input type="hidden" name="mileageType" value="service">
163   - <input type="hidden" name="destroy" value="true">
164   - <div class="uk-grid" style="height: 30px;">
165   - </div>
166   - <div class="uk-grid">
167   - <div class="uk-width-3-10">
168   - <div class="uk-form-row">
169   - <label class="uk-form-label">起点 </label>
170   - </div>
171   - </div>
172   - <div class="uk-width-7-10 pl5">
173   - <select name="startStation" disabled></select>
174   - </div>
175   - </div>
176   - <div class="uk-grid">
177   - <div class="uk-width-3-10">
178   - <div class="uk-form-row">
179   - <label class="uk-form-label">终点 </label>
180   - </div>
181   - </div>
182   - <div class="uk-width-7-10 pl5">
183   - <select name="endStation" class="ct_focus" disabled></select>
184   - </div>
185   - </div>
186   - <div class="uk-grid">
187   - <div class="uk-width-3-10">
188   - <div class="uk-form-row">
189   - <label class="uk-form-label">烂班里程</label>
190   - </div>
191   - </div>
192   - <div class="uk-width-7-10 pl5">
193   - <input type="number" step="0.01" name="mileage" required>
194   - </div>
195   - </div>
196   - <div class="uk-grid">
197   - <div class="uk-width-3-10">
198   - <div class="uk-form-row">
199   - <label class="uk-form-label">开始时间</label>
200   - </div>
201   - </div>
202   - <div class="uk-width-7-10 pl5">
203   - <input type="time" name="startDate" required>
204   - </div>
205   - </div>
206   - <div class="uk-grid">
207   - <div class="uk-width-3-10">
208   - <div class="uk-form-row">
209   - <label class="uk-form-label">烂班原因</label>
210   - </div>
211   - </div>
212   - <div class="uk-width-7-10 pl5">
213   - <select name="destroyReason" required></select>
214   - </div>
215   - </div>
216   - </form>
217   - </div>
218   - </div>
219   -
220   - <form class="uk-form" style="margin-top: 15px; padding: 0 10px 0 0;">
221   - <textarea placeholder="备注" style="width: 100%;height: 70px;" id="globalRemarks"></textarea>
222   - </form>
223   - </div>
224   -
225   - <div class="uk-modal-footer uk-text-right">
226   - <button type="button" class="uk-button uk-modal-close">取消</button>
227   - <button type="button" class="uk-button uk-button-primary" id="submitChildTaskBtn">提交子任务</button>
228   -
229   - <div class="ct-footer-left">
230   - <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
231   - </div>
232   - </div>
233   - </div>
234   -
235   - <div class="ct-bottom-drawer">
236   - <div class="ct-bottom-drawer-body"></div>
237   - </div>
238   -
239   - <script id="sub-task-inpark-form-temp" type="text/html">
240   - </script>
241   -
242   - <script>
243   - (function () {
244   - var modal = '#add-sub-task-inpark-modal',
245   - serviceForm = $('form[service_form]', modal),
246   - emptyForm = $('form[empty_form]', modal),
247   - destroyForm = $('form[destroy_form]', modal),
248   - sch, stationRoutes, parks, information, esCode, timeLocStations;
249   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
250   - $(modal).on('init', function (e, data) {
251   - e.stopPropagation();
252   - sch = data.sch;
253   -
254   - //站点路由
255   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
256   - return a.stationRouteCode - b.stationRouteCode;
257   - }), 'directions')[sch.xlDir];
258   - //空驶终点(停车场)
259   - //切换进场终点
260   - $('select[name=endStation]', emptyForm).on('change', inparkNavigation);
261   - $.get('/basic/parks', function (rs) {
262   - parks = rs;
263   - var opts = '';
264   - for (var code in parks) {
265   - opts += '<option value="' + code + '">' + parks[code] + '</option>';
266   - }
267   - $('select[name=endStation]', emptyForm).html(opts).val(information.carPark).trigger('change');
268   - });
269   - //线路标准
270   - information = gb_data_basic.getLineInformation(sch.xlBm);
271   - //本地存储的站点耗时
272   - getLocStationsSpace();
273   -
274   - //设置默认值
275   - setDefaultVal();
276   -
277   - //切换营运终点
278   - $('select[name=endStation]', serviceForm).val(esCode).on('change', function () {
279   - var val = $(this).val();
280   - if (val == esCode) {
281   - $('.uk-modal-dialog', modal).removeClass('three-children');
282   - $('.sub-task-card.destroy-card').css("display", "none");
283   - }
284   - else {
285   - $('.uk-modal-dialog', modal).addClass('three-children');
286   - $('.sub-task-card.destroy-card').css("display", "inline-block");
287   - }
288   -
289   - reClac();
290   - }).trigger('change');
291   -
292   -
293   - var dataArray = [];
294   - var fs = $('form.inpark_form', modal).formValidation({
295   - framework: 'uikit',
296   - locale: 'zh_CN'
297   - });
298   - fs.on('success.form.fv', function(e) {
299   - e.preventDefault();
300   - if($(this).is(':hidden'))
301   - return;
302   - dataArray.push($.extend($(this).serializeJSON(), getDisabledVal(this)
303   - , {remarks: $('#globalRemarks',modal).val(), 'schedule.id': sch.id}));
304   - $(this).data('valid', true);
305   -
306   - if(allValidSuccess()){
307   - var i = 0, rst;
308   - (function () {
309   - var f = arguments.callee;
310   - if(i >= dataArray.length){
311   - UIkit.modal(modal).hide();
312   - $('#history-sch-edit-modal').trigger('init', {id: sch.id});
313   - return;
314   - }
315   - var data = dataArray[i];
316   - //里程为0的不保存
317   - if(data.mileage==0){
318   - i++;
319   - f();
320   - }
321   - else{
322   - //营运子任务不写备注
323   - if(data.mileageType == 'service' && !data.destroy)
324   - data.remarks = '';
325   - //需要关联的部分主任务属性
326   - data['schedule.xlBm'] = sch.xlBm;
327   - data['schedule.xlDir'] = sch.xlDir;
328   - gb_common.$post('/childTask/history', data, function (rs) {
329   - notify_succ('子任务添加成功');
330   - rst = rs.t;
331   - i++;
332   - f();
333   - });
334   - }
335   - })();
336   - }
337   - });
338   -
339   - //校验不过
340   - fs.on('err.field.fv', function () {
341   - $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled');
342   - });
343   -
344   - //submit
345   - $('#submitChildTaskBtn', modal).on('click', function () {
346   - $(this).addClass('disabled').attr('disabled','disabled');
347   - dataArray = [];
348   - fs.data('valid', false);
349   - fs.formValidation('validate');
350   - //fs.submit();
351   - });
352   -
353   - //选择烂班原因
354   - $('select[name=destroyReason]', destroyForm).on('change', function () {
355   - var e =$('#globalRemarks', modal);
356   - e.val(e.val() + $(this).val() + ',');
357   - });
358   -
359   - //根据主任务状态,复子任务
360   - updateTwinsTaskBySch(sch);
361   - });
362   -
363   - function allValidSuccess() {
364   - var flag = true;
365   - $('form.inpark_form:visible', modal).each(function (i, f) {
366   - if(!$(f).data('valid')){
367   - flag = false;
368   - return false;
369   - }
370   - });
371   - return flag;
372   - }
373   -
374   - //获取表单disabled 项的值
375   - function getDisabledVal(f) {
376   - var rs = {};
377   - $('input,select', f).each(function () {
378   - if($(this).attr('disabled')){
379   - rs[$(this).attr('name')]=$(this).val();
380   - }
381   - });
382   - return rs;
383   - }
384   -
385   - function setDefaultVal() {
386   - var routeOpts = '';
387   - $.each(stationRoutes, function () {
388   - routeOpts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
389   - });
390   - esCode = stationRoutes[stationRoutes.length - 1].stationCode;
391   -
392   - //营运起终点
393   - $('select[name=startStation],select[name=endStation]', serviceForm).html(routeOpts);
394   - //空驶起点
395   - $('select[name=startStation]', emptyForm).html(routeOpts).val(esCode);
396   - //烂班起终点
397   - $('select[name=startStation],select[name=endStation]', destroyForm).html(routeOpts).val(esCode);
398   -
399   - //烂班原因
400   - var adjustExpsOpts = '<option value="">请选择...</option>';
401   - $.each(adjustExps, function (i, str) {
402   - adjustExpsOpts += '<option value="' + str + '">' + str + '</option>';
403   - });
404   - $('select[name=destroyReason]', destroyForm).html(adjustExpsOpts);
405   -
406   - //营运开始时间
407   - $('input[name=startDate]', serviceForm).val(sch.fcsjActual?sch.fcsjActual:sch.dfsj);
408   -
409   - //营运班次类型
410   - $('select[name=type1]', serviceForm).val(sch['sflj']?'临加':'正常');
411   - }
412   -
413   - //点击 路径
414   - $('#inpark_paths_link', modal).on('click', function () {
415   -
416   - });
417   -
418   - //进场导航
419   - var drivingRouteResult;
420   - function inparkNavigation() {
421   - var start = $('select[name=startStation]', emptyForm).val()
422   - ,end = $('select[name=endStation]', emptyForm).val();
423   -
424   - if(!end) return;
425   -
426   - var station = getStationByCode(start).station
427   - ,park = gb_data_basic.getCarparkByCode(end);
428   -
429   - if(!park){
430   - notify_err('无法找到停车场的坐标对照!!!');
431   - return;
432   - }
433   - var tArray = park['gCenterPoint'].split(' ');
434   - var sCoord = TransGPS.wgsToBD(station['gLaty'], station['gLonx'])
435   - ,eCoord = TransGPS.wgsToBD(parseFloat(tArray[1]), parseFloat(tArray[0]));
436   -
437   - var sp = new BMap.Point(sCoord.lng,sCoord.lat);
438   - var ep = new BMap.Point(eCoord.lng,eCoord.lat);
439   -
440   - var driving = new BMap.DrivingRoute('上海', {
441   - onSearchComplete: function (rs) {
442   - drivingRouteResult = rs;
443   - calcInparkMileage(0);
444   - }
445   - });
446   - driving.search(sp,ep);
447   - }
448   -
449   - function calcInparkMileage(index) {
450   - var count = drivingRouteResult.getNumPlans();
451   -
452   - //选择方案
453   - var routePlan = drivingRouteResult.getPlan(index);
454   - //里程
455   - var mileage = routePlan.getDistance(false);
456   - $('input[name=mileage]', emptyForm).val(mileage / 1000);
457   - //结束时间
458   - var duratio = routePlan.getDuration(false);
459   - var st = $('input[name=startDate]', emptyForm).val();
460   - var ets = moment(st, 'HH:mm').add(duratio, 'seconds').format('HH:mm');
461   - $('input[name=endDate]', emptyForm).val(ets);
462   -
463   -
464   - $('#inpark_paths_link span', modal).text(count);
465   - }
466   -
467   - function getStationByCode(code) {
468   - for(var i = 0; i < stationRoutes.length; i++){
469   - if(stationRoutes[i]['stationCode']==code)
470   - return stationRoutes[i];
471   - }
472   - return null;
473   - }
474   -
475   - function reClac() {
476   - var serviceEnd = $('select[name=endStation]', serviceForm).val();
477   - //空驶起点 == 营运终点
478   - $('select[name=startStation]', emptyForm).val(serviceEnd);
479   -
480   - //计算营运里程
481   - var s = $('select[name=startStation]', serviceForm).val(),
482   - e = $('select[name=endStation]', serviceForm).val();
483   - var sMileage = calcMileage(s, e);
484   - if(sMileage >= 0)
485   - $('input[name=mileage]', serviceForm).val(sMileage);
486   -
487   - //营运结束时间
488   - var et = sch.dfsjT + (parseInt(sMileage / sch.jhlcOrig * sch.bcsj) * 60 * 1000)
489   - ,ets = et > sch.zdsjT?sch.zdsj:moment(et).format('HH:mm');
490   - $('input[name=endDate]', serviceForm).val(ets);
491   -
492   - //有烂班
493   - if (serviceEnd != esCode) {
494   - //烂班起点 == 营运终点
495   - $('select[name=startStation]', destroyForm).val(serviceEnd);
496   - //计算烂班公里
497   - s = $('select[name=startStation]', destroyForm).val();
498   - e = $('select[name=endStation]', destroyForm).val();
499   - var dMileage = calcMileage(s, e);
500   - $('input[name=mileage]', destroyForm).val(dMileage);
501   - //烂班开始时间
502   - $('input[name=startDate]', destroyForm).val(ets);
503   - }
504   -
505   - //进场开始时间
506   - $('input[name=startDate]', emptyForm).val(ets);
507   -
508   - //重新导航
509   - inparkNavigation();
510   - }
511   -
512   - function calcMileage(s, e) {
513   - var mileage = 0, flag, code;
514   - if (timeLocStations) {
515   - //空间坐标计算的站距
516   - $.each(timeLocStations, function () {
517   - code = this.station['STATION_CODE'];
518   - if (flag)
519   - mileage = gb_common.accAdd(mileage, this.toDistanceGl);
520   - if (code == s)
521   - flag = true;
522   - if (code == e)
523   - return false;
524   - });
525   - }
526   - else{
527   - //从原始站点路由字段里取值
528   - $.each(stationRoutes, function () {
529   - code = this['stationCode'];
530   - if (flag)
531   - mileage = gb_common.accAdd(mileage, this.distances);
532   - if (code == s)
533   - flag = true;
534   - if (code == e)
535   - return false;
536   - });
537   - }
538   - return mileage;
539   - }
540   -
541   - //从本地localStorage获取站间距数据
542   - function getLocStationsSpace() {
543   - try {
544   - timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
545   - if (timeLocStations)
546   - timeLocStations = JSON.parse(timeLocStations).stations[sch.xlDir == 0 ? 'up' : 'down'];
547   - } catch (e) {
548   - console.log(e);
549   - }
550   - }
551   -
552   - //站间距计算后刷新
553   - $(modal).on('refresh_station_space', function () {
554   - getLocStationsSpace();
555   - reClac();
556   - });
557   -
558   - //------ 下抽屉 ------
559   - $('#betweenStationRangeCalc', modal).on('click', function () {
560   - var id = $(this).data('drawer-id');
561   - switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
562   - });
563   -
564   - var btmDrawer = $('.ct-bottom-drawer', modal);
565   - //打开事件
566   - btmDrawer.on('drawer_show', function () {
567   - var url = $(this).data('url');
568   - if (!url) {
569   - alert('无效的地址');
570   - }
571   -
572   - var drawerPanel = $(this).data('name');
573   - $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
574   - $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
575   - });
576   - });
577   -
578   - function switchBtmDrawer(id, url) {
579   - if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
580   - btmDrawer.removeClass('open');
581   - btmDrawer.removeData('name').removeData('url');
582   - }
583   - else {
584   - btmDrawer.addClass('open');
585   - btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
586   - }
587   - }
588   -
589   -
590   - function updateTwinsTaskBySch(sch) {
591   - //主任务是烂班
592   - if(sch.destroy){
593   - serviceForm.prepend('<input type="hidden" name="destroy" value="true">');
594   - $('[name=mileage]', serviceForm).val(sch.jhlcOrig).attr('disabled', 'disabled');
595   - $('.twins_task_panel .uk-badge', modal).addClass('uk-badge-danger').text('烂班');
596   - //终点禁选
597   - $('select[name=endStation]', serviceForm).attr('disabled', 'disabled');
598   - //开始结束时间禁选
599   -
600   - //空驶起点
601   - $('select[name=startStation]', emptyForm).val(sch.qdzCode);
602   - }
603   - }
604   - })();
605   - </script>
  1 +<div class="uk-modal ct_move_modal" id="add-sub-task-inpark-modal">
  2 + <div class="uk-modal-dialog">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>回场子任务</h2></div>
  6 +
  7 + <div style="width: 100%;padding-left: 1%;">
  8 + <div class="sub-task-card">
  9 + <div class="uk-panel uk-panel-box uk-panel-box-primary twins_task_panel">
  10 + <div class="uk-panel-badge uk-badge">营运</div>
  11 + <h3 class="uk-panel-title">线路上站点间</h3>
  12 + <form class="uk-form uk-form-horizontal inpark_form" service_form>
  13 + <input type="hidden" name="type2" value="1">
  14 + <input type="hidden" name="mileageType" value="service">
  15 + <div class="uk-grid">
  16 + <div class="uk-width-3-10">
  17 + <div class="uk-form-row">
  18 + <label class="uk-form-label">班次类型 </label>
  19 + </div>
  20 + </div>
  21 + <div class="uk-width-7-10 pl5">
  22 + <select name="type1" class="ct_focus" disabled>
  23 + <option value="正常">正常</option>
  24 + <option value="临加">临加</option>
  25 + </select>
  26 + </div>
  27 + </div>
  28 + <div class="uk-grid">
  29 + <div class="uk-width-3-10">
  30 + <div class="uk-form-row">
  31 + <label class="uk-form-label">起点 </label>
  32 + </div>
  33 + </div>
  34 + <div class="uk-width-7-10 pl5">
  35 + <select name="startStation" disabled></select>
  36 + </div>
  37 + </div>
  38 + <div class="uk-grid">
  39 + <div class="uk-width-3-10">
  40 + <div class="uk-form-row">
  41 + <label class="uk-form-label">终点 </label>
  42 + </div>
  43 + </div>
  44 + <div class="uk-width-7-10 pl5">
  45 + <select name="endStation" class="ct_focus"></select>
  46 + </div>
  47 + </div>
  48 + <div class="uk-grid">
  49 + <div class="uk-width-3-10">
  50 + <div class="uk-form-row">
  51 + <label class="uk-form-label">营运里程</label>
  52 + </div>
  53 + </div>
  54 + <div class="uk-width-7-10 pl5">
  55 + <input type="number" step="0.01" name="mileage" required>
  56 + </div>
  57 + </div>
  58 + <div class="uk-grid">
  59 + <div class="uk-width-3-10">
  60 + <div class="uk-form-row">
  61 + <label class="uk-form-label">开始时间</label>
  62 + </div>
  63 + </div>
  64 + <div class="uk-width-7-10 pl5">
  65 + <input type="time" name="startDate" required>
  66 + </div>
  67 + </div>
  68 + <div class="uk-grid">
  69 + <div class="uk-width-3-10">
  70 + <div class="uk-form-row">
  71 + <label class="uk-form-label">结束时间</label>
  72 + </div>
  73 + </div>
  74 + <div class="uk-width-7-10 pl5">
  75 + <input type="time" name="endDate" required>
  76 + </div>
  77 + </div>
  78 + </form>
  79 + </div>
  80 + </div>
  81 + <div class="sub-task-card">
  82 + <div class="uk-panel uk-panel-box uk-panel-box-secondary">
  83 + <div class="uk-panel-badge uk-badge uk-badge-default">空驶</div>
  84 + <h3 class="uk-panel-title">进场</h3>
  85 + <form class="uk-form uk-form-horizontal inpark_form" empty_form>
  86 + <input type="hidden" name="type2" value="2">
  87 + <input type="hidden" name="mileageType" value="empty">
  88 + <div class="uk-grid">
  89 + <div class="uk-width-3-10">
  90 + <div class="uk-form-row">
  91 + <label class="uk-form-label">班次类型 </label>
  92 + </div>
  93 + </div>
  94 + <div class="uk-width-7-10 pl5">
  95 + <select name="type1" class="ct_focus">
  96 + <option value="正常">正常</option>
  97 + <option value="临加">临加</option>
  98 + </select>
  99 + </div>
  100 + </div>
  101 + <div class="uk-grid">
  102 + <div class="uk-width-3-10">
  103 + <div class="uk-form-row">
  104 + <label class="uk-form-label">起点 </label>
  105 + </div>
  106 + </div>
  107 + <div class="uk-width-7-10 pl5">
  108 + <select name="startStation" ></select>
  109 + </div>
  110 + </div>
  111 + <div class="uk-grid">
  112 + <div class="uk-width-3-10">
  113 + <div class="uk-form-row">
  114 + <label class="uk-form-label">终点 </label>
  115 + </div>
  116 + </div>
  117 + <div class="uk-width-7-10 pl5">
  118 + <select name="endStation" class="ct_focus"></select>
  119 + </div>
  120 + </div>
  121 + <div class="uk-grid">
  122 + <div class="uk-width-3-10">
  123 + <div class="uk-form-row">
  124 + <label class="uk-form-label">空驶里程</label>
  125 + </div>
  126 + </div>
  127 + <div class="uk-width-7-10 pl5">
  128 + <input type="number" step="0.01" name="mileage" required style="width: calc(100% - 62px);">
  129 + <a style="font-size: 12px;color: grey;cursor: default;" data-uk-tooltip title="可选择回场路径,设置途径点位。暂不开放" id="inpark_paths_link">路径(<span>0</span>)</a>
  130 + </div>
  131 + </div>
  132 + <div class="uk-grid">
  133 + <div class="uk-width-3-10">
  134 + <div class="uk-form-row">
  135 + <label class="uk-form-label">开始时间</label>
  136 + </div>
  137 + </div>
  138 + <div class="uk-width-7-10 pl5">
  139 + <input type="time" name="startDate" required>
  140 + </div>
  141 + </div>
  142 + <div class="uk-grid">
  143 + <div class="uk-width-3-10">
  144 + <div class="uk-form-row">
  145 + <label class="uk-form-label">结束时间</label>
  146 + </div>
  147 + </div>
  148 + <div class="uk-width-7-10 pl5">
  149 + <input type="time" name="endDate" required>
  150 + </div>
  151 + </div>
  152 + </form>
  153 + </div>
  154 + </div>
  155 + <div class="sub-task-card destroy-card uk-animation-scale">
  156 + <div class="uk-panel uk-panel-box uk-panel-box-danger">
  157 + <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
  158 + <h3 class="uk-panel-title">线路上站点间</h3>
  159 + <form class="uk-form uk-form-horizontal inpark_form" destroy_form>
  160 + <input type="hidden" value="正常" name="type1">
  161 + <input type="hidden" value="1" name="type2">
  162 + <input type="hidden" name="mileageType" value="service">
  163 + <input type="hidden" name="destroy" value="true">
  164 + <div class="uk-grid" style="height: 30px;">
  165 + </div>
  166 + <div class="uk-grid">
  167 + <div class="uk-width-3-10">
  168 + <div class="uk-form-row">
  169 + <label class="uk-form-label">起点 </label>
  170 + </div>
  171 + </div>
  172 + <div class="uk-width-7-10 pl5">
  173 + <select name="startStation" disabled></select>
  174 + </div>
  175 + </div>
  176 + <div class="uk-grid">
  177 + <div class="uk-width-3-10">
  178 + <div class="uk-form-row">
  179 + <label class="uk-form-label">终点 </label>
  180 + </div>
  181 + </div>
  182 + <div class="uk-width-7-10 pl5">
  183 + <select name="endStation" class="ct_focus" disabled></select>
  184 + </div>
  185 + </div>
  186 + <div class="uk-grid">
  187 + <div class="uk-width-3-10">
  188 + <div class="uk-form-row">
  189 + <label class="uk-form-label">烂班里程</label>
  190 + </div>
  191 + </div>
  192 + <div class="uk-width-7-10 pl5">
  193 + <input type="number" step="0.01" name="mileage" required>
  194 + </div>
  195 + </div>
  196 + <div class="uk-grid">
  197 + <div class="uk-width-3-10">
  198 + <div class="uk-form-row">
  199 + <label class="uk-form-label">开始时间</label>
  200 + </div>
  201 + </div>
  202 + <div class="uk-width-7-10 pl5">
  203 + <input type="time" name="startDate" required>
  204 + </div>
  205 + </div>
  206 + <div class="uk-grid">
  207 + <div class="uk-width-3-10">
  208 + <div class="uk-form-row">
  209 + <label class="uk-form-label">烂班原因</label>
  210 + </div>
  211 + </div>
  212 + <div class="uk-width-7-10 pl5">
  213 + <select name="destroyReason" required></select>
  214 + </div>
  215 + </div>
  216 + </form>
  217 + </div>
  218 + </div>
  219 +
  220 + <form class="uk-form" style="margin-top: 15px; padding: 0 10px 0 0;">
  221 + <textarea placeholder="备注" style="width: 100%;height: 70px;" id="globalRemarks"></textarea>
  222 + </form>
  223 + </div>
  224 +
  225 + <div class="uk-modal-footer uk-text-right">
  226 + <button type="button" class="uk-button uk-modal-close">取消</button>
  227 + <button type="button" class="uk-button uk-button-primary" id="submitChildTaskBtn">提交子任务</button>
  228 +
  229 + <div class="ct-footer-left">
  230 + <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
  231 + </div>
  232 + </div>
  233 + </div>
  234 +
  235 + <div class="ct-bottom-drawer">
  236 + <div class="ct-bottom-drawer-body"></div>
  237 + </div>
  238 +
  239 + <script id="sub-task-inpark-form-temp" type="text/html">
  240 + </script>
  241 +
  242 + <script>
  243 + (function () {
  244 + var modal = '#add-sub-task-inpark-modal',
  245 + serviceForm = $('form[service_form]', modal),
  246 + emptyForm = $('form[empty_form]', modal),
  247 + destroyForm = $('form[destroy_form]', modal),
  248 + sch, stationRoutes, parks, information, esCode, timeLocStations;
  249 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  250 + $(modal).on('init', function (e, data) {
  251 + e.stopPropagation();
  252 + sch = data.sch;
  253 +
  254 + //站点路由
  255 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  256 + return a.stationRouteCode - b.stationRouteCode;
  257 + }), 'directions')[sch.xlDir];
  258 + //空驶终点(停车场)
  259 + //切换进场终点
  260 + $('select[name=endStation]', emptyForm).on('change', inparkNavigation);
  261 + $.get('/basic/parks', function (rs) {
  262 + parks = rs;
  263 + var opts = '';
  264 + for (var code in parks) {
  265 + opts += '<option value="' + code + '">' + parks[code] + '</option>';
  266 + }
  267 + $('select[name=endStation]', emptyForm).html(opts).val(information.carPark).trigger('change');
  268 + });
  269 + //线路标准
  270 + information = gb_data_basic.getLineInformation(sch.xlBm);
  271 + //本地存储的站点耗时
  272 + getLocStationsSpace();
  273 +
  274 + //设置默认值
  275 + setDefaultVal();
  276 +
  277 + //切换营运终点
  278 + $('select[name=endStation]', serviceForm).val(esCode).on('change', function () {
  279 + var val = $(this).val();
  280 + if (val == esCode) {
  281 + $('.uk-modal-dialog', modal).removeClass('three-children');
  282 + $('.sub-task-card.destroy-card').css("display", "none");
  283 + }
  284 + else {
  285 + $('.uk-modal-dialog', modal).addClass('three-children');
  286 + $('.sub-task-card.destroy-card').css("display", "inline-block");
  287 + }
  288 +
  289 + reClac();
  290 + }).trigger('change');
  291 +
  292 +
  293 + var dataArray = [];
  294 + var fs = $('form.inpark_form', modal).formValidation({
  295 + framework: 'uikit',
  296 + locale: 'zh_CN'
  297 + });
  298 + fs.on('success.form.fv', function(e) {
  299 + e.preventDefault();
  300 + if($(this).is(':hidden'))
  301 + return;
  302 + dataArray.push($.extend($(this).serializeJSON(), getDisabledVal(this)
  303 + , {remarks: $('#globalRemarks',modal).val(), 'schedule.id': sch.id}));
  304 + $(this).data('valid', true);
  305 +
  306 + if(allValidSuccess()){
  307 + var i = 0, rst;
  308 + (function () {
  309 + var f = arguments.callee;
  310 + if(i >= dataArray.length){
  311 + UIkit.modal(modal).hide();
  312 + $('#history-sch-edit-modal').trigger('init', {id: sch.id});
  313 + return;
  314 + }
  315 + var data = dataArray[i];
  316 + //里程为0的不保存
  317 + if(data.mileage==0){
  318 + i++;
  319 + f();
  320 + }
  321 + else{
  322 + //营运子任务不写备注
  323 + if(data.mileageType == 'service' && !data.destroy)
  324 + data.remarks = '';
  325 + //需要关联的部分主任务属性
  326 + data['schedule.xlBm'] = sch.xlBm;
  327 + data['schedule.xlDir'] = sch.xlDir;
  328 + gb_common.$post('/childTask/history', data, function (rs) {
  329 + notify_succ('子任务添加成功');
  330 + rst = rs.t;
  331 + i++;
  332 + f();
  333 + });
  334 + }
  335 + })();
  336 + }
  337 + });
  338 +
  339 + //校验不过
  340 + fs.on('err.field.fv', function () {
  341 + $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled');
  342 + });
  343 +
  344 + //submit
  345 + $('#submitChildTaskBtn', modal).on('click', function () {
  346 + $(this).addClass('disabled').attr('disabled','disabled');
  347 + dataArray = [];
  348 + fs.data('valid', false);
  349 + fs.formValidation('validate');
  350 + //fs.submit();
  351 + });
  352 +
  353 + //选择烂班原因
  354 + $('select[name=destroyReason]', destroyForm).on('change', function () {
  355 + var e =$('#globalRemarks', modal);
  356 + e.val(e.val() + $(this).val() + ',');
  357 + });
  358 +
  359 + //根据主任务状态,复子任务
  360 + updateTwinsTaskBySch(sch);
  361 + });
  362 +
  363 + function allValidSuccess() {
  364 + var flag = true;
  365 + $('form.inpark_form:visible', modal).each(function (i, f) {
  366 + if(!$(f).data('valid')){
  367 + flag = false;
  368 + return false;
  369 + }
  370 + });
  371 + return flag;
  372 + }
  373 +
  374 + //获取表单disabled 项的值
  375 + function getDisabledVal(f) {
  376 + var rs = {};
  377 + $('input,select', f).each(function () {
  378 + if($(this).attr('disabled')){
  379 + rs[$(this).attr('name')]=$(this).val();
  380 + }
  381 + });
  382 + return rs;
  383 + }
  384 +
  385 + function setDefaultVal() {
  386 + var routeOpts = '';
  387 + $.each(stationRoutes, function () {
  388 + routeOpts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
  389 + });
  390 + esCode = stationRoutes[stationRoutes.length - 1].stationCode;
  391 +
  392 + //营运起终点
  393 + $('select[name=startStation],select[name=endStation]', serviceForm).html(routeOpts);
  394 + //空驶起点
  395 + $('select[name=startStation]', emptyForm).html(routeOpts).val(esCode);
  396 + //烂班起终点
  397 + $('select[name=startStation],select[name=endStation]', destroyForm).html(routeOpts).val(esCode);
  398 +
  399 + //烂班原因
  400 + var adjustExpsOpts = '<option value="">请选择...</option>';
  401 + $.each(adjustExps, function (i, str) {
  402 + adjustExpsOpts += '<option value="' + str + '">' + str + '</option>';
  403 + });
  404 + $('select[name=destroyReason]', destroyForm).html(adjustExpsOpts);
  405 +
  406 + //营运开始时间
  407 + $('input[name=startDate]', serviceForm).val(sch.fcsjActual?sch.fcsjActual:sch.dfsj);
  408 +
  409 + //营运班次类型
  410 + $('select[name=type1]', serviceForm).val(sch['sflj']?'临加':'正常');
  411 + }
  412 +
  413 + //点击 路径
  414 + $('#inpark_paths_link', modal).on('click', function () {
  415 +
  416 + });
  417 +
  418 + //进场导航
  419 + var drivingRouteResult;
  420 + function inparkNavigation() {
  421 + var start = $('select[name=startStation]', emptyForm).val()
  422 + ,end = $('select[name=endStation]', emptyForm).val();
  423 +
  424 + if(!end) return;
  425 +
  426 + var station = getStationByCode(start).station
  427 + ,park = gb_data_basic.getCarparkByCode(end);
  428 +
  429 + if(!park){
  430 + notify_err('无法找到停车场的坐标对照!!!');
  431 + return;
  432 + }
  433 + var tArray = park['gCenterPoint'].split(' ');
  434 + var sCoord = TransGPS.wgsToBD(station['gLaty'], station['gLonx'])
  435 + ,eCoord = TransGPS.wgsToBD(parseFloat(tArray[1]), parseFloat(tArray[0]));
  436 +
  437 + var sp = new BMap.Point(sCoord.lng,sCoord.lat);
  438 + var ep = new BMap.Point(eCoord.lng,eCoord.lat);
  439 +
  440 + var driving = new BMap.DrivingRoute('上海', {
  441 + onSearchComplete: function (rs) {
  442 + drivingRouteResult = rs;
  443 + calcInparkMileage(0);
  444 + }
  445 + });
  446 + driving.search(sp,ep);
  447 + }
  448 +
  449 + function calcInparkMileage(index) {
  450 + var count = drivingRouteResult.getNumPlans();
  451 +
  452 + //选择方案
  453 + var routePlan = drivingRouteResult.getPlan(index);
  454 + //里程
  455 + var mileage = routePlan.getDistance(false);
  456 + $('input[name=mileage]', emptyForm).val(mileage / 1000);
  457 + //结束时间
  458 + var duratio = routePlan.getDuration(false);
  459 + var st = $('input[name=startDate]', emptyForm).val();
  460 + var ets = moment(st, 'HH:mm').add(duratio, 'seconds').format('HH:mm');
  461 + $('input[name=endDate]', emptyForm).val(ets);
  462 +
  463 +
  464 + $('#inpark_paths_link span', modal).text(count);
  465 + }
  466 +
  467 + function getStationByCode(code) {
  468 + for(var i = 0; i < stationRoutes.length; i++){
  469 + if(stationRoutes[i]['stationCode']==code)
  470 + return stationRoutes[i];
  471 + }
  472 + return null;
  473 + }
  474 +
  475 + function reClac() {
  476 + var serviceEnd = $('select[name=endStation]', serviceForm).val();
  477 + //空驶起点 == 营运终点
  478 + $('select[name=startStation]', emptyForm).val(serviceEnd);
  479 +
  480 + //计算营运里程
  481 + var s = $('select[name=startStation]', serviceForm).val(),
  482 + e = $('select[name=endStation]', serviceForm).val();
  483 + var sMileage = calcMileage(s, e);
  484 + if(sMileage >= 0)
  485 + $('input[name=mileage]', serviceForm).val(sMileage);
  486 +
  487 + //营运结束时间
  488 + var et = sch.dfsjT + (parseInt(sMileage / sch.jhlcOrig * sch.bcsj) * 60 * 1000)
  489 + ,ets = et > sch.zdsjT?sch.zdsj:moment(et).format('HH:mm');
  490 + $('input[name=endDate]', serviceForm).val(ets);
  491 +
  492 + //有烂班
  493 + if (serviceEnd != esCode) {
  494 + //烂班起点 == 营运终点
  495 + $('select[name=startStation]', destroyForm).val(serviceEnd);
  496 + //计算烂班公里
  497 + s = $('select[name=startStation]', destroyForm).val();
  498 + e = $('select[name=endStation]', destroyForm).val();
  499 + var dMileage = calcMileage(s, e);
  500 + $('input[name=mileage]', destroyForm).val(dMileage);
  501 + //烂班开始时间
  502 + $('input[name=startDate]', destroyForm).val(ets);
  503 + }
  504 +
  505 + //进场开始时间
  506 + $('input[name=startDate]', emptyForm).val(ets);
  507 +
  508 + //重新导航
  509 + inparkNavigation();
  510 + }
  511 +
  512 + function calcMileage(s, e) {
  513 + var mileage = 0, flag, code;
  514 + if (timeLocStations) {
  515 + //空间坐标计算的站距
  516 + $.each(timeLocStations, function () {
  517 + code = this.station['STATION_CODE'];
  518 + if (flag)
  519 + mileage = gb_common.accAdd(mileage, this.toDistanceGl);
  520 + if (code == s)
  521 + flag = true;
  522 + if (code == e)
  523 + return false;
  524 + });
  525 + }
  526 + else{
  527 + //从原始站点路由字段里取值
  528 + $.each(stationRoutes, function () {
  529 + code = this['stationCode'];
  530 + if (flag)
  531 + mileage = gb_common.accAdd(mileage, this.distances);
  532 + if (code == s)
  533 + flag = true;
  534 + if (code == e)
  535 + return false;
  536 + });
  537 + }
  538 + return mileage;
  539 + }
  540 +
  541 + //从本地localStorage获取站间距数据
  542 + function getLocStationsSpace() {
  543 + try {
  544 + timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
  545 + if (timeLocStations)
  546 + timeLocStations = JSON.parse(timeLocStations).stations[sch.xlDir == 0 ? 'up' : 'down'];
  547 + } catch (e) {
  548 + console.log(e);
  549 + }
  550 + }
  551 +
  552 + //站间距计算后刷新
  553 + $(modal).on('refresh_station_space', function () {
  554 + getLocStationsSpace();
  555 + reClac();
  556 + });
  557 +
  558 + //------ 下抽屉 ------
  559 + $('#betweenStationRangeCalc', modal).on('click', function () {
  560 + var id = $(this).data('drawer-id');
  561 + switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
  562 + });
  563 +
  564 + var btmDrawer = $('.ct-bottom-drawer', modal);
  565 + //打开事件
  566 + btmDrawer.on('drawer_show', function () {
  567 + var url = $(this).data('url');
  568 + if (!url) {
  569 + alert('无效的地址');
  570 + }
  571 +
  572 + var drawerPanel = $(this).data('name');
  573 + $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
  574 + $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
  575 + });
  576 + });
  577 +
  578 + function switchBtmDrawer(id, url) {
  579 + if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
  580 + btmDrawer.removeClass('open');
  581 + btmDrawer.removeData('name').removeData('url');
  582 + }
  583 + else {
  584 + btmDrawer.addClass('open');
  585 + btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
  586 + }
  587 + }
  588 +
  589 +
  590 + function updateTwinsTaskBySch(sch) {
  591 + //主任务是烂班
  592 + if(sch.destroy){
  593 + serviceForm.prepend('<input type="hidden" name="destroy" value="true">');
  594 + $('[name=mileage]', serviceForm).val(sch.jhlcOrig).attr('disabled', 'disabled');
  595 + $('.twins_task_panel .uk-badge', modal).addClass('uk-badge-danger').text('烂班');
  596 + //终点禁选
  597 + $('select[name=endStation]', serviceForm).attr('disabled', 'disabled');
  598 + //开始结束时间禁选
  599 +
  600 + //空驶起点
  601 + $('select[name=startStation]', emptyForm).val(sch.qdzCode);
  602 + }
  603 + }
  604 + })();
  605 + </script>
606 606 </div>
607 607 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/north/nav/history_sch/h_add_sub_task_other.html
1   -<div class="uk-modal ct-form-modal ct_move_modal" id="add-sub-task-other-modal">
2   - <div class="uk-modal-dialog" style="width: 635px;">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>自定义子任务</h2></div>
6   - <form class="uk-form uk-form-horizontal">
7   - </form>
8   - </div>
9   -
10   - <script id="sub-task-other-form-temp" type="text/html">
11   - <input type="hidden" value="{{sch.id}}" name="schedule.id">
12   - <div class="uk-grid">
13   - <div class="uk-width-1-2">
14   - <div class="uk-form-row">
15   - <label class="uk-form-label">班次类型</label>
16   - <div class="uk-form-controls">
17   - <select class="form-control" name="type1" style="width: 65px;">
18   - <option>正常</option>
19   - <option>临加</option>
20   - </select>
21   - <select class="form-control nt-dictionary" name="type2" data-group=ChildTaskType
22   - style="width: 126px;;"></select>
23   - </div>
24   - </div>
25   - </div>
26   -
27   - <div class="uk-width-1-2 inout_reason_wrap" style="display: none">
28   - <div class="uk-form-row">
29   - <label class="uk-form-label">进出场原因</label>
30   - <div class="uk-form-controls">
31   - <select class="form-control" name="reason" required>
32   - <option value="">请选择..</option>
33   - <option>故障</option>
34   - <option>肇事</option>
35   - <option>纠纷</option>
36   - <option>其他</option>
37   - </select>
38   - </div>
39   - </div>
40   - </div>
41   -
42   - </div>
43   - <div class="uk-grid">
44   - <div class="uk-width-1-2">
45   - <div class="uk-form-row">
46   - <label class="uk-form-label">起点 </label>
47   - <div class="uk-form-controls">
48   - <select name="startStation" required></select>
49   - </div>
50   - </div>
51   - </div>
52   - <div class="uk-width-1-2">
53   - <div class="uk-form-row">
54   - <label class="uk-form-label">终点</label>
55   - <div class="uk-form-controls">
56   - <select name="endStation" required></select>
57   - </div>
58   - </div>
59   - </div>
60   - </div>
61   -
62   - <div class="uk-grid">
63   - <div class="uk-width-1-2">
64   - <div class="uk-form-row">
65   - <label class="uk-form-label">里程类型</label>
66   - <div class="uk-form-controls">
67   - <select class="form-control nt-dictionary" required name="mileageType"
68   - data-group="MileageType"></select>
69   - </div>
70   - </div>
71   - </div>
72   - <div class="uk-width-1-2">
73   - <div class="uk-form-row">
74   - <label class="uk-form-label">公里数</label>
75   - <div class="uk-form-controls">
76   - <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false" required>
77   - </div>
78   - </div>
79   - </div>
80   - </div>
81   -
82   - <div class="uk-grid">
83   - <div class="uk-width-1-2">
84   - <div class="uk-form-row">
85   - <label class="uk-form-label">开始时间</label>
86   - <div class="uk-form-controls">
87   - <input name="startDate" value="{{sch.fcsj}}" type="time" required>
88   - </div>
89   - </div>
90   - </div>
91   - <div class="uk-width-1-2">
92   - <div class="uk-form-row">
93   - <label class="uk-form-label">结束时间</label>
94   - <div class="uk-form-controls">
95   - <input name="endDate" value="{{sch.zdsj}}" type="time" required>
96   - </div>
97   - </div>
98   - </div>
99   - </div>
100   -
101   - <div class="uk-grid">
102   - <div class="uk-width-1-2">
103   - <div class="uk-form-row" style="padding-top: 5px;">
104   - <label class="uk-form-label"></label>
105   - <div class="uk-form-controls">
106   - <label>
107   - <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班
108   - </label>
109   - </div>
110   - </div>
111   - </div>
112   - <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;">
113   - <div class="uk-form-row">
114   - <label class="uk-form-label">烂班原因</label>
115   - <div class="uk-form-controls">
116   - <select class="form-control" name="destroyReason">
117   - <option value="">请选择...</option>
118   - {{each adjustExps as exp i}}
119   - <option value="{{exp}}">{{exp}}</option>
120   - {{/each}}
121   - </select>
122   - </div>
123   - </div>
124   - </div>
125   - </div>
126   -
127   - <div class="uk-grid">
128   - <div class="uk-width-1-1">
129   - <div class="uk-form-row ct-stacked">
130   - <div class="uk-form-controls" style="margin-top: 5px;">
131   - <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true"
132   - data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
133   - </div>
134   - </div>
135   - </div>
136   - </div>
137   - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
138   - <button type="button" class="uk-button uk-modal-close">取消</button>
139   - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
140   - </div>
141   - </script>
142   -
143   - <script>
144   - (function () {
145   - var modal = '#add-sub-task-other-modal',
146   - sch, stationRoutes, parks, information;
147   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
148   - $(modal).on('init', function (e, data) {
149   - e.stopPropagation();
150   - sch = data.sch;
151   - var formHtml = template('sub-task-other-form-temp', {sch: sch, adjustExps: adjustExps});
152   - $('form', modal).html(formHtml);
153   - //字典转换
154   - dictionaryUtils.transformDom($('.nt-dictionary', modal));
155   -
156   - //站点路由
157   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
158   - return a.stationRouteCode - b.stationRouteCode;
159   - }), 'directions');
160   - //停车场
161   - $.get('/basic/parks', function (rs) {
162   - parks = rs;
163   - });
164   - //线路标准
165   - information = gb_data_basic.getLineInformation(sch.xlBm);
166   -
167   - //submit
168   - var f = $('form', modal).formValidation(gb_form_validation_opts);
169   - f.on('success.form.fv', function (e) {
170   - disabled_submit_btn(this);
171   - e.preventDefault();
172   - var data = $(this).serializeJSON();
173   -
174   - //需要关联的部分主任务属性
175   - data['schedule.xlBm'] = sch.xlBm;
176   - data['schedule.xlDir'] = sch.xlDir;
177   - gb_common.$post('/childTask/history', data, function (rs) {
178   - notify_succ('子任务添加成功');
179   - $('#history-sch-edit-modal').trigger('init', {id: sch.id});
180   - UIkit.modal(modal).hide();
181   - });
182   - });
183   -
184   - //班次类型
185   - $('[name=type2]', f).on('change', function () {
186   - $('.inout_reason_wrap').hide();
187   - var routes = stationRoutes[sch.xlDir]
188   - , lastCode = routes[routes.length - 1].stationCode
189   - , opts = '', park_opts = '';
190   - //station options
191   - $.each(routes, function () {
192   - opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
193   - });
194   - //park options
195   - for (var code in parks)
196   - park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
197   -
198   - var qdz = $('[name=startStation]', f), zdz = $('[name=endStation]', f), mType = $('[name=mileageType]', f);
199   - switch ($(this).val()) {
200   - case '3'://出场
201   - qdz.html(park_opts).val(information.carPark);
202   - zdz.html(opts);
203   - mType.val('empty');
204   - //进出场原因
205   - $('.inout_reason_wrap').show();
206   - break;
207   - case '2'://进场
208   - qdz.html(opts);
209   - zdz.html(park_opts).val(information.carPark);
210   - mType.val('empty');
211   - //进出场原因
212   - $('.inout_reason_wrap').show();
213   - break;
214   - default:
215   - qdz.html(opts);
216   - zdz.html(opts).val(lastCode);
217   - mType.val('service');
218   -
219   - }
220   - });
221   -
222   - //是否烂班
223   - $('[name=destroy]', f).on('click', function () {
224   - console.log(this, this.checked);
225   - if (this.checked) {
226   - $('.destroy_reason_wrap', modal).show();
227   - }
228   - else {
229   - $('.destroy_reason_wrap', modal).hide();
230   - }
231   - });
232   -
233   - $('[name=destroyReason]', f).on('change', function () {
234   - var rem = $('[name=remarks]', f);
235   - rem.val(rem.val() + $(this).val() + ',');
236   - });
237   - });
238   - })();
239   - </script>
240   -</div>
  1 +<div class="uk-modal ct-form-modal ct_move_modal" id="add-sub-task-other-modal">
  2 + <div class="uk-modal-dialog" style="width: 635px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>自定义子任务</h2></div>
  6 + <form class="uk-form uk-form-horizontal">
  7 + </form>
  8 + </div>
  9 +
  10 + <script id="sub-task-other-form-temp" type="text/html">
  11 + <input type="hidden" value="{{sch.id}}" name="schedule.id">
  12 + <div class="uk-grid">
  13 + <div class="uk-width-1-2">
  14 + <div class="uk-form-row">
  15 + <label class="uk-form-label">班次类型</label>
  16 + <div class="uk-form-controls">
  17 + <select class="form-control" name="type1" style="width: 65px;">
  18 + <option>正常</option>
  19 + <option>临加</option>
  20 + </select>
  21 + <select class="form-control nt-dictionary" name="type2" data-group=ChildTaskType
  22 + style="width: 126px;;"></select>
  23 + </div>
  24 + </div>
  25 + </div>
  26 +
  27 + <div class="uk-width-1-2 inout_reason_wrap" style="display: none">
  28 + <div class="uk-form-row">
  29 + <label class="uk-form-label">进出场原因</label>
  30 + <div class="uk-form-controls">
  31 + <select class="form-control" name="reason" required>
  32 + <option value="">请选择..</option>
  33 + <option>故障</option>
  34 + <option>肇事</option>
  35 + <option>纠纷</option>
  36 + <option>其他</option>
  37 + </select>
  38 + </div>
  39 + </div>
  40 + </div>
  41 +
  42 + </div>
  43 + <div class="uk-grid">
  44 + <div class="uk-width-1-2">
  45 + <div class="uk-form-row">
  46 + <label class="uk-form-label">起点 </label>
  47 + <div class="uk-form-controls">
  48 + <select name="startStation" required></select>
  49 + </div>
  50 + </div>
  51 + </div>
  52 + <div class="uk-width-1-2">
  53 + <div class="uk-form-row">
  54 + <label class="uk-form-label">终点</label>
  55 + <div class="uk-form-controls">
  56 + <select name="endStation" required></select>
  57 + </div>
  58 + </div>
  59 + </div>
  60 + </div>
  61 +
  62 + <div class="uk-grid">
  63 + <div class="uk-width-1-2">
  64 + <div class="uk-form-row">
  65 + <label class="uk-form-label">里程类型</label>
  66 + <div class="uk-form-controls">
  67 + <select class="form-control nt-dictionary" required name="mileageType"
  68 + data-group="MileageType"></select>
  69 + </div>
  70 + </div>
  71 + </div>
  72 + <div class="uk-width-1-2">
  73 + <div class="uk-form-row">
  74 + <label class="uk-form-label">公里数</label>
  75 + <div class="uk-form-controls">
  76 + <input class="form-control" name="mileage" max=222 data-fv-lessthan-inclusive="false" required>
  77 + </div>
  78 + </div>
  79 + </div>
  80 + </div>
  81 +
  82 + <div class="uk-grid">
  83 + <div class="uk-width-1-2">
  84 + <div class="uk-form-row">
  85 + <label class="uk-form-label">开始时间</label>
  86 + <div class="uk-form-controls">
  87 + <input name="startDate" value="{{sch.fcsj}}" type="time" required>
  88 + </div>
  89 + </div>
  90 + </div>
  91 + <div class="uk-width-1-2">
  92 + <div class="uk-form-row">
  93 + <label class="uk-form-label">结束时间</label>
  94 + <div class="uk-form-controls">
  95 + <input name="endDate" value="{{sch.zdsj}}" type="time" required>
  96 + </div>
  97 + </div>
  98 + </div>
  99 + </div>
  100 +
  101 + <div class="uk-grid">
  102 + <div class="uk-width-1-2">
  103 + <div class="uk-form-row" style="padding-top: 5px;">
  104 + <label class="uk-form-label"></label>
  105 + <div class="uk-form-controls">
  106 + <label>
  107 + <input type="checkbox" value=1 name="destroy" class="i-cbox"> 是否烂班
  108 + </label>
  109 + </div>
  110 + </div>
  111 + </div>
  112 + <div class="uk-width-1-2 destroy_reason_wrap" style="display: none;">
  113 + <div class="uk-form-row">
  114 + <label class="uk-form-label">烂班原因</label>
  115 + <div class="uk-form-controls">
  116 + <select class="form-control" name="destroyReason">
  117 + <option value="">请选择...</option>
  118 + {{each adjustExps as exp i}}
  119 + <option value="{{exp}}">{{exp}}</option>
  120 + {{/each}}
  121 + </select>
  122 + </div>
  123 + </div>
  124 + </div>
  125 + </div>
  126 +
  127 + <div class="uk-grid">
  128 + <div class="uk-width-1-1">
  129 + <div class="uk-form-row ct-stacked">
  130 + <div class="uk-form-controls" style="margin-top: 5px;">
  131 + <textarea id="form-s-t" cols="30" rows="5" name="remarks" data-fv-stringlength="true"
  132 + data-fv-stringlength-max="50" placeholder="备注,不超过50个字符"></textarea>
  133 + </div>
  134 + </div>
  135 + </div>
  136 + </div>
  137 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  138 + <button type="button" class="uk-button uk-modal-close">取消</button>
  139 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  140 + </div>
  141 + </script>
  142 +
  143 + <script>
  144 + (function () {
  145 + var modal = '#add-sub-task-other-modal',
  146 + sch, stationRoutes, parks, information;
  147 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  148 + $(modal).on('init', function (e, data) {
  149 + e.stopPropagation();
  150 + sch = data.sch;
  151 + var formHtml = template('sub-task-other-form-temp', {sch: sch, adjustExps: adjustExps});
  152 + $('form', modal).html(formHtml);
  153 + //字典转换
  154 + dictionaryUtils.transformDom($('.nt-dictionary', modal));
  155 +
  156 + //站点路由
  157 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  158 + return a.stationRouteCode - b.stationRouteCode;
  159 + }), 'directions');
  160 + //停车场
  161 + $.get('/basic/parks', function (rs) {
  162 + parks = rs;
  163 + });
  164 + //线路标准
  165 + information = gb_data_basic.getLineInformation(sch.xlBm);
  166 +
  167 + //submit
  168 + var f = $('form', modal).formValidation(gb_form_validation_opts);
  169 + f.on('success.form.fv', function (e) {
  170 + disabled_submit_btn(this);
  171 + e.preventDefault();
  172 + var data = $(this).serializeJSON();
  173 +
  174 + //需要关联的部分主任务属性
  175 + data['schedule.xlBm'] = sch.xlBm;
  176 + data['schedule.xlDir'] = sch.xlDir;
  177 + gb_common.$post('/childTask/history', data, function (rs) {
  178 + notify_succ('子任务添加成功');
  179 + $('#history-sch-edit-modal').trigger('init', {id: sch.id});
  180 + UIkit.modal(modal).hide();
  181 + });
  182 + });
  183 +
  184 + //班次类型
  185 + $('[name=type2]', f).on('change', function () {
  186 + $('.inout_reason_wrap').hide();
  187 + var routes = stationRoutes[sch.xlDir]
  188 + , lastCode = routes[routes.length - 1].stationCode
  189 + , opts = '', park_opts = '';
  190 + //station options
  191 + $.each(routes, function () {
  192 + opts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>'
  193 + });
  194 + //park options
  195 + for (var code in parks)
  196 + park_opts += '<option value="' + code + '">' + parks[code] + '</option>';
  197 +
  198 + var qdz = $('[name=startStation]', f), zdz = $('[name=endStation]', f), mType = $('[name=mileageType]', f);
  199 + switch ($(this).val()) {
  200 + case '3'://出场
  201 + qdz.html(park_opts).val(information.carPark);
  202 + zdz.html(opts);
  203 + mType.val('empty');
  204 + //进出场原因
  205 + $('.inout_reason_wrap').show();
  206 + break;
  207 + case '2'://进场
  208 + qdz.html(opts);
  209 + zdz.html(park_opts).val(information.carPark);
  210 + mType.val('empty');
  211 + //进出场原因
  212 + $('.inout_reason_wrap').show();
  213 + break;
  214 + default:
  215 + qdz.html(opts);
  216 + zdz.html(opts).val(lastCode);
  217 + mType.val('service');
  218 +
  219 + }
  220 + });
  221 +
  222 + //是否烂班
  223 + $('[name=destroy]', f).on('click', function () {
  224 + console.log(this, this.checked);
  225 + if (this.checked) {
  226 + $('.destroy_reason_wrap', modal).show();
  227 + }
  228 + else {
  229 + $('.destroy_reason_wrap', modal).hide();
  230 + }
  231 + });
  232 +
  233 + $('[name=destroyReason]', f).on('change', function () {
  234 + var rem = $('[name=remarks]', f);
  235 + rem.val(rem.val() + $(this).val() + ',');
  236 + });
  237 + });
  238 + })();
  239 + </script>
  240 +</div>
... ...
src/main/resources/static/real_control_v2/js/common.js
1   -var gb_common = (function () {
2   -
3   - var flatpickrDateTimeConfig = {
4   - enableTime: true,
5   - time_24hr: true,
6   - "locale": "zh",
7   - onOpen: function () {
8   - $(this.calendarContainer).addClass('showTimeInput');
9   - }
10   - };
11   - var reqCode80 = {
12   - 0xA1: '请求恢复运营',
13   - 0xA2: '申请调档',
14   - 0xA3: '出场请求',
15   - 0xA5: '进场请求',
16   - 0xA7: '加油请求',
17   - 0x50: '车辆故障',
18   - 0x70: '路阻报告',
19   - 0x60: '事故报告',
20   - 0x11: '扣证纠纷',
21   - 0x12: '报警'
22   - };
23   -
24   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
25   - var inOutExps = ['故障', '肇事', '纠纷', '其他'];
26   -
27   - var groupBy = function (list, field) {
28   - var rs = {},
29   - key;
30   - $.each(list, function () {
31   - key = this[field];
32   - if (!rs[key])
33   - rs[key] = [];
34   -
35   - rs[key].push(this);
36   - });
37   -
38   - return rs;
39   - };
40   -
41   - /**
42   - * 从班次集合里提取驾驶员
43   - * @param list
44   - */
45   - var extractJsy = function (list) {
46   - var rs = {};
47   - $.each(list, function () {
48   - rs[this.jGh + '/' + this.jName]=1;
49   - });
50   - return rs;
51   - };
52   -
53   - /**
54   - * 从班次集合里提取路牌
55   - * @param list
56   - */
57   - var extractLpName = function (list) {
58   - var rs = {};
59   - $.each(list, function () {
60   - rs[this.lpName]=1;
61   - });
62   - return rs;
63   - };
64   -
65   - /**
66   - * 从班次集合里提取车辆
67   - * @param list
68   - */
69   - var extractNbbm = function (list) {
70   - var rs = {};
71   - $.each(list, function () {
72   - rs[this.clZbh]=1;
73   - });
74   - return rs;
75   - };
76   -
77   - var compileTempByDom = function (dom, opts) {
78   - var tps = {},
79   - id;
80   - $('script[type="text/html"]', dom).each(function () {
81   - id = $(this).attr('id');
82   - if (id)
83   - tps[id] = template.compile($(this).html(), opts);
84   - });
85   - return tps;
86   - };
87   -
88   - var $get = function (url, data, successFun) {
89   - $.ajax({
90   - url: url,
91   - data: data,
92   - complete: function (xhr, ts) {
93   - ajaxComplete(xhr, ts, successFun);
94   - }
95   - });
96   - };
97   -
98   - var $post = function (url, data, successFun, errFun) {
99   - $.ajax({
100   - url: url,
101   - method: 'POST',
102   - data: data,
103   - complete: function (xhr, ts) {
104   - ajaxComplete(xhr, ts, successFun, errFun);
105   - }
106   - });
107   - };
108   -
109   - var $post_arr = function (url, data, successFun) {
110   - $.ajax({
111   - url: url,
112   - method: 'POST',
113   - traditional: true,
114   - data: data,
115   - complete: function (xhr, ts) {
116   - ajaxComplete(xhr, ts, successFun);
117   - }
118   - });
119   - };
120   -
121   - var $del = function (url, successFun) {
122   - $post(url, {'_method': 'delete'}, function (rs) {
123   - successFun && successFun(rs);
124   - });
125   - };
126   -
127   - var errorHead = '<span style="color:red;">异常:</span>';
128   -
129   - function successHandle(json, handle, err) {
130   - var status = json.status;
131   - if (status == 407) {
132   - location.href = '/login.html';
133   - return;
134   - }
135   -
136   - if (!status) {
137   - handle && handle(json);
138   - return;
139   - }
140   -
141   - if (status == 'ERROR'){
142   - UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}});
143   - //关闭wait窗口
144   - hide_wait_modal();
145   - err && err();
146   - }
147   - else
148   - handle && handle(json);
149   - }
150   -
151   - function ajaxComplete(xhr, ts, succ, err) {
152   - if (ts == 'success') {
153   - successHandle(JSON.parse(xhr.responseText), succ, err);
154   - } else if (ts == 'error') {
155   - UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}});
156   - //关闭wait窗口
157   - hide_wait_modal();
158   - err && err();
159   - }
160   - }
161   -
162   - var get_vals = function (json) {
163   - var array = [];
164   - for (var key in json) {
165   - array.push(json[key]);
166   - }
167   -
168   - return array;
169   - };
170   -
171   - var get_keys = function (json) {
172   - var array = [];
173   - for (var key in json) {
174   - array.push(key);
175   - }
176   - return array;
177   - };
178   -
179   - var get_device_tree_data = function (allGps, idBefore) {
180   - if (!idBefore)
181   - idBefore = '';
182   - var treeData = [];
183   - //var data = groupBy(get_vals(gb_data_gps.allGps), 'lineId');
184   - var data = groupBy(get_vals(allGps), 'lineId');
185   - var name;
186   - for (var code in data) {
187   - try {
188   - name = gb_data_basic.codeToLine[code].name;
189   - } catch (e) {
190   - continue;
191   - }
192   -
193   - data[name] = groupBy(data[code], 'upDown');
194   - treeData.push({
195   - 'text': name,
196   - 'a_attr': {'type': 'line', 'id': idBefore + 'line_' + code},
197   - 'children': [{
198   - 'text': '上行',
199   - 'children': grabs(data[name][0], idBefore),
200   - 'a_attr': {
201   - 'type': 'route',
202   - 'route': code + '_0',
203   - 'id': idBefore + 'route_' + code + '_0'
204   - }
205   - }, {
206   - 'text': '下行',
207   - 'children': grabs(data[name][1], idBefore),
208   - 'a_attr': {
209   - 'type': 'route',
210   - 'route': code + '_1',
211   - 'id': idBefore + 'route_' + code + '_1'
212   - }
213   - }]
214   - });
215   - }
216   -
217   - function grabs(array, idBefore) {
218   - if (!array)
219   - return;
220   - var rs = [];
221   - $.each(array, function () {
222   - rs.push({
223   - 'text': this.nbbm,
224   - 'a_attr': {
225   - 'type': 'device',
226   - 'device': this.deviceId,
227   - 'id': idBefore + 'device_' + this.nbbm
228   - },
229   - 'data': {lineId: this.lineId, upDown: this.upDown},
230   - 'icon': 'uk-icon-bus'
231   - });
232   - });
233   - return rs;
234   - }
235   -
236   - return treeData;
237   - };
238   -
239   - var lineAutocomplete = function (element) {
240   - //construction data
241   - var data = [],
242   - code2Name = gb_data_basic.lineCode2NameAll(),
243   - name;
244   - for (var code in code2Name) {
245   - name = code2Name[code];
246   - data.push({
247   - value: name,
248   - code: code,
249   - fullChars: pinyin.getFullChars(name),
250   - camelChars: pinyin.getCamelChars(name)
251   - });
252   - }
253   - init_autocom_pinyin(element, data);
254   - };
255   -
256   - var personAutocomplete = function (element, personMaps) {
257   - /*var data = [],name;
258   - for(var jobCode in personMaps){
259   - name=personMaps[jobCode];
260   - data.push({
261   - value: jobCode+'/'+name,
262   - fullChars: pinyin.getFullChars(name).toUpperCase(),
263   - camelChars: pinyin.getCamelChars(name)
264   - });
265   - }*/
266   - //init_autocom_pinyin(element, data);
267   - init_autocom_pinyin(element, gb_data_basic.allPersonnel());
268   - };
269   -
270   - var remarksAutocomplete = function (element) {
271   - init_autocom_pinyin(element, gb_data_basic.remarksMapps());
272   - };
273   -
274   - var carAutocomplete = function (element, list) {
275   - var data = [];
276   - $.each(list, function () {
277   - data.push({value: this});
278   - });
279   - init_autocomplete(element, data);
280   - };
281   -
282   - var init_autocom_pinyin = function (element, data) {
283   - // init autocomplete
284   - var autocomplete = UIkit.autocomplete(element, {
285   - minLength: 1,
286   - delay: 50,
287   - source: function (release) {
288   - var q = $('input', element).val().toUpperCase(),
289   - rs = [],
290   - count = 0;
291   -
292   - $.each(data, function () {
293   - if (this.value.indexOf(q) != -1 || this.fullChars.indexOf(q) != -1 || this.camelChars.indexOf(q) != -1) {
294   - rs.push(this);
295   - count++;
296   - }
297   -
298   - if (count >= 10)
299   - return false;
300   - });
301   -
302   - release && release(rs);
303   - }
304   - });
305   - };
306   -
307   - var init_autocomplete = function (element, data) {
308   - var autocomplete = UIkit.autocomplete(element, {
309   - minLength: 1,
310   - delay: 50,
311   - source: function (release) {
312   - var q = $('input', element).val().toUpperCase(),
313   - rs = [],
314   - count = 0;
315   -
316   - $.each(data, function () {
317   - if (this.value.indexOf(q) != -1) {
318   - rs.push(this);
319   - count++;
320   - }
321   - if (count >= 10)
322   - return false;
323   - });
324   - release && release(rs);
325   - }
326   - });
327   - };
328   -
329   - var accAdd = function (a, b) {
330   - var c, d, e;
331   - try {
332   - c = a.toString().split(".")[1].length;
333   - } catch (f) {
334   - c = 0;
335   - }
336   - try {
337   - d = b.toString().split(".")[1].length;
338   - } catch (f) {
339   - d = 0;
340   - }
341   - return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
342   - };
343   -
344   - function accDiv(arg1,arg2){
345   - var t1=0,t2=0,r1,r2;
346   - try{t1=arg1.toString().split(".")[1].length}catch(e){}
347   - try{t2=arg2.toString().split(".")[1].length}catch(e){}
348   - with(Math){
349   - r1=Number(arg1.toString().replace(".",""))
350   - r2=Number(arg2.toString().replace(".",""))
351   - return (r1/r2)*pow(10,t2-t1);
352   - }
353   - }
354   -
355   - function mul(a, b) {
356   - var c = 0,
357   - d = a.toString(),
358   - e = b.toString();
359   - try {
360   - c += d.split(".")[1].length;
361   - } catch (f) {
362   - }
363   - try {
364   - c += e.split(".")[1].length;
365   - } catch (f) {
366   - }
367   - return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
368   - }
369   -
370   - var numSubtr = function (a, b) {
371   - var c, d, e;
372   - try {
373   - c = a.toString().split(".")[1].length;
374   - } catch (f) {
375   - c = 0;
376   - }
377   - try {
378   - d = b.toString().split(".")[1].length;
379   - } catch (f) {
380   - d = 0;
381   - }
382   - return e = Math.pow(10, Math.max(c, d)), (a * e - b * e) / e;
383   - };
384   -
385   - var trim = function (str, is_global) {
386   - var result;
387   - result = str.replace(/(^\s+)|(\s+$)/g, "");
388   - if (is_global.toLowerCase() == "g") {
389   - result = result.replace(/\s/g, "");
390   - }
391   - return result;
392   - };
393   -
394   - var inverse = function (map) {
395   - var rs = {};
396   - for(var k in map){
397   - rs[map[k]] = k;
398   - }
399   -
400   - return rs;
401   - };
402   -
403   - var next_elem = function (clazz, e) {
404   - var ne = e.next();
405   - if(ne.length==0)
406   - return [];
407   - else if(ne.hasClass(clazz))
408   - return ne;
409   - else
410   - return next_elem(clazz, ne);
411   - };
412   -
413   - var getDisabledVal = function (f) {
414   - var rs = {};
415   - $('input,select', f).each(function () {
416   - if($(this).attr('disabled')){
417   - rs[$(this).attr('name')]=$(this).val();
418   - }
419   - });
420   - return rs;
421   - };
422   -
423   - return {
424   - reqCode80: reqCode80,
425   - groupBy: groupBy,
426   - extractJsy: extractJsy,
427   - extractLpName: extractLpName,
428   - compileTempByDom: compileTempByDom,
429   - $get: $get,
430   - $post: $post,
431   - $post_arr: $post_arr,
432   - $del: $del,
433   - get_vals: get_vals,
434   - get_keys: get_keys,
435   - get_device_tree_data: get_device_tree_data,
436   - lineAutocomplete: lineAutocomplete,
437   - personAutocomplete: personAutocomplete,
438   - carAutocomplete: carAutocomplete,
439   - init_autocomplete: init_autocomplete,
440   - init_autocom_pinyin: init_autocom_pinyin,
441   - accAdd: accAdd,
442   - numSubtr: numSubtr,
443   - trim: trim,
444   - remarksAutocomplete: remarksAutocomplete,
445   - flatpickrDateTimeConfig: flatpickrDateTimeConfig,
446   - inverse: inverse,
447   - accDiv: accDiv,
448   - mul: mul,
449   - adjustExps: adjustExps,
450   - inOutExps: inOutExps,
451   - next_elem: next_elem,
452   - getDisabledVal: getDisabledVal,
453   - extractNbbm: extractNbbm
454   -
455   - //whichTransitionEvent:whichTransitionEvent
456   - };
457   -})();
  1 +var gb_common = (function () {
  2 +
  3 + var flatpickrDateTimeConfig = {
  4 + enableTime: true,
  5 + time_24hr: true,
  6 + "locale": "zh",
  7 + onOpen: function () {
  8 + $(this.calendarContainer).addClass('showTimeInput');
  9 + }
  10 + };
  11 + var reqCode80 = {
  12 + 0xA1: '请求恢复运营',
  13 + 0xA2: '申请调档',
  14 + 0xA3: '出场请求',
  15 + 0xA5: '进场请求',
  16 + 0xA7: '加油请求',
  17 + 0x50: '车辆故障',
  18 + 0x70: '路阻报告',
  19 + 0x60: '事故报告',
  20 + 0x11: '扣证纠纷',
  21 + 0x12: '报警'
  22 + };
  23 +
  24 + var adjustExps = ['保养', '故障', '事故', '路阻', '纠纷', '缺人', '验车', '天气', '支援', '借调', '其他'];
  25 + var inOutExps = ['故障', '肇事', '纠纷', '其他'];
  26 +
  27 + var groupBy = function (list, field) {
  28 + var rs = {},
  29 + key;
  30 + $.each(list, function () {
  31 + key = this[field];
  32 + if (!rs[key])
  33 + rs[key] = [];
  34 +
  35 + rs[key].push(this);
  36 + });
  37 +
  38 + return rs;
  39 + };
  40 +
  41 + /**
  42 + * 从班次集合里提取驾驶员
  43 + * @param list
  44 + */
  45 + var extractJsy = function (list) {
  46 + var rs = {};
  47 + $.each(list, function () {
  48 + rs[this.jGh + '/' + this.jName]=1;
  49 + });
  50 + return rs;
  51 + };
  52 +
  53 + /**
  54 + * 从班次集合里提取路牌
  55 + * @param list
  56 + */
  57 + var extractLpName = function (list) {
  58 + var rs = {};
  59 + $.each(list, function () {
  60 + rs[this.lpName]=1;
  61 + });
  62 + return rs;
  63 + };
  64 +
  65 + /**
  66 + * 从班次集合里提取车辆
  67 + * @param list
  68 + */
  69 + var extractNbbm = function (list) {
  70 + var rs = {};
  71 + $.each(list, function () {
  72 + rs[this.clZbh]=1;
  73 + });
  74 + return rs;
  75 + };
  76 +
  77 + var compileTempByDom = function (dom, opts) {
  78 + var tps = {},
  79 + id;
  80 + $('script[type="text/html"]', dom).each(function () {
  81 + id = $(this).attr('id');
  82 + if (id)
  83 + tps[id] = template.compile($(this).html(), opts);
  84 + });
  85 + return tps;
  86 + };
  87 +
  88 + var $get = function (url, data, successFun) {
  89 + $.ajax({
  90 + url: url,
  91 + data: data,
  92 + complete: function (xhr, ts) {
  93 + ajaxComplete(xhr, ts, successFun);
  94 + }
  95 + });
  96 + };
  97 +
  98 + var $post = function (url, data, successFun, errFun) {
  99 + $.ajax({
  100 + url: url,
  101 + method: 'POST',
  102 + data: data,
  103 + complete: function (xhr, ts) {
  104 + ajaxComplete(xhr, ts, successFun, errFun);
  105 + }
  106 + });
  107 + };
  108 +
  109 + var $post_arr = function (url, data, successFun) {
  110 + $.ajax({
  111 + url: url,
  112 + method: 'POST',
  113 + traditional: true,
  114 + data: data,
  115 + complete: function (xhr, ts) {
  116 + ajaxComplete(xhr, ts, successFun);
  117 + }
  118 + });
  119 + };
  120 +
  121 + var $del = function (url, successFun) {
  122 + $post(url, {'_method': 'delete'}, function (rs) {
  123 + successFun && successFun(rs);
  124 + });
  125 + };
  126 +
  127 + var errorHead = '<span style="color:red;">异常:</span>';
  128 +
  129 + function successHandle(json, handle, err) {
  130 + var status = json.status;
  131 + if (status == 407) {
  132 + location.href = '/login.html';
  133 + return;
  134 + }
  135 +
  136 + if (!status) {
  137 + handle && handle(json);
  138 + return;
  139 + }
  140 +
  141 + if (status == 'ERROR'){
  142 + UIkit.modal.alert(errorHead + (json.msg ? json.msg : '未知异常'), {labels: {Ok: '确定'}});
  143 + //关闭wait窗口
  144 + hide_wait_modal();
  145 + err && err();
  146 + }
  147 + else
  148 + handle && handle(json);
  149 + }
  150 +
  151 + function ajaxComplete(xhr, ts, succ, err) {
  152 + if (ts == 'success') {
  153 + successHandle(JSON.parse(xhr.responseText), succ, err);
  154 + } else if (ts == 'error') {
  155 + UIkit.modal.alert(errorHead + xhr.responseText, {labels: {Ok: '确定'}});
  156 + //关闭wait窗口
  157 + hide_wait_modal();
  158 + err && err();
  159 + }
  160 + }
  161 +
  162 + var get_vals = function (json) {
  163 + var array = [];
  164 + for (var key in json) {
  165 + array.push(json[key]);
  166 + }
  167 +
  168 + return array;
  169 + };
  170 +
  171 + var get_keys = function (json) {
  172 + var array = [];
  173 + for (var key in json) {
  174 + array.push(key);
  175 + }
  176 + return array;
  177 + };
  178 +
  179 + var get_device_tree_data = function (allGps, idBefore) {
  180 + if (!idBefore)
  181 + idBefore = '';
  182 + var treeData = [];
  183 + //var data = groupBy(get_vals(gb_data_gps.allGps), 'lineId');
  184 + var data = groupBy(get_vals(allGps), 'lineId');
  185 + var name;
  186 + for (var code in data) {
  187 + try {
  188 + name = gb_data_basic.codeToLine[code].name;
  189 + } catch (e) {
  190 + continue;
  191 + }
  192 +
  193 + data[name] = groupBy(data[code], 'upDown');
  194 + treeData.push({
  195 + 'text': name,
  196 + 'a_attr': {'type': 'line', 'id': idBefore + 'line_' + code},
  197 + 'children': [{
  198 + 'text': '上行',
  199 + 'children': grabs(data[name][0], idBefore),
  200 + 'a_attr': {
  201 + 'type': 'route',
  202 + 'route': code + '_0',
  203 + 'id': idBefore + 'route_' + code + '_0'
  204 + }
  205 + }, {
  206 + 'text': '下行',
  207 + 'children': grabs(data[name][1], idBefore),
  208 + 'a_attr': {
  209 + 'type': 'route',
  210 + 'route': code + '_1',
  211 + 'id': idBefore + 'route_' + code + '_1'
  212 + }
  213 + }]
  214 + });
  215 + }
  216 +
  217 + function grabs(array, idBefore) {
  218 + if (!array)
  219 + return;
  220 + var rs = [];
  221 + $.each(array, function () {
  222 + rs.push({
  223 + 'text': this.nbbm,
  224 + 'a_attr': {
  225 + 'type': 'device',
  226 + 'device': this.deviceId,
  227 + 'id': idBefore + 'device_' + this.nbbm
  228 + },
  229 + 'data': {lineId: this.lineId, upDown: this.upDown},
  230 + 'icon': 'uk-icon-bus'
  231 + });
  232 + });
  233 + return rs;
  234 + }
  235 +
  236 + return treeData;
  237 + };
  238 +
  239 + var lineAutocomplete = function (element) {
  240 + //construction data
  241 + var data = [],
  242 + code2Name = gb_data_basic.lineCode2NameAll(),
  243 + name;
  244 + for (var code in code2Name) {
  245 + name = code2Name[code];
  246 + data.push({
  247 + value: name,
  248 + code: code,
  249 + fullChars: pinyin.getFullChars(name),
  250 + camelChars: pinyin.getCamelChars(name)
  251 + });
  252 + }
  253 + init_autocom_pinyin(element, data);
  254 + };
  255 +
  256 + var personAutocomplete = function (element, personMaps) {
  257 + /*var data = [],name;
  258 + for(var jobCode in personMaps){
  259 + name=personMaps[jobCode];
  260 + data.push({
  261 + value: jobCode+'/'+name,
  262 + fullChars: pinyin.getFullChars(name).toUpperCase(),
  263 + camelChars: pinyin.getCamelChars(name)
  264 + });
  265 + }*/
  266 + //init_autocom_pinyin(element, data);
  267 + init_autocom_pinyin(element, gb_data_basic.allPersonnel());
  268 + };
  269 +
  270 + var remarksAutocomplete = function (element) {
  271 + init_autocom_pinyin(element, gb_data_basic.remarksMapps());
  272 + };
  273 +
  274 + var carAutocomplete = function (element, list) {
  275 + var data = [];
  276 + $.each(list, function () {
  277 + data.push({value: this});
  278 + });
  279 + init_autocomplete(element, data);
  280 + };
  281 +
  282 + var init_autocom_pinyin = function (element, data) {
  283 + // init autocomplete
  284 + var autocomplete = UIkit.autocomplete(element, {
  285 + minLength: 1,
  286 + delay: 50,
  287 + source: function (release) {
  288 + var q = $('input', element).val().toUpperCase(),
  289 + rs = [],
  290 + count = 0;
  291 +
  292 + $.each(data, function () {
  293 + if (this.value.indexOf(q) != -1 || this.fullChars.indexOf(q) != -1 || this.camelChars.indexOf(q) != -1) {
  294 + rs.push(this);
  295 + count++;
  296 + }
  297 +
  298 + if (count >= 10)
  299 + return false;
  300 + });
  301 +
  302 + release && release(rs);
  303 + }
  304 + });
  305 + };
  306 +
  307 + var init_autocomplete = function (element, data) {
  308 + var autocomplete = UIkit.autocomplete(element, {
  309 + minLength: 1,
  310 + delay: 50,
  311 + source: function (release) {
  312 + var q = $('input', element).val().toUpperCase(),
  313 + rs = [],
  314 + count = 0;
  315 +
  316 + $.each(data, function () {
  317 + if (this.value.indexOf(q) != -1) {
  318 + rs.push(this);
  319 + count++;
  320 + }
  321 + if (count >= 10)
  322 + return false;
  323 + });
  324 + release && release(rs);
  325 + }
  326 + });
  327 + };
  328 +
  329 + var accAdd = function (a, b) {
  330 + var c, d, e;
  331 + try {
  332 + c = a.toString().split(".")[1].length;
  333 + } catch (f) {
  334 + c = 0;
  335 + }
  336 + try {
  337 + d = b.toString().split(".")[1].length;
  338 + } catch (f) {
  339 + d = 0;
  340 + }
  341 + return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
  342 + };
  343 +
  344 + function accDiv(arg1,arg2){
  345 + var t1=0,t2=0,r1,r2;
  346 + try{t1=arg1.toString().split(".")[1].length}catch(e){}
  347 + try{t2=arg2.toString().split(".")[1].length}catch(e){}
  348 + with(Math){
  349 + r1=Number(arg1.toString().replace(".",""))
  350 + r2=Number(arg2.toString().replace(".",""))
  351 + return (r1/r2)*pow(10,t2-t1);
  352 + }
  353 + }
  354 +
  355 + function mul(a, b) {
  356 + var c = 0,
  357 + d = a.toString(),
  358 + e = b.toString();
  359 + try {
  360 + c += d.split(".")[1].length;
  361 + } catch (f) {
  362 + }
  363 + try {
  364 + c += e.split(".")[1].length;
  365 + } catch (f) {
  366 + }
  367 + return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
  368 + }
  369 +
  370 + var numSubtr = function (a, b) {
  371 + var c, d, e;
  372 + try {
  373 + c = a.toString().split(".")[1].length;
  374 + } catch (f) {
  375 + c = 0;
  376 + }
  377 + try {
  378 + d = b.toString().split(".")[1].length;
  379 + } catch (f) {
  380 + d = 0;
  381 + }
  382 + return e = Math.pow(10, Math.max(c, d)), (a * e - b * e) / e;
  383 + };
  384 +
  385 + var trim = function (str, is_global) {
  386 + var result;
  387 + result = str.replace(/(^\s+)|(\s+$)/g, "");
  388 + if (is_global.toLowerCase() == "g") {
  389 + result = result.replace(/\s/g, "");
  390 + }
  391 + return result;
  392 + };
  393 +
  394 + var inverse = function (map) {
  395 + var rs = {};
  396 + for(var k in map){
  397 + rs[map[k]] = k;
  398 + }
  399 +
  400 + return rs;
  401 + };
  402 +
  403 + var next_elem = function (clazz, e) {
  404 + var ne = e.next();
  405 + if(ne.length==0)
  406 + return [];
  407 + else if(ne.hasClass(clazz))
  408 + return ne;
  409 + else
  410 + return next_elem(clazz, ne);
  411 + };
  412 +
  413 + var getDisabledVal = function (f) {
  414 + var rs = {};
  415 + $('input,select', f).each(function () {
  416 + if($(this).attr('disabled')){
  417 + rs[$(this).attr('name')]=$(this).val();
  418 + }
  419 + });
  420 + return rs;
  421 + };
  422 +
  423 + return {
  424 + reqCode80: reqCode80,
  425 + groupBy: groupBy,
  426 + extractJsy: extractJsy,
  427 + extractLpName: extractLpName,
  428 + compileTempByDom: compileTempByDom,
  429 + $get: $get,
  430 + $post: $post,
  431 + $post_arr: $post_arr,
  432 + $del: $del,
  433 + get_vals: get_vals,
  434 + get_keys: get_keys,
  435 + get_device_tree_data: get_device_tree_data,
  436 + lineAutocomplete: lineAutocomplete,
  437 + personAutocomplete: personAutocomplete,
  438 + carAutocomplete: carAutocomplete,
  439 + init_autocomplete: init_autocomplete,
  440 + init_autocom_pinyin: init_autocom_pinyin,
  441 + accAdd: accAdd,
  442 + numSubtr: numSubtr,
  443 + trim: trim,
  444 + remarksAutocomplete: remarksAutocomplete,
  445 + flatpickrDateTimeConfig: flatpickrDateTimeConfig,
  446 + inverse: inverse,
  447 + accDiv: accDiv,
  448 + mul: mul,
  449 + adjustExps: adjustExps,
  450 + inOutExps: inOutExps,
  451 + next_elem: next_elem,
  452 + getDisabledVal: getDisabledVal,
  453 + extractNbbm: extractNbbm
  454 +
  455 + //whichTransitionEvent:whichTransitionEvent
  456 + };
  457 +})();
... ...