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
| @@ -63,7 +63,6 @@ var MapGetAjaxData = function(){ | @@ -63,7 +63,6 @@ var MapGetAjaxData = function(){ | ||
| 63 | // 新增缓存站点保存 | 63 | // 新增缓存站点保存 |
| 64 | stationCacheSave : function(station,callback) { | 64 | stationCacheSave : function(station,callback) { |
| 65 | $post('/station/stationCacheSave',station,function(data) { | 65 | $post('/station/stationCacheSave',station,function(data) { |
| 66 | - debugger | ||
| 67 | callback && callback(data); | 66 | callback && callback(data); |
| 68 | }); | 67 | }); |
| 69 | }, | 68 | }, |
src/main/resources/static/pages/base/line/js/map-function.js
| @@ -116,7 +116,6 @@ var PublicFunctions = function () { | @@ -116,7 +116,6 @@ var PublicFunctions = function () { | ||
| 116 | } | 116 | } |
| 117 | // 路段数据长度 | 117 | // 路段数据长度 |
| 118 | var dataLen = data.length; | 118 | var dataLen = data.length; |
| 119 | - //debugger; | ||
| 120 | // 如果大于零 | 119 | // 如果大于零 |
| 121 | if(dataLen>0) { | 120 | if(dataLen>0) { |
| 122 | // 编辑路段数据 | 121 | // 编辑路段数据 |
src/main/resources/static/pages/base/line/list.html
| @@ -49,7 +49,7 @@ | @@ -49,7 +49,7 @@ | ||
| 49 | </a> | 49 | </a> |
| 50 | <ul class="dropdown-menu pull-right" id="datatable_ajax_tools"> | 50 | <ul class="dropdown-menu pull-right" id="datatable_ajax_tools"> |
| 51 | <li> | 51 | <li> |
| 52 | - <a href="javascript:;" data-action="0" id="createUsingSingle" class="tool-action"> <i class="fa fa-file-zip-o"></i> 生成路单文件</a> | 52 | + <a href="javascript:;" data-action="0" id="createUsingSingle" class="tool-action"> <i class="fa fa-file-zip-o"></i> 生成线路文件</a> |
| 53 | </li> | 53 | </li> |
| 54 | <li> | 54 | <li> |
| 55 | <a href="javascript:;" data-action="1" id="editRoute" class="tool-action"> <i class="fa fa-level-up"></i>上传GPS生成路线</a> | 55 | <a href="javascript:;" data-action="1" id="editRoute" class="tool-action"> <i class="fa fa-level-up"></i>上传GPS生成路线</a> |
src/main/resources/static/pages/base/stationroute/edit_select.html
| @@ -112,7 +112,7 @@ $('#edit_select_mobal').on('editSelectMobal_show', function(e, map_,drw,ajaxd,ed | @@ -112,7 +112,7 @@ $('#edit_select_mobal').on('editSelectMobal_show', function(e, map_,drw,ajaxd,ed | ||
| 112 | var params = form.serializeJSON(); | 112 | var params = form.serializeJSON(); |
| 113 | // 站点名称 | 113 | // 站点名称 |
| 114 | var editStationName = params.stationNamebootbox; | 114 | var editStationName = params.stationNamebootbox; |
| 115 | - | 115 | + // TODO(点击查询位置后绘画效果失败,待修改) |
| 116 | if(params.editselect==0){ | 116 | if(params.editselect==0){ |
| 117 | editStationObj.setEitdStation(Station); | 117 | editStationObj.setEitdStation(Station); |
| 118 | editStationObj.setEitdStationName(editStationName); | 118 | editStationObj.setEitdStationName(editStationName); |
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
| @@ -295,7 +295,7 @@ window.WorldsBMap = function () { | @@ -295,7 +295,7 @@ window.WorldsBMap = function () { | ||
| 295 | localSearch.search(Address); | 295 | localSearch.search(Address); |
| 296 | }, | 296 | }, |
| 297 | 297 | ||
| 298 | - // 编辑站点 | 298 | + // 站点编辑 |
| 299 | editShapes: function (obj) { | 299 | editShapes: function (obj) { |
| 300 | // 关闭信息窗口 | 300 | // 关闭信息窗口 |
| 301 | mapBValue.closeInfoWindow(); | 301 | mapBValue.closeInfoWindow(); |
| @@ -788,7 +788,7 @@ window.WorldsBMap = function () { | @@ -788,7 +788,7 @@ window.WorldsBMap = function () { | ||
| 788 | } | 788 | } |
| 789 | } | 789 | } |
| 790 | }, | 790 | }, |
| 791 | - // 编辑路段 | 791 | + // 路段编辑 |
| 792 | editSection : function(sectionRoudId) { | 792 | editSection : function(sectionRoudId) { |
| 793 | layer.confirm('进入编辑状态', { | 793 | layer.confirm('进入编辑状态', { |
| 794 | btn : [ '确定','返回' ], icon: 3, title:'提示' | 794 | btn : [ '确定','返回' ], icon: 3, title:'提示' |
src/main/resources/static/pages/base/timesmodel/css/index.css
| @@ -2,6 +2,27 @@ body { | @@ -2,6 +2,27 @@ body { | ||
| 2 | overflow: hidden; | 2 | overflow: hidden; |
| 3 | } | 3 | } |
| 4 | 4 | ||
| 5 | +.bc-adjust-list-input { | ||
| 6 | + /*border-style: solid;*/ | ||
| 7 | + /*border-width: 2px;*/ | ||
| 8 | + /*border-color: #f1586f;*/ | ||
| 9 | + width: 600px; | ||
| 10 | + height: 38px; | ||
| 11 | + /*color: #12cada !important;*/ | ||
| 12 | + | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +.bc-adjust-list { | ||
| 16 | + right: 500px; | ||
| 17 | + position: absolute; | ||
| 18 | + border: none; | ||
| 19 | + width: 709px; | ||
| 20 | + height: 40px; | ||
| 21 | + border-right-color: #0d638f; | ||
| 22 | + padding: 4px 0 0 0; | ||
| 23 | + z-index: 9999; | ||
| 24 | +} | ||
| 25 | + | ||
| 5 | .relationshipGraph-tip { | 26 | .relationshipGraph-tip { |
| 6 | border-radius: 6px !important; | 27 | border-radius: 6px !important; |
| 7 | background: #192838 !important; | 28 | background: #192838 !important; |
| @@ -108,7 +129,7 @@ text.alert-danger { | @@ -108,7 +129,7 @@ text.alert-danger { | ||
| 108 | /* fill: #3b414e; */ | 129 | /* fill: #3b414e; */ |
| 109 | fill: #31394a; | 130 | fill: #31394a; |
| 110 | cursor: default; | 131 | cursor: default; |
| 111 | - stroke: #ffffff | 132 | + stroke: #ffffff; |
| 112 | stroke-width: 1px; | 133 | stroke-width: 1px; |
| 113 | pointer-events: all; | 134 | pointer-events: all; |
| 114 | rx:4; | 135 | rx:4; |
| @@ -117,9 +138,27 @@ text.alert-danger { | @@ -117,9 +138,27 @@ text.alert-danger { | ||
| 117 | 138 | ||
| 118 | 139 | ||
| 119 | .ganttSvgContainer { | 140 | .ganttSvgContainer { |
| 120 | - height: 400px; | 141 | + height: 720px; |
| 121 | overflow: auto; | 142 | overflow: auto; |
| 122 | - position: relative; | 143 | + /*position: relative;*/ |
| 144 | +} | ||
| 145 | + | ||
| 146 | +#bcContainer { | ||
| 147 | + width: 100%; | ||
| 148 | + min-height: 100%; | ||
| 149 | + top: -160px; | ||
| 150 | + /*margin: 0px -100px 0px 0px;*/ | ||
| 151 | +} | ||
| 152 | +#upDownContainer { | ||
| 153 | + width: 100%; | ||
| 154 | + height: 350px; | ||
| 155 | + /*margin: 10px 0px 0px 10px;*/ | ||
| 156 | +} | ||
| 157 | + | ||
| 158 | +.gtt { | ||
| 159 | + height: 720px; | ||
| 160 | + width: 100%; | ||
| 161 | + overflow-y: auto; | ||
| 123 | } | 162 | } |
| 124 | 163 | ||
| 125 | .svg-chart { | 164 | .svg-chart { |
| @@ -198,7 +237,7 @@ text.alert-danger { | @@ -198,7 +237,7 @@ text.alert-danger { | ||
| 198 | 237 | ||
| 199 | 238 | ||
| 200 | .ganttSvgContainer::-webkit-scrollbar { | 239 | .ganttSvgContainer::-webkit-scrollbar { |
| 201 | -width:6px; | 240 | +width:12px; |
| 202 | height:6px; | 241 | height:6px; |
| 203 | } | 242 | } |
| 204 | .ganttSvgContainer::-webkit-scrollbar-button { | 243 | .ganttSvgContainer::-webkit-scrollbar-button { |
| @@ -224,4 +263,33 @@ background:rgba(255, 255, 255, 0); | @@ -224,4 +263,33 @@ background:rgba(255, 255, 255, 0); | ||
| 224 | .ganttSvgContainer::-webkit-scrollbar-resizer { | 263 | .ganttSvgContainer::-webkit-scrollbar-resizer { |
| 225 | /* background:#FF0BEE; */ | 264 | /* background:#FF0BEE; */ |
| 226 | background:rgba(255, 255, 255, 0); | 265 | background:rgba(255, 255, 255, 0); |
| 266 | +} | ||
| 267 | + | ||
| 268 | +.gtt::-webkit-scrollbar { | ||
| 269 | +width:12px; | ||
| 270 | +height:6px; | ||
| 271 | +} | ||
| 272 | +.gtt::-webkit-scrollbar-button { | ||
| 273 | +/* background-color:#FF7677; */ | ||
| 274 | +background:rgba(255, 255, 255, 0); | ||
| 275 | +} | ||
| 276 | +.gtt::-webkit-scrollbar-track { | ||
| 277 | +/* background:#FF66D5; */ | ||
| 278 | +background:rgba(255, 255, 255, 0); | ||
| 279 | +} | ||
| 280 | +.gtt::-webkit-scrollbar-track-piece { | ||
| 281 | +/* background:#ff0000; */ | ||
| 282 | +background:rgba(255, 255, 255, 0); | ||
| 283 | +} | ||
| 284 | +.gtt::-webkit-scrollbar-thumb{ | ||
| 285 | +background:rgba(197, 196, 196, 0.81); | ||
| 286 | +border-radius:10px !important; | ||
| 287 | +} | ||
| 288 | +.gtt::-webkit-scrollbar-corner { | ||
| 289 | +/* background:#82AFFF; */ | ||
| 290 | +background:rgba(255, 255, 255, 0); | ||
| 291 | +} | ||
| 292 | +.gtt::-webkit-scrollbar-resizer { | ||
| 293 | +/* background:#FF0BEE; */ | ||
| 294 | +background:rgba(255, 255, 255, 0); | ||
| 227 | } | 295 | } |
| 228 | \ No newline at end of file | 296 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/fragments/addbc.html
0 → 100644
| 1 | +<!-- 添加班次参数 --> | ||
| 2 | +<div class="modal fade" id="addBc_mobal" tabindex="-1" role="basic" aria-hidden="true"> | ||
| 3 | + <div class="modal-dialog"> | ||
| 4 | + <div class="modal-content" style="width: 900px;"> | ||
| 5 | + <div class="modal-header"> | ||
| 6 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | ||
| 7 | + <h4 class="modal-title">添加班次参数</h4> | ||
| 8 | + </div> | ||
| 9 | + <div class="modal-body"> | ||
| 10 | + <form class="form-horizontal" action="/" method="post" id="addBc" role="form"> | ||
| 11 | + <!-- alert-danger 组件START --> | ||
| 12 | + <div class="alert alert-danger display-hide" id="addBcName"> | ||
| 13 | + <button class="close" data-close="alert"></button> | ||
| 14 | + 您的输入有误,请检查下面的输入项 | ||
| 15 | + </div> | ||
| 16 | + <input id="qdzInput" class="hidden" /> | ||
| 17 | + <input id="zdzInput" class="hidden" /> | ||
| 18 | + | ||
| 19 | + <!-- 表单分组组件 form-group START --> | ||
| 20 | + <div class="form-group"> | ||
| 21 | + <!-- 路牌 (* 必填项) START --> | ||
| 22 | + <div class="col-md-6"> | ||
| 23 | + <label class="control-label col-md-6"> | ||
| 24 | + <span class="required"> * </span>所属路牌 : | ||
| 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 | \ No newline at end of file | 276 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/fragments/addlp.html
0 → 100644
| 1 | +<!-- 添加路牌名称 --> | ||
| 2 | +<div class="modal fade" id="addlp_mobal" tabindex="-1" role="basic" aria-hidden="true" style="top:30%"> | ||
| 3 | + <div class="modal-dialog"> | ||
| 4 | + <div class="modal-content"> | ||
| 5 | + <div class="modal-header"> | ||
| 6 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | ||
| 7 | + <h4 class="modal-title">添加路牌</h4> | ||
| 8 | + </div> | ||
| 9 | + <div class="modal-body"> | ||
| 10 | + <form class="form-horizontal" action="/" method="post" id="addlpForm" role="form"> | ||
| 11 | + <!-- 路牌名字 --> | ||
| 12 | + <div class="form-body"> | ||
| 13 | + <div class="form-group"> | ||
| 14 | + <label class="control-label col-md-3"> | ||
| 15 | + <span class="required"> * </span>路牌名称 : | ||
| 16 | + </label> | ||
| 17 | + <div class="col-md-6"> | ||
| 18 | + <input type="text" name="lpName" class="form-control" id="lpNameInput" value="111" style="width:100%" /> | ||
| 19 | + </div> | ||
| 20 | + </div> | ||
| 21 | + </div> | ||
| 22 | + </form> | ||
| 23 | + </div> | ||
| 24 | + <div class="modal-footer"> | ||
| 25 | + <button type="button" class="btn default" data-dismiss="modal">取消</button> | ||
| 26 | + <button type="button" class="btn btn-primary" id="addlpnext">确定</button> | ||
| 27 | + </div> | ||
| 28 | + </div> | ||
| 29 | + </div> | ||
| 30 | +</div> | ||
| 31 | +<script type="text/javascript"> | ||
| 32 | +$('#addlp_mobal').on('addlpMobal.show', function(e,lpData,echartsDrawGTT){ | ||
| 33 | + var lpDataCount = echartsDrawGTT.getLpDataCount(); | ||
| 34 | + var lpCount = lpDataCount[lpData[0]][2] + 1; | ||
| 35 | + // 显示mobal | ||
| 36 | + $('#addlp_mobal').modal({show : true,backdrop: 'static', keyboard: false}); | ||
| 37 | + // 添加路牌规则 | ||
| 38 | + $('#lpNameInput').val("_"+lpCount); | ||
| 39 | + // 获取表单元素 | ||
| 40 | + var form = $('#addlpForm'); | ||
| 41 | + // 下一步点击事件 | ||
| 42 | + $('#addlpnext').on('click', function() { | ||
| 43 | + form.submit();// 表单提交 | ||
| 44 | + }); | ||
| 45 | + // 表单验证 | ||
| 46 | + form.validate({ | ||
| 47 | + errorElement : 'span', | ||
| 48 | + errorClass : 'help-block help-block-error', | ||
| 49 | + focusInvalid : false, | ||
| 50 | + rules : { | ||
| 51 | + 'lpName': { isTrue : true} | ||
| 52 | + }, | ||
| 53 | + submitHandler : function(f) { | ||
| 54 | + // 1、 获取表单内容,并序列化 | ||
| 55 | + var params = form.serializeJSON(); | ||
| 56 | + // 关闭弹出层. | ||
| 57 | + layer.closeAll(); | ||
| 58 | + var _keyIndex = echartsDrawGTT.get_keyIndex(); | ||
| 59 | + var historyData = echartsDrawGTT.getHistoryData(); | ||
| 60 | + var data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 61 | + lpData.splice(0,0,params.lpName); | ||
| 62 | + lpDataCount[lpData[0]] = [0,0,lpCount]; | ||
| 63 | + echartsDrawGTT.setLpDataCount(lpDataCount); | ||
| 64 | + echartsDrawGTT.init(data,false,true,lpData); | ||
| 65 | + echartsDrawGTT.refreshDrag(); | ||
| 66 | + $('#addlp_mobal').modal('hide'); | ||
| 67 | + layer.msg('添加路牌【'+ params.lpName +'】成功!'); | ||
| 68 | + } | ||
| 69 | + }); | ||
| 70 | + $.validator.addMethod("isTrue", function(value,element) { | ||
| 71 | + var tel = false; | ||
| 72 | + var lpName = value.split("_"); | ||
| 73 | + if(lpName[lpName.length-1] == lpCount){ | ||
| 74 | + tel = true; | ||
| 75 | + return tel; | ||
| 76 | + } | ||
| 77 | + return tel; | ||
| 78 | + },'路牌名字必须以:_'+lpCount+' 结尾'); | ||
| 79 | +}); | ||
| 80 | +</script> | ||
| 0 | \ No newline at end of file | 81 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/fragments/bcadjust.html
0 → 100644
| 1 | +<!-- 路牌班次调整 --> | ||
| 2 | +<div class="modal fade" id="bcadjust_mobal" tabindex="-1" role="basic" aria-hidden="true" style="top:30%"> | ||
| 3 | + <div class="modal-dialog"> | ||
| 4 | + <div class="modal-content"> | ||
| 5 | + <div class="modal-header"> | ||
| 6 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | ||
| 7 | + <h4 class="modal-title">班次调整</h4> | ||
| 8 | + </div> | ||
| 9 | + <div class="modal-body"> | ||
| 10 | + <form class="form-horizontal" action="/" method="post" id="bcadjustForm" role="form"> | ||
| 11 | + <!-- alert-danger 组件START --> | ||
| 12 | + <div class="alert alert-danger display-hide" id="bcadjustAlert"> | ||
| 13 | + <button class="close" data-close="alert"></button> | ||
| 14 | + 请选择路牌 | ||
| 15 | + </div> | ||
| 16 | + <!-- 路牌名字 --> | ||
| 17 | + <div class="form-body"> | ||
| 18 | + <div class="form-group"> | ||
| 19 | + <label class="control-label col-md-4"> | ||
| 20 | + <span class="required"> * </span>选择目标路牌 : | ||
| 21 | + </label> | ||
| 22 | + <div class="col-md-6"> | ||
| 23 | + <select type="text" name="lpName" class="form-control" id="lpNameSelect" style="width:100%"></select> | ||
| 24 | + </div> | ||
| 25 | + </div> | ||
| 26 | + </div> | ||
| 27 | + </form> | ||
| 28 | + </div> | ||
| 29 | + <div class="modal-footer"> | ||
| 30 | + <button type="button" class="btn default" data-dismiss="modal">取消</button> | ||
| 31 | + <button type="button" class="btn btn-primary" id="bcadjustnext">确定</button> | ||
| 32 | + </div> | ||
| 33 | + </div> | ||
| 34 | + </div> | ||
| 35 | +</div> | ||
| 36 | +<script type="text/javascript"> | ||
| 37 | +$('#bcadjust_mobal').on('bcadjustMobal.show', function(e,lpData,echartsDrawGTT){ | ||
| 38 | + setTimeout(function(){ | ||
| 39 | + // 加载延迟200毫秒显示mobal | ||
| 40 | + $('#bcadjust_mobal').modal({show : true,backdrop: 'static', keyboard: false}); | ||
| 41 | + },200); | ||
| 42 | + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。 | ||
| 43 | + $('#bcadjust_mobal').on('show.bs.modal', function () { | ||
| 44 | + var len_ = lpData.length,paramsD = new Array(); | ||
| 45 | + if(len_>0) { | ||
| 46 | + var options = '<option value="">-- 请选择路牌 --</option>'; | ||
| 47 | + for(var i=lpData.length-1, len=lpData.length; i>=0; i--) { | ||
| 48 | + if( lpData[i] != null) { | ||
| 49 | + options += '<option value="'+lpData[i]+'">'+lpData[i]+'</option>'; | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + $('#lpNameSelect').html(options); | ||
| 53 | + } | ||
| 54 | + }); | ||
| 55 | + // 获取表单元素 | ||
| 56 | + var form = $('#bcadjustForm'); | ||
| 57 | + // 错误提示元素 | ||
| 58 | + var bcadjustAlert = $('#bcadjustAlert', form); | ||
| 59 | + // 下一步点击事件 | ||
| 60 | + $('#bcadjustnext').on('click', function() { | ||
| 61 | + form.submit();// 表单提交 | ||
| 62 | + }); | ||
| 63 | + // 表单验证 | ||
| 64 | + form.validate({ | ||
| 65 | + errorElement : 'span', | ||
| 66 | + errorClass : 'help-block help-block-error', | ||
| 67 | + focusInvalid : false, | ||
| 68 | + rules : { | ||
| 69 | + 'lpName': { isSelect : true} | ||
| 70 | + }, | ||
| 71 | + invalidHandler : function(event, validator) { | ||
| 72 | + bcadjustAlert.show(); | ||
| 73 | + App.scrollTo(bcadjustAlert, -200); | ||
| 74 | + }, | ||
| 75 | + highlight : function(element) { | ||
| 76 | + $(element).closest('.form-group').addClass('has-error'); | ||
| 77 | + }, | ||
| 78 | + unhighlight : function(element) { | ||
| 79 | + $(element).closest('.form-group').removeClass('has-error'); | ||
| 80 | + }, | ||
| 81 | + success : function(label) { | ||
| 82 | + label.closest('.form-group').removeClass('has-error'); | ||
| 83 | + }, | ||
| 84 | + submitHandler : function(f) { | ||
| 85 | + // 1、 获取表单内容,并序列化 | ||
| 86 | + var params = form.serializeJSON(); | ||
| 87 | + echartsDrawGTT.refreshBC(params.lpName); | ||
| 88 | + var _keyIndex = echartsDrawGTT.get_keyIndex(); | ||
| 89 | + var historyData = echartsDrawGTT.getHistoryData(); | ||
| 90 | + var data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 91 | + var bcList = []; | ||
| 92 | + for(var i=0, len=data.length; i<len; i++ ){ | ||
| 93 | + if(data[i] && data[i].value[0] != params.lpName){ | ||
| 94 | + bcList.push({'id':i, 'text':data[i].value[0]+' fcno:'+data[i].value[7]}); | ||
| 95 | + } | ||
| 96 | + } | ||
| 97 | + $('.bc-adjust-list #bcAdjustName').val(params.lpName); | ||
| 98 | + $('#bcAdjustList').empty(); | ||
| 99 | + $('#bcAdjustList').select2({ | ||
| 100 | + placeholder : '输入路牌或fcno', | ||
| 101 | + tags : true, | ||
| 102 | + multiple : true, | ||
| 103 | + height: '40px', | ||
| 104 | + // maximumSelectionLength : 30, | ||
| 105 | + allowClear : true, | ||
| 106 | + language: "zh-CN", | ||
| 107 | + data : bcList | ||
| 108 | + }); | ||
| 109 | + $('#bcadjust_mobal').modal('hide'); | ||
| 110 | + $('.bc-adjust-list').removeClass('hidden'); | ||
| 111 | + layer.open({title:'操作提示', | ||
| 112 | + content:'进入班次调整,可单击班次,或者在出现的选着框中选择,提交会将班次拉到目标路牌!'}); | ||
| 113 | + } | ||
| 114 | + }); | ||
| 115 | + $.validator.addMethod("isSelect", function(value,element) { | ||
| 116 | + var tel = false; | ||
| 117 | + var lpName = $('#lpNameSelect').val(); | ||
| 118 | + if(lpName != '请选择...'){ | ||
| 119 | + tel = true; | ||
| 120 | + return tel; | ||
| 121 | + } | ||
| 122 | + return tel; | ||
| 123 | + },''); | ||
| 124 | +}); | ||
| 125 | +</script> | ||
| 0 | \ No newline at end of file | 126 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/fragments/deletelp.html
0 → 100644
| 1 | +<!-- 删除路牌名称 --> | ||
| 2 | +<div class="modal fade" id="deletelp_mobal" tabindex="-1" role="basic" aria-hidden="true" style="top:30%"> | ||
| 3 | + <div class="modal-dialog"> | ||
| 4 | + <div class="modal-content"> | ||
| 5 | + <div class="modal-header"> | ||
| 6 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | ||
| 7 | + <h4 class="modal-title">删除路牌</h4> | ||
| 8 | + </div> | ||
| 9 | + <div class="modal-body"> | ||
| 10 | + <form class="form-horizontal" action="/" method="post" id="deletelpForm" role="form"> | ||
| 11 | + <!-- alert-danger 组件START --> | ||
| 12 | + <div class="alert alert-danger display-hide" id="deletelpAlert"> | ||
| 13 | + <button class="close" data-close="alert"></button> | ||
| 14 | + 请选择路牌 | ||
| 15 | + </div> | ||
| 16 | + <!-- 路牌名字 --> | ||
| 17 | + <div class="form-body"> | ||
| 18 | + <div class="form-group"> | ||
| 19 | + <label class="control-label col-md-3"> | ||
| 20 | + <span class="required"> * </span>选择路牌 : | ||
| 21 | + </label> | ||
| 22 | + <div class="col-md-6"> | ||
| 23 | + <select type="text" name="lpName" class="form-control" id="lpNameSelect" style="width:100%"></select> | ||
| 24 | + </div> | ||
| 25 | + </div> | ||
| 26 | + </div> | ||
| 27 | + </form> | ||
| 28 | + </div> | ||
| 29 | + <div class="modal-footer"> | ||
| 30 | + <button type="button" class="btn default" data-dismiss="modal">取消</button> | ||
| 31 | + <button type="button" class="btn btn-primary" id="deletelpnext">确定</button> | ||
| 32 | + </div> | ||
| 33 | + </div> | ||
| 34 | + </div> | ||
| 35 | +</div> | ||
| 36 | +<script type="text/javascript"> | ||
| 37 | +$('#deletelp_mobal').on('deletelpMobal.show', function(e,lpData,echartsDrawGTT){ | ||
| 38 | + setTimeout(function(){ | ||
| 39 | + // 加载延迟200毫秒显示mobal | ||
| 40 | + $('#deletelp_mobal').modal({show : true,backdrop: 'static', keyboard: false}); | ||
| 41 | + },200); | ||
| 42 | + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。 | ||
| 43 | + $('#deletelp_mobal').on('show.bs.modal', function () { | ||
| 44 | + var len_ = lpData.length,paramsD = new Array(); | ||
| 45 | + if(len_>0) { | ||
| 46 | + var options = '<option value="">-- 请选择路牌 --</option>'; | ||
| 47 | + for(var i=lpData.length-1, len=lpData.length; i>=0; i--) { | ||
| 48 | + if( lpData[i] != null) { | ||
| 49 | + options += '<option value="'+lpData[i]+'">'+lpData[i]+'</option>'; | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + $('#lpNameSelect').html(options); | ||
| 53 | + } | ||
| 54 | + }); | ||
| 55 | + // 获取表单元素 | ||
| 56 | + var form = $('#deletelpForm'); | ||
| 57 | + // 错误提示元素 | ||
| 58 | + var deletelpAlert = $('#deletelpAlert', form); | ||
| 59 | + // 下一步点击事件 | ||
| 60 | + $('#deletelpnext').on('click', function() { | ||
| 61 | + form.submit();// 表单提交 | ||
| 62 | + }); | ||
| 63 | + // 表单验证 | ||
| 64 | + form.validate({ | ||
| 65 | + errorElement : 'span', | ||
| 66 | + errorClass : 'help-block help-block-error', | ||
| 67 | + focusInvalid : false, | ||
| 68 | + rules : { | ||
| 69 | + 'lpName': { isSelect : true} | ||
| 70 | + }, | ||
| 71 | + invalidHandler : function(event, validator) { | ||
| 72 | + deletelpAlert.show(); | ||
| 73 | + App.scrollTo(deletelpAlert, -200); | ||
| 74 | + }, | ||
| 75 | + highlight : function(element) { | ||
| 76 | + $(element).closest('.form-group').addClass('has-error'); | ||
| 77 | + }, | ||
| 78 | + unhighlight : function(element) { | ||
| 79 | + $(element).closest('.form-group').removeClass('has-error'); | ||
| 80 | + }, | ||
| 81 | + success : function(label) { | ||
| 82 | + label.closest('.form-group').removeClass('has-error'); | ||
| 83 | + }, | ||
| 84 | + submitHandler : function(f) { | ||
| 85 | + // 1、 获取表单内容,并序列化 | ||
| 86 | + var params = form.serializeJSON(); | ||
| 87 | + layer.confirm('您确定要删除路牌【'+ params.lpName +'】以及路牌上的班次吗?'+ | ||
| 88 | + '</br>【注意】:如需要撤销当前操作,您可以在系统工具下拉选择点击【撤销按钮】进行恢复.', { | ||
| 89 | + btn : [ '确认提示并提交', '取消' ] | ||
| 90 | + }, function() { | ||
| 91 | + // 关闭弹出层. | ||
| 92 | + layer.closeAll(); | ||
| 93 | + var _keyIndex = echartsDrawGTT.get_keyIndex(); | ||
| 94 | + var historyData = echartsDrawGTT.getHistoryData(); | ||
| 95 | + var data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 96 | + for(var i=0, len=data.length; i<len; i++ ){ | ||
| 97 | + if(data[i] && data[i].value[0] == params.lpName){ | ||
| 98 | + data.splice(i,1); | ||
| 99 | + i--; | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + $.each(lpData, function (index, lp) { | ||
| 103 | + if(lp == params.lpName) | ||
| 104 | + lpData.splice(index,1); | ||
| 105 | + }); | ||
| 106 | + echartsDrawGTT.setLpData(lpData); | ||
| 107 | + echartsDrawGTT.init(data,false,true); | ||
| 108 | + echartsDrawGTT.refreshDrag(); | ||
| 109 | + $('#deletelp_mobal').modal('hide'); | ||
| 110 | + layer.msg('删除路牌【'+ params.lpName +'】成功!'); | ||
| 111 | + }); | ||
| 112 | + } | ||
| 113 | + }); | ||
| 114 | + $.validator.addMethod("isSelect", function(value,element) { | ||
| 115 | + var tel = false; | ||
| 116 | + var lpName = $('#lpNameSelect').val(); | ||
| 117 | + if(lpName != '请选择...'){ | ||
| 118 | + tel = true; | ||
| 119 | + return tel; | ||
| 120 | + } | ||
| 121 | + return tel; | ||
| 122 | + },''); | ||
| 123 | +}); | ||
| 124 | +</script> | ||
| 0 | \ No newline at end of file | 125 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/fragments/editbc.html
0 → 100644
| 1 | +<!-- 修改班次参数 --> | ||
| 2 | +<div class="modal fade" id="editBc_mobal" tabindex="-1" role="basic" aria-hidden="true"> | ||
| 3 | + <div class="modal-dialog"> | ||
| 4 | + <div class="modal-content" style="width: 900px;"> | ||
| 5 | + <div class="modal-header"> | ||
| 6 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | ||
| 7 | + <h4 class="modal-title">修改班次参数</h4> | ||
| 8 | + </div> | ||
| 9 | + <div class="modal-body"> | ||
| 10 | + <form class="form-horizontal" action="/" method="post" id="editBc" role="form"> | ||
| 11 | + <!-- alert-danger 组件START --> | ||
| 12 | + <div class="alert alert-danger display-hide" id="editBcName"> | ||
| 13 | + <button class="close" data-close="alert"></button> | ||
| 14 | + 您的输入有误,请检查下面的输入项 | ||
| 15 | + </div> | ||
| 16 | + <input id="qdzInput" class="hidden" /> | ||
| 17 | + <input id="zdzInput" class="hidden" /> | ||
| 18 | + | ||
| 19 | + <!-- 表单分组组件 form-group START --> | ||
| 20 | + <div class="form-group"> | ||
| 21 | + <!-- 路牌 (* 必填项) START --> | ||
| 22 | + <div class="col-md-6"> | ||
| 23 | + <label class="control-label col-md-6"> | ||
| 24 | + <span class="required"> * </span>所属路牌 : | ||
| 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 | \ No newline at end of file | 217 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/fragments/editlp.html
0 → 100644
| 1 | +<!-- 修改路牌名称 --> | ||
| 2 | +<div class="modal fade" id="editlp_mobal" tabindex="-1" role="basic" aria-hidden="true"> | ||
| 3 | + <div class="modal-dialog"> | ||
| 4 | + <div class="modal-content"> | ||
| 5 | + <div class="modal-header"> | ||
| 6 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | ||
| 7 | + <h4 class="modal-title">修改路牌名称</h4> | ||
| 8 | + </div> | ||
| 9 | + <div class="modal-body"> | ||
| 10 | + <form class="form-horizontal" action="/" method="post" id="editlpForm" role="form"> | ||
| 11 | + <!-- alert-danger 组件START --> | ||
| 12 | + <div class="alert alert-danger display-hide" id="editlpAlert"> | ||
| 13 | + <button class="close" data-close="alert"></button> | ||
| 14 | + 您的输入有误,请检查下面的输入项 | ||
| 15 | + </div> | ||
| 16 | + <div class="portlet-body"> | ||
| 17 | + <div class="table-container" style="margin-top: 10px"> | ||
| 18 | + <table class="table table-striped table-bordered table-hover table-checkable" id="datatable_bctz"> | ||
| 19 | + <thead> | ||
| 20 | + <tr role="row" class="heading"> | ||
| 21 | + <th width="50%">当前路牌名称</th> | ||
| 22 | + <th width="50%" style="text-align: center;max-width: 50px;min-width: 40px;padding-left: 0;padding-right: 0;">修改路牌名称</th> | ||
| 23 | + </tr> | ||
| 24 | + </thead> | ||
| 25 | + <tbody></tbody> | ||
| 26 | + </table> | ||
| 27 | + </div> | ||
| 28 | + </div> | ||
| 29 | + </form> | ||
| 30 | + </div> | ||
| 31 | + <div class="modal-footer"> | ||
| 32 | + <button type="button" class="btn default" data-dismiss="modal">取消</button> | ||
| 33 | + <button type="button" class="btn btn-primary" id="editlpnext">确定</button> | ||
| 34 | + </div> | ||
| 35 | + </div> | ||
| 36 | + </div> | ||
| 37 | +</div> | ||
| 38 | +<script type="text/html" id="editlp_temp"> | ||
| 39 | +{{each list as obj i }} | ||
| 40 | + <tr role="row" class="filter"> | ||
| 41 | + <td> | ||
| 42 | + <input type="text" readonly class="form-control form-filter input-sm" name="lpname_{{i+1}}" value="{{obj.lpName}}"> | ||
| 43 | + </td> | ||
| 44 | + <td> | ||
| 45 | + <input type="text" class="form-control form-filter input-sm" name="{{i+1}}" value="{{obj.lpName}}" required> | ||
| 46 | + </td> | ||
| 47 | + </tr> | ||
| 48 | +{{/each}} | ||
| 49 | +{{if list.length == 0}} | ||
| 50 | + <tr> | ||
| 51 | + <td colspan=3><h6 class="muted">没有找到相关数据</h6></td> | ||
| 52 | + </tr> | ||
| 53 | + {{/if}} | ||
| 54 | +</script> | ||
| 55 | +<script type="text/javascript"> | ||
| 56 | +$('#editlp_mobal').on('editlpMobal.show', function(e,obj,bf){ | ||
| 57 | + var lpArray = obj.configuration.taskTypes; | ||
| 58 | + setTimeout(function(){ | ||
| 59 | + // 加载延迟200毫秒显示mobal | ||
| 60 | + $('#editlp_mobal').modal({show : true,backdrop: 'static', keyboard: false}); | ||
| 61 | + },200); | ||
| 62 | + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。 | ||
| 63 | + $('#editlp_mobal').on('show.bs.modal', function () { | ||
| 64 | + // 把数据填充到模版中 | ||
| 65 | + var tbodyHtml = template('editlp_temp',{list:lpArray}); | ||
| 66 | + // 把渲染好的模版html文本追加到表格中 | ||
| 67 | + $('#datatable_bctz tbody').html(tbodyHtml); | ||
| 68 | + }); | ||
| 69 | + // 获取表单元素 | ||
| 70 | + var form = $('#editlpForm'); | ||
| 71 | + // 错误提示元素 | ||
| 72 | + var editlpAlert = $('#editlpAlert', form); | ||
| 73 | + // 下一步点击事件 | ||
| 74 | + $('#editlpnext').on('click', function() { | ||
| 75 | + form.submit();// 表单提交 | ||
| 76 | + }); | ||
| 77 | + // 表单验证 | ||
| 78 | + form.validate({ | ||
| 79 | + errorElement : 'span', | ||
| 80 | + errorClass : 'help-block help-block-error', | ||
| 81 | + focusInvalid : false, | ||
| 82 | + rules : { | ||
| 83 | + }, | ||
| 84 | + invalidHandler : function(event, validator) { | ||
| 85 | + editlpAlert.show(); | ||
| 86 | + App.scrollTo(editlpAlert, -200); | ||
| 87 | + }, | ||
| 88 | + highlight : function(element) { | ||
| 89 | + $(element).closest('.form-group').addClass('has-error'); | ||
| 90 | + }, | ||
| 91 | + unhighlight : function(element) { | ||
| 92 | + $(element).closest('.form-group').removeClass('has-error'); | ||
| 93 | + }, | ||
| 94 | + success : function(label) { | ||
| 95 | + label.closest('.form-group').removeClass('has-error'); | ||
| 96 | + }, | ||
| 97 | + submitHandler : function(f) { | ||
| 98 | + // 1、 获取表单内容,并序列化 | ||
| 99 | + var params = form.serializeJSON(); | ||
| 100 | + var data = obj.getDataArray(); | ||
| 101 | + // 2、 调整路牌对应的班次总数 | ||
| 102 | + updFormParams(params,data); | ||
| 103 | + // 删除图形. | ||
| 104 | + $('svg.svg-chart').remove(); | ||
| 105 | + // 重新创建图形. | ||
| 106 | + var graph_ = d3.select('#ganttSvg').relationshipGraph(obj.configuration); | ||
| 107 | + // 根据数据重新渲染图形. | ||
| 108 | + obj.data(data); | ||
| 109 | + // 记录早操.并保存历史班次数据 | ||
| 110 | + obj.addHistory(); | ||
| 111 | + // 隐藏错误提示 | ||
| 112 | + editlpAlert.hide(); | ||
| 113 | + // 隐藏 reladplus_mobal 弹出层 | ||
| 114 | + $('#editlp_mobal').modal('hide'); | ||
| 115 | + layer.msg('修改路牌名称成功!'); | ||
| 116 | + } | ||
| 117 | + }); | ||
| 118 | + function updFormParams(p,data) { | ||
| 119 | + for(var i= 0;i<lpArray.length;i++) { | ||
| 120 | + if(p[i+1] != undefined) { | ||
| 121 | + if(lpArray[i].lpName != p[i+1]) { | ||
| 122 | + for(var d = 0 ; d< data.length;d++) { | ||
| 123 | + if(data[d].lpName == lpArray[i].lpName) { | ||
| 124 | + data[d].lpName = p[i+1]; | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + } | ||
| 128 | + lpArray[i].lpName = p[i+1]; | ||
| 129 | + obj.configuration.lpNameA[i] = p[i+1]; | ||
| 130 | + } | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | +}); | ||
| 135 | +</script> | ||
| 0 | \ No newline at end of file | 136 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/gantt.html
| @@ -39,6 +39,14 @@ | @@ -39,6 +39,14 @@ | ||
| 39 | <div class="tools" style="margin-left: 20px;margin-top: -10px;"> | 39 | <div class="tools" style="margin-left: 20px;margin-top: -10px;"> |
| 40 | <a href="" class="fullscreen" data-original-title="" title="" style="text-decoration: none;"> </a> | 40 | <a href="" class="fullscreen" data-original-title="" title="" style="text-decoration: none;"> </a> |
| 41 | </div> | 41 | </div> |
| 42 | + | ||
| 43 | + <!-- 班次调整输入框 --> | ||
| 44 | + <div class="bc-adjust-list hidden"> | ||
| 45 | + <input type="hidden" id="bcAdjustName" /> | ||
| 46 | + <select class="js-example-placeholder-multiple js-states form-control bc-adjust-list-input" multiple="multiple" id="bcAdjustList"></select> | ||
| 47 | + <a class="btn" href="javascript:;" data-pjax style="background:#c2c8d2;color: #fff;position: absolute; top: 4px; right: 55px;" id="bcAdjustListCancel"> 取消</a> | ||
| 48 | + <a class="btn blue" href="javascript:;" data-pjax style="position: absolute; top: 4px; right: 1px;" id="bcAdjustListSubmit"> 提交</a> | ||
| 49 | + </div> | ||
| 42 | <!-- actions 组件START --> | 50 | <!-- actions 组件START --> |
| 43 | <div class="actions"> | 51 | <div class="actions"> |
| 44 | <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> | 52 | <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> |
| @@ -92,33 +100,38 @@ | @@ -92,33 +100,38 @@ | ||
| 92 | <i class="fa fa-share"></i> 恢 复 | 100 | <i class="fa fa-share"></i> 恢 复 |
| 93 | </a> | 101 | </a> |
| 94 | </li> | 102 | </li> |
| 95 | - <li> | 103 | + <!--<li> |
| 96 | <a href="javascript:" class="tool-action reladelete"> | 104 | <a href="javascript:" class="tool-action reladelete"> |
| 97 | <i class="fa fa-close"></i> 批量删除 | 105 | <i class="fa fa-close"></i> 批量删除 |
| 98 | </a> | 106 | </a> |
| 99 | - </li> | 107 | + </li>--> |
| 100 | <li> | 108 | <li> |
| 101 | - <a href="javascript:" class="tool-action reladplus"> | 109 | + <a href="javascript:" class="tool-action addBc"> |
| 102 | <i class="fa fa-plus"></i> 添加班次 | 110 | <i class="fa fa-plus"></i> 添加班次 |
| 103 | </a> | 111 | </a> |
| 104 | </li> | 112 | </li> |
| 105 | <li> | 113 | <li> |
| 106 | - <a href="javascript:" class="tool-action editlp"> | ||
| 107 | - <i class="fa fa-pencil"></i> 修改路牌 | 114 | + <a href="javascript:" class="tool-action addLp"> |
| 115 | + <i class="fa fa-plus"></i> 添加路牌 | ||
| 108 | </a> | 116 | </a> |
| 109 | </li> | 117 | </li> |
| 118 | + <!--<li> | ||
| 119 | + <a href="javascript:" class="tool-action editLp"> | ||
| 120 | + <i class="fa fa-pencil"></i> 修改路牌 | ||
| 121 | + </a> | ||
| 122 | + </li>--> | ||
| 110 | <li> | 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 | </a> | 126 | </a> |
| 114 | </li> | 127 | </li> |
| 115 | <li> | 128 | <li> |
| 116 | - <a href="javascript:" class="tool-action updownread"> | 129 | + <a href="javascript:" class="tool-action upDownRead"> |
| 117 | <i class="fa fa-arrows-h"></i> 均匀发车 | 130 | <i class="fa fa-arrows-h"></i> 均匀发车 |
| 118 | </a> | 131 | </a> |
| 119 | </li> | 132 | </li> |
| 120 | <li> | 133 | <li> |
| 121 | - <a href="javascript:" class="tool-action aboutread"> | 134 | + <a href="javascript:" class="tool-action bcAdjust"> |
| 122 | <i class="fa fa-arrows-v"></i> 班次调整 | 135 | <i class="fa fa-arrows-v"></i> 班次调整 |
| 123 | </a> | 136 | </a> |
| 124 | </li> | 137 | </li> |
| @@ -132,9 +145,13 @@ | @@ -132,9 +145,13 @@ | ||
| 132 | <!-- portlet-body组件START --> | 145 | <!-- portlet-body组件START --> |
| 133 | <div class="portlet-body" id="scrllmouseEvent"> | 146 | <div class="portlet-body" id="scrllmouseEvent"> |
| 134 | <!-- ganttSvgContainer SVG组件START --> | 147 | <!-- ganttSvgContainer SVG组件START --> |
| 135 | - <div class="ganttSvgContainer"> | 148 | + <!--<div class="ganttSvgContainer"> |
| 136 | <div id="ganttSvg"></div> | 149 | <div id="ganttSvg"></div> |
| 137 | - </div> | 150 | + </div>--> |
| 151 | + <div class="gtt"> | ||
| 152 | + <div id="upDownContainer"></div> | ||
| 153 | + <div id="bcContainer"></div> | ||
| 154 | + </div> | ||
| 138 | <!-- ganttSvgContainer SVG组件END --> | 155 | <!-- ganttSvgContainer SVG组件END --> |
| 139 | </div> | 156 | </div> |
| 140 | <!-- portlet-body组件END --> | 157 | <!-- portlet-body组件END --> |
| @@ -146,7 +163,13 @@ | @@ -146,7 +163,13 @@ | ||
| 146 | <!-- row 组件END --> | 163 | <!-- row 组件END --> |
| 147 | <script src="/pages/base/timesmodel/js/raty/lib/jquery.raty.js"></script> | 164 | <script src="/pages/base/timesmodel/js/raty/lib/jquery.raty.js"></script> |
| 148 | <script src="/pages/base/timesmodel/js/ContextJS/js/context.js"></script> | 165 | <script src="/pages/base/timesmodel/js/ContextJS/js/context.js"></script> |
| 166 | +<script src="/pages/base/timesmodel/js/dateTimeTool.js"></script> | ||
| 149 | <script src="/pages/base/timesmodel/js/base-fun.js"></script> | 167 | <script src="/pages/base/timesmodel/js/base-fun.js"></script> |
| 168 | +<script src="/pages/base/timesmodel/js/v1/bcFun.js"></script> | ||
| 169 | +<script src="/pages/base/timesmodel/js/v1/lpFun.js"></script> | ||
| 170 | +<script src="/pages/base/timesmodel/js/v1/scheduleInitialize.js"></script> | ||
| 171 | +<script src="/pages/base/timesmodel/js/v1/AdjustTrip.js"></script> | ||
| 172 | +<script src="/pages/base/timesmodel/js/v1/AdjustTrip2.js"></script> | ||
| 150 | <script src="/pages/base/timesmodel/js/v2/ParameterObj.js"></script> | 173 | <script src="/pages/base/timesmodel/js/v2/ParameterObj.js"></script> |
| 151 | <script src="/pages/base/timesmodel/js/v2/core/InternalBcObj.js"></script> | 174 | <script src="/pages/base/timesmodel/js/v2/core/InternalBcObj.js"></script> |
| 152 | <script src="/pages/base/timesmodel/js/v2/core/InternalGroupObj.js"></script> | 175 | <script src="/pages/base/timesmodel/js/v2/core/InternalGroupObj.js"></script> |
| @@ -160,4 +183,24 @@ | @@ -160,4 +183,24 @@ | ||
| 160 | <script src="/pages/base/timesmodel/js/v2/main_v2.js"></script> | 183 | <script src="/pages/base/timesmodel/js/v2/main_v2.js"></script> |
| 161 | <script src="/pages/base/timesmodel/js/d3.relationshipgraph.js"></script> | 184 | <script src="/pages/base/timesmodel/js/d3.relationshipgraph.js"></script> |
| 162 | <script src="/pages/base/timesmodel/js/errorinfo.js"></script> | 185 | <script src="/pages/base/timesmodel/js/errorinfo.js"></script> |
| 163 | -<script src="/pages/base/timesmodel/js/gantt.js"></script> | ||
| 164 | \ No newline at end of file | 186 | \ No newline at end of file |
| 187 | +<script src="/pages/base/timesmodel/js/parameters.js"></script> | ||
| 188 | +<script src="/pages/base/timesmodel/js/systemTools.js"></script> | ||
| 189 | +<script src="/pages/base/timesmodel/js/echartsDrawGanTT.js"></script> | ||
| 190 | +<script src="/pages/base/timesmodel/js/gantt.js"></script> | ||
| 191 | + | ||
| 192 | +<script id="rightClick_dropdown_menu" type="text/html"> | ||
| 193 | + <ul class="dropdown-menu dropdown-context" id="dropdown_menu" | ||
| 194 | + style="{{style}}"> | ||
| 195 | + <input type="hidden" value="{{dataIndex}}" name="dataIndex" id="dataIndex"> | ||
| 196 | + <li><a href="javascript:dropdownMenuUpdate('{{dataIndex}}');" id="update">修改</a></li> | ||
| 197 | + <li><a href="javascript:dropdownMenuDelete('{{dataIndex}}');" id="delete" >删除</a></li> | ||
| 198 | + <li><a href="javascript:dropdownMenuSwitchUpDown('{{dataIndex}}');" id="switchUpDown">班次切换上下行</a></li> | ||
| 199 | + <li><a href="javascript:dropdownMenuLpSwitchUpDown('{{dataIndex}}');" id="lpSwitchUpDown">路牌切换上下行</a></li> | ||
| 200 | + <li><a href="javascript:dropdownMenuSetNormal('{{dataIndex}}');" id="setNormal">设为正常</a></li> | ||
| 201 | + <li><a href="javascript:dropdownMenuSetRegion('{{dataIndex}}');" id="setRegion">设为区间</a></li> | ||
| 202 | + <li><a href="javascript:dropdownMenuSetFb('{{dataIndex}}');" id="setFb">设为分班</a></li> | ||
| 203 | + <li><a href="javascript:dropdownMenuSetNoFb('{{dataIndex}}');" id="SetNoFb">取消分班</a></li> | ||
| 204 | + <li><a href="javascript:dropdownMenuSetVenting('{{dataIndex}}');" id="setVenting">设为直放</a></li> | ||
| 205 | + <li><a href="javascript:dropdownMenuSetMajor('{{dataIndex}}');" id="setMajor">设为放站</a></li> | ||
| 206 | + </ul> | ||
| 207 | +</script> | ||
| 165 | \ No newline at end of file | 208 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
| @@ -845,7 +845,7 @@ var SKBFormWizard = function() { | @@ -845,7 +845,7 @@ var SKBFormWizard = function() { | ||
| 845 | $(this).html(payment.join("<br>")); | 845 | $(this).html(payment.join("<br>")); |
| 846 | } | 846 | } |
| 847 | }); | 847 | }); |
| 848 | - } | 848 | + }; |
| 849 | 849 | ||
| 850 | /** 按钮点击时触发 */ | 850 | /** 按钮点击时触发 */ |
| 851 | var handleTitle = function(tab, navigation, index) { | 851 | var handleTitle = function(tab, navigation, index) { |
| @@ -874,7 +874,7 @@ var SKBFormWizard = function() { | @@ -874,7 +874,7 @@ var SKBFormWizard = function() { | ||
| 874 | $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮 | 874 | $('#submit_argus_form').find('.button-submit').hide();// 隐藏提交按钮 |
| 875 | } | 875 | } |
| 876 | App.scrollTo($('.page-title'));// 移动到指定位置 | 876 | App.scrollTo($('.page-title'));// 移动到指定位置 |
| 877 | - } | 877 | + }; |
| 878 | 878 | ||
| 879 | // 表单导航向导插件 | 879 | // 表单导航向导插件 |
| 880 | $('#submit_argus_form').bootstrapWizard({ | 880 | $('#submit_argus_form').bootstrapWizard({ |
| @@ -915,6 +915,8 @@ var SKBFormWizard = function() { | @@ -915,6 +915,8 @@ var SKBFormWizard = function() { | ||
| 915 | 915 | ||
| 916 | if (baseRes == 0) { // 客流大数据分析 | 916 | if (baseRes == 0) { // 客流大数据分析 |
| 917 | $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); | 917 | $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); |
| 918 | + // 停站类型选择控件 | ||
| 919 | + ComponentsBootstrapTagsinput.init_stoptype(); | ||
| 918 | // 日期控件 | 920 | // 日期控件 |
| 919 | $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 | 921 | $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 |
| 920 | $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 | 922 | $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 |
| @@ -944,6 +946,8 @@ var SKBFormWizard = function() { | @@ -944,6 +946,8 @@ var SKBFormWizard = function() { | ||
| 944 | } else if (baseRes == 1) { // 班次/人次/车辆 | 946 | } else if (baseRes == 1) { // 班次/人次/车辆 |
| 945 | $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); | 947 | $('#linePlayTypeSelect').val(r.content[0].line.linePlayType); |
| 946 | ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag. | 948 | ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag. |
| 949 | + // 停站类型选择控件 | ||
| 950 | + ComponentsBootstrapTagsinput.init_stoptype(); | ||
| 947 | // 日期控件 | 951 | // 日期控件 |
| 948 | $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 | 952 | $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间 |
| 949 | $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 | 953 | $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间 |
src/main/resources/static/pages/base/timesmodel/js/dateTimeTool.js
0 → 100644
| 1 | +/** 时间工具类*/ | ||
| 2 | +var DateTimeTool = function () { | ||
| 3 | + // 数字格式转化为时间格式 | ||
| 4 | + var calculateHours = function (time) { | ||
| 5 | + if(!time) | ||
| 6 | + return; | ||
| 7 | + var h,m; | ||
| 8 | + h = Math.floor(time); | ||
| 9 | + m = Math.round((time % 1) * 60); | ||
| 10 | + return h+':'+m; | ||
| 11 | + }; | ||
| 12 | + /** | ||
| 13 | + * @discription : (TODO) 字符串转时间对象 | ||
| 14 | + * | ||
| 15 | + * @params : 具有一定格式的时间字符串 | ||
| 16 | + * | ||
| 17 | + * @return : 返回一个中国标准时间点 | ||
| 18 | + * | ||
| 19 | + **/ | ||
| 20 | + var getDateTime = function(time) { | ||
| 21 | + var dateTime = new Date(); | ||
| 22 | + if(time !=null && time !='' && typeof(time) !='undefined') { | ||
| 23 | + timeArr = time.split(':'); | ||
| 24 | + dateTime.setHours(parseInt(timeArr[0])); | ||
| 25 | + dateTime.setMinutes(parseInt(timeArr[1])); | ||
| 26 | + dateTime.setSeconds(0); | ||
| 27 | + // 在0-3点之间(包括0和3)的时间都默认为下一天的时间 | ||
| 28 | + if(parseInt(timeArr[0]) <= 3 && parseInt(timeArr[0]) >= 0) | ||
| 29 | + dateTime.setDate(dateTime.getDate() +1); | ||
| 30 | + } | ||
| 31 | + return dateTime; | ||
| 32 | + }; | ||
| 33 | + /** | ||
| 34 | + * @discription : (TODO) 获取时间格式[00:00] | ||
| 35 | + * | ||
| 36 | + * @params : [startTime--时间对象(任意时间对象:字符串、时间戳、时间对象)] | ||
| 37 | + * | ||
| 38 | + * @return : 返回字符串。这里返回的是一个时间格式的字符串[00:00] | ||
| 39 | + **/ | ||
| 40 | + var getHHmmStr = function(time) { | ||
| 41 | + var date = new Date(time); | ||
| 42 | + // == '00' ? '24' :(startTime.getHours()<10? '0' + startTime.getHours() : startTime.getHours())) | ||
| 43 | + return (date.getHours()<10? '0' + date.getHours() : date.getHours()) | ||
| 44 | + +':' | ||
| 45 | + +(date.getMinutes()<10? '0' + date.getMinutes() : date.getMinutes()); | ||
| 46 | + }; | ||
| 47 | + return{ | ||
| 48 | + calculateHours : calculateHours, | ||
| 49 | + getDateTime : getDateTime, | ||
| 50 | + getHHmmStr : getHHmmStr | ||
| 51 | + } | ||
| 52 | +}(); |
src/main/resources/static/pages/base/timesmodel/js/echartsDrawGanTT.js
0 → 100644
| 1 | +var echartsDrawGTT = function () { | ||
| 2 | + // 定义图层 | ||
| 3 | + var bcdom = document.getElementById("bcContainer"); | ||
| 4 | + var chart = echarts.init(bcdom); | ||
| 5 | + var upDowndom = document.getElementById("upDownContainer"); | ||
| 6 | + var upDownChart = echarts.init(upDowndom); | ||
| 7 | + // upDowndom.style.height = '200px'; | ||
| 8 | + var option,upDownOption,dataZoomStart = 0,dataZoomEnd = 80;//图层对象 | ||
| 9 | + var historyData = [],// 保存操作图形后的数据集合(撤销与恢复操作) | ||
| 10 | + _keyIndex = -1,// 记录当前操作步骤 (在撤销与恢复操作时) | ||
| 11 | + dataUp = [],// (上/下)行发车时刻表数据 | ||
| 12 | + dataDown = []; | ||
| 13 | + // y坐标 | ||
| 14 | + var lpData = []; //var lpData = ['连班_2','连班_1','连班_3']; | ||
| 15 | + var lpDataCount = [];// lpDataCount[路牌名字]=[工时,班次,路牌序号] | ||
| 16 | + // x坐标轴的范围 | ||
| 17 | + var time = DateTimeTool.getDateTime("03:00"); | ||
| 18 | + var xMax = Date.parse(time); | ||
| 19 | + time.setDate(time.getDate()-1); | ||
| 20 | + var xMin = Date.parse(time); | ||
| 21 | + // 上下行bc颜色 | ||
| 22 | + var types = {'relationshipGraph-up': '#ff2949','relationshipGraph-down': '#518fe3'}; | ||
| 23 | + // 班次数据源 | ||
| 24 | + var bcData = []; | ||
| 25 | + | ||
| 26 | + // 班次类型 | ||
| 27 | + // var bcType = [bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间] | ||
| 28 | + var bcType = new Map(); | ||
| 29 | + bcType['in'] = '到'; | ||
| 30 | + bcType['out'] = '离'; | ||
| 31 | + bcType['bd'] = '出'; | ||
| 32 | + bcType['lc'] = '进'; | ||
| 33 | + bcType["normal"] = '正'; | ||
| 34 | + bcType["cf"] = '吃'; | ||
| 35 | + bcType["major"] = '站'; | ||
| 36 | + bcType["venting"] = '直'; | ||
| 37 | + bcType["region"] = '区'; | ||
| 38 | + | ||
| 39 | + // 处理后班次数据 | ||
| 40 | + var data = []; | ||
| 41 | + // 单个班次高度 | ||
| 42 | + var height; | ||
| 43 | + // 坐标轴位置 | ||
| 44 | + var baseTop = 70; | ||
| 45 | + var gridHeight = 60; | ||
| 46 | + | ||
| 47 | + $("#bcContainer").bind("contextmenu", function(){ | ||
| 48 | + return false; | ||
| 49 | + }); | ||
| 50 | + | ||
| 51 | + var setLpData = function (data) { | ||
| 52 | + lpData = data; | ||
| 53 | + }; | ||
| 54 | + var getLpData = function () { | ||
| 55 | + return lpData; | ||
| 56 | + }; | ||
| 57 | + var setLpDataCount = function (data) { | ||
| 58 | + lpDataCount = data; | ||
| 59 | + }; | ||
| 60 | + var getLpDataCount = function () { | ||
| 61 | + return lpDataCount; | ||
| 62 | + }; | ||
| 63 | + var set_keyIndex = function (indxe) { | ||
| 64 | + _keyIndex = indxe; | ||
| 65 | + }; | ||
| 66 | + var get_keyIndex = function () { | ||
| 67 | + return _keyIndex; | ||
| 68 | + }; | ||
| 69 | + var getHistoryData = function () { | ||
| 70 | + return historyData; | ||
| 71 | + }; | ||
| 72 | + var setHistoryData = function (data) { | ||
| 73 | + historyData = data; | ||
| 74 | + }; | ||
| 75 | + | ||
| 76 | + // 初始化 newData:数据、isLast:是否第一次、isNewData:是否是新数据(撤销、恢复不是)、newLpData:新路牌 | ||
| 77 | + var init = function (newData,isLast,isNewData,newLpData) { | ||
| 78 | + if(isLast){ | ||
| 79 | + data = []; | ||
| 80 | + bcData = newData; | ||
| 81 | + echarts.util.each(bcData, function (bcObj, index) { | ||
| 82 | + var fcsj = Date.parse(DateTimeTool.getDateTime(bcObj.fcsj)), | ||
| 83 | + ARRIVALTIME = Date.parse(DateTimeTool.getDateTime(bcObj.ARRIVALTIME)), | ||
| 84 | + colorStr = bcObj.xlDir, | ||
| 85 | + xlDir; | ||
| 86 | + if(bcObj.xlDir == 'relationshipGraph-up') | ||
| 87 | + xlDir = 0; | ||
| 88 | + else if(bcObj.xlDir == 'relationshipGraph-down') | ||
| 89 | + xlDir = 1; | ||
| 90 | + else | ||
| 91 | + xlDir = -1; | ||
| 92 | + data.push({ | ||
| 93 | + value: [ | ||
| 94 | + bcObj.lpName,//纵坐标 | ||
| 95 | + fcsj,//开始时间 | ||
| 96 | + ARRIVALTIME,//结束时间 | ||
| 97 | + bcObj.bcsj*60000,//横坐标长度(持续时间) | ||
| 98 | + bcObj.lpNo, | ||
| 99 | + bcObj.lpType, | ||
| 100 | + bcObj.bcType, | ||
| 101 | + bcObj.fcno, | ||
| 102 | + xlDir, | ||
| 103 | + bcObj.jhlc, | ||
| 104 | + bcObj.tcc, | ||
| 105 | + bcObj.ttinfo, | ||
| 106 | + bcObj.xl, | ||
| 107 | + bcObj.qdz, | ||
| 108 | + bcObj.zdz, | ||
| 109 | + bcObj.STOPTIME, | ||
| 110 | + bcObj.isfb = 0 | ||
| 111 | + //bcObj.isSwitchXl, | ||
| 112 | + //bcObj.bz, | ||
| 113 | + ], | ||
| 114 | + itemStyle: { | ||
| 115 | + normal: { | ||
| 116 | + color: types[colorStr] | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + }); | ||
| 120 | + }); | ||
| 121 | + historyData.push(data); | ||
| 122 | + _keyIndex++; | ||
| 123 | + { // 遍历获取路牌 | ||
| 124 | + var lpDataCache=[]; | ||
| 125 | + for(var j = 0,len=data.length; j < len; j++) { | ||
| 126 | + lpDataCache.push([data[j].value[0],data[j].value[4]]); | ||
| 127 | + } | ||
| 128 | + lpDataCache.sort(function(a,b){ | ||
| 129 | + return b[1]-a[1]; | ||
| 130 | + }); | ||
| 131 | + $.each(lpDataCache,function () { | ||
| 132 | + lpData.push(this[0]); | ||
| 133 | + }); | ||
| 134 | + lpData = unique(lpData); | ||
| 135 | + } | ||
| 136 | + } else if(!isLast && isNewData){ | ||
| 137 | + data = newData; | ||
| 138 | + historyData.splice(_keyIndex+1, historyData.length); | ||
| 139 | + historyData.push(data); | ||
| 140 | + _keyIndex++; | ||
| 141 | + } else if(!isLast && !isNewData){ | ||
| 142 | + data = newData; | ||
| 143 | + } | ||
| 144 | + if(!newLpData){ | ||
| 145 | + for(var j = 0,len=lpData.length; j < len; j++) { | ||
| 146 | + var type = true; | ||
| 147 | + var name = lpData[j]; | ||
| 148 | + for(var i = 0,len2=data.length; i < len2; i++) { | ||
| 149 | + if(name == data[i].value[0]) { | ||
| 150 | + if(type){ | ||
| 151 | + lpDataCount[name] = [data[i].value[3]/60000+data[i].value[15],1,data[i].value[4]]; | ||
| 152 | + type = false; | ||
| 153 | + } else if(data[i].value[6] == 'in' || data[i].value[16] == 1){ | ||
| 154 | + lpDataCount[name][0] += data[i].value[3]/60000; | ||
| 155 | + lpDataCount[name][1] += 1; | ||
| 156 | + } else { | ||
| 157 | + lpDataCount[name][0] += (data[i].value[3]/60000+data[i].value[15]); | ||
| 158 | + lpDataCount[name][1] += 1; | ||
| 159 | + } | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + } else { | ||
| 164 | + lpData = newLpData;// 添加路牌功能 | ||
| 165 | + } | ||
| 166 | + // 计算图层高度 | ||
| 167 | + bcdom.style.height = (60+lpData.length*60)+'px'; | ||
| 168 | + | ||
| 169 | + option = { | ||
| 170 | + tooltip: { | ||
| 171 | + borderWidth: 1, | ||
| 172 | + borderRadius: 0, | ||
| 173 | + triggerOn: 'none', | ||
| 174 | + textStyle: { | ||
| 175 | + color: '#000' | ||
| 176 | + }, | ||
| 177 | + backgroundColor: '#fff', | ||
| 178 | + borderColor: 'rgba(0, 0, 20, 0.2)', | ||
| 179 | + formatter: function (params) { | ||
| 180 | + //bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间 | ||
| 181 | + var bcTypeStr; | ||
| 182 | + if(params.value[6]=='bd') | ||
| 183 | + bcTypeStr='早例保'; | ||
| 184 | + else if(params.value[6]=='out') | ||
| 185 | + bcTypeStr='出场'; | ||
| 186 | + else if(params.value[6]=='normal') | ||
| 187 | + bcTypeStr='正常'; | ||
| 188 | + else if(params.value[6]=='cf') | ||
| 189 | + bcTypeStr='吃饭'; | ||
| 190 | + else if(params.value[6]=='in') | ||
| 191 | + bcTypeStr='进场'; | ||
| 192 | + else if(params.value[6]=='lc') | ||
| 193 | + bcTypeStr='晚例保'; | ||
| 194 | + else if(params.value[6]=='major') | ||
| 195 | + bcTypeStr='放站'; | ||
| 196 | + else if(params.value[6]=='venting') | ||
| 197 | + bcTypeStr='直放'; | ||
| 198 | + else if(params.value[6]=='region') | ||
| 199 | + bcTypeStr='区间'; | ||
| 200 | + var str = '当前路牌:'+params.value[0] | ||
| 201 | + + '<br> 行驶方向:'+(params.value[8]==0?'上行':'下行')+' <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 | \ No newline at end of file | 1004 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/js/gantt.js
| 1 | (function() { | 1 | (function() { |
| 2 | // 全屏模式点击事件. | 2 | // 全屏模式点击事件. |
| 3 | + // $(document).on('click','.fullscreen',function() { | ||
| 4 | + // if($('.ganttSvgContainer').height()>400) | ||
| 5 | + // $('.ganttSvgContainer').css('height','400px'); | ||
| 6 | + // else | ||
| 7 | + // $('.ganttSvgContainer').css('height','99%'); | ||
| 8 | + // }); | ||
| 3 | $(document).on('click','.fullscreen',function() { | 9 | $(document).on('click','.fullscreen',function() { |
| 4 | - if($('.ganttSvgContainer').height()>400) | ||
| 5 | - $('.ganttSvgContainer').css('height','400px'); | ||
| 6 | - else | ||
| 7 | - $('.ganttSvgContainer').css('height','99%'); | 10 | + if($('.gtt').height()>720) |
| 11 | + $('.gtt').css('height','720px'); | ||
| 12 | + else | ||
| 13 | + $('.gtt').css('height','99%'); | ||
| 14 | + echartsDrawGTT.resizeChart(); | ||
| 8 | }); | 15 | }); |
| 9 | // 获取已存在的该时刻表明细数据. | 16 | // 获取已存在的该时刻表明细数据. |
| 10 | var objD = window.localStorage.isDoDate; | 17 | var objD = window.localStorage.isDoDate; |
| @@ -32,7 +39,6 @@ | @@ -32,7 +39,6 @@ | ||
| 32 | }); | 39 | }); |
| 33 | $('.tipso-animation').tipso('show'); | 40 | $('.tipso-animation').tipso('show'); |
| 34 | setTimeout(function(){$('.tipso-animation').tipso('hide');},4000); | 41 | setTimeout(function(){$('.tipso-animation').tipso('hide');},4000); |
| 35 | - //debugger; | ||
| 36 | // 1、定义开始与结束时间点字符串. | 42 | // 1、定义开始与结束时间点字符串. |
| 37 | var seMap = getStartAndEndDate(map); | 43 | var seMap = getStartAndEndDate(map); |
| 38 | // 2、获取开始与结束时间对象. | 44 | // 2、获取开始与结束时间对象. |
| @@ -46,6 +52,7 @@ | @@ -46,6 +52,7 @@ | ||
| 46 | var bcTypeArr = getbcType(); | 52 | var bcTypeArr = getbcType(); |
| 47 | // 7、参数配置信息. | 53 | // 7、参数配置信息. |
| 48 | var dataMap = argsMap(map,dirA,bcTypeArr,seMap); | 54 | var dataMap = argsMap(map,dirA,bcTypeArr,seMap); |
| 55 | + parameters.setDataMap(dataMap); | ||
| 49 | // 8、定义最大车辆数与停站时间. | 56 | // 8、定义最大车辆数与停站时间. |
| 50 | var CSMap = null,data = null; | 57 | var CSMap = null,data = null; |
| 51 | 58 | ||
| @@ -65,21 +72,22 @@ | @@ -65,21 +72,22 @@ | ||
| 65 | _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap); | 72 | _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap); |
| 66 | map.clzs = _paramObj.calcuClzx(); | 73 | map.clzs = _paramObj.calcuClzx(); |
| 67 | CSMap = getMaxCarAndStopSpace1(map); | 74 | CSMap = getMaxCarAndStopSpace1(map); |
| 68 | - | ||
| 69 | } | 75 | } |
| 70 | 76 | ||
| 71 | // 定义时间参数. | 77 | // 定义时间参数. |
| 72 | - var stopAraay = getsj(map); | 78 | + var stopArray = getsj(map); |
| 73 | if(isNull(objD)) { | 79 | if(isNull(objD)) { |
| 74 | if(map.baseRes== '0') { | 80 | if(map.baseRes== '0') { |
| 75 | // 采用客流数据获取渲染时刻表明细图形的配置参数数据. | 81 | // 采用客流数据获取渲染时刻表明细图形的配置参数数据. |
| 76 | - data = BaseFun.KLplaceClassesTime(CSMap.gattA,stopAraay,CSMap.maxCar,map,seMap,dataMap); | 82 | + data = BaseFun.KLplaceClassesTime(CSMap.gattA,stopArray,CSMap.maxCar,map,seMap,dataMap); |
| 77 | }else if(map.baseRes== '1') { | 83 | }else if(map.baseRes== '1') { |
| 78 | // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据. | 84 | // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据. |
| 79 | - // data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA); | ||
| 80 | - // data = BaseFun.BXPplaceClassesTime01(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA); | ||
| 81 | - data = BaseFun.BXPplaceClassesTime02(stopAraay,CSMap.maxCar,map,seMap,dataMap); | ||
| 82 | - } else if (map.baseRes == '2') { | 85 | + // data = BaseFun.BXPplaceClassesTime(stopArray,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA); |
| 86 | + // data = BaseFun.BXPplaceClassesTime01(stopArray,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA); | ||
| 87 | + // data = BaseFun.BXPplaceClassesTime02(stopArray,CSMap.maxCar,map,seMap,dataMap); | ||
| 88 | + data = scheduleInitialize.scheduleInit(stopArray,CSMap.maxCar,map,seMap,dataMap); | ||
| 89 | + $(".paramAdd").addClass("hidden"); | ||
| 90 | + } else if (map.baseRes == '2') { | ||
| 83 | // TODO:绘制gantt图表 | 91 | // TODO:绘制gantt图表 |
| 84 | // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 | 92 | // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置 |
| 85 | // TODO:CSMap.maxCar 之后要设定一下的 | 93 | // TODO:CSMap.maxCar 之后要设定一下的 |
| @@ -109,20 +117,22 @@ | @@ -109,20 +117,22 @@ | ||
| 109 | } | 117 | } |
| 110 | // 按照发车序号顺序排序. | 118 | // 按照发车序号顺序排序. |
| 111 | lpbc_.sort(function(a,b){return a.fcno-b.fcno}); | 119 | lpbc_.sort(function(a,b){return a.fcno-b.fcno}); |
| 112 | - resultJA = resultJA.concat(BaseFun.addjclbbc01(lpbc_,dataMap,stopAraay[0].lbsj,map)); | 120 | + resultJA = resultJA.concat(BaseFun.addjclbbc01(lpbc_,dataMap,stopAraay[0].lbsj,map)); |
| 113 | } | 121 | } |
| 114 | data = {'json':rsjar,'bxrcgs':null}; | 122 | data = {'json':rsjar,'bxrcgs':null}; |
| 115 | } | 123 | } |
| 116 | - // 创建甘特图对象. | ||
| 117 | - var graph = d3.select('#ganttSvg').relationshipGraph( | ||
| 118 | - getGraphArgus({'ganttInitParams': map,'yAxisCarArray':CSMap.maxCar, | ||
| 119 | - 'startDateTime':seDate.kssj,'endDateTime':seDate.jssj,'stopAraay':stopAraay,'dataMap':dataMap,'bxrcgs':data.bxrcgs})); | ||
| 120 | - // 渲染数据. | ||
| 121 | - graph.data(data.json); | ||
| 122 | - // 记录操作记录. | ||
| 123 | - graph.addHistory(); | ||
| 124 | - // 初始化右键菜单. | ||
| 125 | - contextInit(graph); | 124 | + echartsDrawGTT.init(data.json,true,true); |
| 125 | + console.log(data.json); | ||
| 126 | + // 创建甘特图对象. | ||
| 127 | + // var graph = d3.select('#ganttSvg').relationshipGraph( | ||
| 128 | + // getGraphArgus({'ganttInitParams': map,'yAxisCarArray':CSMap.maxCar, | ||
| 129 | + // 'startDateTime':seDate.kssj,'endDateTime':seDate.jssj,'stopArray':stopArray,'dataMap':dataMap,'bxrcgs':data.bxrcgs})); | ||
| 130 | + // // 渲染数据. | ||
| 131 | + // graph.data(data.json); | ||
| 132 | + // // 记录操作记录. | ||
| 133 | + // graph.addHistory(); | ||
| 134 | + // // 初始化右键菜单. | ||
| 135 | + // contextInit(graph); | ||
| 126 | },500); | 136 | },500); |
| 127 | 137 | ||
| 128 | /** | 138 | /** |
| @@ -439,8 +449,8 @@ | @@ -439,8 +449,8 @@ | ||
| 439 | * @return 返回甘特图的参数配置信息. | 449 | * @return 返回甘特图的参数配置信息. |
| 440 | * */ | 450 | * */ |
| 441 | function getGraphArgus(p) { | 451 | function getGraphArgus(p) { |
| 442 | - var bs = p.stopAraay[0].sxsj > 40 ? 4 : 2; | ||
| 443 | - var MULTIPLE = Math.round(105/parseInt(p.stopAraay[0].sxsj)) >3 ? Math.round(90/parseInt(p.stopAraay[0].sxsj)) : Math.round(90/parseInt(p.stopAraay[0].sxsj)) *bs; | 452 | + var bs = p.stopArray[0].sxsj > 40 ? 4 : 2; |
| 453 | + var MULTIPLE = Math.round(105/parseInt(p.stopArray[0].sxsj)) >3 ? Math.round(90/parseInt(p.stopArray[0].sxsj)) : Math.round(90/parseInt(p.stopArray[0].sxsj)) *bs; | ||
| 444 | var VALUEKEYNAME = 'Worldwide Gross' , | 454 | var VALUEKEYNAME = 'Worldwide Gross' , |
| 445 | DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240, | 455 | DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240, |
| 446 | MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60, | 456 | MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60, |
| @@ -453,7 +463,6 @@ | @@ -453,7 +463,6 @@ | ||
| 453 | var hours=Math.floor(leave1/(3600*1000)); | 463 | var hours=Math.floor(leave1/(3600*1000)); |
| 454 | DXHOURS = days*24+hours; | 464 | DXHOURS = days*24+hours; |
| 455 | WIDTH = DXHOURS*MINUTE*MULTIPLE; | 465 | WIDTH = DXHOURS*MINUTE*MULTIPLE; |
| 456 | - // debugger; | ||
| 457 | var lpsplitA = getylp(p.yAxisCarArray); | 466 | var lpsplitA = getylp(p.yAxisCarArray); |
| 458 | var args = { | 467 | var args = { |
| 459 | 'valueKeyName': VALUEKEYNAME, | 468 | 'valueKeyName': VALUEKEYNAME, |
| @@ -476,11 +485,11 @@ | @@ -476,11 +485,11 @@ | ||
| 476 | 'lpNoA':lpsplitA.lpNoA, | 485 | 'lpNoA':lpsplitA.lpNoA, |
| 477 | 'lpNameA':lpsplitA.lpNameA, | 486 | 'lpNameA':lpsplitA.lpNameA, |
| 478 | 'tickFormat': TICKFORMAT, | 487 | 'tickFormat': TICKFORMAT, |
| 479 | - 'stopAraay' : p.stopAraay, | 488 | + 'stopArray' : p.stopArray, |
| 480 | 'dataMap':p.dataMap, | 489 | 'dataMap':p.dataMap, |
| 481 | 'showTooltips': SHOWTOOLTIPS, | 490 | 'showTooltips': SHOWTOOLTIPS, |
| 482 | 'bxrcgs':p.bxrcgs | 491 | 'bxrcgs':p.bxrcgs |
| 483 | - } | 492 | + }; |
| 484 | return args; | 493 | return args; |
| 485 | } | 494 | } |
| 486 | 495 | ||
| @@ -556,18 +565,18 @@ | @@ -556,18 +565,18 @@ | ||
| 556 | // 把当前路牌下的班次按发车序号顺序排序. | 565 | // 把当前路牌下的班次按发车序号顺序排序. |
| 557 | normalA.sort(function(a,b){return a.fcno-b.fcno}); | 566 | normalA.sort(function(a,b){return a.fcno-b.fcno}); |
| 558 | // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图. | 567 | // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图. |
| 559 | - data = BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopAraay[0].lbsj,map))); | 568 | + data = BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopArray[0].lbsj,map))); |
| 560 | }else { | 569 | }else { |
| 561 | data = graph.getDataArray(); | 570 | data = graph.getDataArray(); |
| 562 | } | 571 | } |
| 563 | var rsjar = BaseFun.tzsztest(graph.configuration.taskTypes,data,graph.configuration.dataMap); | 572 | var rsjar = BaseFun.tzsztest(graph.configuration.taskTypes,data,graph.configuration.dataMap); |
| 564 | /*var resultJA = BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, | 573 | /*var resultJA = BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, |
| 565 | - graph.configuration.dataMap,graph.configuration.stopAraay,data, | 574 | + graph.configuration.dataMap,graph.configuration.stopArray,data, |
| 566 | graph.configuration.dataMap.map);*/ | 575 | graph.configuration.dataMap.map);*/ |
| 567 | // 获取图形数据.重新绘制. | 576 | // 获取图形数据.重新绘制. |
| 568 | graph.data(BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, | 577 | graph.data(BaseFun.addjcclcbc01(graph.configuration.taskTypes,rsjar, |
| 569 | graph.configuration.dataMap, | 578 | graph.configuration.dataMap, |
| 570 | - graph.configuration.stopAraay, | 579 | + graph.configuration.stopArray, |
| 571 | graph.configuration.dataMap.map)); | 580 | graph.configuration.dataMap.map)); |
| 572 | // 记录当前操作. | 581 | // 记录当前操作. |
| 573 | graph.addHistory(); | 582 | graph.addHistory(); |
| @@ -727,8 +736,8 @@ | @@ -727,8 +736,8 @@ | ||
| 727 | // 把当前路牌下的班次按发车序号顺序排序. | 736 | // 把当前路牌下的班次按发车序号顺序排序. |
| 728 | normalA.sort(function(a,b){return a.fcno-b.fcno}); | 737 | normalA.sort(function(a,b){return a.fcno-b.fcno}); |
| 729 | // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图. | 738 | // 先添加进出场班次和早晚例保班次-->然后合并其他班次-->然后重置发车序号和班次数-->根据数据重新渲染视图. |
| 730 | - graph.data(BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopAraay[0].lbsj,map)))); | ||
| 731 | - // graph.data(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopAraay[0].lbsj,map)); | 739 | + graph.data(BaseFun.setbcsAndfcno(qtlpbc.concat(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopArray[0].lbsj,map)))); |
| 740 | + // graph.data(BaseFun.addjclbbc(normalA,graph.configuration.dataMap,graph.configuration.stopArray[0].lbsj,map)); | ||
| 732 | // 记录当前操作. | 741 | // 记录当前操作. |
| 733 | graph.addHistory(); | 742 | graph.addHistory(); |
| 734 | } | 743 | } |
src/main/resources/static/pages/base/timesmodel/js/parameters.js
0 → 100644
| 1 | +/** | ||
| 2 | + * 时刻表参数类 | ||
| 3 | + */ | ||
| 4 | +var parameters = function () { | ||
| 5 | + var dataMap; | ||
| 6 | + var getDataMap = function(){ | ||
| 7 | + return dataMap; | ||
| 8 | + }; | ||
| 9 | + var setDataMap = function(data){ | ||
| 10 | + dataMap = data; | ||
| 11 | + }; | ||
| 12 | + return { | ||
| 13 | + getDataMap : getDataMap, | ||
| 14 | + setDataMap : setDataMap | ||
| 15 | + } | ||
| 16 | +}(); | ||
| 0 | \ No newline at end of file | 17 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/js/systemTools.js
0 → 100644
| 1 | +// 恢复动作 | ||
| 2 | +$('.recover').on('click',function() { | ||
| 3 | + // 关闭弹出层. | ||
| 4 | + layer.closeAll(); | ||
| 5 | + // 获取当前操作步数 | ||
| 6 | + var _keyIndex = echartsDrawGTT.get_keyIndex(); | ||
| 7 | + // 判断当前操作是否恢复到最后一步的操纵. | ||
| 8 | + if(_keyIndex >= echartsDrawGTT.getHistoryData().length-1) { | ||
| 9 | + layer.msg('您已经是操作记录的【最后一步】了,不能在恢复了!'); | ||
| 10 | + return; | ||
| 11 | + } else { | ||
| 12 | + // 标记操作下标前进. | ||
| 13 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 14 | + var historyData = echartsDrawGTT.getHistoryData(); | ||
| 15 | + var data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 16 | + echartsDrawGTT.init(data,false,false); | ||
| 17 | + echartsDrawGTT.refreshDrag(); | ||
| 18 | + layer.msg('恢复到操作记录的【第'+(_keyIndex+1)+'步】了!'); | ||
| 19 | + } | ||
| 20 | +}); | ||
| 21 | +// 撤销动作 | ||
| 22 | +$(".revoke").on("click",function(){ | ||
| 23 | + // 关闭弹出层. | ||
| 24 | + layer.closeAll(); | ||
| 25 | + // 获取当前操作步数 | ||
| 26 | + var _keyIndex = echartsDrawGTT.get_keyIndex(); | ||
| 27 | + // 判断当对图形操作的步骤. | ||
| 28 | + if(_keyIndex==0) { | ||
| 29 | + layer.msg('您已经是操作记录的【第一步】了,不能在撤销了!'); | ||
| 30 | + return; | ||
| 31 | + } else { | ||
| 32 | + // 标记操作下标后退. | ||
| 33 | + echartsDrawGTT.set_keyIndex(--_keyIndex); | ||
| 34 | + var historyData = echartsDrawGTT.getHistoryData(); | ||
| 35 | + var data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 36 | + echartsDrawGTT.init(data,false,false); | ||
| 37 | + echartsDrawGTT.refreshDrag(); | ||
| 38 | + layer.msg('撤销到操作记录的【第'+(_keyIndex+1)+'步】了!'); | ||
| 39 | + } | ||
| 40 | +}); | ||
| 41 | +/** 监听添加班次事件.*/ | ||
| 42 | +$('.addBc').on('click',function() { | ||
| 43 | + var bcdom = document.getElementById("bcContainer"); | ||
| 44 | + var lpData = echartsDrawGTT.getLpData(); | ||
| 45 | + var lpDataCount = echartsDrawGTT.getLpDataCount(); | ||
| 46 | + // 弹出层mobal页面 | ||
| 47 | + $.get('/pages/base/timesmodel/fragments/addBc.html', function(m){ | ||
| 48 | + $(pjaxContainer).append(m); | ||
| 49 | + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。 | ||
| 50 | + $('#addBc_mobal').trigger('addBcMobal.show',[lpData,lpDataCount,echartsDrawGTT]); | ||
| 51 | + }); | ||
| 52 | +}); | ||
| 53 | +/** 监听添加路牌事件. **/ | ||
| 54 | +$('.addLp').on('click',function() { | ||
| 55 | + var lpData = echartsDrawGTT.getLpData(); | ||
| 56 | + $.get('/pages/base/timesmodel/fragments/addlp.html', function(m){ | ||
| 57 | + $(pjaxContainer).append(m); | ||
| 58 | + // 显示修改班次片段. | ||
| 59 | + $('#addlp_mobal').trigger('addlpMobal.show',[lpData,echartsDrawGTT]); | ||
| 60 | + }); | ||
| 61 | +}); | ||
| 62 | +/** 监听删除路牌事件. **/ | ||
| 63 | +$('.deleteLp').on('click',function() { | ||
| 64 | + var lpData = echartsDrawGTT.getLpData(); | ||
| 65 | + $.get('/pages/base/timesmodel/fragments/deletelp.html', function(m){ | ||
| 66 | + $(pjaxContainer).append(m); | ||
| 67 | + // 显示修改班次片段. | ||
| 68 | + $('#deletelp_mobal').trigger('deletelpMobal.show',[lpData,echartsDrawGTT]); | ||
| 69 | + }); | ||
| 70 | +}); | ||
| 71 | +/** 监听班次调整事件.(点击) **/ | ||
| 72 | +$('.bcAdjust').on('click',function() { | ||
| 73 | + var lpData = echartsDrawGTT.getLpData(); | ||
| 74 | + $.get('/pages/base/timesmodel/fragments/bcadjust.html', function(m){ | ||
| 75 | + $(pjaxContainer).append(m); | ||
| 76 | + // 显示修改班次片段. | ||
| 77 | + $('#bcadjust_mobal').trigger('bcadjustMobal.show',[lpData,echartsDrawGTT]); | ||
| 78 | + }); | ||
| 79 | +}); | ||
| 80 | +/** 监听班次调整事件.(取消) **/ | ||
| 81 | +$('#bcAdjustListCancel').on('click',function() { | ||
| 82 | + $('.bc-adjust-list').addClass('hidden'); | ||
| 83 | + $('#bcAdjustList').empty(); | ||
| 84 | + echartsDrawGTT.refreshDrag(); | ||
| 85 | + layer.msg('已经退出班次调整!'); | ||
| 86 | +}); | ||
| 87 | +/** 监听班次调整事件.(提交) **/ | ||
| 88 | +$('#bcAdjustListSubmit').on('click',function() { | ||
| 89 | + var bcAdjustList = $('#bcAdjustList').val(), | ||
| 90 | + lpName = $('.bc-adjust-list #bcAdjustName').val(), | ||
| 91 | + lpDataCount = echartsDrawGTT.getLpDataCount(); | ||
| 92 | + if(lpName){ | ||
| 93 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 94 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 95 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 96 | + for(var i=0,len1 = bcAdjustList.length; i<len1; i++){ | ||
| 97 | + data[bcAdjustList[i]].value[0] = lpName; | ||
| 98 | + data[bcAdjustList[i]].value[4] = lpDataCount[lpName][2]; | ||
| 99 | + } | ||
| 100 | + echartsDrawGTT.init(data,false,true); | ||
| 101 | + echartsDrawGTT.refreshDrag(); | ||
| 102 | + } else | ||
| 103 | + layer.msg('没有找到目标路牌,请重新选择!'); | ||
| 104 | + $('.bc-adjust-list').addClass('hidden'); | ||
| 105 | + $('#bcAdjustList').empty(); | ||
| 106 | + echartsDrawGTT.refreshDrag(); | ||
| 107 | + layer.msg('已经退出班次调整!'); | ||
| 108 | + | ||
| 109 | +}); | ||
| 110 | + | ||
| 111 | +/* 右击菜单事件 | ||
| 112 | +* 1.修改 update | ||
| 113 | +* 2.删除 delete | ||
| 114 | +* 3.设为上行 setUp | ||
| 115 | +* 4.设为下行 setDown | ||
| 116 | +* 5.设为正常 setNormal | ||
| 117 | +* 6.设为区间 setRegion | ||
| 118 | +* 7.设为分班 setFb | ||
| 119 | +* 8.取消分班 setNofb | ||
| 120 | +* 9.设为直放 setVenting | ||
| 121 | +* 10.设为放站 setMajor | ||
| 122 | +* */ | ||
| 123 | +// 修改 | ||
| 124 | +function dropdownMenuUpdate(dataIndex) { | ||
| 125 | + $.get('/pages/base/timesmodel/fragments/editbc.html', function(m){ | ||
| 126 | + $(pjaxContainer).append(m); | ||
| 127 | + // 显示修改班次片段. | ||
| 128 | + $('#editBc_mobal').trigger('editBcMobal.show',[dataIndex,echartsDrawGTT]); | ||
| 129 | + }); | ||
| 130 | +} | ||
| 131 | +// 删除 | ||
| 132 | +function dropdownMenuDelete(dataIndex) { | ||
| 133 | + // 获取当前操作步数 | ||
| 134 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 135 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 136 | + data = $.extend(true, [], data, historyData[_keyIndex]), | ||
| 137 | + bc = data[dataIndex], | ||
| 138 | + type = bc.value[6]; | ||
| 139 | + if(!isType(data[dataIndex].value[6],'删除')) { | ||
| 140 | + layer.confirm('您确定要删除【路牌'+ bc.value[0] +'-->发车序号'+ bc.value[7] +'】当前班次嘛!'+ | ||
| 141 | + '</br>【注意】:如需要撤销当前操作,您可以在系统工具下拉选择点击【撤销按钮】进行恢复.', { | ||
| 142 | + btn : [ '确认提示并提交', '取消' ] | ||
| 143 | + }, function() { | ||
| 144 | + // 关闭弹出层. | ||
| 145 | + layer.closeAll(); | ||
| 146 | + data.splice(dataIndex,1); | ||
| 147 | + echartsDrawGTT.init(data,false,true); | ||
| 148 | + echartsDrawGTT.refreshDrag(); | ||
| 149 | + layer.msg('删除成功!'); | ||
| 150 | + }); | ||
| 151 | + } | ||
| 152 | +} | ||
| 153 | +// 切换上下行 | ||
| 154 | +function dropdownMenuSwitchUpDown(dataIndex) { | ||
| 155 | + // 获取当前操作步数 | ||
| 156 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 157 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 158 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 159 | + var dir = data[dataIndex].value[8] == 1 ? 0:1; | ||
| 160 | + data[dataIndex].value[8] = dir; | ||
| 161 | + data[dataIndex].itemStyle.normal.color = dir==0?"#ff2949":"#518fe3"; | ||
| 162 | + // 起终点互换 | ||
| 163 | + var station = data[dataIndex].value[13]; | ||
| 164 | + data[dataIndex].value[13] = data[dataIndex].value[14]; | ||
| 165 | + data[dataIndex].value[14] = station; | ||
| 166 | + var dataMap; | ||
| 167 | + if(data[dataIndex].value[6] == 'in' || data[dataIndex].value[6] == 'out') { | ||
| 168 | + dataMap = parameters.getDataMap(); | ||
| 169 | + if(data[dataIndex].value[6] == 'out' && dir == 0) | ||
| 170 | + data[dataIndex].value[3] = parseInt(dataMap.map.upOutTimer)*60000; | ||
| 171 | + else if(data[dataIndex].value[6] == 'out' && dir == 1) | ||
| 172 | + data[dataIndex].value[3] = parseInt(dataMap.map.downOutTimer)*60000; | ||
| 173 | + else if(data[dataIndex].value[6] == 'in' && dir == 0) | ||
| 174 | + data[dataIndex].value[3] = parseInt(dataMap.map.upInTimer)*60000; | ||
| 175 | + else if(data[dataIndex].value[6] == 'in' && dir == 1) | ||
| 176 | + data[dataIndex].value[3] = parseInt(dataMap.map.downInTimer)*60000; | ||
| 177 | + data[dataIndex].value[2] = data[dataIndex].value[1] + data[dataIndex].value[3]; | ||
| 178 | + } | ||
| 179 | + echartsDrawGTT.init(data,false,true); | ||
| 180 | + echartsDrawGTT.refreshDrag(); | ||
| 181 | + layer.msg('设置为上行成功!'); | ||
| 182 | +} | ||
| 183 | +// 路牌切换上下行 | ||
| 184 | +function dropdownMenuLpSwitchUpDown(dataIndex) { | ||
| 185 | + // 获取当前操作步数 | ||
| 186 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 187 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 188 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 189 | + var dataMap = parameters.getDataMap(); | ||
| 190 | + for(var i=0,len=data.length; i<len; i++){ | ||
| 191 | + if(data[dataIndex].value[0] == data[i].value[0]) { | ||
| 192 | + var dir = (data[i].value[8] == 1 ? 0:1); | ||
| 193 | + data[i].value[8] = dir; | ||
| 194 | + data[i].itemStyle.normal.color = dir==0?"#ff2949":"#518fe3"; | ||
| 195 | + // 起终点互换 | ||
| 196 | + var station = data[i].value[13]; | ||
| 197 | + data[i].value[13] = data[i].value[14]; | ||
| 198 | + data[i].value[14] = station; | ||
| 199 | + if(data[i].value[6] == 'in' || data[i].value[6] == 'out') { | ||
| 200 | + if(data[i].value[6] == 'out' && dir == 0) | ||
| 201 | + data[i].value[3] = parseInt(dataMap.map.upOutTimer)*60000; | ||
| 202 | + else if(data[i].value[6] == 'out' && dir == 1) | ||
| 203 | + data[i].value[3] = parseInt(dataMap.map.downOutTimer)*60000; | ||
| 204 | + else if(data[i].value[6] == 'in' && dir == 0) | ||
| 205 | + data[i].value[3] = parseInt(dataMap.map.upInTimer)*60000; | ||
| 206 | + else if(data[i].value[6] == 'in' && dir == 1) | ||
| 207 | + data[i].value[3] = parseInt(dataMap.map.downInTimer)*60000; | ||
| 208 | + data[i].value[2] = data[i].value[1] + data[i].value[3]; | ||
| 209 | + } | ||
| 210 | + } | ||
| 211 | + } | ||
| 212 | + echartsDrawGTT.init(data,false,true); | ||
| 213 | + echartsDrawGTT.refreshDrag(); | ||
| 214 | + layer.msg('路牌切换上下行成功!'); | ||
| 215 | +} | ||
| 216 | +// 设为正常 | ||
| 217 | +function dropdownMenuSetNormal(dataIndex) { | ||
| 218 | + // 获取当前操作步数 | ||
| 219 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 220 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 221 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 222 | + | ||
| 223 | + if(!isType(data[dataIndex].value[6],'设置为正常班次','normal','正常班次')) { | ||
| 224 | + data[dataIndex].value[6] = 'normal'; | ||
| 225 | + historyData.push(data); | ||
| 226 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 227 | + echartsDrawGTT.setHistoryData(historyData); | ||
| 228 | + echartsDrawGTT.refreshDrag(); | ||
| 229 | + echartsDrawGTT.refreshUpDownData(); | ||
| 230 | + layer.msg('设置为正常成功!'); | ||
| 231 | + } | ||
| 232 | +} | ||
| 233 | +// 设为区间 | ||
| 234 | +function dropdownMenuSetRegion(dataIndex) { | ||
| 235 | + // 获取当前操作步数 | ||
| 236 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 237 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 238 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 239 | + if(!isType(data[dataIndex].value[6],'设置为区间班次','region','区间班次')) { | ||
| 240 | + data[dataIndex].value[6] = 'region'; | ||
| 241 | + historyData.push(data); | ||
| 242 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 243 | + echartsDrawGTT.setHistoryData(historyData); | ||
| 244 | + echartsDrawGTT.refreshDrag(); | ||
| 245 | + echartsDrawGTT.refreshUpDownData(); | ||
| 246 | + layer.msg('设置为区间成功!'); | ||
| 247 | + } | ||
| 248 | +} | ||
| 249 | +// 设为分班 | ||
| 250 | +function dropdownMenuSetFb(dataIndex) { | ||
| 251 | + // 获取当前操作步数 | ||
| 252 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 253 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 254 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 255 | + if(!isType(data[dataIndex].value[6],'设置为分班班次') && !isType(data[dataIndex].value[16],'设置为分班班次',1,'分班班次')) { | ||
| 256 | + data[dataIndex].value[16] = 1; | ||
| 257 | + historyData.push(data); | ||
| 258 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 259 | + echartsDrawGTT.setHistoryData(historyData); | ||
| 260 | + echartsDrawGTT.refreshDrag(); | ||
| 261 | + echartsDrawGTT.refreshUpDownData(); | ||
| 262 | + layer.msg('设置为分班成功!'); | ||
| 263 | + } | ||
| 264 | +} | ||
| 265 | +// 取消分班 | ||
| 266 | +function dropdownMenuSetNoFb(dataIndex) { | ||
| 267 | + // 获取当前操作步数 | ||
| 268 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 269 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 270 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 271 | + if(!isType(data[dataIndex].value[16],0,'不是分班班次')) { | ||
| 272 | + data[dataIndex].value[16] = 0; | ||
| 273 | + historyData.push(data); | ||
| 274 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 275 | + echartsDrawGTT.setHistoryData(historyData); | ||
| 276 | + echartsDrawGTT.refreshDrag(); | ||
| 277 | + echartsDrawGTT.refreshUpDownData(); | ||
| 278 | + layer.msg('取消分班成功!'); | ||
| 279 | + } | ||
| 280 | +} | ||
| 281 | +// 设为直放 | ||
| 282 | +function dropdownMenuSetVenting(dataIndex) { | ||
| 283 | + // 获取当前操作步数 | ||
| 284 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 285 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 286 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 287 | + if(!isType(data[dataIndex].value[6],'设置为直放班次','venting','直放班次')) { | ||
| 288 | + data[dataIndex].value[6] = 'venting'; | ||
| 289 | + historyData.push(data); | ||
| 290 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 291 | + echartsDrawGTT.setHistoryData(historyData); | ||
| 292 | + echartsDrawGTT.refreshDrag(); | ||
| 293 | + echartsDrawGTT.refreshUpDownData(); | ||
| 294 | + layer.msg('设置为直放成功!'); | ||
| 295 | + } | ||
| 296 | +} | ||
| 297 | +// 设为放站 | ||
| 298 | +function dropdownMenuSetMajor(dataIndex) { | ||
| 299 | + // 获取当前操作步数 | ||
| 300 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 301 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 302 | + data = $.extend(true, [], data, historyData[_keyIndex]); | ||
| 303 | + if(!isType(data[dataIndex].value[6],'设置为放站班次','major','放站班次')){ | ||
| 304 | + data[dataIndex].value[6] = 'major' ; | ||
| 305 | + historyData.push(data); | ||
| 306 | + echartsDrawGTT.set_keyIndex(++_keyIndex); | ||
| 307 | + echartsDrawGTT.setHistoryData(historyData); | ||
| 308 | + echartsDrawGTT.refreshDrag(); | ||
| 309 | + echartsDrawGTT.refreshUpDownData(); | ||
| 310 | + layer.msg('设置为放站成功!'); | ||
| 311 | + } | ||
| 312 | +} | ||
| 313 | + | ||
| 314 | +function isType(bcType,msg,inType,opr) { | ||
| 315 | + var tag = false ; | ||
| 316 | + layer.closeAll(); | ||
| 317 | + if(bcType=='bd') { | ||
| 318 | + layer.msg('当前选择的班次是【早例保时间】不能'+ msg +'!'); | ||
| 319 | + tag = true; | ||
| 320 | + }else if(bcType=='cf') { | ||
| 321 | + layer.msg('当前选择的班次是【吃饭时间】不能'+ msg +'!'); | ||
| 322 | + tag = true; | ||
| 323 | + }else if(bcType=='in') { | ||
| 324 | + layer.msg('当前选择的班次是【进场班次】不能'+ msg +'!'); | ||
| 325 | + tag = true; | ||
| 326 | + }else if(bcType=='lc') { | ||
| 327 | + layer.msg('当前选择的班次是【晚例保时间】不能'+ msg +'!'); | ||
| 328 | + tag = true; | ||
| 329 | + }else if(bcType=='out') { | ||
| 330 | + layer.msg('当前选择的班次是【出场班次】不能'+ msg +'!'); | ||
| 331 | + tag = true; | ||
| 332 | + }else if(bcType==inType) { | ||
| 333 | + layer.msg('当前选择的班次是【'+ opr +'】不能重复设置!'); | ||
| 334 | + tag = true; | ||
| 335 | + } | ||
| 336 | + return tag; | ||
| 337 | +} | ||
| 338 | + | ||
| 339 | +/** | ||
| 340 | + * @description : (TODO) 监听统计数据事件. | ||
| 341 | + * | ||
| 342 | + * @status OK. | ||
| 343 | + ************************************************************************************************************************************************/ | ||
| 344 | +$('.countAdd').on('click',function() { | ||
| 345 | + var _keyIndex = echartsDrawGTT.get_keyIndex(), | ||
| 346 | + historyData = echartsDrawGTT.getHistoryData(), | ||
| 347 | + // list = $.extend(true, [], list, historyData[_keyIndex]); | ||
| 348 | + list = historyData[_keyIndex], | ||
| 349 | + dataMap = parameters.getDataMap(); | ||
| 350 | + var countBc = 0,// 总班次 | ||
| 351 | + serviceBc = 0,// 营运班次 | ||
| 352 | + jcbc = 0, // 进场总班次. | ||
| 353 | + ccbc = 0, // 出场总班次. | ||
| 354 | + cfbc = 0,// 吃饭总班次. | ||
| 355 | + zwlbbc = 0,// 早晚例保总班次. | ||
| 356 | + countGs = 0.0,// 总工时 | ||
| 357 | + servicesj = 0,// 营运班次总时间 | ||
| 358 | + jcsj = 0.0,// 进场总时间. | ||
| 359 | + ccsj = 0.0, // 出场总时间. | ||
| 360 | + cfsj = 0.0, // 吃饭总时间. | ||
| 361 | + zwlbsj = 0.0, // 早晚例保总时间. | ||
| 362 | + ksBc = 0,// 空驶班次 | ||
| 363 | + serviceLc = 0.0 ,// 营运里程 | ||
| 364 | + ksLc = 0.0 ,// 空驶里程 | ||
| 365 | + avgTzjx = 0.0,// 平均停站间隙 | ||
| 366 | + gfServiceBc = 0,// 高峰营运班次 | ||
| 367 | + dgServiceBc = 0,// 低谷营运班次 | ||
| 368 | + gfAvgTzjx = 0.0,// 高峰平均停站间隙 | ||
| 369 | + dgAvgTzjx = 0.0;// 低谷平均停站间隙 | ||
| 370 | + for(var i = 0;i<list.length;i++) { | ||
| 371 | + var bcObj = list[i].value; | ||
| 372 | + if(bcObj[3]>0) { | ||
| 373 | + countBc = countBc + 1; | ||
| 374 | + countGs = countGs + bcObj[15] + bcObj[3]/60000; | ||
| 375 | + var nowDate = new Date(bcObj[1]); | ||
| 376 | + if((BaseFun.isgfsjd(dataMap.zgfsjd[0].st,dataMap.zgfsjd[0].ed,nowDate) || | ||
| 377 | + BaseFun.isgfsjd(dataMap.wgfsjd[0].st,dataMap.wgfsjd[0].ed,nowDate)) && | ||
| 378 | + (bcObj[6] == dataMap.bcTypeArr.normal || | ||
| 379 | + bcObj[6] == dataMap.bcTypeArr.region || | ||
| 380 | + bcObj[6] == dataMap.bcTypeArr.major)) { | ||
| 381 | + gfServiceBc = gfServiceBc + 1; | ||
| 382 | + gfAvgTzjx = gfAvgTzjx + bcObj[15]; | ||
| 383 | + } else if((!BaseFun.isgfsjd(dataMap.zgfsjd[0].st,dataMap.zgfsjd[0].ed,nowDate) && | ||
| 384 | + !BaseFun.isgfsjd(dataMap.wgfsjd[0].st,dataMap.wgfsjd[0].ed,nowDate)) && | ||
| 385 | + (bcObj[6] == dataMap.bcTypeArr.normal || | ||
| 386 | + bcObj[6] == dataMap.bcTypeArr.region || | ||
| 387 | + bcObj[6] == dataMap.bcTypeArr.major)){ | ||
| 388 | + dgServiceBc = dgServiceBc + 1; | ||
| 389 | + dgAvgTzjx = dgAvgTzjx + bcObj[15]; | ||
| 390 | + } | ||
| 391 | + if(bcObj[6] == dataMap.bcTypeArr.normal || | ||
| 392 | + bcObj[6] == dataMap.bcTypeArr.region || | ||
| 393 | + bcObj[6] == dataMap.bcTypeArr.major) { | ||
| 394 | + serviceBc = serviceBc + 1; | ||
| 395 | + serviceLc = serviceLc + bcObj[9]; | ||
| 396 | + servicesj = servicesj + bcObj[3]/60000; | ||
| 397 | + avgTzjx = avgTzjx + bcObj[15]; | ||
| 398 | + }else if(bcObj[6] == dataMap.bcTypeArr.venting) { | ||
| 399 | + ksBc = ksBc +1; | ||
| 400 | + ksLc = ksLc + bcObj[9]; | ||
| 401 | + }else if(bcObj[6] == dataMap.bcTypeArr.in_) { | ||
| 402 | + jcbc = jcbc +1; | ||
| 403 | + jcsj = jcsj + bcObj[3]/60000; | ||
| 404 | + }else if(bcObj[6] == dataMap.bcTypeArr.out) { | ||
| 405 | + ccbc = ccbc +1; | ||
| 406 | + ccsj = ccsj + bcObj[3]/60000; | ||
| 407 | + }else if(bcObj[6] == dataMap.bcTypeArr.cf) { | ||
| 408 | + cfbc = cfbc +1; | ||
| 409 | + cfsj = cfsj + bcObj[3]/60000; | ||
| 410 | + }else if(bcObj[6] == dataMap.bcTypeArr.bd || | ||
| 411 | + bcObj[6] == dataMap.bcTypeArr.lc ) { | ||
| 412 | + zwlbbc = zwlbbc +1; | ||
| 413 | + zwlbsj = zwlbsj + bcObj[3]/60000; | ||
| 414 | + } | ||
| 415 | + } | ||
| 416 | + } | ||
| 417 | + dgAvgTzjx = dgAvgTzjx/dgServiceBc; | ||
| 418 | + gfAvgTzjx = gfAvgTzjx/gfServiceBc; | ||
| 419 | + avgTzjx = avgTzjx/dgServiceBc; | ||
| 420 | + var countDate = [{'name':'总班次(包括进出场、吃饭时间、早晚例保、营运且班次时间大于零的班次)','value':countBc}, | ||
| 421 | + {'name':'进场总班次(包括进场且班次时间大于零的班次)','value':jcbc}, | ||
| 422 | + {'name':'出场总班次(包括进场且班次时间大于零的班次)','value':ccbc}, | ||
| 423 | + {'name':'吃饭总班次(包括吃饭且班次时间大于零的班次)','value':cfbc}, | ||
| 424 | + {'name':'早晚例保总班次(包括早晚例保且时间大于零的班次)','value':zwlbbc}, | ||
| 425 | + {'name':'营运总班次(包括正常、区间、放大站且班次时间大于零班次)','value':serviceBc}, | ||
| 426 | + {'name':'进场总时间(包括进场班次且班次时间大于零)','value':parseFloat((jcsj/60).toFixed(2)) + ' 小时'}, | ||
| 427 | + {'name':'出场总时间(包括进场班次且班次时间大于零)','value':parseFloat((ccsj/60).toFixed(2)) + ' 小时'}, | ||
| 428 | + {'name':'吃饭总时间(包括吃饭班次且班次时间大于零)','value':parseFloat((cfsj/60).toFixed(2)) + ' 小时'}, | ||
| 429 | + {'name':'早晚例保总时间(包括早晚例保班次且时间大于零的)','value':parseFloat((zwlbsj/60).toFixed(2)) + ' 小时'}, | ||
| 430 | + {'name':'营运班次总时间(包括正常、区间、放大站且班次时间大于零)','value':parseFloat((servicesj/60).toFixed(2)) + ' 小时'}, | ||
| 431 | + {'name':'总工时(包括进出场、吃饭时间、早晚例保、营运班次时间)','value': parseFloat((countGs/60).toFixed(2)) + ' 小时'}, | ||
| 432 | + {'name':'空驶班次(包括直放班次)','value':ksBc}, | ||
| 433 | + {'name':'营运里程(包括正常、区间、放大站里程)','value':Number(serviceLc).toFixed(3) + ' 公里'}, | ||
| 434 | + {'name':'空驶里程(包括直放里程)','value':ksLc + ' 公里'}, | ||
| 435 | + {'name':'平均停站时间(营运班次停站时间总和/营运总班次)','value':parseInt(avgTzjx) + ' 分钟' }, | ||
| 436 | + {'name':'高峰营运班次(包括早晚高峰时段的正常、区间、放大站班次)','value':gfServiceBc}, | ||
| 437 | + {'name':'低谷营运班次(包括低谷时段的正常、区间、放大站班次)','value':dgServiceBc}, | ||
| 438 | + {'name':'高峰平均停站间隙(高峰营运班次停站时间总和/高峰营运班次总和)','value':parseInt(gfAvgTzjx) + ' 分钟'}, | ||
| 439 | + {'name':'低谷平均停站间隙(低谷营运班次停站时间总和/低谷营运班次总和)','value':parseInt(dgAvgTzjx) + ' 分钟'}, | ||
| 440 | + {'name':'综合评估','value':3}]; | ||
| 441 | + // 弹出层mobal页面 | ||
| 442 | + $.get('/pages/base/timesmodel/countadd.html', function(m){ | ||
| 443 | + $(pjaxContainer).append(m); | ||
| 444 | + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。 | ||
| 445 | + $('#countadd_mobal').trigger('countAddMobal.show',[countDate]); | ||
| 446 | + }); | ||
| 447 | +}); | ||
| 448 | + | ||
| 449 | +/** | ||
| 450 | + * @description : (TODO) 重新生成事件. | ||
| 451 | + * | ||
| 452 | + * @status OK. | ||
| 453 | + ************************************************************************************************************************************************/ | ||
| 454 | +$('.parambtn').on('click', function() { | ||
| 455 | + // 弹出层mobal页面 | ||
| 456 | + $.get('/pages/base/timesmodel/paramadd.html', function(m){ | ||
| 457 | + $(pjaxContainer).append(m); | ||
| 458 | + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。 | ||
| 459 | + $('#paramadd_mobal').trigger('paramAddMobal.show', Main_v2); | ||
| 460 | + }); | ||
| 461 | +}); | ||
| 0 | \ No newline at end of file | 462 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/js/tagsinput.js
| @@ -42,8 +42,8 @@ var ComponentsBootstrapTagsinput = function() { | @@ -42,8 +42,8 @@ var ComponentsBootstrapTagsinput = function() { | ||
| 42 | var bctypeValue = $('#state_tagsinput_bctype').val(); | 42 | var bctypeValue = $('#state_tagsinput_bctype').val(); |
| 43 | var rcnum = $('#state_tagsinput_rcsvalue').val(); | 43 | var rcnum = $('#state_tagsinput_rcsvalue').val(); |
| 44 | var clnum = $('#state_tagsinput_clsvalue').val(); | 44 | var clnum = $('#state_tagsinput_clsvalue').val(); |
| 45 | - var gsvag = $('#state_tagsinput_gsavgvalue').val(); | ||
| 46 | - if(isNull(bctypeValue,rcnum,clnum,gsvag)) { | 45 | + // var gsvag = $('#state_tagsinput_gsavgvalue').val(); |
| 46 | + if(isNull(bctypeValue,rcnum,clnum)) { | ||
| 47 | if(!Number.isInteger(parseInt(rcnum)/parseInt(clnum))) { | 47 | if(!Number.isInteger(parseInt(rcnum)/parseInt(clnum))) { |
| 48 | layer.msg('当前算法只支持【单/双挡】!请您重新输入!'); | 48 | layer.msg('当前算法只支持【单/双挡】!请您重新输入!'); |
| 49 | $('#state_tagsinput_bctype').val(null); | 49 | $('#state_tagsinput_bctype').val(null); |
| @@ -57,24 +57,40 @@ var ComponentsBootstrapTagsinput = function() { | @@ -57,24 +57,40 @@ var ComponentsBootstrapTagsinput = function() { | ||
| 57 | if(s1a[0]==bctypeValue) { | 57 | if(s1a[0]==bctypeValue) { |
| 58 | rcnum = parseInt(rcnum) + parseInt(s1a[1]); | 58 | rcnum = parseInt(rcnum) + parseInt(s1a[1]); |
| 59 | clnum = parseInt(clnum) + parseInt(s1a[2]); | 59 | clnum = parseInt(clnum) + parseInt(s1a[2]); |
| 60 | - gsvag = parseInt(s1a[3]); | 60 | + // gsvag = parseInt(s1a[3]); |
| 61 | } | 61 | } |
| 62 | } | 62 | } |
| 63 | elt.tagsinput('add', { | 63 | elt.tagsinput('add', { |
| 64 | - "value": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag, | ||
| 65 | - "text": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag, | ||
| 66 | - "continent": bctypeValue, | 64 | + // "value": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag, |
| 65 | + // "text": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag, | ||
| 66 | + "value": bctypeValue + '/' + rcnum + '/' + clnum, | ||
| 67 | + "text": bctypeValue + '/' + rcnum + '/' + clnum, | ||
| 68 | + "continent": bctypeValue | ||
| 67 | }); | 69 | }); |
| 68 | $('#state_tagsinput_bctype').val(null); | 70 | $('#state_tagsinput_bctype').val(null); |
| 69 | $('#state_tagsinput_rcsvalue').val(null); | 71 | $('#state_tagsinput_rcsvalue').val(null); |
| 70 | $('#state_tagsinput_clsvalue').val(null); | 72 | $('#state_tagsinput_clsvalue').val(null); |
| 71 | - $('#state_tagsinput_gsavgvalue').val(null); | ||
| 72 | - } | 73 | + // $('#state_tagsinput_gsavgvalue').val(null); |
| 74 | + setTimeout(function () { | ||
| 75 | + var bxrc = $('#state_tagsinput').val(); | ||
| 76 | + // 判断. | ||
| 77 | + if(bxrc=='' || bxrc==null) | ||
| 78 | + return false; | ||
| 79 | + var bxrcAr = bxrc.split(','),pczs = 0; | ||
| 80 | + for(var s = 0 ; s< bxrcAr.length;s++) { | ||
| 81 | + // 切割单个班型人次. | ||
| 82 | + pczs = pczs + parseInt(bxrcAr[s].split('/')[2]); | ||
| 83 | + } | ||
| 84 | + $('#clzsInput').val(pczs); | ||
| 85 | + },500); | ||
| 86 | + } else { | ||
| 87 | + layer.msg('请输入完整参数!'); | ||
| 88 | + } | ||
| 73 | }); | 89 | }); |
| 74 | 90 | ||
| 75 | - var isNull = function(v1,v2,v3,v4) { | 91 | + var isNull = function(v1,v2,v3) { |
| 76 | var tag = true; | 92 | var tag = true; |
| 77 | - if(v1==''|| v2=='' || v3=='' || v4=='') | 93 | + if(v1==''|| v2=='' || v3=='') |
| 78 | tag = false; | 94 | tag = false; |
| 79 | return tag; | 95 | return tag; |
| 80 | } | 96 | } |
src/main/resources/static/pages/base/timesmodel/js/v1/AdjustTrip.js
0 → 100644
| 1 | +/** | ||
| 2 | + * 平衡车距策略 | ||
| 3 | + * 调整策略如下(有点像滤波器): | ||
| 4 | + * 1、从头开始,连续取3个班次,获取2个间隔,根据间隔的不同及其他规则,调整中间班次的发车时间 | ||
| 5 | + * 2、基本调整如下, | ||
| 6 | + * (1)、如果2个间隔时间差1分钟,不调整 | ||
| 7 | + * (2)、如果第一个间隔在区间间隔范围外,调整发车时间1分钟到指定的边界 | ||
| 8 | + * (3)、如果第一个间隔大,调整中间班次发车时间-1分钟,如果调整后的间隔在区间间隔范围外,不调整 | ||
| 9 | + * (4)、如果第二个间隔大,调整中间班次发车时间+1分钟,如果调整后的间隔在区间间隔范围外,不调整 | ||
| 10 | + * 3、如果可调整,但是相关的停站时间无法满足,不调整 | ||
| 11 | + * | ||
| 12 | + * 以1分钟调整,不停的迭代上述步骤 | ||
| 13 | + * | ||
| 14 | + * 4、如果还有没有满足要求的班次,此时需要智能修改分班路牌头尾班次,删除,或这加入,然后再次迭代 | ||
| 15 | + */ | ||
| 16 | +var AdjustTrip = function () { | ||
| 17 | + var departureClearanceAdjust = function (bcList, dataMap) { | ||
| 18 | + var upBc = new Array(), downBc = new Array(); | ||
| 19 | + // 取出上下行班次,并按发车时间排序 | ||
| 20 | + $.each(bcList, function () { | ||
| 21 | + if(this.bcType == "normal"){ | ||
| 22 | + if(this.xlDir == "relationshipGraph-up") | ||
| 23 | + upBc.push(this); | ||
| 24 | + if(this.xlDir == "relationshipGraph-down") | ||
| 25 | + downBc.push(this); | ||
| 26 | + } | ||
| 27 | + }); | ||
| 28 | + // upBc.sort(function(a,b){return a.fcint-b.fcint}); | ||
| 29 | + // downBc.sort(function(a,b){return a.fcint-b.fcint}); | ||
| 30 | + calculate(upBc, bcList, dataMap, 11); | ||
| 31 | + calculate(downBc, bcList, dataMap, 11); | ||
| 32 | + }; | ||
| 33 | + | ||
| 34 | + var iBcCountOfGroup = 3; // 3个班次一次参与计算 | ||
| 35 | + var dirBcOfGroup = []; | ||
| 36 | + var dirBcIntervalOfGroup = []; // 班次间隔列表,3个班次,2个间隔 | ||
| 37 | + var oBcFcTime; // 班次发车时间 | ||
| 38 | + /** | ||
| 39 | + * 平衡车距内部方法。 | ||
| 40 | + * @param dirBc {array} 单方向班次列表 | ||
| 41 | + * @param bcList {array} 所有班次列表对象 | ||
| 42 | + * @param dataMap {array} 参数对象 | ||
| 43 | + * @param iFre {int} 递归次数 | ||
| 44 | + * @private | ||
| 45 | + */ | ||
| 46 | + var calculate = function (dirBc, bcList, dataMap, iFre) { | ||
| 47 | + if(iFre > 0){ | ||
| 48 | + // 升序排序 | ||
| 49 | + dirBc.sort(function(a,b){return a.fcint-b.fcint}); | ||
| 50 | + | ||
| 51 | + for (var i = 0; i <= dirBc.length; i++) { | ||
| 52 | + // 获取班次列表 | ||
| 53 | + _calcuBcGroup(i, dirBc); | ||
| 54 | + | ||
| 55 | + if (dirBcOfGroup.length > 0) { | ||
| 56 | + // 获取中间预调整的班次时间 | ||
| 57 | + oBcFcTime = dirBcOfGroup[1].fcint; | ||
| 58 | + // 获取发车间隙:用发车时间判断 | ||
| 59 | + var fcjx = dataMap.fcjx[judgmentTimeQuantum(oBcFcTime)]; | ||
| 60 | + // 发车时间所在时间段 | ||
| 61 | + // var timeQuantum = judgmentTimeQuantum(oBcFcTime); | ||
| 62 | + if (dirBcIntervalOfGroup[0] < fcjx.min) { | ||
| 63 | + // 发车间隙调整为高峰发车间隙 +时间 | ||
| 64 | + if (_isModifyBcFcsj( | ||
| 65 | + bcList, | ||
| 66 | + dirBcOfGroup[1], | ||
| 67 | + dataMap, | ||
| 68 | + 1 | ||
| 69 | + )) { | ||
| 70 | + _modifyFcsj( | ||
| 71 | + bcList, | ||
| 72 | + dirBcOfGroup[1], | ||
| 73 | + dataMap, | ||
| 74 | + 1 | ||
| 75 | + ); | ||
| 76 | + } | ||
| 77 | + } else if (dirBcIntervalOfGroup[0] > fcjx.max) { | ||
| 78 | + // 发车间隙调整为高峰发车间隙 -时间 | ||
| 79 | + if (_isModifyBcFcsj( | ||
| 80 | + bcList, | ||
| 81 | + dirBcOfGroup[1], | ||
| 82 | + dataMap, | ||
| 83 | + -1 | ||
| 84 | + )) { | ||
| 85 | + _modifyFcsj( | ||
| 86 | + bcList, | ||
| 87 | + dirBcOfGroup[1], | ||
| 88 | + dataMap, | ||
| 89 | + -1 | ||
| 90 | + ); | ||
| 91 | + } | ||
| 92 | + } else { | ||
| 93 | + // -1或+1分钟 | ||
| 94 | + if (Math.abs(dirBcIntervalOfGroup[0] - dirBcIntervalOfGroup[1]) <= 1) { | ||
| 95 | + // 两个间隔相差1分钟,不处理 | ||
| 96 | + } else if (dirBcIntervalOfGroup[0] > dirBcIntervalOfGroup[1]) { | ||
| 97 | + if (_isModifyBcFcsj( | ||
| 98 | + bcList, | ||
| 99 | + dirBcOfGroup[1], | ||
| 100 | + dataMap, | ||
| 101 | + -1 | ||
| 102 | + )) { | ||
| 103 | + _modifyFcsj( | ||
| 104 | + bcList, | ||
| 105 | + dirBcOfGroup[1], | ||
| 106 | + dataMap, | ||
| 107 | + -1 | ||
| 108 | + ); | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + if (_isModifyBcFcsj( | ||
| 112 | + bcList, | ||
| 113 | + dirBcOfGroup[1], | ||
| 114 | + dataMap, | ||
| 115 | + 1 | ||
| 116 | + )) { | ||
| 117 | + _modifyFcsj( | ||
| 118 | + bcList, | ||
| 119 | + dirBcOfGroup[1], | ||
| 120 | + dataMap, | ||
| 121 | + 1 | ||
| 122 | + ); | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | + // bcFun.deleteNotInRangeBc(dirBc, dataMap.smbcsjArr[].kssj, dataMap.smbcsjArr[].jssj); | ||
| 129 | + // 递归迭代 | ||
| 130 | + calculate(dirBc, bcList, dataMap, iFre - 1); | ||
| 131 | + } | ||
| 132 | + }; | ||
| 133 | + /** | ||
| 134 | + * 按照规则计算班次列表。 | ||
| 135 | + * @param iStartIndex {int} 开始索引 | ||
| 136 | + * @param dirBc {array} 班次列表 | ||
| 137 | + * @private | ||
| 138 | + */ | ||
| 139 | + var _calcuBcGroup = function(iStartIndex, dirBc) { | ||
| 140 | + dirBcOfGroup = []; | ||
| 141 | + dirBcIntervalOfGroup = []; | ||
| 142 | + for (var i = iStartIndex; i < iStartIndex + iBcCountOfGroup && iStartIndex < dirBc.length - 2; i++) { | ||
| 143 | + dirBcOfGroup.push(dirBc[i]); | ||
| 144 | + } | ||
| 145 | + for (var j = 0; j < dirBcOfGroup.length - 1; j++) { | ||
| 146 | + dirBcIntervalOfGroup.push((DateTimeTool.getDateTime(dirBcOfGroup[j + 1].fcsj).getTime() - DateTimeTool.getDateTime(dirBcOfGroup[j].fcsj).getTime())/60000); | ||
| 147 | + // dirBcIntervalOfGroup.push(Math.round((dirBcOfGroup[j + 1].fcint - dirBcOfGroup[j].fcint)/360000)); | ||
| 148 | + } | ||
| 149 | + }; | ||
| 150 | + | ||
| 151 | + /** | ||
| 152 | + * 是否可以调整班次发车时间。 | ||
| 153 | + * @param bcList {InternalLpObj} 所有班次对象 | ||
| 154 | + * @param oBc {InternalBcObj} 调整班次对象 | ||
| 155 | + * @param iStep {int} 修正时间步长 | ||
| 156 | + * @private | ||
| 157 | + */ | ||
| 158 | + function _isModifyBcFcsj(bcList, oBc, dataMap, iStep) { | ||
| 159 | + // 获取前后班次 | ||
| 160 | + var bc = getLpPrevAndNextBc(bcList, oBc), | ||
| 161 | + prevBc = bc[0], | ||
| 162 | + nextBc = bc[1]; | ||
| 163 | + if (prevBc != null && nextBc != null){ | ||
| 164 | + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间 | ||
| 165 | + return false; | ||
| 166 | + } | ||
| 167 | + // 上一个班次的停站范围, 本班次停站范围, 上一班次停站时间, 本班次停站时间 | ||
| 168 | + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)], | ||
| 169 | + StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][judgmentTimeQuantum(oBc.fcint)], | ||
| 170 | + // prevBcStopTime = prevBc.STOPTIME + iStep, | ||
| 171 | + // BcStopTime = oBc.STOPTIME + iStep; | ||
| 172 | + // iStep为班次往后移动的时间,调整后的时间 = 停站 - 往后移动的时间 | ||
| 173 | + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep, | ||
| 174 | + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep; | ||
| 175 | + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 | ||
| 176 | + if (prevBcStopTime >= 0 && BcStopTime >= 0) { | ||
| 177 | + return true; | ||
| 178 | + } else { | ||
| 179 | + return false; | ||
| 180 | + } | ||
| 181 | + } else if(prevBc == null && nextBc != null) { | ||
| 182 | + var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][judgmentTimeQuantum(nextBc.fcint)], | ||
| 183 | + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep; | ||
| 184 | + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 TODO:没有判定调整发车时间后会不会不够 | ||
| 185 | + if (BcStopTime >= 0) { | ||
| 186 | + return true; | ||
| 187 | + } else { | ||
| 188 | + return false; | ||
| 189 | + } | ||
| 190 | + // 如果是第一个班次为空 | ||
| 191 | + } else if(prevBc != null && nextBc == null) { | ||
| 192 | + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间 | ||
| 193 | + return false; | ||
| 194 | + } | ||
| 195 | + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)], | ||
| 196 | + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep; | ||
| 197 | + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 | ||
| 198 | + if (prevBcStopTime >= 0) { | ||
| 199 | + return true; | ||
| 200 | + } else { | ||
| 201 | + return false; | ||
| 202 | + } | ||
| 203 | + } | ||
| 204 | + } | ||
| 205 | + /*function _isModifyBcFcsj(bcList, oBc, dataMap, iStep) { | ||
| 206 | + // 获取前后班次 | ||
| 207 | + var bc = getLpPrevAndNextBc(bcList, oBc), | ||
| 208 | + prevBc = bc[0], | ||
| 209 | + nextBc = bc[1]; | ||
| 210 | + if (prevBc != null && nextBc != null){ | ||
| 211 | + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间 | ||
| 212 | + return false; | ||
| 213 | + } | ||
| 214 | + // 上一个班次的停站范围, 本班次停站范围, 上一班次停站时间, 本班次停站时间 | ||
| 215 | + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)], | ||
| 216 | + StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][judgmentTimeQuantum(oBc.fcint)], | ||
| 217 | + // prevBcStopTime = prevBc.STOPTIME + iStep, | ||
| 218 | + // BcStopTime = oBc.STOPTIME + iStep; | ||
| 219 | + // iStep为班次往后移动的时间,调整后的时间 = 停站 - 往后移动的时间 | ||
| 220 | + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep, | ||
| 221 | + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep; | ||
| 222 | + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 | ||
| 223 | + if (prevBcStopTime >= prevStopTimeScope.min && BcStopTime >= StopTimeScope.min) { | ||
| 224 | + return true; | ||
| 225 | + } else { | ||
| 226 | + return false; | ||
| 227 | + } | ||
| 228 | + } else if(prevBc == null && nextBc != null) { | ||
| 229 | + var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][judgmentTimeQuantum(nextBc.fcint)], | ||
| 230 | + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep; | ||
| 231 | + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 TODO:没有判定调整发车时间后会不会不够 | ||
| 232 | + if (BcStopTime >= StopTimeScope.min) { | ||
| 233 | + return true; | ||
| 234 | + } else { | ||
| 235 | + return false; | ||
| 236 | + } | ||
| 237 | + // 如果是第一个班次为空 | ||
| 238 | + } else if(prevBc != null && nextBc == null) { | ||
| 239 | + if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间 | ||
| 240 | + return false; | ||
| 241 | + } | ||
| 242 | + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)], | ||
| 243 | + prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep; | ||
| 244 | + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 | ||
| 245 | + if (prevBcStopTime >= prevStopTimeScope.min) { | ||
| 246 | + return true; | ||
| 247 | + } else { | ||
| 248 | + return false; | ||
| 249 | + } | ||
| 250 | + } | ||
| 251 | + }*/ | ||
| 252 | + | ||
| 253 | + /** | ||
| 254 | + * 调整发车时间(调整当前班次后,需要处理后续路牌的所有班次)。 | ||
| 255 | + * @param olp {InternalLpObj} 路牌对象 | ||
| 256 | + * @param oBc {InternalBcObj} 班次对象 | ||
| 257 | + * @param iMin {int} 分钟 | ||
| 258 | + * @param dataMap 参数对象 | ||
| 259 | + * @private | ||
| 260 | + */ | ||
| 261 | + function _modifyFcsj(bcList, oBc, dataMap, iMin) { | ||
| 262 | + var bc = getLpPrevAndNextBc(bcList, oBc), | ||
| 263 | + prevBc = bc[0], | ||
| 264 | + nextBc = bc[1]; | ||
| 265 | + var fcsj = DateTimeTool.getDateTime(oBc.fcsj); | ||
| 266 | + fcsj.setMinutes(fcsj.getMinutes() + iMin); | ||
| 267 | + $.each(bcList, function () { | ||
| 268 | + if(this.lpNo == oBc.lpNo && this.fcno == oBc.fcno){ | ||
| 269 | + var time = new Date(fcsj); | ||
| 270 | + this.ARRIVALTIME = DateTimeTool.getHHmmStr(time.setMinutes(time.getMinutes() + this.bcsj)); | ||
| 271 | + this.fcsj = DateTimeTool.getHHmmStr(fcsj); | ||
| 272 | + this.fcint = fcsj.getTime(); | ||
| 273 | + // 前一个班次停站时间 = 原停站时间 - 中间班次移动时间 | ||
| 274 | + this.STOPTIME -= iMin; | ||
| 275 | + } | ||
| 276 | + if(prevBc != undefined && prevBc != null && this.lpNo == oBc.lpNo && this.fcno == prevBc.fcno){ | ||
| 277 | + // 前一个班次停站时间 = 原停站时间 + 中间班次移动时间 | ||
| 278 | + this.STOPTIME += iMin; | ||
| 279 | + } | ||
| 280 | + }); | ||
| 281 | + } | ||
| 282 | + // 获取班次前后班次 | ||
| 283 | + var getLpPrevAndNextBc = function (bcList, oBc) { | ||
| 284 | + var lpBc = new Array(), | ||
| 285 | + // 前一个班次 | ||
| 286 | + prevBc = null, nextBc = null; | ||
| 287 | + $.each(bcList, function () { | ||
| 288 | + if(this.lpNo == oBc.lpNo) | ||
| 289 | + lpBc.push(this); | ||
| 290 | + }); | ||
| 291 | + lpBc.sort(function (a,b) {return a.fcint - b.fcint;}); | ||
| 292 | + for(var n = 0; n < lpBc.length; n++) { | ||
| 293 | + if(lpBc[n].fcno == oBc.fcno && n > 0) | ||
| 294 | + prevBc = lpBc[n-1]; | ||
| 295 | + if(lpBc[n].fcno == oBc.fcno && n < lpBc.length-1) | ||
| 296 | + nextBc = lpBc[n+1]; | ||
| 297 | + } | ||
| 298 | + return [prevBc, nextBc]; | ||
| 299 | + }; | ||
| 300 | + // 判断时间在什么时间段段内 | ||
| 301 | + /** | ||
| 302 | + * 判断时间在什么时间段段内 | ||
| 303 | + * @param t 时间 | ||
| 304 | + * @private | ||
| 305 | + */ | ||
| 306 | + var judgmentTimeQuantum = function (t) { | ||
| 307 | + if(t <= DateTimeTool.getDateTime('6:30')) | ||
| 308 | + return 0; | ||
| 309 | + else if(t > DateTimeTool.getDateTime('6:30') && t <= DateTimeTool.getDateTime('8:30')) | ||
| 310 | + return 1; | ||
| 311 | + else if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('16:00')) | ||
| 312 | + return 2; | ||
| 313 | + else if(t > DateTimeTool.getDateTime('16:00') && t <= DateTimeTool.getDateTime('18:00')) | ||
| 314 | + return 3; | ||
| 315 | + else if(t > DateTimeTool.getDateTime('18:00')) | ||
| 316 | + return 4; | ||
| 317 | + }; | ||
| 318 | + return { | ||
| 319 | + departureClearanceAdjust : departureClearanceAdjust | ||
| 320 | + } | ||
| 321 | +}(); | ||
| 0 | \ No newline at end of file | 322 | \ No newline at end of file |
src/main/resources/static/pages/base/timesmodel/js/v1/bcFun.js
0 → 100644
| 1 | +/** | ||
| 2 | + * 内部班次对象。 | ||
| 3 | + * @param lpObj 内部路牌对象 | ||
| 4 | + * @param groupObj 内部圈对象 | ||
| 5 | + * @param otherParamObj 其他参数对象 | ||
| 6 | + * @constructor InternalBcObj | ||
| 7 | + */ | ||
| 8 | +var bcFun = function() { | ||
| 9 | + | ||
| 10 | + | ||
| 11 | + /** | ||
| 12 | + * @discription : (TODO) 封装班次属性值 | ||
| 13 | + * | ||
| 14 | + * @params : [t--起始时间;bcsj--班次历时;c--lp对象属性值;type--类型] | ||
| 15 | + * | ||
| 16 | + * @params : [dir--方向;bcs--序号;jhlc--计划里程;gatps--表单参数对象] | ||
| 17 | + * | ||
| 18 | + * @params : [isfb--是否分班;qdz--起点站;zdz--终点站;isSwitchXl--是否切割线路;st--停站时间] | ||
| 19 | + * | ||
| 20 | + * @return : 返回班次对象属性值 | ||
| 21 | + * | ||
| 22 | + */ | ||
| 23 | + var getbcObj = function(t,bcsj,c,type,dir,xh,jhlc,gatps,isfb,qdz,zdz,isSwitchXl,st,lbsj) { | ||
| 24 | + var obj = {}; | ||
| 25 | + obj.parent = c.lpNo; | ||
| 26 | + obj.lpNo = c.lpNo; | ||
| 27 | + obj.lp = c.lp; | ||
| 28 | + obj.lpName = c.lpName; | ||
| 29 | + obj.lpType = c.lpType; | ||
| 30 | + obj.bcType = type; | ||
| 31 | + obj.xlDir = dir; | ||
| 32 | + obj.fcno = xh; | ||
| 33 | + obj.jhlc = jhlc;// 计划里程 | ||
| 34 | + obj.tcc = gatps.tcc_id;// 停车场id | ||
| 35 | + obj.ttinfo = gatps.skbName;// 时刻表id | ||
| 36 | + obj.xl = gatps.lineName.split('_')[0];// 线路id | ||
| 37 | + obj.isfb = isfb; | ||
| 38 | + obj.qdz = qdz; | ||
| 39 | + obj.zdz = zdz; | ||
| 40 | + obj.isSwitchXl = isSwitchXl; | ||
| 41 | + obj.STOPTIME = st; | ||
| 42 | + obj.bz = null; | ||
| 43 | + var startTime = null; | ||
| 44 | + if(type == 'bd' || type == 'out' || type == 'in' || type == 'lc') | ||
| 45 | + startTime = new Date(t); | ||
| 46 | + else | ||
| 47 | + startTime = t; | ||
| 48 | + if(type=='bd' || type=='lc' ) | ||
| 49 | + obj.bcsj = lbsj; | ||
| 50 | + else | ||
| 51 | + obj.bcsj = bcsj; | ||
| 52 | + if(type=='bd') { | ||
| 53 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()-bcsj)); | ||
| 54 | + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime); | ||
| 55 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()-lbsj)); | ||
| 56 | + obj.fcsj = DateTimeTool.getHHmmStr(startTime); | ||
| 57 | + }else if(type=='out') { | ||
| 58 | + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime); | ||
| 59 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()-bcsj)); | ||
| 60 | + obj.fcsj = DateTimeTool.getHHmmStr(startTime); | ||
| 61 | + }else if(type =='cf') { | ||
| 62 | + obj.fcsj = DateTimeTool.getHHmmStr(startTime); | ||
| 63 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj)); | ||
| 64 | + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime); | ||
| 65 | + }else if(type=='lc') { | ||
| 66 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj)); | ||
| 67 | + obj.fcsj = DateTimeTool.getHHmmStr(startTime); | ||
| 68 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+lbsj)); | ||
| 69 | + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime); | ||
| 70 | + }else if(type=='in') { | ||
| 71 | + obj.fcsj = DateTimeTool.getHHmmStr(startTime); | ||
| 72 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj)); | ||
| 73 | + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime); | ||
| 74 | + }else if(type=='normal') { | ||
| 75 | + obj.fcsj = DateTimeTool.getHHmmStr(startTime); | ||
| 76 | + startTime = new Date(startTime.setMinutes(startTime.getMinutes()+bcsj)); | ||
| 77 | + obj.ARRIVALTIME = DateTimeTool.getHHmmStr(startTime); | ||
| 78 | + } | ||
| 79 | + return obj; | ||
| 80 | + }; | ||
| 81 | + /** | ||
| 82 | + * 修正班次停车时间 | ||
| 83 | + * @param bcList 所有班次集合 | ||
| 84 | + * @param lpNo 修改班次所在路牌 | ||
| 85 | + * @param dataMap 参数 | ||
| 86 | + */ | ||
| 87 | + var adjustBcStopTime = function (bcList, lpNo, dataMap) { | ||
| 88 | + bcList; | ||
| 89 | + }; | ||
| 90 | + | ||
| 91 | + // 上下行字符串转换数字 | ||
| 92 | + var upDownStrConvertNum = function (dir) { | ||
| 93 | + return dir == "relationshipGraph-up" ? 0: 1; | ||
| 94 | + }; | ||
| 95 | + /** | ||
| 96 | + * @description (TODO) 剔除不在上、下行时间范围内的班次. | ||
| 97 | + * @param jsonArray 初始化路牌下的所有班次并且已经均匀发车间隙的数组集合. | ||
| 98 | + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | ||
| 99 | + */ | ||
| 100 | + var markFirstAndLastBusAlsoDietNotInRangeBc = function(jsonArray , dataMap) { | ||
| 101 | + // 定义上、下行的正常、区间、空放、直放班次、返回数组集合. | ||
| 102 | + var listMap = getUpAndDownBc( jsonArray , dataMap) , resultArray = new Array(); | ||
| 103 | + for(var i = 0 ; i < listMap.length ; i++) { | ||
| 104 | + if(listMap[i].length > 0){ | ||
| 105 | + // 剔除不在时间范围内的班次 | ||
| 106 | + deleteNotInRangeBc(listMap[i] , dataMap.smbcsjArr[i].kssj, dataMap.smbcsjArr[i].jssj); | ||
| 107 | + // 把班次顺序排序. | ||
| 108 | + listMap[i].sort(function(a,b){return a.fcint-b.fcint}); | ||
| 109 | + } | ||
| 110 | + resultArray = resultArray.concat(listMap[i]); | ||
| 111 | + } | ||
| 112 | + return resultArray; | ||
| 113 | + }; | ||
| 114 | + /** | ||
| 115 | + * @desription (TODO) 剔除不在时间范围内的班次. | ||
| 116 | + * @param ar 某方向下的班次. | ||
| 117 | + * @param 开始时间. | ||
| 118 | + * @param 结束时间. | ||
| 119 | + */ | ||
| 120 | + var deleteNotInRangeBc = function(ar , kssj , jssj) { | ||
| 121 | + for(var s = 0 ; s < ar.length ; s++) { | ||
| 122 | + if(isDelete(DateTimeTool.getDateTime(kssj), DateTimeTool.getDateTime(jssj), DateTimeTool.getDateTime(ar[s].fcsj))) { | ||
| 123 | + ar.splice(s, 1); | ||
| 124 | + s--; | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + }; | ||
| 128 | + /** | ||
| 129 | + * @description (TODO) 获取 上、下行的正常、区间、空放、直放班次. | ||
| 130 | + * @param 需要分割的班次数据集合. | ||
| 131 | + * @param 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | ||
| 132 | + */ | ||
| 133 | + var getUpAndDownBc = function(json,dataMap) { | ||
| 134 | + // 定义上行班次 、 下行班次 数组集合、返回数组集合对象. | ||
| 135 | + var upArray = new Array(),downArray = new Array(),rs = new Array(); | ||
| 136 | + for(var j = 0 ; j< json.length ; j++) { | ||
| 137 | + // 判断是否为正常、区间、空放、直放班次 | ||
| 138 | + if(json[j].bcType== dataMap.bcTypeArr.normal || | ||
| 139 | + json[j].bcType== dataMap.bcTypeArr.region || | ||
| 140 | + json[j].bcType== dataMap.bcTypeArr.major || | ||
| 141 | + json[j].bcType== dataMap.bcTypeArr.venting) { | ||
| 142 | + if(json[j].xlDir == dataMap.dira[0]) | ||
| 143 | + upArray.push(json[j]); | ||
| 144 | + else if(json[j].xlDir == dataMap.dira[1]) | ||
| 145 | + downArray.push(json[j]); | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + rs.push(upArray,downArray); | ||
| 149 | + // 返回数据. | ||
| 150 | + return rs; | ||
| 151 | + }; | ||
| 152 | + var isDelete = function(t1,t2,t) { | ||
| 153 | + var tag = false; | ||
| 154 | + if(t<t1 || t>t2) | ||
| 155 | + tag = true; | ||
| 156 | + return tag; | ||
| 157 | + }; | ||
| 158 | + /** | ||
| 159 | + * @description (TODO) 添加进出场班次. | ||
| 160 | + * @param cara 路牌 | ||
| 161 | + * @param rsjar 班次集合数组 | ||
| 162 | + * @param dataMap dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | ||
| 163 | + * @param map 表单参数对象. | ||
| 164 | + * | ||
| 165 | + */ | ||
| 166 | + var addInOutFieldBc = function(cara,rsjar,dataMap,map) { | ||
| 167 | + var resultJA = new Array(),bcs = 0; | ||
| 168 | + for(var m = 0 ; m < cara.length; m++) { | ||
| 169 | + // 获取路牌编号. | ||
| 170 | + var lpNo_ = cara[m].lpNo; | ||
| 171 | + // 定义路牌下的所有班次. | ||
| 172 | + var lpbc_ = new Array(); | ||
| 173 | + // 遍历班次数. | ||
| 174 | + for(var x =0 ; x <rsjar.length; x++) { | ||
| 175 | + // 判断当期遍历的班次是否属于当前的路牌. | ||
| 176 | + if(rsjar[x].lpNo == lpNo_) { | ||
| 177 | + delete rsjar[x].fcint; | ||
| 178 | + lpbc_.push(rsjar[x]); | ||
| 179 | + } | ||
| 180 | + } | ||
| 181 | + // 按照发车序号顺序排序. | ||
| 182 | + lpbc_.sort(function(a,b){return a.fcno-b.fcno}); | ||
| 183 | + addcfbc01(lpbc_,dataMap,map); | ||
| 184 | + // 按照发车序号顺序排序. | ||
| 185 | + lpbc_.sort(function(a,b){return a.fcno-b.fcno}); | ||
| 186 | + var tt = addjclbbc01(lpbc_,dataMap,dataMap.lbsj,map); | ||
| 187 | + bcs = updfcno(tt,bcs); | ||
| 188 | + resultJA = resultJA.concat(tt); | ||
| 189 | + } | ||
| 190 | + return resultJA; | ||
| 191 | + }; | ||
| 192 | + | ||
| 193 | + var updfcno = function(bcArr,bcs) { | ||
| 194 | + for(var i =0; i < bcArr.length;i++) { | ||
| 195 | + bcArr[i].fcint = DateTimeTool.getDateTime(bcArr[i].fcsj).getTime(); | ||
| 196 | + } | ||
| 197 | + bcArr.sort(function(a,b){return a.fcint-b.fcint}); | ||
| 198 | + for(var t = 0 ; t <bcArr.length;t++) { | ||
| 199 | + bcs++; | ||
| 200 | + bcArr[t].bcs = bcs; | ||
| 201 | + bcArr[t].fcno = t+1; | ||
| 202 | + delete bcArr[t].fcint; | ||
| 203 | + } | ||
| 204 | + return bcs; | ||
| 205 | + }; | ||
| 206 | + | ||
| 207 | + | ||
| 208 | + /** | ||
| 209 | + * @description : (TODO) 添加进出场班次、早晚例保班次. | ||
| 210 | + * | ||
| 211 | + * @param [bc--路牌下的所有班次;dataMap--参数信息;lbsj--例保时间] | ||
| 212 | + * | ||
| 213 | + */ | ||
| 214 | + var addjclbbc01 = function(bc,dataMap,lbsj,gatps) { | ||
| 215 | + if(bc.length>0) | ||
| 216 | + bc[bc.length-1].STOPTIME = 0; | ||
| 217 | + var result = new Array(); | ||
| 218 | + var fcno = 0,dxfno = 0,stas = false; | ||
| 219 | + for(var b = 0 ; b < bc.length;b++) { | ||
| 220 | + var fxdm = dirDmToIndex(bc[b].xlDir); | ||
| 221 | + var car = {'lp':bc[b].lp, 'lpNo':bc[b].lpNo, 'lpName':bc[b].lpName, 'lpType':bc[b].lpType }; | ||
| 222 | + if(b==0) { | ||
| 223 | + var dqbcfcsj = DateTimeTool.getDateTime(bc[b].fcsj); | ||
| 224 | + result.push(getbcObj( | ||
| 225 | + dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.bd, | ||
| 226 | + dataMap.dira[fxdm],1,0,gatps,0,null,null,null,0,lbsj));// 早行例保班次 | ||
| 227 | + result.push(getbcObj( | ||
| 228 | + dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.out, | ||
| 229 | + dataMap.dira[fxdm],2,dataMap.cclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 出场班次 | ||
| 230 | + fcno ++; | ||
| 231 | + }else if(b==bc.length-1){ | ||
| 232 | + var fcno_ = dxfno + 2; | ||
| 233 | + var qdbcddsj = DateTimeTool.getDateTime(bc[b].ARRIVALTIME); | ||
| 234 | + result.push(getbcObj( | ||
| 235 | + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_, | ||
| 236 | + dataMap.dira[fxdm],fcno_++,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次 | ||
| 237 | + result.push(getbcObj( | ||
| 238 | + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.lc, | ||
| 239 | + dataMap.dira[fxdm],fcno_++,0,gatps,0,null,null,null,0,lbsj));// 晚班例保班次 | ||
| 240 | + } | ||
| 241 | + dxfno = bc[b].fcno + fcno; | ||
| 242 | + bc[b].fcno = dxfno; | ||
| 243 | + if(stas) { | ||
| 244 | + fcno ++; | ||
| 245 | + stas = false; | ||
| 246 | + } | ||
| 247 | + result.push(bc[b]); | ||
| 248 | + } | ||
| 249 | + return result; | ||
| 250 | + }; | ||
| 251 | + | ||
| 252 | + var addcfbc01 = function(lpbcar,dataMap,map) { | ||
| 253 | + var gs = 0 ,sicftag = true; | ||
| 254 | + for(var g = 0 ; g <lpbcar.length-1;g++ ) { | ||
| 255 | + if( parseInt((DateTimeTool.getDateTime(lpbcar[g+1].fcsj) - DateTimeTool.getDateTime(lpbcar[g].ARRIVALTIME))/60000) > 180 | ||
| 256 | + && lpbcar[g].STOPTIME==0 && lpbcar[g].bcType =='normal' ) { | ||
| 257 | + lpbcar[g].isfb = 1; | ||
| 258 | + } | ||
| 259 | + } | ||
| 260 | + }; | ||
| 261 | + var dirDmToIndex = function (str) { | ||
| 262 | + if(str == 'relationshipGraph-up') | ||
| 263 | + return 0; | ||
| 264 | + else if(str == 'relationshipGraph-down') | ||
| 265 | + return 1; | ||
| 266 | + }; | ||
| 267 | + | ||
| 268 | + return{ | ||
| 269 | + getbcObj : getbcObj, //封装班次属性值 | ||
| 270 | + upDownStrConvertNum : upDownStrConvertNum, | ||
| 271 | + deleteNotInRangeBc : deleteNotInRangeBc, | ||
| 272 | + markFirstAndLastBusAlsoDietNotInRangeBc : markFirstAndLastBusAlsoDietNotInRangeBc, | ||
| 273 | + getUpAndDownBc : getUpAndDownBc, | ||
| 274 | + addInOutFieldBc : addInOutFieldBc, //添加进出场班次 | ||
| 275 | + updfcno : updfcno | ||
| 276 | + } | ||
| 277 | +}(); |
src/main/resources/static/pages/base/timesmodel/js/v1/lpFun.js
0 → 100644
| 1 | +var lpFun = function () { | ||
| 2 | + var _bxDesc = [ // 班型描述(班型名称,平均工时,平均工时,平均需要的班次数) 186/月度当值标准天数 = 工时 | ||
| 3 | + {'type':'六工一休','hoursV':7.13, 'minueV':'7:08', 'qcount': 0}, | ||
| 4 | + {'type':'五工一休','hoursV':7.33, 'minueV':'7:20', 'qcount': 0}, | ||
| 5 | + {'type':'四工一休','hoursV':7.14, 'minueV':'7:08', 'qcount': 0}, | ||
| 6 | + {'type':'三工一休','hoursV':8.15, 'minueV':'8:09', 'qcount': 0}, | ||
| 7 | + {'type':'二工一休','hoursV':9.17, 'minueV':'9:10', 'qcount': 0}, | ||
| 8 | + {'type':'一工一休','hoursV':12.22, 'minueV':'12:13', 'qcount': 0}, | ||
| 9 | + {'type':'五工二休','hoursV':8.62, 'minueV':'8:37', 'qcount': 0}, | ||
| 10 | + {'type':'无工休', 'hoursV':5.43, 'minueV':'5:43', 'qcount': 0}, | ||
| 11 | + {'type':'二周三休','hoursV':7.78, 'minueV':'7:47', 'qcount': 0} | ||
| 12 | + ]; | ||
| 13 | + | ||
| 14 | + var get_bxDesc = function () { | ||
| 15 | + return _bxDesc; | ||
| 16 | + }; | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * @description (TODO) [ 切割 班型/人次/配车数 ]参数 并封装成数组集合对象. | ||
| 21 | + * @param str 切割 班型/人次/配车数 字符串. | ||
| 22 | + */ | ||
| 23 | + var getBxRcListCollection = function(str) { | ||
| 24 | + // 如果为空 , 直接return | ||
| 25 | + if(str=='' || str==null) | ||
| 26 | + return false; | ||
| 27 | + // 定义返回数组集合. | ||
| 28 | + var list = new Array(); | ||
| 29 | + // 获取各个班型对应的工时数组. | ||
| 30 | + // var _bxDesc = get_bxDesc(); | ||
| 31 | + // 按多号切开. | ||
| 32 | + var bxrcAr = str.split(','); | ||
| 33 | + if(bxrcAr.length>0) { | ||
| 34 | + for(var s = 0 ; s< bxrcAr.length;s++) { | ||
| 35 | + // 按反斜杠切开. | ||
| 36 | + var s1a = bxrcAr[s].split('/'); | ||
| 37 | + if(s1a.length >= 3) { | ||
| 38 | + // 定义人数、配车数、日平均工时. | ||
| 39 | + var rs = parseInt(s1a[1]),fpcls = parseInt(s1a[2]); | ||
| 40 | + // 定义班型标准小时系数 、 分钟系数. | ||
| 41 | + var hoursV = 0.0 , minueV = '' ; | ||
| 42 | + for(var g = 0 ; g < _bxDesc.length; g++) { | ||
| 43 | + // 如果班型字符串相同. | ||
| 44 | + if(_bxDesc[g].type == s1a[0]) { | ||
| 45 | + hoursV = _bxDesc[g].hoursV; | ||
| 46 | + minueV = _bxDesc[g].minueV; | ||
| 47 | + break; | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + if(rs == fpcls) { | ||
| 51 | + // 添加到返回数组集合中. | ||
| 52 | + list.push({'type' : s1a[0] , 'rs' : rs , 'fpcls' : fpcls , 'hoursV' : hoursV , | ||
| 53 | + 'minueV' : minueV ,'sslp':[]}); | ||
| 54 | + } else { | ||
| 55 | + // 双档路牌 | ||
| 56 | + var sdlp = rs - fpcls; | ||
| 57 | + // 添加到返回数组集合中. | ||
| 58 | + list.push({'type' : s1a[0] , 'rs' : fpcls-sdlp , 'fpcls' : fpcls-sdlp , 'hoursV' : hoursV ,'minueV' : minueV,'sslp':[]}, | ||
| 59 | + {'type' : s1a[0]+'(双档)' , 'rs' : sdlp , 'fpcls' : sdlp , 'hoursV' : hoursV*2 , 'minueV' : DateTimeTool.calculateHours(hoursV*2),'sslp':[]}); | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // 返回数据. | ||
| 65 | + return list.sort(function(a,b){return b.hoursV-a.hoursV}); | ||
| 66 | + }; | ||
| 67 | + /** | ||
| 68 | + * @description (TODO) 把班型人次合理的分配到不同的路牌上. | ||
| 69 | + * @param list 班型人次数组集合. | ||
| 70 | + * @param clzs 路牌数组. | ||
| 71 | + * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合. | ||
| 72 | + * */ | ||
| 73 | + var bxAlloTotLp = function(arr,clzs){ | ||
| 74 | + var cLen = clzs.length; | ||
| 75 | + var type = getMode(arr); | ||
| 76 | + var i=0; | ||
| 77 | + while(clzs.length > i){ | ||
| 78 | + for(var j=0; j<type.length; j++) { | ||
| 79 | + if(arr[type[j]].len-- > 0) { | ||
| 80 | + arr[type[j]].bx.sslp.push(clzs[i]); | ||
| 81 | + i++ | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + }; | ||
| 86 | + var getMode = function(arr){ | ||
| 87 | + var mode = [], bxRcList = arr; | ||
| 88 | + var count = bxRcList[0].lps; | ||
| 89 | + for(var i=1; i<bxRcList.length; i++) { | ||
| 90 | + if(bxRcList[i].lps < count) | ||
| 91 | + count = bxRcList[i].lps; | ||
| 92 | + } | ||
| 93 | + for(var i=0; i<bxRcList.length; i++) { | ||
| 94 | + bxRcList[i] = {'bx':bxRcList[i],'len':bxRcList[i].lps, 'ratio':Math.round(bxRcList[i].lps/count)} | ||
| 95 | + } | ||
| 96 | + for(var i=0; i<bxRcList.length; i++) { | ||
| 97 | + for(var j=0; j<bxRcList[i].ratio; j++) { | ||
| 98 | + mode.push(i); | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + // for(var m=0; m<mode.length-2; m++) { | ||
| 102 | + // if(mode[m] == mode[m+1]) { | ||
| 103 | + // var a = mode[m+1]; | ||
| 104 | + // mode[m+1] = mode[m+2]; | ||
| 105 | + // mode[m+2] = a; | ||
| 106 | + // } | ||
| 107 | + // } | ||
| 108 | + return mode; | ||
| 109 | + }; | ||
| 110 | + // 路牌整理 | ||
| 111 | + var lpNeaten = function (bxRcList, carList, dataMap) { | ||
| 112 | + var carListH = new Array(); | ||
| 113 | + // 取出有工时的路牌 | ||
| 114 | + for (var i = 0; i < bxRcList.length; i++) { | ||
| 115 | + var sslp = bxRcList[i].bx.sslp, bx = bxRcList[i].bx; | ||
| 116 | + var count = Math.round(bx.hoursV / (dataMap.zzsj[1] / 60));// 早高峰周转:dataMap.zzsj[1] | ||
| 117 | + $.each(sslp, function () { | ||
| 118 | + this.hoursV = bx.hoursV; | ||
| 119 | + this.count = count; | ||
| 120 | + this.lpName = bx.type + '_' + this.lpNo; | ||
| 121 | + this.isfb = false; | ||
| 122 | + carListH.push(this); | ||
| 123 | + }); | ||
| 124 | + } | ||
| 125 | + carListH.sort(function (a, b) { | ||
| 126 | + return a.lpNo - b.lpNo | ||
| 127 | + }); | ||
| 128 | + return carListH; | ||
| 129 | + }; | ||
| 130 | + // 路牌分班 | ||
| 131 | + var lpAddFb = function (bxRcList, carList, dataMap, map) { | ||
| 132 | + // carListH:带工时和圈数的车辆list,carListCache:缓存为分班车辆 | ||
| 133 | + var carListH = [],carListCache = []; | ||
| 134 | + | ||
| 135 | + // 最少分班路牌 = 总路牌 - (低谷周转/低谷最大发车间隔)向上取整 | ||
| 136 | + var fblps = carList.length - Math.ceil((dataMap.zzsj[2]) / map.dgmaxfcjx); | ||
| 137 | + // 取出有工时的路牌 | ||
| 138 | + for (var i = 0; i < bxRcList.length; i++) { | ||
| 139 | + var sslp = bxRcList[i].bx.sslp, bx = bxRcList[i].bx; | ||
| 140 | + var count = Math.round(bx.hoursV / (dataMap.zzsj[1]/60));// 早高峰周转:dataMap.zzsj[1] | ||
| 141 | + if(bx.type == '五工二休') { | ||
| 142 | + $.each(sslp, function () { | ||
| 143 | + // this.wfpBC = 0;// 未分配班次 = 0 | ||
| 144 | + this.hoursV = bx.hoursV; | ||
| 145 | + // 圈数 = 工时/高峰周转时间(H) | ||
| 146 | + this.count = count; | ||
| 147 | + this.lpName = bx.type+'_'+this.lpNo; | ||
| 148 | + // 五休二默认分班,分班数不够,剩余的在其他路牌分班 | ||
| 149 | + this.isfb = true; | ||
| 150 | + fblps--;// 分班数 -1 | ||
| 151 | + carListH.push(this); | ||
| 152 | + }); | ||
| 153 | + } else { | ||
| 154 | + $.each(sslp, function () { | ||
| 155 | + this.hoursV = bx.hoursV; | ||
| 156 | + this.count = count; | ||
| 157 | + this.lpName = bx.type+'_'+this.lpNo; | ||
| 158 | + this.isfb = false; | ||
| 159 | + carListH.push(this); | ||
| 160 | + }); | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + if(fblps>0) { | ||
| 164 | + // 把剩余的分班数,按比例分给剩余连班路牌 | ||
| 165 | + carListCache = []; | ||
| 166 | + // 切割出连班路牌 | ||
| 167 | + cutCar(carListH,carListCache); | ||
| 168 | + var index = Math.floor(carListH.length / fblps); | ||
| 169 | + for(var s=1; s<=fblps; s++){ | ||
| 170 | + carListH[s*index].isfb = true; | ||
| 171 | + } | ||
| 172 | + } | ||
| 173 | + carListH = carListH.concat(carListCache); | ||
| 174 | + carListH.sort(function (a, b) { | ||
| 175 | + return a.lpNo - b.lpNo | ||
| 176 | + }); | ||
| 177 | + for (var i = 0; i < bxRcList.length; i++) { | ||
| 178 | + bxRcList[i] = bxRcList[i].bx; | ||
| 179 | + } | ||
| 180 | + return carListH; | ||
| 181 | + }; | ||
| 182 | + // 确定路牌分班数 | ||
| 183 | + var lpfbs = function (fblps, bxRcList, index) { | ||
| 184 | + if(fblps > bxRcList[index].lps){ | ||
| 185 | + fblps = fblps - bxRcList[index].lps; | ||
| 186 | + bxRcList[index].fblps = bxRcList[index].lps; | ||
| 187 | + lpfbs(fblps, bxRcList, --index); | ||
| 188 | + } else { | ||
| 189 | + bxRcList[index].fblps = fblps; | ||
| 190 | + } | ||
| 191 | + }; | ||
| 192 | + | ||
| 193 | + /** | ||
| 194 | + * @description (TODO) 把班型人次合理的分配到不同的路牌上. | ||
| 195 | + * @param list 班型人次数组集合. | ||
| 196 | + * @param clzs 路牌数组. | ||
| 197 | + * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合. | ||
| 198 | + * */ | ||
| 199 | + var bxAlloTotLp = function(arr,clzs){ | ||
| 200 | + var fblp=0,lblp=0; | ||
| 201 | + for(var j=0; j<arr.length; j++) { | ||
| 202 | + if(arr[j].ifsb) { | ||
| 203 | + arr[type[j]].bx.sslp.push(clzs[i]); | ||
| 204 | + i++ | ||
| 205 | + } | ||
| 206 | + } | ||
| 207 | + var cLen = clzs.length; | ||
| 208 | + var type = getMode(arr); | ||
| 209 | + var i=0; | ||
| 210 | + while(clzs.length > i){ | ||
| 211 | + for(var j=0; j<type.length; j++) { | ||
| 212 | + if(arr[type[j]].len-- > 0) { | ||
| 213 | + arr[type[j]].bx.sslp.push(clzs[i]); | ||
| 214 | + i++ | ||
| 215 | + } | ||
| 216 | + } | ||
| 217 | + } | ||
| 218 | + }; | ||
| 219 | + var getMode = function(arr){ | ||
| 220 | + var mode = [], bxRcList = arr; | ||
| 221 | + var count = bxRcList[0].fpcls; | ||
| 222 | + for(var i=1; i<bxRcList.length; i++) { | ||
| 223 | + if(bxRcList[i].fpcls < count) | ||
| 224 | + count = bxRcList[i].fpcls; | ||
| 225 | + } | ||
| 226 | + for(var i=0; i<bxRcList.length; i++) { | ||
| 227 | + bxRcList[i] = {'bx':bxRcList[i],'len':bxRcList[i].fpcls, 'ratio':Math.round(bxRcList[i].fpcls/count)} | ||
| 228 | + } | ||
| 229 | + for(var i=0; i<bxRcList.length; i++) { | ||
| 230 | + for(var j=0; j<bxRcList[i].ratio; j++) { | ||
| 231 | + mode.push(i); | ||
| 232 | + } | ||
| 233 | + } | ||
| 234 | + // for(var m=0; m<mode.length-2; m++) { | ||
| 235 | + // if(mode[m] == mode[m+1]) { | ||
| 236 | + // var a = mode[m+1]; | ||
| 237 | + // mode[m+1] = mode[m+2]; | ||
| 238 | + // mode[m+2] = a; | ||
| 239 | + // } | ||
| 240 | + // } | ||
| 241 | + return mode; | ||
| 242 | + }; | ||
| 243 | + return { | ||
| 244 | + getBxRcListCollection : getBxRcListCollection, // [ 切割 班型/人次/配车数 ]参数 并封装成数组集合对象. | ||
| 245 | + bxAlloTotLp : bxAlloTotLp, // 把班型人次合理的分配到不同的路牌上 | ||
| 246 | + lpAddFb : lpAddFb, // 路牌分班 | ||
| 247 | + lpNeaten : lpNeaten, // 路牌整理 | ||
| 248 | + get_bxDesc : get_bxDesc, // 获取路牌类型 | ||
| 249 | + } | ||
| 250 | +}(); | ||
| 0 | \ No newline at end of file | 251 | \ No newline at end of file |