Commit e8753aaede390239085f355e0caf772d27a5e789

Authored by 潘钊
1 parent e73b4f61

update...

Showing 34 changed files with 1199 additions and 244 deletions
src/main/java/com/bsth/controller/realcontrol/RealMapController.java
... ... @@ -49,6 +49,11 @@ public class RealMapController {
49 49 return realMapService.findRouteByLine(lineCode);
50 50 }
51 51  
  52 + @RequestMapping(value = "/multiRouteByLine")
  53 + public Map<String, Object> multiRouteByLine(@RequestParam String codeStr) {
  54 + return realMapService.multiRouteByLine(codeStr);
  55 + }
  56 +
52 57  
53 58 /**
54 59 * 获取线路的路段路由 和 站点路由信息 (为前端站间距计算提供数据源)
... ...
src/main/java/com/bsth/controller/sys/RealControAuthorityController.java 0 → 100644
  1 +package com.bsth.controller.sys;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.sys.RealControAuthority;
  5 +import com.bsth.service.sys.RealControAuthorityService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +
  11 +/**
  12 + * Created by panzhao on 2017/2/14.
  13 + */
  14 +@RestController
  15 +@RequestMapping("realControAuthority")
  16 +public class RealControAuthorityController extends BaseController<RealControAuthority, Integer> {
  17 +
  18 + @Autowired
  19 + RealControAuthorityService realControAuthorityService;
  20 +
  21 + @RequestMapping("findByUserId")
  22 + public RealControAuthority findByUserId(@RequestParam Integer userId){
  23 +
  24 + return realControAuthorityService.findByUserId(userId);
  25 + }
  26 +}
