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 230 try {
231 231 socketHandler.sendMessageToLine(sch.getXlBm(), mapper.writeValueAsString(map));
232 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 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 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 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 19  
20 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 23 var max = 5;
24 24  
25 25 var pop = function (sd) {
... ... @@ -40,35 +40,56 @@ var gb_safe_driv = (function () {
40 40  
41 41 var url = stm.format('YYYYMMDD')+'/'+p+'/'+p;
42 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 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 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 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 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 200 var msgHandle = {
196 201 report80: report80,
197 202 faChe: faChe,
... ... @@ -203,7 +208,8 @@ var gb_sch_websocket = (function () {
203 208 deviceOffline: deviceOffline,
204 209 safeDriv: safeDriv,
205 210 auto_wdtz: autoWdtz,
206   - rfid: refreshRfid
  211 + rfid: refreshRfid,
  212 + contingencyPlan: contingencyPlan
207 213 };
208 214  
209 215 function currentSecond() {
... ...
src/main/resources/static/real_control_v2/main.html
... ... @@ -225,9 +225,9 @@
225 225 <script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>
226 226  
227 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 231 <div>
232 232 <span class="title">异常&nbsp;{{clzbh}}</span>
233 233 <span class="text"> {{timeStr}} 出现违规驾驶({{ycztText}})</span>
... ... @@ -235,8 +235,18 @@
235 235 </div>
236 236 </div>
237 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 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 250 <!-- #### 安全驾驶 end ### -->
241 251  
242 252 <!-- 打电话 -->
... ...