Commit df042e613363f1d87fe8b2946b904620c7dba1ec

Authored by 王通
1 parent de9fff00

1.进出场班次显示RFID状态

src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
1   -<div>
2   - <script id="line-schedule-table-temp" type="text/html">
3   - <div class="schedule-wrap {{if dir==0}}up{{else}}down{{/if}}">
4   - <h3 class="header-title">
5   - {{if dir==0}}
6   - {{line.startStationName}}
7   - {{else}}
8   - {{line.endStationName}}
9   - {{/if}}
10   - <i class="uk-icon-question-circle uk-icon-hover"></i>
11   - <div class="fixed_legend">
12   - <div>
13   - <span class="tl-xxfc">消息发出</span>
14   - <span class="tl-xxsd">消息收到</span>
15   - <span class="tl-xxrd">消息阅读</span>
16   - &nbsp;
17   - <span class="tl-wd">误点</span>
18   - <span class="tl-zzzx">正在执行</span>
19   - <span class="tl-qrlb"></span>
20   - <span class="tl-yzx">已执行</span>
21   - <a>
22   - <i class="uk-icon-angle-double-up fixed_legend_close"></i>
23   - </a>
24   - </div>
25   - </div>
26   - <i class="uk-icon-eye uk-icon-hover ct_eye_icon"></i>
27   - <i class="uk-icon-qrcode uk-icon-hover ct_calu_icon" data-toggle="tooltip" data-placement="bottom" title="计算应到实到时间对比"></i>
28   -
29   - <!--<i class="uk-icon-share-alt uk-icon-hover tp_info_icon" ></i>-->
30   -
31   - <span class="warn_multi_station" data-updown="{{dir}}" data-code="{{line.lineCode}}"></span>
32   - <div class="search_sch_panel">
33   - <form class="uk-form" onsubmit="javascript:return false;">
34   - <div class="uk-autocomplete sch-search-autocom">
35   - <div class="uk-form-icon">
36   - <i class="uk-icon-search"></i>
37   - <input type="text" placeholder="搜索">
38   - <i class="cancel uk-icon-times-circle" data-uk-tooltip="{pos:'right'}" title="取消过滤"></i>
39   - </div>
40   - </div>
41   - </form>
42   - </div>
43   - </h3>
44   - <div class="schedule-body">
45   - <div class="ct_table_wrap">
46   - <div class="ct_table line-schedule-table">
47   - <div class="ct_table_head">
48   - <dl>
49   - <dt>序号</dt>
50   - <dt>路牌</dt>
51   - <dt>RFID</dt>
52   - <dt>车辆</dt>
53   - <dt>应到</dt>
54   - <dt>实到</dt>
55   - <dt sort-field>计发</dt>
56   - <dt sort-field>待发</dt>
57   - <dt>实发</dt>
58   - <dt>原因</dt>
59   - </dl>
60   - </div>
61   - <div class="ct_table_body">
62   - {{each list as sch i}}
63   - <dl data-id="{{sch.id}}">
64   - <dd class="seq_no">{{i + 1}}</dd>
65   - <dd class="lpName"><a>{{sch.lpName}}</a></dd>
66   - <dd class="{{if (sch.bcType == 'in') || (sch.bcType == 'out')}}tl-white{{else if !sch.qdzArrDatesj}}tl-white{{else if (sch.rfidState & 1) == 1 && (sch.rfidState & 2) == 2}}tl-green{{else if (sch.rfidState & 1) == 1}}tl-yellow{{else}}tl-grey{{/if}}"></dd>
67   - <dd data-nbbm="{{sch.clZbh}}"
68   - class="{{if sch.directiveState == 60}}tl-xxfc{{else if sch.directiveState == 100}}tl-xxsd{{else if sch.directiveState == 200}}tl-xxrd{{/if}}">
69   - {{sch.clZbh}}
70   - </dd>
71   - <dd>{{sch.qdzArrDatejh}}</dd>
72   - <dd class="qdzArrDatesjDD"><span class="qdzArrDatesjSPAN">{{sch.qdzArrDatesj}}</span><span class="arrsj-diff">{{sch.arrsj_diff}}</span></dd>
73   - <dd data-sort-val={{sch.fcsjT}}>
74   - {{sch.fcsj}}
75   - {{if sch.bcType == "out"}}
76   - <span class="uk-badge uk-badge-success out">出场</span>
77   - {{else if sch.bcType == "in"}}
78   - <span class="uk-badge uk-badge-warning in">进场</span>
79   - {{else if sch.bcType == "venting"}}
80   - <span class="uk-badge uk-badge-danger">直放</span>
81   - {{else if sch.bcType == "major"}}
82   - <span class="uk-badge uk-badge-danger">放站</span>
83   - {{else if sch.bcType == "region"}}
84   - <span class="uk-badge sch_region">区间</span>
85   - {{else if sch.bcType == "ldks"}}
86   - <span class="uk-badge sch_ldks">空驶</span>
87   - {{/if}}
88   - {{if sch.sflj}}
89   - <span class="uk-badge uk-badge-danger">临加</span>
90   - {{/if}}
91   - {{if sch.cTasks.length > 0}}
92   - <span class="uk-badge uk-badge-notification c_task {{if sch.c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{sch.cTasks.length}}</span>
93   - {{/if}}
94   - {{if sch.lpChange==1}}
95   - <span class="uk-badge uk-badge-success out">换</span>
96   - {{/if}}
97   - </dd>
98   - <dd data-sort-val={{sch.dfsjT}} dbclick dbclick-type="dfsj" dbclick-val="{{sch.dfsj}}">
99   - {{sch.dfsj}}
100   - {{if sch.late2}}
101   - <span class="late-badge">?+{{sch.lateMinute}}</span>
102   - {{/if}}
103   - </dd>
104   - <dd data-uk-observe class="
105   - {{if sch.status==-1}}
106   - tl-qrlb
107   - {{else if sch.status==2}}
108   - tl-yzx
109   - {{else if sch.status==1}}
110   - tl-zzzx
111   - {{else if sch.status ==4}}
112   - tl-wfyd
113   - {{else if sch.status == 0 && sch.late}}
114   - tl-wd
115   - {{/if}} fcsjActualCell">
116   - {{sch.fcsjActual}}<span class="fcsj-diff">{{sch.fcsj_diff}}</span>
117   - </dd>
118   - <dd data-uk-observe>
119   -
120   - <span title="{{sch.remarks}}"
121   - data-uk-tooltip="{pos:'top-left'}">{{sch.remarks}}</span>
122   - </dd>
123   - </dl>
124   - {{/each}}
125   - </div>
126   - </div>
127   - </div>
128   - </div>
129   - </div>
130   - </script>
131   -
132   - <script id="line-schedule-fcsj-temp" type="text/html">
133   - <dd data-sort-val={{fcsjT}}>
134   - {{fcsj}}
135   - {{if bcType == "out"}}
136   - <span class="uk-badge uk-badge-success out">出场</span>
137   - {{else if bcType == "in"}}
138   - <span class="uk-badge uk-badge-warning in">进场</span>
139   - {{else if bcType == "venting"}}
140   - <span class="uk-badge uk-badge-danger">直放</span>
141   - {{else if bcType == "major"}}
142   - <span class="uk-badge uk-badge-danger">放站</span>
143   - {{else if bcType == "region"}}
144   - <span class="uk-badge sch_region">区间</span>
145   - {{else if bcType == "ldks"}}
146   - <span class="uk-badge sch_ldks">空驶</span>
147   - {{/if}}
148   - {{if sflj}}
149   - <span class="uk-badge uk-badge-danger">临加</span>
150   - {{/if}}
151   - {{if cTasks.length > 0}}
152   - <span class="uk-badge uk-badge-notification c_task {{if c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{cTasks.length}}</span>
153   - {{/if}}
154   - </dd>
155   - </script>
156   -
157   - <script id="line-schedule-sfsj-temp" type="text/html">
158   - <dd data-uk-observe class="
159   - {{if status==-1}}
160   - tl-qrlb
161   - {{else if status==2}}
162   - tl-yzx
163   - {{else if status==1}}
164   - tl-zzzx
165   - {{else if status == 0 && late}}
166   - tl-wd
167   - {{/if}} fcsjActualCell">
168   - {{fcsjActual}}<span class="fcsj-diff">{{fcsj_diff}}</span>
169   - </dd>
170   - </script>
171   -
172   - <script id="line-schedule-nbbm-temp" type="text/html">
173   - <dd data-nbbm="{{clZbh}}"
174   - class="{{if directiveState == 60}}tl-xxfc{{else if directiveState == 100}}tl-xxsd{{else if directiveState == 200}}tl-xxrd{{/if}}">
175   - {{clZbh}}
176   - </dd>
177   - </script>
178   -
179   - <script id="sfsj_sch-detail-temp" type="text/html">
180   - <ul class="sfsj-sch-detail">
181   - <li><span>路牌:</span>{{lpName}}</li>
182   - <li><span>车辆:</span>{{clZbh}}</li>
183   - <li><span>计发:</span>{{fcsj}}</li>
184   - <li><span>实发:</span>{{fcsjActual}}</li>
185   - <li><span>计达:</span>{{zdsj}}</li>
186   - <li><span>实达:</span>{{zdsjActual}}</li>
187   - <li><span>驾驶员:</span>{{jGh}}/{{jName}}</li>
188   - <li><span>售票员:</span>{{sGh}}/{{sName}}</li>
189   - <li><span>终点站:</span>{{zdzName}}</li>
190   - </ul>
191   - </script>
192   -
193   - <script id="last-sch-sunken-temp" type="text/html">
194   - <div class="last-sch-sunken">
195   - <span class="_badge">{{zdsj}}/{{zdsjActual}}</span>
196   - </div>
197   - </script>
198   -
199   - <script id="sch-lp-mileage-tip-temp" type="text/html">
200   - {{each data as obj i}}
201   - {{if i > 0}}<hr>{{/if}}
202   -
203   - <h5 class="_title"> <span class="lp_name">{{lpName}}</span>&nbsp;&nbsp;<a>{{obj.key}}</a></h5>
204   - <div class="LD_item">
205   - <span>营运:<a>{{obj.serviceMileage}}</a></span>
206   - <span>烂班:<a>{{obj.destroyMileage}}</a></span>
207   - <span>空驶:<a>{{obj.emptyMileage}}</a></span>
208   - </div>
209   - {{/each}}
210   - </script>
211   -</div>
  1 +<div>
  2 + <script id="line-schedule-table-temp" type="text/html">
  3 + <div class="schedule-wrap {{if dir==0}}up{{else}}down{{/if}}">
  4 + <h3 class="header-title">
  5 + {{if dir==0}}
  6 + {{line.startStationName}}
  7 + {{else}}
  8 + {{line.endStationName}}
  9 + {{/if}}
  10 + <i class="uk-icon-question-circle uk-icon-hover"></i>
  11 + <div class="fixed_legend">
  12 + <div>
  13 + <span class="tl-xxfc">消息发出</span>
  14 + <span class="tl-xxsd">消息收到</span>
  15 + <span class="tl-xxrd">消息阅读</span>
  16 + &nbsp;
  17 + <span class="tl-wd">误点</span>
  18 + <span class="tl-zzzx">正在执行</span>
  19 + <span class="tl-qrlb"></span>
  20 + <span class="tl-yzx">已执行</span>
  21 + <a>
  22 + <i class="uk-icon-angle-double-up fixed_legend_close"></i>
  23 + </a>
  24 + </div>
  25 + </div>
  26 + <i class="uk-icon-eye uk-icon-hover ct_eye_icon"></i>
  27 + <i class="uk-icon-qrcode uk-icon-hover ct_calu_icon" data-toggle="tooltip" data-placement="bottom" title="计算应到实到时间对比"></i>
  28 +
  29 + <!--<i class="uk-icon-share-alt uk-icon-hover tp_info_icon" ></i>-->
  30 +
  31 + <span class="warn_multi_station" data-updown="{{dir}}" data-code="{{line.lineCode}}"></span>
  32 + <div class="search_sch_panel">
  33 + <form class="uk-form" onsubmit="javascript:return false;">
  34 + <div class="uk-autocomplete sch-search-autocom">
  35 + <div class="uk-form-icon">
  36 + <i class="uk-icon-search"></i>
  37 + <input type="text" placeholder="搜索">
  38 + <i class="cancel uk-icon-times-circle" data-uk-tooltip="{pos:'right'}" title="取消过滤"></i>
  39 + </div>
  40 + </div>
  41 + </form>
  42 + </div>
  43 + </h3>
  44 + <div class="schedule-body">
  45 + <div class="ct_table_wrap">
  46 + <div class="ct_table line-schedule-table">
  47 + <div class="ct_table_head">
  48 + <dl>
  49 + <dt>序号</dt>
  50 + <dt>路牌</dt>
  51 + <dt>RFID</dt>
  52 + <dt>车辆</dt>
  53 + <dt>应到</dt>
  54 + <dt>实到</dt>
  55 + <dt sort-field>计发</dt>
  56 + <dt sort-field>待发</dt>
  57 + <dt>实发</dt>
  58 + <dt>原因</dt>
  59 + </dl>
  60 + </div>
  61 + <div class="ct_table_body">
  62 + {{each list as sch i}}
  63 + <dl data-id="{{sch.id}}">
  64 + <dd class="seq_no">{{i + 1}}</dd>
  65 + <dd class="lpName"><a>{{sch.lpName}}</a></dd>
  66 + <dd class="{{if !sch.qdzArrDatesj}}tl-white{{else if (sch.rfidState & 1) == 1 && (sch.rfidState & 2) == 2}}tl-green{{else if (sch.rfidState & 1) == 1}}tl-yellow{{else}}tl-grey{{/if}}"></dd>
  67 + <dd data-nbbm="{{sch.clZbh}}"
  68 + class="{{if sch.directiveState == 60}}tl-xxfc{{else if sch.directiveState == 100}}tl-xxsd{{else if sch.directiveState == 200}}tl-xxrd{{/if}}">
  69 + {{sch.clZbh}}
  70 + </dd>
  71 + <dd>{{sch.qdzArrDatejh}}</dd>
  72 + <dd class="qdzArrDatesjDD"><span class="qdzArrDatesjSPAN">{{sch.qdzArrDatesj}}</span><span class="arrsj-diff">{{sch.arrsj_diff}}</span></dd>
  73 + <dd data-sort-val={{sch.fcsjT}}>
  74 + {{sch.fcsj}}
  75 + {{if sch.bcType == "out"}}
  76 + <span class="uk-badge uk-badge-success out">出场</span>
  77 + {{else if sch.bcType == "in"}}
  78 + <span class="uk-badge uk-badge-warning in">进场</span>
  79 + {{else if sch.bcType == "venting"}}
  80 + <span class="uk-badge uk-badge-danger">直放</span>
  81 + {{else if sch.bcType == "major"}}
  82 + <span class="uk-badge uk-badge-danger">放站</span>
  83 + {{else if sch.bcType == "region"}}
  84 + <span class="uk-badge sch_region">区间</span>
  85 + {{else if sch.bcType == "ldks"}}
  86 + <span class="uk-badge sch_ldks">空驶</span>
  87 + {{/if}}
  88 + {{if sch.sflj}}
  89 + <span class="uk-badge uk-badge-danger">临加</span>
  90 + {{/if}}
  91 + {{if sch.cTasks.length > 0}}
  92 + <span class="uk-badge uk-badge-notification c_task {{if sch.c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{sch.cTasks.length}}</span>
  93 + {{/if}}
  94 + {{if sch.lpChange==1}}
  95 + <span class="uk-badge uk-badge-success out">换</span>
  96 + {{/if}}
  97 + </dd>
  98 + <dd data-sort-val={{sch.dfsjT}} dbclick dbclick-type="dfsj" dbclick-val="{{sch.dfsj}}">
  99 + {{sch.dfsj}}
  100 + {{if sch.late2}}
  101 + <span class="late-badge">?+{{sch.lateMinute}}</span>
  102 + {{/if}}
  103 + </dd>
  104 + <dd data-uk-observe class="
  105 + {{if sch.status==-1}}
  106 + tl-qrlb
  107 + {{else if sch.status==2}}
  108 + tl-yzx
  109 + {{else if sch.status==1}}
  110 + tl-zzzx
  111 + {{else if sch.status ==4}}
  112 + tl-wfyd
  113 + {{else if sch.status == 0 && sch.late}}
  114 + tl-wd
  115 + {{/if}} fcsjActualCell">
  116 + {{sch.fcsjActual}}<span class="fcsj-diff">{{sch.fcsj_diff}}</span>
  117 + </dd>
  118 + <dd data-uk-observe>
  119 +
  120 + <span title="{{sch.remarks}}"
  121 + data-uk-tooltip="{pos:'top-left'}">{{sch.remarks}}</span>
  122 + </dd>
  123 + </dl>
  124 + {{/each}}
  125 + </div>
  126 + </div>
  127 + </div>
  128 + </div>
  129 + </div>
  130 + </script>
  131 +
  132 + <script id="line-schedule-fcsj-temp" type="text/html">
  133 + <dd data-sort-val={{fcsjT}}>
  134 + {{fcsj}}
  135 + {{if bcType == "out"}}
  136 + <span class="uk-badge uk-badge-success out">出场</span>
  137 + {{else if bcType == "in"}}
  138 + <span class="uk-badge uk-badge-warning in">进场</span>
  139 + {{else if bcType == "venting"}}
  140 + <span class="uk-badge uk-badge-danger">直放</span>
  141 + {{else if bcType == "major"}}
  142 + <span class="uk-badge uk-badge-danger">放站</span>
  143 + {{else if bcType == "region"}}
  144 + <span class="uk-badge sch_region">区间</span>
  145 + {{else if bcType == "ldks"}}
  146 + <span class="uk-badge sch_ldks">空驶</span>
  147 + {{/if}}
  148 + {{if sflj}}
  149 + <span class="uk-badge uk-badge-danger">临加</span>
  150 + {{/if}}
  151 + {{if cTasks.length > 0}}
  152 + <span class="uk-badge uk-badge-notification c_task {{if c_t_mileage_status==-1}}c_task_mileage_error{{/if}}">{{cTasks.length}}</span>
  153 + {{/if}}
  154 + </dd>
  155 + </script>
  156 +
  157 + <script id="line-schedule-sfsj-temp" type="text/html">
  158 + <dd data-uk-observe class="
  159 + {{if status==-1}}
  160 + tl-qrlb
  161 + {{else if status==2}}
  162 + tl-yzx
  163 + {{else if status==1}}
  164 + tl-zzzx
  165 + {{else if status == 0 && late}}
  166 + tl-wd
  167 + {{/if}} fcsjActualCell">
  168 + {{fcsjActual}}<span class="fcsj-diff">{{fcsj_diff}}</span>
  169 + </dd>
  170 + </script>
  171 +
  172 + <script id="line-schedule-nbbm-temp" type="text/html">
  173 + <dd data-nbbm="{{clZbh}}"
  174 + class="{{if directiveState == 60}}tl-xxfc{{else if directiveState == 100}}tl-xxsd{{else if directiveState == 200}}tl-xxrd{{/if}}">
  175 + {{clZbh}}
  176 + </dd>
  177 + </script>
  178 +
  179 + <script id="sfsj_sch-detail-temp" type="text/html">
  180 + <ul class="sfsj-sch-detail">
  181 + <li><span>路牌:</span>{{lpName}}</li>
  182 + <li><span>车辆:</span>{{clZbh}}</li>
  183 + <li><span>计发:</span>{{fcsj}}</li>
  184 + <li><span>实发:</span>{{fcsjActual}}</li>
  185 + <li><span>计达:</span>{{zdsj}}</li>
  186 + <li><span>实达:</span>{{zdsjActual}}</li>
  187 + <li><span>驾驶员:</span>{{jGh}}/{{jName}}</li>
  188 + <li><span>售票员:</span>{{sGh}}/{{sName}}</li>
  189 + <li><span>终点站:</span>{{zdzName}}</li>
  190 + </ul>
  191 + </script>
  192 +
  193 + <script id="last-sch-sunken-temp" type="text/html">
  194 + <div class="last-sch-sunken">
  195 + <span class="_badge">{{zdsj}}/{{zdsjActual}}</span>
  196 + </div>
  197 + </script>
  198 +
  199 + <script id="sch-lp-mileage-tip-temp" type="text/html">
  200 + {{each data as obj i}}
  201 + {{if i > 0}}<hr>{{/if}}
  202 +
  203 + <h5 class="_title"> <span class="lp_name">{{lpName}}</span>&nbsp;&nbsp;<a>{{obj.key}}</a></h5>
  204 + <div class="LD_item">
  205 + <span>营运:<a>{{obj.serviceMileage}}</a></span>
  206 + <span>烂班:<a>{{obj.destroyMileage}}</a></span>
  207 + <span>空驶:<a>{{obj.emptyMileage}}</a></span>
  208 + </div>
  209 + {{/each}}
  210 + </script>
  211 +</div>