... ...
src/main/java/com/bsth/data/gpsdata/GpsEntity.java
... ... @@ -88,6 +88,9 @@ public class GpsEntity {
88 88 /** 越界距离 */
89 89 private double outOfBoundDistance;
90 90  
  91 + /** gps是否有效 设备端发送的状态 */
  92 + private int valid;
  93 +
91 94 public Integer getCompanyCode() {
92 95 return companyCode;
93 96 }
... ... @@ -280,4 +283,12 @@ public class GpsEntity {
280 283 public void setOutOfBoundDistance(double outOfBoundDistance) {
281 284 this.outOfBoundDistance = outOfBoundDistance;
282 285 }
  286 +
  287 + public int getValid() {
  288 + return valid;
  289 + }
  290 +
  291 + public void setValid(int valid) {
  292 + this.valid = valid;
  293 + }
283 294 }
... ...
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
... ... @@ -52,7 +52,7 @@ public class GpsRealData implements CommandLineRunner {
52 52 public void run(String... arg0) throws Exception {
53 53 logger.info("gpsDataLoader,20,5");
54 54 //定时从网关获取GPS数据
55   - //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 5, TimeUnit.SECONDS);
  55 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 15, TimeUnit.SECONDS);
56 56 //定时扫描掉离线
57 57  
58 58 }
... ...
src/main/java/com/bsth/entity/sys/RealControAuthority.java 0 → 100644
  1 +package com.bsth.entity.sys;
  2 +
  3 +import javax.persistence.*;
  4 +
  5 +/**
  6 + * 线调权限配置
  7 + * Created by panzhao on 2017/2/14.
  8 + */
  9 +@Entity
  10 +@Table(name = "bsth_c_real_control_authority")
  11 +public class RealControAuthority {
  12 +
  13 + @Id
  14 + private Integer userId;
  15 +
  16 + /**
  17 + * 可调度的线路 , 分隔多个
  18 + */
  19 + private String lineCodeStr;
  20 +
  21 + /**
  22 + * 调度模式 0: 监控模式 1:主调模式
  23 + */
  24 + private int pattern;
  25 +
  26 + public Integer getUserId() {
  27 + return userId;
  28 + }
  29 +
  30 + public void setUserId(Integer userId) {
  31 + this.userId = userId;
  32 + }
  33 +
  34 + public String getLineCodeStr() {
  35 + return lineCodeStr;
  36 + }
  37 +
  38 + public void setLineCodeStr(String lineCodeStr) {
  39 + this.lineCodeStr = lineCodeStr;
  40 + }
  41 +
  42 + public int getPattern() {
  43 + return pattern;
  44 + }
  45 +
  46 + public void setPattern(int pattern) {
  47 + this.pattern = pattern;
  48 + }
  49 +}
... ...
src/main/java/com/bsth/entity/sys/UserLine.java
1 1 package com.bsth.entity.sys;
2 2  
3   -import javax.persistence.Entity;
4   -import javax.persistence.GeneratedValue;
5   -import javax.persistence.GenerationType;
6   -import javax.persistence.Id;
7   -import javax.persistence.ManyToOne;
8   -import javax.persistence.Table;
9   -
10 3 import com.bsth.entity.Line;
11 4  
  5 +import javax.persistence.*;
  6 +
12 7 /**
13 8 *
14 9 * @ClassName: Line(用户线路分配实体类)
... ... @@ -20,6 +15,8 @@ import com.bsth.entity.Line;
20 15 * @Date 2016年8月26日 09:03:33
21 16 *
22 17 * @Version 公交调度系统BS版 0.1
  18 + *
  19 + * PS:这个类缺少主调监控模式的配置,暂不使用
23 20 *
24 21 */
25 22  
... ...
src/main/java/com/bsth/repository/sys/RealControAuthorityRepository.java 0 → 100644
  1 +package com.bsth.repository.sys;
  2 +
  3 +import com.bsth.entity.sys.RealControAuthority;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.data.jpa.repository.Query;
  6 +import org.springframework.stereotype.Repository;
  7 +
  8 +/**
  9 + * Created by panzhao on 2017/2/14.
  10 + */
  11 +@Repository
  12 +public interface RealControAuthorityRepository extends BaseRepository<RealControAuthority, Integer>{
  13 +
  14 + @Query("select t from RealControAuthority t where t.userId=?1")
  15 + RealControAuthority findByUserId(Integer userId);
  16 +}
... ...
src/main/java/com/bsth/service/realcontrol/RealMapService.java
... ... @@ -15,4 +15,6 @@ public interface RealMapService {
15 15 Map<String,Object> findRouteAndStationByLine(String lineCode);
16 16  
17 17 Map<String,Object> multiSectionRoute(String codeIdx);
  18 +
  19 + Map<String,Object> multiRouteByLine(String codeStr);
18 20 }
... ...
src/main/java/com/bsth/service/realcontrol/impl/RealMapServiceImpl.java
... ... @@ -159,6 +159,17 @@ public class RealMapServiceImpl implements RealMapService {
159 159 return rs;
160 160 }
161 161  
  162 + @Override
  163 + public Map<String, Object> multiRouteByLine(String codeStr) {
  164 + List<String> codeArray = Splitter.on(",").splitToList(codeStr);
  165 + Map<String, Object> rs = new HashMap<>();
  166 +
  167 + for(String code : codeArray){
  168 + rs.put(code + "_route" ,findRouteByLine(code));
  169 + }
  170 + return rs;
  171 + }
  172 +
162 173 /**
163 174 * wgs 坐标数组转 百度
164 175 *
... ...
src/main/java/com/bsth/service/sys/RealControAuthorityService.java 0 → 100644
  1 +package com.bsth.service.sys;
  2 +
  3 +import com.bsth.entity.sys.RealControAuthority;
  4 +import com.bsth.service.BaseService;
  5 +
  6 +/**
  7 + * Created by panzhao on 2017/2/14.
  8 + */
  9 +public interface RealControAuthorityService extends BaseService<RealControAuthority, Integer> {
  10 + RealControAuthority findByUserId(Integer userId);
  11 +}
... ...
src/main/java/com/bsth/service/sys/impl/RealControAuthorityServiceImpl.java 0 → 100644
  1 +package com.bsth.service.sys.impl;
  2 +
  3 +import com.bsth.entity.sys.RealControAuthority;
  4 +import com.bsth.repository.sys.RealControAuthorityRepository;
  5 +import com.bsth.service.impl.BaseServiceImpl;
  6 +import com.bsth.service.sys.RealControAuthorityService;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.stereotype.Service;
  9 +
  10 +/**
  11 + * Created by panzhao on 2017/2/14.
  12 + */
  13 +@Service
  14 +public class RealControAuthorityServiceImpl extends BaseServiceImpl<RealControAuthority, Integer> implements RealControAuthorityService {
  15 +
  16 + @Autowired
  17 + RealControAuthorityRepository realControAuthorityRepository;
  18 +
  19 + @Override
  20 + public RealControAuthority findByUserId(Integer userId) {
  21 + return realControAuthorityRepository.findByUserId(userId);
  22 + }
  23 +}
... ...
src/main/resources/static/assets/js/common.js
... ... @@ -119,6 +119,8 @@ function initPinYinSelect2(selector, data, cb){
119 119 $(selector).select2({
120 120 data: data,
121 121 matcher: oldMatcher(function(term, text, item){
  122 + if(!item.id)
  123 + return;
122 124 var upTerm = term.toUpperCase();
123 125 if(item.fullChars.indexOf(upTerm) != -1
124 126 || item.camelChars.indexOf(upTerm) != -1)
... ...
src/main/resources/static/index.html
... ... @@ -289,6 +289,11 @@
289 289 {{/each}}
290 290  
291 291 </script>
  292 +<script>
  293 + delete window.require;
  294 + delete window.exports;
  295 + delete window.module;
  296 +</script>
292 297 <!-- jQuery -->
293 298 <script src="/metronic_v4.5.4/plugins/jquery.min.js" data-exclude=1></script>
294 299 <!-- bootstrap -->
... ...
src/main/resources/static/login.html
... ... @@ -220,6 +220,11 @@ h3.logo-text{
220 220 <div class="login-footer"> © 2016 上海巴士拓华科技发展有限公司 Some Rights Reserved </div>
221 221 </div>
222 222  
  223 +<script>
  224 + delete window.require;
  225 + delete window.exports;
  226 + delete window.module;
  227 +</script>
223 228 <!-- jQuery -->
224 229 <script src="/metronic_v4.5.4/plugins/jquery.min.js" ></script>
225 230 <script src="/assets/plugins/jsencrypt.min.js" ></script>
... ... @@ -228,7 +233,7 @@ window.onload=function(){
228 233 var body=document.getElementsByTagName("body")[0];
229 234 if(typeof body.style.WebkitAnimation=="undefined")
230 235 $('.warn-note').fadeIn();
231   -}
  236 +};
232 237 !function(){
233 238 var form = $('#loginPanel form')
234 239 ,nameInput = $('input[name=userName]', form)
... ...
src/main/resources/static/pages/permission/user/controlAllot.html 0 → 100644
  1 +<div id="pageRealControlAllotWrap" style="overflow: hidden;padding: 15px 15px 0;">
  2 +
  3 + <style>
  4 + #pageRealControlAllotWrap span.line-item {
  5 + background: #efefef;
  6 + padding: 4px 11px;
  7 + margin: 0 3px 11px 8px;
  8 + box-shadow: 0px 1px 3px 0 rgba(71, 69, 69, 0.2), 1px 2px 3px 0 rgba(96, 94, 94, 0.19);
  9 + position: relative;
  10 + border: 1px solid #c5c0c0;
  11 + display: inline-block;
  12 + }
  13 +
  14 + #pageRealControlAllotWrap .remove-icon {
  15 + position: absolute;
  16 + right: -5px;
  17 + top: -5px;
  18 + color: #ffffff;
  19 + background: #ff4646;
  20 + border-radius: 99px;
  21 + font-size: 12px;
  22 + cursor: pointer;
  23 + padding: 0px 1px;
  24 + }
  25 +
  26 + .select2-container {
  27 + z-index: 19891017;
  28 + }
  29 + </style>
  30 +
  31 + <h4>
  32 + mky001/ 系统管理员
  33 + </h4>
  34 +
  35 + <div style="border: 1px solid #cccbcb;height: 190px;position: relative;">
  36 + <span style="display: block;margin: 10px;color: grey;">已分配的线路</span>
  37 +
  38 + <div class="line-list" style="height: 110px;">
  39 + </div>
  40 +
  41 + <div style="padding-left: 8px;">
  42 + <div style="display: inline-block;">
  43 + <select name="lineSelect" style="width: 160px;">
  44 + <option value="">请选择线路...</option>
  45 + </select>
  46 + </div>
  47 +
  48 + <button disabled type="button" id="addLineItemBtn" class="btn blue btn-sm" style="margin-top: -10px;"><i
  49 + class="fa fa-plus"></i> 添加线路
  50 + </button>
  51 + </div>
  52 + </div>
  53 +
  54 + <div style="margin-top: 15px;">
  55 + <form class="form-horizontal">
  56 + <div class="form-group" style="width: 50%;">
  57 + <label class="col-md-5 control-label">系统运行模式</label>
  58 + <div class="col-md-7">
  59 + <select class="form-control" name="pattern">
  60 + <option value="0">监控模式</option>
  61 + <option value="1">主调模式</option>
  62 + </select>
  63 + </div>
  64 + </div>
  65 + </form>
  66 + </div>
  67 +
  68 + <button class="btn blue btn-block" id="saveBtn"><i class="fa fa-check"></i> 保存</button>
  69 + <script>
  70 + !function () {
  71 + var wrap = '#pageRealControlAllotWrap'
  72 + , lineSelect = $('select[name=lineSelect]', wrap)
  73 + , addBtn = $('#addLineItemBtn', wrap);
  74 +
  75 + var userId;
  76 + var codeNameMap = {};
  77 + $(wrap).on('init', function (e, id) {
  78 + e.stopPropagation();
  79 + userId = id;
  80 +
  81 + $.get('/line/all', {'destroy_eq': 0}, function (rs) {
  82 + var data = [];
  83 + $.each(rs, function () {
  84 + data.push({
  85 + id: this.lineCode,
  86 + text: this.name
  87 + });
  88 + codeNameMap[this.lineCode] = this.name;
  89 + });
  90 +
  91 + initPinYinSelect2(lineSelect, data);
  92 +
  93 + $.get('/realControAuthority/findByUserId', {userId: userId}, function (t) {
  94 + if(!t || !t.lineCodeStr)
  95 + return;
  96 + var lineArray = t.lineCodeStr.split(',');
  97 + var htmlStr = '';
  98 + $.each(lineArray, function (i, code) {
  99 + if(!code)
  100 + return;
  101 + htmlStr += '<span class="line-item" data-id="'+code+'"><i class="fa fa-remove remove-icon"></i>'+codeNameMap[code]+'</span>';
  102 + });
  103 +
  104 + $('.line-list', wrap).html(htmlStr);
  105 + });
  106 + });
  107 + });
  108 +
  109 + lineSelect.on('change', function () {
  110 + if ($(this).val() == '') {
  111 + addBtn.attr('disabled', 'disabled');
  112 + }
  113 + else {
  114 + addBtn.removeAttr('disabled');
  115 + }
  116 + });
  117 +
  118 + addBtn.on('click', function () {
  119 + var code = lineSelect.val(),
  120 + name = codeNameMap[code];
  121 +
  122 + $('.line-list', wrap).append('<span class="line-item" data-id="'+code+'"><i class="fa fa-remove remove-icon"></i>'+name+'</span>');
  123 + });
  124 +
  125 + $(wrap).on('click', '.remove-icon', function () {
  126 + $(this).parent().remove();
  127 + });
  128 +
  129 + //保存
  130 + $('#saveBtn', wrap).on('click', function () {
  131 + var data = $('form', wrap).serializeJSON();
  132 + var lineCodeStr = '';
  133 + $('.line-list .line-item', wrap).each(function () {
  134 + lineCodeStr += ($(this).data('id') + ',');
  135 + });
  136 +
  137 + data.lineCodeStr = lineCodeStr;
  138 +
  139 + if(!userId){
  140 + alert('无法获取到用户ID');
  141 + return;
  142 + }
  143 +
  144 + data.userId = userId;
  145 +
  146 + $.post('/realControAuthority', data, function (rs) {
  147 + alert('保存成功!');
  148 + });
  149 + });
  150 + }();
  151 + </script>
  152 +</div>
0 153 \ No newline at end of file
... ...
src/main/resources/static/pages/permission/user/list.html
... ... @@ -21,29 +21,7 @@
21 21 </div>
22 22 <div class="actions">
23 23 <a class="btn btn-circle blue" href="add.html" data-pjax><i class="fa fa-plus"></i> 添加用户</a>
24   - <!-- <button type="button" class="btn btn-circle red" disabled="disabled" id="removeButton"><i class="fa fa-trash"></i> 删除用户</button> -->
25   - <div class="btn-group">
26   - <a class="btn red btn-outline btn-circle" href="javascript:;"
27   - data-toggle="dropdown"> <i class="fa fa-share"></i> <span
28   - class="hidden-xs"> 系统工具 </span> <i class="fa fa-angle-down"></i>
29   - </a>
30   - <ul class="dropdown-menu pull-right" id="datatable_ajax_tools">
31   - <li><a href="javascript:;" data-action="0"
32   - class="tool-action"> <i class="fa fa-print"></i> 打印
33   - </a></li>
34   - <li><a href="javascript:;" data-action="1"
35   - class="tool-action"> <i class="fa fa-copy"></i> 复制
36   - </a></li>
37   - <li><a href="javascript:;" data-action="3"
38   - class="tool-action"> <i class="fa fa-file-excel-o"></i>
39   - 导出Excel
40   - </a></li>
41   - <li class="divider"></li>
42   - <li><a href="javascript:;" data-action="5"
43   - class="tool-action"> <i class="fa fa-refresh"></i> 刷新数据
44   - </a></li>
45   - </ul>
46   - </div>
  24 +
47 25 </div>
48 26 </div>
49 27 <div class="portlet-body">
... ... @@ -134,6 +112,7 @@
134 112 </td>
135 113 <td>
136 114 <a class="btn btn-sm blue btn-outline" href="edit.html?no={{obj.id}}" data-pjax><i class="fa fa-edit"></i> 编辑</a>
  115 + <button type="button" class="btn btn-sm line_allot_btn" data-id="{{obj.id}}">线调线路分配</button>
137 116 </td>
138 117 </tr>
139 118 {{/each}}
... ... @@ -150,7 +129,7 @@ $(function(){
150 129 var icheckOptions = {
151 130 checkboxClass: 'icheckbox_flat-blue',
152 131 increaseArea: '20%'
153   - }
  132 + };
154 133  
155 134 jsDoQuery(null,true);
156 135  
... ... @@ -204,6 +183,8 @@ $(function(){
204 183 showPagination(data);
205 184 }
206 185 layer.close(i);
  186 +
  187 + $('.line_allot_btn').on('click', openAllotWindow);
207 188 });
208 189 }
209 190  
... ... @@ -244,6 +225,22 @@ $(function(){
244 225 });
245 226 }
246 227  
  228 + function openAllotWindow() {
  229 + var id = $(this).data('id');
  230 + $.get('/pages/permission/user/controlAllot.html', function (content) {
  231 + layer.open({
  232 + type: 1,
  233 + area: ['600px', '395px'],
  234 + content: content,
  235 + title: '线路调度权限分配',
  236 + shift: 5,
  237 + scrollbar: false,
  238 + success: function () {
  239 + $('#pageRealControlAllotWrap').trigger('init', id);
  240 + }
  241 + });
  242 + });
  243 + }
247 244  
248 245 //删除
249 246 $('#removeButton').on('click', function(){
... ... @@ -259,7 +256,6 @@ $(function(){
259 256 });
260 257 //改变状态
261 258 function changeEnabled(id,enabled){
262   - debugger
263 259 $get('/user/changeEnabled',{id:id,enabled:enabled},function(result){
264 260 jsDoQuery(null, true);
265 261 })
... ...
src/main/resources/static/real_control_v2/assets/imgs/icon/minus.png 0 → 100644

119 Bytes

src/main/resources/static/real_control_v2/assets/imgs/icon/remove.png 0 → 100644

269 Bytes

src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/sortable.gradient.min.css 0 → 100644
  1 +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  2 +.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move}.uk-sortable-moving iframe{pointer-events:none}
0 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/assets/plugins/uikit-2.27.1/components/sortable.min.js 0 → 100644
  1 +/*! UIkit 2.27.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */
  2 +!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-sortable",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";function e(e){e=t.$(e);do{if(e.data("sortable"))return e;e=t.$(e).parent()}while(e.length);return e}function o(t,e){var o=t.parentNode;if(e.parentNode!=o)return!1;for(var n=t.previousSibling;n&&9!==n.nodeType;){if(n===e)return!0;n=n.previousSibling}return!1}function n(t,e){var o=e;if(o==t)return null;for(;o;){if(o.parentNode===t)return o;if(o=o.parentNode,!o||!o.ownerDocument||11===o.nodeType)break}return null}function s(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}var a,r,i,l,d,h,u,p,c,g,f,m="ontouchstart"in window||"MSGesture"in window||window.DocumentTouch&&document instanceof DocumentTouch,v=m?"MSGesture"in window?"pointerdown":"touchstart":"mousedown",b=m?"MSGesture"in window?"pointermove":"touchmove":"mousemove",C=m?"MSGesture"in window?"pointerup":"touchend":"mouseup";return t.component("sortable",{defaults:{animation:150,threshold:10,childClass:"uk-sortable-item",placeholderClass:"uk-sortable-placeholder",overClass:"uk-sortable-over",draggingClass:"uk-sortable-dragged",dragMovingClass:"uk-sortable-moving",baseClass:"uk-sortable",noDragClass:"uk-sortable-nodrag",emptyClass:"uk-sortable-empty",dragCustomClass:"",handleClass:!1,group:!1,stop:function(){},start:function(){},change:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-sortable]",e).each(function(){var e=t.$(this);e.data("sortable")||t.sortable(e,t.Utils.options(e.attr("data-uk-sortable")))})}),t.$html.on(b,function(e){if(u){var o=e.originalEvent.targetTouches?e.originalEvent.targetTouches[0]:e;(Math.abs(o.pageX-u.pos.x)>u.threshold||Math.abs(o.pageY-u.pos.y)>u.threshold)&&u.apply(o)}if(a){d||(d=!0,a.show(),a.$current.addClass(a.$sortable.options.placeholderClass),a.$sortable.element.children().addClass(a.$sortable.options.childClass),t.$html.addClass(a.$sortable.options.dragMovingClass));var n=a.data("mouse-offset"),s=e.originalEvent.touches&&e.originalEvent.touches[0]||e.originalEvent,r=parseInt(s.pageX,10)+n.left,i=parseInt(s.pageY,10)+n.top;if(a.css({left:r,top:i}),i+a.height()/3>document.body.offsetHeight)return;i<t.$win.scrollTop()?t.$win.scrollTop(t.$win.scrollTop()-Math.ceil(a.height()/3)):i+a.height()/3>window.innerHeight+t.$win.scrollTop()&&t.$win.scrollTop(t.$win.scrollTop()+Math.ceil(a.height()/3))}}),t.$html.on(C,function(t){if(u=h=!1,!r||!a)return r=a=null,void 0;var o=e(r),n=a.$sortable,s={type:t.type};o[0]&&n.dragDrop(s,n.element),n.dragEnd(s,n.element)})},init:function(){function e(){m&&f.touches&&f.touches.length?h.addEventListener(b,y,!1):(h.addEventListener("mouseover",$,!1),h.addEventListener("mouseout",w,!1))}function o(){m&&f.touches&&f.touches.length?h.removeEventListener(b,y,!1):(h.removeEventListener("mouseover",$,!1),h.removeEventListener("mouseout",w,!1))}function a(t){r&&d.dragMove(t,d)}function l(e){return function(o){var s,a,r;f=o,o&&(s=o.touches&&o.touches[0]||o,a=s.target||o.target,m&&document.elementFromPoint&&(a=document.elementFromPoint(s.pageX-document.body.scrollLeft,s.pageY-document.body.scrollTop)),g=t.$(a)),t.$(a).hasClass("."+d.options.childClass)?e.apply(a,[o]):a!==h&&(r=n(h,a),r&&e.apply(r,[o]))}}var d=this,h=this.element[0];p=[],this.checkEmptyList(),this.element.data("sortable-group",this.options.group?this.options.group:t.Utils.uid("sortable-group"));var u=l(function(e){if(!e.data||!e.data.sortable){var o=t.$(e.target),n=o.is("a[href]")?o:o.parents("a[href]");if(!o.is(":input")){if(d.options.handleClass){var s=o.hasClass(d.options.handleClass)?o:o.closest("."+d.options.handleClass,d.element);if(!s.length)return}return e.preventDefault(),n.length&&n.one("click",function(t){t.preventDefault()}).one(C,function(){c||(n.trigger("click"),m&&n.attr("href").trim()&&(location.href=n.attr("href")))}),e.data=e.data||{},e.data.sortable=h,d.dragStart(e,this)}}}),$=l(t.Utils.debounce(function(t){return d.dragEnter(t,this)}),40),w=l(function(){var e=d.dragenterData(this);d.dragenterData(this,e-1),d.dragenterData(this)||(t.$(this).removeClass(d.options.overClass),d.dragenterData(this,!1))}),y=l(function(t){return r&&r!==this&&i!==this?(d.element.children().removeClass(d.options.overClass),i=this,d.moveElementNextTo(r,this),s(t)):!0});this.addDragHandlers=e,this.removeDragHandlers=o,window.addEventListener(b,a,!1),h.addEventListener(v,u,!1)},dragStart:function(e,o){c=!1,d=!1,l=!1;var n=this,s=t.$(e.target);if(!(!m&&2==e.button||s.is("."+n.options.noDragClass)||s.closest("."+n.options.noDragClass).length||s.is(":input"))){r=o,a&&a.remove();var i=t.$(r),h=i.offset(),p=e.touches&&e.touches[0]||e;u={pos:{x:p.pageX,y:p.pageY},threshold:n.options.handleClass?1:n.options.threshold,apply:function(){a=t.$('<div class="'+[n.options.draggingClass,n.options.dragCustomClass].join(" ")+'"></div>').css({display:"none",top:h.top,left:h.left,width:i.width(),height:i.height(),padding:i.css("padding")}).data({"mouse-offset":{left:h.left-parseInt(p.pageX,10),top:h.top-parseInt(p.pageY,10)},origin:n.element,index:i.index()}).append(i.html()).appendTo("body"),a.$current=i,a.$sortable=n,i.data({"start-list":i.parent(),"start-index":i.index(),"sortable-group":n.options.group}),n.addDragHandlers(),n.options.start(this,r),n.trigger("start.uk.sortable",[n,r,a]),c=!0,u=!1}}}},dragMove:function(e){g=t.$(document.elementFromPoint(e.pageX-(document.body.scrollLeft||document.scrollLeft||0),e.pageY-(document.body.scrollTop||document.documentElement.scrollTop||0)));var o,n=g.closest("."+this.options.baseClass),s=n.data("sortable-group"),a=t.$(r),i=a.parent(),l=a.data("sortable-group");n[0]!==i[0]&&void 0!==l&&s===l&&(n.data("sortable").addDragHandlers(),p.push(n),n.children().addClass(this.options.childClass),n.children().length>0?(o=g.closest("."+this.options.childClass),o.length?o.before(a):n.append(a)):g.append(a),UIkit.$doc.trigger("mouseover")),this.checkEmptyList(),this.checkEmptyList(i)},dragEnter:function(e,o){if(!r||r===o)return!0;var n=this.dragenterData(o);if(this.dragenterData(o,n+1),0===n){var s=t.$(o).parent(),a=t.$(r).data("start-list");if(s[0]!==a[0]){var i=s.data("sortable-group"),l=t.$(r).data("sortable-group");if((i||l)&&i!=l)return!1}t.$(o).addClass(this.options.overClass),this.moveElementNextTo(r,o)}return!1},dragEnd:function(e,o){var n=this;r&&(this.options.stop(o),this.trigger("stop.uk.sortable",[this])),r=null,i=null,p.push(this.element),p.forEach(function(e){t.$(e).children().each(function(){1===this.nodeType&&(t.$(this).removeClass(n.options.overClass).removeClass(n.options.placeholderClass).removeClass(n.options.childClass),n.dragenterData(this,!1))})}),p=[],t.$html.removeClass(this.options.dragMovingClass),this.removeDragHandlers(),a&&(a.remove(),a=null)},dragDrop:function(t){"drop"===t.type&&(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault()),this.triggerChangeEvents()},triggerChangeEvents:function(){if(r){var e=t.$(r),o=a.data("origin"),n=e.closest("."+this.options.baseClass),s=[],i=t.$(r);o[0]===n[0]&&a.data("index")!=e.index()?s.push({sortable:this,mode:"moved"}):o[0]!=n[0]&&s.push({sortable:t.$(n).data("sortable"),mode:"added"},{sortable:t.$(o).data("sortable"),mode:"removed"}),s.forEach(function(t){t.sortable&&t.sortable.element.trigger("change.uk.sortable",[t.sortable,i,t.mode])})}},dragenterData:function(e,o){return e=t.$(e),1==arguments.length?parseInt(e.data("child-dragenter"),10)||0:(o?e.data("child-dragenter",Math.max(0,o)):e.removeData("child-dragenter"),void 0)},moveElementNextTo:function(e,n){l=!0;var s=this,a=t.$(e).parent().css("min-height",""),r=o(e,n)?n:n.nextSibling,i=a.children(),d=i.length;return s.options.animation?(a.css("min-height",a.height()),i.stop().each(function(){var e=t.$(this),o=e.position();o.width=e.width(),e.data("offset-before",o)}),n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(s.element.parent()),i=a.children().each(function(){var e=t.$(this);e.data("offset-after",e.position())}).each(function(){var e=t.$(this),o=e.data("offset-before");e.css({position:"absolute",top:o.top,left:o.left,"min-width":o.width})}),i.each(function(){var e=t.$(this),o=(e.data("offset-before"),e.data("offset-after"));e.css("pointer-events","none").width(),setTimeout(function(){e.animate({top:o.top,left:o.left},s.options.animation,function(){e.css({position:"",top:"",left:"","min-width":"","pointer-events":""}).removeClass(s.options.overClass).removeData("child-dragenter"),d--,d||(a.css("min-height",""),t.Utils.checkDisplay(s.element.parent()))})},0)}),void 0):(n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(s.element.parent()),void 0)},serialize:function(){var e,o,n=[];return this.element.children().each(function(s,a){e={};for(var r,i,l=0;l<a.attributes.length;l++)o=a.attributes[l],0===o.name.indexOf("data-")&&(r=o.name.substr(5),i=t.Utils.str2json(o.value),e[r]=i||"false"==o.value||"0"==o.value?i:o.value);n.push(e)}),n},checkEmptyList:function(e){e=e?t.$(e):this.element,this.options.emptyClass&&e[e.children().length?"removeClass":"addClass"](this.options.emptyClass)}}),t.sortable});
0 3 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/css/electron.css 0 → 100644
  1 +/** 在electron 环境下特定的css样式 */
  2 +
  3 +.north{
  4 + height: 160px !important;
  5 +}
  6 +
  7 +.north-toolbar{
  8 + width: 582px !important;
  9 +}
  10 +
  11 +.north>div.uk-grid.uk-grid-match{
  12 + margin-top: 35px;
  13 +}
  14 +
  15 +
  16 +.main-container {
  17 + height: calc(100% - 160px) !important;
  18 +}
  19 +
  20 +.uk-navbar-content .icon-item{
  21 + display: inline-block;
  22 + margin: 6px 3px 7px 0;
  23 + font-size: 16px;
  24 + vertical-align: middle;
  25 + padding: 5px;
  26 + cursor: pointer;
  27 +}
  28 +
  29 +.uk-navbar-content .icon-item:hover{
  30 + box-shadow: 0 4px 7px 0 rgba(0, 0, 0, 0.2), 0 3px 2px 0 rgba(0, 0, 0, 0.19);
  31 +}
  32 +
... ...
src/main/resources/static/real_control_v2/css/home.css
... ... @@ -245,14 +245,14 @@ span.signal-state-outbounds{
245 245 color: #d42727;
246 246 padding: 2px 3px;
247 247 border-radius: 3px;
248   - font-size: 11px;
  248 + font-size: 12px;
249 249 }
250 250  
251 251 span.signal-state-speed-limit{
252 252 color: red;
253 253 padding: 2px 3px;
254 254 border-radius: 3px;
255   - font-size: 11px;
  255 + font-size: 12px;
256 256 }
257 257  
258 258 .home-svg-edit-icon{
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -711,61 +711,6 @@ li.map-panel {
711 711 width: 33%;
712 712 }
713 713  
714   -/*
715   -#schedule-lp_change-modal .sch-list {
716   - margin-top: 25px;
717   -}
718   -
719   -#schedule-lp_change-modal .sch-list .sch-item dl {
720   - font-size: 0;
721   - border-bottom: 1px solid #e1dbdb;
722   - margin: 7px 0;
723   -}
724   -
725   -#schedule-lp_change-modal .sch-list .sch-item dl dd {
726   - font-size: 14px;
727   - display: inline-block;
728   - line-height: 35px;
729   - text-align: center;
730   - border-right: 1px dashed #e1dbdb;
731   -}
732   -
733   -#schedule-lp_change-modal .sch-list .sch-item dl dd:nth-of-type(1) {
734   - width: 33%;
735   -}
736   -
737   -#schedule-lp_change-modal .sch-list .sch-item dl dd:nth-of-type(2) {
738   - width: 33%;
739   -}
740   -
741   -#schedule-lp_change-modal .sch-list .sch-item dl dd:nth-of-type(3) {
742   - width: 17%;
743   -}
744   -
745   -#schedule-lp_change-modal .sch-list .sch-item dl dd:nth-of-type(4) {
746   - width: 15%;
747   - border-right:0;
748   -}
749   -
750   -
751   -#schedule-lp_change-modal .sch-list .sch-item.reverse dl dd:nth-of-type(1) {
752   - width: 15%;
753   -}
754   -
755   -#schedule-lp_change-modal .sch-list .sch-item.reverse dl dd:nth-of-type(2) {
756   - width: 17%;
757   -}
758   -
759   -#schedule-lp_change-modal .sch-list .sch-item.reverse dl dd:nth-of-type(3) {
760   - width: 33%;
761   -}
762   -
763   -#schedule-lp_change-modal .sch-list .sch-item.reverse dl dd:nth-of-type(4) {
764   - width: 33%;
765   - border-right:0;
766   -}*/
767   -
768   -
769 714 #schedule-lp_change-modal .sch-list dl dd {
770 715 font-size: 14px;
771 716 }
... ... @@ -791,7 +736,6 @@ li.map-panel {
791 736 width: 15%;
792 737 }
793 738  
794   -
795 739 #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) {
796 740 width: 9%;
797 741 border-left: 1px solid #dedede;
... ... @@ -812,3 +756,23 @@ li.map-panel {
812 756 #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) {
813 757 width: 30%;
814 758 }
  759 +
  760 +#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active {
  761 + background: #b9d2ff;
  762 +}
  763 +
  764 +#schedule-lp_change-modal .ct_table.sch-list .ct_table_body dl.active dd {
  765 + border-top: 1px solid #b9d2ff;
  766 +}
  767 +
  768 +#schedule-lp_change-modal .ct_table.sch-list dl.active input[type=checkbox] {
  769 + border: none;
  770 +}
  771 +
  772 +#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active {
  773 + background: #ffe2b9;
  774 +}
  775 +
  776 +#schedule-lp_change-modal .ct_table.sch-list.reverse .ct_table_body dl.active dd {
  777 + border-top: 1px solid #ffe2b9;
  778 +}
... ...
src/main/resources/static/real_control_v2/electron/lineSelect.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="zh">
  3 +<head>
  4 + <meta name="renderer" content="webkit"/>
  5 + <meta charset="utf-8"/>
  6 + <title>选择线路</title>
  7 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css"/>
  8 + <link rel="stylesheet"
  9 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css"/>
  10 +
  11 + <link rel="stylesheet"
  12 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sortable.gradient.min.css"/>
  13 +
  14 + <style type="text/css">
  15 +
  16 + ::-webkit-scrollbar {
  17 + width: 16px;
  18 + height: 16px;
  19 + }
  20 +
  21 + ::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {
  22 + border-radius: 999px;
  23 + border: 5px solid transparent;
  24 + }
  25 +
  26 + ::-webkit-scrollbar-track {
  27 + box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset;
  28 + }
  29 +
  30 + ::-webkit-scrollbar-thumb {
  31 + min-height: 20px;
  32 + background-clip: content-box;
  33 + box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset;
  34 + }
  35 +
  36 + ::-webkit-scrollbar-corner {
  37 + background: transparent;
  38 + }
  39 +
  40 + input[type="checkbox"] {
  41 + vertical-align: bottom;
  42 + }
  43 +
  44 + .line-btn-list {
  45 + padding: 0 15px 15px 15px;
  46 + height: 180px;
  47 + overflow: auto;
  48 + }
  49 +
  50 + .line-btn-list-selected {
  51 + padding: 0 15px 15px 15px;
  52 + height: 35px;
  53 + overflow: auto;
  54 + }
  55 +
  56 + .line-btn-list span.line-item {
  57 + border: 1px solid #e0dfdf;
  58 + padding: 4px 9px;
  59 + margin: 5px;
  60 + -webkit-user-select: none;
  61 + user-select: none;
  62 + display: inline-block;
  63 + cursor: default;
  64 + transition: all .1s;
  65 + }
  66 +
  67 + .line-btn-list span.line-item.active {
  68 + background: #5E96D2;
  69 + border: 1px solid #5E96D2;
  70 + box-shadow: 0px 3px 4px 0 rgba(111, 172, 237, 0.3), 0px 3px 5px 0 rgba(111, 172, 237, 0.3);
  71 + color: #ffffff;
  72 + }
  73 +
  74 + input.i-cbox[type=checkbox] {
  75 + vertical-align: middle;
  76 + margin-top: -3px;
  77 + }
  78 +
  79 + .line-btn-list span.line-item.active input.i-cbox[type=checkbox] {
  80 + border: 0;
  81 + }
  82 +
  83 + .line-btn-list span.line-item.active input.i-cbox[type=checkbox]:checked:before {
  84 + color: #86f78b;
  85 + }
  86 +
  87 + .uk-panel-title {
  88 + text-indent: 15px;
  89 + }
  90 +
  91 + .line-btn-list-selected span.line-item {
  92 + padding: 4px 9px;
  93 + margin: 2px;
  94 + color: #fff;
  95 + background: #5e96d2;
  96 + box-shadow: 0px 3px 4px 0 rgba(111, 172, 237, 0.3), 0px 3px 5px 0 rgba(111, 172, 237, 0.3);
  97 + user-select: none;
  98 + display: inline-block;
  99 + cursor: move;
  100 + border-radius: 5px;
  101 + }
  102 +
  103 + #lineSearchInput {
  104 + width: 300px;
  105 + box-shadow: 0px 3px 4px 0 rgba(217, 226, 235, 0.3), 0px 3px 5px 0 rgba(200, 217, 236, 0.3);
  106 + height: 35px;
  107 + }
  108 +
  109 + #submitBtn{
  110 + border-radius: 0;
  111 + border-color: #00aff2;
  112 + transition: all .3s;
  113 + }
  114 +
  115 + #submitBtn:disabled{
  116 + border-color: #ebe9e9;
  117 + }
  118 + </style>
  119 +</head>
  120 +
  121 +<body>
  122 +<div class="wrapper ng-scope">
  123 + <div class="dialog dialog-shadow">
  124 + <form class="uk-form" style="width: 100%;">
  125 + <div class="uk-grid">
  126 +
  127 + <div class="uk-width-medium-1-1">
  128 + <div class="uk-panel uk-panel-divider">
  129 + <div class="uk-form-row">
  130 + <div class="uk-form-icon" style="margin: 15px;">
  131 + <i class="uk-icon-search"></i>
  132 + <input type="text" placeholder="搜索线路..." id="lineSearchInput">
  133 + </div>
  134 + </div>
  135 + <h3 class="uk-panel-title">待选择的线路</h3>
  136 + <div class="line-btn-list">
  137 + </div>
  138 + </div>
  139 + <div class="uk-panel uk-panel-divider">
  140 + <h3 class="uk-panel-title">已选择的线路</h3>
  141 + <div class="line-btn-list-selected uk-sortable" data-uk-sortable data-uk-observe>
  142 + </div>
  143 + <button disabled class="uk-button uk-button-primary uk-button-large uk-width-1-1" type="button" id="submitBtn">确定
  144 + </button>
  145 + </div>
  146 + </div>
  147 +
  148 + </div>
  149 + </form>
  150 +
  151 + </div>
  152 +</div>
  153 +
  154 +<script>
  155 + delete window.exports;
  156 + delete window.module;
  157 +</script>
  158 +<!-- jQuery -->
  159 +<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  160 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js"></script>
  161 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sortable.min.js"></script>
  162 +<script src="/assets/plugins/pinyin.js"></script>
  163 +<script src="/real_control_v2/js/common.js"></script>
  164 +
  165 +<!-- EventProxy -->
  166 +<script src="/assets/js/eventproxy.js"></script>
  167 +<script>
  168 + if (typeof(process) == 'undefined' || !process) {
  169 + alert('不支持当前环境!!');
  170 + }
  171 +
  172 + const ipcMain = require('electron').ipcRenderer
  173 +
  174 + !function () {
  175 + var all = {};
  176 + //线路编码映射
  177 + var lineIdMap = {};
  178 + var storage = window.localStorage;
  179 +
  180 + gb_common.$get('/line/all', {destroy_eq: 0}, function (list) {
  181 + var htmlStr = '';
  182 + $.each(list, function () {
  183 + htmlStr += '<span class="line-item" data-name="' + this.name + '" data-code="' + this.lineCode + '">' +
  184 + ' <input class="i-cbox" type="checkbox"> ' + this.name +
  185 + '</span>';
  186 +
  187 + //拼音首字母
  188 + this.camelChars = pinyin.getCamelChars(this.name);
  189 + //全拼
  190 + this.fullChars = pinyin.getFullChars(this.name).toUpperCase();
  191 +
  192 + lineIdMap[this.lineCode] = this;
  193 + });
  194 + all = list;
  195 +
  196 + $('.line-btn-list').html(htmlStr);
  197 +
  198 + $('.line-btn-list .line-item').on('click', function () {
  199 + var box = $(this).find('input[type=checkbox]')[0];
  200 + if ($(this).hasClass('active')) {
  201 + $(this).removeClass('active');
  202 + box.checked = false;
  203 +
  204 + removeSelected(this);
  205 + }
  206 + else {
  207 + $(this).addClass('active');
  208 + box.checked = true;
  209 +
  210 + addSelected(this);
  211 + }
  212 + });
  213 + });
  214 +
  215 +
  216 + $('#lineSearchInput').on('input', function () {
  217 + var t = $(this).val().toUpperCase();
  218 + if (!t) {
  219 + $('.line-btn-list .line-item').show();
  220 + return;
  221 + }
  222 +
  223 + var rs = [];
  224 + $.each(all, function () {
  225 + if (this.camelChars.indexOf(t) != -1
  226 + || this.fullChars.indexOf(t) != -1
  227 + || this.name.indexOf(t) != -1) {
  228 + rs.push(this.lineCode);
  229 + }
  230 + });
  231 +
  232 + $('.line-btn-list .line-item').hide().each(function () {
  233 + var code = $(this).data('code') + '';
  234 + if (rs.indexOf(code) != -1)
  235 + $(this).show();
  236 + });
  237 + });
  238 +
  239 + function addSelected(that) {
  240 + $('.line-btn-list-selected').append('<span class="line-item" data-code="' + $(that).data('code') + '">' + $(that).data('name') + '</span>');
  241 +
  242 + $('#submitBtn').removeAttr('disabled');
  243 + }
  244 +
  245 + function removeSelected(that) {
  246 + var code = $(that).data('code');
  247 + $('.line-btn-list-selected .line-item[data-code='+code+']').remove();
  248 +
  249 + if($('.line-btn-list-selected .line-item').length == 0){
  250 + $('#submitBtn').attr('disabled', 'disabled');
  251 + }
  252 + }
  253 +
  254 + function error(rs) {
  255 + return rs.status == 'ERROR' || rs.status == 500;
  256 + }
  257 +
  258 + /**
  259 + * 确定
  260 + */
  261 + $('#submitBtn').on('click', function () {
  262 + var ep = EventProxy.create('car2DeviceId', 'routes', 'checkLineConfig', function () {
  263 + ipcMain.send('webPageGotoControl');
  264 + });
  265 +
  266 + var lsData = [], codeStr='', code;
  267 + $('.line-btn-list-selected .line-item').each(function () {
  268 + code = $(this).data('code');
  269 + lsData.push(lineIdMap[code]);
  270 + codeStr += (code + ',');
  271 + });
  272 + //将选择的线路信息写入localstorage
  273 + storage.setItem('lineControlItems', JSON.stringify(lsData));
  274 +
  275 + //缓存车辆自编号和设备号对照
  276 + $.get('/gps/Car2DeviceId', function (rs) {
  277 + storage.setItem('car2DeviceId', JSON.stringify(rs));
  278 + ep.emitLater('car2DeviceId');
  279 + });
  280 +
  281 + //缓存线路路由
  282 + codeStr = codeStr.substr(0, codeStr.length - 1);
  283 + $.get('/realMap/multiRouteByLine', {codeStr: codeStr}, function (rs) {
  284 + for(var key in rs){
  285 + storage.setItem(key, JSON.stringify(rs[key]));
  286 + }
  287 + ep.emitLater('routes');
  288 + });
  289 +
  290 + //检查线路配置信息
  291 + $.ajax({
  292 + url: '/lineConfig/check',
  293 + traditional: true,
  294 + data: {codeArray: codeStr.split(',')},
  295 + method: 'POST',
  296 + success: function (rs) {
  297 + if (rs.status == 0){
  298 + ep.emitLater('checkLineConfig');
  299 + }
  300 + else if (rs.status == 1){
  301 + initLineConfig(rs.not, function () {
  302 + ep.emitLater('checkLineConfig');
  303 + });
  304 + }
  305 + }
  306 + });
  307 + });
  308 +
  309 +
  310 + function initLineConfig(arr, cb) {
  311 + var i = 0;
  312 + (function () {
  313 + if (i >= arr.length) {
  314 + cb && cb();
  315 + return;
  316 + }
  317 + var f = arguments.callee
  318 + , lineCode = arr[i];
  319 +
  320 + $.post('/lineConfig/init/' + lineCode, function (rs) {
  321 + if (rs == 1) {
  322 + i++;
  323 + f();
  324 + }
  325 + });
  326 + })();
  327 + }
  328 + }();
  329 +</script>
  330 +</body>
  331 +</html>
