Commit e14690ee481e3d2e872d703a255a1ed0c7637833

Authored by 游瑞烽
1 parent 9d3fbdde

时刻表echarts gantt图,和给定班型算法

Showing 27 changed files with 5592 additions and 1227 deletions
src/main/resources/static/pages/base/line/js/map-ajax-getdata.js
@@ -63,7 +63,6 @@ var MapGetAjaxData = function(){ @@ -63,7 +63,6 @@ var MapGetAjaxData = function(){
63 // 新增缓存站点保存 63 // 新增缓存站点保存
64 stationCacheSave : function(station,callback) { 64 stationCacheSave : function(station,callback) {
65 $post('/station/stationCacheSave',station,function(data) { 65 $post('/station/stationCacheSave',station,function(data) {
66 - debugger  
67 callback && callback(data); 66 callback && callback(data);
68 }); 67 });
69 }, 68 },
src/main/resources/static/pages/base/line/js/map-function.js
@@ -116,7 +116,6 @@ var PublicFunctions = function () { @@ -116,7 +116,6 @@ var PublicFunctions = function () {
116 } 116 }
117 // 路段数据长度 117 // 路段数据长度
118 var dataLen = data.length; 118 var dataLen = data.length;
119 - //debugger;  
120 // 如果大于零 119 // 如果大于零
121 if(dataLen>0) { 120 if(dataLen>0) {
122 // 编辑路段数据 121 // 编辑路段数据
src/main/resources/static/pages/base/line/list.html
@@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
49 </a> 49 </a>
50 <ul class="dropdown-menu pull-right" id="datatable_ajax_tools"> 50 <ul class="dropdown-menu pull-right" id="datatable_ajax_tools">
51 <li> 51 <li>
52 - <a href="javascript:;" data-action="0" id="createUsingSingle" class="tool-action"> <i class="fa fa-file-zip-o"></i> 生成路单文件</a> 52 + <a href="javascript:;" data-action="0" id="createUsingSingle" class="tool-action"> <i class="fa fa-file-zip-o"></i> 生成线路文件</a>
53 </li> 53 </li>
54 <li> 54 <li>
55 <a href="javascript:;" data-action="1" id="editRoute" class="tool-action"> <i class="fa fa-level-up"></i>上传GPS生成路线</a> 55 <a href="javascript:;" data-action="1" id="editRoute" class="tool-action"> <i class="fa fa-level-up"></i>上传GPS生成路线</a>
src/main/resources/static/pages/base/stationroute/edit_select.html
@@ -112,7 +112,7 @@ $(&#39;#edit_select_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,drw,ajaxd,ed @@ -112,7 +112,7 @@ $(&#39;#edit_select_mobal&#39;).on(&#39;editSelectMobal_show&#39;, function(e, map_,drw,ajaxd,ed
112 var params = form.serializeJSON(); 112 var params = form.serializeJSON();
113 // 站点名称 113 // 站点名称
114 var editStationName = params.stationNamebootbox; 114 var editStationName = params.stationNamebootbox;
115 - 115 + // TODO(点击查询位置后绘画效果失败,待修改)
116 if(params.editselect==0){ 116 if(params.editselect==0){
117 editStationObj.setEitdStation(Station); 117 editStationObj.setEitdStation(Station);
118 editStationObj.setEitdStationName(editStationName); 118 editStationObj.setEitdStationName(editStationName);
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
@@ -295,7 +295,7 @@ window.WorldsBMap = function () { @@ -295,7 +295,7 @@ window.WorldsBMap = function () {
295 localSearch.search(Address); 295 localSearch.search(Address);
296 }, 296 },
297 297
298 - // 编辑站点 298 + // 站点编辑
299 editShapes: function (obj) { 299 editShapes: function (obj) {
300 // 关闭信息窗口 300 // 关闭信息窗口
301 mapBValue.closeInfoWindow(); 301 mapBValue.closeInfoWindow();
@@ -788,7 +788,7 @@ window.WorldsBMap = function () { @@ -788,7 +788,7 @@ window.WorldsBMap = function () {
788 } 788 }
789 } 789 }
790 }, 790 },
791 - // 编辑路段 791 + // 路段编辑
792 editSection : function(sectionRoudId) { 792 editSection : function(sectionRoudId) {
793 layer.confirm('进入编辑状态', { 793 layer.confirm('进入编辑状态', {
794 btn : [ '确定','返回' ], icon: 3, title:'提示' 794 btn : [ '确定','返回' ], icon: 3, title:'提示'
src/main/resources/static/pages/base/timesmodel/css/index.css
@@ -2,6 +2,27 @@ body { @@ -2,6 +2,27 @@ body {
2 overflow: hidden; 2 overflow: hidden;
3 } 3 }
4 4
  5 +.bc-adjust-list-input {
  6 + /*border-style: solid;*/
  7 + /*border-width: 2px;*/
  8 + /*border-color: #f1586f;*/
  9 + width: 600px;
  10 + height: 38px;
  11 + /*color: #12cada !important;*/
  12 +
  13 +}
  14 +
  15 +.bc-adjust-list {
  16 + right: 500px;
  17 + position: absolute;
  18 + border: none;
  19 + width: 709px;
  20 + height: 40px;
  21 + border-right-color: #0d638f;
  22 + padding: 4px 0 0 0;
  23 + z-index: 9999;
  24 +}
  25 +
5 .relationshipGraph-tip { 26 .relationshipGraph-tip {
6 border-radius: 6px !important; 27 border-radius: 6px !important;
7 background: #192838 !important; 28 background: #192838 !important;
@@ -108,7 +129,7 @@ text.alert-danger { @@ -108,7 +129,7 @@ text.alert-danger {
108 /* fill: #3b414e; */ 129 /* fill: #3b414e; */
109 fill: #31394a; 130 fill: #31394a;
110 cursor: default; 131 cursor: default;
111 - stroke: #ffffff 132 + stroke: #ffffff;
112 stroke-width: 1px; 133 stroke-width: 1px;
113 pointer-events: all; 134 pointer-events: all;
114 rx:4; 135 rx:4;
@@ -117,9 +138,27 @@ text.alert-danger { @@ -117,9 +138,27 @@ text.alert-danger {
117 138
118 139
119 .ganttSvgContainer { 140 .ganttSvgContainer {
120 - height: 400px; 141 + height: 720px;
121 overflow: auto; 142 overflow: auto;
122 - position: relative; 143 + /*position: relative;*/
  144 +}
  145 +
  146 +#bcContainer {
  147 + width: 100%;
  148 + min-height: 100%;
  149 + top: -160px;
  150 + /*margin: 0px -100px 0px 0px;*/
  151 +}
  152 +#upDownContainer {
  153 + width: 100%;
  154 + height: 350px;
  155 + /*margin: 10px 0px 0px 10px;*/
  156 +}
  157 +
  158 +.gtt {
  159 + height: 720px;
  160 + width: 100%;
  161 + overflow-y: auto;
123 } 162 }
124 163
125 .svg-chart { 164 .svg-chart {
@@ -198,7 +237,7 @@ text.alert-danger { @@ -198,7 +237,7 @@ text.alert-danger {
198 237
199 238
200 .ganttSvgContainer::-webkit-scrollbar { 239 .ganttSvgContainer::-webkit-scrollbar {
201 -width:6px; 240 +width:12px;
202 height:6px; 241 height:6px;
203 } 242 }
204 .ganttSvgContainer::-webkit-scrollbar-button { 243 .ganttSvgContainer::-webkit-scrollbar-button {
@@ -224,4 +263,33 @@ background:rgba(255, 255, 255, 0); @@ -224,4 +263,33 @@ background:rgba(255, 255, 255, 0);
224 .ganttSvgContainer::-webkit-scrollbar-resizer { 263 .ganttSvgContainer::-webkit-scrollbar-resizer {
225 /* background:#FF0BEE; */ 264 /* background:#FF0BEE; */
226 background:rgba(255, 255, 255, 0); 265 background:rgba(255, 255, 255, 0);
  266 +}
  267 +
  268 +.gtt::-webkit-scrollbar {
  269 +width:12px;
  270 +height:6px;
  271 +}
  272 +.gtt::-webkit-scrollbar-button {
  273 +/* background-color:#FF7677; */
  274 +background:rgba(255, 255, 255, 0);
  275 +}
  276 +.gtt::-webkit-scrollbar-track {
  277 +/* background:#FF66D5; */
  278 +background:rgba(255, 255, 255, 0);
  279 +}
  280 +.gtt::-webkit-scrollbar-track-piece {
  281 +/* background:#ff0000; */
  282 +background:rgba(255, 255, 255, 0);
  283 +}
  284 +.gtt::-webkit-scrollbar-thumb{
  285 +background:rgba(197, 196, 196, 0.81);
  286 +border-radius:10px !important;
  287 +}
  288 +.gtt::-webkit-scrollbar-corner {
  289 +/* background:#82AFFF; */
  290 +background:rgba(255, 255, 255, 0);
  291 +}
  292 +.gtt::-webkit-scrollbar-resizer {
  293 +/* background:#FF0BEE; */
  294 +background:rgba(255, 255, 255, 0);
227 } 295 }
228 \ No newline at end of file 296 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/fragments/addbc.html 0 → 100644
  1 +<!-- 添加班次参数 -->
  2 +<div class="modal fade" id="addBc_mobal" tabindex="-1" role="basic" aria-hidden="true">
  3 + <div class="modal-dialog">
  4 + <div class="modal-content" style="width: 900px;">
  5 + <div class="modal-header">
  6 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  7 + <h4 class="modal-title">添加班次参数</h4>
  8 + </div>
  9 + <div class="modal-body">
  10 + <form class="form-horizontal" action="/" method="post" id="addBc" role="form">
  11 + <!-- alert-danger 组件START -->
  12 + <div class="alert alert-danger display-hide" id="addBcName">
  13 + <button class="close" data-close="alert"></button>
  14 + 您的输入有误,请检查下面的输入项
  15 + </div>
  16 + <input id="qdzInput" class="hidden" />
  17 + <input id="zdzInput" class="hidden" />
  18 +
  19 + <!-- 表单分组组件 form-group START -->
  20 + <div class="form-group">
  21 + <!-- 路牌 (* 必填项) START -->
  22 + <div class="col-md-6">
  23 + <label class="control-label col-md-6">
  24 + <span class="required"> * </span>所属路牌&nbsp;&nbsp;&nbsp;:
  25 + </label>
  26 + <div class="col-md-6">
  27 + <select type="text" name="lpName" class="form-control" id="lpNameSelect" >
  28 + </select>
  29 + </div>
  30 + </div>
  31 + <!-- 路牌 (* 必填项) END -->
  32 +
  33 + <!-- 发车顺序号 (* 必填项) START -->
  34 + <div class="col-md-6">
  35 + <label class="control-label col-md-6">
  36 + <span class="required"> * </span> 发车顺序号:
  37 + </label>
  38 + <div class="col-md-6">
  39 + <input type="text" class="form-control" name="fcno" id="fcnoInput" placeholder="发车顺序号">
  40 + </div>
  41 + </div>
  42 + </div>
  43 + <!-- 表单分组组件 form-group END -->
  44 +
  45 + <!-- 表单分组组件 form-group START -->
  46 + <!--<div class="form-group">
  47 + &lt;!&ndash; 对应班次数 (* 必填项) START &ndash;&gt;
  48 + <div class="col-md-6">
  49 + <label class="control-label col-md-6">
  50 + <span class="required"> * </span> 添加类型&nbsp;&nbsp;&nbsp;:
  51 + </label>
  52 + <div class="col-md-6">
  53 + <select name="addNum" class="form-control" id="addNumSelect">
  54 + &lt;!&ndash;<option value="">&#45;&#45; 请选择添加类型 &#45;&#45;</option>&ndash;&gt;
  55 + <option value="1">单个班次</option>
  56 + <option value="2">一圈(上下行都有)</option>
  57 + </select>
  58 + </div>
  59 + </div>
  60 + &lt;!&ndash; 对应班次数 (* 必填项) END &ndash;&gt;
  61 +
  62 + &lt;!&ndash; 方向 (* 必填项) START &ndash;&gt;
  63 + <div class="col-md-6">
  64 + <label class="control-label col-md-6">
  65 + <span class="required"> * </span> 方向&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  66 + </label>
  67 + <div class="col-md-6">
  68 + &lt;!&ndash; <input type="text" class="form-control" name="dic" id="dicInput" placeholder="方向"> &ndash;&gt;
  69 + <select name="dir" class="form-control" id="dirSelect">
  70 + <option value="">&#45;&#45; 请选择方向 &#45;&#45;</option>
  71 + <option value="relationshipGraph-up">上行</option>
  72 + <option value="relationshipGraph-down">下行</option>
  73 + </select>
  74 + </div>
  75 + </div>
  76 + &lt;!&ndash; 方向 (* 必填项) END &ndash;&gt;
  77 + </div>-->
  78 + <!-- 表单分组组件 form-group END -->
  79 +
  80 + <!-- 表单分组组件 form-group START -->
  81 + <div class="form-group">
  82 + <!-- 发车时间 (* 必填项) START -->
  83 + <div class="col-md-6">
  84 + <label class="control-label col-md-6">
  85 + <span class="required"> * </span> 发车时间&nbsp;&nbsp;&nbsp;:
  86 + </label>
  87 + <div class="col-md-6">
  88 + <input type="text" class="form-control" name="fcsj" id="fcsjInput" placeholder="发车时间">
  89 + </div>
  90 + </div>
  91 + <!-- 发车时间 (* 必填项) END -->
  92 +
  93 + <!-- 班次类型 (* 必填项) START -->
  94 + <div class="col-md-6">
  95 + <label class="control-label col-md-6">
  96 + <span class="required"> * </span> 班次类型&nbsp;&nbsp;&nbsp;:
  97 + </label>
  98 + <div class="col-md-6">
  99 + <select name="bcType" class="form-control" id="bcTypeSelect">
  100 + <option value="">-- 请选择类型 --</option>
  101 + <option value="bd">早例保</option>
  102 + <option value="out">出场</option>
  103 + <option value="normal">正常</option>
  104 + <option value="cf">吃饭</option>
  105 + <option value="in">进场</option>
  106 + <option value="lc">晚例保</option>
  107 + <option value="major">放大站</option>
  108 + <option value="venting">直放</option>
  109 + <option value="region">区间</option>
  110 + </select>
  111 + </div>
  112 + </div>
  113 + <!-- 班次类型 (* 必填项) END -->
  114 + </div>
  115 + <!-- 表单分组组件 form-group END -->
  116 +
  117 + <!-- 表单分组组件 form-group START -->
  118 + <div class="form-group">
  119 + <!-- 班次历时 (* 必填项) START -->
  120 + <div class="col-md-6">
  121 + <label class="control-label col-md-6">
  122 + <span class="required"> * </span> 班次历时&nbsp;&nbsp;&nbsp;:
  123 + </label>
  124 + <div class="col-md-6">
  125 + <input type="text" class="form-control" name="bcsj" id="bcsjInput" placeholder="班次历时">
  126 + </div>
  127 + </div>
  128 + <!-- 班次历时 (* 必填项) END -->
  129 +
  130 + <!-- 是否分班 START (因为options值基本固定,所以在页面固定。【以后可以根具需求修改成使用字典表实现】) -->
  131 + <div class="col-md-6">
  132 + <label class="control-label col-md-6">
  133 + <span class="required"> * </span> 是否分班&nbsp;&nbsp;&nbsp;:
  134 + </label>
  135 + <div class="col-md-6">
  136 + <select name="isfb" class="form-control" id="isfbSelect">
  137 + <option value=0>否</option>
  138 + <option value=1>是</option>
  139 + </select>
  140 + </div>
  141 + </div>
  142 + <!-- 是否分班 END -->
  143 + </div>
  144 + <!-- 表单分组组件 form-group END -->
  145 + </form>
  146 + </div>
  147 + <div class="modal-footer">
  148 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
  149 + <button type="button" class="btn btn-primary" id="addBcnext">确定</button>
  150 + </div>
  151 + </div>
  152 + </div>
  153 +</div>
  154 +<script type="text/javascript">
  155 +/**
  156 + * @description : (TODO) 触发被选元素的指定事件类型。
  157 + *
  158 + * @params [obj--图形对象;bf--函数集合对象;cardata--路牌对应的Y轴坐标数组]
  159 + *
  160 + * @status OK.
  161 + */
  162 +$('#addBc_mobal').on('addBcMobal.show', function(e,lpData,lpDataCount,echartsDrawGTT){
  163 + // 延迟200毫秒执行.
  164 + setTimeout(function(){
  165 + // 加载显示mobal
  166 + $('#addBc_mobal').modal({show : true,backdrop: 'static', keyboard: false});
  167 + },200);
  168 + $('#fcsjInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  169 + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)
  170 + $('#addBc_mobal').on('show.bs.modal', function () {
  171 + // 初始化路牌下拉选择框.
  172 + var options = '<option value="">-- 请选择路牌 --</option>';
  173 + for(var i=lpData.length-1, len=lpData.length; i>=0; i--) {
  174 + if( lpData[i] != null) {
  175 + options += '<option value="'+lpData[i]+'">'+lpData[i]+'</option>';
  176 + }
  177 + }
  178 + $('#lpNameSelect').html(options);
  179 + });
  180 + var historyData = echartsDrawGTT.getHistoryData(),
  181 + _keyIndex = echartsDrawGTT.get_keyIndex(),
  182 + data = $.extend(true, [], data, historyData[_keyIndex]),
  183 + Stations = {};
  184 +
  185 + // 获取表单元素
  186 + var form = $('#addBc');
  187 + // 错误提示元素
  188 + var addBcName = $('#addBcName', form);
  189 + // 下一步点击事件
  190 + $('#addBcnext').on('click', function() {
  191 + form.submit();// 表单提交
  192 + });
  193 + // 表单验证
  194 + form.validate({
  195 + errorElement : 'span',
  196 + errorClass : 'help-block help-block-error',
  197 + focusInvalid : false,
  198 + rules : {
  199 + 'lpName' : {required : true},
  200 + 'fcno' : {required : true},
  201 + // 'dir' : {required : true},
  202 + 'fcsj' : {required : true},
  203 + 'bcType' : {required : true},
  204 + 'bcsj' : {number : true,required : true},
  205 + 'isfb' : {required : true}
  206 + },
  207 + invalidHandler : function(event, validator) {
  208 + addBcName.show();
  209 + App.scrollTo(addBcName, -200);
  210 + },
  211 + highlight : function(element) {
  212 + $(element).closest('.form-group').addClass('has-error');
  213 + },
  214 + unhighlight : function(element) {
  215 + $(element).closest('.form-group').removeClass('has-error');
  216 + },
  217 + success : function(label) {
  218 + label.closest('.form-group').removeClass('has-error');
  219 + },
  220 + submitHandler : function(f) {
  221 + // 获取表单内容,并序列化.
  222 + var params = form.serializeJSON();
  223 + var bcObj, index, prevBcObj, nextBcObj = null, type=true;
  224 + var fcsj = Date.parse(DateTimeTool.getDateTime(params.fcsj));
  225 + var ARRIVALTIME = fcsj + parseInt(params.bcsj)*60000 ;
  226 +
  227 + for(var i=0; i<data.length-1; i++) {
  228 + if(data[i].value[0] == params.lpName) {
  229 + if(data[i].value[7] < params.fcno) {
  230 + prevBcObj = data[i];
  231 + bcObj = $.extend(true, {}, bcObj, data[i]);
  232 + index = i+1;
  233 + } else {
  234 + if(type) {
  235 + type = false;
  236 + nextBcObj = data[i];
  237 + }
  238 + data[i].value[7] += 1;
  239 + }
  240 + }
  241 + }
  242 + bcObj.value[1] = fcsj;
  243 + bcObj.value[2] = ARRIVALTIME;
  244 + bcObj.value[3] = params.bcsj*60000;
  245 + // bcObj.value[4] = lpNo;
  246 + bcObj.value[6] = params.bcType;
  247 + bcObj.value[7] = parseInt(params.fcno);
  248 + var dir = bcObj.value[8] == 1 ? 0:1;
  249 + bcObj.value[8] = dir;
  250 + bcObj.itemStyle.normal.color = dir==0?"#ff2949":"#518fe3";
  251 + // 起终点互换
  252 + var station = bcObj.value[13];
  253 + bcObj.value[13] = bcObj.value[14];
  254 + bcObj.value[14] = station;
  255 + bcObj.value[16] = parseInt(params.isfb);
  256 + data.splice(index, 0 , bcObj);
  257 +
  258 + if(nextBcObj != null && (nextBcObj.value[1] < ARRIVALTIME || prevBcObj.value[2] > fcsj)){
  259 + layer.confirm('添加的班次与前后班次有时间冲突,是否添加?', {
  260 + btn : [ '添加','取消' ], icon: 3, title:'提示'
  261 + }, function(){
  262 + echartsDrawGTT.init(data,false,true);
  263 + echartsDrawGTT.refreshDrag();
  264 + layer.msg('路牌:'+params.lpName+' fnco:'+params.fcno+' 班次添加成功,注意修改冲突班次!');
  265 + });
  266 + } else {
  267 + echartsDrawGTT.init(data,false,true);
  268 + echartsDrawGTT.refreshDrag();
  269 + layer.msg('路牌:'+params.lpName+' fnco:'+params.fcno+' 班次添加成功!');
  270 + }
  271 + $('#addBc_mobal').modal('hide');
  272 + }
  273 + });
  274 +});
  275 +</script>
0 \ No newline at end of file 276 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/fragments/addlp.html 0 → 100644
  1 +<!-- 添加路牌名称 -->
  2 +<div class="modal fade" id="addlp_mobal" tabindex="-1" role="basic" aria-hidden="true" style="top:30%">
  3 + <div class="modal-dialog">
  4 + <div class="modal-content">
  5 + <div class="modal-header">
  6 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  7 + <h4 class="modal-title">添加路牌</h4>
  8 + </div>
  9 + <div class="modal-body">
  10 + <form class="form-horizontal" action="/" method="post" id="addlpForm" role="form">
  11 + <!-- 路牌名字 -->
  12 + <div class="form-body">
  13 + <div class="form-group">
  14 + <label class="control-label col-md-3">
  15 + <span class="required"> * </span>路牌名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  16 + </label>
  17 + <div class="col-md-6">
  18 + <input type="text" name="lpName" class="form-control" id="lpNameInput" value="111" style="width:100%" />
  19 + </div>
  20 + </div>
  21 + </div>
  22 + </form>
  23 + </div>
  24 + <div class="modal-footer">
  25 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
  26 + <button type="button" class="btn btn-primary" id="addlpnext">确定</button>
  27 + </div>
  28 + </div>
  29 + </div>
  30 +</div>
  31 +<script type="text/javascript">
  32 +$('#addlp_mobal').on('addlpMobal.show', function(e,lpData,echartsDrawGTT){
  33 + var lpDataCount = echartsDrawGTT.getLpDataCount();
  34 + var lpCount = lpDataCount[lpData[0]][2] + 1;
  35 + // 显示mobal
  36 + $('#addlp_mobal').modal({show : true,backdrop: 'static', keyboard: false});
  37 + // 添加路牌规则
  38 + $('#lpNameInput').val("_"+lpCount);
  39 + // 获取表单元素
  40 + var form = $('#addlpForm');
  41 + // 下一步点击事件
  42 + $('#addlpnext').on('click', function() {
  43 + form.submit();// 表单提交
  44 + });
  45 + // 表单验证
  46 + form.validate({
  47 + errorElement : 'span',
  48 + errorClass : 'help-block help-block-error',
  49 + focusInvalid : false,
  50 + rules : {
  51 + 'lpName': { isTrue : true}
  52 + },
  53 + submitHandler : function(f) {
  54 + // 1、 获取表单内容,并序列化
  55 + var params = form.serializeJSON();
  56 + // 关闭弹出层.
  57 + layer.closeAll();
  58 + var _keyIndex = echartsDrawGTT.get_keyIndex();
  59 + var historyData = echartsDrawGTT.getHistoryData();
  60 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  61 + lpData.splice(0,0,params.lpName);
  62 + lpDataCount[lpData[0]] = [0,0,lpCount];
  63 + echartsDrawGTT.setLpDataCount(lpDataCount);
  64 + echartsDrawGTT.init(data,false,true,lpData);
  65 + echartsDrawGTT.refreshDrag();
  66 + $('#addlp_mobal').modal('hide');
  67 + layer.msg('添加路牌【'+ params.lpName +'】成功!');
  68 + }
  69 + });
  70 + $.validator.addMethod("isTrue", function(value,element) {
  71 + var tel = false;
  72 + var lpName = value.split("_");
  73 + if(lpName[lpName.length-1] == lpCount){
  74 + tel = true;
  75 + return tel;
  76 + }
  77 + return tel;
  78 + },'路牌名字必须以:_'+lpCount+' 结尾');
  79 +});
  80 +</script>
0 \ No newline at end of file 81 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/fragments/bcadjust.html 0 → 100644
  1 +<!-- 路牌班次调整 -->
  2 +<div class="modal fade" id="bcadjust_mobal" tabindex="-1" role="basic" aria-hidden="true" style="top:30%">
  3 + <div class="modal-dialog">
  4 + <div class="modal-content">
  5 + <div class="modal-header">
  6 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  7 + <h4 class="modal-title">班次调整</h4>
  8 + </div>
  9 + <div class="modal-body">
  10 + <form class="form-horizontal" action="/" method="post" id="bcadjustForm" role="form">
  11 + <!-- alert-danger 组件START -->
  12 + <div class="alert alert-danger display-hide" id="bcadjustAlert">
  13 + <button class="close" data-close="alert"></button>
  14 + 请选择路牌
  15 + </div>
  16 + <!-- 路牌名字 -->
  17 + <div class="form-body">
  18 + <div class="form-group">
  19 + <label class="control-label col-md-4">
  20 + <span class="required"> * </span>选择目标路牌&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  21 + </label>
  22 + <div class="col-md-6">
  23 + <select type="text" name="lpName" class="form-control" id="lpNameSelect" style="width:100%"></select>
  24 + </div>
  25 + </div>
  26 + </div>
  27 + </form>
  28 + </div>
  29 + <div class="modal-footer">
  30 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
  31 + <button type="button" class="btn btn-primary" id="bcadjustnext">确定</button>
  32 + </div>
  33 + </div>
  34 + </div>
  35 +</div>
  36 +<script type="text/javascript">
  37 +$('#bcadjust_mobal').on('bcadjustMobal.show', function(e,lpData,echartsDrawGTT){
  38 + setTimeout(function(){
  39 + // 加载延迟200毫秒显示mobal
  40 + $('#bcadjust_mobal').modal({show : true,backdrop: 'static', keyboard: false});
  41 + },200);
  42 + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。
  43 + $('#bcadjust_mobal').on('show.bs.modal', function () {
  44 + var len_ = lpData.length,paramsD = new Array();
  45 + if(len_>0) {
  46 + var options = '<option value="">-- 请选择路牌 --</option>';
  47 + for(var i=lpData.length-1, len=lpData.length; i>=0; i--) {
  48 + if( lpData[i] != null) {
  49 + options += '<option value="'+lpData[i]+'">'+lpData[i]+'</option>';
  50 + }
  51 + }
  52 + $('#lpNameSelect').html(options);
  53 + }
  54 + });
  55 + // 获取表单元素
  56 + var form = $('#bcadjustForm');
  57 + // 错误提示元素
  58 + var bcadjustAlert = $('#bcadjustAlert', form);
  59 + // 下一步点击事件
  60 + $('#bcadjustnext').on('click', function() {
  61 + form.submit();// 表单提交
  62 + });
  63 + // 表单验证
  64 + form.validate({
  65 + errorElement : 'span',
  66 + errorClass : 'help-block help-block-error',
  67 + focusInvalid : false,
  68 + rules : {
  69 + 'lpName': { isSelect : true}
  70 + },
  71 + invalidHandler : function(event, validator) {
  72 + bcadjustAlert.show();
  73 + App.scrollTo(bcadjustAlert, -200);
  74 + },
  75 + highlight : function(element) {
  76 + $(element).closest('.form-group').addClass('has-error');
  77 + },
  78 + unhighlight : function(element) {
  79 + $(element).closest('.form-group').removeClass('has-error');
  80 + },
  81 + success : function(label) {
  82 + label.closest('.form-group').removeClass('has-error');
  83 + },
  84 + submitHandler : function(f) {
  85 + // 1、 获取表单内容,并序列化
  86 + var params = form.serializeJSON();
  87 + echartsDrawGTT.refreshBC(params.lpName);
  88 + var _keyIndex = echartsDrawGTT.get_keyIndex();
  89 + var historyData = echartsDrawGTT.getHistoryData();
  90 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  91 + var bcList = [];
  92 + for(var i=0, len=data.length; i<len; i++ ){
  93 + if(data[i] && data[i].value[0] != params.lpName){
  94 + bcList.push({'id':i, 'text':data[i].value[0]+' fcno:'+data[i].value[7]});
  95 + }
  96 + }
  97 + $('.bc-adjust-list #bcAdjustName').val(params.lpName);
  98 + $('#bcAdjustList').empty();
  99 + $('#bcAdjustList').select2({
  100 + placeholder : '输入路牌或fcno',
  101 + tags : true,
  102 + multiple : true,
  103 + height: '40px',
  104 + // maximumSelectionLength : 30,
  105 + allowClear : true,
  106 + language: "zh-CN",
  107 + data : bcList
  108 + });
  109 + $('#bcadjust_mobal').modal('hide');
  110 + $('.bc-adjust-list').removeClass('hidden');
  111 + layer.open({title:'操作提示',
  112 + content:'进入班次调整,可单击班次,或者在出现的选着框中选择,提交会将班次拉到目标路牌!'});
  113 + }
  114 + });
  115 + $.validator.addMethod("isSelect", function(value,element) {
  116 + var tel = false;
  117 + var lpName = $('#lpNameSelect').val();
  118 + if(lpName != '请选择...'){
  119 + tel = true;
  120 + return tel;
  121 + }
  122 + return tel;
  123 + },'');
  124 +});
  125 +</script>
0 \ No newline at end of file 126 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/fragments/deletelp.html 0 → 100644
  1 +<!-- 删除路牌名称 -->
  2 +<div class="modal fade" id="deletelp_mobal" tabindex="-1" role="basic" aria-hidden="true" style="top:30%">
  3 + <div class="modal-dialog">
  4 + <div class="modal-content">
  5 + <div class="modal-header">
  6 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  7 + <h4 class="modal-title">删除路牌</h4>
  8 + </div>
  9 + <div class="modal-body">
  10 + <form class="form-horizontal" action="/" method="post" id="deletelpForm" role="form">
  11 + <!-- alert-danger 组件START -->
  12 + <div class="alert alert-danger display-hide" id="deletelpAlert">
  13 + <button class="close" data-close="alert"></button>
  14 + 请选择路牌
  15 + </div>
  16 + <!-- 路牌名字 -->
  17 + <div class="form-body">
  18 + <div class="form-group">
  19 + <label class="control-label col-md-3">
  20 + <span class="required"> * </span>选择路牌&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:
  21 + </label>
  22 + <div class="col-md-6">
  23 + <select type="text" name="lpName" class="form-control" id="lpNameSelect" style="width:100%"></select>
  24 + </div>
  25 + </div>
  26 + </div>
  27 + </form>
  28 + </div>
  29 + <div class="modal-footer">
  30 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
  31 + <button type="button" class="btn btn-primary" id="deletelpnext">确定</button>
  32 + </div>
  33 + </div>
  34 + </div>
  35 +</div>
  36 +<script type="text/javascript">
  37 +$('#deletelp_mobal').on('deletelpMobal.show', function(e,lpData,echartsDrawGTT){
  38 + setTimeout(function(){
  39 + // 加载延迟200毫秒显示mobal
  40 + $('#deletelp_mobal').modal({show : true,backdrop: 'static', keyboard: false});
  41 + },200);
  42 + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。
  43 + $('#deletelp_mobal').on('show.bs.modal', function () {
  44 + var len_ = lpData.length,paramsD = new Array();
  45 + if(len_>0) {
  46 + var options = '<option value="">-- 请选择路牌 --</option>';
  47 + for(var i=lpData.length-1, len=lpData.length; i>=0; i--) {
  48 + if( lpData[i] != null) {
  49 + options += '<option value="'+lpData[i]+'">'+lpData[i]+'</option>';
  50 + }
  51 + }
  52 + $('#lpNameSelect').html(options);
  53 + }
  54 + });
  55 + // 获取表单元素
  56 + var form = $('#deletelpForm');
  57 + // 错误提示元素
  58 + var deletelpAlert = $('#deletelpAlert', form);
  59 + // 下一步点击事件
  60 + $('#deletelpnext').on('click', function() {
  61 + form.submit();// 表单提交
  62 + });
  63 + // 表单验证
  64 + form.validate({
  65 + errorElement : 'span',
  66 + errorClass : 'help-block help-block-error',
  67 + focusInvalid : false,
  68 + rules : {
  69 + 'lpName': { isSelect : true}
  70 + },
  71 + invalidHandler : function(event, validator) {
  72 + deletelpAlert.show();
  73 + App.scrollTo(deletelpAlert, -200);
  74 + },
  75 + highlight : function(element) {
  76 + $(element).closest('.form-group').addClass('has-error');
  77 + },
  78 + unhighlight : function(element) {
  79 + $(element).closest('.form-group').removeClass('has-error');
  80 + },
  81 + success : function(label) {
  82 + label.closest('.form-group').removeClass('has-error');
  83 + },
  84 + submitHandler : function(f) {
  85 + // 1、 获取表单内容,并序列化
  86 + var params = form.serializeJSON();
  87 + layer.confirm('您确定要删除路牌【'+ params.lpName +'】以及路牌上的班次吗?'+
  88 + '</br>【注意】:如需要撤销当前操作,您可以在系统工具下拉选择点击【撤销按钮】进行恢复.', {
  89 + btn : [ '确认提示并提交', '取消' ]
  90 + }, function() {
  91 + // 关闭弹出层.
  92 + layer.closeAll();
  93 + var _keyIndex = echartsDrawGTT.get_keyIndex();
  94 + var historyData = echartsDrawGTT.getHistoryData();
  95 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  96 + for(var i=0, len=data.length; i<len; i++ ){
  97 + if(data[i] && data[i].value[0] == params.lpName){
  98 + data.splice(i,1);
  99 + i--;
  100 + }
  101 + }
  102 + $.each(lpData, function (index, lp) {
  103 + if(lp == params.lpName)
  104 + lpData.splice(index,1);
  105 + });
  106 + echartsDrawGTT.setLpData(lpData);
  107 + echartsDrawGTT.init(data,false,true);
  108 + echartsDrawGTT.refreshDrag();
  109 + $('#deletelp_mobal').modal('hide');
  110 + layer.msg('删除路牌【'+ params.lpName +'】成功!');
  111 + });
  112 + }
  113 + });
  114 + $.validator.addMethod("isSelect", function(value,element) {
  115 + var tel = false;
  116 + var lpName = $('#lpNameSelect').val();
  117 + if(lpName != '请选择...'){
  118 + tel = true;
  119 + return tel;
  120 + }
  121 + return tel;
  122 + },'');
  123 +});
  124 +</script>
0 \ No newline at end of file 125 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/fragments/editbc.html 0 → 100644
  1 +<!-- 修改班次参数 -->
  2 +<div class="modal fade" id="editBc_mobal" tabindex="-1" role="basic" aria-hidden="true">
  3 + <div class="modal-dialog">
  4 + <div class="modal-content" style="width: 900px;">
  5 + <div class="modal-header">
  6 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  7 + <h4 class="modal-title">修改班次参数</h4>
  8 + </div>
  9 + <div class="modal-body">
  10 + <form class="form-horizontal" action="/" method="post" id="editBc" role="form">
  11 + <!-- alert-danger 组件START -->
  12 + <div class="alert alert-danger display-hide" id="editBcName">
  13 + <button class="close" data-close="alert"></button>
  14 + 您的输入有误,请检查下面的输入项
  15 + </div>
  16 + <input id="qdzInput" class="hidden" />
  17 + <input id="zdzInput" class="hidden" />
  18 +
  19 + <!-- 表单分组组件 form-group START -->
  20 + <div class="form-group">
  21 + <!-- 路牌 (* 必填项) START -->
  22 + <div class="col-md-6">
  23 + <label class="control-label col-md-6">
  24 + <span class="required"> * </span>所属路牌&nbsp;&nbsp;&nbsp;:
  25 + </label>
  26 + <div class="col-md-6">
  27 + <input type="text" name="lpName" class="form-control" id="lpNameInput" readonly="readonly">
  28 + </div>
  29 + </div>
  30 + <!-- 路牌 (* 必填项) END -->
  31 +
  32 + <!-- 发车顺序号 (* 必填项) START -->
  33 + <div class="col-md-6">
  34 + <label class="control-label col-md-6">
  35 + <span class="required"> * </span> 发车顺序号:
  36 + </label>
  37 + <div class="col-md-6">
  38 + <input type="text" class="form-control" name="fcno" id="fcnoInput" placeholder="发车顺序号" readonly="readonly">
  39 + </div>
  40 + </div>
  41 + </div>
  42 + <!-- 表单分组组件 form-group END -->
  43 + <!-- 表单分组组件 form-group START -->
  44 + <div class="form-group">
  45 + <!-- 发车时间 (* 必填项) START -->
  46 + <div class="col-md-6">
  47 + <label class="control-label col-md-6">
  48 + <span class="required"> * </span> 发车时间&nbsp;&nbsp;&nbsp;:
  49 + </label>
  50 + <div class="col-md-6">
  51 + <input type="text" class="form-control" name="fcsj" id="fcsjInput" placeholder="发车时间">
  52 + </div>
  53 + </div>
  54 + <!-- 发车时间 (* 必填项) END -->
  55 +
  56 + <!-- 班次类型 (* 必填项) START -->
  57 + <div class="col-md-6">
  58 + <label class="control-label col-md-6">
  59 + <span class="required"> * </span> 班次类型&nbsp;&nbsp;&nbsp;:
  60 + </label>
  61 + <div class="col-md-6">
  62 + <select name="bcType" class="form-control" id="bcTypeSelect">
  63 + <option value="">-- 请选择类型 --</option>
  64 + <option value="bd">早例保</option>
  65 + <option value="out">出场</option>
  66 + <option value="normal">正常</option>
  67 + <option value="cf">吃饭</option>
  68 + <option value="in">进场</option>
  69 + <option value="lc">晚例保</option>
  70 + <option value="major">放大站</option>
  71 + <option value="venting">直放</option>
  72 + <option value="region">区间</option>
  73 + </select>
  74 + </div>
  75 + </div>
  76 + <!-- 班次类型 (* 必填项) END -->
  77 + </div>
  78 + <!-- 表单分组组件 form-group END -->
  79 +
  80 + <!-- 表单分组组件 form-group START -->
  81 + <div class="form-group">
  82 + <!-- 班次历时 (* 必填项) START -->
  83 + <div class="col-md-6">
  84 + <label class="control-label col-md-6">
  85 + <span class="required"> * </span> 班次历时&nbsp;&nbsp;&nbsp;:
  86 + </label>
  87 + <div class="col-md-6">
  88 + <input type="text" class="form-control" name="bcsj" id="bcsjInput" placeholder="班次历时">
  89 + </div>
  90 + </div>
  91 + <!-- 班次历时 (* 必填项) END -->
  92 +
  93 + <!-- 是否分班 START (因为options值基本固定,所以在页面固定。【以后可以根具需求修改成使用字典表实现】) -->
  94 + <div class="col-md-6">
  95 + <label class="control-label col-md-6">
  96 + <span class="required"> * </span> 是否分班&nbsp;&nbsp;&nbsp;:
  97 + </label>
  98 + <div class="col-md-6">
  99 + <select name="isfb" class="form-control" id="isfbSelect">
  100 + <option value=0>否</option>
  101 + <option value=1>是</option>
  102 + </select>
  103 + </div>
  104 + </div>
  105 + <!-- 是否分班 END -->
  106 + </div>
  107 + <!-- 表单分组组件 form-group END -->
  108 + </form>
  109 + </div>
  110 + <div class="modal-footer">
  111 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
  112 + <button type="button" class="btn btn-primary" id="editBcnext">确定</button>
  113 + </div>
  114 + </div>
  115 + </div>
  116 +</div>
  117 +<script type="text/javascript">
  118 +/**
  119 + * @description : (TODO) 触发被选元素的指定事件类型。
  120 + *
  121 + * @params [obj--图形对象;bf--函数集合对象;cardata--路牌对应的Y轴坐标数组]
  122 + *
  123 + * @status OK.
  124 + */
  125 +$('#editBc_mobal').on('editBcMobal.show', function(e,index,echartsDrawGTT){
  126 + $('#fcsjInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  127 +
  128 + var historyData = echartsDrawGTT.getHistoryData(),
  129 + _keyIndex = echartsDrawGTT.get_keyIndex(),
  130 + data = $.extend(true, [], data, historyData[_keyIndex]),
  131 + Stations = {};
  132 + var bcObj = data[index];
  133 + // 延迟200毫秒执行.
  134 + setTimeout(function(){
  135 + // 加载显示mobal
  136 + $('#editBc_mobal').modal({show : true,backdrop: 'static', keyboard: false});
  137 +
  138 + $('#lpNameInput').val(bcObj.value[0]);
  139 + $('#fcnoInput').val(bcObj.value[7]);
  140 + $('#fcsjInput').val(getTimeStr(new Date(bcObj.value[1])));
  141 + $('#bcsjInput').val(bcObj.value[3]/60000);
  142 + $('#bcTypeSelect').val(bcObj.value[6]);
  143 + $('#isfbSelect').val(bcObj.value[16]);
  144 + },200);
  145 +
  146 + // 获取表单元素
  147 + var form = $('#editBc');
  148 + // 错误提示元素
  149 + var editBcName = $('#editBcName', form);
  150 + // 下一步点击事件
  151 + $('#editBcnext').on('click', function() {
  152 + form.submit();// 表单提交
  153 + });
  154 + // 表单验证
  155 + form.validate({
  156 + errorElement : 'span',
  157 + errorClass : 'help-block help-block-error',
  158 + focusInvalid : false,
  159 + rules : {
  160 + 'lpName' : {required : true},
  161 + 'fcno' : {required : true},
  162 + // 'dir' : {required : true},
  163 + 'fcsj' : {required : true},
  164 + 'bcType' : {required : true},
  165 + 'bcsj' : {number : true,required : true},
  166 + 'isfb' : {required : true}
  167 + },
  168 + invalidHandler : function(event, validator) {
  169 + editBcName.show();
  170 + App.scrollTo(editBcName, -200);
  171 + },
  172 + highlight : function(element) {
  173 + $(element).closest('.form-group').addClass('has-error');
  174 + },
  175 + unhighlight : function(element) {
  176 + $(element).closest('.form-group').removeClass('has-error');
  177 + },
  178 + success : function(label) {
  179 + label.closest('.form-group').removeClass('has-error');
  180 + },
  181 + submitHandler : function(f) {
  182 + // 获取表单内容,并序列化.
  183 + var params = form.serializeJSON();
  184 + var fcsj = Date.parse(DateTimeTool.getDateTime(params.fcsj));
  185 + var ARRIVALTIME = fcsj + parseInt(params.bcsj)*60000 ;
  186 +
  187 + bcObj.value[1] = fcsj;
  188 + bcObj.value[2] = ARRIVALTIME;
  189 + bcObj.value[3] = params.bcsj*60000;
  190 + // bcObj.value[4] = lpNo;
  191 + bcObj.value[6] = params.bcType;
  192 + bcObj.value[7] = parseInt(params.fcno);
  193 + bcObj.value[16] = parseInt(params.isfb);
  194 +
  195 + echartsDrawGTT.init(data,false,true);
  196 + echartsDrawGTT.refreshDrag();
  197 + layer.msg('路牌:'+params.lpName+' fnco:'+params.fcno+' 班次修改成功!');
  198 + $('#editBc_mobal').modal('hide');
  199 + }
  200 + });
  201 +
  202 + /**
  203 + * @discription : (TODO) 获取时间格式[00:00]
  204 + *
  205 + * @params : [time--时间对象]
  206 + *
  207 + * @return : 返回字符串。这里返回的是一个时间格式的字符串
  208 + **/
  209 + function getTimeStr(startTime) {
  210 + // == '00' ? '24' :(startTime.getHours()<10? '0' + startTime.getHours() : startTime.getHours()))
  211 + return (startTime.getHours()<10? '0' + startTime.getHours() : startTime.getHours())
  212 + +':'
  213 + +(startTime.getMinutes()<10? '0' + startTime.getMinutes() : startTime.getMinutes());
  214 + }
  215 +});
  216 +</script>
0 \ No newline at end of file 217 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/fragments/editlp.html 0 → 100644
  1 +<!-- 修改路牌名称 -->
  2 +<div class="modal fade" id="editlp_mobal" tabindex="-1" role="basic" aria-hidden="true">
  3 + <div class="modal-dialog">
  4 + <div class="modal-content">
  5 + <div class="modal-header">
  6 + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  7 + <h4 class="modal-title">修改路牌名称</h4>
  8 + </div>
  9 + <div class="modal-body">
  10 + <form class="form-horizontal" action="/" method="post" id="editlpForm" role="form">
  11 + <!-- alert-danger 组件START -->
  12 + <div class="alert alert-danger display-hide" id="editlpAlert">
  13 + <button class="close" data-close="alert"></button>
  14 + 您的输入有误,请检查下面的输入项
  15 + </div>
  16 + <div class="portlet-body">
  17 + <div class="table-container" style="margin-top: 10px">
  18 + <table class="table table-striped table-bordered table-hover table-checkable" id="datatable_bctz">
  19 + <thead>
  20 + <tr role="row" class="heading">
  21 + <th width="50%">当前路牌名称</th>
  22 + <th width="50%" style="text-align: center;max-width: 50px;min-width: 40px;padding-left: 0;padding-right: 0;">修改路牌名称</th>
  23 + </tr>
  24 + </thead>
  25 + <tbody></tbody>
  26 + </table>
  27 + </div>
  28 + </div>
  29 + </form>
  30 + </div>
  31 + <div class="modal-footer">
  32 + <button type="button" class="btn default" data-dismiss="modal">取消</button>
  33 + <button type="button" class="btn btn-primary" id="editlpnext">确定</button>
  34 + </div>
  35 + </div>
  36 + </div>
  37 +</div>
  38 +<script type="text/html" id="editlp_temp">
  39 +{{each list as obj i }}
  40 + <tr role="row" class="filter">
  41 + <td>
  42 + <input type="text" readonly class="form-control form-filter input-sm" name="lpname_{{i+1}}" value="{{obj.lpName}}">
  43 + </td>
  44 + <td>
  45 + <input type="text" class="form-control form-filter input-sm" name="{{i+1}}" value="{{obj.lpName}}" required>
  46 + </td>
  47 + </tr>
  48 +{{/each}}
  49 +{{if list.length == 0}}
  50 + <tr>
  51 + <td colspan=3><h6 class="muted">没有找到相关数据</h6></td>
  52 + </tr>
  53 + {{/if}}
  54 +</script>
  55 +<script type="text/javascript">
  56 +$('#editlp_mobal').on('editlpMobal.show', function(e,obj,bf){
  57 + var lpArray = obj.configuration.taskTypes;
  58 + setTimeout(function(){
  59 + // 加载延迟200毫秒显示mobal
  60 + $('#editlp_mobal').modal({show : true,backdrop: 'static', keyboard: false});
  61 + },200);
  62 + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。
  63 + $('#editlp_mobal').on('show.bs.modal', function () {
  64 + // 把数据填充到模版中
  65 + var tbodyHtml = template('editlp_temp',{list:lpArray});
  66 + // 把渲染好的模版html文本追加到表格中
  67 + $('#datatable_bctz tbody').html(tbodyHtml);
  68 + });
  69 + // 获取表单元素
  70 + var form = $('#editlpForm');
  71 + // 错误提示元素
  72 + var editlpAlert = $('#editlpAlert', form);
  73 + // 下一步点击事件
  74 + $('#editlpnext').on('click', function() {
  75 + form.submit();// 表单提交
  76 + });
  77 + // 表单验证
  78 + form.validate({
  79 + errorElement : 'span',
  80 + errorClass : 'help-block help-block-error',
  81 + focusInvalid : false,
  82 + rules : {
  83 + },
  84 + invalidHandler : function(event, validator) {
  85 + editlpAlert.show();
  86 + App.scrollTo(editlpAlert, -200);
  87 + },
  88 + highlight : function(element) {
  89 + $(element).closest('.form-group').addClass('has-error');
  90 + },
  91 + unhighlight : function(element) {
  92 + $(element).closest('.form-group').removeClass('has-error');
  93 + },
  94 + success : function(label) {
  95 + label.closest('.form-group').removeClass('has-error');
  96 + },
  97 + submitHandler : function(f) {
  98 + // 1、 获取表单内容,并序列化
  99 + var params = form.serializeJSON();
  100 + var data = obj.getDataArray();
  101 + // 2、 调整路牌对应的班次总数
  102 + updFormParams(params,data);
  103 + // 删除图形.
  104 + $('svg.svg-chart').remove();
  105 + // 重新创建图形.
  106 + var graph_ = d3.select('#ganttSvg').relationshipGraph(obj.configuration);
  107 + // 根据数据重新渲染图形.
  108 + obj.data(data);
  109 + // 记录早操.并保存历史班次数据
  110 + obj.addHistory();
  111 + // 隐藏错误提示
  112 + editlpAlert.hide();
  113 + // 隐藏 reladplus_mobal 弹出层
  114 + $('#editlp_mobal').modal('hide');
  115 + layer.msg('修改路牌名称成功!');
  116 + }
  117 + });
  118 + function updFormParams(p,data) {
  119 + for(var i= 0;i<lpArray.length;i++) {
  120 + if(p[i+1] != undefined) {
  121 + if(lpArray[i].lpName != p[i+1]) {
  122 + for(var d = 0 ; d< data.length;d++) {
  123 + if(data[d].lpName == lpArray[i].lpName) {
  124 + data[d].lpName = p[i+1];
  125 + }
  126 +
  127 + }
  128 + lpArray[i].lpName = p[i+1];
  129 + obj.configuration.lpNameA[i] = p[i+1];
  130 + }
  131 + }
  132 + }
  133 + }
  134 +});
  135 +</script>
0 \ No newline at end of file 136 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/gantt.html
@@ -39,6 +39,14 @@ @@ -39,6 +39,14 @@
39 <div class="tools" style="margin-left: 20px;margin-top: -10px;"> 39 <div class="tools" style="margin-left: 20px;margin-top: -10px;">
40 <a href="" class="fullscreen" data-original-title="" title="" style="text-decoration: none;"> </a> 40 <a href="" class="fullscreen" data-original-title="" title="" style="text-decoration: none;"> </a>
41 </div> 41 </div>
  42 +
  43 + <!-- 班次调整输入框 -->
  44 + <div class="bc-adjust-list hidden">
  45 + <input type="hidden" id="bcAdjustName" />
  46 + <select class="js-example-placeholder-multiple js-states form-control bc-adjust-list-input" multiple="multiple" id="bcAdjustList"></select>
  47 + <a class="btn" href="javascript:;" data-pjax style="background:#c2c8d2;color: #fff;position: absolute; top: 4px; right: 55px;" id="bcAdjustListCancel"> 取消</a>
  48 + <a class="btn blue" href="javascript:;" data-pjax style="position: absolute; top: 4px; right: 1px;" id="bcAdjustListSubmit"> 提交</a>
  49 + </div>
42 <!-- actions 组件START --> 50 <!-- actions 组件START -->
43 <div class="actions"> 51 <div class="actions">
44 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> 52 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">
@@ -92,33 +100,38 @@ @@ -92,33 +100,38 @@
92 <i class="fa fa-share"></i>&nbsp;恢&nbsp;&nbsp;复 100 <i class="fa fa-share"></i>&nbsp;恢&nbsp;&nbsp;复
93 </a> 101 </a>
94 </li> 102 </li>
95 - <li> 103 + <!--<li>
96 <a href="javascript:" class="tool-action reladelete"> 104 <a href="javascript:" class="tool-action reladelete">
97 <i class="fa fa-close"></i>&nbsp;批量删除 105 <i class="fa fa-close"></i>&nbsp;批量删除
98 </a> 106 </a>
99 - </li> 107 + </li>-->
100 <li> 108 <li>
101 - <a href="javascript:" class="tool-action reladplus"> 109 + <a href="javascript:" class="tool-action addBc">
102 <i class="fa fa-plus"></i>&nbsp;添加班次 110 <i class="fa fa-plus"></i>&nbsp;添加班次
103 </a> 111 </a>
104 </li> 112 </li>
105 <li> 113 <li>
106 - <a href="javascript:" class="tool-action editlp">  
107 - <i class="fa fa-pencil"></i>&nbsp;修改路牌 114 + <a href="javascript:" class="tool-action addLp">
  115 + <i class="fa fa-plus"></i>&nbsp;添加路牌
108 </a> 116 </a>
109 </li> 117 </li>
  118 + <!--<li>
  119 + <a href="javascript:" class="tool-action editLp">
  120 + <i class="fa fa-pencil"></i>&nbsp;修改路牌
  121 + </a>
  122 + </li>-->
110 <li> 123 <li>
111 - <a href="javascript:" class="tool-action addlp">  
112 - <i class="fa fa-plus"></i>&nbsp;添加路牌 124 + <a href="javascript:" class="tool-action deleteLp">
  125 + <i class="fa fa-close"></i>&nbsp;删除路牌
113 </a> 126 </a>
114 </li> 127 </li>
115 <li> 128 <li>
116 - <a href="javascript:" class="tool-action updownread"> 129 + <a href="javascript:" class="tool-action upDownRead">
117 <i class="fa fa-arrows-h"></i>&nbsp;均匀发车 130 <i class="fa fa-arrows-h"></i>&nbsp;均匀发车
118 </a> 131 </a>
119 </li> 132 </li>
120 <li> 133 <li>
121 - <a href="javascript:" class="tool-action aboutread"> 134 + <a href="javascript:" class="tool-action bcAdjust">
122 <i class="fa fa-arrows-v"></i>&nbsp;班次调整 135 <i class="fa fa-arrows-v"></i>&nbsp;班次调整
123 </a> 136 </a>
124 </li> 137 </li>
@@ -132,9 +145,13 @@ @@ -132,9 +145,13 @@
132 <!-- portlet-body组件START --> 145 <!-- portlet-body组件START -->
133 <div class="portlet-body" id="scrllmouseEvent"> 146 <div class="portlet-body" id="scrllmouseEvent">
134 <!-- ganttSvgContainer SVG组件START --> 147 <!-- ganttSvgContainer SVG组件START -->
135 - <div class="ganttSvgContainer"> 148 + <!--<div class="ganttSvgContainer">
136 <div id="ganttSvg"></div> 149 <div id="ganttSvg"></div>
137 - </div> 150 + </div>-->
  151 + <div class="gtt">
  152 + <div id="upDownContainer"></div>
  153 + <div id="bcContainer"></div>
  154 + </div>
138 <!-- ganttSvgContainer SVG组件END --> 155 <!-- ganttSvgContainer SVG组件END -->
139 </div> 156 </div>
140 <!-- portlet-body组件END --> 157 <!-- portlet-body组件END -->
@@ -146,7 +163,13 @@ @@ -146,7 +163,13 @@
146 <!-- row 组件END --> 163 <!-- row 组件END -->
147 <script src="/pages/base/timesmodel/js/raty/lib/jquery.raty.js"></script> 164 <script src="/pages/base/timesmodel/js/raty/lib/jquery.raty.js"></script>
148 <script src="/pages/base/timesmodel/js/ContextJS/js/context.js"></script> 165 <script src="/pages/base/timesmodel/js/ContextJS/js/context.js"></script>
  166 +<script src="/pages/base/timesmodel/js/dateTimeTool.js"></script>
149 <script src="/pages/base/timesmodel/js/base-fun.js"></script> 167 <script src="/pages/base/timesmodel/js/base-fun.js"></script>
  168 +<script src="/pages/base/timesmodel/js/v1/bcFun.js"></script>
  169 +<script src="/pages/base/timesmodel/js/v1/lpFun.js"></script>
  170 +<script src="/pages/base/timesmodel/js/v1/scheduleInitialize.js"></script>
  171 +<script src="/pages/base/timesmodel/js/v1/AdjustTrip.js"></script>
  172 +<script src="/pages/base/timesmodel/js/v1/AdjustTrip2.js"></script>
150 <script src="/pages/base/timesmodel/js/v2/ParameterObj.js"></script> 173 <script src="/pages/base/timesmodel/js/v2/ParameterObj.js"></script>
151 <script src="/pages/base/timesmodel/js/v2/core/InternalBcObj.js"></script> 174 <script src="/pages/base/timesmodel/js/v2/core/InternalBcObj.js"></script>
152 <script src="/pages/base/timesmodel/js/v2/core/InternalGroupObj.js"></script> 175 <script src="/pages/base/timesmodel/js/v2/core/InternalGroupObj.js"></script>
@@ -160,4 +183,24 @@ @@ -160,4 +183,24 @@
160 <script src="/pages/base/timesmodel/js/v2/main_v2.js"></script> 183 <script src="/pages/base/timesmodel/js/v2/main_v2.js"></script>
161 <script src="/pages/base/timesmodel/js/d3.relationshipgraph.js"></script> 184 <script src="/pages/base/timesmodel/js/d3.relationshipgraph.js"></script>
162 <script src="/pages/base/timesmodel/js/errorinfo.js"></script> 185 <script src="/pages/base/timesmodel/js/errorinfo.js"></script>
163 -<script src="/pages/base/timesmodel/js/gantt.js"></script>  
164 \ No newline at end of file 186 \ No newline at end of file
  187 +<script src="/pages/base/timesmodel/js/parameters.js"></script>
  188 +<script src="/pages/base/timesmodel/js/systemTools.js"></script>
  189 +<script src="/pages/base/timesmodel/js/echartsDrawGanTT.js"></script>
  190 +<script src="/pages/base/timesmodel/js/gantt.js"></script>
  191 +
  192 +<script id="rightClick_dropdown_menu" type="text/html">
  193 + <ul class="dropdown-menu dropdown-context" id="dropdown_menu"
  194 + style="{{style}}">
  195 + <input type="hidden" value="{{dataIndex}}" name="dataIndex" id="dataIndex">
  196 + <li><a href="javascript:dropdownMenuUpdate('{{dataIndex}}');" id="update">修改</a></li>
  197 + <li><a href="javascript:dropdownMenuDelete('{{dataIndex}}');" id="delete" >删除</a></li>
  198 + <li><a href="javascript:dropdownMenuSwitchUpDown('{{dataIndex}}');" id="switchUpDown">班次切换上下行</a></li>
  199 + <li><a href="javascript:dropdownMenuLpSwitchUpDown('{{dataIndex}}');" id="lpSwitchUpDown">路牌切换上下行</a></li>
  200 + <li><a href="javascript:dropdownMenuSetNormal('{{dataIndex}}');" id="setNormal">设为正常</a></li>
  201 + <li><a href="javascript:dropdownMenuSetRegion('{{dataIndex}}');" id="setRegion">设为区间</a></li>
  202 + <li><a href="javascript:dropdownMenuSetFb('{{dataIndex}}');" id="setFb">设为分班</a></li>
  203 + <li><a href="javascript:dropdownMenuSetNoFb('{{dataIndex}}');" id="SetNoFb">取消分班</a></li>
  204 + <li><a href="javascript:dropdownMenuSetVenting('{{dataIndex}}');" id="setVenting">设为直放</a></li>
  205 + <li><a href="javascript:dropdownMenuSetMajor('{{dataIndex}}');" id="setMajor">设为放站</a></li>
  206 + </ul>
  207 +</script>
165 \ No newline at end of file 208 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
@@ -845,7 +845,7 @@ var SKBFormWizard = function() { @@ -845,7 +845,7 @@ var SKBFormWizard = function() {
845 $(this).html(payment.join("<br>")); 845 $(this).html(payment.join("<br>"));
846 } 846 }
847 }); 847 });
848 - } 848 + };
849 849
850 /** 按钮点击时触发 */ 850 /** 按钮点击时触发 */
851 var handleTitle = function(tab, navigation, index) { 851 var handleTitle = function(tab, navigation, index) {
@@ -874,7 +874,7 @@ var SKBFormWizard = function() { @@ -874,7 +874,7 @@ var SKBFormWizard = function() {
874 $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮 874 $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮
875 } 875 }
876 App.scrollTo($('.page-title'));// 移动到指定位置 876 App.scrollTo($('.page-title'));// 移动到指定位置
877 - } 877 + };
878 878
879 // 表单导航向导插件 879 // 表单导航向导插件
880 $('#submit_argus_form').bootstrapWizard({ 880 $('#submit_argus_form').bootstrapWizard({
@@ -915,6 +915,8 @@ var SKBFormWizard = function() { @@ -915,6 +915,8 @@ var SKBFormWizard = function() {
915 915
916 if (baseRes == 0) { // 客流大数据分析 916 if (baseRes == 0) { // 客流大数据分析
917 $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); 917 $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
  918 + // 停站类型选择控件
  919 + ComponentsBootstrapTagsinput.init_stoptype();
918 // 日期控件 920 // 日期控件
919 $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 921 $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
920 $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 922 $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
@@ -944,6 +946,8 @@ var SKBFormWizard = function() { @@ -944,6 +946,8 @@ var SKBFormWizard = function() {
944 } else if (baseRes == 1) { // 班次/人次/车辆 946 } else if (baseRes == 1) { // 班次/人次/车辆
945 $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); 947 $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
946 ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag. 948 ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag.
  949 + // 停站类型选择控件
  950 + ComponentsBootstrapTagsinput.init_stoptype();
947 // 日期控件 951 // 日期控件
948 $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 952 $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
949 $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 953 $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
src/main/resources/static/pages/base/timesmodel/js/dateTimeTool.js 0 → 100644
  1 +/** 时间工具类*/
  2 +var DateTimeTool = function () {
  3 + // 数字格式转化为时间格式
  4 + var calculateHours = function (time) {
  5 + if(!time)
  6 + return;
  7 + var h,m;
  8 + h = Math.floor(time);
  9 + m = Math.round((time % 1) * 60);
  10 + return h+':'+m;
  11 + };
  12 + /**
  13 + * @discription : (TODO) 字符串转时间对象
  14 + *
  15 + * @params : 具有一定格式的时间字符串
  16 + *
  17 + * @return : 返回一个中国标准时间点
  18 + *
  19 + **/
  20 + var getDateTime = function(time) {
  21 + var dateTime = new Date();
  22 + if(time !=null && time !='' && typeof(time) !='undefined') {
  23 + timeArr = time.split(':');
  24 + dateTime.setHours(parseInt(timeArr[0]));
  25 + dateTime.setMinutes(parseInt(timeArr[1]));
  26 + dateTime.setSeconds(0);
  27 + // 在0-3点之间(包括0和3)的时间都默认为下一天的时间
  28 + if(parseInt(timeArr[0]) <= 3 && parseInt(timeArr[0]) >= 0)
  29 + dateTime.setDate(dateTime.getDate() +1);
  30 + }
  31 + return dateTime;
  32 + };
  33 + /**
  34 + * @discription : (TODO) 获取时间格式[00:00]
  35 + *
  36 + * @params : [startTime--时间对象(任意时间对象:字符串、时间戳、时间对象)]
  37 + *
  38 + * @return : 返回字符串。这里返回的是一个时间格式的字符串[00:00]
  39 + **/
  40 + var getHHmmStr = function(time) {
  41 + var date = new Date(time);
  42 + // == '00' ? '24' :(startTime.getHours()<10? '0' + startTime.getHours() : startTime.getHours()))
  43 + return (date.getHours()<10? '0' + date.getHours() : date.getHours())
  44 + +':'
  45 + +(date.getMinutes()<10? '0' + date.getMinutes() : date.getMinutes());
  46 + };
  47 + return{
  48 + calculateHours : calculateHours,
  49 + getDateTime : getDateTime,
  50 + getHHmmStr : getHHmmStr
  51 + }
  52 +}();
src/main/resources/static/pages/base/timesmodel/js/echartsDrawGanTT.js 0 → 100644
  1 +var echartsDrawGTT = function () {
  2 + // 定义图层
  3 + var bcdom = document.getElementById("bcContainer");
  4 + var chart = echarts.init(bcdom);
  5 + var upDowndom = document.getElementById("upDownContainer");
  6 + var upDownChart = echarts.init(upDowndom);
  7 + // upDowndom.style.height = '200px';
  8 + var option,upDownOption,dataZoomStart = 0,dataZoomEnd = 80;//图层对象
  9 + var historyData = [],// 保存操作图形后的数据集合(撤销与恢复操作)
  10 + _keyIndex = -1,// 记录当前操作步骤 (在撤销与恢复操作时)
  11 + dataUp = [],// (上/下)行发车时刻表数据
  12 + dataDown = [];
  13 + // y坐标
  14 + var lpData = []; //var lpData = ['连班_2','连班_1','连班_3'];
  15 + var lpDataCount = [];// lpDataCount[路牌名字]=[工时,班次,路牌序号]
  16 + // x坐标轴的范围
  17 + var time = DateTimeTool.getDateTime("03:00");
  18 + var xMax = Date.parse(time);
  19 + time.setDate(time.getDate()-1);
  20 + var xMin = Date.parse(time);
  21 + // 上下行bc颜色
  22 + var types = {'relationshipGraph-up': '#ff2949','relationshipGraph-down': '#518fe3'};
  23 + // 班次数据源
  24 + var bcData = [];
  25 +
  26 + // 班次类型
  27 + // var bcType = [bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间]
  28 + var bcType = new Map();
  29 + bcType['in'] = '到';
  30 + bcType['out'] = '离';
  31 + bcType['bd'] = '出';
  32 + bcType['lc'] = '进';
  33 + bcType["normal"] = '正';
  34 + bcType["cf"] = '吃';
  35 + bcType["major"] = '站';
  36 + bcType["venting"] = '直';
  37 + bcType["region"] = '区';
  38 +
  39 + // 处理后班次数据
  40 + var data = [];
  41 + // 单个班次高度
  42 + var height;
  43 + // 坐标轴位置
  44 + var baseTop = 70;
  45 + var gridHeight = 60;
  46 +
  47 + $("#bcContainer").bind("contextmenu", function(){
  48 + return false;
  49 + });
  50 +
  51 + var setLpData = function (data) {
  52 + lpData = data;
  53 + };
  54 + var getLpData = function () {
  55 + return lpData;
  56 + };
  57 + var setLpDataCount = function (data) {
  58 + lpDataCount = data;
  59 + };
  60 + var getLpDataCount = function () {
  61 + return lpDataCount;
  62 + };
  63 + var set_keyIndex = function (indxe) {
  64 + _keyIndex = indxe;
  65 + };
  66 + var get_keyIndex = function () {
  67 + return _keyIndex;
  68 + };
  69 + var getHistoryData = function () {
  70 + return historyData;
  71 + };
  72 + var setHistoryData = function (data) {
  73 + historyData = data;
  74 + };
  75 +
  76 + // 初始化 newData:数据、isLast:是否第一次、isNewData:是否是新数据(撤销、恢复不是)、newLpData:新路牌
  77 + var init = function (newData,isLast,isNewData,newLpData) {
  78 + if(isLast){
  79 + data = [];
  80 + bcData = newData;
  81 + echarts.util.each(bcData, function (bcObj, index) {
  82 + var fcsj = Date.parse(DateTimeTool.getDateTime(bcObj.fcsj)),
  83 + ARRIVALTIME = Date.parse(DateTimeTool.getDateTime(bcObj.ARRIVALTIME)),
  84 + colorStr = bcObj.xlDir,
  85 + xlDir;
  86 + if(bcObj.xlDir == 'relationshipGraph-up')
  87 + xlDir = 0;
  88 + else if(bcObj.xlDir == 'relationshipGraph-down')
  89 + xlDir = 1;
  90 + else
  91 + xlDir = -1;
  92 + data.push({
  93 + value: [
  94 + bcObj.lpName,//纵坐标
  95 + fcsj,//开始时间
  96 + ARRIVALTIME,//结束时间
  97 + bcObj.bcsj*60000,//横坐标长度(持续时间)
  98 + bcObj.lpNo,
  99 + bcObj.lpType,
  100 + bcObj.bcType,
  101 + bcObj.fcno,
  102 + xlDir,
  103 + bcObj.jhlc,
  104 + bcObj.tcc,
  105 + bcObj.ttinfo,
  106 + bcObj.xl,
  107 + bcObj.qdz,
  108 + bcObj.zdz,
  109 + bcObj.STOPTIME,
  110 + bcObj.isfb = 0
  111 + //bcObj.isSwitchXl,
  112 + //bcObj.bz,
  113 + ],
  114 + itemStyle: {
  115 + normal: {
  116 + color: types[colorStr]
  117 + }
  118 + }
  119 + });
  120 + });
  121 + historyData.push(data);
  122 + _keyIndex++;
  123 + { // 遍历获取路牌
  124 + var lpDataCache=[];
  125 + for(var j = 0,len=data.length; j < len; j++) {
  126 + lpDataCache.push([data[j].value[0],data[j].value[4]]);
  127 + }
  128 + lpDataCache.sort(function(a,b){
  129 + return b[1]-a[1];
  130 + });
  131 + $.each(lpDataCache,function () {
  132 + lpData.push(this[0]);
  133 + });
  134 + lpData = unique(lpData);
  135 + }
  136 + } else if(!isLast && isNewData){
  137 + data = newData;
  138 + historyData.splice(_keyIndex+1, historyData.length);
  139 + historyData.push(data);
  140 + _keyIndex++;
  141 + } else if(!isLast && !isNewData){
  142 + data = newData;
  143 + }
  144 + if(!newLpData){
  145 + for(var j = 0,len=lpData.length; j < len; j++) {
  146 + var type = true;
  147 + var name = lpData[j];
  148 + for(var i = 0,len2=data.length; i < len2; i++) {
  149 + if(name == data[i].value[0]) {
  150 + if(type){
  151 + lpDataCount[name] = [data[i].value[3]/60000+data[i].value[15],1,data[i].value[4]];
  152 + type = false;
  153 + } else if(data[i].value[6] == 'in' || data[i].value[16] == 1){
  154 + lpDataCount[name][0] += data[i].value[3]/60000;
  155 + lpDataCount[name][1] += 1;
  156 + } else {
  157 + lpDataCount[name][0] += (data[i].value[3]/60000+data[i].value[15]);
  158 + lpDataCount[name][1] += 1;
  159 + }
  160 + }
  161 + }
  162 + }
  163 + } else {
  164 + lpData = newLpData;// 添加路牌功能
  165 + }
  166 + // 计算图层高度
  167 + bcdom.style.height = (60+lpData.length*60)+'px';
  168 +
  169 + option = {
  170 + tooltip: {
  171 + borderWidth: 1,
  172 + borderRadius: 0,
  173 + triggerOn: 'none',
  174 + textStyle: {
  175 + color: '#000'
  176 + },
  177 + backgroundColor: '#fff',
  178 + borderColor: 'rgba(0, 0, 20, 0.2)',
  179 + formatter: function (params) {
  180 + //bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间
  181 + var bcTypeStr;
  182 + if(params.value[6]=='bd')
  183 + bcTypeStr='早例保';
  184 + else if(params.value[6]=='out')
  185 + bcTypeStr='出场';
  186 + else if(params.value[6]=='normal')
  187 + bcTypeStr='正常';
  188 + else if(params.value[6]=='cf')
  189 + bcTypeStr='吃饭';
  190 + else if(params.value[6]=='in')
  191 + bcTypeStr='进场';
  192 + else if(params.value[6]=='lc')
  193 + bcTypeStr='晚例保';
  194 + else if(params.value[6]=='major')
  195 + bcTypeStr='放站';
  196 + else if(params.value[6]=='venting')
  197 + bcTypeStr='直放';
  198 + else if(params.value[6]=='region')
  199 + bcTypeStr='区间';
  200 + var str = '当前路牌:'+params.value[0]
  201 + + '<br> 行驶方向:'+(params.value[8]==0?'上行':'下行')+'&nbsp;<span>'+ params.marker +'</span>'
  202 + +'<br> fcno:&emsp;&emsp;'+params.value[7]
  203 + +'<br>发车时间:' + getHoursAndMinutes(params.value[1])
  204 + +'<br>到站时间:' + getHoursAndMinutes(params.value[2])
  205 + +'<br>行驶时间:' + params.value[3]/60000 +'分钟'
  206 + +'<br>停休时间:' + params.value[15] +'分钟'
  207 + +'<br>班次类型:' + bcTypeStr ;
  208 + return str;
  209 + }
  210 + },
  211 + grid: {
  212 + top: '0px',
  213 + height: gridHeight * lpData.length
  214 + },
  215 + xAxis: [makeXAxis(0, {
  216 + splitLine: {show: true},
  217 + axisLine: {onZero: false, lineStyle: {color: '#000'}},
  218 + axisLabel: {
  219 + show: true,
  220 + interval:2,
  221 + formatter: function (val) {
  222 + return getHoursAndMinutes(val);
  223 + }
  224 + },
  225 + axisPointer: {
  226 + triggerTooltip: false,
  227 + triggerOn: 'none',
  228 + show: true,
  229 + label: {
  230 + show: true,
  231 + formatter: function (val) {
  232 + return getHoursAndMinutes(val.value);
  233 + }
  234 + }
  235 + }
  236 + })],
  237 + yAxis: {
  238 + data: lpData,
  239 + axisLabel:{
  240 + formatter: function (value, index) {
  241 + var texts = [
  242 + value ,
  243 + '{yAxisLeft|总工时:'+(lpDataCount[value][0]==0 ? 0:(lpDataCount[value][0]/60).toFixed(2)) + '}',
  244 + '{yAxisLeft|总班次:'+lpDataCount[value][1] + '}'
  245 + ];
  246 + return texts.join('\n');
  247 + },
  248 + rich: {
  249 + yAxisLeft: {
  250 + backgroundColor: '#478cf1',
  251 + color: '#fff',
  252 + height: 20,
  253 + width: 80,
  254 + borderRadius: 10,
  255 + align: 'left',
  256 + padding: [0,0,0,5]
  257 + }
  258 + }
  259 + }
  260 + },
  261 + dataZoom: [{
  262 + type: 'slider',
  263 + top: gridHeight * (lpData.length) + 30,//+ gridHeight * (2+lpData.length)
  264 + filterMode: 'weakFilter',
  265 + wDataShadow: false,
  266 + borderColor: 'transparent',
  267 + backgroundColor: '#e2e2e2',
  268 + handleIcon: 'M10.7,11.9H9.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line
  269 + handleSize: 20,
  270 + handleStyle: {
  271 + shadowBlur: 6,
  272 + shadowOffsetX: 1,
  273 + shadowOffsetY: 2,
  274 + shadowColor: '#000'
  275 + },
  276 + start: dataZoomStart,
  277 + end: dataZoomEnd
  278 + }],
  279 + series: [{
  280 + type: 'custom',
  281 + renderItem: renderItem,
  282 + itemStyle: {
  283 + normal: {
  284 + opacity: 0.8
  285 + }
  286 + },
  287 + encode: {
  288 + x: [1, 2],
  289 + y: 0
  290 + },
  291 + label: {
  292 + show: true,
  293 + position: 'insideTopLeft',
  294 + textBorderWidth: -1,
  295 + textBorderColor: '#000',
  296 + fontWeight: 65,
  297 + formatter: function (params) {
  298 +
  299 + var p= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},[params.data.value[1],params.data.value[2]]);
  300 + var a = p[1]-p[0];
  301 + var type = params.data.value[6],
  302 + lastStr = '',// 班次历时
  303 + stayStr = '',// 停站时间
  304 + timeStr = '',
  305 + bcTypeStr = '';
  306 + if(type=='bd' || type=='lc' || type=='out' || type=='in')
  307 + timeStr = getHoursAndMinutes(params.data.value[1]);
  308 + else
  309 + timeStr = getHoursAndMinutes(params.data.value[1])+'~'+getHoursAndMinutes(params.data.value[2]);
  310 +
  311 + var last = params.data.value[3] / 60000;
  312 + if(last>0) {
  313 + if(type=='bd' || type=='lc')
  314 + lastStr = "保:" + last;
  315 + else if(type=='cf')
  316 + lastStr = "吃:" + last;
  317 + else
  318 + lastStr = "行:" + last;
  319 + }
  320 + // 除了早晚例保,和进出场班次其余类型班次有停站时间
  321 + if(type!='bd' && type!='lc' && type!='out' && type!='in') {
  322 + //if(params.data.value[15]>=0)
  323 + stayStr = "停:" + params.data.value[15];
  324 + }
  325 + // 分班显示‘分’
  326 + if(params.data.value[16] == 1)
  327 + bcTypeStr = "分";
  328 + else
  329 + bcTypeStr = bcType[type];
  330 +
  331 + var arr = [
  332 + '{left|' + timeStr + '}{type|' + bcTypeStr +'}',
  333 + '{left|' + lastStr + '}{left|' + stayStr + '}'
  334 + ];
  335 + return arr.join('\n');
  336 + },
  337 + rich: {
  338 + left: {
  339 + fontSize: 10,
  340 + color: '#000',
  341 + align: 'left'
  342 + },
  343 + type: {
  344 + fontSize: 13,
  345 + color: '#000',
  346 + align: 'right'
  347 + }
  348 + }
  349 + },
  350 + data: data
  351 + }],
  352 + // animation : false,
  353 + animationThreshold : 0,
  354 + animationDurationUpdate : 1500
  355 + };
  356 +
  357 + if (option && typeof option === "object") {
  358 + chart.setOption(option, true);
  359 + }
  360 + // 刷新上下行发车时刻表数据
  361 + refreshUpDownData();
  362 + // 添加可托拽覆盖物
  363 + refreshDrag();
  364 + // 添加缩放数据适配
  365 + chart.on('dataZoom', updatePosition);
  366 + chart.resize();
  367 + upDownOption = {
  368 + tooltip: {
  369 + // trigger: 'axis',
  370 + borderWidth: 1,
  371 + textStyle: {
  372 + color: '#000'
  373 + },
  374 + backgroundColor: '#fff',
  375 + borderColor: 'rgba(0, 0, 20, 0.2)',
  376 + formatter: function (params) {
  377 + var style = 'color: ' + params.color;
  378 + var str = '<span style="' + style + '">发车时间:'+getHoursAndMinutes(params.value[1])+
  379 + '</br>发车间隔:'+params.value[0]+'分钟'+
  380 + '</br>路牌:'+params.value[2]+
  381 + '</br>fcno:'+params.value[7]+
  382 + '</span>';
  383 + return str;
  384 + }
  385 + },
  386 + grid: [
  387 + makeGrid(baseTop),
  388 + makeGrid(baseTop + gridHeight),
  389 + makeGrid(baseTop, {
  390 + show: true,
  391 + height: gridHeight * 2,
  392 + borderColor: '#ccc',
  393 + borderWidth: 1,
  394 + z: 10
  395 + })
  396 + ],
  397 + xAxis: [
  398 + makeXAxis(0),
  399 + makeXAxis(1),
  400 + makeXAxis(2, {
  401 + position: 'top',
  402 + splitLine: {show: true},
  403 + axisLine: {onZero: false, lineStyle: {color: '#000'}},
  404 + axisLabel: {
  405 + show: true,
  406 + interval:2,
  407 + formatter: function (val) {
  408 + return getHoursAndMinutes(val);
  409 + }
  410 + },
  411 + axisPointer: {
  412 + triggerTooltip: false,
  413 + show: true,
  414 + lineStyle: {
  415 + color: '#478cf1',
  416 + width: 1.5
  417 + },
  418 + label: {
  419 + show: true,
  420 + formatter: function (val) {
  421 + return getHoursAndMinutes(val.value);
  422 + }
  423 + }
  424 +
  425 + }
  426 + })
  427 + ],
  428 + yAxis: [
  429 + makeYAxis(0, {
  430 + name: '上行发车时刻表'
  431 + }),
  432 + makeYAxis(1, {
  433 + name: '下行发车时刻表'
  434 + }),
  435 + makeYAxis(2)
  436 + ],
  437 + dataZoom: [{
  438 + type: 'slider',
  439 + xAxisIndex: [0, 1, 2],
  440 + top: baseTop - 60,//+ gridHeight * (2+lpData.length)
  441 + filterMode: 'weakFilter',
  442 + wDataShadow: false,
  443 + borderColor: 'transparent',
  444 + backgroundColor: '#e2e2e2',
  445 + handleIcon: 'M10.7,11.9H9.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line
  446 + handleSize: 20,
  447 + handleStyle: {
  448 + shadowBlur: 6,
  449 + shadowOffsetX: 1,
  450 + shadowOffsetY: 2,
  451 + shadowColor: '#000'
  452 + },
  453 + start: dataZoomStart,
  454 + end: dataZoomEnd
  455 + }],
  456 + visualMap: {
  457 + top: 70,
  458 + right: 20,
  459 + pieces: [{
  460 + lte: 8,
  461 + color: '#75b228'
  462 + },{
  463 + gt: 8,
  464 + lte: 20,
  465 + color: '#ff9933'
  466 + },{
  467 + gt: 20,
  468 + color: '#cc0033'
  469 + }],
  470 + outOfRange: {
  471 + color: '#999'
  472 + },
  473 + seriesIndex: [0, 1],
  474 + dimension: 0
  475 + },
  476 + series: [{
  477 + type: 'line',
  478 + itemStyle: {
  479 + normal: {
  480 + color: '#ff2949'
  481 + }
  482 + },
  483 + data: dataUp,
  484 + markLine: {
  485 + silent: true,
  486 + data: [{
  487 + yAxis: 8
  488 + }, {
  489 + yAxis: 20
  490 + }]
  491 + },
  492 + encode: {
  493 + x: 1,
  494 + y: 0
  495 + }
  496 + }, {
  497 + type: 'line',
  498 + xAxisIndex: 1,
  499 + yAxisIndex: 1,
  500 + itemStyle: {
  501 + normal: {
  502 + color: '#518fe3'
  503 + }
  504 + },
  505 + data: dataDown,
  506 + markLine: {
  507 + silent: true,
  508 + data: [{
  509 + yAxis: 8
  510 + }, {
  511 + yAxis: 20
  512 + }]
  513 + },
  514 + encode: {
  515 + x: 1,
  516 + y: 0
  517 + }
  518 + }],
  519 + //animationEasingUpdate: 'cubicInOut',
  520 + animationDurationUpdate: 1500
  521 + };
  522 +
  523 + if (upDownOption && typeof upDownOption === "object") {
  524 + upDownChart.setOption(upDownOption, true);
  525 + }
  526 + // 添加缩放数据适配
  527 + upDownChart.on('dataZoom', updatePosition);
  528 + upDownChart.resize();
  529 + };
  530 +
  531 + var renderItem = function (params, api) {
  532 + var categoryIndex = api.value(0); //这里使用api.value(0) 取出当前dataItem中第一个维度的数值
  533 + var start = api.coord([api.value(1), categoryIndex]);//将数值在当前坐标系中转换成为屏幕上的点的像素值 api.coord(//开始时间,种类),这)里返回是 start[0][1] x 坐标和 y坐标
  534 + var end = api.coord([api.value(2), categoryIndex]);//将数值在当前坐标系中转成屏幕上的点的像素值api.crood(开始时间,种类)相当于一个x yige y
  535 + height = api.size([0, 1])[1] * 0.6;
  536 + return {
  537 + type: 'rect',
  538 + shape: echarts.graphic.clipRectByRect(
  539 + {
  540 + x: start[0],//矩形的位置和大小
  541 + y: start[1] - height / 2,
  542 + width: end[0] - start[0],
  543 + height: height
  544 + },
  545 + {
  546 + x: params.coordSys.x,
  547 + y: params.coordSys.y,
  548 + width: params.coordSys.width,
  549 + height: params.coordSys.height
  550 + }),
  551 + style: api.style()
  552 + };
  553 + };
  554 +
  555 + // 动作刷新底层班次(缩放条/拖动班次)
  556 + var updatePosition = function (e) {
  557 + data = $.extend(true, [], data, historyData[_keyIndex]);
  558 + dataZoomStart = e.start;
  559 + dataZoomEnd = e.end;
  560 + chart.setOption({
  561 + dataZoom: [{
  562 + start: dataZoomStart,
  563 + end: dataZoomEnd
  564 + }]
  565 + });
  566 + upDownChart.setOption({
  567 + dataZoom: [{
  568 + start: dataZoomStart,
  569 + end: dataZoomEnd
  570 + }]
  571 + });
  572 +
  573 + chart.setOption({
  574 + series: [{
  575 + label: {
  576 + normal: {
  577 + show: true,
  578 + position: 'insideTopLeft',
  579 + textBorderWidth: 0,
  580 + textBorderColor: '#000',
  581 + formatter: function (params) {
  582 +
  583 + var p= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},[params.data.value[1],params.data.value[2]]);
  584 + var a = p[1]-p[0];
  585 + var type = params.data.value[6],
  586 + lastStr = '',// 班次历时
  587 + stayStr = '',// 停站时间
  588 + timeStr = '';
  589 + if(type=='bd' || type=='lc' || type=='out' || type=='in')
  590 + timeStr = getHoursAndMinutes(params.data.value[1]);
  591 + else
  592 + timeStr = getHoursAndMinutes(params.data.value[1])+'~'+getHoursAndMinutes(params.data.value[2]);
  593 +
  594 + var last = params.data.value[3] / 60000;
  595 + if(last>0) {
  596 + if(type=='bd' || type=='lc')
  597 + lastStr = "保:" + last;
  598 + else if(type=='cf')
  599 + lastStr = "吃:" + last;
  600 + else
  601 + lastStr = "行:" + last;
  602 + }
  603 +
  604 + if(type == 'normal') {
  605 + stayStr = "停:" + params.data.value[15];
  606 + }
  607 + var arr = [
  608 + '{left|' + timeStr + '}{type|'+ ((e.end - e.start) < 80 ? bcType[type] : '') +'}',
  609 + '{left|' + lastStr + '}{left|' + stayStr + '}'
  610 + ];
  611 +
  612 + return arr.join('\n');
  613 + },
  614 + rich: {
  615 + left: {
  616 + fontSize: 10,
  617 + //lineHeight: 30,
  618 + color: '#000',
  619 + align: 'left',
  620 + padding: [0, 5, 0, 0]
  621 + },
  622 + type: {
  623 + fontSize: 13,
  624 + color: '#000',
  625 + align: 'right'
  626 + }
  627 + }
  628 + }
  629 + },
  630 + data: data
  631 + }]
  632 + });
  633 + chart.setOption({
  634 + graphic: echarts.util.map(data, function (item, dataIndex) {
  635 + var p = [item.value[1],item.value[0]];
  636 + var p2 = [item.value[2],item.value[0]];
  637 + var pp= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p);
  638 + var pp2= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p2);
  639 + return {
  640 + position: chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p),
  641 + shape: {
  642 + width:pp2[0]-pp[0],
  643 + height:height
  644 + }
  645 + };
  646 + })
  647 + });
  648 + // console.log(data);
  649 + };
  650 + // 刷新可拖动阴影班次
  651 + var refreshDrag = function (){
  652 + data = historyData[_keyIndex];
  653 + chart.setOption({
  654 + graphic: echarts.util.map(data, function (item, dataIndex) {
  655 +
  656 + var p = [item.value[1],item.value[0]];
  657 + var p2 = [item.value[2],item.value[0]];
  658 + var pp= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p);
  659 + var pp2= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p2);
  660 +
  661 + var dataSize = data.length;
  662 + if(dataIndex<dataSize-1) {
  663 + for(var i=0;i<dataSize;i++) {
  664 + if(i==dataIndex)
  665 + continue;
  666 + if(data[dataIndex].value[6] == 'in' || data[dataIndex].value[16] == 1) {
  667 + data[dataIndex].value[15] = 0;
  668 + break;
  669 + }
  670 + if(data[dataIndex].value[4] == data[i].value[4] && data[dataIndex].value[7] == (data[i].value[7]-1)) {//同一路牌下的下一个班次的发车时间 - 本班次的到站时间 = 停车时间
  671 + data[dataIndex].value[15] = (data[dataIndex+1].value[1] - data[dataIndex].value[2])/60000;
  672 + break;
  673 + }
  674 + }
  675 + }
  676 + return {
  677 + type: 'rect',
  678 + borderWidth: 4,
  679 + position: chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0}, p),
  680 + shape: {
  681 + //x: -30,//矩形的位置和大小
  682 + width:pp2[0]-pp[0],
  683 + height:height,
  684 + y: -18
  685 + },
  686 + style:{
  687 + fill: 'rgba(121, 121, 121, 0.2)'
  688 + },
  689 + //invisible: false,
  690 + draggable: true,//是否可拖拽
  691 + progressive: true,
  692 + // silent : true,
  693 + onmousemove: echarts.util.curry(showTooltip, dataIndex),
  694 + onmouseout: echarts.util.curry(hideTooltip, dataIndex),
  695 + // ondragstart: echarts.util.curry(onPointDragging, dataIndex),
  696 + ondragend: echarts.util.curry(onPointDragging, dataIndex),
  697 + onmousedown: echarts.util.curry(rightClick, dataIndex),
  698 + z: 99
  699 + };
  700 + })
  701 + });
  702 + };
  703 + // 刷新上下行发车时刻表数据
  704 + var refreshUpDownData = function () {
  705 + // 清空数据
  706 + dataUp=[];
  707 + dataDown=[];
  708 + data = $.extend(true, [], data, historyData[_keyIndex]);
  709 + console.log(_keyIndex);
  710 + for(var i = 0,len=data.length; i < len; i++) {
  711 + var type = [];
  712 + type = $.extend(true, [], type, data[i].value);
  713 + if(data[i].value[6] == 'normal') {
  714 + if (data[i].value[8] == 0) {
  715 + dataUp.push(type);
  716 + } else if (data[i].value[8] == 1) {
  717 + dataDown.push(type);
  718 + }
  719 + }
  720 + }
  721 + dataUp.sort(function(a,b){
  722 + return a[1]-b[1];
  723 + });
  724 + dataDown.sort(function(a,b){
  725 + return a[1]-b[1];
  726 + });
  727 + for(var i = 0,len2=dataUp.length; i < len2; i++) {
  728 + dataUp[i][2] = dataUp[i][0];
  729 + if(i>0) {
  730 + dataUp[i][0] = (dataUp[i][1] - dataUp[i-1][1]) / 60000;
  731 + } else {
  732 + dataUp[i][0] = 0;
  733 + }
  734 + }
  735 +
  736 + for(var i = 0,len3=dataDown.length; i < len3; i++) {
  737 + dataDown[i][2] = dataDown[i][0];
  738 + if(i>0) {
  739 + dataDown[i][0] = (dataDown[i][1] - dataDown[i-1][1]) / 60000;
  740 + } else {
  741 + dataDown[i][0] = 0;
  742 + }
  743 + }
  744 + if (option && typeof option === "object") {
  745 + chart.setOption({
  746 + series: [{
  747 + data: data
  748 + }]
  749 + });
  750 + }
  751 + if (upDownOption && typeof upDownOption === "object") {
  752 + upDownChart.setOption({
  753 + series: [{
  754 + xAxisIndex: 0,
  755 + yAxisIndex: 0,
  756 + data: dataUp
  757 + },{
  758 + xAxisIndex: 1,
  759 + yAxisIndex: 1,
  760 + data: dataDown
  761 + }]
  762 + });
  763 + }
  764 + };
  765 +
  766 + // 定义班次调整事件可单击
  767 + var refreshBC = function (lpName){
  768 + data = historyData[_keyIndex];
  769 + chart.setOption({
  770 + graphic: echarts.util.map(data, function (item, dataIndex) {
  771 +
  772 + var p = [item.value[1],item.value[0]];
  773 + var p2 = [item.value[2],item.value[0]];
  774 + var pp= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p);
  775 + var pp2= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},p2);
  776 +
  777 + var dataSize = data.length;
  778 + if(dataIndex<dataSize-1) {
  779 + for(var i=0;i<dataSize;i++) {
  780 + if(i==dataIndex)
  781 + continue;
  782 + if(data[dataIndex].value[4] == data[i].value[4] && data[dataIndex].value[7] == (data[i].value[7]-1)) {//同一路牌下的下一个班次的发车时间 - 本班次的到站时间 = 停车时间
  783 + data[dataIndex].value[15] = (data[dataIndex+1].value[1] - data[dataIndex].value[2])/60000;
  784 + break;
  785 + }
  786 + }
  787 + }
  788 + return {
  789 + type: 'rect',
  790 + borderWidth: 4,
  791 + position: chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0}, p),
  792 + shape: {
  793 + //x: -30,//矩形的位置和大小
  794 + width:pp2[0]-pp[0],
  795 + height:height,
  796 + y: -18
  797 + },
  798 + style:{
  799 + fill: 'rgba(121, 121, 121, 0.2)'
  800 + },
  801 + //invisible: false,
  802 + draggable: false,//是否可拖拽
  803 + progressive: true,
  804 + onclick: echarts.util.curry(bcClick, dataIndex,lpName),
  805 + ondragend: null,
  806 + onmousedown: null,
  807 + z: 999
  808 + };
  809 + })
  810 + });
  811 + };
  812 +
  813 + var bcClick = function (dataIndex,lpName) {
  814 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  815 + if(data[dataIndex].value[0] != lpName){
  816 + var a = $("#bcAdjustList").val();
  817 + if(a){
  818 + a.push(dataIndex);
  819 + } else
  820 + a = dataIndex;
  821 +
  822 + $("#bcAdjustList").select2('val',a);
  823 + } else
  824 + layer.msg("不能选择目标路牌的班次!");
  825 + };
  826 +
  827 + document.onclick = function(event){
  828 + var count=$(".dropdown-context").length;
  829 + if(count>0){
  830 + $(".dropdown-context").remove();
  831 + }
  832 + };
  833 + // 鼠标右击触发事件
  834 + var rightClick = function (dataIndex, e) {
  835 + var count=$(".dropdown-context").length;
  836 + if(count>0){
  837 + $(".dropdown-context").remove();
  838 + }
  839 + if(e.event.button == 2) {
  840 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  841 + var s = data[dataIndex];
  842 + var htmlStr = template('rightClick_dropdown_menu',{ 'dataIndex': dataIndex, 'style': 'top: '+(e.offsetY+8)+'px; left:'+(e.offsetX-16)+'px; display: block;'});
  843 + $("#bcContainer").append(htmlStr);
  844 + }
  845 + };
  846 + // 显示Tooltip
  847 + var showTooltip = function (dataIndex,e) {
  848 + chart.dispatchAction({
  849 + type: 'showTip',
  850 + seriesIndex: 0,
  851 + dataIndex: dataIndex
  852 + });
  853 + };
  854 + // 隐藏Tooltip
  855 + var hideTooltip = function (dataIndex) {
  856 + chart.dispatchAction({
  857 + type: 'hideTip'
  858 + });
  859 + };
  860 + // 拖动刷新底层班次
  861 + var onPointDragging = function (dataIndex,e) {
  862 + if(e.event.button == 0 || e.event.button == 1) {
  863 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  864 + var p = chart.convertFromPixel({xAxisIndex: 0, yAxisIndex: 0}, this.position);
  865 + data[dataIndex].value[1] = Math.floor(p[0]/60000)*60000;
  866 + //data[dataIndex].value[0] = p[1]; // y轴数据改变(注释时表示只能拖动数据x轴移动)
  867 + data[dataIndex].value[2] = data[dataIndex].value[1] + data[dataIndex].value[3];
  868 +
  869 + var flag = true;
  870 + for (var i = 0, len = data.length; i < len; i++) {
  871 + if (i == dataIndex)
  872 + continue;
  873 + // 同路牌比较
  874 + if (data[dataIndex].value[4] == data[i].value[4] && data[dataIndex].value[7] == (data[i].value[7] - 1)) {// 和后一个班次比较
  875 + if (data[dataIndex].value[2] > data[i].value[1]) {// 班次结束时间晚于于下一班次开始时间(处理数据)
  876 + data[dataIndex].value[2] = data[i].value[1];
  877 + data[dataIndex].value[1] = data[dataIndex].value[2] - data[dataIndex].value[3];
  878 + break;
  879 + }
  880 + }
  881 + if (data[dataIndex].value[4] == data[i].value[4] && data[dataIndex].value[7] == (data[i].value[7] + 1)) {// 和前一个班次比较
  882 + if (data[dataIndex].value[1] < data[i].value[2]) {// 班次开始时间早于上一班次结束时间(处理数据)
  883 + data[dataIndex].value[1] = data[i].value[2];
  884 + data[dataIndex].value[2] = data[dataIndex].value[1] + data[dataIndex].value[3];
  885 + //flag = false;
  886 + break;
  887 + }
  888 + }
  889 + // 阴影拖动外围在xMin-xMax之间
  890 + if (data[dataIndex].value[1] < xMin) {
  891 + data[dataIndex].value[1] = xMin;
  892 + data[dataIndex].value[2] = data[dataIndex].value[1] + data[dataIndex].value[3];
  893 + }
  894 + if (data[dataIndex].value[2] > xMax) {
  895 + data[dataIndex].value[2] = xMax;
  896 + data[dataIndex].value[1] = data[dataIndex].value[2] - data[dataIndex].value[3];
  897 + }
  898 +
  899 + }
  900 + _keyIndex++;
  901 +
  902 + historyData[_keyIndex] = $.extend(true, [], historyData[_keyIndex], data);// 历史数组增加一次数据
  903 + refreshDrag();
  904 + refreshUpDownData();
  905 + historyData.splice(_keyIndex + 1, historyData.length);// 数据改变后过后清除多余的历史数据
  906 + } else {
  907 + refreshDrag();
  908 + }
  909 + };
  910 +
  911 + var makeXAxis = function(gridIndex, opt) {
  912 + return echarts.util.merge({
  913 + type: 'time',
  914 + gridIndex: gridIndex,
  915 + axisLine: {onZero: false, lineStyle: {color: '#ddd'}},
  916 + axisTick: {show: false},
  917 + axisLabel: {show: false},
  918 + splitLine: {show: false, lineStyle: {color: '#ddd'}},
  919 + min: xMin,//"2010-01-01 03:30:00"
  920 + max: xMax,//"2010-01-02 03:30:00"
  921 + scale: true,
  922 + axisPointer: {
  923 + lineStyle: {color: 'transparent'}
  924 + },
  925 + maxInterval: 3600000
  926 + }, opt || {}, true);
  927 + };
  928 +
  929 + var makeYAxis = function (gridIndex, opt) {
  930 + return echarts.util.merge({
  931 + type: 'value',
  932 + gridIndex: gridIndex,
  933 + // nameLocation: 'middle',
  934 + nameLocation: 'left',
  935 + nameTextStyle: {
  936 + color: '#333'
  937 + },
  938 + min: 0,
  939 + max: 30,
  940 + axisTick: {show: false},
  941 + //axisLine: {lineStyle: {color: '#ccc'}},
  942 + axisLabel: {show: false},
  943 + splitLine: {show: false}
  944 + }, opt || {}, true);
  945 + };
  946 +
  947 + var makeGrid = function (top, opt) {
  948 + return echarts.util.merge({
  949 + top: top,
  950 + height: gridHeight
  951 + }, opt || {}, true);
  952 + };
  953 + // 窗口大小改变刷新图层
  954 + $(window).resize(function() {
  955 + resizeChart();
  956 + });
  957 + // 刷新图层大小
  958 + var resizeChart = function () {
  959 + chart.resize();
  960 + upDownChart.resize();
  961 + refreshDrag();
  962 + };
  963 + // 补齐两位
  964 + var swallowTow = function (date) {
  965 + return date>=10?date:(date="0"+date);
  966 + };
  967 + // 时间戳转时间(时间:分钟)
  968 + var getHoursAndMinutes = function (timestamp) {
  969 + var date = new Date(timestamp);
  970 + var Hours = swallowTow(date.getHours());
  971 + var Minutes = swallowTow(date.getMinutes());
  972 + return Hours+":"+Minutes;
  973 + };
  974 +
  975 + /* 数组去重
  976 + * 优化遍历数组法
  977 + * 思路:获取没重复的最右一值放入新数组
  978 + */
  979 + var unique = function (array){
  980 + var r = [];
  981 + for(var i = 0, l = array.length; i < l; i++) {
  982 + for(var j = i + 1; j < l; j++)
  983 + if (array[i] === array[j]) j = ++i;
  984 + r.push(array[i]);
  985 + }
  986 + return r;
  987 + };
  988 + return {
  989 + init: init,
  990 + setLpData: setLpData,
  991 + getLpData: getLpData,
  992 + setLpDataCount: setLpDataCount,
  993 + getLpDataCount: getLpDataCount,
  994 + set_keyIndex: set_keyIndex,
  995 + get_keyIndex: get_keyIndex,
  996 + setHistoryData: setHistoryData,
  997 + getHistoryData: getHistoryData,
  998 + refreshDrag: refreshDrag,
  999 + refreshUpDownData: refreshUpDownData,
  1000 + refreshBC: refreshBC,
  1001 + resizeChart: resizeChart
  1002 + };
  1003 +}();
0 \ No newline at end of file 1004 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/gantt.js
1 (function() { 1 (function() {
2 // 全屏模式点击事件. 2 // 全屏模式点击事件.
  3 + // $(document).on('click','.fullscreen',function() {
  4 + // if($('.ganttSvgContainer').height()>400)
  5 + // $('.ganttSvgContainer').css('height','400px');
  6 + // else
  7 + // $('.ganttSvgContainer').css('height','99%');
  8 + // });
3 $(document).on('click','.fullscreen',function() { 9 $(document).on('click','.fullscreen',function() {
4 - if($('.ganttSvgContainer').height()>400)  
5 - $('.ganttSvgContainer').css('height','400px');  
6 - else  
7 - $('.ganttSvgContainer').css('height','99%'); 10 + if($('.gtt').height()>720)
  11 + $('.gtt').css('height','720px');
  12 + else
  13 + $('.gtt').css('height','99%');
  14 + echartsDrawGTT.resizeChart();
8 }); 15 });
9 // 获取已存在的该时刻表明细数据. 16 // 获取已存在的该时刻表明细数据.
10 var objD = window.localStorage.isDoDate; 17 var objD = window.localStorage.isDoDate;
@@ -32,7 +39,6 @@ @@ -32,7 +39,6 @@
32 }); 39 });
33 $('.tipso-animation').tipso('show'); 40 $('.tipso-animation').tipso('show');
34 setTimeout(function(){$('.tipso-animation').tipso('hide');},4000); 41 setTimeout(function(){$('.tipso-animation').tipso('hide');},4000);
35 - //debugger;  
36 // 1、定义开始与结束时间点字符串. 42 // 1、定义开始与结束时间点字符串.
37 var seMap = getStartAndEndDate(map); 43 var seMap = getStartAndEndDate(map);
38 // 2、获取开始与结束时间对象. 44 // 2、获取开始与结束时间对象.
@@ -46,6 +52,7 @@ @@ -46,6 +52,7 @@
46 var bcTypeArr = getbcType(); 52 var bcTypeArr = getbcType();
47 // 7、参数配置信息. 53 // 7、参数配置信息.
48 var dataMap = argsMap(map,dirA,bcTypeArr,seMap); 54 var dataMap = argsMap(map,dirA,bcTypeArr,seMap);
  55 + parameters.setDataMap(dataMap);
49 // 8、定义最大车辆数与停站时间. 56 // 8、定义最大车辆数与停站时间.
50 var CSMap = null,data = null; 57 var CSMap = null,data = null;
51 58
@@ -65,21 +72,22 @@ @@ -65,21 +72,22 @@
65 _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap); 72 _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap);
66 map.clzs = _paramObj.calcuClzx(); 73 map.clzs = _paramObj.calcuClzx();
67 CSMap = getMaxCarAndStopSpace1(map); 74 CSMap = getMaxCarAndStopSpace1(map);
68 -  
69 } 75 }
70 76
71 // 定义时间参数. 77 // 定义时间参数.
72 - var stopAraay = getsj(map); 78 + var stopArray = getsj(map);
73 if(isNull(objD)) { 79 if(isNull(objD)) {
74 if(map.baseRes== '0') { 80 if(map.baseRes== '0') {
75 // 采用客流数据获取渲染时刻表明细图形的配置参数数据. 81 // 采用客流数据获取渲染时刻表明细图形的配置参数数据.
76 - data = BaseFun.KLplaceClassesTime(CSMap.gattA,stopAraay,CSMap.maxCar,map,seMap,dataMap); 82 + data = BaseFun.KLplaceClassesTime(CSMap.gattA,stopArray,CSMap.maxCar,map,seMap,dataMap);
77 }else if(map.baseRes== '1') { 83 }else if(map.baseRes== '1') {
78 // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据. 84 // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据.
79 - // data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);  
80 - // data = BaseFun.BXPplaceClassesTime01(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);  
81 - data = BaseFun.BXPplaceClassesTime02(stopAraay,CSMap.maxCar,map,seMap,dataMap);  
82 - } else if (map.baseRes == '2') { 85 + // data = BaseFun.BXPplaceClassesTime(stopArray,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
  86 + // data = BaseFun.BXPplaceClassesTime01(stopArray,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
  87 + // data = BaseFun.BXPplaceClassesTime02(stopArray,CSMap.maxCar,map,seMap,dataMap);
  88 + data = scheduleInitialize.scheduleInit(stopArray,CSMap.maxCar,map,seMap,dataMap);
  89 + $(".paramAdd").addClass("hidden");
  90 + } else if (map.baseRes == '2') {
83 // TODO:绘制gantt图表 91 // TODO:绘制gantt图表
84 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 92 // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置
85 // TODO:CSMap.maxCar 之后要设定一下的 93 // TODO:CSMap.maxCar 之后要设定一下的
@@ -109,20 +117,22 @@ @@ -109,20 +117,22 @@
109 } 117 }
110 // 按照发车序号顺序排序. 118 // 按照发车序号顺序排序.
111 lpbc_.sort(function(a,b){return a.fcno-b.fcno}); 119 lpbc_.sort(function(a,b){return a.fcno-b.fcno});
112 - resultJA = resultJA.concat(BaseFun.addjclbbc01(lpbc_,dataMap,stopAraay[0].lbsj,map)); 120 + resultJA = resultJA.concat(BaseFun.addjclbbc01(lpbc_,dataMap,stopAraay[0].lbsj,map));
113 } 121 }
114 data = {'json':rsjar,'bxrcgs':null}; 122 data = {'json':rsjar,'bxrcgs':null};
115 } 123 }
116 - // 创建甘特图对象.  
117 - var graph = d3.select('#ganttSvg').relationshipGraph(  
118 - getGraphArgus({'ganttInitParams': map,'yAxisCarArray':CSMap.maxCar,  
119 - 'startDateTime':seDate.kssj,'endDateTime':seDate.jssj,'stopAraay':stopAraay,'dataMap':dataMap,'bxrcgs':data.bxrcgs}));  
120 - // 渲染数据.  
121 - graph.data(data.json);  
122 - // 记录操作记录.  
123 - graph.addHistory();  
124 - // 初始化右键菜单.  
125 - contextInit(graph); 124 + echartsDrawGTT.init(data.json,true,true);
  125 + console.log(data.json);
  126 + // 创建甘特图对象.
  127 + // var graph = d3.select('#ganttSvg').relationshipGraph(
  128 + // getGraphArgus({'ganttInitParams': map,'yAxisCarArray':CSMap.maxCar,
  129 + // 'startDateTime':seDate.kssj,'endDateTime':seDate.jssj,'stopArray':stopArray,'dataMap':dataMap,'bxrcgs':data.bxrcgs}));
  130 + // // 渲染数据.
  131 + // graph.data(data.json);
  132 + // // 记录操作记录.
  133 + // graph.addHistory();
  134 + // // 初始化右键菜单.
  135 + // contextInit(graph);
126 },500); 136 },500);
127 137
128 /** 138 /**
@@ -439,8 +449,8 @@ @@ -439,8 +449,8 @@
439 * @return 返回甘特图的参数配置信息. 449 * @return 返回甘特图的参数配置信息.
440 * */ 450 * */
441 function getGraphArgus(p) { 451 function getGraphArgus(p) {
442 - var bs = p.stopAraay[0].sxsj > 40 ? 4 : 2;  
443 - var MULTIPLE = Math.round(105/parseInt(p.stopAraay[0].sxsj)) >3 ? Math.round(90/parseInt(p.stopAraay[0].sxsj)) : Math.round(90/parseInt(p.stopAraay[0].sxsj)) *bs; 452 + var bs = p.stopArray[0].sxsj > 40 ? 4 : 2;
  453 + var MULTIPLE = Math.round(105/parseInt(p.stopArray[0].sxsj)) >3 ? Math.round(90/parseInt(p.stopArray[0].sxsj)) : Math.round(90/parseInt(p.stopArray[0].sxsj)) *bs;
444 var VALUEKEYNAME = 'Worldwide Gross' , 454 var VALUEKEYNAME = 'Worldwide Gross' ,
445 DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240, 455 DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240,
446 MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60, 456 MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60,
@@ -453,7 +463,6 @@ @@ -453,7 +463,6 @@
453 var hours=Math.floor(leave1/(3600*1000)); 463 var hours=Math.floor(leave1/(3600*1000));
454 DXHOURS = days*24+hours; 464 DXHOURS = days*24+hours;
455 WIDTH = DXHOURS*MINUTE*MULTIPLE; 465 WIDTH = DXHOURS*MINUTE*MULTIPLE;
456 - // debugger;  
457 var lpsplitA = getylp(p.yAxisCarArray); 466 var lpsplitA = getylp(p.yAxisCarArray);
458 var args = { 467 var args = {
459 'valueKeyName': VALUEKEYNAME, 468 'valueKeyName': VALUEKEYNAME,
@@ -476,11 +485,11 @@ @@ -476,11 +485,11 @@
476 'lpNoA':lpsplitA.lpNoA, 485 'lpNoA':lpsplitA.lpNoA,
477 'lpNameA':lpsplitA.lpNameA, 486 'lpNameA':lpsplitA.lpNameA,
478 'tickFormat': TICKFORMAT, 487 'tickFormat': TICKFORMAT,
479 - 'stopAraay' : p.stopAraay, 488 + 'stopArray' : p.stopArray,
480 'dataMap':p.dataMap, 489 'dataMap':p.dataMap,
481 'showTooltips': SHOWTOOLTIPS, 490 'showTooltips': SHOWTOOLTIPS,
482 'bxrcgs':p.bxrcgs 491 'bxrcgs':p.bxrcgs
483 - } 492 + };
484 return args; 493 return args;
485 } 494 }
486 495
@@ -556,18 +565,18 @@ @@ -556,18 +565,18 @@
556 // 把当前路牌下的班次按发车序号顺序排序. 565 // 把当前路牌下的班次按发车序号顺序排序.
557 normalA.sort(function(a,b){return a.fcno-b.fcno}); 566 normalA.sort(function(a,b){return a.fcno-b.fcno});
558 // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图. 567 // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图.
559 - data = BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopAraay[0].lbsj,map))); 568 + data = BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopArray[0].lbsj,map)));
560 }else { 569 }else {
561 data = graph.getDataArray(); 570 data = graph.getDataArray();
562 } 571 }
563 var rsjar = BaseFun.tzsztest(graph.configuration.taskTypes,data,graph.configuration.dataMap); 572 var rsjar = BaseFun.tzsztest(graph.configuration.taskTypes,data,graph.configuration.dataMap);
564 /*var resultJA = BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, 573 /*var resultJA = BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar,
565 - graph.configuration.dataMap,graph.configuration.stopAraay,data, 574 + graph.configuration.dataMap,graph.configuration.stopArray,data,
566 graph.configuration.dataMap.map);*/ 575 graph.configuration.dataMap.map);*/
567 // 获取图形数据.重新绘制. 576 // 获取图形数据.重新绘制.
568 graph.data(BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, 577 graph.data(BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar,
569 graph.configuration.dataMap, 578 graph.configuration.dataMap,
570 - graph.configuration.stopAraay, 579 + graph.configuration.stopArray,
571 graph.configuration.dataMap.map)); 580 graph.configuration.dataMap.map));
572 // 记录当前操作. 581 // 记录当前操作.
573 graph.addHistory(); 582 graph.addHistory();
@@ -727,8 +736,8 @@ @@ -727,8 +736,8 @@
727 // 把当前路牌下的班次按发车序号顺序排序. 736 // 把当前路牌下的班次按发车序号顺序排序.
728 normalA.sort(function(a,b){return a.fcno-b.fcno}); 737 normalA.sort(function(a,b){return a.fcno-b.fcno});
729 // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图. 738 // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图.
730 - graph.data(BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopAraay[0].lbsj,map))));  
731 - // graph.data(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopAraay[0].lbsj,map)); 739 + graph.data(BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopArray[0].lbsj,map))));
  740 + // graph.data(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopArray[0].lbsj,map));
732 // 记录当前操作. 741 // 记录当前操作.
733 graph.addHistory(); 742 graph.addHistory();
734 } 743 }
src/main/resources/static/pages/base/timesmodel/js/parameters.js 0 → 100644
  1 +/**
  2 + * 时刻表参数类
  3 + */
  4 +var parameters = function () {
  5 + var dataMap;
  6 + var getDataMap = function(){
  7 + return dataMap;
  8 + };
  9 + var setDataMap = function(data){
  10 + dataMap = data;
  11 + };
  12 + return {
  13 + getDataMap : getDataMap,
  14 + setDataMap : setDataMap
  15 + }
  16 +}();
0 \ No newline at end of file 17 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/systemTools.js 0 → 100644
  1 +// 恢复动作
  2 +$('.recover').on('click',function() {
  3 + // 关闭弹出层.
  4 + layer.closeAll();
  5 + // 获取当前操作步数
  6 + var _keyIndex = echartsDrawGTT.get_keyIndex();
  7 + // 判断当前操作是否恢复到最后一步的操纵.
  8 + if(_keyIndex >= echartsDrawGTT.getHistoryData().length-1) {
  9 + layer.msg('您已经是操作记录的【最后一步】了,不能在恢复了!');
  10 + return;
  11 + } else {
  12 + // 标记操作下标前进.
  13 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  14 + var historyData = echartsDrawGTT.getHistoryData();
  15 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  16 + echartsDrawGTT.init(data,false,false);
  17 + echartsDrawGTT.refreshDrag();
  18 + layer.msg('恢复到操作记录的【第'+(_keyIndex+1)+'步】了!');
  19 + }
  20 +});
  21 +// 撤销动作
  22 +$(".revoke").on("click",function(){
  23 + // 关闭弹出层.
  24 + layer.closeAll();
  25 + // 获取当前操作步数
  26 + var _keyIndex = echartsDrawGTT.get_keyIndex();
  27 + // 判断当对图形操作的步骤.
  28 + if(_keyIndex==0) {
  29 + layer.msg('您已经是操作记录的【第一步】了,不能在撤销了!');
  30 + return;
  31 + } else {
  32 + // 标记操作下标后退.
  33 + echartsDrawGTT.set_keyIndex(--_keyIndex);
  34 + var historyData = echartsDrawGTT.getHistoryData();
  35 + var data = $.extend(true, [], data, historyData[_keyIndex]);
  36 + echartsDrawGTT.init(data,false,false);
  37 + echartsDrawGTT.refreshDrag();
  38 + layer.msg('撤销到操作记录的【第'+(_keyIndex+1)+'步】了!');
  39 + }
  40 +});
  41 +/** 监听添加班次事件.*/
  42 +$('.addBc').on('click',function() {
  43 + var bcdom = document.getElementById("bcContainer");
  44 + var lpData = echartsDrawGTT.getLpData();
  45 + var lpDataCount = echartsDrawGTT.getLpDataCount();
  46 + // 弹出层mobal页面
  47 + $.get('/pages/base/timesmodel/fragments/addBc.html', function(m){
  48 + $(pjaxContainer).append(m);
  49 + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。
  50 + $('#addBc_mobal').trigger('addBcMobal.show',[lpData,lpDataCount,echartsDrawGTT]);
  51 + });
  52 +});
  53 +/** 监听添加路牌事件. **/
  54 +$('.addLp').on('click',function() {
  55 + var lpData = echartsDrawGTT.getLpData();
  56 + $.get('/pages/base/timesmodel/fragments/addlp.html', function(m){
  57 + $(pjaxContainer).append(m);
  58 + // 显示修改班次片段.
  59 + $('#addlp_mobal').trigger('addlpMobal.show',[lpData,echartsDrawGTT]);
  60 + });
  61 +});
  62 +/** 监听删除路牌事件. **/
  63 +$('.deleteLp').on('click',function() {
  64 + var lpData = echartsDrawGTT.getLpData();
  65 + $.get('/pages/base/timesmodel/fragments/deletelp.html', function(m){
  66 + $(pjaxContainer).append(m);
  67 + // 显示修改班次片段.
  68 + $('#deletelp_mobal').trigger('deletelpMobal.show',[lpData,echartsDrawGTT]);
  69 + });
  70 +});
  71 +/** 监听班次调整事件.(点击) **/
  72 +$('.bcAdjust').on('click',function() {
  73 + var lpData = echartsDrawGTT.getLpData();
  74 + $.get('/pages/base/timesmodel/fragments/bcadjust.html', function(m){
  75 + $(pjaxContainer).append(m);
  76 + // 显示修改班次片段.
  77 + $('#bcadjust_mobal').trigger('bcadjustMobal.show',[lpData,echartsDrawGTT]);
  78 + });
  79 +});
  80 +/** 监听班次调整事件.(取消) **/
  81 +$('#bcAdjustListCancel').on('click',function() {
  82 + $('.bc-adjust-list').addClass('hidden');
  83 + $('#bcAdjustList').empty();
  84 + echartsDrawGTT.refreshDrag();
  85 + layer.msg('已经退出班次调整!');
  86 +});
  87 +/** 监听班次调整事件.(提交) **/
  88 +$('#bcAdjustListSubmit').on('click',function() {
  89 + var bcAdjustList = $('#bcAdjustList').val(),
  90 + lpName = $('.bc-adjust-list #bcAdjustName').val(),
  91 + lpDataCount = echartsDrawGTT.getLpDataCount();
  92 + if(lpName){
  93 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  94 + historyData = echartsDrawGTT.getHistoryData(),
  95 + data = $.extend(true, [], data, historyData[_keyIndex]);
  96 + for(var i=0,len1 = bcAdjustList.length; i<len1; i++){
  97 + data[bcAdjustList[i]].value[0] = lpName;
  98 + data[bcAdjustList[i]].value[4] = lpDataCount[lpName][2];
  99 + }
  100 + echartsDrawGTT.init(data,false,true);
  101 + echartsDrawGTT.refreshDrag();
  102 + } else
  103 + layer.msg('没有找到目标路牌,请重新选择!');
  104 + $('.bc-adjust-list').addClass('hidden');
  105 + $('#bcAdjustList').empty();
  106 + echartsDrawGTT.refreshDrag();
  107 + layer.msg('已经退出班次调整!');
  108 +
  109 +});
  110 +
  111 +/* 右击菜单事件
  112 +* 1.修改 update
  113 +* 2.删除 delete
  114 +* 3.设为上行 setUp
  115 +* 4.设为下行 setDown
  116 +* 5.设为正常 setNormal
  117 +* 6.设为区间 setRegion
  118 +* 7.设为分班 setFb
  119 +* 8.取消分班 setNofb
  120 +* 9.设为直放 setVenting
  121 +* 10.设为放站 setMajor
  122 +* */
  123 +// 修改
  124 +function dropdownMenuUpdate(dataIndex) {
  125 + $.get('/pages/base/timesmodel/fragments/editbc.html', function(m){
  126 + $(pjaxContainer).append(m);
  127 + // 显示修改班次片段.
  128 + $('#editBc_mobal').trigger('editBcMobal.show',[dataIndex,echartsDrawGTT]);
  129 + });
  130 +}
  131 +// 删除
  132 +function dropdownMenuDelete(dataIndex) {
  133 + // 获取当前操作步数
  134 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  135 + historyData = echartsDrawGTT.getHistoryData(),
  136 + data = $.extend(true, [], data, historyData[_keyIndex]),
  137 + bc = data[dataIndex],
  138 + type = bc.value[6];
  139 + if(!isType(data[dataIndex].value[6],'删除')) {
  140 + layer.confirm('您确定要删除【路牌'+ bc.value[0] +'-->发车序号'+ bc.value[7] +'】当前班次嘛!'+
  141 + '</br>【注意】:如需要撤销当前操作,您可以在系统工具下拉选择点击【撤销按钮】进行恢复.', {
  142 + btn : [ '确认提示并提交', '取消' ]
  143 + }, function() {
  144 + // 关闭弹出层.
  145 + layer.closeAll();
  146 + data.splice(dataIndex,1);
  147 + echartsDrawGTT.init(data,false,true);
  148 + echartsDrawGTT.refreshDrag();
  149 + layer.msg('删除成功!');
  150 + });
  151 + }
  152 +}
  153 +// 切换上下行
  154 +function dropdownMenuSwitchUpDown(dataIndex) {
  155 + // 获取当前操作步数
  156 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  157 + historyData = echartsDrawGTT.getHistoryData(),
  158 + data = $.extend(true, [], data, historyData[_keyIndex]);
  159 + var dir = data[dataIndex].value[8] == 1 ? 0:1;
  160 + data[dataIndex].value[8] = dir;
  161 + data[dataIndex].itemStyle.normal.color = dir==0?"#ff2949":"#518fe3";
  162 + // 起终点互换
  163 + var station = data[dataIndex].value[13];
  164 + data[dataIndex].value[13] = data[dataIndex].value[14];
  165 + data[dataIndex].value[14] = station;
  166 + var dataMap;
  167 + if(data[dataIndex].value[6] == 'in' || data[dataIndex].value[6] == 'out') {
  168 + dataMap = parameters.getDataMap();
  169 + if(data[dataIndex].value[6] == 'out' && dir == 0)
  170 + data[dataIndex].value[3] = parseInt(dataMap.map.upOutTimer)*60000;
  171 + else if(data[dataIndex].value[6] == 'out' && dir == 1)
  172 + data[dataIndex].value[3] = parseInt(dataMap.map.downOutTimer)*60000;
  173 + else if(data[dataIndex].value[6] == 'in' && dir == 0)
  174 + data[dataIndex].value[3] = parseInt(dataMap.map.upInTimer)*60000;
  175 + else if(data[dataIndex].value[6] == 'in' && dir == 1)
  176 + data[dataIndex].value[3] = parseInt(dataMap.map.downInTimer)*60000;
  177 + data[dataIndex].value[2] = data[dataIndex].value[1] + data[dataIndex].value[3];
  178 + }
  179 + echartsDrawGTT.init(data,false,true);
  180 + echartsDrawGTT.refreshDrag();
  181 + layer.msg('设置为上行成功!');
  182 +}
  183 +// 路牌切换上下行
  184 +function dropdownMenuLpSwitchUpDown(dataIndex) {
  185 + // 获取当前操作步数
  186 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  187 + historyData = echartsDrawGTT.getHistoryData(),
  188 + data = $.extend(true, [], data, historyData[_keyIndex]);
  189 + var dataMap = parameters.getDataMap();
  190 + for(var i=0,len=data.length; i<len; i++){
  191 + if(data[dataIndex].value[0] == data[i].value[0]) {
  192 + var dir = (data[i].value[8] == 1 ? 0:1);
  193 + data[i].value[8] = dir;
  194 + data[i].itemStyle.normal.color = dir==0?"#ff2949":"#518fe3";
  195 + // 起终点互换
  196 + var station = data[i].value[13];
  197 + data[i].value[13] = data[i].value[14];
  198 + data[i].value[14] = station;
  199 + if(data[i].value[6] == 'in' || data[i].value[6] == 'out') {
  200 + if(data[i].value[6] == 'out' && dir == 0)
  201 + data[i].value[3] = parseInt(dataMap.map.upOutTimer)*60000;
  202 + else if(data[i].value[6] == 'out' && dir == 1)
  203 + data[i].value[3] = parseInt(dataMap.map.downOutTimer)*60000;
  204 + else if(data[i].value[6] == 'in' && dir == 0)
  205 + data[i].value[3] = parseInt(dataMap.map.upInTimer)*60000;
  206 + else if(data[i].value[6] == 'in' && dir == 1)
  207 + data[i].value[3] = parseInt(dataMap.map.downInTimer)*60000;
  208 + data[i].value[2] = data[i].value[1] + data[i].value[3];
  209 + }
  210 + }
  211 + }
  212 + echartsDrawGTT.init(data,false,true);
  213 + echartsDrawGTT.refreshDrag();
  214 + layer.msg('路牌切换上下行成功!');
  215 +}
  216 +// 设为正常
  217 +function dropdownMenuSetNormal(dataIndex) {
  218 + // 获取当前操作步数
  219 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  220 + historyData = echartsDrawGTT.getHistoryData(),
  221 + data = $.extend(true, [], data, historyData[_keyIndex]);
  222 +
  223 + if(!isType(data[dataIndex].value[6],'设置为正常班次','normal','正常班次')) {
  224 + data[dataIndex].value[6] = 'normal';
  225 + historyData.push(data);
  226 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  227 + echartsDrawGTT.setHistoryData(historyData);
  228 + echartsDrawGTT.refreshDrag();
  229 + echartsDrawGTT.refreshUpDownData();
  230 + layer.msg('设置为正常成功!');
  231 + }
  232 +}
  233 +// 设为区间
  234 +function dropdownMenuSetRegion(dataIndex) {
  235 + // 获取当前操作步数
  236 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  237 + historyData = echartsDrawGTT.getHistoryData(),
  238 + data = $.extend(true, [], data, historyData[_keyIndex]);
  239 + if(!isType(data[dataIndex].value[6],'设置为区间班次','region','区间班次')) {
  240 + data[dataIndex].value[6] = 'region';
  241 + historyData.push(data);
  242 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  243 + echartsDrawGTT.setHistoryData(historyData);
  244 + echartsDrawGTT.refreshDrag();
  245 + echartsDrawGTT.refreshUpDownData();
  246 + layer.msg('设置为区间成功!');
  247 + }
  248 +}
  249 +// 设为分班
  250 +function dropdownMenuSetFb(dataIndex) {
  251 + // 获取当前操作步数
  252 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  253 + historyData = echartsDrawGTT.getHistoryData(),
  254 + data = $.extend(true, [], data, historyData[_keyIndex]);
  255 + if(!isType(data[dataIndex].value[6],'设置为分班班次') && !isType(data[dataIndex].value[16],'设置为分班班次',1,'分班班次')) {
  256 + data[dataIndex].value[16] = 1;
  257 + historyData.push(data);
  258 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  259 + echartsDrawGTT.setHistoryData(historyData);
  260 + echartsDrawGTT.refreshDrag();
  261 + echartsDrawGTT.refreshUpDownData();
  262 + layer.msg('设置为分班成功!');
  263 + }
  264 +}
  265 +// 取消分班
  266 +function dropdownMenuSetNoFb(dataIndex) {
  267 + // 获取当前操作步数
  268 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  269 + historyData = echartsDrawGTT.getHistoryData(),
  270 + data = $.extend(true, [], data, historyData[_keyIndex]);
  271 + if(!isType(data[dataIndex].value[16],0,'不是分班班次')) {
  272 + data[dataIndex].value[16] = 0;
  273 + historyData.push(data);
  274 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  275 + echartsDrawGTT.setHistoryData(historyData);
  276 + echartsDrawGTT.refreshDrag();
  277 + echartsDrawGTT.refreshUpDownData();
  278 + layer.msg('取消分班成功!');
  279 + }
  280 +}
  281 +// 设为直放
  282 +function dropdownMenuSetVenting(dataIndex) {
  283 + // 获取当前操作步数
  284 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  285 + historyData = echartsDrawGTT.getHistoryData(),
  286 + data = $.extend(true, [], data, historyData[_keyIndex]);
  287 + if(!isType(data[dataIndex].value[6],'设置为直放班次','venting','直放班次')) {
  288 + data[dataIndex].value[6] = 'venting';
  289 + historyData.push(data);
  290 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  291 + echartsDrawGTT.setHistoryData(historyData);
  292 + echartsDrawGTT.refreshDrag();
  293 + echartsDrawGTT.refreshUpDownData();
  294 + layer.msg('设置为直放成功!');
  295 + }
  296 +}
  297 +// 设为放站
  298 +function dropdownMenuSetMajor(dataIndex) {
  299 + // 获取当前操作步数
  300 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  301 + historyData = echartsDrawGTT.getHistoryData(),
  302 + data = $.extend(true, [], data, historyData[_keyIndex]);
  303 + if(!isType(data[dataIndex].value[6],'设置为放站班次','major','放站班次')){
  304 + data[dataIndex].value[6] = 'major' ;
  305 + historyData.push(data);
  306 + echartsDrawGTT.set_keyIndex(++_keyIndex);
  307 + echartsDrawGTT.setHistoryData(historyData);
  308 + echartsDrawGTT.refreshDrag();
  309 + echartsDrawGTT.refreshUpDownData();
  310 + layer.msg('设置为放站成功!');
  311 + }
  312 +}
  313 +
  314 +function isType(bcType,msg,inType,opr) {
  315 + var tag = false ;
  316 + layer.closeAll();
  317 + if(bcType=='bd') {
  318 + layer.msg('当前选择的班次是【早例保时间】不能'+ msg +'!');
  319 + tag = true;
  320 + }else if(bcType=='cf') {
  321 + layer.msg('当前选择的班次是【吃饭时间】不能'+ msg +'!');
  322 + tag = true;
  323 + }else if(bcType=='in') {
  324 + layer.msg('当前选择的班次是【进场班次】不能'+ msg +'!');
  325 + tag = true;
  326 + }else if(bcType=='lc') {
  327 + layer.msg('当前选择的班次是【晚例保时间】不能'+ msg +'!');
  328 + tag = true;
  329 + }else if(bcType=='out') {
  330 + layer.msg('当前选择的班次是【出场班次】不能'+ msg +'!');
  331 + tag = true;
  332 + }else if(bcType==inType) {
  333 + layer.msg('当前选择的班次是【'+ opr +'】不能重复设置!');
  334 + tag = true;
  335 + }
  336 + return tag;
  337 +}
  338 +
  339 +/**
  340 + * @description : (TODO) 监听统计数据事件.
  341 + *
  342 + * @status OK.
  343 + ************************************************************************************************************************************************/
  344 +$('.countAdd').on('click',function() {
  345 + var _keyIndex = echartsDrawGTT.get_keyIndex(),
  346 + historyData = echartsDrawGTT.getHistoryData(),
  347 + // list = $.extend(true, [], list, historyData[_keyIndex]);
  348 + list = historyData[_keyIndex],
  349 + dataMap = parameters.getDataMap();
  350 + var countBc = 0,// 总班次
  351 + serviceBc = 0,// 营运班次
  352 + jcbc = 0, // 进场总班次.
  353 + ccbc = 0, // 出场总班次.
  354 + cfbc = 0,// 吃饭总班次.
  355 + zwlbbc = 0,// 早晚例保总班次.
  356 + countGs = 0.0,// 总工时
  357 + servicesj = 0,// 营运班次总时间
  358 + jcsj = 0.0,// 进场总时间.
  359 + ccsj = 0.0, // 出场总时间.
  360 + cfsj = 0.0, // 吃饭总时间.
  361 + zwlbsj = 0.0, // 早晚例保总时间.
  362 + ksBc = 0,// 空驶班次
  363 + serviceLc = 0.0 ,// 营运里程
  364 + ksLc = 0.0 ,// 空驶里程
  365 + avgTzjx = 0.0,// 平均停站间隙
  366 + gfServiceBc = 0,// 高峰营运班次
  367 + dgServiceBc = 0,// 低谷营运班次
  368 + gfAvgTzjx = 0.0,// 高峰平均停站间隙
  369 + dgAvgTzjx = 0.0;// 低谷平均停站间隙
  370 + for(var i = 0;i<list.length;i++) {
  371 + var bcObj = list[i].value;
  372 + if(bcObj[3]>0) {
  373 + countBc = countBc + 1;
  374 + countGs = countGs + bcObj[15] + bcObj[3]/60000;
  375 + var nowDate = new Date(bcObj[1]);
  376 + if((BaseFun.isgfsjd(dataMap.zgfsjd[0].st,dataMap.zgfsjd[0].ed,nowDate) ||
  377 + BaseFun.isgfsjd(dataMap.wgfsjd[0].st,dataMap.wgfsjd[0].ed,nowDate)) &&
  378 + (bcObj[6] == dataMap.bcTypeArr.normal ||
  379 + bcObj[6] == dataMap.bcTypeArr.region ||
  380 + bcObj[6] == dataMap.bcTypeArr.major)) {
  381 + gfServiceBc = gfServiceBc + 1;
  382 + gfAvgTzjx = gfAvgTzjx + bcObj[15];
  383 + } else if((!BaseFun.isgfsjd(dataMap.zgfsjd[0].st,dataMap.zgfsjd[0].ed,nowDate) &&
  384 + !BaseFun.isgfsjd(dataMap.wgfsjd[0].st,dataMap.wgfsjd[0].ed,nowDate)) &&
  385 + (bcObj[6] == dataMap.bcTypeArr.normal ||
  386 + bcObj[6] == dataMap.bcTypeArr.region ||
  387 + bcObj[6] == dataMap.bcTypeArr.major)){
  388 + dgServiceBc = dgServiceBc + 1;
  389 + dgAvgTzjx = dgAvgTzjx + bcObj[15];
  390 + }
  391 + if(bcObj[6] == dataMap.bcTypeArr.normal ||
  392 + bcObj[6] == dataMap.bcTypeArr.region ||
  393 + bcObj[6] == dataMap.bcTypeArr.major) {
  394 + serviceBc = serviceBc + 1;
  395 + serviceLc = serviceLc + bcObj[9];
  396 + servicesj = servicesj + bcObj[3]/60000;
  397 + avgTzjx = avgTzjx + bcObj[15];
  398 + }else if(bcObj[6] == dataMap.bcTypeArr.venting) {
  399 + ksBc = ksBc +1;
  400 + ksLc = ksLc + bcObj[9];
  401 + }else if(bcObj[6] == dataMap.bcTypeArr.in_) {
  402 + jcbc = jcbc +1;
  403 + jcsj = jcsj + bcObj[3]/60000;
  404 + }else if(bcObj[6] == dataMap.bcTypeArr.out) {
  405 + ccbc = ccbc +1;
  406 + ccsj = ccsj + bcObj[3]/60000;
  407 + }else if(bcObj[6] == dataMap.bcTypeArr.cf) {
  408 + cfbc = cfbc +1;
  409 + cfsj = cfsj + bcObj[3]/60000;
  410 + }else if(bcObj[6] == dataMap.bcTypeArr.bd ||
  411 + bcObj[6] == dataMap.bcTypeArr.lc ) {
  412 + zwlbbc = zwlbbc +1;
  413 + zwlbsj = zwlbsj + bcObj[3]/60000;
  414 + }
  415 + }
  416 + }
  417 + dgAvgTzjx = dgAvgTzjx/dgServiceBc;
  418 + gfAvgTzjx = gfAvgTzjx/gfServiceBc;
  419 + avgTzjx = avgTzjx/dgServiceBc;
  420 + var countDate = [{'name':'总班次(包括进出场、吃饭时间、早晚例保、营运且班次时间大于零的班次)','value':countBc},
  421 + {'name':'进场总班次(包括进场且班次时间大于零的班次)','value':jcbc},
  422 + {'name':'出场总班次(包括进场且班次时间大于零的班次)','value':ccbc},
  423 + {'name':'吃饭总班次(包括吃饭且班次时间大于零的班次)','value':cfbc},
  424 + {'name':'早晚例保总班次(包括早晚例保且时间大于零的班次)','value':zwlbbc},
  425 + {'name':'营运总班次(包括正常、区间、放大站且班次时间大于零班次)','value':serviceBc},
  426 + {'name':'进场总时间(包括进场班次且班次时间大于零)','value':parseFloat((jcsj/60).toFixed(2)) + ' 小时'},
  427 + {'name':'出场总时间(包括进场班次且班次时间大于零)','value':parseFloat((ccsj/60).toFixed(2)) + ' 小时'},
  428 + {'name':'吃饭总时间(包括吃饭班次且班次时间大于零)','value':parseFloat((cfsj/60).toFixed(2)) + ' 小时'},
  429 + {'name':'早晚例保总时间(包括早晚例保班次且时间大于零的)','value':parseFloat((zwlbsj/60).toFixed(2)) + ' 小时'},
  430 + {'name':'营运班次总时间(包括正常、区间、放大站且班次时间大于零)','value':parseFloat((servicesj/60).toFixed(2)) + ' 小时'},
  431 + {'name':'总工时(包括进出场、吃饭时间、早晚例保、营运班次时间)','value': parseFloat((countGs/60).toFixed(2)) + ' 小时'},
  432 + {'name':'空驶班次(包括直放班次)','value':ksBc},
  433 + {'name':'营运里程(包括正常、区间、放大站里程)','value':Number(serviceLc).toFixed(3) + ' 公里'},
  434 + {'name':'空驶里程(包括直放里程)','value':ksLc + ' 公里'},
  435 + {'name':'平均停站时间(营运班次停站时间总和/营运总班次)','value':parseInt(avgTzjx) + ' 分钟' },
  436 + {'name':'高峰营运班次(包括早晚高峰时段的正常、区间、放大站班次)','value':gfServiceBc},
  437 + {'name':'低谷营运班次(包括低谷时段的正常、区间、放大站班次)','value':dgServiceBc},
  438 + {'name':'高峰平均停站间隙(高峰营运班次停站时间总和/高峰营运班次总和)','value':parseInt(gfAvgTzjx) + ' 分钟'},
  439 + {'name':'低谷平均停站间隙(低谷营运班次停站时间总和/低谷营运班次总和)','value':parseInt(dgAvgTzjx) + ' 分钟'},
  440 + {'name':'综合评估','value':3}];
  441 + // 弹出层mobal页面
  442 + $.get('/pages/base/timesmodel/countadd.html', function(m){
  443 + $(pjaxContainer).append(m);
  444 + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。
  445 + $('#countadd_mobal').trigger('countAddMobal.show',[countDate]);
  446 + });
  447 +});
  448 +
  449 +/**
  450 + * @description : (TODO) 重新生成事件.
  451 + *
  452 + * @status OK.
  453 + ************************************************************************************************************************************************/
  454 +$('.parambtn').on('click', function() {
  455 + // 弹出层mobal页面
  456 + $.get('/pages/base/timesmodel/paramadd.html', function(m){
  457 + $(pjaxContainer).append(m);
  458 + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。
  459 + $('#paramadd_mobal').trigger('paramAddMobal.show', Main_v2);
  460 + });
  461 +});
0 \ No newline at end of file 462 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/tagsinput.js
@@ -42,8 +42,8 @@ var ComponentsBootstrapTagsinput = function() { @@ -42,8 +42,8 @@ var ComponentsBootstrapTagsinput = function() {
42 var bctypeValue = $('#state_tagsinput_bctype').val(); 42 var bctypeValue = $('#state_tagsinput_bctype').val();
43 var rcnum = $('#state_tagsinput_rcsvalue').val(); 43 var rcnum = $('#state_tagsinput_rcsvalue').val();
44 var clnum = $('#state_tagsinput_clsvalue').val(); 44 var clnum = $('#state_tagsinput_clsvalue').val();
45 - var gsvag = $('#state_tagsinput_gsavgvalue').val();  
46 - if(isNull(bctypeValue,rcnum,clnum,gsvag)) { 45 + // var gsvag = $('#state_tagsinput_gsavgvalue').val();
  46 + if(isNull(bctypeValue,rcnum,clnum)) {
47 if(!Number.isInteger(parseInt(rcnum)/parseInt(clnum))) { 47 if(!Number.isInteger(parseInt(rcnum)/parseInt(clnum))) {
48 layer.msg('当前算法只支持【单/双挡】!请您重新输入!'); 48 layer.msg('当前算法只支持【单/双挡】!请您重新输入!');
49 $('#state_tagsinput_bctype').val(null); 49 $('#state_tagsinput_bctype').val(null);
@@ -57,24 +57,40 @@ var ComponentsBootstrapTagsinput = function() { @@ -57,24 +57,40 @@ var ComponentsBootstrapTagsinput = function() {
57 if(s1a[0]==bctypeValue) { 57 if(s1a[0]==bctypeValue) {
58 rcnum = parseInt(rcnum) + parseInt(s1a[1]); 58 rcnum = parseInt(rcnum) + parseInt(s1a[1]);
59 clnum = parseInt(clnum) + parseInt(s1a[2]); 59 clnum = parseInt(clnum) + parseInt(s1a[2]);
60 - gsvag = parseInt(s1a[3]); 60 + // gsvag = parseInt(s1a[3]);
61 } 61 }
62 } 62 }
63 elt.tagsinput('add', { 63 elt.tagsinput('add', {
64 - "value": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag,  
65 - "text": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag,  
66 - "continent": bctypeValue, 64 + // "value": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag,
  65 + // "text": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag,
  66 + "value": bctypeValue + '/' + rcnum + '/' + clnum,
  67 + "text": bctypeValue + '/' + rcnum + '/' + clnum,
  68 + "continent": bctypeValue
67 }); 69 });
68 $('#state_tagsinput_bctype').val(null); 70 $('#state_tagsinput_bctype').val(null);
69 $('#state_tagsinput_rcsvalue').val(null); 71 $('#state_tagsinput_rcsvalue').val(null);
70 $('#state_tagsinput_clsvalue').val(null); 72 $('#state_tagsinput_clsvalue').val(null);
71 - $('#state_tagsinput_gsavgvalue').val(null);  
72 - } 73 + // $('#state_tagsinput_gsavgvalue').val(null);
  74 + setTimeout(function () {
  75 + var bxrc = $('#state_tagsinput').val();
  76 + // 判断.
  77 + if(bxrc=='' || bxrc==null)
  78 + return false;
  79 + var bxrcAr = bxrc.split(','),pczs = 0;
  80 + for(var s = 0 ; s< bxrcAr.length;s++) {
  81 + // 切割单个班型人次.
  82 + pczs = pczs + parseInt(bxrcAr[s].split('/')[2]);
  83 + }
  84 + $('#clzsInput').val(pczs);
  85 + },500);
  86 + } else {
  87 + layer.msg('请输入完整参数!');
  88 + }
73 }); 89 });
74 90
75 - var isNull = function(v1,v2,v3,v4) { 91 + var isNull = function(v1,v2,v3) {
76 var tag = true; 92 var tag = true;
77 - if(v1==''|| v2=='' || v3=='' || v4=='') 93 + if(v1==''|| v2=='' || v3=='')
78 tag = false; 94 tag = false;
79 return tag; 95 return tag;
80 } 96 }
src/main/resources/static/pages/base/timesmodel/js/v1/AdjustTrip.js 0 → 100644
  1 +/**
  2 + * 平衡车距策略
  3 + * 调整策略如下(有点像滤波器):
  4 + * 1、从头开始,连续取3个班次,获取2个间隔,根据间隔的不同及其他规则,调整中间班次的发车时间
  5 + * 2、基本调整如下,
  6 + * (1)、如果2个间隔时间差1分钟,不调整
  7 + * (2)、如果第一个间隔在区间间隔范围外,调整发车时间1分钟到指定的边界
  8 + * (3)、如果第一个间隔大,调整中间班次发车时间-1分钟,如果调整后的间隔在区间间隔范围外,不调整
  9 + * (4)、如果第二个间隔大,调整中间班次发车时间+1分钟,如果调整后的间隔在区间间隔范围外,不调整
  10 + * 3、如果可调整,但是相关的停站时间无法满足,不调整
  11 + *
  12 + * 以1分钟调整,不停的迭代上述步骤
  13 + *
  14 + * 4、如果还有没有满足要求的班次,此时需要智能修改分班路牌头尾班次,删除,或这加入,然后再次迭代
  15 + */
  16 +var AdjustTrip = function () {
  17 + var departureClearanceAdjust = function (bcList, dataMap) {
  18 + var upBc = new Array(), downBc = new Array();
  19 + // 取出上下行班次,并按发车时间排序
  20 + $.each(bcList, function () {
  21 + if(this.bcType == "normal"){
  22 + if(this.xlDir == "relationshipGraph-up")
  23 + upBc.push(this);
  24 + if(this.xlDir == "relationshipGraph-down")
  25 + downBc.push(this);
  26 + }
  27 + });
  28 + // upBc.sort(function(a,b){return a.fcint-b.fcint});
  29 + // downBc.sort(function(a,b){return a.fcint-b.fcint});
  30 + calculate(upBc, bcList, dataMap, 11);
  31 + calculate(downBc, bcList, dataMap, 11);
  32 + };
  33 +
  34 + var iBcCountOfGroup = 3; // 3个班次一次参与计算
  35 + var dirBcOfGroup = [];
  36 + var dirBcIntervalOfGroup = []; // 班次间隔列表,3个班次,2个间隔
  37 + var oBcFcTime; // 班次发车时间
  38 + /**
  39 + * 平衡车距内部方法。
  40 + * @param dirBc {array} 单方向班次列表
  41 + * @param bcList {array} 所有班次列表对象
  42 + * @param dataMap {array} 参数对象
  43 + * @param iFre {int} 递归次数
  44 + * @private
  45 + */
  46 + var calculate = function (dirBc, bcList, dataMap, iFre) {
  47 + if(iFre > 0){
  48 + // 升序排序
  49 + dirBc.sort(function(a,b){return a.fcint-b.fcint});
  50 +
  51 + for (var i = 0; i <= dirBc.length; i++) {
  52 + // 获取班次列表
  53 + _calcuBcGroup(i, dirBc);
  54 +
  55 + if (dirBcOfGroup.length > 0) {
  56 + // 获取中间预调整的班次时间
  57 + oBcFcTime = dirBcOfGroup[1].fcint;
  58 + // 获取发车间隙:用发车时间判断
  59 + var fcjx = dataMap.fcjx[judgmentTimeQuantum(oBcFcTime)];
  60 + // 发车时间所在时间段
  61 + // var timeQuantum = judgmentTimeQuantum(oBcFcTime);
  62 + if (dirBcIntervalOfGroup[0] < fcjx.min) {
  63 + // 发车间隙调整为高峰发车间隙 +时间
  64 + if (_isModifyBcFcsj(
  65 + bcList,
  66 + dirBcOfGroup[1],
  67 + dataMap,
  68 + 1
  69 + )) {
  70 + _modifyFcsj(
  71 + bcList,
  72 + dirBcOfGroup[1],
  73 + dataMap,
  74 + 1
  75 + );
  76 + }
  77 + } else if (dirBcIntervalOfGroup[0] > fcjx.max) {
  78 + // 发车间隙调整为高峰发车间隙 -时间
  79 + if (_isModifyBcFcsj(
  80 + bcList,
  81 + dirBcOfGroup[1],
  82 + dataMap,
  83 + -1
  84 + )) {
  85 + _modifyFcsj(
  86 + bcList,
  87 + dirBcOfGroup[1],
  88 + dataMap,
  89 + -1
  90 + );
  91 + }
  92 + } else {
  93 + // -1或+1分钟
  94 + if (Math.abs(dirBcIntervalOfGroup[0] - dirBcIntervalOfGroup[1]) <= 1) {
  95 + // 两个间隔相差1分钟,不处理
  96 + } else if (dirBcIntervalOfGroup[0] > dirBcIntervalOfGroup[1]) {
  97 + if (_isModifyBcFcsj(
  98 + bcList,
  99 + dirBcOfGroup[1],
  100 + dataMap,
  101 + -1
  102 + )) {
  103 + _modifyFcsj(
  104 + bcList,
  105 + dirBcOfGroup[1],
  106 + dataMap,
  107 + -1
  108 + );
  109 + }
  110 + } else {
  111 + if (_isModifyBcFcsj(
  112 + bcList,
  113 + dirBcOfGroup[1],
  114 + dataMap,
  115 + 1
  116 + )) {
  117 + _modifyFcsj(
  118 + bcList,
  119 + dirBcOfGroup[1],
  120 + dataMap,
  121 + 1
  122 + );
  123 + }
  124 + }
  125 + }
  126 + }
  127 + }
  128 + // bcFun.deleteNotInRangeBc(dirBc, dataMap.smbcsjArr[].kssj, dataMap.smbcsjArr[].jssj);
  129 + // 递归迭代
  130 + calculate(dirBc, bcList, dataMap, iFre - 1);
  131 + }
  132 + };
  133 + /**
  134 + * 按照规则计算班次列表。
  135 + * @param iStartIndex {int} 开始索引
  136 + * @param dirBc {array} 班次列表
  137 + * @private
  138 + */
  139 + var _calcuBcGroup = function(iStartIndex, dirBc) {
  140 + dirBcOfGroup = [];
  141 + dirBcIntervalOfGroup = [];
  142 + for (var i = iStartIndex; i < iStartIndex + iBcCountOfGroup && iStartIndex < dirBc.length - 2; i++) {
  143 + dirBcOfGroup.push(dirBc[i]);
  144 + }
  145 + for (var j = 0; j < dirBcOfGroup.length - 1; j++) {
  146 + dirBcIntervalOfGroup.push((DateTimeTool.getDateTime(dirBcOfGroup[j + 1].fcsj).getTime() - DateTimeTool.getDateTime(dirBcOfGroup[j].fcsj).getTime())/60000);
  147 + // dirBcIntervalOfGroup.push(Math.round((dirBcOfGroup[j + 1].fcint - dirBcOfGroup[j].fcint)/360000));
  148 + }
  149 + };
  150 +
  151 + /**
  152 + * 是否可以调整班次发车时间。
  153 + * @param bcList {InternalLpObj} 所有班次对象
  154 + * @param oBc {InternalBcObj} 调整班次对象
  155 + * @param iStep {int} 修正时间步长
  156 + * @private
  157 + */
  158 + function _isModifyBcFcsj(bcList, oBc, dataMap, iStep) {
  159 + // 获取前后班次
  160 + var bc = getLpPrevAndNextBc(bcList, oBc),
  161 + prevBc = bc[0],
  162 + nextBc = bc[1];
  163 + if (prevBc != null && nextBc != null){
  164 + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
  165 + return false;
  166 + }
  167 + // 上一个班次的停站范围, 本班次停站范围, 上一班次停站时间, 本班次停站时间
  168 + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
  169 + StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][judgmentTimeQuantum(oBc.fcint)],
  170 + // prevBcStopTime = prevBc.STOPTIME + iStep,
  171 + // BcStopTime = oBc.STOPTIME + iStep;
  172 + // iStep为班次往后移动的时间,调整后的时间 = 停站 - 往后移动的时间
  173 + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep,
  174 + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
  175 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
  176 + if (prevBcStopTime >= 0 && BcStopTime >= 0) {
  177 + return true;
  178 + } else {
  179 + return false;
  180 + }
  181 + } else if(prevBc == null && nextBc != null) {
  182 + var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][judgmentTimeQuantum(nextBc.fcint)],
  183 + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
  184 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 TODO:没有判定调整发车时间后会不会不够
  185 + if (BcStopTime >= 0) {
  186 + return true;
  187 + } else {
  188 + return false;
  189 + }
  190 + // 如果是第一个班次为空
  191 + } else if(prevBc != null && nextBc == null) {
  192 + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
  193 + return false;
  194 + }
  195 + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
  196 + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep;
  197 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
  198 + if (prevBcStopTime >= 0) {
  199 + return true;
  200 + } else {
  201 + return false;
  202 + }
  203 + }
  204 + }
  205 + /*function _isModifyBcFcsj(bcList, oBc, dataMap, iStep) {
  206 + // 获取前后班次
  207 + var bc = getLpPrevAndNextBc(bcList, oBc),
  208 + prevBc = bc[0],
  209 + nextBc = bc[1];
  210 + if (prevBc != null && nextBc != null){
  211 + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
  212 + return false;
  213 + }
  214 + // 上一个班次的停站范围, 本班次停站范围, 上一班次停站时间, 本班次停站时间
  215 + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
  216 + StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][judgmentTimeQuantum(oBc.fcint)],
  217 + // prevBcStopTime = prevBc.STOPTIME + iStep,
  218 + // BcStopTime = oBc.STOPTIME + iStep;
  219 + // iStep为班次往后移动的时间,调整后的时间 = 停站 - 往后移动的时间
  220 + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep,
  221 + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
  222 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
  223 + if (prevBcStopTime >= prevStopTimeScope.min && BcStopTime >= StopTimeScope.min) {
  224 + return true;
  225 + } else {
  226 + return false;
  227 + }
  228 + } else if(prevBc == null && nextBc != null) {
  229 + var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][judgmentTimeQuantum(nextBc.fcint)],
  230 + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
  231 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 TODO:没有判定调整发车时间后会不会不够
  232 + if (BcStopTime >= StopTimeScope.min) {
  233 + return true;
  234 + } else {
  235 + return false;
  236 + }
  237 + // 如果是第一个班次为空
  238 + } else if(prevBc != null && nextBc == null) {
  239 + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
  240 + return false;
  241 + }
  242 + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
  243 + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep;
  244 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
  245 + if (prevBcStopTime >= prevStopTimeScope.min) {
  246 + return true;
  247 + } else {
  248 + return false;
  249 + }
  250 + }
  251 + }*/
  252 +
  253 + /**
  254 + * 调整发车时间(调整当前班次后,需要处理后续路牌的所有班次)。
  255 + * @param olp {InternalLpObj} 路牌对象
  256 + * @param oBc {InternalBcObj} 班次对象
  257 + * @param iMin {int} 分钟
  258 + * @param dataMap 参数对象
  259 + * @private
  260 + */
  261 + function _modifyFcsj(bcList, oBc, dataMap, iMin) {
  262 + var bc = getLpPrevAndNextBc(bcList, oBc),
  263 + prevBc = bc[0],
  264 + nextBc = bc[1];
  265 + var fcsj = DateTimeTool.getDateTime(oBc.fcsj);
  266 + fcsj.setMinutes(fcsj.getMinutes() + iMin);
  267 + $.each(bcList, function () {
  268 + if(this.lpNo == oBc.lpNo && this.fcno == oBc.fcno){
  269 + var time = new Date(fcsj);
  270 + this.ARRIVALTIME = DateTimeTool.getHHmmStr(time.setMinutes(time.getMinutes() + this.bcsj));
  271 + this.fcsj = DateTimeTool.getHHmmStr(fcsj);
  272 + this.fcint = fcsj.getTime();
  273 + // 前一个班次停站时间 = 原停站时间 - 中间班次移动时间
  274 + this.STOPTIME -= iMin;
  275 + }
  276 + if(prevBc != undefined && prevBc != null && this.lpNo == oBc.lpNo && this.fcno == prevBc.fcno){
  277 + // 前一个班次停站时间 = 原停站时间 + 中间班次移动时间
  278 + this.STOPTIME += iMin;
  279 + }
  280 + });
  281 + }
  282 + // 获取班次前后班次
  283 + var getLpPrevAndNextBc = function (bcList, oBc) {
  284 + var lpBc = new Array(),
  285 + // 前一个班次
  286 + prevBc = null, nextBc = null;
  287 + $.each(bcList, function () {
  288 + if(this.lpNo == oBc.lpNo)
  289 + lpBc.push(this);
  290 + });
  291 + lpBc.sort(function (a,b) {return a.fcint - b.fcint;});
  292 + for(var n = 0; n < lpBc.length; n++) {
  293 + if(lpBc[n].fcno == oBc.fcno && n > 0)
  294 + prevBc = lpBc[n-1];
  295 + if(lpBc[n].fcno == oBc.fcno && n < lpBc.length-1)
  296 + nextBc = lpBc[n+1];
  297 + }
  298 + return [prevBc, nextBc];
  299 + };
  300 + // 判断时间在什么时间段段内
  301 + /**
  302 + * 判断时间在什么时间段段内
  303 + * @param t 时间
  304 + * @private
  305 + */
  306 + var judgmentTimeQuantum = function (t) {
  307 + if(t <= DateTimeTool.getDateTime('6:30'))
  308 + return 0;
  309 + else if(t > DateTimeTool.getDateTime('6:30') && t <= DateTimeTool.getDateTime('8:30'))
  310 + return 1;
  311 + else if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('16:00'))
  312 + return 2;
  313 + else if(t > DateTimeTool.getDateTime('16:00') && t <= DateTimeTool.getDateTime('18:00'))
  314 + return 3;
  315 + else if(t > DateTimeTool.getDateTime('18:00'))
  316 + return 4;
  317 + };
  318 + return {
  319 + departureClearanceAdjust : departureClearanceAdjust
  320 + }
  321 +}();
0 \ No newline at end of file 322 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/v1/bcFun.js 0 → 100644
  1 +/**
  2 + * 内部班次对象。
  3 + * @param lpObj 内部路牌对象
  4 + * @param groupObj 内部圈对象
  5 + * @param otherParamObj 其他参数对象
  6 + * @constructor InternalBcObj
  7 + */
  8 +var bcFun = function() {
  9 +
  10 +
  11 + /**
  12 + * @discription : (TODO) 封装班次属性值
  13 + *
  14 + * @params : [t--起始时间;bcsj--班次历时;c--lp对象属性值;type--类型]
  15 + *
  16 + * @params : [dir--方向;bcs--序号;jhlc--计划里程;gatps--表单参数对象]
  17 + *
  18 + * @params : [isfb--是否分班;qdz--起点站;zdz--终点站;isSwitchXl--是否切割线路;st--停站时间]
  19 + *
  20 + * @return : 返回班次对象属性值
  21 + *
  22 + */
  23 + var getbcObj = function(t,bcsj,c,type,dir,xh,jhlc,gatps,isfb,qdz,zdz,isSwitchXl,st,lbsj) {
  24 + var obj = {};
  25 + obj.parent = c.lpNo;
  26 + obj.lpNo = c.lpNo;
  27 + obj.lp = c.lp;
  28 + obj.lpName = c.lpName;
  29 + obj.lpType = c.lpType;
  30 + obj.bcType = type;
  31 + obj.xlDir = dir;
  32 + obj.fcno = xh;
  33 + obj.jhlc = jhlc;// 计划里程
  34 + obj.tcc = gatps.tcc_id;// 停车场id
  35 + obj.ttinfo = gatps.skbName;// 时刻表id
  36 + obj.xl = gatps.lineName.split('_')[0];// 线路id
  37 + obj.isfb = isfb;
  38 + obj.qdz = qdz;
  39 + obj.zdz = zdz;
  40 + obj.isSwitchXl = isSwitchXl;
  41 + obj.STOPTIME = st;
  42 + obj.bz = null;
  43 + var startTime = null;
  44 + if(type == 'bd' || type == 'out' || type == 'in' || type == 'lc')
  45 + startTime = new Date(t);
  46 + else
  47 + startTime = t;
  48 + if(type=='bd' || type=='lc' )
  49 + obj.bcsj = lbsj;
  50 + else
  51 + obj.bcsj = bcsj;
  52 + if(type=='bd') {
  53 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()-bcsj));
  54 + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime);
  55 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()-lbsj));
  56 + obj.fcsj = DateTimeTool.getHHmmStr(startTime);
  57 + }else if(type=='out') {
  58 + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime);
  59 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()-bcsj));
  60 + obj.fcsj = DateTimeTool.getHHmmStr(startTime);
  61 + }else if(type =='cf') {
  62 + obj.fcsj = DateTimeTool.getHHmmStr(startTime);
  63 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj));
  64 + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime);
  65 + }else if(type=='lc') {
  66 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj));
  67 + obj.fcsj = DateTimeTool.getHHmmStr(startTime);
  68 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+lbsj));
  69 + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime);
  70 + }else if(type=='in') {
  71 + obj.fcsj = DateTimeTool.getHHmmStr(startTime);
  72 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj));
  73 + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime);
  74 + }else if(type=='normal') {
  75 + obj.fcsj = DateTimeTool.getHHmmStr(startTime);
  76 + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj));
  77 + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime);
  78 + }
  79 + return obj;
  80 + };
  81 + /**
  82 + * 修正班次停车时间
  83 + * @param bcList 所有班次集合
  84 + * @param lpNo 修改班次所在路牌
  85 + * @param dataMap 参数
  86 + */
  87 + var adjustBcStopTime = function (bcList, lpNo, dataMap) {
  88 + bcList;
  89 + };
  90 +
  91 + // 上下行字符串转换数字
  92 + var upDownStrConvertNum = function (dir) {
  93 + return dir == "relationshipGraph-up" ? 0: 1;
  94 + };
  95 + /**
  96 + * @description (TODO) 剔除不在上、下行时间范围内的班次.
  97 + * @param jsonArray 初始化路牌下的所有班次并且已经均匀发车间隙的数组集合.
  98 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  99 + */
  100 + var markFirstAndLastBusAlsoDietNotInRangeBc = function(jsonArray , dataMap) {
  101 + // 定义上、下行的正常、区间、空放、直放班次、返回数组集合.
  102 + var listMap = getUpAndDownBc( jsonArray , dataMap) , resultArray = new Array();
  103 + for(var i = 0 ; i < listMap.length ; i++) {
  104 + if(listMap[i].length > 0){
  105 + // 剔除不在时间范围内的班次
  106 + deleteNotInRangeBc(listMap[i] , dataMap.smbcsjArr[i].kssj, dataMap.smbcsjArr[i].jssj);
  107 + // 把班次顺序排序.
  108 + listMap[i].sort(function(a,b){return a.fcint-b.fcint});
  109 + }
  110 + resultArray = resultArray.concat(listMap[i]);
  111 + }
  112 + return resultArray;
  113 + };
  114 + /**
  115 + * @desription (TODO) 剔除不在时间范围内的班次.
  116 + * @param ar 某方向下的班次.
  117 + * @param 开始时间.
  118 + * @param 结束时间.
  119 + */
  120 + var deleteNotInRangeBc = function(ar , kssj , jssj) {
  121 + for(var s = 0 ; s < ar.length ; s++) {
  122 + if(isDelete(DateTimeTool.getDateTime(kssj), DateTimeTool.getDateTime(jssj), DateTimeTool.getDateTime(ar[s].fcsj))) {
  123 + ar.splice(s, 1);
  124 + s--;
  125 + }
  126 + }
  127 + };
  128 + /**
  129 + * @description (TODO) 获取 上、下行的正常、区间、空放、直放班次.
  130 + * @param 需要分割的班次数据集合.
  131 + * @param 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  132 + */
  133 + var getUpAndDownBc = function(json,dataMap) {
  134 + // 定义上行班次 、 下行班次 数组集合、返回数组集合对象.
  135 + var upArray = new Array(),downArray = new Array(),rs = new Array();
  136 + for(var j = 0 ; j< json.length ; j++) {
  137 + // 判断是否为正常、区间、空放、直放班次
  138 + if(json[j].bcType== dataMap.bcTypeArr.normal ||
  139 + json[j].bcType== dataMap.bcTypeArr.region ||
  140 + json[j].bcType== dataMap.bcTypeArr.major ||
  141 + json[j].bcType== dataMap.bcTypeArr.venting) {
  142 + if(json[j].xlDir == dataMap.dira[0])
  143 + upArray.push(json[j]);
  144 + else if(json[j].xlDir == dataMap.dira[1])
  145 + downArray.push(json[j]);
  146 + }
  147 + }
  148 + rs.push(upArray,downArray);
  149 + // 返回数据.
  150 + return rs;
  151 + };
  152 + var isDelete = function(t1,t2,t) {
  153 + var tag = false;
  154 + if(t<t1 || t>t2)
  155 + tag = true;
  156 + return tag;
  157 + };
  158 + /**
  159 + * @description (TODO) 添加进出场班次.
  160 + * @param cara 路牌
  161 + * @param rsjar 班次集合数组
  162 + * @param dataMap dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  163 + * @param map 表单参数对象.
  164 + *
  165 + */
  166 + var addInOutFieldBc = function(cara,rsjar,dataMap,map) {
  167 + var resultJA = new Array(),bcs = 0;
  168 + for(var m = 0 ; m < cara.length; m++) {
  169 + // 获取路牌编号.
  170 + var lpNo_ = cara[m].lpNo;
  171 + // 定义路牌下的所有班次.
  172 + var lpbc_ = new Array();
  173 + // 遍历班次数.
  174 + for(var x =0 ; x <rsjar.length; x++) {
  175 + // 判断当期遍历的班次是否属于当前的路牌.
  176 + if(rsjar[x].lpNo == lpNo_) {
  177 + delete rsjar[x].fcint;
  178 + lpbc_.push(rsjar[x]);
  179 + }
  180 + }
  181 + // 按照发车序号顺序排序.
  182 + lpbc_.sort(function(a,b){return a.fcno-b.fcno});
  183 + addcfbc01(lpbc_,dataMap,map);
  184 + // 按照发车序号顺序排序.
  185 + lpbc_.sort(function(a,b){return a.fcno-b.fcno});
  186 + var tt = addjclbbc01(lpbc_,dataMap,dataMap.lbsj,map);
  187 + bcs = updfcno(tt,bcs);
  188 + resultJA = resultJA.concat(tt);
  189 + }
  190 + return resultJA;
  191 + };
  192 +
  193 + var updfcno = function(bcArr,bcs) {
  194 + for(var i =0; i < bcArr.length;i++) {
  195 + bcArr[i].fcint = DateTimeTool.getDateTime(bcArr[i].fcsj).getTime();
  196 + }
  197 + bcArr.sort(function(a,b){return a.fcint-b.fcint});
  198 + for(var t = 0 ; t <bcArr.length;t++) {
  199 + bcs++;
  200 + bcArr[t].bcs = bcs;
  201 + bcArr[t].fcno = t+1;
  202 + delete bcArr[t].fcint;
  203 + }
  204 + return bcs;
  205 + };
  206 +
  207 +
  208 + /**
  209 + * @description : (TODO) 添加进出场班次、早晚例保班次.
  210 + *
  211 + * @param [bc--路牌下的所有班次;dataMap--参数信息;lbsj--例保时间]
  212 + *
  213 + */
  214 + var addjclbbc01 = function(bc,dataMap,lbsj,gatps) {
  215 + if(bc.length>0)
  216 + bc[bc.length-1].STOPTIME = 0;
  217 + var result = new Array();
  218 + var fcno = 0,dxfno = 0,stas = false;
  219 + for(var b = 0 ; b < bc.length;b++) {
  220 + var fxdm = dirDmToIndex(bc[b].xlDir);
  221 + var car = {'lp':bc[b].lp, 'lpNo':bc[b].lpNo, 'lpName':bc[b].lpName, 'lpType':bc[b].lpType };
  222 + if(b==0) {
  223 + var dqbcfcsj = DateTimeTool.getDateTime(bc[b].fcsj);
  224 + result.push(getbcObj(
  225 + dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.bd,
  226 + dataMap.dira[fxdm],1,0,gatps,0,null,null,null,0,lbsj));// 早行例保班次
  227 + result.push(getbcObj(
  228 + dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.out,
  229 + dataMap.dira[fxdm],2,dataMap.cclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 出场班次
  230 + fcno ++;
  231 + }else if(b==bc.length-1){
  232 + var fcno_ = dxfno + 2;
  233 + var qdbcddsj = DateTimeTool.getDateTime(bc[b].ARRIVALTIME);
  234 + result.push(getbcObj(
  235 + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_,
  236 + dataMap.dira[fxdm],fcno_++,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次
  237 + result.push(getbcObj(
  238 + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.lc,
  239 + dataMap.dira[fxdm],fcno_++,0,gatps,0,null,null,null,0,lbsj));// 晚班例保班次
  240 + }
  241 + dxfno = bc[b].fcno + fcno;
  242 + bc[b].fcno = dxfno;
  243 + if(stas) {
  244 + fcno ++;
  245 + stas = false;
  246 + }
  247 + result.push(bc[b]);
  248 + }
  249 + return result;
  250 + };
  251 +
  252 + var addcfbc01 = function(lpbcar,dataMap,map) {
  253 + var gs = 0 ,sicftag = true;
  254 + for(var g = 0 ; g <lpbcar.length-1;g++ ) {
  255 + if( parseInt((DateTimeTool.getDateTime(lpbcar[g+1].fcsj) - DateTimeTool.getDateTime(lpbcar[g].ARRIVALTIME))/60000) > 180
  256 + && lpbcar[g].STOPTIME==0 && lpbcar[g].bcType =='normal' ) {
  257 + lpbcar[g].isfb = 1;
  258 + }
  259 + }
  260 + };
  261 + var dirDmToIndex = function (str) {
  262 + if(str == 'relationshipGraph-up')
  263 + return 0;
  264 + else if(str == 'relationshipGraph-down')
  265 + return 1;
  266 + };
  267 +
  268 + return{
  269 + getbcObj : getbcObj, //封装班次属性值
  270 + upDownStrConvertNum : upDownStrConvertNum,
  271 + deleteNotInRangeBc : deleteNotInRangeBc,
  272 + markFirstAndLastBusAlsoDietNotInRangeBc : markFirstAndLastBusAlsoDietNotInRangeBc,
  273 + getUpAndDownBc : getUpAndDownBc,
  274 + addInOutFieldBc : addInOutFieldBc, //添加进出场班次
  275 + updfcno : updfcno
  276 + }
  277 +}();
src/main/resources/static/pages/base/timesmodel/js/v1/lpFun.js 0 → 100644
  1 +var lpFun = function () {
  2 + var _bxDesc = [ // 班型描述(班型名称,平均工时,平均工时,平均需要的班次数) 186/月度当值标准天数 = 工时
  3 + {'type':'六工一休','hoursV':7.13, 'minueV':'7:08', 'qcount': 0},
  4 + {'type':'五工一休','hoursV':7.33, 'minueV':'7:20', 'qcount': 0},
  5 + {'type':'四工一休','hoursV':7.14, 'minueV':'7:08', 'qcount': 0},
  6 + {'type':'三工一休','hoursV':8.15, 'minueV':'8:09', 'qcount': 0},
  7 + {'type':'二工一休','hoursV':9.17, 'minueV':'9:10', 'qcount': 0},
  8 + {'type':'一工一休','hoursV':12.22, 'minueV':'12:13', 'qcount': 0},
  9 + {'type':'五工二休','hoursV':8.62, 'minueV':'8:37', 'qcount': 0},
  10 + {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0},
  11 + {'type':'二周三休','hoursV':7.78, 'minueV':'7:47', 'qcount': 0}
  12 + ];
  13 +
  14 + var get_bxDesc = function () {
  15 + return _bxDesc;
  16 + };
  17 +
  18 +
  19 + /**
  20 + * @description (TODO) [ 切割 班型/人次/配车数 ]参数 并封装成数组集合对象.
  21 + * @param str 切割 班型/人次/配车数 字符串.
  22 + */
  23 + var getBxRcListCollection = function(str) {
  24 + // 如果为空 , 直接return
  25 + if(str=='' || str==null)
  26 + return false;
  27 + // 定义返回数组集合.
  28 + var list = new Array();
  29 + // 获取各个班型对应的工时数组.
  30 + // var _bxDesc = get_bxDesc();
  31 + // 按多号切开.
  32 + var bxrcAr = str.split(',');
  33 + if(bxrcAr.length>0) {
  34 + for(var s = 0 ; s< bxrcAr.length;s++) {
  35 + // 按反斜杠切开.
  36 + var s1a = bxrcAr[s].split('/');
  37 + if(s1a.length >= 3) {
  38 + // 定义人数、配车数、日平均工时.
  39 + var rs = parseInt(s1a[1]),fpcls = parseInt(s1a[2]);
  40 + // 定义班型标准小时系数 、 分钟系数.
  41 + var hoursV = 0.0 , minueV = '' ;
  42 + for(var g = 0 ; g < _bxDesc.length; g++) {
  43 + // 如果班型字符串相同.
  44 + if(_bxDesc[g].type == s1a[0]) {
  45 + hoursV = _bxDesc[g].hoursV;
  46 + minueV = _bxDesc[g].minueV;
  47 + break;
  48 + }
  49 + }
  50 + if(rs == fpcls) {
  51 + // 添加到返回数组集合中.
  52 + list.push({'type' : s1a[0] , 'rs' : rs , 'fpcls' : fpcls , 'hoursV' : hoursV ,
  53 + 'minueV' : minueV ,'sslp':[]});
  54 + } else {
  55 + // 双档路牌
  56 + var sdlp = rs - fpcls;
  57 + // 添加到返回数组集合中.
  58 + list.push({'type' : s1a[0] , 'rs' : fpcls-sdlp , 'fpcls' : fpcls-sdlp , 'hoursV' : hoursV ,'minueV' : minueV,'sslp':[]},
  59 + {'type' : s1a[0]+'(双档)' , 'rs' : sdlp , 'fpcls' : sdlp , 'hoursV' : hoursV*2 , 'minueV' : DateTimeTool.calculateHours(hoursV*2),'sslp':[]});
  60 + }
  61 + }
  62 + }
  63 + }
  64 + // 返回数据.
  65 + return list.sort(function(a,b){return b.hoursV-a.hoursV});
  66 + };
  67 + /**
  68 + * @description (TODO) 把班型人次合理的分配到不同的路牌上.
  69 + * @param list 班型人次数组集合.
  70 + * @param clzs 路牌数组.
  71 + * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合.
  72 + * */
  73 + var bxAlloTotLp = function(arr,clzs){
  74 + var cLen = clzs.length;
  75 + var type = getMode(arr);
  76 + var i=0;
  77 + while(clzs.length > i){
  78 + for(var j=0; j<type.length; j++) {
  79 + if(arr[type[j]].len-- > 0) {
  80 + arr[type[j]].bx.sslp.push(clzs[i]);
  81 + i++
  82 + }
  83 + }
  84 + }
  85 + };
  86 + var getMode = function(arr){
  87 + var mode = [], bxRcList = arr;
  88 + var count = bxRcList[0].lps;
  89 + for(var i=1; i<bxRcList.length; i++) {
  90 + if(bxRcList[i].lps < count)
  91 + count = bxRcList[i].lps;
  92 + }
  93 + for(var i=0; i<bxRcList.length; i++) {
  94 + bxRcList[i] = {'bx':bxRcList[i],'len':bxRcList[i].lps, 'ratio':Math.round(bxRcList[i].lps/count)}
  95 + }
  96 + for(var i=0; i<bxRcList.length; i++) {
  97 + for(var j=0; j<bxRcList[i].ratio; j++) {
  98 + mode.push(i);
  99 + }
  100 + }
  101 + // for(var m=0; m<mode.length-2; m++) {
  102 + // if(mode[m] == mode[m+1]) {
  103 + // var a = mode[m+1];
  104 + // mode[m+1] = mode[m+2];
  105 + // mode[m+2] = a;
  106 + // }
  107 + // }
  108 + return mode;
  109 + };
  110 + // 路牌整理
  111 + var lpNeaten = function (bxRcList, carList, dataMap) {
  112 + var carListH = new Array();
  113 + // 取出有工时的路牌
  114 + for (var i = 0; i < bxRcList.length; i++) {
  115 + var sslp = bxRcList[i].bx.sslp, bx = bxRcList[i].bx;
  116 + var count = Math.round(bx.hoursV / (dataMap.zzsj[1] / 60));// 早高峰周转:dataMap.zzsj[1]
  117 + $.each(sslp, function () {
  118 + this.hoursV = bx.hoursV;
  119 + this.count = count;
  120 + this.lpName = bx.type + '_' + this.lpNo;
  121 + this.isfb = false;
  122 + carListH.push(this);
  123 + });
  124 + }
  125 + carListH.sort(function (a, b) {
  126 + return a.lpNo - b.lpNo
  127 + });
  128 + return carListH;
  129 + };
  130 + // 路牌分班
  131 + var lpAddFb = function (bxRcList, carList, dataMap, map) {
  132 + // carListH:带工时和圈数的车辆list,carListCache:缓存为分班车辆
  133 + var carListH = [],carListCache = [];
  134 +
  135 + // 最少分班路牌 = 总路牌 - (低谷周转/低谷最大发车间隔)向上取整
  136 + var fblps = carList.length - Math.ceil((dataMap.zzsj[2]) / map.dgmaxfcjx);
  137 + // 取出有工时的路牌
  138 + for (var i = 0; i < bxRcList.length; i++) {
  139 + var sslp = bxRcList[i].bx.sslp, bx = bxRcList[i].bx;
  140 + var count = Math.round(bx.hoursV / (dataMap.zzsj[1]/60));// 早高峰周转:dataMap.zzsj[1]
  141 + if(bx.type == '五工二休') {
  142 + $.each(sslp, function () {
  143 + // this.wfpBC = 0;// 未分配班次 = 0
  144 + this.hoursV = bx.hoursV;
  145 + // 圈数 = 工时/高峰周转时间(H)
  146 + this.count = count;
  147 + this.lpName = bx.type+'_'+this.lpNo;
  148 + // 五休二默认分班,分班数不够,剩余的在其他路牌分班
  149 + this.isfb = true;
  150 + fblps--;// 分班数 -1
  151 + carListH.push(this);
  152 + });
  153 + } else {
  154 + $.each(sslp, function () {
  155 + this.hoursV = bx.hoursV;
  156 + this.count = count;
  157 + this.lpName = bx.type+'_'+this.lpNo;
  158 + this.isfb = false;
  159 + carListH.push(this);
  160 + });
  161 + }
  162 + }
  163 + if(fblps>0) {
  164 + // 把剩余的分班数,按比例分给剩余连班路牌
  165 + carListCache = [];
  166 + // 切割出连班路牌
  167 + cutCar(carListH,carListCache);
  168 + var index = Math.floor(carListH.length / fblps);
  169 + for(var s=1; s<=fblps; s++){
  170 + carListH[s*index].isfb = true;
  171 + }
  172 + }
  173 + carListH = carListH.concat(carListCache);
  174 + carListH.sort(function (a, b) {
  175 + return a.lpNo - b.lpNo
  176 + });
  177 + for (var i = 0; i < bxRcList.length; i++) {
  178 + bxRcList[i] = bxRcList[i].bx;
  179 + }
  180 + return carListH;
  181 + };
  182 + // 确定路牌分班数
  183 + var lpfbs = function (fblps, bxRcList, index) {
  184 + if(fblps > bxRcList[index].lps){
  185 + fblps = fblps - bxRcList[index].lps;
  186 + bxRcList[index].fblps = bxRcList[index].lps;
  187 + lpfbs(fblps, bxRcList, --index);
  188 + } else {
  189 + bxRcList[index].fblps = fblps;
  190 + }
  191 + };
  192 +
  193 + /**
  194 + * @description (TODO) 把班型人次合理的分配到不同的路牌上.
  195 + * @param list 班型人次数组集合.
  196 + * @param clzs 路牌数组.
  197 + * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合.
  198 + * */
  199 + var bxAlloTotLp = function(arr,clzs){
  200 + var fblp=0,lblp=0;
  201 + for(var j=0; j<arr.length; j++) {
  202 + if(arr[j].ifsb) {
  203 + arr[type[j]].bx.sslp.push(clzs[i]);
  204 + i++
  205 + }
  206 + }
  207 + var cLen = clzs.length;
  208 + var type = getMode(arr);
  209 + var i=0;
  210 + while(clzs.length > i){
  211 + for(var j=0; j<type.length; j++) {
  212 + if(arr[type[j]].len-- > 0) {
  213 + arr[type[j]].bx.sslp.push(clzs[i]);
  214 + i++
  215 + }
  216 + }
  217 + }
  218 + };
  219 + var getMode = function(arr){
  220 + var mode = [], bxRcList = arr;
  221 + var count = bxRcList[0].fpcls;
  222 + for(var i=1; i<bxRcList.length; i++) {
  223 + if(bxRcList[i].fpcls < count)
  224 + count = bxRcList[i].fpcls;
  225 + }
  226 + for(var i=0; i<bxRcList.length; i++) {
  227 + bxRcList[i] = {'bx':bxRcList[i],'len':bxRcList[i].fpcls, 'ratio':Math.round(bxRcList[i].fpcls/count)}
  228 + }
  229 + for(var i=0; i<bxRcList.length; i++) {
  230 + for(var j=0; j<bxRcList[i].ratio; j++) {
  231 + mode.push(i);
  232 + }
  233 + }
  234 + // for(var m=0; m<mode.length-2; m++) {
  235 + // if(mode[m] == mode[m+1]) {
  236 + // var a = mode[m+1];
  237 + // mode[m+1] = mode[m+2];
  238 + // mode[m+2] = a;
  239 + // }
  240 + // }
  241 + return mode;
  242 + };
  243 + return {
  244 + getBxRcListCollection : getBxRcListCollection, // [ 切割 班型/人次/配车数 ]参数 并封装成数组集合对象.
  245 + bxAlloTotLp : bxAlloTotLp, // 把班型人次合理的分配到不同的路牌上
  246 + lpAddFb : lpAddFb, // 路牌分班
  247 + lpNeaten : lpNeaten, // 路牌整理
  248 + get_bxDesc : get_bxDesc, // 获取路牌类型
  249 + }
  250 +}();
0 \ No newline at end of file 251 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/js/v1/scheduleInitialize.js 0 → 100644
  1 +var scheduleInitialize = function () {
  2 +
  3 + /*var _bxDesc = [ // 班型描述(班型名称,平均工时,平均工时,平均需要的班次数)
  4 + {'type':'六工一休','hoursV':6.66, 'minueV':'6:40', 'qcount': 0},
  5 + {'type':'五工一休','hoursV':6.85, 'minueV':'6:51', 'qcount': 0},
  6 + {'type':'四工一休','hoursV':7.14, 'minueV':'7:08', 'qcount': 0},
  7 + {'type':'三工一休','hoursV':7.61, 'minueV':'7:37', 'qcount': 0},
  8 + {'type':'二工一休','hoursV':8.57, 'minueV':'8:34', 'qcount': 0},
  9 + {'type':'一工一休','hoursV':11.42, 'minueV':'11:25', 'qcount': 0},
  10 + {'type':'五工二休','hoursV':7.99, 'minueV':'8:00', 'qcount': 0},
  11 + {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0}
  12 + ];*/
  13 + var _bxDesc = [ // 班型描述(班型名称,平均工时,平均工时,平均需要的班次数) 186/月度当值标准天数 = 工时
  14 + {'type':'六工一休','hoursV':7.13, 'minueV':'7:08', 'qcount': 0},
  15 + {'type':'五工一休','hoursV':7.33, 'minueV':'7:20', 'qcount': 0},
  16 + {'type':'四工一休','hoursV':7.14, 'minueV':'7:08', 'qcount': 0},
  17 + {'type':'三工一休','hoursV':8.15, 'minueV':'8:09', 'qcount': 0},
  18 + {'type':'二工一休','hoursV':9.17, 'minueV':'9:10', 'qcount': 0},
  19 + {'type':'一工一休','hoursV':12.22, 'minueV':'12:13', 'qcount': 0},
  20 + {'type':'五工二休','hoursV':8.62, 'minueV':'8:37', 'qcount': 0},
  21 + {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0},
  22 + {'type':'二周三休','hoursV':7.78, 'minueV':'7:47', 'qcount': 0}
  23 + ];
  24 +
  25 + var get_bxDesc = function () {
  26 + return _bxDesc;
  27 + };
  28 +
  29 + var scheduleInit = function (stopArray, carList, map, seMap, dataMap) {
  30 + var bcData = [];
  31 + if(carList.length == 0) {
  32 + layer.msg("没有分配车辆,无法排班!");
  33 + return;
  34 + }
  35 +
  36 + // 行驶时间、停站时间、周转时间。发车间隙获取
  37 + getParaTime(map,dataMap);
  38 +
  39 + // 第一步 路牌分配
  40 + var bxRcList = lpFun.getBxRcListCollection(map.bxrc);
  41 + lpFun.bxAlloTotLp(bxRcList,carList);
  42 + var carListH = lpFun.lpAddFb(bxRcList, carList, dataMap, map);
  43 +
  44 + // 第二步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
  45 + bcData = flightPlanning(carListH, stopArray, carList, map, seMap, dataMap);
  46 + $.each(bcData, function () {
  47 + this.fcint = DateTimeTool.getDateTime(this.fcsj).getTime();
  48 + });
  49 + // 第三步 剔除营运时间外的班次
  50 + var operationBcData = bcFun.markFirstAndLastBusAlsoDietNotInRangeBc(bcData, dataMap);
  51 + // 第四步 横向调整停站时间
  52 + resizeByPitStopTime(carListH , operationBcData , dataMap);
  53 +
  54 + // 第五步 确认首末班车
  55 + markFirstAndLastBus(operationBcData, dataMap);
  56 +
  57 + // 第六步 抽车来满足工时.
  58 + var tempA = takeCar(operationBcData, carListH , seMap, dataMap , map);
  59 +
  60 + // 第七步 确定吃饭时间.
  61 + if (map.cfdd) { // NEW,没有选择吃饭地点,不设定吃饭班次
  62 + markeEatTime(bxRcList , tempA , carListH , seMap , dataMap ,map);
  63 + }
  64 + // 横向调整停站时间
  65 + // resizeByPitStopTime(carListH , tempA , dataMap);
  66 + // 第八步 纵向调整(发车间隔调整)
  67 + AdjustTrip.departureClearanceAdjust(tempA,dataMap);
  68 + // AdjustTrip2.departureClearanceAdjust(tempA,dataMap);
  69 + bcFun.updfcno(tempA,0);
  70 + // 第九步 添加进出场和早晚例保
  71 + var data = bcFun.addInOutFieldBc(carListH,tempA,dataMap,map);
  72 + return {'json':data,'bxrcgs':null};
  73 + };
  74 +
  75 + /**
  76 + * @description (TODO) 班次规划
  77 + * @param stopArray 封装的一些 停站时间、周转时间、行驶时间、行驶里程等.
  78 + * @param carList 路牌数组
  79 + * @param map 表单参数
  80 + * @param seMap 线路营运开始 ~ 结束时间
  81 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  82 + *
  83 + * 思路:1.算出带工时和圈数的车辆(路牌): 工时/周转时间(上下行一圈加停站时间)没考虑进出场和吃饭
  84 + * 2.判断上标线和中标线方向
  85 + * 3.按路牌顺序横向拉去班次:
  86 + * 3.1.按路牌顺序拉区是找中标线,找到后,就按中标线的第一个班次拉区(中标线之后的路牌一样)
  87 + * 3.2.工时大于10H的路牌一直拉到底
  88 + * 3.3.工时小于10小时的跳过早高峰后的低估班次,直接到晚高峰开始拉区班次
  89 + *
  90 + * @return 返回一个所有路牌下的班次数[从各路牌下的第一个班次发车时间 ~ 营运结束时间点并且是连续的班次数].
  91 + */
  92 + var flightPlanning = function (carListH,stopArray, carList, map, seMap, dataMap) {
  93 + // 定义路牌长度 、所有路牌默认出场方向 [0--上行出场;1--下行出场] 、营运结束时间、返回数组.
  94 + var len = carList.length, cctag, endTime = DateTimeTool.getDateTime(seMap.e), rs = new Array();
  95 +
  96 + // 获取所有路牌默认出场方向.如果是环线则只有一个上行方向.
  97 + cctag = map.linePlayType == '1' ? 0 : (DateTimeTool.getDateTime(map.startStationFirstTime) > DateTimeTool.getDateTime(map.endStationFirstTime) ? 0:1);
  98 + // 上标线发车时间,中标线发车时间, 末班车(0:上行,1:下行)。
  99 + var sbxfcTime, zbxfcTime, lastBus = [];
  100 + sbxfcTime = (cctag == 0 ? DateTimeTool.getDateTime(map.startStationFirstTime) : DateTimeTool.getDateTime(map.endStationFirstTime));
  101 + zbxfcTime = (cctag == 1 ? DateTimeTool.getDateTime(map.startStationFirstTime) : DateTimeTool.getDateTime(map.endStationFirstTime));
  102 + lastBus = [DateTimeTool.getDateTime(map.startStationEndTime), DateTimeTool.getDateTime(map.endStationEndTime)];
  103 + // 中标线路牌下标,初始化1000,找到中标线后会给具体值(适用于路牌小于1000的班次:几乎所有)
  104 + var ZBXCarNum = 1000;
  105 + for (var c = 0; c < carListH.length; c++) {
  106 + // 定义当前路牌方向变量 、 是否开启方向切换变量[0 --- 表示不开启 ; 1 -- 表示开启] 、 序号.
  107 + var fxTagDm = cctag, fxflag = 0, xhNo = 3;
  108 + // count:班次圈数,type:是否跳过低谷班次(只对工时小于10了车辆有效)
  109 + var count = 0, type = true;
  110 + // 定义当前路牌的第一个班次的开始时间.
  111 + var kssj = new Date(sbxfcTime);
  112 + // 进入早高峰按高峰发车间隙,否则按低估: TODO:暂时直接按早高峰
  113 + kssj.setMinutes(kssj.getMinutes() + (c * dataMap.fcjx[1].max));
  114 + // lpKssj:中标线之后的开始时间
  115 + var lpKssj, ZBXAfter = false;
  116 + // 判断是否中标线
  117 + if(c < ZBXCarNum) {
  118 + lpKssj = new Date(kssj);
  119 + // 判断中标线时间 = 发车时间 -(反方向停站时间+反方向行驶时间:早高峰之前行驶时间) 早高峰结束之前都用的最小停站时间
  120 + lpKssj.setMinutes(lpKssj.getMinutes()-(judgeTZSJ(fxTagDm==0 ? 1:0,zbxfcTime,dataMap) + dataMap.xssj[fxTagDm==0 ? 1:0][judgmentTimeQuantum(zbxfcTime)]));
  121 + // 中标线发车时间 与 判断中标线时间的上下差值在 高峰发车间隔的一般以内,为中标线
  122 + if(Math.abs((zbxfcTime.getTime() - lpKssj.getTime())/60000) < dataMap.fcjx[1].max){
  123 + ZBXCarNum = c;
  124 + lpKssj = new Date(zbxfcTime);
  125 + ZBXAfter = true;
  126 + }
  127 + } else {
  128 + lpKssj = new Date(zbxfcTime);
  129 + lpKssj.setMinutes(lpKssj.getMinutes() + dataMap.fcjx[1].max*(c - ZBXCarNum));
  130 + ZBXAfter = true;
  131 + }
  132 + // 中标线之后添加班次
  133 + if(ZBXAfter) {
  134 + // 中标线以后第一个班次更换上下行
  135 + fxTagDm = fxTagDm == 0 ? 1:0;
  136 + // 定义在某时间段内[高峰时间段、低谷时间段]的停站时间.
  137 + var tzsj = judgeTZSJ(fxTagDm,lpKssj,dataMap);
  138 + // 定义在某时间段内的行驶时间.
  139 + var xssj = dataMap.xssj[fxTagDm][judgmentTimeQuantum(lpKssj)];
  140 + // 定义当前班次的停站时间,这里是为了当计算到了最后一个班次的时候,那么停站时间为0 ,但是后续的班次的发车时间需要加上前一个班次的停站时间.
  141 + var xs_tzsj = isLastbc(lpKssj, endTime, tzsj, xssj) ? 0 : tzsj;
  142 + rs.push(bcFun.getbcObj(lpKssj, xssj, carListH[c],
  143 + dataMap.bcTypeArr.normal,
  144 + dataMap.dira[fxTagDm], xhNo++,
  145 + dataMap.pcxslcArr[fxTagDm], map, 0,
  146 + dataMap.qdzArr[fxTagDm],
  147 + dataMap.zdzArr[fxTagDm], null, xs_tzsj, 0));
  148 + // 添加完班次切换回来
  149 + fxTagDm = fxTagDm == 0 ? 1:0;
  150 + }
  151 + while (kssj < endTime) {
  152 + // 获取当前班次方向,如果是当前路牌的第一个班次则为默认方向,否则切换方向.
  153 + fxTagDm = getfx(fxflag, fxTagDm);
  154 + // 开启方向切换.
  155 + fxflag = 1;
  156 + // 定义在某时间段内[高峰时间段、低谷时间段]的停站时间.
  157 + var tzsj = judgeTZSJ(fxTagDm,kssj,dataMap);
  158 + // 定义在某时间段内的行驶时间.
  159 + var xssj = dataMap.xssj[fxTagDm][judgmentTimeQuantum(kssj)];
  160 + // 定义当前班次的停站时间,这里是为了当计算到了最后一个班次的时候,那么停站时间为0 ,但是后续的班次的发车时间需要加上前一个班次的停站时间.
  161 + var xs_tzsj = isLastbc(kssj, endTime, tzsj, xssj) ? 0 : tzsj;
  162 + // 添加正常班次对象.(这里初始化时,都是正常班次类型.)
  163 + rs.push(bcFun.getbcObj(kssj, xssj, carListH[c],
  164 + dataMap.bcTypeArr.normal,
  165 + dataMap.dira[fxTagDm], xhNo++,
  166 + dataMap.pcxslcArr[fxTagDm], map, 0,
  167 + dataMap.qdzArr[fxTagDm],
  168 + dataMap.zdzArr[fxTagDm], null, xs_tzsj, 0));
  169 + // 重新计算下一个班次的开始时间.
  170 + kssj = new Date(kssj.setMinutes(kssj.getMinutes() + tzsj));
  171 + }
  172 + }
  173 + return rs;
  174 + };
  175 +
  176 + /**
  177 + * @description (TODO) 排列各个路牌下的班次.
  178 + * @prarm jsonArray 所有路牌下的班次.
  179 + * @param cara 路牌数组.
  180 + * @prarm saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等.
  181 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  182 + * @map map 表单参数.
  183 + * @return 返回一个满足单个路牌对应的标准工时、满足某班型下的所有路牌的平均工时对应的日平均工时、停站时间、路牌是否分班的班次集合.
  184 + */
  185 + var takeCar = function (jsonArray, cara, saa, dataMap, map) {
  186 + // 定义低谷最大发车时间、最大停站时间来反算出低谷最少配车数.
  187 + var dgmaxfcjx = parseInt(map.dgmaxfcjx),
  188 + dgmaxtzsj = parseInt(map.dgmaxtzsj);
  189 + // 计算低谷最少配车数 (低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙.
  190 + // var dgminpcs = Math.round((dataMap.xssj[0][3] + dataMap.xssj[1][3] + dataMap.dgtzsj[0] + dataMap.dgtzsj[1]) / dgmaxfcjx);
  191 + // var zwxeLpNum = cuontZwxeLpNum(bxRcList);
  192 + // var dgminpcs = 4;
  193 + // 定义返回数组.
  194 + var rs = new Array();
  195 + for(var s = 0 ; s < cara.length; s++) {
  196 + // 定义路牌编号、定义当前路牌下的所有班次.
  197 + var lpNo = cara[s].lpNo, car = cara[s], lpbc = new Array();
  198 + for (var i = 0; i < jsonArray.length; i++) {
  199 + // 判断当期遍历的班次是否属于当前的路牌.
  200 + if (jsonArray[i].lpNo == lpNo) {
  201 + lpbc.push(jsonArray[i]);
  202 + }
  203 + }
  204 + var avgMakerCarNum = lpbc.length - car.count*2;
  205 + rs = rs.concat(abstractBcByWorkTime(lpbc, map, dataMap, saa, cara, avgMakerCarNum));
  206 + }
  207 + return rs;
  208 + };
  209 + function sortDeepArr(arr, sortTypes) {
  210 + var i = 0;
  211 + var len = sortTypes.length;
  212 + var arrObj = {}; //对象-->对象-->数组-->对象
  213 + sortArr(arr, sortTypes[i]);
  214 + function sortArr(arr, sortType) {
  215 + var itSelf = arguments.callee;
  216 + arrObj[sortType.name] = {};
  217 + arr.sort(function(item1, item2) {
  218 + if (item1[sortType.name] === item2[sortType.name]) {
  219 + if (!arrObj[sortType.name][item1[sortType.name]]) {
  220 + arrObj[sortType.name][item1[sortType.name]] = [item1, item2]
  221 + } else {
  222 + arrObj[sortType.name][item1[sortType.name]].push(item2)
  223 + }
  224 + }
  225 + // console.log(arrObj)
  226 + return (item1[sortType.name] - item2[sortType.name]) * (sortType.positive ? 1 : -1);
  227 + });
  228 + i++;
  229 + if (JSON.stringify(arrObj[sortType.name]) === "{}" || i >= len) {
  230 + return
  231 + } else {
  232 + var nextSortType = sortTypes[i];
  233 + $.each(arrObj[sortType.name], function(key, val) {
  234 + console.log(i)
  235 + itSelf(val, nextSortType)
  236 + })
  237 + }
  238 + }
  239 + }
  240 + /**
  241 + * @description : (TODO) 根据行驶时间得到周转时间、停站时间、发车间隙.
  242 + * @param map
  243 + * @param dataMap
  244 + */
  245 + var getParaTime = function (map,dataMap) {
  246 + // 停站类型:tzlx,主站方向:zzfx
  247 + var tzlx = map.tzlx.split('/'),zzfx = 0;
  248 + if(tzlx.length > 1 && tzlx[0] == 1) {
  249 + zzfx = tzlx[1] == 0 ? 0 : 1;
  250 + }
  251 +
  252 + // 行驶时间 上下行分别5个时间段 0:上行,1:下行
  253 + var xssj = [[],[]];
  254 + xssj[0].push(parseInt(map.upTravelTime1));
  255 + xssj[0].push(parseInt(map.upTravelTime2));
  256 + xssj[0].push(parseInt(map.upTravelTime3));
  257 + xssj[0].push(parseInt(map.upTravelTime4));
  258 + xssj[0].push(parseInt(map.upTravelTime5));
  259 + xssj[1].push(parseInt(map.downTravelTime1));
  260 + xssj[1].push(parseInt(map.downTravelTime2));
  261 + xssj[1].push(parseInt(map.downTravelTime3));
  262 + xssj[1].push(parseInt(map.downTravelTime4));
  263 + xssj[1].push(parseInt(map.downTravelTime5));
  264 + // 停站时间 上下行分别5个时间段 0:上行,1:下行 TODO:暂时只支持单向停站
  265 + var tzsj = [[],[]];
  266 + var upDownTravelTimeMin1 =Math.round((parseInt(map.upTravelTime1)+parseInt(map.downTravelTime1))*0.15),
  267 + upDownTravelTimeMin2 =Math.round((parseInt(map.upTravelTime2)+parseInt(map.downTravelTime2))*0.1),
  268 + upDownTravelTimeMin3 =Math.round((parseInt(map.upTravelTime3)+parseInt(map.downTravelTime3))*0.15),
  269 + upDownTravelTimeMin4 =Math.round((parseInt(map.upTravelTime4)+parseInt(map.downTravelTime4))*0.1),
  270 + upDownTravelTimeMin5 =Math.round((parseInt(map.upTravelTime5)+parseInt(map.downTravelTime5))*0.15),
  271 +
  272 + upDownTravelTimeMax1 =Math.round((parseInt(map.upTravelTime1)+parseInt(map.downTravelTime1))*0.2),
  273 + upDownTravelTimeMax2 =Math.round((parseInt(map.upTravelTime2)+parseInt(map.downTravelTime2))*0.15),
  274 + upDownTravelTimeMax3 =Math.round((parseInt(map.upTravelTime3)+parseInt(map.downTravelTime3))*0.2),
  275 + upDownTravelTimeMax4 =Math.round((parseInt(map.upTravelTime4)+parseInt(map.downTravelTime4))*0.15),
  276 + upDownTravelTimeMax5 =Math.round((parseInt(map.upTravelTime5)+parseInt(map.downTravelTime5))*0.2);
  277 + if(zzfx == 0) {
  278 + tzsj[0].push({'min':upDownTravelTimeMin1 < 10 ? 10 : upDownTravelTimeMin1, 'max':upDownTravelTimeMax1});
  279 + tzsj[0].push({'min':upDownTravelTimeMin2 < 10 ? 10 : upDownTravelTimeMin2, 'max':upDownTravelTimeMax2});
  280 + tzsj[0].push({'min':upDownTravelTimeMin3 < 10 ? 10 : upDownTravelTimeMin3, 'max':upDownTravelTimeMax3});
  281 + tzsj[0].push({'min':upDownTravelTimeMin4 < 10 ? 10 : upDownTravelTimeMin4, 'max':upDownTravelTimeMax4});
  282 + tzsj[0].push({'min':upDownTravelTimeMin5 < 10 ? 10 : upDownTravelTimeMin5, 'max':upDownTravelTimeMax5});
  283 + tzsj[1] = [{'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}];
  284 + } else {
  285 + tzsj[1].push({'min':upDownTravelTimeMin1 < 10 ? 10 : upDownTravelTimeMin1, 'max':upDownTravelTimeMax1});
  286 + tzsj[1].push({'min':upDownTravelTimeMin2 < 10 ? 10 : upDownTravelTimeMin2, 'max':upDownTravelTimeMax2});
  287 + tzsj[1].push({'min':upDownTravelTimeMin3 < 10 ? 10 : upDownTravelTimeMin3, 'max':upDownTravelTimeMax3});
  288 + tzsj[1].push({'min':upDownTravelTimeMin4 < 10 ? 10 : upDownTravelTimeMin4, 'max':upDownTravelTimeMax4});
  289 + tzsj[1].push({'min':upDownTravelTimeMin5 < 10 ? 10 : upDownTravelTimeMin5, 'max':upDownTravelTimeMax5});
  290 + tzsj[0] = [{'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}];
  291 + }
  292 + // 周转时间 分别5个时间段
  293 + var zzsj = [];
  294 + zzsj.push(parseInt(map.upTravelTime1)+parseInt(map.downTravelTime1) + tzsj[0][0].min + tzsj[1][0].min);
  295 + zzsj.push(parseInt(map.upTravelTime2)+parseInt(map.downTravelTime2) + tzsj[0][1].min + tzsj[1][1].min);
  296 + zzsj.push(parseInt(map.upTravelTime3)+parseInt(map.downTravelTime3) + tzsj[0][2].max + tzsj[1][2].max);
  297 + zzsj.push(parseInt(map.upTravelTime4)+parseInt(map.downTravelTime4) + tzsj[0][3].min + tzsj[1][3].min);
  298 + zzsj.push(parseInt(map.upTravelTime5)+parseInt(map.downTravelTime5) + tzsj[0][4].max + tzsj[1][4].max);
  299 + // 发车间隙 分别5个时间段
  300 + var fcjx = [];
  301 + var clzs = parseInt(map.clzs);
  302 + // fcjx.push(Math.round(zzsj[0] / clzs > 20.4 ? 20 : (zzsj[0] / clzs < 15 ? 15 : zzsj[1] / clzs)));
  303 + fcjx.push({'min':10, 'max':12});
  304 + // fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs > 8.4 ? 8 : zzsj[1] / clzs)});
  305 + fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs)});
  306 + fcjx.push({'min':8, 'max':20});
  307 + fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs)});
  308 + fcjx.push({'min':8, 'max':20});
  309 +
  310 + dataMap.xssj = xssj;
  311 + dataMap.tzsj = tzsj;
  312 + dataMap.zzsj = zzsj;
  313 + dataMap.fcjx = fcjx;
  314 + // map.dgmaxfcjx = 20;
  315 + // map.dgmaxtzsj = upDownTravelTime3 < 10 ? 10 : upDownTravelTime3;
  316 + };
  317 + // 判断时间在什么时间段段内
  318 + var judgmentTimeQuantum = function (t) {
  319 + if(t <= DateTimeTool.getDateTime('6:30'))
  320 + return 0;
  321 + else if(t > DateTimeTool.getDateTime('6:30') && t <= DateTimeTool.getDateTime('8:30'))
  322 + return 1;
  323 + else if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('16:00'))
  324 + return 2;
  325 + else if(t > DateTimeTool.getDateTime('16:00') && t <= DateTimeTool.getDateTime('18:00'))
  326 + return 3;
  327 + else if(t > DateTimeTool.getDateTime('18:00'))
  328 + return 4;
  329 + };
  330 + // 8:31-16:00专用
  331 + var judgmentTimeQuantum1 = function (t) {
  332 + if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('10:30'))
  333 + return 1;
  334 + else if(t > DateTimeTool.getDateTime('10:30') && t <= DateTimeTool.getDateTime('12:30'))
  335 + return 2;
  336 + else if(t > DateTimeTool.getDateTime('12:30') && t <= DateTimeTool.getDateTime('14:30'))
  337 + return 2;
  338 + else if(t > DateTimeTool.getDateTime('14:30') && t <= DateTimeTool.getDateTime('16:00'))
  339 + return 1;
  340 + };
  341 +
  342 + // 判断发车间隙
  343 + var judgeFCJX = function (kssj, dataMap) {
  344 + var time = dataMap.fcjx[judgmentTimeQuantum(kssj)];
  345 + if(time == null)
  346 + return 0;
  347 + if(judgmentTimeQuantum(kssj) == 2) {
  348 + // 为了从大到小在从小到大
  349 + var time = Math.round((time.max - time.min)/2);
  350 + return time*judgmentTimeQuantum1(kssj) + time.min;
  351 + } else {
  352 + return Math.round((time.max + time.min)/2);
  353 + }
  354 + };
  355 + // 判断停站时间
  356 + var judgeTZSJ = function (dir, kssj, dataMap) {
  357 + var sj = new Date(kssj);
  358 + sj.setMinutes(sj.getMinutes() + dataMap.xssj[dir][judgmentTimeQuantum(sj)]);
  359 + var sjd = judgmentTimeQuantum(sj);
  360 + var time = dataMap.tzsj[dir][sjd];
  361 + if(time == null)
  362 + return 0;
  363 + // 高峰和早高峰之前返回最小停站时间
  364 + if(sjd == 0 || sjd == 1 || sjd == 3) {
  365 + return time.min;
  366 + // 低估返回最大停站时间
  367 + } else {
  368 + return time.max;
  369 + }
  370 + };
  371 + // 判断行驶时间
  372 + var judgeXSSJ = function (dir, kssj, dataMap) {
  373 + var xssj = dataMap.xssj[dir][judgmentTimeQuantum(kssj)];
  374 +
  375 + var sjd = judgmentTimeQuantum(sj);
  376 + var time = dataMap.tzsj[dir][sjd];
  377 + if(time == null)
  378 + return 0;
  379 + // 高峰和早高峰之前返回最小停站时间
  380 + if(sjd == 0 || sjd == 1 || sjd == 3) {
  381 + return time.min;
  382 + // 低估返回最大停站时间
  383 + } else {
  384 + return time.max;
  385 + }
  386 + };
  387 + /**
  388 + * @discription : (TODO) 判断是否为最后一个班次
  389 + *
  390 + * @params : [t1--当前计算时间;t2--结束时间;tzsj--停站时间;bcsj--班次历时]
  391 + *
  392 + * @return : 返回一个布尔值。
  393 + **/
  394 + var isLastbc = function(t1,t2,tzsj,bcsj) {
  395 + var data = new Date(t1);
  396 + data.setMinutes(data.getMinutes() + bcsj + tzsj);
  397 + var tag = false;
  398 + if(data>=t2)
  399 + tag = true;
  400 + return tag;
  401 + };
  402 + /**
  403 + * @discription : (TODO) 获取行驶时间
  404 + *
  405 + * @parmas : [zg--早高峰时间段;wg--晚高峰时间段;sj--当前时间;pc--平常行驶时间;gf--高峰行驶时间;dir--方向]
  406 + *
  407 + * @return : 返回一个数值。这里返回的是行驶时间数值
  408 + *
  409 + * */
  410 + var getByDirTravelTime = function(zg,wg,sj,pc,gf,dir) {
  411 + var xxsj = 0;
  412 + if(isgfsjd(zg[0].st,zg[0].ed,sj) || isgfsjd(wg[0].st,wg[0].ed,sj))
  413 + xxsj = gf[dir];
  414 + else
  415 + xxsj = pc[dir];
  416 + return xxsj;
  417 + };
  418 + /**
  419 + * @discription : (TODO) 比较一个时间是否在某个时间段内
  420 + *
  421 + * @params : [st--开始时间;ed--结束时间;sj--当前时间]
  422 + *
  423 + * @return : 返回一个布尔值。这里判断一个时间是否在高峰时间段
  424 + *
  425 + **/
  426 + var isgfsjd = function(st,ed,sj) {
  427 + var tag = false;
  428 + if((sj<=ed || (sj-st)/60000<5 ) && (sj>=st || (st-sj)/60000<5))
  429 + tag = true;
  430 + return tag;
  431 + };
  432 + // 判断是否在高峰时间段
  433 + var isPeakTimeScope = function(kssj,dataMap) {
  434 + var tag = false;
  435 + if((dataMap.zgfsjd[0].st <= kssj && kssj<= dataMap.zgfsjd[0].ed ) ||
  436 + ( dataMap.wgfsjd[0].st <= kssj && kssj <= dataMap.wgfsjd[0].ed))
  437 + tag = true;
  438 + return tag;
  439 + };
  440 + /**
  441 + * @discription : (TODO) 获取班次方向
  442 + *
  443 + * @params : [fxtag--临时数值;cc--当前方向下标]
  444 + *
  445 + * @return : 返回一个数值。该数值代表方向下标
  446 + **/
  447 + var getfx = function(fxtag,cc) {
  448 + var index = cc;
  449 + if(fxtag>0) {
  450 + if(cc==0)
  451 + index = 1;
  452 + else if(cc==1)
  453 + index = 0;
  454 + }
  455 + return index;
  456 + };
  457 +
  458 + /**
  459 + * @discription : (TODO)获取所有路牌默认出场方向.
  460 + *
  461 + * 判定规则:
  462 + * 下行头班车时间 + 下行行驶时间 + 下行停站时间 大于了 上行头班车时间 判定都为上行出场 否则为下行出场.
  463 + *
  464 + * 举例:
  465 + * 浦东38路 上行头班车时间是7:00 下行头班车是6:30 ,下行行驶时间是25分钟 , 下行停站时间为5分钟.
  466 + * 所以浦东38的所有路牌的第一个班次都是下行出场.
  467 + *
  468 + * @params : 起终点站的首末班车时间
  469 + *
  470 + * @return : 返回方向结果. [0--上;1--下;2--未知].
  471 + *
  472 + **/
  473 + var getdefaultDir01 = function(list , xxsj , tzsj) {
  474 + var sxtbcsj = DateTimeTool.getDateTime(list[0].kssj);
  475 + var xxtbcsj = DateTimeTool.getDateTime(list[1].kssj);
  476 + xxtbcsj.setMinutes(xxtbcsj.getMinutes() + xxsj + tzsj);
  477 + if(xxtbcsj>sxtbcsj) {
  478 + return 0;
  479 + }else {
  480 + return 1;
  481 + }
  482 + };
  483 + /**
  484 + * @discription : (TODO)求两个集合的差集
  485 + *
  486 + * @params : [arr1--数组1;arr2--数组2]
  487 + *
  488 + * @return : 返回两个集合的差集。这里返回的是封装的ar1不在ar2中的元素数组对象
  489 + *
  490 + **/
  491 + var chaji_array = function(arr1,arr2){
  492 + var arr3 = [];
  493 + for (var i = 0; i < arr1.length; i++) {
  494 + var flag = true;
  495 + for (var j = 0; j < arr2.length; j++) {
  496 + if (arr2[j] == arr1[i])
  497 + flag = false;
  498 + }
  499 + if (flag)
  500 + arr3.push(arr1[i]);
  501 + }
  502 + return arr3;
  503 + };
  504 +
  505 + /**
  506 + * @description (TODO) 标记上、下行首末班车.
  507 + * @param jsonArray 初始化路牌下的所有班次并且已经均匀发车间隙的数组集合.
  508 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  509 + */
  510 + var markFirstAndLastBus = function(jsonArray , dataMap) {
  511 + // 定义上、下行的正常、区间、空放、直放班次、返回数组集合.
  512 + var listMap = getUpAndDownBc( jsonArray , dataMap) , resultArray = new Array();
  513 + for(var i = 0 ; i < listMap.length ; i++) {
  514 + if(listMap[i].bc.length > 0){
  515 + // 把班次顺序排序.
  516 + listMap[i].bc.sort(function(a,b){return a.fcint-b.fcint});
  517 + // 确定首末班车时间.
  518 + markFirstAndLastBusAlso(listMap[i].bc , dataMap , i);
  519 + }
  520 + resultArray = resultArray.concat(listMap[i].bc);
  521 + }
  522 + return resultArray;
  523 + };
  524 +
  525 + /**
  526 + * @description (TODO) 确定某方向下的末班车.
  527 + * @param dirArray 某方向下的数组集合.
  528 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  529 + * @param dir 方向.
  530 + */
  531 + var markFirstAndLastBusAlso = function(dirArray , dataMap , dir) {
  532 + if(dirArray.length>=2) {
  533 + // 定义最后一个班次.
  534 + var dirLastBc = dirArray[dirArray.length-1];
  535 + // 确认末班车时间
  536 + if(dirLastBc.fcsj != dataMap.smbcsjArr[dir].jssj) {
  537 + // 修改最后一个班次的发车时间.
  538 + dirLastBc.fcsj = dataMap.smbcsjArr[dir].jssj;
  539 + // 修改最后一个班次的班次时间.
  540 + dirLastBc.bcsj = dataMap.dgxxsjArr[dir];
  541 + // 定义到达时间.
  542 + var ddsj_ = DateTimeTool.getDateTime(dirLastBc.fcsj);
  543 + ddsj_.setMinutes(ddsj_.getMinutes() + dataMap.xssj[dir][4]);
  544 + // 修改最后一个班次的到达时间.
  545 + dirLastBc.ARRIVALTIME = DateTimeTool.getHHmmStr(ddsj_);
  546 + dirLastBc.bcsj = dataMap.xssj[dir][4];
  547 + }
  548 + }
  549 + };
  550 +
  551 + /**
  552 + * @description (TODO) 获取 上、下行的正常、区间、空放、直放班次.
  553 + * @param 需要分割的班次数据集合.
  554 + * @param 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  555 + */
  556 + var getUpAndDownBc = function(json,dataMap) {
  557 + // 定义上行班次 、 下行班次 数组集合、返回数组集合对象.
  558 + var upArray = new Array(),downArray = new Array(),rs = new Array();
  559 + for(var j = 0 ; j< json.length ; j++) {
  560 + // 判断是否为正常、区间、空放、直放班次
  561 + if(json[j].bcType== dataMap.bcTypeArr.normal ||
  562 + json[j].bcType== dataMap.bcTypeArr.region ||
  563 + json[j].bcType== dataMap.bcTypeArr.major ||
  564 + json[j].bcType== dataMap.bcTypeArr.venting) {
  565 + if(json[j].xlDir == dataMap.dira[0])
  566 + upArray.push(json[j]);
  567 + else if(json[j].xlDir == dataMap.dira[1])
  568 + downArray.push(json[j]);
  569 + }
  570 + }
  571 + rs.push({'bc' : upArray},{'bc' : downArray});
  572 + // 返回数据.
  573 + return rs;
  574 + };
  575 +
  576 + /**
  577 + * @description : (TODO) 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班. -- 这里我们也叫抽车
  578 + * @param bxlpbc 班型下的各个路牌的所有班次数组.
  579 + * @param map 表单参数信息
  580 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  581 + * @param saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等.
  582 + * @param cara 路牌数组
  583 + * @param bxrcObj 班次类型对象
  584 + * @param dgminpcs 低谷最多配车数.
  585 + * *********************************** 业务要求 ****************************************************
  586 + * 满足单个路牌对应的标准工时、满足某班型下的所有路牌的平均工时对应的日平均工时、停站时间、路牌是否分班的班次集合.
  587 + *
  588 + * *********************************** 业务分析与思路 **********************************************
  589 + *
  590 + * 首先判断出该路牌所属的班型,这里暂时考虑分两种情况.
  591 + *
  592 + * 第一种情况 :【五工二休】班型
  593 + *
  594 + * 特点:一天标准工时为 : 8个小时 ;
  595 + * 一般该班型下的路牌班次出现密集的地方 是在高峰时段以及高峰时段附近。(这种路牌在模型里,我们称为短(断)路牌);
  596 + * 这种班型现象一般是晚出早归.
  597 + *
  598 + * 要求:单个路牌下的工时满足: 工时浮动范围在 标准工时【1-1.5】小时.
  599 + * 相同班型路牌下的平均工时满足: 工时浮动范围在 以表单录入的日平均工时10分钟内.
  600 + *
  601 + * 剔除规则:从最后一个班次开始剔除,遇到高峰时段则跳过。一直剔除到满足到班型的判断标准工时8小时。
  602 + *
  603 + * 第二种情况 : 其它班型(包括 一工一休 、 二工一休 、 三工一休 、 四工一休 、 五工一休 、 六工一休)
  604 + *
  605 + * 特点:一天标准工时:以各自对应的班型工时为准。这里会有单/双档 等的概念。现在我们暂时也只考虑单/双档这种情况.
  606 + * 单:一个路牌一个人开 / 双:一个路牌两个开 ......
  607 + * 那么一个路牌下的总工时为 各自对应的班型标准工时*档数.
  608 + * 这种情况下的路牌
  609 + * 第一条件首先满足高峰时段。然后看情况(满足工时或者是防止工时超出)是否会产生分班。
  610 + * 如果不产生分班:则一定为连续的,也就是说从头开到尾.
  611 + * 如果产生分班:
  612 + * 第一种情况 : 中间会断掉.一般这个断掉的时间不会太长,但至少是3小时以上。
  613 + * 第二种情况 : 连续的。这种情况一定是双档。不然工时会超出.
  614 + *
  615 + * 要求:单个路牌下的工时满足 :工时浮动范围在 标准工时【1-1.5】小时.
  616 + * 相同班型路牌下的平均工时满足 : 工时浮动范围在 以表单录入的日平均工时10分钟内.
  617 + *
  618 + * 剔除规则:这里情况比较复杂,因为先要考虑该路牌是否分班。
  619 + *
  620 + * 判断是否会产生分班分两种条件
  621 + *
  622 + * 第一种情况:是双档一定有分班班次.并且是连续的班次.
  623 + *
  624 + * 第二种情况:是单档 , 但是单个路牌工时超出了要求范围 , 为了在满足工时的条件下。采取分班。
  625 + * 判断依据:反算出低谷最少配车数.
  626 + * 计算公式:(低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙
  627 + * 这里的取整数要求:四舍五入去整。
  628 + *
  629 + *
  630 + * 共同满足的条件 : 所有路牌下的相邻班次(前提条件是 不是分班班次)的停站时间不得超过 行业标准 行驶时间的10%~15%。如果有特殊情况,以表单录入的低谷最大停站时间为极限。
  631 + *
  632 + *
  633 + **/
  634 + var abstractBcByWorkTime = function(lpbc, map, dataMap, saa, cara, deletebcNum) {
  635 + var rsultA = new Array() , dgzjsj = DateTimeTool.getDateTime('10:30');
  636 + var sumGs = 0;
  637 + if(lpbc.length<=0)
  638 + return;
  639 + var isLastFlag = lpDownIsHaveLastBc(lpbc , dataMap.smbcsjArr) , tcbcgzA = new Array();
  640 + var isFirstFlag = lpDownIsHaveFirstBc(lpbc , dataMap.smbcsjArr);
  641 + var bxStr = lpbc[0].lpName.split('_');
  642 + /** 满足工时需要剔除的班次
  643 + * wgfhtcbcNum,zgfqtcbcNum 定义晚高峰后,早高峰前 能剔除多少班次数(适用于单挡连班)
  644 + * dgzjtcbcNum: 低估中间能剔除多少班次数(适用于五休二以外的分班)
  645 + * dgtcbcNum: 低估能剔除多少班次数(适用于五休二分班)
  646 + */
  647 + var wgfhtcbcNum=0,zgfqtcbcNum=0,dgzjtcbcNum=0,dgtcbcNum=0;
  648 + $.each(lpbc, function () {
  649 + if(DateTimeTool.getDateTime(this.fcsj) > dataMap.wgfzhsjd[0].st)
  650 + wgfhtcbcNum++;
  651 + if(DateTimeTool.getDateTime(this.fcsj) < dataMap.zgfsjd[0].st)
  652 + zgfqtcbcNum++;
  653 + if(DateTimeTool.getDateTime(this.fcsj) > dgzjsj && DateTimeTool.getDateTime(this.fcsj) < dataMap.wgfsjd[0].st)
  654 + dgzjtcbcNum++;
  655 + if(DateTimeTool.getDateTime(this.fcsj) > dataMap.zgfsjd[0].ed && DateTimeTool.getDateTime(this.fcsj) < dataMap.wgfsjd[0].st)
  656 + dgtcbcNum++;
  657 +
  658 + });
  659 + if(bxStr[0] == '五工二休'){
  660 + if(isLastFlag) {
  661 + // 定义时间段内剔除班次规则.
  662 + tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'asc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum: deletebcNum});
  663 + }else {
  664 + tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dataMap.wgfsjd[0].st ,'order' : 'asc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum: deletebcNum},
  665 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum});
  666 + }
  667 + } else {
  668 + if(lpbc.isfb) {
  669 + if(isLastFlag) {
  670 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
  671 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  672 + } else if(isFirstFlag){
  673 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
  674 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  675 + } else {
  676 + tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed,'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum},
  677 + {'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum});
  678 + }
  679 + }else {
  680 + // 单档 一个路牌一档劳动力
  681 + /*if(deletebcNum - (wgfhtcbcNum+zgfqtcbcNum) > 0) {
  682 + // TODO:可能删除末班车
  683 + tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed,'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum},
  684 + {'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum});
  685 + } else {
  686 + if(isLastFlag) {
  687 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
  688 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  689 + } else if(isFirstFlag){
  690 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
  691 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  692 + } else {
  693 + tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc', 'deletebcNum' : deletebcNum - zgfqtcbcNum},
  694 + {'minsj': dataMap.zgfzqsjd[0].st, 'maxsj' : dataMap.zgfzqsjd[0].ed, 'order' : 'asc','deletebcNum' : zgfqtcbcNum});
  695 + }
  696 + }*/
  697 + if(isLastFlag) {
  698 + tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum: deletebcNum});
  699 + } else if(isFirstFlag){
  700 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
  701 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  702 + } else {
  703 + tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc', 'deletebcNum' : deletebcNum - zgfqtcbcNum},
  704 + {'minsj': dataMap.zgfzqsjd[0].st, 'maxsj' : dataMap.zgfzqsjd[0].ed, 'order' : 'asc','deletebcNum' : zgfqtcbcNum});
  705 + }
  706 + }
  707 + }
  708 + // 剔除不在高峰时间段内的班次.
  709 + spliceBc02(lpbc , tcbcgzA , dataMap , false);
  710 + rsultA = rsultA.concat(lpbc);
  711 + return rsultA;
  712 + };
  713 +
  714 + /**
  715 + * @description (TODO) 判断某路牌下是否存在末班车时间班次.
  716 + * @param arr 某路牌下的班次.
  717 + * @param smbcsjArr 首末班车时间点数组集合.
  718 + */
  719 + var lpDownIsHaveLastBc = function(arr , smbcsjArr) {
  720 + for(var a = 0 ; a < arr.length ; a++) {
  721 + for(var s = 0 ; s < smbcsjArr.length ; s++) {
  722 + if(arr[a].fcsj == smbcsjArr[s].jssj && dirDmToIndex(arr[a].xlDir) == s)
  723 + return true;
  724 + }
  725 + }
  726 + return false;
  727 + };
  728 + var lpDownIsHaveFirstBc = function(arr , smbcsjArr) {
  729 + for(var a = 0 ; a < arr.length ; a++) {
  730 + for(var s = 0 ; s < smbcsjArr.length ; s++) {
  731 + if(arr[a].fcsj == smbcsjArr[s].kssj && dirDmToIndex(arr[a].xlDir) == s)
  732 + return true;
  733 + }
  734 + }
  735 + return false;
  736 + };
  737 +
  738 + /**
  739 + * @description (TODO) 根据定义规则剔除班次.
  740 + * @param arr 班次数组.
  741 + * @param tcbcgzA 剔除规则.
  742 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  743 + * @param isfb 剔除过程中是否会产生分班.
  744 + */
  745 + var spliceBc02 = function (arr , tcbcgzA , dataMap , isfb) {
  746 + for(var t = 0 ; t < tcbcgzA.length ; t++) {
  747 + if(tcbcgzA[t].deletebcNum <= 0) {
  748 + continue;
  749 + }
  750 + var order = tcbcgzA[t].order;
  751 + if(order == 'asc')
  752 + arr.sort(function(x,y){return x.fcno-y.fcno});
  753 + else if(order == 'desc')
  754 + arr.sort(function(m,n){return n.fcno-m.fcno});
  755 + for(var a = 0 ; a < arr.length ; a ++) {
  756 + var fcsj = DateTimeTool.getDateTime(arr[a].fcsj);
  757 + // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
  758 + if(!isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
  759 + if(order == 'asc') {
  760 + if(a>0) {
  761 + arr[a-1].isfb = isfb ? 1 : 0;
  762 + arr[a-1].STOPTIME = 0;
  763 + }
  764 + }else if(order == 'desc') {
  765 + var index_ = a + tcbcgzA[t].deletebcNum;
  766 + arr[index_].STOPTIME = 0;
  767 + arr[index_].isfb = isfb && a > 0 ? 1 : 0;
  768 + }
  769 + arr.splice( a , tcbcgzA[t].deletebcNum);
  770 + break;
  771 + }
  772 + }
  773 + }
  774 + };
  775 +
  776 + /**
  777 + * @description (TODO) 定义不断开班次的路牌剔除规则.
  778 + *
  779 + *
  780 + */
  781 + var isdk02 = function(lpbc , dataMap , saa , deletebcNum , isfb) {
  782 + if(lpbc.length > 0 && deletebcNum > 0) {
  783 + lpbc.sort(function(r,s){return r.fcint-s.fcint});
  784 + var tcbcgzA = new Array();
  785 + if( (lpbc[0].fcsj == dataMap.smbcsjArr[0].kssj && dirDmToIndex(lpbc[0].xlDir) == 0)
  786 + || (lpbc[0].fcsj == dataMap.smbcsjArr[1].kssj && dirDmToIndex(lpbc[0].xlDir) == 1)) {
  787 + tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum});
  788 + }else if((lpbc[lpbc.length-1].fcsj == dataMap.smbcsjArr[0].jssj && dirDmToIndex(lpbc[0].xlDir) == 0)
  789 + || (lpbc[lpbc.length-1].fcsj == dataMap.smbcsjArr[1].jssj && dirDmToIndex(lpbc[0].xlDir) == 1)) {
  790 + tcbcgzA.push({'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum});
  791 + }else {
  792 + var zgfzqtcbcNum = parseInt(( dataMap.zgfzqsjd[0].ed - dataMap.zgfzqsjd[0].st ) / (60000 * dataMap.zzsj[0]))*2,
  793 + wgfhtcbcNum = parseInt(( dataMap.wgfzhsjd[0].ed - dataMap.wgfzhsjd[0].st ) / (60000 * dataMap.zzsj[4]))*2;
  794 + tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : wgfhtcbcNum},
  795 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : zgfzqtcbcNum},
  796 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - zgfzqtcbcNum - wgfhtcbcNum});
  797 + }
  798 + spliceBc02(lpbc , tcbcgzA , dataMap , isfb);
  799 + }
  800 + };
  801 +
  802 + var affimBzGs = function(lpbc , bzgs , dataMap, saa , isOff , index_) {
  803 + var tList = lpbc.concat();
  804 + var markAfterGs = getSumWorkTime(tList , dataMap, saa);
  805 + var gsDx = parseFloat((markAfterGs - bzgs).toFixed(2));
  806 + lpbc.sort(function(m,n){return m.fcno-n.fcno});
  807 + if(gsDx > 1.5) {
  808 + if(isOff) {
  809 + var hoursDx = parseFloat((gsDx - 1.5).toFixed(2));
  810 + // console.log(gsDx , hoursDx ,Math.ceil(hoursDx*60));
  811 + var minueDx = Math.ceil(hoursDx*60);
  812 + var bs = Math.ceil( minueDx / dataMap.zzsj[2]);
  813 + for(var s = 0 ; s < lpbc.length; s++) {
  814 + if(lpbc[s].isfb ==1) {
  815 + if(index_%2==0) {
  816 + lpbc.splice( (s+1) , bs*2);
  817 + }else {
  818 + lpbc.splice( s , bs*2);
  819 + lpbc[s-bs*2 +1].isfb = 1;
  820 + lpbc[s-bs*2 +1].STOPTIME = 0;
  821 + }
  822 + break;
  823 + }
  824 + }
  825 + }else {
  826 +
  827 + }
  828 + }
  829 + };
  830 + var getSumWorkTime = function(lpbc , dataMap , saa) {
  831 + lpbc.sort(function(x,y){return x.fcno-y.fcno});
  832 + var sumWorkTime = dataMap.jcsjArr[dirDmToIndex(lpbc[0].xlDir)] +
  833 + dataMap.ccsjArr[dirDmToIndex(lpbc[lpbc.length-1].xlDir)] +
  834 + saa[0].lbsj*2;
  835 + for(var t = 0 ; t < lpbc.length ; t++) {
  836 + sumWorkTime += lpbc[t].bcsj + lpbc[t].STOPTIME;
  837 + }
  838 + return parseFloat((sumWorkTime/60).toFixed(2));
  839 + };
  840 + // 切割出连班路牌
  841 + var cutCar = function(carListH,carListCache) {
  842 + for(var c=0; c<carListH.length; c++){
  843 + if(carListH[c].isfb) {
  844 + carListCache.push(carListH[c]);
  845 + carListH.splice(c,1);
  846 + cutCar(carListH,carListCache);
  847 + }
  848 + }
  849 + };
  850 + var dirDmToIndex = function (str) {
  851 + if(str == 'relationshipGraph-up')
  852 + return 0;
  853 + else if(str == 'relationshipGraph-down')
  854 + return 1;
  855 + };
  856 +
  857 + // 确定吃饭时间
  858 + var markeEatTime = function(list , markArray , cara , saa , dataMap ,map) {
  859 + var cfddDm = parseInt(map.cfdd);
  860 + var mLen = markArray.length,cLen=cara.length,sLen =list.length ;
  861 + if(mLen<=0 || cLen<=0 || sLen<=0)
  862 + return false;
  863 + for(var c = 0 ; c<cLen ; c++) {
  864 + var lpNo=cara[c].lpNo,lpType;
  865 + for(var s = 0 ; s<sLen;s++ ) {
  866 + if(list[s].sslp[0].lpNo==lpNo) {
  867 + lpType = list[s].type;
  868 + break;
  869 + }
  870 + }
  871 + if(lpType=='五工二休')
  872 + continue;
  873 + var lpbcArray = new Array();
  874 + for(var m = 0 ; m < mLen; m++) {
  875 + if(markArray[m].lpNo==lpNo)
  876 + lpbcArray.push(markArray[m]);
  877 + }
  878 + lpbcArray.sort(function(a,b){return a.fcint - b.fcint});
  879 + isHaveBc(DateTimeTool.getDateTime('10:30') , DateTimeTool.getDateTime('12:30'),lpbcArray,cfddDm ,dataMap , cara[c] ,map, markArray, 0);
  880 + isHaveBc(DateTimeTool.getDateTime('17:00') , DateTimeTool.getDateTime('19:00'),lpbcArray,cfddDm ,dataMap , cara[c] ,map, markArray, 1);
  881 + }
  882 + };
  883 +
  884 + var isHaveBc = function(kssj , jssj , bcArray,cfddDm , dataMap , lpObj , map, markArray , cfIndex) {
  885 + var canCf = new Array(), countTzsj = 0, isLast = new Array();
  886 + for(var b = 0 ; b<bcArray.length;b++) {
  887 + var bcddsj = DateTimeTool.getDateTime(bcArray[b].ARRIVALTIME);
  888 + if(bcddsj>= kssj && bcddsj<=jssj) { // NEW,使用开始时间,结束时间限定可以吃饭的班次
  889 + countTzsj += bcArray[b].STOPTIME;
  890 + canCf.push(bcArray[b]);
  891 + }
  892 + }
  893 + if(canCf.length>0 && canCf[canCf.length-1].isfb == 0) { // NEW,如果班次是分班班次,就不吃饭
  894 + console.log('countTzsj:' + countTzsj + 'length:' + canCf.length);
  895 + var fxDm = dirDmToIndex(canCf[canCf.length-1].xlDir);
  896 + if (map.cfdd == "allYes") { // NEW,如果选择的吃饭地点是所有,则使用班次的方向作为吃饭班次的方向
  897 + cfddDm = fxDm;
  898 + }
  899 + // console.log(countTzsj , canCf[canCf.length-1].fcsj);
  900 + if(canCf.length>2) {
  901 + var tzdx = canCf[canCf.length-2].STOPTIME - dataMap.zwcArr[cfIndex];
  902 + canCf[canCf.length-2].STOPTIME = tzdx >= 0 ? tzdx : 0;
  903 + var obj = bcFun.getbcObj(
  904 + DateTimeTool.getDateTime(canCf[canCf.length-2].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  905 + dataMap.dira[cfddDm], canCf[canCf.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  906 + markArray.push(obj);
  907 + if(tzdx<0) {
  908 + // canCf[canCf.length-1].STOPTIME = 0;
  909 + var fcsj = DateTimeTool.getDateTime(canCf[canCf.length-2].ARRIVALTIME);
  910 + fcsj.setMinutes(fcsj.getMinutes() + canCf[canCf.length-2].STOPTIME + dataMap.zwcArr[cfIndex]);
  911 + canCf[canCf.length-1].fcsj = DateTimeTool.getHHmmStr(fcsj);
  912 + fcsj.setMinutes(fcsj.getMinutes() + canCf[canCf.length-1].bcsj);
  913 + canCf[canCf.length-1].ARRIVALTIME = DateTimeTool.getHHmmStr(fcsj);
  914 + }
  915 + }else {
  916 + var obj = bcFun.getbcObj(
  917 + DateTimeTool.getDateTime(canCf[canCf.length-1].ARRIVALTIME),dataMap.zwcArr[cfIndex],lpObj,dataMap.bcTypeArr.cf,
  918 + dataMap.dira[cfddDm], canCf[canCf.length-1].fcno+1 , 0 , map , 0 , null , null , null , 0 , 0);
  919 + markArray.push(obj);
  920 +
  921 + }
  922 + }
  923 + };
  924 +
  925 + /**
  926 + * @description (TODO) 横向调整 调整停站时间.
  927 + * @param cara 路牌数组.
  928 + * @param tempa 所有的班次数组集合.
  929 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  930 + *
  931 + * ******************************** 思路 *************************************************
  932 + * 第一步 等到每个路牌下的班次数组集合.
  933 + *
  934 + * 第二步 顺序排序每个路牌下的班次数组集合.
  935 + *
  936 + * 第三步 从第二个班次开始,用第二个班次的发车时间 - 上一个班次的到达时间 得到 上一个班次的停站时间.
  937 + *
  938 + * 第四步 修改上一个班次的停站时间.
  939 + *
  940 + * 修改停站时间规则:以行驶时间的10%-15% 为标准。
  941 + * 如果超出该范围。则以录入参数低谷最大停站间隙为准。
  942 + * 停站时间最大不能超过该停站时间。
  943 + * 高峰附近的班次的停站时间在离高峰最近一个班次的停站时间浮动范围【1-2】分钟。
  944 + *
  945 + * ****************************************************************************************
  946 + */
  947 + var resizeByPitStopTime = function(cara,tempa,dataMap) {
  948 + var cLen = cara.length,tLen = tempa.length;
  949 + if(cLen<= 0 || tLen<=0 || dataMap==null)
  950 + return;
  951 + // 定义低谷最大停站时间、行业标准最小、最大停站时间(行驶时间的10%~15%).
  952 + var dgmaxtzsj = dataMap.dgmaxtzsj,normmintzsj, normmaxtzsj;
  953 + for(var t = 0 ; t < cLen ; t++) {
  954 + // 定义当前路牌班次数组集合.
  955 + var sslpbcA = new Array();
  956 + for(var j =0 ; j < tLen ; j++) {
  957 + // 判断当期遍历的班次是否属于当前的路牌.如果是则添加到当前的路牌班次数组集合.
  958 + if(tempa[j].lpNo == cara[t].lpNo) {
  959 + tempa[j].fcint = DateTimeTool.getDateTime(tempa[j].fcsj).getTime();
  960 + sslpbcA.push(tempa[j]);
  961 + }
  962 + }
  963 + if(sslpbcA.length > 0) {
  964 + // 按发车时间顺序排序.
  965 + sslpbcA.sort(function(a,b){return a.fcint-b.fcint});
  966 + // 按照规则修改停站时间.
  967 + for(var r = 0 ; r < sslpbcA.length-1 ; r++) {
  968 + // test
  969 + //if(sslpbcA[r].bcType == 'cf') {
  970 + // alert('cf' + sslpbcA[r-1].fcsj);
  971 + //}
  972 + // 定义上一个班次的发车时间、当前班次的到达时间、发车时间.
  973 + var sgbcfcsj = DateTimeTool.getDateTime(sslpbcA[r+1].fcsj),
  974 + dqbcddsj = DateTimeTool.getDateTime(sslpbcA[r].ARRIVALTIME),
  975 + dqbcfcsj = DateTimeTool.getDateTime(sslpbcA[r].fcsj);
  976 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  977 + var cctag = dirDmToIndex(sslpbcA[r].xlDir); // dataMap.smbcsjArr
  978 + // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.)
  979 + var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
  980 + // 定义是否高峰
  981 + var tt_flag = isPeakTimeScope(dqbcfcsj , dataMap);
  982 + // 获取行驶时间.
  983 + var xxsj = getByDirTravelTime(dataMap.zgfsjd , dataMap.wgfsjd , dqbcfcsj,
  984 + dataMap.pcxssjArr , dataMap.gfxxsjArr ,
  985 + dirDmToIndex(sslpbcA[r].xlDir));
  986 + normmintzsj = xxsj*0.1;
  987 + normmaxtzsj = xxsj*0.15;
  988 + var flag = false;
  989 +
  990 + // 如果小于零
  991 + if(dxmin < 0 && sslpbcA[r].isfb ==0) {
  992 + // 根据不同时段的停站时间.重新赋值停站时间.
  993 + if(sslpbcA[r].bcType=='normal' && sslpbcA[r+1].bcType =='normal')
  994 + //dxmin = tt_flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  995 + dxmin = 1;
  996 + else
  997 + dxmin = 0;
  998 + flag = true;
  999 + }else if(dxmin==0){
  1000 + if (sslpbcA[r].bcType == 'cf') { // 如果是吃饭班次,停站为0
  1001 + dxmin = 0;
  1002 + } else {
  1003 + // 这里区分,如果下一个班次是吃饭班次,停站为0
  1004 + if (sslpbcA[r + 1].bcType=='cf') {
  1005 + dxmin = 0;
  1006 + } else { // 否则使用最小停站时间
  1007 + dxmin = normmintzsj;
  1008 + }
  1009 + }
  1010 +
  1011 + flag = true;
  1012 + }else {
  1013 + // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
  1014 + if(dxmin >= dgmaxtzsj && dxmin < 180 && sslpbcA[r].isfb==0) {
  1015 + dxmin = dgmaxtzsj;
  1016 + flag = true;
  1017 + // 如果大于零 并且 小于等于行业标准的最小停站时间
  1018 + }else if(dxmin > 0 && dxmin <= normmintzsj ) {
  1019 + // dxmin = dxmin;
  1020 + flag = true;
  1021 + // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
  1022 + }else if(dxmin > normmintzsj && dxmin <= normmaxtzsj ) {
  1023 + // dxmin = dxmin;
  1024 + flag = true;
  1025 + // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
  1026 + }else if(dxmin > normmaxtzsj && dxmin < dgmaxtzsj ) {
  1027 + // dxmin = dxmin;
  1028 + flag = true;
  1029 + }else if (dxmin >= 180){
  1030 + dxmin = 0;
  1031 + }
  1032 + }
  1033 + if(flag) {
  1034 + if(!isDirSmbc(dirDmToIndex(sslpbcA[r+1].xlDir) , sslpbcA[r+1].fcsj , dataMap)) {
  1035 + // 修改当前班次的停站时间.
  1036 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1037 + // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
  1038 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
  1039 + // 修改下一个班次的发车时间.
  1040 + sslpbcA[r+1].fcsj = DateTimeTool.getHHmmStr(dqbcddsj);
  1041 + // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
  1042 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
  1043 + // 修改下一个班次的到达时间.
  1044 + sslpbcA[r+1].ARRIVALTIME = DateTimeTool.getHHmmStr(dqbcddsj);
  1045 + }else {
  1046 + if(r>0) {
  1047 + // 修改当前班次的停站时间.
  1048 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1049 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].STOPTIME);
  1050 + sslpbcA[r].ARRIVALTIME = DateTimeTool.getHHmmStr(sgbcfcsj);
  1051 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].bcsj);
  1052 + sslpbcA[r].fcsj = DateTimeTool.getHHmmStr(sgbcfcsj);
  1053 + sslpbcA[r-1].STOPTIME = parseInt( ( sgbcfcsj - DateTimeTool.getDateTime(sslpbcA[r-1].ARRIVALTIME))/60000);
  1054 + }
  1055 + }
  1056 + }
  1057 + }
  1058 + }
  1059 + }
  1060 + };
  1061 +
  1062 + var isDirSmbc = function(dirDm , fcsj , dataMap) {
  1063 + var falg = false;
  1064 + if(fcsj == dataMap.smbcsjArr[dirDm].kssj || fcsj == dataMap.smbcsjArr[dirDm].jssj)
  1065 + falg = true;
  1066 + return falg;
  1067 + };
  1068 +
  1069 + return {
  1070 + scheduleInit : scheduleInit,
  1071 + judgeFCJX : judgeFCJX,
  1072 + judgeTZSJ : judgeTZSJ
  1073 + }
  1074 +}();
0 \ No newline at end of file 1075 \ No newline at end of file
src/main/resources/static/pages/base/timesmodel/tepms/bctype_temp.html
1 <script type="text/html" id = "bctype_temp"> 1 <script type="text/html" id = "bctype_temp">
2 2
3 -<!-- 表单分组组件 form-group START -->  
4 -<div class="form-group">  
5 - <!-- 起始站首班时间 (* 必填项) START -->  
6 - <div class="col-md-6">  
7 - <label class="control-label col-md-5">  
8 - <span class="required"> * </span> 起始站首班时间 :  
9 - </label>  
10 - <div class="col-md-5">  
11 - <input type="text" class="form-control" name="startStationFirstTime" value="{{map.line.startStationFirstTime}}" id="qdzsbsjInput"  
12 - placeholder="请输入起始站首班时间">  
13 - </div>  
14 - </div>  
15 - <!-- 起始站首班时间 (* 必填项) END -->  
16 -  
17 - <!-- 起始站末班时间 (* 必填项) START -->  
18 - <div class="col-md-6">  
19 - <label class="control-label col-md-5">  
20 - <span class="required"> * </span> 起始站末班时间 :  
21 - </label>  
22 - <div class="col-md-5">  
23 - <input type="text" class="form-control" name="startStationEndTime" value="{{map.line.startStationEndTime}}" id="qdzmbsjInput"  
24 - placeholder="请输入起始站末班时间">  
25 - </div>  
26 - </div>  
27 - <!-- 起始站末班时间 (* 必填项) END -->  
28 -</div>  
29 -<!-- 表单分组组件 form-group END -->  
30 -  
31 -<!-- 表单分组组件 form-group START -->  
32 -<div class="form-group">  
33 - <!-- 终点站首班时间 (* 必填项) START -->  
34 - <div class="col-md-6">  
35 - <label class="control-label col-md-5">  
36 - <span class="required"> * </span> 终点站首班时间 :  
37 - </label>  
38 - <div class="col-md-5">  
39 - <input type="text" class="form-control" name="endStationFirstTime" value="{{map.line.endStationFirstTime}}" id="zdzsbsjInput"  
40 - placeholder="请输入终点站首班时间">  
41 - </div>  
42 - </div>  
43 - <!-- 终点站首班时间 (* 必填项) END -->  
44 -  
45 - <!-- 终点站末班时间 (* 必填项) START -->  
46 - <div class="col-md-6">  
47 - <label class="control-label col-md-5">  
48 - <span class="required"> * </span> 终点站末班时间 :  
49 - </label>  
50 - <div class="col-md-5">  
51 - <input type="text" class="form-control" name="endStationEndTime" value="{{map.line.endStationEndTime}}" id="zdzmbsjInput"  
52 - placeholder="请输入终点站末班时间">  
53 - </div>  
54 - </div>  
55 - <!-- 终点站末班时间 (* 必填项) END -->  
56 -</div>  
57 -<!-- 表单分组组件 form-group END -->  
58 -  
59 -<!-- 表单分组组件 form-group START -->  
60 -<div class="form-group">  
61 - <!-- 早高峰开始时间 (* 必填项) START -->  
62 - <div class="col-md-6">  
63 - <label class="control-label col-md-5">  
64 - <span class="required"> * </span> 早高峰开始时间 :  
65 - </label>  
66 - <div class="col-md-5">  
67 - <input type="text" class="form-control" name="earlyStartTime" value="{{map.earlyStartTime}}" id="zgfkssjInput"  
68 - placeholder="请输入早高峰开始时间">  
69 - </div>  
70 - </div>  
71 - <!-- 早高峰开始时间 (* 必填项) END -->  
72 -  
73 - <!-- 早高峰结束时间 (* 必填项) START -->  
74 - <div class="col-md-6">  
75 - <label class="control-label col-md-5">  
76 - <span class="required"> * </span> 早高峰结束时间 :  
77 - </label>  
78 - <div class="col-md-5">  
79 - <input type="text" class="form-control" name="earlyEndTime" value="{{map.earlyEndTime}}" id="zgfjssjInput"  
80 - placeholder="请输入早高峰结束时间">  
81 - </div>  
82 - </div>  
83 - <!-- 早高峰结束时间 (* 必填项) END -->  
84 -</div>  
85 -<!-- 表单分组组件 form-group END -->  
86 -  
87 -<!-- 表单分组组件 form-group START -->  
88 -<div class="form-group">  
89 - <!-- 晚高峰开始时间 (* 必填项) START -->  
90 - <div class="col-md-6">  
91 - <label class="control-label col-md-5">  
92 - <span class="required"> * </span> 晚高峰开始时间 :  
93 - </label>  
94 - <div class="col-md-5">  
95 - <input type="text" class="form-control" name="lateStartTime" value="{{map.lateStartTime}}" id="wgfkssjInput"  
96 - placeholder="请输入晚高峰开始时间">  
97 - </div>  
98 - </div>  
99 - <!-- 晚高峰开始时间 (* 必填项) END -->  
100 -  
101 - <!-- 晚高峰结束 (* 必填项) START -->  
102 - <div class="col-md-6">  
103 - <label class="control-label col-md-5">  
104 - <span class="required"> * </span> 晚高峰结束时间 :  
105 - </label>  
106 - <div class="col-md-5">  
107 - <input type="text" class="form-control" name="lateEndTime" value="{{map.lateEndTime}}" id="wgfjssjInput"  
108 - placeholder="请输入晚高峰结束时间">  
109 - </div>  
110 - </div>  
111 - <!-- 晚高峰结束 (* 必填项) END -->  
112 -</div>  
113 -<!-- 表单分组组件 form-group END -->  
114 -  
115 -  
116 -<!-- 表单分组组件 form-group START -->  
117 -<div class="form-group">  
118 - <!-- 上行行驶时间(* 必填项) START -->  
119 - <div class="col-md-6">  
120 - <label class="control-label col-md-5">  
121 - <span class="required"> * </span> 上行行驶时间  :  
122 - </label>  
123 - <div class="col-md-5">  
124 - <input type="text" class="form-control" name="upTravelTime" value="{{map.upTravelTime}}" id="upTravelTimeInput"  
125 - placeholder="请输入上行行驶时间">  
126 - </div>  
127 - </div>  
128 - <!-- 上行行驶时间 (* 必填项) END -->  
129 -  
130 - <!-- 下行行驶时间 (* 必填项) START -->  
131 - <div class="col-md-6">  
132 - <label class="control-label col-md-5">  
133 - <span class="required"> * </span> 下行行驶时间  :  
134 - </label>  
135 - <div class="col-md-5">  
136 - <input type="text" class="form-control" name="downTravelTime" value="{{map.downTravelTime}}" id="downTravelTimeInput"  
137 - placeholder="请输入下行行驶时间">  
138 - </div>  
139 - </div>  
140 - <!-- 下行行驶时间(* 必填项) END -->  
141 -</div>  
142 -<!-- 表单分组组件 form-group END -->  
143 -  
144 -<!-- 表单分组组件 form-group START -->  
145 -<div class="form-group">  
146 - <!-- 上行里程(* 必填项) START -->  
147 - <div class="col-md-6">  
148 - <label class="control-label col-md-5">  
149 - <span class="required"> * </span> 上行行驶里程  :  
150 - </label>  
151 - <div class="col-md-5">  
152 - <input type="text" class="form-control" name="upMileage" value="{{map.upMileage}}" id="upMileageInput"  
153 - placeholder="请输入上行行驶里程">  
154 - </div>  
155 - </div>  
156 - <!-- 上行里程 (* 必填项) END -->  
157 - <!-- 下行里程 (* 必填项) START -->  
158 - <div class="col-md-6">  
159 - <label class="control-label col-md-5">  
160 - <span class="required"> * </span> 下行行驶里程  :  
161 - </label>  
162 - <div class="col-md-5">  
163 - <input type="text" class="form-control" name="downMileage" value="{{map.downMileage}}" id="downMileageInput"  
164 - placeholder="请输入下行行驶里程">  
165 - </div>  
166 - </div>  
167 - <!-- 下行里程(* 必填项) END -->  
168 -</div>  
169 -<!-- 表单分组组件 form-group END -->  
170 -  
171 -<!-- 表单分组组件 form-group START -->  
172 -<div class="form-group">  
173 - <!-- 高峰上行停站时间 (* 必填项) START -->  
174 - <div class="col-md-6">  
175 - <label class="control-label col-md-5">  
176 - <span class="required"> * </span> 高峰上行停站时间:  
177 - </label>  
178 - <div class="col-md-5">  
179 - <input type="text" class="form-control" name="gfupStopTime" id="gfupStopTimeInput"  
180 - placeholder="请输入高峰上行停站时间"> 3 + <!-- 表单分组组件 form-group START -->
  4 + <div class="form-group">
  5 + <!-- 起始站首班时间 (* 必填项) START -->
  6 + <div class="col-md-6">
  7 + <label class="control-label col-md-5">
  8 + <span class="required"> * </span> 起始站首班时间 :
  9 + </label>
  10 + <div class="col-md-5">
  11 + <input type="text" class="form-control" name="startStationFirstTime" value="{{map.line.startStationFirstTime}}" id="qdzsbsjInput"
  12 + placeholder="请输入起始站首班时间">
  13 + </div>
181 </div> 14 </div>
182 - </div>  
183 - <!-- 上行停站时间 (* 必填项) END -->  
184 -  
185 - <!-- 高峰下行停站时间 (* 必填项) START -->  
186 - <div class="col-md-6">  
187 - <label class="control-label col-md-5">  
188 - <span class="required"> * </span> 高峰下行停站时间:  
189 - </label>  
190 - <div class="col-md-5">  
191 - <input type="text" class="form-control" name="gfdownStopTime" id="gfdownStopTimeInput"  
192 - placeholder="请输入高峰下行停站时间"> 15 + <!-- 起始站首班时间 (* 必填项) END -->
  16 +
  17 + <!-- 起始站末班时间 (* 必填项) START -->
  18 + <div class="col-md-6">
  19 + <label class="control-label col-md-5">
  20 + <span class="required"> * </span> 起始站末班时间 :
  21 + </label>
  22 + <div class="col-md-5">
  23 + <input type="text" class="form-control" name="startStationEndTime" value="{{map.line.startStationEndTime}}" id="qdzmbsjInput"
  24 + placeholder="请输入起始站末班时间">
  25 + </div>
193 </div> 26 </div>
  27 + <!-- 起始站末班时间 (* 必填项) END -->
194 </div> 28 </div>
195 - <!-- 高峰下行停站时间 (* 必填项) END -->  
196 -</div>  
197 -<!-- 表单分组组件 form-group END -->  
198 -  
199 -<!-- 表单分组组件 form-group START -->  
200 -<div class="form-group">  
201 - <!-- 低谷上行停站时间(* 必填项) START -->  
202 - <div class="col-md-6">  
203 - <label class="control-label col-md-5">  
204 - <span class="required"> * </span> 低谷上行停站时间:  
205 - </label>  
206 - <div class="col-md-5">  
207 - <input type="text" class="form-control" name="dgupStopTime" id="dgupStopTimeInput" placeholder="请输入低谷上行停站时间"> 29 + <!-- 表单分组组件 form-group END -->
  30 +
  31 + <!-- 表单分组组件 form-group START -->
  32 + <div class="form-group">
  33 + <!-- 终点站首班时间 (* 必填项) START -->
  34 + <div class="col-md-6">
  35 + <label class="control-label col-md-5">
  36 + <span class="required"> * </span> 终点站首班时间 :
  37 + </label>
  38 + <div class="col-md-5">
  39 + <input type="text" class="form-control" name="endStationFirstTime" value="{{map.line.endStationFirstTime}}" id="zdzsbsjInput"
  40 + placeholder="请输入终点站首班时间">
  41 + </div>
208 </div> 42 </div>
209 - </div>  
210 - <!-- 低谷上行停站时间(* 必填项) END -->  
211 -  
212 - <!-- 低谷下行停站时间(* 必填项) START -->  
213 - <div class="col-md-6">  
214 - <label class="control-label col-md-5">  
215 - <span class="required"> * </span> 低谷下行停站时间:  
216 - </label>  
217 - <div class="col-md-5">  
218 - <input type="text" class="form-control" name="dgdownStopTime" id="dgdownStopTimeInput"  
219 - placeholder="请输入低谷下行停站时间"> 43 + <!-- 终点站首班时间 (* 必填项) END -->
  44 +
  45 + <!-- 终点站末班时间 (* 必填项) START -->
  46 + <div class="col-md-6">
  47 + <label class="control-label col-md-5">
  48 + <span class="required"> * </span> 终点站末班时间 :
  49 + </label>
  50 + <div class="col-md-5">
  51 + <input type="text" class="form-control" name="endStationEndTime" value="{{map.line.endStationEndTime}}" id="zdzmbsjInput"
  52 + placeholder="请输入终点站末班时间">
  53 + </div>
220 </div> 54 </div>
  55 + <!-- 终点站末班时间 (* 必填项) END -->
221 </div> 56 </div>
222 - <!-- 低谷停站时间 (* 必填项) END -->  
223 -</div>  
224 -<!-- 表单分组组件 form-group END -->  
225 -  
226 -<!-- 表单分组组件 form-group START -->  
227 -<div class="form-group">  
228 - <!-- 低谷最大发车间隙(* 必填项) START -->  
229 - <div class="col-md-6">  
230 - <label class="control-label col-md-5">  
231 - <span class="required"> * </span> 低谷最大发车间隙:  
232 - </label>  
233 - <div class="col-md-5">  
234 - <input type="text" class="form-control" name="dgmaxfcjx" id="dgmaxfcjxInput" placeholder="请输入低谷最大发车间隙"> 57 + <!-- 表单分组组件 form-group END -->
  58 +
  59 + <!-- 表单分组组件 form-group START -->
  60 + <div class="form-group">
  61 + <!-- 早高峰开始时间 (* 必填项) START -->
  62 + <div class="col-md-6">
  63 + <label class="control-label col-md-5">
  64 + <span class="required"> * </span> 早高峰开始时间 :
  65 + </label>
  66 + <div class="col-md-5">
  67 + <input type="text" class="form-control" name="earlyStartTime" value="{{map.earlyStartTime}}" id="zgfkssjInput"
  68 + placeholder="请输入早高峰开始时间">
  69 + </div>
235 </div> 70 </div>
236 - </div>  
237 - <!-- 低谷最大发车间隙(* 必填项) END -->  
238 -  
239 - <!-- 低谷最大停站时间(* 必填项) START -->  
240 - <div class="col-md-6">  
241 - <label class="control-label col-md-5">  
242 - <span class="required"> * </span> 低谷最大停站时间:  
243 - </label>  
244 - <div class="col-md-5">  
245 - <input type="text" class="form-control" name="dgmaxtzsj" id="dgmaxtzsjInput"  
246 - placeholder="请输入低谷最大停站时间"> 71 + <!-- 早高峰开始时间 (* 必填项) END -->
  72 +
  73 + <!-- 早高峰结束时间 (* 必填项) START -->
  74 + <div class="col-md-6">
  75 + <label class="control-label col-md-5">
  76 + <span class="required"> * </span> 早高峰结束时间 :
  77 + </label>
  78 + <div class="col-md-5">
  79 + <input type="text" class="form-control" name="earlyEndTime" value="{{map.earlyEndTime}}" id="zgfjssjInput"
  80 + placeholder="请输入早高峰结束时间">
  81 + </div>
247 </div> 82 </div>
  83 + <!-- 早高峰结束时间 (* 必填项) END -->
248 </div> 84 </div>
249 - <!-- 低谷停站时间 (* 必填项) END -->  
250 -</div>  
251 -<!-- 表单分组组件 form-group END -->  
252 -  
253 -<!-- 表单分组组件 form-group START -->  
254 -<div class="form-group">  
255 - <!-- 线路规划类型 (* 必填项) START -->  
256 - <div class="col-md-6">  
257 - <label class="control-label col-md-5">  
258 - <span class="required"> * </span> 线路规划类型  :  
259 - </label>  
260 - <div class="col-md-5">  
261 - <select name="linePlayType" class="form-control" id="linePlayTypeSelect">  
262 - <option value="">-- 请选择线路类型 --</option>  
263 - <option value="0">双向</option>  
264 - <option value="1">环线</option>  
265 - </select>  
266 - </div>  
267 - </div>  
268 - <!-- 线路规划类型 (* 必填项) END -->  
269 - <!-- 停车场(* 必填项) START -->  
270 - <div class="col-md-6">  
271 - <label class="control-label col-md-5">停车场     :</label>  
272 - <div class="col-md-5">  
273 - <select name="carPark" class="form-control" id="carParkSelect" style="width:100%"></select>  
274 - </div>  
275 - </div>  
276 - <!-- 停车场(* 必填项) END -->  
277 -</div>  
278 -<!-- 表单分组组件 form-group END -->  
279 -  
280 -<!-- 表单分组组件 form-group START -->  
281 -<div class="form-group">  
282 - <!-- 终点站车容量 START -->  
283 - <div class="col-md-6">  
284 - <label class="control-label col-md-5">终点站车容量  :</label>  
285 - <div class="col-md-5">  
286 - <input type="text" class="form-control" name="zdzcrl" id="zdzcrlInput"  
287 - placeholder="请输入终点站车容量"> 85 + <!-- 表单分组组件 form-group END -->
  86 +
  87 + <!-- 表单分组组件 form-group START -->
  88 + <div class="form-group">
  89 + <!-- 晚高峰开始时间 (* 必填项) START -->
  90 + <div class="col-md-6">
  91 + <label class="control-label col-md-5">
  92 + <span class="required"> * </span> 晚高峰开始时间 :
  93 + </label>
  94 + <div class="col-md-5">
  95 + <input type="text" class="form-control" name="lateStartTime" value="{{map.lateStartTime}}" id="wgfkssjInput"
  96 + placeholder="请输入晚高峰开始时间">
  97 + </div>
288 </div> 98 </div>
289 - </div>  
290 - <!-- 终点站车容量 END -->  
291 - <!-- 吃饭地点 START -->  
292 - <div class="col-md-6">  
293 - <label class="control-label col-md-5">吃饭地点    :</label>  
294 - <div class="col-md-5">  
295 - <select type="text" class="form-control" name="cfdd" id="cfddSelect">  
296 - <option value="">请选择...</option>  
297 - <option value="0">{{map.line.startStationName}}</option>  
298 - <option value="1">{{map.line.endStationName}}</option>  
299 - <option value="allYes">起终点站都可以</option>  
300 - </select>  
301 - </div>  
302 - </div>  
303 - <!-- 空放行驶时间 END -->  
304 -</div>  
305 -<!-- 表单分组组件 form-group END -->  
306 -  
307 -<!-- 表单分组组件 form-group START -->  
308 -<div class="form-group">  
309 - <!-- 早高峰上行时间(* 必填项) START -->  
310 - <div class="col-md-6">  
311 - <label class="control-label col-md-5">早高峰上行时间 :</label>  
312 - <div class="col-md-5">  
313 - <input type="text" class="form-control" name="earlyUpTime" value="{{map.earlyUpTime}}" id="earlyUpTimeInput"  
314 - placeholder="请输入早高峰上行时间"> 99 + <!-- 晚高峰开始时间 (* 必填项) END -->
  100 +
  101 + <!-- 晚高峰结束 (* 必填项) START -->
  102 + <div class="col-md-6">
  103 + <label class="control-label col-md-5">
  104 + <span class="required"> * </span> 晚高峰结束时间 :
  105 + </label>
  106 + <div class="col-md-5">
  107 + <input type="text" class="form-control" name="lateEndTime" value="{{map.lateEndTime}}" id="wgfjssjInput"
  108 + placeholder="请输入晚高峰结束时间">
  109 + </div>
315 </div> 110 </div>
  111 + <!-- 晚高峰结束 (* 必填项) END -->
316 </div> 112 </div>
317 - <!-- 早高峰上行时间(* 必填项) END -->  
318 -  
319 - <!-- 早高峰下行时间(* 必填项) START -->  
320 - <div class="col-md-6">  
321 - <label class="control-label col-md-5">早高峰下行时间 :</label>  
322 - <div class="col-md-5">  
323 - <input type="text" class="form-control" name="earlyDownTime" value="{{map.earlyDownTime}}" id="earlyDownTimeInput"  
324 - placeholder="请输入早高峰下行时间"> 113 + <!-- 表单分组组件 form-group END -->
  114 +
  115 + <!-- 表单分组组件 form-group START -->
  116 + <div class="form-group">
  117 + <!-- 线路规划类型 (* 必填项) START -->
  118 + <div class="col-md-6">
  119 + <label class="control-label col-md-5">
  120 + <span class="required"> * </span> 线路规划类型  :
  121 + </label>
  122 + <div class="col-md-5">
  123 + <select name="linePlayType" class="form-control" id="linePlayTypeSelect">
  124 + <option value="">-- 请选择线路类型 --</option>
  125 + <option value="0">双向</option>
  126 + <option value="1">环线</option>
  127 + </select>
  128 + </div>
325 </div> 129 </div>
326 - </div>  
327 - <!-- 早高峰下行时间(* 必填项) END -->  
328 -</div>  
329 -<!-- 表单分组组件 form-group END -->  
330 -  
331 -<!-- 表单分组组件 form-group START -->  
332 -<div class="form-group">  
333 - <!-- 晚高峰上行时间 (* 必填项) START -->  
334 - <div class="col-md-6">  
335 - <label class="control-label col-md-5">晚高峰上行时间 :</label>  
336 - <div class="col-md-5">  
337 - <input type="text" class="form-control" name="lateUpTime" value="{{map.lateUpTime}}" id="lateUpTimeInput"  
338 - placeholder="请输入晚高峰上行时间"> 130 + <!-- 线路规划类型 (* 必填项) END -->
  131 + <!-- 停车场(* 必填项) START -->
  132 + <div class="col-md-6">
  133 + <label class="control-label col-md-5">停车场     :</label>
  134 + <div class="col-md-5">
  135 + <select name="carPark" class="form-control" id="carParkSelect" style="width:100%"></select>
  136 + </div>
339 </div> 137 </div>
  138 + <!-- 停车场(* 必填项) END -->
340 </div> 139 </div>
341 - <!-- 晚高峰上行时间(* 必填项) END -->  
342 - <!-- 晚高峰下行时间 (* 必填项) START -->  
343 - <div class="col-md-6">  
344 - <label class="control-label col-md-5">晚高峰下行时间 :</label>  
345 - <div class="col-md-5">  
346 - <input type="text" class="form-control" name="lateDownTime" value="{{map.lateDownTime}}" id="lateDownTimeInput"  
347 - placeholder="请输入晚高峰下行时间"> 140 + <!-- 表单分组组件 form-group END -->
  141 +
  142 + <!-- 表单分组组件 form-group START -->
  143 + <div class="form-group">
  144 + <!-- 早晚例行保养 START -->
  145 + <div class="col-md-6">
  146 + <label class="control-label col-md-5">早晚例行保养  :</label>
  147 + <div class="col-md-5">
  148 + <input type="text" class="form-control" name="lb" value="{{map.lb}}" id="lbInput"
  149 + placeholder="请输入早晚例行保养">
  150 + </div>
348 </div> 151 </div>
349 - </div>  
350 - <!-- 晚高峰下行时间(* 必填项) END -->  
351 -</div>  
352 -<!-- 表单分组组件 form-group END -->  
353 -  
354 -<!-- 表单分组组件 form-group START -->  
355 -<div class="form-group">  
356 - <!-- 低谷上行时间 START -->  
357 - <div class="col-md-6">  
358 - <label class="control-label col-md-5">低谷上行时间  :</label>  
359 - <div class="col-md-5">  
360 - <input type="text" class="form-control" name="troughUpTime" value="{{map.troughUpTime}}" id="troughUpTimeInput"  
361 - placeholder="请输入低谷上行时间"> 152 + <!-- 早晚例行保养 END -->
  153 + <!-- 吃饭地点 START -->
  154 + <div class="col-md-6">
  155 + <label class="control-label col-md-5">吃饭地点    :</label>
  156 + <div class="col-md-5">
  157 + <select type="text" class="form-control" name="cfdd" id="cfddSelect">
  158 + <option value="">请选择...</option>
  159 + <option value="0">{{map.line.startStationName}}</option>
  160 + <option value="1">{{map.line.endStationName}}</option>
  161 + <option value="allYes">起终点站都可以</option>
  162 + </select>
  163 + </div>
362 </div> 164 </div>
  165 + <!-- 空放行驶时间 END -->
363 </div> 166 </div>
364 - <!-- 低谷上行时间 END -->  
365 -  
366 - <!-- 低谷下行时间 START -->  
367 - <div class="col-md-6">  
368 - <label class="control-label col-md-5">低谷下行时间  :</label>  
369 - <div class="col-md-5">  
370 - <input type="text" class="form-control" name="troughDownTime" value="{{map.troughDownTime}}" id="troughDownTimeInput"  
371 - placeholder="请输入低谷下行时间"> 167 + <!-- 表单分组组件 form-group END -->
  168 +
  169 + <!-- 表单分组组件 form-group START -->
  170 + <div class="form-group">
  171 + <!-- 工作餐午餐时间 START -->
  172 + <div class="col-md-6">
  173 + <label class="control-label col-md-5">工作餐午餐时间 :</label>
  174 + <div class="col-md-5">
  175 + <input type="text" class="form-control" name="workeLunch" value="{{map.workeLunch}}" id="workeLunchInput"
  176 + placeholder="请输入工作餐午餐时间">
  177 + </div>
372 </div> 178 </div>
373 - </div>  
374 - <!-- 低谷下行时间 END -->  
375 -</div>  
376 -<!-- 表单分组组件 form-group END -->  
377 -  
378 -<!-- 表单分组组件 form-group START -->  
379 -<div class="form-group">  
380 - <!-- 区间上行时间 START -->  
381 - <div class="col-md-6">  
382 - <label class="control-label col-md-5">区间上行时间  :</label>  
383 - <div class="col-md-5">  
384 - <input type="text" class="form-control" name="qjUpTime" id="qjUpTimeInput"  
385 - placeholder="请输入区间上行时间"> 179 + <!-- 工作餐午餐时间 END -->
  180 +
  181 + <!-- 工作餐晚餐时间 START -->
  182 + <div class="col-md-6">
  183 + <label class="control-label col-md-5">工作餐晚餐时间 :</label>
  184 + <div class="col-md-5">
  185 + <input type="text" class="form-control" name="workeDinner" value="{{map.workeDinner}}" id="workeDinnerInput"
  186 + placeholder="请输入工作餐晚餐时间">
  187 + </div>
386 </div> 188 </div>
  189 + <!-- 工作餐晚餐时间 END -->
387 </div> 190 </div>
388 - <!-- 区间上行时间 END -->  
389 -  
390 - <!-- 区间下行时间 START -->  
391 - <div class="col-md-6">  
392 - <label class="control-label col-md-5">区间下行时间  :</label>  
393 - <div class="col-md-5">  
394 - <input type="text" class="form-control" name="qjDownTime" id="qjDownTimeInput"  
395 - placeholder="请输入区间下行时间"> 191 + <!-- 表单分组组件 form-group END -->
  192 +
  193 + <!-- 表单分组组件 form-group START -->
  194 + <div class="form-group">
  195 + <!-- 上行进场时间 START -->
  196 + <div class="col-md-6">
  197 + <label class="control-label col-md-5">上行进场时间  :</label>
  198 + <div class="col-md-5">
  199 + <input type="text" class="form-control" name="upInTimer" value="{{map.upInTimer}}" id="upInTimerInput"
  200 + placeholder="请输入上行进场时间">
  201 + </div>
396 </div> 202 </div>
397 - </div>  
398 - <!-- 区间下行时间 END -->  
399 -</div>  
400 -<!-- 表单分组组件 form-group END -->  
401 -  
402 -<!-- 表单分组组件 form-group START -->  
403 -<div class="form-group">  
404 - <!-- 早晚例行保养 START -->  
405 - <div class="col-md-6">  
406 - <label class="control-label col-md-5">早晚例行保养  :</label>  
407 - <div class="col-md-5">  
408 - <input type="text" class="form-control" name="lb" value="{{map.lb}}" id="lbInput"  
409 - placeholder="请输入早晚例行保养"> 203 + <!-- 上行进场时间 END -->
  204 + <!-- 上行出场时间 START -->
  205 + <div class="col-md-6">
  206 + <label class="control-label col-md-5">上行出场时间  :</label>
  207 + <div class="col-md-5">
  208 + <input type="text" class="form-control" name="upOutTimer" value="{{map.upOutTimer}}" id="upOutTimerInput"
  209 + placeholder="请输入上行出场时间">
  210 + </div>
410 </div> 211 </div>
  212 + <!-- 上行出场时间 END -->
411 </div> 213 </div>
412 - <!-- 早晚例行保养 END -->  
413 - <!-- 空放行驶时间 START -->  
414 - <div class="col-md-6">  
415 - <label class="control-label col-md-5">空放行驶时间  :</label>  
416 - <div class="col-md-5">  
417 - <input type="text" class="form-control" name="kfsj" id="kfsjInput"  
418 - placeholder="请输入空放行驶时间"> 214 + <!-- 表单分组组件 form-group END -->
  215 +
  216 + <!-- 表单分组组件 form-group START -->
  217 + <div class="form-group">
  218 + <!-- 下行进场时间 START -->
  219 + <div class="col-md-6">
  220 + <label class="control-label col-md-5">下行进场时间  :</label>
  221 + <div class="col-md-5">
  222 + <input type="text" class="form-control" name="downInTimer" value="{{map.downInTimer}}" id="downInTimerInput"
  223 + placeholder="请输入下行进场时间">
  224 + </div>
419 </div> 225 </div>
420 - </div>  
421 - <!-- 空放行驶时间 END -->  
422 -</div>  
423 -<!-- 表单分组组件 form-group END -->  
424 -  
425 -<!-- 表单分组组件 form-group START -->  
426 -<div class="form-group">  
427 - <!-- 工作餐午餐时间 START -->  
428 - <div class="col-md-6">  
429 - <label class="control-label col-md-5">工作餐午餐时间 :</label>  
430 - <div class="col-md-5">  
431 - <input type="text" class="form-control" name="workeLunch" value="{{map.workeLunch}}" id="workeLunchInput"  
432 - placeholder="请输入工作餐午餐时间"> 226 + <!-- 下行进场时间 END -->
  227 +
  228 + <!-- 下行出场时间 START -->
  229 + <div class="col-md-6">
  230 + <label class="control-label col-md-5">下行出场时间  :</label>
  231 + <div class="col-md-5">
  232 + <input type="text" class="form-control" name="downOutTimer" value="{{map.downOutTimer}}" id="downOutTimerInput"
  233 + placeholder="请输入下行出场时间">
  234 + </div>
433 </div> 235 </div>
  236 + <!-- 下行出场时间 END -->
434 </div> 237 </div>
435 - <!-- 工作餐午餐时间 END -->  
436 -  
437 - <!-- 工作餐晚餐时间 START -->  
438 - <div class="col-md-6">  
439 - <label class="control-label col-md-5">工作餐晚餐时间 :</label>  
440 - <div class="col-md-5">  
441 - <input type="text" class="form-control" name="workeDinner" value="{{map.workeDinner}}" id="workeDinnerInput"  
442 - placeholder="请输入工作餐晚餐时间"> 238 + <!-- 表单分组组件 form-group END -->
  239 +
  240 + <!-- 表单分组组件 form-group START -->
  241 + <div class="form-group">
  242 + <div class="col-md-12">
  243 + <div class="col-md-6">
  244 + <label class="control-label col-md-5"></label>
  245 + <label class="col-md-5">上行行驶时间</label>
  246 + </div>
  247 + <div class="col-md-6">
  248 + <div class="col-md-5"></div>
  249 + <label class="col-md-5">下行行驶时间</label>
  250 +
  251 + <!--<label class="control-label col-md-1"></label>
  252 + <label class="control-label col-md-1">上行发车间隔</label>
  253 + &lt;!&ndash;<label class="control-label col-md-1">上行最大发车间隔</label>&ndash;&gt;
  254 +
  255 + <label class="control-label col-md-2"></label>
  256 + <label class="control-label col-md-1">下行发车间隔</label>-->
  257 + <!--<label class="control-label col-md-1">下行最大发车间隔</label>-->
  258 + </div>
443 </div> 259 </div>
444 - </div>  
445 - <!-- 工作餐晚餐时间 END -->  
446 -</div>  
447 -<!-- 表单分组组件 form-group END -->  
448 -  
449 -<!-- 表单分组组件 form-group START -->  
450 -<div class="form-group">  
451 - <!-- 上行进场时间 START -->  
452 - <div class="col-md-6">  
453 - <label class="control-label col-md-5">上行进场时间  :</label>  
454 - <div class="col-md-5">  
455 - <input type="text" class="form-control" name="upInTimer" value="{{map.upInTimer}}" id="upInTimerInput"  
456 - placeholder="请输入上行进场时间"> 260 +
  261 + <div class="col-md-12">
  262 + <div class="col-md-6">
  263 + <label class="control-label col-md-5"><span class="required"> * </span>首班-6:30  :</label>
  264 + <div class="col-md-5">
  265 + <input type="text" class="form-control" name="upTravelTime1" id="upTravelTimeInput1"
  266 + placeholder="上行行驶时间">
  267 + </div>
  268 + </div>
  269 + <div class="col-md-6">
  270 + <div class="col-md-5"></div>
  271 + <div class="col-md-5">
  272 + <input type="text" class="form-control" name="downTravelTime1" id="downTravelTimeInput1"
  273 + placeholder="下行行驶时间">
  274 + </div>
  275 + </div>
  276 +
  277 + <!--<div class="col-md-3">
  278 + <label class="control-label col-md-1"></label>
  279 + <div class="col-md-5">
  280 + <input type="text" class="form-control" name="upfcjjMin1" id="upfcjjMinInput1"
  281 + placeholder="上行最小间隔">
  282 + </div>
  283 + <label class="control-label col-md-1">-</label>
  284 + <div class="col-md-5">
  285 + <input type="text" class="form-control" name="upfcjjMax1" id="upfcjjMaxInput1"
  286 + placeholder="上行最大间隔">
  287 + </div>
  288 + </div>
  289 +
  290 + <div class="col-md-3">
  291 + <label class="control-label col-md-1"></label>
  292 + <div class="col-md-5">
  293 + <input type="text" class="form-control" name="downfcjjMin1" id="downfcjjMinInput1"
  294 + placeholder="下行最小间隔">
  295 + </div>
  296 + <label class="control-label col-md-1">-</label>
  297 + <div class="col-md-5">
  298 + <input type="text" class="form-control" name="downfcjjMax1" id="downfcjjMaxInput1"
  299 + placeholder="下行最大间隔">
  300 + </div>
  301 + </div>-->
  302 + </div>
  303 +
  304 + <!-- 6:31-8:30-->
  305 + <div class="col-md-12">
  306 + <div class="col-md-6">
  307 + <label class="control-label col-md-5"><span class="required"> * </span>6:31-8:30  :</label>
  308 + <div class="col-md-5">
  309 + <input type="text" class="form-control" valer="{{map.earlyUpTime}}" name="upTravelTime2" id="upTravelTimeInput2"
  310 + placeholder="上行行驶时间">
  311 + </div>
  312 + </div>
  313 + <div class="col-md-6">
  314 + <div class="col-md-5"></div>
  315 + <div class="col-md-5">
  316 + <input type="text" class="form-control" value="{{map.earlyDownTime}}" name="downTravelTime2" id="downTravelTimeInput2"
  317 + placeholder="下行行驶时间">
  318 + </div>
  319 + </div>
  320 +
  321 + <!--<div class="col-md-3">
  322 + <label class="control-label col-md-1"></label>
  323 + <div class="col-md-5">
  324 + <input type="text" class="form-control" name="upfcjjMin2" id="upfcjjMinInput2"
  325 + placeholder="上行最小间隔">
  326 + </div>
  327 + <label class="control-label col-md-1">-</label>
  328 + <div class="col-md-5">
  329 + <input type="text" class="form-control" name="upfcjjMax2" id="upfcjjMaxInput2"
  330 + placeholder="上行最大间隔">
  331 + </div>
  332 + </div>
  333 +
  334 + <div class="col-md-3">
  335 + <label class="control-label col-md-1"></label>
  336 + <div class="col-md-5">
  337 + <input type="text" class="form-control" name="downfcjjMin2" id="downfcjjMinInput2"
  338 + placeholder="下行最小间隔">
  339 + </div>
  340 + <label class="control-label col-md-1">-</label>
  341 + <div class="col-md-5">
  342 + <input type="text" class="form-control" name="downfcjjMax2" id="downfcjjMaxInput2"
  343 + placeholder="下行最大间隔">
  344 + </div>
  345 + </div>-->
  346 + </div>
  347 +
  348 + <!-- 8:31-16:00-->
  349 + <div class="col-md-12">
  350 + <div class="col-md-6">
  351 + <label class="control-label col-md-5"><span class="required"> * </span>8:31-16:00  :</label>
  352 + <div class="col-md-5">
  353 + <input type="text" class="form-control" value="{{map.troughUpTime}}" name="upTravelTime3" id="upTravelTimeInput3"
  354 + placeholder="上行行驶时间">
  355 + </div>
  356 + </div>
  357 + <div class="col-md-6">
  358 + <div class="col-md-5"></div>
  359 + <div class="col-md-5">
  360 + <input type="text" class="form-control" value="{{map.troughDownTime}}" name="downTravelTime3" id="downTravelTimeInput3"
  361 + placeholder="下行行驶时间">
  362 + </div>
  363 + </div>
  364 +
  365 + <!--<div class="col-md-3">
  366 + <label class="control-label col-md-1"></label>
  367 + <div class="col-md-5">
  368 + <input type="text" class="form-control" name="upfcjjMin3" id="upfcjjMinInput3"
  369 + placeholder="上行最小间隔">
  370 + </div>
  371 + <label class="control-label col-md-1">-</label>
  372 + <div class="col-md-5">
  373 + <input type="text" class="form-control" name="upfcjjMax3" id="upfcjjMaxInput3"
  374 + placeholder="上行最大间隔">
  375 + </div>
  376 + </div>
  377 +
  378 + <div class="col-md-3">
  379 + <label class="control-label col-md-1"></label>
  380 + <div class="col-md-5">
  381 + <input type="text" class="form-control" name="downfcjjMin3" id="downfcjjMinInput3"
  382 + placeholder="下行最小间隔">
  383 + </div>
  384 + <label class="control-label col-md-1">-</label>
  385 + <div class="col-md-5">
  386 + <input type="text" class="form-control" name="downfcjjMax3" id="downfcjjMaxInput3"
  387 + placeholder="下行最大间隔">
  388 + </div>
  389 + </div>-->
  390 + </div>
  391 +
  392 + <!-- 16:01-18:00-->
  393 + <div class="col-md-12">
  394 + <div class="col-md-6">
  395 + <label class="control-label col-md-5"><span class="required"> * </span>16:01-18:00  :</label>
  396 + <div class="col-md-5">
  397 + <input type="text" class="form-control" value="{{map.lateUpTime}}" name="upTravelTime4" id="upTravelTimeInput4"
  398 + placeholder="上行行驶时间">
  399 + </div>
  400 + </div>
  401 + <div class="col-md-6">
  402 + <div class="col-md-5"></div>
  403 + <div class="col-md-5">
  404 + <input type="text" class="form-control" value="{{map.lateDownTime}}" name="downTravelTime4" id="downTravelTimeInput4"
  405 + placeholder="下行行驶时间">
  406 + </div>
  407 + </div>
  408 +
  409 + <!--<div class="col-md-3">
  410 + <label class="control-label col-md-1"></label>
  411 + <div class="col-md-5">
  412 + <input type="text" class="form-control" name="upfcjjMin4" id="upfcjjMinInput4"
  413 + placeholder="上行最小间隔">
  414 + </div>
  415 + <label class="control-label col-md-1">-</label>
  416 + <div class="col-md-5">
  417 + <input type="text" class="form-control" name="upfcjjMax4" id="upfcjjMaxInput4"
  418 + placeholder="上行最大间隔">
  419 + </div>
  420 + </div>
  421 +
  422 + <div class="col-md-3">
  423 + <label class="control-label col-md-1"></label>
  424 + <div class="col-md-5">
  425 + <input type="text" class="form-control" name="downfcjjMin4" id="downfcjjMinInput4"
  426 + placeholder="下行最小间隔">
  427 + </div>
  428 + <label class="control-label col-md-1">-</label>
  429 + <div class="col-md-5">
  430 + <input type="text" class="form-control" name="downfcjjMax4" id="downfcjjMaxInput4"
  431 + placeholder="下行最大间隔">
  432 + </div>
  433 + </div>-->
  434 + </div>
  435 +
  436 + <!-- 18:00-末班-->
  437 + <div class="col-md-12">
  438 + <div class="col-md-6">
  439 + <label class="control-label col-md-5"><span class="required"> * </span>18:00-末班  :</label>
  440 + <div class="col-md-5">
  441 + <input type="text" class="form-control" name="upTravelTime5" id="upTravelTimeInput5"
  442 + placeholder="上行行驶时间">
  443 + </div>
  444 + </div>
  445 + <div class="col-md-6">
  446 + <div class="col-md-5"></div>
  447 + <div class="col-md-5">
  448 + <input type="text" class="form-control" name="downTravelTime5" id="downTravelTimeInput5"
  449 + placeholder="下行行驶时间">
  450 + </div>
  451 + </div>
  452 +
  453 + <!--<div class="col-md-3">
  454 + <label class="control-label col-md-1"></label>
  455 + <div class="col-md-5">
  456 + <input type="text" class="form-control" name="upfcjjMin5" id="upfcjjMinInput5"
  457 + placeholder="上行最小间隔">
  458 + </div>
  459 + <label class="control-label col-md-1">-</label>
  460 + <div class="col-md-5">
  461 + <input type="text" class="form-control" name="upfcjjMax5" id="upfcjjMaxInput5"
  462 + placeholder="上行最大间隔">
  463 + </div>
  464 + </div>
  465 +
  466 + <div class="col-md-3">
  467 + <label class="control-label col-md-1"></label>
  468 + <div class="col-md-5">
  469 + <input type="text" class="form-control" name="downfcjjMin5" id="downfcjjMinInput5"
  470 + placeholder="下行最小间隔">
  471 + </div>
  472 + <label class="control-label col-md-1">-</label>
  473 + <div class="col-md-5">
  474 + <input type="text" class="form-control" name="downfcjjMax5" id="downfcjjMaxInput5"
  475 + placeholder="下行最大间隔">
  476 + </div>
  477 + </div>-->
  478 + </div>
  479 + </div>
  480 + <!-- 表单分组组件 form-group END -->
  481 +
  482 + <!-- 表单分组组件 form-group START -->
  483 + <div class="form-group">
  484 + <!-- 班型与人次 (* 必填项) START -->
  485 + <div class="col-md-6 ">
  486 + <label class="control-label col-md-5"><span class="required"> * </span>班型/人次/车辆 :</label>
  487 + <div class="col-md-5 tagsDiv">
  488 + <div class="row" style="margin-left: 15px;">
  489 + <input type="text" value="" name="bxrc" id="state_tagsinput" style="display: none;">
  490 + </div>
  491 +
  492 + <div class="row" style="margin-top: 10px;">
  493 + <label class="control-label col-md-4">工休类型 :</label>
  494 + <div class="col-md-8">
  495 + <select class="form-control" id="state_tagsinput_bctype">
  496 + <option value="">请选择工休类型...</option>
  497 + <option value="六工一休">六工一休</option>
  498 + <option value="五工一休">五工一休</option>
  499 + <option value="五工二休">五工二休</option>
  500 + <option value="四工一休">四工一休</option>
  501 + <option value="三工一休">三工一休</option>
  502 + <option value="二工一休">二工一休</option>
  503 + <option value="一工一休">一工一休</option>
  504 + <option value="无工休">无工休</option>
  505 + </select>
  506 + </div>
  507 + </div>
  508 +
  509 + <div class="row" style="margin-top: 10px;">
  510 + <label class="control-label col-md-4">分配人次数:</label>
  511 + <div class="col-md-8">
  512 + <input type="number" class="form-control" placeholder="请输入分配人次数" id="state_tagsinput_rcsvalue" min="1">
  513 + </div>
  514 + </div>
  515 +
  516 + <div class="row" style="margin-top: 10px;">
  517 + <label class="control-label col-md-4">分配车辆数:</label>
  518 + <div class="col-md-8">
  519 + <input type="number" class="form-control" placeholder="请输入分配车辆数" id="state_tagsinput_clsvalue" min="1">
  520 + </div>
  521 + </div>
  522 +
  523 + <!--<div class="row" style="margin-top: 10px;">
  524 + <label class="control-label col-md-4">日平均工时:</label>
  525 + <div class="col-md-8">
  526 + <input type="number" class="form-control" placeholder="请输入日平均工时" id="state_tagsinput_gsavgvalue" min="1">
  527 + </div>
  528 + </div>-->
  529 +
  530 + <div class="row" style="margin-top: 10px;margin-left: 116px;">
  531 + <a href="javascript:;" class="btn red" id="state_tagsinput_add">添加</a>
  532 + </div>
  533 + </div>
  534 + </div>
  535 + <!-- 班型与人次 (* 必填项) END -->
  536 +
  537 + <div class="col-md-6">
  538 + <!-- 车辆总数 (* 必填项) START -->
  539 + <div class="col-md-12">
  540 + <label class="control-label col-md-5">
  541 + <span class="required"> * </span>
  542 + 车辆总数    :</label>
  543 + <div class="col-md-5">
  544 + <input type="text" class="form-control" name="clzs" id="clzsInput"
  545 + placeholder="请输入车辆总数">
  546 + </div>
  547 + </div>
  548 + <!-- 车辆总数(* 必填项) END -->
  549 +
  550 + <div class="col-md-12">
  551 + <label class="control-label col-md-5"></label>
  552 + </div>
  553 +
  554 + <div class="col-md-12">
  555 + <label class="control-label col-md-5"><span class="required"> * </span>停站类型    :</label>
  556 + <div class="col-md-5 tagsDiv">
  557 + <div class="row" style="margin-left: 15px;">
  558 + <input type="text" value="" name="tzlx" id="stoptype_tagsinput">
  559 + </div>
  560 +
  561 + <div class="row" style="margin-top: 10px;">
  562 + <label class="control-label col-md-4">停站类型:</label>
  563 + <div class="col-md-8">
  564 + <select name="stopType" class="form-control" id="stopType_id">
  565 + <option value="">-- 请选择停站类型 --</option>
  566 + <option value="0">主站停站</option>
  567 + <option value="1">双向停站</option>
  568 + </select>
  569 + </div>
  570 + </div>
  571 +
  572 + <div class="row" style="margin-top: 10px;">
  573 + <label class="control-label col-md-4">主站:</label>
  574 + <div class="col-md-8">
  575 + <select name="masterStop" class="form-control" id="masterStop_id">
  576 + <option value="">请选择...</option>
  577 + <option value="0">{{map.line.startStationName}}</option>
  578 + <option value="1">{{map.line.endStationName}}</option>
  579 + </select>
  580 + </div>
  581 + </div>
  582 +
  583 + <div class="row" style="margin-top: 10px;margin-left: 116px;">
  584 + <a href="javascript:" class="btn red" id="stoptype_tagsinput_add">添加</a>
  585 + </div>
  586 + </div>
  587 + </div>
  588 + </div>
  589 +
  590 + </div>
  591 + <!-- 表单分组组件 form-group END -->
  592 +
  593 + <!-- 隐藏字段-时间 -->
  594 + <!-- 上下行行驶时间 -->
  595 + <input type="hidden" name="upTravelTime" value="{{map.upTravelTime}}" id="upTravelTimeInput"/>
  596 + <input type="hidden" name="downTravelTime" value="{{map.downTravelTime}}" id="downTravelTimeInput"/>
  597 + <!-- 上下行行驶里程 -->
  598 + <input type="hidden" name="upMileage" value="{{map.upMileage}}" id="upMileageInput"/>
  599 + <input type="hidden" name="downMileage" value="{{map.downMileage}}" id="downMileageInput"/>
  600 + <!-- 上下行进场出场里程 -->
  601 + <input type="hidden" name="upInMileage" value="{{map.upInMileage}}" id="upInlcInput"/>
  602 + <input type="hidden" name="downInMileage" value="{{map.downInMileage}}" id="downInlcInput"/>
  603 + <input type="hidden" name="upOutMileage" value="{{map.upOutMileage}}" id="upOutlcInput"/>
  604 + <input type="hidden" name="downOutMileage" value="{{map.downOutMileage}}" id="downOutlcInput"/>
  605 +
  606 +</script>
  607 +
  608 +<script type="text/html" id="bctype_tempconfig">
  609 + <h4 class="form-section"> 时刻表与线路名称 </h4>
  610 + <div class="form-group">
  611 + <div class="col-md-6">
  612 + <label class="control-label col-md-5"> 时刻表名称   : </label>
  613 + <div class="col-md-7">
  614 + <p class="form-control-static" data-display="skbName"> </p>
  615 + </div>
457 </div> 616 </div>
458 - </div>  
459 - <!-- 上行进场时间 END -->  
460 - <!-- 上行出场时间 START -->  
461 - <div class="col-md-6">  
462 - <label class="control-label col-md-5">上行出场时间  :</label>  
463 - <div class="col-md-5">  
464 - <input type="text" class="form-control" name="upOutTimer" value="{{map.upOutTimer}}" id="upOutTimerInput"  
465 - placeholder="请输入上行出场时间"> 617 + <div class="col-md-6">
  618 + <label class="control-label col-md-5"> 线路名称    :</label>
  619 + <div class="col-md-4">
  620 + <p class="form-control-static" data-display="lineName"> </p>
  621 + </div>
466 </div> 622 </div>
467 </div> 623 </div>
468 - <!-- 上行出场时间 END -->  
469 -</div>  
470 -<!-- 表单分组组件 form-group END -->  
471 -  
472 -  
473 -<!-- 表单分组组件 form-group START -->  
474 -<div class="form-group">  
475 - <!-- 下行进场时间 START -->  
476 - <div class="col-md-6">  
477 - <label class="control-label col-md-5">下行进场时间  :</label>  
478 - <div class="col-md-5">  
479 - <input type="text" class="form-control" name="downInTimer" value="{{map.downInTimer}}" id="downInTimerInput"  
480 - placeholder="请输入下行进场时间"> 624 + <h4 class="form-section"> 参数详情 </h4>
  625 + <!-- 表单分组组件 form-group START -->
  626 + <div class="form-group">
  627 + <!-- 线路规划类型 (* 必填项) END -->
  628 + <!-- 起始站首班时间 (* 必填项) START -->
  629 + <div class="col-md-6">
  630 + <label class="control-label col-md-5">
  631 + <span class="required"> * </span> 起始站首班时间 :
  632 + </label>
  633 + <div class="col-md-4">
  634 + <p class="form-control-static" data-display="startStationFirstTime"> </p>
  635 + </div>
481 </div> 636 </div>
482 - </div>  
483 - <!-- 下行进场时间 END -->  
484 -  
485 - <!-- 下行出场时间 START -->  
486 - <div class="col-md-6">  
487 - <label class="control-label col-md-5">下行出场时间  :</label>  
488 - <div class="col-md-5">  
489 - <input type="text" class="form-control" name="downOutTimer" value="{{map.downOutTimer}}" id="downOutTimerInput"  
490 - placeholder="请输入下行出场时间"> 637 + <!-- 起始站首班时间 (* 必填项) END -->
  638 + <!-- 起始站末班时间 (* 必填项) START -->
  639 + <div class="col-md-6">
  640 + <label class="control-label col-md-5">
  641 + <span class="required"> * </span> 起始站末班时间 :
  642 + </label>
  643 + <div class="col-md-4">
  644 + <p class="form-control-static" data-display="startStationEndTime"> </p>
  645 + </div>
491 </div> 646 </div>
  647 + <!-- 起始站末班时间 (* 必填项) END -->
492 </div> 648 </div>
493 - <!-- 下行出场时间 END -->  
494 -</div>  
495 -<!-- 表单分组组件 form-group END -->  
496 -  
497 -  
498 -<!-- 表单分组组件 form-group START -->  
499 -<div class="form-group">  
500 - <!-- 上行进场里程 START -->  
501 - <div class="col-md-6">  
502 - <label class="control-label col-md-5">上行进场里程  :</label>  
503 - <div class="col-md-5">  
504 - <input type="text" class="form-control" name="upInMileage" value="{{map.upInMileage}}" id="upInlcInput"  
505 - placeholder="请输入上行进场里程"> 649 + <!-- 表单分组组件 form-group END -->
  650 +
  651 + <!-- 表单分组组件 form-group START -->
  652 + <div class="form-group">
  653 + <!-- 终点站首班时间 (* 必填项) START -->
  654 + <div class="col-md-6">
  655 + <label class="control-label col-md-5">
  656 + <span class="required"> * </span> 终点站首班时间 :
  657 + </label>
  658 + <div class="col-md-4">
  659 + <p class="form-control-static" data-display="endStationFirstTime"> </p>
  660 + </div>
506 </div> 661 </div>
507 - </div>  
508 - <!-- 上行进场里程 END -->  
509 -  
510 - <!-- 上行出场里程 START -->  
511 - <div class="col-md-6">  
512 - <label class="control-label col-md-5">上行出场里程  :</label>  
513 - <div class="col-md-5">  
514 - <input type="text" class="form-control" name="upOutMileage" value="{{map.upOutMileage}}" id="upOutlcInput"  
515 - placeholder="请输入上行出场里程"> 662 + <!-- 终点站首班时间 (* 必填项) END -->
  663 + <!-- 终点站末班时间 (* 必填项) START -->
  664 + <div class="col-md-6">
  665 + <label class="control-label col-md-5">
  666 + <span class="required"> * </span> 终点站末班时间 :
  667 + </label>
  668 + <div class="col-md-4">
  669 + <p class="form-control-static" data-display="endStationEndTime"> </p>
  670 + </div>
516 </div> 671 </div>
  672 + <!-- 终点站末班时间 (* 必填项) END -->
517 </div> 673 </div>
518 - <!-- 上行出场里程 END -->  
519 -</div>  
520 -<!-- 表单分组组件 form-group END -->  
521 -  
522 -<!-- 表单分组组件 form-group START -->  
523 -<div class="form-group">  
524 - <!-- 下行进场里程 START -->  
525 - <div class="col-md-6">  
526 - <label class="control-label col-md-5">下行进场里程  :</label>  
527 - <div class="col-md-5">  
528 - <input type="text" class="form-control" name="downInMileage" value="{{map.downInMileage}}" id="downInlcInput"  
529 - placeholder="请输入下行进场里程"> 674 + <!-- 表单分组组件 form-group END -->
  675 +
  676 + <!-- 表单分组组件 form-group START -->
  677 + <div class="form-group">
  678 + <!-- 早高峰开始时间(* 必填项) START -->
  679 + <div class="col-md-6">
  680 + <label class="control-label col-md-5">
  681 + <span class="required"> * </span> 早高峰开始时间 :
  682 + </label>
  683 + <div class="col-md-4">
  684 + <p class="form-control-static" data-display="earlyStartTime"> </p>
  685 + </div>
530 </div> 686 </div>
531 - </div>  
532 - <!-- 下行进场里程 END -->  
533 -  
534 - <!-- 下行出场里程 START -->  
535 - <div class="col-md-6">  
536 - <label class="control-label col-md-5">下行出场里程  :</label>  
537 - <div class="col-md-5">  
538 - <input type="text" class="form-control" name="downOutMileage" value="{{map.downOutMileage}}" id="downOutlcInput"  
539 - placeholder="请输入下行出场里程"> 687 + <!-- 早高峰开始时间 (* 必填项) END -->
  688 + <!-- 早高峰结束时间 (* 必填项) START -->
  689 + <div class="col-md-6">
  690 + <label class="control-label col-md-5">
  691 + <span class="required"> * </span> 早高峰结束时间 :
  692 + </label>
  693 + <div class="col-md-4">
  694 + <p class="form-control-static" data-display="earlyEndTime"> </p>
  695 + </div>
540 </div> 696 </div>
  697 + <!-- 早高峰结束时间 (* 必填项) END -->
541 </div> 698 </div>
542 - <!-- 下行出场里程 END -->  
543 -</div>  
544 -<!-- 表单分组组件 form-group END -->  
545 -  
546 -  
547 -<!-- 表单分组组件 form-group START -->  
548 -<div class="form-group">  
549 - <!-- 班型与人次 (* 必填项) START -->  
550 - <div class="col-md-6 ">  
551 - <label class="control-label col-md-5"><span class="required"> * </span>班型/人次/车辆 :</label>  
552 - <div class="col-md-5 tagsDiv">  
553 - <div class="row" style="margin-left: 15px;">  
554 - <input type="text" value="" name="bxrc" id="state_tagsinput" style="display: none;">  
555 - </div>  
556 -  
557 - <div class="row" style="margin-top: 10px;">  
558 - <label class="control-label col-md-4">工休类型 :</label>  
559 - <div class="col-md-8">  
560 - <select class="form-control" id="state_tagsinput_bctype">  
561 - <option value="">请选择工休类型...</option>  
562 - <option value="六工一休">六工一休</option>  
563 - <option value="五工一休">五工一休</option>  
564 - <option value="五工二休">五工二休</option>  
565 - <option value="四工一休">四工一休</option>  
566 - <option value="三工一休">三工一休</option>  
567 - <option value="二工一休">二工一休</option>  
568 - <option value="一工一休">一工一休</option>  
569 - <option value="无工休">无工休</option>  
570 - </select>  
571 - </div>  
572 - </div> 699 + <!-- 表单分组组件 form-group END -->
573 700
574 - <div class="row" style="margin-top: 10px;">  
575 - <label class="control-label col-md-4">分配人次数:</label>  
576 - <div class="col-md-8">  
577 - <input type="number" class="form-control" placeholder="请输入分配人次数" id="state_tagsinput_rcsvalue" min="1">  
578 - </div>  
579 - </div>  
580 -  
581 - <div class="row" style="margin-top: 10px;">  
582 - <label class="control-label col-md-4">分配车辆数:</label>  
583 - <div class="col-md-8">  
584 - <input type="number" class="form-control" placeholder="请输入分配车辆数" id="state_tagsinput_clsvalue" min="1">  
585 - </div> 701 + <!-- 表单分组组件 form-group START -->
  702 + <div class="form-group">
  703 + <!-- 晚高峰开始时间(* 必填项) START -->
  704 + <div class="col-md-6">
  705 + <label class="control-label col-md-5">
  706 + <span class="required"> * </span> 晚高峰开始时间 :
  707 + </label>
  708 + <div class="col-md-4">
  709 + <p class="form-control-static" data-display="lateStartTime"> </p>
586 </div> 710 </div>
587 -  
588 - <div class="row" style="margin-top: 10px;">  
589 - <label class="control-label col-md-4">日平均工时:</label>  
590 - <div class="col-md-8">  
591 - <input type="number" class="form-control" placeholder="请输入日平均工时" id="state_tagsinput_gsavgvalue" min="1">  
592 - </div> 711 + </div>
  712 + <!-- 晚高峰开始时间(* 必填项) END -->
  713 + <!-- 晚高峰结束时间(* 必填项) START -->
  714 + <div class="col-md-6">
  715 + <label class="control-label col-md-5">
  716 + <span class="required"> * </span> 晚高峰结束时间 :
  717 + </label>
  718 + <div class="col-md-4">
  719 + <p class="form-control-static" data-display="lateEndTime"> </p>
593 </div> 720 </div>
  721 + </div>
  722 + <!-- 晚高峰结束时间(* 必填项) END -->
  723 + </div>
  724 + <!-- 表单分组组件 form-group END -->
594 725
595 - <div class="row" style="margin-top: 10px;margin-left: 116px;">  
596 - <a href="javascript:;" class="btn red" id="state_tagsinput_add">添加</a> 726 + <!-- 表单分组组件 form-group START -->
  727 + <div class="form-group">
  728 + <!-- 线路规划类型 (* 必填项) START -->
  729 + <div class="col-md-6">
  730 + <label class="control-label col-md-5">
  731 + <span class="required"> * </span> 线路规划类型  :
  732 + </label>
  733 + <div class="col-md-4">
  734 + <p class="form-control-static" data-display="linePlayType"> </p>
597 </div> 735 </div>
598 </div> 736 </div>
599 - </div>  
600 - <!-- 班型与人次 (* 必填项) END -->  
601 - <!-- 车辆总数 (* 必填项) START -->  
602 - <div class="col-md-6">  
603 - <label class="control-label col-md-5">  
604 - <span class="required"> * </span>  
605 - 车辆总数    :</label>  
606 - <div class="col-md-5">  
607 - <input type="text" class="form-control" name="clzs" id="clzsInput"  
608 - placeholder="请输入车辆总数"> 737 + <!-- 停车场 START -->
  738 + <div class="col-md-6">
  739 + <label class="control-label col-md-5">停车场     :</label>
  740 + <div class="col-md-7">
  741 + <p class="form-control-static" data-display="carPark"> </p>
  742 + </div>
609 </div> 743 </div>
  744 + <!-- 停车场 START -->
610 </div> 745 </div>
611 - <!-- 车辆总数(* 必填项) END -->  
612 -</div>  
613 -<!-- 表单分组组件 form-group END -->  
614 -</script> 746 + <!-- 表单分组组件 form-group END -->
615 747
616 -<script type="text/html" id="bctype_tempconfig">  
617 -<h4 class="form-section"> 时刻表与线路名称 </h4>  
618 -<div class="form-group">  
619 - <div class="col-md-6">  
620 - <label class="control-label col-md-5"> 时刻表名称   : </label>  
621 - <div class="col-md-7">  
622 - <p class="form-control-static" data-display="skbName"> </p>  
623 - </div>  
624 - </div>  
625 - <div class="col-md-6">  
626 - <label class="control-label col-md-5"> 线路名称    :</label>  
627 - <div class="col-md-4">  
628 - <p class="form-control-static" data-display="lineName"> </p>  
629 - </div>  
630 - </div>  
631 -</div>  
632 -<h4 class="form-section"> 参数详情 </h4>  
633 -<!-- 表单分组组件 form-group START -->  
634 -<div class="form-group">  
635 - <!-- 线路规划类型 (* 必填项) END -->  
636 - <!-- 起始站首班时间 (* 必填项) START -->  
637 - <div class="col-md-6">  
638 - <label class="control-label col-md-5">  
639 - <span class="required"> * </span> 起始站首班时间 :  
640 - </label>  
641 - <div class="col-md-4">  
642 - <p class="form-control-static" data-display="startStationFirstTime"> </p> 748 + <!-- 表单分组组件 form-group START -->
  749 + <div class="form-group">
  750 + <!-- 早晚例行保养 START -->
  751 + <div class="col-md-6">
  752 + <label class="control-label col-md-5">早晚例行保养  :</label>
  753 + <div class="col-md-4">
  754 + <p class="form-control-static" data-display="lb"> </p>
  755 + </div>
643 </div> 756 </div>
644 - </div>  
645 - <!-- 起始站首班时间 (* 必填项) END -->  
646 - <!-- 起始站末班时间 (* 必填项) START -->  
647 - <div class="col-md-6">  
648 - <label class="control-label col-md-5">  
649 - <span class="required"> * </span> 起始站末班时间 :  
650 - </label>  
651 - <div class="col-md-4">  
652 - <p class="form-control-static" data-display="startStationEndTime"> </p>  
653 - </div>  
654 - </div>  
655 - <!-- 起始站末班时间 (* 必填项) END -->  
656 -</div>  
657 -<!-- 表单分组组件 form-group END -->  
658 -  
659 -<!-- 表单分组组件 form-group START -->  
660 -<div class="form-group">  
661 - <!-- 终点站首班时间 (* 必填项) START -->  
662 - <div class="col-md-6">  
663 - <label class="control-label col-md-5">  
664 - <span class="required"> * </span> 终点站首班时间 :  
665 - </label>  
666 - <div class="col-md-4">  
667 - <p class="form-control-static" data-display="endStationFirstTime"> </p> 757 + <!-- 早晚例行保养 END -->
  758 + <!-- 吃饭地点 START -->
  759 + <div class="col-md-6">
  760 + <label class="control-label col-md-5">吃饭地点    :</label>
  761 + <div class="col-md-7">
  762 + <p class="form-control-static" data-display="cfdd"> </p>
  763 + </div>
668 </div> 764 </div>
  765 + <!-- 吃饭地点 START -->
669 </div> 766 </div>
670 - <!-- 终点站首班时间 (* 必填项) END -->  
671 - <!-- 终点站末班时间 (* 必填项) START -->  
672 - <div class="col-md-6">  
673 - <label class="control-label col-md-5">  
674 - <span class="required"> * </span> 终点站末班时间 :  
675 - </label>  
676 - <div class="col-md-4">  
677 - <p class="form-control-static" data-display="endStationEndTime"> </p>  
678 - </div>  
679 - </div>  
680 - <!-- 终点站末班时间 (* 必填项) END -->  
681 -</div>  
682 -<!-- 表单分组组件 form-group END -->  
683 -  
684 -<!-- 表单分组组件 form-group START -->  
685 -<div class="form-group">  
686 - <!-- 早高峰开始时间(* 必填项) START -->  
687 - <div class="col-md-6">  
688 - <label class="control-label col-md-5">  
689 - <span class="required"> * </span> 早高峰开始时间 :  
690 - </label>  
691 - <div class="col-md-4">  
692 - <p class="form-control-static" data-display="earlyStartTime"> </p>  
693 - </div>  
694 - </div>  
695 - <!-- 早高峰开始时间 (* 必填项) END -->  
696 - <!-- 早高峰结束时间 (* 必填项) START -->  
697 - <div class="col-md-6">  
698 - <label class="control-label col-md-5">  
699 - <span class="required"> * </span> 早高峰结束时间 :  
700 - </label>  
701 - <div class="col-md-4">  
702 - <p class="form-control-static" data-display="earlyEndTime"> </p>  
703 - </div>  
704 - </div>  
705 - <!-- 早高峰结束时间 (* 必填项) END -->  
706 -</div>  
707 -<!-- 表单分组组件 form-group END -->  
708 -  
709 -<!-- 表单分组组件 form-group START -->  
710 -<div class="form-group">  
711 - <!-- 晚高峰开始时间(* 必填项) START -->  
712 - <div class="col-md-6">  
713 - <label class="control-label col-md-5">  
714 - <span class="required"> * </span> 晚高峰开始时间 :  
715 - </label>  
716 - <div class="col-md-4">  
717 - <p class="form-control-static" data-display="lateStartTime"> </p>  
718 - </div>  
719 - </div>  
720 - <!-- 晚高峰开始时间(* 必填项) END -->  
721 - <!-- 晚高峰结束时间(* 必填项) START -->  
722 - <div class="col-md-6">  
723 - <label class="control-label col-md-5">  
724 - <span class="required"> * </span> 晚高峰结束时间 :  
725 - </label>  
726 - <div class="col-md-4">  
727 - <p class="form-control-static" data-display="lateEndTime"> </p>  
728 - </div>  
729 - </div>  
730 - <!-- 晚高峰结束时间(* 必填项) END -->  
731 -</div>  
732 -<!-- 表单分组组件 form-group END -->  
733 -  
734 -<!-- 表单分组组件 form-group START -->  
735 -<div class="form-group">  
736 - <!-- 上行行驶时间(* 必填项) START -->  
737 - <div class="col-md-6">  
738 - <label class="control-label col-md-5">  
739 - <span class="required"> * </span> 上行行驶时间  :  
740 - </label>  
741 - <div class="col-md-4">  
742 - <p class="form-control-static" data-display="upTravelTime"> </p>  
743 - </div>  
744 - </div>  
745 - <!-- 上行行驶时间(* 必填项) END -->  
746 - <!-- 下行行驶时间(* 必填项) START -->  
747 - <div class="col-md-6">  
748 - <label class="control-label col-md-5">  
749 - <span class="required"> * </span> 下行行驶时间  :  
750 - </label>  
751 - <div class="col-md-4">  
752 - <p class="form-control-static" data-display="downTravelTime"> </p>  
753 - </div>  
754 - </div>  
755 - <!-- 下行行驶时间(* 必填项) END -->  
756 -</div>  
757 -<!-- 表单分组组件 form-group END -->  
758 -  
759 -<!-- 表单分组组件 form-group START -->  
760 -<div class="form-group">  
761 - <!-- 上行行驶里程(* 必填项) START -->  
762 - <div class="col-md-6">  
763 - <label class="control-label col-md-5">  
764 - <span class="required"> * </span> 上行行驶里程  :  
765 - </label>  
766 - <div class="col-md-4">  
767 - <p class="form-control-static" data-display="upMileage"> </p>  
768 - </div>  
769 - </div>  
770 - <!-- 上行行驶里程(* 必填项) END-->  
771 - <!-- 下行行驶里程(* 必填项) START -->  
772 - <div class="col-md-6">  
773 - <label class="control-label col-md-5">  
774 - <span class="required"> * </span> 下行行驶里程  :  
775 - </label>  
776 - <div class="col-md-4">  
777 - <p class="form-control-static" data-display="downMileage"> </p>  
778 - </div>  
779 - </div>  
780 - <!-- 下行行驶里程(* 必填项) END -->  
781 -</div>  
782 -<!-- 表单分组组件 form-group END -->  
783 -  
784 -<!-- 表单分组组件 form-group START -->  
785 -<div class="form-group">  
786 - <!-- 高峰上行停站时间(* 必填项) START -->  
787 - <div class="col-md-6">  
788 - <label class="control-label col-md-5">  
789 - <span class="required"> * </span> 高峰上行停站时间:  
790 - </label>  
791 - <div class="col-md-4">  
792 - <p class="form-control-static" data-display="gfupStopTime"> </p>  
793 - </div>  
794 - </div>  
795 - <!-- 高峰上行停站时间(* 必填项) END -->  
796 - <!-- 高峰下行停站时间(* 必填项) START -->  
797 - <div class="col-md-6">  
798 - <label class="control-label col-md-5">  
799 - <span class="required"> * </span> 高峰下行停站时间:  
800 - </label>  
801 - <div class="col-md-4">  
802 - <p class="form-control-static" data-display="gfdownStopTime"> </p>  
803 - </div>  
804 - </div>  
805 - <!-- 高峰下行停站时间(* 必填项) END -->  
806 -</div>  
807 -<!-- 表单分组组件 form-group END -->  
808 -  
809 -<!-- 表单分组组件 form-group START -->  
810 -<div class="form-group">  
811 - <!-- 低谷上行停站时间(* 必填项) START -->  
812 - <div class="col-md-6">  
813 - <label class="control-label col-md-5">  
814 - <span class="required"> * </span> 低谷上行停站时间:  
815 - </label>  
816 - <div class="col-md-4">  
817 - <p class="form-control-static" data-display="dgupStopTime"> </p>  
818 - </div>  
819 - </div>  
820 - <!-- 低谷上行停站时间(* 必填项) END -->  
821 - <!-- 低谷下行停站时间(* 必填项) START -->  
822 - <div class="col-md-6">  
823 - <label class="control-label col-md-5">  
824 - <span class="required"> * </span> 低谷下行停站时间:  
825 - </label>  
826 - <div class="col-md-4">  
827 - <p class="form-control-static" data-display="dgdownStopTime"> </p>  
828 - </div>  
829 - </div>  
830 - <!-- 低谷下行停站时间(* 必填项) END -->  
831 -</div>  
832 -<!-- 表单分组组件 form-group END -->  
833 -  
834 -<!-- 表单分组组件 form-group START -->  
835 -<div class="form-group">  
836 - <!-- 低谷最大发车间隙(* 必填项) START -->  
837 - <div class="col-md-6">  
838 - <label class="control-label col-md-5">  
839 - <span class="required"> * </span> 低谷最大发车间隙:  
840 - </label>  
841 - <div class="col-md-4">  
842 - <p class="form-control-static" data-display="dgmaxfcjx"> </p>  
843 - </div>  
844 - </div>  
845 - <!-- 低谷最大发车间隙(* 必填项) END -->  
846 -  
847 - <!-- 低谷最大停站时间(* 必填项) START -->  
848 - <div class="col-md-6">  
849 - <label class="control-label col-md-5">  
850 - <span class="required"> * </span> 低谷最大停站时间:  
851 - </label>  
852 - <div class="col-md-4">  
853 - <p class="form-control-static" data-display="dgmaxtzsj"> </p>  
854 - </div>  
855 - </div>  
856 - <!-- 低谷最大停站时间(* 必填项) END -->  
857 -</div>  
858 -<!-- 表单分组组件 form-group END -->  
859 -  
860 -<!-- 表单分组组件 form-group START -->  
861 -<div class="form-group">  
862 - <!-- 线路规划类型 (* 必填项) START -->  
863 - <div class="col-md-6">  
864 - <label class="control-label col-md-5">  
865 - <span class="required"> * </span> 线路规划类型  :  
866 - </label>  
867 - <div class="col-md-4">  
868 - <p class="form-control-static" data-display="linePlayType"> </p> 767 + <!-- 表单分组组件 form-group END -->
  768 +
  769 + <!-- 表单分组组件 form-group START -->
  770 + <div class="form-group">
  771 + <!-- 工作餐午餐时间 START -->
  772 + <div class="col-md-6">
  773 + <label class="control-label col-md-5"> 工作餐午餐时间 : </label>
  774 + <div class="col-md-4">
  775 + <p class="form-control-static" data-display="workeLunch"> </p>
  776 + </div>
869 </div> 777 </div>
870 - </div>  
871 - <!-- 停车场 START -->  
872 - <div class="col-md-6">  
873 - <label class="control-label col-md-5">停车场     :</label>  
874 - <div class="col-md-7">  
875 - <p class="form-control-static" data-display="carPark"> </p>  
876 - </div>  
877 - </div>  
878 - <!-- 停车场 START -->  
879 -</div>  
880 -<!-- 表单分组组件 form-group END -->  
881 -  
882 -<!-- 表单分组组件 form-group START -->  
883 -<div class="form-group">  
884 - <!-- 终点站车容量 START -->  
885 - <div class="col-md-6">  
886 - <label class="control-label col-md-5"> 终点站车容量  : </label>  
887 - <div class="col-md-4">  
888 - <p class="form-control-static" data-display="zdzcrl"> </p> 778 + <!-- 工作餐午餐时间 END -->
  779 + <!-- 工作餐晚餐时间 START -->
  780 + <div class="col-md-6">
  781 + <label class="control-label col-md-5"> 工作餐晚餐时间 : </label>
  782 + <div class="col-md-4">
  783 + <p class="form-control-static" data-display="workeDinner"> </p>
  784 + </div>
889 </div> 785 </div>
  786 + <!-- 空放行驶时间 END -->
890 </div> 787 </div>
891 - <!-- 吃饭地点 START -->  
892 - <div class="col-md-6">  
893 - <label class="control-label col-md-5">吃饭地点    :</label>  
894 - <div class="col-md-7">  
895 - <p class="form-control-static" data-display="cfdd"> </p>  
896 - </div>  
897 - </div>  
898 - <!-- 吃饭地点 START -->  
899 -</div>  
900 -<!-- 表单分组组件 form-group END -->  
901 -  
902 -<!-- 表单分组组件 form-group START -->  
903 -<div class="form-group">  
904 - <!-- 早高峰上行时间 START -->  
905 - <div class="col-md-6">  
906 - <label class="control-label col-md-5"> 早高峰上行时间 : </label>  
907 - <div class="col-md-6">  
908 - <p class="form-control-static" data-display="earlyUpTime"> </p>  
909 - </div>  
910 - </div>  
911 - <!-- 早高峰上行时间 END -->  
912 - <!-- 早高峰下行时间 START -->  
913 - <div class="col-md-6">  
914 - <label class="control-label col-md-5"> 早高峰下行时间 : </label>  
915 - <div class="col-md-4">  
916 - <p class="form-control-static" data-display="earlyDownTime"> </p>  
917 - </div>  
918 - </div>  
919 - <!-- 早高峰下行时间 END -->  
920 -</div>  
921 -<!-- 表单分组组件 form-group END -->  
922 -  
923 -<!-- 表单分组组件 form-group START -->  
924 -<div class="form-group">  
925 - <!-- 晚高峰上行时间 START -->  
926 - <div class="col-md-6">  
927 - <label class="control-label col-md-5"> 晚高峰上行时间 : </label>  
928 - <div class="col-md-4">  
929 - <p class="form-control-static" data-display="lateUpTime"> </p>  
930 - </div> 788 + <!-- 表单分组组件 form-group END -->
  789 +
  790 + <!-- 表单分组组件 form-group START -->
  791 + <div class="form-group">
  792 + <!-- 上行进场时间 START -->
  793 + <div class="col-md-6">
  794 + <label class="control-label col-md-5"> 上行进场时间  :</label>
  795 + <div class="col-md-4">
  796 + <p class="form-control-static" data-display="upInTimer"> </p>
  797 + </div>
931 </div> 798 </div>
932 - <!-- 晚高峰上行时间 END -->  
933 - <!-- 晚高峰下行时间 START -->  
934 - <div class="col-md-6">  
935 - <label class="control-label col-md-5"> 晚高峰下行时间 :</label>  
936 - <div class="col-md-4">  
937 - <p class="form-control-static" data-display="lateDownTime"> </p>  
938 - </div>  
939 - </div>  
940 - <!-- 晚高峰下行时间 END -->  
941 -</div>  
942 -<!-- 表单分组组件 form-group END -->  
943 -  
944 -<!-- 表单分组组件 form-group START -->  
945 -<div class="form-group">  
946 - <!-- 低谷上行时间 START -->  
947 - <div class="col-md-6">  
948 - <label class="control-label col-md-5">低谷上行时间  : </label>  
949 - <div class="col-md-4">  
950 - <p class="form-control-static" data-display="troughUpTime"> </p>  
951 - </div>  
952 - </div>  
953 - <!-- 低谷上行时间 END -->  
954 - <!-- 低谷下行时间 START -->  
955 - <div class="col-md-6">  
956 - <label class="control-label col-md-5"> 低谷下行时间  : </label>  
957 - <div class="col-md-4">  
958 - <p class="form-control-static" data-display="troughDownTime"> </p>  
959 - </div>  
960 - </div>  
961 - <!-- 低谷下行时间 END -->  
962 -</div>  
963 -<!-- 表单分组组件 form-group END -->  
964 -  
965 -<!-- 表单分组组件 form-group START -->  
966 -<div class="form-group">  
967 - <!-- 区间上行时间 START -->  
968 - <div class="col-md-6">  
969 - <label class="control-label col-md-5"> 区间上行时间  :</label>  
970 - <div class="col-md-4">  
971 - <p class="form-control-static" data-display="qjUpTime"> </p>  
972 - </div>  
973 - </div>  
974 - <!-- 区间上行时间 END -->  
975 - <!-- 区间下行时间 START -->  
976 - <div class="col-md-6">  
977 - <label class="control-label col-md-5">区间下行时间  : </label>  
978 - <div class="col-md-4">  
979 - <p class="form-control-static" data-display="qjDownTime"> </p>  
980 - </div>  
981 - </div>  
982 - <!-- 区间下行时间 END -->  
983 -</div>  
984 -<!-- 表单分组组件 form-group END -->  
985 -  
986 -<!-- 表单分组组件 form-group START -->  
987 -<div class="form-group">  
988 - <!-- 早晚例行保养 START -->  
989 - <div class="col-md-6">  
990 - <label class="control-label col-md-5">早晚例行保养  :</label>  
991 - <div class="col-md-4">  
992 - <p class="form-control-static" data-display="lb"> </p>  
993 - </div>  
994 - </div>  
995 - <!-- 早晚例行保养 END -->  
996 - <!-- 空放行驶时间 START -->  
997 - <div class="col-md-6">  
998 - <label class="control-label col-md-5"> 空放行驶时间  : </label>  
999 - <div class="col-md-4">  
1000 - <p class="form-control-static" data-display="kfsj"> </p>  
1001 - </div> 799 + <!-- 上行进场时间 END -->
  800 + <!-- 上行出场时间 START -->
  801 + <div class="col-md-6">
  802 + <label class="control-label col-md-5"> 上行出场时间  : </label>
  803 + <div class="col-md-4">
  804 + <p class="form-control-static" data-display="upOutTimer"> </p>
  805 + </div>
  806 + </div>
  807 + <!-- 上行出场时间 END -->
1002 </div> 808 </div>
1003 - <!-- 空放行驶时间 END -->  
1004 -</div>  
1005 -<!-- 表单分组组件 form-group END --> 809 + <!-- 表单分组组件 form-group END -->
1006 810
1007 -<!-- 表单分组组件 form-group START -->  
1008 -<div class="form-group">  
1009 - <!-- 工作餐午餐时间 START --> 811 + <!-- 表单分组组件 form-group START -->
  812 + <div class="form-group">
  813 + <!-- 下行进场时间 START -->
1010 <div class="col-md-6"> 814 <div class="col-md-6">
1011 - <label class="control-label col-md-5"> 工作餐午餐时间 : </label>  
1012 - <div class="col-md-4">  
1013 - <p class="form-control-static" data-display="workeLunch"> </p>  
1014 - </div>  
1015 - </div>  
1016 - <!-- 工作餐午餐时间 END -->  
1017 - <!-- 工作餐晚餐时间 START -->  
1018 - <div class="col-md-6">  
1019 - <label class="control-label col-md-5"> 工作餐晚餐时间 : </label>  
1020 - <div class="col-md-4">  
1021 - <p class="form-control-static" data-display="workeDinner"> </p>  
1022 - </div>  
1023 - </div>  
1024 - <!-- 空放行驶时间 END -->  
1025 -</div>  
1026 -<!-- 表单分组组件 form-group END -->  
1027 -  
1028 -<!-- 表单分组组件 form-group START -->  
1029 -<div class="form-group">  
1030 - <!-- 上行进场时间 START -->  
1031 - <div class="col-md-6">  
1032 - <label class="control-label col-md-5"> 上行进场时间  :</label>  
1033 - <div class="col-md-4">  
1034 - <p class="form-control-static" data-display="upInTimer"> </p>  
1035 - </div>  
1036 - </div>  
1037 - <!-- 上行进场时间 END -->  
1038 - <!-- 上行出场时间 START -->  
1039 - <div class="col-md-6">  
1040 - <label class="control-label col-md-5"> 上行出场时间  : </label>  
1041 - <div class="col-md-4">  
1042 - <p class="form-control-static" data-display="upOutTimer"> </p>  
1043 - </div> 815 + <label class="control-label col-md-5"> 下行进场时间  : </label>
  816 + <div class="col-md-4">
  817 + <p class="form-control-static" data-display="downInTimer"> </p>
  818 + </div>
1044 </div> 819 </div>
1045 - <!-- 上行出场时间 END -->  
1046 -</div>  
1047 -<!-- 表单分组组件 form-group END -->  
1048 -  
1049 -<!-- 表单分组组件 form-group START -->  
1050 -<div class="form-group">  
1051 - <!-- 下行进场时间 START -->  
1052 - <div class="col-md-6">  
1053 - <label class="control-label col-md-5"> 下行进场时间  : </label>  
1054 - <div class="col-md-4">  
1055 - <p class="form-control-static" data-display="downInTimer"> </p>  
1056 - </div>  
1057 - </div>  
1058 - <!-- 下行进场时间 END -->  
1059 - <!-- 下行出场时间 START -->  
1060 - <div class="col-md-6">  
1061 - <label class="control-label col-md-5"> 下行出场时间  : </label>  
1062 - <div class="col-md-4">  
1063 - <p class="form-control-static" data-display="downOutTimer"> </p>  
1064 - </div>  
1065 - </div>  
1066 - <!-- 下行出场时间 END -->  
1067 -</div>  
1068 -<!-- 表单分组组件 form-group END -->  
1069 -  
1070 -<!-- 表单分组组件 form-group START -->  
1071 -<div class="form-group">  
1072 - <!-- 上行进场里程 START -->  
1073 - <div class="col-md-6">  
1074 - <label class="control-label col-md-5"> 上行进场里程  : </label>  
1075 - <div class="col-md-4">  
1076 - <p class="form-control-static" data-display="upInMileage"> </p>  
1077 - </div>  
1078 - </div>  
1079 - <!-- 上行进场里程 END -->  
1080 - <!-- 上行出场里程 START -->  
1081 - <div class="col-md-6">  
1082 - <label class="control-label col-md-5">上行出场里程  :</label>  
1083 - <div class="col-md-4">  
1084 - <p class="form-control-static" data-display="upOutMileage"> </p> 820 + <!-- 下行进场时间 END -->
  821 + <!-- 下行出场时间 START -->
  822 + <div class="col-md-6">
  823 + <label class="control-label col-md-5"> 下行出场时间  : </label>
  824 + <div class="col-md-4">
  825 + <p class="form-control-static" data-display="downOutTimer"> </p>
  826 + </div>
1085 </div> 827 </div>
  828 + <!-- 下行出场时间 END -->
1086 </div> 829 </div>
1087 - <!-- 上行出场里程 END -->  
1088 -</div>  
1089 -<!-- 表单分组组件 form-group END -->  
1090 -  
1091 -<!-- 表单分组组件 form-group START -->  
1092 -<div class="form-group">  
1093 - <!-- 下行进场里程 START -->  
1094 - <div class="col-md-6">  
1095 - <label class="control-label col-md-5">下行进场里程  : </label>  
1096 - <div class="col-md-4">  
1097 - <p class="form-control-static" data-display="downInMileage"> </p>  
1098 - </div>  
1099 - </div>  
1100 - <!-- 下行进场里程 END -->  
1101 - <!-- 下行出场里程 START -->  
1102 - <div class="col-md-6">  
1103 - <label class="control-label col-md-5"> 下行出场里程  :</label>  
1104 - <div class="col-md-4">  
1105 - <p class="form-control-static" data-display="downOutMileage"> </p>  
1106 - </div>  
1107 - </div>  
1108 - <!-- 下行出场里程 END -->  
1109 -</div>  
1110 -<!-- 表单分组组件 form-group END -->  
1111 -  
1112 -  
1113 -<!-- 表单分组组件 form-group START -->  
1114 -<div class="form-group">  
1115 - <!-- 班型与人次 START -->  
1116 - <div class="col-md-6">  
1117 - <label class="control-label col-md-5">  
1118 - <span class="required"> * </span> 班型/人次/车辆 :  
1119 - </label>  
1120 - <div class="col-md-4">  
1121 - <p class="form-control-static" data-display="bxrc"> </p>  
1122 - </div> 830 + <!-- 表单分组组件 form-group END -->
  831 +
  832 + <!-- 表单分组组件 form-group START -->
  833 + <div class="form-group">
  834 + <!-- 班型与人次 START -->
  835 + <div class="col-md-6">
  836 + <label class="control-label col-md-5">
  837 + <span class="required"> * </span> 班型/人次/车辆 :
  838 + </label>
  839 + <div class="col-md-4">
  840 + <p class="form-control-static" data-display="bxrc"> </p>
  841 + </div>
  842 + </div>
  843 + <!-- 班型与人次 END -->
  844 + <!-- 车辆总数 START -->
  845 + <div class="col-md-6">
  846 + <label class="control-label col-md-5">
  847 + <span class="required"> * </span> 车辆总数    :
  848 + </label>
  849 + <div class="col-md-4">
  850 + <p class="form-control-static" data-display="clzs"> </p>
  851 + </div>
  852 + </div>
  853 + <!-- 车辆总数 END -->
1123 </div> 854 </div>
1124 - <!-- 班型与人次 END -->  
1125 - <!-- 车辆总数 START -->  
1126 - <div class="col-md-6">  
1127 - <label class="control-label col-md-5">  
1128 - <span class="required"> * </span> 车辆总数    :  
1129 - </label>  
1130 - <div class="col-md-4">  
1131 - <p class="form-control-static" data-display="clzs"> </p>  
1132 - </div> 855 + <!-- 表单分组组件 form-group END -->
  856 +
  857 +
  858 + <!-- 表单分组组件 form-group START -->
  859 + <div class="form-group">
  860 + <div class="col-md-12">
  861 + <div class="col-md-6">
  862 + <label class="control-label col-md-5"></label>
  863 + <label class="col-md-5">上行行驶时间</label>
  864 + </div>
  865 + <div class="col-md-6">
  866 + <div class="col-md-5"></div>
  867 + <label class="col-md-5">下行行驶时间</label>
  868 + </div>
  869 + </div>
  870 +
  871 + <div class="col-md-12">
  872 + <div class="col-md-6">
  873 + <label class="control-label col-md-5"><span class="required"> * </span>首班-6:30  :</label>
  874 + <div class="col-md-5">
  875 + <p class="form-control-static" data-display="upTravelTime1"> </p>
  876 + </div>
  877 + </div>
  878 + <div class="col-md-6">
  879 + <div class="col-md-5"></div>
  880 + <div class="col-md-5">
  881 + <p class="form-control-static" data-display="downTravelTime1"> </p>
  882 + </div>
  883 + </div>
  884 + </div>
  885 +
  886 + <!-- 6:31-8:30-->
  887 + <div class="col-md-12">
  888 + <div class="col-md-6">
  889 + <label class="control-label col-md-5"><span class="required"> * </span>6:31-8:30  :</label>
  890 + <div class="col-md-5">
  891 + <p class="form-control-static" data-display="upTravelTime2"> </p>
  892 + </div>
  893 + </div>
  894 + <div class="col-md-6">
  895 + <div class="col-md-5"></div>
  896 + <div class="col-md-5">
  897 + <p class="form-control-static" data-display="downTravelTime2"> </p>
  898 + </div>
  899 + </div>
  900 + </div>
  901 +
  902 + <!-- 8:31-16:00-->
  903 + <div class="col-md-12">
  904 + <div class="col-md-6">
  905 + <label class="control-label col-md-5"><span class="required"> * </span>8:31-16:00  :</label>
  906 + <div class="col-md-5">
  907 + <p class="form-control-static" data-display="upTravelTime3"> </p>
  908 + </div>
  909 + </div>
  910 + <div class="col-md-6">
  911 + <div class="col-md-5"></div>
  912 + <div class="col-md-5">
  913 + <p class="form-control-static" data-display="downTravelTime3"> </p>
  914 + </div>
  915 + </div>
  916 + </div>
  917 +
  918 + <!-- 16:01-18:00-->
  919 + <div class="col-md-12">
  920 + <div class="col-md-6">
  921 + <label class="control-label col-md-5"><span class="required"> * </span>16:01-18:00  :</label>
  922 + <div class="col-md-5">
  923 + <p class="form-control-static" data-display="upTravelTime4"> </p>
  924 + </div>
  925 + </div>
  926 + <div class="col-md-6">
  927 + <div class="col-md-5"></div>
  928 + <div class="col-md-5">
  929 + <p class="form-control-static" data-display="downTravelTime4"> </p>
  930 + </div>
  931 + </div>
  932 + </div>
  933 +
  934 + <!-- 18:00-末班-->
  935 + <div class="col-md-12">
  936 + <div class="col-md-6">
  937 + <label class="control-label col-md-5"><span class="required"> * </span>18:00-末班  :</label>
  938 + <div class="col-md-5">
  939 + <p class="form-control-static" data-display="upTravelTime5"> </p>
  940 + </div>
  941 + </div>
  942 + <div class="col-md-6">
  943 + <div class="col-md-5"></div>
  944 + <div class="col-md-5">
  945 + <p class="form-control-static" data-display="downTravelTime5"> </p>
  946 + </div>
  947 + </div>
  948 + </div>
1133 </div> 949 </div>
1134 - <!-- 车辆总数 END -->  
1135 -</div>  
1136 -<!-- 表单分组组件 form-group END --> 950 + <!-- 表单分组组件 form-group END -->
1137 </script> 951 </script>
1138 \ No newline at end of file 952 \ No newline at end of file
src/main/resources/static/pages/forms/statement/mileageReport.html
@@ -38,26 +38,26 @@ @@ -38,26 +38,26 @@
38 <div class="portlet-title"> 38 <div class="portlet-title">
39 <form class="form-inline" action=""> 39 <form class="form-inline" action="">
40 <div style="display: inline-block; " id="gsdmDiv"> 40 <div style="display: inline-block; " id="gsdmDiv">
41 - <span class="item-label" style="width: 80px;margin-left: 28px;">公司: </span> 41 + <span class="item-label" style="width: 80px;margin-left: 10px;">公司: </span>
42 <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select> 42 <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>
43 </div> 43 </div>
44 - <div style="display: inline-block; margin-left: 29px;" id="fgsdmDiv"> 44 + <div style="display: inline-block; margin-left: 10px;" id="fgsdmDiv">
45 <span class="item-label" style="width: 80px;">分公司: </span> 45 <span class="item-label" style="width: 80px;">分公司: </span>
46 <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select> 46 <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>
47 </div> 47 </div>
48 - <div style="display: inline-block;margin-left: 15px;"> 48 + <div style="display: inline-block;margin-left: 10px;">
49 <span class="item-label" style="width: 80px;">线路: </span> 49 <span class="item-label" style="width: 80px;">线路: </span>
50 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 50 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
51 </div> 51 </div>
52 - <div style="margin-top: 10px"></div>  
53 - <div style="display: inline-block;">  
54 - <span class="item-label" style="width: 80px;">开始时间: </span> 52 + <!--<div style="margin-top: 10px"></div>-->
  53 + <div style="display: inline-block;margin-left: 10px;">
  54 + <span class="item-label" style="width: 80px;">时间: </span>
55 <input class="form-control" type="text" id="date" style="width: 180px;"/> 55 <input class="form-control" type="text" id="date" style="width: 180px;"/>
56 </div> 56 </div>
57 - <div style="display: inline-block;margin-left: 15px;"> 57 + <!--<div style="display: inline-block;margin-left: 15px;">
58 <span class="item-label" style="width: 80px;">结束时间: </span> 58 <span class="item-label" style="width: 80px;">结束时间: </span>
59 <input class="form-control" type="text" id="date2" style="width: 180px;"/> 59 <input class="form-control" type="text" id="date2" style="width: 180px;"/>
60 - </div> 60 + </div>-->
61 <div class="form-group" style="width: 80px;margin-left: 15px;"> 61 <div class="form-group" style="width: 80px;margin-left: 15px;">
62 <input class="btn btn-default" type="button" id="query" value="查询"/> 62 <input class="btn btn-default" type="button" id="query" value="查询"/>
63 </div> 63 </div>
@@ -119,10 +119,10 @@ @@ -119,10 +119,10 @@
119 locale : 'zh-cn' 119 locale : 'zh-cn'
120 }); 120 });
121 121
122 - $("#date2").datetimepicker({ 122 + /*$("#date2").datetimepicker({
123 format : 'YYYY-MM-DD', 123 format : 'YYYY-MM-DD',
124 locale : 'zh-cn' 124 locale : 'zh-cn'
125 - }); 125 + });*/
126 var d = new Date(); 126 var d = new Date();
127 var year = d.getFullYear(); 127 var year = d.getFullYear();
128 var month = d.getMonth() + 1; 128 var month = d.getMonth() + 1;
@@ -133,7 +133,7 @@ @@ -133,7 +133,7 @@
133 day = "0" + day; 133 day = "0" + day;
134 $("#date").val(year + "-" + month + "-" + day); 134 $("#date").val(year + "-" + month + "-" + day);
135 135
136 - $("#date2").val(year + "-" + month + "-" + day); 136 + // $("#date2").val(year + "-" + month + "-" + day);
137 137
138 var fage=false; 138 var fage=false;
139 var obj = []; 139 var obj = [];
@@ -157,7 +157,7 @@ @@ -157,7 +157,7 @@
157 $('#gsdm').html(options); 157 $('#gsdm').html(options);
158 updateCompany(); 158 updateCompany();
159 }); 159 });
160 - }) 160 + });
161 $("#gsdm").on("change",updateCompany); 161 $("#gsdm").on("change",updateCompany);
162 function updateCompany(){ 162 function updateCompany(){
163 var company = $('#gsdm').val(); 163 var company = $('#gsdm').val();
@@ -223,15 +223,15 @@ @@ -223,15 +223,15 @@
223 layer.msg("请选择时间范围!"); 223 layer.msg("请选择时间范围!");
224 return; 224 return;
225 } 225 }
226 - if($("#date2").val() == null || $("#date2").val().trim().length == 0){ 226 + /*if($("#date2").val() == null || $("#date2").val().trim().length == 0){
227 layer.msg("请选择时间范围!"); 227 layer.msg("请选择时间范围!");
228 return; 228 return;
229 - } 229 + }*/
230 // $("#tjrbBody").height($(window).height()-100); 230 // $("#tjrbBody").height($(window).height()-100);
231 line = $("#line").val(); 231 line = $("#line").val();
232 xlName = $("#select2-line-container").html(); 232 xlName = $("#select2-line-container").html();
233 date = $("#date").val(); 233 date = $("#date").val();
234 - date2 =$("#date2").val(); 234 + date2 =$("#date").val();
235 gsdm =$("#gsdm").val(); 235 gsdm =$("#gsdm").val();
236 fgsdm=$("#fgsdm").val(); 236 fgsdm=$("#fgsdm").val();
237 if(line=="请选择"){ 237 if(line=="请选择"){
@@ -281,33 +281,35 @@ @@ -281,33 +281,35 @@
281 }); 281 });
282 </script> 282 </script>
283 <script type="text/html" id="mileageReport"> 283 <script type="text/html" id="mileageReport">
  284 + {{if list.length > 1}}
284 {{each list as obj i}} 285 {{each list as obj i}}
285 - <tr>  
286 - {{if obj.xlName=='合计'}}  
287 - <td colspan="3">{{obj.xlName}}</td>  
288 - {{/if}}  
289 - {{if obj.xlName!='合计'}}  
290 - <td>{{obj.gsName}}</td>  
291 - <td>{{obj.fgsName}}</td>  
292 - <td>{{obj.xlName}}</td>  
293 - {{/if}}  
294 - <td>{{obj.sjyygl}}</td>  
295 - <td>{{obj.sjksgl}}</td>  
296 - <td>{{obj.zgl}}</td>  
297 - <td>{{obj.sddfgl}}</td>  
298 - <td>{{obj.zddfgl}}</td>  
299 - <td>{{obj.wqwxhgl}}</td>  
300 - <td>{{obj.bfwxhgl}}</td>  
301 - <td>{{obj.pygl}}</td>  
302 - <td>{{obj.ljgl}}</td>  
303 - <td>{{obj.zrwgl}}</td>  
304 - <td>{{obj.other}}</td>  
305 -  
306 - </tr> 286 + <tr>
  287 + {{if obj.xlName=='合计'}}
  288 + <td colspan="3">{{obj.xlName}}</td>
  289 + {{/if}}
  290 + {{if obj.xlName!='合计'}}
  291 + <td>{{obj.gsName}}</td>
  292 + <td>{{obj.fgsName}}</td>
  293 + <td>{{obj.xlName}}</td>
  294 + {{/if}}
  295 + <td>{{obj.sjyygl}}</td>
  296 + <td>{{obj.sjksgl}}</td>
  297 + <td>{{obj.zgl}}</td>
  298 + <td>{{obj.sddfgl}}</td>
  299 + <td>{{obj.zddfgl}}</td>
  300 + <td>{{obj.wqwxhgl}}</td>
  301 + <td>{{obj.bfwxhgl}}</td>
  302 + <td>{{obj.pygl}}</td>
  303 + <td>{{obj.ljgl}}</td>
  304 + <td>{{obj.zrwgl}}</td>
  305 + <td>{{obj.other}}</td>
  306 +
  307 + </tr>
307 {{/each}} 308 {{/each}}
  309 + {{/if}}
308 {{if list.length == 1}} 310 {{if list.length == 1}}
309 - <tr>  
310 - <td colspan="44"><h6 class="muted">没有找到相关数据</h6></td>  
311 - </tr> 311 + <tr>
  312 + <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td>
  313 + </tr>
312 {{/if}} 314 {{/if}}
313 </script> 315 </script>
314 \ No newline at end of file 316 \ No newline at end of file
src/main/resources/static/pages/forms/statement/scheduleCorrectionReport.html
@@ -38,29 +38,29 @@ @@ -38,29 +38,29 @@
38 <div class="portlet-title"> 38 <div class="portlet-title">
39 <form class="form-inline" action=""> 39 <form class="form-inline" action="">
40 <div style="display: inline-block; " id="gsdmDiv"> 40 <div style="display: inline-block; " id="gsdmDiv">
41 - <span class="item-label" style="width: 80px;margin-left: 28px;">公司: </span> 41 + <span class="item-label" style="width: 80px;margin-left: 10px;">公司: </span>
42 <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select> 42 <select class="form-control" name="company" id="gsdm" style="width: 180px;"></select>
43 - </div>  
44 - <div style="display: inline-block; margin-left: 29px;" id="fgsdmDiv"> 43 + </div>
  44 + <div style="display: inline-block; margin-left: 10px;" id="fgsdmDiv">
45 <span class="item-label" style="width: 80px;">分公司: </span> 45 <span class="item-label" style="width: 80px;">分公司: </span>
46 <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select> 46 <select class="form-control" name="subCompany" id="fgsdm" style="width: 180px;"></select>
47 </div> 47 </div>
48 - <div style="display: inline-block;margin-left: 15px;">  
49 - <span class="item-label" style="width: 80px;">线路: </span>  
50 - <select class="form-control" name="line" id="line" style="width: 180px;"></select>  
51 - </div>  
52 - <div style="margin-top: 10px"></div>  
53 - <div style="display: inline-block;">  
54 - <span class="item-label" style="width: 80px;">开始时间: </span>  
55 - <input class="form-control" type="text" id="date" style="width: 180px;"/>  
56 - </div>  
57 - <div style="display: inline-block;margin-left: 15px;"> 48 + <div style="display: inline-block;margin-left: 10px;">
  49 + <span class="item-label" style="width: 80px;">线路: </span>
  50 + <select class="form-control" name="line" id="line" style="width: 180px;"></select>
  51 + </div>
  52 + <!--<div style="margin-top: 10px"></div>-->
  53 + <div style="display: inline-block;margin-left: 10px;">
  54 + <span class="item-label" style="width: 80px;">时间: </span>
  55 + <input class="form-control" type="text" id="date" style="width: 180px;"/>
  56 + </div>
  57 + <!--<div style="display: inline-block;margin-left: 15px;">
58 <span class="item-label" style="width: 80px;">结束时间: </span> 58 <span class="item-label" style="width: 80px;">结束时间: </span>
59 <input class="form-control" type="text" id="date2" style="width: 180px;"/> 59 <input class="form-control" type="text" id="date2" style="width: 180px;"/>
60 - </div>  
61 - <div class="form-group" style="width: 80px;margin-left: 15px;">  
62 - <input class="btn btn-default" type="button" id="query" value="查询"/>  
63 - </div> 60 + </div>-->
  61 + <div class="form-group" style="width: 80px;margin-left: 15px;">
  62 + <input class="btn btn-default" type="button" id="query" value="查询"/>
  63 + </div>
64 </form> 64 </form>
65 </div> 65 </div>
66 <div class="portlet-body" id="tjrbBody" style="overflow:auto;height: calc(100% - 80px)"> 66 <div class="portlet-body" id="tjrbBody" style="overflow:auto;height: calc(100% - 80px)">
@@ -116,10 +116,10 @@ @@ -116,10 +116,10 @@
116 locale : 'zh-cn' 116 locale : 'zh-cn'
117 }); 117 });
118 118
119 - $("#date2").datetimepicker({ 119 + /*$("#date2").datetimepicker({
120 format : 'YYYY-MM-DD', 120 format : 'YYYY-MM-DD',
121 locale : 'zh-cn' 121 locale : 'zh-cn'
122 - }); 122 + });*/
123 var d = new Date(); 123 var d = new Date();
124 var year = d.getFullYear(); 124 var year = d.getFullYear();
125 var month = d.getMonth() + 1; 125 var month = d.getMonth() + 1;
@@ -130,7 +130,7 @@ @@ -130,7 +130,7 @@
130 day = "0" + day; 130 day = "0" + day;
131 $("#date").val(year + "-" + month + "-" + day); 131 $("#date").val(year + "-" + month + "-" + day);
132 132
133 - $("#date2").val(year + "-" + month + "-" + day); 133 + // $("#date2").val(year + "-" + month + "-" + day);
134 134
135 var fage=false; 135 var fage=false;
136 var obj = []; 136 var obj = [];
@@ -154,7 +154,7 @@ @@ -154,7 +154,7 @@
154 $('#gsdm').html(options); 154 $('#gsdm').html(options);
155 updateCompany(); 155 updateCompany();
156 }); 156 });
157 - }) 157 + });
158 $("#gsdm").on("change",updateCompany); 158 $("#gsdm").on("change",updateCompany);
159 function updateCompany(){ 159 function updateCompany(){
160 var company = $('#gsdm').val(); 160 var company = $('#gsdm').val();
@@ -220,15 +220,15 @@ @@ -220,15 +220,15 @@
220 layer.msg("请选择时间范围!"); 220 layer.msg("请选择时间范围!");
221 return; 221 return;
222 } 222 }
223 - if($("#date2").val() == null || $("#date2").val().trim().length == 0){ 223 + /*if($("#date2").val() == null || $("#date2").val().trim().length == 0){
224 layer.msg("请选择时间范围!"); 224 layer.msg("请选择时间范围!");
225 return; 225 return;
226 - } 226 + }*/
227 // $("#tjrbBody").height($(window).height()-100); 227 // $("#tjrbBody").height($(window).height()-100);
228 line = $("#line").val(); 228 line = $("#line").val();
229 xlName = $("#select2-line-container").html(); 229 xlName = $("#select2-line-container").html();
230 date = $("#date").val(); 230 date = $("#date").val();
231 - date2 =$("#date2").val(); 231 + date2 =$("#date").val();
232 gsdm =$("#gsdm").val(); 232 gsdm =$("#gsdm").val();
233 fgsdm=$("#fgsdm").val(); 233 fgsdm=$("#fgsdm").val();
234 if(line=="请选择"){ 234 if(line=="请选择"){
@@ -262,33 +262,35 @@ @@ -262,33 +262,35 @@
262 }); 262 });
263 </script> 263 </script>
264 <script type="text/html" id="scheduleReport"> 264 <script type="text/html" id="scheduleReport">
265 - {{each list as obj i}}  
266 - <tr>  
267 - {{if obj.xlName=='合计'}}  
268 - <td colspan="3">{{obj.xlName}}</td>  
269 - {{/if}}  
270 - {{if obj.xlName!='合计'}}  
271 - <td>{{obj.gsName}}</td>  
272 - <td>{{obj.fgsName}}</td>  
273 - <td>{{obj.xlName}}</td>  
274 - {{/if}}  
275 - <td>{{obj.sjyybc}}</td>  
276 - <td>{{obj.sjksbc}}</td>  
277 - <td>{{obj.zbc}}</td>  
278 - <td>{{obj.sddfbc}}</td>  
279 - <td>{{obj.zddfbc}}</td>  
280 - <td>{{obj.wqwxhbc}}</td>  
281 - <td>{{obj.bfwxhbc}}</td>  
282 - <td>{{obj.pybc}}</td>  
283 - <td>{{obj.ljbc}}</td>  
284 - <td>{{obj.zrwbc}}</td>  
285 - <td>{{obj.other}}</td>  
286 -  
287 - </tr>  
288 - {{/each}}  
289 - {{if list.length == 0}} 265 + {{if list.length > 1}}
  266 + {{each list as obj i}}
  267 + <tr>
  268 + {{if obj.xlName=='合计'}}
  269 + <td colspan="3">{{obj.xlName}}</td>
  270 + {{/if}}
  271 + {{if obj.xlName!='合计'}}
  272 + <td>{{obj.gsName}}</td>
  273 + <td>{{obj.fgsName}}</td>
  274 + <td>{{obj.xlName}}</td>
  275 + {{/if}}
  276 + <td>{{obj.sjyybc}}</td>
  277 + <td>{{obj.sjksbc}}</td>
  278 + <td>{{obj.zbc}}</td>
  279 + <td>{{obj.sddfbc}}</td>
  280 + <td>{{obj.zddfbc}}</td>
  281 + <td>{{obj.wqwxhbc}}</td>
  282 + <td>{{obj.bfwxhbc}}</td>
  283 + <td>{{obj.pybc}}</td>
  284 + <td>{{obj.ljbc}}</td>
  285 + <td>{{obj.zrwbc}}</td>
  286 + <td>{{obj.other}}</td>
  287 +
  288 + </tr>
  289 + {{/each}}
  290 + {{/if}}
  291 + {{if list.length == 1}}
290 <tr> 292 <tr>
291 - <td colspan="44"><h6 class="muted">没有找到相关数据</h6></td> 293 + <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td>
292 </tr> 294 </tr>
293 {{/if}} 295 {{/if}}
294 </script> 296 </script>
295 \ No newline at end of file 297 \ No newline at end of file