Commit c667f4ecda26d672bc9e0a3422c116641af83aab
Merge branch 'minhang' of http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
Showing
11 changed files
with
341 additions
and
185 deletions
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<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('ScheduleApp').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('ScheduleApp').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('ScheduleApp').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('ScheduleApp').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('ScheduleApp').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('ScheduleApp').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('ScheduleApp').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('ScheduleApp').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 }}" | ... | ... |