0 332 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/electron/login.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html lang="zh">
  3 +<head>
  4 + <meta name="renderer" content="webkit"/>
  5 + <meta charset="utf-8"/>
  6 + <title>登录</title>
  7 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css"/>
  8 +
  9 + <style type="text/css">
  10 + body {
  11 + overflow: hidden;
  12 + }
  13 +
  14 + hr {
  15 + margin: 20px 0;
  16 + border: 0;
  17 + border-top: 1px solid #eee;
  18 + border-bottom: 0;
  19 + }
  20 +
  21 + .uk-form-icon, input {
  22 + width: 100%;
  23 + }
  24 +
  25 + input {
  26 + height: 48px;
  27 + }
  28 +
  29 + input:focus{
  30 + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  31 + }
  32 +
  33 + #loginPanel{
  34 + background: linear-gradient(to bottom, #ffffff, #b5c0c7, #3b4044);
  35 + }
  36 +
  37 + </style>
  38 +</head>
  39 +
  40 +<body>
  41 +<div class="wrapper ng-scope">
  42 + <div id="loginPanel" class="dialog dialog-shadow">
  43 + <div class="uk-grid">
  44 + <div class="uk-width-5-10">
  45 + </div>
  46 + <div class="uk-width-5-10">
  47 + <div class="uk-panel" style="padding: 56px 25px 36px 0;">
  48 + <form class="uk-form">
  49 + <div class="uk-form-row">
  50 + <div class="uk-form-icon">
  51 + <i class="uk-icon-user"></i>
  52 + <input autofocus class="uk-form-large" name="userName" type="text" placeholder="输入用户名">
  53 + </div>
  54 + </div>
  55 +
  56 + <div class="uk-form-row">
  57 + <div class="uk-form-icon">
  58 + <i class="uk-icon-key"></i>
  59 + <input class="uk-form-large" name="password" type="password" placeholder="输入密码">
  60 + </div>
  61 + </div>
  62 +
  63 + <br>
  64 + <br>
  65 + <div class="uk-form-row">
  66 + <button id="loginBtn" class="uk-button uk-button-primary uk-button-large uk-width-1-1"
  67 + >登录
  68 + </button>
  69 + </div>
  70 + </form>
  71 + </div>
  72 + </div>
  73 + </div>
  74 + </div>
  75 +</div>
  76 +
  77 +<script>
  78 + delete window.exports;
  79 + delete window.module;
  80 +</script>
  81 +<!-- jQuery -->
  82 +<script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  83 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js"></script>
  84 +<script src="/assets/plugins/jsencrypt.min.js"></script>
  85 +<script>
  86 + //if() process
  87 + if(typeof(process)=='undefined' || !process){
  88 + alert('不支持当前环境!!');
  89 + }
  90 +
  91 + const ipcMain = require('electron').ipcRenderer
  92 +
  93 + !function () {
  94 + var form = $('#loginPanel form')
  95 + , nameInput = $('input[name=userName]', form)
  96 + , pwdInput = $('input[name=password]', form);
  97 +
  98 + var keys;
  99 + $('#loginBtn').on('click', function (e) {
  100 + e.stopPropagation();
  101 + try {
  102 + var userName = nameInput.val()
  103 + , pwd = pwdInput.val();
  104 +
  105 + if(!userName || $.trim(userName)==''){
  106 + alert('请输入用户名!!');
  107 + return false;
  108 + }
  109 +
  110 + if(!pwd || $.trim(pwd)==''){
  111 + alert('请输入密码!!');
  112 + return false;
  113 + }
  114 +
  115 + //获取keys
  116 + $.get('/user/login/jCryptionKey?t=' + Math.random(), function (data) {
  117 + keys = data.publickey;
  118 +
  119 + //RSA加密
  120 + var encrypt = new JSEncrypt();
  121 + encrypt.setPublicKey(keys);
  122 + userName = encrypt.encrypt(userName);
  123 + pwd = encrypt.encrypt(pwd);
  124 + //登录
  125 + login(userName, pwd);
  126 + });
  127 + }
  128 + catch (e) {
  129 + console.log(e);
  130 + }
  131 +
  132 + return false;
  133 + });
  134 +
  135 +
  136 + function login(userName, pwd) {
  137 + var params = {
  138 + userName: userName,
  139 + password: pwd
  140 + };
  141 + $.post('/user/login', params
  142 + , function (rs) {
  143 + if (error(rs)) {
  144 + $('#loginBtn').removeAttr('disabled');
  145 + alert(rs.msg);
  146 + }
  147 + else {
  148 + ipcMain.send('webPageLoginSuccess');
  149 + }
  150 + });
  151 + }
  152 +
  153 + function error(rs) {
  154 + return rs.status == 'ERROR' || rs.status == 500;
  155 + }
  156 +
  157 + }();
  158 +</script>
  159 +</body>
  160 +</html>
