Commit 1d7c777b77a74e4d9512475c51ecb9fab1c3b9f1

Authored by 徐烜
2 parents df10f672 68f4c8cc

Merge branch 'minhang' of http://192.168.168.201:8888/panzhaov5/bsth_control into minhang

src/main/resources/static/real_control_v2/fragments/geo/calc_station_space.html
1   -<!-- 嵌入下抽屉 -->
2   -<div id="cal_station_space_drawer" style="width: 100%;height: 100%;">
3   -
4   - <div style="text-align: center;padding-top: 30px;" class="calcBeforePanel">
5   - <p style="margin: 9px 0 9px 0;">当前站点间里程数据取自 <a target="_blank" id="stationRouteLink">基础信息->线路信息->站点详细</a>
6   - 你可以手动编辑。</p>
7   - <p style="margin: 9px 0 9px 0;">此外,我们提供另一种选择,根据路段和站点空间坐标计算站间距。计算后的数据将存储在本地。
8   - </p>
9   - <p style="margin: 0px 0 9px 0;">
10   - <span style="color: grey;font-size: 12px;">该操作会借用本地计算能力进行,如果你同意,请点击下方按钮!</span>
11   - </p>
12   - <p style="margin: 9px 0 9px 0;">
13   - <button class="uk-button uk-button-large uk-button-primary" type="button" id="startCalcBtn">开始计算</button>
14   - </p>
15   - </div>
16   -
17   - <div class="pace pace-active" style="display: none;">
18   - <div class="pace-progress" data-progress="50" data-progress-text="50%"
19   - style="-webkit-transform: translate3d(50%, 0px, 0px); -ms-transform: translate3d(50%, 0px, 0px); transform: translate3d(50%, 0px, 0px);">
20   - <div class="pace-progress-inner"></div>
21   - </div>
22   - <div class="pace-activity"></div>
23   - <span class="text"></span>
24   - </div>
25   -
26   - <script>
27   -
28   - (function () {
29   - var drawer = '#cal_station_space_drawer'
30   - , sch, line;
31   -
32   - $(drawer).on('drawer-init', function (e, data) {
33   - sch = data.sch;
34   - line = gb_data_basic.codeToLine[sch.xlBm];
35   - //线路路由信息调整链接
36   - $('#stationRouteLink', drawer).attr('href', '/pages/base/stationroute/list.html?no=' + line.id);
37   -
38   - $('#startCalcBtn', drawer).on('click', startCalc);
39   - });
40   -
41   -
42   - function startCalc() {
43   - $(this).attr('disabled', 'disabled');
44   -
45   - gb_common.$get('/realMap/findRouteAndStationByLine', {lineCode: line.lineCode}, function (spatialData) {
46   - $('.calcBeforePanel', drawer).hide();
47   - $('.pace', drawer).show();
48   -
49   - startGeoCalc(spatialData);
50   - });
51   - }
52   -
53   - function startGeoCalc(spatialData) {
54   - setCalcText('初始化数据');
55   - //console.log('spatialData', spatialData);
56   - //路段上下行分组排序
57   - var sections = gb_common.groupBy(spatialData.section, 'DIRECTIONS');
58   - sections[0].sort(sectionArrSort);
59   - sections[1].sort(sectionArrSort);
60   -
61   - //站点上下行分组排序
62   - var stations = gb_common.groupBy(spatialData.station, 'DIRECTIONS');
63   - stations[0].sort(stationArrSort);
64   - stations[1].sort(stationArrSort);
65   -
66   - setCalcText('拼接路段,计算重叠区域');
67   - var fullSections = [
68   - connectSections(sections[0]),
69   - connectSections(sections[1])
70   - ];
71   -
72   - setCalcText('计算上行数据');
73   - var upCalcRs = calcStationSpace(stations[0], fullSections[0]);
74   -
75   - setCalcText('计算下行数据');
76   - var downCalcRs = calcStationSpace(stations[1], fullSections[1]);
77   -
78   - var locData={
79   - stations: {up: upCalcRs,down: downCalcRs},
80   - sections: {up: fullSections[0], down: fullSections[1]}
81   - };
82   -
83   - window.localStorage.setItem('control_route_distance_'+sch.xlBm, JSON.stringify(locData));
84   - //console.log('结果', locData);
85   - }
86   -
87   - function sectionArrSort(s1, s2) {
88   - return s1.SECTIONROUTE_CODE - s2.SECTIONROUTE_CODE;
89   - }
90   -
91   - function stationArrSort(s1, s2) {
92   - return s1.STATION_ROUTE_CODE - s2.STATION_ROUTE_CODE;
93   - }
94   -
95   - function setCalcText(t) {
96   - $('.pace .text', drawer).text(t);
97   - }
98   -
99   - //连接路段数组
100   - function connectSections(sectionArray) {
101   - var coords = [];
102   -
103   - var vs, temps;
104   - for (var i = 0, section; section = sectionArray[i++];) {
105   - vs = section.GSECTION_VECTOR;
106   - temps = vs.substr(11, vs.length - 2).split(',');
107   -
108   - connectCoords(coords, temps);
109   - }
110   - return coords;
111   - }
112   -
113   - function connectCoords(all, subArr) {
114   -
115   - var point, ts, len = all.length, inLine, sIndex = 0;
116   - if (len > 0) {
117   - $.each(subArr, function (i, p) {
118   - ts = p.split(' ');
119   - point = {latitude: parseFloat(ts[1]), longitude: parseFloat(ts[0])};
120   - //找到起始点
121   - sIndex = 0;
122   - for (var j = 1; j < len; j++) {
123   - inLine = geolib.isPointInLine(point, all[j - 1], all[j]);
124   -
125   - if (inLine)
126   - break;
127   - else
128   - sIndex = i;
129   - }
130   - });
131   - }
132   -
133   - //拼接
134   - for (var i = sIndex; i < subArr.length; i++) {
135   - ts = subArr[i].split(' ');
136   - all.push({
137   - latitude: parseFloat(ts[1]), longitude: parseFloat(ts[0])
138   - });
139   - }
140   - }
141   -
142   - //计算站点间距
143   - function calcStationSpace(stations, coords) {
144   -
145   - var nearArray = [];
146   - for (var i = 1; i < stations.length; i++) {
147   -
148   - //点到线的最短距离 并计算交点坐标
149   - var rs = calcPointToLineNearPoint({
150   - latitude: stations[i].G_LATY,
151   - longitude: stations[i].G_LONX
152   - }, coords);
153   - rs.station = stations[i];
154   -
155   - //将交点插入线路中
156   - coords.splice(rs.index, 0, rs.intersection);
157   -
158   - nearArray.push(rs);
159   - //console.log('站点' + i + '计算结果', rs.intersection, rs);
160   - }
161   -
162   - //根据交点截断line,并计算距离
163   - var s = 0, e, distance;
164   - $.each(nearArray, function (i) {
165   - e = this.index;
166   - distance = 0;
167   - for (; s < e; s++) {
168   - distance += geolib.getDistance(coords[s], coords[s + 1]);
169   - }
170   -
171   - this.toDistance = distance;
172   - s = e;
173   - });
174   - return nearArray;
175   - }
176   -
177   - function calcPointToLineNearPoint(point, coords) {
178   - var minRs, rs;
179   - for (var i = 1; i < coords.length; i++) {
180   -
181   - var start = coords[i - 1], end = coords[i];
182   - var d1 = geolib.getDistance(start, point, 1, 3);
183   - var d2 = geolib.getDistance(point, end, 1, 3);
184   - var d3 = geolib.getDistance(start, end, 1, 3);
185   -
186   - var alpha = Math.acos((d1 * d1 + d3 * d3 - d2 * d2) / (2 * d1 * d3));
187   - var beta = Math.acos((d2 * d2 + d3 * d3 - d1 * d1) / (2 * d2 * d3));
188   -
189   - if (d3 < 0.5 || isNaN(alpha) || isNaN(beta))
190   - continue;
191   -
192   - rs = {index: i};
193   - if (alpha > Math.PI / 2) {
194   - rs.distance = d1;
195   - rs.intersection = start;
196   - }
197   - else if (beta > Math.PI / 2) {
198   - rs.distance = d2;
199   - rs.intersection = end;
200   - }
201   - else {
202   - rs.distance = Math.sin(alpha) * d1;
203   - rs.intersection = perpendularPoint(start, end, point);
204   - }
205   -
206   - if (!minRs || minRs.distance > rs.distance)
207   - minRs = rs
208   - }
209   -
210   - return minRs;
211   - }
212   -
213   - //获取点 到 线的垂直交点
214   - function perpendularPoint(lp1, lp2, p) {
215   - var a = lp1.latitude - lp2.latitude, b = lp2.longitude - lp1.longitude, c = lp1.longitude * lp2.latitude - lp2.longitude * lp1.latitude;
216   - var lon = (Math.pow(b, 2) * p.longitude - a * b * p.latitude - a * c) / (Math.pow(a, 2) + Math.pow(b, 2));
217   - var lat = (Math.pow(a, 2) * p.latitude - a * b * p.longitude - b * c) / (Math.pow(a, 2) + Math.pow(b, 2));
218   - return {longitude: lon, latitude: lat};
219   - }
220   -
221   - })();
222   - </script>
  1 +<!-- 嵌入下抽屉 -->
  2 +<div id="cal_station_space_drawer" style="width: 100%;height: 100%;">
  3 +
  4 + <div style="text-align: center;padding-top: 30px;" class="calcBeforePanel">
  5 + <p style="margin: 9px 0 9px 0;">当前站点间里程数据取自 <a target="_blank" id="stationRouteLink">基础信息->线路信息->站点详细</a>
  6 + 你可以手动编辑。</p>
  7 + <p style="margin: 9px 0 9px 0;">此外,我们提供另一种选择,根据路段和站点空间坐标计算站间距。计算后的数据将存储在本地。
  8 + </p>
  9 + <p style="margin: 0px 0 9px 0;">
  10 + <span style="color: grey;font-size: 12px;">该操作会借用本地计算能力进行,如果你同意,请点击下方按钮!</span>
  11 + </p>
  12 + <p style="margin: 9px 0 9px 0;">
  13 + <button class="uk-button uk-button-large uk-button-primary" type="button" id="startCalcBtn">开始计算</button>
  14 + </p>
  15 + </div>
  16 +
  17 + <div class="pace pace-active" style="display: none;">
  18 + <div class="pace-progress" data-progress="50" data-progress-text="50%"
  19 + style="-webkit-transform: translate3d(50%, 0px, 0px); -ms-transform: translate3d(50%, 0px, 0px); transform: translate3d(50%, 0px, 0px);">
  20 + <div class="pace-progress-inner"></div>
  21 + </div>
  22 + <div class="pace-activity"></div>
  23 + <span class="text"></span>
  24 + </div>
  25 +
  26 + <script>
  27 +
  28 + (function () {
  29 + var drawer = '#cal_station_space_drawer'
  30 + , sch, line;
  31 +
  32 + $(drawer).on('drawer-init', function (e, data) {
  33 + sch = data.sch;
  34 + line = gb_data_basic.codeToLine[sch.xlBm];
  35 + //线路路由信息调整链接
  36 + $('#stationRouteLink', drawer).attr('href', '/pages/base/stationroute/list.html?no=' + line.id);
  37 +
  38 + $('#startCalcBtn', drawer).on('click', startCalc);
  39 + });
  40 +
  41 +
  42 + function startCalc() {
  43 + $(this).attr('disabled', 'disabled');
  44 +
  45 + gb_common.$get('/realMap/findRouteAndStationByLine', {lineCode: line.lineCode}, function (spatialData) {
  46 + $('.calcBeforePanel', drawer).hide();
  47 + $('.pace', drawer).show();
  48 +
  49 + startGeoCalc(spatialData);
  50 + });
  51 + }
  52 +
  53 + function startGeoCalc(spatialData) {
  54 + setCalcText('初始化数据');
  55 + //console.log('spatialData', spatialData);
  56 + //路段上下行分组排序
  57 + var sections = gb_common.groupBy(spatialData.section, 'DIRECTIONS');
  58 + sections[0].sort(sectionArrSort);
  59 + sections[1].sort(sectionArrSort);
  60 +
  61 + //站点上下行分组排序
  62 + var stations = gb_common.groupBy(spatialData.station, 'DIRECTIONS');
  63 + stations[0].sort(stationArrSort);
  64 + stations[1].sort(stationArrSort);
  65 +
  66 + setCalcText('拼接路段,计算重叠区域');
  67 + var fullSections = [
  68 + connectSections(sections[0]),
  69 + connectSections(sections[1])
  70 + ];
  71 +
  72 + setCalcText('计算上行数据');
  73 + var upCalcRs = calcStationSpace(stations[0], fullSections[0]);
  74 +
  75 + setCalcText('计算下行数据');
  76 + var downCalcRs = calcStationSpace(stations[1], fullSections[1]);
  77 +
  78 + var locData = {
  79 + stations: {up: upCalcRs, down: downCalcRs},
  80 + sections: {up: fullSections[0], down: fullSections[1]}
  81 + };
  82 +
  83 + window.localStorage.setItem('control_route_distance_' + sch.xlBm, JSON.stringify(locData));
  84 + //console.log('结果', locData);
  85 + }
  86 +
  87 + function sectionArrSort(s1, s2) {
  88 + return s1.SECTIONROUTE_CODE - s2.SECTIONROUTE_CODE;
  89 + }
  90 +
  91 + function stationArrSort(s1, s2) {
  92 + return s1.STATION_ROUTE_CODE - s2.STATION_ROUTE_CODE;
  93 + }
  94 +
  95 + function setCalcText(t) {
  96 + $('.pace .text', drawer).text(t);
  97 + }
  98 +
  99 + //连接路段数组
  100 + function connectSections(sectionArray) {
  101 + var coords = [];
  102 +
  103 + var vs, temps;
  104 + for (var i = 0, section; section = sectionArray[i++];) {
  105 + vs = section.GSECTION_VECTOR;
  106 + temps = vs.substr(11, vs.length - 2).split(',');
  107 +
  108 + connectCoords(coords, temps);
  109 + }
  110 + return coords;
  111 + }
  112 +
  113 + function connectCoords(all, subArr) {
  114 +
  115 + var point, ts, len = all.length, inLine, sIndex = 0;
  116 + if (len > 0) {
  117 + $.each(subArr, function (i, p) {
  118 + ts = p.split(' ');
  119 + point = {latitude: parseFloat(ts[1]), longitude: parseFloat(ts[0])};
  120 + //找到起始点
  121 + sIndex = 0;
  122 + for (var j = 1; j < len; j++) {
  123 + inLine = geolib.isPointInLine(point, all[j - 1], all[j]);
  124 +
  125 + if (inLine)
  126 + break;
  127 + else
  128 + sIndex = i;
  129 + }
  130 + });
  131 + }
  132 +
  133 + //拼接
  134 + for (var i = sIndex; i < subArr.length; i++) {
  135 + ts = subArr[i].split(' ');
  136 + all.push({
  137 + latitude: parseFloat(ts[1]), longitude: parseFloat(ts[0])
  138 + });
  139 + }
  140 + }
  141 +
  142 + //计算站点间距
  143 + function calcStationSpace(stations, coords) {
  144 +
  145 + var nearArray = [];
  146 + for (var i = 1; i < stations.length; i++) {
  147 +
  148 + //点到线的最短距离 并计算交点坐标
  149 + var rs = calcPointToLineNearPoint({
  150 + latitude: stations[i].G_LATY,
  151 + longitude: stations[i].G_LONX
  152 + }, coords);
  153 + rs.station = stations[i];
  154 +
  155 + //将交点插入线路中
  156 + coords.splice(rs.index, 0, rs.intersection);
  157 +
  158 + nearArray.push(rs);
  159 + //console.log('站点' + i + '计算结果', rs.intersection, rs);
  160 + }
  161 +
  162 + //根据交点截断line,并计算距离
  163 + var s = 0, e, distance;
  164 + $.each(nearArray, function (i) {
  165 + e = this.index;
  166 + distance = 0;
  167 + for (; s < e; s++) {
  168 + distance += geolib.getDistance(coords[s], coords[s + 1]);
  169 + }
  170 +
  171 + this.toDistance = distance;
  172 + s = e;
  173 + });
  174 +
  175 + //首站
  176 + nearArray.splice(0, 0, {
  177 + distance: 0,
  178 + station: stations[0],
  179 + toDistance: 0
  180 + });
  181 + return nearArray;
  182 + }
  183 +
  184 + function calcPointToLineNearPoint(point, coords) {
  185 + var minRs, rs;
  186 + for (var i = 1; i < coords.length; i++) {
  187 +
  188 + var start = coords[i - 1], end = coords[i];
  189 + var d1 = geolib.getDistance(start, point, 1, 3);
  190 + var d2 = geolib.getDistance(point, end, 1, 3);
  191 + var d3 = geolib.getDistance(start, end, 1, 3);
  192 +
  193 + var alpha = Math.acos((d1 * d1 + d3 * d3 - d2 * d2) / (2 * d1 * d3));
  194 + var beta = Math.acos((d2 * d2 + d3 * d3 - d1 * d1) / (2 * d2 * d3));
  195 +
  196 + if (d3 < 0.5 || isNaN(alpha) || isNaN(beta))
  197 + continue;
  198 +
  199 + rs = {index: i};
  200 + if (alpha > Math.PI / 2) {
  201 + rs.distance = d1;
  202 + rs.intersection = start;
  203 + }
  204 + else if (beta > Math.PI / 2) {
  205 + rs.distance = d2;
  206 + rs.intersection = end;
  207 + }
  208 + else {
  209 + rs.distance = Math.sin(alpha) * d1;
  210 + rs.intersection = perpendularPoint(start, end, point);
  211 + }
  212 +
  213 + if (!minRs || minRs.distance > rs.distance)
  214 + minRs = rs
  215 + }
  216 +
  217 + return minRs;
  218 + }
  219 +
  220 + //获取点 到 线的垂直交点
  221 + function perpendularPoint(lp1, lp2, p) {
  222 + var a = lp1.latitude - lp2.latitude, b = lp2.longitude - lp1.longitude, c = lp1.longitude * lp2.latitude - lp2.longitude * lp1.latitude;
  223 + var lon = (Math.pow(b, 2) * p.longitude - a * b * p.latitude - a * c) / (Math.pow(a, 2) + Math.pow(b, 2));
  224 + var lat = (Math.pow(a, 2) * p.latitude - a * b * p.longitude - b * c) / (Math.pow(a, 2) + Math.pow(b, 2));
  225 + return {longitude: lon, latitude: lat};
  226 + }
  227 +
  228 + })();
  229 + </script>
