Commit 3927835c5c0f0e4a2e07fba5b0ddcba09f77632f

Authored by 廖磊
2 parents f8a4c9e5 830b3b60

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
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 #8e44ad;
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 #8e44ad;">
  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
... ... @@ -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 }}"
... ...