0 161 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lp_change.html
... ... @@ -68,25 +68,25 @@
68 68  
69 69 <script id="schedule-lp_change-list-temp" type="text/html">
70 70 {{if order == 0}}
71   - {{each array as sch i}}
72   - <dl>
73   - <dd><input type="checkbox"></dd>
74   - <dd>{{sch.jGh}}/{{sch.jName}}</dd>
75   - <dd>{{sch.clZbh}}</dd>
76   - <dd>{{sch.lpName}}</dd>
77   - <dd>{{sch.dfsj}}</dd>
78   - </dl>
79   - {{/each}}
  71 + {{each array as sch i}}
  72 + <dl>
  73 + <dd><input type="checkbox"></dd>
  74 + <dd>{{sch.jGh}}/{{sch.jName}}</dd>
  75 + <dd>{{sch.clZbh}}</dd>
  76 + <dd>{{sch.lpName}}</dd>
  77 + <dd>{{sch.dfsj}}</dd>
  78 + </dl>
  79 + {{/each}}
80 80 {{else if order == 1}}
81   - {{each array as sch i}}
82   - <dl>
83   - <dd><input type="checkbox"></dd>
84   - <dd>{{sch.dfsj}}</dd>
85   - <dd>{{sch.lpName}}</dd>
86   - <dd>{{sch.clZbh}}</dd>
87   - <dd>{{sch.jGh}}/{{sch.jName}}</dd>
88   - </dl>
89   - {{/each}}
  81 + {{each array as sch i}}
  82 + <dl>
  83 + <dd><input type="checkbox"></dd>
  84 + <dd>{{sch.dfsj}}</dd>
  85 + <dd>{{sch.lpName}}</dd>
  86 + <dd>{{sch.clZbh}}</dd>
  87 + <dd>{{sch.jGh}}/{{sch.jName}}</dd>
  88 + </dl>
  89 + {{/each}}
