Commit 51aaebc0f5d0f411d899d1368f4ca54306a13db4

Authored by 王通
1 parent 69d4efef

1.烂班原因调整

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 +})();
... ...