... ...
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
1   -/** schedule table */
2   -
3   -var gb_schedule_table = (function () {
4   -
5   - var temps;
6   - //线路分组的班次数据
7   - var line2Schedule = {};
8   - //车辆应发未发车辆数
9   - var car_yfwf_map = {};
10   - //班次站点编码和实际不符数据
11   - var errorCodeData = {};
12   -
13   - var bcTypeOrderMap = {
14   - 'out':0,
15   - 'normal':1,
16   - 'region':2,
17   - 'major':3,
18   - 'venting':4,
19   - 'ldks':5,
20   - 'in':6
21   - };
22   - var typeOrder = function (type) {
23   - return bcTypeOrderMap[type]?bcTypeOrderMap[type]:0;
24   - };
25   - var schedule_sort = function (s1, s2) {
26   - var diff = s1['fcsjT'] - s2['fcsjT'];
27   - return diff!=0?diff:typeOrder(s1['bcType'])-typeOrder(s2['bcType']);
28   - };
29   -
30   - var show = function (cb) {
31   - //从服务器获取班次数据
32   - $.get('/realSchedule/lines', {
33   - lines: gb_data_basic.line_idx
34   - }, function (rs) {
35   - for (var lineCode in rs) {
36   - line2Schedule[lineCode] = {};
37   -
38   - //排序
39   - rs[lineCode].sort(schedule_sort);
40   - //calc shift
41   - $.each(rs[lineCode], function () {
42   - if(this.status==-1)
43   - clearActualTime(this);
44   - calc_sch_real_shift(this);
45   - wfydcolor(this);
46   - line2Schedule[lineCode][this.id] = this;
47   - //子任务公里是否与计划平
48   - this.c_t_mileage_status = calcCTaskMileageStatus(this);
49   - });
50   - //计算应发未发
51   - calc_yfwf_num(lineCode);
52   - }
53   - ep.emit('data', rs);
54   - });
55   -
56   - //加载班次表格渲染模板
57   - $.get('/real_control_v2/fragments/line_schedule/sch_table.html', function (dom) {
58   - ep.emit('temp', gb_common.compileTempByDom(dom, {
59   - compress: true
60   - }));
61   - });
62   -
63   - var ep = EventProxy.create("data", "temp", function (data, temp) {
64   - temps = temp;
65   - var lineCode, dirData, htmlStr;
66   - $('#main-tab-content .line_schedule').each(function () {
67   - lineCode = $(this).data('id');
68   - if (arrayIsNull(data[lineCode]))
69   - return true;
70   - dirData = gb_common.groupBy(data[lineCode], 'xlDir');
71   - for (var upDown in dirData) {
72   - htmlStr = temps['line-schedule-table-temp']({
73   - dir: upDown,
74   - line: gb_data_basic.codeToLine[lineCode],
75   - list: dirData[upDown]
76   - });
77   -
78   - $('.schedule-wrap .card-panel:eq(' + upDown + ')', this)
79   - .html(htmlStr);
80   - }
81   -
82   - //标记路牌最后一个班次
83   - markerLastByLine(lineCode);
84   - //初始化图例相关,dbclick 不能代理事件
85   - //gb_sch_legend.init(this);
86   - });
87   - //初始化图例
88   - gb_sch_legend.init();
89   - var content = $('.line_schedule .ct_table_wrap');
90   - //初始化滚动条
91   - content.perfectScrollbar({suppressScrollX: true});
92   - //fixed table head
93   - gb_ct_table.fixedHead(content);
94   - //enable sort
95   - gb_ct_table.enableSort($('.ct_table', content), reset_seq_no, gb_schedule_table_dbclick.init);
96   - //dbclick event
97   - gb_schedule_table_dbclick.init();
98   - //双击实发
99   - gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell'));
100   - //双击车辆
101   - gb_schedule_table_dbclick.carCellClick($('.ct_table_body dd[data-nbbm]'));
102   - //搜索框初始化
103   - gb_sch_search.init();
104   -
105   - //监听gps车辆信息
106   - gb_data_gps.registerCallback(renderCarRemark);
107   - gb_sch_legend.showYdSdDb();
108   - cb && cb();
109   - });
110   -
111   - };
112   -
113   - var renderCarRemark = function () {
114   - try{
115   - var $activeTab = $('.north-tabs>ul>li.tab-line.uk-active');//.data('code');
116   - if($activeTab.length==0)
117   - return;
118   - var lineCode = $activeTab.data('code');
119   - var array = gb_common.get_vals(line2Schedule[lineCode]);
120   - var nbbms = {};
121   - for(var i=0,sch;sch=array[i++];){
122   - nbbms[sch.clZbh]=1;
123   - }
124   -
125   - var $activeWrap = $('#main-tab-content .line_schedule.uk-active .schedule-wrap .schedule-body');
126   - var gps, e;
127   - for(var nbbm in nbbms){
128   - gps = gb_data_gps.findGpsByNbbm(nbbm);
129   - e = $('.ct_table_body dl>dd[data-nbbm='+nbbm+']', $activeWrap);
130   - $('i', e).remove();
131   -
132   - if(gps && gps['planCode']!=lineCode && gps.remark)
133   - $(e).append('<i class="uk-icon-exclamation-circle" data-uk-tooltip title="'+gps.remark+'"></i>');
134   - }
135   - }catch (e){
136   - console.log(e);
137   - }
138   - };
139   -
140   - /**
141   - * 计算子任务公里是否和计划平
142   - * @param sch
143   - */
144   - var calcCTaskMileageStatus = function (sch) {
145   - if(!sch.cTasks || sch.cTasks.length==0)
146   - return 0;
147   - var sum = 0;
148   - $.each(sch.cTasks, function () {
149   - if (this.mileageType == 'service') {
150   - sum = gb_common.accAdd(sum, this.mileage);
151   - }
152   - });
153   -
154   - if (sum != sch.jhlcOrig) {
155   - return -1;
156   - }
157   - return 0;
158   - };
159   -
160   -
161   - //重置序号
162   - var reset_seq_no = function (dls) {
163   - dls.each(function (i, dl) {
164   - $('dd:eq(0)', dl).text(i + 1);
165   - });
166   - };
167   -
168   - //计算实发时间差值
169   - var calc_sch_real_shift = function (sch) {
170   - if (sch['fcsjActualTime']){
171   - var fs = 'YYYY-MM-DD HH:mm'
172   - ,m1 = moment(sch['fcsjActualTime']).format(fs)
173   - ,m2 = moment(sch['dfsjT']).format(fs);//去掉秒
174   - console.log(moment(m1, fs).format('X'))
175   - console.log(moment(m2, fs).format('X'))
176   - var diff = moment(m1, fs).format('X') - moment(m2, fs).format('X')
177   - ,fcsj_diff = parseInt(diff / 60, 10);;
178   -
179   - if(fcsj_diff > 0)
180   - sch.fcsj_diff = '( +' + fcsj_diff + ' )';
181   - else if (fcsj_diff < 0)
182   - sch.fcsj_diff = '( ' + fcsj_diff + ' )';
183   - else
184   - sch.fcsj_diff = '';
185   - }
186   - };
187   - //无发有到时间
188   - var wfydcolor=function (sch) {
189   - if (sch.fcsjActual==null&&sch.zdsjActual!=null&&sch.zdsjActual!=''&&sch.status!=-1) {//sch.qdzArrDatesj!=''&&sch.qdzArrDatesj!=null&&
190   - sch.status=4;
191   - }
192   - }
193   -
194   -
195   -
196   - function arrayIsNull(array) {
197   - return !array || array.length == 0;
198   - }
199   -
200   - var findScheduleByLine = function (lineCode) {
201   - return line2Schedule[lineCode];
202   - };
203   -
204   - //新增一个班次,附带更新的班次
205   - var insertSchedule = function (sch, upArr) {
206   - var xls = {};
207   - xls[sch.xlBm] = 1;
208   - line2Schedule[sch.xlBm][sch.id] = sch;
209   - //update
210   - if (isArray(upArr)) {
211   - $.each(upArr, function () {
212   - line2Schedule[this.xlBm][this.id] = this;
213   - xls[this.xlBm] = 1;
214   - });
215   - }
216   -
217   - //重新渲染表格
218   - for(var xlBm in xls){
219   - reRenderTable(sch.xlBm);
220   - }
221   - //定位到新添加的班次
222   - scroToDl(sch);
223   - };
224   -
225   - /**
226   - * 重新渲染表格
227   - */
228   - var reRenderTable = function (lineCode) {
229   - var data = gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort),
230   - dirData = gb_common.groupBy(data, 'xlDir'),
231   - tabCont = $('li.line_schedule[data-id=' + lineCode + ']'),
232   - htmlStr;
233   -
234   - if($.isEmptyObject(dirData)){
235   - $('.schedule-wrap .card-panel', tabCont).html('');
236   - }
237   - else {
238   - for (var upDown in dirData) {
239   - htmlStr = temps['line-schedule-table-temp']({
240   - dir: upDown,
241   - line: gb_data_basic.codeToLine[lineCode],
242   - list: dirData[upDown]
243   - });
244   - $('.schedule-wrap .card-panel:eq(' + upDown + ')', tabCont).html(htmlStr);
245   - }
246   - //图例相关
247   - gb_sch_legend.init(tabCont);
248   - //标记末班
249   - markerLastByLine(lineCode);
250   - //计算应发未发
251   - calc_yfwf_num(lineCode);
252   - //重新固定表头
253   - gb_ct_table.fixedHead($('.schedule-wrap .ct_table_wrap', tabCont));
254   -
255   - //重新初始化排序
256   - gb_ct_table.enableSort($('.ct_table', tabCont), reset_seq_no, gb_schedule_table_dbclick.init);
257   - //重新初始化双击待发调整
258   - gb_schedule_table_dbclick.init();
259   - //重新初始化双击实发发车信息微调
260   - gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell', tabCont));
261   - //重新初始化双击车辆
262   - gb_schedule_table_dbclick.carCellClick($('.ct_table_body dd[data-nbbm]'));
263   - //滚动条
264   - $('.schedule-wrap .ct_table_wrap', tabCont).perfectScrollbar({suppressScrollX: true});
265   -
266   - //搜索模板初始化
267   - gb_sch_search.init();
268   - }
269   - };
270   -
271   -
272   - /**
273   - * 重新从服务器加载数据,并刷新表格
274   - * @param lineCode
275   - */
276   - var reLoadAndRefresh = function (lineCode) {
277   - $.get('/realSchedule/lines', {
278   - lines: lineCode + ','
279   - }, function (rs) {
280   - if(!rs || $.isEmptyObject(rs)){
281   - line2Schedule[lineCode] = {};
282   - }
283   - else{
284   - //排序
285   - rs[lineCode].sort(schedule_sort);
286   - line2Schedule[lineCode] = {};
287   - //calc shift
288   - $.each(rs[lineCode], function () {
289   - calc_sch_real_shift(this);
290   - line2Schedule[lineCode][this.id] = this;
291   - });
292   - }
293   - //计算应发未发
294   - calc_yfwf_num(lineCode);
295   - //重新渲染
296   - reRenderTable(lineCode);
297   - });
298   - };
299   -
300   - //删除一个班次
301   - var deheteSchedule = function (sch) {
302   - sch = line2Schedule[sch.xlBm][sch.id];
303   - if (sch) {
304   - var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']'),
305   - dls = dl.parent().find('dl');
306   - delete line2Schedule[sch.xlBm][sch.id];
307   - dl.remove();
308   - reset_seq_no(dls);
309   - calc_yfwf_num(sch.xlBm);
310   - }
311   - };
312   -
313   - /**
314   - * 更新班次
315   - * @param schArr
316   - */
317   - var updateSchedule = function (schArr) {
318   -
319   - if (!isArray(schArr))
320   - schArr = [schArr];
321   -
322   - //var tMaps = {};
323   - $.each(schArr, function () {
324   - try {
325   - if(this.status==-1)
326   - clearActualTime(this);
327   - //子任务公里是否与计划平
328   - this.c_t_mileage_status = calcCTaskMileageStatus(this);
329   - line2Schedule[this.xlBm][this.id] = this;
330   - updateDom(this);
331   - }catch(e){}
332   - });
333   -
334   - /* //重新标记末班
335   - var ts=[];
336   - for(var k in tMaps){
337   - ts = k.split('_');
338   - markerLastByNbbm(ts[0], ts[1]);
339   - }*/
340   - };
341   -
342   -
343   - /**
344   - * 更新班次 -只更新数据,不更新dom
345   - * @param schArr
346   - */
347   - var updateData = function (schArr) {
348   - if (!isArray(schArr))
349   - schArr = [schArr];
350   - $.each(schArr, function () {
351   - if(this.status==-1)
352   - clearActualTime(this);
353   - line2Schedule[this.xlBm][this.id] = this;
354   - });
355   - };
356   -
357   - //update dom
358   - var updateDom = function (sch) {
359   - if (!sch) return;
360   - var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']');
361   - var dds = $('dd', dl);
362   - $(dds[1]).find('a').text(sch.lpName);
363   - var light = !sch.qdzArrDatesj ? 'tl-white' : 'tl-grey';
364   - if (sch.rfidState & 1 == 1) {
365   - light = 'tl-yellow';
366   - if (sch.rfidState & 2 == 2) {
367   - light = 'tl-green';
368   - }
369   - }
370   - if (!(sch.bcType == 'in' || sch.bcType == 'out')) {
371   - $(dds[2]).style('background', light);
372   - }
373   - //车辆自编号
374   - var $newDds3 = $(temps['line-schedule-nbbm-temp'](sch));
375   - $(dds[3]).replaceWith($newDds3);
376   - //车辆双击
377   - gb_schedule_table_dbclick.carCellClick($newDds3);
378   - $(dds[4]).text(sch.qdzArrDatejh ? sch.qdzArrDatejh : '');
379   - $(dds[5]).text(sch.qdzArrDatesj ? sch.qdzArrDatesj : '');
380   -
381   - //计发时间
382   - var d5html = temps['line-schedule-fcsj-temp'](sch);
383   - if (sch.lpChange == 1) {
384   - d5html = d5html.replace('</dd>', '') + '<span class="uk-badge uk-badge-success out">换</span>' + '</dd>';
385   - }
386   - $(dds[6]).replaceWith(d5html);
387   - //待发时间
388   - var dfHtmlStr = sch.dfsj + (sch.late2?'<span class="late-badge">?+'+sch.lateMinute+'</span>':'');
389   - $(dds[7]).attr('data-sort-val', sch.dfsjT).attr('dbclick-val', sch.dfsj).html(dfHtmlStr);
390   -
391   - //实发时间
392   - calc_sch_real_shift(sch);
393   - var sfsjDd = $(temps['line-schedule-sfsj-temp'](sch));
394   - //双击
395   - gb_schedule_table_dbclick.sfsjCellClick(sfsjDd);
396   - $(dds[8]).replaceWith(sfsjDd);
397   - if (sch.remarks)
398   - $(dds[9]).html('<span title="' + sch.remarks + '" data-uk-tooltip="{pos:\'top-left\'}">' + sch.remarks + '</span>');
399   - else
400   - $(dds[9]).html('');
401   -
402   - //信号状态标记
403   - gb_signal_state.marker_sch(sch);
404   - //班次是车辆的最后一班
405   - if (dl.hasClass('dl-last-sch'))
406   - markerLastSch([sch]);
407   -
408   - renderCarRemark();
409   - };
410   -
411   - //单击实发单元格显示详细信息
412   - $(document).on('click', 'dd.fcsjActualCell', function () {
413   - var that = this;
414   - $(that).qtip({
415   - show: true,
416   - content: {
417   - text: function (e) {
418   - var lineCode = $(that).parents('li.line_schedule').data('id')
419   - , id = $(that).parents('dl').data('id')
420   - , sch = line2Schedule[lineCode][id];
421   - return temps['sfsj_sch-detail-temp'](sch);
422   - }
423   - }
424   - , style: {
425   - classes: 'qtip-dark qtip-rounded qtip-shadow'
426   - },
427   - hide: {
428   - fixed: true,
429   - delay: 300
430   - },
431   - position: {
432   - target: that,
433   - my: 'center left',
434   - at: 'center right'
435   - },
436   - events: {
437   - hidden: function (event, api) {
438   - $(this).qtip('destroy', true);
439   - }
440   - }
441   - });
442   -
443   - //车辆rect 闪烁、
444   - var wrap = $(that).parents('li.line_schedule');
445   - var nbbm = $(that).parents('dl').find('dd:eq(2)').data('nbbm');
446   - var device = gb_data_basic.nbbm2deviceMap()[nbbm];
447   - var $rect = $('svg.line-chart g.gps-wrap rect[_id=rct_' + device + ']', wrap);
448   -
449   - //merge_hide
450   - if ($rect.hasClass('merge_hide') || $rect.attr('y') < 0)
451   - return;
452   - $rect.attr('class', 'twinkle').one('animationend', function () {
453   - $(this).removeAttr('class');
454   - });
455   - });
456   -
457   - //拖拽选中...
458   - var seq_nos = '.line-schedule-table .ct_table_body>dl>dd.seq_no';
459   - var drag_strat;
460   - $(document).on('mousedown', seq_nos, function (e) {
461   - if (e.button != 0) return;
462   - var dl = $(this).parent();
463   - if (dl.hasClass('drag-active'))
464   - dl.removeClass('drag-active');
465   - else
466   - dl.addClass('drag-active');
467   -
468   - drag_strat = parseInt($(this).text()) - 1;
469   - }).on('mouseup', function () {
470   - drag_strat = null;
471   - }).on('mouseover', seq_nos, function () {
472   - if (drag_strat != null) {
473   - var e = parseInt($(this).text()),
474   - dls = $(this).parents('.ct_table_body').find('dl');
475   -
476   - reset_drag_active_all(this);
477   - //向上选中
478   - if (e <= drag_strat) {
479   - for (var i = drag_strat; i > e - 2; i--)
480   - $(dls[i]).addClass('drag-active');
481   - }
482   - //向下选中
483   - else {
484   - for (var j = drag_strat; j < e; j++)
485   - $(dls[j]).addClass('drag-active');
486   - }
487   - }
488   - }).on('click', seq_nos, function () {
489   - reset_relevance_active(this);
490   - });
491   - //非seq_no 单元格点击
492   - $(document).on('click', '.line-schedule-table .ct_table_body dl dd[class!=seq_no][class!=lpName]', function () {
493   - reset_drag_active_all(this);
494   - //选中相关班次
495   - var id = $(this).parent().data('id'),
496   - contWrap = $(this).parents('li.line_schedule'),
497   - lineCode = contWrap.data('id'),
498   - sch = line2Schedule[lineCode][id],
499   - schArr = gb_common.get_vals(line2Schedule[lineCode]).filter(function (item) {
500   - return item.clZbh == sch.clZbh;
501   - }).sort(schedule_sort),
502   - nextSch, tempDL;
503   -
504   - getDl(sch).addClass('intimity');
505   - $.each(schArr, function (i) {
506   - tempDL = $('dl[data-id=' + this.id + ']', contWrap);
507   - tempDL.addClass('relevance-active');
508   - if (i < schArr.length - 1 && this.id == id) {
509   - nextSch = schArr[i + 1];
510   - }
511   - });
512   -
513   - if (nextSch) {
514   - $('dl[data-id=' + nextSch.id + ']', contWrap).addClass('intimity');
515   - /*if (nextSch.xlDir == sch.xlDir)
516   - return;*/
517   - //滚动到下一个班次
518   - if(nextSch.xlDir != sch.xlDir)
519   - scroToDl(nextSch);
520   -
521   - }
522   -
523   - //如果有打开轨迹回放
524   - if($('.layui-layer.play_back-layer').is(':visible')){
525   - gb_map_play_back.setParam(sch);
526   - }
527   - });
528   -
529   - //路牌点击
530   - $(document).on('click', '.line-schedule-table .ct_table_body dl dd[class=lpName]', function () {
531   - reset_drag_active_all(this);
532   - //选中路牌下相关班次
533   - var id = $(this).parent().data('id'),
534   - contWrap = $(this).parents('li.line_schedule'),
535   - lineCode = contWrap.data('id'),
536   - sch = line2Schedule[lineCode][id],
537   - schArr = gb_common.get_vals(line2Schedule[lineCode]).filter(function (item) {
538   - return item.lpName == sch.lpName;
539   - }).sort(schedule_sort);
540   - $.each(schArr, function (i) {
541   - $('dl[data-id=' + this.id + ']', contWrap).addClass('relevance-active intimity');
542   - });
543   -
544   - //notify_succ('高亮路牌 ' + sch.lpName);
545   - showLpMileageTip(lineCode, sch.lpName, schArr);
546   - });
547   -
548   - var showLpMileageTipBySch = function (sch) {
549   - if(!$('.mileage_elec_panel', $('.line_schedule[data-id='+sch.xlBm+']')).is(':visible'))
550   - return;
551   -
552   - var schArr = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (item) {
553   - return item.lpName == sch.lpName;
554   - }).sort(schedule_sort);
555   -
556   - showLpMileageTip(sch.xlBm, sch.lpName, schArr);
557   - };
558   - /**
559   - * 弹出路牌公里统计tip
560   - * @param lineCode
561   - * @param lpName
562   - * @param array
563   - */
564   - var showLpMileageTip = function (lineCode, lpName, array) {
565   - var wrap = $('.line_schedule[data-id='+lineCode+']');
566   - //按驾驶员&车辆分组统计
567   - var data=mileageTipGroupData(array);
568   - //统计公里
569   - var list=[];
570   - for(var key in data){
571   - list.push({
572   - key : key,
573   - serviceMileage: gb_sch_mileage_count.serviceMileage(data[key]),
574   - destroyMileage: gb_sch_mileage_count.destroyMileage(data[key]),
575   - emptyMileage: gb_sch_mileage_count.emptyMileage(data[key])
576   - })
577   - }
578   - var htmlStr = temps['sch-lp-mileage-tip-temp']({data: list, lpName:lpName});
579   - $('.mileage_elec_panel', wrap).html(htmlStr).addClass('uk-animation-slide-bottom').show()
580   - .one('animationEnd', function () {
581   - $(this).removeClass('uk-animation-slide-bottom');
582   - });
583   - };
584   -
585   - /**
586   - * 分组数据,处理子任务里的中途换车
587   - * @param array
588   - */
589   - var mileageTipGroupData = function (arr) {
590   - var list = JSON.parse(JSON.stringify(arr));
591   - var cts;
592   - var zthcArray=[];
593   - var sch;
594   - for(var i=0,len=list.length;i<len;i++){
595   - sch = list[i];
596   - cts = sch['cTasks'];
597   - if(!cts || cts.length==0)
598   - continue;
599   -
600   - sch['cTasks'] = [];
601   - //有子任务
602   - for(var j=0,ct;ct=cts[j++];){
603   - if(!ct.nbbm || ct.nbbm==sch.clZbh){
604   - sch['cTasks'].push(ct);
605   - continue;
606   - }
607   -
608   - zthcArray.push(cloneByCTask(sch, ct));
609   - }
610   - }
611   -
612   - if(zthcArray.length > 0)
613   - list = list.concat(zthcArray);
614   -
615   - var data={},key;
616   - for(var i=0,len=list.length;i<len;i++){
617   - key = list[i].clZbh+'/'+list[i].jGh+'('+list[i].jName+')';
618   - if(!data[key])
619   - data[key] = [];
620   - data[key].push(list[i]);
621   - }
622   - return data;
623   - };
624   -
625   - var cloneByCTask = function (sch, ct) {
626   - var newObj = JSON.parse(JSON.stringify(sch));
627   - newObj['cTasks']=[];
628   - newObj.clZbh = ct.nbbm;
629   - newObj.fcsjActual = ct.startDate;
630   - newObj.zdsjActual = ct.endDate;
631   - newObj.jhlc = ct.mileage;
632   - newObj.jhlcOrig = ct.mileage;
633   -
634   - if(ct.type2=='1')
635   - newObj.bcType='normal';
636   - else if(ct.type2=='2'){
637   - newObj.bcType='in';
638   - }else if(ct.type2=='3')
639   - newObj.bcType='out';
640   -
641   - return newObj;
642   - };
643   -
644   - //头部点击去掉选中光标
645   - $(document).on('click', '.header-title', function () {
646   - reset_drag_active_all(this);
647   - });
648   -
649   - var scroToDl = function (sch) {
650   - var dl = getDl(sch),
651   - cont = dl.parents('.ct_table_wrap'),
652   - diff = cont.height() / 2;
653   - cont.animate({
654   - scrollTop: dl.offset().top - cont.offset().top + cont.scrollTop() - diff
655   - }, 500);
656   -
657   - return dl;
658   - };
659   -
660   - var getDl = function (sch) {
661   - return $('dl[data-id=' + sch.id + ']', $('.line_schedule[data-id=' + sch.xlBm + ']'));
662   - };
663   -
664   - var reset_drag_active_all = function (dd) {
665   - $(dd).parents('.schedule-wrap').find('dl.drag-active').removeClass('drag-active');
666   - reset_relevance_active(dd);
667   -
668   - $('.mileage_elec_panel', $(dd).parents('.top-container')).hide().remove('uk-animation-slide-bottom');
669   - };
670   -
671   - var reset_relevance_active = function (dd) {
672   - $(dd).parents('.uk-grid.schedule-wrap').find('.relevance-active').removeClass('relevance-active intimity');
673   - };
674   -
675   -
676   - //计算应发未发数量 car_yfwf_map
677   - var calc_yfwf_num = function (lineCode) {
678   -
679   - var schArr = gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort),
680   - yfwf_num = 0,
681   - t = new Date().valueOf();
682   -
683   - var carYfwfMap = {}, nbbm;
684   - $.each(schArr, function () {
685   - /*if (this.dfsjT > t)
686   - return false;*/
687   -
688   - if (this.dfsjT < t &&
689   - this.fcsjActual == null && this.fcsjActualTime == null && this.status != -1) {
690   - yfwf_num++;
691   - nbbm = this.clZbh;
692   - if (carYfwfMap[nbbm])
693   - carYfwfMap[nbbm]++;
694   - else
695   - carYfwfMap[nbbm] = 1;
696   - }
697   - });
698   - car_yfwf_map[lineCode] = carYfwfMap;
699   -
700   - $('#badge_yfwf_num_' + lineCode).text(yfwf_num);
701   - };
702   -
703   - //标记终点时间 -线路
704   - var markerLastByLine = function (lineCode) {
705   - var data = gb_common.groupBy(gb_common.get_vals(line2Schedule[lineCode]).filter(schDestroyFilter), 'lpName');
706   -
707   - var array, lastSch, dl;
708   - for (var nbbm in data) {
709   - array = data[nbbm].sort(schedule_sort);
710   - markerLastSch(array);
711   - }
712   - };
713   -
714   - //标记终点时间 -车辆
715   - var markerLastByNbbm = function (lineCode, nbbm) {
716   - var array = gb_common.get_vals(line2Schedule[lineCode]).filter(function (a) {
717   - return a.clZbh == nbbm && a.status != -1;
718   - }).sort(schedule_sort);
719   -
720   - removeMarkers(lineCode, array);
721   - markerLastSch(array);
722   - };
723   -
724   - var markerLastSch = function (array) {
725   - var lastSch = array[array.length - 1];
726   -
727   - if (!lastSch.jhlc)
728   - return;
729   -
730   - var dl = getDl(lastSch);
731   - dl.addClass('dl-last-sch');
732   -
733   - $('dd.fcsjActualCell', dl).append(temps['last-sch-sunken-temp'](lastSch));
734   - };
735   -
736   - //清除线路下指定班次的 末班标记
737   - var removeMarkers = function (lineCode, array) {
738   - var idx = [];
739   - $.each(array, function () {
740   - idx.push(this.id);
741   - });
742   -
743   - $('dl.dl-last-sch', 'li.line_schedule[data-id=' + lineCode + ']').each(function () {
744   - if ($(this).hasClass('dl-last-sch') && idx.indexOf($(this).data('id'))) {
745   - $(this).removeClass('dl-last-sch').find('.last-sch-sunken').remove();
746   - }
747   - });
748   - };
749   -
750   - var schDestroyFilter = function (a) {
751   - return a.status != -1;
752   - };
753   -
754   - /* 下一个班次 */
755   - var getNextSch = function (sch) {
756   - var array = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (a) {
757   - return a.clZbh == sch.clZbh;
758   - }).sort(schedule_sort);
759   -
760   - for (var i = 0, item; item = array[i++];) {
761   - if (array[i].id == sch.id) {
762   - return i < array.length ? array[i + 1] : null;
763   - }
764   - }
765   - };
766   -
767   - /* 下一个班次普通班次 */
768   - var getNextNormalSch = function (sch) {
769   -
770   - var array = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (a) {
771   - return a.clZbh == sch.clZbh && a.bcType=='normal';
772   - }).sort(schedule_sort);
773   -
774   - for (var i = 0; i < array.length; i++) {
775   - if (array[i].id == sch.id) {
776   - return i < array.length ? array[i + 1] : null;
777   - }
778   - }
779   - };
780   -
781   - /** 添加备注信息 */
782   - var addRemarks = function (list, remarks) {
783   - //if(!list || list)
784   - var i = 0, sch;
785   -
786   - (function () {
787   - var f = arguments.callee;
788   - if(i >= list.length){
789   - return;
790   - }
791   - sch = list[i];
792   - gb_common.$post('/realSchedule/addRemarks', {id: sch.id, remarks: remarks}, function (rs) {
793   - if(rs.t){
794   - sch = rs.t;
795   - line2Schedule[sch.xlBm][sch.id] = sch;
796   - updateDom(sch);
797   - i++;
798   - f();
799   - }
800   - });
801   - })();
802   - };
803   -
804   - /**
805   - * 显示误点停靠时间标记
806   - * @param id
807   - * @param minute
808   - */
809   - var showLateBadge = function (lineCode, id, minute) {
810   - var dfCell = cancelLateBadge(lineCode, id);
811   - $(dfCell).append('<span class="late-badge">?+'+minute+'</span>');
812   - };
813   -
814   - /**
815   - * 取消误点标记
816   - * @param lineCode
817   - * @param id
818   - */
819   - var cancelLateBadge = function (lineCode, id) {
820   - var $dl = getDl({id: id, xlBm: lineCode});
821   - var dfCell = $dl.find('dd')[6];
822   - $('.late-badge',dfCell).remove();
823   - return dfCell;
824   - };
825   -
826   -
827   - /**
828   - * 刷新页面的所有线路班次
829   - */
830   - var refreshAll = function () {
831   - show();
832   - };
833   -
834   - /**
835   - * 获取线路下营运的车辆
836   - */
837   - var findNbbmByLineCode = function (lineCode) {
838   - try{
839   - return gb_common.get_keys(gb_common.extractNbbm(gb_common.get_vals(line2Schedule[lineCode])));
840   - }catch (e){
841   - return [];
842   - }
843   - };
844   -
845   - var clearActualTime = function (sch) {
846   - try{
847   - sch.fcsjActual=null;
848   - sch.fcsjActualTime=null;
849   - sch.zdsjActual=null;
850   - sch.zdsjActualTime=null;
851   - }catch (e){
852   - console.log(e);
853   - }
854   - };
855   -
856   - /**
857   - * 班次站点编码异常信息
858   - * @param list
859   - */
860   - var putSCodeErrorInfo = function (list) {
861   - //按线路走向分组
862   - var data = {};
863   - var k;
864   - for(var i=0,obj;obj=list[i++];){
865   - k = obj.lineCode+'_'+obj.upDown;
866   -
867   - if(obj.realStationCode && obj.realStationCode.indexOf('^') != -1)
868   - obj.realStationCode = obj.realStationCode.split('^')[0];
869   -
870   - if(!data[k])
871   - data[k] = [];
872   - data[k].push(obj);
873   - }
874   -
875   - var wrap;
876   - for(var k in data){
877   - wrap = $('.line_schedule[data-id=' + (k.split('_')[0]) + ']');
878   - if(wrap.length==0)
879   - continue;
880   -
881   - $(".schedule-wrap span.warn_multi_station[data-updown="+(k.split('_')[1])+"]", wrap)
882   - .html('o(* ̄▽ ̄*)o 班次和站点关联有点问题!!').show();
883   - }
884   -
885   - errorCodeData = data;
886   - };
887   -
888   - var findSCodeErrorInfo = function (lineCode, upDown) {
889   - return errorCodeData[lineCode+'_'+upDown];
890   - };
891   -
892   - var refreshRfid = function (sch) {
893   - var $dl = getDl({id: sch.id, xlBm: sch.xlBm});
894   - var dfCell = $dl.find('dd')[2];
895   - var light = !sch.qdzArrDatesj ? 'tl-white' : 'tl-grey';
896   - if (sch.rfidState & 1 == 1) {
897   - light = 'tl-yellow';
898   - if (sch.rfidState & 2 == 2) {
899   - light = 'tl-green';
900   - }
901   - }
902   - if (!(sch.bcType == 'in' || sch.bcType == 'out')) {
903   - $(dfCell).attr('class', light);
904   - }
905   - };
906   -
907   - return {
908   - show: show,
909   - findScheduleByLine: findScheduleByLine,
910   - updateSchedule: updateSchedule,
911   - updateData: updateData,
912   - deheteSchedule: deheteSchedule,
913   - insertSchedule: insertSchedule,
914   - schedule_sort: schedule_sort,
915   - calc_yfwf_num: calc_yfwf_num,
916   - car_yfwf_map: function (lineCode) {
917   - return car_yfwf_map[lineCode];
918   - },
919   - scroToDl: scroToDl,
920   - reset_drag_active_all: reset_drag_active_all,
921   - getDl: getDl,
922   - getNextSch: getNextSch,
923   - addRemarks: addRemarks,
924   - reLoadAndRefresh: reLoadAndRefresh,
925   - showLateBadge: showLateBadge,
926   - cancelLateBadge: cancelLateBadge,
927   - refreshAll: refreshAll,
928   - getNextNormalSch: getNextNormalSch,
929   - findNbbmByLineCode:findNbbmByLineCode,
930   - showLpMileageTipBySch: showLpMileageTipBySch,
931   - renderCarRemark: renderCarRemark,
932   - putSCodeErrorInfo: putSCodeErrorInfo,
933   - findSCodeErrorInfo: findSCodeErrorInfo,
934   - refreshRfid: refreshRfid
935   - };
936   -})();
  1 +/** schedule table */
  2 +
  3 +var gb_schedule_table = (function () {
  4 +
  5 + var temps;
  6 + //线路分组的班次数据
  7 + var line2Schedule = {};
  8 + //车辆应发未发车辆数
  9 + var car_yfwf_map = {};
  10 + //班次站点编码和实际不符数据
  11 + var errorCodeData = {};
  12 +
  13 + var bcTypeOrderMap = {
  14 + 'out':0,
  15 + 'normal':1,
  16 + 'region':2,
  17 + 'major':3,
  18 + 'venting':4,
  19 + 'ldks':5,
  20 + 'in':6
  21 + };
  22 + var typeOrder = function (type) {
  23 + return bcTypeOrderMap[type]?bcTypeOrderMap[type]:0;
  24 + };
  25 + var schedule_sort = function (s1, s2) {
  26 + var diff = s1['fcsjT'] - s2['fcsjT'];
  27 + return diff!=0?diff:typeOrder(s1['bcType'])-typeOrder(s2['bcType']);
  28 + };
  29 +
  30 + var show = function (cb) {
  31 + //从服务器获取班次数据
  32 + $.get('/realSchedule/lines', {
  33 + lines: gb_data_basic.line_idx
  34 + }, function (rs) {
  35 + for (var lineCode in rs) {
  36 + line2Schedule[lineCode] = {};
  37 +
  38 + //排序
  39 + rs[lineCode].sort(schedule_sort);
  40 + //calc shift
  41 + $.each(rs[lineCode], function () {
  42 + if(this.status==-1)
  43 + clearActualTime(this);
  44 + calc_sch_real_shift(this);
  45 + wfydcolor(this);
  46 + line2Schedule[lineCode][this.id] = this;
  47 + //子任务公里是否与计划平
  48 + this.c_t_mileage_status = calcCTaskMileageStatus(this);
  49 + });
  50 + //计算应发未发
  51 + calc_yfwf_num(lineCode);
  52 + }
  53 + ep.emit('data', rs);
  54 + });
  55 +
  56 + //加载班次表格渲染模板
  57 + $.get('/real_control_v2/fragments/line_schedule/sch_table.html', function (dom) {
  58 + ep.emit('temp', gb_common.compileTempByDom(dom, {
  59 + compress: true
  60 + }));
  61 + });
  62 +
  63 + var ep = EventProxy.create("data", "temp", function (data, temp) {
  64 + temps = temp;
  65 + var lineCode, dirData, htmlStr;
  66 + $('#main-tab-content .line_schedule').each(function () {
  67 + lineCode = $(this).data('id');
  68 + if (arrayIsNull(data[lineCode]))
  69 + return true;
  70 + dirData = gb_common.groupBy(data[lineCode], 'xlDir');
  71 + for (var upDown in dirData) {
  72 + htmlStr = temps['line-schedule-table-temp']({
  73 + dir: upDown,
  74 + line: gb_data_basic.codeToLine[lineCode],
  75 + list: dirData[upDown]
  76 + });
  77 +
  78 + $('.schedule-wrap .card-panel:eq(' + upDown + ')', this)
  79 + .html(htmlStr);
  80 + }
  81 +
  82 + //标记路牌最后一个班次
  83 + markerLastByLine(lineCode);
  84 + //初始化图例相关,dbclick 不能代理事件
  85 + //gb_sch_legend.init(this);
  86 + });
  87 + //初始化图例
  88 + gb_sch_legend.init();
  89 + var content = $('.line_schedule .ct_table_wrap');
  90 + //初始化滚动条
  91 + content.perfectScrollbar({suppressScrollX: true});
  92 + //fixed table head
  93 + gb_ct_table.fixedHead(content);
  94 + //enable sort
  95 + gb_ct_table.enableSort($('.ct_table', content), reset_seq_no, gb_schedule_table_dbclick.init);
  96 + //dbclick event
  97 + gb_schedule_table_dbclick.init();
  98 + //双击实发
  99 + gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell'));
  100 + //双击车辆
  101 + gb_schedule_table_dbclick.carCellClick($('.ct_table_body dd[data-nbbm]'));
  102 + //搜索框初始化
  103 + gb_sch_search.init();
  104 +
  105 + //监听gps车辆信息
  106 + gb_data_gps.registerCallback(renderCarRemark);
  107 + gb_sch_legend.showYdSdDb();
  108 + cb && cb();
  109 + });
  110 +
  111 + };
  112 +
  113 + var renderCarRemark = function () {
  114 + try{
  115 + var $activeTab = $('.north-tabs>ul>li.tab-line.uk-active');//.data('code');
  116 + if($activeTab.length==0)
  117 + return;
  118 + var lineCode = $activeTab.data('code');
  119 + var array = gb_common.get_vals(line2Schedule[lineCode]);
  120 + var nbbms = {};
  121 + for(var i=0,sch;sch=array[i++];){
  122 + nbbms[sch.clZbh]=1;
  123 + }
  124 +
  125 + var $activeWrap = $('#main-tab-content .line_schedule.uk-active .schedule-wrap .schedule-body');
  126 + var gps, e;
  127 + for(var nbbm in nbbms){
  128 + gps = gb_data_gps.findGpsByNbbm(nbbm);
  129 + e = $('.ct_table_body dl>dd[data-nbbm='+nbbm+']', $activeWrap);
  130 + $('i', e).remove();
  131 +
  132 + if(gps && gps['planCode']!=lineCode && gps.remark)
  133 + $(e).append('<i class="uk-icon-exclamation-circle" data-uk-tooltip title="'+gps.remark+'"></i>');
  134 + }
  135 + }catch (e){
  136 + console.log(e);
  137 + }
  138 + };
  139 +
  140 + /**
  141 + * 计算子任务公里是否和计划平
  142 + * @param sch
  143 + */
  144 + var calcCTaskMileageStatus = function (sch) {
  145 + if(!sch.cTasks || sch.cTasks.length==0)
  146 + return 0;
  147 + var sum = 0;
  148 + $.each(sch.cTasks, function () {
  149 + if (this.mileageType == 'service') {
  150 + sum = gb_common.accAdd(sum, this.mileage);
  151 + }
  152 + });
  153 +
  154 + if (sum != sch.jhlcOrig) {
  155 + return -1;
  156 + }
  157 + return 0;
  158 + };
  159 +
  160 +
  161 + //重置序号
  162 + var reset_seq_no = function (dls) {
  163 + dls.each(function (i, dl) {
  164 + $('dd:eq(0)', dl).text(i + 1);
  165 + });
  166 + };
  167 +
  168 + //计算实发时间差值
  169 + var calc_sch_real_shift = function (sch) {
  170 + if (sch['fcsjActualTime']){
  171 + var fs = 'YYYY-MM-DD HH:mm'
  172 + ,m1 = moment(sch['fcsjActualTime']).format(fs)
  173 + ,m2 = moment(sch['dfsjT']).format(fs);//去掉秒
  174 + console.log(moment(m1, fs).format('X'))
  175 + console.log(moment(m2, fs).format('X'))
  176 + var diff = moment(m1, fs).format('X') - moment(m2, fs).format('X')
  177 + ,fcsj_diff = parseInt(diff / 60, 10);;
  178 +
  179 + if(fcsj_diff > 0)
  180 + sch.fcsj_diff = '( +' + fcsj_diff + ' )';
  181 + else if (fcsj_diff < 0)
  182 + sch.fcsj_diff = '( ' + fcsj_diff + ' )';
  183 + else
  184 + sch.fcsj_diff = '';
  185 + }
  186 + };
  187 + //无发有到时间
  188 + var wfydcolor=function (sch) {
  189 + if (sch.fcsjActual==null&&sch.zdsjActual!=null&&sch.zdsjActual!=''&&sch.status!=-1) {//sch.qdzArrDatesj!=''&&sch.qdzArrDatesj!=null&&
  190 + sch.status=4;
  191 + }
  192 + }
  193 +
  194 +
  195 +
  196 + function arrayIsNull(array) {
  197 + return !array || array.length == 0;
  198 + }
  199 +
  200 + var findScheduleByLine = function (lineCode) {
  201 + return line2Schedule[lineCode];
  202 + };
  203 +
  204 + //新增一个班次,附带更新的班次
  205 + var insertSchedule = function (sch, upArr) {
  206 + var xls = {};
  207 + xls[sch.xlBm] = 1;
  208 + line2Schedule[sch.xlBm][sch.id] = sch;
  209 + //update
  210 + if (isArray(upArr)) {
  211 + $.each(upArr, function () {
  212 + line2Schedule[this.xlBm][this.id] = this;
  213 + xls[this.xlBm] = 1;
  214 + });
  215 + }
  216 +
  217 + //重新渲染表格
  218 + for(var xlBm in xls){
  219 + reRenderTable(sch.xlBm);
  220 + }
  221 + //定位到新添加的班次
  222 + scroToDl(sch);
  223 + };
  224 +
  225 + /**
  226 + * 重新渲染表格
  227 + */
  228 + var reRenderTable = function (lineCode) {
  229 + var data = gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort),
  230 + dirData = gb_common.groupBy(data, 'xlDir'),
  231 + tabCont = $('li.line_schedule[data-id=' + lineCode + ']'),
  232 + htmlStr;
  233 +
  234 + if($.isEmptyObject(dirData)){
  235 + $('.schedule-wrap .card-panel', tabCont).html('');
  236 + }
  237 + else {
  238 + for (var upDown in dirData) {
  239 + htmlStr = temps['line-schedule-table-temp']({
  240 + dir: upDown,
  241 + line: gb_data_basic.codeToLine[lineCode],
  242 + list: dirData[upDown]
  243 + });
  244 + $('.schedule-wrap .card-panel:eq(' + upDown + ')', tabCont).html(htmlStr);
  245 + }
  246 + //图例相关
  247 + gb_sch_legend.init(tabCont);
  248 + //标记末班
  249 + markerLastByLine(lineCode);
  250 + //计算应发未发
  251 + calc_yfwf_num(lineCode);
  252 + //重新固定表头
  253 + gb_ct_table.fixedHead($('.schedule-wrap .ct_table_wrap', tabCont));
  254 +
  255 + //重新初始化排序
  256 + gb_ct_table.enableSort($('.ct_table', tabCont), reset_seq_no, gb_schedule_table_dbclick.init);
  257 + //重新初始化双击待发调整
  258 + gb_schedule_table_dbclick.init();
  259 + //重新初始化双击实发发车信息微调
  260 + gb_schedule_table_dbclick.sfsjCellClick($('dd.fcsjActualCell', tabCont));
  261 + //重新初始化双击车辆
  262 + gb_schedule_table_dbclick.carCellClick($('.ct_table_body dd[data-nbbm]'));
  263 + //滚动条
  264 + $('.schedule-wrap .ct_table_wrap', tabCont).perfectScrollbar({suppressScrollX: true});
  265 +
  266 + //搜索模板初始化
  267 + gb_sch_search.init();
  268 + }
  269 + };
  270 +
  271 +
  272 + /**
  273 + * 重新从服务器加载数据,并刷新表格
  274 + * @param lineCode
  275 + */
  276 + var reLoadAndRefresh = function (lineCode) {
  277 + $.get('/realSchedule/lines', {
  278 + lines: lineCode + ','
  279 + }, function (rs) {
  280 + if(!rs || $.isEmptyObject(rs)){
  281 + line2Schedule[lineCode] = {};
  282 + }
  283 + else{
  284 + //排序
  285 + rs[lineCode].sort(schedule_sort);
  286 + line2Schedule[lineCode] = {};
  287 + //calc shift
  288 + $.each(rs[lineCode], function () {
  289 + calc_sch_real_shift(this);
  290 + line2Schedule[lineCode][this.id] = this;
  291 + });
  292 + }
  293 + //计算应发未发
  294 + calc_yfwf_num(lineCode);
  295 + //重新渲染
  296 + reRenderTable(lineCode);
  297 + });
  298 + };
  299 +
  300 + //删除一个班次
  301 + var deheteSchedule = function (sch) {
  302 + sch = line2Schedule[sch.xlBm][sch.id];
  303 + if (sch) {
  304 + var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']'),
  305 + dls = dl.parent().find('dl');
  306 + delete line2Schedule[sch.xlBm][sch.id];
  307 + dl.remove();
  308 + reset_seq_no(dls);
  309 + calc_yfwf_num(sch.xlBm);
  310 + }
  311 + };
  312 +
  313 + /**
  314 + * 更新班次
  315 + * @param schArr
  316 + */
  317 + var updateSchedule = function (schArr) {
  318 +
  319 + if (!isArray(schArr))
  320 + schArr = [schArr];
  321 +
  322 + //var tMaps = {};
  323 + $.each(schArr, function () {
  324 + try {
  325 + if(this.status==-1)
  326 + clearActualTime(this);
  327 + //子任务公里是否与计划平
  328 + this.c_t_mileage_status = calcCTaskMileageStatus(this);
  329 + line2Schedule[this.xlBm][this.id] = this;
  330 + updateDom(this);
  331 + }catch(e){}
  332 + });
  333 +
  334 + /* //重新标记末班
  335 + var ts=[];
  336 + for(var k in tMaps){
  337 + ts = k.split('_');
  338 + markerLastByNbbm(ts[0], ts[1]);
  339 + }*/
  340 + };
  341 +
  342 +
  343 + /**
  344 + * 更新班次 -只更新数据,不更新dom
  345 + * @param schArr
  346 + */
  347 + var updateData = function (schArr) {
  348 + if (!isArray(schArr))
  349 + schArr = [schArr];
  350 + $.each(schArr, function () {
  351 + if(this.status==-1)
  352 + clearActualTime(this);
  353 + line2Schedule[this.xlBm][this.id] = this;
  354 + });
  355 + };
  356 +
  357 + //update dom
  358 + var updateDom = function (sch) {
  359 + if (!sch) return;
  360 + var dl = $('li.line_schedule[data-id=' + sch.xlBm + '] .ct_table_body dl[data-id=' + sch.id + ']');
  361 + var dds = $('dd', dl);
  362 + $(dds[1]).find('a').text(sch.lpName);
  363 + var light = !sch.qdzArrDatesj ? 'tl-white' : 'tl-grey';
  364 + if (sch.rfidState & 1 == 1) {
  365 + light = 'tl-yellow';
  366 + if (sch.rfidState & 2 == 2) {
  367 + light = 'tl-green';
  368 + }
  369 + }
  370 + $(dds[2]).style('background', light);
  371 + //车辆自编号
  372 + var $newDds3 = $(temps['line-schedule-nbbm-temp'](sch));
  373 + $(dds[3]).replaceWith($newDds3);
  374 + //车辆双击
  375 + gb_schedule_table_dbclick.carCellClick($newDds3);
  376 + $(dds[4]).text(sch.qdzArrDatejh ? sch.qdzArrDatejh : '');
  377 + $(dds[5]).text(sch.qdzArrDatesj ? sch.qdzArrDatesj : '');
  378 +
  379 + //计发时间
  380 + var d5html = temps['line-schedule-fcsj-temp'](sch);
  381 + if (sch.lpChange == 1) {
  382 + d5html = d5html.replace('</dd>', '') + '<span class="uk-badge uk-badge-success out">换</span>' + '</dd>';
  383 + }
  384 + $(dds[6]).replaceWith(d5html);
  385 + //待发时间
  386 + var dfHtmlStr = sch.dfsj + (sch.late2?'<span class="late-badge">?+'+sch.lateMinute+'</span>':'');
  387 + $(dds[7]).attr('data-sort-val', sch.dfsjT).attr('dbclick-val', sch.dfsj).html(dfHtmlStr);
  388 +
  389 + //实发时间
  390 + calc_sch_real_shift(sch);
  391 + var sfsjDd = $(temps['line-schedule-sfsj-temp'](sch));
  392 + //双击
  393 + gb_schedule_table_dbclick.sfsjCellClick(sfsjDd);
  394 + $(dds[8]).replaceWith(sfsjDd);
  395 + if (sch.remarks)
  396 + $(dds[9]).html('<span title="' + sch.remarks + '" data-uk-tooltip="{pos:\'top-left\'}">' + sch.remarks + '</span>');
  397 + else
  398 + $(dds[9]).html('');
  399 +
  400 + //信号状态标记
  401 + gb_signal_state.marker_sch(sch);
  402 + //班次是车辆的最后一班
  403 + if (dl.hasClass('dl-last-sch'))
  404 + markerLastSch([sch]);
  405 +
  406 + renderCarRemark();
  407 + };
  408 +
  409 + //单击实发单元格显示详细信息
  410 + $(document).on('click', 'dd.fcsjActualCell', function () {
  411 + var that = this;
  412 + $(that).qtip({
  413 + show: true,
  414 + content: {
  415 + text: function (e) {
  416 + var lineCode = $(that).parents('li.line_schedule').data('id')
  417 + , id = $(that).parents('dl').data('id')
  418 + , sch = line2Schedule[lineCode][id];
  419 + return temps['sfsj_sch-detail-temp'](sch);
  420 + }
  421 + }
  422 + , style: {
  423 + classes: 'qtip-dark qtip-rounded qtip-shadow'
  424 + },
  425 + hide: {
  426 + fixed: true,
  427 + delay: 300
  428 + },
  429 + position: {
  430 + target: that,
  431 + my: 'center left',
  432 + at: 'center right'
  433 + },
  434 + events: {
  435 + hidden: function (event, api) {
  436 + $(this).qtip('destroy', true);
  437 + }
  438 + }
  439 + });
  440 +
  441 + //车辆rect 闪烁、
  442 + var wrap = $(that).parents('li.line_schedule');
  443 + var nbbm = $(that).parents('dl').find('dd:eq(2)').data('nbbm');
  444 + var device = gb_data_basic.nbbm2deviceMap()[nbbm];
  445 + var $rect = $('svg.line-chart g.gps-wrap rect[_id=rct_' + device + ']', wrap);
  446 +
  447 + //merge_hide
  448 + if ($rect.hasClass('merge_hide') || $rect.attr('y') < 0)
  449 + return;
  450 + $rect.attr('class', 'twinkle').one('animationend', function () {
  451 + $(this).removeAttr('class');
  452 + });
  453 + });
  454 +
  455 + //拖拽选中...
  456 + var seq_nos = '.line-schedule-table .ct_table_body>dl>dd.seq_no';
  457 + var drag_strat;
  458 + $(document).on('mousedown', seq_nos, function (e) {
  459 + if (e.button != 0) return;
  460 + var dl = $(this).parent();
  461 + if (dl.hasClass('drag-active'))
  462 + dl.removeClass('drag-active');
  463 + else
  464 + dl.addClass('drag-active');
  465 +
  466 + drag_strat = parseInt($(this).text()) - 1;
  467 + }).on('mouseup', function () {
  468 + drag_strat = null;
  469 + }).on('mouseover', seq_nos, function () {
  470 + if (drag_strat != null) {
  471 + var e = parseInt($(this).text()),
  472 + dls = $(this).parents('.ct_table_body').find('dl');
  473 +
  474 + reset_drag_active_all(this);
  475 + //向上选中
  476 + if (e <= drag_strat) {
  477 + for (var i = drag_strat; i > e - 2; i--)
  478 + $(dls[i]).addClass('drag-active');
  479 + }
  480 + //向下选中
  481 + else {
  482 + for (var j = drag_strat; j < e; j++)
  483 + $(dls[j]).addClass('drag-active');
  484 + }
  485 + }
  486 + }).on('click', seq_nos, function () {
  487 + reset_relevance_active(this);
  488 + });
  489 + //非seq_no 单元格点击
  490 + $(document).on('click', '.line-schedule-table .ct_table_body dl dd[class!=seq_no][class!=lpName]', function () {
  491 + reset_drag_active_all(this);
  492 + //选中相关班次
  493 + var id = $(this).parent().data('id'),
  494 + contWrap = $(this).parents('li.line_schedule'),
  495 + lineCode = contWrap.data('id'),
  496 + sch = line2Schedule[lineCode][id],
  497 + schArr = gb_common.get_vals(line2Schedule[lineCode]).filter(function (item) {
  498 + return item.clZbh == sch.clZbh;
  499 + }).sort(schedule_sort),
  500 + nextSch, tempDL;
  501 +
  502 + getDl(sch).addClass('intimity');
  503 + $.each(schArr, function (i) {
  504 + tempDL = $('dl[data-id=' + this.id + ']', contWrap);
  505 + tempDL.addClass('relevance-active');
  506 + if (i < schArr.length - 1 && this.id == id) {
  507 + nextSch = schArr[i + 1];
  508 + }
  509 + });
  510 +
  511 + if (nextSch) {
  512 + $('dl[data-id=' + nextSch.id + ']', contWrap).addClass('intimity');
  513 + /*if (nextSch.xlDir == sch.xlDir)
  514 + return;*/
  515 + //滚动到下一个班次
  516 + if(nextSch.xlDir != sch.xlDir)
  517 + scroToDl(nextSch);
  518 +
  519 + }
  520 +
  521 + //如果有打开轨迹回放
  522 + if($('.layui-layer.play_back-layer').is(':visible')){
  523 + gb_map_play_back.setParam(sch);
  524 + }
  525 + });
  526 +
  527 + //路牌点击
  528 + $(document).on('click', '.line-schedule-table .ct_table_body dl dd[class=lpName]', function () {
  529 + reset_drag_active_all(this);
  530 + //选中路牌下相关班次
  531 + var id = $(this).parent().data('id'),
  532 + contWrap = $(this).parents('li.line_schedule'),
  533 + lineCode = contWrap.data('id'),
  534 + sch = line2Schedule[lineCode][id],
  535 + schArr = gb_common.get_vals(line2Schedule[lineCode]).filter(function (item) {
  536 + return item.lpName == sch.lpName;
  537 + }).sort(schedule_sort);
  538 + $.each(schArr, function (i) {
  539 + $('dl[data-id=' + this.id + ']', contWrap).addClass('relevance-active intimity');
  540 + });
  541 +
  542 + //notify_succ('高亮路牌 ' + sch.lpName);
  543 + showLpMileageTip(lineCode, sch.lpName, schArr);
  544 + });
  545 +
  546 + var showLpMileageTipBySch = function (sch) {
  547 + if(!$('.mileage_elec_panel', $('.line_schedule[data-id='+sch.xlBm+']')).is(':visible'))
  548 + return;
  549 +
  550 + var schArr = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (item) {
  551 + return item.lpName == sch.lpName;
  552 + }).sort(schedule_sort);
  553 +
  554 + showLpMileageTip(sch.xlBm, sch.lpName, schArr);
  555 + };
  556 + /**
  557 + * 弹出路牌公里统计tip
  558 + * @param lineCode
  559 + * @param lpName
  560 + * @param array
  561 + */
  562 + var showLpMileageTip = function (lineCode, lpName, array) {
  563 + var wrap = $('.line_schedule[data-id='+lineCode+']');
  564 + //按驾驶员&车辆分组统计
  565 + var data=mileageTipGroupData(array);
  566 + //统计公里
  567 + var list=[];
  568 + for(var key in data){
  569 + list.push({
  570 + key : key,
  571 + serviceMileage: gb_sch_mileage_count.serviceMileage(data[key]),
  572 + destroyMileage: gb_sch_mileage_count.destroyMileage(data[key]),
  573 + emptyMileage: gb_sch_mileage_count.emptyMileage(data[key])
  574 + })
  575 + }
  576 + var htmlStr = temps['sch-lp-mileage-tip-temp']({data: list, lpName:lpName});
  577 + $('.mileage_elec_panel', wrap).html(htmlStr).addClass('uk-animation-slide-bottom').show()
  578 + .one('animationEnd', function () {
  579 + $(this).removeClass('uk-animation-slide-bottom');
  580 + });
  581 + };
  582 +
  583 + /**
  584 + * 分组数据,处理子任务里的中途换车
  585 + * @param array
  586 + */
  587 + var mileageTipGroupData = function (arr) {
  588 + var list = JSON.parse(JSON.stringify(arr));
  589 + var cts;
  590 + var zthcArray=[];
  591 + var sch;
  592 + for(var i=0,len=list.length;i<len;i++){
  593 + sch = list[i];
  594 + cts = sch['cTasks'];
  595 + if(!cts || cts.length==0)
  596 + continue;
  597 +
  598 + sch['cTasks'] = [];
  599 + //有子任务
  600 + for(var j=0,ct;ct=cts[j++];){
  601 + if(!ct.nbbm || ct.nbbm==sch.clZbh){
  602 + sch['cTasks'].push(ct);
  603 + continue;
  604 + }
  605 +
  606 + zthcArray.push(cloneByCTask(sch, ct));
  607 + }
  608 + }
  609 +
  610 + if(zthcArray.length > 0)
  611 + list = list.concat(zthcArray);
  612 +
  613 + var data={},key;
  614 + for(var i=0,len=list.length;i<len;i++){
  615 + key = list[i].clZbh+'/'+list[i].jGh+'('+list[i].jName+')';
  616 + if(!data[key])
  617 + data[key] = [];
  618 + data[key].push(list[i]);
  619 + }
  620 + return data;
  621 + };
  622 +
  623 + var cloneByCTask = function (sch, ct) {
  624 + var newObj = JSON.parse(JSON.stringify(sch));
  625 + newObj['cTasks']=[];
  626 + newObj.clZbh = ct.nbbm;
  627 + newObj.fcsjActual = ct.startDate;
  628 + newObj.zdsjActual = ct.endDate;
  629 + newObj.jhlc = ct.mileage;
  630 + newObj.jhlcOrig = ct.mileage;
  631 +
  632 + if(ct.type2=='1')
  633 + newObj.bcType='normal';
  634 + else if(ct.type2=='2'){
  635 + newObj.bcType='in';
  636 + }else if(ct.type2=='3')
  637 + newObj.bcType='out';
  638 +
  639 + return newObj;
  640 + };
  641 +
  642 + //头部点击去掉选中光标
  643 + $(document).on('click', '.header-title', function () {
  644 + reset_drag_active_all(this);
  645 + });
  646 +
  647 + var scroToDl = function (sch) {
  648 + var dl = getDl(sch),
  649 + cont = dl.parents('.ct_table_wrap'),
  650 + diff = cont.height() / 2;
  651 + cont.animate({
  652 + scrollTop: dl.offset().top - cont.offset().top + cont.scrollTop() - diff
  653 + }, 500);
  654 +
  655 + return dl;
  656 + };
  657 +
  658 + var getDl = function (sch) {
  659 + return $('dl[data-id=' + sch.id + ']', $('.line_schedule[data-id=' + sch.xlBm + ']'));
  660 + };
  661 +
  662 + var reset_drag_active_all = function (dd) {
  663 + $(dd).parents('.schedule-wrap').find('dl.drag-active').removeClass('drag-active');
  664 + reset_relevance_active(dd);
  665 +
  666 + $('.mileage_elec_panel', $(dd).parents('.top-container')).hide().remove('uk-animation-slide-bottom');
  667 + };
  668 +
  669 + var reset_relevance_active = function (dd) {
  670 + $(dd).parents('.uk-grid.schedule-wrap').find('.relevance-active').removeClass('relevance-active intimity');
  671 + };
  672 +
  673 +
  674 + //计算应发未发数量 car_yfwf_map
  675 + var calc_yfwf_num = function (lineCode) {
  676 +
  677 + var schArr = gb_common.get_vals(line2Schedule[lineCode]).sort(schedule_sort),
  678 + yfwf_num = 0,
  679 + t = new Date().valueOf();
  680 +
  681 + var carYfwfMap = {}, nbbm;
  682 + $.each(schArr, function () {
  683 + /*if (this.dfsjT > t)
  684 + return false;*/
  685 +
  686 + if (this.dfsjT < t &&
  687 + this.fcsjActual == null && this.fcsjActualTime == null && this.status != -1) {
  688 + yfwf_num++;
  689 + nbbm = this.clZbh;
  690 + if (carYfwfMap[nbbm])
  691 + carYfwfMap[nbbm]++;
  692 + else
  693 + carYfwfMap[nbbm] = 1;
  694 + }
  695 + });
  696 + car_yfwf_map[lineCode] = carYfwfMap;
  697 +
  698 + $('#badge_yfwf_num_' + lineCode).text(yfwf_num);
  699 + };
  700 +
  701 + //标记终点时间 -线路
  702 + var markerLastByLine = function (lineCode) {
  703 + var data = gb_common.groupBy(gb_common.get_vals(line2Schedule[lineCode]).filter(schDestroyFilter), 'lpName');
  704 +
  705 + var array, lastSch, dl;
  706 + for (var nbbm in data) {
  707 + array = data[nbbm].sort(schedule_sort);
  708 + markerLastSch(array);
  709 + }
  710 + };
  711 +
  712 + //标记终点时间 -车辆
  713 + var markerLastByNbbm = function (lineCode, nbbm) {
  714 + var array = gb_common.get_vals(line2Schedule[lineCode]).filter(function (a) {
  715 + return a.clZbh == nbbm && a.status != -1;
  716 + }).sort(schedule_sort);
  717 +
  718 + removeMarkers(lineCode, array);
  719 + markerLastSch(array);
  720 + };
  721 +
  722 + var markerLastSch = function (array) {
  723 + var lastSch = array[array.length - 1];
  724 +
  725 + if (!lastSch.jhlc)
  726 + return;
  727 +
  728 + var dl = getDl(lastSch);
  729 + dl.addClass('dl-last-sch');
  730 +
  731 + $('dd.fcsjActualCell', dl).append(temps['last-sch-sunken-temp'](lastSch));
  732 + };
  733 +
  734 + //清除线路下指定班次的 末班标记
  735 + var removeMarkers = function (lineCode, array) {
  736 + var idx = [];
  737 + $.each(array, function () {
  738 + idx.push(this.id);
  739 + });
  740 +
  741 + $('dl.dl-last-sch', 'li.line_schedule[data-id=' + lineCode + ']').each(function () {
  742 + if ($(this).hasClass('dl-last-sch') && idx.indexOf($(this).data('id'))) {
  743 + $(this).removeClass('dl-last-sch').find('.last-sch-sunken').remove();
  744 + }
  745 + });
  746 + };
  747 +
  748 + var schDestroyFilter = function (a) {
  749 + return a.status != -1;
  750 + };
  751 +
  752 + /* 下一个班次 */
  753 + var getNextSch = function (sch) {
  754 + var array = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (a) {
  755 + return a.clZbh == sch.clZbh;
  756 + }).sort(schedule_sort);
  757 +
  758 + for (var i = 0, item; item = array[i++];) {
  759 + if (array[i].id == sch.id) {
  760 + return i < array.length ? array[i + 1] : null;
  761 + }
  762 + }
  763 + };
  764 +
  765 + /* 下一个班次普通班次 */
  766 + var getNextNormalSch = function (sch) {
  767 +
  768 + var array = gb_common.get_vals(line2Schedule[sch.xlBm]).filter(function (a) {
  769 + return a.clZbh == sch.clZbh && a.bcType=='normal';
  770 + }).sort(schedule_sort);
  771 +
  772 + for (var i = 0; i < array.length; i++) {
  773 + if (array[i].id == sch.id) {
  774 + return i < array.length ? array[i + 1] : null;
  775 + }
  776 + }
  777 + };
  778 +
  779 + /** 添加备注信息 */
  780 + var addRemarks = function (list, remarks) {
  781 + //if(!list || list)
  782 + var i = 0, sch;
  783 +
  784 + (function () {
  785 + var f = arguments.callee;
  786 + if(i >= list.length){
  787 + return;
  788 + }
  789 + sch = list[i];
  790 + gb_common.$post('/realSchedule/addRemarks', {id: sch.id, remarks: remarks}, function (rs) {
  791 + if(rs.t){
  792 + sch = rs.t;
  793 + line2Schedule[sch.xlBm][sch.id] = sch;
  794 + updateDom(sch);
  795 + i++;
  796 + f();
  797 + }
  798 + });
  799 + })();
  800 + };
  801 +
  802 + /**
  803 + * 显示误点停靠时间标记
  804 + * @param id
  805 + * @param minute
  806 + */
  807 + var showLateBadge = function (lineCode, id, minute) {
  808 + var dfCell = cancelLateBadge(lineCode, id);
  809 + $(dfCell).append('<span class="late-badge">?+'+minute+'</span>');
  810 + };
  811 +
  812 + /**
  813 + * 取消误点标记
  814 + * @param lineCode
  815 + * @param id
  816 + */
  817 + var cancelLateBadge = function (lineCode, id) {
  818 + var $dl = getDl({id: id, xlBm: lineCode});
  819 + var dfCell = $dl.find('dd')[6];
  820 + $('.late-badge',dfCell).remove();
  821 + return dfCell;
  822 + };
  823 +
  824 +
  825 + /**
  826 + * 刷新页面的所有线路班次
  827 + */
  828 + var refreshAll = function () {
  829 + show();
  830 + };
  831 +
  832 + /**
  833 + * 获取线路下营运的车辆
  834 + */
  835 + var findNbbmByLineCode = function (lineCode) {
  836 + try{
  837 + return gb_common.get_keys(gb_common.extractNbbm(gb_common.get_vals(line2Schedule[lineCode])));
  838 + }catch (e){
  839 + return [];
  840 + }
  841 + };
  842 +
  843 + var clearActualTime = function (sch) {
  844 + try{
  845 + sch.fcsjActual=null;
  846 + sch.fcsjActualTime=null;
  847 + sch.zdsjActual=null;
  848 + sch.zdsjActualTime=null;
  849 + }catch (e){
  850 + console.log(e);
  851 + }
  852 + };
  853 +
  854 + /**
  855 + * 班次站点编码异常信息
  856 + * @param list
  857 + */
  858 + var putSCodeErrorInfo = function (list) {
  859 + //按线路走向分组
  860 + var data = {};
  861 + var k;
  862 + for(var i=0,obj;obj=list[i++];){
  863 + k = obj.lineCode+'_'+obj.upDown;
  864 +
  865 + if(obj.realStationCode && obj.realStationCode.indexOf('^') != -1)
  866 + obj.realStationCode = obj.realStationCode.split('^')[0];
  867 +
  868 + if(!data[k])
  869 + data[k] = [];
  870 + data[k].push(obj);
  871 + }
  872 +
  873 + var wrap;
  874 + for(var k in data){
  875 + wrap = $('.line_schedule[data-id=' + (k.split('_')[0]) + ']');
  876 + if(wrap.length==0)
  877 + continue;
  878 +
  879 + $(".schedule-wrap span.warn_multi_station[data-updown="+(k.split('_')[1])+"]", wrap)
  880 + .html('o(* ̄▽ ̄*)o 班次和站点关联有点问题!!').show();
  881 + }
  882 +
  883 + errorCodeData = data;
  884 + };
  885 +
  886 + var findSCodeErrorInfo = function (lineCode, upDown) {
  887 + return errorCodeData[lineCode+'_'+upDown];
  888 + };
  889 +
  890 + var refreshRfid = function (sch) {
  891 + var $dl = getDl({id: sch.id, xlBm: sch.xlBm});
  892 + var dfCell = $dl.find('dd')[2];
  893 + var light = !sch.qdzArrDatesj ? 'tl-white' : 'tl-grey';
  894 + if (sch.rfidState & 1 == 1) {
  895 + light = 'tl-yellow';
  896 + if (sch.rfidState & 2 == 2) {
  897 + light = 'tl-green';
  898 + }
  899 + }
  900 + $(dfCell).attr('class', light);
  901 + };
  902 +
  903 + return {
  904 + show: show,
  905 + findScheduleByLine: findScheduleByLine,
  906 + updateSchedule: updateSchedule,
  907 + updateData: updateData,
  908 + deheteSchedule: deheteSchedule,
  909 + insertSchedule: insertSchedule,
  910 + schedule_sort: schedule_sort,
  911 + calc_yfwf_num: calc_yfwf_num,
  912 + car_yfwf_map: function (lineCode) {
  913 + return car_yfwf_map[lineCode];
  914 + },
  915 + scroToDl: scroToDl,
  916 + reset_drag_active_all: reset_drag_active_all,
  917 + getDl: getDl,
  918 + getNextSch: getNextSch,
  919 + addRemarks: addRemarks,
  920 + reLoadAndRefresh: reLoadAndRefresh,
  921 + showLateBadge: showLateBadge,
  922 + cancelLateBadge: cancelLateBadge,
  923 + refreshAll: refreshAll,
  924 + getNextNormalSch: getNextNormalSch,
  925 + findNbbmByLineCode:findNbbmByLineCode,
  926 + showLpMileageTipBySch: showLpMileageTipBySch,
  927 + renderCarRemark: renderCarRemark,
  928 + putSCodeErrorInfo: putSCodeErrorInfo,
  929 + findSCodeErrorInfo: findSCodeErrorInfo,
  930 + refreshRfid: refreshRfid
  931 + };
  932 +})();
... ...