Commit c667f4ecda26d672bc9e0a3422c116641af83aab

Authored by 潘钊
2 parents b0ae1cae 4ed5d6c8

Merge branch 'minhang' of http://222.66.0.204:8090/panzhaov5/bsth_control into minhang

src/main/java/com/bsth/XDApplication.java
... ... @@ -58,11 +58,17 @@ public class XDApplication implements CommandLineRunner {
58 58 SeiPstThread seiPstThread;
59 59  
60 60 private static long timeDiff;
  61 + private static long timeDiffTraffic;
61 62  
62 63 static {
  64 + // 早上2:20
63 65 timeDiff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis();
64 66 if (timeDiff < 0)
65 67 timeDiff += (1000 * 60 * 60 * 24);
  68 + // 早上07:00
  69 + timeDiffTraffic = (DateUtils.getTimestamp() + 1000 * 60 * 60 * 7) - System.currentTimeMillis();
  70 + if (timeDiffTraffic < 0)
  71 + timeDiffTraffic += (1000 * 60 * 60 * 24);
66 72 }
67 73  
68 74 @Override
... ... @@ -129,7 +135,7 @@ public class XDApplication implements CommandLineRunner {
129 135  
130 136 //运管处静态数据提交
131 137 log.info(timeDiff / 1000 / 60 + "分钟之后提交到运管处");
132   - sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiff / 1000 + 60 * 60 * 5, 60 * 60 * 24, TimeUnit.SECONDS);
  138 + sexec.scheduleAtFixedRate(submitToTrafficManage, timeDiffTraffic / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
133 139 //计算油、公里加注
134 140 sexec.scheduleAtFixedRate(calcOilThread, timeDiff / 1000, 60 * 60 * 24, TimeUnit.SECONDS);
135 141  
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -1639,7 +1639,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1639 1639 map.put("jhbc", culateService.culateJhbc(list,""));
1640 1640 map.put("cjbc", culateService.culateLbbc(list));
1641 1641 map.put("ljbc", culateService.culateLjbc(lists,""));
1642   - map.put("sjbc", culateService.culateJhbc(lists,"") - culateService.culateLbbc(lists) + culateService.culateLjbc(lists,""));
  1642 + map.put("sjbc", culateService.culateSjbc(lists,"") + culateService.culateLjbc(lists,""));
1643 1643 map.put("jcclc", jccgl);
1644 1644 map.put("zkslc", Arith.add(ksgl,jccgl));
1645 1645 // map.put("zkslc", format.format(ksgl + jcclc+addMileageJc));
... ...
src/main/java/com/bsth/service/report/impl/CulateMileageServiceImpl.java
... ... @@ -448,7 +448,8 @@ public class CulateMileageServiceImpl implements CulateMileageService{
448 448 }
449 449 }
450 450  
451   - }else{
  451 + }
  452 + /*else{
452 453 if(item.equals("zgf")){
453 454 if(fcsj>=zgf1 && fcsj<=zgf2){
454 455 sjbc++;
... ... @@ -460,7 +461,7 @@ public class CulateMileageServiceImpl implements CulateMileageService{
460 461 }else{
461 462 sjbc++;
462 463 }
463   - }
  464 + }*/
