Commit e480b016876c735775c0f402a02b268cad6c5ce8
update
Showing
24 changed files
with
383 additions
and
204 deletions
pom.xml
| ... | ... | @@ -5,7 +5,7 @@ |
| 5 | 5 | <groupId>com.bsth</groupId> |
| 6 | 6 | <artifactId>bsth_control</artifactId> |
| 7 | 7 | <version>0.0.1-SNAPSHOT</version> |
| 8 | - <packaging>jar</packaging> | |
| 8 | + <packaging>war</packaging> | |
| 9 | 9 | |
| 10 | 10 | <parent> |
| 11 | 11 | <groupId>org.springframework.boot</groupId> |
| ... | ... | @@ -22,7 +22,7 @@ |
| 22 | 22 | <dependency> |
| 23 | 23 | <groupId>org.springframework.boot</groupId> |
| 24 | 24 | <artifactId>spring-boot-starter-tomcat</artifactId> |
| 25 | - <!--<scope>provided</scope>--> | |
| 25 | + <scope>provided</scope> | |
| 26 | 26 | </dependency> |
| 27 | 27 | |
| 28 | 28 | <dependency> | ... | ... |
src/main/java/com/bsth/StartCommand.java
| ... | ... | @@ -93,7 +93,7 @@ public class StartCommand implements CommandLineRunner{ |
| 93 | 93 | * 每15秒从数据库抓取到离站信息和班次匹配 |
| 94 | 94 | * (网关生成的到离站数据也是延迟批量入库,所以缩短该线程执行周期并不会提高 “实际到离站” 的实时性) |
| 95 | 95 | */ |
| 96 | - //scheduler.scheduleWithFixedDelay(gpsArrivalStationThread, 35, 1200, TimeUnit.SECONDS); | |
| 96 | + scheduler.scheduleWithFixedDelay(gpsArrivalStationThread, 35, 1200, TimeUnit.SECONDS); | |
| 97 | 97 | |
| 98 | 98 | /** |
| 99 | 99 | * 首个调度指令下发(2分钟运行一次) | ... | ... |
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
| ... | ... | @@ -15,6 +15,7 @@ import com.bsth.controller.BaseController; |
| 15 | 15 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 16 | 16 | import com.bsth.security.util.SecurityUtils; |
| 17 | 17 | import com.bsth.service.realcontrol.ScheduleRealInfoService; |
| 18 | +import com.bsth.service.realcontrol.buffer.GetSchedulePlanThread; | |
| 18 | 19 | import com.bsth.service.realcontrol.buffer.ScheduleBuffer; |
| 19 | 20 | import com.bsth.vehicle.common.CommonMapped; |
| 20 | 21 | import com.google.common.base.Splitter; |
| ... | ... | @@ -24,6 +25,9 @@ import com.google.common.base.Splitter; |
| 24 | 25 | public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, Long> { |
| 25 | 26 | |
| 26 | 27 | @Autowired |
| 28 | + GetSchedulePlanThread getSchedulePlanThread; | |
| 29 | + | |
| 30 | + @Autowired | |
| 27 | 31 | ScheduleRealInfoService scheduleRealInfoService; |
| 28 | 32 | |
| 29 | 33 | @RequestMapping(value = "/lines") |
| ... | ... | @@ -35,8 +39,9 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, |
| 35 | 39 | * |
| 36 | 40 | * @Title: registerLine @Description: TODO(注册线路,后续才能收到数据推送) @param @param |
| 37 | 41 | * lineCodes @throws |
| 42 | + * 用GET 防止监控模式下被拦截 | |
| 38 | 43 | */ |
| 39 | - @RequestMapping(value = "/registerLine", method = RequestMethod.POST) | |
| 44 | + @RequestMapping(value = "/registerLine", method = RequestMethod.GET) | |
| 40 | 45 | public int registerLine(@RequestParam String lineCodes) { |
| 41 | 46 | List<String> list = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(lineCodes); |
| 42 | 47 | String userName = SecurityUtils.getCurrentUser().getUserName(); |
| ... | ... | @@ -253,6 +258,12 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, |
| 253 | 258 | public Map<String, Object> findRouteByLine(@RequestParam Integer lineId){ |
| 254 | 259 | return scheduleRealInfoService.findRouteByLine(lineId); |
| 255 | 260 | } |
| 261 | + | |
| 262 | + @RequestMapping(value = "/test/getSch") | |
| 263 | + public int getSch(){ | |
| 264 | + getSchedulePlanThread.start(); | |
| 265 | + return 1; | |
| 266 | + } | |
| 256 | 267 | |
| 257 | 268 | /** |
| 258 | 269 | * | ... | ... |
src/main/java/com/bsth/entity/sys/SessionLog.java
0 → 100644
| 1 | +package com.bsth.entity.sys; | |
| 2 | + | |
| 3 | +import java.util.Date; | |
| 4 | + | |
| 5 | +import javax.persistence.Column; | |
| 6 | +import javax.persistence.Entity; | |
| 7 | +import javax.persistence.GeneratedValue; | |
| 8 | +import javax.persistence.GenerationType; | |
| 9 | +import javax.persistence.Id; | |
| 10 | +import javax.persistence.ManyToOne; | |
| 11 | +import javax.persistence.Table; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * | |
| 15 | + * @ClassName: SessionLog | |
| 16 | + * @Description: TODO(session日志) | |
| 17 | + * @author PanZhao | |
| 18 | + * @date 2016年7月20日 下午4:46:27 | |
| 19 | + * | |
| 20 | + */ | |
| 21 | +@Entity | |
| 22 | +@Table(name = "bsth_c_sys_sessionlog") | |
| 23 | +public class SessionLog { | |
| 24 | + | |
| 25 | + @Id | |
| 26 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
| 27 | + private Integer id; | |
| 28 | + | |
| 29 | + @ManyToOne | |
| 30 | + private SysUser user; | |
| 31 | + | |
| 32 | + /** 登录时间 */ | |
| 33 | + private Date loginDate; | |
| 34 | + | |
| 35 | + @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") | |
| 36 | + private Date createDate; | |
| 37 | + | |
| 38 | + /** 登出时间 */ | |
| 39 | + private Date logoutDate; | |
| 40 | + | |
| 41 | + /** 登出方式 0:主动登出, -1:其他 */ | |
| 42 | + private int logoutType; | |
| 43 | + | |
| 44 | + public Integer getId() { | |
| 45 | + return id; | |
| 46 | + } | |
| 47 | + | |
| 48 | + public void setId(Integer id) { | |
| 49 | + this.id = id; | |
| 50 | + } | |
| 51 | + | |
| 52 | + public SysUser getUser() { | |
| 53 | + return user; | |
| 54 | + } | |
| 55 | + | |
| 56 | + public void setUser(SysUser user) { | |
| 57 | + this.user = user; | |
| 58 | + } | |
| 59 | + | |
| 60 | + public Date getLoginDate() { | |
| 61 | + return loginDate; | |
| 62 | + } | |
| 63 | + | |
| 64 | + public void setLoginDate(Date loginDate) { | |
| 65 | + this.loginDate = loginDate; | |
| 66 | + } | |
| 67 | + | |
| 68 | + public Date getCreateDate() { | |
| 69 | + return createDate; | |
| 70 | + } | |
| 71 | + | |
| 72 | + public void setCreateDate(Date createDate) { | |
| 73 | + this.createDate = createDate; | |
| 74 | + } | |
| 75 | + | |
| 76 | + public Date getLogoutDate() { | |
| 77 | + return logoutDate; | |
| 78 | + } | |
| 79 | + | |
| 80 | + public void setLogoutDate(Date logoutDate) { | |
| 81 | + this.logoutDate = logoutDate; | |
| 82 | + } | |
| 83 | + | |
| 84 | + public int getLogoutType() { | |
| 85 | + return logoutType; | |
| 86 | + } | |
| 87 | + | |
| 88 | + public void setLogoutType(int logoutType) { | |
| 89 | + this.logoutType = logoutType; | |
| 90 | + } | |
| 91 | +} | ... | ... |
src/main/java/com/bsth/entity/sys/SignControl.java
0 → 100644
| 1 | +package com.bsth.entity.sys; | |
| 2 | + | |
| 3 | +import java.util.Date; | |
| 4 | + | |
| 5 | +import javax.persistence.Entity; | |
| 6 | +import javax.persistence.GeneratedValue; | |
| 7 | +import javax.persistence.GenerationType; | |
| 8 | +import javax.persistence.Id; | |
| 9 | +import javax.persistence.ManyToOne; | |
| 10 | +import javax.persistence.Table; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * | |
| 14 | + * @ClassName: SignControl | |
| 15 | + * @Description: TODO(进出线调记录) | |
| 16 | + * @author PanZhao | |
| 17 | + * @date 2016年7月20日 下午4:50:50 | |
| 18 | + * | |
| 19 | + */ | |
| 20 | +@Entity | |
| 21 | +@Table(name = "bsth_c_sys_sign") | |
| 22 | +public class SignControl { | |
| 23 | + | |
| 24 | + @Id | |
| 25 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | |
| 26 | + private Integer id; | |
| 27 | + | |
| 28 | + /** 登入线调时间 */ | |
| 29 | + private Date signDate; | |
| 30 | + | |
| 31 | + @ManyToOne | |
| 32 | + private SessionLog session; | |
| 33 | + | |
| 34 | +} | ... | ... |
src/main/java/com/bsth/service/realcontrol/buffer/ScheduleBuffer.java
| ... | ... | @@ -93,7 +93,7 @@ public class ScheduleBuffer { |
| 93 | 93 | schedul.syncTime(); |
| 94 | 94 | } |
| 95 | 95 | |
| 96 | - //发车时间排序 | |
| 96 | + //发车顺序号排序 | |
| 97 | 97 | Collections.sort(list, scheduleComparator); |
| 98 | 98 | |
| 99 | 99 | String zbh; |
| ... | ... | @@ -184,7 +184,8 @@ public class ScheduleBuffer { |
| 184 | 184 | |
| 185 | 185 | @Override |
| 186 | 186 | public int compare(ScheduleRealInfo o1, ScheduleRealInfo o2) { |
| 187 | - return (int) (o1.getFcsjT() - o2.getFcsjT()); | |
| 187 | + //return (int) (o1.getFcsjT() - o2.getFcsjT()); | |
| 188 | + return o1.getFcno() - o2.getFcno(); | |
| 188 | 189 | } |
| 189 | 190 | } |
| 190 | 191 | ... | ... |
src/main/java/com/bsth/vehicle/directive/service/DirectiveServiceImpl.java
| ... | ... | @@ -49,7 +49,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl<Directive60, Integer> |
| 49 | 49 | |
| 50 | 50 | SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH点mm分"); |
| 51 | 51 | |
| 52 | - static Long schDiff = 1000 * 60 * 30L; | |
| 52 | + static Long schDiff = 1000 * 60 * 60L; | |
| 53 | 53 | |
| 54 | 54 | //城市代码 |
| 55 | 55 | static final short cityCode = 22; |
| ... | ... | @@ -84,9 +84,9 @@ public class DirectiveServiceImpl extends BaseServiceImpl<Directive60, Integer> |
| 84 | 84 | Directive60 directive = null; |
| 85 | 85 | try { |
| 86 | 86 | //如果发车时间距当前时间较远,则不发送 |
| 87 | - /*if(Math.abs(sch.getFcsjT() - System.currentTimeMillis()) > schDiff){ | |
| 87 | + if(Math.abs(sch.getFcsjT() - System.currentTimeMillis()) > schDiff){ | |
| 88 | 88 | return 0; |
| 89 | - }*/ | |
| 89 | + } | |
| 90 | 90 | |
| 91 | 91 | String text = "已完成" + finish + "个班次,下一发车时间" + sdfHHmm.format(new Date(sch.getFcsjT())) |
| 92 | 92 | + ",由" + sch.getQdzName() + "发往" + sch.getZdzName(); | ... | ... |
src/main/java/com/bsth/vehicle/directive/thread/FirstScheduleIssuedThread.java
src/main/java/com/bsth/vehicle/gpsdata/service/GpsDataServiceImpl.java
| ... | ... | @@ -129,11 +129,11 @@ public class GpsDataServiceImpl implements GpsDataService{ |
| 129 | 129 | //day_of_year |
| 130 | 130 | Calendar sCal = Calendar.getInstance(); |
| 131 | 131 | sCal.setTime(new Date(st * 1000)); |
| 132 | - int sDayOfYear = /*sCal.get(Calendar.DAY_OF_YEAR)*/200; | |
| 132 | + int sDayOfYear = sCal.get(Calendar.DAY_OF_YEAR)/*200*/; | |
| 133 | 133 | |
| 134 | 134 | Calendar eCal = Calendar.getInstance(); |
| 135 | 135 | eCal.setTime(new Date(et * 1000)); |
| 136 | - int eDayOfYear = /*eCal.get(Calendar.DAY_OF_YEAR)*/200; | |
| 136 | + int eDayOfYear = eCal.get(Calendar.DAY_OF_YEAR)/*200*/; | |
| 137 | 137 | |
| 138 | 138 | Calendar weekCal = Calendar.getInstance(); |
| 139 | 139 | |
| ... | ... | @@ -189,7 +189,7 @@ public class GpsDataServiceImpl implements GpsDataService{ |
| 189 | 189 | inv = inv.substring(0, inv.length() - 1); |
| 190 | 190 | |
| 191 | 191 | //查询到离站数据 |
| 192 | - Map<String, ArrivalInfo> arrivalMap = findArrivalByTs(/*weekOfYear*/30, st, et, inv); | |
| 192 | + Map<String, ArrivalInfo> arrivalMap = findArrivalByTs(weekOfYear/*30*/, st, et, inv); | |
| 193 | 193 | |
| 194 | 194 | String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO from bsth_c_gps_info where days_year=? and device_id in ("+inv+") and ts > ? and ts < ?"; |
| 195 | 195 | try{ | ... | ... |
src/main/resources/application-dev.properties
| ... | ... | @@ -8,9 +8,9 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy |
| 8 | 8 | spring.jpa.database= MYSQL |
| 9 | 9 | spring.jpa.show-sql= true |
| 10 | 10 | spring.datasource.driver-class-name= com.mysql.jdbc.Driver |
| 11 | -spring.datasource.url= jdbc:mysql://192.168.168.171:3306/control | |
| 11 | +spring.datasource.url= jdbc:mysql://127.0.0.1:3306/control | |
| 12 | 12 | spring.datasource.username= root |
| 13 | -spring.datasource.password= root2jsp | |
| 13 | +spring.datasource.password= panzhao | |
| 14 | 14 | #DATASOURCE |
| 15 | 15 | spring.datasource.max-active=100 |
| 16 | 16 | spring.datasource.max-idle=8 |
| ... | ... | @@ -25,6 +25,6 @@ spring.datasource.validation-query=select 1 |
| 25 | 25 | |
| 26 | 26 | ## |
| 27 | 27 | ##\u5B9E\u65F6gps |
| 28 | -http.gps.real.url= http://192.168.168.171:8080/transport_server/rtgps/ | |
| 28 | +http.gps.real.url= http://192.168.168.201:8080/transport_server/rtgps/ | |
| 29 | 29 | ##\u6D88\u606F\u4E0B\u53D1 |
| 30 | -http.send.directive = http://192.168.168.171:8080/transport_server/message/ | |
| 30 | +http.send.directive = http://192.168.168.201:8080/transport_server/message/ | ... | ... |
src/main/resources/static/assets/js/common.js
src/main/resources/static/login.html
| ... | ... | @@ -94,7 +94,7 @@ Login page |
| 94 | 94 | |
| 95 | 95 | <div class="input-icon right" style="display: inline-block;"> |
| 96 | 96 | <i class="fa fa-key"></i> |
| 97 | - <input type="password" class="form-control " placeholder="密码" name="password" value="admin"> </div> | |
| 97 | + <input type="password" class="form-control " placeholder="密码" name="password" value="" > </div> | |
| 98 | 98 | |
| 99 | 99 | <button type="submit" class="btn blue buttonLogin" style="border-radius: 5px !important; |
| 100 | 100 | font-family: 微软雅黑;">登 录</button> |
| ... | ... | @@ -112,6 +112,7 @@ Login page |
| 112 | 112 | |
| 113 | 113 | <script type="text/javascript"> |
| 114 | 114 | $(function() { |
| 115 | + $('input[name=password]').focus(); | |
| 115 | 116 | /* setCenterCss(); */ |
| 116 | 117 | if ($.url().param('error')) { |
| 117 | 118 | //去session里查一下失败信息 | ... | ... |
src/main/resources/static/pages/control/line/css/lineControl.css
| 1 | +.portlet.light > .portlet-title.banner{ | |
| 2 | + padding: 17px 20px 0px 20px; | |
| 3 | + border-bottom: none; | |
| 4 | + margin-bottom: 0; | |
| 5 | + padding-bottom: 5px; | |
| 6 | +} | |
| 7 | +.portlet-fullscreen.monitor #top-tabs-wrap .nav-tabs, | |
| 8 | +.portlet.light.monitor > .portlet-title.banner{ | |
| 9 | + background: linear-gradient(to right ,#595959, #7b7b7b,#595959); | |
| 10 | +} | |
| 11 | + | |
| 12 | +.portlet.light.main > .portlet-title.banner, | |
| 13 | +.portlet-fullscreen.main #top-tabs-wrap .nav-tabs{ | |
| 14 | + background: linear-gradient(to right ,#082F4A, #125688,#0a3f64); | |
| 15 | +} | |
| 16 | + | |
| 17 | +.portlet-fullscreen.portlet.light.monitor .nav-tabs > li > a:hover{ | |
| 18 | + background: #656565; | |
| 19 | +} | |
| 20 | + | |
| 21 | +.portlet-fullscreen.portlet.light.monitor .nav-tabs>li.active>a{ | |
| 22 | + background: #FFFFFF; | |
| 23 | +} | |
| 24 | + | |
| 1 | 25 | .load-anim{ |
| 2 | 26 | position: fixed;z-index: 9999999;width: 100%;height: 100%; |
| 3 | 27 | background: rgba(8, 47, 74, 0.89);top: 0;left: 0; |
| ... | ... | @@ -2280,6 +2304,13 @@ tr._tr_active.active-line-no .out-badge{ |
| 2280 | 2304 | background-color: #5d5da9 !important; |
| 2281 | 2305 | } |
| 2282 | 2306 | |
| 2307 | + | |
| 2283 | 2308 | .pb-table tr.selected.dir_1{ |
| 2284 | 2309 | background-color: #dc5a5a !important; |
| 2310 | +} | |
| 2311 | + | |
| 2312 | +#tab_home .tab-pane .row.card_wrap:last-child .line_chart, | |
| 2313 | +#tab_home .tab-pane .row.card_wrap:last-child .col-lg-2 { | |
| 2314 | + border-bottom: 1px solid #DADADA; | |
| 2315 | + border-bottom: 1px solid #DADADA; | |
| 2285 | 2316 | } |
| 2286 | 2317 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/control/line/index.html
| ... | ... | @@ -8,13 +8,13 @@ |
| 8 | 8 | |
| 9 | 9 | <div class="portlet light portlet-fullscreen" style="transition: all .5s ease;padding: 0;" oncontextmenu=self.event.returnValue=false> |
| 10 | 10 | |
| 11 | - <div class="portlet-title" style="padding: 17px 20px 0px 20px;border-bottom: none;margin-bottom: 0;background: linear-gradient(to right ,#082F4A, #125688,#0a3f64);padding-bottom: 5px;"> | |
| 11 | + <div class="portlet-title banner" > | |
| 12 | 12 | <div class="caption col_hide_1280" style="color: #FFF;"> |
| 13 | 13 | <i class="fa fa-life-ring" style="font-size: 22px;color: #FFF;"></i> <span |
| 14 | 14 | class="caption-subject bold" style="font-size: 24px;">闵行公交线路调度系统</span> |
| 15 | 15 | </div> |
| 16 | 16 | <div class="col_hide_1440" style="color: white;font-size: 18px;position: absolute;right: 25px;top: 75px;"> |
| 17 | - <span class="top_username"></span>,在线! | |
| 17 | + <span class="top_username"></span> <span class="operation_mode_text animated" ></span> | |
| 18 | 18 | </div> |
| 19 | 19 | <div class="actions col_hide_1280" > |
| 20 | 20 | <div class="btn-group"> |
| ... | ... | @@ -64,7 +64,7 @@ |
| 64 | 64 | </div> |
| 65 | 65 | |
| 66 | 66 | <button id="exitBtn" type="button" class="btn btn-danger" style="margin-left: 8px;padding: 6.5px 9px !important;" > |
| 67 | - <i class="fa fa-close" ></i> 退出系统</button> | |
| 67 | + <!-- <i class="fa fa-close" ></i> -->退出线路调度</button> | |
| 68 | 68 | </div> |
| 69 | 69 | </div> |
| 70 | 70 | </div> |
| ... | ... | @@ -237,13 +237,29 @@ var lineCodes = '' //全部线路编码字符串,由data.js初始化 |
| 237 | 237 | ,animationend = 'webkitAnimationEnd animationend'; |
| 238 | 238 | moment.locale('zh-cn'); |
| 239 | 239 | |
| 240 | -var cUser; | |
| 240 | +var cUser | |
| 241 | + , storage = window.localStorage | |
| 242 | + , operationMode = storage.getItem('operationMode'); | |
| 243 | + | |
| 241 | 244 | //当前用户 |
| 242 | 245 | $.get('/user/currentUser', function(user){ |
| 243 | 246 | cUser = user; |
| 244 | - $('.portlet-fullscreen .top_username').text(cUser.userName); | |
| 247 | + $('.portlet-fullscreen .top_username').text(cUser.userName) | |
| 248 | + var t = operationMode == 0?',<abbr title="系统将对当前的提交请求进行拦截">监控模式</abbr> 在线' | |
| 249 | + :',主调模式 在线'; | |
| 250 | + $('.portlet-fullscreen .operation_mode_text').html(t); | |
| 245 | 251 | }); |
| 252 | + | |
| 253 | +//打个标记 | |
| 254 | +storage.setItem('real_control_flag', 1); | |
| 255 | + | |
| 246 | 256 | $(function() { |
| 257 | + //主调和监控模式横幅颜色 | |
| 258 | + if(operationMode == 0) | |
| 259 | + $('.portlet-fullscreen').addClass('monitor'); | |
| 260 | + else | |
| 261 | + $('.portlet-fullscreen').addClass('main'); | |
| 262 | + | |
| 247 | 263 | //加载模板文件 |
| 248 | 264 | getTemp('temps/home_tp.html'); |
| 249 | 265 | getTemp('temps/tooltip_tp.html'); | ... | ... |
src/main/resources/static/pages/control/line/js/data.js
| ... | ... | @@ -29,7 +29,8 @@ var _data = (function(){ |
| 29 | 29 | var carDeviceIdMapp = {}; |
| 30 | 30 | |
| 31 | 31 | var fcsjSort = function(a, b){ |
| 32 | - return a.fcsjT - b.fcsjT; | |
| 32 | + //return a.fcsjT - b.fcsjT; | |
| 33 | + return a.fcno - b.fcno; | |
| 33 | 34 | } |
| 34 | 35 | |
| 35 | 36 | var dataObject = { |
| ... | ... | @@ -132,7 +133,7 @@ var _data = (function(){ |
| 132 | 133 | } |
| 133 | 134 | //查询站点路由 |
| 134 | 135 | ,queryStationRoute : function(lineId,container, cb, width){ |
| 135 | - $get('/stationroute/all', {'line.lineCode_eq': lineId}, function(routes){ | |
| 136 | + $get('/stationroute/all', {'line.lineCode_eq': lineId, 'destroy_eq': 0}, function(routes){ | |
| 136 | 137 | var svgData = analyData(routes); |
| 137 | 138 | cb && cb(lineId, svgData, container, width); |
| 138 | 139 | }); |
| ... | ... | @@ -165,9 +166,7 @@ var _data = (function(){ |
| 165 | 166 | }); |
| 166 | 167 | |
| 167 | 168 | //按发车时间排序 |
| 168 | - list.sort(function(a, b){ | |
| 169 | - return a.fcsjT - b.fcsjT; | |
| 170 | - }); | |
| 169 | + list.sort(fcsjSort); | |
| 171 | 170 | } |
| 172 | 171 | cb && cb(rs); |
| 173 | 172 | }); | ... | ... |
src/main/resources/static/pages/control/line/js/main.js
| ... | ... | @@ -6,6 +6,10 @@ |
| 6 | 6 | icon : 3, |
| 7 | 7 | skin : 'layui-layer-cfm-delete' |
| 8 | 8 | }, function(){ |
| 9 | + //清除标记 | |
| 10 | + storage.removeItem('real_control_flag'); | |
| 11 | + //解绑事件 | |
| 12 | + $(document).unbind('ajaxSend', interceptPOST); | |
| 9 | 13 | layer.closeAll(); |
| 10 | 14 | window.location.href = '/pages/control/lineallot/allot.html'; |
| 11 | 15 | }); |
| ... | ... | @@ -112,8 +116,19 @@ setTimeout(function(){ |
| 112 | 116 | homeObject.init(); |
| 113 | 117 | }); |
| 114 | 118 | |
| 119 | + //监控模式下,拦截post请求 | |
| 120 | + if(operationMode == 0){ | |
| 121 | + $(document).on('ajaxSend', interceptPOST); | |
| 122 | + } | |
| 115 | 123 | }, 200) |
| 116 | 124 | |
| 125 | + function interceptPOST(e, xhr, t){ | |
| 126 | + if(t && (t.method == 'POST' || t.type == 'POST')){ | |
| 127 | + console.log(e, xhr, t); | |
| 128 | + xhr.abort(); | |
| 129 | + layer.msg('监控模式!',{offset: 'ct', shift : 6}); | |
| 130 | + } | |
| 131 | + } | |
| 117 | 132 | |
| 118 | 133 | function gpslistToMap(gpslist){ |
| 119 | 134 | var map = {} | ... | ... |
src/main/resources/static/pages/control/line/js/webSocketHandle.js
| ... | ... | @@ -5,7 +5,7 @@ var reqCodeMap = {0xA1: '请求æ¢å¤è¿è¥', 0xA2: '申请调档', 0xA3: 'å‡ºåœ |
| 5 | 5 | |
| 6 | 6 | //将当å‰ç”¨æˆ·å’Œçº¿è·¯ç»‘定到åŽå° |
| 7 | 7 | setTimeout(function(){ |
| 8 | - $.post('/realSchedule/registerLine', {lineCodes: lineCodes} | |
| 8 | + $.get('/realSchedule/registerLine', {lineCodes: lineCodes} | |
| 9 | 9 | ,function(rs){ |
| 10 | 10 | if(rs == 0){ |
| 11 | 11 | console.log('注册线路æˆåŠŸï¼'); | ... | ... |
src/main/resources/static/pages/control/line/temps/home_tp.html
| ... | ... | @@ -8,7 +8,7 @@ |
| 8 | 8 | <div class="col-lg-2 "> |
| 9 | 9 | |
| 10 | 10 | <div class="title"> |
| 11 | - 发往{{lineObj.startStationName}}方向 <span class="up-number" id="{{lineObj.lineCode}}_0_badge"> 0 </span> | |
| 11 | + 发往{{lineObj.endStationName}}方向 <span class="up-number" id="{{lineObj.lineCode}}_0_badge"> 0 </span> | |
| 12 | 12 | <div class="help_text dropdown"> |
| 13 | 13 | <!--<span class=" blue dropdown-toggle col_hide_1440" |
| 14 | 14 | data-toggle="dropdown" aria-expanded="true" |
| ... | ... | @@ -59,7 +59,7 @@ |
| 59 | 59 | <div class="col-lg-2 down"> |
| 60 | 60 | |
| 61 | 61 | <div class="title"> |
| 62 | - 发往{{lineObj.endStationName}}方向 <span class="down-number" id="{{lineObj.lineCode}}_1_badge"> 0 </span> | |
| 62 | + 发往{{lineObj.startStationName}}方向 <span class="down-number" id="{{lineObj.lineCode}}_1_badge"> 0 </span> | |
| 63 | 63 | <div class="help_text dropdown"> |
| 64 | 64 | <!--<span class=" blue dropdown-toggle col_hide_1440" |
| 65 | 65 | data-toggle="dropdown" aria-expanded="true" | ... | ... |
src/main/resources/static/pages/control/lineallot/allot.html
| ... | ... | @@ -78,12 +78,42 @@ |
| 78 | 78 | font-family: 仿宋; |
| 79 | 79 | } |
| 80 | 80 | |
| 81 | -.selected a{ | |
| 81 | +/* .selected a{ | |
| 82 | 82 | position: absolute; |
| 83 | 83 | bottom: 20px; |
| 84 | 84 | } |
| 85 | 85 | .selected a.btn{ |
| 86 | 86 | bottom: 10px; |
| 87 | +} */ | |
| 88 | + | |
| 89 | +.lb_panel{ | |
| 90 | + position: absolute; | |
| 91 | + bottom: 20px; | |
| 92 | +} | |
| 93 | + | |
| 94 | +.lb_panel a{ | |
| 95 | + margin-right: 5px; | |
| 96 | +} | |
| 97 | + | |
| 98 | +.gotoControl.red{ | |
| 99 | + background: #ec7b7b; | |
| 100 | + border-color: #ec7b7b; | |
| 101 | +} | |
| 102 | + | |
| 103 | +.gotoControl.red:hover{ | |
| 104 | + background: #d96262; | |
| 105 | + border-color: #d96262; | |
| 106 | +} | |
| 107 | + | |
| 108 | +#resetBtn,#historyBtn{ | |
| 109 | + vertical-align: bottom; | |
| 110 | + display: inline-block; | |
| 111 | + margin-bottom: 3px; | |
| 112 | +} | |
| 113 | + | |
| 114 | +/** 闵行没有分公司,直接隐藏 */ | |
| 115 | +.company,.sub-company{ | |
| 116 | + display: none !important; | |
| 87 | 117 | } |
| 88 | 118 | </style> |
| 89 | 119 | |
| ... | ... | @@ -118,9 +148,8 @@ |
| 118 | 148 | <input type="text" id="searchLineInput" class="form-control input-lg" placeholder="搜索线路"> </div> |
| 119 | 149 | </div> |
| 120 | 150 | </div> |
| 121 | - | |
| 122 | 151 | <div class="line-select-cont col-md-12" > |
| 123 | - <div class="line-select-body"> | |
| 152 | + <div class="line-select-body" style="margin-top: 20px;"> | |
| 124 | 153 | <span class="load-text">加载中...</span> |
| 125 | 154 | </div> |
| 126 | 155 | </div> |
| ... | ... | @@ -130,15 +159,19 @@ |
| 130 | 159 | <h5 style="font-family: 仿宋; display: block;">已选中线路</h5> |
| 131 | 160 | <div class="selected-body"></div> |
| 132 | 161 | |
| 133 | - <a href="javascript:;" id="gotoControl" class="btn btn-lg blue" > | |
| 134 | - <i class="fa fa-check"></i> 确定 </a> | |
| 135 | - | |
| 136 | - | |
| 137 | - <a href="javascript:;" id="resetBtn" style="left: 120px;color: #3598DC;"> | |
| 138 | - <i class="fa fa-history"></i> 重置</a> | |
| 139 | - | |
| 140 | - <a href="javascript:;" id="historyBtn" style="left: 180px;color: #f36a5a;"> | |
| 141 | - <i class="fa fa-history"></i> 历史纪录 </a> | |
| 162 | + <div class="lb_panel"> | |
| 163 | + <a href="javascript:;" class="btn btn-lg blue gotoControl red" data-status=1> | |
| 164 | + <i class="fa fa-power-off"></i> 主调模式 </a> | |
| 165 | + | |
| 166 | + <a href="javascript:;" id="monitor" class="btn btn-lg grey gotoControl" data-status=0> | |
| 167 | + <i class="fa fa-tv"></i> 监控模式 </a> | |
| 168 | + | |
| 169 | + <a href="javascript:;" id="resetBtn" style="left: 120px;color: #3598DC;"> | |
| 170 | + <i class="fa fa-history"></i> 重置</a> | |
| 171 | + | |
| 172 | + <a href="javascript:;" id="historyBtn" style="left: 180px;color: #f36a5a;"> | |
| 173 | + <i class="fa fa-history"></i> 历史纪录 </a> | |
| 174 | + </div> | |
| 142 | 175 | </div> |
| 143 | 176 | </div> |
| 144 | 177 | </div> |
| ... | ... | @@ -254,7 +287,7 @@ $(function(){ |
| 254 | 287 | }); |
| 255 | 288 | |
| 256 | 289 | //确定 |
| 257 | - $('#gotoControl').on('click', function(){ | |
| 290 | + $('.gotoControl').on('click', function(){ | |
| 258 | 291 | var lines = $('.selected-body .line'); |
| 259 | 292 | if(lines.length == 0){ |
| 260 | 293 | layer.alert('你还没有选择线路!',{icon: 3}); |
| ... | ... | @@ -268,6 +301,8 @@ $(function(){ |
| 268 | 301 | lsData.push(lineIdMap[$(e).data('id')]); |
| 269 | 302 | }); |
| 270 | 303 | storage.setItem('lineControlItems', JSON.stringify(lsData)); |
| 304 | + //监控模式还是主调模式 | |
| 305 | + storage.setItem('operationMode', $(this).data('status')); | |
| 271 | 306 | //将线路路由缓存到localstorage |
| 272 | 307 | cacheRoute(lsData, function(cacheData){ |
| 273 | 308 | for(var lineCode in cacheData){ | ... | ... |
src/main/resources/static/pages/mapmonitor/real/css/real.css
| ... | ... | @@ -87,11 +87,22 @@ label.BMapLabel{ |
| 87 | 87 | |
| 88 | 88 | .mapRightWrap.to_playBack{ |
| 89 | 89 | transform:rotateY(180deg); |
| 90 | - height: 476px; | |
| 91 | - width: 390px | |
| 90 | + min-height: 454px; | |
| 91 | + width: 390px; | |
| 92 | + height: auto; | |
| 92 | 93 | } |
| 93 | 94 | |
| 94 | -.mapRightWrap.to_playBack .alert{ | |
| 95 | +.mapRightWrap.playBack{ | |
| 96 | + min-height: 454px; | |
| 97 | + width: 390px; | |
| 98 | + height: auto; | |
| 99 | +} | |
| 100 | + | |
| 101 | +/* .mapRightWrap.playBack form select{ | |
| 102 | + width: 100%; | |
| 103 | +} */ | |
| 104 | + | |
| 105 | +.mapRightWrap.playBack .alert{ | |
| 95 | 106 | font-size: 13px; |
| 96 | 107 | margin-top: 1px; |
| 97 | 108 | width: calc(100% - 2px); |
| ... | ... | @@ -107,6 +118,7 @@ label.BMapLabel{ |
| 107 | 118 | .mapRightWrap.search{ |
| 108 | 119 | height: 47px; |
| 109 | 120 | padding-top: 0; |
| 121 | + background-color: #626775 !important; | |
| 110 | 122 | } |
| 111 | 123 | |
| 112 | 124 | .playBack form{ |
| ... | ... | @@ -631,22 +643,22 @@ html{ |
| 631 | 643 | } |
| 632 | 644 | |
| 633 | 645 | .play-back-list{ |
| 634 | - display: none; | |
| 646 | +display: none; | |
| 635 | 647 | position: absolute; |
| 636 | 648 | width: 295px; |
| 637 | 649 | right: 5px; |
| 638 | - background: linear-gradient(to right ,#0d4770,#0a3f64); | |
| 639 | 650 | z-index: 9999; |
| 640 | - | |
| 641 | 651 | height: calc(100% - 50px); |
| 642 | 652 | top: 25px; |
| 643 | 653 | padding: 15px 7px 3px; |
| 654 | + background: white; | |
| 655 | + border-radius: 5px !important; | |
| 644 | 656 | } |
| 645 | 657 | |
| 646 | 658 | .progress-wrap{ |
| 647 | 659 | width: calc(100% - 340px); |
| 648 | 660 | height: 10px; |
| 649 | - bottom: 20px; | |
| 661 | + bottom: 33px; | |
| 650 | 662 | left: 20px; |
| 651 | 663 | position: absolute; |
| 652 | 664 | display: none; |
| ... | ... | @@ -688,7 +700,7 @@ html{ |
| 688 | 700 | height: 44px; |
| 689 | 701 | position: absolute; |
| 690 | 702 | right: 320px; |
| 691 | - bottom: 40px; | |
| 703 | + bottom: 58px; | |
| 692 | 704 | padding: 9px 0 0 25px; |
| 693 | 705 | border-radius: 15px !important; |
| 694 | 706 | } |
| ... | ... | @@ -720,13 +732,11 @@ html{ |
| 720 | 732 | } |
| 721 | 733 | |
| 722 | 734 | .pback-logs{ |
| 723 | - height: 100%; | |
| 724 | - width: 100%; | |
| 725 | - color: #e1e1e1; | |
| 735 | + color: #333333; | |
| 726 | 736 | } |
| 727 | 737 | .pback-logs-item{ |
| 728 | 738 | padding: 8px 12px; |
| 729 | - border-bottom: 1px dashed #5a5a5a; | |
| 739 | + border-bottom: 1px dashed #d2d2d2; | |
| 730 | 740 | } |
| 731 | 741 | |
| 732 | 742 | .pback-logs-item-date{ |
| ... | ... | @@ -742,19 +752,20 @@ html{ |
| 742 | 752 | } |
| 743 | 753 | |
| 744 | 754 | .progress-mark-info{ |
| 745 | - position: absolute; | |
| 755 | + position: absolute; | |
| 746 | 756 | width: 62px; |
| 747 | - height: 30px; | |
| 757 | + height: 27px; | |
| 748 | 758 | z-index: 10000; |
| 749 | 759 | background: #1bbc9b; |
| 750 | 760 | display: none; |
| 751 | - top: -35px; | |
| 752 | - padding: 5px 3px; | |
| 761 | + top: -30px; | |
| 762 | + padding: 4px 3px; | |
| 753 | 763 | color: white; |
| 754 | 764 | } |
| 755 | 765 | |
| 756 | 766 | #progress-mark-time{ |
| 757 | 767 | /* transition: all 1s ease; */ |
| 768 | + top: 12px; | |
| 758 | 769 | } |
| 759 | 770 | |
| 760 | 771 | #progress-mark-time-mouse{ | ... | ... |
src/main/resources/static/pages/mapmonitor/real/js/playBack.js
| ... | ... | @@ -34,7 +34,6 @@ var playBack = (function() { |
| 34 | 34 | var lineRoute; |
| 35 | 35 | //默认以第一辆车为焦点 |
| 36 | 36 | var firstCar; |
| 37 | - //S0I-058,S0I-055 ,隧道六线 | |
| 38 | 37 | |
| 39 | 38 | function getCurrMap(){ |
| 40 | 39 | return realMap[realMap.getMap().fName]; |
| ... | ... | @@ -79,6 +78,7 @@ var playBack = (function() { |
| 79 | 78 | getCurrMap().clear(); |
| 80 | 79 | //坐标归0 |
| 81 | 80 | cIndex = 0; |
| 81 | + $('.pback-logs').html(''); | |
| 82 | 82 | //动画 |
| 83 | 83 | $('.play-back-list').removeClass('fadeInRightBig').addClass('fadeOutRightBig'); |
| 84 | 84 | $('.play-back-btns,.progress-wrap').removeClass('fadeInUpBig').addClass('fadeOutDownBig'); |
| ... | ... | @@ -183,6 +183,10 @@ var playBack = (function() { |
| 183 | 183 | |
| 184 | 184 | //点击轨迹回放按钮 |
| 185 | 185 | $('#playBackBtn').on('click', function(){ |
| 186 | + //表单校验 | |
| 187 | + if(!customFormValidate('#playBackForm')) | |
| 188 | + return; | |
| 189 | + | |
| 186 | 190 | var params = $('#playBackForm').serializeJSON(); |
| 187 | 191 | //查询历史gps数据 |
| 188 | 192 | var fs = 'YYYY-MM-DDHH:mm' |
| ... | ... | @@ -198,7 +202,7 @@ var playBack = (function() { |
| 198 | 202 | success:function(rs){ |
| 199 | 203 | gpsArray = rs; |
| 200 | 204 | size = gpsArray.length; |
| 201 | - //layer.closeAll(); | |
| 205 | + layer.closeAll(); | |
| 202 | 206 | //切出轨迹回放面板 |
| 203 | 207 | $('.mapRightWrap,.mapTools,.leftUtilsWrap').fadeOut(); |
| 204 | 208 | $('.play-back-list,.play-back-btns,.progress-wrap').show(); |
| ... | ... | @@ -214,23 +218,29 @@ var playBack = (function() { |
| 214 | 218 | getCurrMap().clear(); |
| 215 | 219 | |
| 216 | 220 | firstCar = params.nbbm[0]; |
| 217 | - layer.msg('加载线路图层数据...', {icon: 16, time: 0,shade:0.3}); | |
| 218 | - $.get('/realSchedule/findRouteByLine', {lineId: $('.mapRightWrap select[name=lineCode]').val()} | |
| 221 | + | |
| 222 | + var lineCode = $('.mapRightWrap select[name=lineCode]').val(); | |
| 223 | + if(lineCode != -1){ | |
| 224 | + layer.msg('加载线路图层数据...', {icon: 16, time: 0,shade:0.3}); | |
| 225 | + $.get('/realSchedule/findRouteByLine', {lineId: lineCode} | |
| 219 | 226 | ,function(route){ |
| 220 | 227 | lineRoute = route; |
| 221 | 228 | getCurrMap().drawLine(lineRoute); |
| 222 | - //开始播放 | |
| 229 | + layer.closeAll(); | |
| 223 | 230 | play(); |
| 224 | - }); | |
| 231 | + }); | |
| 232 | + } | |
| 233 | + else | |
| 234 | + play(); | |
| 225 | 235 | } |
| 226 | 236 | }); |
| 227 | 237 | }); |
| 228 | 238 | |
| 229 | 239 | //默认值 |
| 230 | - $('input[name=sDate]').val('2016-04-24'); | |
| 240 | + /* $('input[name=sDate]').val('2016-04-24'); | |
| 231 | 241 | $('input[name=sTime]').val('04:00'); |
| 232 | 242 | $('input[name=eDate]').val('2016-04-24'); |
| 233 | - $('input[name=eTime]').val('04:40'); | |
| 243 | + $('input[name=eTime]').val('05:40');*/ | |
| 234 | 244 | } |
| 235 | 245 | }; |
| 236 | 246 | |
| ... | ... | @@ -283,6 +293,36 @@ var playBack = (function() { |
| 283 | 293 | //$pmk.css('width', w); |
| 284 | 294 | play(); |
| 285 | 295 | } |
| 296 | + | |
| 297 | + /** | |
| 298 | + * 自定义表单校验 | |
| 299 | + */ | |
| 300 | + function customFormValidate(f){ | |
| 301 | + var rs = true; | |
| 302 | + //所有可见的项 | |
| 303 | + var es = $('input,select', f); | |
| 304 | + | |
| 305 | + for(var i = 0, e; e = es[i++];){ | |
| 306 | + if($(e).attr('required') && ( $(e).val() == null || $(e).val() == '')){ | |
| 307 | + if($(e).hasClass('select2-hidden-accessible')) | |
| 308 | + $(e).next().find('.select2-selection').addClass('custom-val-error'); | |
| 309 | + else | |
| 310 | + $(e).addClass('custom-val-error'); | |
| 311 | + rs = false; | |
| 312 | + } | |
| 313 | + else{ | |
| 314 | + if($(e).hasClass('select2-hidden-accessible')) | |
| 315 | + $(e).next().find('.select2-selection').removeClass('custom-val-error'); | |
| 316 | + else | |
| 317 | + $(e).removeClass('custom-val-error'); | |
| 318 | + } | |
| 319 | + } | |
| 320 | + | |
| 321 | + if(!rs){ | |
| 322 | + layer.alert('数据完整性校验失败,请检查输入项', {icon: 2, title: '操作失败', shift: 5}); | |
| 323 | + } | |
| 324 | + return rs; | |
| 325 | + } | |
| 286 | 326 | |
| 287 | 327 | return exports; |
| 288 | 328 | })(); |
| 289 | 329 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/mapmonitor/real/js/real.js
| ... | ... | @@ -41,9 +41,9 @@ |
| 41 | 41 | } |
| 42 | 42 | var method = $(this).data('click'); |
| 43 | 43 | |
| 44 | - if (!method || playAnimation) | |
| 44 | + /*if (!method || playAnimation) | |
| 45 | 45 | return; |
| 46 | - playAnimation = true; | |
| 46 | + playAnimation = true;*/ | |
| 47 | 47 | |
| 48 | 48 | $('.mapTools').addClass('disable'); |
| 49 | 49 | $('.mapTools div.item.active').removeClass('active'); |
| ... | ... | @@ -58,19 +58,25 @@ |
| 58 | 58 | // 车辆 |
| 59 | 59 | vehicle : function() { |
| 60 | 60 | |
| 61 | - mrw.html('').addClass('to_vehicle vehicle'); | |
| 62 | - resetRotate(null, vehiclePanel.showData); | |
| 61 | + /*mrw.html('').addClass('to_vehicle vehicle'); | |
| 62 | + resetRotate(null, vehiclePanel.showData);*/ | |
| 63 | + mrw.html('').addClass('vehicle'); | |
| 64 | + vehiclePanel.showData(); | |
| 63 | 65 | }, |
| 64 | 66 | search : function() { |
| 65 | - mrw.html('').addClass('to_searchPanel search'); | |
| 66 | - resetRotate(null, searchPanel.init); | |
| 67 | + /*mrw.html('').addClass('to_searchPanel search'); | |
| 68 | + resetRotate(null, searchPanel.init);*/ | |
| 69 | + mrw.html('').addClass('search'); | |
| 70 | + searchPanel.init(); | |
| 67 | 71 | }, |
| 68 | 72 | notice : function() { |
| 69 | 73 | alert('notice'); |
| 70 | 74 | }, |
| 71 | 75 | playBack : function() { |
| 72 | - mrw.html('').addClass('to_playBack playBack'); | |
| 73 | - resetRotate(null, playBack.init); | |
| 76 | + /*mrw.html('').addClass('to_playBack playBack'); | |
| 77 | + resetRotate(null, playBack.init);*/ | |
| 78 | + mrw.html('').addClass('playBack'); | |
| 79 | + playBack.init(); | |
| 74 | 80 | |
| 75 | 81 | }, |
| 76 | 82 | clearStyle : function() { | ... | ... |
src/main/resources/static/pages/mapmonitor/real/real.html
| ... | ... | @@ -26,137 +26,23 @@ |
| 26 | 26 | |
| 27 | 27 | <div class="mapTools z-depth-3 "> |
| 28 | 28 | <div class="item active" data-click="vehicle"> |
| 29 | - <i class="fa fa-bus"></i> 线路 | |
| 29 | + <i class="fa fa-bus"></i> 线路 | |
| 30 | 30 | </div> |
| 31 | 31 | <div class="item" data-click="search"> |
| 32 | - <i class="fa fa-search"></i> 搜索 | |
| 32 | + <i class="fa fa-search"></i> 搜索 | |
| 33 | 33 | </div> |
| 34 | 34 | <!-- <div class="item" data-click="notice"> --> |
| 35 | 35 | <div class="item" > |
| 36 | - <i class="fa fa-bell-o"></i> 安全 | |
| 36 | + <i class="fa fa-bell-o"></i> 安全 | |
| 37 | 37 | </div> |
| 38 | 38 | <div class="item" data-click="playBack"> |
| 39 | - <i class="fa fa-history"></i> 回放 | |
| 39 | + <i class="fa fa-history"></i> 回放 | |
| 40 | 40 | </div> |
| 41 | 41 | </div> |
| 42 | 42 | |
| 43 | 43 | <!-- 轨迹回放面板 --> |
| 44 | -<div class="play-back-list animated fadeInRightBig"> | |
| 45 | - <div class="pback-logs"> | |
| 46 | - <!-- <div class="pback-logs-item"> | |
| 47 | - W2B-012 进站 金桥路浦东大道站 | |
| 48 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 49 | - </div> | |
| 50 | - <div class="pback-logs-item"> | |
| 51 | - W2B-012 出站 金桥路浦东大道站 | |
| 52 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 53 | - </div> | |
| 54 | - <div class="pback-logs-item"> | |
| 55 | - W2B-012 进站 金桥路浦东大道站 | |
| 56 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 57 | - </div> | |
| 58 | - <div class="pback-logs-item"> | |
| 59 | - W2B-012 出站 金桥路浦东大道站 | |
| 60 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 61 | - </div> | |
| 62 | - <div class="pback-logs-item"> | |
| 63 | - W2B-012 进站 金桥路浦东大道站 | |
| 64 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 65 | - </div> | |
| 66 | - <div class="pback-logs-item"> | |
| 67 | - W2B-012 出站 金桥路浦东大道站 | |
| 68 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 69 | - </div> | |
| 70 | - <div class="pback-logs-item"> | |
| 71 | - W2B-012 进站 金桥路浦东大道站 | |
| 72 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 73 | - </div> | |
| 74 | - <div class="pback-logs-item"> | |
| 75 | - W2B-012 出站 金桥路浦东大道站 | |
| 76 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 77 | - </div> | |
| 78 | - <div class="pback-logs-item"> | |
| 79 | - W2B-012 进站 金桥路浦东大道站 | |
| 80 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 81 | - </div> | |
| 82 | - <div class="pback-logs-item"> | |
| 83 | - W2B-012 出站 金桥路浦东大道站 | |
| 84 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 85 | - </div> | |
| 86 | - <div class="pback-logs-item"> | |
| 87 | - W2B-012 进站 金桥路浦东大道站 | |
| 88 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 89 | - </div> | |
| 90 | - <div class="pback-logs-item"> | |
| 91 | - W2B-012 出站 金桥路浦东大道站 | |
| 92 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 93 | - </div> | |
| 94 | - <div class="pback-logs-item"> | |
| 95 | - W2B-012 进站 金桥路浦东大道站 | |
| 96 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 97 | - </div> | |
| 98 | - <div class="pback-logs-item"> | |
| 99 | - W2B-012 出站 金桥路浦东大道站 | |
| 100 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 101 | - </div><div class="pback-logs-item"> | |
| 102 | - W2B-012 进站 金桥路浦东大道站 | |
| 103 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 104 | - </div> | |
| 105 | - <div class="pback-logs-item"> | |
| 106 | - W2B-012 出站 金桥路浦东大道站 | |
| 107 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 108 | - </div> | |
| 109 | - <div class="pback-logs-item"> | |
| 110 | - W2B-012 进站 金桥路浦东大道站 | |
| 111 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 112 | - </div> | |
| 113 | - <div class="pback-logs-item"> | |
| 114 | - W2B-012 出站 金桥路浦东大道站 | |
| 115 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 116 | - </div> | |
| 117 | - <div class="pback-logs-item"> | |
| 118 | - W2B-012 进站 金桥路浦东大道站 | |
| 119 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 120 | - </div> | |
| 121 | - <div class="pback-logs-item"> | |
| 122 | - W2B-012 出站 金桥路浦东大道站 | |
| 123 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 124 | - </div> | |
| 125 | - <div class="pback-logs-item"> | |
| 126 | - W2B-012 进站 金桥路浦东大道站 | |
| 127 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 128 | - </div> | |
| 129 | - <div class="pback-logs-item"> | |
| 130 | - W2B-012 出站 金桥路浦东大道站 | |
| 131 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 132 | - </div> | |
| 133 | - | |
| 134 | - <div class="pback-logs-item"> | |
| 135 | - W2B-012 进站 金桥路浦东大道站 | |
| 136 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 137 | - </div> | |
| 138 | - <div class="pback-logs-item"> | |
| 139 | - W2B-012 出站 金桥路浦东大道站 | |
| 140 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 141 | - </div> | |
| 142 | - <div class="pback-logs-item"> | |
| 143 | - W2B-012 进站 金桥路浦东大道站 | |
| 144 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 145 | - </div> | |
| 146 | - <div class="pback-logs-item"> | |
| 147 | - W2B-012 出站 金桥路浦东大道站 | |
| 148 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 149 | - </div> | |
| 150 | - <div class="pback-logs-item"> | |
| 151 | - W2B-012 进站 金桥路浦东大道站 | |
| 152 | - <span class="pback-logs-item-date">07月17 12:40</span> | |
| 153 | - </div> | |
| 154 | - <div class="pback-logs-item"> | |
| 155 | - W2B-012 出站 金桥路浦东大道站 | |
| 156 | - <span class="pback-logs-item-date">07月17 12:42</span> | |
| 157 | - </div> --> | |
| 158 | - | |
| 159 | - </div> | |
| 44 | +<div class="play-back-list animated fadeInRightBig z-depth-2"> | |
| 45 | + <div class="pback-logs"></div> | |
| 160 | 46 | </div> |
| 161 | 47 | <div class="play-back-btns z-depth-1 animated fadeInUpBig"> |
| 162 | 48 | <i class="fa fa-play playBtn" data-status=0></i> | ... | ... |
src/main/resources/static/pages/mapmonitor/real/temps/playBack.html
| 1 | + | |
| 2 | +<!-- W2B-083 , W2B-084 , W2B-087 85路 --> | |
| 1 | 3 | <script id="play_back_panel_temp" type="text/html"> |
| 2 | 4 | <div class="alert alert-info animated flipInX"> |
| 3 | -<i class="fa fa-exclamation-circle" ></i> 最多跨一天回放,请尽量小范围的查询 W2B-083 , W2B-084 , W2B-087 85路</div> | |
| 5 | +<i class="fa fa-exclamation-circle" ></i> 最多跨一天回放,请尽量小范围的查询</div> | |
| 4 | 6 | <form class="form-horizontal" role="form" id="playBackForm"> |
| 5 | 7 | <div class="form-body"> |
| 6 | 8 | <div class="form-group"> |
| 7 | 9 | <label class="col-md-3 control-label">车辆编码</label> |
| 8 | 10 | <div class="col-md-9"> |
| 9 | - <select class="form-control" name="nbbm[]" placeholder="车辆编码" multiple="multiple"></select> | |
| 11 | + <select class="form-control" name="nbbm[]" placeholder="车辆编码" multiple="multiple" required=1 style="width:100%;"></select> | |
| 10 | 12 | </div> |
| 11 | 13 | </div> |
| 12 | 14 | |
| 13 | 15 | <div class="form-group"> |
| 14 | 16 | <label class="col-md-3 control-label">起始时间</label> |
| 15 | 17 | <div class="col-md-9"> |
| 16 | - <input type="date" name="sDate" class="form-control" placeholder="日期"> | |
| 17 | - <input type="time" name="sTime" class="form-control" placeholder="时间"> | |
| 18 | + <input type="date" name="sDate" class="form-control" placeholder="日期" required=1> | |
| 19 | + <input type="time" name="sTime" class="form-control" placeholder="时间" required=1> | |
| 18 | 20 | </div> |
| 19 | 21 | </div> |
| 20 | 22 | <div class="form-group"> |
| 21 | 23 | <label class="col-md-3 control-label">截止时间</label> |
| 22 | 24 | <div class="col-md-9"> |
| 23 | - <input type="date" name="eDate" class="form-control" placeholder="截止时间"> | |
| 24 | - <input type="time" name="eTime" class="form-control" placeholder="时间"> | |
| 25 | + <input type="date" name="eDate" class="form-control" placeholder="截止时间" required=1> | |
| 26 | + <input type="time" name="eTime" class="form-control" placeholder="时间" required=1> | |
| 25 | 27 | </div> |
| 26 | 28 | </div> |
| 27 | 29 | </div> |
| ... | ... | @@ -30,13 +32,13 @@ |
| 30 | 32 | <div class="form-group"> |
| 31 | 33 | <label class="col-md-3 control-label">线路图层</label> |
| 32 | 34 | <div class="col-md-9"> |
| 33 | - <select class="form-control" name="lineCode" ></select> | |
| 35 | + <select class="form-control" name="lineCode" style="width:100%;"></select> | |
| 34 | 36 | </div> |
| 35 | 37 | </div> |
| 36 | 38 | </form> |
| 37 | 39 | <hr> |
| 38 | 40 | <div class="form-actions"> |
| 39 | - <div class="row" style="text-align: center;margin-left: 0;"> | |
| 41 | + <div class="row" style="text-align: center;margin-left: 0;margin-bottom: 20px;"> | |
| 40 | 42 | <div > |
| 41 | 43 | <button type="button" class="btn green-meadow btn-lg" id="playBackBtn"> <i class="fa fa-play-circle"> </i> 轨迹回放 </button> |
| 42 | 44 | </div> | ... | ... |