Commit adc1270feca1af854703b8614ddb0ab96f46ba6f

Authored by 王通
1 parent a4f3a849

1.应急预案平台与调度系统联通

src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
1 -package com.bsth.controller.realcontrol;  
2 -  
3 -import java.io.ByteArrayOutputStream;  
4 -import java.io.IOException;  
5 -import java.io.InputStream;  
6 -import java.io.OutputStream;  
7 -import java.net.HttpURLConnection;  
8 -import java.net.MalformedURLException;  
9 -import java.net.URL;  
10 -import java.net.URLEncoder;  
11 -import java.sql.Connection;  
12 -import java.sql.Date;  
13 -import java.sql.PreparedStatement;  
14 -import java.sql.ResultSet;  
15 -import java.util.*;  
16 -  
17 -import com.bsth.data.forecast.entity.ArrivalEntity;  
18 -import com.bsth.entity.sys.SysUser;  
19 -import com.bsth.security.util.SecurityUtils;  
20 -import com.bsth.util.ReportUtils;  
21 -import com.bsth.util.db.DBUtils_MS;  
22 -import com.bsth.util.db.DBUtils_control;  
23 -import com.fasterxml.jackson.databind.ObjectMapper;  
24 -import org.apache.commons.io.IOUtils;  
25 -import org.apache.commons.lang3.StringEscapeUtils;  
26 -import org.joda.time.DateTime;  
27 -import org.joda.time.format.DateTimeFormat;  
28 -import org.joda.time.format.DateTimeFormatter;  
29 -import org.springframework.beans.factory.annotation.Autowired;  
30 -import org.springframework.web.bind.annotation.*;  
31 -  
32 -import com.alibaba.fastjson.JSONArray;  
33 -import com.bsth.common.ResponseCode;  
34 -import com.bsth.controller.BaseController;  
35 -import com.bsth.controller.realcontrol.dto.ChangePersonCar;  
36 -import com.bsth.controller.realcontrol.dto.DfsjChange;  
37 -import com.bsth.data.BasicData;  
38 -import com.bsth.data.schedule.DayOfSchedule;  
39 -import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;  
40 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
41 -import com.bsth.entity.report.RepairReport;  
42 -import com.bsth.entity.schedule.SchedulePlanInfo;  
43 -import com.bsth.service.realcontrol.ScheduleRealInfoService;  
44 -  
45 -@RestController  
46 -@RequestMapping("/realSchedule")  
47 -public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, Long> {  
48 -  
49 - @Autowired  
50 - ScheduleRealInfoService scheduleRealInfoService;  
51 -  
52 - @Autowired  
53 - DayOfSchedule dayOfSchedule;  
54 -  
55 - @RequestMapping(value = "check_fgs_ascription", method = RequestMethod.POST)  
56 - public Map<String, Object> checkPCFgsAscription(@RequestParam Long schId, String jGh, String sGh, String nbbm){  
57 - return scheduleRealInfoService.checkPCFgsAscription(schId, jGh, sGh, nbbm);  
58 - }  
59 -  
60 - @RequestMapping(value = "/lines")  
61 - public Map<String, Collection<ScheduleRealInfo>> findByLines(@RequestParam String lines) {  
62 - return scheduleRealInfoService.findByLines(lines);  
63 - }  
64 -  
65 - @RequestMapping(value = "/car")  
66 - public List<ScheduleRealInfo> findByCar(String nbbm){  
67 - return dayOfSchedule.findByNbbm(nbbm);  
68 - }  
69 -  
70 - /**  
71 - *  
72 - * @Title: outgoAdjust @Description: TODO(待发调整) @param @param id  
73 - * 主键 @param @param remarks 备注 @param @param dfsj 待发时间(HH:mm) @throws  
74 - */  
75 - @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST)  
76 - public Map<String, Object> outgoAdjust(@RequestParam Long id, @RequestParam String remarks,  
77 - @RequestParam String dfsj,String bcType,  
78 - @RequestParam(defaultValue = "") String opType) {  
79 - return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj, bcType, opType, null);  
80 - }  
81 -  
82 - /**  
83 - *  
84 - * @Title: destroy @Description: TODO(销毁,烂班) @param @param idsStr 要烂掉的班次ID ,分隔  
85 - */  
86 - @RequestMapping(value = "/destroy", method = RequestMethod.POST)  
87 - public Map<String, Object> destroy(@RequestParam String idsStr  
88 - /*, @RequestParam(defaultValue = "-1") int spaceAdjust*/,  
89 - @RequestParam String remarks, @RequestParam String adjustExps/*, @RequestParam(defaultValue = "0") int spaceNum*/) {  
90 - return scheduleRealInfoService.destroy(idsStr, remarks, adjustExps, null);  
91 - }  
92 -  
93 - /**  
94 - *  
95 - * @Title: carDeviceMapp @Description: TODO(获取车辆自编号和设备号对照,从缓存取) @throws  
96 - */  
97 - @RequestMapping(value = "/carDeviceMapp", method = RequestMethod.GET)  
98 - public Map<String, String> carDeviceMapp() {  
99 - return BasicData.deviceId2NbbmMap.inverse();  
100 - }  
101 -  
102 - /**  
103 - *  
104 - * @Title: findPersionByLine @Description: TODO(根据线路主键获取驾驶员) @param @param  
105 - * lineId @throws  
106 - */  
107 - @RequestMapping(value = "/driver", method = RequestMethod.GET)  
108 - public List<Map<String, String>> findDriverByLine(@RequestParam String lineCode) {  
109 - return scheduleRealInfoService.findDriverByLine(lineCode);  
110 - }  
111 -  
112 - /**  
113 - *  
114 - * @Title: findPersionByLine @Description: TODO(根据线路主键获取售票员) @param @param  
115 - * lineId @throws  
116 - */  
117 - @RequestMapping(value = "/conductor", method = RequestMethod.GET)  
118 - public List<Map<String, String>> findConductorByLine(@RequestParam String lineCode) {  
119 - return scheduleRealInfoService.findConductorByLine(lineCode);  
120 - }  
121 -  
122 - /**  
123 - *  
124 - * @Title: findPersionByLine @Description: TODO(根据线路主键获取车辆) @param @param  
125 - * lineId @throws  
126 - */  
127 - @RequestMapping(value = "/cars", method = RequestMethod.GET)  
128 - public List<Map<String, String>> findCarByLine(@RequestParam String lineCode) {  
129 - return scheduleRealInfoService.findCarByLine(lineCode);  
130 - }  
131 -  
132 - /**  
133 - *  
134 - * @Title: sreachNbbm @Description: TODO(搜索车辆内部编码) @throws  
135 - */  
136 - @RequestMapping(value = "/sreachVehic", method = RequestMethod.GET)  
137 - public List<Map<String, String>> sreachVehic(@RequestParam String nbbm) {  
138 - return scheduleRealInfoService.sreachVehic(nbbm);  
139 - }  
140 - /**  
141 - *  
142 - * @Title: realOutAdjust  
143 - * @Description: TODO(实发调整)  
144 - * @param @param id 班次ID  
145 - * @param @param fcsjActual 实际发车时间 HH:mm  
146 - * @param @param remarks 备注  
147 - * @throws  
148 - */  
149 - @RequestMapping(value = "/realOutAdjust", method = RequestMethod.POST)  
150 - public Map<String, Object> realOutAdjust(@RequestParam Map<String, String> map) {  
151 - return scheduleRealInfoService.realOutAdjust(map);  
152 - }  
153 -  
154 - /**  
155 - *  
156 - * @Title: revokeDestroy  
157 - * @Description: TODO(撤销烂班)  
158 - * @param @param id  
159 - * @throws  
160 - */  
161 - @RequestMapping(value = "/revokeDestroy", method = RequestMethod.POST)  
162 - public Map<String, Object> revokeDestroy(@RequestParam Long id){  
163 - return scheduleRealInfoService.revokeDestroy(id);  
164 - }  
165 -  
166 - /**  
167 - *  
168 - * @Title: revokeRealOutgo  
169 - * @Description: TODO(撤销实发)  
170 - * @param @param id  
171 - * @throws  
172 - */  
173 - @RequestMapping(value = "/revokeRealOutgo", method = RequestMethod.POST)  
174 - public Map<String, Object> revokeRealOutgo(@RequestParam Long id){  
175 - return scheduleRealInfoService.revokeRealOutgo(id);  
176 - }  
177 -  
178 - /**  
179 - * 撤销执行  
180 - * @param id  
181 - * @return  
182 - */  
183 - @RequestMapping(value = "/revokeRealArrive", method = RequestMethod.POST)  
184 - public Map<String, Object> revokeRealArrive(@RequestParam Long id){  
185 - return scheduleRealInfoService.revokeRealArrive(id);  
186 - }  
187 -  
188 - /**  
189 - *  
190 - * @Title: spaceAdjust  
191 - * @Description: TODO(间隔调整)  
192 - * @param @param ids 要调整的班次数组ID  
193 - * @param @param space 间隔  
194 - * @throws  
195 - */  
196 - @RequestMapping(value = "/spaceAdjust", method = RequestMethod.POST)  
197 - public Map<String, Object> spaceAdjust(Long[] ids, Integer space){  
198 - return scheduleRealInfoService.spaceAdjust(ids, space);  
199 - }  
200 -  
201 - /**  
202 - *  
203 - * @Title: schInfoFineTune  
204 - * @Description: TODO(发车信息微调)  
205 - * @param @param map  
206 - * @throws  
207 - */  
208 - @RequestMapping(value = "/schInfoFineTune", method = RequestMethod.POST)  
209 - public Map<String, Object> schInfoFineTune(@RequestParam Map<String, String> map){  
210 - return scheduleRealInfoService.schInfoFineTune(map);  
211 - }  
212 -  
213 - /**  
214 - *  
215 - * @Title: outgoAdjustAll  
216 - * @Description: TODO(批量待发调整)  
217 - * @param @param list  
218 - * @throws  
219 - */  
220 - @RequestMapping(value = "/outgoAdjustAll", method = RequestMethod.POST)  
221 - public Map<String, Object> outgoAdjustAll(@RequestParam String params){  
222 - //反转义  
223 - params = StringEscapeUtils.unescapeHtml4(params);  
224 - return scheduleRealInfoService.outgoAdjustAll(params);  
225 - }  
226 -  
227 - /**  
228 - *  
229 - * @Title: findByLineAndUpDown  
230 - * @Description: TODO(根据线路和走向获取班次)  
231 - * @param @param line  
232 - * @param @param upDown  
233 - */  
234 - @RequestMapping(value = "/findByLineAndUpDown")  
235 - public List<ScheduleRealInfo> findByLineAndUpDown(@RequestParam String line,@RequestParam Integer upDown){  
236 - return dayOfSchedule.findByLineAndUpDown(line, upDown);  
237 - }  
238 -  
239 - /**  
240 - *  
241 - * @Title: findRouteByLine  
242 - * @Description: TODO(获取线路的站点,路段路由)  
243 - * @param @param lineCode  
244 - * @throws  
245 - */  
246 - @RequestMapping(value = "/findRouteByLine")  
247 - public Map<String, Object> findRouteByLine(@RequestParam String lineCode){  
248 - return scheduleRealInfoService.findRouteByLine(lineCode);  
249 - }  
250 -  
251 - /**  
252 - *  
253 - * @Title: removeChildTask  
254 - * @Description: TODO(删除子任务)  
255 - * @param @param taskId 子任务ID  
256 - * @throws  
257 - */  
258 - @RequestMapping(value = "/childTask/{taskId}", method = RequestMethod.DELETE)  
259 - public Map<String, Object> removeChildTask(@PathVariable("taskId") Long taskId){  
260 - return scheduleRealInfoService.removeChildTask(taskId);  
261 - }  
262 -  
263 - /**  
264 - *  
265 - * @Title: findByLineCode  
266 - * @Description: TODO(根据线路获取班次信息)  
267 - * @param @param lineCode  
268 - */  
269 - @RequestMapping(value = "/lineCode/{lineCode}")  
270 - public List<ScheduleRealInfo> findByLineCode(@PathVariable("lineCode") String lineCode){  
271 - return dayOfSchedule.findByLineCode(lineCode);  
272 - }  
273 -  
274 - @RequestMapping(value = "/queryUserInfo")  
275 - public List<ScheduleRealInfo> queryUserInfo(@RequestParam String line,  
276 - @RequestParam String date,@RequestParam String state) {  
277 - return scheduleRealInfoService.queryUserInfo(line, date,state);  
278 - }  
279 -  
280 - @RequestMapping(value = "/queryUserInfoPx")  
281 - public List<ScheduleRealInfo> queryUserInfoPx(@RequestParam String line,  
282 - @RequestParam String date,@RequestParam String state,@RequestParam String type) {  
283 - return scheduleRealInfoService.queryUserInfoPx(line, date,state,type);  
284 - }  
285 -  
286 - @RequestMapping(value = "/exportWaybill",method = RequestMethod.GET)  
287 - public List<ScheduleRealInfo> exportWaybill(@RequestParam String jName,@RequestParam String jGh, @RequestParam String clZbh,  
288 - @RequestParam String lpName,@RequestParam String date,@RequestParam String line) {  
289 - return scheduleRealInfoService.exportWaybill(jName,jGh, clZbh, lpName,date,line);  
290 - }  
291 -  
292 - @RequestMapping(value = "/exportWaybillQp",method = RequestMethod.GET)  
293 - public List<ScheduleRealInfo> exportWaybillQp(@RequestParam String clZbh  
294 - ,@RequestParam String date,@RequestParam String line) {  
295 - return scheduleRealInfoService.exportWaybillQp( clZbh, date,line);  
296 - }  
297 -  
298 -  
299 - @RequestMapping(value = "/dailyInfo")  
300 - public List<Map<String, Object>> dailyInfo(@RequestParam String line, @RequestParam String date,@RequestParam String type) {  
301 - return scheduleRealInfoService.dailyInfo(line, date, type);  
302 - }  
303 -  
304 - @RequestMapping(value = "/historyMessage")  
305 - public List<Object[]> historyMessage(@RequestParam String line, @RequestParam String date,  
306 - @RequestParam String code, @RequestParam String type) {  
307 - return scheduleRealInfoService.historyMessage(line, date, code, type);  
308 - }  
309 -  
310 - @RequestMapping(value="/findLine")  
311 - public List<Map<String,String>> findLine(@RequestParam String line){  
312 - return scheduleRealInfoService.findLine(line);  
313 - }  
314 -  
315 - @RequestMapping(value="/findKMBC",method = RequestMethod.GET)  
316 - public Map<String,Object> findKMBC(@RequestParam String jGh,@RequestParam String clZbh,@RequestParam String lpName  
317 - ,@RequestParam String date,@RequestParam String line){  
318 - return scheduleRealInfoService.findKMBC(jGh, clZbh,lpName,date,line);  
319 - }  
320 -  
321 - /**  
322 - * 路单公里统计 (闵行审计专用)  
323 - * @param jGh  
324 - * @param clZbh  
325 - * @param lpName  
326 - * @param date  
327 - * @param line  
328 - * @return  
329 - */  
330 - @RequestMapping(value="/findKMBC_mh_2",method = RequestMethod.GET)  
331 - public Map<String,Object> findKMBC_mh_2(@RequestParam String jGh,@RequestParam String clZbh,@RequestParam String lpName  
332 - ,@RequestParam String date,@RequestParam String line){  
333 - return scheduleRealInfoService.findKMBC_mh_2(jGh, clZbh,lpName,date,line);  
334 - }  
335 -  
336 - @RequestMapping(value="/findKMBCQp",method = RequestMethod.GET)  
337 - public Map<String,Object> findKMBCQp(@RequestParam String clZbh  
338 - ,@RequestParam String date,@RequestParam String line){  
339 - return scheduleRealInfoService.findKMBCQp(clZbh,date,line);  
340 - }  
341 -  
342 - @RequestMapping(value="/findLpName")  
343 - public List<Map<String,String>> findLpName(@RequestParam String lpName){  
344 - return scheduleRealInfoService.findLpName(lpName);  
345 - }  
346 -  
347 - @RequestMapping(value = "/account")  
348 - public List<Map<String,Object>> account(@RequestParam String line, @RequestParam String date,  
349 - @RequestParam String code,@RequestParam String xlName, @RequestParam String type) {  
350 - return scheduleRealInfoService.account(line, date, code, xlName, type);  
351 - }  
352 -  
353 - @RequestMapping(value = "/accountPx")  
354 - public List<Map<String,Object>> accountPx(@RequestParam String line, @RequestParam String date,  
355 - @RequestParam String code,@RequestParam String xlName, @RequestParam String px) {  
356 - return scheduleRealInfoService.accountPx(line, date, code, xlName, px);  
357 - }  
358 -  
359 - @RequestMapping(value = "/correctForm")  
360 - public List<SchEditInfoDto> correctForm(@RequestParam String line, @RequestParam String date,  
361 - @RequestParam String endDate,  
362 - @RequestParam String lpName, @RequestParam String code,  
363 - @RequestParam String type,@RequestParam String changType) {  
364 - return scheduleRealInfoService.correctForm(line, date, endDate, lpName, code, type,changType);  
365 - }  
366 - /**  
367 - * @Title queryListWaybill  
368 - * @Description 查询行车路单列表  
369 - * @param jGh 驾驶员名字  
370 - * @param clZbh 车辆自编号(内部编号)  
371 - * @param lpName 路牌  
372 - * @return  
373 - */  
374 - @RequestMapping(value="/queryListWaybill",method = RequestMethod.GET)  
375 - public List<ScheduleRealInfo> queryListWaybill(@RequestParam String jGh,@RequestParam String clZbh,@RequestParam String lpName  
376 - ,@RequestParam String date,@RequestParam String line){  
377 - return scheduleRealInfoService.queryListWaybill(jGh, clZbh,lpName,date,line);  
378 - }  
379 -  
380 - /**  
381 - * @Title queryListWaybill  
382 - * @Description 查询行车路单列表(闵行审计专用路单)  
383 - * @param jName 驾驶员名字  
384 - * @param clZbh 车辆自编号(内部编号)  
385 - * @param lpName 路牌  
386 - * @return  
387 - */  
388 - @RequestMapping(value="/queryListWaybill_mh_2",method = RequestMethod.GET)  
389 - public List<ScheduleRealInfo> queryListWaybill_mh_2(@RequestParam String jName,@RequestParam String clZbh,@RequestParam String lpName  
390 - ,@RequestParam String date,@RequestParam String line){  
391 - return scheduleRealInfoService.queryListWaybill2(jName, clZbh,lpName,date,line);  
392 - }  
393 -  
394 - @RequestMapping(value="/queryListWaybillQp",method = RequestMethod.GET)  
395 - public List<ScheduleRealInfo> queryListWaybillQp(@RequestParam String clZbh,  
396 - @RequestParam String date,@RequestParam String line){  
397 - return scheduleRealInfoService.queryListWaybillQp(clZbh,date,line);  
398 - }  
399 -  
400 - @RequestMapping(value="/statisticsDaily")  
401 - public List<Map<String,Object>> statisticsDaily(@RequestParam String line, @RequestParam String date,  
402 - @RequestParam String xlName, @RequestParam String type){  
403 - return scheduleRealInfoService.statisticsDaily(line, date, xlName, type);  
404 - }  
405 -  
406 - @RequestMapping(value="/statisticsDaily_mh_2")  
407 - public List<Map<String,Object>> statisticsDaily_mh_2(@RequestParam String line, @RequestParam String date,  
408 - @RequestParam String xlName, @RequestParam String type){  
409 - return scheduleRealInfoService.statisticsDaily_mh_2(line, date, xlName, type);  
410 - }  
411 -  
412 - @RequestMapping(value="/dispatchDailySum")  
413 - public List<Map<String,Object>> dispatchDailySum(@RequestParam Map<String, Object> map){  
414 - String date="";  
415 - if(map.get("date")!=null){  
416 - date=map.get("date").toString();  
417 - }  
418 - String date2="";  
419 - if(map.get("date2")!=null){  
420 - date2=map.get("date2").toString();  
421 - }  
422 - String nature="0";  
423 - if(map.get("nature")!=null){  
424 - nature=map.get("nature").toString();  
425 - }  
426 - String type="";  
427 - if(map.get("type")!=null){  
428 - type=map.get("type").toString();  
429 - }  
430 - return scheduleRealInfoService.dispatchDailySum(date, date2, nature, type);  
431 - }  
432 -  
433 - @RequestMapping(value="/statisticsDailyTj")  
434 - public List<Map<String,Object>> statisticsDailyTj(@RequestParam Map<String, Object> map){  
435 - String gsdm="";  
436 - if(map.get("gsdm")!=null){  
437 - gsdm=map.get("gsdm").toString();  
438 - }  
439 - String fgsdm="";  
440 - if(map.get("fgsdm")!=null){  
441 - fgsdm=map.get("fgsdm").toString();  
442 - }  
443 - String line="";  
444 - if(map.get("line")!=null){  
445 - line=map.get("line").toString();  
446 - }  
447 - String date="";  
448 - if(map.get("date")!=null){  
449 - date=map.get("date").toString();  
450 - }  
451 - String date2="";  
452 - if(map.get("date2")!=null){  
453 - date2=map.get("date2").toString();  
454 - }  
455 - String xlName="";  
456 - if(map.get("xlName")!=null){  
457 - xlName=map.get("xlName").toString();  
458 - }  
459 - String type="";  
460 - if(map.get("type")!=null){  
461 - type=map.get("type").toString();  
462 - }  
463 - String nature="0";  
464 - if(map.get("nature")!=null){  
465 - nature=map.get("nature").toString();  
466 - }  
467 - return scheduleRealInfoService.statisticsDailyTj(gsdm,fgsdm,line, date,date2, xlName, type,nature);  
468 - }  
469 -  
470 - /*  
471 - * 公里修正报表  
472 - */  
473 - @RequestMapping(value="/mileageReportTj")  
474 - public List<Map<String,Object>> mileageReport(@RequestParam Map<String, Object> map){  
475 - String gsdm="";  
476 - if(map.get("gsdm")!=null){  
477 - gsdm=map.get("gsdm").toString();  
478 - }  
479 - String fgsdm="";  
480 - if(map.get("fgsdm")!=null){  
481 - fgsdm=map.get("fgsdm").toString();  
482 - }  
483 - String line="";  
484 - if(map.get("line")!=null){  
485 - line=map.get("line").toString();  
486 - }  
487 - String date="";  
488 - if(map.get("date")!=null){  
489 - date=map.get("date").toString();  
490 - }  
491 - String date2="";  
492 - if(map.get("date2")!=null){  
493 - date2=map.get("date2").toString();  
494 - }  
495 - String xlName="";  
496 - if(map.get("xlName")!=null){  
497 - xlName=map.get("xlName").toString();  
498 - }  
499 - return scheduleRealInfoService.mileageReport(gsdm,fgsdm,line, date,date2);  
500 - }  
501 -  
502 - /*  
503 - * 班次修正报表  
504 - */  
505 - @RequestMapping(value="/scheduleCorrectionReport")  
506 - public List<Map<String,Object>> scheduleCorrectionReport(@RequestParam Map<String, Object> map){  
507 - String gsdm="";  
508 - if(map.get("gsdm")!=null){  
509 - gsdm=map.get("gsdm").toString();  
510 - }  
511 - String fgsdm="";  
512 - if(map.get("fgsdm")!=null){  
513 - fgsdm=map.get("fgsdm").toString();  
514 - }  
515 - String line="";  
516 - if(map.get("line")!=null){  
517 - line=map.get("line").toString();  
518 - }  
519 - String date="";  
520 - if(map.get("date")!=null){  
521 - date=map.get("date").toString();  
522 - }  
523 - String date2="";  
524 - if(map.get("date2")!=null){  
525 - date2=map.get("date2").toString();  
526 - }  
527 - String xlName="";  
528 - if(map.get("xlName")!=null){  
529 - xlName=map.get("xlName").toString();  
530 - }  
531 - return scheduleRealInfoService.scheduleCorrectionReport(gsdm,fgsdm,line, date,date2);  
532 - }  
533 -  
534 - @RequestMapping(value="/MapById",method = RequestMethod.GET)  
535 - public Map<String, Object> MapById(@RequestParam("id") Long id){  
536 - return scheduleRealInfoService.MapById(id);  
537 - }  
538 -  
539 - @RequestMapping(value="/MapByIdQp",method = RequestMethod.GET)  
540 - public Map<String, Object> MapByIdQp(@RequestParam("id") Long id){  
541 - return scheduleRealInfoService.MapByIdQp(id);  
542 - }  
543 -  
544 - /**  
545 - * @Title: scheduleDaily  
546 - * @Description: TODO(调度日报表)  
547 - * @param line 线路  
548 - * @param date 时间  
549 - * @return  
550 - */  
551 - @RequestMapping(value="/scheduleDaily")  
552 - public Map<String,Object> scheduleDaily(@RequestParam String line,@RequestParam String date){  
553 - return scheduleRealInfoService.scheduleDaily(line,date);  
554 - }  
555 -  
556 - @RequestMapping(value="/realScheduleList")  
557 - public List<ScheduleRealInfo> realScheduleList(@RequestParam String line,@RequestParam String date){  
558 - return scheduleRealInfoService.realScheduleList(line,date);  
559 - }  
560 -  
561 - @RequestMapping(value="/realScheduleList_zrw")  
562 - public List<ScheduleRealInfo> realScheduleList_zrw(@RequestParam String line,@RequestParam String date){  
563 - return scheduleRealInfoService.realScheduleList_zrw(line,date);  
564 - }  
565 -  
566 - @RequestMapping(value="/realScheduleList_mh_2")  
567 - public List<ScheduleRealInfo> realScheduleList_mh_2(@RequestParam String line,@RequestParam String date){  
568 - return scheduleRealInfoService.realScheduleList_mh_2(line,date);  
569 - }  
570 -  
571 - @RequestMapping(value="/realScheduleListQp")  
572 - public List<ScheduleRealInfo> realScheduleListQp(@RequestParam String line,@RequestParam String date){  
573 - return scheduleRealInfoService.realScheduleListQp(line,date);  
574 - }  
575 -  
576 - @RequestMapping(value="/multi_tzrc", method=RequestMethod.POST)  
577 - public synchronized Map<String, Object> multi_tzrc(@RequestParam String cpcsJson){  
578 - cpcsJson = StringEscapeUtils.unescapeHtml4(cpcsJson);  
579 - List<ChangePersonCar> cpcs = JSONArray.parseArray(cpcsJson, ChangePersonCar.class);  
580 - return scheduleRealInfoService.multi_tzrc(cpcs, null);  
581 - }  
582 -  
583 - @RequestMapping(value="/multi_dftz", method=RequestMethod.POST)  
584 - public Map<String, Object> multi_dftz(@RequestParam String dcsJson){  
585 - dcsJson = StringEscapeUtils.unescapeHtml4(dcsJson);  
586 - List<DfsjChange> dfsjcs = JSONArray.parseArray(dcsJson, DfsjChange.class);  
587 - return scheduleRealInfoService.multi_dftz(dfsjcs);  
588 - }  
589 -  
590 - @RequestMapping(value="/changeBcType/{id}", method=RequestMethod.POST)  
591 - public Map<String, Object> changeBcType(@PathVariable("id") Long id, String bcType, String remarks, String majorStationName){  
592 - return scheduleRealInfoService.changeBcType(id, bcType, remarks, majorStationName);  
593 - }  
594 -  
595 - @RequestMapping(value="/history", method=RequestMethod.POST)  
596 - public Map<String,Object> historySave(ScheduleRealInfo sch){  
597 - return scheduleRealInfoService.historySave(sch);  
598 - }  
599 -  
600 -  
601 - private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");  
602 - private final static long ONE_DAY = 1000 * 60 * 60 * 24;  
603 - /**  
604 - * 获取可编辑的历史班次日期  
605 - * @return  
606 - */  
607 - @RequestMapping("dateArray")  
608 - public List<String> dateArray(@RequestParam(defaultValue = "0") int c){  
609 - List<String> rs = new ArrayList<>();  
610 -  
611 - long t = System.currentTimeMillis();  
612 - if(c != 1)  
613 - t -= (ONE_DAY + (1000 * 60 * 60 * 6));  
614 - for(int i = 0; i < 3; i ++){  
615 - rs.add(fmtyyyyMMdd.print(t));  
616 - t -= ONE_DAY;  
617 - }  
618 - return rs;  
619 - }  
620 -  
621 - @RequestMapping(value = "svgAttr", method = RequestMethod.POST)  
622 - public Map<String, Object> svgAttr(@RequestParam String jsonStr){  
623 - return scheduleRealInfoService.svgAttr(jsonStr);  
624 - }  
625 -  
626 - @RequestMapping(value = "svgAttr", method = RequestMethod.GET)  
627 - public Map<String, Object> findSvgAttr(@RequestParam String idx){  
628 - return scheduleRealInfoService.findSvgAttr(idx);  
629 - }  
630 -  
631 - @RequestMapping(value = "addRemarks", method = RequestMethod.POST)  
632 - public Map<String, Object> addRemarks(@RequestParam Long id, @RequestParam String remarks){  
633 - return scheduleRealInfoService.addRemarks(id, remarks);  
634 - }  
635 -  
636 - @RequestMapping(value = "scheduleDailyQp", method = RequestMethod.GET)  
637 - public List<Map<String, Object>> scheduleDailyQp(@RequestParam String line,@RequestParam String date){  
638 - return scheduleRealInfoService.scheduleDailyQp(line,date);  
639 - }  
640 -  
641 - @RequestMapping(value = "scheduleDailyExport", method = RequestMethod.GET)  
642 - public List<Map<String, Object>> scheduleDailyExport(@RequestParam Map<String, Object> map){  
643 - return scheduleRealInfoService.scheduleDailyExport(map);  
644 - }  
645 -  
646 - @RequestMapping(value = "exportWaybillMore", method = RequestMethod.GET)  
647 - public Map<String, Object> exportWaybillMore(@RequestParam Map<String, Object> map){  
648 - return scheduleRealInfoService.exportWaybillMore(map);  
649 - }  
650 -  
651 - /**  
652 - * 获取当日计划排班 , 从计划表抓取数据  
653 - * @return  
654 - */  
655 - @RequestMapping(value = "currSchedulePlanByLineCode", method = RequestMethod.GET)  
656 - public List<SchedulePlanInfo> currentSchedulePlan(@RequestParam String lineCode){  
657 - return scheduleRealInfoService.currentSchedulePlan(lineCode);  
658 - }  
659 -  
660 - @RequestMapping(value = "lpChangeMulti", method = RequestMethod.POST)  
661 - public Map<String, Object> lpChangeMulti(@RequestParam String leftIdx, @RequestParam String rightIdx,@RequestParam int type){  
662 - return scheduleRealInfoService.lpChangeMulti(leftIdx, rightIdx, type);  
663 - }  
664 -  
665 - /**  
666 - * 删除当日实际排班  
667 - * @return  
668 - */  
669 - @RequestMapping(value = "deleteRealSchedule", method = RequestMethod.POST)  
670 - public Map<String, Object> deleteRealSchedule(@RequestParam String lineCode){  
671 - return dayOfSchedule.deleteRealSchedule(lineCode);  
672 - }  
673 -  
674 - /**  
675 - * 从计划表重新加载当日排班  
676 - * @param lineCode  
677 - * @return  
678 - */  
679 - @RequestMapping(value = "reLoadRealSchedule", method = RequestMethod.POST)  
680 - public Map<String, Object> reLoadRealSchedule(@RequestParam String lineCode){  
681 - Map<String, Object> rs = new HashMap<>();  
682 - List<ScheduleRealInfo> list = dayOfSchedule.findByLineCode(lineCode);  
683 - if(list != null && list.size() > 0){  
684 - rs.put("status", ResponseCode.ERROR);  
685 - rs.put("msg", "失败," + list.get(0).getXlName() + "当日存在实际排班,无法重新加载。");  
686 - return rs;  
687 - }  
688 -  
689 - int code = dayOfSchedule.reloadSch(lineCode);  
690 -  
691 - //重新按公司编码索引数据  
692 - dayOfSchedule.groupByGsbm();  
693 - rs.put("status", code==0? ResponseCode.SUCCESS: ResponseCode.ERROR);  
694 - return rs;  
695 - }  
696 -  
697 - /**  
698 - * 误点调整  
699 - * @param idx  
700 - * @param minute  
701 - * @return  
702 - */  
703 - @RequestMapping(value = "lateAdjust", method = RequestMethod.POST)  
704 - public Map<String, Object> lateAdjust(@RequestParam String idx,@RequestParam float minute ){  
705 - return scheduleRealInfoService.lateAdjust(idx, minute);  
706 - }  
707 -  
708 - /**  
709 - * 获取所有应发未到的班次  
710 - * @param idx  
711 - * @return  
712 - */  
713 - @RequestMapping(value = "allLate2")  
714 - public List<ScheduleRealInfo> allLate2(@RequestParam String idx){  
715 - return scheduleRealInfoService.allLate2(idx);  
716 - }  
717 -  
718 - /**  
719 - * 添加一个临加到历史库  
720 - * @param sch  
721 - * @return  
722 - */  
723 - @RequestMapping(value = "history/add", method = RequestMethod.POST)  
724 - public Map<String, Object> addToHistory(ScheduleRealInfo sch){  
725 - return scheduleRealInfoService.addToHistory(sch);  
726 - }  
727 -  
728 - /**  
729 - * 从历史库里删除临加班次  
730 - * @param id  
731 - * @return  
732 - */  
733 - @RequestMapping(value = "history/{id}", method = RequestMethod.DELETE)  
734 - public Map<String, Object> deleteToHistory(@PathVariable("id") Long id){  
735 - return scheduleRealInfoService.deleteToHistory(id);  
736 - }  
737 -  
738 - @RequestMapping(value = "isCircleQdz", method = RequestMethod.POST)  
739 - public Map<String, Object> isCircleQdz(@RequestParam String line, String nbbm, String ts, String qdzCode){  
740 - Map<String, Object> map =new HashMap<>();  
741 - map.put("isExist",scheduleRealInfoService.isCircleQdz(nbbm, ts, line, qdzCode));  
742 - return map;  
743 - }  
744 -  
745 - /**  
746 - * 从历史库里删除临加班次  
747 - * @param param  
748 - * @return  
749 - */  
750 - @RequestMapping(value = "wxsb", method = RequestMethod.POST)  
751 - public Map<String, Object> repairReport(@RequestParam Map<String, Object> param){  
752 - return scheduleRealInfoService.repairReport(param, true);  
753 - }  
754 -  
755 - @RequestMapping(value = "wxsb", method = RequestMethod.GET)  
756 - public List<RepairReport> repairReportList(@RequestParam String line, @RequestParam String date, @RequestParam String code, @RequestParam String type){  
757 - return scheduleRealInfoService.repairReportList(line, date, code, type);  
758 - }  
759 -  
760 - @RequestMapping(value = "lineLevel", method = RequestMethod.GET)  
761 - public Map<String, String> lineLevel(@RequestParam String idx){  
762 - return scheduleRealInfoService.getLevelsByLines(Arrays.asList(idx.split(",")));  
763 - }  
764 -  
765 - /**  
766 - * 反馈安全驾驶系统  
767 - * @param param  
768 - * @return  
769 - */  
770 - @RequestMapping(value = "ackDsm", method = RequestMethod.POST)  
771 - public Map<String, Object> ackDsm(@RequestParam Map<String, Object> param){  
772 - Map<String, Object> res = new HashMap<>();  
773 - InputStream in = null;  
774 - SysUser user = SecurityUtils.getCurrentUser();  
775 - DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");  
776 - StringBuilder url = new StringBuilder("http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?"), uri = new StringBuilder();  
777 - HttpURLConnection con = null;  
778 - try {  
779 - uri.append("ddyName=").append(URLEncoder.encode(user == null ? "admin" : user.getUserName(), "UTF-8"));  
780 - uri.append("&checkTime=").append(URLEncoder.encode(fmt.print(System.currentTimeMillis()), "UTF-8"));  
781 - uri.append("&nbbm=").append(URLEncoder.encode(param.get("nbbm").toString(), "UTF-8"));  
782 - uri.append("&starttime=").append(URLEncoder.encode(fmt.print(Long.parseLong(param.get("ts").toString())), "UTF-8"));  
783 - url.append(uri);  
784 - con = (HttpURLConnection)new URL(url.toString()).openConnection();  
785 - con.setDoInput(true);  
786 - con.setRequestMethod("POST");  
787 - con.setConnectTimeout(5000);  
788 - con.setReadTimeout(5000);  
789 - con.setRequestProperty("keep-alive", "true");  
790 - con.setRequestProperty("accept", "*/*");  
791 - con.setRequestProperty("content-type", "application/x-www-form-urlencoded");  
792 - con.connect();  
793 -  
794 - if (con.getResponseCode() == 200) {  
795 - in = con.getInputStream();  
796 - ByteArrayOutputStream bout = new ByteArrayOutputStream();  
797 - IOUtils.copy(in, bout);  
798 - Map<String, Object> map = new ObjectMapper().readValue(bout.toByteArray(), Map.class);  
799 - System.out.println(map);  
800 - }  
801 - } catch (MalformedURLException e) {  
802 - // TODO Auto-generated catch block  
803 - e.printStackTrace();  
804 - } catch (IOException e) {  
805 - // TODO Auto-generated catch block  
806 - e.printStackTrace();  
807 - } finally {  
808 - if (con != null) {  
809 - con.disconnect();  
810 - }  
811 - }  
812 -  
813 - return res;  
814 - }  
815 -  
816 - @RequestMapping(value = "exportPlan", method = RequestMethod.GET)  
817 - public Map<String, Object> exportPlan(@RequestParam String date){  
818 - Map<String, Object> res = new HashMap<>();  
819 - DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm");  
820 - Connection conn = null;  
821 - PreparedStatement ps = null;  
822 - ResultSet rs = null;  
823 -  
824 - List<Map<String, Object>> list = new ArrayList<>();  
825 - String sql = "select xl_name,xl_dir,schedule_date,fcsj,cl_zbh,j_name,bcsj from bsth_c_s_sp_info where schedule_date = ? and xl_bm in (22205, 202104, 202105, 202106, 202107, 210415) and bc_type = 'normal'";  
826 - try{  
827 - conn = DBUtils_control.getConnection();  
828 - ps = conn.prepareStatement(sql);  
829 - ps.setString(1, date);  
830 - rs = ps.executeQuery();  
831 - ObjectMapper mapper = new ObjectMapper();  
832 -  
833 - while (rs.next()) {  
834 - SchedulePlan schedulePlan = new SchedulePlan();  
835 - schedulePlan.setXlName(rs.getString("xl_name"));  
836 - schedulePlan.setXlDir(rs.getInt("xl_dir"));  
837 - Date scheduleDate = rs.getDate("schedule_date");  
838 - schedulePlan.setScheduleDate(new DateTime(scheduleDate.getTime()).toString("yyyy-MM-dd"));  
839 - String fcsj = rs.getString("fcsj");  
840 - int bcsj = rs.getInt("bcsj");  
841 - DateTime fcsjDt = dateTimeFormatter.parseDateTime(schedulePlan.getScheduleDate() + " " + fcsj);  
842 - schedulePlan.setFcsj(fcsjDt.toString("HH:mm:00"));  
843 - DateTime ddsjDt = fcsjDt.plusMinutes(bcsj);  
844 - schedulePlan.setDdsj(ddsjDt.toString("HH:mm:00"));  
845 - schedulePlan.setSjdStart(fcsjDt.toString("HH:00:00"));  
846 - DateTime endDt = fcsjDt.plusHours(1);  
847 - schedulePlan.setSjdEnd(endDt.toString("HH:00:00"));  
848 - schedulePlan.setClZbh(rs.getString("cl_zbh"));  
849 - schedulePlan.setJsy(rs.getString("j_name"));  
850 - schedulePlan.setBcsj(bcsj);  
851 -  
852 - list.add(mapper.readValue(mapper.writeValueAsString(schedulePlan), HashMap.class));  
853 - }  
854 - List<Iterator<?>> iterators = new ArrayList<Iterator<?>>();  
855 - iterators.add(list.iterator());  
856 - String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";  
857 - String sourcePath = path + "mould/schedulePlan.xls";  
858 -  
859 - new ReportUtils().excelReplace(iterators, new Object[]{}, sourcePath, path + "export/" + date + "-花博会专线班次.xls");  
860 -  
861 - res.put("status", ResponseCode.SUCCESS);  
862 - res.put("msg", "成功");  
863 - } catch (Exception e) {  
864 - res.put("status", ResponseCode.ERROR);  
865 - res.put("msg", e.getMessage());  
866 - } finally {  
867 - DBUtils_control.close(rs, ps, conn);  
868 - }  
869 -  
870 - return res;  
871 - }  
872 -  
873 - public final static class SchedulePlan {  
874 - private String company = "浦东公司[46]";  
875 -  
876 - private String xlName = "";  
877 -  
878 - private int xlDir;  
879 -  
880 - private String xlDirStr = "";  
881 -  
882 - private String scheduleDate = "";  
883 -  
884 - private String sjdStart = "";  
885 -  
886 - private String sjdEnd = "";  
887 -  
888 - private String fcsj = "";  
889 -  
890 - private int bcsj;  
891 -  
892 - private String ddsj = "";  
893 -  
894 - private int yys = 25;  
895 -  
896 - private String clZbh = "";  
897 -  
898 - private String cph = "";  
899 -  
900 - private String color = "绿牌";  
901 -  
902 - private String jsy = "";  
903 -  
904 - private String jsydh = "";  
905 -  
906 - private int pj = 10;  
907 -  
908 - public String getCompany() {  
909 - return company;  
910 - }  
911 -  
912 - public void setCompany(String company) {  
913 - this.company = company;  
914 - }  
915 -  
916 - public String getXlName() {  
917 - return xlName;  
918 - }  
919 -  
920 - public void setXlName(String xlName) {  
921 - this.xlName = xlName;  
922 - }  
923 -  
924 - public int getXlDir() {  
925 - return xlDir;  
926 - }  
927 -  
928 - public void setXlDir(int xlDir) {  
929 - this.xlDir = xlDir;  
930 - }  
931 -  
932 - public String getXlDirStr() {  
933 - xlDirStr = "";  
934 - if (xlDir == 0) {  
935 - xlDirStr = "上行";  
936 - } else if (xlDir == 1) {  
937 - xlDirStr = "下行";  
938 - }  
939 - return xlDirStr;  
940 - }  
941 -  
942 - public void setXlDirStr(String xlDirStr) {  
943 - this.xlDirStr = xlDirStr;  
944 - }  
945 -  
946 - public String getScheduleDate() {  
947 - return scheduleDate;  
948 - }  
949 -  
950 - public void setScheduleDate(String scheduleDate) {  
951 - this.scheduleDate = scheduleDate;  
952 - }  
953 -  
954 - public String getSjdStart() {  
955 - return sjdStart;  
956 - }  
957 -  
958 - public void setSjdStart(String sjdStart) {  
959 - this.sjdStart = sjdStart;  
960 - }  
961 -  
962 - public String getSjdEnd() {  
963 - return sjdEnd;  
964 - }  
965 -  
966 - public void setSjdEnd(String sjdEnd) {  
967 - this.sjdEnd = sjdEnd;  
968 - }  
969 -  
970 - public String getFcsj() {  
971 - return fcsj;  
972 - }  
973 -  
974 - public void setFcsj(String fcsj) {  
975 - this.fcsj = fcsj;  
976 - }  
977 -  
978 - public int getBcsj() {  
979 - return bcsj;  
980 - }  
981 -  
982 - public void setBcsj(int bcsj) {  
983 - this.bcsj = bcsj;  
984 - }  
985 -  
986 - public String getDdsj() {  
987 - return ddsj;  
988 - }  
989 -  
990 - public void setDdsj(String ddsj) {  
991 - this.ddsj = ddsj;  
992 - }  
993 -  
994 - public int getYys() {  
995 - return yys;  
996 - }  
997 -  
998 - public void setYys(int yys) {  
999 - this.yys = yys;  
1000 - }  
1001 -  
1002 - public String getClZbh() {  
1003 - return clZbh;  
1004 - }  
1005 -  
1006 - public void setClZbh(String clZbh) {  
1007 - this.clZbh = clZbh;  
1008 - }  
1009 -  
1010 - public String getCph() {  
1011 - cph = BasicData.nbbmCompanyPlateMap.get(clZbh);  
1012 - if (cph == null) {  
1013 - cph = "";  
1014 - }  
1015 - return cph;  
1016 - }  
1017 -  
1018 - public void setCph(String cph) {  
1019 - this.cph = cph;  
1020 - }  
1021 -  
1022 - public String getColor() {  
1023 - return color;  
1024 - }  
1025 -  
1026 - public void setColor(String color) {  
1027 - this.color = color;  
1028 - }  
1029 -  
1030 - public String getJsy() {  
1031 - return jsy;  
1032 - }  
1033 -  
1034 - public void setJsy(String jsy) {  
1035 - this.jsy = jsy;  
1036 - }  
1037 -  
1038 - public String getJsydh() {  
1039 - return jsydh;  
1040 - }  
1041 -  
1042 - public void setJsydh(String jsydh) {  
1043 - this.jsydh = jsydh;  
1044 - }  
1045 -  
1046 - public int getPj() {  
1047 - return pj;  
1048 - }  
1049 -  
1050 - public void setPj(int pj) {  
1051 - this.pj = pj;  
1052 - }  
1053 - }  
1054 -} 1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import java.io.ByteArrayOutputStream;
  4 +import java.io.IOException;
  5 +import java.io.InputStream;
  6 +import java.io.OutputStream;
  7 +import java.net.HttpURLConnection;
  8 +import java.net.MalformedURLException;
  9 +import java.net.URL;
  10 +import java.net.URLEncoder;
  11 +import java.sql.Connection;
  12 +import java.sql.Date;
  13 +import java.sql.PreparedStatement;
  14 +import java.sql.ResultSet;
  15 +import java.util.*;
  16 +
  17 +import com.bsth.data.forecast.entity.ArrivalEntity;
  18 +import com.bsth.entity.sys.SysUser;
  19 +import com.bsth.security.util.SecurityUtils;
  20 +import com.bsth.util.ReportUtils;
  21 +import com.bsth.util.db.DBUtils_MS;
  22 +import com.bsth.util.db.DBUtils_control;
  23 +import com.fasterxml.jackson.databind.ObjectMapper;
  24 +import org.apache.commons.io.IOUtils;
  25 +import org.apache.commons.lang3.StringEscapeUtils;
  26 +import org.joda.time.DateTime;
  27 +import org.joda.time.format.DateTimeFormat;
  28 +import org.joda.time.format.DateTimeFormatter;
  29 +import org.springframework.beans.factory.annotation.Autowired;
  30 +import org.springframework.beans.factory.annotation.Value;
  31 +import org.springframework.web.bind.annotation.*;
  32 +
  33 +import com.alibaba.fastjson.JSONArray;
  34 +import com.bsth.common.ResponseCode;
  35 +import com.bsth.controller.BaseController;
  36 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  37 +import com.bsth.controller.realcontrol.dto.DfsjChange;
  38 +import com.bsth.data.BasicData;
  39 +import com.bsth.data.schedule.DayOfSchedule;
  40 +import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
  41 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  42 +import com.bsth.entity.report.RepairReport;
  43 +import com.bsth.entity.schedule.SchedulePlanInfo;
  44 +import com.bsth.service.realcontrol.ScheduleRealInfoService;
  45 +
  46 +@RestController
  47 +@RequestMapping("/realSchedule")
  48 +public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, Long> {
  49 +
  50 + @Autowired
  51 + ScheduleRealInfoService scheduleRealInfoService;
  52 +
  53 + @Autowired
  54 + DayOfSchedule dayOfSchedule;
  55 +
  56 + @Value("${dsm.ack.url}")
  57 + private String dsmUrl;
  58 +
  59 + @Value("${cp.ack.url}")
  60 + private String cpUrl;
  61 +
  62 + @RequestMapping(value = "check_fgs_ascription", method = RequestMethod.POST)
  63 + public Map<String, Object> checkPCFgsAscription(@RequestParam Long schId, String jGh, String sGh, String nbbm){
  64 + return scheduleRealInfoService.checkPCFgsAscription(schId, jGh, sGh, nbbm);
  65 + }
  66 +
  67 + @RequestMapping(value = "/lines")
  68 + public Map<String, Collection<ScheduleRealInfo>> findByLines(@RequestParam String lines) {
  69 + return scheduleRealInfoService.findByLines(lines);
  70 + }
  71 +
  72 + @RequestMapping(value = "/car")
  73 + public List<ScheduleRealInfo> findByCar(String nbbm){
  74 + return dayOfSchedule.findByNbbm(nbbm);
  75 + }
  76 +
  77 + /**
  78 + *
  79 + * @Title: outgoAdjust @Description: TODO(待发调整) @param @param id
  80 + * 主键 @param @param remarks 备注 @param @param dfsj 待发时间(HH:mm) @throws
  81 + */
  82 + @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST)
  83 + public Map<String, Object> outgoAdjust(@RequestParam Long id, @RequestParam String remarks,
  84 + @RequestParam String dfsj,String bcType,
  85 + @RequestParam(defaultValue = "") String opType) {
  86 + return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj, bcType, opType, null);
  87 + }
  88 +
  89 + /**
  90 + *
  91 + * @Title: destroy @Description: TODO(销毁,烂班) @param @param idsStr 要烂掉的班次ID ,分隔
  92 + */
  93 + @RequestMapping(value = "/destroy", method = RequestMethod.POST)
  94 + public Map<String, Object> destroy(@RequestParam String idsStr
  95 + /*, @RequestParam(defaultValue = "-1") int spaceAdjust*/,
  96 + @RequestParam String remarks, @RequestParam String adjustExps/*, @RequestParam(defaultValue = "0") int spaceNum*/) {
  97 + return scheduleRealInfoService.destroy(idsStr, remarks, adjustExps, null);
  98 + }
  99 +
  100 + /**
  101 + *
  102 + * @Title: carDeviceMapp @Description: TODO(获取车辆自编号和设备号对照,从缓存取) @throws
  103 + */
  104 + @RequestMapping(value = "/carDeviceMapp", method = RequestMethod.GET)
  105 + public Map<String, String> carDeviceMapp() {
  106 + return BasicData.deviceId2NbbmMap.inverse();
  107 + }
  108 +
  109 + /**
  110 + *
  111 + * @Title: findPersionByLine @Description: TODO(根据线路主键获取驾驶员) @param @param
  112 + * lineId @throws
  113 + */
  114 + @RequestMapping(value = "/driver", method = RequestMethod.GET)
  115 + public List<Map<String, String>> findDriverByLine(@RequestParam String lineCode) {
  116 + return scheduleRealInfoService.findDriverByLine(lineCode);
  117 + }
  118 +
  119 + /**
  120 + *
  121 + * @Title: findPersionByLine @Description: TODO(根据线路主键获取售票员) @param @param
  122 + * lineId @throws
  123 + */
  124 + @RequestMapping(value = "/conductor", method = RequestMethod.GET)
  125 + public List<Map<String, String>> findConductorByLine(@RequestParam String lineCode) {
  126 + return scheduleRealInfoService.findConductorByLine(lineCode);
  127 + }
  128 +
  129 + /**
  130 + *
  131 + * @Title: findPersionByLine @Description: TODO(根据线路主键获取车辆) @param @param
  132 + * lineId @throws
  133 + */
  134 + @RequestMapping(value = "/cars", method = RequestMethod.GET)
  135 + public List<Map<String, String>> findCarByLine(@RequestParam String lineCode) {
  136 + return scheduleRealInfoService.findCarByLine(lineCode);
  137 + }
  138 +
  139 + /**
  140 + *
  141 + * @Title: sreachNbbm @Description: TODO(搜索车辆内部编码) @throws
  142 + */
  143 + @RequestMapping(value = "/sreachVehic", method = RequestMethod.GET)
  144 + public List<Map<String, String>> sreachVehic(@RequestParam String nbbm) {
  145 + return scheduleRealInfoService.sreachVehic(nbbm);
  146 + }
  147 + /**
  148 + *
  149 + * @Title: realOutAdjust
  150 + * @Description: TODO(实发调整)
  151 + * @param @param id 班次ID
  152 + * @param @param fcsjActual 实际发车时间 HH:mm
  153 + * @param @param remarks 备注
  154 + * @throws
  155 + */
  156 + @RequestMapping(value = "/realOutAdjust", method = RequestMethod.POST)
  157 + public Map<String, Object> realOutAdjust(@RequestParam Map<String, String> map) {
  158 + return scheduleRealInfoService.realOutAdjust(map);
  159 + }
  160 +
  161 + /**
  162 + *
  163 + * @Title: revokeDestroy
  164 + * @Description: TODO(撤销烂班)
  165 + * @param @param id
  166 + * @throws
  167 + */
  168 + @RequestMapping(value = "/revokeDestroy", method = RequestMethod.POST)
  169 + public Map<String, Object> revokeDestroy(@RequestParam Long id){
  170 + return scheduleRealInfoService.revokeDestroy(id);
  171 + }
  172 +
  173 + /**
  174 + *
  175 + * @Title: revokeRealOutgo
  176 + * @Description: TODO(撤销实发)
  177 + * @param @param id
  178 + * @throws
  179 + */
  180 + @RequestMapping(value = "/revokeRealOutgo", method = RequestMethod.POST)
  181 + public Map<String, Object> revokeRealOutgo(@RequestParam Long id){
  182 + return scheduleRealInfoService.revokeRealOutgo(id);
  183 + }
  184 +
  185 + /**
  186 + * 撤销执行
  187 + * @param id
  188 + * @return
  189 + */
  190 + @RequestMapping(value = "/revokeRealArrive", method = RequestMethod.POST)
  191 + public Map<String, Object> revokeRealArrive(@RequestParam Long id){
  192 + return scheduleRealInfoService.revokeRealArrive(id);
  193 + }
  194 +
  195 + /**
  196 + *
  197 + * @Title: spaceAdjust
  198 + * @Description: TODO(间隔调整)
  199 + * @param @param ids 要调整的班次数组ID
  200 + * @param @param space 间隔
  201 + * @throws
  202 + */
  203 + @RequestMapping(value = "/spaceAdjust", method = RequestMethod.POST)
  204 + public Map<String, Object> spaceAdjust(Long[] ids, Integer space){
  205 + return scheduleRealInfoService.spaceAdjust(ids, space);
  206 + }
  207 +
  208 + /**
  209 + *
  210 + * @Title: schInfoFineTune
  211 + * @Description: TODO(发车信息微调)
  212 + * @param @param map
  213 + * @throws
  214 + */
  215 + @RequestMapping(value = "/schInfoFineTune", method = RequestMethod.POST)
  216 + public Map<String, Object> schInfoFineTune(@RequestParam Map<String, String> map){
  217 + return scheduleRealInfoService.schInfoFineTune(map);
  218 + }
  219 +
  220 + /**
  221 + *
  222 + * @Title: outgoAdjustAll
  223 + * @Description: TODO(批量待发调整)
  224 + * @param @param list
  225 + * @throws
  226 + */
  227 + @RequestMapping(value = "/outgoAdjustAll", method = RequestMethod.POST)
  228 + public Map<String, Object> outgoAdjustAll(@RequestParam String params){
  229 + //反转义
  230 + params = StringEscapeUtils.unescapeHtml4(params);
  231 + return scheduleRealInfoService.outgoAdjustAll(params);
  232 + }
  233 +
  234 + /**
  235 + *
  236 + * @Title: findByLineAndUpDown
  237 + * @Description: TODO(根据线路和走向获取班次)
  238 + * @param @param line
  239 + * @param @param upDown
  240 + */
  241 + @RequestMapping(value = "/findByLineAndUpDown")
  242 + public List<ScheduleRealInfo> findByLineAndUpDown(@RequestParam String line,@RequestParam Integer upDown){
  243 + return dayOfSchedule.findByLineAndUpDown(line, upDown);
  244 + }
  245 +
  246 + /**
  247 + *
  248 + * @Title: findRouteByLine
  249 + * @Description: TODO(获取线路的站点,路段路由)
  250 + * @param @param lineCode
  251 + * @throws
  252 + */
  253 + @RequestMapping(value = "/findRouteByLine")
  254 + public Map<String, Object> findRouteByLine(@RequestParam String lineCode){
  255 + return scheduleRealInfoService.findRouteByLine(lineCode);
  256 + }
  257 +
  258 + /**
  259 + *
  260 + * @Title: removeChildTask
  261 + * @Description: TODO(删除子任务)
  262 + * @param @param taskId 子任务ID
  263 + * @throws
  264 + */
  265 + @RequestMapping(value = "/childTask/{taskId}", method = RequestMethod.DELETE)
  266 + public Map<String, Object> removeChildTask(@PathVariable("taskId") Long taskId){
  267 + return scheduleRealInfoService.removeChildTask(taskId);
  268 + }
  269 +
  270 + /**
  271 + *
  272 + * @Title: findByLineCode
  273 + * @Description: TODO(根据线路获取班次信息)
  274 + * @param @param lineCode
  275 + */
  276 + @RequestMapping(value = "/lineCode/{lineCode}")
  277 + public List<ScheduleRealInfo> findByLineCode(@PathVariable("lineCode") String lineCode){
  278 + return dayOfSchedule.findByLineCode(lineCode);
  279 + }
  280 +
  281 + @RequestMapping(value = "/queryUserInfo")
  282 + public List<ScheduleRealInfo> queryUserInfo(@RequestParam String line,
  283 + @RequestParam String date,@RequestParam String state) {
  284 + return scheduleRealInfoService.queryUserInfo(line, date,state);
  285 + }
  286 +
  287 + @RequestMapping(value = "/queryUserInfoPx")
  288 + public List<ScheduleRealInfo> queryUserInfoPx(@RequestParam String line,
  289 + @RequestParam String date,@RequestParam String state,@RequestParam String type) {
  290 + return scheduleRealInfoService.queryUserInfoPx(line, date,state,type);
  291 + }
  292 +
  293 + @RequestMapping(value = "/exportWaybill",method = RequestMethod.GET)
  294 + public List<ScheduleRealInfo> exportWaybill(@RequestParam String jName,@RequestParam String jGh, @RequestParam String clZbh,
  295 + @RequestParam String lpName,@RequestParam String date,@RequestParam String line) {
  296 + return scheduleRealInfoService.exportWaybill(jName,jGh, clZbh, lpName,date,line);
  297 + }
  298 +
  299 + @RequestMapping(value = "/exportWaybillQp",method = RequestMethod.GET)
  300 + public List<ScheduleRealInfo> exportWaybillQp(@RequestParam String clZbh
  301 + ,@RequestParam String date,@RequestParam String line) {
  302 + return scheduleRealInfoService.exportWaybillQp( clZbh, date,line);
  303 + }
  304 +
  305 +
  306 + @RequestMapping(value = "/dailyInfo")
  307 + public List<Map<String, Object>> dailyInfo(@RequestParam String line, @RequestParam String date,@RequestParam String type) {
  308 + return scheduleRealInfoService.dailyInfo(line, date, type);
  309 + }
  310 +
  311 + @RequestMapping(value = "/historyMessage")
  312 + public List<Object[]> historyMessage(@RequestParam String line, @RequestParam String date,
  313 + @RequestParam String code, @RequestParam String type) {
  314 + return scheduleRealInfoService.historyMessage(line, date, code, type);
  315 + }
  316 +
  317 + @RequestMapping(value="/findLine")
  318 + public List<Map<String,String>> findLine(@RequestParam String line){
  319 + return scheduleRealInfoService.findLine(line);
  320 + }
  321 +
  322 + @RequestMapping(value="/findKMBC",method = RequestMethod.GET)
  323 + public Map<String,Object> findKMBC(@RequestParam String jGh,@RequestParam String clZbh,@RequestParam String lpName
  324 + ,@RequestParam String date,@RequestParam String line){
  325 + return scheduleRealInfoService.findKMBC(jGh, clZbh,lpName,date,line);
  326 + }
  327 +
  328 + /**
  329 + * 路单公里统计 (闵行审计专用)
  330 + * @param jGh
  331 + * @param clZbh
  332 + * @param lpName
  333 + * @param date
  334 + * @param line
  335 + * @return
  336 + */
  337 + @RequestMapping(value="/findKMBC_mh_2",method = RequestMethod.GET)
  338 + public Map<String,Object> findKMBC_mh_2(@RequestParam String jGh,@RequestParam String clZbh,@RequestParam String lpName
  339 + ,@RequestParam String date,@RequestParam String line){
  340 + return scheduleRealInfoService.findKMBC_mh_2(jGh, clZbh,lpName,date,line);
  341 + }
  342 +
  343 + @RequestMapping(value="/findKMBCQp",method = RequestMethod.GET)
  344 + public Map<String,Object> findKMBCQp(@RequestParam String clZbh
  345 + ,@RequestParam String date,@RequestParam String line){
  346 + return scheduleRealInfoService.findKMBCQp(clZbh,date,line);
  347 + }
  348 +
  349 + @RequestMapping(value="/findLpName")
  350 + public List<Map<String,String>> findLpName(@RequestParam String lpName){
  351 + return scheduleRealInfoService.findLpName(lpName);
  352 + }
  353 +
  354 + @RequestMapping(value = "/account")
  355 + public List<Map<String,Object>> account(@RequestParam String line, @RequestParam String date,
  356 + @RequestParam String code,@RequestParam String xlName, @RequestParam String type) {
  357 + return scheduleRealInfoService.account(line, date, code, xlName, type);
  358 + }
  359 +
  360 + @RequestMapping(value = "/accountPx")
  361 + public List<Map<String,Object>> accountPx(@RequestParam String line, @RequestParam String date,
  362 + @RequestParam String code,@RequestParam String xlName, @RequestParam String px) {
  363 + return scheduleRealInfoService.accountPx(line, date, code, xlName, px);
  364 + }
  365 +
  366 + @RequestMapping(value = "/correctForm")
  367 + public List<SchEditInfoDto> correctForm(@RequestParam String line, @RequestParam String date,
  368 + @RequestParam String endDate,
  369 + @RequestParam String lpName, @RequestParam String code,
  370 + @RequestParam String type,@RequestParam String changType) {
  371 + return scheduleRealInfoService.correctForm(line, date, endDate, lpName, code, type,changType);
  372 + }
  373 + /**
  374 + * @Title queryListWaybill
  375 + * @Description 查询行车路单列表
  376 + * @param jGh 驾驶员名字
  377 + * @param clZbh 车辆自编号(内部编号)
  378 + * @param lpName 路牌
  379 + * @return
  380 + */
  381 + @RequestMapping(value="/queryListWaybill",method = RequestMethod.GET)
  382 + public List<ScheduleRealInfo> queryListWaybill(@RequestParam String jGh,@RequestParam String clZbh,@RequestParam String lpName
  383 + ,@RequestParam String date,@RequestParam String line){
  384 + return scheduleRealInfoService.queryListWaybill(jGh, clZbh,lpName,date,line);
  385 + }
  386 +
  387 + /**
  388 + * @Title queryListWaybill
  389 + * @Description 查询行车路单列表(闵行审计专用路单)
  390 + * @param jName 驾驶员名字
  391 + * @param clZbh 车辆自编号(内部编号)
  392 + * @param lpName 路牌
  393 + * @return
  394 + */
  395 + @RequestMapping(value="/queryListWaybill_mh_2",method = RequestMethod.GET)
  396 + public List<ScheduleRealInfo> queryListWaybill_mh_2(@RequestParam String jName,@RequestParam String clZbh,@RequestParam String lpName
  397 + ,@RequestParam String date,@RequestParam String line){
  398 + return scheduleRealInfoService.queryListWaybill2(jName, clZbh,lpName,date,line);
  399 + }
  400 +
  401 + @RequestMapping(value="/queryListWaybillQp",method = RequestMethod.GET)
  402 + public List<ScheduleRealInfo> queryListWaybillQp(@RequestParam String clZbh,
  403 + @RequestParam String date,@RequestParam String line){
  404 + return scheduleRealInfoService.queryListWaybillQp(clZbh,date,line);
  405 + }
  406 +
  407 + @RequestMapping(value="/statisticsDaily")
  408 + public List<Map<String,Object>> statisticsDaily(@RequestParam String line, @RequestParam String date,
  409 + @RequestParam String xlName, @RequestParam String type){
  410 + return scheduleRealInfoService.statisticsDaily(line, date, xlName, type);
  411 + }
  412 +
  413 + @RequestMapping(value="/statisticsDaily_mh_2")
  414 + public List<Map<String,Object>> statisticsDaily_mh_2(@RequestParam String line, @RequestParam String date,
  415 + @RequestParam String xlName, @RequestParam String type){
  416 + return scheduleRealInfoService.statisticsDaily_mh_2(line, date, xlName, type);
  417 + }
  418 +
  419 + @RequestMapping(value="/dispatchDailySum")
  420 + public List<Map<String,Object>> dispatchDailySum(@RequestParam Map<String, Object> map){
  421 + String date="";
  422 + if(map.get("date")!=null){
  423 + date=map.get("date").toString();
  424 + }
  425 + String date2="";
  426 + if(map.get("date2")!=null){
  427 + date2=map.get("date2").toString();
  428 + }
  429 + String nature="0";
  430 + if(map.get("nature")!=null){
  431 + nature=map.get("nature").toString();
  432 + }
  433 + String type="";
  434 + if(map.get("type")!=null){
  435 + type=map.get("type").toString();
  436 + }
  437 + return scheduleRealInfoService.dispatchDailySum(date, date2, nature, type);
  438 + }
  439 +
  440 + @RequestMapping(value="/statisticsDailyTj")
  441 + public List<Map<String,Object>> statisticsDailyTj(@RequestParam Map<String, Object> map){
  442 + String gsdm="";
  443 + if(map.get("gsdm")!=null){
  444 + gsdm=map.get("gsdm").toString();
  445 + }
  446 + String fgsdm="";
  447 + if(map.get("fgsdm")!=null){
  448 + fgsdm=map.get("fgsdm").toString();
  449 + }
  450 + String line="";
  451 + if(map.get("line")!=null){
  452 + line=map.get("line").toString();
  453 + }
  454 + String date="";
  455 + if(map.get("date")!=null){
  456 + date=map.get("date").toString();
  457 + }
  458 + String date2="";
  459 + if(map.get("date2")!=null){
  460 + date2=map.get("date2").toString();
  461 + }
  462 + String xlName="";
  463 + if(map.get("xlName")!=null){
  464 + xlName=map.get("xlName").toString();
  465 + }
  466 + String type="";
  467 + if(map.get("type")!=null){
  468 + type=map.get("type").toString();
  469 + }
  470 + String nature="0";
  471 + if(map.get("nature")!=null){
  472 + nature=map.get("nature").toString();
  473 + }
  474 + return scheduleRealInfoService.statisticsDailyTj(gsdm,fgsdm,line, date,date2, xlName, type,nature);
  475 + }
  476 +
  477 + /*
  478 + * 公里修正报表
  479 + */
  480 + @RequestMapping(value="/mileageReportTj")
  481 + public List<Map<String,Object>> mileageReport(@RequestParam Map<String, Object> map){
  482 + String gsdm="";
  483 + if(map.get("gsdm")!=null){
  484 + gsdm=map.get("gsdm").toString();
  485 + }
  486 + String fgsdm="";
  487 + if(map.get("fgsdm")!=null){
  488 + fgsdm=map.get("fgsdm").toString();
  489 + }
  490 + String line="";
  491 + if(map.get("line")!=null){
  492 + line=map.get("line").toString();
  493 + }
  494 + String date="";
  495 + if(map.get("date")!=null){
  496 + date=map.get("date").toString();
  497 + }
  498 + String date2="";
  499 + if(map.get("date2")!=null){
  500 + date2=map.get("date2").toString();
  501 + }
  502 + String xlName="";
  503 + if(map.get("xlName")!=null){
  504 + xlName=map.get("xlName").toString();
  505 + }
  506 + return scheduleRealInfoService.mileageReport(gsdm,fgsdm,line, date,date2);
  507 + }
  508 +
  509 + /*
  510 + * 班次修正报表
  511 + */
  512 + @RequestMapping(value="/scheduleCorrectionReport")
  513 + public List<Map<String,Object>> scheduleCorrectionReport(@RequestParam Map<String, Object> map){
  514 + String gsdm="";
  515 + if(map.get("gsdm")!=null){
  516 + gsdm=map.get("gsdm").toString();
  517 + }
  518 + String fgsdm="";
  519 + if(map.get("fgsdm")!=null){
  520 + fgsdm=map.get("fgsdm").toString();
  521 + }
  522 + String line="";
  523 + if(map.get("line")!=null){
  524 + line=map.get("line").toString();
  525 + }
  526 + String date="";
  527 + if(map.get("date")!=null){
  528 + date=map.get("date").toString();
  529 + }
  530 + String date2="";
  531 + if(map.get("date2")!=null){
  532 + date2=map.get("date2").toString();
  533 + }
  534 + String xlName="";
  535 + if(map.get("xlName")!=null){
  536 + xlName=map.get("xlName").toString();
  537 + }
  538 + return scheduleRealInfoService.scheduleCorrectionReport(gsdm,fgsdm,line, date,date2);
  539 + }
  540 +
  541 + @RequestMapping(value="/MapById",method = RequestMethod.GET)
  542 + public Map<String, Object> MapById(@RequestParam("id") Long id){
  543 + return scheduleRealInfoService.MapById(id);
  544 + }
  545 +
  546 + @RequestMapping(value="/MapByIdQp",method = RequestMethod.GET)
  547 + public Map<String, Object> MapByIdQp(@RequestParam("id") Long id){
  548 + return scheduleRealInfoService.MapByIdQp(id);
  549 + }
  550 +
  551 + /**
  552 + * @Title: scheduleDaily
  553 + * @Description: TODO(调度日报表)
  554 + * @param line 线路
  555 + * @param date 时间
  556 + * @return
  557 + */
  558 + @RequestMapping(value="/scheduleDaily")
  559 + public Map<String,Object> scheduleDaily(@RequestParam String line,@RequestParam String date){
  560 + return scheduleRealInfoService.scheduleDaily(line,date);
  561 + }
  562 +
  563 + @RequestMapping(value="/realScheduleList")
  564 + public List<ScheduleRealInfo> realScheduleList(@RequestParam String line,@RequestParam String date){
  565 + return scheduleRealInfoService.realScheduleList(line,date);
  566 + }
  567 +
  568 + @RequestMapping(value="/realScheduleList_zrw")
  569 + public List<ScheduleRealInfo> realScheduleList_zrw(@RequestParam String line,@RequestParam String date){
  570 + return scheduleRealInfoService.realScheduleList_zrw(line,date);
  571 + }
  572 +
  573 + @RequestMapping(value="/realScheduleList_mh_2")
  574 + public List<ScheduleRealInfo> realScheduleList_mh_2(@RequestParam String line,@RequestParam String date){
  575 + return scheduleRealInfoService.realScheduleList_mh_2(line,date);
  576 + }
  577 +
  578 + @RequestMapping(value="/realScheduleListQp")
  579 + public List<ScheduleRealInfo> realScheduleListQp(@RequestParam String line,@RequestParam String date){
  580 + return scheduleRealInfoService.realScheduleListQp(line,date);
  581 + }
  582 +
  583 + @RequestMapping(value="/multi_tzrc", method=RequestMethod.POST)
  584 + public synchronized Map<String, Object> multi_tzrc(@RequestParam String cpcsJson){
  585 + cpcsJson = StringEscapeUtils.unescapeHtml4(cpcsJson);
  586 + List<ChangePersonCar> cpcs = JSONArray.parseArray(cpcsJson, ChangePersonCar.class);
  587 + return scheduleRealInfoService.multi_tzrc(cpcs, null);
  588 + }
  589 +
  590 + @RequestMapping(value="/multi_dftz", method=RequestMethod.POST)
  591 + public Map<String, Object> multi_dftz(@RequestParam String dcsJson){
  592 + dcsJson = StringEscapeUtils.unescapeHtml4(dcsJson);
  593 + List<DfsjChange> dfsjcs = JSONArray.parseArray(dcsJson, DfsjChange.class);
  594 + return scheduleRealInfoService.multi_dftz(dfsjcs);
  595 + }
  596 +
  597 + @RequestMapping(value="/changeBcType/{id}", method=RequestMethod.POST)
  598 + public Map<String, Object> changeBcType(@PathVariable("id") Long id, String bcType, String remarks, String majorStationName){
  599 + return scheduleRealInfoService.changeBcType(id, bcType, remarks, majorStationName);
  600 + }
  601 +
  602 + @RequestMapping(value="/history", method=RequestMethod.POST)
  603 + public Map<String,Object> historySave(ScheduleRealInfo sch){
  604 + return scheduleRealInfoService.historySave(sch);
  605 + }
  606 +
  607 +
  608 + private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd");
  609 + private final static long ONE_DAY = 1000 * 60 * 60 * 24;
  610 + /**
  611 + * 获取可编辑的历史班次日期
  612 + * @return
  613 + */
  614 + @RequestMapping("dateArray")
  615 + public List<String> dateArray(@RequestParam(defaultValue = "0") int c){
  616 + List<String> rs = new ArrayList<>();
  617 +
  618 + long t = System.currentTimeMillis();
  619 + if(c != 1)
  620 + t -= (ONE_DAY + (1000 * 60 * 60 * 6));
  621 + for(int i = 0; i < 3; i ++){
  622 + rs.add(fmtyyyyMMdd.print(t));
  623 + t -= ONE_DAY;
  624 + }
  625 + return rs;
  626 + }
  627 +
  628 + @RequestMapping(value = "svgAttr", method = RequestMethod.POST)
  629 + public Map<String, Object> svgAttr(@RequestParam String jsonStr){
  630 + return scheduleRealInfoService.svgAttr(jsonStr);
  631 + }
  632 +
  633 + @RequestMapping(value = "svgAttr", method = RequestMethod.GET)
  634 + public Map<String, Object> findSvgAttr(@RequestParam String idx){
  635 + return scheduleRealInfoService.findSvgAttr(idx);
  636 + }
  637 +
  638 + @RequestMapping(value = "addRemarks", method = RequestMethod.POST)
  639 + public Map<String, Object> addRemarks(@RequestParam Long id, @RequestParam String remarks){
  640 + return scheduleRealInfoService.addRemarks(id, remarks);
  641 + }
  642 +
  643 + @RequestMapping(value = "scheduleDailyQp", method = RequestMethod.GET)
  644 + public List<Map<String, Object>> scheduleDailyQp(@RequestParam String line,@RequestParam String date){
  645 + return scheduleRealInfoService.scheduleDailyQp(line,date);
  646 + }
  647 +
  648 + @RequestMapping(value = "scheduleDailyExport", method = RequestMethod.GET)
  649 + public List<Map<String, Object>> scheduleDailyExport(@RequestParam Map<String, Object> map){
  650 + return scheduleRealInfoService.scheduleDailyExport(map);
  651 + }
  652 +
  653 + @RequestMapping(value = "exportWaybillMore", method = RequestMethod.GET)
  654 + public Map<String, Object> exportWaybillMore(@RequestParam Map<String, Object> map){
  655 + return scheduleRealInfoService.exportWaybillMore(map);
  656 + }
  657 +
  658 + /**
  659 + * 获取当日计划排班 , 从计划表抓取数据
  660 + * @return
  661 + */
  662 + @RequestMapping(value = "currSchedulePlanByLineCode", method = RequestMethod.GET)
  663 + public List<SchedulePlanInfo> currentSchedulePlan(@RequestParam String lineCode){
  664 + return scheduleRealInfoService.currentSchedulePlan(lineCode);
  665 + }
  666 +
  667 + @RequestMapping(value = "lpChangeMulti", method = RequestMethod.POST)
  668 + public Map<String, Object> lpChangeMulti(@RequestParam String leftIdx, @RequestParam String rightIdx,@RequestParam int type){
  669 + return scheduleRealInfoService.lpChangeMulti(leftIdx, rightIdx, type);
  670 + }
  671 +
  672 + /**
  673 + * 删除当日实际排班
  674 + * @return
  675 + */
  676 + @RequestMapping(value = "deleteRealSchedule", method = RequestMethod.POST)
  677 + public Map<String, Object> deleteRealSchedule(@RequestParam String lineCode){
  678 + return dayOfSchedule.deleteRealSchedule(lineCode);
  679 + }
  680 +
  681 + /**
  682 + * 从计划表重新加载当日排班
  683 + * @param lineCode
  684 + * @return
  685 + */
  686 + @RequestMapping(value = "reLoadRealSchedule", method = RequestMethod.POST)
  687 + public Map<String, Object> reLoadRealSchedule(@RequestParam String lineCode){
  688 + Map<String, Object> rs = new HashMap<>();
  689 + List<ScheduleRealInfo> list = dayOfSchedule.findByLineCode(lineCode);
  690 + if(list != null && list.size() > 0){
  691 + rs.put("status", ResponseCode.ERROR);
  692 + rs.put("msg", "失败," + list.get(0).getXlName() + "当日存在实际排班,无法重新加载。");
  693 + return rs;
  694 + }
  695 +
  696 + int code = dayOfSchedule.reloadSch(lineCode);
  697 +
  698 + //重新按公司编码索引数据
  699 + dayOfSchedule.groupByGsbm();
  700 + rs.put("status", code==0? ResponseCode.SUCCESS: ResponseCode.ERROR);
  701 + return rs;
  702 + }
  703 +
  704 + /**
  705 + * 误点调整
  706 + * @param idx
  707 + * @param minute
  708 + * @return
  709 + */
  710 + @RequestMapping(value = "lateAdjust", method = RequestMethod.POST)
  711 + public Map<String, Object> lateAdjust(@RequestParam String idx,@RequestParam float minute ){
  712 + return scheduleRealInfoService.lateAdjust(idx, minute);
  713 + }
  714 +
  715 + /**
  716 + * 获取所有应发未到的班次
  717 + * @param idx
  718 + * @return
  719 + */
  720 + @RequestMapping(value = "allLate2")
  721 + public List<ScheduleRealInfo> allLate2(@RequestParam String idx){
  722 + return scheduleRealInfoService.allLate2(idx);
  723 + }
  724 +
  725 + /**
  726 + * 添加一个临加到历史库
  727 + * @param sch
  728 + * @return
  729 + */
  730 + @RequestMapping(value = "history/add", method = RequestMethod.POST)
  731 + public Map<String, Object> addToHistory(ScheduleRealInfo sch){
  732 + return scheduleRealInfoService.addToHistory(sch);
  733 + }
  734 +
  735 + /**
  736 + * 从历史库里删除临加班次
  737 + * @param id
  738 + * @return
  739 + */
  740 + @RequestMapping(value = "history/{id}", method = RequestMethod.DELETE)
  741 + public Map<String, Object> deleteToHistory(@PathVariable("id") Long id){
  742 + return scheduleRealInfoService.deleteToHistory(id);
  743 + }
  744 +
  745 + @RequestMapping(value = "isCircleQdz", method = RequestMethod.POST)
  746 + public Map<String, Object> isCircleQdz(@RequestParam String line, String nbbm, String ts, String qdzCode){
  747 + Map<String, Object> map =new HashMap<>();
  748 + map.put("isExist",scheduleRealInfoService.isCircleQdz(nbbm, ts, line, qdzCode));
  749 + return map;
  750 + }
  751 +
  752 + /**
  753 + * 从历史库里删除临加班次
  754 + * @param param
  755 + * @return
  756 + */
  757 + @RequestMapping(value = "wxsb", method = RequestMethod.POST)
  758 + public Map<String, Object> repairReport(@RequestParam Map<String, Object> param){
  759 + return scheduleRealInfoService.repairReport(param, true);
  760 + }
  761 +
  762 + @RequestMapping(value = "wxsb", method = RequestMethod.GET)
  763 + public List<RepairReport> repairReportList(@RequestParam String line, @RequestParam String date, @RequestParam String code, @RequestParam String type){
  764 + return scheduleRealInfoService.repairReportList(line, date, code, type);
  765 + }
  766 +
  767 + @RequestMapping(value = "lineLevel", method = RequestMethod.GET)
  768 + public Map<String, String> lineLevel(@RequestParam String idx){
  769 + return scheduleRealInfoService.getLevelsByLines(Arrays.asList(idx.split(",")));
  770 + }
  771 +
  772 + /**
  773 + * 反馈安全驾驶系统
  774 + * @param param
  775 + * @return
  776 + */
  777 + @RequestMapping(value = "ackDsm", method = RequestMethod.POST)
  778 + public Map<String, Object> ackDsm(@RequestParam Map<String, Object> param){
  779 + Map<String, Object> res = new HashMap<>();
  780 + InputStream in = null;
  781 + SysUser user = SecurityUtils.getCurrentUser();
  782 + DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
  783 + StringBuilder url = new StringBuilder(dsmUrl), uri = new StringBuilder();
  784 + HttpURLConnection con = null;
  785 + try {
  786 + uri.append("ddyName=").append(URLEncoder.encode(user == null ? "admin" : user.getUserName(), "UTF-8"));
  787 + uri.append("&checkTime=").append(URLEncoder.encode(fmt.print(System.currentTimeMillis()), "UTF-8"));
  788 + uri.append("&nbbm=").append(URLEncoder.encode(param.get("nbbm").toString(), "UTF-8"));
  789 + uri.append("&starttime=").append(URLEncoder.encode(fmt.print(Long.parseLong(param.get("ts").toString())), "UTF-8"));
  790 + url.append(uri);
  791 + con = (HttpURLConnection)new URL(url.toString()).openConnection();
  792 + con.setDoInput(true);
  793 + con.setRequestMethod("POST");
  794 + con.setConnectTimeout(5000);
  795 + con.setReadTimeout(5000);
  796 + con.setRequestProperty("keep-alive", "true");
  797 + con.setRequestProperty("accept", "*/*");
  798 + con.setRequestProperty("content-type", "application/x-www-form-urlencoded");
  799 + con.connect();
  800 +
  801 + if (con.getResponseCode() == 200) {
  802 + in = con.getInputStream();
  803 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
  804 + IOUtils.copy(in, bout);
  805 + Map<String, Object> map = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
  806 + System.out.println(map);
  807 + }
  808 + } catch (MalformedURLException e) {
  809 + // TODO Auto-generated catch block
  810 + e.printStackTrace();
  811 + } catch (IOException e) {
  812 + // TODO Auto-generated catch block
  813 + e.printStackTrace();
  814 + } finally {
  815 + if (con != null) {
  816 + con.disconnect();
  817 + }
  818 + }
  819 +
  820 + return res;
  821 + }
  822 +
  823 + /**
  824 + * 反馈应急预案系统
  825 + * @param param
  826 + * @return
  827 + */
  828 + @RequestMapping(value = "ackCp", method = RequestMethod.POST)
  829 + public Map<String, Object> ackCp(@RequestParam Map<String, Object> param){
  830 + Map<String, Object> res = new HashMap<>();
  831 + InputStream in = null;
  832 + SysUser user = SecurityUtils.getCurrentUser();
  833 + DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
  834 + StringBuilder url = new StringBuilder(cpUrl);
  835 + HttpURLConnection con = null;
  836 + try {
  837 + con = (HttpURLConnection)new URL(url.append(param.get("id")).toString()).openConnection();
  838 + con.setDoInput(true);
  839 + con.setRequestMethod("GET");
  840 + con.setConnectTimeout(5000);
  841 + con.setReadTimeout(5000);
  842 + con.setRequestProperty("keep-alive", "true");
  843 + con.setRequestProperty("accept", "*/*");
  844 +
  845 + if (con.getResponseCode() == 200) {
  846 + in = con.getInputStream();
  847 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
  848 + IOUtils.copy(in, bout);
  849 + Map<String, Object> map = new ObjectMapper().readValue(bout.toByteArray(), Map.class);
  850 + System.out.println(map);
  851 + }
  852 + } catch (MalformedURLException e) {
  853 + // TODO Auto-generated catch block
  854 + e.printStackTrace();
  855 + } catch (IOException e) {
  856 + // TODO Auto-generated catch block
  857 + e.printStackTrace();
  858 + } finally {
  859 + if (con != null) {
  860 + con.disconnect();
  861 + }
  862 + }
  863 +
  864 + return res;
  865 + }
  866 +
  867 + @RequestMapping(value = "exportPlan", method = RequestMethod.GET)
  868 + public Map<String, Object> exportPlan(@RequestParam String date){
  869 + Map<String, Object> res = new HashMap<>();
  870 + DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm");
  871 + Connection conn = null;
  872 + PreparedStatement ps = null;
  873 + ResultSet rs = null;
  874 +
  875 + List<Map<String, Object>> list = new ArrayList<>();
  876 + String sql = "select xl_name,xl_dir,schedule_date,fcsj,cl_zbh,j_name,bcsj from bsth_c_s_sp_info where schedule_date = ? and xl_bm in (22205, 202104, 202105, 202106, 202107, 210415) and bc_type = 'normal'";
  877 + try{
  878 + conn = DBUtils_control.getConnection();
  879 + ps = conn.prepareStatement(sql);
  880 + ps.setString(1, date);
  881 + rs = ps.executeQuery();
  882 + ObjectMapper mapper = new ObjectMapper();
  883 +
  884 + while (rs.next()) {
  885 + SchedulePlan schedulePlan = new SchedulePlan();
  886 + schedulePlan.setXlName(rs.getString("xl_name"));
  887 + schedulePlan.setXlDir(rs.getInt("xl_dir"));
  888 + Date scheduleDate = rs.getDate("schedule_date");
  889 + schedulePlan.setScheduleDate(new DateTime(scheduleDate.getTime()).toString("yyyy-MM-dd"));
  890 + String fcsj = rs.getString("fcsj");
  891 + int bcsj = rs.getInt("bcsj");
  892 + DateTime fcsjDt = dateTimeFormatter.parseDateTime(schedulePlan.getScheduleDate() + " " + fcsj);
  893 + schedulePlan.setFcsj(fcsjDt.toString("HH:mm:00"));
  894 + DateTime ddsjDt = fcsjDt.plusMinutes(bcsj);
  895 + schedulePlan.setDdsj(ddsjDt.toString("HH:mm:00"));
  896 + schedulePlan.setSjdStart(fcsjDt.toString("HH:00:00"));
  897 + DateTime endDt = fcsjDt.plusHours(1);
  898 + schedulePlan.setSjdEnd(endDt.toString("HH:00:00"));
  899 + schedulePlan.setClZbh(rs.getString("cl_zbh"));
  900 + schedulePlan.setJsy(rs.getString("j_name"));
  901 + schedulePlan.setBcsj(bcsj);
  902 +
  903 + list.add(mapper.readValue(mapper.writeValueAsString(schedulePlan), HashMap.class));
  904 + }
  905 + List<Iterator<?>> iterators = new ArrayList<Iterator<?>>();
  906 + iterators.add(list.iterator());
  907 + String path = this.getClass().getResource("/").getPath() + "static/pages/forms/";
  908 + String sourcePath = path + "mould/schedulePlan.xls";
  909 +
  910 + new ReportUtils().excelReplace(iterators, new Object[]{}, sourcePath, path + "export/" + date + "-花博会专线班次.xls");
  911 +
  912 + res.put("status", ResponseCode.SUCCESS);
  913 + res.put("msg", "成功");
  914 + } catch (Exception e) {
  915 + res.put("status", ResponseCode.ERROR);
  916 + res.put("msg", e.getMessage());
  917 + } finally {
  918 + DBUtils_control.close(rs, ps, conn);
  919 + }
  920 +
  921 + return res;
  922 + }
  923 +
  924 + public final static class SchedulePlan {
  925 + private String company = "浦东公司[46]";
  926 +
  927 + private String xlName = "";
  928 +
  929 + private int xlDir;
  930 +
  931 + private String xlDirStr = "";
  932 +
  933 + private String scheduleDate = "";
  934 +
  935 + private String sjdStart = "";
  936 +
  937 + private String sjdEnd = "";
  938 +
  939 + private String fcsj = "";
  940 +
  941 + private int bcsj;
  942 +
  943 + private String ddsj = "";
  944 +
  945 + private int yys = 25;
  946 +
  947 + private String clZbh = "";
  948 +
  949 + private String cph = "";
  950 +
  951 + private String color = "绿牌";
  952 +
  953 + private String jsy = "";
  954 +
  955 + private String jsydh = "";
  956 +
  957 + private int pj = 10;
  958 +
  959 + public String getCompany() {
  960 + return company;
  961 + }
  962 +
  963 + public void setCompany(String company) {
  964 + this.company = company;
  965 + }
  966 +
  967 + public String getXlName() {
  968 + return xlName;
  969 + }
  970 +
  971 + public void setXlName(String xlName) {
  972 + this.xlName = xlName;
  973 + }
  974 +
  975 + public int getXlDir() {
  976 + return xlDir;
  977 + }
  978 +
  979 + public void setXlDir(int xlDir) {
  980 + this.xlDir = xlDir;
  981 + }
  982 +
  983 + public String getXlDirStr() {
  984 + xlDirStr = "";
  985 + if (xlDir == 0) {
  986 + xlDirStr = "上行";
  987 + } else if (xlDir == 1) {
  988 + xlDirStr = "下行";
  989 + }
  990 + return xlDirStr;
  991 + }
  992 +
  993 + public void setXlDirStr(String xlDirStr) {
  994 + this.xlDirStr = xlDirStr;
  995 + }
  996 +
  997 + public String getScheduleDate() {
  998 + return scheduleDate;
  999 + }
  1000 +
  1001 + public void setScheduleDate(String scheduleDate) {
  1002 + this.scheduleDate = scheduleDate;
  1003 + }
  1004 +
  1005 + public String getSjdStart() {
  1006 + return sjdStart;
  1007 + }
  1008 +
  1009 + public void setSjdStart(String sjdStart) {
  1010 + this.sjdStart = sjdStart;
  1011 + }
  1012 +
  1013 + public String getSjdEnd() {
  1014 + return sjdEnd;
  1015 + }
  1016 +
  1017 + public void setSjdEnd(String sjdEnd) {
  1018 + this.sjdEnd = sjdEnd;
  1019 + }
  1020 +
  1021 + public String getFcsj() {
  1022 + return fcsj;
  1023 + }
  1024 +
  1025 + public void setFcsj(String fcsj) {
  1026 + this.fcsj = fcsj;
  1027 + }
  1028 +
  1029 + public int getBcsj() {
  1030 + return bcsj;
  1031 + }
  1032 +
  1033 + public void setBcsj(int bcsj) {
  1034 + this.bcsj = bcsj;
  1035 + }
  1036 +
  1037 + public String getDdsj() {
  1038 + return ddsj;
  1039 + }
  1040 +
  1041 + public void setDdsj(String ddsj) {
  1042 + this.ddsj = ddsj;
  1043 + }
  1044 +
  1045 + public int getYys() {
  1046 + return yys;
  1047 + }
  1048 +
  1049 + public void setYys(int yys) {
  1050 + this.yys = yys;
  1051 + }
  1052 +
  1053 + public String getClZbh() {
  1054 + return clZbh;
  1055 + }
  1056 +
  1057 + public void setClZbh(String clZbh) {
  1058 + this.clZbh = clZbh;
  1059 + }
  1060 +
  1061 + public String getCph() {
  1062 + cph = BasicData.nbbmCompanyPlateMap.get(clZbh);
  1063 + if (cph == null) {
  1064 + cph = "";
  1065 + }
  1066 + return cph;
  1067 + }
  1068 +
  1069 + public void setCph(String cph) {
  1070 + this.cph = cph;
  1071 + }
  1072 +
  1073 + public String getColor() {
  1074 + return color;
  1075 + }
  1076 +
  1077 + public void setColor(String color) {
  1078 + this.color = color;
  1079 + }
  1080 +
  1081 + public String getJsy() {
  1082 + return jsy;
  1083 + }
  1084 +
  1085 + public void setJsy(String jsy) {
  1086 + this.jsy = jsy;
  1087 + }
  1088 +
  1089 + public String getJsydh() {
  1090 + return jsydh;
  1091 + }
  1092 +
  1093 + public void setJsydh(String jsydh) {
  1094 + this.jsydh = jsydh;
  1095 + }
  1096 +
  1097 + public int getPj() {
  1098 + return pj;
  1099 + }
  1100 +
  1101 + public void setPj(int pj) {
  1102 + this.pj = pj;
  1103 + }
  1104 + }
  1105 +}
src/main/java/com/bsth/controller/realcontrol/ServiceDataInterface.java
1 -package com.bsth.controller.realcontrol;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.alibaba.fastjson.JSONArray;  
5 -import com.alibaba.fastjson.JSONObject;  
6 -import com.bsth.controller.realcontrol.dto.ChangePersonCar;  
7 -import com.bsth.controller.realcontrol.dto.DftzAndDestroy;  
8 -import com.bsth.data.BasicData;  
9 -import com.bsth.data.directive.DayOfDirectives;  
10 -import com.bsth.data.directive.DirectiveCreator;  
11 -import com.bsth.data.directive.GatewayHttpUtils;  
12 -import com.bsth.data.gpsdata_v2.GpsRealData;  
13 -import com.bsth.data.gpsdata_v2.entity.GpsEntity;  
14 -import com.bsth.data.schedule.DayOfSchedule;  
15 -import com.bsth.data.schedule.external.TccExternalService;  
16 -import com.bsth.entity.directive.D60;  
17 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
18 -import com.bsth.repository.directive.D60Repository;  
19 -import com.google.common.base.Splitter;  
20 -import org.apache.commons.lang3.StringEscapeUtils;  
21 -import org.apache.commons.lang3.StringUtils;  
22 -import org.slf4j.Logger;  
23 -import org.slf4j.LoggerFactory;  
24 -import org.springframework.beans.factory.annotation.Autowired;  
25 -import org.springframework.web.bind.annotation.*;  
26 -  
27 -import java.util.*;  
28 -  
29 -/**  
30 - * 对外的营运数据接口  
31 - * Created by panzhao on 2017/3/15.  
32 - */  
33 -@RestController  
34 -@RequestMapping("/companyService")  
35 -public class ServiceDataInterface {  
36 -  
37 - private final static String SECRE_KEY = "dVPHJkWUt5FhMT7jrM2dLV7QvlHAmZFd42rs1P0usBx8A7HZki";  
38 -  
39 - Logger logger = LoggerFactory.getLogger(this.getClass());  
40 -  
41 - @Autowired  
42 - DayOfSchedule dayOfSchedule;  
43 -  
44 - @Autowired  
45 - DayOfDirectives dayOfDirectives;  
46 -  
47 - @Autowired  
48 - D60Repository d60Repository;  
49 -  
50 - @Autowired  
51 - GpsRealData gpsRealData;  
52 -  
53 - @Autowired  
54 - TccExternalService tccExternalService;  
55 -  
56 - /**  
57 - * 获取车辆 和 当前执行班次对照信息  
58 - *  
59 - * @return  
60 - */  
61 - @RequestMapping("/execSchList")  
62 - public List<Map<String, Object>> execSchList(@RequestParam String secretKey) {  
63 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
64 - return null;  
65 -  
66 - List<Map<String, Object>> rs = new ArrayList<>();  
67 - Collection<ScheduleRealInfo> list = dayOfSchedule.execPlanMap().values();  
68 -  
69 - Map<String, Object> map;  
70 - for (ScheduleRealInfo sch : list) {  
71 - if (null == sch)  
72 - continue;  
73 - map = new HashMap<>();  
74 - map.put("clZbh", sch.getClZbh());  
75 - map.put("jGh", sch.getjGh());  
76 - map.put("jName", sch.getjName());  
77 - map.put("sGh", sch.getsGh());  
78 - map.put("sName", sch.getsName());  
79 - map.put("lpName", sch.getLpName());  
80 - map.put("xlBm", sch.getXlBm());  
81 - map.put("xlName", sch.getXlName());  
82 - map.put("xlDir", sch.getXlDir());  
83 - map.put("qdzName", sch.getQdzName());  
84 - map.put("zdzName", sch.getZdzName());  
85 - map.put("fcsj", sch.getFcsj());  
86 - map.put("dfsj", sch.getDfsj());  
87 - map.put("zdsj", sch.getZdsj());  
88 - map.put("bcType", sch.getBcType());  
89 - map.put("remarks", sch.getRemark());  
90 - map.put("status", sch.getStatus());  
91 -  
92 - //放站班次,放到的站点  
93 - map.put("majorStationName", sch.getMajorStationName());  
94 - rs.add(map);  
95 - }  
96 - return rs;  
97 - }  
98 -  
99 - @RequestMapping("/getCurrentDayPlan")  
100 - public List<ScheduleRealInfo> getCurrentDayPlan(  
101 - @RequestParam String companyId,  
102 - @RequestParam String workId,  
103 - @RequestParam String secretKey) {  
104 -  
105 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
106 - return null;  
107 -  
108 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findByGsbm(companyId)), rs = new ArrayList<>();  
109 - for (ScheduleRealInfo sch : all) {  
110 - if (sch.getGsBm() != null  
111 - && sch.getGsBm().equals(companyId)  
112 - && sch.getjGh().equals(workId)) {  
113 - rs.add(sch);  
114 - }  
115 - }  
116 - return rs;  
117 - }  
118 -  
119 - @RequestMapping("/returnCCInfo")  
120 - public List<ScheduleRealInfo> returnCCInfo(@RequestParam String companyId, @RequestParam String secretKey) {  
121 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
122 - return null;  
123 -  
124 -  
125 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();  
126 - for (ScheduleRealInfo sch : all) {  
127 -  
128 - if (sch.getBcType().equals("out")  
129 - && sch.getGsBm() != null  
130 - && sch.getGsBm().equals(companyId)) {  
131 - rs.add(sch);  
132 - }  
133 - }  
134 - return rs;  
135 - }  
136 -  
137 - @RequestMapping("/returnJCInfo")  
138 - public List<ScheduleRealInfo> returnJCInfo(@RequestParam String companyId, @RequestParam String secretKey) {  
139 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
140 - return null;  
141 -  
142 -  
143 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();  
144 - for (ScheduleRealInfo sch : all) {  
145 - if (sch.getBcType().equals("in")  
146 - && sch.getGsBm() != null  
147 - && sch.getGsBm().equals(companyId)) {  
148 - rs.add(sch);  
149 - }  
150 - }  
151 - return rs;  
152 - }  
153 -  
154 - /**  
155 - * 获取全量的进出场数据, 仅供接口项目调用。 由接口项目负责对外所有场站输出  
156 - *  
157 - * @return  
158 - */  
159 - @RequestMapping("/findCurrInAndOut")  
160 - public List<ScheduleRealInfo> findCurrInAndOut(@RequestParam String secretKey) {  
161 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
162 - return null;  
163 -  
164 -  
165 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();  
166 - for (ScheduleRealInfo sch : all) {  
167 - if (sch.getBcType().equals("in")  
168 - || sch.getBcType().equals("out")) {  
169 - rs.add(sch);  
170 - }  
171 - }  
172 - return rs;  
173 - }  
174 -  
175 - /**  
176 - * 向指定的车辆下发消息短语  
177 - *  
178 - * @return  
179 - */  
180 - @RequestMapping(value = "/send60Phrase", method = RequestMethod.POST)  
181 - public int send60Phrase(@RequestBody Map<String, String> map, @RequestParam String secretKey) {  
182 - try {  
183 - String nbbm = map.get("nbbm");  
184 - String txt = map.get("txt");  
185 - String sender = map.get("sender");  
186 - if (txt.length() > 50)  
187 - txt = txt.substring(0, 50);  
188 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
189 - return -500;  
190 -  
191 - //车辆和设备号对照  
192 - String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);  
193 - if (StringUtils.isEmpty(deviceId))  
194 - return -404;  
195 -  
196 - //检查设备是否在线  
197 - long t = System.currentTimeMillis();  
198 - GpsEntity gps = gpsRealData.get(deviceId);  
199 - if (null == gps || (t - gps.getServerTimestamp()) > 1000 * 60 * 5)  
200 - return -405;  
201 -  
202 - Short dispatchInstruct = 0;//消息短语  
203 - D60 d60 = new DirectiveCreator().createD60(nbbm, txt, dispatchInstruct, gps.getUpDown(), gps.getState(), gps.getLineId());  
204 - d60.setSender(sender);  
205 - // 发送指令  
206 - int code = GatewayHttpUtils.postJson(JSON.toJSONString(d60));  
207 - d60.setHttpCode(code);  
208 -  
209 - if (code != 0)  
210 - d60.setErrorText("网关通讯失败, code: " + code);  
211 -  
212 - dayOfDirectives.put60(d60);  
213 - return d60.getMsgId();  
214 - } catch (Exception e) {  
215 - logger.error("", e);  
216 - return -500;  
217 - }  
218 - }  
219 -  
220 - /**  
221 - * 根据msg id 查询指令响应情况  
222 - *  
223 - * @param msgIds  
224 - * @return  
225 - */  
226 - @RequestMapping("/findD60Reply")  
227 - public List<Map<String, Object>> findD60Reply(@RequestParam String msgIds) {  
228 - List<Map<String, Object>> rs = new ArrayList<>();  
229 - try {  
230 - Map<String, Object> map = new HashMap();  
231 -  
232 - List<String> ids = Splitter.on(",").splitToList(msgIds);  
233 - D60 d60;  
234 - for (String id : ids) {  
235 - if (StringUtils.isEmpty(id))  
236 - continue;  
237 -  
238 - d60 = dayOfDirectives.get(Integer.parseInt(id));  
239 - if (null == d60)  
240 - continue;  
241 -  
242 - map.put("msgId", d60.getMsgId());  
243 - map.put("deviceReplyTime", d60.getReply46Time());  
244 - map.put("jsyReplyTime", d60.getReply47Time());  
245 - rs.add(map);  
246 - }  
247 - } catch (Exception e) {  
248 - logger.error("", e);  
249 - }  
250 - return rs;  
251 - }  
252 -  
253 - /**  
254 - * 获取路牌下所有班次  
255 - *  
256 - * @param lineCode  
257 - * @param lpName  
258 - * @return  
259 - */  
260 - @RequestMapping("/findByLpName")  
261 - public List<ScheduleRealInfo> findByLpName(@RequestParam String lineCode, @RequestParam String lpName, @RequestParam String secretKey) {  
262 - try {  
263 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
264 - return null;  
265 -  
266 - List<ScheduleRealInfo> list = dayOfSchedule.getLpScheduleMap().get(lineCode + "_" + lpName);  
267 - return list;  
268 - } catch (Exception e) {  
269 - logger.error("", e);  
270 - }  
271 - return null;  
272 - }  
273 -  
274 - /**  
275 - * 调整出场班次待发,并烂掉后续班次(调派用)  
276 - *  
277 - * @param dad  
278 - * @return  
279 - */  
280 - @RequestMapping(value = "/dftzAndDestroy", method = RequestMethod.POST)  
281 - public Map<String, Object> dftzAndDestroy(@RequestBody DftzAndDestroy dad, @RequestParam String secretKey) {  
282 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
283 - return null;  
284 - return tccExternalService.dftz(dad);  
285 - }  
286 -  
287 - /**  
288 - * 换人换车,(调派用)  
289 - * @return  
290 - */  
291 - @RequestMapping(value = "/tccHrhc", method = RequestMethod.POST)  
292 - public Map<String, Object> hrhc(@RequestBody String jsonStr, @RequestParam String secretKey){  
293 -  
294 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
295 - return null;  
296 -  
297 - jsonStr = StringEscapeUtils.unescapeHtml4(jsonStr);  
298 - JSONObject rootObj = JSON.parseObject(jsonStr);  
299 -  
300 - List<ChangePersonCar> cpcs = JSONArray.parseArray(rootObj.getString("cpcs"), ChangePersonCar.class);  
301 - return tccExternalService.hrhc(cpcs, rootObj.getString("tccCode"), rootObj.getString("userId"));  
302 - }  
303 -} 1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONArray;
  5 +import com.alibaba.fastjson.JSONObject;
  6 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  7 +import com.bsth.controller.realcontrol.dto.DftzAndDestroy;
  8 +import com.bsth.data.BasicData;
  9 +import com.bsth.data.directive.DayOfDirectives;
  10 +import com.bsth.data.directive.DirectiveCreator;
  11 +import com.bsth.data.directive.GatewayHttpUtils;
  12 +import com.bsth.data.gpsdata_v2.GpsRealData;
  13 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  14 +import com.bsth.data.schedule.DayOfSchedule;
  15 +import com.bsth.data.schedule.external.TccExternalService;
  16 +import com.bsth.entity.directive.D60;
  17 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  18 +import com.bsth.repository.directive.D60Repository;
  19 +import com.bsth.websocket.handler.SendUtils;
  20 +import com.fasterxml.jackson.databind.ObjectMapper;
  21 +import com.google.common.base.Splitter;
  22 +import org.apache.commons.lang3.StringEscapeUtils;
  23 +import org.apache.commons.lang3.StringUtils;
  24 +import org.slf4j.Logger;
  25 +import org.slf4j.LoggerFactory;
  26 +import org.springframework.beans.factory.annotation.Autowired;
  27 +import org.springframework.web.bind.annotation.*;
  28 +
  29 +import java.io.IOException;
  30 +import java.util.*;
  31 +
  32 +/**
  33 + * 对外的营运数据接口
  34 + * Created by panzhao on 2017/3/15.
  35 + */
  36 +@RestController
  37 +@RequestMapping("/companyService")
  38 +public class ServiceDataInterface {
  39 +
  40 + private final static String SECRE_KEY = "dVPHJkWUt5FhMT7jrM2dLV7QvlHAmZFd42rs1P0usBx8A7HZki";
  41 +
  42 + Logger logger = LoggerFactory.getLogger(this.getClass());
  43 +
  44 + @Autowired
  45 + DayOfSchedule dayOfSchedule;
  46 +
  47 + @Autowired
  48 + DayOfDirectives dayOfDirectives;
  49 +
  50 + @Autowired
  51 + D60Repository d60Repository;
  52 +
  53 + @Autowired
  54 + GpsRealData gpsRealData;
  55 +
  56 + @Autowired
  57 + TccExternalService tccExternalService;
  58 +
  59 + @Autowired
  60 + private SendUtils sendUtils;
  61 +
  62 + /**
  63 + * 获取车辆 和 当前执行班次对照信息
  64 + *
  65 + * @return
  66 + */
  67 + @RequestMapping("/execSchList")
  68 + public List<Map<String, Object>> execSchList(@RequestParam String secretKey) {
  69 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  70 + return null;
  71 +
  72 + List<Map<String, Object>> rs = new ArrayList<>();
  73 + Collection<ScheduleRealInfo> list = dayOfSchedule.execPlanMap().values();
  74 +
  75 + Map<String, Object> map;
  76 + for (ScheduleRealInfo sch : list) {
  77 + if (null == sch)
  78 + continue;
  79 + map = new HashMap<>();
  80 + map.put("clZbh", sch.getClZbh());
  81 + map.put("jGh", sch.getjGh());
  82 + map.put("jName", sch.getjName());
  83 + map.put("sGh", sch.getsGh());
  84 + map.put("sName", sch.getsName());
  85 + map.put("lpName", sch.getLpName());
  86 + map.put("xlBm", sch.getXlBm());
  87 + map.put("xlName", sch.getXlName());
  88 + map.put("xlDir", sch.getXlDir());
  89 + map.put("qdzName", sch.getQdzName());
  90 + map.put("zdzName", sch.getZdzName());
  91 + map.put("fcsj", sch.getFcsj());
  92 + map.put("dfsj", sch.getDfsj());
  93 + map.put("zdsj", sch.getZdsj());
  94 + map.put("bcType", sch.getBcType());
  95 + map.put("remarks", sch.getRemark());
  96 + map.put("status", sch.getStatus());
  97 +
  98 + //放站班次,放到的站点
  99 + map.put("majorStationName", sch.getMajorStationName());
  100 + rs.add(map);
  101 + }
  102 + return rs;
  103 + }
  104 +
  105 + @RequestMapping("/getCurrentDayPlan")
  106 + public List<ScheduleRealInfo> getCurrentDayPlan(
  107 + @RequestParam String companyId,
  108 + @RequestParam String workId,
  109 + @RequestParam String secretKey) {
  110 +
  111 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  112 + return null;
  113 +
  114 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findByGsbm(companyId)), rs = new ArrayList<>();
  115 + for (ScheduleRealInfo sch : all) {
  116 + if (sch.getGsBm() != null
  117 + && sch.getGsBm().equals(companyId)
  118 + && sch.getjGh().equals(workId)) {
  119 + rs.add(sch);
  120 + }
  121 + }
  122 + return rs;
  123 + }
  124 +
  125 + @RequestMapping("/returnCCInfo")
  126 + public List<ScheduleRealInfo> returnCCInfo(@RequestParam String companyId, @RequestParam String secretKey) {
  127 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  128 + return null;
  129 +
  130 +
  131 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();
  132 + for (ScheduleRealInfo sch : all) {
  133 +
  134 + if (sch.getBcType().equals("out")
  135 + && sch.getGsBm() != null
  136 + && sch.getGsBm().equals(companyId)) {
  137 + rs.add(sch);
  138 + }
  139 + }
  140 + return rs;
  141 + }
  142 +
  143 + @RequestMapping("/returnJCInfo")
  144 + public List<ScheduleRealInfo> returnJCInfo(@RequestParam String companyId, @RequestParam String secretKey) {
  145 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  146 + return null;
  147 +
  148 +
  149 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();
  150 + for (ScheduleRealInfo sch : all) {
  151 + if (sch.getBcType().equals("in")
  152 + && sch.getGsBm() != null
  153 + && sch.getGsBm().equals(companyId)) {
  154 + rs.add(sch);
  155 + }
  156 + }
  157 + return rs;
  158 + }
  159 +
  160 + /**
  161 + * 获取全量的进出场数据, 仅供接口项目调用。 由接口项目负责对外所有场站输出
  162 + *
  163 + * @return
  164 + */
  165 + @RequestMapping("/findCurrInAndOut")
  166 + public List<ScheduleRealInfo> findCurrInAndOut(@RequestParam String secretKey) {
  167 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  168 + return null;
  169 +
  170 +
  171 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();
  172 + for (ScheduleRealInfo sch : all) {
  173 + if (sch.getBcType().equals("in")
  174 + || sch.getBcType().equals("out")) {
  175 + rs.add(sch);
  176 + }
  177 + }
  178 + return rs;
  179 + }
  180 +
  181 + /**
  182 + * 向指定的车辆下发消息短语
  183 + *
  184 + * @return
  185 + */
  186 + @RequestMapping(value = "/send60Phrase", method = RequestMethod.POST)
  187 + public int send60Phrase(@RequestBody Map<String, String> map, @RequestParam String secretKey) {
  188 + try {
  189 + String nbbm = map.get("nbbm");
  190 + String txt = map.get("txt");
  191 + String sender = map.get("sender");
  192 + if (txt.length() > 50)
  193 + txt = txt.substring(0, 50);
  194 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  195 + return -500;
  196 +
  197 + //车辆和设备号对照
  198 + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  199 + if (StringUtils.isEmpty(deviceId))
  200 + return -404;
  201 +
  202 + //检查设备是否在线
  203 + long t = System.currentTimeMillis();
  204 + GpsEntity gps = gpsRealData.get(deviceId);
  205 + if (null == gps || (t - gps.getServerTimestamp()) > 1000 * 60 * 5)
  206 + return -405;
  207 +
  208 + Short dispatchInstruct = 0;//消息短语
  209 + D60 d60 = new DirectiveCreator().createD60(nbbm, txt, dispatchInstruct, gps.getUpDown(), gps.getState(), gps.getLineId());
  210 + d60.setSender(sender);
  211 + // 发送指令
  212 + int code = GatewayHttpUtils.postJson(JSON.toJSONString(d60));
  213 + d60.setHttpCode(code);
  214 +
  215 + if (code != 0)
  216 + d60.setErrorText("网关通讯失败, code: " + code);
  217 +
  218 + dayOfDirectives.put60(d60);
  219 + return d60.getMsgId();
  220 + } catch (Exception e) {
  221 + logger.error("", e);
  222 + return -500;
  223 + }
  224 + }
  225 +
  226 + /**
  227 + * 根据msg id 查询指令响应情况
  228 + *
  229 + * @param msgIds
  230 + * @return
  231 + */
  232 + @RequestMapping("/findD60Reply")
  233 + public List<Map<String, Object>> findD60Reply(@RequestParam String msgIds) {
  234 + List<Map<String, Object>> rs = new ArrayList<>();
  235 + try {
  236 + Map<String, Object> map = new HashMap();
  237 +
  238 + List<String> ids = Splitter.on(",").splitToList(msgIds);
  239 + D60 d60;
  240 + for (String id : ids) {
  241 + if (StringUtils.isEmpty(id))
  242 + continue;
  243 +
  244 + d60 = dayOfDirectives.get(Integer.parseInt(id));
  245 + if (null == d60)
  246 + continue;
  247 +
  248 + map.put("msgId", d60.getMsgId());
  249 + map.put("deviceReplyTime", d60.getReply46Time());
  250 + map.put("jsyReplyTime", d60.getReply47Time());
  251 + rs.add(map);
  252 + }
  253 + } catch (Exception e) {
  254 + logger.error("", e);
  255 + }
  256 + return rs;
  257 + }
  258 +
  259 + /**
  260 + * 获取路牌下所有班次
  261 + *
  262 + * @param lineCode
  263 + * @param lpName
  264 + * @return
  265 + */
  266 + @RequestMapping("/findByLpName")
  267 + public List<ScheduleRealInfo> findByLpName(@RequestParam String lineCode, @RequestParam String lpName, @RequestParam String secretKey) {
  268 + try {
  269 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  270 + return null;
  271 +
  272 + List<ScheduleRealInfo> list = dayOfSchedule.getLpScheduleMap().get(lineCode + "_" + lpName);
  273 + return list;
  274 + } catch (Exception e) {
  275 + logger.error("", e);
  276 + }
  277 + return null;
  278 + }
  279 +
  280 + /**
  281 + * 调整出场班次待发,并烂掉后续班次(调派用)
  282 + *
  283 + * @param dad
  284 + * @return
  285 + */
  286 + @RequestMapping(value = "/dftzAndDestroy", method = RequestMethod.POST)
  287 + public Map<String, Object> dftzAndDestroy(@RequestBody DftzAndDestroy dad, @RequestParam String secretKey) {
  288 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  289 + return null;
  290 + return tccExternalService.dftz(dad);
  291 + }
  292 +
  293 + /**
  294 + * 换人换车,(调派用)
  295 + * @return
  296 + */
  297 + @RequestMapping(value = "/tccHrhc", method = RequestMethod.POST)
  298 + public Map<String, Object> hrhc(@RequestBody String jsonStr, @RequestParam String secretKey){
  299 +
  300 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  301 + return null;
  302 +
  303 + jsonStr = StringEscapeUtils.unescapeHtml4(jsonStr);
  304 + JSONObject rootObj = JSON.parseObject(jsonStr);
  305 +
  306 + List<ChangePersonCar> cpcs = JSONArray.parseArray(rootObj.getString("cpcs"), ChangePersonCar.class);
  307 + return tccExternalService.hrhc(cpcs, rootObj.getString("tccCode"), rootObj.getString("userId"));
  308 + }
  309 +
  310 + /**
  311 + * 接收应急预案信息
  312 + * @return
  313 + */
  314 + @RequestMapping(value = "/contingencyPlan", method = RequestMethod.POST)
  315 + public Map<String, Object> contingencyPlan(@RequestBody String jsonStr, @RequestParam String secretKey){
  316 + Map<String, Object> result = new HashMap<>();
  317 + result.put("errCode", 0);
  318 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY)) {
  319 + result.put("errCode", 501);
  320 + result.put("msg", "无效的key");
  321 +
  322 + return result;
  323 + }
  324 +
  325 + ObjectMapper mapper = new ObjectMapper();
  326 + try {
  327 + List<Map> maps = mapper.readValue(jsonStr,mapper.getTypeFactory().constructParametricType(List.class, Map.class));
  328 + for (Map map : maps) {
  329 + sendUtils.sendContingencyPlan(map);
  330 + }
  331 + } catch (IOException e) {
  332 + result.put("errCode", 502);
  333 + result.put("msg", "json数据格式异常");
  334 + logger.info("", e);
  335 + }
  336 +
  337 + return result;
  338 + }
  339 +}
src/main/java/com/bsth/websocket/handler/RealControlSocketHandler.java
1 -package com.bsth.websocket.handler;  
2 -  
3 -import com.alibaba.fastjson.JSONObject;  
4 -import com.bsth.data.BasicData;  
5 -import com.bsth.data.msg_queue.WebSocketPushQueue;  
6 -import com.google.common.base.Splitter;  
7 -import org.slf4j.Logger;  
8 -import org.slf4j.LoggerFactory;  
9 -import org.springframework.stereotype.Component;  
10 -import org.springframework.web.socket.*;  
11 -  
12 -import java.util.ArrayList;  
13 -import java.util.Collection;  
14 -import java.util.Iterator;  
15 -import java.util.List;  
16 -import java.util.concurrent.ConcurrentHashMap;  
17 -import java.util.concurrent.CopyOnWriteArrayList;  
18 -  
19 -/**  
20 - * @author PanZhao  
21 - */  
22 -@Component  
23 -public class RealControlSocketHandler implements WebSocketHandler {  
24 -  
25 - Logger logger = LoggerFactory.getLogger(this.getClass());  
26 -  
27 - private static ArrayList<WebSocketSession> users;  
28 - private static ConcurrentHashMap<String, CopyOnWriteArrayList<WebSocketSession>> listenMap;  
29 -  
30 - static {  
31 - users = new ArrayList<WebSocketSession>();  
32 - listenMap = new ConcurrentHashMap();  
33 - }  
34 -  
35 - @Override  
36 - public void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)  
37 - throws Exception {  
38 - users.remove(session);  
39 - //清理监听  
40 - int vsCount=0;  
41 - Collection<CopyOnWriteArrayList<WebSocketSession>> vs = listenMap.values();  
42 - for(CopyOnWriteArrayList<WebSocketSession> list : vs){  
43 - list.remove(session);  
44 -  
45 - vsCount += list.size();  
46 - }  
47 - logger.info("listen values size: " + vsCount + " -CloseStatus:" + arg1 + "conn: " + users.size());  
48 - }  
49 -  
50 - @Override  
51 - public void afterConnectionEstablished(WebSocketSession session)  
52 - throws Exception {  
53 - session.setBinaryMessageSizeLimit(52768);  
54 - session.setTextMessageSizeLimit(52768);  
55 - users.add(session);  
56 - }  
57 -  
58 - @Override  
59 - public void handleMessage(WebSocketSession session, WebSocketMessage<?> msg)  
60 - throws Exception {  
61 - JSONObject jsonObj = JSONObject.parseObject(msg.getPayload().toString());  
62 - switch (jsonObj.getString("operCode")) {  
63 - case "register_line":  
64 - //注册线路监听  
65 - List<String> idx = Splitter.on(",").splitToList(jsonObj.getString("idx"));  
66 - for(String lineCode : idx){  
67 - if(BasicData.lineCode2NameMap.containsKey(lineCode)){  
68 - if(!listenMap.containsKey(lineCode)){  
69 - listenMap.put(lineCode, new CopyOnWriteArrayList<WebSocketSession>());  
70 - }  
71 - listenMap.get(lineCode).add(session);  
72 - }  
73 - }  
74 - break;  
75 -  
76 - default:  
77 - break;  
78 - }  
79 - logger.info(msg.getPayload().toString());  
80 - }  
81 -  
82 - @Override  
83 - public void handleTransportError(WebSocketSession session, Throwable arg1)  
84 - throws Exception {  
85 - if(session.isOpen()){  
86 - session.close();  
87 - }  
88 - users.remove(session);  
89 - }  
90 -  
91 - @Override  
92 - public boolean supportsPartialMessages() {  
93 - return false;  
94 - }  
95 -  
96 -  
97 - /**  
98 - * 根据线路推送消息  
99 - */  
100 - public void sendMessageToLine(String lineCode, String msg) {  
101 -  
102 - TextMessage message = new TextMessage(msg.getBytes());  
103 - List<WebSocketSession> list = listenMap.get(lineCode);  
104 - if(list == null || list.size() == 0)  
105 - return;  
106 -  
107 - for(WebSocketSession user : list){  
108 - WebSocketPushQueue.put(user, message);  
109 - /*try {  
110 - if (user.isOpen()) {  
111 - user.sendMessage(message);  
112 - }  
113 - } catch (Exception e) {  
114 - try{  
115 - logger.error("error user...."+user.getAttributes().get(Constants.SESSION_USERNAME));  
116 - }  
117 - catch(Exception e2){}  
118 - logger.error("sendMessageToLine error ...."+msg);  
119 - logger.error("sendMessageToLine error ....", e);  
120 - }*/  
121 - }  
122 - }  
123 -  
124 -  
125 -  
126 - /**  
127 - * 全局推送  
128 - */  
129 - public void sendMessage(String msg) {  
130 -  
131 - TextMessage message = new TextMessage(msg.getBytes());  
132 -  
133 - Iterator<WebSocketSession> iterator = users.iterator();  
134 -  
135 - WebSocketSession user;  
136 - while(iterator.hasNext()){  
137 - user = iterator.next();  
138 - WebSocketPushQueue.put(user, message);  
139 - /*try {  
140 - if (user.isOpen()) {  
141 - user.sendMessage(message);  
142 - }  
143 - } catch (Exception e) {  
144 - logger.error("sendMessage error ...."+msg);  
145 - }*/  
146 - }  
147 - }  
148 -} 1 +package com.bsth.websocket.handler;
  2 +
  3 +import com.alibaba.fastjson.JSONObject;
  4 +import com.bsth.data.BasicData;
  5 +import com.bsth.data.msg_queue.WebSocketPushQueue;
  6 +import com.google.common.base.Splitter;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
  9 +import org.springframework.stereotype.Component;
  10 +import org.springframework.web.socket.*;
  11 +
  12 +import java.util.ArrayList;
  13 +import java.util.Collection;
  14 +import java.util.Iterator;
  15 +import java.util.List;
  16 +import java.util.concurrent.ConcurrentHashMap;
  17 +import java.util.concurrent.CopyOnWriteArrayList;
  18 +
  19 +/**
  20 + * @author PanZhao
  21 + */
  22 +@Component
  23 +public class RealControlSocketHandler implements WebSocketHandler {
  24 +
  25 + Logger logger = LoggerFactory.getLogger(this.getClass());
  26 +
  27 + private static ArrayList<WebSocketSession> users;
  28 + private static ConcurrentHashMap<String, CopyOnWriteArrayList<WebSocketSession>> listenMap;
  29 +
  30 + static {
  31 + users = new ArrayList<WebSocketSession>();
  32 + listenMap = new ConcurrentHashMap();
  33 + }
  34 +
  35 + @Override
  36 + public void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)
  37 + throws Exception {
  38 + users.remove(session);
  39 + //清理监听
  40 + int vsCount=0;
  41 + Collection<CopyOnWriteArrayList<WebSocketSession>> vs = listenMap.values();
  42 + for(CopyOnWriteArrayList<WebSocketSession> list : vs){
  43 + list.remove(session);
  44 +
  45 + vsCount += list.size();
  46 + }
  47 + logger.info("listen values size: " + vsCount + " -CloseStatus:" + arg1 + "conn: " + users.size());
  48 + }
  49 +
  50 + @Override
  51 + public void afterConnectionEstablished(WebSocketSession session)
  52 + throws Exception {
  53 + session.setBinaryMessageSizeLimit(52768);
  54 + session.setTextMessageSizeLimit(52768);
  55 + users.add(session);
  56 + }
  57 +
  58 + @Override
  59 + public void handleMessage(WebSocketSession session, WebSocketMessage<?> msg)
  60 + throws Exception {
  61 + JSONObject jsonObj = JSONObject.parseObject(msg.getPayload().toString());
  62 + switch (jsonObj.getString("operCode")) {
  63 + case "register_line":
  64 + //注册线路监听
  65 + List<String> idx = Splitter.on(",").splitToList(jsonObj.getString("idx"));
  66 + for(String lineCode : idx){
  67 + if(BasicData.lineCode2NameMap.containsKey(lineCode)){
  68 + if(!listenMap.containsKey(lineCode)){
  69 + listenMap.put(lineCode, new CopyOnWriteArrayList<WebSocketSession>());
  70 + }
  71 + listenMap.get(lineCode).add(session);
  72 + }
  73 + }
  74 + break;
  75 +
  76 + default:
  77 + break;
  78 + }
  79 + logger.info(msg.getPayload().toString());
  80 + }
  81 +
  82 + @Override
  83 + public void handleTransportError(WebSocketSession session, Throwable arg1)
  84 + throws Exception {
  85 + if(session.isOpen()){
  86 + session.close();
  87 + }
  88 + users.remove(session);
  89 + }
  90 +
  91 + @Override
  92 + public boolean supportsPartialMessages() {
  93 + return false;
  94 + }
  95 +
  96 +
  97 + /**
  98 + * 根据线路推送消息
  99 + */
  100 + public void sendMessageToLine(String lineCode, String msg) {
  101 +
  102 + TextMessage message = new TextMessage(msg.getBytes());
  103 + List<WebSocketSession> list = listenMap.get(lineCode);
  104 + if(list == null || list.size() == 0)
  105 + return;
  106 +
  107 + for(WebSocketSession user : list){
  108 + WebSocketPushQueue.put(user, message);
  109 + /*try {
  110 + if (user.isOpen()) {
  111 + user.sendMessage(message);
  112 + }
  113 + } catch (Exception e) {
  114 + try{
  115 + logger.error("error user...."+user.getAttributes().get(Constants.SESSION_USERNAME));
  116 + }
  117 + catch(Exception e2){}
  118 + logger.error("sendMessageToLine error ...."+msg);
  119 + logger.error("sendMessageToLine error ....", e);
  120 + }*/
  121 + }
  122 + }
  123 +
  124 +
  125 +
  126 + /**
  127 + * 全局推送
  128 + */
  129 + public void sendMessage(String msg) {
  130 +
  131 + TextMessage message = new TextMessage(msg.getBytes());
  132 +
  133 + Iterator<WebSocketSession> iterator = users.iterator();
  134 +
  135 + WebSocketSession user;
  136 + while(iterator.hasNext()){
  137 + user = iterator.next();
  138 + WebSocketPushQueue.put(user, message);
  139 + /*try {
  140 + if (user.isOpen()) {
  141 + user.sendMessage(message);
  142 + }
  143 + } catch (Exception e) {
  144 + logger.error("sendMessage error ...."+msg);
  145 + }*/
  146 + }
  147 + }
  148 +
  149 + /**
  150 + * 根据线路推送消息
  151 + */
  152 + public void sendMessageToUser(String userName, String msg) {
  153 +
  154 + TextMessage message = new TextMessage(msg.getBytes());
  155 +
  156 + for(WebSocketSession user : users){
  157 + if (userName.equals(user.getPrincipal().getName())) {
  158 + WebSocketPushQueue.put(user, message);
  159 + }
  160 + }
  161 + }
  162 +}
src/main/java/com/bsth/websocket/handler/SendUtils.java
@@ -230,7 +230,23 @@ public class SendUtils{ @@ -230,7 +230,23 @@ public class SendUtils{
230 try { 230 try {
231 socketHandler.sendMessageToLine(sch.getXlBm(), mapper.writeValueAsString(map)); 231 socketHandler.sendMessageToLine(sch.getXlBm(), mapper.writeValueAsString(map));
232 } catch (JsonProcessingException e) { 232 } catch (JsonProcessingException e) {
233 - logger.error("", e); 233 + logger.error("sendRfid", e);
  234 + }
  235 + }
  236 +
  237 + /**
  238 + * 将应急预案发送至线调页面
  239 + */
  240 + public void sendContingencyPlan(Map<String, Object> cp) {
  241 + Map<String, Object> map = new HashMap<>();
  242 + map.put("fn", "contingencyPlan");
  243 + map.put("data", cp);
  244 + ObjectMapper mapper = new ObjectMapper();
  245 +
  246 + try {
  247 + socketHandler.sendMessageToUser((String)cp.get("instructionsPeopleCode"), mapper.writeValueAsString(map));
  248 + } catch (JsonProcessingException e) {
  249 + logger.error("sendContingencyPlan", e);
234 } 250 }
235 } 251 }
236 } 252 }
src/main/resources/static/pages/history_sch/edit/css/main.css
1 -input::-webkit-outer-spin-button,  
2 -input::-webkit-inner-spin-button{  
3 - display: none;  
4 -}  
5 -  
6 -input::-webkit-calendar-picker-indicator {  
7 - display: none;  
8 -}  
9 -  
10 -input::-webkit-datetime-edit { padding: 1px; }  
11 -  
12 -.ps-container > .ps-scrollbar-y-rail{  
13 - z-index: 1 !important;  
14 -}  
15 -  
16 -.ps-container > .ps-scrollbar-x-rail,  
17 -.ps-container > .ps-scrollbar-y-rail {  
18 - opacity: 0.6 !important;  
19 - padding: 0 !important;  
20 -}  
21 -/* ^_^ baidu map hide logo */  
22 -.anchorBL, .anchorBL, .amap-logo, .amap-copyright {  
23 - display: none;  
24 -}  
25 -  
26 -audio, canvas, img, svg, video {  
27 - max-width: none;  
28 -}  
29 -  
30 -html, body {  
31 - width: 100%;  
32 - height: 100%;  
33 - overflow: hidden;  
34 - margin-left: 0 !important;  
35 -}  
36 -  
37 -.main-container {  
38 - height: calc(100% - 120px);  
39 -}  
40 -  
41 -#main-tab-content {  
42 - height: 100%;  
43 - margin-bottom: 0;  
44 -}  
45 -  
46 -.uk-modal .uk-form.fv-form, .uk-modal .ct-modal-body {  
47 - margin-bottom: -20px !important;  
48 -}  
49 -  
50 -.uk-modal .uk-form.fv-form.fixed-tool {  
51 - width: 100%;  
52 - position: relative;  
53 - height: 100%;  
54 -}  
55 -  
56 -.uk-modal .ct-modal-body .uk-modal-footer {  
57 - margin-left: 0;  
58 -}  
59 -  
60 -.uk-modal .uk-form.fv-form.fixed-tool .uk-modal-footer {  
61 - position: absolute;  
62 - bottom: 0;  
63 - width: calc(100% - 20px);  
64 -}  
65 -  
66 -table.ct-fixed-table {  
67 - table-layout: fixed;  
68 -}  
69 -  
70 -table.ct-fixed-table tr.context-menu-active {  
71 - background: #f0f0f0;  
72 -}  
73 -  
74 -table.ct-fixed-table.uk-table tr td {  
75 - white-space: nowrap;  
76 - overflow: hidden;  
77 - text-overflow: ellipsis;  
78 -}  
79 -  
80 -table.ct-fixed-table.uk-table .uk-badge {  
81 - padding: 2px 5px;  
82 -}  
83 -  
84 -.horizontal-field {  
85 - vertical-align: middle;  
86 - margin: 0 5px;  
87 -}  
88 -  
89 -.legend-tools {  
90 - float: right;  
91 - font-size: 11px;  
92 -}  
93 -  
94 -.legend-tools a.uk-icon-small {  
95 - margin: 0 5px;  
96 - cursor: pointer;  
97 -}  
98 -  
99 -.text-succ {  
100 - color: #659f13;  
101 -}  
102 -  
103 -.text-err {  
104 - color: red;  
105 -}  
106 -  
107 -.text-grey {  
108 - color: grey;  
109 -}  
110 -  
111 -svg.line-chart {  
112 - width: 100%;  
113 - height: 100%;  
114 - position: absolute;  
115 - left: 0;  
116 -}  
117 -  
118 -svg.line-chart circle.station_circle {  
119 - fill: #5e96d2;  
120 - r: 5.5;  
121 - stroke: rgb(253, 253, 253);  
122 - stroke-width: 3;  
123 - Pointer-events: none;  
124 -}  
125 -  
126 -svg.line-chart circle.station_circle.down {  
127 - fill: #c92121;  
128 -}  
129 -  
130 -svg.line-chart path.station_link {  
131 - stroke-width: 3.5px;  
132 - stroke: #5E96D2;  
133 - Pointer-events: none;  
134 -}  
135 -  
136 -svg.line-chart path.station_link.down {  
137 - stroke: #c92121;  
138 -}  
139 -  
140 -svg.line-chart path.station_link.down.loop_line {  
141 - stroke-dasharray: 4, 3;  
142 - stroke-width: 1px;  
143 -}  
144 -  
145 -svg.line-chart text.station_text {  
146 - writing-mode: tb;  
147 - fill: #3e3e3e;  
148 - letter-spacing: -.2px;  
149 - text-shadow: 0 0 2px #dadada;  
150 - Pointer-events: none;  
151 -}  
152 -  
153 -svg.line-chart text.station_text.up {  
154 - fill: #4556b6;  
155 -}  
156 -  
157 -svg.line-chart text.station_text.down {  
158 - fill: #c94f21;  
159 -}  
160 -  
161 -svg.line-chart g.item:first-child > text {  
162 - stroke: #6f6e6e;  
163 - fill: none;  
164 -}  
165 -  
166 -svg.line-chart g.item:nth-last-child(3) > text {  
167 - stroke: #6f6e6e;  
168 - fill: none;  
169 -}  
170 -  
171 -svg.line-chart g.item:first-child > text.up,  
172 -svg.line-chart g.item:nth-last-child(3) > text.up {  
173 - stroke: #4556b6;  
174 -}  
175 -  
176 -svg.line-chart g.item:first-child > text.down,  
177 -svg.line-chart g.item:nth-last-child(3) > text.down {  
178 - stroke: #c94f21;  
179 -}  
180 -  
181 -svg.line-chart g.gps-wrap > rect {  
182 - width: 30px;  
183 - height: 15px;  
184 - /* fill: #fff; */  
185 - rx: 2px;  
186 - cursor: pointer;  
187 -}  
188 -  
189 -svg.line-chart g.gps-wrap > rect[updown="0"] {  
190 - stroke: rgb(62, 80, 179);  
191 - fill: rgb(62, 80, 179);  
192 -}  
193 -  
194 -svg.line-chart g.gps-wrap > rect[updown="1"] {  
195 - stroke: #c94f21;  
196 - fill: #c94f21;  
197 -}  
198 -  
199 -svg.line-chart g.gps-wrap > rect.hover {  
200 - stroke-width: 2;  
201 -}  
202 -  
203 -svg.line-chart g.gps-wrap > text {  
204 - font-size: 12px;  
205 - transform: translate(0, 12px);  
206 - pointer-events: none;  
207 -}  
208 -  
209 -svg.line-chart g.gps-wrap > text[updown="0"] {  
210 - fill: #fff;  
211 -}  
212 -  
213 -svg.line-chart g.gps-wrap > text[updown="1"] {  
214 - fill: #fff;  
215 -}  
216 -  
217 -svg.line-chart g.gps-wrap > rect.abnormal[updown="0"],  
218 -svg.line-chart g.gps-wrap > rect.abnormal[updown="1"] {  
219 - width: 40px;  
220 - fill: yellow;  
221 - stroke: yellow;  
222 -}  
223 -  
224 -svg.line-chart g.gps-wrap > text.abnormal[updown="0"],  
225 -svg.line-chart g.gps-wrap > text.abnormal[updown="1"] {  
226 - fill: black;  
227 -}  
228 -  
229 -svg.line-chart .merge_hide {  
230 - display: none !important;  
231 -}  
232 -  
233 -svg.line-chart g.merge-item rect {  
234 - width: 22px;  
235 - height: 22px;  
236 - rx: 15px;  
237 - fill: #19a53a;  
238 - cursor: pointer;  
239 - stroke: #19a53a;  
240 - stroke-dasharray: 1, 2;  
241 - stroke-width: 3px;  
242 -}  
243 -  
244 -svg.line-chart g.merge-item text {  
245 - fill: #fff;  
246 - pointer-events: none;  
247 -}  
248 -  
249 -.qtip-multi-gps {  
250 - max-width: 720px !important;  
251 -}  
252 -  
253 -.qtip-bootstrap.qtip-multi-gps .qtip-content {  
254 - padding: 0;  
255 -}  
256 -  
257 -.tooltip {  
258 - position: relative;  
259 - padding-bottom: 160px;  
260 - width: 220px;  
261 -}  
262 -  
263 -.multi-tooltip-wrap {  
264 - width: 100%;  
265 - max-height: 350px;  
266 - overflow: auto;  
267 -}  
268 -  
269 -.tip_map_wrap.multi {  
270 - width: 100%;  
271 - height: 130px;  
272 -}  
273 -  
274 -.tooltip.multi-tooltip {  
275 - width: 160px;  
276 - display: inline-block;  
277 - padding: 10px 0 10px 15px;  
278 - border-right: 1px solid #eeeeee;  
279 - border-bottom: 1px solid #eeeeee;  
280 -}  
281 -  
282 -.tooltip hr {  
283 - border-top: 1px solid #eeeeee;  
284 - width: calc(100% + 30px);  
285 - margin: 7px 0 11px -15px;  
286 -}  
287 -  
288 -.tooltip.multi-tooltip hr {  
289 - width: calc(100% + 16px);  
290 -}  
291 -  
292 -.tooltip .tooltip-container {  
293 - padding: 1px;  
294 -}  
295 -  
296 -.tooltip .tooltip-container div, .tooltip .tooltip-container div a {  
297 - margin: 7px 1px;  
298 - font-size: 13px;  
299 - color: rgb(76, 76, 76);  
300 -}  
301 -  
302 -.tooltip .tooltip-container div.title {  
303 - margin: 8px 1px 12px;  
304 -}  
305 -  
306 -.tooltip .tooltip-container .title a {  
307 - font-size: 18px;  
308 - font-family: 微软雅黑;  
309 -}  
310 -  
311 -.tooltip span.field {  
312 - color: #7d7d7b;  
313 - margin-right: 5px;  
314 -}  
315 -  
316 -.tooltip .tip_map_wrap {  
317 - position: absolute;  
318 - bottom: -16px;  
319 - left: -15px;  
320 - width: calc(100% + 28px);  
321 - background: #fff;  
322 - height: 165px;  
323 - border-radius: 0 0 5px 5px;  
324 - border-top: 1px solid #e6e4e4;  
325 -}  
326 -  
327 -canvas.crosshair-layer {  
328 - position: absolute;  
329 - width: 100%;  
330 - height: 100%;  
331 - background: rgba(255, 255, 255, 0.33);  
332 - left: 0;  
333 -}  
334 -  
335 -li.map-panel {  
336 - height: 100%;  
337 - position: relative;  
338 -}  
339 -  
340 -.main-container .load-panel {  
341 - display: block;  
342 - color: #999797;  
343 -}  
344 -  
345 -.uk-panel-box-danger {  
346 - background-color: #fff1f0;  
347 - /*color: #d85030;*/  
348 - border-color: rgba(216, 80, 48, .3);  
349 -}  
350 -  
351 -/*.uk-panel-box-danger .uk-panel-title {  
352 - color: #d85030;  
353 -}*/  
354 -  
355 -.uk-badge-default {  
356 - background-color: #a09b9c;  
357 - background-image: -webkit-linear-gradient(top, #9a9898, #8c8687);  
358 - background-image: linear-gradient(to bottom, #9a9898, #8c8687);  
359 -}  
360 -  
361 -.ct-bottom-drawer {  
362 - width: 100%;  
363 - background: rgb(255, 255, 255);  
364 - position: fixed;  
365 - bottom: 0;  
366 - box-shadow: 0 0 10px rgba(0, 0, 0, .3);  
367 - transition: all .3s ease;  
368 - height: 0;  
369 -}  
370 -  
371 -.ct-bottom-drawer.open {  
372 - height: 320px;  
373 -}  
374 -  
375 -.ct-bottom-drawer a.ct-bottom-drawer-close {  
376 - position: absolute;  
377 - right: 10px;  
378 - top: 10px;  
379 - color: #c3c3c3;  
380 - width: 20px;  
381 - line-height: 20px;  
382 - background: #fff;  
383 - text-align: center;  
384 - z-index: 99;  
385 -}  
386 -  
387 -.ct-bottom-drawer a.ct-bottom-drawer-close:hover {  
388 - text-decoration: none;  
389 - color: grey;  
390 -}  
391 -  
392 -.ct-bottom-drawer a.ct-bottom-drawer-close:after {  
393 - display: block;  
394 - content: "\f00d";  
395 - font-family: FontAwesome;  
396 -}  
397 -  
398 -.ct-bottom-drawer-body {  
399 - width: 100%;  
400 - height: 100%;  
401 -}  
402 -  
403 -#station_route_spacing_chart_drawer .svg_wrap {  
404 - width: 80%;  
405 - height: 100%;  
406 - display: inline-block;  
407 - font-size: 14px;  
408 - overflow: hidden;  
409 - position: relative;  
410 -}  
411 -  
412 -#station_route_spacing_chart_drawer .drawer_right_map {  
413 - width: 20%;  
414 - height: 100%;  
415 - display: inline-block;  
416 -}  
417 -  
418 -#station_route_spacing_chart_drawer .svg_cont_body {  
419 - height: 100%;  
420 - position: absolute;  
421 - top: 0;  
422 - left: 0;  
423 -}  
424 -  
425 -#station_route_spacing_chart_drawer svg {  
426 - width: 100%;  
427 - height: 100%;  
428 -}  
429 -  
430 -#station_route_spacing_chart_drawer svg g._item rect {  
431 - stroke: rgb(62, 80, 179);  
432 - fill: rgb(62, 80, 179);  
433 - width: 30px;  
434 - height: 124px;  
435 - rx: 5;  
436 - transform: translate(-15px);  
437 -}  
438 -  
439 -#station_route_spacing_chart_drawer svg g._item text {  
440 - writing-mode: tb;  
441 - transform: translate(0, 9px);  
442 - fill: #fff;  
443 -}  
444 -  
445 -#station_route_spacing_chart_drawer svg g._item path {  
446 - stroke-width: 5.4px;  
447 - stroke: #3e50b3;  
448 -}  
449 -  
450 -#station_route_spacing_chart_drawer svg g._item circle {  
451 - r: 3px;  
452 - fill: #ffffff;  
453 -}  
454 -  
455 -#station_route_spacing_chart_drawer svg g._item path.arc_path {  
456 - stroke-width: 1.3px;  
457 - stroke: #3e50b3;  
458 - stroke-dasharray: 1000;  
459 - stroke-dashoffset: 1000;  
460 - fill: none;  
461 -  
462 - animation: dash .9s;  
463 - webkit-amimation: dash .9s;  
464 - animation-fill-mode: forwards;  
465 - -webkit-animation-fill-mode: forwards;  
466 -}  
467 -  
468 -@keyframes dash {  
469 - to {  
470 - stroke-dashoffset: 0;  
471 - stroke-dasharray: 4, 4;  
472 - }  
473 -}  
474 -  
475 -@-webkit-keyframes dash {  
476 - to {  
477 - stroke-dashoffset: 0;  
478 - stroke-dasharray: 4, 4;  
479 - }  
480 -}  
481 -  
482 -#station_route_spacing_chart_drawer svg g._item text.distance_text {  
483 - writing-mode: horizontal-tb;  
484 - fill: #3e50b3;  
485 -}  
486 -  
487 -#station_route_spacing_chart_drawer svg g._item rect.distance_rect {  
488 - height: 20px;  
489 - width: 40px;  
490 - fill: #fff !important;  
491 - stroke-width: 0;  
492 -}  
493 -  
494 -#station_route_spacing_chart_drawer .tl_desc_text {  
495 - position: absolute;  
496 - top: 5px;  
497 - left: 5px;  
498 - font-size: 12px;  
499 - color: #525050;  
500 - font-family: 微软雅黑;  
501 -}  
502 -  
503 -#station_route_spacing_chart_drawer svg g._item:first-child circle {  
504 - fill: #3e50b3;  
505 - r: 6px;  
506 -}  
507 -  
508 -#station_route_spacing_chart_drawer svg g._item:last-child circle {  
509 - fill: #3e50b3;  
510 - r: 6px;  
511 -}  
512 -  
513 -/* 下行 */  
514 -#station_route_spacing_chart_drawer svg.down g._item rect {  
515 - stroke: #dd3829;  
516 - fill: #dd3829;  
517 -}  
518 -  
519 -#station_route_spacing_chart_drawer svg.down g._item path {  
520 - stroke: #dd3829;  
521 -}  
522 -  
523 -#station_route_spacing_chart_drawer svg.down g._item:first-child circle {  
524 - fill: #dd3829;  
525 -}  
526 -  
527 -#station_route_spacing_chart_drawer svg.down g._item text.distance_text {  
528 - fill: #dd3829;  
529 -}  
530 -  
531 -#station_route_spacing_chart_drawer svg.down g._item path.arc_path {  
532 - stroke: #dd3829;  
533 -}  
534 -  
535 -#station_route_spacing_chart_drawer svg.down g._item:last-child circle {  
536 - fill: #dd3829;  
537 -}  
538 -  
539 -.svg-edit-panel-wrap {  
540 - width: 48%;  
541 - border: 1px solid #e1d3d3;  
542 - padding: 12px 0 0 0;  
543 - border-radius: 4px;  
544 - position: relative;  
545 - display: inline-block;  
546 - vertical-align: top;  
547 - height: 440px;  
548 -}  
549 -  
550 -.svg-edit-panel-wrap .title-badge {  
551 - position: absolute;  
552 - top: -10px;  
553 - left: 7px;  
554 - font-size: 13px;  
555 - background: #fff;  
556 - padding: 0 3px;  
557 - color: #888888;  
558 -}  
559 -  
560 -.svg-edit-panel-wrap .rename-tools {  
561 - height: 21px;  
562 - padding: 0 0 0 9px;  
563 -}  
564 -  
565 -.svg-edit-panel-wrap .rename-item-panel {  
566 - border-bottom: 1px solid #ede5e5;  
567 - padding: 4px;  
568 -}  
569 -  
570 -.svg-edit-panel-wrap .rename-item-panel select {  
571 - width: 150px;  
572 -}  
573 -  
574 -.svg-edit-panel-wrap .rename-item-panel input {  
575 - margin-left: 7px;  
576 -}  
577 -  
578 -.svg-edit-panel-wrap .rename-item-panel input[type=checkbox] {  
579 - margin-top: 2px;  
580 - margin-right: 4px;  
581 -}  
582 -  
583 -.svg-edit-panel-wrap .rename-item-panel.active {  
584 - background: #65c9f8;  
585 - box-shadow: 0px 3px 7px 0 rgba(101, 201, 248, 0.48), 0px 1px 4px 0 rgba(101, 201, 248, 0.32);  
586 -}  
587 -  
588 -.svg-edit-panel-wrap .rename-item-panel.active select,  
589 -.svg-edit-panel-wrap .rename-item-panel.active input {  
590 - background: #65c9f8;  
591 - color: #fff;  
592 -}  
593 -  
594 -.svg-edit-panel-wrap .rename-item-panel.active i {  
595 - color: #e4f6ff;  
596 -}  
597 -  
598 -.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox] {  
599 - border: none;  
600 -}  
601 -  
602 -.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox]:before {  
603 - color: #fff;  
604 -}  
605 -  
606 -.svg-edit-panel-wrap .rename-tools a {  
607 - font-size: 14px;  
608 - padding: 5px;  
609 -}  
610 -  
611 -.svg-edit-panel-wrap .rename-tools a:hover {  
612 - background: #e8edef;  
613 - border-radius: 5px;  
614 -}  
615 -  
616 -.station-list {  
617 - width: 190px;  
618 - padding: 2px 7px;  
619 - height: 100%;  
620 - overflow: auto;  
621 - display: inline-block;  
622 -}  
623 -  
624 -.station-list .station-item {  
625 - padding: 3px 0;  
626 - margin: 5px 0;  
627 - border-radius: 3px;  
628 - font-size: 13px;  
629 - text-indent: 7px;  
630 - cursor: pointer;  
631 - white-space: nowrap;  
632 - overflow: hidden;  
633 - text-overflow: ellipsis;  
634 -}  
635 -  
636 -.station-list .station-item.disable,  
637 -.station-list .station-item.disable:hover {  
638 - background: #d5c9c9 !important;  
639 - color: #686565 !important;  
640 -}  
641 -  
642 -.station-list.up .station-item {  
643 - background: #5364c3;  
644 - color: white;  
645 -}  
646 -  
647 -.station-list.up .station-item:hover {  
648 - box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);  
649 - background: #4556b6;  
650 -}  
651 -  
652 -.station-list.down .station-item {  
653 - background: #f95858;  
654 - color: white;  
655 -}  
656 -  
657 -.station-list.down .station-item:hover {  
658 - box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);  
659 - background: #e95151;  
660 -}  
661 -  
662 -.modal-dotted-hr {  
663 - height: 1px;  
664 - border: none;  
665 - border-top: 1px dashed #d1d1d1;  
666 - width: calc(100% + 40px);  
667 - margin-left: -20px;  
668 -}  
669 -  
670 -#add-sub-task-range_turn-modal .main-sch-panel {  
671 - height: 60px;  
672 - border: 1px solid #dddddd;  
673 - border-radius: 5px;  
674 - position: relative;  
675 - padding: 20px 0 0 8px;  
676 -}  
677 -  
678 -#add-sub-task-range_turn-modal .main-sch-panel:before {  
679 - content: '主任务';  
680 - position: absolute;  
681 - top: -10px;  
682 - left: 10px;  
683 - background: #fff;  
684 - padding: 0 4px;  
685 - font-size: 12px;  
686 - color: #adadad;  
687 -}  
688 -  
689 -.ct_row {  
690 - font-size: 0;  
691 -}  
692 -  
693 -.ct_row .ct_cell {  
694 - display: inline-block;  
695 - font-size: 13px;  
696 - white-space: nowrap;  
697 - overflow: hidden;  
698 - text-overflow: ellipsis;  
699 -}  
700 -  
701 -.ct_row .ct_cell label {  
702 - color: #979393;  
703 - margin-right: 3px;  
704 -}  
705 -  
706 -.ct_row .ct_cell.c_1_3 {  
707 - width: 33%;  
708 -}  
709 -  
710 -#schedule-lp_change-modal .sch-list dl dd {  
711 - font-size: 14px;  
712 -}  
713 -  
714 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(1) {  
715 - width: 5%;  
716 - border-left: 1px solid #dedede;  
717 -}  
718 -  
719 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(2) {  
720 - width: 22%;  
721 -}  
722 -  
723 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(3) {  
724 - width: 17%;  
725 -}  
726 -  
727 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) {  
728 - width: 10%;  
729 - }  
730 -  
731 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) {  
732 - width: 21%;  
733 -}  
734 -  
735 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(6) {  
736 - width: 10%;  
737 -}  
738 -  
739 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(7) {  
740 - width: 14%;  
741 -}  
742 -  
743 -  
744 -  
745 -  
746 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) {  
747 - width: 5%;  
748 - border-left: 1px solid #dedede;  
749 -}  
750 -  
751 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(2) {  
752 - width: 14%;  
753 -}  
754 -  
755 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(3) {  
756 - width: 10%;  
757 -}  
758 -  
759 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(4) {  
760 - width: 21%;  
761 -}  
762 -  
763 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(5) {  
764 - width: 10%;  
765 -}  
766 -  
767 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(6) {  
768 - width: 17%;  
769 -}  
770 -  
771 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(7) {  
772 - width: 22%;  
773 -}  
774 -  
775 -#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active {  
776 - background: #b9d2ff;  
777 -}  
778 -  
779 -#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active dd {  
780 - border-top: 1px solid #b9d2ff;  
781 -}  
782 -  
783 -#schedule-lp_change-modal .ct_table.sch-list dl.active input[type=checkbox] {  
784 - border: none;  
785 -}  
786 -  
787 -#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active {  
788 - background: #ffe2b9;  
789 -}  
790 -  
791 -#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active dd {  
792 - border-top: 1px solid #ffe2b9;  
793 -}  
794 -  
795 -#cache_data_manage-modal .uk-table td{  
796 - vertical-align: bottom;  
797 -}  
798 -  
799 -#cache_data_manage-modal .uk-table td,  
800 -#cache_data_manage-modal .uk-table th{  
801 - padding: 8px 8px 6px;  
802 -}  
803 -  
804 -  
805 -.ps-help-panel{  
806 - color: grey;  
807 - padding: 5px 2px;  
808 -}  
809 -  
810 -.ps-help-panel small{  
811 - display: block;  
812 -}  
813 -  
814 -  
815 -svg text.offline{  
816 - fill: #6f6a6a !important;  
817 -}  
818 -  
819 -svg rect.offline{  
820 - stroke: #dbdada !important;  
821 - fill: #dbdada !important;  
822 -}  
823 -  
824 -.tooltip .tooltip-container .title a>.abnormal-text{  
825 - font-size: 14px;  
826 - color: #ff5e5e;  
827 - font-weight: 600;  
828 -}  
829 -  
830 -#addChildTaskBtn{  
831 - margin-left: 5px;  
832 - color: #36729b;  
833 - padding: 1px 5px 1px 6px;  
834 -}  
835 -  
836 -#addChildTaskBtn:hover{  
837 - box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.2), 0px 3px 8px 0 rgba(0, 0, 0, 0.19);  
838 -}  
839 -  
840 -.edit-icon{  
841 - color: #aba9a9;  
842 - font-size: 12px;  
843 - margin-left: 5px;  
844 - display: none;  
845 -}  
846 -  
847 -.operation-real-text{  
848 - position: absolute;  
849 - top: 9px;  
850 - width: 100%;  
851 - left: 0;  
852 - text-align: center;  
853 - pointer-events: none;  
854 -}  
855 -  
856 -.operation-real-text span{  
857 - padding: 15px;  
858 - background: #ff4f4f;  
859 - color: white;  
860 - box-shadow: 0px 4px 6px 0 rgba(0, 0, 0, 0.2), 0px 4px 10px 0 rgba(0, 0, 0, 0.19);  
861 - border-radius: 1px 1px 4px 4px;  
862 -}  
863 -  
864 -#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-label{  
865 - width: 120px;  
866 -}  
867 -  
868 -#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-controls{  
869 - margin-left: 125px;  
870 -}  
871 -  
872 -#oil_station-modal .uk-form-icon>[class*=uk-icon-]{  
873 - right: 23px;  
874 -}  
875 -  
876 -#oil_station-modal .uk-form-icon:not(.uk-form-icon-flip)>input{  
877 - padding-left: 10px !important;  
878 -}  
879 -  
880 -#oil_station-modal .uk-form-icon{  
881 - width: calc(100% - 145px);  
882 -}  
883 -  
884 -#oil_station-modal .uk-icon-mile:before{  
885 - content: '公里';  
886 -}  
887 -  
888 -#oil_station-modal .uk-icon-minute:before{  
889 - content: '分钟';  
890 -}  
891 -  
892 -option.oil_station_opt{  
893 - color: red;  
894 -}  
895 -  
896 -#oil_station-modal .uk-modal .uk-form.fv-form{  
897 - margin-bottom: 0 !important;  
898 -}  
899 -  
900 -#gb_wait_modal .uk-modal-spinner{  
901 - top: 25px;  
902 - -webkit-transform: translate(-50%,0);  
903 - transform: translate(-50%,0);  
904 -}  
905 -  
906 -#gb_wait_modal .wait-modal-text{  
907 - text-align: center;  
908 - margin-top: 35px;  
909 - font-size: 15px;  
910 - color: #635e5e;  
911 -}  
912 -  
913 -.park-and-station-wrap{  
914 - margin-top: 9px;  
915 - border: 1px solid #3dce69;  
916 - width: 580px;  
917 - padding: 12px;  
918 - border-radius: 5px;  
919 -}  
920 -.park-and-station-wrap select{  
921 - width: auto !important;  
922 -}  
923 -  
924 -/** 安全驾驶相关css */  
925 -.safe_driv_pop_wrap{  
926 - position: absolute;  
927 - right: 12px;  
928 - bottom: 12px;  
929 - z-index: 99;  
930 -}  
931 -  
932 -.safe_driv_pop{  
933 - background: #d44b4b;  
934 - font-size: 15px;  
935 - padding: 9px 10px 0;  
936 - border: 1px solid #f4f0f0;  
937 - border-radius: 5px;  
938 - cursor: pointer;  
939 - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);  
940 - transition: all .03s;  
941 - color: #f2f2f2;  
942 -}  
943 -  
944 -.safe_driv_pop:hover{  
945 - background: #bc2a2a;  
946 -}  
947 -  
948 -.safe_driv_pop .title{  
949 -}  
950 -  
951 -.safe_driv_pop .desc{  
952 - display: block;  
953 - font-size: 12px;  
954 - color: #ff9d9d;  
955 - text-align: right;  
956 - margin-right: 5px;  
957 -}  
958 -  
959 -/** 嵌入表单modal滚动条样式 */  
960 -#formFragmentModal::-webkit-scrollbar {  
961 - width: 10px;  
962 - background-color: #F5F5F5;  
963 -}  
964 -#formFragmentModal::-webkit-scrollbar-thumb {  
965 - background-color: #000000;  
966 -}  
967 -#formFragmentModal::-webkit-scrollbar-track {  
968 - border: 0;  
969 - background-color: #F5F5F5;  
970 - border-radius: 0;  
971 -}  
972 -  
973 -#formFragmentModal::-webkit-scrollbar-thumb{  
974 - border: 5px solid rgb(226, 122, 122);  
975 -}  
976 -  
977 -#schedule-addsch_oil-modal select{  
978 - height: 30px !important;  
979 -}  
980 -  
981 -#oil_station-modal .input_clear_icon{  
982 - position: absolute;  
983 - top: 6px;  
984 - right: 108px;  
985 - color: #f75757;  
986 - height: 18px;  
987 - line-height: 18px;  
988 - border-radius: 7px;  
989 - font-size: 16px;  
990 - display: none;  
991 - cursor: pointer;  
992 -}  
993 -  
994 -#oil_station-modal .input_clear_icon:hover{  
995 - color: #de2020;  
996 -}  
997 -  
998 -#oil_station-modal .input_clear_icon:before{  
999 - display: block;  
1000 - font-family: FontAwesome;  
1001 - content: "\f057";  
1002 -}  
1003 -  
1004 -#oil_station-modal input.readonly{  
1005 - background: #dddddd;  
1006 -}  
1007 -  
1008 -  
1009 -.ct_tags{  
1010 - margin-bottom: 12px;  
1011 -}  
1012 -  
1013 -.ct_tags>span{  
1014 - padding: 3px 7px;  
1015 - background: #e8e8e8;  
1016 - color: #3a3939;  
1017 - cursor: pointer;  
1018 - margin-right: 5px;  
1019 -}  
1020 -  
1021 -.ct_tags>span.active{  
1022 - background: #62a9e1;  
1023 - color: white;  
1024 - box-shadow: 0 0 4px rgba(0, 0, 0, 0.35);  
1025 -}  
1026 -  
1027 -.ct_tags>span.active:before{  
1028 - content: "\f00c";  
1029 - font-family: FontAwesome;  
1030 - margin-right: 2px;  
1031 - font-size: 13px;  
1032 -}  
1033 -  
1034 -.ct_tags>span:hover{  
1035 - box-shadow: 0 0 4px rgba(0,0,0,.3);  
1036 -}  
1037 -  
1038 -span.late-badge {  
1039 - height: 20px;  
1040 - line-height: 20px;  
1041 - margin-top: 8px;  
1042 - color: grey;  
1043 - margin-left: 2px;  
1044 -}  
1045 -  
1046 -dl.intimity span.late-badge{  
1047 - color: #fbfbfb;  
1048 -}  
1049 -  
1050 -/** badge tooltip */  
1051 -.uk-badge.c_task:hover,  
1052 -.uk-badge.sch_region:hover{  
1053 - background-image: none;  
1054 - background: #38b3e1;  
1055 - border: 1px solid #7ebad1;  
1056 -}  
1057 -  
1058 -.uk-badge.out:hover{  
1059 - background-image: none;  
1060 - background: #8fc650;  
1061 - border: 1px solid #949f86;  
1062 -}  
1063 -  
1064 -.uk-badge.in:hover{  
1065 - background-image: none;  
1066 - background: #fabc64;  
1067 - border: 1px solid #a68c67;  
1068 -}  
1069 -  
1070 -.qtip.sch-badge-tip{  
1071 - max-width: 500px;  
1072 -}  
1073 -  
1074 -.tip_task_list {  
1075 - width: 460px;  
1076 - margin-bottom: -10px;  
1077 -}  
1078 -.tip_task_list dl{  
1079 - font-size: 0;  
1080 - border-bottom: 1px solid #e6e6e6;  
1081 - margin: 0;  
1082 -}  
1083 -.tip_task_list dl:last-child{  
1084 - border-bottom: none;  
1085 -}  
1086 -.tip_task_list dl dt,  
1087 -.tip_task_list dl dd{  
1088 - display: inline-block;  
1089 - font-size: 13px;  
1090 - white-space: nowrap;  
1091 - overflow: hidden;  
1092 - text-overflow: ellipsis;  
1093 - height: 24px;  
1094 - line-height: 24px;  
1095 -}  
1096 -  
1097 -.tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1){  
1098 - width: 19%;  
1099 -}  
1100 -.tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2){  
1101 - width: 12%;  
1102 -}  
1103 -.tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3){  
1104 - width: 28%;  
1105 -}  
1106 -.tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4){  
1107 - width: 28%;  
1108 -}  
1109 -.tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5){  
1110 - width: 13%;  
1111 -}  
1112 -  
1113 -.tip_task_list dl.service{  
1114 - color: blue;  
1115 -}  
1116 -.tip_task_list dl.service.destroy{  
1117 - color: red;  
1118 -}  
1119 -  
1120 -.tip_task_list dl.service.temp_add{  
1121 - color: #9C27B0;  
1122 -}  
1123 -  
1124 -.tip_task_list dl span{  
1125 - margin: 0;  
1126 - width: auto;  
1127 -}  
1128 -  
1129 -ul.left_tabs_lg{  
1130 - border: 1px solid #efeded;  
1131 - height: 100%;  
1132 - background: #fafafa;  
1133 -}  
1134 -  
1135 -ul.left_tabs_lg li{  
1136 - line-height: 40px;  
1137 - font-size: 15px;  
1138 -}  
1139 -  
1140 -#schedule-addsch-modal .uk-modal-footer{  
1141 - border-top: none;  
1142 - background: none;  
1143 -}  
1144 -  
1145 -.ct_line_lp_badge{  
1146 - float: left;  
1147 - margin-top: 6px;  
1148 - background: #e0e0e0;  
1149 - padding: 2px 7px;  
1150 - border-radius: 3px;  
1151 -}  
1152 -  
1153 -.uk-badge.sch_ldks{  
1154 - background: #8c8c8c;  
1155 - background-image: linear-gradient(to bottom,#a7a7a7,#8c8c8c);  
1156 -}  
1157 -  
1158 -.ct_layer_modal{  
1159 - background: #e5e5e5;  
1160 - height: 100%;  
1161 - width: 100%;  
1162 - overflow: auto;  
1163 -}  
1164 -  
1165 -.layui-layer-setwin{  
1166 -  
1167 -}  
1168 -  
1169 -.device_config_table dl dt:nth-of-type(1), .device_config_table dl dd:nth-of-type(1){  
1170 - width: 7%;  
1171 - text-indent: 10px;  
1172 -}  
1173 -.device_config_table dl dt:nth-of-type(2), .device_config_table dl dd:nth-of-type(2){  
1174 - width: 7%;  
1175 -}  
1176 -.device_config_table dl dt:nth-of-type(3), .device_config_table dl dd:nth-of-type(3){  
1177 - width: 8%;  
1178 -}  
1179 -.device_config_table dl dt:nth-of-type(4), .device_config_table dl dd:nth-of-type(4){  
1180 - width: 5%;  
1181 -}  
1182 -.device_config_table dl dt:nth-of-type(5), .device_config_table dl dd:nth-of-type(5){  
1183 - width: 4%;  
1184 -}  
1185 -.device_config_table dl dt:nth-of-type(6), .device_config_table dl dd:nth-of-type(6){  
1186 - width: 4%;  
1187 -}  
1188 -.device_config_table dl dt:nth-of-type(7), .device_config_table dl dd:nth-of-type(7){  
1189 - width: 4%;  
1190 -}  
1191 -.device_config_table dl dt:nth-of-type(8), .device_config_table dl dd:nth-of-type(8){  
1192 - width: 5%;  
1193 -}  
1194 -.device_config_table dl dt:nth-of-type(9), .device_config_table dl dd:nth-of-type(9){  
1195 - width: 5%;  
1196 -}  
1197 -.device_config_table dl dt:nth-of-type(10), .device_config_table dl dd:nth-of-type(10){  
1198 - width: 8%;  
1199 -}  
1200 -.device_config_table dl dt:nth-of-type(11), .device_config_table dl dd:nth-of-type(11){  
1201 - width: 5%;  
1202 -}  
1203 -.device_config_table dl dt:nth-of-type(12), .device_config_table dl dd:nth-of-type(12){  
1204 - width: 5%;  
1205 -}  
1206 -.device_config_table dl dt:nth-of-type(13), .device_config_table dl dd:nth-of-type(13){  
1207 - width: 4%;  
1208 -}  
1209 -.device_config_table dl dt:nth-of-type(14), .device_config_table dl dd:nth-of-type(14){  
1210 - width: 4%;  
1211 -}  
1212 -.device_config_table dl dt:nth-of-type(15), .device_config_table dl dd:nth-of-type(15){  
1213 - width: 4%;  
1214 -}  
1215 -.device_config_table dl dt:nth-of-type(16), .device_config_table dl dd:nth-of-type(16){  
1216 - width: 3%;  
1217 -}  
1218 -.device_config_table dl dt:nth-of-type(17), .device_config_table dl dd:nth-of-type(17){  
1219 - width: 4%;  
1220 -}  
1221 -.device_config_table dl dt:nth-of-type(18), .device_config_table dl dd:nth-of-type(18){  
1222 - width: 13%;  
1223 -}  
1224 -  
1225 -.uk-tooltip{  
1226 - z-index: 29999999 !important;  
1227 -}  
1228 -  
1229 -.device_config_table.ct_table dl dd,  
1230 -.device_config_table.ct_table dl dt{  
1231 - border-right: 1px solid #dedede !important;  
1232 -}  
1233 -  
1234 -.device_configs_manager .search_form{  
1235 - text-indent: 12px;  
1236 - margin-bottom: 0;  
1237 - padding: 18px 5px;  
1238 -}  
1239 -  
1240 -.sub_task_form_v2{  
1241 - background: #f9f9f9;  
1242 - padding: 12px 15px;  
1243 - border-radius: 5px 0 5px 5px;  
1244 - border: 1px solid #dfdfdf;  
1245 - position: relative;  
1246 - margin-bottom: 20px;  
1247 -}  
1248 -  
1249 -.task_form_close_icon{  
1250 - background: #f9f9f9;  
1251 - padding: 0px 4px;  
1252 - position: absolute;  
1253 - top: -8px;  
1254 - right: -8px;  
1255 - color: #898989;  
1256 - font-size: 15px;  
1257 - border: 1px solid #dfdfdf;  
1258 - border-radius: 100%;  
1259 - border-left: none;  
1260 - border-bottom: none;  
1261 - transition: all .03s;  
1262 -}  
1263 -  
1264 -.task_form_close_icon:hover{  
1265 - border: 1px solid #ff1515;  
1266 - border-left: none;  
1267 - border-bottom: none;  
1268 - color: #e03e3e;  
1269 -}  
1270 -  
1271 -.sub_task_form_v2:hover::after{  
1272 - color: #5f5b5b;  
1273 -}  
1274 -  
1275 -.sub_task_form_v2.uk-form-horizontal .uk-form-label{  
1276 - width: 80px;  
1277 -}  
1278 -  
1279 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls{  
1280 - margin-left: 85px;  
1281 -}  
1282 -  
1283 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text],  
1284 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time],  
1285 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls select{  
1286 - width: 100%;  
1287 -}  
1288 -  
1289 -#add-sub-task-main-modal .uk-modal-footer{  
1290 - background: none;  
1291 - border-top: none;  
1292 -}  
1293 -  
1294 -#add-sub-task-main-modal .uk-grid+.uk-grid{  
1295 - margin-top: 12px;  
1296 -}  
1297 -  
1298 -#add-sub-task-main-modal .plus_icon_span{  
1299 - font-size: 26px;  
1300 - color: #b2b2b2;  
1301 - padding: 10px 64px;  
1302 - display: inline-block;  
1303 - border: 1px dashed grey;  
1304 - margin: 15px 0;  
1305 - border-radius: 5px;  
1306 - cursor: pointer;  
1307 -}  
1308 -  
1309 -#add-sub-task-main-modal .uk-animation-fade{  
1310 - animation-duration: .3s;  
1311 -}  
1312 -  
1313 -#add-sub-task-main-modal .forms{  
1314 - max-height: 488px;  
1315 - overflow-y: auto;  
1316 - overflow-x: hidden;  
1317 - padding: 8px 8px 0 0;  
1318 -}  
1319 -  
1320 -.add_custom_wrap .forms .sub_task_form_v2:last-child{  
1321 - margin-bottom: 0;  
1322 -}  
1323 -  
1324 -.sub_task_form_v2.destroy_form{  
1325 - background-color: #fff5f4 !important;  
1326 -}  
1327 -  
1328 -.uk-form>.half_change_car_box{  
1329 - margin: -10px 0 15px;  
1330 - padding: 3px 5px;  
1331 - display: inline-block;  
1332 - border: 1px solid #dfdddd;  
1333 - color: #918f8f;  
1334 -}  
1335 -  
1336 -.half_change_car_box input[type=checkbox]{  
1337 - vertical-align: top;  
1338 -}  
1339 -  
1340 -.uk-form>.half_change_car_box.active{  
1341 - background: #4CAF50;  
1342 - color: #fff;  
1343 -}  
1344 -  
1345 -.uk-form>.half_change_car_box.active input[type=checkbox]{  
1346 - background: #4caf50;  
1347 - border-color: #4caf50;  
1348 -}  
1349 -  
1350 -.uk-form>.half_change_car_box.active input[type=checkbox]:before{  
1351 - color: #ffffff;  
1352 -}  
1353 -  
1354 -.sub_task_form_v2.change_car{  
1355 - z-index: 99;  
1356 -}  
1357 -  
1358 -.st_range_top_form{  
1359 - padding: 0 0 15px 5px;  
1360 - border: 1px solid #c4bb76;  
1361 - background: #e5e1c1;  
1362 - margin-bottom: 15px;  
1363 - box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19);  
1364 -}  
1365 -  
1366 -.st_range_top_form .uk-form-row{  
1367 - margin-top: 20px;  
1368 -}  
1369 -  
1370 -.uk-form-horizontal.st_range_top_form .uk-form-label{  
1371 - width: 80px;  
1372 -}  
1373 -  
1374 -.uk-form-horizontal.st_range_top_form .uk-form-controls{  
1375 - margin-left: 84px;  
1376 -}  
1377 -  
1378 -.uk-form-horizontal.st_range_top_form .uk-form-controls select{  
1379 - width: calc(100% - 2px);  
1380 -}  
1381 -  
1382 -.sub_task_form_v2.service_st_form{  
1383 - background: #f4faff;  
1384 -}  
1385 -  
1386 -.uk-modal .uk-form.fv-form.sub_task_form_v2{  
1387 - margin-bottom: 20px !important;  
1388 -}  
1389 -  
1390 -.sub_task_table_wrap .ct_table>.ct_table_body{  
1391 - border-bottom: none;  
1392 -}  
1393 -  
1394 -.err_panel{  
1395 - font-size: 12px;  
1396 - color: #7e7d7d;  
1397 - font-family: 微软雅黑;  
1398 - margin-top: 5px;  
1399 -}  
1400 -  
1401 -#schedule-lp_change-modal .ct_table dl{  
1402 - height: 35px;  
1403 -}  
1404 -  
1405 -#schedule-lp_change-modal .ct_table dl dd, #schedule-lp_change-modal .ct_table dl dt{  
1406 - line-height: 35px;  
1407 -}  
1408 -  
1409 -/*  
1410 -.sub_task_form_v2.repeat_main:before{  
1411 - content: '复';  
1412 - position: absolute;  
1413 - top: -10px;  
1414 - font-size: 12px;  
1415 - color: #2196F3;  
1416 - background: #ffffff;  
1417 - padding: 0 3px;  
1418 - font-weight: 600;  
1419 -}*/  
1420 -  
1421 -.sub_task_form_v2:before{  
1422 - position: absolute;  
1423 - top: -7px;  
1424 - font-size: 12px;  
1425 - padding: 0 3px;  
1426 - font-weight: 600;  
1427 - line-height: 14px;  
1428 -}  
1429 -  
1430 -.sub_task_form_v2.destroy_form:before{  
1431 - content: '烂班' !important;  
1432 - color: #f14235 !important;  
1433 - background: #ffffff !important;  
1434 -}  
1435 -  
1436 -.sub_task_form_v2.service_form:before{  
1437 - content: '营运';  
1438 - color: #2196F3;  
1439 - background: #ffffff;  
1440 -}  
1441 -  
1442 -.sub_task_form_v2.service_form.temp_service:before{  
1443 - content: '营运 (临加)';  
1444 - color: #9C27B0;  
1445 - background: #ffffff;  
1446 -}  
1447 -  
1448 -.sub_task_form_v2.service_form.temp_service {  
1449 - background: #faf0fd;  
1450 -}  
1451 -  
1452 -.sub_task_form_v2.empty_form:before{  
1453 - content: '空驶';  
1454 - color: #928f92;  
1455 - background: #ffffff;  
1456 -}  
1457 -  
1458 -.sub_task_form_v2.service_form{  
1459 - background: #f4faff;  
1460 -}  
1461 -  
1462 -/*.sub_task_form_v2.repeat_main.destroy_form:before{  
1463 - color: #F44336;  
1464 -}  
1465 -  
1466 -.sub_task_form_v2.repeat_main{  
1467 - background: #f4faff;  
1468 -}*/  
1469 -.footer_tools{  
1470 - position: absolute;  
1471 - left: 235px;  
1472 - bottom: 19px;  
1473 -}  
1474 -  
1475 -.footer_mileage_count{  
1476 - border: 1px solid #f2f2f2;  
1477 - padding: 5px;  
1478 - box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.2), 0px 2px 7px 0 rgba(0, 0, 0, 0.19);  
1479 - display: inline-block;  
1480 -}  
1481 -  
1482 -.footer_mileage_count>span{  
1483 - padding: 2px 5px;  
1484 -}  
1485 -  
1486 -.footer_mileage_count>span.service_sum{  
1487 - color: #2196F3;  
1488 -}  
1489 -  
1490 -.footer_mileage_count>span.empty_sum{  
1491 - color: #636363;  
1492 -}  
1493 -  
1494 -.footer_mileage_count>span.destroy_sum{  
1495 - color: #f5574b;  
1496 -}  
1497 -  
1498 -.station_to_park_link{  
1499 - display: inline-block;  
1500 - margin-left: 15px;  
1501 - vertical-align: bottom;  
1502 - font-size: 12px;  
1503 -}  
1504 -  
1505 -.station_to_park_link>a{  
1506 - color: #607D8B;  
1507 -}  
1508 -  
1509 -#station_to_park-modal.ct-form-modal form input[type=text],  
1510 -#station_to_park-modal.ct-form-modal form select{  
1511 - width: auto;  
1512 -}  
1513 -  
1514 -.s_2_park_form_wrap{  
1515 - background: #fafafa;  
1516 - border: 1px solid #e5e5e5;  
1517 - padding: 7px 16px;  
1518 - margin: 15px 0;  
1519 - position: relative;  
1520 -}  
1521 -  
1522 -.s_2_park_form_wrap .ct_close{  
1523 - position: absolute;  
1524 - top: -12px;  
1525 - padding: 0 4px;  
1526 - right: -8px;  
1527 - color: #939393;  
1528 - border: 1px solid #f7dfdf;  
1529 - border-radius: 25px;  
1530 - cursor: pointer;  
1531 -}  
1532 -  
1533 -.s_2_park_form_wrap .ct_close:hover{  
1534 - background: #e5e5e5;  
1535 - color: #fd6e6e;  
1536 -}  
1537 -  
1538 -.s_2_park_form_wrap label{  
1539 - color: #666;  
1540 - font-size: 13px;  
1541 -}  
1542 -  
1543 -#station_to_park-modal.ct-form-modal form input[readonly]{  
1544 - background: #fafafa;  
1545 -}  
1546 -  
1547 -.s_2_park_form_wrap .bottom_label{  
1548 - margin-top: 25px;  
1549 - display: block;  
1550 -}  
1551 -  
1552 -.s_2_park_form_wrap .bottom_label_2{  
1553 - margin-top: 4px;  
1554 - display: block;  
1555 -}  
1556 -  
1557 -.ct_describe{  
1558 - font-size: 12px;  
1559 - color: #909090;  
1560 - font-family: FontAwesome;  
1561 -}  
1562 -  
1563 -.ct_describe:before{  
1564 - content: "\f059";  
1565 - margin-right: 3px;  
1566 -}  
1567 -  
1568 -#add-sub-task-main-modal abbr{  
1569 - display: inline-block;  
1570 - font-size: 12px;  
1571 - margin-left: 25px;  
1572 - vertical-align: bottom;  
1573 - color: #929292;  
1574 -}  
1575 -  
1576 -#all-devices-modal .search-form input[type=text]{  
1577 - width: 100px;  
1578 -}  
1579 -  
1580 -#all-devices-modal .auto-refresh{  
1581 - vertical-align: middle;margin-left: 5px;color: grey;  
1582 -}  
1583 -  
1584 -#all-devices-modal .auto-refresh.active{  
1585 - color: #405dff;  
1586 -}  
1587 -  
1588 -#all-devices-modal .uk-margin-small-top {  
1589 - margin-top: 0 !important;  
1590 -}  
1591 -  
1592 -#history-sch-maintain-modal .add_lp_link{  
1593 - display: inline-block;  
1594 - vertical-align: bottom;  
1595 - margin-left: 15px;  
1596 - text-decoration: underline;  
1597 - font-size: 13px;  
1598 -}  
1599 -  
1600 -#schedule-tzrc-modal input[type=checkbox]{  
1601 - margin-right: 9px;  
1602 -}  
1603 -  
1604 -#schedule-tzrc-modal span.ct_zt_yzx{  
1605 - color: #2196F3;  
1606 - font-size: 12px;  
1607 -}  
1608 -  
1609 -#schedule-tzrc-modal span.ct_zt_lb{  
1610 - color: red;  
1611 - font-size: 12px;  
1612 -}  
1613 -  
1614 -#schedule-tzrc-modal span.ct_zt_zzzx{  
1615 - font-size: 12px;  
1616 - color: #38ad3c;  
1617 -}  
1618 -  
1619 -#schedule-tzrc-modal .tzrc_form{  
1620 - padding: 20px;  
1621 - border: 1px solid #f0eded;  
1622 - box-shadow: 0px -3px 15px rgba(0,0,0,0.08);  
1623 - background: #f9f9f9;  
1624 -}  
1625 -  
1626 -.uk-panel.ct_search_panel{  
1627 - padding: 15px;  
1628 - border: 1px solid #f0eded;  
1629 - box-shadow: 0px 3px 15px rgba(0,0,0,0.08);  
1630 - background: #f9f9f9;  
1631 -}  
1632 -  
1633 -.sch-tzrc-table.ct_table dl.active,  
1634 -.sch-tzrc-table.ct_table>.ct_table_body dl.active:hover{  
1635 - background: #5bd460;  
1636 - color: white;  
1637 -}  
1638 -  
1639 -#schedule-tzrc-modal dl.active span.ct_zt_yzx{  
1640 - color: #545252;  
1641 -}  
1642 -  
1643 -#schedule-tzrc-modal dl.active span.ct_zt_lb{  
1644 - color: #d64949;  
1645 -}  
1646 -  
1647 -#schedule-tzrc-modal dl.active span.ct_zt_zzzx{  
1648 - color: white;  
1649 -}  
1650 -  
1651 -#schedule-tzrc-modal dl.active input[type=checkbox]{  
1652 - border: 0;  
1653 -}  
1654 -  
1655 -#schedule-tzrc-modal dl.active input[type=checkbox]:before{  
1656 - color: #ffffff;  
1657 -}  
1658 -  
1659 -.sch-search-autocom input{  
1660 - padding: 0 !important;  
1661 - height: 100% !important;  
1662 -}  
1663 -  
1664 -label.blue_checkbox{  
1665 - margin-left: 12px;  
1666 -}  
1667 -  
1668 -label.blue_checkbox>input{  
1669 - width: 17px !important;  
1670 - height: 17px !important;  
1671 -}  
1672 -  
1673 -label.blue_checkbox>input:checked:before,  
1674 -label.blue_checkbox>input:indeterminate:before{  
1675 - line-height: 15px !important;  
1676 -}  
1677 -  
1678 -dd.disabled{  
1679 - color: #b5b3b3;  
1680 -}  
1681 -  
1682 -dl.active>dd.disabled{  
1683 - color: #ececec;  
1684 -}  
1685 -  
1686 -#change_user_options-modal .user_info{  
1687 - width: 360px;  
1688 - margin: auto;  
1689 -}  
1690 -  
1691 -.display_hide{  
1692 - display: none;  
1693 -}  
1694 -  
1695 -.ct_eye_icon{  
1696 - font-size: 16px;  
1697 - cursor: pointer;  
1698 -}  
1699 -  
1700 -.ct_eye_icon.active{  
1701 - color: #444;  
1702 -}  
1703 -  
1704 -#tempScheduleContent .forms::-webkit-scrollbar {  
1705 - width: 19px;  
1706 - height: 16px;  
1707 -}  
1708 -  
1709 -.range_2_normal_tt{  
1710 - margin-bottom: 15px;  
1711 - border-top: 1px dashed #c7c7c7;  
1712 - color: #a6a6a6;  
1713 - text-indent: 7px;  
1714 - padding-bottom: 5px;  
1715 -}  
1716 -  
1717 -.cancel_link{  
1718 - font-size: 12px;  
1719 - margin-left: 15px;  
1720 - vertical-align: bottom;  
1721 - color: #8d8d8d;  
1722 - text-decoration: underline;  
1723 - position: absolute;  
1724 - right: 0;  
1725 -}  
1726 -  
1727 -.edit_link{  
1728 - font-size: 12px;  
1729 - margin-left: 15px;  
1730 - vertical-align: bottom;  
1731 - color: #ff2f2f;  
1732 - text-decoration: underline; 1 +input::-webkit-outer-spin-button,
  2 +input::-webkit-inner-spin-button{
  3 + display: none;
  4 +}
  5 +
  6 +input::-webkit-calendar-picker-indicator {
  7 + display: none;
  8 +}
  9 +
  10 +input::-webkit-datetime-edit { padding: 1px; }
  11 +
  12 +.ps-container > .ps-scrollbar-y-rail{
  13 + z-index: 1 !important;
  14 +}
  15 +
  16 +.ps-container > .ps-scrollbar-x-rail,
  17 +.ps-container > .ps-scrollbar-y-rail {
  18 + opacity: 0.6 !important;
  19 + padding: 0 !important;
  20 +}
  21 +/* ^_^ baidu map hide logo */
  22 +.anchorBL, .anchorBL, .amap-logo, .amap-copyright {
  23 + display: none;
  24 +}
  25 +
  26 +audio, canvas, img, svg, video {
  27 + max-width: none;
  28 +}
  29 +
  30 +html, body {
  31 + width: 100%;
  32 + height: 100%;
  33 + overflow: hidden;
  34 + margin-left: 0 !important;
  35 +}
  36 +
  37 +.main-container {
  38 + height: calc(100% - 120px);
  39 +}
  40 +
  41 +#main-tab-content {
  42 + height: 100%;
  43 + margin-bottom: 0;
  44 +}
  45 +
  46 +.uk-modal .uk-form.fv-form, .uk-modal .ct-modal-body {
  47 + margin-bottom: -20px !important;
  48 +}
  49 +
  50 +.uk-modal .uk-form.fv-form.fixed-tool {
  51 + width: 100%;
  52 + position: relative;
  53 + height: 100%;
  54 +}
  55 +
  56 +.uk-modal .ct-modal-body .uk-modal-footer {
  57 + margin-left: 0;
  58 +}
  59 +
  60 +.uk-modal .uk-form.fv-form.fixed-tool .uk-modal-footer {
  61 + position: absolute;
  62 + bottom: 0;
  63 + width: calc(100% - 20px);
  64 +}
  65 +
  66 +table.ct-fixed-table {
  67 + table-layout: fixed;
  68 +}
  69 +
  70 +table.ct-fixed-table tr.context-menu-active {
  71 + background: #f0f0f0;
  72 +}
  73 +
  74 +table.ct-fixed-table.uk-table tr td {
  75 + white-space: nowrap;
  76 + overflow: hidden;
  77 + text-overflow: ellipsis;
  78 +}
  79 +
  80 +table.ct-fixed-table.uk-table .uk-badge {
  81 + padding: 2px 5px;
  82 +}
  83 +
  84 +.horizontal-field {
  85 + vertical-align: middle;
  86 + margin: 0 5px;
  87 +}
  88 +
  89 +.legend-tools {
  90 + float: right;
  91 + font-size: 11px;
  92 +}
  93 +
  94 +.legend-tools a.uk-icon-small {
  95 + margin: 0 5px;
  96 + cursor: pointer;
  97 +}
  98 +
  99 +.text-succ {
  100 + color: #659f13;
  101 +}
  102 +
  103 +.text-err {
  104 + color: red;
  105 +}
  106 +
  107 +.text-grey {
  108 + color: grey;
  109 +}
  110 +
  111 +svg.line-chart {
  112 + width: 100%;
  113 + height: 100%;
  114 + position: absolute;
  115 + left: 0;
  116 +}
  117 +
  118 +svg.line-chart circle.station_circle {
  119 + fill: #5e96d2;
  120 + r: 5.5;
  121 + stroke: rgb(253, 253, 253);
  122 + stroke-width: 3;
  123 + Pointer-events: none;
  124 +}
  125 +
  126 +svg.line-chart circle.station_circle.down {
  127 + fill: #c92121;
  128 +}
  129 +
  130 +svg.line-chart path.station_link {
  131 + stroke-width: 3.5px;
  132 + stroke: #5E96D2;
  133 + Pointer-events: none;
  134 +}
  135 +
  136 +svg.line-chart path.station_link.down {
  137 + stroke: #c92121;
  138 +}
  139 +
  140 +svg.line-chart path.station_link.down.loop_line {
  141 + stroke-dasharray: 4, 3;
  142 + stroke-width: 1px;
  143 +}
  144 +
  145 +svg.line-chart text.station_text {
  146 + writing-mode: tb;
  147 + fill: #3e3e3e;
  148 + letter-spacing: -.2px;
  149 + text-shadow: 0 0 2px #dadada;
  150 + Pointer-events: none;
  151 +}
  152 +
  153 +svg.line-chart text.station_text.up {
  154 + fill: #4556b6;
  155 +}
  156 +
  157 +svg.line-chart text.station_text.down {
  158 + fill: #c94f21;
  159 +}
  160 +
  161 +svg.line-chart g.item:first-child > text {
  162 + stroke: #6f6e6e;
  163 + fill: none;
  164 +}
  165 +
  166 +svg.line-chart g.item:nth-last-child(3) > text {
  167 + stroke: #6f6e6e;
  168 + fill: none;
  169 +}
  170 +
  171 +svg.line-chart g.item:first-child > text.up,
  172 +svg.line-chart g.item:nth-last-child(3) > text.up {
  173 + stroke: #4556b6;
  174 +}
  175 +
  176 +svg.line-chart g.item:first-child > text.down,
  177 +svg.line-chart g.item:nth-last-child(3) > text.down {
  178 + stroke: #c94f21;
  179 +}
  180 +
  181 +svg.line-chart g.gps-wrap > rect {
  182 + width: 30px;
  183 + height: 15px;
  184 + /* fill: #fff; */
  185 + rx: 2px;
  186 + cursor: pointer;
  187 +}
  188 +
  189 +svg.line-chart g.gps-wrap > rect[updown="0"] {
  190 + stroke: rgb(62, 80, 179);
  191 + fill: rgb(62, 80, 179);
  192 +}
  193 +
  194 +svg.line-chart g.gps-wrap > rect[updown="1"] {
  195 + stroke: #c94f21;
  196 + fill: #c94f21;
  197 +}
  198 +
  199 +svg.line-chart g.gps-wrap > rect.hover {
  200 + stroke-width: 2;
  201 +}
  202 +
  203 +svg.line-chart g.gps-wrap > text {
  204 + font-size: 12px;
  205 + transform: translate(0, 12px);
  206 + pointer-events: none;
  207 +}
  208 +
  209 +svg.line-chart g.gps-wrap > text[updown="0"] {
  210 + fill: #fff;
  211 +}
  212 +
  213 +svg.line-chart g.gps-wrap > text[updown="1"] {
  214 + fill: #fff;
  215 +}
  216 +
  217 +svg.line-chart g.gps-wrap > rect.abnormal[updown="0"],
  218 +svg.line-chart g.gps-wrap > rect.abnormal[updown="1"] {
  219 + width: 40px;
  220 + fill: yellow;
  221 + stroke: yellow;
  222 +}
  223 +
  224 +svg.line-chart g.gps-wrap > text.abnormal[updown="0"],
  225 +svg.line-chart g.gps-wrap > text.abnormal[updown="1"] {
  226 + fill: black;
  227 +}
  228 +
  229 +svg.line-chart .merge_hide {
  230 + display: none !important;
  231 +}
  232 +
  233 +svg.line-chart g.merge-item rect {
  234 + width: 22px;
  235 + height: 22px;
  236 + rx: 15px;
  237 + fill: #19a53a;
  238 + cursor: pointer;
  239 + stroke: #19a53a;
  240 + stroke-dasharray: 1, 2;
  241 + stroke-width: 3px;
  242 +}
  243 +
  244 +svg.line-chart g.merge-item text {
  245 + fill: #fff;
  246 + pointer-events: none;
  247 +}
  248 +
  249 +.qtip-multi-gps {
  250 + max-width: 720px !important;
  251 +}
  252 +
  253 +.qtip-bootstrap.qtip-multi-gps .qtip-content {
  254 + padding: 0;
  255 +}
  256 +
  257 +.tooltip {
  258 + position: relative;
  259 + padding-bottom: 160px;
  260 + width: 220px;
  261 +}
  262 +
  263 +.multi-tooltip-wrap {
  264 + width: 100%;
  265 + max-height: 350px;
  266 + overflow: auto;
  267 +}
  268 +
  269 +.tip_map_wrap.multi {
  270 + width: 100%;
  271 + height: 130px;
  272 +}
  273 +
  274 +.tooltip.multi-tooltip {
  275 + width: 160px;
  276 + display: inline-block;
  277 + padding: 10px 0 10px 15px;
  278 + border-right: 1px solid #eeeeee;
  279 + border-bottom: 1px solid #eeeeee;
  280 +}
  281 +
  282 +.tooltip hr {
  283 + border-top: 1px solid #eeeeee;
  284 + width: calc(100% + 30px);
  285 + margin: 7px 0 11px -15px;
  286 +}
  287 +
  288 +.tooltip.multi-tooltip hr {
  289 + width: calc(100% + 16px);
  290 +}
  291 +
  292 +.tooltip .tooltip-container {
  293 + padding: 1px;
  294 +}
  295 +
  296 +.tooltip .tooltip-container div, .tooltip .tooltip-container div a {
  297 + margin: 7px 1px;
  298 + font-size: 13px;
  299 + color: rgb(76, 76, 76);
  300 +}
  301 +
  302 +.tooltip .tooltip-container div.title {
  303 + margin: 8px 1px 12px;
  304 +}
  305 +
  306 +.tooltip .tooltip-container .title a {
  307 + font-size: 18px;
  308 + font-family: 微软雅黑;
  309 +}
  310 +
  311 +.tooltip span.field {
  312 + color: #7d7d7b;
  313 + margin-right: 5px;
  314 +}
  315 +
  316 +.tooltip .tip_map_wrap {
  317 + position: absolute;
  318 + bottom: -16px;
  319 + left: -15px;
  320 + width: calc(100% + 28px);
  321 + background: #fff;
  322 + height: 165px;
  323 + border-radius: 0 0 5px 5px;
  324 + border-top: 1px solid #e6e4e4;
  325 +}
  326 +
  327 +canvas.crosshair-layer {
  328 + position: absolute;
  329 + width: 100%;
  330 + height: 100%;
  331 + background: rgba(255, 255, 255, 0.33);
  332 + left: 0;
  333 +}
  334 +
  335 +li.map-panel {
  336 + height: 100%;
  337 + position: relative;
  338 +}
  339 +
  340 +.main-container .load-panel {
  341 + display: block;
  342 + color: #999797;
  343 +}
  344 +
  345 +.uk-panel-box-danger {
  346 + background-color: #fff1f0;
  347 + /*color: #d85030;*/
  348 + border-color: rgba(216, 80, 48, .3);
  349 +}
  350 +
  351 +/*.uk-panel-box-danger .uk-panel-title {
  352 + color: #d85030;
  353 +}*/
  354 +
  355 +.uk-badge-default {
  356 + background-color: #a09b9c;
  357 + background-image: -webkit-linear-gradient(top, #9a9898, #8c8687);
  358 + background-image: linear-gradient(to bottom, #9a9898, #8c8687);
  359 +}
  360 +
  361 +.ct-bottom-drawer {
  362 + width: 100%;
  363 + background: rgb(255, 255, 255);
  364 + position: fixed;
  365 + bottom: 0;
  366 + box-shadow: 0 0 10px rgba(0, 0, 0, .3);
  367 + transition: all .3s ease;
  368 + height: 0;
  369 +}
  370 +
  371 +.ct-bottom-drawer.open {
  372 + height: 320px;
  373 +}
  374 +
  375 +.ct-bottom-drawer a.ct-bottom-drawer-close {
  376 + position: absolute;
  377 + right: 10px;
  378 + top: 10px;
  379 + color: #c3c3c3;
  380 + width: 20px;
  381 + line-height: 20px;
  382 + background: #fff;
  383 + text-align: center;
  384 + z-index: 99;
  385 +}
  386 +
  387 +.ct-bottom-drawer a.ct-bottom-drawer-close:hover {
  388 + text-decoration: none;
  389 + color: grey;
  390 +}
  391 +
  392 +.ct-bottom-drawer a.ct-bottom-drawer-close:after {
  393 + display: block;
  394 + content: "\f00d";
  395 + font-family: FontAwesome;
  396 +}
  397 +
  398 +.ct-bottom-drawer-body {
  399 + width: 100%;
  400 + height: 100%;
  401 +}
  402 +
  403 +#station_route_spacing_chart_drawer .svg_wrap {
  404 + width: 80%;
  405 + height: 100%;
  406 + display: inline-block;
  407 + font-size: 14px;
  408 + overflow: hidden;
  409 + position: relative;
  410 +}
  411 +
  412 +#station_route_spacing_chart_drawer .drawer_right_map {
  413 + width: 20%;
  414 + height: 100%;
  415 + display: inline-block;
  416 +}
  417 +
  418 +#station_route_spacing_chart_drawer .svg_cont_body {
  419 + height: 100%;
  420 + position: absolute;
  421 + top: 0;
  422 + left: 0;
  423 +}
  424 +
  425 +#station_route_spacing_chart_drawer svg {
  426 + width: 100%;
  427 + height: 100%;
  428 +}
  429 +
  430 +#station_route_spacing_chart_drawer svg g._item rect {
  431 + stroke: rgb(62, 80, 179);
  432 + fill: rgb(62, 80, 179);
  433 + width: 30px;
  434 + height: 124px;
  435 + rx: 5;
  436 + transform: translate(-15px);
  437 +}
  438 +
  439 +#station_route_spacing_chart_drawer svg g._item text {
  440 + writing-mode: tb;
  441 + transform: translate(0, 9px);
  442 + fill: #fff;
  443 +}
  444 +
  445 +#station_route_spacing_chart_drawer svg g._item path {
  446 + stroke-width: 5.4px;
  447 + stroke: #3e50b3;
  448 +}
  449 +
  450 +#station_route_spacing_chart_drawer svg g._item circle {
  451 + r: 3px;
  452 + fill: #ffffff;
  453 +}
  454 +
  455 +#station_route_spacing_chart_drawer svg g._item path.arc_path {
  456 + stroke-width: 1.3px;
  457 + stroke: #3e50b3;
  458 + stroke-dasharray: 1000;
  459 + stroke-dashoffset: 1000;
  460 + fill: none;
  461 +
  462 + animation: dash .9s;
  463 + webkit-amimation: dash .9s;
  464 + animation-fill-mode: forwards;
  465 + -webkit-animation-fill-mode: forwards;
  466 +}
  467 +
  468 +@keyframes dash {
  469 + to {
  470 + stroke-dashoffset: 0;
  471 + stroke-dasharray: 4, 4;
  472 + }
  473 +}
  474 +
  475 +@-webkit-keyframes dash {
  476 + to {
  477 + stroke-dashoffset: 0;
  478 + stroke-dasharray: 4, 4;
  479 + }
  480 +}
  481 +
  482 +#station_route_spacing_chart_drawer svg g._item text.distance_text {
  483 + writing-mode: horizontal-tb;
  484 + fill: #3e50b3;
  485 +}
  486 +
  487 +#station_route_spacing_chart_drawer svg g._item rect.distance_rect {
  488 + height: 20px;
  489 + width: 40px;
  490 + fill: #fff !important;
  491 + stroke-width: 0;
  492 +}
  493 +
  494 +#station_route_spacing_chart_drawer .tl_desc_text {
  495 + position: absolute;
  496 + top: 5px;
  497 + left: 5px;
  498 + font-size: 12px;
  499 + color: #525050;
  500 + font-family: 微软雅黑;
  501 +}
  502 +
  503 +#station_route_spacing_chart_drawer svg g._item:first-child circle {
  504 + fill: #3e50b3;
  505 + r: 6px;
  506 +}
  507 +
  508 +#station_route_spacing_chart_drawer svg g._item:last-child circle {
  509 + fill: #3e50b3;
  510 + r: 6px;
  511 +}
  512 +
  513 +/* 下行 */
  514 +#station_route_spacing_chart_drawer svg.down g._item rect {
  515 + stroke: #dd3829;
  516 + fill: #dd3829;
  517 +}
  518 +
  519 +#station_route_spacing_chart_drawer svg.down g._item path {
  520 + stroke: #dd3829;
  521 +}
  522 +
  523 +#station_route_spacing_chart_drawer svg.down g._item:first-child circle {
  524 + fill: #dd3829;
  525 +}
  526 +
  527 +#station_route_spacing_chart_drawer svg.down g._item text.distance_text {
  528 + fill: #dd3829;
  529 +}
  530 +
  531 +#station_route_spacing_chart_drawer svg.down g._item path.arc_path {
  532 + stroke: #dd3829;
  533 +}
  534 +
  535 +#station_route_spacing_chart_drawer svg.down g._item:last-child circle {
  536 + fill: #dd3829;
  537 +}
  538 +
  539 +.svg-edit-panel-wrap {
  540 + width: 48%;
  541 + border: 1px solid #e1d3d3;
  542 + padding: 12px 0 0 0;
  543 + border-radius: 4px;
  544 + position: relative;
  545 + display: inline-block;
  546 + vertical-align: top;
  547 + height: 440px;
  548 +}
  549 +
  550 +.svg-edit-panel-wrap .title-badge {
  551 + position: absolute;
  552 + top: -10px;
  553 + left: 7px;
  554 + font-size: 13px;
  555 + background: #fff;
  556 + padding: 0 3px;
  557 + color: #888888;
  558 +}
  559 +
  560 +.svg-edit-panel-wrap .rename-tools {
  561 + height: 21px;
  562 + padding: 0 0 0 9px;
  563 +}
  564 +
  565 +.svg-edit-panel-wrap .rename-item-panel {
  566 + border-bottom: 1px solid #ede5e5;
  567 + padding: 4px;
  568 +}
  569 +
  570 +.svg-edit-panel-wrap .rename-item-panel select {
  571 + width: 150px;
  572 +}
  573 +
  574 +.svg-edit-panel-wrap .rename-item-panel input {
  575 + margin-left: 7px;
  576 +}
  577 +
  578 +.svg-edit-panel-wrap .rename-item-panel input[type=checkbox] {
  579 + margin-top: 2px;
  580 + margin-right: 4px;
  581 +}
  582 +
  583 +.svg-edit-panel-wrap .rename-item-panel.active {
  584 + background: #65c9f8;
  585 + box-shadow: 0px 3px 7px 0 rgba(101, 201, 248, 0.48), 0px 1px 4px 0 rgba(101, 201, 248, 0.32);
  586 +}
  587 +
  588 +.svg-edit-panel-wrap .rename-item-panel.active select,
  589 +.svg-edit-panel-wrap .rename-item-panel.active input {
  590 + background: #65c9f8;
  591 + color: #fff;
  592 +}
  593 +
  594 +.svg-edit-panel-wrap .rename-item-panel.active i {
  595 + color: #e4f6ff;
  596 +}
  597 +
  598 +.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox] {
  599 + border: none;
  600 +}
  601 +
  602 +.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox]:before {
  603 + color: #fff;
  604 +}
  605 +
  606 +.svg-edit-panel-wrap .rename-tools a {
  607 + font-size: 14px;
  608 + padding: 5px;
  609 +}
  610 +
  611 +.svg-edit-panel-wrap .rename-tools a:hover {
  612 + background: #e8edef;
  613 + border-radius: 5px;
  614 +}
  615 +
  616 +.station-list {
  617 + width: 190px;
  618 + padding: 2px 7px;
  619 + height: 100%;
  620 + overflow: auto;
  621 + display: inline-block;
  622 +}
  623 +
  624 +.station-list .station-item {
  625 + padding: 3px 0;
  626 + margin: 5px 0;
  627 + border-radius: 3px;
  628 + font-size: 13px;
  629 + text-indent: 7px;
  630 + cursor: pointer;
  631 + white-space: nowrap;
  632 + overflow: hidden;
  633 + text-overflow: ellipsis;
  634 +}
  635 +
  636 +.station-list .station-item.disable,
  637 +.station-list .station-item.disable:hover {
  638 + background: #d5c9c9 !important;
  639 + color: #686565 !important;
  640 +}
  641 +
  642 +.station-list.up .station-item {
  643 + background: #5364c3;
  644 + color: white;
  645 +}
  646 +
  647 +.station-list.up .station-item:hover {
  648 + box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);
  649 + background: #4556b6;
  650 +}
  651 +
  652 +.station-list.down .station-item {
  653 + background: #f95858;
  654 + color: white;
  655 +}
  656 +
  657 +.station-list.down .station-item:hover {
  658 + box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);
  659 + background: #e95151;
  660 +}
  661 +
  662 +.modal-dotted-hr {
  663 + height: 1px;
  664 + border: none;
  665 + border-top: 1px dashed #d1d1d1;
  666 + width: calc(100% + 40px);
  667 + margin-left: -20px;
  668 +}
  669 +
  670 +#add-sub-task-range_turn-modal .main-sch-panel {
  671 + height: 60px;
  672 + border: 1px solid #dddddd;
  673 + border-radius: 5px;
  674 + position: relative;
  675 + padding: 20px 0 0 8px;
  676 +}
  677 +
  678 +#add-sub-task-range_turn-modal .main-sch-panel:before {
  679 + content: '主任务';
  680 + position: absolute;
  681 + top: -10px;
  682 + left: 10px;
  683 + background: #fff;
  684 + padding: 0 4px;
  685 + font-size: 12px;
  686 + color: #adadad;
  687 +}
  688 +
  689 +.ct_row {
  690 + font-size: 0;
  691 +}
  692 +
  693 +.ct_row .ct_cell {
  694 + display: inline-block;
  695 + font-size: 13px;
  696 + white-space: nowrap;
  697 + overflow: hidden;
  698 + text-overflow: ellipsis;
  699 +}
  700 +
  701 +.ct_row .ct_cell label {
  702 + color: #979393;
  703 + margin-right: 3px;
  704 +}
  705 +
  706 +.ct_row .ct_cell.c_1_3 {
  707 + width: 33%;
  708 +}
  709 +
  710 +#schedule-lp_change-modal .sch-list dl dd {
  711 + font-size: 14px;
  712 +}
  713 +
  714 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(1) {
  715 + width: 5%;
  716 + border-left: 1px solid #dedede;
  717 +}
  718 +
  719 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(2) {
  720 + width: 22%;
  721 +}
  722 +
  723 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(3) {
  724 + width: 17%;
  725 +}
  726 +
  727 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) {
  728 + width: 10%;
  729 + }
  730 +
  731 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) {
  732 + width: 21%;
  733 +}
  734 +
  735 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(6) {
  736 + width: 10%;
  737 +}
  738 +
  739 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(7) {
  740 + width: 14%;
  741 +}
  742 +
  743 +
  744 +
  745 +
  746 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) {
  747 + width: 5%;
  748 + border-left: 1px solid #dedede;
  749 +}
  750 +
  751 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(2) {
  752 + width: 14%;
  753 +}
  754 +
  755 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(3) {
  756 + width: 10%;
  757 +}
  758 +
  759 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(4) {
  760 + width: 21%;
  761 +}
  762 +
  763 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(5) {
  764 + width: 10%;
  765 +}
  766 +
  767 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(6) {
  768 + width: 17%;
  769 +}
  770 +
  771 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(7) {
  772 + width: 22%;
  773 +}
  774 +
  775 +#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active {
  776 + background: #b9d2ff;
  777 +}
  778 +
  779 +#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active dd {
  780 + border-top: 1px solid #b9d2ff;
  781 +}
  782 +
  783 +#schedule-lp_change-modal .ct_table.sch-list dl.active input[type=checkbox] {
  784 + border: none;
  785 +}
  786 +
  787 +#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active {
  788 + background: #ffe2b9;
  789 +}
  790 +
  791 +#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active dd {
  792 + border-top: 1px solid #ffe2b9;
  793 +}
  794 +
  795 +#cache_data_manage-modal .uk-table td{
  796 + vertical-align: bottom;
  797 +}
  798 +
  799 +#cache_data_manage-modal .uk-table td,
  800 +#cache_data_manage-modal .uk-table th{
  801 + padding: 8px 8px 6px;
  802 +}
  803 +
  804 +
  805 +.ps-help-panel{
  806 + color: grey;
  807 + padding: 5px 2px;
  808 +}
  809 +
  810 +.ps-help-panel small{
  811 + display: block;
  812 +}
  813 +
  814 +
  815 +svg text.offline{
  816 + fill: #6f6a6a !important;
  817 +}
  818 +
  819 +svg rect.offline{
  820 + stroke: #dbdada !important;
  821 + fill: #dbdada !important;
  822 +}
  823 +
  824 +.tooltip .tooltip-container .title a>.abnormal-text{
  825 + font-size: 14px;
  826 + color: #ff5e5e;
  827 + font-weight: 600;
  828 +}
  829 +
  830 +#addChildTaskBtn{
  831 + margin-left: 5px;
  832 + color: #36729b;
  833 + padding: 1px 5px 1px 6px;
  834 +}
  835 +
  836 +#addChildTaskBtn:hover{
  837 + box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.2), 0px 3px 8px 0 rgba(0, 0, 0, 0.19);
  838 +}
  839 +
  840 +.edit-icon{
  841 + color: #aba9a9;
  842 + font-size: 12px;
  843 + margin-left: 5px;
  844 + display: none;
  845 +}
  846 +
  847 +.operation-real-text{
  848 + position: absolute;
  849 + top: 9px;
  850 + width: 100%;
  851 + left: 0;
  852 + text-align: center;
  853 + pointer-events: none;
  854 +}
  855 +
  856 +.operation-real-text span{
  857 + padding: 15px;
  858 + background: #ff4f4f;
  859 + color: white;
  860 + box-shadow: 0px 4px 6px 0 rgba(0, 0, 0, 0.2), 0px 4px 10px 0 rgba(0, 0, 0, 0.19);
  861 + border-radius: 1px 1px 4px 4px;
  862 +}
  863 +
  864 +#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-label{
  865 + width: 120px;
  866 +}
  867 +
  868 +#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-controls{
  869 + margin-left: 125px;
  870 +}
  871 +
  872 +#oil_station-modal .uk-form-icon>[class*=uk-icon-]{
  873 + right: 23px;
  874 +}
  875 +
  876 +#oil_station-modal .uk-form-icon:not(.uk-form-icon-flip)>input{
  877 + padding-left: 10px !important;
  878 +}
  879 +
  880 +#oil_station-modal .uk-form-icon{
  881 + width: calc(100% - 145px);
  882 +}
  883 +
  884 +#oil_station-modal .uk-icon-mile:before{
  885 + content: '公里';
  886 +}
  887 +
  888 +#oil_station-modal .uk-icon-minute:before{
  889 + content: '分钟';
  890 +}
  891 +
  892 +option.oil_station_opt{
  893 + color: red;
  894 +}
  895 +
  896 +#oil_station-modal .uk-modal .uk-form.fv-form{
  897 + margin-bottom: 0 !important;
  898 +}
  899 +
  900 +#gb_wait_modal .uk-modal-spinner{
  901 + top: 25px;
  902 + -webkit-transform: translate(-50%,0);
  903 + transform: translate(-50%,0);
  904 +}
  905 +
  906 +#gb_wait_modal .wait-modal-text{
  907 + text-align: center;
  908 + margin-top: 35px;
  909 + font-size: 15px;
  910 + color: #635e5e;
  911 +}
  912 +
  913 +.park-and-station-wrap{
  914 + margin-top: 9px;
  915 + border: 1px solid #3dce69;
  916 + width: 580px;
  917 + padding: 12px;
  918 + border-radius: 5px;
  919 +}
  920 +.park-and-station-wrap select{
  921 + width: auto !important;
  922 +}
  923 +
  924 +/** 安全驾驶相关css */
  925 +.multi_plat_msg_pop_wrap{
  926 + position: absolute;
  927 + right: 12px;
  928 + bottom: 12px;
  929 + z-index: 99;
  930 +}
  931 +
  932 +.multi_plat_msg_pop{
  933 + background: #d44b4b;
  934 + font-size: 15px;
  935 + padding: 9px 10px 0;
  936 + border: 1px solid #f4f0f0;
  937 + border-radius: 5px;
  938 + cursor: pointer;
  939 + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  940 + transition: all .03s;
  941 + color: #f2f2f2;
  942 +}
  943 +
  944 +.multi_plat_msg_pop:hover{
  945 + background: #bc2a2a;
  946 +}
  947 +
  948 +.multi_plat_msg_pop .title{
  949 +}
  950 +
  951 +.multi_plat_msg_pop .desc{
  952 + display: block;
  953 + font-size: 12px;
  954 + color: #ff9d9d;
  955 + text-align: right;
  956 + margin-right: 5px;
  957 +}
  958 +
  959 +/** 嵌入表单modal滚动条样式 */
  960 +#formFragmentModal::-webkit-scrollbar {
  961 + width: 10px;
  962 + background-color: #F5F5F5;
  963 +}
  964 +#formFragmentModal::-webkit-scrollbar-thumb {
  965 + background-color: #000000;
  966 +}
  967 +#formFragmentModal::-webkit-scrollbar-track {
  968 + border: 0;
  969 + background-color: #F5F5F5;
  970 + border-radius: 0;
  971 +}
  972 +
  973 +#formFragmentModal::-webkit-scrollbar-thumb{
  974 + border: 5px solid rgb(226, 122, 122);
  975 +}
  976 +
  977 +#schedule-addsch_oil-modal select{
  978 + height: 30px !important;
  979 +}
  980 +
  981 +#oil_station-modal .input_clear_icon{
  982 + position: absolute;
  983 + top: 6px;
  984 + right: 108px;
  985 + color: #f75757;
  986 + height: 18px;
  987 + line-height: 18px;
  988 + border-radius: 7px;
  989 + font-size: 16px;
  990 + display: none;
  991 + cursor: pointer;
  992 +}
  993 +
  994 +#oil_station-modal .input_clear_icon:hover{
  995 + color: #de2020;
  996 +}
  997 +
  998 +#oil_station-modal .input_clear_icon:before{
  999 + display: block;
  1000 + font-family: FontAwesome;
  1001 + content: "\f057";
  1002 +}
  1003 +
  1004 +#oil_station-modal input.readonly{
  1005 + background: #dddddd;
  1006 +}
  1007 +
  1008 +
  1009 +.ct_tags{
  1010 + margin-bottom: 12px;
  1011 +}
  1012 +
  1013 +.ct_tags>span{
  1014 + padding: 3px 7px;
  1015 + background: #e8e8e8;
  1016 + color: #3a3939;
  1017 + cursor: pointer;
  1018 + margin-right: 5px;
  1019 +}
  1020 +
  1021 +.ct_tags>span.active{
  1022 + background: #62a9e1;
  1023 + color: white;
  1024 + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35);
  1025 +}
  1026 +
  1027 +.ct_tags>span.active:before{
  1028 + content: "\f00c";
  1029 + font-family: FontAwesome;
  1030 + margin-right: 2px;
  1031 + font-size: 13px;
  1032 +}
  1033 +
  1034 +.ct_tags>span:hover{
  1035 + box-shadow: 0 0 4px rgba(0,0,0,.3);
  1036 +}
  1037 +
  1038 +span.late-badge {
  1039 + height: 20px;
  1040 + line-height: 20px;
  1041 + margin-top: 8px;
  1042 + color: grey;
  1043 + margin-left: 2px;
  1044 +}
  1045 +
  1046 +dl.intimity span.late-badge{
  1047 + color: #fbfbfb;
  1048 +}
  1049 +
  1050 +/** badge tooltip */
  1051 +.uk-badge.c_task:hover,
  1052 +.uk-badge.sch_region:hover{
  1053 + background-image: none;
  1054 + background: #38b3e1;
  1055 + border: 1px solid #7ebad1;
  1056 +}
  1057 +
  1058 +.uk-badge.out:hover{
  1059 + background-image: none;
  1060 + background: #8fc650;
  1061 + border: 1px solid #949f86;
  1062 +}
  1063 +
  1064 +.uk-badge.in:hover{
  1065 + background-image: none;
  1066 + background: #fabc64;
  1067 + border: 1px solid #a68c67;
  1068 +}
  1069 +
  1070 +.qtip.sch-badge-tip{
  1071 + max-width: 500px;
  1072 +}
  1073 +
  1074 +.tip_task_list {
  1075 + width: 460px;
  1076 + margin-bottom: -10px;
  1077 +}
  1078 +.tip_task_list dl{
  1079 + font-size: 0;
  1080 + border-bottom: 1px solid #e6e6e6;
  1081 + margin: 0;
  1082 +}
  1083 +.tip_task_list dl:last-child{
  1084 + border-bottom: none;
  1085 +}
  1086 +.tip_task_list dl dt,
  1087 +.tip_task_list dl dd{
  1088 + display: inline-block;
  1089 + font-size: 13px;
  1090 + white-space: nowrap;
  1091 + overflow: hidden;
  1092 + text-overflow: ellipsis;
  1093 + height: 24px;
  1094 + line-height: 24px;
  1095 +}
  1096 +
  1097 +.tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1){
  1098 + width: 19%;
  1099 +}
  1100 +.tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2){
  1101 + width: 12%;
  1102 +}
  1103 +.tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3){
  1104 + width: 28%;
  1105 +}
  1106 +.tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4){
  1107 + width: 28%;
  1108 +}
  1109 +.tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5){
  1110 + width: 13%;
  1111 +}
  1112 +
  1113 +.tip_task_list dl.service{
  1114 + color: blue;
  1115 +}
  1116 +.tip_task_list dl.service.destroy{
  1117 + color: red;
  1118 +}
  1119 +
  1120 +.tip_task_list dl.service.temp_add{
  1121 + color: #9C27B0;
  1122 +}
  1123 +
  1124 +.tip_task_list dl span{
  1125 + margin: 0;
  1126 + width: auto;
  1127 +}
  1128 +
  1129 +ul.left_tabs_lg{
  1130 + border: 1px solid #efeded;
  1131 + height: 100%;
  1132 + background: #fafafa;
  1133 +}
  1134 +
  1135 +ul.left_tabs_lg li{
  1136 + line-height: 40px;
  1137 + font-size: 15px;
  1138 +}
  1139 +
  1140 +#schedule-addsch-modal .uk-modal-footer{
  1141 + border-top: none;
  1142 + background: none;
  1143 +}
  1144 +
  1145 +.ct_line_lp_badge{
  1146 + float: left;
  1147 + margin-top: 6px;
  1148 + background: #e0e0e0;
  1149 + padding: 2px 7px;
  1150 + border-radius: 3px;
  1151 +}
  1152 +
  1153 +.uk-badge.sch_ldks{
  1154 + background: #8c8c8c;
  1155 + background-image: linear-gradient(to bottom,#a7a7a7,#8c8c8c);
  1156 +}
  1157 +
  1158 +.ct_layer_modal{
  1159 + background: #e5e5e5;
  1160 + height: 100%;
  1161 + width: 100%;
  1162 + overflow: auto;
  1163 +}
  1164 +
  1165 +.layui-layer-setwin{
  1166 +
  1167 +}
  1168 +
  1169 +.device_config_table dl dt:nth-of-type(1), .device_config_table dl dd:nth-of-type(1){
  1170 + width: 7%;
  1171 + text-indent: 10px;
  1172 +}
  1173 +.device_config_table dl dt:nth-of-type(2), .device_config_table dl dd:nth-of-type(2){
  1174 + width: 7%;
  1175 +}
  1176 +.device_config_table dl dt:nth-of-type(3), .device_config_table dl dd:nth-of-type(3){
  1177 + width: 8%;
  1178 +}
  1179 +.device_config_table dl dt:nth-of-type(4), .device_config_table dl dd:nth-of-type(4){
  1180 + width: 5%;
  1181 +}
  1182 +.device_config_table dl dt:nth-of-type(5), .device_config_table dl dd:nth-of-type(5){
  1183 + width: 4%;
  1184 +}
  1185 +.device_config_table dl dt:nth-of-type(6), .device_config_table dl dd:nth-of-type(6){
  1186 + width: 4%;
  1187 +}
  1188 +.device_config_table dl dt:nth-of-type(7), .device_config_table dl dd:nth-of-type(7){
  1189 + width: 4%;
  1190 +}
  1191 +.device_config_table dl dt:nth-of-type(8), .device_config_table dl dd:nth-of-type(8){
  1192 + width: 5%;
  1193 +}
  1194 +.device_config_table dl dt:nth-of-type(9), .device_config_table dl dd:nth-of-type(9){
  1195 + width: 5%;
  1196 +}
  1197 +.device_config_table dl dt:nth-of-type(10), .device_config_table dl dd:nth-of-type(10){
  1198 + width: 8%;
  1199 +}
  1200 +.device_config_table dl dt:nth-of-type(11), .device_config_table dl dd:nth-of-type(11){
  1201 + width: 5%;
  1202 +}
  1203 +.device_config_table dl dt:nth-of-type(12), .device_config_table dl dd:nth-of-type(12){
  1204 + width: 5%;
  1205 +}
  1206 +.device_config_table dl dt:nth-of-type(13), .device_config_table dl dd:nth-of-type(13){
  1207 + width: 4%;
  1208 +}
  1209 +.device_config_table dl dt:nth-of-type(14), .device_config_table dl dd:nth-of-type(14){
  1210 + width: 4%;
  1211 +}
  1212 +.device_config_table dl dt:nth-of-type(15), .device_config_table dl dd:nth-of-type(15){
  1213 + width: 4%;
  1214 +}
  1215 +.device_config_table dl dt:nth-of-type(16), .device_config_table dl dd:nth-of-type(16){
  1216 + width: 3%;
  1217 +}
  1218 +.device_config_table dl dt:nth-of-type(17), .device_config_table dl dd:nth-of-type(17){
  1219 + width: 4%;
  1220 +}
  1221 +.device_config_table dl dt:nth-of-type(18), .device_config_table dl dd:nth-of-type(18){
  1222 + width: 13%;
  1223 +}
  1224 +
  1225 +.uk-tooltip{
  1226 + z-index: 29999999 !important;
  1227 +}
  1228 +
  1229 +.device_config_table.ct_table dl dd,
  1230 +.device_config_table.ct_table dl dt{
  1231 + border-right: 1px solid #dedede !important;
  1232 +}
  1233 +
  1234 +.device_configs_manager .search_form{
  1235 + text-indent: 12px;
  1236 + margin-bottom: 0;
  1237 + padding: 18px 5px;
  1238 +}
  1239 +
  1240 +.sub_task_form_v2{
  1241 + background: #f9f9f9;
  1242 + padding: 12px 15px;
  1243 + border-radius: 5px 0 5px 5px;
  1244 + border: 1px solid #dfdfdf;
  1245 + position: relative;
  1246 + margin-bottom: 20px;
  1247 +}
  1248 +
  1249 +.task_form_close_icon{
  1250 + background: #f9f9f9;
  1251 + padding: 0px 4px;
  1252 + position: absolute;
  1253 + top: -8px;
  1254 + right: -8px;
  1255 + color: #898989;
  1256 + font-size: 15px;
  1257 + border: 1px solid #dfdfdf;
  1258 + border-radius: 100%;
  1259 + border-left: none;
  1260 + border-bottom: none;
  1261 + transition: all .03s;
  1262 +}
  1263 +
  1264 +.task_form_close_icon:hover{
  1265 + border: 1px solid #ff1515;
  1266 + border-left: none;
  1267 + border-bottom: none;
  1268 + color: #e03e3e;
  1269 +}
  1270 +
  1271 +.sub_task_form_v2:hover::after{
  1272 + color: #5f5b5b;
  1273 +}
  1274 +
  1275 +.sub_task_form_v2.uk-form-horizontal .uk-form-label{
  1276 + width: 80px;
  1277 +}
  1278 +
  1279 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls{
  1280 + margin-left: 85px;
  1281 +}
  1282 +
  1283 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text],
  1284 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time],
  1285 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls select{
  1286 + width: 100%;
  1287 +}
  1288 +
  1289 +#add-sub-task-main-modal .uk-modal-footer{
  1290 + background: none;
  1291 + border-top: none;
  1292 +}
  1293 +
  1294 +#add-sub-task-main-modal .uk-grid+.uk-grid{
  1295 + margin-top: 12px;
  1296 +}
  1297 +
  1298 +#add-sub-task-main-modal .plus_icon_span{
  1299 + font-size: 26px;
  1300 + color: #b2b2b2;
  1301 + padding: 10px 64px;
  1302 + display: inline-block;
  1303 + border: 1px dashed grey;
  1304 + margin: 15px 0;
  1305 + border-radius: 5px;
  1306 + cursor: pointer;
  1307 +}
  1308 +
  1309 +#add-sub-task-main-modal .uk-animation-fade{
  1310 + animation-duration: .3s;
  1311 +}
  1312 +
  1313 +#add-sub-task-main-modal .forms{
  1314 + max-height: 488px;
  1315 + overflow-y: auto;
  1316 + overflow-x: hidden;
  1317 + padding: 8px 8px 0 0;
  1318 +}
  1319 +
  1320 +.add_custom_wrap .forms .sub_task_form_v2:last-child{
  1321 + margin-bottom: 0;
  1322 +}
  1323 +
  1324 +.sub_task_form_v2.destroy_form{
  1325 + background-color: #fff5f4 !important;
  1326 +}
  1327 +
  1328 +.uk-form>.half_change_car_box{
  1329 + margin: -10px 0 15px;
  1330 + padding: 3px 5px;
  1331 + display: inline-block;
  1332 + border: 1px solid #dfdddd;
  1333 + color: #918f8f;
  1334 +}
  1335 +
  1336 +.half_change_car_box input[type=checkbox]{
  1337 + vertical-align: top;
  1338 +}
  1339 +
  1340 +.uk-form>.half_change_car_box.active{
  1341 + background: #4CAF50;
  1342 + color: #fff;
  1343 +}
  1344 +
  1345 +.uk-form>.half_change_car_box.active input[type=checkbox]{
  1346 + background: #4caf50;
  1347 + border-color: #4caf50;
  1348 +}
  1349 +
  1350 +.uk-form>.half_change_car_box.active input[type=checkbox]:before{
  1351 + color: #ffffff;
  1352 +}
  1353 +
  1354 +.sub_task_form_v2.change_car{
  1355 + z-index: 99;
  1356 +}
  1357 +
  1358 +.st_range_top_form{
  1359 + padding: 0 0 15px 5px;
  1360 + border: 1px solid #c4bb76;
  1361 + background: #e5e1c1;
  1362 + margin-bottom: 15px;
  1363 + box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19);
  1364 +}
  1365 +
  1366 +.st_range_top_form .uk-form-row{
  1367 + margin-top: 20px;
  1368 +}
  1369 +
  1370 +.uk-form-horizontal.st_range_top_form .uk-form-label{
  1371 + width: 80px;
  1372 +}
  1373 +
  1374 +.uk-form-horizontal.st_range_top_form .uk-form-controls{
  1375 + margin-left: 84px;
  1376 +}
  1377 +
  1378 +.uk-form-horizontal.st_range_top_form .uk-form-controls select{
  1379 + width: calc(100% - 2px);
  1380 +}
  1381 +
  1382 +.sub_task_form_v2.service_st_form{
  1383 + background: #f4faff;
  1384 +}
  1385 +
  1386 +.uk-modal .uk-form.fv-form.sub_task_form_v2{
  1387 + margin-bottom: 20px !important;
  1388 +}
  1389 +
  1390 +.sub_task_table_wrap .ct_table>.ct_table_body{
  1391 + border-bottom: none;
  1392 +}
  1393 +
  1394 +.err_panel{
  1395 + font-size: 12px;
  1396 + color: #7e7d7d;
  1397 + font-family: 微软雅黑;
  1398 + margin-top: 5px;
  1399 +}
  1400 +
  1401 +#schedule-lp_change-modal .ct_table dl{
  1402 + height: 35px;
  1403 +}
  1404 +
  1405 +#schedule-lp_change-modal .ct_table dl dd, #schedule-lp_change-modal .ct_table dl dt{
  1406 + line-height: 35px;
  1407 +}
  1408 +
  1409 +/*
  1410 +.sub_task_form_v2.repeat_main:before{
  1411 + content: '复';
  1412 + position: absolute;
  1413 + top: -10px;
  1414 + font-size: 12px;
  1415 + color: #2196F3;
  1416 + background: #ffffff;
  1417 + padding: 0 3px;
  1418 + font-weight: 600;
  1419 +}*/
  1420 +
  1421 +.sub_task_form_v2:before{
  1422 + position: absolute;
  1423 + top: -7px;
  1424 + font-size: 12px;
  1425 + padding: 0 3px;
  1426 + font-weight: 600;
  1427 + line-height: 14px;
  1428 +}
  1429 +
  1430 +.sub_task_form_v2.destroy_form:before{
  1431 + content: '烂班' !important;
  1432 + color: #f14235 !important;
  1433 + background: #ffffff !important;
  1434 +}
  1435 +
  1436 +.sub_task_form_v2.service_form:before{
  1437 + content: '营运';
  1438 + color: #2196F3;
  1439 + background: #ffffff;
  1440 +}
  1441 +
  1442 +.sub_task_form_v2.service_form.temp_service:before{
  1443 + content: '营运 (临加)';
  1444 + color: #9C27B0;
  1445 + background: #ffffff;
  1446 +}
  1447 +
  1448 +.sub_task_form_v2.service_form.temp_service {
  1449 + background: #faf0fd;
  1450 +}
  1451 +
  1452 +.sub_task_form_v2.empty_form:before{
  1453 + content: '空驶';
  1454 + color: #928f92;
  1455 + background: #ffffff;
  1456 +}
  1457 +
  1458 +.sub_task_form_v2.service_form{
  1459 + background: #f4faff;
  1460 +}
  1461 +
  1462 +/*.sub_task_form_v2.repeat_main.destroy_form:before{
  1463 + color: #F44336;
  1464 +}
  1465 +
  1466 +.sub_task_form_v2.repeat_main{
  1467 + background: #f4faff;
  1468 +}*/
  1469 +.footer_tools{
  1470 + position: absolute;
  1471 + left: 235px;
  1472 + bottom: 19px;
  1473 +}
  1474 +
  1475 +.footer_mileage_count{
  1476 + border: 1px solid #f2f2f2;
  1477 + padding: 5px;
  1478 + box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.2), 0px 2px 7px 0 rgba(0, 0, 0, 0.19);
  1479 + display: inline-block;
  1480 +}
  1481 +
  1482 +.footer_mileage_count>span{
  1483 + padding: 2px 5px;
  1484 +}
  1485 +
  1486 +.footer_mileage_count>span.service_sum{
  1487 + color: #2196F3;
  1488 +}
  1489 +
  1490 +.footer_mileage_count>span.empty_sum{
  1491 + color: #636363;
  1492 +}
  1493 +
  1494 +.footer_mileage_count>span.destroy_sum{
  1495 + color: #f5574b;
  1496 +}
  1497 +
  1498 +.station_to_park_link{
  1499 + display: inline-block;
  1500 + margin-left: 15px;
  1501 + vertical-align: bottom;
  1502 + font-size: 12px;
  1503 +}
  1504 +
  1505 +.station_to_park_link>a{
  1506 + color: #607D8B;
  1507 +}
  1508 +
  1509 +#station_to_park-modal.ct-form-modal form input[type=text],
  1510 +#station_to_park-modal.ct-form-modal form select{
  1511 + width: auto;
  1512 +}
  1513 +
  1514 +.s_2_park_form_wrap{
  1515 + background: #fafafa;
  1516 + border: 1px solid #e5e5e5;
  1517 + padding: 7px 16px;
  1518 + margin: 15px 0;
  1519 + position: relative;
  1520 +}
  1521 +
  1522 +.s_2_park_form_wrap .ct_close{
  1523 + position: absolute;
  1524 + top: -12px;
  1525 + padding: 0 4px;
  1526 + right: -8px;
  1527 + color: #939393;
  1528 + border: 1px solid #f7dfdf;
  1529 + border-radius: 25px;
  1530 + cursor: pointer;
  1531 +}
  1532 +
  1533 +.s_2_park_form_wrap .ct_close:hover{
  1534 + background: #e5e5e5;
  1535 + color: #fd6e6e;
  1536 +}
  1537 +
  1538 +.s_2_park_form_wrap label{
  1539 + color: #666;
  1540 + font-size: 13px;
  1541 +}
  1542 +
  1543 +#station_to_park-modal.ct-form-modal form input[readonly]{
  1544 + background: #fafafa;
  1545 +}
  1546 +
  1547 +.s_2_park_form_wrap .bottom_label{
  1548 + margin-top: 25px;
  1549 + display: block;
  1550 +}
  1551 +
  1552 +.s_2_park_form_wrap .bottom_label_2{
  1553 + margin-top: 4px;
  1554 + display: block;
  1555 +}
  1556 +
  1557 +.ct_describe{
  1558 + font-size: 12px;
  1559 + color: #909090;
  1560 + font-family: FontAwesome;
  1561 +}
  1562 +
  1563 +.ct_describe:before{
  1564 + content: "\f059";
  1565 + margin-right: 3px;
  1566 +}
  1567 +
  1568 +#add-sub-task-main-modal abbr{
  1569 + display: inline-block;
  1570 + font-size: 12px;
  1571 + margin-left: 25px;
  1572 + vertical-align: bottom;
  1573 + color: #929292;
  1574 +}
  1575 +
  1576 +#all-devices-modal .search-form input[type=text]{
  1577 + width: 100px;
  1578 +}
  1579 +
  1580 +#all-devices-modal .auto-refresh{
  1581 + vertical-align: middle;margin-left: 5px;color: grey;
  1582 +}
  1583 +
  1584 +#all-devices-modal .auto-refresh.active{
  1585 + color: #405dff;
  1586 +}
  1587 +
  1588 +#all-devices-modal .uk-margin-small-top {
  1589 + margin-top: 0 !important;
  1590 +}
  1591 +
  1592 +#history-sch-maintain-modal .add_lp_link{
  1593 + display: inline-block;
  1594 + vertical-align: bottom;
  1595 + margin-left: 15px;
  1596 + text-decoration: underline;
  1597 + font-size: 13px;
  1598 +}
  1599 +
  1600 +#schedule-tzrc-modal input[type=checkbox]{
  1601 + margin-right: 9px;
  1602 +}
  1603 +
  1604 +#schedule-tzrc-modal span.ct_zt_yzx{
  1605 + color: #2196F3;
  1606 + font-size: 12px;
  1607 +}
  1608 +
  1609 +#schedule-tzrc-modal span.ct_zt_lb{
  1610 + color: red;
  1611 + font-size: 12px;
  1612 +}
  1613 +
  1614 +#schedule-tzrc-modal span.ct_zt_zzzx{
  1615 + font-size: 12px;
  1616 + color: #38ad3c;
  1617 +}
  1618 +
  1619 +#schedule-tzrc-modal .tzrc_form{
  1620 + padding: 20px;
  1621 + border: 1px solid #f0eded;
  1622 + box-shadow: 0px -3px 15px rgba(0,0,0,0.08);
  1623 + background: #f9f9f9;
  1624 +}
  1625 +
  1626 +.uk-panel.ct_search_panel{
  1627 + padding: 15px;
  1628 + border: 1px solid #f0eded;
  1629 + box-shadow: 0px 3px 15px rgba(0,0,0,0.08);
  1630 + background: #f9f9f9;
  1631 +}
  1632 +
  1633 +.sch-tzrc-table.ct_table dl.active,
  1634 +.sch-tzrc-table.ct_table>.ct_table_body dl.active:hover{
  1635 + background: #5bd460;
  1636 + color: white;
  1637 +}
  1638 +
  1639 +#schedule-tzrc-modal dl.active span.ct_zt_yzx{
  1640 + color: #545252;
  1641 +}
  1642 +
  1643 +#schedule-tzrc-modal dl.active span.ct_zt_lb{
  1644 + color: #d64949;
  1645 +}
  1646 +
  1647 +#schedule-tzrc-modal dl.active span.ct_zt_zzzx{
  1648 + color: white;
  1649 +}
  1650 +
  1651 +#schedule-tzrc-modal dl.active input[type=checkbox]{
  1652 + border: 0;
  1653 +}
  1654 +
  1655 +#schedule-tzrc-modal dl.active input[type=checkbox]:before{
  1656 + color: #ffffff;
  1657 +}
  1658 +
  1659 +.sch-search-autocom input{
  1660 + padding: 0 !important;
  1661 + height: 100% !important;
  1662 +}
  1663 +
  1664 +label.blue_checkbox{
  1665 + margin-left: 12px;
  1666 +}
  1667 +
  1668 +label.blue_checkbox>input{
  1669 + width: 17px !important;
  1670 + height: 17px !important;
  1671 +}
  1672 +
  1673 +label.blue_checkbox>input:checked:before,
  1674 +label.blue_checkbox>input:indeterminate:before{
  1675 + line-height: 15px !important;
  1676 +}
  1677 +
  1678 +dd.disabled{
  1679 + color: #b5b3b3;
  1680 +}
  1681 +
  1682 +dl.active>dd.disabled{
  1683 + color: #ececec;
  1684 +}
  1685 +
  1686 +#change_user_options-modal .user_info{
  1687 + width: 360px;
  1688 + margin: auto;
  1689 +}
  1690 +
  1691 +.display_hide{
  1692 + display: none;
  1693 +}
  1694 +
  1695 +.ct_eye_icon{
  1696 + font-size: 16px;
  1697 + cursor: pointer;
  1698 +}
  1699 +
  1700 +.ct_eye_icon.active{
  1701 + color: #444;
  1702 +}
  1703 +
  1704 +#tempScheduleContent .forms::-webkit-scrollbar {
  1705 + width: 19px;
  1706 + height: 16px;
  1707 +}
  1708 +
  1709 +.range_2_normal_tt{
  1710 + margin-bottom: 15px;
  1711 + border-top: 1px dashed #c7c7c7;
  1712 + color: #a6a6a6;
  1713 + text-indent: 7px;
  1714 + padding-bottom: 5px;
  1715 +}
  1716 +
  1717 +.cancel_link{
  1718 + font-size: 12px;
  1719 + margin-left: 15px;
  1720 + vertical-align: bottom;
  1721 + color: #8d8d8d;
  1722 + text-decoration: underline;
  1723 + position: absolute;
  1724 + right: 0;
  1725 +}
  1726 +
  1727 +.edit_link{
  1728 + font-size: 12px;
  1729 + margin-left: 15px;
  1730 + vertical-align: bottom;
  1731 + color: #ff2f2f;
  1732 + text-decoration: underline;
1733 } 1733 }
1734 \ No newline at end of file 1734 \ No newline at end of file
src/main/resources/static/real_control_v2/css/main.css
1 -input::-webkit-outer-spin-button,  
2 -input::-webkit-inner-spin-button {  
3 - display: none;  
4 -}  
5 -  
6 -input::-webkit-calendar-picker-indicator {  
7 - display: none;  
8 -}  
9 -  
10 -input::-webkit-datetime-edit {  
11 - padding: 1px;  
12 -}  
13 -  
14 -.ps-container > .ps-scrollbar-y-rail {  
15 - z-index: 1 !important;  
16 -}  
17 -  
18 -.ps-container > .ps-scrollbar-x-rail,  
19 -.ps-container > .ps-scrollbar-y-rail {  
20 - opacity: 0.6 !important;  
21 - padding: 0 !important;  
22 -}  
23 -  
24 -/* ^_^ baidu map hide logo */  
25 -.anchorBL, .anchorBL, .amap-logo, .amap-copyright {  
26 - display: none;  
27 -}  
28 -  
29 -audio, canvas, img, svg, video {  
30 - max-width: none;  
31 -}  
32 -  
33 -html, body {  
34 - width: 100%;  
35 - height: 100%;  
36 - overflow: hidden;  
37 - margin-left: 0 !important;  
38 -}  
39 -  
40 -.main-container {  
41 - height: calc(100% - 120px);  
42 -}  
43 -  
44 -#main-tab-content {  
45 - height: 100%;  
46 - margin-bottom: 0;  
47 -}  
48 -  
49 -::-webkit-scrollbar {  
50 - width: 15px;  
51 - height: 16px;  
52 -}  
53 -  
54 -::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {  
55 - border-radius: 999px;  
56 - border: 5px solid transparent;  
57 -}  
58 -  
59 -::-webkit-scrollbar-track {  
60 - box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset;  
61 -}  
62 -  
63 -::-webkit-scrollbar-thumb {  
64 - min-height: 20px;  
65 - background-clip: content-box;  
66 - box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset;  
67 -}  
68 -  
69 -::-webkit-scrollbar-corner {  
70 - background: transparent;  
71 -}  
72 -  
73 -.uk-modal .uk-form.fv-form, .uk-modal .ct-modal-body {  
74 - margin-bottom: -20px !important;  
75 -}  
76 -  
77 -.uk-modal .uk-form.fv-form.fixed-tool {  
78 - width: 100%;  
79 - position: relative;  
80 - height: 100%;  
81 -}  
82 -  
83 -.uk-modal .ct-modal-body .uk-modal-footer {  
84 - margin-left: 0;  
85 -}  
86 -  
87 -.uk-modal .uk-form.fv-form.fixed-tool .uk-modal-footer {  
88 - position: absolute;  
89 - bottom: 0;  
90 - width: calc(100% - 20px);  
91 -}  
92 -  
93 -table.ct-fixed-table {  
94 - table-layout: fixed;  
95 -}  
96 -  
97 -table.ct-fixed-table tr.context-menu-active {  
98 - background: #f0f0f0;  
99 -}  
100 -  
101 -table.ct-fixed-table.uk-table tr td {  
102 - white-space: nowrap;  
103 - overflow: hidden;  
104 - text-overflow: ellipsis;  
105 -}  
106 -  
107 -table.ct-fixed-table.uk-table .uk-badge {  
108 - padding: 2px 5px;  
109 -}  
110 -  
111 -.horizontal-field {  
112 - vertical-align: middle;  
113 - margin: 0 5px;  
114 -}  
115 -  
116 -.legend-tools {  
117 - float: right;  
118 - font-size: 11px;  
119 -}  
120 -  
121 -.legend-tools a.uk-icon-small {  
122 - margin: 0 5px;  
123 - cursor: pointer;  
124 -}  
125 -  
126 -.text-succ {  
127 - color: #659f13;  
128 -}  
129 -  
130 -.text-err {  
131 - color: red;  
132 -}  
133 -  
134 -.text-grey {  
135 - color: grey;  
136 -}  
137 -  
138 -svg.line-chart {  
139 - width: 100%;  
140 - height: 100%;  
141 - position: absolute;  
142 - left: 0;  
143 -}  
144 -  
145 -svg.line-chart circle.station_circle {  
146 - fill: #5e96d2;  
147 - r: 5.5;  
148 - stroke: rgb(253, 253, 253);  
149 - stroke-width: 3;  
150 - Pointer-events: none;  
151 -}  
152 -  
153 -svg.line-chart circle.station_circle.down {  
154 - fill: #c92121;  
155 -}  
156 -  
157 -svg.line-chart path.station_link {  
158 - stroke-width: 3.5px;  
159 - stroke: #5E96D2;  
160 - Pointer-events: none;  
161 -}  
162 -  
163 -svg.line-chart path.station_link.down {  
164 - stroke: #c92121;  
165 -}  
166 -  
167 -svg.line-chart path.station_link.down.loop_line {  
168 - stroke-dasharray: 4, 3;  
169 - stroke-width: 1px;  
170 -}  
171 -  
172 -svg.line-chart text.station_text {  
173 - writing-mode: tb;  
174 - fill: #3e3e3e;  
175 - letter-spacing: -.2px;  
176 - text-shadow: 0 0 2px #dadada;  
177 - Pointer-events: none;  
178 -}  
179 -  
180 -svg.line-chart text.station_text.up {  
181 - fill: #4556b6;  
182 -}  
183 -  
184 -svg.line-chart text.station_text.down {  
185 - fill: #c94f21;  
186 -}  
187 -  
188 -svg.line-chart g.item:first-child > text {  
189 - stroke: #6f6e6e;  
190 - fill: none;  
191 -}  
192 -  
193 -svg.line-chart g.item:nth-last-child(3) > text {  
194 - stroke: #6f6e6e;  
195 - fill: none;  
196 -}  
197 -  
198 -svg.line-chart g.item:first-child > text.up,  
199 -svg.line-chart g.item:nth-last-child(3) > text.up {  
200 - stroke: #4556b6;  
201 -}  
202 -  
203 -svg.line-chart g.item:first-child > text.down,  
204 -svg.line-chart g.item:nth-last-child(3) > text.down {  
205 - stroke: #c94f21;  
206 -}  
207 -  
208 -svg.line-chart g.gps-wrap > rect {  
209 - width: 30px;  
210 - height: 15px;  
211 - /* fill: #fff; */  
212 - rx: 2px;  
213 - cursor: pointer;  
214 -}  
215 -  
216 -svg.line-chart g.gps-wrap > rect[updown="0"] {  
217 - stroke: rgb(62, 80, 179);  
218 - fill: rgb(62, 80, 179);  
219 -}  
220 -  
221 -svg.line-chart g.gps-wrap > rect[updown="1"] {  
222 - stroke: #c94f21;  
223 - fill: #c94f21;  
224 -}  
225 -  
226 -svg.line-chart g.gps-wrap > rect.hover {  
227 - stroke-width: 2;  
228 -}  
229 -  
230 -svg.line-chart g.gps-wrap > text {  
231 - font-size: 12px;  
232 - transform: translate(0, 12px);  
233 - pointer-events: none;  
234 -}  
235 -  
236 -svg.line-chart g.gps-wrap > text[updown="0"] {  
237 - fill: #fff;  
238 -}  
239 -  
240 -svg.line-chart g.gps-wrap > text[updown="1"] {  
241 - fill: #fff;  
242 -}  
243 -  
244 -svg.line-chart g.gps-wrap > rect.abnormal[updown="0"],  
245 -svg.line-chart g.gps-wrap > rect.abnormal[updown="1"] {  
246 - width: 40px;  
247 - fill: yellow;  
248 - stroke: yellow;  
249 -}  
250 -  
251 -svg.line-chart g.gps-wrap > text.abnormal[updown="0"],  
252 -svg.line-chart g.gps-wrap > text.abnormal[updown="1"] {  
253 - fill: black;  
254 -}  
255 -  
256 -svg.line-chart .merge_hide {  
257 - display: none !important;  
258 -}  
259 -  
260 -svg.line-chart g.merge-item rect {  
261 - width: 22px;  
262 - height: 22px;  
263 - rx: 15px;  
264 - fill: #19a53a;  
265 - cursor: pointer;  
266 - stroke: #19a53a;  
267 - stroke-dasharray: 1, 2;  
268 - stroke-width: 3px;  
269 -}  
270 -  
271 -svg.line-chart g.merge-item text {  
272 - fill: #fff;  
273 - pointer-events: none;  
274 -}  
275 -  
276 -.qtip-multi-gps {  
277 - max-width: 720px !important;  
278 -}  
279 -  
280 -.qtip-bootstrap.qtip-multi-gps .qtip-content {  
281 - padding: 0;  
282 -}  
283 -  
284 -.tooltip {  
285 - position: relative;  
286 - padding-bottom: 160px;  
287 - width: 220px;  
288 -}  
289 -  
290 -.multi-tooltip-wrap {  
291 - width: 100%;  
292 - max-height: 350px;  
293 - overflow: auto;  
294 -}  
295 -  
296 -.tip_map_wrap.multi {  
297 - width: 100%;  
298 - height: 130px;  
299 -}  
300 -  
301 -.tooltip.multi-tooltip {  
302 - width: 160px;  
303 - display: inline-block;  
304 - padding: 10px 0 10px 12px;  
305 - border-right: 1px solid #eeeeee;  
306 - border-bottom: 1px solid #eeeeee;  
307 -}  
308 -  
309 -.tooltip hr {  
310 - border-top: 1px solid #eeeeee;  
311 - width: calc(100% + 30px);  
312 - margin: 7px 0 11px -15px;  
313 -}  
314 -  
315 -.tooltip.multi-tooltip hr {  
316 - width: calc(100% + 16px);  
317 -}  
318 -  
319 -.tooltip .tooltip-container {  
320 - padding: 1px;  
321 -}  
322 -  
323 -.tooltip .tooltip-container div, .tooltip .tooltip-container div a {  
324 - margin: 7px 1px;  
325 - font-size: 13px;  
326 - color: rgb(76, 76, 76);  
327 -}  
328 -  
329 -.tooltip .tooltip-container div.title {  
330 - margin: 8px 1px 12px;  
331 -}  
332 -  
333 -.tooltip .tooltip-container .title a {  
334 - font-size: 18px;  
335 - font-family: 微软雅黑;  
336 -}  
337 -  
338 -.tooltip span.field {  
339 - color: #7d7d7b;  
340 - margin-right: 5px;  
341 - width: 52px;  
342 - display: inline-block;  
343 - text-align: right;  
344 -}  
345 -  
346 -.tooltip .tip_map_wrap {  
347 - position: absolute;  
348 - bottom: -16px;  
349 - left: -15px;  
350 - width: calc(100% + 28px);  
351 - background: #fff;  
352 - height: 165px;  
353 - border-radius: 0 0 5px 5px;  
354 - border-top: 1px solid #e6e4e4;  
355 -}  
356 -  
357 -canvas.crosshair-layer {  
358 - position: absolute;  
359 - width: 100%;  
360 - height: 100%;  
361 - background: rgba(255, 255, 255, 0.33);  
362 - left: 0;  
363 -}  
364 -  
365 -li.map-panel {  
366 - height: 100%;  
367 - position: relative;  
368 -}  
369 -  
370 -.main-container .load-panel {  
371 - display: block;  
372 - color: #999797;  
373 -}  
374 -  
375 -.uk-panel-box-danger {  
376 - background-color: #fff1f0;  
377 - /*color: #d85030;*/  
378 - border-color: rgba(216, 80, 48, .3);  
379 -}  
380 -  
381 -/*.uk-panel-box-danger .uk-panel-title {  
382 - color: #d85030;  
383 -}*/  
384 -  
385 -.uk-badge-default {  
386 - background-color: #a09b9c;  
387 - background-image: -webkit-linear-gradient(top, #9a9898, #8c8687);  
388 - background-image: linear-gradient(to bottom, #9a9898, #8c8687);  
389 -}  
390 -  
391 -.ct-bottom-drawer {  
392 - width: 100%;  
393 - background: rgb(255, 255, 255);  
394 - position: fixed;  
395 - bottom: 0;  
396 - box-shadow: 0 0 10px rgba(0, 0, 0, .3);  
397 - transition: all .3s ease;  
398 - height: 0;  
399 -}  
400 -  
401 -.ct-bottom-drawer.open {  
402 - height: 320px;  
403 -}  
404 -  
405 -.ct-bottom-drawer a.ct-bottom-drawer-close {  
406 - position: absolute;  
407 - right: 10px;  
408 - top: 10px;  
409 - color: #c3c3c3;  
410 - width: 20px;  
411 - line-height: 20px;  
412 - background: #fff;  
413 - text-align: center;  
414 - z-index: 99;  
415 -}  
416 -  
417 -.ct-bottom-drawer a.ct-bottom-drawer-close:hover {  
418 - text-decoration: none;  
419 - color: grey;  
420 -}  
421 -  
422 -.ct-bottom-drawer a.ct-bottom-drawer-close:after {  
423 - display: block;  
424 - content: "\f00d";  
425 - font-family: FontAwesome;  
426 -}  
427 -  
428 -.ct-bottom-drawer-body {  
429 - width: 100%;  
430 - height: 100%;  
431 -}  
432 -  
433 -#station_route_spacing_chart_drawer .svg_wrap {  
434 - width: 80%;  
435 - height: 100%;  
436 - display: inline-block;  
437 - font-size: 14px;  
438 - overflow: hidden;  
439 - position: relative;  
440 -}  
441 -  
442 -#station_route_spacing_chart_drawer .drawer_right_map {  
443 - width: 20%;  
444 - height: 100%;  
445 - display: inline-block;  
446 -}  
447 -  
448 -#station_route_spacing_chart_drawer .svg_cont_body {  
449 - height: 100%;  
450 - position: absolute;  
451 - top: 0;  
452 - left: 0;  
453 -}  
454 -  
455 -#station_route_spacing_chart_drawer svg {  
456 - width: 100%;  
457 - height: 100%;  
458 -}  
459 -  
460 -#station_route_spacing_chart_drawer svg g._item rect {  
461 - stroke: rgb(62, 80, 179);  
462 - fill: rgb(62, 80, 179);  
463 - width: 30px;  
464 - height: 124px;  
465 - rx: 5;  
466 - transform: translate(-15px);  
467 -}  
468 -  
469 -#station_route_spacing_chart_drawer svg g._item text {  
470 - writing-mode: tb;  
471 - transform: translate(0, 9px);  
472 - fill: #fff;  
473 -}  
474 -  
475 -#station_route_spacing_chart_drawer svg g._item path {  
476 - stroke-width: 5.4px;  
477 - stroke: #3e50b3;  
478 -}  
479 -  
480 -#station_route_spacing_chart_drawer svg g._item circle {  
481 - r: 3px;  
482 - fill: #ffffff;  
483 -}  
484 -  
485 -#station_route_spacing_chart_drawer svg g._item path.arc_path {  
486 - stroke-width: 1.3px;  
487 - stroke: #3e50b3;  
488 - stroke-dasharray: 1000;  
489 - stroke-dashoffset: 1000;  
490 - fill: none;  
491 -  
492 - animation: dash .9s;  
493 - webkit-amimation: dash .9s;  
494 - animation-fill-mode: forwards;  
495 - -webkit-animation-fill-mode: forwards;  
496 -}  
497 -  
498 -@keyframes dash {  
499 - to {  
500 - stroke-dashoffset: 0;  
501 - stroke-dasharray: 4, 4;  
502 - }  
503 -}  
504 -  
505 -@-webkit-keyframes dash {  
506 - to {  
507 - stroke-dashoffset: 0;  
508 - stroke-dasharray: 4, 4;  
509 - }  
510 -}  
511 -  
512 -#station_route_spacing_chart_drawer svg g._item text.distance_text {  
513 - writing-mode: horizontal-tb;  
514 - fill: #3e50b3;  
515 -}  
516 -  
517 -#station_route_spacing_chart_drawer svg g._item rect.distance_rect {  
518 - height: 20px;  
519 - width: 40px;  
520 - fill: #fff !important;  
521 - stroke-width: 0;  
522 -}  
523 -  
524 -#station_route_spacing_chart_drawer .tl_desc_text {  
525 - position: absolute;  
526 - top: 5px;  
527 - left: 5px;  
528 - font-size: 12px;  
529 - color: #525050;  
530 - font-family: 微软雅黑;  
531 -}  
532 -  
533 -#station_route_spacing_chart_drawer svg g._item:first-child circle {  
534 - fill: #3e50b3;  
535 - r: 6px;  
536 -}  
537 -  
538 -#station_route_spacing_chart_drawer svg g._item:last-child circle {  
539 - fill: #3e50b3;  
540 - r: 6px;  
541 -}  
542 -  
543 -/* 下行 */  
544 -#station_route_spacing_chart_drawer svg.down g._item rect {  
545 - stroke: #dd3829;  
546 - fill: #dd3829;  
547 -}  
548 -  
549 -#station_route_spacing_chart_drawer svg.down g._item path {  
550 - stroke: #dd3829;  
551 -}  
552 -  
553 -#station_route_spacing_chart_drawer svg.down g._item:first-child circle {  
554 - fill: #dd3829;  
555 -}  
556 -  
557 -#station_route_spacing_chart_drawer svg.down g._item text.distance_text {  
558 - fill: #dd3829;  
559 -}  
560 -  
561 -#station_route_spacing_chart_drawer svg.down g._item path.arc_path {  
562 - stroke: #dd3829;  
563 -}  
564 -  
565 -#station_route_spacing_chart_drawer svg.down g._item:last-child circle {  
566 - fill: #dd3829;  
567 -}  
568 -  
569 -.svg-edit-panel-wrap {  
570 - width: 48%;  
571 - border: 1px solid #e1d3d3;  
572 - padding: 12px 0 0 0;  
573 - border-radius: 4px;  
574 - position: relative;  
575 - display: inline-block;  
576 - vertical-align: top;  
577 - height: 440px;  
578 -}  
579 -  
580 -.svg-edit-panel-wrap .title-badge {  
581 - position: absolute;  
582 - top: -10px;  
583 - left: 7px;  
584 - font-size: 13px;  
585 - background: #fff;  
586 - padding: 0 3px;  
587 - color: #888888;  
588 -}  
589 -  
590 -.svg-edit-panel-wrap .rename-tools {  
591 - height: 21px;  
592 - padding: 0 0 0 9px;  
593 -}  
594 -  
595 -.svg-edit-panel-wrap .rename-item-panel {  
596 - border-bottom: 1px solid #ede5e5;  
597 - padding: 4px;  
598 -}  
599 -  
600 -.svg-edit-panel-wrap .rename-item-panel select {  
601 - width: 150px;  
602 -}  
603 -  
604 -.svg-edit-panel-wrap .rename-item-panel input {  
605 - margin-left: 7px;  
606 -}  
607 -  
608 -.svg-edit-panel-wrap .rename-item-panel input[type=checkbox] {  
609 - margin-top: 2px;  
610 - margin-right: 4px;  
611 -}  
612 -  
613 -.svg-edit-panel-wrap .rename-item-panel.active {  
614 - background: #65c9f8;  
615 - box-shadow: 0px 3px 7px 0 rgba(101, 201, 248, 0.48), 0px 1px 4px 0 rgba(101, 201, 248, 0.32);  
616 -}  
617 -  
618 -.svg-edit-panel-wrap .rename-item-panel.active select,  
619 -.svg-edit-panel-wrap .rename-item-panel.active input {  
620 - background: #65c9f8;  
621 - color: #fff;  
622 -}  
623 -  
624 -.svg-edit-panel-wrap .rename-item-panel.active i {  
625 - color: #e4f6ff;  
626 -}  
627 -  
628 -.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox] {  
629 - border: none;  
630 -}  
631 -  
632 -.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox]:before {  
633 - color: #fff;  
634 -}  
635 -  
636 -.svg-edit-panel-wrap .rename-tools a {  
637 - font-size: 14px;  
638 - padding: 5px;  
639 -}  
640 -  
641 -.svg-edit-panel-wrap .rename-tools a:hover {  
642 - background: #e8edef;  
643 - border-radius: 5px;  
644 -}  
645 -  
646 -.station-list {  
647 - width: 190px;  
648 - padding: 2px 7px;  
649 - height: 100%;  
650 - overflow: auto;  
651 - display: inline-block;  
652 -}  
653 -  
654 -.station-list .station-item {  
655 - padding: 3px 0;  
656 - margin: 5px 0;  
657 - border-radius: 3px;  
658 - font-size: 13px;  
659 - text-indent: 7px;  
660 - cursor: pointer;  
661 - white-space: nowrap;  
662 - overflow: hidden;  
663 - text-overflow: ellipsis;  
664 -}  
665 -  
666 -.station-list .station-item.disable,  
667 -.station-list .station-item.disable:hover {  
668 - background: #d5c9c9 !important;  
669 - color: #686565 !important;  
670 -}  
671 -  
672 -.station-list.up .station-item {  
673 - background: #5364c3;  
674 - color: white;  
675 -}  
676 -  
677 -.station-list.up .station-item:hover {  
678 - box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);  
679 - background: #4556b6;  
680 -}  
681 -  
682 -.station-list.down .station-item {  
683 - background: #f95858;  
684 - color: white;  
685 -}  
686 -  
687 -.station-list.down .station-item:hover {  
688 - box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);  
689 - background: #e95151;  
690 -}  
691 -  
692 -.modal-dotted-hr {  
693 - height: 1px;  
694 - border: none;  
695 - border-top: 1px dashed #d1d1d1;  
696 - width: calc(100% + 40px);  
697 - margin-left: -20px;  
698 -}  
699 -  
700 -#add-sub-task-range_turn-modal .main-sch-panel {  
701 - height: 60px;  
702 - border: 1px solid #dddddd;  
703 - border-radius: 5px;  
704 - position: relative;  
705 - padding: 20px 0 0 8px;  
706 -}  
707 -  
708 -#add-sub-task-range_turn-modal .main-sch-panel:before {  
709 - content: '主任务';  
710 - position: absolute;  
711 - top: -10px;  
712 - left: 10px;  
713 - background: #fff;  
714 - padding: 0 4px;  
715 - font-size: 12px;  
716 - color: #adadad;  
717 -}  
718 -  
719 -.ct_row {  
720 - font-size: 0;  
721 -}  
722 -  
723 -.ct_row .ct_cell {  
724 - display: inline-block;  
725 - font-size: 13px;  
726 - white-space: nowrap;  
727 - overflow: hidden;  
728 - text-overflow: ellipsis;  
729 -}  
730 -  
731 -.ct_row .ct_cell label {  
732 - color: #979393;  
733 - margin-right: 3px;  
734 -}  
735 -  
736 -.ct_row .ct_cell.c_1_3 {  
737 - width: 33%;  
738 -}  
739 -  
740 -#schedule-lp_change-modal .sch-list dl dd {  
741 - font-size: 14px;  
742 -}  
743 -  
744 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(1) {  
745 - width: 5%;  
746 - border-left: 1px solid #dedede;  
747 -}  
748 -  
749 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(2) {  
750 - width: 22%;  
751 -}  
752 -  
753 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(3) {  
754 - width: 17%;  
755 -}  
756 -  
757 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) {  
758 - width: 10%;  
759 -}  
760 -  
761 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) {  
762 - width: 21%;  
763 -}  
764 -  
765 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(6) {  
766 - width: 10%;  
767 -}  
768 -  
769 -#schedule-lp_change-modal .sch-list dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(7) {  
770 - width: 14%;  
771 -}  
772 -  
773 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) {  
774 - width: 5%;  
775 - border-left: 1px solid #dedede;  
776 -}  
777 -  
778 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(2) {  
779 - width: 14%;  
780 -}  
781 -  
782 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(3) {  
783 - width: 10%;  
784 -}  
785 -  
786 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(4) {  
787 - width: 21%;  
788 -}  
789 -  
790 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(5) {  
791 - width: 10%;  
792 -}  
793 -  
794 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(6) {  
795 - width: 17%;  
796 -}  
797 -  
798 -#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(7) {  
799 - width: 22%;  
800 -}  
801 -  
802 -#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active {  
803 - background: #b9d2ff;  
804 -}  
805 -  
806 -#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active dd {  
807 - border-top: 1px solid #b9d2ff;  
808 -}  
809 -  
810 -#schedule-lp_change-modal .ct_table.sch-list dl.active input[type=checkbox] {  
811 - border: none;  
812 -}  
813 -  
814 -#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active {  
815 - background: #ffe2b9;  
816 -}  
817 -  
818 -#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active dd {  
819 - border-top: 1px solid #ffe2b9;  
820 -}  
821 -  
822 -#cache_data_manage-modal .uk-table td {  
823 - vertical-align: bottom;  
824 -}  
825 -  
826 -#cache_data_manage-modal .uk-table td,  
827 -#cache_data_manage-modal .uk-table th {  
828 - padding: 8px 8px 6px;  
829 -}  
830 -  
831 -.ps-help-panel {  
832 - color: grey;  
833 - padding: 5px 2px;  
834 -}  
835 -  
836 -.ps-help-panel small {  
837 - display: block;  
838 -}  
839 -  
840 -svg text.offline {  
841 - fill: #6f6a6a !important;  
842 -}  
843 -  
844 -svg rect.offline {  
845 - stroke: #dbdada !important;  
846 - fill: #dbdada !important;  
847 -}  
848 -  
849 -.tooltip .tooltip-container .title a > .abnormal-text {  
850 - font-size: 14px;  
851 - color: #ff5e5e;  
852 - font-weight: 600;  
853 -}  
854 -  
855 -#addChildTaskBtn {  
856 - margin-left: 5px;  
857 - color: #36729b;  
858 - padding: 1px 5px 1px 6px;  
859 -}  
860 -  
861 -#addChildTaskBtn:hover {  
862 - box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.2), 0px 3px 8px 0 rgba(0, 0, 0, 0.19);  
863 -}  
864 -  
865 -.edit-icon {  
866 - color: #aba9a9;  
867 - font-size: 12px;  
868 - margin-left: 5px;  
869 - display: none;  
870 -}  
871 -  
872 -.operation-real-text {  
873 - position: absolute;  
874 - top: 9px;  
875 - width: 100%;  
876 - left: 0;  
877 - text-align: center;  
878 - pointer-events: none;  
879 -}  
880 -  
881 -.operation-real-text span {  
882 - padding: 15px;  
883 - background: #ff4f4f;  
884 - color: white;  
885 - box-shadow: 0px 4px 6px 0 rgba(0, 0, 0, 0.2), 0px 4px 10px 0 rgba(0, 0, 0, 0.19);  
886 - border-radius: 1px 1px 4px 4px;  
887 -}  
888 -  
889 -#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-label {  
890 - width: 120px;  
891 -}  
892 -  
893 -#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-controls {  
894 - margin-left: 125px;  
895 -}  
896 -  
897 -#oil_station-modal .uk-form-icon > [class*=uk-icon-] {  
898 - right: 23px;  
899 -}  
900 -  
901 -#oil_station-modal .uk-form-icon:not(.uk-form-icon-flip) > input {  
902 - padding-left: 10px !important;  
903 -}  
904 -  
905 -#oil_station-modal .uk-form-icon {  
906 - width: calc(100% - 145px);  
907 -}  
908 -  
909 -#oil_station-modal .uk-icon-mile:before {  
910 - content: '公里';  
911 -}  
912 -  
913 -#oil_station-modal .uk-icon-minute:before {  
914 - content: '分钟';  
915 -}  
916 -  
917 -option.oil_station_opt {  
918 - color: red;  
919 -}  
920 -  
921 -#oil_station-modal .uk-modal .uk-form.fv-form {  
922 - margin-bottom: 0 !important;  
923 -}  
924 -  
925 -#gb_wait_modal .uk-modal-spinner {  
926 - top: 25px;  
927 - -webkit-transform: translate(-50%, 0);  
928 - transform: translate(-50%, 0);  
929 -}  
930 -  
931 -#gb_wait_modal .wait-modal-text {  
932 - text-align: center;  
933 - margin-top: 35px;  
934 - font-size: 15px;  
935 - color: #635e5e;  
936 -}  
937 -  
938 -.park-and-station-wrap {  
939 - margin-top: 25px;  
940 - border: 1px solid #b9b9b9;  
941 - width: 580px;  
942 - padding: 12px;  
943 - border-radius: 5px;  
944 - box-shadow: 0 2px 5px rgba(0,0,0,.1);  
945 - margin-bottom: 15px;  
946 -}  
947 -  
948 -.park-and-station-wrap select {  
949 - width: auto !important;  
950 -}  
951 -  
952 -.park-and-station-wrap>span{  
953 - vertical-align: middle;  
954 - margin-top: 9px;  
955 - display: inline-block;  
956 -}  
957 -  
958 -/** 安全驾驶相关css */  
959 -.safe_driv_pop_wrap {  
960 - position: absolute;  
961 - right: 12px;  
962 - bottom: 12px;  
963 - z-index: 99;  
964 -}  
965 -  
966 -.safe_driv_pop {  
967 - background: #d44b4b;  
968 - font-size: 15px;  
969 - padding: 9px 10px 0;  
970 - border: 1px solid #f4f0f0;  
971 - border-radius: 5px;  
972 - cursor: pointer;  
973 - box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);  
974 - transition: all .03s;  
975 - color: #f2f2f2;  
976 -}  
977 -  
978 -.safe_driv_pop:hover {  
979 - background: #bc2a2a;  
980 -}  
981 -  
982 -.safe_driv_pop .title {  
983 -}  
984 -  
985 -.safe_driv_pop .desc {  
986 - display: block;  
987 - font-size: 12px;  
988 - color: #ff9d9d;  
989 - text-align: right;  
990 - margin-right: 5px;  
991 -}  
992 -  
993 -/** 嵌入表单modal滚动条样式 */  
994 -#formFragmentModal::-webkit-scrollbar {  
995 - width: 10px;  
996 - background-color: #F5F5F5;  
997 -}  
998 -  
999 -#formFragmentModal::-webkit-scrollbar-thumb {  
1000 - background-color: #000000;  
1001 -}  
1002 -  
1003 -#formFragmentModal::-webkit-scrollbar-track {  
1004 - border: 0;  
1005 - background-color: #F5F5F5;  
1006 - border-radius: 0;  
1007 -}  
1008 -  
1009 -#formFragmentModal::-webkit-scrollbar-thumb {  
1010 - border: 5px solid rgb(226, 122, 122);  
1011 -}  
1012 -  
1013 -#schedule-addsch_oil-modal select {  
1014 - height: 30px !important;  
1015 -}  
1016 -  
1017 -#oil_station-modal .input_clear_icon {  
1018 - position: absolute;  
1019 - top: 6px;  
1020 - right: 108px;  
1021 - color: #f75757;  
1022 - height: 18px;  
1023 - line-height: 18px;  
1024 - border-radius: 7px;  
1025 - font-size: 16px;  
1026 - display: none;  
1027 - cursor: pointer;  
1028 -}  
1029 -  
1030 -#oil_station-modal .input_clear_icon:hover {  
1031 - color: #de2020;  
1032 -}  
1033 -  
1034 -#oil_station-modal .input_clear_icon:before {  
1035 - display: block;  
1036 - font-family: FontAwesome;  
1037 - content: "\f057";  
1038 -}  
1039 -  
1040 -#oil_station-modal input.readonly {  
1041 - background: #dddddd;  
1042 -}  
1043 -  
1044 -.ct_tags {  
1045 - margin-bottom: 12px;  
1046 -}  
1047 -  
1048 -.ct_tags > span {  
1049 - padding: 3px 7px;  
1050 - background: #e8e8e8;  
1051 - color: #3a3939;  
1052 - cursor: pointer;  
1053 - margin-right: 5px;  
1054 -}  
1055 -  
1056 -.ct_tags > span.active {  
1057 - background: #62a9e1;  
1058 - color: white;  
1059 - box-shadow: 0 0 4px rgba(0, 0, 0, 0.35);  
1060 -}  
1061 -  
1062 -.ct_tags > span.active:before {  
1063 - content: "\f00c";  
1064 - font-family: FontAwesome;  
1065 - margin-right: 2px;  
1066 - font-size: 13px;  
1067 -}  
1068 -  
1069 -.ct_tags > span:hover {  
1070 - box-shadow: 0 0 4px rgba(0, 0, 0, .3);  
1071 -}  
1072 -  
1073 -span.late-badge {  
1074 - height: 20px;  
1075 - line-height: 20px;  
1076 - margin-top: 8px;  
1077 - color: grey;  
1078 - margin-left: 2px;  
1079 -}  
1080 -  
1081 -dl.intimity span.late-badge {  
1082 - color: #fbfbfb;  
1083 -}  
1084 -  
1085 -/** badge tooltip */  
1086 -.uk-badge.c_task:hover,  
1087 -.uk-badge.sch_region:hover {  
1088 - background-image: none;  
1089 - background: #38b3e1;  
1090 - border: 1px solid #7ebad1;  
1091 -}  
1092 -  
1093 -.uk-badge.out:hover {  
1094 - background-image: none;  
1095 - background: #8fc650;  
1096 - border: 1px solid #949f86;  
1097 -}  
1098 -  
1099 -.uk-badge.in:hover {  
1100 - background-image: none;  
1101 - background: #fabc64;  
1102 - border: 1px solid #a68c67;  
1103 -}  
1104 -  
1105 -.qtip.sch-badge-tip {  
1106 - max-width: 700px;  
1107 -}  
1108 -  
1109 -.tip_task_list {  
1110 - width: 530px;  
1111 - margin-bottom: -10px;  
1112 -}  
1113 -  
1114 -.tip_task_list dl {  
1115 - font-size: 0;  
1116 - border-bottom: 1px solid #e6e6e6;  
1117 - margin: 0;  
1118 -}  
1119 -  
1120 -.tip_task_list dl:last-child {  
1121 - border-bottom: none;  
1122 -}  
1123 -  
1124 -.tip_task_list dl dt,  
1125 -.tip_task_list dl dd {  
1126 - display: inline-block;  
1127 - font-size: 13px;  
1128 - white-space: nowrap;  
1129 - overflow: hidden;  
1130 - text-overflow: ellipsis;  
1131 - height: 24px;  
1132 - line-height: 24px;  
1133 -}  
1134 -  
1135 -.tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1) {  
1136 - width: 38px;  
1137 - border-right: 1px solid #c8c8c8;  
1138 -}  
1139 -  
1140 -.tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2) {  
1141 - width: 18%;  
1142 - text-indent: 5px;  
1143 -}  
1144 -  
1145 -.tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3) {  
1146 - width: 11%;  
1147 -}  
1148 -  
1149 -.tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4) {  
1150 - width: 25%;  
1151 -}  
1152 -  
1153 -.tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5) {  
1154 - width: 25%;  
1155 -}  
1156 -  
1157 -.tip_task_list dl dt:nth-of-type(6), .tip_task_list dl dd:nth-of-type(6) {  
1158 - width: 12%;  
1159 -}  
1160 -  
1161 -.tip_task_list dl dd:nth-of-type(1) a {  
1162 - color: #3c3c3c;  
1163 - text-decoration: underline;  
1164 - font-size: 12px;  
1165 -}  
1166 -  
1167 -.tip_task_list dl.service {  
1168 - color: blue;  
1169 -}  
1170 -  
1171 -.tip_task_list dl.service.destroy {  
1172 - color: red;  
1173 -}  
1174 -  
1175 -.tip_task_list dl.service.temp_add {  
1176 - color: #9C27B0;  
1177 -}  
1178 -  
1179 -.tip_task_list dl span {  
1180 - margin: 0;  
1181 - width: auto;  
1182 -}  
1183 -  
1184 -ul.left_tabs_lg {  
1185 - border: 1px solid #efeded;  
1186 - height: 100%;  
1187 - background: #fafafa;  
1188 -}  
1189 -  
1190 -ul.left_tabs_lg li {  
1191 - line-height: 40px;  
1192 - font-size: 15px;  
1193 -}  
1194 -  
1195 -#schedule-addsch-modal .uk-modal-footer {  
1196 - border-top: none;  
1197 - background: none;  
1198 -}  
1199 -  
1200 -.ct_line_lp_badge {  
1201 - float: left;  
1202 - margin-top: 6px;  
1203 - background: #e0e0e0;  
1204 - padding: 2px 7px;  
1205 - border-radius: 3px;  
1206 -}  
1207 -  
1208 -.uk-badge.sch_ldks {  
1209 - background: #8c8c8c;  
1210 - background-image: linear-gradient(to bottom, #a7a7a7, #8c8c8c);  
1211 -}  
1212 -  
1213 -.ct_layer_modal {  
1214 - background: #e5e5e5;  
1215 - height: 100%;  
1216 - width: 100%;  
1217 - overflow: auto;  
1218 -}  
1219 -  
1220 -.layui-layer-setwin {  
1221 -  
1222 -}  
1223 -  
1224 -.device_config_table dl dt:nth-of-type(1), .device_config_table dl dd:nth-of-type(1) {  
1225 - width: 7%;  
1226 - text-indent: 10px;  
1227 -}  
1228 -  
1229 -.device_config_table dl dt:nth-of-type(2), .device_config_table dl dd:nth-of-type(2) {  
1230 - width: 7%;  
1231 -}  
1232 -  
1233 -.device_config_table dl dt:nth-of-type(3), .device_config_table dl dd:nth-of-type(3) {  
1234 - width: 8%;  
1235 -}  
1236 -  
1237 -.device_config_table dl dt:nth-of-type(4), .device_config_table dl dd:nth-of-type(4) {  
1238 - width: 5%;  
1239 -}  
1240 -  
1241 -.device_config_table dl dt:nth-of-type(5), .device_config_table dl dd:nth-of-type(5) {  
1242 - width: 4%;  
1243 -}  
1244 -  
1245 -.device_config_table dl dt:nth-of-type(6), .device_config_table dl dd:nth-of-type(6) {  
1246 - width: 4%;  
1247 -}  
1248 -  
1249 -.device_config_table dl dt:nth-of-type(7), .device_config_table dl dd:nth-of-type(7) {  
1250 - width: 4%;  
1251 -}  
1252 -  
1253 -.device_config_table dl dt:nth-of-type(8), .device_config_table dl dd:nth-of-type(8) {  
1254 - width: 5%;  
1255 -}  
1256 -  
1257 -.device_config_table dl dt:nth-of-type(9), .device_config_table dl dd:nth-of-type(9) {  
1258 - width: 5%;  
1259 -}  
1260 -  
1261 -.device_config_table dl dt:nth-of-type(10), .device_config_table dl dd:nth-of-type(10) {  
1262 - width: 8%;  
1263 -}  
1264 -  
1265 -.device_config_table dl dt:nth-of-type(11), .device_config_table dl dd:nth-of-type(11) {  
1266 - width: 5%;  
1267 -}  
1268 -  
1269 -.device_config_table dl dt:nth-of-type(12), .device_config_table dl dd:nth-of-type(12) {  
1270 - width: 5%;  
1271 -}  
1272 -  
1273 -.device_config_table dl dt:nth-of-type(13), .device_config_table dl dd:nth-of-type(13) {  
1274 - width: 4%;  
1275 -}  
1276 -  
1277 -.device_config_table dl dt:nth-of-type(14), .device_config_table dl dd:nth-of-type(14) {  
1278 - width: 4%;  
1279 -}  
1280 -  
1281 -.device_config_table dl dt:nth-of-type(15), .device_config_table dl dd:nth-of-type(15) {  
1282 - width: 4%;  
1283 -}  
1284 -  
1285 -.device_config_table dl dt:nth-of-type(16), .device_config_table dl dd:nth-of-type(16) {  
1286 - width: 3%;  
1287 -}  
1288 -  
1289 -.device_config_table dl dt:nth-of-type(17), .device_config_table dl dd:nth-of-type(17) {  
1290 - width: 4%;  
1291 -}  
1292 -  
1293 -.device_config_table dl dt:nth-of-type(18), .device_config_table dl dd:nth-of-type(18) {  
1294 - width: 13%;  
1295 -}  
1296 -  
1297 -.uk-tooltip {  
1298 - z-index: 29999999 !important;  
1299 -}  
1300 -  
1301 -.device_config_table.ct_table dl dd,  
1302 -.device_config_table.ct_table dl dt {  
1303 - border-right: 1px solid #dedede !important;  
1304 -}  
1305 -  
1306 -.device_configs_manager .search_form {  
1307 - text-indent: 12px;  
1308 - margin-bottom: 0;  
1309 - padding: 18px 5px;  
1310 -}  
1311 -  
1312 -.sub_task_form_v2 {  
1313 - background: #f9f9f9;  
1314 - padding: 12px 15px;  
1315 - border-radius: 5px 0 5px 5px;  
1316 - border: 1px solid #dfdfdf;  
1317 - position: relative;  
1318 - margin-bottom: 20px;  
1319 -}  
1320 -  
1321 -.task_form_close_icon {  
1322 - background: #f9f9f9;  
1323 - padding: 0px 4px;  
1324 - position: absolute;  
1325 - top: -8px;  
1326 - right: -8px;  
1327 - color: #898989;  
1328 - font-size: 15px;  
1329 - border: 1px solid #dfdfdf;  
1330 - border-radius: 100%;  
1331 - border-left: none;  
1332 - border-bottom: none;  
1333 - transition: all .03s;  
1334 -}  
1335 -  
1336 -.task_form_close_icon:hover {  
1337 - border: 1px solid #ff1515;  
1338 - border-left: none;  
1339 - border-bottom: none;  
1340 - color: #e03e3e;  
1341 -}  
1342 -  
1343 -.sub_task_form_v2:hover::after {  
1344 - color: #5f5b5b;  
1345 -}  
1346 -  
1347 -.sub_task_form_v2.uk-form-horizontal .uk-form-label {  
1348 - width: 80px;  
1349 -}  
1350 -  
1351 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls {  
1352 - margin-left: 85px;  
1353 -}  
1354 -  
1355 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text],  
1356 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time],  
1357 -.sub_task_form_v2.uk-form-horizontal .uk-form-controls select {  
1358 - width: 100%;  
1359 -}  
1360 -  
1361 -#add-sub-task-main-modal .uk-modal-footer {  
1362 - background: none;  
1363 - border-top: none;  
1364 -}  
1365 -  
1366 -#add-sub-task-main-modal .uk-grid + .uk-grid {  
1367 - margin-top: 12px;  
1368 -}  
1369 -  
1370 -#add-sub-task-main-modal .plus_icon_span {  
1371 - font-size: 26px;  
1372 - color: #b2b2b2;  
1373 - padding: 10px 64px;  
1374 - display: inline-block;  
1375 - border: 1px dashed grey;  
1376 - margin: 15px 0;  
1377 - border-radius: 5px;  
1378 - cursor: pointer;  
1379 -}  
1380 -  
1381 -#add-sub-task-main-modal .uk-animation-fade {  
1382 - animation-duration: .3s;  
1383 -}  
1384 -  
1385 -#add-sub-task-main-modal .forms {  
1386 - max-height: 642px;  
1387 - overflow-y: auto;  
1388 - overflow-x: hidden;  
1389 - padding: 8px 8px 0 0;  
1390 -}  
1391 -  
1392 -.add_custom_wrap .forms .sub_task_form_v2:last-child {  
1393 - margin-bottom: 0;  
1394 -}  
1395 -  
1396 -.sub_task_form_v2.destroy_form {  
1397 - background-color: #fff5f4 !important;  
1398 -}  
1399 -  
1400 -.uk-form > .half_change_car_box {  
1401 - margin: -10px 0 15px;  
1402 - padding: 3px 5px;  
1403 - display: inline-block;  
1404 - border: 1px solid #dfdddd;  
1405 - color: #918f8f;  
1406 -}  
1407 -  
1408 -.half_change_car_box input[type=checkbox] {  
1409 - vertical-align: top;  
1410 -}  
1411 -  
1412 -.uk-form > .half_change_car_box.active {  
1413 - background: #4CAF50;  
1414 - color: #fff;  
1415 -}  
1416 -  
1417 -.uk-form > .half_change_car_box.active input[type=checkbox] {  
1418 - background: #4caf50;  
1419 - border-color: #4caf50;  
1420 -}  
1421 -  
1422 -.uk-form > .half_change_car_box.active input[type=checkbox]:before {  
1423 - color: #ffffff;  
1424 -}  
1425 -  
1426 -.sub_task_form_v2.change_car {  
1427 - z-index: 99;  
1428 -}  
1429 -  
1430 -.st_range_top_form {  
1431 - padding: 0 0 15px 5px;  
1432 - border: 1px solid #c4bb76;  
1433 - background: #e5e1c1;  
1434 - margin-bottom: 15px;  
1435 - box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19);  
1436 -}  
1437 -  
1438 -.st_range_top_form .uk-form-row {  
1439 - margin-top: 20px;  
1440 -}  
1441 -  
1442 -.uk-form-horizontal.st_range_top_form .uk-form-label {  
1443 - width: 80px;  
1444 -}  
1445 -  
1446 -.uk-form-horizontal.st_range_top_form .uk-form-controls {  
1447 - margin-left: 84px;  
1448 -}  
1449 -  
1450 -.uk-form-horizontal.st_range_top_form .uk-form-controls select {  
1451 - width: calc(100% - 2px);  
1452 -}  
1453 -  
1454 -.sub_task_form_v2.service_st_form {  
1455 - background: #f4faff;  
1456 -}  
1457 -  
1458 -.uk-modal .uk-form.fv-form.sub_task_form_v2 {  
1459 - margin-bottom: 20px !important;  
1460 -}  
1461 -  
1462 -.sub_task_table_wrap .ct_table > .ct_table_body {  
1463 - border-bottom: none;  
1464 -}  
1465 -  
1466 -.err_panel {  
1467 - font-size: 12px;  
1468 - color: #7e7d7d;  
1469 - font-family: 微软雅黑;  
1470 - margin-top: 5px;  
1471 -}  
1472 -  
1473 -#schedule-lp_change-modal .ct_table dl {  
1474 - height: 35px;  
1475 -}  
1476 -  
1477 -#schedule-lp_change-modal .ct_table dl dd, #schedule-lp_change-modal .ct_table dl dt {  
1478 - line-height: 35px;  
1479 -}  
1480 -  
1481 -/*  
1482 -.sub_task_form_v2.repeat_main:before{  
1483 - content: '复';  
1484 - position: absolute;  
1485 - top: -10px;  
1486 - font-size: 12px;  
1487 - color: #2196F3;  
1488 - background: #ffffff;  
1489 - padding: 0 3px;  
1490 - font-weight: 600;  
1491 -}*/  
1492 -  
1493 -.sub_task_form_v2:before {  
1494 - position: absolute;  
1495 - top: -7px;  
1496 - font-size: 12px;  
1497 - padding: 0 3px;  
1498 - font-weight: 600;  
1499 - line-height: 14px;  
1500 -}  
1501 -  
1502 -.sub_task_form_v2.destroy_form:before {  
1503 - content: '烂班' !important;  
1504 - color: #f14235 !important;  
1505 - background: #ffffff !important;  
1506 -}  
1507 -  
1508 -.sub_task_form_v2.service_form:before {  
1509 - content: '营运';  
1510 - color: #2196F3;  
1511 - background: #ffffff;  
1512 -}  
1513 -  
1514 -.sub_task_form_v2.service_form.temp_service:before {  
1515 - content: '营运 (临加)';  
1516 - color: #9C27B0;  
1517 - background: #ffffff;  
1518 -}  
1519 -  
1520 -.sub_task_form_v2.service_form.temp_service {  
1521 - background: #faf0fd;  
1522 -}  
1523 -  
1524 -.sub_task_form_v2.empty_form:before {  
1525 - content: '空驶';  
1526 - color: #928f92;  
1527 - background: #ffffff;  
1528 -}  
1529 -  
1530 -.sub_task_form_v2.service_form {  
1531 - background: #f4faff;  
1532 -}  
1533 -  
1534 -/*.sub_task_form_v2.repeat_main.destroy_form:before{  
1535 - color: #F44336;  
1536 -}  
1537 -  
1538 -.sub_task_form_v2.repeat_main{  
1539 - background: #f4faff;  
1540 -}*/  
1541 -.footer_tools {  
1542 - position: absolute;  
1543 - left: 235px;  
1544 - bottom: 19px;  
1545 -}  
1546 -  
1547 -.footer_mileage_count {  
1548 - border: 1px solid #f2f2f2;  
1549 - padding: 5px;  
1550 - box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.2), 0px 2px 7px 0 rgba(0, 0, 0, 0.19);  
1551 - display: inline-block;  
1552 -}  
1553 -  
1554 -.footer_mileage_count > span {  
1555 - padding: 2px 5px;  
1556 -}  
1557 -  
1558 -.footer_mileage_count > span.service_sum {  
1559 - color: #2196F3;  
1560 -}  
1561 -  
1562 -.footer_mileage_count > span.empty_sum {  
1563 - color: #636363;  
1564 -}  
1565 -  
1566 -.footer_mileage_count > span.destroy_sum {  
1567 - color: #f5574b;  
1568 -}  
1569 -  
1570 -.station_to_park_link {  
1571 - display: inline-block;  
1572 - margin-left: 15px;  
1573 - vertical-align: bottom;  
1574 - font-size: 12px;  
1575 -}  
1576 -  
1577 -.station_to_park_link > a {  
1578 - color: #607D8B;  
1579 -}  
1580 -  
1581 -#station_to_park-modal.ct-form-modal form input[type=text],  
1582 -#station_to_park-modal.ct-form-modal form select {  
1583 - width: auto;  
1584 -}  
1585 -  
1586 -.s_2_park_form_wrap {  
1587 - background: #fafafa;  
1588 - border: 1px solid #e5e5e5;  
1589 - padding: 7px 16px;  
1590 - margin: 15px 0;  
1591 - position: relative;  
1592 -}  
1593 -  
1594 -.s_2_park_form_wrap .ct_close {  
1595 - position: absolute;  
1596 - top: -12px;  
1597 - padding: 0 4px;  
1598 - right: -8px;  
1599 - color: #939393;  
1600 - border: 1px solid #f7dfdf;  
1601 - border-radius: 25px;  
1602 - cursor: pointer;  
1603 -}  
1604 -  
1605 -.s_2_park_form_wrap .ct_close:hover {  
1606 - background: #e5e5e5;  
1607 - color: #fd6e6e;  
1608 -}  
1609 -  
1610 -.s_2_park_form_wrap label {  
1611 - color: #666;  
1612 - font-size: 13px;  
1613 -}  
1614 -  
1615 -#station_to_park-modal.ct-form-modal form input[readonly] {  
1616 - background: #fafafa;  
1617 -}  
1618 -  
1619 -.s_2_park_form_wrap .bottom_label {  
1620 - margin-top: 25px;  
1621 - display: block;  
1622 -}  
1623 -  
1624 -.s_2_park_form_wrap .bottom_label_2 {  
1625 - margin-top: 4px;  
1626 - display: block;  
1627 -}  
1628 -  
1629 -.ct_describe {  
1630 - font-size: 12px;  
1631 - color: #909090;  
1632 - font-family: FontAwesome;  
1633 -}  
1634 -  
1635 -.ct_describe:before {  
1636 - content: "\f059";  
1637 - margin-right: 3px;  
1638 -}  
1639 -  
1640 -#add-sub-task-main-modal abbr {  
1641 - display: inline-block;  
1642 - font-size: 12px;  
1643 - margin-left: 25px;  
1644 - vertical-align: bottom;  
1645 - color: #929292;  
1646 -}  
1647 -  
1648 -#all-devices-modal .search-form input[type=text] {  
1649 - width: 100px;  
1650 -}  
1651 -  
1652 -#all-devices-modal .auto-refresh {  
1653 - vertical-align: middle;  
1654 - margin-left: 5px;  
1655 - color: grey;  
1656 -}  
1657 -  
1658 -#all-devices-modal .auto-refresh.active {  
1659 - color: #405dff;  
1660 -}  
1661 -  
1662 -#all-devices-modal .uk-margin-small-top {  
1663 - margin-top: 0 !important;  
1664 -}  
1665 -  
1666 -#history-sch-maintain-modal .add_lp_link {  
1667 - display: inline-block;  
1668 - vertical-align: bottom;  
1669 - margin-left: 15px;  
1670 - text-decoration: underline;  
1671 - font-size: 13px;  
1672 -}  
1673 -  
1674 -#schedule-tzrc-modal input[type=checkbox] {  
1675 - margin-right: 9px;  
1676 -}  
1677 -  
1678 -#schedule-tzrc-modal span.ct_zt_yzx {  
1679 - color: #2196F3;  
1680 - font-size: 12px;  
1681 -}  
1682 -  
1683 -#schedule-tzrc-modal span.ct_zt_lb {  
1684 - color: red;  
1685 - font-size: 12px;  
1686 -}  
1687 -  
1688 -#schedule-tzrc-modal span.ct_zt_zzzx {  
1689 - font-size: 12px;  
1690 - color: #38ad3c;  
1691 -}  
1692 -  
1693 -#schedule-tzrc-modal .tzrc_form {  
1694 - padding: 20px;  
1695 - border: 1px solid #f0eded;  
1696 - box-shadow: 0px -3px 15px rgba(0, 0, 0, 0.08);  
1697 - background: #f9f9f9;  
1698 -}  
1699 -  
1700 -.uk-panel.ct_search_panel {  
1701 - padding: 15px;  
1702 - border: 1px solid #f0eded;  
1703 - box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.08);  
1704 - background: #f9f9f9;  
1705 -}  
1706 -  
1707 -.sch-tzrc-table.ct_table dl.active,  
1708 -.sch-tzrc-table.ct_table > .ct_table_body dl.active:hover {  
1709 - background: #5bd460;  
1710 - color: white;  
1711 -}  
1712 -  
1713 -#schedule-tzrc-modal dl.active span.ct_zt_yzx {  
1714 - color: #545252;  
1715 -}  
1716 -  
1717 -#schedule-tzrc-modal dl.active span.ct_zt_lb {  
1718 - color: #d64949;  
1719 -}  
1720 -  
1721 -#schedule-tzrc-modal dl.active span.ct_zt_zzzx {  
1722 - color: white;  
1723 -}  
1724 -  
1725 -#schedule-tzrc-modal dl.active input[type=checkbox] {  
1726 - border: 0;  
1727 -}  
1728 -  
1729 -#schedule-tzrc-modal dl.active input[type=checkbox]:before {  
1730 - color: #ffffff;  
1731 -}  
1732 -  
1733 -.sch-search-autocom input {  
1734 - padding: 0 !important;  
1735 - height: 100% !important;  
1736 -}  
1737 -  
1738 -label.blue_checkbox {  
1739 - margin-left: 12px;  
1740 -}  
1741 -  
1742 -label.blue_checkbox > input {  
1743 - width: 17px !important;  
1744 - height: 17px !important;  
1745 -}  
1746 -  
1747 -label.blue_checkbox > input:checked:before,  
1748 -label.blue_checkbox > input:indeterminate:before {  
1749 - line-height: 15px !important;  
1750 -}  
1751 -  
1752 -dd.disabled {  
1753 - color: #b5b3b3;  
1754 -}  
1755 -  
1756 -dl.active > dd.disabled {  
1757 - color: #ececec;  
1758 -}  
1759 -  
1760 -#change_user_options-modal .user_info {  
1761 - width: 360px;  
1762 - margin: auto;  
1763 -}  
1764 -  
1765 -.display_hide {  
1766 - display: none;  
1767 -}  
1768 -  
1769 -.ct_eye_icon {  
1770 - font-size: 16px;  
1771 - cursor: pointer;  
1772 -}  
1773 -  
1774 -.ct_eye_icon.active {  
1775 - color: #444;  
1776 -}  
1777 -  
1778 -#tempScheduleContent .forms::-webkit-scrollbar {  
1779 - width: 19px;  
1780 - height: 16px;  
1781 -}  
1782 -  
1783 -.range_2_normal_tt {  
1784 - margin-bottom: 15px;  
1785 - border-top: 1px dashed #c7c7c7;  
1786 - color: #a6a6a6;  
1787 - text-indent: 7px;  
1788 - padding-bottom: 5px;  
1789 -}  
1790 -  
1791 -.cancel_link {  
1792 - font-size: 12px;  
1793 - margin-left: 15px;  
1794 - vertical-align: bottom;  
1795 - color: #8d8d8d;  
1796 - text-decoration: underline;  
1797 - position: absolute;  
1798 - right: 0;  
1799 -}  
1800 -  
1801 -.edit_link {  
1802 - font-size: 12px;  
1803 - margin-left: 15px;  
1804 - vertical-align: bottom;  
1805 - color: #ff2f2f;  
1806 - text-decoration: underline;  
1807 -}  
1808 -  
1809 -.c_b_abnorm_notice {  
1810 - position: absolute;  
1811 - bottom: 0;  
1812 - margin: auto;  
1813 - width: 351px;  
1814 - padding: 7px;  
1815 - background: #ffffff;  
1816 - box-shadow: 5px 5px 15px rgba(90, 90, 90, 0.48);  
1817 - max-height: 125px;  
1818 - overflow-y: auto;  
1819 - min-height: 40px;  
1820 -}  
1821 -  
1822 -.c_b_abnorm_notice:before {  
1823 - content: "-超速报警-";  
1824 - color: #000000;  
1825 - font-size: 12px;  
1826 - font-family: 微软雅黑;  
1827 - position: fixed;  
1828 - background: #ffd967;  
1829 - margin-top: -10px;  
1830 - margin-left: -6px;  
1831 - padding: 0 7px;  
1832 - box-shadow: 2px 4px 7px rgba(90, 90, 90, 0.25);  
1833 -}  
1834 -  
1835 -.c_b_item {  
1836 - margin: 7px 0;  
1837 - padding: 7px 12px;  
1838 - box-shadow: 0px 0px 10px rgba(90, 90, 90, 0.29);  
1839 - color: #FF5722;  
1840 - cursor: pointer;  
1841 -}  
1842 -  
1843 -.c_b_abnorm_notice > .c_b_item:first-child {  
1844 - margin-top: 20px;  
1845 -}  
1846 -  
1847 -.c_b_item.over {  
1848 - color: grey;  
1849 -}  
1850 -  
1851 -.c_b_item > span.c_b_over {  
1852 - float: right;  
1853 -}  
1854 -  
1855 -.mileage_elec_panel {  
1856 - position: absolute;  
1857 - width: 100%;  
1858 - /*height: 90px;*/  
1859 - z-index: 1;  
1860 - background: white;  
1861 - bottom: 0px;  
1862 - box-shadow: 1px 0px 15px rgba(90, 90, 90, 0.48);  
1863 - padding: 9px 15px;  
1864 - border-radius: 0 5px;  
1865 - color: #000;  
1866 -  
1867 - display: none;  
1868 -}  
1869 -  
1870 -.mileage_elec_panel ._title {  
1871 - margin: 5px 3px;  
1872 - font-size: 15px;  
1873 -}  
1874 -  
1875 -.mileage_elec_panel .LD_item {  
1876 - margin: 5px 0;  
1877 - font-family: 微软雅黑;  
1878 -}  
1879 -  
1880 -.mileage_elec_panel .LD_item > span {  
1881 - padding: 3px;  
1882 - display: inline-block;  
1883 - width: 85px;  
1884 -}  
1885 -  
1886 -.mileage_elec_panel .lp_name {  
1887 - padding: 0 5px;  
1888 - background: #f2f2f2;  
1889 - border-radius: 15px  
1890 -}  
1891 -  
1892 -.mileage_elec_panel .LD_item > span > a {  
1893 - color: #000;  
1894 -}  
1895 -  
1896 -.mileage_elec_panel .LD_item > span:nth-of-type(1) > a {  
1897 - color: blue;  
1898 -}  
1899 -  
1900 -/*.mileage_elec_panel .LD_item>span:nth-of-type(2)>a{  
1901 - color: #fa3a2c;  
1902 -}  
1903 -  
1904 -.mileage_elec_panel .LD_item>span:nth-of-type(3)>a{  
1905 - color: #515151;  
1906 -}*/  
1907 -  
1908 -.mileage_elec_panel hr {  
1909 - height: 1px;  
1910 - border: none;  
1911 - border-top: 1px dashed #b5b5b5;  
1912 -}  
1913 -  
1914 -#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-label {  
1915 - width: 70px;  
1916 -}  
1917 -  
1918 -#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-controls {  
1919 - margin-left: 75px;  
1920 -}  
1921 -  
1922 -#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid + .uk-grid,  
1923 -#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid-margin,  
1924 -#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid > * > .uk-panel + .uk-panel {  
1925 - margin-top: 22px;  
1926 -}  
1927 -  
1928 -.c_task_mileage_abnormal,  
1929 -.c_task_mileage_abnormal .ct_table > .ct_table_head dl,  
1930 -.c_task_mileage_abnormal .ct_table dl {  
1931 - background: #ffe7e7 !important;  
1932 -}  
1933 -  
1934 -.tip_task_count_dl {  
1935 - width: calc(100% + 22px) !important;  
1936 - margin-left: -11px !important;  
1937 - border-top: 1px solid #e6e6e6 !important;  
1938 -}  
1939 -  
1940 -.tip_task_count_dl > dd:last-child {  
1941 - width: calc(100% - 50px) !important;  
1942 - border-right: 0 !important;  
1943 - height: 35px !important;  
1944 - background: #f3f3f3;  
1945 - margin-bottom: -3px;  
1946 -}  
1947 -  
1948 -.tip_task_count_dl > dd:nth-of-type(1) {  
1949 - text-align: center;  
1950 - border-right: 0 !important;  
1951 - width: 48px !important;  
1952 -}  
1953 -  
1954 -.tip_task_count_dl > dd:nth-of-type(1) > i {  
1955 - padding: 6px;  
1956 - cursor: pointer;  
1957 -}  
1958 -  
1959 -.tip_task_count_dl > dd:nth-of-type(1) > i:hover {  
1960 - background: #ebebeb;  
1961 -}  
1962 -  
1963 -.tip_task_count_dl.c_task_error > dd:last-child {  
1964 - background: #ff8a81;  
1965 -}  
1966 -  
1967 -.tip_task_count_dl > dd > span {  
1968 - font-size: 13px;  
1969 - color: #000;  
1970 - height: 55px;  
1971 - display: inline-block;  
1972 - padding: 7px 0;  
1973 - border-radius: 0;  
1974 - text-indent: 12px;  
1975 -}  
1976 -  
1977 -.tip_task_list > dl:nth-last-child(2) {  
1978 - border-bottom: 0 !important;  
1979 -}  
1980 -  
1981 -.c_task_mileage_error {  
1982 - border: 1px solid rgba(218, 13, 13, 0.2);  
1983 - border-bottom-color: rgba(213, 37, 37, 0.3);  
1984 - background-image: -webkit-linear-gradient(top, #ff6155, #F44336);  
1985 -}  
1986 -  
1987 -.uk-badge.c_task.c_task_mileage_error:hover:hover {  
1988 - background-image: none;  
1989 - background: #ff6155;  
1990 - border: 1px solid rgba(213, 37, 37, 0.3);  
1991 -}  
1992 -  
1993 -.grey_link {  
1994 - color: #adabab;  
1995 -}  
1996 -  
1997 -#sch_car_info_all-modal tr.ct_active {  
1998 - -moz-animation: twinkle_bg .9s ease-in-out;  
1999 - -webkit-animation: twinkle_bg .9s ease-in-out;  
2000 -}  
2001 -  
2002 -#sch_car_info_all-modal .uk-table-hover tr:hover{  
2003 - background: #dddddd;  
2004 -}  
2005 -  
2006 -@-moz-keyframes twinkle_bg {  
2007 - 0% {  
2008 - background: rgba(254, 235, 69, 0.38);  
2009 - }  
2010 - 25% {  
2011 - background: rgba(254, 235, 69, 0.7);  
2012 - }  
2013 - 50% {  
2014 - background: rgba(254, 235, 69, 0.3);  
2015 - }  
2016 - 75% {  
2017 - background: rgba(254, 235, 69, 0.7);  
2018 - }  
2019 - 100% {  
2020 - background: rgba(254, 235, 69, 0.38);  
2021 - }  
2022 -}  
2023 -  
2024 -@-webkit-keyframes twinkle_bg {  
2025 - 0% {  
2026 - background: rgba(254, 235, 69, 0.38);  
2027 - }  
2028 - 25% {  
2029 - background: rgba(254, 235, 69, 0.7);  
2030 - }  
2031 - 50% {  
2032 - background: rgba(254, 235, 69, 0.3);  
2033 - }  
2034 - 75% {  
2035 - background: rgba(254, 235, 69, 0.7);  
2036 - }  
2037 - 100% {  
2038 - background: rgba(254, 235, 69, 0.38);  
2039 - }  
2040 -}  
2041 -  
2042 -.home_svg_tips>div{  
2043 - overflow: hidden;  
2044 - text-overflow: ellipsis;  
2045 - white-space: nowrap;  
2046 -}  
2047 -  
2048 -.tab-line.destroy>a{  
2049 - background: #ff5c5c;  
2050 - color: #fff !important;  
2051 - border-radius: 0;  
2052 -}  
2053 -  
2054 -.tab-line.destroy>a:hover{  
2055 - background: #ff3333 !important;  
2056 - border-color: #ff3333 !important;  
2057 -}  
2058 -  
2059 -.uk-tab>li.uk-active.destroy>a{  
2060 - color: red !important;  
2061 -}  
2062 -  
2063 -.uk-tab>li.uk-active.destroy>a:hover{  
2064 - background: #fff !important;  
2065 -}  
2066 -  
2067 -.warn_multi_station{  
2068 - font-size: 12px;  
2069 - margin-left: 40px;  
2070 - background: yellow;  
2071 - color: #1c1c1c;  
2072 - padding: 4px 10px;  
2073 - cursor: pointer;  
2074 - display: none;  
2075 -}  
2076 -  
2077 -.warn_multi_station:hover{  
2078 - background: #f8f81e;  
2079 -}  
2080 -  
2081 -.tp_info_icon{  
2082 - font-size: 14px;  
2083 - cursor: pointer;  
2084 -}  
2085 -  
2086 -g.gps-wrap rect.twinkle[updown="0"] {  
2087 - animation: anim_bg_twinkle_up 1.4s;  
2088 -}  
2089 -  
2090 -@keyframes anim_bg_twinkle_up {  
2091 - 0% {  
2092 - fill: yellow;  
2093 - stroke: yellow;  
2094 - }  
2095 - 25% {  
2096 - stroke: rgb(62, 80, 179);  
2097 - fill: rgb(62, 80, 179);  
2098 - }  
2099 - 50% {  
2100 - fill: yellow;  
2101 - stroke: yellow;  
2102 - }  
2103 - 100% {  
2104 - stroke: rgb(62, 80, 179);  
2105 - fill: rgb(62, 80, 179);  
2106 - }  
2107 -}  
2108 -  
2109 -g.gps-wrap rect.twinkle[updown="1"] {  
2110 - animation: anim_bg_twinkle_down 1.4s;  
2111 -}  
2112 -  
2113 -@keyframes anim_bg_twinkle_down {  
2114 - 0% {  
2115 - fill: yellow;  
2116 - stroke: yellow;  
2117 - }  
2118 - 25% {  
2119 - stroke: #c94f21;  
2120 - fill: #c94f21;  
2121 - }  
2122 - 50% {  
2123 - fill: yellow;  
2124 - stroke: yellow;  
2125 - }  
2126 - 100% {  
2127 - stroke: #c94f21;  
2128 - fill: #c94f21;  
2129 - } 1 +input::-webkit-outer-spin-button,
  2 +input::-webkit-inner-spin-button {
  3 + display: none;
  4 +}
  5 +
  6 +input::-webkit-calendar-picker-indicator {
  7 + display: none;
  8 +}
  9 +
  10 +input::-webkit-datetime-edit {
  11 + padding: 1px;
  12 +}
  13 +
  14 +.ps-container > .ps-scrollbar-y-rail {
  15 + z-index: 1 !important;
  16 +}
  17 +
  18 +.ps-container > .ps-scrollbar-x-rail,
  19 +.ps-container > .ps-scrollbar-y-rail {
  20 + opacity: 0.6 !important;
  21 + padding: 0 !important;
  22 +}
  23 +
  24 +/* ^_^ baidu map hide logo */
  25 +.anchorBL, .anchorBL, .amap-logo, .amap-copyright {
  26 + display: none;
  27 +}
  28 +
  29 +audio, canvas, img, svg, video {
  30 + max-width: none;
  31 +}
  32 +
  33 +html, body {
  34 + width: 100%;
  35 + height: 100%;
  36 + overflow: hidden;
  37 + margin-left: 0 !important;
  38 +}
  39 +
  40 +.main-container {
  41 + height: calc(100% - 120px);
  42 +}
  43 +
  44 +#main-tab-content {
  45 + height: 100%;
  46 + margin-bottom: 0;
  47 +}
  48 +
  49 +::-webkit-scrollbar {
  50 + width: 15px;
  51 + height: 16px;
  52 +}
  53 +
  54 +::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {
  55 + border-radius: 999px;
  56 + border: 5px solid transparent;
  57 +}
  58 +
  59 +::-webkit-scrollbar-track {
  60 + box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset;
  61 +}
  62 +
  63 +::-webkit-scrollbar-thumb {
  64 + min-height: 20px;
  65 + background-clip: content-box;
  66 + box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset;
  67 +}
  68 +
  69 +::-webkit-scrollbar-corner {
  70 + background: transparent;
  71 +}
  72 +
  73 +.uk-modal .uk-form.fv-form, .uk-modal .ct-modal-body {
  74 + margin-bottom: -20px !important;
  75 +}
  76 +
  77 +.uk-modal .uk-form.fv-form.fixed-tool {
  78 + width: 100%;
  79 + position: relative;
  80 + height: 100%;
  81 +}
  82 +
  83 +.uk-modal .ct-modal-body .uk-modal-footer {
  84 + margin-left: 0;
  85 +}
  86 +
  87 +.uk-modal .uk-form.fv-form.fixed-tool .uk-modal-footer {
  88 + position: absolute;
  89 + bottom: 0;
  90 + width: calc(100% - 20px);
  91 +}
  92 +
  93 +table.ct-fixed-table {
  94 + table-layout: fixed;
  95 +}
  96 +
  97 +table.ct-fixed-table tr.context-menu-active {
  98 + background: #f0f0f0;
  99 +}
  100 +
  101 +table.ct-fixed-table.uk-table tr td {
  102 + white-space: nowrap;
  103 + overflow: hidden;
  104 + text-overflow: ellipsis;
  105 +}
  106 +
  107 +table.ct-fixed-table.uk-table .uk-badge {
  108 + padding: 2px 5px;
  109 +}
  110 +
  111 +.horizontal-field {
  112 + vertical-align: middle;
  113 + margin: 0 5px;
  114 +}
  115 +
  116 +.legend-tools {
  117 + float: right;
  118 + font-size: 11px;
  119 +}
  120 +
  121 +.legend-tools a.uk-icon-small {
  122 + margin: 0 5px;
  123 + cursor: pointer;
  124 +}
  125 +
  126 +.text-succ {
  127 + color: #659f13;
  128 +}
  129 +
  130 +.text-err {
  131 + color: red;
  132 +}
  133 +
  134 +.text-grey {
  135 + color: grey;
  136 +}
  137 +
  138 +svg.line-chart {
  139 + width: 100%;
  140 + height: 100%;
  141 + position: absolute;
  142 + left: 0;
  143 +}
  144 +
  145 +svg.line-chart circle.station_circle {
  146 + fill: #5e96d2;
  147 + r: 5.5;
  148 + stroke: rgb(253, 253, 253);
  149 + stroke-width: 3;
  150 + Pointer-events: none;
  151 +}
  152 +
  153 +svg.line-chart circle.station_circle.down {
  154 + fill: #c92121;
  155 +}
  156 +
  157 +svg.line-chart path.station_link {
  158 + stroke-width: 3.5px;
  159 + stroke: #5E96D2;
  160 + Pointer-events: none;
  161 +}
  162 +
  163 +svg.line-chart path.station_link.down {
  164 + stroke: #c92121;
  165 +}
  166 +
  167 +svg.line-chart path.station_link.down.loop_line {
  168 + stroke-dasharray: 4, 3;
  169 + stroke-width: 1px;
  170 +}
  171 +
  172 +svg.line-chart text.station_text {
  173 + writing-mode: tb;
  174 + fill: #3e3e3e;
  175 + letter-spacing: -.2px;
  176 + text-shadow: 0 0 2px #dadada;
  177 + Pointer-events: none;
  178 +}
  179 +
  180 +svg.line-chart text.station_text.up {
  181 + fill: #4556b6;
  182 +}
  183 +
  184 +svg.line-chart text.station_text.down {
  185 + fill: #c94f21;
  186 +}
  187 +
  188 +svg.line-chart g.item:first-child > text {
  189 + stroke: #6f6e6e;
  190 + fill: none;
  191 +}
  192 +
  193 +svg.line-chart g.item:nth-last-child(3) > text {
  194 + stroke: #6f6e6e;
  195 + fill: none;
  196 +}
  197 +
  198 +svg.line-chart g.item:first-child > text.up,
  199 +svg.line-chart g.item:nth-last-child(3) > text.up {
  200 + stroke: #4556b6;
  201 +}
  202 +
  203 +svg.line-chart g.item:first-child > text.down,
  204 +svg.line-chart g.item:nth-last-child(3) > text.down {
  205 + stroke: #c94f21;
  206 +}
  207 +
  208 +svg.line-chart g.gps-wrap > rect {
  209 + width: 30px;
  210 + height: 15px;
  211 + /* fill: #fff; */
  212 + rx: 2px;
  213 + cursor: pointer;
  214 +}
  215 +
  216 +svg.line-chart g.gps-wrap > rect[updown="0"] {
  217 + stroke: rgb(62, 80, 179);
  218 + fill: rgb(62, 80, 179);
  219 +}
  220 +
  221 +svg.line-chart g.gps-wrap > rect[updown="1"] {
  222 + stroke: #c94f21;
  223 + fill: #c94f21;
  224 +}
  225 +
  226 +svg.line-chart g.gps-wrap > rect.hover {
  227 + stroke-width: 2;
  228 +}
  229 +
  230 +svg.line-chart g.gps-wrap > text {
  231 + font-size: 12px;
  232 + transform: translate(0, 12px);
  233 + pointer-events: none;
  234 +}
  235 +
  236 +svg.line-chart g.gps-wrap > text[updown="0"] {
  237 + fill: #fff;
  238 +}
  239 +
  240 +svg.line-chart g.gps-wrap > text[updown="1"] {
  241 + fill: #fff;
  242 +}
  243 +
  244 +svg.line-chart g.gps-wrap > rect.abnormal[updown="0"],
  245 +svg.line-chart g.gps-wrap > rect.abnormal[updown="1"] {
  246 + width: 40px;
  247 + fill: yellow;
  248 + stroke: yellow;
  249 +}
  250 +
  251 +svg.line-chart g.gps-wrap > text.abnormal[updown="0"],
  252 +svg.line-chart g.gps-wrap > text.abnormal[updown="1"] {
  253 + fill: black;
  254 +}
  255 +
  256 +svg.line-chart .merge_hide {
  257 + display: none !important;
  258 +}
  259 +
  260 +svg.line-chart g.merge-item rect {
  261 + width: 22px;
  262 + height: 22px;
  263 + rx: 15px;
  264 + fill: #19a53a;
  265 + cursor: pointer;
  266 + stroke: #19a53a;
  267 + stroke-dasharray: 1, 2;
  268 + stroke-width: 3px;
  269 +}
  270 +
  271 +svg.line-chart g.merge-item text {
  272 + fill: #fff;
  273 + pointer-events: none;
  274 +}
  275 +
  276 +.qtip-multi-gps {
  277 + max-width: 720px !important;
  278 +}
  279 +
  280 +.qtip-bootstrap.qtip-multi-gps .qtip-content {
  281 + padding: 0;
  282 +}
  283 +
  284 +.tooltip {
  285 + position: relative;
  286 + padding-bottom: 160px;
  287 + width: 220px;
  288 +}
  289 +
  290 +.multi-tooltip-wrap {
  291 + width: 100%;
  292 + max-height: 350px;
  293 + overflow: auto;
  294 +}
  295 +
  296 +.tip_map_wrap.multi {
  297 + width: 100%;
  298 + height: 130px;
  299 +}
  300 +
  301 +.tooltip.multi-tooltip {
  302 + width: 160px;
  303 + display: inline-block;
  304 + padding: 10px 0 10px 12px;
  305 + border-right: 1px solid #eeeeee;
  306 + border-bottom: 1px solid #eeeeee;
  307 +}
  308 +
  309 +.tooltip hr {
  310 + border-top: 1px solid #eeeeee;
  311 + width: calc(100% + 30px);
  312 + margin: 7px 0 11px -15px;
  313 +}
  314 +
  315 +.tooltip.multi-tooltip hr {
  316 + width: calc(100% + 16px);
  317 +}
  318 +
  319 +.tooltip .tooltip-container {
  320 + padding: 1px;
  321 +}
  322 +
  323 +.tooltip .tooltip-container div, .tooltip .tooltip-container div a {
  324 + margin: 7px 1px;
  325 + font-size: 13px;
  326 + color: rgb(76, 76, 76);
  327 +}
  328 +
  329 +.tooltip .tooltip-container div.title {
  330 + margin: 8px 1px 12px;
  331 +}
  332 +
  333 +.tooltip .tooltip-container .title a {
  334 + font-size: 18px;
  335 + font-family: 微软雅黑;
  336 +}
  337 +
  338 +.tooltip span.field {
  339 + color: #7d7d7b;
  340 + margin-right: 5px;
  341 + width: 52px;
  342 + display: inline-block;
  343 + text-align: right;
  344 +}
  345 +
  346 +.tooltip .tip_map_wrap {
  347 + position: absolute;
  348 + bottom: -16px;
  349 + left: -15px;
  350 + width: calc(100% + 28px);
  351 + background: #fff;
  352 + height: 165px;
  353 + border-radius: 0 0 5px 5px;
  354 + border-top: 1px solid #e6e4e4;
  355 +}
  356 +
  357 +canvas.crosshair-layer {
  358 + position: absolute;
  359 + width: 100%;
  360 + height: 100%;
  361 + background: rgba(255, 255, 255, 0.33);
  362 + left: 0;
  363 +}
  364 +
  365 +li.map-panel {
  366 + height: 100%;
  367 + position: relative;
  368 +}
  369 +
  370 +.main-container .load-panel {
  371 + display: block;
  372 + color: #999797;
  373 +}
  374 +
  375 +.uk-panel-box-danger {
  376 + background-color: #fff1f0;
  377 + /*color: #d85030;*/
  378 + border-color: rgba(216, 80, 48, .3);
  379 +}
  380 +
  381 +/*.uk-panel-box-danger .uk-panel-title {
  382 + color: #d85030;
  383 +}*/
  384 +
  385 +.uk-badge-default {
  386 + background-color: #a09b9c;
  387 + background-image: -webkit-linear-gradient(top, #9a9898, #8c8687);
  388 + background-image: linear-gradient(to bottom, #9a9898, #8c8687);
  389 +}
  390 +
  391 +.ct-bottom-drawer {
  392 + width: 100%;
  393 + background: rgb(255, 255, 255);
  394 + position: fixed;
  395 + bottom: 0;
  396 + box-shadow: 0 0 10px rgba(0, 0, 0, .3);
  397 + transition: all .3s ease;
  398 + height: 0;
  399 +}
  400 +
  401 +.ct-bottom-drawer.open {
  402 + height: 320px;
  403 +}
  404 +
  405 +.ct-bottom-drawer a.ct-bottom-drawer-close {
  406 + position: absolute;
  407 + right: 10px;
  408 + top: 10px;
  409 + color: #c3c3c3;
  410 + width: 20px;
  411 + line-height: 20px;
  412 + background: #fff;
  413 + text-align: center;
  414 + z-index: 99;
  415 +}
  416 +
  417 +.ct-bottom-drawer a.ct-bottom-drawer-close:hover {
  418 + text-decoration: none;
  419 + color: grey;
  420 +}
  421 +
  422 +.ct-bottom-drawer a.ct-bottom-drawer-close:after {
  423 + display: block;
  424 + content: "\f00d";
  425 + font-family: FontAwesome;
  426 +}
  427 +
  428 +.ct-bottom-drawer-body {
  429 + width: 100%;
  430 + height: 100%;
  431 +}
  432 +
  433 +#station_route_spacing_chart_drawer .svg_wrap {
  434 + width: 80%;
  435 + height: 100%;
  436 + display: inline-block;
  437 + font-size: 14px;
  438 + overflow: hidden;
  439 + position: relative;
  440 +}
  441 +
  442 +#station_route_spacing_chart_drawer .drawer_right_map {
  443 + width: 20%;
  444 + height: 100%;
  445 + display: inline-block;
  446 +}
  447 +
  448 +#station_route_spacing_chart_drawer .svg_cont_body {
  449 + height: 100%;
  450 + position: absolute;
  451 + top: 0;
  452 + left: 0;
  453 +}
  454 +
  455 +#station_route_spacing_chart_drawer svg {
  456 + width: 100%;
  457 + height: 100%;
  458 +}
  459 +
  460 +#station_route_spacing_chart_drawer svg g._item rect {
  461 + stroke: rgb(62, 80, 179);
  462 + fill: rgb(62, 80, 179);
  463 + width: 30px;
  464 + height: 124px;
  465 + rx: 5;
  466 + transform: translate(-15px);
  467 +}
  468 +
  469 +#station_route_spacing_chart_drawer svg g._item text {
  470 + writing-mode: tb;
  471 + transform: translate(0, 9px);
  472 + fill: #fff;
  473 +}
  474 +
  475 +#station_route_spacing_chart_drawer svg g._item path {
  476 + stroke-width: 5.4px;
  477 + stroke: #3e50b3;
  478 +}
  479 +
  480 +#station_route_spacing_chart_drawer svg g._item circle {
  481 + r: 3px;
  482 + fill: #ffffff;
  483 +}
  484 +
  485 +#station_route_spacing_chart_drawer svg g._item path.arc_path {
  486 + stroke-width: 1.3px;
  487 + stroke: #3e50b3;
  488 + stroke-dasharray: 1000;
  489 + stroke-dashoffset: 1000;
  490 + fill: none;
  491 +
  492 + animation: dash .9s;
  493 + webkit-amimation: dash .9s;
  494 + animation-fill-mode: forwards;
  495 + -webkit-animation-fill-mode: forwards;
  496 +}
  497 +
  498 +@keyframes dash {
  499 + to {
  500 + stroke-dashoffset: 0;
  501 + stroke-dasharray: 4, 4;
  502 + }
  503 +}
  504 +
  505 +@-webkit-keyframes dash {
  506 + to {
  507 + stroke-dashoffset: 0;
  508 + stroke-dasharray: 4, 4;
  509 + }
  510 +}
  511 +
  512 +#station_route_spacing_chart_drawer svg g._item text.distance_text {
  513 + writing-mode: horizontal-tb;
  514 + fill: #3e50b3;
  515 +}
  516 +
  517 +#station_route_spacing_chart_drawer svg g._item rect.distance_rect {
  518 + height: 20px;
  519 + width: 40px;
  520 + fill: #fff !important;
  521 + stroke-width: 0;
  522 +}
  523 +
  524 +#station_route_spacing_chart_drawer .tl_desc_text {
  525 + position: absolute;
  526 + top: 5px;
  527 + left: 5px;
  528 + font-size: 12px;
  529 + color: #525050;
  530 + font-family: 微软雅黑;
  531 +}
  532 +
  533 +#station_route_spacing_chart_drawer svg g._item:first-child circle {
  534 + fill: #3e50b3;
  535 + r: 6px;
  536 +}
  537 +
  538 +#station_route_spacing_chart_drawer svg g._item:last-child circle {
  539 + fill: #3e50b3;
  540 + r: 6px;
  541 +}
  542 +
  543 +/* 下行 */
  544 +#station_route_spacing_chart_drawer svg.down g._item rect {
  545 + stroke: #dd3829;
  546 + fill: #dd3829;
  547 +}
  548 +
  549 +#station_route_spacing_chart_drawer svg.down g._item path {
  550 + stroke: #dd3829;
  551 +}
  552 +
  553 +#station_route_spacing_chart_drawer svg.down g._item:first-child circle {
  554 + fill: #dd3829;
  555 +}
  556 +
  557 +#station_route_spacing_chart_drawer svg.down g._item text.distance_text {
  558 + fill: #dd3829;
  559 +}
  560 +
  561 +#station_route_spacing_chart_drawer svg.down g._item path.arc_path {
  562 + stroke: #dd3829;
  563 +}
  564 +
  565 +#station_route_spacing_chart_drawer svg.down g._item:last-child circle {
  566 + fill: #dd3829;
  567 +}
  568 +
  569 +.svg-edit-panel-wrap {
  570 + width: 48%;
  571 + border: 1px solid #e1d3d3;
  572 + padding: 12px 0 0 0;
  573 + border-radius: 4px;
  574 + position: relative;
  575 + display: inline-block;
  576 + vertical-align: top;
  577 + height: 440px;
  578 +}
  579 +
  580 +.svg-edit-panel-wrap .title-badge {
  581 + position: absolute;
  582 + top: -10px;
  583 + left: 7px;
  584 + font-size: 13px;
  585 + background: #fff;
  586 + padding: 0 3px;
  587 + color: #888888;
  588 +}
  589 +
  590 +.svg-edit-panel-wrap .rename-tools {
  591 + height: 21px;
  592 + padding: 0 0 0 9px;
  593 +}
  594 +
  595 +.svg-edit-panel-wrap .rename-item-panel {
  596 + border-bottom: 1px solid #ede5e5;
  597 + padding: 4px;
  598 +}
  599 +
  600 +.svg-edit-panel-wrap .rename-item-panel select {
  601 + width: 150px;
  602 +}
  603 +
  604 +.svg-edit-panel-wrap .rename-item-panel input {
  605 + margin-left: 7px;
  606 +}
  607 +
  608 +.svg-edit-panel-wrap .rename-item-panel input[type=checkbox] {
  609 + margin-top: 2px;
  610 + margin-right: 4px;
  611 +}
  612 +
  613 +.svg-edit-panel-wrap .rename-item-panel.active {
  614 + background: #65c9f8;
  615 + box-shadow: 0px 3px 7px 0 rgba(101, 201, 248, 0.48), 0px 1px 4px 0 rgba(101, 201, 248, 0.32);
  616 +}
  617 +
  618 +.svg-edit-panel-wrap .rename-item-panel.active select,
  619 +.svg-edit-panel-wrap .rename-item-panel.active input {
  620 + background: #65c9f8;
  621 + color: #fff;
  622 +}
  623 +
  624 +.svg-edit-panel-wrap .rename-item-panel.active i {
  625 + color: #e4f6ff;
  626 +}
  627 +
  628 +.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox] {
  629 + border: none;
  630 +}
  631 +
  632 +.svg-edit-panel-wrap .rename-item-panel.active input[type=checkbox]:before {
  633 + color: #fff;
  634 +}
  635 +
  636 +.svg-edit-panel-wrap .rename-tools a {
  637 + font-size: 14px;
  638 + padding: 5px;
  639 +}
  640 +
  641 +.svg-edit-panel-wrap .rename-tools a:hover {
  642 + background: #e8edef;
  643 + border-radius: 5px;
  644 +}
  645 +
  646 +.station-list {
  647 + width: 190px;
  648 + padding: 2px 7px;
  649 + height: 100%;
  650 + overflow: auto;
  651 + display: inline-block;
  652 +}
  653 +
  654 +.station-list .station-item {
  655 + padding: 3px 0;
  656 + margin: 5px 0;
  657 + border-radius: 3px;
  658 + font-size: 13px;
  659 + text-indent: 7px;
  660 + cursor: pointer;
  661 + white-space: nowrap;
  662 + overflow: hidden;
  663 + text-overflow: ellipsis;
  664 +}
  665 +
  666 +.station-list .station-item.disable,
  667 +.station-list .station-item.disable:hover {
  668 + background: #d5c9c9 !important;
  669 + color: #686565 !important;
  670 +}
  671 +
  672 +.station-list.up .station-item {
  673 + background: #5364c3;
  674 + color: white;
  675 +}
  676 +
  677 +.station-list.up .station-item:hover {
  678 + box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);
  679 + background: #4556b6;
  680 +}
  681 +
  682 +.station-list.down .station-item {
  683 + background: #f95858;
  684 + color: white;
  685 +}
  686 +
  687 +.station-list.down .station-item:hover {
  688 + box-shadow: 0px 3px 6px 0 rgba(0, 0, 0, 0.2), 0px 1px 4px 0 rgba(0, 0, 0, 0.19);
  689 + background: #e95151;
  690 +}
  691 +
  692 +.modal-dotted-hr {
  693 + height: 1px;
  694 + border: none;
  695 + border-top: 1px dashed #d1d1d1;
  696 + width: calc(100% + 40px);
  697 + margin-left: -20px;
  698 +}
  699 +
  700 +#add-sub-task-range_turn-modal .main-sch-panel {
  701 + height: 60px;
  702 + border: 1px solid #dddddd;
  703 + border-radius: 5px;
  704 + position: relative;
  705 + padding: 20px 0 0 8px;
  706 +}
  707 +
  708 +#add-sub-task-range_turn-modal .main-sch-panel:before {
  709 + content: '主任务';
  710 + position: absolute;
  711 + top: -10px;
  712 + left: 10px;
  713 + background: #fff;
  714 + padding: 0 4px;
  715 + font-size: 12px;
  716 + color: #adadad;
  717 +}
  718 +
  719 +.ct_row {
  720 + font-size: 0;
  721 +}
  722 +
  723 +.ct_row .ct_cell {
  724 + display: inline-block;
  725 + font-size: 13px;
  726 + white-space: nowrap;
  727 + overflow: hidden;
  728 + text-overflow: ellipsis;
  729 +}
  730 +
  731 +.ct_row .ct_cell label {
  732 + color: #979393;
  733 + margin-right: 3px;
  734 +}
  735 +
  736 +.ct_row .ct_cell.c_1_3 {
  737 + width: 33%;
  738 +}
  739 +
  740 +#schedule-lp_change-modal .sch-list dl dd {
  741 + font-size: 14px;
  742 +}
  743 +
  744 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(1) {
  745 + width: 5%;
  746 + border-left: 1px solid #dedede;
  747 +}
  748 +
  749 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(2) {
  750 + width: 22%;
  751 +}
  752 +
  753 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(3) {
  754 + width: 17%;
  755 +}
  756 +
  757 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(4) {
  758 + width: 10%;
  759 +}
  760 +
  761 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(5) {
  762 + width: 21%;
  763 +}
  764 +
  765 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(6) {
  766 + width: 10%;
  767 +}
  768 +
  769 +#schedule-lp_change-modal .sch-list dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list dl dd:nth-of-type(7) {
  770 + width: 14%;
  771 +}
  772 +
  773 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(1), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(1) {
  774 + width: 5%;
  775 + border-left: 1px solid #dedede;
  776 +}
  777 +
  778 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(2), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(2) {
  779 + width: 14%;
  780 +}
  781 +
  782 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(3), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(3) {
  783 + width: 10%;
  784 +}
  785 +
  786 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(4), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(4) {
  787 + width: 21%;
  788 +}
  789 +
  790 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(5), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(5) {
  791 + width: 10%;
  792 +}
  793 +
  794 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(6), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(6) {
  795 + width: 17%;
  796 +}
  797 +
  798 +#schedule-lp_change-modal .sch-list.reverse dl dt:nth-of-type(7), #schedule-lp_change-modal .sch-list.reverse dl dd:nth-of-type(7) {
  799 + width: 22%;
  800 +}
  801 +
  802 +#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active {
  803 + background: #b9d2ff;
  804 +}
  805 +
  806 +#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active dd {
  807 + border-top: 1px solid #b9d2ff;
  808 +}
  809 +
  810 +#schedule-lp_change-modal .ct_table.sch-list dl.active input[type=checkbox] {
  811 + border: none;
  812 +}
  813 +
  814 +#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active {
  815 + background: #ffe2b9;
  816 +}
  817 +
  818 +#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active dd {
  819 + border-top: 1px solid #ffe2b9;
  820 +}
  821 +
  822 +#cache_data_manage-modal .uk-table td {
  823 + vertical-align: bottom;
  824 +}
  825 +
  826 +#cache_data_manage-modal .uk-table td,
  827 +#cache_data_manage-modal .uk-table th {
  828 + padding: 8px 8px 6px;
  829 +}
  830 +
  831 +.ps-help-panel {
  832 + color: grey;
  833 + padding: 5px 2px;
  834 +}
  835 +
  836 +.ps-help-panel small {
  837 + display: block;
  838 +}
  839 +
  840 +svg text.offline {
  841 + fill: #6f6a6a !important;
  842 +}
  843 +
  844 +svg rect.offline {
  845 + stroke: #dbdada !important;
  846 + fill: #dbdada !important;
  847 +}
  848 +
  849 +.tooltip .tooltip-container .title a > .abnormal-text {
  850 + font-size: 14px;
  851 + color: #ff5e5e;
  852 + font-weight: 600;
  853 +}
  854 +
  855 +#addChildTaskBtn {
  856 + margin-left: 5px;
  857 + color: #36729b;
  858 + padding: 1px 5px 1px 6px;
  859 +}
  860 +
  861 +#addChildTaskBtn:hover {
  862 + box-shadow: 2px 1px 3px 0 rgba(0, 0, 0, 0.2), 0px 3px 8px 0 rgba(0, 0, 0, 0.19);
  863 +}
  864 +
  865 +.edit-icon {
  866 + color: #aba9a9;
  867 + font-size: 12px;
  868 + margin-left: 5px;
  869 + display: none;
  870 +}
  871 +
  872 +.operation-real-text {
  873 + position: absolute;
  874 + top: 9px;
  875 + width: 100%;
  876 + left: 0;
  877 + text-align: center;
  878 + pointer-events: none;
  879 +}
  880 +
  881 +.operation-real-text span {
  882 + padding: 15px;
  883 + background: #ff4f4f;
  884 + color: white;
  885 + box-shadow: 0px 4px 6px 0 rgba(0, 0, 0, 0.2), 0px 4px 10px 0 rgba(0, 0, 0, 0.19);
  886 + border-radius: 1px 1px 4px 4px;
  887 +}
  888 +
  889 +#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-label {
  890 + width: 120px;
  891 +}
  892 +
  893 +#oil_station-modal.ct-form-modal form.uk-form-horizontal .uk-form-controls {
  894 + margin-left: 125px;
  895 +}
  896 +
  897 +#oil_station-modal .uk-form-icon > [class*=uk-icon-] {
  898 + right: 23px;
  899 +}
  900 +
  901 +#oil_station-modal .uk-form-icon:not(.uk-form-icon-flip) > input {
  902 + padding-left: 10px !important;
  903 +}
  904 +
  905 +#oil_station-modal .uk-form-icon {
  906 + width: calc(100% - 145px);
  907 +}
  908 +
  909 +#oil_station-modal .uk-icon-mile:before {
  910 + content: '公里';
  911 +}
  912 +
  913 +#oil_station-modal .uk-icon-minute:before {
  914 + content: '分钟';
  915 +}
  916 +
  917 +option.oil_station_opt {
  918 + color: red;
  919 +}
  920 +
  921 +#oil_station-modal .uk-modal .uk-form.fv-form {
  922 + margin-bottom: 0 !important;
  923 +}
  924 +
  925 +#gb_wait_modal .uk-modal-spinner {
  926 + top: 25px;
  927 + -webkit-transform: translate(-50%, 0);
  928 + transform: translate(-50%, 0);
  929 +}
  930 +
  931 +#gb_wait_modal .wait-modal-text {
  932 + text-align: center;
  933 + margin-top: 35px;
  934 + font-size: 15px;
  935 + color: #635e5e;
  936 +}
  937 +
  938 +.park-and-station-wrap {
  939 + margin-top: 25px;
  940 + border: 1px solid #b9b9b9;
  941 + width: 580px;
  942 + padding: 12px;
  943 + border-radius: 5px;
  944 + box-shadow: 0 2px 5px rgba(0,0,0,.1);
  945 + margin-bottom: 15px;
  946 +}
  947 +
  948 +.park-and-station-wrap select {
  949 + width: auto !important;
  950 +}
  951 +
  952 +.park-and-station-wrap>span{
  953 + vertical-align: middle;
  954 + margin-top: 9px;
  955 + display: inline-block;
  956 +}
  957 +
  958 +/** 安全驾驶相关css */
  959 +.multi_plat_msg_pop_wrap {
  960 + position: absolute;
  961 + right: 12px;
  962 + bottom: 12px;
  963 + z-index: 99;
  964 +}
  965 +
  966 +.multi_plat_msg_pop {
  967 + background: #d44b4b;
  968 + font-size: 15px;
  969 + padding: 9px 10px 0;
  970 + border: 1px solid #f4f0f0;
  971 + border-radius: 5px;
  972 + cursor: pointer;
  973 + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  974 + transition: all .03s;
  975 + color: #f2f2f2;
  976 +}
  977 +
  978 +.multi_plat_msg_pop:hover {
  979 + background: #bc2a2a;
  980 +}
  981 +
  982 +.multi_plat_msg_pop .title {
  983 +}
  984 +
  985 +.multi_plat_msg_pop .desc {
  986 + display: block;
  987 + font-size: 12px;
  988 + color: #ff9d9d;
  989 + text-align: right;
  990 + margin-right: 5px;
  991 +}
  992 +
  993 +/** 嵌入表单modal滚动条样式 */
  994 +#formFragmentModal::-webkit-scrollbar {
  995 + width: 10px;
  996 + background-color: #F5F5F5;
  997 +}
  998 +
  999 +#formFragmentModal::-webkit-scrollbar-thumb {
  1000 + background-color: #000000;
  1001 +}
  1002 +
  1003 +#formFragmentModal::-webkit-scrollbar-track {
  1004 + border: 0;
  1005 + background-color: #F5F5F5;
  1006 + border-radius: 0;
  1007 +}
  1008 +
  1009 +#formFragmentModal::-webkit-scrollbar-thumb {
  1010 + border: 5px solid rgb(226, 122, 122);
  1011 +}
  1012 +
  1013 +#schedule-addsch_oil-modal select {
  1014 + height: 30px !important;
  1015 +}
  1016 +
  1017 +#oil_station-modal .input_clear_icon {
  1018 + position: absolute;
  1019 + top: 6px;
  1020 + right: 108px;
  1021 + color: #f75757;
  1022 + height: 18px;
  1023 + line-height: 18px;
  1024 + border-radius: 7px;
  1025 + font-size: 16px;
  1026 + display: none;
  1027 + cursor: pointer;
  1028 +}
  1029 +
  1030 +#oil_station-modal .input_clear_icon:hover {
  1031 + color: #de2020;
  1032 +}
  1033 +
  1034 +#oil_station-modal .input_clear_icon:before {
  1035 + display: block;
  1036 + font-family: FontAwesome;
  1037 + content: "\f057";
  1038 +}
  1039 +
  1040 +#oil_station-modal input.readonly {
  1041 + background: #dddddd;
  1042 +}
  1043 +
  1044 +.ct_tags {
  1045 + margin-bottom: 12px;
  1046 +}
  1047 +
  1048 +.ct_tags > span {
  1049 + padding: 3px 7px;
  1050 + background: #e8e8e8;
  1051 + color: #3a3939;
  1052 + cursor: pointer;
  1053 + margin-right: 5px;
  1054 +}
  1055 +
  1056 +.ct_tags > span.active {
  1057 + background: #62a9e1;
  1058 + color: white;
  1059 + box-shadow: 0 0 4px rgba(0, 0, 0, 0.35);
  1060 +}
  1061 +
  1062 +.ct_tags > span.active:before {
  1063 + content: "\f00c";
  1064 + font-family: FontAwesome;
  1065 + margin-right: 2px;
  1066 + font-size: 13px;
  1067 +}
  1068 +
  1069 +.ct_tags > span:hover {
  1070 + box-shadow: 0 0 4px rgba(0, 0, 0, .3);
  1071 +}
  1072 +
  1073 +span.late-badge {
  1074 + height: 20px;
  1075 + line-height: 20px;
  1076 + margin-top: 8px;
  1077 + color: grey;
  1078 + margin-left: 2px;
  1079 +}
  1080 +
  1081 +dl.intimity span.late-badge {
  1082 + color: #fbfbfb;
  1083 +}
  1084 +
  1085 +/** badge tooltip */
  1086 +.uk-badge.c_task:hover,
  1087 +.uk-badge.sch_region:hover {
  1088 + background-image: none;
  1089 + background: #38b3e1;
  1090 + border: 1px solid #7ebad1;
  1091 +}
  1092 +
  1093 +.uk-badge.out:hover {
  1094 + background-image: none;
  1095 + background: #8fc650;
  1096 + border: 1px solid #949f86;
  1097 +}
  1098 +
  1099 +.uk-badge.in:hover {
  1100 + background-image: none;
  1101 + background: #fabc64;
  1102 + border: 1px solid #a68c67;
  1103 +}
  1104 +
  1105 +.qtip.sch-badge-tip {
  1106 + max-width: 700px;
  1107 +}
  1108 +
  1109 +.tip_task_list {
  1110 + width: 530px;
  1111 + margin-bottom: -10px;
  1112 +}
  1113 +
  1114 +.tip_task_list dl {
  1115 + font-size: 0;
  1116 + border-bottom: 1px solid #e6e6e6;
  1117 + margin: 0;
  1118 +}
  1119 +
  1120 +.tip_task_list dl:last-child {
  1121 + border-bottom: none;
  1122 +}
  1123 +
  1124 +.tip_task_list dl dt,
  1125 +.tip_task_list dl dd {
  1126 + display: inline-block;
  1127 + font-size: 13px;
  1128 + white-space: nowrap;
  1129 + overflow: hidden;
  1130 + text-overflow: ellipsis;
  1131 + height: 24px;
  1132 + line-height: 24px;
  1133 +}
  1134 +
  1135 +.tip_task_list dl dt:nth-of-type(1), .tip_task_list dl dd:nth-of-type(1) {
  1136 + width: 38px;
  1137 + border-right: 1px solid #c8c8c8;
  1138 +}
  1139 +
  1140 +.tip_task_list dl dt:nth-of-type(2), .tip_task_list dl dd:nth-of-type(2) {
  1141 + width: 18%;
  1142 + text-indent: 5px;
  1143 +}
  1144 +
  1145 +.tip_task_list dl dt:nth-of-type(3), .tip_task_list dl dd:nth-of-type(3) {
  1146 + width: 11%;
  1147 +}
  1148 +
  1149 +.tip_task_list dl dt:nth-of-type(4), .tip_task_list dl dd:nth-of-type(4) {
  1150 + width: 25%;
  1151 +}
  1152 +
  1153 +.tip_task_list dl dt:nth-of-type(5), .tip_task_list dl dd:nth-of-type(5) {
  1154 + width: 25%;
  1155 +}
  1156 +
  1157 +.tip_task_list dl dt:nth-of-type(6), .tip_task_list dl dd:nth-of-type(6) {
  1158 + width: 12%;
  1159 +}
  1160 +
  1161 +.tip_task_list dl dd:nth-of-type(1) a {
  1162 + color: #3c3c3c;
  1163 + text-decoration: underline;
  1164 + font-size: 12px;
  1165 +}
  1166 +
  1167 +.tip_task_list dl.service {
  1168 + color: blue;
  1169 +}
  1170 +
  1171 +.tip_task_list dl.service.destroy {
  1172 + color: red;
  1173 +}
  1174 +
  1175 +.tip_task_list dl.service.temp_add {
  1176 + color: #9C27B0;
  1177 +}
  1178 +
  1179 +.tip_task_list dl span {
  1180 + margin: 0;
  1181 + width: auto;
  1182 +}
  1183 +
  1184 +ul.left_tabs_lg {
  1185 + border: 1px solid #efeded;
  1186 + height: 100%;
  1187 + background: #fafafa;
  1188 +}
  1189 +
  1190 +ul.left_tabs_lg li {
  1191 + line-height: 40px;
  1192 + font-size: 15px;
  1193 +}
  1194 +
  1195 +#schedule-addsch-modal .uk-modal-footer {
  1196 + border-top: none;
  1197 + background: none;
  1198 +}
  1199 +
  1200 +.ct_line_lp_badge {
  1201 + float: left;
  1202 + margin-top: 6px;
  1203 + background: #e0e0e0;
  1204 + padding: 2px 7px;
  1205 + border-radius: 3px;
  1206 +}
  1207 +
  1208 +.uk-badge.sch_ldks {
  1209 + background: #8c8c8c;
  1210 + background-image: linear-gradient(to bottom, #a7a7a7, #8c8c8c);
  1211 +}
  1212 +
  1213 +.ct_layer_modal {
  1214 + background: #e5e5e5;
  1215 + height: 100%;
  1216 + width: 100%;
  1217 + overflow: auto;
  1218 +}
  1219 +
  1220 +.layui-layer-setwin {
  1221 +
  1222 +}
  1223 +
  1224 +.device_config_table dl dt:nth-of-type(1), .device_config_table dl dd:nth-of-type(1) {
  1225 + width: 7%;
  1226 + text-indent: 10px;
  1227 +}
  1228 +
  1229 +.device_config_table dl dt:nth-of-type(2), .device_config_table dl dd:nth-of-type(2) {
  1230 + width: 7%;
  1231 +}
  1232 +
  1233 +.device_config_table dl dt:nth-of-type(3), .device_config_table dl dd:nth-of-type(3) {
  1234 + width: 8%;
  1235 +}
  1236 +
  1237 +.device_config_table dl dt:nth-of-type(4), .device_config_table dl dd:nth-of-type(4) {
  1238 + width: 5%;
  1239 +}
  1240 +
  1241 +.device_config_table dl dt:nth-of-type(5), .device_config_table dl dd:nth-of-type(5) {
  1242 + width: 4%;
  1243 +}
  1244 +
  1245 +.device_config_table dl dt:nth-of-type(6), .device_config_table dl dd:nth-of-type(6) {
  1246 + width: 4%;
  1247 +}
  1248 +
  1249 +.device_config_table dl dt:nth-of-type(7), .device_config_table dl dd:nth-of-type(7) {
  1250 + width: 4%;
  1251 +}
  1252 +
  1253 +.device_config_table dl dt:nth-of-type(8), .device_config_table dl dd:nth-of-type(8) {
  1254 + width: 5%;
  1255 +}
  1256 +
  1257 +.device_config_table dl dt:nth-of-type(9), .device_config_table dl dd:nth-of-type(9) {
  1258 + width: 5%;
  1259 +}
  1260 +
  1261 +.device_config_table dl dt:nth-of-type(10), .device_config_table dl dd:nth-of-type(10) {
  1262 + width: 8%;
  1263 +}
  1264 +
  1265 +.device_config_table dl dt:nth-of-type(11), .device_config_table dl dd:nth-of-type(11) {
  1266 + width: 5%;
  1267 +}
  1268 +
  1269 +.device_config_table dl dt:nth-of-type(12), .device_config_table dl dd:nth-of-type(12) {
  1270 + width: 5%;
  1271 +}
  1272 +
  1273 +.device_config_table dl dt:nth-of-type(13), .device_config_table dl dd:nth-of-type(13) {
  1274 + width: 4%;
  1275 +}
  1276 +
  1277 +.device_config_table dl dt:nth-of-type(14), .device_config_table dl dd:nth-of-type(14) {
  1278 + width: 4%;
  1279 +}
  1280 +
  1281 +.device_config_table dl dt:nth-of-type(15), .device_config_table dl dd:nth-of-type(15) {
  1282 + width: 4%;
  1283 +}
  1284 +
  1285 +.device_config_table dl dt:nth-of-type(16), .device_config_table dl dd:nth-of-type(16) {
  1286 + width: 3%;
  1287 +}
  1288 +
  1289 +.device_config_table dl dt:nth-of-type(17), .device_config_table dl dd:nth-of-type(17) {
  1290 + width: 4%;
  1291 +}
  1292 +
  1293 +.device_config_table dl dt:nth-of-type(18), .device_config_table dl dd:nth-of-type(18) {
  1294 + width: 13%;
  1295 +}
  1296 +
  1297 +.uk-tooltip {
  1298 + z-index: 29999999 !important;
  1299 +}
  1300 +
  1301 +.device_config_table.ct_table dl dd,
  1302 +.device_config_table.ct_table dl dt {
  1303 + border-right: 1px solid #dedede !important;
  1304 +}
  1305 +
  1306 +.device_configs_manager .search_form {
  1307 + text-indent: 12px;
  1308 + margin-bottom: 0;
  1309 + padding: 18px 5px;
  1310 +}
  1311 +
  1312 +.sub_task_form_v2 {
  1313 + background: #f9f9f9;
  1314 + padding: 12px 15px;
  1315 + border-radius: 5px 0 5px 5px;
  1316 + border: 1px solid #dfdfdf;
  1317 + position: relative;
  1318 + margin-bottom: 20px;
  1319 +}
  1320 +
  1321 +.task_form_close_icon {
  1322 + background: #f9f9f9;
  1323 + padding: 0px 4px;
  1324 + position: absolute;
  1325 + top: -8px;
  1326 + right: -8px;
  1327 + color: #898989;
  1328 + font-size: 15px;
  1329 + border: 1px solid #dfdfdf;
  1330 + border-radius: 100%;
  1331 + border-left: none;
  1332 + border-bottom: none;
  1333 + transition: all .03s;
  1334 +}
  1335 +
  1336 +.task_form_close_icon:hover {
  1337 + border: 1px solid #ff1515;
  1338 + border-left: none;
  1339 + border-bottom: none;
  1340 + color: #e03e3e;
  1341 +}
  1342 +
  1343 +.sub_task_form_v2:hover::after {
  1344 + color: #5f5b5b;
  1345 +}
  1346 +
  1347 +.sub_task_form_v2.uk-form-horizontal .uk-form-label {
  1348 + width: 80px;
  1349 +}
  1350 +
  1351 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls {
  1352 + margin-left: 85px;
  1353 +}
  1354 +
  1355 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=text],
  1356 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls input[type=time],
  1357 +.sub_task_form_v2.uk-form-horizontal .uk-form-controls select {
  1358 + width: 100%;
  1359 +}
  1360 +
  1361 +#add-sub-task-main-modal .uk-modal-footer {
  1362 + background: none;
  1363 + border-top: none;
  1364 +}
  1365 +
  1366 +#add-sub-task-main-modal .uk-grid + .uk-grid {
  1367 + margin-top: 12px;
  1368 +}
  1369 +
  1370 +#add-sub-task-main-modal .plus_icon_span {
  1371 + font-size: 26px;
  1372 + color: #b2b2b2;
  1373 + padding: 10px 64px;
  1374 + display: inline-block;
  1375 + border: 1px dashed grey;
  1376 + margin: 15px 0;
  1377 + border-radius: 5px;
  1378 + cursor: pointer;
  1379 +}
  1380 +
  1381 +#add-sub-task-main-modal .uk-animation-fade {
  1382 + animation-duration: .3s;
  1383 +}
  1384 +
  1385 +#add-sub-task-main-modal .forms {
  1386 + max-height: 642px;
  1387 + overflow-y: auto;
  1388 + overflow-x: hidden;
  1389 + padding: 8px 8px 0 0;
  1390 +}
  1391 +
  1392 +.add_custom_wrap .forms .sub_task_form_v2:last-child {
  1393 + margin-bottom: 0;
  1394 +}
  1395 +
  1396 +.sub_task_form_v2.destroy_form {
  1397 + background-color: #fff5f4 !important;
  1398 +}
  1399 +
  1400 +.uk-form > .half_change_car_box {
  1401 + margin: -10px 0 15px;
  1402 + padding: 3px 5px;
  1403 + display: inline-block;
  1404 + border: 1px solid #dfdddd;
  1405 + color: #918f8f;
  1406 +}
  1407 +
  1408 +.half_change_car_box input[type=checkbox] {
  1409 + vertical-align: top;
  1410 +}
  1411 +
  1412 +.uk-form > .half_change_car_box.active {
  1413 + background: #4CAF50;
  1414 + color: #fff;
  1415 +}
  1416 +
  1417 +.uk-form > .half_change_car_box.active input[type=checkbox] {
  1418 + background: #4caf50;
  1419 + border-color: #4caf50;
  1420 +}
  1421 +
  1422 +.uk-form > .half_change_car_box.active input[type=checkbox]:before {
  1423 + color: #ffffff;
  1424 +}
  1425 +
  1426 +.sub_task_form_v2.change_car {
  1427 + z-index: 99;
  1428 +}
  1429 +
  1430 +.st_range_top_form {
  1431 + padding: 0 0 15px 5px;
  1432 + border: 1px solid #c4bb76;
  1433 + background: #e5e1c1;
  1434 + margin-bottom: 15px;
  1435 + box-shadow: 0px 4px 3px 0 rgba(142, 138, 138, 0.2), 0px 4px 5px 0 rgba(157, 156, 156, 0.19);
  1436 +}
  1437 +
  1438 +.st_range_top_form .uk-form-row {
  1439 + margin-top: 20px;
  1440 +}
  1441 +
  1442 +.uk-form-horizontal.st_range_top_form .uk-form-label {
  1443 + width: 80px;
  1444 +}
  1445 +
  1446 +.uk-form-horizontal.st_range_top_form .uk-form-controls {
  1447 + margin-left: 84px;
  1448 +}
  1449 +
  1450 +.uk-form-horizontal.st_range_top_form .uk-form-controls select {
  1451 + width: calc(100% - 2px);
  1452 +}
  1453 +
  1454 +.sub_task_form_v2.service_st_form {
  1455 + background: #f4faff;
  1456 +}
  1457 +
  1458 +.uk-modal .uk-form.fv-form.sub_task_form_v2 {
  1459 + margin-bottom: 20px !important;
  1460 +}
  1461 +
  1462 +.sub_task_table_wrap .ct_table > .ct_table_body {
  1463 + border-bottom: none;
  1464 +}
  1465 +
  1466 +.err_panel {
  1467 + font-size: 12px;
  1468 + color: #7e7d7d;
  1469 + font-family: 微软雅黑;
  1470 + margin-top: 5px;
  1471 +}
  1472 +
  1473 +#schedule-lp_change-modal .ct_table dl {
  1474 + height: 35px;
  1475 +}
  1476 +
  1477 +#schedule-lp_change-modal .ct_table dl dd, #schedule-lp_change-modal .ct_table dl dt {
  1478 + line-height: 35px;
  1479 +}
  1480 +
  1481 +/*
  1482 +.sub_task_form_v2.repeat_main:before{
  1483 + content: '复';
  1484 + position: absolute;
  1485 + top: -10px;
  1486 + font-size: 12px;
  1487 + color: #2196F3;
  1488 + background: #ffffff;
  1489 + padding: 0 3px;
  1490 + font-weight: 600;
  1491 +}*/
  1492 +
  1493 +.sub_task_form_v2:before {
  1494 + position: absolute;
  1495 + top: -7px;
  1496 + font-size: 12px;
  1497 + padding: 0 3px;
  1498 + font-weight: 600;
  1499 + line-height: 14px;
  1500 +}
  1501 +
  1502 +.sub_task_form_v2.destroy_form:before {
  1503 + content: '烂班' !important;
  1504 + color: #f14235 !important;
  1505 + background: #ffffff !important;
  1506 +}
  1507 +
  1508 +.sub_task_form_v2.service_form:before {
  1509 + content: '营运';
  1510 + color: #2196F3;
  1511 + background: #ffffff;
  1512 +}
  1513 +
  1514 +.sub_task_form_v2.service_form.temp_service:before {
  1515 + content: '营运 (临加)';
  1516 + color: #9C27B0;
  1517 + background: #ffffff;
  1518 +}
  1519 +
  1520 +.sub_task_form_v2.service_form.temp_service {
  1521 + background: #faf0fd;
  1522 +}
  1523 +
  1524 +.sub_task_form_v2.empty_form:before {
  1525 + content: '空驶';
  1526 + color: #928f92;
  1527 + background: #ffffff;
  1528 +}
  1529 +
  1530 +.sub_task_form_v2.service_form {
  1531 + background: #f4faff;
  1532 +}
  1533 +
  1534 +/*.sub_task_form_v2.repeat_main.destroy_form:before{
  1535 + color: #F44336;
  1536 +}
  1537 +
  1538 +.sub_task_form_v2.repeat_main{
  1539 + background: #f4faff;
  1540 +}*/
  1541 +.footer_tools {
  1542 + position: absolute;
  1543 + left: 235px;
  1544 + bottom: 19px;
  1545 +}
  1546 +
  1547 +.footer_mileage_count {
  1548 + border: 1px solid #f2f2f2;
  1549 + padding: 5px;
  1550 + box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.2), 0px 2px 7px 0 rgba(0, 0, 0, 0.19);
  1551 + display: inline-block;
  1552 +}
  1553 +
  1554 +.footer_mileage_count > span {
  1555 + padding: 2px 5px;
  1556 +}
  1557 +
  1558 +.footer_mileage_count > span.service_sum {
  1559 + color: #2196F3;
  1560 +}
  1561 +
  1562 +.footer_mileage_count > span.empty_sum {
  1563 + color: #636363;
  1564 +}
  1565 +
  1566 +.footer_mileage_count > span.destroy_sum {
  1567 + color: #f5574b;
  1568 +}
  1569 +
  1570 +.station_to_park_link {
  1571 + display: inline-block;
  1572 + margin-left: 15px;
  1573 + vertical-align: bottom;
  1574 + font-size: 12px;
  1575 +}
  1576 +
  1577 +.station_to_park_link > a {
  1578 + color: #607D8B;
  1579 +}
  1580 +
  1581 +#station_to_park-modal.ct-form-modal form input[type=text],
  1582 +#station_to_park-modal.ct-form-modal form select {
  1583 + width: auto;
  1584 +}
  1585 +
  1586 +.s_2_park_form_wrap {
  1587 + background: #fafafa;
  1588 + border: 1px solid #e5e5e5;
  1589 + padding: 7px 16px;
  1590 + margin: 15px 0;
  1591 + position: relative;
  1592 +}
  1593 +
  1594 +.s_2_park_form_wrap .ct_close {
  1595 + position: absolute;
  1596 + top: -12px;
  1597 + padding: 0 4px;
  1598 + right: -8px;
  1599 + color: #939393;
  1600 + border: 1px solid #f7dfdf;
  1601 + border-radius: 25px;
  1602 + cursor: pointer;
  1603 +}
  1604 +
  1605 +.s_2_park_form_wrap .ct_close:hover {
  1606 + background: #e5e5e5;
  1607 + color: #fd6e6e;
  1608 +}
  1609 +
  1610 +.s_2_park_form_wrap label {
  1611 + color: #666;
  1612 + font-size: 13px;
  1613 +}
  1614 +
  1615 +#station_to_park-modal.ct-form-modal form input[readonly] {
  1616 + background: #fafafa;
  1617 +}
  1618 +
  1619 +.s_2_park_form_wrap .bottom_label {
  1620 + margin-top: 25px;
  1621 + display: block;
  1622 +}
  1623 +
  1624 +.s_2_park_form_wrap .bottom_label_2 {
  1625 + margin-top: 4px;
  1626 + display: block;
  1627 +}
  1628 +
  1629 +.ct_describe {
  1630 + font-size: 12px;
  1631 + color: #909090;
  1632 + font-family: FontAwesome;
  1633 +}
  1634 +
  1635 +.ct_describe:before {
  1636 + content: "\f059";
  1637 + margin-right: 3px;
  1638 +}
  1639 +
  1640 +#add-sub-task-main-modal abbr {
  1641 + display: inline-block;
  1642 + font-size: 12px;
  1643 + margin-left: 25px;
  1644 + vertical-align: bottom;
  1645 + color: #929292;
  1646 +}
  1647 +
  1648 +#all-devices-modal .search-form input[type=text] {
  1649 + width: 100px;
  1650 +}
  1651 +
  1652 +#all-devices-modal .auto-refresh {
  1653 + vertical-align: middle;
  1654 + margin-left: 5px;
  1655 + color: grey;
  1656 +}
  1657 +
  1658 +#all-devices-modal .auto-refresh.active {
  1659 + color: #405dff;
  1660 +}
  1661 +
  1662 +#all-devices-modal .uk-margin-small-top {
  1663 + margin-top: 0 !important;
  1664 +}
  1665 +
  1666 +#history-sch-maintain-modal .add_lp_link {
  1667 + display: inline-block;
  1668 + vertical-align: bottom;
  1669 + margin-left: 15px;
  1670 + text-decoration: underline;
  1671 + font-size: 13px;
  1672 +}
  1673 +
  1674 +#schedule-tzrc-modal input[type=checkbox] {
  1675 + margin-right: 9px;
  1676 +}
  1677 +
  1678 +#schedule-tzrc-modal span.ct_zt_yzx {
  1679 + color: #2196F3;
  1680 + font-size: 12px;
  1681 +}
  1682 +
  1683 +#schedule-tzrc-modal span.ct_zt_lb {
  1684 + color: red;
  1685 + font-size: 12px;
  1686 +}
  1687 +
  1688 +#schedule-tzrc-modal span.ct_zt_zzzx {
  1689 + font-size: 12px;
  1690 + color: #38ad3c;
  1691 +}
  1692 +
  1693 +#schedule-tzrc-modal .tzrc_form {
  1694 + padding: 20px;
  1695 + border: 1px solid #f0eded;
  1696 + box-shadow: 0px -3px 15px rgba(0, 0, 0, 0.08);
  1697 + background: #f9f9f9;
  1698 +}
  1699 +
  1700 +.uk-panel.ct_search_panel {
  1701 + padding: 15px;
  1702 + border: 1px solid #f0eded;
  1703 + box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.08);
  1704 + background: #f9f9f9;
  1705 +}
  1706 +
  1707 +.sch-tzrc-table.ct_table dl.active,
  1708 +.sch-tzrc-table.ct_table > .ct_table_body dl.active:hover {
  1709 + background: #5bd460;
  1710 + color: white;
  1711 +}
  1712 +
  1713 +#schedule-tzrc-modal dl.active span.ct_zt_yzx {
  1714 + color: #545252;
  1715 +}
  1716 +
  1717 +#schedule-tzrc-modal dl.active span.ct_zt_lb {
  1718 + color: #d64949;
  1719 +}
  1720 +
  1721 +#schedule-tzrc-modal dl.active span.ct_zt_zzzx {
  1722 + color: white;
  1723 +}
  1724 +
  1725 +#schedule-tzrc-modal dl.active input[type=checkbox] {
  1726 + border: 0;
  1727 +}
  1728 +
  1729 +#schedule-tzrc-modal dl.active input[type=checkbox]:before {
  1730 + color: #ffffff;
  1731 +}
  1732 +
  1733 +.sch-search-autocom input {
  1734 + padding: 0 !important;
  1735 + height: 100% !important;
  1736 +}
  1737 +
  1738 +label.blue_checkbox {
  1739 + margin-left: 12px;
  1740 +}
  1741 +
  1742 +label.blue_checkbox > input {
  1743 + width: 17px !important;
  1744 + height: 17px !important;
  1745 +}
  1746 +
  1747 +label.blue_checkbox > input:checked:before,
  1748 +label.blue_checkbox > input:indeterminate:before {
  1749 + line-height: 15px !important;
  1750 +}
  1751 +
  1752 +dd.disabled {
  1753 + color: #b5b3b3;
  1754 +}
  1755 +
  1756 +dl.active > dd.disabled {
  1757 + color: #ececec;
  1758 +}
  1759 +
  1760 +#change_user_options-modal .user_info {
  1761 + width: 360px;
  1762 + margin: auto;
  1763 +}
  1764 +
  1765 +.display_hide {
  1766 + display: none;
  1767 +}
  1768 +
  1769 +.ct_eye_icon {
  1770 + font-size: 16px;
  1771 + cursor: pointer;
  1772 +}
  1773 +
  1774 +.ct_eye_icon.active {
  1775 + color: #444;
  1776 +}
  1777 +
  1778 +#tempScheduleContent .forms::-webkit-scrollbar {
  1779 + width: 19px;
  1780 + height: 16px;
  1781 +}
  1782 +
  1783 +.range_2_normal_tt {
  1784 + margin-bottom: 15px;
  1785 + border-top: 1px dashed #c7c7c7;
  1786 + color: #a6a6a6;
  1787 + text-indent: 7px;
  1788 + padding-bottom: 5px;
  1789 +}
  1790 +
  1791 +.cancel_link {
  1792 + font-size: 12px;
  1793 + margin-left: 15px;
  1794 + vertical-align: bottom;
  1795 + color: #8d8d8d;
  1796 + text-decoration: underline;
  1797 + position: absolute;
  1798 + right: 0;
  1799 +}
  1800 +
  1801 +.edit_link {
  1802 + font-size: 12px;
  1803 + margin-left: 15px;
  1804 + vertical-align: bottom;
  1805 + color: #ff2f2f;
  1806 + text-decoration: underline;
  1807 +}
  1808 +
  1809 +.c_b_abnorm_notice {
  1810 + position: absolute;
  1811 + bottom: 0;
  1812 + margin: auto;
  1813 + width: 351px;
  1814 + padding: 7px;
  1815 + background: #ffffff;
  1816 + box-shadow: 5px 5px 15px rgba(90, 90, 90, 0.48);
  1817 + max-height: 125px;
  1818 + overflow-y: auto;
  1819 + min-height: 40px;
  1820 +}
  1821 +
  1822 +.c_b_abnorm_notice:before {
  1823 + content: "-超速报警-";
  1824 + color: #000000;
  1825 + font-size: 12px;
  1826 + font-family: 微软雅黑;
  1827 + position: fixed;
  1828 + background: #ffd967;
  1829 + margin-top: -10px;
  1830 + margin-left: -6px;
  1831 + padding: 0 7px;
  1832 + box-shadow: 2px 4px 7px rgba(90, 90, 90, 0.25);
  1833 +}
  1834 +
  1835 +.c_b_item {
  1836 + margin: 7px 0;
  1837 + padding: 7px 12px;
  1838 + box-shadow: 0px 0px 10px rgba(90, 90, 90, 0.29);
  1839 + color: #FF5722;
  1840 + cursor: pointer;
  1841 +}
  1842 +
  1843 +.c_b_abnorm_notice > .c_b_item:first-child {
  1844 + margin-top: 20px;
  1845 +}
  1846 +
  1847 +.c_b_item.over {
  1848 + color: grey;
  1849 +}
  1850 +
  1851 +.c_b_item > span.c_b_over {
  1852 + float: right;
  1853 +}
  1854 +
  1855 +.mileage_elec_panel {
  1856 + position: absolute;
  1857 + width: 100%;
  1858 + /*height: 90px;*/
  1859 + z-index: 1;
  1860 + background: white;
  1861 + bottom: 0px;
  1862 + box-shadow: 1px 0px 15px rgba(90, 90, 90, 0.48);
  1863 + padding: 9px 15px;
  1864 + border-radius: 0 5px;
  1865 + color: #000;
  1866 +
  1867 + display: none;
  1868 +}
  1869 +
  1870 +.mileage_elec_panel ._title {
  1871 + margin: 5px 3px;
  1872 + font-size: 15px;
  1873 +}
  1874 +
  1875 +.mileage_elec_panel .LD_item {
  1876 + margin: 5px 0;
  1877 + font-family: 微软雅黑;
  1878 +}
  1879 +
  1880 +.mileage_elec_panel .LD_item > span {
  1881 + padding: 3px;
  1882 + display: inline-block;
  1883 + width: 85px;
  1884 +}
  1885 +
  1886 +.mileage_elec_panel .lp_name {
  1887 + padding: 0 5px;
  1888 + background: #f2f2f2;
  1889 + border-radius: 15px
  1890 +}
  1891 +
  1892 +.mileage_elec_panel .LD_item > span > a {
  1893 + color: #000;
  1894 +}
  1895 +
  1896 +.mileage_elec_panel .LD_item > span:nth-of-type(1) > a {
  1897 + color: blue;
  1898 +}
  1899 +
  1900 +/*.mileage_elec_panel .LD_item>span:nth-of-type(2)>a{
  1901 + color: #fa3a2c;
  1902 +}
  1903 +
  1904 +.mileage_elec_panel .LD_item>span:nth-of-type(3)>a{
  1905 + color: #515151;
  1906 +}*/
  1907 +
  1908 +.mileage_elec_panel hr {
  1909 + height: 1px;
  1910 + border: none;
  1911 + border-top: 1px dashed #b5b5b5;
  1912 +}
  1913 +
  1914 +#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-label {
  1915 + width: 70px;
  1916 +}
  1917 +
  1918 +#edit-sub-task-main-modal .sub_task_form_v2.uk-form-horizontal .uk-form-controls {
  1919 + margin-left: 75px;
  1920 +}
  1921 +
  1922 +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid + .uk-grid,
  1923 +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid-margin,
  1924 +#edit-sub-task-main-modal .sub_task_form_v2 .uk-grid > * > .uk-panel + .uk-panel {
  1925 + margin-top: 22px;
  1926 +}
  1927 +
  1928 +.c_task_mileage_abnormal,
  1929 +.c_task_mileage_abnormal .ct_table > .ct_table_head dl,
  1930 +.c_task_mileage_abnormal .ct_table dl {
  1931 + background: #ffe7e7 !important;
  1932 +}
  1933 +
  1934 +.tip_task_count_dl {
  1935 + width: calc(100% + 22px) !important;
  1936 + margin-left: -11px !important;
  1937 + border-top: 1px solid #e6e6e6 !important;
  1938 +}
  1939 +
  1940 +.tip_task_count_dl > dd:last-child {
  1941 + width: calc(100% - 50px) !important;
  1942 + border-right: 0 !important;
  1943 + height: 35px !important;
  1944 + background: #f3f3f3;
  1945 + margin-bottom: -3px;
  1946 +}
  1947 +
  1948 +.tip_task_count_dl > dd:nth-of-type(1) {
  1949 + text-align: center;
  1950 + border-right: 0 !important;
  1951 + width: 48px !important;
  1952 +}
  1953 +
  1954 +.tip_task_count_dl > dd:nth-of-type(1) > i {
  1955 + padding: 6px;
  1956 + cursor: pointer;
  1957 +}
  1958 +
  1959 +.tip_task_count_dl > dd:nth-of-type(1) > i:hover {
  1960 + background: #ebebeb;
  1961 +}
  1962 +
  1963 +.tip_task_count_dl.c_task_error > dd:last-child {
  1964 + background: #ff8a81;
  1965 +}
  1966 +
  1967 +.tip_task_count_dl > dd > span {
  1968 + font-size: 13px;
  1969 + color: #000;
  1970 + height: 55px;
  1971 + display: inline-block;
  1972 + padding: 7px 0;
  1973 + border-radius: 0;
  1974 + text-indent: 12px;
  1975 +}
  1976 +
  1977 +.tip_task_list > dl:nth-last-child(2) {
  1978 + border-bottom: 0 !important;
  1979 +}
  1980 +
  1981 +.c_task_mileage_error {
  1982 + border: 1px solid rgba(218, 13, 13, 0.2);
  1983 + border-bottom-color: rgba(213, 37, 37, 0.3);
  1984 + background-image: -webkit-linear-gradient(top, #ff6155, #F44336);
  1985 +}
  1986 +
  1987 +.uk-badge.c_task.c_task_mileage_error:hover:hover {
  1988 + background-image: none;
  1989 + background: #ff6155;
  1990 + border: 1px solid rgba(213, 37, 37, 0.3);
  1991 +}
  1992 +
  1993 +.grey_link {
  1994 + color: #adabab;
  1995 +}
  1996 +
  1997 +#sch_car_info_all-modal tr.ct_active {
  1998 + -moz-animation: twinkle_bg .9s ease-in-out;
  1999 + -webkit-animation: twinkle_bg .9s ease-in-out;
  2000 +}
  2001 +
  2002 +#sch_car_info_all-modal .uk-table-hover tr:hover{
  2003 + background: #dddddd;
  2004 +}
  2005 +
  2006 +@-moz-keyframes twinkle_bg {
  2007 + 0% {
  2008 + background: rgba(254, 235, 69, 0.38);
  2009 + }
  2010 + 25% {
  2011 + background: rgba(254, 235, 69, 0.7);
  2012 + }
  2013 + 50% {
  2014 + background: rgba(254, 235, 69, 0.3);
  2015 + }
  2016 + 75% {
  2017 + background: rgba(254, 235, 69, 0.7);
  2018 + }
  2019 + 100% {
  2020 + background: rgba(254, 235, 69, 0.38);
  2021 + }
  2022 +}
  2023 +
  2024 +@-webkit-keyframes twinkle_bg {
  2025 + 0% {
  2026 + background: rgba(254, 235, 69, 0.38);
  2027 + }
  2028 + 25% {
  2029 + background: rgba(254, 235, 69, 0.7);
  2030 + }
  2031 + 50% {
  2032 + background: rgba(254, 235, 69, 0.3);
  2033 + }
  2034 + 75% {
  2035 + background: rgba(254, 235, 69, 0.7);
  2036 + }
  2037 + 100% {
  2038 + background: rgba(254, 235, 69, 0.38);
  2039 + }
  2040 +}
  2041 +
  2042 +.home_svg_tips>div{
  2043 + overflow: hidden;
  2044 + text-overflow: ellipsis;
  2045 + white-space: nowrap;
  2046 +}
  2047 +
  2048 +.tab-line.destroy>a{
  2049 + background: #ff5c5c;
  2050 + color: #fff !important;
  2051 + border-radius: 0;
  2052 +}
  2053 +
  2054 +.tab-line.destroy>a:hover{
  2055 + background: #ff3333 !important;
  2056 + border-color: #ff3333 !important;
  2057 +}
  2058 +
  2059 +.uk-tab>li.uk-active.destroy>a{
  2060 + color: red !important;
  2061 +}
  2062 +
  2063 +.uk-tab>li.uk-active.destroy>a:hover{
  2064 + background: #fff !important;
  2065 +}
  2066 +
  2067 +.warn_multi_station{
  2068 + font-size: 12px;
  2069 + margin-left: 40px;
  2070 + background: yellow;
  2071 + color: #1c1c1c;
  2072 + padding: 4px 10px;
  2073 + cursor: pointer;
  2074 + display: none;
  2075 +}
  2076 +
  2077 +.warn_multi_station:hover{
  2078 + background: #f8f81e;
  2079 +}
  2080 +
  2081 +.tp_info_icon{
  2082 + font-size: 14px;
  2083 + cursor: pointer;
  2084 +}
  2085 +
  2086 +g.gps-wrap rect.twinkle[updown="0"] {
  2087 + animation: anim_bg_twinkle_up 1.4s;
  2088 +}
  2089 +
  2090 +@keyframes anim_bg_twinkle_up {
  2091 + 0% {
  2092 + fill: yellow;
  2093 + stroke: yellow;
  2094 + }
  2095 + 25% {
  2096 + stroke: rgb(62, 80, 179);
  2097 + fill: rgb(62, 80, 179);
  2098 + }
  2099 + 50% {
  2100 + fill: yellow;
  2101 + stroke: yellow;
  2102 + }
  2103 + 100% {
  2104 + stroke: rgb(62, 80, 179);
  2105 + fill: rgb(62, 80, 179);
  2106 + }
  2107 +}
  2108 +
  2109 +g.gps-wrap rect.twinkle[updown="1"] {
  2110 + animation: anim_bg_twinkle_down 1.4s;
  2111 +}
  2112 +
  2113 +@keyframes anim_bg_twinkle_down {
  2114 + 0% {
  2115 + fill: yellow;
  2116 + stroke: yellow;
  2117 + }
  2118 + 25% {
  2119 + stroke: #c94f21;
  2120 + fill: #c94f21;
  2121 + }
  2122 + 50% {
  2123 + fill: yellow;
  2124 + stroke: yellow;
  2125 + }
  2126 + 100% {
  2127 + stroke: #c94f21;
  2128 + fill: #c94f21;
  2129 + }
2130 } 2130 }
2131 \ No newline at end of file 2131 \ No newline at end of file
src/main/resources/static/real_control_v2/js/con_plan/conPlan.js 0 → 100644
  1 +/**
  2 + * 应急预案相关
  3 + */
  4 +var gb_con_plan = (function () {
  5 + var $wrap = $('.multi_plat_msg_pop_wrap');
  6 + var max = 5;
  7 +
  8 + var pop = function (data) {
  9 + //时间格式化
  10 + var stm = moment(data.instructionsTime);
  11 + data.timeStr = stm.format('HH时mm分ss秒');
  12 + data.type = 'cp';
  13 +
  14 + var htmlStr = template('cp_plat_msg_template', data);
  15 + var items = $wrap.find('.multi_plat_msg_pop'), len = items.length;
  16 + if (len >= max)
  17 + $wrap.find('.multi_plat_msg_pop:lt(' + (len - max) + ')').remove();
  18 +
  19 + $wrap.append(htmlStr);
  20 + };
  21 +
  22 + return {
  23 + pop: pop
  24 + }
  25 +})();
0 \ No newline at end of file 26 \ No newline at end of file
src/main/resources/static/real_control_v2/js/safe_driv/safeDriv.js
@@ -19,7 +19,7 @@ var gb_safe_driv = (function () { @@ -19,7 +19,7 @@ var gb_safe_driv = (function () {
19 19
20 var path = 'http://211.95.61.66:9005/CurrentSafeDriving/'; 20 var path = 'http://211.95.61.66:9005/CurrentSafeDriving/';
21 21
22 - var $wrap = $('.safe_driv_pop_wrap'); 22 + var $wrap = $('.multi_plat_msg_pop_wrap');
23 var max = 5; 23 var max = 5;
24 24
25 var pop = function (sd) { 25 var pop = function (sd) {
@@ -40,35 +40,56 @@ var gb_safe_driv = (function () { @@ -40,35 +40,56 @@ var gb_safe_driv = (function () {
40 40
41 var url = stm.format('YYYYMMDD')+'/'+p+'/'+p; 41 var url = stm.format('YYYYMMDD')+'/'+p+'/'+p;
42 sd.url = path + url + '.gif'; 42 sd.url = path + url + '.gif';
  43 + sd.type = 'sd';
43 44
44 - var htmlStr = template('safe_driv_item-temp', sd);  
45 - var items = $wrap.find('.safe_driv_pop'), len = items.length; 45 + var htmlStr = template('sd_plat_msg_template', sd);
  46 + var items = $wrap.find('.multi_plat_msg_pop'), len = items.length;
46 if (len >= max) 47 if (len >= max)
47 - $wrap.find('.safe_driv_pop:lt(' + (len - max) + ')').remove(); 48 + $wrap.find('.multi_plat_msg_pop:lt(' + (len - max) + ')').remove();
48 49
49 $wrap.append(htmlStr); 50 $wrap.append(htmlStr);
50 }; 51 };
51 52
52 53
53 54
54 - $wrap.on('click', '.safe_driv_pop', function () {  
55 - var nbbm = $(this).data('nbbm'), ts = $(this).data('ts');  
56 - var call_btn_html = '<button class="uk-button uk-button-mini uk-button-primary" ' +  
57 - 'id="m_voip_call_btn_001" ' +  
58 - 'type="button" ' +  
59 - 'data-nbbm="'+nbbm+'">打电话</button>'; 55 + $wrap.on('click', '.multi_plat_msg_pop', function () {
  56 + var type = $(this).data('type');
  57 + switch (type) {
  58 + // 安全驾驶平台的数据
  59 + case 'sd':
  60 + var nbbm = $(this).data('nbbm'), ts = $(this).data('ts');
  61 + var call_btn_html = '<button class="uk-button uk-button-mini uk-button-primary" ' +
  62 + 'id="m_voip_call_btn_001" ' +
  63 + 'type="button" ' +
  64 + 'data-nbbm="'+nbbm+'">打电话</button>';
  65 +
  66 + var title = $(this).data('title') + '&nbsp;' + call_btn_html;
  67 + var url = $(this).data('url');
  68 + $(this).remove();
  69 +
  70 + var lightbox = UIkit.lightbox.create([
  71 + {title: title, 'source': url}
  72 + ], {keyboard: false});
  73 +
  74 + lightbox.show();
  75 +
  76 + $.post('/realSchedule/ackDsm', {ts : ts, nbbm : nbbm}, function(res) {});
  77 + break;
  78 + // 应急预案平台
  79 + case 'cp':
  80 + var id = $(this).data('id'), confirm = $(this).data('confirm');
  81 + $(this).remove();
  82 + if (confirm == '确认') {
  83 + $.post('/realSchedule/ackCp', {id : id}, function(res) {});
  84 + }
  85 + break;
  86 + // 机务保养平台
  87 + case 'jw':
  88 + break;
  89 + default:
  90 + break;
  91 + }
60 92
61 - var title = $(this).data('title') + '&nbsp;' + call_btn_html;  
62 - var url = $(this).data('url');  
63 - $(this).remove();  
64 -  
65 - var lightbox = UIkit.lightbox.create([  
66 - {title: title, 'source': url}  
67 - ], {keyboard: false});  
68 -  
69 - lightbox.show();  
70 -  
71 - $.post('/realSchedule/ackDsm', {ts : ts, nbbm : nbbm}, function(res) {});  
72 }); 93 });
73 94
74 var channelMap = { 95 var channelMap = {
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
@@ -192,6 +192,11 @@ var gb_sch_websocket = (function () { @@ -192,6 +192,11 @@ var gb_sch_websocket = (function () {
192 gb_schedule_table.refreshRfid(msg.data); 192 gb_schedule_table.refreshRfid(msg.data);
193 }; 193 };
194 194
  195 + var contingencyPlan = function (msg){
  196 + debugger
  197 + gb_con_plan.pop(msg.data);
  198 + };
  199 +
195 var msgHandle = { 200 var msgHandle = {
196 report80: report80, 201 report80: report80,
197 faChe: faChe, 202 faChe: faChe,
@@ -203,7 +208,8 @@ var gb_sch_websocket = (function () { @@ -203,7 +208,8 @@ var gb_sch_websocket = (function () {
203 deviceOffline: deviceOffline, 208 deviceOffline: deviceOffline,
204 safeDriv: safeDriv, 209 safeDriv: safeDriv,
205 auto_wdtz: autoWdtz, 210 auto_wdtz: autoWdtz,
206 - rfid: refreshRfid 211 + rfid: refreshRfid,
  212 + contingencyPlan: contingencyPlan
207 }; 213 };
208 214
209 function currentSecond() { 215 function currentSecond() {
src/main/resources/static/real_control_v2/main.html
@@ -225,9 +225,9 @@ @@ -225,9 +225,9 @@
225 <script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script> 225 <script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>
226 226
227 <!-- #### 安全驾驶 start ### --> 227 <!-- #### 安全驾驶 start ### -->
228 -<div class="safe_driv_pop_wrap" ></div>  
229 -<script id="safe_driv_item-temp" type="text/html">  
230 - <div class="safe_driv_pop uk-animation-slide-bottom" data-nbbm="{{clzbh}}" data-type="{{yczltype}}" data-title="{{clzbh}} {{timeStr}} {{ycztText}}" data-url="{{url}}" data-ts="{{ts}}"> 228 +<div class="multi_plat_msg_pop_wrap" ></div>
  229 +<script id="sd_plat_msg_template" type="text/html">
  230 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" data-type="{{type}}" data-nbbm="{{clzbh}}" data-type="{{yczltype}}" data-title="{{clzbh}} {{timeStr}} {{ycztText}}" data-url="{{url}}" data-ts="{{ts}}">
231 <div> 231 <div>
232 <span class="title">异常&nbsp;{{clzbh}}</span> 232 <span class="title">异常&nbsp;{{clzbh}}</span>
233 <span class="text"> {{timeStr}} 出现违规驾驶({{ycztText}})</span> 233 <span class="text"> {{timeStr}} 出现违规驾驶({{ycztText}})</span>
@@ -235,8 +235,18 @@ @@ -235,8 +235,18 @@
235 </div> 235 </div>
236 </div> 236 </div>
237 </script> 237 </script>
  238 +<script id="cp_plat_msg_template" type="text/html">
  239 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" data-type="{{type}}" data-id="{{id}}" data-confirm="{{responseState}}" data-ts="{{ts}}">
  240 + <div>
  241 + <span class="title">应急预案</span>
  242 + <span class="text"> {{instructionsContent}}</span>
  243 + <span class="desc">--应急预案平台</span>
  244 + </div>
  245 + </div>
  246 +</script>
238 247
239 <script src="/real_control_v2/js/safe_driv/safeDriv.js" merge="custom_js"></script> 248 <script src="/real_control_v2/js/safe_driv/safeDriv.js" merge="custom_js"></script>
  249 +<script src="/real_control_v2/js/con_plan/conPlan.js" merge="custom_js"></script>
240 <!-- #### 安全驾驶 end ### --> 250 <!-- #### 安全驾驶 end ### -->
241 251
242 <!-- 打电话 --> 252 <!-- 打电话 -->