464 465 }
465 466 }
466 467 }
... ...
src/main/resources/static/pages/base/line/css/bmap_base.css
... ... @@ -14,15 +14,24 @@ html,body{
14 14  
15 15 .caption {
16 16 color: #B7B7B7;
17   - font-size: 18px;
18   -
  17 + font-size: 18px;
19 18 position: relative;
20   - margin: 15px;
21   -
  19 + margin: 15px;
22 20 font-family: 微软;
23 21 }
24 22  
25   -.cut-section{ position:absolute; right:40px; top:50px; background:#12527f; width:320px;max-height: 700px;min-height: 300px;}
  23 +.cut-section{
  24 + position:absolute;
  25 + right:40px;
  26 + top:50px;
  27 + background:#12527f;
  28 + width:320px;
  29 + max-height: 700px;
  30 + min-height: 300px;
  31 + border:0px solid;
  32 + border-radius: 10px !important;
  33 + box-shadow: 10px 10px 5px #888888;
  34 +}
26 35  
27 36 .rm3_image {
28 37 width: 120px;
... ... @@ -44,3 +53,38 @@ html,body{
44 53 box-shadow: 0 12px 15px 0 rgba(204, 204, 204, 0.33),0 17px 50px 0 rgba(204, 204, 204, 0.33)!important;
45 54  
46 55 }
  56 +
  57 +.defeat-scroll {
  58 +width: 98%;
  59 +height:380px;
  60 +/* overflow:auto; */
  61 +overflow:hidden;
  62 +}
  63 +.defeat-scroll::-webkit-scrollbar {
  64 +width:6px;
  65 +height:6px;
  66 +}
  67 +.defeat-scroll::-webkit-scrollbar-button {
  68 +/* background-color:#FF7677; */
  69 +background:rgba(255, 255, 255, 0);
  70 +}
  71 +.defeat-scroll::-webkit-scrollbar-track {
  72 +/* background:#FF66D5; */
  73 +background:rgba(255, 255, 255, 0);
  74 +}
  75 +.defeat-scroll::-webkit-scrollbar-track-piece {
  76 +/* background:#ff0000; */
  77 +background:rgba(255, 255, 255, 0);
  78 +}
  79 +.defeat-scroll::-webkit-scrollbar-thumb{
  80 +background:rgba(197, 196, 196, 0.81);
  81 +border-radius:10px !important;
  82 +}
  83 +.defeat-scroll::-webkit-scrollbar-corner {
  84 +/* background:#82AFFF; */
  85 +background:rgba(255, 255, 255, 0);
  86 +}
  87 +.defeat-scroll::-webkit-scrollbar-resizer {
  88 +/* background:#FF0BEE; */
  89 +background:rgba(255, 255, 255, 0);
  90 +}
... ...
src/main/resources/static/pages/base/line/map.html
... ... @@ -2,8 +2,8 @@
2 2 <div class="portlet-body">
3 3 <!-- 地图 -->
4 4 <div id="bmap_basic" class="bmaps"></div>
5   -
6   - <div class="cut-section">
  5 + <!-- 右边显示栏 -->
  6 + <div class="cut-section" id="scrllmouseEvent_div">
7 7 <div class="portlet-title" >
8 8 <div class="caption" >
9 9 途径站点
... ... @@ -31,42 +31,6 @@
31 31 </div>
32 32 </div>
33 33 </div>
34   -
35   - <div class="portlet box protlet-box" style="top:20px;border-radius: 6px !important;box-shadow: 10px 10px 5px #888888;">
36   - 左边标题栏
37   - <div class="portlet-title" style="background-color:#12527f;">
38   - <div class="caption">
39   - 途径站点
40   - </div>
41   - <div class="tools">
42   - <a href="javascript:;" class="collapse" data-original-title="" title=""> </a>
43   - </div>
44   - </div>
45   - 左边栏
46   - <div class="portlet-body" id="scrllmouseEvent" style="border: 1px solid rgb(255, 255, 255); display: block;min-height: 300px">
47   - <div class="row">
48   - <div class="portlet-body">
49   - <div class="table-toolbar" style="text-align:center;">
50   - <button class="btn btn-circle blue" id="uploadRoute" ><i class="fa fa-plus"></i> 生成路线 </button>
51   - <button class="btn btn-circle blue hidden" id="cutSection"><i class="fa fa-level-up"></i> 提交路段</button>
52   - <button class="btn btn-circle blue hidden" id="Undo"><i class="fa fa-remove"></i> 撤销切点</button>
53   - </div>
54   - <div class="portlet-body" >
55   - <div class="defeat-scroll" style="height: auto;max-height: 400px;overflow-y:auto;">
56   - <table class="table table-striped table-bordered table-hover table-checkable " id="section_table">
57   - <thead>
58   - <tr role="row" class="heading">
59   - <th >已截取路段</th>
60   - </tr>
61   - </thead>
62   - <tbody ></tbody>
63   - </table>
64   - </div>
65   - </div>
66   - </div>
67   - </div>
68   - </div>
69   - </div>
70 34 </div>
71 35 <script type="text/html" id="section_list">
72 36 {{each list as obj i }}
... ... @@ -199,6 +163,12 @@ $(function(){
199 163 layer.msg("没有截取路段,不可以删除!!!");
200 164 }
201 165 });
  166 + // 滚动轴监听事件
  167 + $('#scrllmouseEvent_div').on('mousemove',function() {
  168 + $('.defeat-scroll').css('overflow','auto');
  169 + }).on('mouseleave',function() {
  170 + $('.defeat-scroll').css('overflow','hidden');
  171 + });
202 172 });
203 173 </script>
204 174 <!--编辑路线类 -->
... ...
src/main/resources/static/pages/scheduleApp/Gruntfile.js
... ... @@ -87,6 +87,7 @@ module.exports = function (grunt) {
87 87 'module/common/dts2/employeeGroup/saEmployeegroup.js', // 人员选饿整合指令
88 88 'module/common/dts2/bcGroup/saBcgroup.js', // 班次选择整合指令
89 89 'module/common/dts2/ttinfotable/saTimeTable.js', // 时刻表显示指令
  90 + 'module/common/dts2/ttinfotable/saTimeTableScrolly1.js', // 时刻表滚动1显示指令
90 91 'module/common/dts2/scheduleplan/saScpdate.js', // saScpdate指令(非通用指令,只在排版计划form中使用)
91 92 'module/common/dts2/scheduleplan/saPlaninfoedit.js', // saPlaninfoedit指令(非通用指令,只在调度执勤日报中使用)
92 93 'module/common/dts2/scheduleplan/saPlaninfoedit2.js' // saPlaninfoedit2指令(非通用指令,只在调度执勤日报中使用)
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTable.js
... ... @@ -206,7 +206,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
206 206 [
207 207 '$compile',
208 208 '$window',
209   - function($compile, $window) {
  209 + '$timeout',
  210 + function($compile, $window, $timeout) {
210 211 return {
211 212 restrict: 'E',
212 213 templateUrl: '/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTableTemplate.html',
... ... @@ -254,6 +255,14 @@ angular.module(&#39;ScheduleApp&#39;).directive(
254 255  
255 256 // TODO:
256 257  
  258 + // 监听滚动条事件
  259 + //console.log(tElem.find('.tt_table').html());
  260 + //tElem.on('scroll', '.tt_table', function() {
  261 + // // 因为在dom事件里修改了model的值,必须写在scope.$apply中,否则页面上绑定效果无
  262 + // // 另一种做法可以写在$watch方法中
  263 + // console.log("ssssssssssss......");
  264 + //});
  265 +
257 266 return {
258 267 pre: function(scope, element, attr) {
259 268 // TODO:
... ... @@ -317,7 +326,12 @@ angular.module(&#39;ScheduleApp&#39;).directive(
317 326 }
318 327 },
319 328 true
320   - )
  329 + );
  330 +
  331 + // 5、全部载入后,输入的
  332 + $timeout(function() {
  333 + console.log("宽度宽度:" + element.find(".tt_table_head").width());
  334 + }, 0);
321 335 }
322 336 };
323 337 }
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTableScrolly1.js 0 → 100644
  1 +/**
  2 + * 滚动事件控制指令。
  3 + */
  4 +angular.module('ScheduleApp').directive(
  5 + 'saTscrolly1',
  6 + [
  7 + function() {
  8 + return {
  9 + restrict: 'A',
  10 +
  11 + compile: function(tElem, tAttrs) {
  12 +
  13 + return {
  14 + pre: function(scope, element, attr) {
  15 + // TODO:
  16 + //alert(element.find("#tooltipTest").html());
  17 + //$compile(element.find("#tooltipTest"))(scope);
  18 +
  19 + },
  20 +
  21 + post: function(scope, element, attr) {
  22 + //var head = element[0];
  23 +
  24 + //console.log("llllllllload");
  25 + //console.log(element.name);
  26 +
  27 + element.bind('scroll', function() {
  28 + //console.log("top=", angular.element(".tt_table_head").css("top"));
  29 + //console.log("left=", angular.element(".tt_table_head").css("left"));
  30 + //console.log("s top=" + element.scrollTop());
  31 +
  32 + angular.element(".tt_table_head").css("top", element.scrollTop());
  33 + angular.element(".tt_table_body:eq(0)").css("left", element.scrollLeft());
  34 +
  35 + });
  36 + }
  37 +
  38 + };
  39 + }
  40 + }
  41 + }
  42 + ]
  43 +);
0 44 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTableTemplate.html
1 1 <style>
2 2 .ttInfo_detail {
3 3 height: 100%;
4   - overflow: hidden;
  4 + /*overflow: hidden;*/
5 5 }
6 6 .ttInfo_detail .container-fluid {
7 7 height: 100%;
... ... @@ -13,7 +13,7 @@
13 13 .ttInfo_detail .container-fluid.top-container {
14 14 margin-top: 5px;
15 15 padding: 0;
16   - overflow: hidden;
  16 + /*overflow: hidden;*/
17 17 }
18 18 .ttInfo_detail .detail-wrap {
19 19 height: calc(100% - 1px);
... ... @@ -134,9 +134,10 @@
134 134 top: 0;
135 135 height: 30px;
136 136 background: #f5f5f5;
137   - width: 100%;
  137 + /*width: 100%;*/
138 138 line-height: 30px;
139 139 z-index: 1;
  140 +
140 141 }
141 142  
142 143 .tt_table>.tt_table_head dl {
... ... @@ -149,13 +150,16 @@
149 150 }
150 151  
151 152 .tt_table>.tt_table_body {
152   - width: 100%;
  153 + /*width: 100%;*/
  154 +
  155 + position: absolute;
  156 +
153 157 border-bottom: 1px solid #dedede;
154 158 }
155 159  
156 160 .tt_table dl {
157 161 display: block;
158   - width: 100%;
  162 + /*width: 100%;*/
159 163 margin: 0;
160 164 /*border-bottom: 1px solid;*/
161 165 height: 30px;
... ... @@ -184,7 +188,7 @@
184 188 }
185 189  
186 190 .tt_table>.tt_table_head {
187   - border-bottom: 1px solid #dedede;
  191 + border-bottom: 2px solid #96b9d7;
188 192 }
189 193  
190 194 .tt_table dl {
... ... @@ -240,8 +244,8 @@
240 244  
241 245 <style>
242 246 .table_scrollbar::-webkit-scrollbar {
243   - width: 15px;
244   - height: 16px;
  247 + width: 18px;
  248 + height: 18px;
245 249 }
246 250  
247 251 .table_scrollbar::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {
... ... @@ -299,9 +303,9 @@
299 303 </h3>
300 304  
301 305 <div class="detail-body">
302   - <div class="tt_table_wrap table_scrollbar">
  306 + <div class="tt_table_wrap table_scrollbar" sa-tscrolly1>
303 307 <div class="tt_table">
304   - <div class="tt_table_head" style="top: 0;">
  308 + <div class="tt_table_head" style="z-index: 110; top: 0;">
305 309 <dl>
306 310 <dt>
307 311 序号
... ... @@ -311,10 +315,27 @@
311 315 </dt>
312 316 </dl>
313 317 </div>
  318 +
  319 + <div class="tt_table_body" style="z-index: 100; background: white;">
  320 + <dl ng-repeat="info in $saTimeTableCtrl.ds.detailInfos track by $index"
  321 + ng-init="rowIndex = $index">
  322 + <dd style="width: 50px;">
  323 + {{rowIndex + 1}}
  324 + </dd>
  325 + <dd ng-repeat="cell in info track by $index"
  326 + ng-init="colIndex = $index"
  327 + ng-click="$saTimeTableCtrl.$$cell_click(rowIndex, colIndex, cell)"
  328 + ng-dblclick="$saTimeTableCtrl.$$cell_dbclick(rowIndex, colIndex, cell)"
  329 + ng-if="$index == 0" style="width: 55px; border-right: 2px solid #96b9d7;">
  330 + {{cell.fcsj}}
  331 + </dd>
  332 +
  333 + </dl>
  334 + </div>
  335 +
314 336 <div class="tt_table_body">
315 337 <dl ng-repeat="info in $saTimeTableCtrl.ds.detailInfos track by $index"
316   - ng-init="rowIndex = $index"
317   - >
  338 + ng-init="rowIndex = $index">
318 339 <dd>
319 340 {{rowIndex + 1}}
320 341 </dd>
... ... @@ -328,8 +349,7 @@
328 349 active: cell.sel,
329 350 region: cell.bc_type == 'region',
330 351 isfb: cell.isfb
331   - }"
332   - >
  352 + }">
333 353 {{cell.fcsj}}
334 354 </dd>
335 355  
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
... ... @@ -316,120 +316,120 @@ angular.module(&#39;ScheduleApp&#39;).directive(
316 316 }
317 317 ]
318 318 );
319   -/**
320   - * remoteWarn指令:远程验证警告,作为属性放在某个指令上。
321   - * TODO:暂时没法整合到form上,类似$error这样
322   - * 属性如下:
323   - * remotewtype(必须):验证类型(在service中有对应映射),如rvtype="xl"
324   - * remotewparam(必须):后端判定查询参数,如rvparam={{ {'xl.id_eq': '123'} | json }}
325   - * remotewmsgprop(必须):警告信息属性名
326   - */
327   -angular.module('ScheduleApp').directive('remoteWarn', [
328   - '$$SearchInfoService_g',
329   - function($$SearchInfoService_g) {
330   - return {
331   - restrict: "A", // 属性
332   - required: "^ngModel", // 依赖所属指令的ngModel
333   - compile: function(tElem, tAttrs) {
334   - // 验证属性
335   - if (!tAttrs["remotewtype"]) { // 验证类型
336   - throw {msg : "remotewtype属性必须填写"};
337   - }
338   - if (!$$SearchInfoService_g.validate[tAttrs["remotewtype"]]) {
339   - throw {msg : tAttrs["remotevtype"] + "验证类型不存在"};
340   - }
341   - if (!tAttrs["remotewparam"]) { // 查询参数
342   - throw {msg : "remotevparam属性必须填写"};
343   - }
344   - if (!tAttrs["remotewmsgprop"]) { // 警告信息属性名
345   - throw {msg : "remotewmsgprop属性必须填写"}
346   - }
347   -
348   - // 监听获取的数据
349   - var $watch_rvtype = undefined;
350   - var $watch_rvparam_obj = undefined;
351   - var $remotewmsgprop = undefined;
352   -
353   - // 验证数据
354   - var $$internal_validate = function(ngModelCtrl, scope) {
355   - if ($watch_rvtype && $watch_rvparam_obj && $remotewmsgprop) {
356   - // 获取查询参数模版
357   - var paramTemplate = $$SearchInfoService_g.validate[$watch_rvtype].template;
358   - if (!paramTemplate) {
359   - throw {msg : $watch_rvtype + "查询模版不存在"};
360   - }
361   -
362   - // 判定如果参数对象不全,没有完全和模版参数里对应上,则不验证
363   - var isParamAll = true;
364   - for (var key in paramTemplate) {
365   - if (key != "id" && !$watch_rvparam_obj[key]) { // id去掉
366   - isParamAll = false;
367   - break;
368   - }
369   - }
370   -
371   - if (!isParamAll) {
372   - scope["ctrl"][$remotewmsgprop] = undefined;
373   - } else { // 开始验证警告
374   - $$SearchInfoService_g.validate[$watch_rvtype].remote.do(
375   - $watch_rvparam_obj,
376   - function(result) {
377   - if (result.status == "SUCCESS") {
378   - scope["ctrl"][$remotewmsgprop] = undefined;
379   - } else {
380   - scope["ctrl"][$remotewmsgprop] = result.msg;
381   - }
382   - },
383   - function(result) {
384   - scope["ctrl"][$remotewmsgprop] = undefined;
385   - }
386   - );
387   - }
388   - }
389   -
390   - };
391   -
392   - return {
393   - pre: function(scope, element, attr) {
394   -
395   - },
396   -
397   - post: function(scope, element, attr, ngModelCtrl) {
398   - /**
399   - * 监控验证类型属性变化。
400   - */
401   - attr.$observe("remotewtype", function(value) {
402   - if (value && value != "") {
403   - $watch_rvtype = value;
404   - $$internal_validate(ngModelCtrl, scope);
405   - }
406   - });
407   -
408   - /**
409   - * 监控查询结果属性变化。
410   - */
411   - attr.$observe("remotewparam", function(value) {
412   - if (value && value != "") {
413   - $watch_rvparam_obj = JSON.parse(value);
414   - $$internal_validate(ngModelCtrl, scope);
415   - }
416   - });
417   -
418   - /**
419   - * 监控警告信息属性名变化。
420   - */
421   - attr.$observe("remotewmsgprop", function(value) {
422   - if (value && value != "") {
423   - $remotewmsgprop = value;
424   - $$internal_validate(ngModelCtrl, scope);
425   - }
426   - });
427   -
428   - }
429   - };
430   - }
431   - };
432   - }
  319 +/**
  320 + * remoteWarn指令:远程验证警告,作为属性放在某个指令上。
  321 + * TODO:暂时没法整合到form上,类似$error这样
  322 + * 属性如下:
  323 + * remotewtype(必须):验证类型(在service中有对应映射),如rvtype="xl"
  324 + * remotewparam(必须):后端判定查询参数,如rvparam={{ {'xl.id_eq': '123'} | json }}
  325 + * remotewmsgprop(必须):警告信息属性名
  326 + */
  327 +angular.module('ScheduleApp').directive('remoteWarn', [
  328 + '$$SearchInfoService_g',
  329 + function($$SearchInfoService_g) {
  330 + return {
  331 + restrict: "A", // 属性
  332 + required: "^ngModel", // 依赖所属指令的ngModel
  333 + compile: function(tElem, tAttrs) {
  334 + // 验证属性
  335 + if (!tAttrs["remotewtype"]) { // 验证类型
  336 + throw {msg : "remotewtype属性必须填写"};
  337 + }
  338 + if (!$$SearchInfoService_g.validate[tAttrs["remotewtype"]]) {
  339 + throw {msg : tAttrs["remotevtype"] + "验证类型不存在"};
  340 + }
  341 + if (!tAttrs["remotewparam"]) { // 查询参数
  342 + throw {msg : "remotevparam属性必须填写"};
  343 + }
  344 + if (!tAttrs["remotewmsgprop"]) { // 警告信息属性名
  345 + throw {msg : "remotewmsgprop属性必须填写"}
  346 + }
  347 +
  348 + // 监听获取的数据
  349 + var $watch_rvtype = undefined;
  350 + var $watch_rvparam_obj = undefined;
  351 + var $remotewmsgprop = undefined;
  352 +
  353 + // 验证数据
  354 + var $$internal_validate = function(ngModelCtrl, scope) {
  355 + if ($watch_rvtype && $watch_rvparam_obj && $remotewmsgprop) {
  356 + // 获取查询参数模版
  357 + var paramTemplate = $$SearchInfoService_g.validate[$watch_rvtype].template;
  358 + if (!paramTemplate) {
  359 + throw {msg : $watch_rvtype + "查询模版不存在"};
  360 + }
  361 +
  362 + // 判定如果参数对象不全,没有完全和模版参数里对应上,则不验证
  363 + var isParamAll = true;
  364 + for (var key in paramTemplate) {
  365 + if (key != "id" && !$watch_rvparam_obj[key]) { // id去掉
  366 + isParamAll = false;
  367 + break;
  368 + }
  369 + }
  370 +
  371 + if (!isParamAll) {
  372 + scope["ctrl"][$remotewmsgprop] = undefined;
  373 + } else { // 开始验证警告
  374 + $$SearchInfoService_g.validate[$watch_rvtype].remote.do(
  375 + $watch_rvparam_obj,
  376 + function(result) {
  377 + if (result.status == "SUCCESS") {
  378 + scope["ctrl"][$remotewmsgprop] = undefined;
  379 + } else {
  380 + scope["ctrl"][$remotewmsgprop] = result.msg;
  381 + }
  382 + },
  383 + function(result) {
  384 + scope["ctrl"][$remotewmsgprop] = undefined;
  385 + }
  386 + );
  387 + }
  388 + }
  389 +
  390 + };
  391 +
  392 + return {
  393 + pre: function(scope, element, attr) {
  394 +
  395 + },
  396 +
  397 + post: function(scope, element, attr, ngModelCtrl) {
  398 + /**
  399 + * 监控验证类型属性变化。
  400 + */
  401 + attr.$observe("remotewtype", function(value) {
  402 + if (value && value != "") {
  403 + $watch_rvtype = value;
  404 + $$internal_validate(ngModelCtrl, scope);
  405 + }
  406 + });
  407 +
  408 + /**
  409 + * 监控查询结果属性变化。
  410 + */
  411 + attr.$observe("remotewparam", function(value) {
  412 + if (value && value != "") {
  413 + $watch_rvparam_obj = JSON.parse(value);
  414 + $$internal_validate(ngModelCtrl, scope);
  415 + }
  416 + });
  417 +
  418 + /**
  419 + * 监控警告信息属性名变化。
  420 + */
  421 + attr.$observe("remotewmsgprop", function(value) {
  422 + if (value && value != "") {
  423 + $remotewmsgprop = value;
  424 + $$internal_validate(ngModelCtrl, scope);
  425 + }
  426 + });
  427 +
  428 + }
  429 + };
  430 + }
  431 + };
  432 + }
433 433 ]);
434 434  
435 435 angular.module('ScheduleApp').directive("saSelect", ['$timeout', function($timeout) {
... ... @@ -4101,7 +4101,8 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4101 4101 [
4102 4102 '$compile',
4103 4103 '$window',
4104   - function($compile, $window) {
  4104 + '$timeout',
  4105 + function($compile, $window, $timeout) {
4105 4106 return {
4106 4107 restrict: 'E',
4107 4108 templateUrl: '/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTableTemplate.html',
... ... @@ -4149,6 +4150,14 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4149 4150  
4150 4151 // TODO:
4151 4152  
  4153 + // 监听滚动条事件
  4154 + //console.log(tElem.find('.tt_table').html());
  4155 + //tElem.on('scroll', '.tt_table', function() {
  4156 + // // 因为在dom事件里修改了model的值,必须写在scope.$apply中,否则页面上绑定效果无
  4157 + // // 另一种做法可以写在$watch方法中
  4158 + // console.log("ssssssssssss......");
  4159 + //});
  4160 +
4152 4161 return {
4153 4162 pre: function(scope, element, attr) {
4154 4163 // TODO:
... ... @@ -4212,7 +4221,12 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4212 4221 }
4213 4222 },
4214 4223 true
4215   - )
  4224 + );
  4225 +
  4226 + // 5、全部载入后,输入的
  4227 + $timeout(function() {
  4228 + console.log("宽度宽度:" + element.find(".tt_table_head").width());
  4229 + }, 0);
4216 4230 }
4217 4231 };
4218 4232 }
... ... @@ -4222,6 +4236,49 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4222 4236 ]
4223 4237 );
4224 4238  
  4239 +/**
  4240 + * 滚动事件控制指令。
  4241 + */
  4242 +angular.module('ScheduleApp').directive(
  4243 + 'saTscrolly1',
  4244 + [
  4245 + function() {
  4246 + return {
  4247 + restrict: 'A',
  4248 +
  4249 + compile: function(tElem, tAttrs) {
  4250 +
  4251 + return {
  4252 + pre: function(scope, element, attr) {
  4253 + // TODO:
  4254 + //alert(element.find("#tooltipTest").html());
  4255 + //$compile(element.find("#tooltipTest"))(scope);
  4256 +
  4257 + },
  4258 +
  4259 + post: function(scope, element, attr) {
  4260 + //var head = element[0];
  4261 +
  4262 + //console.log("llllllllload");
  4263 + //console.log(element.name);
  4264 +
  4265 + element.bind('scroll', function() {
  4266 + //console.log("top=", angular.element(".tt_table_head").css("top"));
  4267 + //console.log("left=", angular.element(".tt_table_head").css("left"));
  4268 + //console.log("s top=" + element.scrollTop());
  4269 +
  4270 + angular.element(".tt_table_head").css("top", element.scrollTop());
  4271 + angular.element(".tt_table_body:eq(0)").css("left", element.scrollLeft());
  4272 +
  4273 + });
  4274 + }
  4275 +
  4276 + };
  4277 + }
  4278 + }
  4279 + }
  4280 + ]
  4281 +);
4225 4282 /**
4226 4283 * saScpdate指令(非通用指令,只在排版计划form中使用)。
4227 4284 * 属性如下:
... ...
src/main/resources/static/pages/scheduleApp/module/core/schedulePlanManage/report/ext/edit.html
... ... @@ -91,7 +91,7 @@
91 91 <div class="col-md-7">
92 92 <sa-Select5 name="j1"
93 93 model="ctrl.formData"
94   - cmaps="{'j1.id' : 'id', 'j1.jobCode': 'jobCode', 'j1.name': 'personnelName'}"
  94 + cmaps="{'j1.id' : 'id', 'j1.jobCode': 'workId', 'j1.name': 'name'}"
95 95 dcname="j1.id"
96 96 icname="id"
97 97 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -114,7 +114,7 @@
114 114 <div class="col-md-7">
115 115 <sa-Select5 name="s1"
116 116 model="ctrl.formData"
117   - cmaps="{'s1.id' : 'id', 's1.jobCode': 'jobCode', 's1.name': 'personnelName'}"
  117 + cmaps="{'s1.id' : 'id', 's1.jobCode': 'workId', 's1.name': 'name'}"
118 118 dcname="s1.id"
119 119 icname="id"
120 120 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -132,7 +132,7 @@
132 132 <div class="col-md-7">
133 133 <sa-Select5 name="j2"
134 134 model="ctrl.formData"
135   - cmaps="{'j2.id' : 'id', 'j2.jobCode': 'jobCode', 'j2.name': 'personnelName'}"
  135 + cmaps="{'j2.id' : 'id', 'j2.jobCode': 'workId', 'j2.name': 'name'}"
136 136 dcname="j2.id"
137 137 icname="id"
138 138 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -150,7 +150,7 @@
150 150 <div class="col-md-7">
151 151 <sa-Select5 name="s2"
152 152 model="ctrl.formData"
153   - cmaps="{'s2.id' : 'id', 's2.jobCode': 'jobCode', 's2.name': 'personnelName'}"
  153 + cmaps="{'s2.id' : 'id', 's2.jobCode': 'workId', 's2.name': 'name'}"
154 154 dcname="s2.id"
155 155 icname="id"
156 156 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -168,7 +168,7 @@
168 168 <div class="col-md-7">
169 169 <sa-Select5 name="j3"
170 170 model="ctrl.formData"
171   - cmaps="{'j3.id' : 'id', 'j3.jobCode': 'jobCode', 'j3.name': 'personnelName'}"
  171 + cmaps="{'j3.id' : 'id', 'j3.jobCode': 'workId', 'j3.name': 'name'}"
172 172 dcname="j3.id"
173 173 icname="id"
174 174 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ... @@ -186,7 +186,7 @@
186 186 <div class="col-md-7">
187 187 <sa-Select5 name="s3"
188 188 model="ctrl.formData"
189   - cmaps="{'s3.id' : 'id', 's3.jobCode': 'jobCode', 's3.name': 'personnelName'}"
  189 + cmaps="{'s3.id' : 'id', 's3.jobCode': 'workId', 's3.name': 'name'}"
190 190 dcname="s3.id"
191 191 icname="id"
192 192 dsparams="{{ {type: 'local', param: 'ry' } | json }}"
... ...