223 230 </div>
224 231 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
... ... @@ -322,7 +322,8 @@
322 322 name: "添加子任务",
323 323 items: {
324 324 'add_sub_task_in': {
325   - name: '回场'
  325 + name: '回场',
  326 + disabled: true
326 327 },
327 328 'add_sub_task_out': {
328 329 name: '出场',
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/add_sub_task_inpark.html
1   -<div class="uk-modal" id="add-sub-task-inpark-modal">
2   - <div class="uk-modal-dialog">
3   - <a href="" class="uk-modal-close uk-close"></a>
4   - <div class="uk-modal-header">
5   - <h2>回场子任务</h2></div>
6   -
7   - <div style="width: 100%;padding-left: 1%;">
8   - <div class="sub-task-card">
9   - <div class="uk-panel uk-panel-box uk-panel-box-primary">
10   - <div class="uk-panel-badge uk-badge">营运</div>
11   - <h3 class="uk-panel-title">线路上站点间</h3>
12   - <form class="uk-form uk-form-horizontal" service_form>
13   - <div class="uk-grid">
14   - <div class="uk-width-3-10">
15   - <div class="uk-form-row">
16   - <label class="uk-form-label">起点 </label>
17   - </div>
18   - </div>
19   - <div class="uk-width-7-10 pl5">
20   - <select name="startStation" disabled></select>
21   - </div>
22   - </div>
23   - <div class="uk-grid">
24   - <div class="uk-width-3-10">
25   - <div class="uk-form-row">
26   - <label class="uk-form-label">终点 </label>
27   - </div>
28   - </div>
29   - <div class="uk-width-7-10 pl5">
30   - <select name="endStation" class="ct_focus"></select>
31   - </div>
32   - </div>
33   - <div class="uk-grid">
34   - <div class="uk-width-3-10">
35   - <div class="uk-form-row">
36   - <label class="uk-form-label">营运里程</label>
37   - </div>
38   - </div>
39   - <div class="uk-width-7-10 pl5">
40   - <input type="text" name="mileageType" required>
41   - </div>
42   - </div>
43   - <div class="uk-grid">
44   - <div class="uk-width-3-10">
45   - <div class="uk-form-row">
46   - <label class="uk-form-label">开始时间</label>
47   - </div>
48   - </div>
49   - <div class="uk-width-7-10 pl5">
50   - <input type="time" name="startDate" required>
51   - </div>
52   - </div>
53   - <div class="uk-grid">
54   - <div class="uk-width-3-10">
55   - <div class="uk-form-row">
56   - <label class="uk-form-label">结束时间</label>
57   - </div>
58   - </div>
59   - <div class="uk-width-7-10 pl5">
60   - <input type="time" name="endDate" required>
61   - </div>
62   - </div>
63   - </form>
64   - </div>
65   - </div>
66   - <div class="sub-task-card">
67   - <div class="uk-panel uk-panel-box uk-panel-box-secondary">
68   - <div class="uk-panel-badge uk-badge uk-badge-default">空驶</div>
69   - <h3 class="uk-panel-title">进场</h3>
70   - <form class="uk-form uk-form-horizontal" empty_form>
71   - <div class="uk-grid">
72   - <div class="uk-width-3-10">
73   - <div class="uk-form-row">
74   - <label class="uk-form-label">起点 </label>
75   - </div>
76   - </div>
77   - <div class="uk-width-7-10 pl5">
78   - <select name="startStation" disabled></select>
79   - </div>
80   - </div>
81   - <div class="uk-grid">
82   - <div class="uk-width-3-10">
83   - <div class="uk-form-row">
84   - <label class="uk-form-label">终点 </label>
85   - </div>
86   - </div>
87   - <div class="uk-width-7-10 pl5">
88   - <select name="endStation" class="ct_focus"></select>
89   - </div>
90   - </div>
91   - <div class="uk-grid">
92   - <div class="uk-width-3-10">
93   - <div class="uk-form-row">
94   - <label class="uk-form-label">空驶里程</label>
95   - </div>
96   - </div>
97   - <div class="uk-width-7-10 pl5">
98   - <input type="text" name="mileageType" required style="width: calc(100% - 62px);">
99   - <a style="font-size: 12px;">路径(3)</a>
100   - </div>
101   - </div>
102   - <div class="uk-grid">
103   - <div class="uk-width-3-10">
104   - <div class="uk-form-row">
105   - <label class="uk-form-label">开始时间</label>
106   - </div>
107   - </div>
108   - <div class="uk-width-7-10 pl5">
109   - <input type="time" name="startDate" required>
110   - </div>
111   - </div>
112   - <div class="uk-grid">
113   - <div class="uk-width-3-10">
114   - <div class="uk-form-row">
115   - <label class="uk-form-label">结束时间</label>
116   - </div>
117   - </div>
118   - <div class="uk-width-7-10 pl5">
119   - <input type="time" name="endDate" required>
120   - </div>
121   - </div>
122   - </form>
123   - </div>
124   - </div>
125   - <div class="sub-task-card destroy-card uk-animation-scale">
126   - <div class="uk-panel uk-panel-box uk-panel-box-danger">
127   - <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
128   - <h3 class="uk-panel-title">线路上站点间</h3>
129   - <form class="uk-form uk-form-horizontal" destroy_form>
130   - <div class="uk-grid">
131   - <div class="uk-width-3-10">
132   - <div class="uk-form-row">
133   - <label class="uk-form-label">起点 </label>
134   - </div>
135   - </div>
136   - <div class="uk-width-7-10 pl5">
137   - <select name="startStation" disabled></select>
138   - </div>
139   - </div>
140   - <div class="uk-grid">
141   - <div class="uk-width-3-10">
142   - <div class="uk-form-row">
143   - <label class="uk-form-label">终点 </label>
144   - </div>
145   - </div>
146   - <div class="uk-width-7-10 pl5">
147   - <select name="endStation" class="ct_focus" disabled></select>
148   - </div>
149   - </div>
150   - <div class="uk-grid">
151   - <div class="uk-width-3-10">
152   - <div class="uk-form-row">
153   - <label class="uk-form-label">烂班里程</label>
154   - </div>
155   - </div>
156   - <div class="uk-width-7-10 pl5">
157   - <input type="text" name="mileageType" required>
158   - </div>
159   - </div>
160   - <div class="uk-grid">
161   - <div class="uk-width-3-10">
162   - <div class="uk-form-row">
163   - <label class="uk-form-label">开始时间</label>
164   - </div>
165   - </div>
166   - <div class="uk-width-7-10 pl5">
167   - <input type="time" name="startDate" required>
168   - </div>
169   - </div>
170   - <div class="uk-grid">
171   - <div class="uk-width-3-10">
172   - <div class="uk-form-row">
173   - <label class="uk-form-label">烂班原因</label>
174   - </div>
175   - </div>
176   - <div class="uk-width-7-10 pl5">
177   - <select name="destroyReason" required></select>
178   - </div>
179   - </div>
180   - </form>
181   - </div>
182   - </div>
183   -
184   - <form class="uk-form" style="margin-top: 15px; padding: 0 10px 0 0;">
185   - <textarea placeholder="备注" style="width: 100%;height: 70px;"></textarea>
186   - </form>
187   - </div>
188   -
189   - <div class="uk-modal-footer uk-text-right">
190   - <button type="button" class="uk-button uk-modal-close">取消</button>
191   - <button type="button" class="uk-button uk-button-primary">提交子任务</button>
192   -
193   - <div class="ct-footer-left">
194   - <a id="betweenStationRangeCalc" data-drawer-id="cal_station_space_drawer">站点间公里不准?</a>
195   - </div>
196   - </div>
197   - </div>
198   -
199   - <div class="ct-bottom-drawer">
200   - <a class="ct-bottom-drawer-close"></a>
201   -
202   - <div class="ct-bottom-drawer-body"></div>
203   - </div>
204   -
205   - <script id="sub-task-inpark-form-temp" type="text/html">
206   - </script>
207   -
208   - <script>
209   - (function () {
210   - var modal = '#add-sub-task-inpark-modal',
211   - serviceForm = $('form[service_form]', modal),
212   - emptyForm = $('form[empty_form]', modal),
213   - destroyForm = $('form[destroy_form]', modal),
214   - sch, stationRoutes, parks, information, esCode;
215   - var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
216   - $(modal).on('init', function (e, data) {
217   - sch = data.sch;
218   - //var formHtml = template('sub-task-inpark-form-temp', {sch:sch, adjustExps: adjustExps});
219   - //$('form', modal).html(formHtml);
220   - //字典转换
221   - //dictionaryUtils.transformDom($('.nt-dictionary', modal));
222   -
223   - //站点路由
224   - stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
225   - return a.stationRouteCode - b.stationRouteCode;
226   - }), 'directions')[sch.xlDir];
227   - //空驶终点(停车场)
228   - $.get('/basic/parks', function (rs) {
229   - parks = rs;
230   - var opts = '';
231   - for (var code in parks) {
232   - opts += '<option value="' + code + '">' + parks[code] + '</option>';
233   - }
234   - $('select[name=endStation]', emptyForm).html(opts).val(information.carPark);
235   - });
236   - //线路标准
237   - information = gb_data_basic.getLineInformation(sch.xlBm);
238   -
239   - var routeOpts = '';
240   - $.each(stationRoutes, function () {
241   - routeOpts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
242   - });
243   - esCode = stationRoutes[stationRoutes.length - 1].stationCode;
244   -
245   - //营运起终点
246   - $('select[name=startStation],select[name=endStation]', serviceForm).html(routeOpts);
247   - //空驶起点
248   - $('select[name=startStation]', emptyForm).html(routeOpts).val(esCode);
249   - //烂班起终点
250   - $('select[name=startStation],select[name=endStation]', destroyForm).html(routeOpts).val(esCode);
251   -
252   - //烂班原因
253   - var adjustExpsOpts = '<option value="">请选择...</option>';
254   - $.each(adjustExps, function (i, str) {
255   - adjustExpsOpts += '<option value="' + str + '">' + str + '</option>';
256   - });
257   - $('select[name=destroyReason]', destroyForm).html(adjustExpsOpts);
258   -
259   - //切换营运终点
260   - $('select[name=endStation]', serviceForm).val(esCode).on('change', function () {
261   - var val = $(this).val();
262   - if (val == esCode) {
263   - $('.uk-modal-dialog', modal).removeClass('three-children');
264   - $('.sub-task-card.destroy-card').css("display", "none");
265   - }
266   - else {
267   - $('.uk-modal-dialog', modal).addClass('three-children');
268   - $('.sub-task-card.destroy-card').css("display", "inline-block");
269   - }
270   -
271   - reClac();
272   - });
273   -
274   -
275   - //submit
276   - /*var f = $('form', modal).formValidation({
277   - framework: 'uikit',
278   - locale: 'zh_CN',
279   - });
280   - f.on('success.form.fv', function(e) {
281   - disabled_submit_btn(this);
282   - e.preventDefault();
283   - var data = $(this).serializeJSON();
284   -
285   - });*/
286   - });
287   -
288   - function reClac() {
289   - var serviceEnd = $('select[name=endStation]', serviceForm).val();
290   - //空驶起点 == 营运终点
291   - $('select[name=startStation]', emptyForm).val(serviceEnd);
292   -
293   - if (serviceEnd != esCode) {
294   - //烂班起点 == 营运终点
295   - $('select[name=startStation]', destroyForm).val(serviceEnd);
296   - }
297   - }
298   -
299   -
300   - //------ 下抽屉 ------
301   - $('#betweenStationRangeCalc', modal).on('click', function () {
302   - var id = $(this).data('drawer-id');
303   - switchBtmDrawer(id, '/real_control_v2/fragments/geo/calc_station_space.html');
304   - });
305   -
306   - var btmDrawer = $('.ct-bottom-drawer', modal);
307   - //打开事件
308   - btmDrawer.on('drawer_show', function () {
309   - var url = $(this).data('url');
310   - if(!url){
311   - alert('无效的地址');
312   - }
313   -
314   - var drawerPanel=$(this).data('name');
315   - $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
316   - $('#'+drawerPanel).trigger('drawer-init', {sch: sch});
317   - });
318   - });
319   -
320   - function switchBtmDrawer(id, url) {
321   - if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
322   - btmDrawer.removeClass('open');
323   - btmDrawer.removeData('name').removeData('url');
324   - }
325   - else {
326   - btmDrawer.addClass('open');
327   - btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
328   - }
329   - }
330   - })();
331   - </script>
332   -</div>
  1 +<div class="uk-modal" id="add-sub-task-inpark-modal">
  2 + <div class="uk-modal-dialog">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>回场子任务</h2></div>
  6 +
  7 + <div style="width: 100%;padding-left: 1%;">
  8 + <div class="sub-task-card">
  9 + <div class="uk-panel uk-panel-box uk-panel-box-primary">
  10 + <div class="uk-panel-badge uk-badge">营运</div>
  11 + <h3 class="uk-panel-title">线路上站点间</h3>
  12 + <form class="uk-form uk-form-horizontal" service_form>
  13 + <div class="uk-grid">
  14 + <div class="uk-width-3-10">
  15 + <div class="uk-form-row">
  16 + <label class="uk-form-label">起点 </label>
  17 + </div>
  18 + </div>
  19 + <div class="uk-width-7-10 pl5">
  20 + <select name="startStation" disabled></select>
  21 + </div>
  22 + </div>
  23 + <div class="uk-grid">
  24 + <div class="uk-width-3-10">
  25 + <div class="uk-form-row">
  26 + <label class="uk-form-label">终点 </label>
  27 + </div>
  28 + </div>
  29 + <div class="uk-width-7-10 pl5">
  30 + <select name="endStation" class="ct_focus"></select>
  31 + </div>
  32 + </div>
  33 + <div class="uk-grid">
  34 + <div class="uk-width-3-10">
  35 + <div class="uk-form-row">
  36 + <label class="uk-form-label">营运里程</label>
  37 + </div>
  38 + </div>
  39 + <div class="uk-width-7-10 pl5">
  40 + <input type="text" name="mileageType" required>
  41 + </div>
  42 + </div>
  43 + <div class="uk-grid">
  44 + <div class="uk-width-3-10">
  45 + <div class="uk-form-row">
  46 + <label class="uk-form-label">开始时间</label>
  47 + </div>
  48 + </div>
  49 + <div class="uk-width-7-10 pl5">
  50 + <input type="time" name="startDate" required>
  51 + </div>
  52 + </div>
  53 + <div class="uk-grid">
  54 + <div class="uk-width-3-10">
  55 + <div class="uk-form-row">
  56 + <label class="uk-form-label">结束时间</label>
  57 + </div>
  58 + </div>
  59 + <div class="uk-width-7-10 pl5">
  60 + <input type="time" name="endDate" required>
  61 + </div>
  62 + </div>
  63 + </form>
  64 + </div>
  65 + </div>
  66 + <div class="sub-task-card">
  67 + <div class="uk-panel uk-panel-box uk-panel-box-secondary">
  68 + <div class="uk-panel-badge uk-badge uk-badge-default">空驶</div>
  69 + <h3 class="uk-panel-title">进场</h3>
  70 + <form class="uk-form uk-form-horizontal" empty_form>
  71 + <div class="uk-grid">
  72 + <div class="uk-width-3-10">
  73 + <div class="uk-form-row">
  74 + <label class="uk-form-label">起点 </label>
  75 + </div>
  76 + </div>
  77 + <div class="uk-width-7-10 pl5">
  78 + <select name="startStation" disabled></select>
  79 + </div>
  80 + </div>
  81 + <div class="uk-grid">
  82 + <div class="uk-width-3-10">
  83 + <div class="uk-form-row">
  84 + <label class="uk-form-label">终点 </label>
  85 + </div>
  86 + </div>
  87 + <div class="uk-width-7-10 pl5">
  88 + <select name="endStation" class="ct_focus"></select>
  89 + </div>
  90 + </div>
  91 + <div class="uk-grid">
  92 + <div class="uk-width-3-10">
  93 + <div class="uk-form-row">
  94 + <label class="uk-form-label">空驶里程</label>
  95 + </div>
  96 + </div>
  97 + <div class="uk-width-7-10 pl5">
  98 + <input type="text" name="mileageType" required style="width: calc(100% - 62px);">
  99 + <a style="font-size: 12px;">路径(3)</a>
  100 + </div>
  101 + </div>
  102 + <div class="uk-grid">
  103 + <div class="uk-width-3-10">
  104 + <div class="uk-form-row">
  105 + <label class="uk-form-label">开始时间</label>
  106 + </div>
  107 + </div>
  108 + <div class="uk-width-7-10 pl5">
  109 + <input type="time" name="startDate" required>
  110 + </div>
  111 + </div>
  112 + <div class="uk-grid">
  113 + <div class="uk-width-3-10">
  114 + <div class="uk-form-row">
  115 + <label class="uk-form-label">结束时间</label>
  116 + </div>
  117 + </div>
  118 + <div class="uk-width-7-10 pl5">
  119 + <input type="time" name="endDate" required>
  120 + </div>
  121 + </div>
  122 + </form>
  123 + </div>
  124 + </div>
  125 + <div class="sub-task-card destroy-card uk-animation-scale">
  126 + <div class="uk-panel uk-panel-box uk-panel-box-danger">
  127 + <div class="uk-panel-badge uk-badge uk-badge-danger">烂班</div>
  128 + <h3 class="uk-panel-title">线路上站点间</h3>
  129 + <form class="uk-form uk-form-horizontal" destroy_form>
  130 + <div class="uk-grid">
  131 + <div class="uk-width-3-10">
  132 + <div class="uk-form-row">
  133 + <label class="uk-form-label">起点 </label>
  134 + </div>
  135 + </div>
  136 + <div class="uk-width-7-10 pl5">
  137 + <select name="startStation" disabled></select>
  138 + </div>
  139 + </div>
  140 + <div class="uk-grid">
  141 + <div class="uk-width-3-10">
  142 + <div class="uk-form-row">
  143 + <label class="uk-form-label">终点 </label>
  144 + </div>
  145 + </div>
  146 + <div class="uk-width-7-10 pl5">
  147 + <select name="endStation" class="ct_focus" disabled></select>
  148 + </div>
  149 + </div>
  150 + <div class="uk-grid">
  151 + <div class="uk-width-3-10">
  152 + <div class="uk-form-row">
  153 + <label class="uk-form-label">烂班里程</label>
  154 + </div>
  155 + </div>
  156 + <div class="uk-width-7-10 pl5">
  157 + <input type="text" name="mileageType" required>
  158 + </div>
  159 + </div>
  160 + <div class="uk-grid">
  161 + <div class="uk-width-3-10">
  162 + <div class="uk-form-row">
  163 + <label class="uk-form-label">开始时间</label>
  164 + </div>
  165 + </div>
  166 + <div class="uk-width-7-10 pl5">
  167 + <input type="time" name="startDate" required>
  168 + </div>
  169 + </div>
  170 + <div class="uk-grid">
  171 + <div class="uk-width-3-10">
  172 + <div class="uk-form-row">
  173 + <label class="uk-form-label">烂班原因</label>
  174 + </div>
  175 + </div>
  176 + <div class="uk-width-7-10 pl5">
  177 + <select name="destroyReason" required></select>
  178 + </div>
  179 + </div>
  180 + </form>
  181 + </div>
  182 + </div>
  183 +
  184 + <form class="uk-form" style="margin-top: 15px; padding: 0 10px 0 0;">
  185 + <textarea placeholder="备注" style="width: 100%;height: 70px;"></textarea>
  186 + </form>
  187 + </div>
  188 +
  189 + <div class="uk-modal-footer uk-text-right">
  190 + <button type="button" class="uk-button uk-modal-close">取消</button>
  191 + <button type="button" class="uk-button uk-button-primary">提交子任务</button>
  192 +
  193 + <div class="ct-footer-left">
  194 + <a id="betweenStationRangeCalc" data-drawer-id="station_route_spacing_chart_drawer">站点间公里不准?</a>
  195 + </div>
  196 + </div>
  197 + </div>
  198 +
  199 + <div class="ct-bottom-drawer">
  200 + <a class="ct-bottom-drawer-close"></a>
  201 +
  202 + <div class="ct-bottom-drawer-body"></div>
  203 + </div>
  204 +
  205 + <script id="sub-task-inpark-form-temp" type="text/html">
  206 + </script>
  207 +
  208 + <script>
  209 + (function () {
  210 + var modal = '#add-sub-task-inpark-modal',
  211 + serviceForm = $('form[service_form]', modal),
  212 + emptyForm = $('form[empty_form]', modal),
  213 + destroyForm = $('form[destroy_form]', modal),
  214 + sch, stationRoutes, parks, information, esCode, timeLocStations;
  215 + var adjustExps = ['配车', '保养', '故障', '肇事', '路阻', '纠纷', '缺人', '客稀', '缺车', '气候', '援外', '吊慢', '抽减', '其他'];
  216 + $(modal).on('init', function (e, data) {
  217 + sch = data.sch;
  218 + //var formHtml = template('sub-task-inpark-form-temp', {sch:sch, adjustExps: adjustExps});
  219 + //$('form', modal).html(formHtml);
  220 + //字典转换
  221 + //dictionaryUtils.transformDom($('.nt-dictionary', modal));
  222 +
  223 + //站点路由
  224 + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(sch.xlBm).sort(function (a, b) {
  225 + return a.stationRouteCode - b.stationRouteCode;
  226 + }), 'directions')[sch.xlDir];
  227 + //空驶终点(停车场)
  228 + $.get('/basic/parks', function (rs) {
  229 + parks = rs;
  230 + var opts = '';
  231 + for (var code in parks) {
  232 + opts += '<option value="' + code + '">' + parks[code] + '</option>';
  233 + }
  234 + $('select[name=endStation]', emptyForm).html(opts).val(information.carPark);
  235 + });
  236 + //线路标准
  237 + information = gb_data_basic.getLineInformation(sch.xlBm);
  238 + //本地存储的站点耗时
  239 + try {
  240 + timeLocStations = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
  241 + if (timeLocStations)
  242 + timeLocStations = JSON.parse(timeLocStations).stations[sch.xlDir == 0 ? 'up' : 'down'];
  243 + } catch (e) {
  244 + console.log(e);
  245 + }
  246 +
  247 + //设置默认值
  248 + setDefaultVal();
  249 +
  250 + //切换营运终点
  251 + $('select[name=endStation]', serviceForm).val(esCode).on('change', function () {
  252 + var val = $(this).val();
  253 + if (val == esCode) {
  254 + $('.uk-modal-dialog', modal).removeClass('three-children');
  255 + $('.sub-task-card.destroy-card').css("display", "none");
  256 + }
  257 + else {
  258 + $('.uk-modal-dialog', modal).addClass('three-children');
  259 + $('.sub-task-card.destroy-card').css("display", "inline-block");
  260 + }
  261 +
  262 + reClac();
  263 + }).trigger('change');
  264 +
  265 +
  266 + //submit
  267 + /*var f = $('form', modal).formValidation({
  268 + framework: 'uikit',
  269 + locale: 'zh_CN',
  270 + });
  271 + f.on('success.form.fv', function(e) {
  272 + disabled_submit_btn(this);
  273 + e.preventDefault();
  274 + var data = $(this).serializeJSON();
  275 +
  276 + });*/
  277 + });
  278 +
  279 + function setDefaultVal() {
  280 + var routeOpts = '';
  281 + $.each(stationRoutes, function () {
  282 + routeOpts += '<option value="' + this.stationCode + '">' + this.stationName + '</option>';
  283 + });
  284 + esCode = stationRoutes[stationRoutes.length - 1].stationCode;
  285 +
  286 + //营运起终点
  287 + $('select[name=startStation],select[name=endStation]', serviceForm).html(routeOpts);
  288 + //空驶起点
  289 + $('select[name=startStation]', emptyForm).html(routeOpts).val(esCode);
  290 + //烂班起终点
  291 + $('select[name=startStation],select[name=endStation]', destroyForm).html(routeOpts).val(esCode);
  292 +
  293 + //烂班原因
  294 + var adjustExpsOpts = '<option value="">请选择...</option>';
  295 + $.each(adjustExps, function (i, str) {
  296 + adjustExpsOpts += '<option value="' + str + '">' + str + '</option>';
  297 + });
  298 + $('select[name=destroyReason]', destroyForm).html(adjustExpsOpts);
  299 +
  300 + //营运开始时间
  301 + $('input[name=startDate]', serviceForm).val(sch.dfsj);
  302 + }
  303 +
  304 + function reClac() {
  305 + var serviceEnd = $('select[name=endStation]', serviceForm).val();
  306 + //空驶起点 == 营运终点
  307 + $('select[name=startStation]', emptyForm).val(serviceEnd);
  308 +
  309 + //计算营运里程
  310 + var s = $('select[name=startStation]', serviceForm).val(),
  311 + e = $('select[name=endStation]', serviceForm).val();
  312 + var sMileage = calcMileage(s, e);
  313 + if(sMileage >= 0)
  314 + $('input[name=mileageType]', serviceForm).val(sMileage);
  315 +
  316 + if (serviceEnd != esCode) {
  317 + //烂班起点 == 营运终点
  318 + $('select[name=startStation]', destroyForm).val(serviceEnd);
  319 + }
  320 + }
  321 +
  322 + function calcMileage(s, e) {
  323 + var mileage = 0, flag, code;
  324 + if (timeLocStations) {
  325 + $.each(timeLocStations, function () {
  326 + code = this.station.STATION_CODE;
  327 + if (code == s) {
  328 + flag = true;
  329 + }
  330 +
  331 + if (flag)
  332 + mileage += this.toDistance;
  333 +
  334 + if (code == e)
  335 + return false;
  336 + });
  337 + }
  338 + return mileage / 1000;
  339 + }
  340 +
  341 +
  342 + //------ 下抽屉 ------
  343 + $('#betweenStationRangeCalc', modal).on('click', function () {
  344 + var id = $(this).data('drawer-id');
  345 + switchBtmDrawer(id, '/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html');
  346 + });
  347 +
  348 + var btmDrawer = $('.ct-bottom-drawer', modal);
  349 + //打开事件
  350 + btmDrawer.on('drawer_show', function () {
  351 + var url = $(this).data('url');
  352 + if (!url) {
  353 + alert('无效的地址');
  354 + }
  355 +
  356 + var drawerPanel = $(this).data('name');
  357 + $('.ct-bottom-drawer-body', btmDrawer).load(url, function () {
  358 + $('#' + drawerPanel).trigger('drawer-init', {sch: sch});
  359 + });
  360 + });
  361 +
  362 + function switchBtmDrawer(id, url) {
  363 + if (btmDrawer.hasClass('open') && btmDrawer.data('name') == id) {
  364 + btmDrawer.removeClass('open');
  365 + btmDrawer.removeData('name').removeData('url');
  366 + }
  367 + else {
  368 + btmDrawer.addClass('open');
  369 + btmDrawer.data('name', id).data('url', url).trigger('drawer_show');
  370 + }
  371 + }
  372 + })();
  373 + </script>
  374 +</div>
