Commit e14690ee481e3d2e872d703a255a1ed0c7637833
1 parent
9d3fbdde
时刻表echarts gantt图,和给定班型算法
Showing
23 changed files
with
3540 additions
and
67 deletions
Too many changes to show.
To preserve performance only 23 of 27 files are displayed.
src/main/resources/static/pages/base/line/js/map-ajax-getdata.js
src/main/resources/static/pages/base/line/js/map-function.js
src/main/resources/static/pages/base/line/list.html
| ... | ... | @@ -49,7 +49,7 @@ |
| 49 | 49 | </a> |
| 50 | 50 | <ul class="dropdown-menu pull-right" id="datatable_ajax_tools"> |
| 51 | 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 | 53 | </li> |
| 54 | 54 | <li> |
| 55 | 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 @@ $('#edit_select_mobal').on('editSelectMobal_show', function(e, map_,drw,ajaxd,ed |
| 112 | 112 | var params = form.serializeJSON(); |
| 113 | 113 | // 站点名称 |
| 114 | 114 | var editStationName = params.stationNamebootbox; |
| 115 | - | |
| 115 | + // TODO(点击查询位置后绘画效果失败,待修改) | |
| 116 | 116 | if(params.editselect==0){ |
| 117 | 117 | editStationObj.setEitdStation(Station); |
| 118 | 118 | editStationObj.setEitdStationName(editStationName); | ... | ... |
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
| ... | ... | @@ -295,7 +295,7 @@ window.WorldsBMap = function () { |
| 295 | 295 | localSearch.search(Address); |
| 296 | 296 | }, |
| 297 | 297 | |
| 298 | - // 编辑站点 | |
| 298 | + // 站点编辑 | |
| 299 | 299 | editShapes: function (obj) { |
| 300 | 300 | // 关闭信息窗口 |
| 301 | 301 | mapBValue.closeInfoWindow(); |
| ... | ... | @@ -788,7 +788,7 @@ window.WorldsBMap = function () { |
| 788 | 788 | } |
| 789 | 789 | } |
| 790 | 790 | }, |
| 791 | - // 编辑路段 | |
| 791 | + // 路段编辑 | |
| 792 | 792 | editSection : function(sectionRoudId) { |
| 793 | 793 | layer.confirm('进入编辑状态', { |
| 794 | 794 | btn : [ '确定','返回' ], icon: 3, title:'提示' | ... | ... |
src/main/resources/static/pages/base/timesmodel/css/index.css
| ... | ... | @@ -2,6 +2,27 @@ body { |
| 2 | 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 | 26 | .relationshipGraph-tip { |
| 6 | 27 | border-radius: 6px !important; |
| 7 | 28 | background: #192838 !important; |
| ... | ... | @@ -108,7 +129,7 @@ text.alert-danger { |
| 108 | 129 | /* fill: #3b414e; */ |
| 109 | 130 | fill: #31394a; |
| 110 | 131 | cursor: default; |
| 111 | - stroke: #ffffff | |
| 132 | + stroke: #ffffff; | |
| 112 | 133 | stroke-width: 1px; |
| 113 | 134 | pointer-events: all; |
| 114 | 135 | rx:4; |
| ... | ... | @@ -117,9 +138,27 @@ text.alert-danger { |
| 117 | 138 | |
| 118 | 139 | |
| 119 | 140 | .ganttSvgContainer { |
| 120 | - height: 400px; | |
| 141 | + height: 720px; | |
| 121 | 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 | 164 | .svg-chart { |
| ... | ... | @@ -198,7 +237,7 @@ text.alert-danger { |
| 198 | 237 | |
| 199 | 238 | |
| 200 | 239 | .ganttSvgContainer::-webkit-scrollbar { |
| 201 | -width:6px; | |
| 240 | +width:12px; | |
| 202 | 241 | height:6px; |
| 203 | 242 | } |
| 204 | 243 | .ganttSvgContainer::-webkit-scrollbar-button { |
| ... | ... | @@ -224,4 +263,33 @@ background:rgba(255, 255, 255, 0); |
| 224 | 263 | .ganttSvgContainer::-webkit-scrollbar-resizer { |
| 225 | 264 | /* background:#FF0BEE; */ |
| 226 | 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 | 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>所属路牌 : | |
| 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 | + <!– 对应班次数 (* 必填项) START –> | |
| 48 | + <div class="col-md-6"> | |
| 49 | + <label class="control-label col-md-6"> | |
| 50 | + <span class="required"> * </span> 添加类型 : | |
| 51 | + </label> | |
| 52 | + <div class="col-md-6"> | |
| 53 | + <select name="addNum" class="form-control" id="addNumSelect"> | |
| 54 | + <!–<option value="">-- 请选择添加类型 --</option>–> | |
| 55 | + <option value="1">单个班次</option> | |
| 56 | + <option value="2">一圈(上下行都有)</option> | |
| 57 | + </select> | |
| 58 | + </div> | |
| 59 | + </div> | |
| 60 | + <!– 对应班次数 (* 必填项) END –> | |
| 61 | + | |
| 62 | + <!– 方向 (* 必填项) START –> | |
| 63 | + <div class="col-md-6"> | |
| 64 | + <label class="control-label col-md-6"> | |
| 65 | + <span class="required"> * </span> 方向 : | |
| 66 | + </label> | |
| 67 | + <div class="col-md-6"> | |
| 68 | + <!– <input type="text" class="form-control" name="dic" id="dicInput" placeholder="方向"> –> | |
| 69 | + <select name="dir" class="form-control" id="dirSelect"> | |
| 70 | + <option value="">-- 请选择方向 --</option> | |
| 71 | + <option value="relationshipGraph-up">上行</option> | |
| 72 | + <option value="relationshipGraph-down">下行</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> 发车时间 : | |
| 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> 班次类型 : | |
| 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> 班次历时 : | |
| 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> 是否分班 : | |
| 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 | 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>路牌名称 : | |
| 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 | 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>选择目标路牌 : | |
| 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 | 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>选择路牌 : | |
| 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 | 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>所属路牌 : | |
| 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> 发车时间 : | |
| 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> 班次类型 : | |
| 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> 班次历时 : | |
| 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> 是否分班 : | |
| 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 | 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 | 136 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/base/timesmodel/gantt.html
| ... | ... | @@ -39,6 +39,14 @@ |
| 39 | 39 | <div class="tools" style="margin-left: 20px;margin-top: -10px;"> |
| 40 | 40 | <a href="" class="fullscreen" data-original-title="" title="" style="text-decoration: none;"> </a> |
| 41 | 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 | 50 | <!-- actions 组件START --> |
| 43 | 51 | <div class="actions"> |
| 44 | 52 | <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> |
| ... | ... | @@ -92,33 +100,38 @@ |
| 92 | 100 | <i class="fa fa-share"></i> 恢 复 |
| 93 | 101 | </a> |
| 94 | 102 | </li> |
| 95 | - <li> | |
| 103 | + <!--<li> | |
| 96 | 104 | <a href="javascript:" class="tool-action reladelete"> |
| 97 | 105 | <i class="fa fa-close"></i> 批量删除 |
| 98 | 106 | </a> |
| 99 | - </li> | |
| 107 | + </li>--> | |
| 100 | 108 | <li> |
| 101 | - <a href="javascript:" class="tool-action reladplus"> | |
| 109 | + <a href="javascript:" class="tool-action addBc"> | |
| 102 | 110 | <i class="fa fa-plus"></i> 添加班次 |
| 103 | 111 | </a> |
| 104 | 112 | </li> |
| 105 | 113 | <li> |
| 106 | - <a href="javascript:" class="tool-action editlp"> | |
| 107 | - <i class="fa fa-pencil"></i> 修改路牌 | |
| 114 | + <a href="javascript:" class="tool-action addLp"> | |
| 115 | + <i class="fa fa-plus"></i> 添加路牌 | |
| 108 | 116 | </a> |
| 109 | 117 | </li> |
| 118 | + <!--<li> | |
| 119 | + <a href="javascript:" class="tool-action editLp"> | |
| 120 | + <i class="fa fa-pencil"></i> 修改路牌 | |
| 121 | + </a> | |
| 122 | + </li>--> | |
| 110 | 123 | <li> |
| 111 | - <a href="javascript:" class="tool-action addlp"> | |
| 112 | - <i class="fa fa-plus"></i> 添加路牌 | |
| 124 | + <a href="javascript:" class="tool-action deleteLp"> | |
| 125 | + <i class="fa fa-close"></i> 删除路牌 | |
| 113 | 126 | </a> |
| 114 | 127 | </li> |
| 115 | 128 | <li> |
| 116 | - <a href="javascript:" class="tool-action updownread"> | |
| 129 | + <a href="javascript:" class="tool-action upDownRead"> | |
| 117 | 130 | <i class="fa fa-arrows-h"></i> 均匀发车 |
| 118 | 131 | </a> |
| 119 | 132 | </li> |
| 120 | 133 | <li> |
| 121 | - <a href="javascript:" class="tool-action aboutread"> | |
| 134 | + <a href="javascript:" class="tool-action bcAdjust"> | |
| 122 | 135 | <i class="fa fa-arrows-v"></i> 班次调整 |
| 123 | 136 | </a> |
| 124 | 137 | </li> |
| ... | ... | @@ -132,9 +145,13 @@ |
| 132 | 145 | <!-- portlet-body组件START --> |
| 133 | 146 | <div class="portlet-body" id="scrllmouseEvent"> |
| 134 | 147 | <!-- ganttSvgContainer SVG组件START --> |
| 135 | - <div class="ganttSvgContainer"> | |
| 148 | + <!--<div class="ganttSvgContainer"> | |
| 136 | 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 | 155 | <!-- ganttSvgContainer SVG组件END --> |
| 139 | 156 | </div> |
| 140 | 157 | <!-- portlet-body组件END --> |
| ... | ... | @@ -146,7 +163,13 @@ |
| 146 | 163 | <!-- row 组件END --> |
| 147 | 164 | <script src="/pages/base/timesmodel/js/raty/lib/jquery.raty.js"></script> |
| 148 | 165 | <script src="/pages/base/timesmodel/js/ContextJS/js/context.js"></script> |
| 166 | +<script src="/pages/base/timesmodel/js/dateTimeTool.js"></script> | |
| 149 | 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 | 173 | <script src="/pages/base/timesmodel/js/v2/ParameterObj.js"></script> |
| 151 | 174 | <script src="/pages/base/timesmodel/js/v2/core/InternalBcObj.js"></script> |
| 152 | 175 | <script src="/pages/base/timesmodel/js/v2/core/InternalGroupObj.js"></script> |
| ... | ... | @@ -160,4 +183,24 @@ |
| 160 | 183 | <script src="/pages/base/timesmodel/js/v2/main_v2.js"></script> |
| 161 | 184 | <script src="/pages/base/timesmodel/js/d3.relationshipgraph.js"></script> |
| 162 | 185 | <script src="/pages/base/timesmodel/js/errorinfo.js"></script> |
| 163 | -<script src="/pages/base/timesmodel/js/gantt.js"></script> | |
| 164 | 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 | 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 | 845 | $(this).html(payment.join("<br>")); |
| 846 | 846 | } |
| 847 | 847 | }); |
| 848 | - } | |
| 848 | + }; | |
| 849 | 849 | |
| 850 | 850 | /** 按钮点击时触发 */ |
| 851 | 851 | var handleTitle = function(tab, navigation, index) { |
| ... | ... | @@ -874,7 +874,7 @@ var SKBFormWizard = function() { |
| 874 | 874 | $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮 |
| 875 | 875 | } |
| 876 | 876 | App.scrollTo($('.page-title'));// 移动到指定位置 |
| 877 | - } | |
| 877 | + }; | |
| 878 | 878 | |
| 879 | 879 | // 表单导航向导插件 |
| 880 | 880 | $('#submit_argus_form').bootstrapWizard({ |
| ... | ... | @@ -915,6 +915,8 @@ var SKBFormWizard = function() { |
| 915 | 915 | |
| 916 | 916 | if (baseRes == 0) { // 客流大数据分析 |
| 917 | 917 | $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); |
| 918 | + // 停站类型选择控件 | |
| 919 | + ComponentsBootstrapTagsinput.init_stoptype(); | |
| 918 | 920 | // 日期控件 |
| 919 | 921 | $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 |
| 920 | 922 | $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 |
| ... | ... | @@ -944,6 +946,8 @@ var SKBFormWizard = function() { |
| 944 | 946 | } else if (baseRes == 1) { // 班次/人次/车辆 |
| 945 | 947 | $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); |
| 946 | 948 | ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag. |
| 949 | + // 停站类型选择控件 | |
| 950 | + ComponentsBootstrapTagsinput.init_stoptype(); | |
| 947 | 951 | // 日期控件 |
| 948 | 952 | $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 |
| 949 | 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?'上行':'下行')+' <span>'+ params.marker +'</span>' | |
| 202 | + +'<br> fcno:  '+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 | 1004 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/gantt.js
| 1 | 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 | 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 | 17 | var objD = window.localStorage.isDoDate; |
| ... | ... | @@ -32,7 +39,6 @@ |
| 32 | 39 | }); |
| 33 | 40 | $('.tipso-animation').tipso('show'); |
| 34 | 41 | setTimeout(function(){$('.tipso-animation').tipso('hide');},4000); |
| 35 | - //debugger; | |
| 36 | 42 | // 1、定义开始与结束时间点字符串. |
| 37 | 43 | var seMap = getStartAndEndDate(map); |
| 38 | 44 | // 2、获取开始与结束时间对象. |
| ... | ... | @@ -46,6 +52,7 @@ |
| 46 | 52 | var bcTypeArr = getbcType(); |
| 47 | 53 | // 7、参数配置信息. |
| 48 | 54 | var dataMap = argsMap(map,dirA,bcTypeArr,seMap); |
| 55 | + parameters.setDataMap(dataMap); | |
| 49 | 56 | // 8、定义最大车辆数与停站时间. |
| 50 | 57 | var CSMap = null,data = null; |
| 51 | 58 | |
| ... | ... | @@ -65,21 +72,22 @@ |
| 65 | 72 | _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap); |
| 66 | 73 | map.clzs = _paramObj.calcuClzx(); |
| 67 | 74 | CSMap = getMaxCarAndStopSpace1(map); |
| 68 | - | |
| 69 | 75 | } |
| 70 | 76 | |
| 71 | 77 | // 定义时间参数. |
| 72 | - var stopAraay = getsj(map); | |
| 78 | + var stopArray = getsj(map); | |
| 73 | 79 | if(isNull(objD)) { |
| 74 | 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 | 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 | 91 | // TODO:绘制gantt图表 |
| 84 | 92 | // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 |
| 85 | 93 | // TODO:CSMap.maxCar 之后要设定一下的 |
| ... | ... | @@ -109,20 +117,22 @@ |
| 109 | 117 | } |
| 110 | 118 | // 按照发车序号顺序排序. |
| 111 | 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 | 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 | 136 | },500); |
| 127 | 137 | |
| 128 | 138 | /** |
| ... | ... | @@ -439,8 +449,8 @@ |
| 439 | 449 | * @return 返回甘特图的参数配置信息. |
| 440 | 450 | * */ |
| 441 | 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 | 454 | var VALUEKEYNAME = 'Worldwide Gross' , |
| 445 | 455 | DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240, |
| 446 | 456 | MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60, |
| ... | ... | @@ -453,7 +463,6 @@ |
| 453 | 463 | var hours=Math.floor(leave1/(3600*1000)); |
| 454 | 464 | DXHOURS = days*24+hours; |
| 455 | 465 | WIDTH = DXHOURS*MINUTE*MULTIPLE; |
| 456 | - // debugger; | |
| 457 | 466 | var lpsplitA = getylp(p.yAxisCarArray); |
| 458 | 467 | var args = { |
| 459 | 468 | 'valueKeyName': VALUEKEYNAME, |
| ... | ... | @@ -476,11 +485,11 @@ |
| 476 | 485 | 'lpNoA':lpsplitA.lpNoA, |
| 477 | 486 | 'lpNameA':lpsplitA.lpNameA, |
| 478 | 487 | 'tickFormat': TICKFORMAT, |
| 479 | - 'stopAraay' : p.stopAraay, | |
| 488 | + 'stopArray' : p.stopArray, | |
| 480 | 489 | 'dataMap':p.dataMap, |
| 481 | 490 | 'showTooltips': SHOWTOOLTIPS, |
| 482 | 491 | 'bxrcgs':p.bxrcgs |
| 483 | - } | |
| 492 | + }; | |
| 484 | 493 | return args; |
| 485 | 494 | } |
| 486 | 495 | |
| ... | ... | @@ -556,18 +565,18 @@ |
| 556 | 565 | // 把当前路牌下的班次按发车序号顺序排序. |
| 557 | 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 | 569 | }else { |
| 561 | 570 | data = graph.getDataArray(); |
| 562 | 571 | } |
| 563 | 572 | var rsjar = BaseFun.tzsztest(graph.configuration.taskTypes,data,graph.configuration.dataMap); |
| 564 | 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 | 575 | graph.configuration.dataMap.map);*/ |
| 567 | 576 | // 获取图形数据.重新绘制. |
| 568 | 577 | graph.data(BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, |
| 569 | 578 | graph.configuration.dataMap, |
| 570 | - graph.configuration.stopAraay, | |
| 579 | + graph.configuration.stopArray, | |
| 571 | 580 | graph.configuration.dataMap.map)); |
| 572 | 581 | // 记录当前操作. |
| 573 | 582 | graph.addHistory(); |
| ... | ... | @@ -727,8 +736,8 @@ |
| 727 | 736 | // 把当前路牌下的班次按发车序号顺序排序. |
| 728 | 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 | 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 | 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 | 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 | 42 | var bctypeValue = $('#state_tagsinput_bctype').val(); |
| 43 | 43 | var rcnum = $('#state_tagsinput_rcsvalue').val(); |
| 44 | 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 | 47 | if(!Number.isInteger(parseInt(rcnum)/parseInt(clnum))) { |
| 48 | 48 | layer.msg('当前算法只支持【单/双挡】!请您重新输入!'); |
| 49 | 49 | $('#state_tagsinput_bctype').val(null); |
| ... | ... | @@ -57,24 +57,40 @@ var ComponentsBootstrapTagsinput = function() { |
| 57 | 57 | if(s1a[0]==bctypeValue) { |
| 58 | 58 | rcnum = parseInt(rcnum) + parseInt(s1a[1]); |
| 59 | 59 | clnum = parseInt(clnum) + parseInt(s1a[2]); |
| 60 | - gsvag = parseInt(s1a[3]); | |
| 60 | + // gsvag = parseInt(s1a[3]); | |
| 61 | 61 | } |
| 62 | 62 | } |
| 63 | 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 | 70 | $('#state_tagsinput_bctype').val(null); |
| 69 | 71 | $('#state_tagsinput_rcsvalue').val(null); |
| 70 | 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 | 92 | var tag = true; |
| 77 | - if(v1==''|| v2=='' || v3=='' || v4=='') | |
| 93 | + if(v1==''|| v2=='' || v3=='') | |
| 78 | 94 | tag = false; |
| 79 | 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 | 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 | 251 | \ No newline at end of file | ... | ... |