90 90 {{/if}}
91 91 </script>
92 92  
... ... @@ -102,15 +102,15 @@
102 102 //线路切换事件
103 103 $('[name=lineSelect]', modal).on('change', function () {
104 104 var order = $(this).data('order')
105   - ,lineCode = $(this).val();
  105 + , lineCode = $(this).val();
106 106  
107 107 var array = gb_common.get_vals(gb_schedule_table.findScheduleByLine(lineCode));
108 108 //按路牌分组
109 109 list[order] = gb_common.groupBy(array, 'lpName');
110 110 //设置路牌下拉框
111   - var lpSelect = $(this).next('select'), ops='';
  111 + var lpSelect = $(this).next('select'), ops = '';
112 112 $.each(gb_common.get_keys(list[order]), function (i, lp) {
113   - ops += '<option value="'+lp+'">'+lp+'</option>';
  113 + ops += '<option value="' + lp + '">' + lp + '</option>';
114 114 });
115 115 lpSelect.html(ops);
116 116 });
... ... @@ -118,7 +118,7 @@
118 118 //路牌切换事件
119 119 $('[name=lpName]', modal).on('change', function () {
120 120 var order = $(this).data('order')
121   - ,lp = $(this).val();
  121 + , lp = $(this).val();
122 122  
123 123 var htmlStr = template('schedule-lp_change-list-temp', {array: list[order][lp], order: order});
124 124 $('.sch-list .ct_table_body', modal).eq(order).html(htmlStr);
... ... @@ -131,7 +131,43 @@
131 131 lineOps += '<option value="' + this.lineCode + '">' + this.name + '</option>';
132 132 });
133 133 $('[name=lineSelect]', modal).html(lineOps);
  134 +
  135 + //左默认线路路牌
  136 + $('[name=lineSelect]:eq(0)', modal).val(sch.xlBm).trigger('change');
  137 + //左默认路牌
  138 + $('[name=lpName]:eq(0)', modal).val(sch.lpName).trigger('change');
