Commit 9955cf0fda3874ce54e35470bdb13a1d140c56d4
1 parent
a3082e3a
站点间预测样本页面
Showing
10 changed files
with
199 additions
and
87 deletions
src/main/java/com/bsth/controller/forecast/SampleController.java
| 1 | 1 | package com.bsth.controller.forecast; |
| 2 | 2 | |
| 3 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 3 | 4 | import org.springframework.web.bind.annotation.RequestMapping; |
| 4 | 5 | import org.springframework.web.bind.annotation.RestController; |
| 5 | 6 | |
| 6 | 7 | import com.bsth.controller.BaseController; |
| 7 | 8 | import com.bsth.entity.forecast.Sample; |
| 9 | +import com.bsth.service.forecast.SampleService; | |
| 8 | 10 | |
| 9 | 11 | @RestController |
| 10 | 12 | @RequestMapping("sample") |
| 11 | 13 | public class SampleController extends BaseController<Sample, Long>{ |
| 12 | 14 | |
| 15 | + @Autowired | |
| 16 | + SampleService sampleService; | |
| 17 | + | |
| 18 | + @RequestMapping("/create/gps") | |
| 19 | + public int createDataByGps(String lineCode, Integer updown){ | |
| 20 | + return sampleService.createDataByGps(lineCode, updown); | |
| 21 | + } | |
| 13 | 22 | } | ... | ... |
src/main/java/com/bsth/data/BasicData.java
| ... | ... | @@ -75,7 +75,7 @@ public class BasicData implements CommandLineRunner{ |
| 75 | 75 | |
| 76 | 76 | @Override |
| 77 | 77 | public void run(String... arg0) throws Exception { |
| 78 | - Application.mainServices.scheduleWithFixedDelay(dataLoader, 0, 2, TimeUnit.HOURS); | |
| 78 | + Application.mainServices.scheduleWithFixedDelay(dataLoader, 0, 1, TimeUnit.HOURS); | |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | 81 | ... | ... |
src/main/java/com/bsth/repository/forecast/SampleRepository.java
| 1 | 1 | package com.bsth.repository.forecast; |
| 2 | 2 | |
| 3 | +import org.springframework.data.jpa.repository.Modifying; | |
| 4 | +import org.springframework.data.jpa.repository.Query; | |
| 3 | 5 | import org.springframework.stereotype.Repository; |
| 6 | +import org.springframework.transaction.annotation.Transactional; | |
| 4 | 7 | |
| 5 | 8 | import com.bsth.entity.forecast.Sample; |
| 6 | 9 | import com.bsth.repository.BaseRepository; |
| ... | ... | @@ -8,4 +11,9 @@ import com.bsth.repository.BaseRepository; |
| 8 | 11 | @Repository |
| 9 | 12 | public interface SampleRepository extends BaseRepository<Sample, Long>{ |
| 10 | 13 | |
| 14 | + | |
| 15 | + @Transactional | |
| 16 | + @Modifying | |
| 17 | + @Query("delete Sample where lineCode=?1 and updown=?2") | |
| 18 | + void deleteByLineAndUpdown(Integer lineCode, int updown); | |
| 11 | 19 | } | ... | ... |
src/main/java/com/bsth/service/forecast/SampleService.java
src/main/java/com/bsth/service/forecast/SampleServiceImpl.java
| ... | ... | @@ -3,15 +3,22 @@ package com.bsth.service.forecast; |
| 3 | 3 | import java.util.Iterator; |
| 4 | 4 | import java.util.Map; |
| 5 | 5 | |
| 6 | +import javax.transaction.Transactional; | |
| 7 | + | |
| 8 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 6 | 9 | import org.springframework.stereotype.Service; |
| 7 | 10 | |
| 8 | 11 | import com.bsth.data.BasicData; |
| 9 | 12 | import com.bsth.entity.forecast.Sample; |
| 13 | +import com.bsth.repository.forecast.SampleRepository; | |
| 10 | 14 | import com.bsth.service.impl.BaseServiceImpl; |
| 11 | 15 | |
| 12 | 16 | @Service |
| 13 | -public class SampleServiceImpl extends BaseServiceImpl<Sample, Long>{ | |
| 17 | +public class SampleServiceImpl extends BaseServiceImpl<Sample, Long> implements SampleService{ | |
| 14 | 18 | |
| 19 | + @Autowired | |
| 20 | + SampleRepository sampleRepository; | |
| 21 | + | |
| 15 | 22 | @Override |
| 16 | 23 | public Iterable<Sample> list(Map<String, Object> map) { |
| 17 | 24 | Iterable<Sample> rs = super.list(map); |
| ... | ... | @@ -26,4 +33,13 @@ public class SampleServiceImpl extends BaseServiceImpl<Sample, Long>{ |
| 26 | 33 | } |
| 27 | 34 | return rs; |
| 28 | 35 | } |
| 36 | + | |
| 37 | + @Transactional | |
| 38 | + @Override | |
| 39 | + public int createDataByGps(String lineCode, Integer updown) { | |
| 40 | + //删除原有数据 | |
| 41 | + sampleRepository.deleteByLineAndUpdown(Integer.parseInt(lineCode), updown); | |
| 42 | + | |
| 43 | + return 0; | |
| 44 | + } | |
| 29 | 45 | } | ... | ... |
src/main/java/com/bsth/websocket/handler/SendUtils.java
| ... | ... | @@ -18,6 +18,7 @@ import com.bsth.data.LineConfigData; |
| 18 | 18 | import com.bsth.data.schedule.DayOfSchedule; |
| 19 | 19 | import com.bsth.entity.directive.D80; |
| 20 | 20 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 21 | +import com.fasterxml.jackson.core.JsonProcessingException; | |
| 21 | 22 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 22 | 23 | |
| 23 | 24 | @Component |
| ... | ... | @@ -130,10 +131,18 @@ public class SendUtils{ |
| 130 | 131 | * @Description: TODO(调度指令状态推送) |
| 131 | 132 | */ |
| 132 | 133 | public void sendDirectiveToPage(ScheduleRealInfo sch) { |
| 133 | - JSONObject json = new JSONObject(); | |
| 134 | - json.put("fn", "directive"); | |
| 135 | - json.put("t", sch); | |
| 136 | - socketHandler.sendMessageToLine(sch.getXlBm(), json.toJSONString()); | |
| 134 | + | |
| 135 | + Map<String, Object> map = new HashMap<>(); | |
| 136 | + map.put("fn", "directive"); | |
| 137 | + map.put("t", sch);; | |
| 138 | + | |
| 139 | + ObjectMapper mapper = new ObjectMapper(); | |
| 140 | + | |
| 141 | + try { | |
| 142 | + socketHandler.sendMessageToLine(sch.getXlBm(), mapper.writeValueAsString(map)); | |
| 143 | + } catch (JsonProcessingException e) { | |
| 144 | + logger.error("", e); | |
| 145 | + } | |
| 137 | 146 | } |
| 138 | 147 | |
| 139 | 148 | public void send80ToPage(D80 d80) { | ... | ... |
src/main/resources/static/pages/forecast/sample/css/main.css
| 1 | -#lineConfigPanel{ | |
| 1 | +#forecastSamplePanel{ | |
| 2 | 2 | background: #fff; |
| 3 | 3 | overflow: hidden; |
| 4 | 4 | font-family: 'Segoe UI',Arial,'Microsoft Yahei',sans-serif !important; |
| 5 | 5 | min-width: 1392px; |
| 6 | 6 | } |
| 7 | 7 | |
| 8 | -#lineConfigPanel h1{ | |
| 8 | +#forecastSamplePanel h1{ | |
| 9 | 9 | -webkit-margin-start: 23px; |
| 10 | 10 | color: rgb(92, 97, 102); |
| 11 | 11 | margin-bottom: 1em; |
| ... | ... | @@ -13,26 +13,26 @@ |
| 13 | 13 | font-size: 1.5em; |
| 14 | 14 | } |
| 15 | 15 | |
| 16 | -#lineConfigPanel .line_config_tree ul { | |
| 16 | +#forecastSamplePanel .line_config_tree ul { | |
| 17 | 17 | list-style-type: none; |
| 18 | 18 | padding: 0; |
| 19 | 19 | height: 100% !important; |
| 20 | 20 | } |
| 21 | 21 | |
| 22 | -#lineConfigPanel .line_config_tree ul li{ | |
| 22 | +#forecastSamplePanel .line_config_tree ul li{ | |
| 23 | 23 | -webkit-border-start: 6px solid transparent; |
| 24 | 24 | -webkit-padding-start: 18px; |
| 25 | 25 | -webkit-user-select: none; |
| 26 | 26 | cursor: pointer; |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | -#lineConfigPanel .line_config_tree ul li.selected{ | |
| 29 | +#forecastSamplePanel .line_config_tree ul li.selected{ | |
| 30 | 30 | -webkit-border-start-color: #1bbc9b; |
| 31 | 31 | cursor: default; |
| 32 | 32 | pointer-events: none; |
| 33 | 33 | } |
| 34 | 34 | |
| 35 | -#lineConfigPanel .line_config_tree ul li button{ | |
| 35 | +#forecastSamplePanel .line_config_tree ul li button{ | |
| 36 | 36 | background-color: white; |
| 37 | 37 | border: 0; |
| 38 | 38 | color: #999; |
| ... | ... | @@ -43,25 +43,26 @@ |
| 43 | 43 | padding: 0; |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | -#lineConfigPanel .line_config_tree ul li.selected button{ | |
| 46 | +#forecastSamplePanel .line_config_tree ul li.selected button{ | |
| 47 | 47 | color: #1bbc9b; |
| 48 | 48 | } |
| 49 | 49 | |
| 50 | -#lineConfigPanel #trafficChart{ | |
| 50 | +#forecastSamplePanel #trafficChart{ | |
| 51 | 51 | display: inline-block; |
| 52 | 52 | width: calc(100% - 152px); |
| 53 | 53 | vertical-align: top; |
| 54 | 54 | height: 100%; |
| 55 | + overflow: auto; | |
| 56 | + padding-bottom: 12px; | |
| 55 | 57 | } |
| 56 | 58 | |
| 57 | -#lineConfigPanel #trafficChart .sample_tags{ | |
| 59 | +#forecastSamplePanel #trafficChart .sample_tags{ | |
| 58 | 60 | width: 100%; |
| 59 | - height: 65px; | |
| 60 | 61 | text-align: right; |
| 61 | - padding: 20px 40px 0; | |
| 62 | + padding: 20px 40px 10px; | |
| 62 | 63 | } |
| 63 | 64 | |
| 64 | -#lineConfigPanel #trafficChart .sample_tags a.tag{ | |
| 65 | +#forecastSamplePanel #trafficChart .sample_tags a.tag{ | |
| 65 | 66 | display: inline-block; |
| 66 | 67 | line-height: 1; |
| 67 | 68 | vertical-align: baseline; |
| ... | ... | @@ -79,37 +80,44 @@ |
| 79 | 80 | font-weight: 400; |
| 80 | 81 | } |
| 81 | 82 | |
| 82 | -#lineConfigPanel #trafficChart svg{ | |
| 83 | - width: 100%; | |
| 84 | - height: calc(100% - 65px); | |
| 83 | +#forecastSamplePanel #trafficChart svg{ | |
| 84 | + width: calc(100% - 11px); | |
| 85 | +} | |
| 86 | + | |
| 87 | +#svgWrap{ | |
| 88 | + width: calc(100% - 10px); | |
| 89 | + border: 1px solid #dadada; | |
| 90 | + border-radius: 3px !important; | |
| 91 | + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12); | |
| 92 | + transition: all .3s ease; | |
| 85 | 93 | } |
| 86 | 94 | |
| 87 | -#lineConfigPanel #trafficChart svg circle{ | |
| 95 | +#forecastSamplePanel #trafficChart svg circle{ | |
| 88 | 96 | fill: #b9b7b7; |
| 89 | 97 | r: 6; |
| 90 | 98 | stroke: rgb(253, 253, 253); |
| 91 | 99 | stroke-width: 3; |
| 92 | 100 | } |
| 93 | 101 | |
| 94 | -#lineConfigPanel #trafficChart svg path{ | |
| 102 | +#forecastSamplePanel #trafficChart svg path{ | |
| 95 | 103 | stroke-width: 6.4px; |
| 96 | 104 | opacity: 0.9; |
| 97 | 105 | stroke: #b2afaf; |
| 98 | 106 | cursor: pointer; |
| 99 | 107 | } |
| 100 | 108 | |
| 101 | -#lineConfigPanel #trafficChart svg path.active{ | |
| 109 | +#forecastSamplePanel #trafficChart svg path.active{ | |
| 102 | 110 | stroke: #1bbc9b; |
| 103 | 111 | } |
| 104 | 112 | |
| 105 | -#lineConfigPanel #trafficChart svg text{ | |
| 113 | +#forecastSamplePanel #trafficChart svg text{ | |
| 106 | 114 | font-size: 85%; |
| 107 | 115 | fill: #6b6666; |
| 108 | 116 | font-weight: bold; |
| 109 | 117 | pointer-events: none; |
| 110 | 118 | } |
| 111 | 119 | |
| 112 | -#lineConfigPanel #trafficChart .sample_tags a.tag.active{ | |
| 120 | +#forecastSamplePanel #trafficChart .sample_tags a.tag.active{ | |
| 113 | 121 | background-color: #1bbc9b; |
| 114 | 122 | color: white; |
| 115 | 123 | } |
| ... | ... | @@ -120,7 +128,7 @@ |
| 120 | 128 | height: 100%; |
| 121 | 129 | } |
| 122 | 130 | |
| 123 | -#lineConfigPanel .slimScrollBar{ | |
| 131 | +#forecastSamplePanel .slimScrollBar{ | |
| 124 | 132 | border-radius: 7px !important; |
| 125 | 133 | background: rgb(176, 173, 173) !important; |
| 126 | 134 | width: 4px !important; |
| ... | ... | @@ -179,8 +187,10 @@ |
| 179 | 187 | } |
| 180 | 188 | |
| 181 | 189 | .left_station_route .tabbable-line .tab-content{ |
| 182 | - height: 100% !important; | |
| 183 | - padding: 20px 0 0; | |
| 190 | + height: calc(100% - 63px); | |
| 191 | + padding: 20px 0 0; | |
| 192 | + overflow: auto; | |
| 193 | + border-top: 0; | |
| 184 | 194 | } |
| 185 | 195 | |
| 186 | 196 | rect.station_rect{ |
| ... | ... | @@ -196,10 +206,43 @@ rect.f_rect{ |
| 196 | 206 | cursor: pointer; |
| 197 | 207 | } |
| 198 | 208 | |
| 199 | -#lineConfigPanel #trafficChart svg text.f_text{ | |
| 209 | +#forecastSamplePanel #trafficChart svg text.f_text{ | |
| 200 | 210 | fill: #ffffff; |
| 201 | 211 | } |
| 202 | 212 | |
| 203 | 213 | .select2-container--open{ |
| 204 | 214 | z-index: 100000000; |
| 215 | +} | |
| 216 | + | |
| 217 | +.inline-link{ | |
| 218 | + font-size: 12px; | |
| 219 | + color: red; | |
| 220 | + text-decoration: underline; | |
| 221 | + display: inline-block; | |
| 222 | + vertical-align: bottom; | |
| 223 | + margin: 0 8px 7px 0; | |
| 224 | +} | |
| 225 | + | |
| 226 | + | |
| 227 | +#forecastSamplePanel .tab-content::-webkit-scrollbar, | |
| 228 | +#forecastSamplePanel #trafficChart::-webkit-scrollbar { | |
| 229 | + width: 15px; | |
| 230 | + height: 16px; | |
| 231 | +} | |
| 232 | +#forecastSamplePanel .tab-content::-webkit-scrollbar-track, | |
| 233 | +#forecastSamplePanel .tab-content::-webkit-scrollbar-thumb, | |
| 234 | +#forecastSamplePanel #trafficChart::-webkit-scrollbar-track, | |
| 235 | +#forecastSamplePanel #trafficChart::-webkit-scrollbar-thumb { | |
| 236 | + border-radius: 999px; | |
| 237 | + border: 5px solid transparent; | |
| 238 | +} | |
| 239 | +#forecastSamplePanel .tab-content::-webkit-scrollbar-thumb, | |
| 240 | +#forecastSamplePanel #trafficChart::-webkit-scrollbar-thumb { | |
| 241 | + min-height: 20px; | |
| 242 | + background-clip: content-box; | |
| 243 | + box-shadow: 0 0 0 5px rgba(0,0,0,.2) inset; | |
| 244 | +} | |
| 245 | +#forecastSamplePanel .tab-content::-webkit-scrollbar-corner, | |
| 246 | +#forecastSamplePanel #trafficChart::-webkit-scrollbar-corner { | |
| 247 | + background: transparent; | |
| 205 | 248 | } |
| 206 | 249 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/forecast/sample/js/svg.js
| ... | ... | @@ -53,10 +53,10 @@ var sampleSvg = (function(){ |
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | function draw(opt){ |
| 56 | - $('#trafficChart svg').remove(); | |
| 57 | - svg = d3.select('#trafficChart').append('svg'); | |
| 56 | + $('#svgWrap svg').remove(); | |
| 57 | + svg = d3.select('#svgWrap').append('svg'); | |
| 58 | 58 | //容器宽度 |
| 59 | - var width = $('#trafficChart svg').width(); | |
| 59 | + var width = $('#svgWrap svg').width(); | |
| 60 | 60 | margin = (width - (rowNum - 1) * itemWidth) / 2; |
| 61 | 61 | var rts = opt.rts |
| 62 | 62 | _count = rts.length; |
| ... | ... | @@ -69,6 +69,10 @@ var sampleSvg = (function(){ |
| 69 | 69 | stationMapp[obj.stationCode] = obj.stationName; |
| 70 | 70 | }); |
| 71 | 71 | |
| 72 | + var h = rts[rts.length - 1].cy + 50; | |
| 73 | + svg.style('height', h).style('opacity', 0); | |
| 74 | + $('#svgWrap').css('height', h + 6); | |
| 75 | + | |
| 72 | 76 | //画线 |
| 73 | 77 | svg.selectAll('path').data(rts) |
| 74 | 78 | .enter().append('path') |
| ... | ... | @@ -91,13 +95,16 @@ var sampleSvg = (function(){ |
| 91 | 95 | drawText(rts); |
| 92 | 96 | //显示tags |
| 93 | 97 | showTags(); |
| 98 | + | |
| 99 | + //d3 anim | |
| 100 | + svg.transition().delay(100).style('opacity', 1); | |
| 94 | 101 | } |
| 95 | 102 | |
| 96 | 103 | //tag 点击事件 |
| 97 | 104 | $('#trafficChart').on('click', '.sample_tags a.tag', function(){ |
| 98 | 105 | $('.sample_tags a.tag.active').removeClass('active'); |
| 99 | 106 | $(this).addClass('active'); |
| 100 | - var tag = $(this).text(); | |
| 107 | + var tag = $(this).attr('title'); | |
| 101 | 108 | clearRunTimeE(); |
| 102 | 109 | //show |
| 103 | 110 | showRunTimeE(_data[tag]) |
| ... | ... | @@ -115,7 +122,6 @@ var sampleSvg = (function(){ |
| 115 | 122 | .attr('data-sid', this.id); |
| 116 | 123 | }); |
| 117 | 124 | |
| 118 | - console.log('showRunTimeE...', rs); | |
| 119 | 125 | //背景 |
| 120 | 126 | svg.selectAll('.f_rect') |
| 121 | 127 | .data(rs).enter().append('rect') |
| ... | ... | @@ -153,11 +159,14 @@ var sampleSvg = (function(){ |
| 153 | 159 | $.each(rs, function(i, d){ |
| 154 | 160 | if(!_data[d.tag]){ |
| 155 | 161 | _data[d.tag] = []; |
| 156 | - tags += '<a class="tag">'+d.tag+'</a>'; | |
| 162 | + tags += '<a class="tag" title="'+d.tag+'">'+(d.tag + ' ' + d.sDate + ' - ' + d.eDate)+'</a>'; | |
| 157 | 163 | } |
| 158 | 164 | _data[d.tag].push(d); |
| 159 | 165 | }); |
| 160 | - $('#trafficChart .sample_tags').html(tags); | |
| 166 | + | |
| 167 | + var wrap = $('#trafficChart .sample_tags'); | |
| 168 | + wrap.find('a.tag').remove(); | |
| 169 | + wrap.append(tags); | |
| 161 | 170 | //选中第一个tag |
| 162 | 171 | $('#trafficChart .sample_tags a.tag:eq(0)').click(); |
| 163 | 172 | }); |
| ... | ... | @@ -173,42 +182,16 @@ var sampleSvg = (function(){ |
| 173 | 182 | } |
| 174 | 183 | |
| 175 | 184 | function popAddModal(id){ |
| 176 | - //var eid = id ,sid = prve(id); | |
| 177 | - //if(!sid)return; | |
| 178 | - | |
| 179 | - //var opts = {sid: sid, eid: eid, sName: stationMapp[sid], eName: stationMapp[eid]}; | |
| 180 | 185 | $.get('/pages/forecast/sample/modal.html', function(rs){ |
| 181 | 186 | var index = layer.open({ |
| 182 | 187 | type: 1, |
| 183 | 188 | area: '550px', |
| 184 | 189 | content: rs, |
| 185 | 190 | shift: 5, |
| 186 | - // title: '...', | |
| 191 | + title: '人工编辑', | |
| 187 | 192 | success: function(layero, index){ |
| 188 | 193 | var activeTag = $('.sample_tags a.tag.active'); |
| 189 | - $('#forecast_sample_modal').trigger('init', {layero: layero, _opt: _opt, _data: _data, id: id, tag: activeTag.length > 0?activeTag.text():''}); | |
| 190 | - /*$("#addSampleForm select[name=tag]").select2({ | |
| 191 | - maximumSelectionLength: 1, | |
| 192 | - tags: true | |
| 193 | - }) | |
| 194 | - .on('change', function(){ | |
| 195 | - var t = $(this).val(); | |
| 196 | - if(tagRange[t]){ | |
| 197 | - $("#addSampleForm input[name=sDate]").val(tagRange[t].s); | |
| 198 | - $("#addSampleForm input[name=eDate]").val(tagRange[t].e); | |
| 199 | - } | |
| 200 | - }); | |
| 201 | - | |
| 202 | - //提交 | |
| 203 | - $('#addSampleForm .confirm').on('click', function(){ | |
| 204 | - if(customFormValidate('#addSampleForm')){ | |
| 205 | - console.log(_opt); | |
| 206 | - var param = $('#addSampleForm').serializeJSON(); | |
| 207 | - param.lineCode = _opt.lineCode; | |
| 208 | - param.updown = _opt.updown; | |
| 209 | - $post('/sample', param, function(){layer.close(index);}); | |
| 210 | - } | |
| 211 | - });*/ | |
| 194 | + $('#forecast_sample_modal').trigger('init', {drawObject: drawObject, layero: layero, _opt: _opt, _data: _data, id: id, tag: activeTag.length > 0?activeTag.attr('title'):''}); | |
| 212 | 195 | } |
| 213 | 196 | }); |
| 214 | 197 | }); | ... | ... |
src/main/resources/static/pages/forecast/sample/main.html
| 1 | 1 | <link href="/pages/forecast/sample/css/main.css" rel="stylesheet" type="text/css" /> |
| 2 | -<div id="lineConfigPanel"> | |
| 2 | +<div id="forecastSamplePanel"> | |
| 3 | 3 | <div class="line_config_tree" > |
| 4 | 4 | <h1 >线路</h1> |
| 5 | 5 | <ul></ul> |
| ... | ... | @@ -29,7 +29,12 @@ |
| 29 | 29 | </div> |
| 30 | 30 | |
| 31 | 31 | <div id="trafficChart" > |
| 32 | - <div class="sample_tags"></div> | |
| 32 | + <div class="sample_tags"> | |
| 33 | + <a href="javascript:;" class="inline-link" id="gpsCreateDataLink"><i class="fa fa-sign-in"> </i> GPS生成数据</a> | |
| 34 | + </div> | |
| 35 | + <div id="svgWrap" > | |
| 36 | + | |
| 37 | + </div> | |
| 33 | 38 | </div> |
| 34 | 39 | </div> |
| 35 | 40 | </div> |
| ... | ... | @@ -57,23 +62,23 @@ |
| 57 | 62 | //站点路由信息 |
| 58 | 63 | var routes = {}; |
| 59 | 64 | |
| 60 | - var $panel = $('#lineConfigPanel') | |
| 65 | + var $panel = $('#forecastSamplePanel') | |
| 61 | 66 | ,$body = $('.line_config_content .body'); |
| 62 | 67 | var h = $('.page-container>.page-sidebar-wrapper>.page-sidebar').height(); |
| 63 | 68 | $panel.css('height', h - 18); |
| 64 | 69 | |
| 65 | - //线路滚动条 | |
| 70 | + //线路滚动条 | |
| 66 | 71 | $('.line_config_tree ul').slimscroll({ |
| 67 | 72 | height : 'calc(100% - 68px)', |
| 68 | 73 | alwaysVisible : true, |
| 69 | 74 | opacity : .8 |
| 70 | 75 | }); |
| 71 | 76 | |
| 72 | - //路由 | |
| 77 | +/* //路由 | |
| 73 | 78 | $('.left_station_route .tab-content').slimscroll({ |
| 74 | 79 | height : 'calc(100% - 46px)', |
| 75 | 80 | opacity : .8 |
| 76 | - }); | |
| 81 | + }); */ | |
| 77 | 82 | |
| 78 | 83 | //上下行切换事件 |
| 79 | 84 | $('.left_station_route .tabbable-line ul li').on('click', function(){setTimeout(drawSvg, 300);}); |
| ... | ... | @@ -149,8 +154,21 @@ |
| 149 | 154 | sampleSvg.draw({lineCode: getLineCode(), rts: rts, updown: getUpdown()}); |
| 150 | 155 | } |
| 151 | 156 | |
| 152 | - $('#lineConfigPanel').on('click', '.sample_route_item', function(){ | |
| 157 | + $('#forecastSamplePanel').on('click', '.sample_route_item', function(){ | |
| 153 | 158 | sampleSvg.popAddModal($(this).data('id')); |
| 154 | 159 | }) |
| 160 | + | |
| 161 | + | |
| 162 | + $('#gpsCreateDataLink').on('click', function(){ | |
| 163 | + var lineName = $('.line_config_tree ul li.selected button').text(); | |
| 164 | + var updownText = $('.left_station_route ul li.active a').text(); | |
| 165 | + | |
| 166 | + layer.confirm('使用GPS轨迹生成【'+lineName+' -'+updownText+'】站点间耗时数据? 该操作将会清除原有数据。', { | |
| 167 | + btn: ['我确定','算了吧'], | |
| 168 | + icon: 3 | |
| 169 | + }, function(){ | |
| 170 | + | |
| 171 | + }); | |
| 172 | + }); | |
| 155 | 173 | }(); |
| 156 | 174 | </script> |
| 157 | 175 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/forecast/sample/modal.html
| ... | ... | @@ -19,10 +19,12 @@ |
| 19 | 19 | <div class="tab-content"> |
| 20 | 20 | {{each data as obj i}} |
| 21 | 21 | <div class="tab-pane" id="tab_sample_{{i}}"> |
| 22 | - <form class="form-horizontal" role="form" style="padding: 35px 25px;" id="addSampleForm"> | |
| 22 | + <form class="form-horizontal" role="form" style="padding: 35px 25px;" id="editSampleForm_{{i}}"> | |
| 23 | 23 | <input type="hidden" name="id" value="{{obj.d.id}}"/> |
| 24 | - <input type="hidden" name="sStation" value="{{obj.d.sid}}"/> | |
| 25 | - <input type="hidden" name="eStation" value="{{obj.d.eid}}"/> | |
| 24 | + <input type="hidden" name="sStation" value="{{obj.d.sStation}}"/> | |
| 25 | + <input type="hidden" name="eStation" value="{{obj.d.eStation}}"/> | |
| 26 | + <input type="hidden" name="tag" value="{{obj.d.tag}}"/> | |
| 27 | + | |
| 26 | 28 | <div class="form-body"> |
| 27 | 29 | <div class="form-group"> |
| 28 | 30 | <label class="col-md-3 control-label">开始站:</label> |
| ... | ... | @@ -57,8 +59,8 @@ |
| 57 | 59 | <div class="form-actions"> |
| 58 | 60 | <div class="row"> |
| 59 | 61 | <div class="col-md-offset-4 col-md-8"> |
| 60 | - <button type="button" class="btn green confirm"><i class="fa fa-check"></i> 保存</button> | |
| 61 | - <button type="button" class="btn red layui-layer-close">删除</button> | |
| 62 | + <button type="button" class="btn green confirm" data-form="#editSampleForm_{{i}}"><i class="fa fa-check"></i> 保存</button> | |
| 63 | + <button type="button" class="btn red remove" data-id="{{obj.d.id}}">删除</button> | |
| 62 | 64 | </div> |
| 63 | 65 | </div> |
| 64 | 66 | </div> |
| ... | ... | @@ -113,8 +115,8 @@ |
| 113 | 115 | <br> |
| 114 | 116 | <div class="form-actions"> |
| 115 | 117 | <div class="row"> |
| 116 | - <div class="col-md-offset-4 col-md-8"> | |
| 117 | - <button type="button" class="btn green confirm"><i class="fa fa-check"></i> 提交</button> | |
| 118 | + <div class="col-md-offset-5 col-md-7"> | |
| 119 | + <button type="button" class="btn green confirm" data-form="#addSampleForm"><i class="fa fa-check"></i> 提交</button> | |
| 118 | 120 | </div> |
| 119 | 121 | </div> |
| 120 | 122 | </div> |
| ... | ... | @@ -126,18 +128,26 @@ |
| 126 | 128 | |
| 127 | 129 | <script> |
| 128 | 130 | !function(){ |
| 129 | - var _data,_opt,id, currentData, layero; | |
| 131 | + var _data,_opt,id, currentData, layero, drawObject; | |
| 130 | 132 | var tagRange = {'早高峰': {s: '06:31', e: '08:30'}, '平峰': {s: '08:31', e: '16:00'}, '晚高峰': {s: '16:01', e: '18:00'}}; |
| 131 | 133 | |
| 132 | 134 | $('#forecast_sample_modal').on('init', function(e, rs){ |
| 133 | 135 | _data = rs._data; |
| 134 | 136 | _opt = rs._opt; |
| 137 | + drawObject = rs.drawObject; | |
| 135 | 138 | layero = rs.layero; |
| 136 | 139 | id = rs.id; |
| 137 | 140 | |
| 138 | - var eid = id, sid = prve(id).stationCode; | |
| 141 | + var _prve = prve(id); | |
| 142 | + if(!_prve){ | |
| 143 | + layer.closeAll(); | |
| 144 | + layer.msg('没有上一站,无法录入数据!'); | |
| 145 | + return; | |
| 146 | + } | |
| 147 | + var eid = id, sid = _prve.stationCode; | |
| 139 | 148 | var sampData = searchData(sid, eid); |
| 140 | 149 | var baseData = {sid: sid, eid: eid, sName: toName(sid), eName: toName(eid)}; |
| 150 | + console.log('baseData', baseData); | |
| 141 | 151 | var html = template('forecast_sample_tab_detail_temp', {data: sampData, base: baseData}); |
| 142 | 152 | $('#forecast_sample_modal .row').html(html); |
| 143 | 153 | //默认选中tab |
| ... | ... | @@ -158,15 +168,30 @@ |
| 158 | 168 | |
| 159 | 169 | toCenter(layero); |
| 160 | 170 | |
| 161 | - $('#addSampleForm .confirm').on('click', function(){ | |
| 162 | - if(customFormValidate('#addSampleForm')){ | |
| 163 | - console.log(_opt); | |
| 164 | - var param = $('#addSampleForm').serializeJSON(); | |
| 171 | + //确定 | |
| 172 | + $('#forecast_sample_modal .confirm').on('click', function(){ | |
| 173 | + var f = $(this).data('form'); | |
| 174 | + if(customFormValidate(f)){ | |
| 175 | + var param = $(f).serializeJSON(); | |
| 165 | 176 | param.lineCode = _opt.lineCode; |
| 166 | 177 | param.updown = _opt.updown; |
| 167 | - $post('/sample', param, function(){layer.close(index);}); | |
| 178 | + | |
| 179 | + layer.msg('操作中...', {icon: 16}); | |
| 180 | + $post('/sample', param, function(){ | |
| 181 | + layer.closeAll(); | |
| 182 | + layer.msg('保存成功!'); | |
| 183 | + drawObject.draw(_opt); | |
| 184 | + }); | |
| 168 | 185 | } |
| 169 | 186 | }); |
| 187 | + | |
| 188 | + //删除 | |
| 189 | + $('#forecast_sample_modal .remove').on('click', function(){ | |
| 190 | + removeConfirm('确定删除这条数据?', '/sample/' + $(this).data('id'), function(){ | |
| 191 | + layer.closeAll(); | |
| 192 | + drawObject.draw(_opt); | |
| 193 | + }); | |
| 194 | + }); | |
| 170 | 195 | }); |
| 171 | 196 | |
| 172 | 197 | |
| ... | ... | @@ -180,7 +205,6 @@ |
| 180 | 205 | |
| 181 | 206 | } |
| 182 | 207 | } |
| 183 | - | |
| 184 | 208 | return null; |
| 185 | 209 | } |
| 186 | 210 | ... | ... |