bctz.html
12.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
<!-- 调整班次 -->
<div class="modal fade" id="tzbc_mobal" tabindex="-1" role="basic" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title">调整班次</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" action="/" method="post" id="tzbcForm" role="form">
<!-- alert-danger 组件START -->
<div class="alert alert-danger display-hide" id="tzbcAlert">
<button class="close" data-close="alert"></button>
您的输入有误,请检查下面的输入项
</div>
<div class="portlet-body">
<div class="table-container" style="margin-top: 10px">
<table class="table table-striped table-bordered table-hover table-checkable" id="datatable_bctz">
<thead>
<tr role="row" class="heading">
<th width="25%">路牌编码</th>
<th width="25%">路牌名称</th>
<th width="25%">当前班次数</th>
<th width="25%">调整班次数</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="tzbcnext">确定</button>
</div>
</div>
</div>
</div>
<script type="text/html" id="bctz_temp">
{{each list as obj i }}
<tr role="row" class="filter">
<td>
<input type="text" readonly class="form-control form-filter input-sm" name="lpno_{{i+1}}" value="{{obj.lpNo}}">
</td>
<td>
<input type="text" readonly class="form-control form-filter input-sm" name="lpname_{{i+1}}" value="{{obj.lpName}}">
</td>
<td>
<input type="text" readonly class="form-control form-filter input-sm" name="dqbc_{{i+1}}" value="{{obj.bcs}}">
</td>
<td>
<input type="number" class="form-control form-filter input-sm" name="{{i+1}}" value="{{obj.bcs}}" min="0">
</td>
</tr>
{{/each}}
{{if list.length == 0}}
<tr>
<td colspan=3><h6 class="muted">没有找到相关数据</h6></td>
</tr>
{{/if}}
</script>
<script type="text/javascript">
$('#tzbc_mobal').on('tzbcMobal.show', function(e,obj,cardata,bf,error){
if(obj != null && obj !='' && bf != null && bf!='' && cardata.length>0){
// 延迟200毫秒显示mobal
setTimeout(function(){$('#tzbc_mobal').modal({show : true,backdrop: 'static', keyboard: false});},200);
// 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。
$('#tzbc_mobal').on('show.bs.modal', function () {
// 把数据填充到模版中
var tbodyHtml = template('bctz_temp',{list:cardata});
// 把渲染好的模版html文本追加到表格中
$('#datatable_bctz tbody').html(tbodyHtml);
});
// 获取表单元素
var form = $('#tzbcForm');
// 错误提示元素
var tzbcAlert = $('#tzbcAlert', form);
// 下一步点击事件
$('#tzbcnext').on('click', function() {
form.submit();// 表单提交
});
// 表单验证
form.validate({
errorElement : 'span',
errorClass : 'help-block help-block-error',
focusInvalid : false,
rules : {
},
invalidHandler : function(event, validator) {
tzbcAlert.show();
App.scrollTo(reladplusname, -200);
},
highlight : function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight : function(element) {
$(element).closest('.form-group').removeClass('has-error');
},
success : function(label) {
label.closest('.form-group').removeClass('has-error');
},
submitHandler : function(f) {
// 1、 获取表单内容,并序列化
var params = form.serializeJSON();
var dataMap = obj.configuration.dataMap;
// 2、 调整路牌对应的班次总数
updFormParams(params);
// 3、调整班次.并重新给定班次序号和发车序号.再确定首末班车时间.最后渲染数据.
var jar = bf.tzsmbcsj01(bf.setbcsAndfcno(tzbcDate()),
obj.configuration.dataMap.smbcsjArr,
obj.configuration.dataMap.ccsjArr,
obj.configuration.dataMap.cclcArr,
obj.configuration.dataMap.qdzArr,
obj.configuration.dataMap.lbsj,dataMap);
obj.data(bf.addjcclcbc01(obj.configuration.taskTypes,jar,dataMap,
obj.configuration.stopAraay,obj.configuration.dataMap.map));
// 3、记录早操.并保存历史班次数据
obj.addHistory();
// 5、隐藏错误提示
tzbcAlert.hide();
// 6、隐藏 reladplus_mobal 弹出层
$('#tzbc_mobal').modal('hide');
}
});
/**
* @description : (TODO) 调整路牌对应的班次总数.
*
* ❀ 根据路牌对应班次的数值,把路牌对应的当前班次总数修改成调整后的班次总数,并转为数值类型以及把空值转为0.
*
* @params : [p--表单序列化对象].
*/
function updFormParams(p) {
for(var i= 0;i<cardata.length;i++) {
if(p[i+1] != undefined) {
if(p[i+1]=='')
cardata[i].tzbc = 0;
else
cardata[i].tzbc = parseInt(p[i+1]);
}
}
}
/**
* @description : (TODO)调整班次.
*
* @return : 返回一个数组.这里返回的是一个调整完班次数后的数组.
*/
function tzbcDate() {
// 1、获取当前所有的班次数.
var dr = obj.getDataArray(),
result = new Array();// 定义返回数组对象.
// 2、遍历路牌对应的班次总数.
for(var i = 0 ; i<cardata.length;i++) {
var zcbcsz = new Array(),// 定义当前路牌下的正常班次数组.
zwlbbcsz = new Array(),// 定义当前路牌下的早晚例保、吃饭班次数组.
jccbcs = 0,// 进出场班次数.这个值是为了计算总班次数时除去时间为空的班次
jccbcsz = new Array();// 定义当前路牌下的进出场班次数组.
// 3、遍历当前所有的班次数.
for(var j = 0 ;j<dr.length;j++) {
// 4、判断当前遍历的班次是否属于当前路牌对应的班次数组对象.
if(cardata[i].lpNo == dr[j].parent && dr[j].bcsj>0 ){
// 5、把当前班次添加到上序定义的不同班次数组中.
if(dr[j].bcType =='bd' || dr[j].bcType=='lc' || dr[j].bcType =='cf')
zwlbbcsz.push(dr[j]);// 添加到早晚例保、吃饭班次数组中.
else if(dr[j].bcType=='in' || dr[j].bcType =='out')
jccbcs++;
else
zcbcsz.push(dr[j]);// 添加到正常班次数组.
}
if(cardata[i].lpNo == dr[j].parent && (dr[j].bcType=='in' || dr[j].bcType =='out')) {
jccbcsz.push(dr[j]);// 添加到进出场班次数组中.
}
}
// 6、调整班次
result = result.concat(tcbcgz(bf.pxarr(zcbcsz),cardata[i].tzbc,zwlbbcsz,bf.pxarr(jccbcsz),jccbcs,cardata[i]));
}
return result;
}
/**
* @description : (TODO)
*
* @params : [ar-- 当前路牌下的正常班次数组;num--当前路牌对应的班次总数;qa--当前路牌下的早晚例保、吃饭班次数组,ja--当前路牌下的进出场班次数组]
*
* @return : 返回一个数组.这里返回一个根据班次总数调整过车班次数组
*/
function tcbcgz(ar,num,qa,ja,jccbcs,cara) {
var rsbcA = new Array();
if(ar.length>0) {
var ra_ = new Array();
var _dx = num-jccbcs;// 班次总数值 - 进出时间大于零的班次 = 正常班次数
var lastbcsjStr = ar[ar.length-1].ARRIVALTIME;// 标记调整班次之前最后一个班次的达到时间
var fcno_ = Math.abs(ar.length+jccbcs-num),// 调整班次差
tempS = '';// 标记调整班次是添加还是剔除[jq--剔除;add--添加]
var fxdm = bf.dirDmToIndex(ar[ar.length-1].xlDir);// 标记调整班次之前最后一个班次的方向
// 如果调整班次差是成对的,那么方向一致.否则改变方向
if(fcno_%2!=0)
fxdm = bf.getfx(1,fxdm);// 改变方向
// 如果当前路牌的班次总数大于等 于调整后的班次总数则截取班次,反之添加班次
if(ar.length>=_dx) {
ra_ = ar.splice(0,_dx);// 截取班次数(这里从下标0开始截取到 对应的班次总数值)
tempS = 'jq';
}else if(ar.length<_dx) {
var sh = ar[ar.length-1];
var cctag = bf.dirDmToIndex(ar[ar.length-1].xlDir);// 标记调整班次之前最后一个班次的方向
cctag = bf.getfx(1,cctag);// 改变方向
var startTime = new Date();
var strArray = sh.ARRIVALTIME.split(':');
startTime.setHours(parseInt(strArray[0]));
startTime.setMinutes(parseInt(strArray[1]));
var tzjx = bf.isgfsjd01(startTime,obj.configuration.dataMap) ? obj.configuration.dataMap.gftzsj[cctag] : obj.configuration.dataMap.dgtzsj[cctag];
startTime.setMinutes(parseInt(strArray[1]) + tzjx);
bf.addbc(obj , sh , startTime , tzjx, (sh.fcno + 1),ar, (_dx - ar.length));
ra_ = ar;
tempS = 'add';
}
// rsbcA = tzsj(ra_,qa,ja,lastbcsjStr,fcno_,tempS,fxdm);
rsbcA = ra_;
}else if(ar.length==0) {
rsbcA = bf.addlpbc(obj,bf,cara.lpNo,num);
}
return rsbcA;
}
/**
* @description : (TODO) 调整时间
*
* @params : [a1-- 当前路牌下的正常班次数组;a2--当前路牌下的早晚例保、吃饭班次数组;a3--当前路牌下的进出场班次数组]
*
* @return : 返回一个数组.这里返回的是一个调整时间后的班次数组
*/
function tzsj(a1,a2,a3,sjstr,fcno_,tempS,fxdm) {
return a1.concat(jsjclc(a1[a1.length-1].ARRIVALTIME,a2,a3,sjstr,fcno_,tempS,fxdm));
}
/**
* @description : (TODO)调整进出场、离场班次
*
* @params : [st--当前路牌最后一个班次的到达时间;ar--当前路牌下的早晚例保、吃饭班次数组,pa--当前路牌下的进出场班次数组]
*
* @return
*/
function jsjclc(st,ar,pa,sjstr,fcno_,tempS,fxdm) {
// 1、修改进出场班次.
for(var p = 0;p<pa.length;p++) {
// A)、如果当前班次的发车时间等于 在没有调整班次总数之前的最后一个班次的到达时间,则这个班次是在没有调整班次之前的那个进场班次
if(pa[p].fcsj == sjstr && pa[p].bcType =='in') {
pa[p].fcsj = st;
pa[p].bcsj = obj.configuration.dataMap.ccsjArr[fxdm];
pa[p].xlDir = obj.configuration.dataMap.dira[fxdm];
var _s = bf.getDateTime(st);
var _tt = new Date(_s);
_tt.setMinutes(_tt.getMinutes()+pa[p].bcsj);
var ddsjStr = bf.getTimeStr(_tt);
pa[p].ARRIVALTIME = ddsjStr;
if(tempS =='add')
pa[p].fcno = pa[p].fcno+fcno_;
else if(tempS =='jq')
pa[p].fcno = pa[p].fcno-fcno_;
}
// B)、剔除掉 当前班次的到达时间大于调整班次过后最后一个班次到达时间的班次
if((bf.getDateTime(pa[p].ARRIVALTIME)-bf.getDateTime(st))/60000 > pa[p].bcsj) {
console.log('{' + pa[p].lpNo + '----' + pa[p].ARRIVALTIME + '----' + st + '}');
console.log('修改进出场班次时...该班次的到达时间大于了最后一个班次的到达时间,应该剔除掉!');
pa.splice(p,1);
}
}
// 2、修改晚例保班次.
for(var i = 0 ; i<ar.length;i++) {
// A)、修改离场班次属性值
if(ar[i].bcType=='lc') {
ar[i].fcsj = ddsjStr;
ar[i].xlDir = obj.configuration.dataMap.dira[fxdm];
var _lcs = bf.getDateTime(ddsjStr);
var _lctt = new Date(_lcs);
_lctt.setMinutes(_lctt.getMinutes()+ar[i].bcsj);
ar[i].ARRIVALTIME = bf.getTimeStr(_lctt);
if(tempS =='add')
ar[i].fcno = ar[i].fcno+fcno_;
else if(tempS =='jq')
ar[i].fcno = ar[i].fcno-fcno_;
}
// B)、剔除掉 当前班次的到达时间大于调整班次过后最后一个班次到达时间的班次
if(bf.getDateTime(ar[i].ARRIVALTIME)>bf.getDateTime(st) && ar[i].bcType!='lc') {
console.log('{' + ar[i].lpNo + '----' + ar[i].ARRIVALTIME + '----' + st + '}')
console.log('修改晚例保班次时...该班次的到达时间大于了最后一个班次的到达时间,应该剔除掉!');
ar.splice(i,1);
}
}
// 3、合并进出场、例保班次,并返回.
return pa.concat(ar);
}
} else{
error.show('参数异常!','【 obj:' + obj + ' , cardata:' + cardata + ' , bf:' + bf + '】');
}
});
</script>