134 139 });
  140 +
  141 + //选中事件
  142 + $(modal).on('click', '.sch-list input[type=checkbox]', function (e) {
  143 + e.stopPropagation();
  144 + var dl = $(this).parents('dl');
  145 + if (this.checked)
  146 + activeDl(dl);
  147 + else
  148 + cancelActiveDl(dl);
  149 + });
  150 +
  151 + $(modal).on('click', '.sch-list dl', function (e) {
  152 + e.stopPropagation();
  153 + var cbox = $(this).find('input[type=checkbox]')[0];
  154 + if (!$(this).hasClass('active')) {
  155 + activeDl($(this));
  156 + cbox.checked = true;
  157 + }
  158 + else {
  159 + cancelActiveDl($(this));
  160 + cbox.checked = false;
  161 + }
  162 + });
  163 +
  164 + function activeDl(dl) {
  165 + dl.addClass('active');
  166 + }
  167 +
  168 + function cancelActiveDl(dl) {
  169 + dl.removeClass('active');
  170 + }
135 171 })();
136 172 </script>
137 173 </div>
... ...
src/main/resources/static/real_control_v2/fragments/north/toolbar.html
... ... @@ -63,4 +63,73 @@
63 63 </nav>
64 64 </div>
65 65 </script>
  66 +
  67 + <script id="north-toolbar-electron-temp" type="text/html">
  68 + <div class="uk-margin" id="north_toolbar_panel">
  69 + <nav class="uk-navbar">
  70 + <a class="uk-navbar-brand" >
  71 + <span><i class="uk-icon-user"></i> <span id="north_toolbar_user">{{user.userName}}</span>,在线</span><i class="uk-icon-ellipsis-v"></i>
  72 + </a>
  73 + <ul class="uk-navbar-nav">
  74 + {{each list as obj i}}
  75 + <li class="uk-parent " data-uk-dropdown="{{if obj.columns}}{pos:'top-right'}{{/if}}" aria-haspopup="true" aria-expanded="false">
  76 + <a>{{obj.text}} <i class="uk-icon-caret-down"></i></a>
  77 + {{if obj.children != null}}
  78 + <div class="uk-dropdown uk-dropdown-navbar uk-dropdown-bottom" style="top: 40px; left: 0px;">
  79 + <ul class="uk-nav uk-nav-navbar">
  80 + {{each obj.children as c j}}
  81 + {{if c.header}}
  82 + <li class="uk-nav-header">{{c.text}}</li>
  83 +
  84 + {{else if c.divider}}
  85 + <li class="uk-nav-divider"></li>
  86 + {{else}}
  87 + <li class="event"><a data-event="{{c.event}}">{{c.text}}</a></li>
  88 + {{/if}}
  89 + {{/each}}
  90 + </ul>
  91 + </div>
  92 + {{else if obj.columns}}
  93 + <div class="uk-dropdown {{obj.clazz}}">
  94 + <div class="uk-grid uk-dropdown-grid">
  95 + {{each obj.grid as cls s}}
  96 + <div class="{{obj.cls_class}}">
  97 + <ul class="uk-nav uk-nav-dropdown uk-panel">
  98 + {{each cls as c z}}
  99 + {{if c.header}}
  100 + <li class="uk-nav-header">{{c.text}}</li>
  101 +
  102 + {{else if c.divider}}
  103 + <li class="uk-nav-divider"></li>
  104 + {{else}}
  105 + <li class="event">
  106 + <a data-event="{{c.event}}">
  107 + {{if c.icon != null}}
  108 + <i class="{{c.icon}}"></i>
  109 + {{/if}}
  110 + {{c.text}}</a>
  111 + </li>
  112 + {{/if}}
  113 + {{/each}}
  114 + </ul>
  115 + </div>
  116 + {{/each}}
  117 + </div>
  118 + </div>
  119 + {{/if}}
  120 + </li>
  121 + {{/each}}
  122 + </ul>
  123 + <div class="uk-navbar-content uk-navbar-flip uk-hidden-small">
  124 + <div class="icon-item" id="mnavbarIconBtnMIN" data-uk-tooltip="{pos:'bottom'}" title="最小化">
  125 + <img src="/real_control_v2/assets/imgs/icon/minus.png">
  126 + </div>
  127 + &nbsp;&nbsp;
  128 + <div class="icon-item" id="mnavbarIconBtnCLOSE" data-uk-tooltip="{pos:'bottom'}" title="退出系统">
  129 + <img src="/real_control_v2/assets/imgs/icon/remove.png">
  130 + </div>
  131 + </div>
  132 + </nav>
  133 + </div>
  134 + </script>