333 375 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/sub_task/station_route_spacing_chart.html 0 → 100644
  1 +<!-- 站点路由间距图 -->
  2 +<div id="station_route_spacing_chart_drawer" style="width: 100%;height: 100%;font-size: 0;">
  3 + <div style="width: 80%;height: 100%;display: inline-block;font-size: 14px;">
  4 +
  5 + </div>
  6 +
  7 + <div style="width: 20%;height: 100%;display: inline-block;">
  8 +
  9 + </div>
  10 +
  11 + <script>
  12 +
  13 + (function () {
  14 + var drawer = '#station_route_spacing_chart_drawer'
  15 + , sch, locData;
  16 +
  17 + $(drawer).on('drawer-init', function (e, data) {
  18 + //console.log('data', data);
  19 + sch = data.sch;
  20 + locData = window.localStorage.getItem('control_route_distance_' + sch.xlBm);
  21 +
  22 + if(locData)
  23 + drawCharts();
  24 + else
  25 + drawerLoadPage('/real_control_v2/fragments/geo/calc_station_space.html','cal_station_space_drawer');
  26 + });
  27 +
  28 + function drawCharts() {
  29 + //console.log('开始绘图', locData);
  30 + var stations;
  31 + try {
  32 + stations = JSON.parse(locData).stations[sch.xlDir == 0 ? 'up' : 'down'];
  33 + }catch (e){
  34 + alert('数据异常!!');
  35 + return;
  36 + }
  37 +
  38 + console.log('stations..', stations);
  39 + }
  40 +
  41 + //页面切换
  42 + function drawerLoadPage(url, id) {
  43 + $(drawer).parent('.ct-bottom-drawer-body').load(url, function () {
  44 + $('#' + id).trigger('drawer-init', {sch: sch});
  45 + });
  46 + }
  47 + })();
  48 + </script>
  49 +</div>
0 50 \ No newline at end of file
... ...