66 135 </div>
... ...
src/main/resources/static/real_control_v2/js/common.js
... ... @@ -82,8 +82,7 @@ var gb_common = (function () {
82 82 function successHandle(json, handle) {
83 83 var status = json.status;
84 84 if (status == 407) {
85   - //alert('被注销的登录');
86   - location.href = '/';
  85 + location.href = '/real_control_v2/login.html';
87 86 return;
88 87 }
89 88  
... ...
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
... ... @@ -90,6 +90,11 @@
90 90 "text": "系统设置",
91 91 "children": [
92 92 {
  93 + "id": 3.1,
  94 + "text": "线路配置",
  95 + "event": "line_config"
  96 + }
  97 + ,{
93 98 "id": 3.2,
94 99 "text": "TTS",
95 100 "event": "tts_config"
... ...
src/main/resources/static/real_control_v2/js/line_schedule/context_menu.js
... ... @@ -169,8 +169,7 @@ var gb_schedule_context_menu = (function () {
169 169 },
170 170 'sep3': '---------',
171 171 'lp_change': {
172   - name: '路牌对调',
173   - disabled: true
  172 + name: '路牌对调'
174 173 }
175 174 }
176 175 });
... ...
src/main/resources/static/real_control_v2/js/main.js
1   -
2 1 /* main js */
3 2 var gb_main_ep = new EventProxy(),
4 3 res_load_ep = EventProxy.create('load_data_basic', 'load_tab', 'load_home_layout', 'load_home_line_panel', function () {
... ...
src/main/resources/static/real_control_v2/js/north/toolbar.js
... ... @@ -19,8 +19,23 @@ var gb_northToolbar = (function () {
19 19 });
20 20  
21 21 var ep = EventProxy.create("template", "data", "user", function (temp, data, user) {
  22 + var tempId = '#north-toolbar-temp';
  23 +
  24 + //electron环境
  25 + if(isElectron){
  26 + tempId = '#north-toolbar-electron-temp';
  27 + //最小化
  28 + $(document).on('click', '#mnavbarIconBtnMIN', function () {
  29 + ipcMain.send('webPageMainWindowMinimize');
  30 + });
  31 + //关闭
  32 + $(document).on('click', '#mnavbarIconBtnCLOSE', function () {
  33 + ipcMain.send('webPageMainWindowClose');
  34 + });
  35 + }
  36 +
22 37 currentUser = user;
23   - var t = $('#north-toolbar-temp', temp).html()
  38 + var t = $(tempId, temp).html()
24 39 , htmlStr = template.render(t)({list: data, user: currentUser});
25 40 $('.north .north-toolbar').html(htmlStr);
26 41  
... ...
src/main/resources/static/real_control_v2/js/utils/svg_chart.js
... ... @@ -45,7 +45,7 @@ var gb_svg_chart = (function () {
45 45 len = data.length;
46 46  
47 47 var w = get_width(wrap),
48   - h = get_height(wrap)
  48 + h = parseInt(get_height(wrap))
49 49 //x scale
50 50 ,
51 51 xScale = d3.scale.linear().range([x_padd, w - x_padd]).domain([0, len - 1]),
... ... @@ -82,7 +82,8 @@ var gb_svg_chart = (function () {
82 82 .classed({
83 83 'line-chart': true
84 84 }).attr('data-code', lineCode)
85   - .attr('onselectstart', 'return false');
  85 + .attr('onselectstart', 'return false')
  86 + .style('height', h);
86 87  
87 88 //add item g
88 89 var items = svg.selectAll('g.item').data(data)
... ...
src/main/resources/static/real_control_v2/main.html
... ... @@ -5,149 +5,179 @@
5 5 <meta charset="UTF-8">
6 6 <title>线路调度 v2.0</title>
7 7 <!-- uikit core style-->
8   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" />
9   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" />
10   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" />
11   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" />
12   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css" />
  8 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css"/>
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css"/>
  10 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css"/>
  11 + <link rel="stylesheet"
  12 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css"/>
  13 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css"/>
13 14  
14 15 <!-- main style -->
15   - <link rel="stylesheet" href="/real_control_v2/css/main.css" />
  16 + <link rel="stylesheet" href="/real_control_v2/css/main.css"/>
16 17 <!-- north style -->
17   - <link rel="stylesheet" href="/real_control_v2/css/north.css" />
  18 + <link rel="stylesheet" href="/real_control_v2/css/north.css"/>
18 19 <!-- home style -->
19   - <link rel="stylesheet" href="/real_control_v2/css/home.css" />
  20 + <link rel="stylesheet" href="/real_control_v2/css/home.css"/>
20 21 <!-- line style -->
21   - <link rel="stylesheet" href="/real_control_v2/css/line_schedule.css" />
22   - <link rel="stylesheet" href="/real_control_v2/css/sch_autocomp_result.css" />
  22 + <link rel="stylesheet" href="/real_control_v2/css/line_schedule.css"/>
  23 + <link rel="stylesheet" href="/real_control_v2/css/sch_autocomp_result.css"/>
23 24 <!-- custom table -->
24   - <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" />
  25 + <link rel="stylesheet" href="/real_control_v2/css/ct_table.css"/>
25 26 <!-- jquery contextMenu style -->
26   - <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" />
  27 + <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css"/>
27 28 <!-- formvalidation style -->
28   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css" />
  29 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css"/>
29 30 <!-- js tree -->
30   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.min.css" />
  31 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.min.css"/>
31 32 <!-- tooltip css-->
32   - <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css" />
  33 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css"/>
33 34  
34   - <link rel="stylesheet" href="/real_control_v2/css/pace.css" />
  35 + <link rel="stylesheet" href="/real_control_v2/css/pace.css"/>
35 36 </head>
36 37  
37 38 <body>
38   - <div class="north uk-width-1-1 uk-panel-box">
39   - <div class="uk-grid uk-grid-match">
40   - <div class="uk-width-4-10">
41   - <div class="uk-panel">
42   - <h2 class="north-logo">
  39 +<div class="north uk-width-1-1 uk-panel-box">
  40 + <div class="uk-grid uk-grid-match">
  41 + <div class="uk-width-4-10">
  42 + <div class="uk-panel">
  43 + <h2 class="north-logo">
43 44 <i class="uk-icon-life-ring"></i> 闵行公交线路调度
44   - </h2>
45   - </div>
46   - </div>
47   - <div class="uk-width-6-10">
48   - <div class="uk-panel uk-width north-toolbar"></div>
  45 + </h2>
49 46 </div>
50 47 </div>
51   - <div class="north-tabs"></div>
  48 + <div class="uk-width-6-10">
  49 + <div class="uk-panel uk-width north-toolbar"></div>
  50 + </div>
52 51 </div>
  52 + <div class="north-tabs"></div>
  53 +</div>
53 54  
54   - <div class="main-container">
55   - <div class="load-panel">
56   - <i class="uk-icon-spinner uk-icon-spin"></i>
57   - 正在加载数据
58   - </div>
  55 +<div class="main-container">
  56 + <div class="load-panel">
  57 + <i class="uk-icon-spinner uk-icon-spin"></i>
  58 + 正在加载数据
59 59 </div>
  60 +</div>
60 61  
61   - <!-- 地图相关 -->
62   - <script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT" ></script>
63   - <script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
64   - <script src="/assets/js/baidu//MarkerClusterer.js"></script>
65   - <script src="/assets/js/TransGPS.js" ></script>
66   - <!-- 高德 -->
67   - <script src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda" ></script>
68   - <!-- jquery -->
69   - <script src="/real_control_v2/assets/js/jquery.min.js"></script>
70   - <!-- jquery actual -->
71   - <script src="/real_control_v2/assets/js/jquery.actual.min.js"></script>
72   - <!-- jquery.serializejson JSON序列化插件 -->
73   - <script src="/assets/plugins/jquery.serializejson.js"></script>
74   - <!-- moment.js 日期处理类库 -->
75   - <script src="/assets/plugins/moment-with-locales.js"></script>
76   - <!-- common js -->
77   - <script src="/real_control_v2/js/common.js"></script>
78   - <!-- art-template 模版引擎 -->
79   - <script src="/assets/plugins/template.js"></script>
80   - <!-- d3 -->
81   - <script src="/assets/js/d3.min.js"></script>
82   - <!-- EventProxy -->
83   - <script src="/assets/js/eventproxy.js"></script>
84   - <!-- uikit core -->
85   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js"></script>
86   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js"></script>
87   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js"></script>
88   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js"></script>
89   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js"></script>
90   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js"></script>
91   - <script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js"></script>
92   -
93   - <!-- jquery contextMenu -->
94   - <script src="/real_control_v2/assets/js/jquery.contextMenu.min.js"></script>
95   - <script src="/real_control_v2/assets/js/jquery.ui.position.min.js"></script>
96   - <!-- formvalidation- -->
97   - <script src="/real_control_v2/assets/plugins/formvalidation/formValidation.min.js"></script>
98   - <script src="/real_control_v2/assets/plugins/formvalidation/zh_CN.js"></script>
99   - <script src="/real_control_v2/assets/plugins/formvalidation/uikit.min.js"></script>
100   - <!-- js tree -->
101   - <script src="/real_control_v2/assets/plugins/jstree/jstree.min.js"></script>
102   - <!-- simple pinyin -->
103   - <script src="/assets/plugins/pinyin.js"></script>
104   - <!-- qtip -->
105   - <script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js"></script>
106   -
107   - <!-- main js -->
108   - <script src="/real_control_v2/js/main.js"></script>
109   - <!-- 数据 -->
110   - <script src="/real_control_v2/js/data/data_basic.js"></script>
111   - <script src="/real_control_v2/js/data/data_gps.js"></script>
112   - <script src="/real_control_v2/js/data/gps_abnormal.js"></script>
113   - <!-- 线路模拟图 -->
114   - <script src="/real_control_v2/js/utils/svg_chart.js"></script>
115   - <script src="/real_control_v2/js/utils/svg_data_convert.js"></script>
116   - <script src="/real_control_v2/js/utils/svg_chart_tooltip.js"></script>
117   - <script src="/real_control_v2/js/utils/svg_chart_map.js"></script>
118   -
119   - <!-- custom table js -->
120   - <script src="/real_control_v2/js/utils/ct_table.js"></script>
121   - <!-- north js -->
122   - <script src="/real_control_v2/js/north/toolbar.js"></script>
123   - <script src="/real_control_v2/js/north/tabs.js"></script>
124   - <!-- home js -->
125   - <script src="/real_control_v2/js/home/layout.js"></script>
126   - <script src="/real_control_v2/js/home/line_panel.js"></script>
127   - <script src="/real_control_v2/js/home/context_menu.js"></script>
128   - <!-- line schedule js -->
129   - <script src="/real_control_v2/js/line_schedule/legend.js"></script>
130   - <script src="/real_control_v2/js/line_schedule/layout.js"></script>
131   - <script src="/real_control_v2/js/line_schedule/sch_table.js"></script>
132   - <script src="/real_control_v2/js/line_schedule/context_menu.js"></script>
133   - <script src="/real_control_v2/js/line_schedule/dbclick.js"></script>
134   - <script src="/real_control_v2/js/line_schedule/search.js"></script>
135   -
136   - <!-- 字典相关 -->
137   - <script src="/assets/js/dictionary.js"></script>
138   - <!-- websocket -->
139   - <script src="/assets/js/sockjs.min.js"></script>
140   - <script src="/real_control_v2/js/websocket/sch_websocket.js"></script>
141   - <!-- tts -->
142   - <script src="/real_control_v2/js/utils/tts.js"></script>
143   -
144   - <!-- echart -->
145   - <script src="/real_control_v2/assets/echarts-3/echarts.js"></script>
146   - <!-- Geolib -->
147   - <script src="/real_control_v2/geolib/geolib.js"></script>
148   -
149   - <script src="/real_control_v2/js/signal_state/signal_state.js"></script>
150   - <script src="/real_control_v2/js/utils/dispatch_pattern.js"></script>
  62 +<script>
  63 + delete window.exports;
  64 + delete window.module;
  65 +
  66 + var ipcMain;
  67 + //是否处于electron环境下
  68 + var isElectron = (function () {
  69 + try {
  70 + if (process.versions.electron)
  71 + return true;
  72 + else
  73 + return false;
  74 + }
  75 + catch (e) {
  76 + return false;
  77 + }
  78 + })();
  79 +
  80 + if (isElectron) {
  81 + var link = document.createElement("link");
  82 + link.type = "text/css";
  83 + link.rel = "stylesheet";
  84 + link.href = "/real_control_v2/css/electron.css";
  85 + document.getElementsByTagName("head")[0].appendChild(link);
  86 +
  87 + ipcMain = require('electron').ipcRenderer;
  88 + }
  89 +</script>
  90 +
  91 +<!-- 地图相关 -->
  92 +<script src="http://api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>
  93 +<script src="http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
  94 +<script src="/assets/js/baidu//MarkerClusterer.js"></script>
  95 +<script src="/assets/js/TransGPS.js"></script>
  96 +<!-- 高德 -->
  97 +<script src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"></script>
  98 +<!-- jquery -->
  99 +<script src="/real_control_v2/assets/js/jquery.min.js"></script>
  100 +<!-- jquery actual -->
  101 +<script src="/real_control_v2/assets/js/jquery.actual.min.js"></script>
  102 +<!-- jquery.serializejson JSON序列化插件 -->
  103 +<script src="/assets/plugins/jquery.serializejson.js"></script>
  104 +<!-- moment.js 日期处理类库 -->
  105 +<script src="/assets/plugins/moment-with-locales.js"></script>
  106 +<!-- common js -->
  107 +<script src="/real_control_v2/js/common.js"></script>
  108 +<!-- art-template 模版引擎 -->
  109 +<script src="/assets/plugins/template.js"></script>
  110 +<!-- d3 -->
  111 +<script src="/assets/js/d3.min.js"></script>
  112 +<!-- EventProxy -->
  113 +<script src="/assets/js/eventproxy.js"></script>
  114 +<!-- main js -->
  115 +<script src="/real_control_v2/js/main.js"></script>
  116 +<!-- uikit core -->
  117 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js"></script>
  118 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js"></script>
  119 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js"></script>
  120 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js"></script>
  121 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js"></script>
  122 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js"></script>
  123 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js"></script>
  124 +
  125 +<!-- jquery contextMenu -->
  126 +<script src="/real_control_v2/assets/js/jquery.contextMenu.min.js"></script>
  127 +<script src="/real_control_v2/assets/js/jquery.ui.position.min.js"></script>
  128 +<!-- formvalidation- -->
  129 +<script src="/real_control_v2/assets/plugins/formvalidation/formValidation.min.js"></script>
  130 +<script src="/real_control_v2/assets/plugins/formvalidation/zh_CN.js"></script>
  131 +<script src="/real_control_v2/assets/plugins/formvalidation/uikit.min.js"></script>
  132 +<!-- js tree -->
  133 +<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js"></script>
  134 +<!-- simple pinyin -->
  135 +<script src="/assets/plugins/pinyin.js"></script>
  136 +<!-- qtip -->
  137 +<script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js"></script>
  138 +
  139 +<!-- 数据 -->
  140 +<script src="/real_control_v2/js/data/data_basic.js"></script>
  141 +<script src="/real_control_v2/js/data/data_gps.js"></script>
  142 +<script src="/real_control_v2/js/data/gps_abnormal.js"></script>
  143 +<!-- 线路模拟图 -->
  144 +<script src="/real_control_v2/js/utils/svg_chart.js"></script>
  145 +<script src="/real_control_v2/js/utils/svg_data_convert.js"></script>
  146 +<script src="/real_control_v2/js/utils/svg_chart_tooltip.js"></script>
  147 +<script src="/real_control_v2/js/utils/svg_chart_map.js"></script>
  148 +
  149 +<!-- custom table js -->
  150 +<script src="/real_control_v2/js/utils/ct_table.js"></script>
  151 +<!-- north js -->
  152 +<script src="/real_control_v2/js/north/toolbar.js"></script>
  153 +<script src="/real_control_v2/js/north/tabs.js"></script>
  154 +<!-- home js -->
  155 +<script src="/real_control_v2/js/home/layout.js"></script>
  156 +<script src="/real_control_v2/js/home/line_panel.js"></script>
  157 +<script src="/real_control_v2/js/home/context_menu.js"></script>
  158 +<!-- line schedule js -->
  159 +<script src="/real_control_v2/js/line_schedule/legend.js"></script>
  160 +<script src="/real_control_v2/js/line_schedule/layout.js"></script>
  161 +<script src="/real_control_v2/js/line_schedule/sch_table.js"></script>
  162 +<script src="/real_control_v2/js/line_schedule/context_menu.js"></script>
  163 +<script src="/real_control_v2/js/line_schedule/dbclick.js"></script>
  164 +<script src="/real_control_v2/js/line_schedule/search.js"></script>
  165 +
  166 +<!-- 字典相关 -->
  167 +<script src="/assets/js/dictionary.js"></script>
  168 +<!-- websocket -->
  169 +<script src="/assets/js/sockjs.min.js"></script>
  170 +<script src="/real_control_v2/js/websocket/sch_websocket.js"></script>
  171 +<!-- tts -->
  172 +<script src="/real_control_v2/js/utils/tts.js"></script>
  173 +
  174 +<!-- echart -->
  175 +<script src="/real_control_v2/assets/echarts-3/echarts.js"></script>
  176 +<!-- Geolib -->
  177 +<script src="/real_control_v2/geolib/geolib.js"></script>
  178 +
  179 +<script src="/real_control_v2/js/signal_state/signal_state.js"></script>
  180 +<script src="/real_control_v2/js/utils/dispatch_pattern.js"></script>
151 181 </body>
152 182  
153 183 </html>
... ...