Commit f8d22effe3ff60494375c799ecbf33612f860978

Authored by 徐烜
1 parent 10983d1d

添加时刻表预览视图功能

src/main/resources/static/pages/base/timesmodel/js/gantt.js
... ... @@ -77,6 +77,7 @@
77 77 CSMap = getMaxCarAndStopSpace1(map);
78 78 } else if (map.baseRes == '3') { // 主站停站使用v2_2版本
79 79 _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap); // TODO:暂时使用v2_1版本的方法,通用的,后续再放到v2_2版本中
  80 + console.log(_paramObj);
80 81 map.clzs = InternalScheduleObj_v2_2.calcuClzx(_paramObj);
81 82 CSMap = getMaxCarAndStopSpace1(map);
82 83 }
... ... @@ -186,7 +187,7 @@
186 187 return _rtnBcArray;
187 188 };
188 189  
189   - // Main_v2_2.exportExcelConfig(_dfun);
  190 + Main_v2_2.exportExcelConfig(_paramObj, _dfun);
190 191 }
191 192  
192 193 // 关闭弹出层
... ...
src/main/resources/static/pages/base/timesmodel/js/v2_2/main_v2_2.js
... ... @@ -48,7 +48,7 @@ var Main_v2_2 = function() {
48 48 // 7、重新设置停站时间
49 49 schedule.fnReSetLayoverTime();
50 50 // 8、补进出场例保班次
51   - schedule.fnCalcuOtherBc();
  51 + // schedule.fnCalcuOtherBc();
52 52  
53 53 //-------------------- 输出ganut图上的班次,班型描述 ----------------------//
54 54 // TODO:班型再议
... ... @@ -64,7 +64,7 @@ var Main_v2_2 = function() {
64 64 * 导出时刻表配置。
65 65 * @param fnGetGanttBc 获取gantt班次方法
66 66 */
67   - exportExcelConfig: function(fnGetGanttBc) {
  67 + exportExcelConfig: function(_paramObj, fnGetGanttBc) {
68 68 var oExcel = new Main_v2_2_ExcelObj(_paramObj, fnGetGanttBc);
69 69  
70 70 $('.exportAddXls').off('click');
... ...
src/main/resources/static/pages/scheduleApp/Gruntfile.js
... ... @@ -87,8 +87,10 @@ module.exports = function (grunt) {
87 87 'module/common/dts2/guideboardGroup/saGuideboardgroup.js', // 路牌选择整合指令
88 88 'module/common/dts2/employeeGroup/saEmployeegroup.js', // 人员选饿整合指令
89 89 'module/common/dts2/bcGroup/saBcgroup.js', // 班次选择整合指令
90   - 'module/common/dts2/ttinfotable/saTimeTable.js', // 时刻表显示指令
91   - 'module/common/dts2/ttinfotable/saTimeTableScrolly1.js', // 时刻表滚动1显示指令
  90 + 'module/common/dts2/ttinfotable/saTimeTable.js', // 时刻表显示指令(编辑模式)
  91 + 'module/common/dts2/ttinfotable/saTimeTablePreView.js', // 时刻表显示指令(预览模式)
  92 + 'module/common/dts2/ttinfotable/saTimeTableScrolly1.js', // 时刻表滚动1显示指令(编辑模式)
  93 + 'module/common/dts2/ttinfotable/saTimeTableScrolly2.js', // 时刻表滚动2显示指令(预览模式)
92 94 'module/common/dts2/queryOption/saOrderOption.js', // saOrderoption指令,搜索时的排序选项(在搜索时可以使用,通用的)
93 95 'module/common/dts2/scheduleplan/saScpdate.js', // saScpdate指令(非通用指令,只在排班计划form中使用)
94 96 'module/common/dts2/scheduleplan/saSrule.js', // saSrule指令(非通用指令,只在排班计划form中使用)
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTablePreView.js 0 → 100644
  1 +/**
  2 + * saTimetablePreview指令,时刻表预览模式视图。
  3 + */
  4 +angular.module("ScheduleApp").directive(
  5 + "saTimetable2",
  6 + [
  7 + '$timeout',
  8 + function($timeout) {
  9 + return {
  10 + restrict : 'E',
  11 + templateUrl : '/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTablePreViewTemplate.html',
  12 + scope : { // 独立作用域
  13 + // 使用外部数据源,内部重新组合显示
  14 + ds : "=ngModel"
  15 + },
  16 + controllerAs : "$saTimeTablePreviewCtrl",
  17 + bindToController: true,
  18 + controller : function() {
  19 + var self = this;
  20 +
  21 + // TODO:
  22 + },
  23 +
  24 + /**,
  25 + * compile阶段,angular还没有编译模版,根据需要可以修改模版dom
  26 + * @param tElem
  27 + * @param tAttrs
  28 + * @returns {{pre: Function, post: Function}}
  29 + */
  30 + compile : function(tElem, tAttrs) {
  31 + // 获取属性
  32 + var $attr_name = tAttrs["name"]; // 控件的名字
  33 + if (!$attr_name) {
  34 + throw new Error("saTimeTablePreview指令 name属性required");
  35 + }
  36 +
  37 + // TODO:
  38 +
  39 + return {
  40 + pre : function(scope, element, attr) {
  41 + // TODO:
  42 + },
  43 + post : function(scope, element, attr) {
  44 + // TODO:
  45 +
  46 + }
  47 + };
  48 + }
  49 + };
  50 + }
  51 + ]
  52 +);
0 53 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTablePreViewTemplate.html 0 → 100644
  1 +<style>
  2 + .ttpv_detail {
  3 + height: 100%;
  4 + }
  5 + .ttpv_detail .container-fluid {
  6 + height: 100%;
  7 + margin-left: 0;
  8 + }
  9 + .ttpv_detail .container-fluid>* {
  10 + padding: 0;
  11 + }
  12 + .ttpv_detail .container-fluid.top-container {
  13 + margin-top: 5px;
  14 + padding: 0;
  15 + }
  16 +
  17 + .ttpv_detail .detail-panel {
  18 + padding: 0;
  19 + height: 100%;
  20 + border: 1px solid #ddd;
  21 + background: #fafafa;
  22 + border-radius: 10px !important;
  23 + moz-user-select: -moz-none;
  24 + -moz-user-select: none;
  25 + -o-user-select: none;
  26 + -khtml-user-select: none;
  27 + -webkit-user-select: none;
  28 + -ms-user-select: none;
  29 + user-select: none;
  30 + }
  31 +
  32 + .ttpv_detail .detail-panel .detail-wrap {
  33 + height: calc(100% - 1px);
  34 + padding: 0;
  35 +
  36 + font-size: 14px;
  37 + color: #cccaca;
  38 + }
  39 +
  40 + .ttpv_detail .detail-panel .detail-wrap .detail-title {
  41 + margin: 7px 0 5px;
  42 + text-indent: 5px;
  43 + margin: 0;
  44 + height: 31px;
  45 + line-height: 31px;
  46 + color: #2765A7;
  47 + }
  48 +
  49 + .ttpv_detail .detail-panel .detail-wrap .detail-body {
  50 + height: calc(100% - 37px);
  51 + background: #fff;
  52 + }
  53 +
  54 + .ttpv_detail .detail-panel .detail-wrap .detail-body .ttpv_table_wrap {
  55 + width: 100%;
  56 + height: 100%;
  57 + border-left: 0;
  58 + border-bottom: 0;
  59 + overflow: auto;
  60 + }
  61 +
  62 +</style>
  63 +
  64 +<style>
  65 + /** 表格样式 */
  66 + .ttpv_table {
  67 + position: relative;
  68 + padding-top: 30px;
  69 + font-size: 13px;
  70 + }
  71 +
  72 + .ttpv_table dl {
  73 + display: block;
  74 + /*width: 100%;*/
  75 + margin: 0;
  76 + /*border-bottom: 1px solid;*/
  77 + height: 30px;
  78 + cursor: default;
  79 + }
  80 + .ttpv_table dl {
  81 + font-size: 0;
  82 + white-space: nowrap;
  83 + }
  84 + .ttpv_table dl {
  85 + transition: all .1s ease;
  86 + }
  87 +
  88 + .ttpv_table dl dd, .ttpv_table dl dt {
  89 + display: inline-block;
  90 + white-space: nowrap;
  91 + overflow: hidden;
  92 + text-overflow: ellipsis;
  93 + height: 100%;
  94 + line-height: 30px;
  95 + border-right: 1px solid;
  96 + text-indent: 5px;
  97 + }
  98 + .ttpv_table dl dd, .ttpv_table dl dt {
  99 + border-right-color: #dedede;
  100 + font-size: 13px;
  101 + /*border-bottom: 1px solid #dedede;*/
  102 + border-top: 1px solid #dedede;
  103 + }
  104 +
  105 + .ttpv_table dl dt:nth-of-type(1), .ttpv_table dl dd:nth-of-type(1) {
  106 + width: 50px;
  107 + text-align: center;
  108 + }
  109 + .ttpv_table dl dt:nth-of-type(2), .ttpv_table dl dd:nth-of-type(2) {
  110 + width: 80px;
  111 + text-align: center;
  112 + }
  113 + .ttpv_table dl dt:nth-of-type(3), .ttpv_table dl dd:nth-of-type(3) {
  114 + width: 120px;
  115 + text-align: left;
  116 + }
  117 + .ttpv_table dl dt:nth-of-type(4), .ttpv_table dl dd:nth-of-type(4) {
  118 + width: 220px;
  119 + text-align: center;
  120 + }
  121 +
  122 + .ttpv_table > .ttpv_table_head {
  123 + position: absolute;
  124 + top: 0;
  125 + height: 30px;
  126 + background: #f5f5f5;
  127 + /*width: 100%;*/
  128 + line-height: 30px;
  129 + z-index: 1;
  130 + }
  131 + .ttpv_table_head dl {
  132 + border-bottom: 2px solid #96b9d7;
  133 + color: #333333;
  134 + background-color: #f5f5f5;
  135 + }
  136 + .ttpv_table_head dl dt {
  137 + font-weight: normal;
  138 + font-size: 12px;
  139 + }
  140 +
  141 + .ttpv_table > .ttpv_table_body {
  142 + /*width: 100%;*/
  143 + position: absolute;
  144 + border-bottom: 1px solid #dedede;
  145 + }
  146 +
  147 + .ttpv_table_body dd.ists {
  148 + background: #105383 !important;
  149 + color: white !important;
  150 + }
  151 + .ttpv_table_body dd.region {
  152 + background: #686d7b !important;
  153 + color: white !important;
  154 + }
  155 + .ttpv_table_body dd.isfb {
  156 + background: #adff00 !important;
  157 + color: #501a1a !important;
  158 + }
  159 +
  160 + .ttpv_table_body dd:nth-of-type(1) {
  161 + color: #2765A7;
  162 + background: #eae8e8;
  163 + /*border-bottom: 1px solid #b3b3b3;*/
  164 + border-right: 1px solid #b3b3b3;
  165 + text-align: center;
  166 + text-indent: -3px;
  167 + }
  168 + .ttpv_table_body dd:nth-of-type(n + 2) {
  169 + color: #2765A7;
  170 + }
  171 + .ttpv_table_body dl:hover {
  172 + box-shadow: 0 0 4px #656c71;
  173 + background: #f5fbff;
  174 + }
  175 + .ttpv_table_body dl:hover dd:nth-of-type(1) {
  176 + background: #fafafa;
  177 + background: linear-gradient(to right, #fafafa, #f5fbff);
  178 + }
  179 +
  180 +</style>
  181 +
  182 +<style>
  183 + /** 滚动条css样式 */
  184 +
  185 + .ttpv_table_scrollbar::-webkit-scrollbar {
  186 + width: 18px;
  187 + height: 18px;
  188 + }
  189 +
  190 + .ttpv_table_scrollbar::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb {
  191 + border-radius: 999px;
  192 + border: 5px solid transparent;
  193 + }
  194 +
  195 + .ttpv_table_scrollbar::-webkit-scrollbar-track {
  196 + box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) inset;
  197 + }
  198 +
  199 + .ttpv_table_scrollbar::-webkit-scrollbar-thumb {
  200 + min-height: 20px;
  201 + background-clip: content-box;
  202 + box-shadow: 0 0 0 5px rgba(0, 0, 0, .2) inset;
  203 + }
  204 +
  205 + .ttpv_table_scrollbar::-webkit-scrollbar-corner {
  206 + background: transparent;
  207 + }
  208 +</style>
  209 +
  210 +<div class="ttpv_detail">
  211 + <div class="container-fluid top-container">
  212 + <div class="col-md-12 container-fluid">
  213 + <div class="col-md-6" style="height: 100%; padding-right: 3px;">
  214 + <div class="detail-panel">
  215 + <div class="detail-wrap" >
  216 + <h3 class="detail-title">
  217 + 上行起始站点:{{$saTimeTablePreviewCtrl.ds.up_qdz_name}}
  218 + </h3>
  219 + <div class="detail-body">
  220 + <div class="ttpv_table_wrap ttpv_table_scrollbar" sa-tscrolly2 scrclass = ".upFixHead">
  221 + <div class="ttpv_table">
  222 + <div class="ttpv_table_head upFixHead">
  223 + <dl>
  224 + <dt>序号</dt>
  225 + <dt>路牌</dt>
  226 + <dt>发车时间</dt>
  227 + <dt>备注</dt>
  228 + </dl>
  229 + </div>
  230 + <div class="ttpv_table_body">
  231 + <dl ng-repeat="bc in $saTimeTablePreviewCtrl.ds.up_bc_list_asc track by $index">
  232 + <dd>{{$index + 1}}</dd>
  233 + <dd>{{bc.lp.lpName}}</dd>
  234 + <dd ng-class="{ists: bc.isTS, region: bc.bcType == 'region', isfb: bc.isFB}">
  235 + {{bc.fcsj}}
  236 + <span class="badge"
  237 + style="border-radius: 2px !important; background-color: #f9a124;"
  238 + ng-show="bc.bcType == 'out'">出场</span>
  239 + <span class="badge"
  240 + style="border-radius: 2px !important; background-color: #f9a124;"
  241 + ng-show="bc.bcType == 'in'">进场</span>
  242 + </dd>
  243 + <dd>{{bc.remark}}</dd>
  244 + </dl>
  245 + </div>
  246 + </div>
  247 + </div>
  248 + </div>
  249 + </div>
  250 + </div>
  251 + </div>
  252 +
  253 + <div class="col-md-6" style="height: 100%; padding-left: 3px;">
  254 + <div class="detail-panel">
  255 + <div class="detail-wrap" >
  256 + <h3 class="detail-title">
  257 + 下行起始站点:{{$saTimeTablePreviewCtrl.ds.down_qdz_name}}
  258 + </h3>
  259 + <div class="detail-body">
  260 + <div class="ttpv_table_wrap ttpv_table_scrollbar" sa-tscrolly2 scrclass = ".downFixHead">
  261 + <div class="ttpv_table">
  262 + <div class="ttpv_table_head downFixHead">
  263 + <dl>
  264 + <dt>序号</dt>
  265 + <dt>路牌</dt>
  266 + <dt>发车时间</dt>
  267 + <dt>备注</dt>
  268 + </dl>
  269 + </div>
  270 + <div class="ttpv_table_body">
  271 + <dl ng-repeat="bc in $saTimeTablePreviewCtrl.ds.down_bc_list_asc track by $index">
  272 + <dd>{{$index + 1}}</dd>
  273 + <dd>{{bc.lp.lpName}}</dd>
  274 + <dd ng-class="{ists: bc.isTS, region: bc.bcType == 'region', isfb: bc.isFB}">
  275 + {{bc.fcsj}}
  276 + <span class="badge"
  277 + style="border-radius: 2px !important; background-color: #f9a124;"
  278 + ng-show="bc.bcType == 'out'">出场</span>
  279 + <span class="badge"
  280 + style="border-radius: 2px !important; background-color: #f9a124;"
  281 + ng-show="bc.bcType == 'in'">进场</span>
  282 + </dd>
  283 + <dd>{{bc.remark}}</dd>
  284 + </dl>
  285 + </div>
  286 + </div>
  287 + </div>
  288 + </div>
  289 + </div>
  290 + </div>
  291 + </div>
  292 +
  293 + </div>
  294 + </div>
  295 +</div>
  296 +
  297 +
  298 +
  299 +
  300 +
  301 +
  302 +
  303 +
  304 +
  305 +
  306 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTableScrolly2.js 0 → 100644
  1 +/**
  2 + * 滚动事件控制指令。
  3 + */
  4 +angular.module('ScheduleApp').directive(
  5 + 'saTscrolly2',
  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(attr.scrclass).css("top", element.scrollTop());
  33 + // angular.element(".tt_table_head:eq(0)").css("left", element.scrollLeft());
  34 + // angular.element(".tt_table_body:eq(0)").css("left", element.scrollLeft());
  35 +
  36 + });
  37 + }
  38 +
  39 + };
  40 + }
  41 + }
  42 + }
  43 + ]
  44 +);
0 45 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
... ... @@ -4407,6 +4407,58 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4407 4407 ]
4408 4408 );
4409 4409  
  4410 +/**
  4411 + * saTimetablePreview指令,时刻表预览模式视图。
  4412 + */
  4413 +angular.module("ScheduleApp").directive(
  4414 + "saTimetable2",
  4415 + [
  4416 + '$timeout',
  4417 + function($timeout) {
  4418 + return {
  4419 + restrict : 'E',
  4420 + templateUrl : '/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTablePreViewTemplate.html',
  4421 + scope : { // 独立作用域
  4422 + // 使用外部数据源,内部重新组合显示
  4423 + ds : "=ngModel"
  4424 + },
  4425 + controllerAs : "$saTimeTablePreviewCtrl",
  4426 + bindToController: true,
  4427 + controller : function() {
  4428 + var self = this;
  4429 +
  4430 + // TODO:
  4431 + },
  4432 +
  4433 + /**,
  4434 + * compile阶段,angular还没有编译模版,根据需要可以修改模版dom
  4435 + * @param tElem
  4436 + * @param tAttrs
  4437 + * @returns {{pre: Function, post: Function}}
  4438 + */
  4439 + compile : function(tElem, tAttrs) {
  4440 + // 获取属性
  4441 + var $attr_name = tAttrs["name"]; // 控件的名字
  4442 + if (!$attr_name) {
  4443 + throw new Error("saTimeTablePreview指令 name属性required");
  4444 + }
  4445 +
  4446 + // TODO:
  4447 +
  4448 + return {
  4449 + pre : function(scope, element, attr) {
  4450 + // TODO:
  4451 + },
  4452 + post : function(scope, element, attr) {
  4453 + // TODO:
  4454 +
  4455 + }
  4456 + };
  4457 + }
  4458 + };
  4459 + }
  4460 + ]
  4461 +);
4410 4462 /**
4411 4463 * 滚动事件控制指令。
4412 4464 */
... ... @@ -4451,6 +4503,50 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4451 4503 }
4452 4504 ]
4453 4505 );
  4506 +/**
  4507 + * 滚动事件控制指令。
  4508 + */
  4509 +angular.module('ScheduleApp').directive(
  4510 + 'saTscrolly2',
  4511 + [
  4512 + function() {
  4513 + return {
  4514 + restrict: 'A',
  4515 +
  4516 + compile: function(tElem, tAttrs) {
  4517 +
  4518 + return {
  4519 + pre: function(scope, element, attr) {
  4520 + // TODO:
  4521 + //alert(element.find("#tooltipTest").html());
  4522 + //$compile(element.find("#tooltipTest"))(scope);
  4523 +
  4524 + },
  4525 +
  4526 + post: function(scope, element, attr) {
  4527 + //var head = element[0];
  4528 +
  4529 + //console.log("llllllllload");
  4530 + //console.log(element.name);
  4531 +
  4532 + element.bind('scroll', function() {
  4533 + //console.log("top=", angular.element(".tt_table_head").css("top"));
  4534 + //console.log("left=", angular.element(".tt_table_head").css("left"));
  4535 + //console.log("s top=" + element.scrollTop());
  4536 +
  4537 + angular.element(attr.scrclass).css("top", element.scrollTop());
  4538 + // angular.element(".tt_table_head:eq(0)").css("left", element.scrollLeft());
  4539 + // angular.element(".tt_table_body:eq(0)").css("left", element.scrollLeft());
  4540 +
  4541 + });
  4542 + }
  4543 +
  4544 + };
  4545 + }
  4546 + }
  4547 + }
  4548 + ]
  4549 +);
4454 4550 /**
4455 4551 * saOrderoption指令,搜索时的排序选项(在搜索时可以使用,通用的)
4456 4552 * 属性如下:
... ...
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
... ... @@ -344,7 +344,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;GuideboardManageService_g&#39;, [&#39;$resource&#39;,
344 344 return {
345 345 rest: $resource(
346 346 '/gic/:id',
347   - {order: 'xl,isCancel,lpNo', direction: 'DESC,ASC,ASC', id: '@id'},
  347 + {order: 'xl.name,isCancel,lpNo', direction: 'DESC,ASC,ASC', id: '@id'},
348 348 {
349 349 list: {
350 350 method: 'GET',
... ... @@ -417,7 +417,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;rerunManageService_g&#39;, [&#39;$resource&#39;, func
417 417 return {
418 418 rest: $resource(
419 419 '/rms/:id',
420   - {order: 'rerunXl.id,isCancel', direction: 'ASC', id: '@id'},
  420 + {order: 'rerunXl.name,isCancel', direction: 'ASC', id: '@id'},
421 421 {
422 422 list: {
423 423 method: 'GET',
... ... @@ -791,6 +791,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(
791 791 '/tidc/:id',
792 792 {order: 'createDate', direction: 'DESC', id: '@id'},
793 793 {
  794 + list: {
  795 + method: 'GET',
  796 + params: {
  797 + page: 0
  798 + },
  799 + transformResponse: function(rs) {
  800 + var dst = angular.fromJson(rs);
  801 + if (dst.status == 'SUCCESS') {
  802 + return dst.data;
  803 + } else {
  804 + return dst; // 业务错误留给控制器处理
  805 + }
  806 + }
  807 + },
794 808 get: {
795 809 method: 'GET',
796 810 transformResponse: function(rs) {
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/edit3.html
... ... @@ -37,10 +37,13 @@
37 37 <!--<i class="fa fa-arrow-down" aria-hidden="true"></i>-->
38 38 <!--<span style="padding-right: 10px;">下行班次</span>-->
39 39 <!--<i class="fa fa-circle-o-notch" aria-hidden="true"></i>-->
40   - <span style="padding-right: 10px;background: #105383;color: white;text-align: center;">停驶班次</span>
41   - <span style="padding-right: 10px;background: #686d7b;color: white;text-align: center;">区间班次</span>
42   - <!--<i class="fa fa-adjust" aria-hidden="true"></i>-->
43   - <span style="padding-right: 10px;background: #adff00;color: #501a1a;text-align: center;">分班班次</span>
  40 +
  41 + <a href="javascript:" class="btn blue" style="padding-right: 5px;" ng-click="ctrl.switchView()">
  42 + <i class="fa fa-exchange"></i>
  43 + {{ctrl.currentView.switchBtnMsg}}
  44 + </a>
  45 +
  46 +
44 47  
45 48 <!--<div class="btn-group">-->
46 49 <!--<a href="javascript:" class="btn red btn-outline btn-circle" data-toggle="dropdown">-->
... ... @@ -87,40 +90,67 @@
87 90 </div>
88 91  
89 92 <div class="portlet-body">
90   - <div style="padding-bottom: 5px;">
91   - <a href="javascript:" style="padding-right: 5px;" ng-click="ctrl.multiselect()">
92   - <i class="fa fa-file-excel-o"></i>
93   - 批量选择
94   - </a>
95   - <a href="javascript:" style="padding-right: 5px;" ng-click="ctrl.editInfos()">
96   - <i class="fa fa-pencil-square-o"></i>
97   - 批量修改
98   - </a>
  93 + <div style="padding-bottom: 10px; height: 20px;">
  94 + <div style="float: left">
  95 + <a href="javascript:" style="padding-right: 5px;"
  96 + ng-click="ctrl.multiselect()"
  97 + ng-show="ctrl.currentView.btn1">
  98 + <i class="fa fa-file-excel-o"></i>
  99 + 批量选择
  100 + </a>
  101 + <a href="javascript:" style="padding-right: 5px;"
  102 + ng-click="ctrl.editInfos()"
  103 + ng-show="ctrl.currentView.btn2">
  104 + <i class="fa fa-pencil-square-o"></i>
  105 + 批量修改
  106 + </a>
  107 +
  108 + <a sweetalert
  109 + sweet-options="{title: '是否删除选定的班次?',text: '线路:' + ctrl.xlname + '</br>时刻表:' + ctrl.ttname + '</br>谨慎删除!', html: true,type: 'warning',showCancelButton: true,confirmButtonColor: '#DD6B55',confirmButtonText: '是',cancelButtonText: '取消'}"
  110 + sweet-on-confirm="ctrl.deleteInfos()"
  111 + style="padding-right: 5px;"
  112 + ng-show="ctrl.currentView.btn3">
  113 + <i class="fa fa-trash"></i>
  114 + 批量删除
  115 + </a>
  116 + <a href="javascript:" style="padding-right: 5px;"
  117 + ng-click="ctrl.clearsel()"
  118 + ng-show="ctrl.currentView.btn4">
  119 + <i class="fa fa-eraser"></i>
  120 + 取消选择
  121 + </a>
  122 + <a href="javascript:" style="padding-right: 5px;"
  123 + ng-click="ctrl.refresh()"
  124 + ng-show="ctrl.currentView.btn5">
  125 + <i class="fa fa-refresh"></i>
  126 + 刷新数据
  127 + </a>
  128 + </div>
  129 +
  130 +
  131 + <div style="float: right;">
  132 + <span style="padding-right: 10px;background: #105383;color: white;text-align: center;">停驶班次</span>
  133 + <span style="padding-right: 10px;background: #686d7b;color: white;text-align: center;">区间班次</span>
  134 + <!--<i class="fa fa-adjust" aria-hidden="true"></i>-->
  135 + <span style="padding-right: 10px;background: #adff00;color: #501a1a;text-align: center;">分班班次</span>
  136 + </div>
99 137  
100   - <a sweetalert
101   - sweet-options="{title: '是否删除选定的班次?',text: '线路:' + ctrl.xlname + '</br>时刻表:' + ctrl.ttname + '</br>谨慎删除!', html: true,type: 'warning',showCancelButton: true,confirmButtonColor: '#DD6B55',confirmButtonText: '是',cancelButtonText: '取消'}"
102   - sweet-on-confirm="ctrl.deleteInfos()"
103   - style="padding-right: 5px;" >
104   - <i class="fa fa-trash"></i>
105   - 批量删除
106   - </a>
107   - <a href="javascript:" style="padding-right: 5px;" ng-click="ctrl.clearsel()">
108   - <i class="fa fa-eraser"></i>
109   - 取消选择
110   - </a>
111   - <a href="javascript:" style="padding-right: 5px;" ng-click="ctrl.refresh()">
112   - <i class="fa fa-refresh"></i>
113   - 刷行数据
114   - </a>
115 138 </div>
116 139  
117 140 <!--<div ng-view></div>-->
118   - <div style="height: {{ctrl.ttHeight}}px;">
  141 + <div style="height: {{ctrl.ttHeight}}px;"
  142 + ng-show="ctrl.currentView.viewId == 1">
119 143 <sa-Timetable name="tt" ng-model="ctrl.editInfo" ng-model-options="{ getterSetter: true }" celldbclick="ctrl.singleEditBcDetail">
120 144  
121 145 </sa-Timetable>
122 146 </div>
123 147  
  148 + <div style="height: {{ctrl.ttHeight}}px;"
  149 + ng-show="ctrl.currentView.viewId == 2">
  150 + <sa-Timetable2 name="tt2" ng-model="ctrl.pvInfo" ng-model-options="{ getterSetter: true }" >
  151 +
  152 + </sa-Timetable2>
  153 + </div>
124 154  
125 155 </div>
126 156 </div>
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/detailedit/timeTableDetailManage_old.js
... ... @@ -12,7 +12,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(
12 12 // 查询对象类
13 13 var queryClass = service.rest;
14 14  
15   - // 时刻表信息
  15 + // 时刻表信息(编辑视图使用)
16 16 var editInfo = {
17 17 detailHeads: [], // 时刻表头信息
18 18 detailInfos: [], // 时刻表明细信息
... ... @@ -20,6 +20,14 @@ angular.module(&#39;ScheduleApp&#39;).factory(
20 20 yydesc: "" // 营运汇总描述
21 21 };
22 22  
  23 + // 时刻表信息(预览视图使用)
  24 + var pvInfo = {
  25 + up_qdz_name : "", // 上行起点站名字
  26 + down_qdz_name : "", // 下行起点站名字
  27 + up_bc_list_asc : [], // 上行班次列表(按照发车时间升序)
  28 + down_bc_list_asc : [] // 下行班次列表(按照发车时间升序)
  29 + };
  30 +
23 31 return {
24 32 getQueryClass: function() {
25 33 return queryClass;
... ... @@ -27,6 +35,108 @@ angular.module(&#39;ScheduleApp&#39;).factory(
27 35 getEditInfo: function() {
28 36 return editInfo;
29 37 },
  38 + getPvInfo : function() {
  39 + return pvInfo;
  40 + },
  41 +
  42 + /**
  43 + * 获取预览用的时刻表明细数据。
  44 + * @param ttid 时刻表id
  45 + */
  46 + refreshPvInfo : function(ttid) {
  47 + service.rest.list(
  48 + {page : 0, size : 1000, "ttinfo.id_eq" : ttid},
  49 + function(result) {
  50 + if (result.content.length > 0) {
  51 + pvInfo = {
  52 + up_qdz_name : "", // 上行起点站名字
  53 + down_qdz_name : "", // 下行起点站名字
  54 + up_bc_list_asc : [], // 上行班次列表(按照发车时间升序)
  55 + down_bc_list_asc : [] // 下行班次列表(按照发车时间升序)
  56 + };
  57 +
  58 + // 构造上下行班次列表,并确定上下行的首发站点
  59 + angular.forEach(result.content, function(bcObj) {
  60 + if (bcObj.xlDir == "0") { // 上行
  61 + pvInfo.up_bc_list_asc.push(bcObj);
  62 +
  63 + // 确定首发站点
  64 + if (pvInfo.up_qdz_name == "") {
  65 + if (bcObj.bcType == "normal") {
  66 + pvInfo.up_qdz_name = bcObj.qdzName;
  67 + }
  68 + }
  69 + }
  70 + if (bcObj.xlDir == "1") { // 下行
  71 + pvInfo.down_bc_list_asc.push(bcObj);
  72 +
  73 + // 确定首发站点
  74 + if (pvInfo.down_qdz_name == "") {
  75 + if (bcObj.bcType == "normal") {
  76 + pvInfo.down_qdz_name = bcObj.qdzName;
  77 + }
  78 + }
  79 + }
  80 + });
  81 +
  82 + // 发车时间升序排序上行班次
  83 + pvInfo.up_bc_list_asc.sort(function(a, b) {
  84 + var a_wrapTime = moment("2000-01-01 " + a.fcsj, "YYYY-MM-DD HH:mm");
  85 + var b_wrapTime = moment("2000-01-01 " + b.fcsj, "YYYY-MM-DD HH:mm");
  86 +
  87 + // 判定如果发车时间是以00,01,02,03开头的,说明是下一天凌晨的班次,需要加1天判定
  88 + // TODO:以后要配合首班车的发车时间判定
  89 + if (a.fcsj.indexOf("00:") == 0 ||
  90 + a.fcsj.indexOf("01:") == 0 ||
  91 + a.fcsj.indexOf("02:") == 0) {
  92 + a_wrapTime.add(1, "day");
  93 + }
  94 + if (b.fcsj.indexOf("00:") == 0 ||
  95 + b.fcsj.indexOf("01:") == 0 ||
  96 + b.fcsj.indexOf("02:") == 0) {
  97 + b_wrapTime.add(1, "day");
  98 + }
  99 +
  100 +
  101 + if (a_wrapTime.isBefore(b_wrapTime)) {
  102 + return -1;
  103 + } else if (a_wrapTime.isAfter(b_wrapTime)) {
  104 + return 1;
  105 + } else {
  106 + return 0;
  107 + }
  108 +
  109 + });
  110 + // 发车时间升序排序下行班次
  111 + pvInfo.down_bc_list_asc.sort(function(a, b) {
  112 + var a_wrapTime = moment("2000-01-01 " + a.fcsj, "YYYY-MM-DD HH:mm");
  113 + var b_wrapTime = moment("2000-01-01 " + b.fcsj, "YYYY-MM-DD HH:mm");
  114 +
  115 + // 判定如果发车时间是以00,01,02,03开头的,说明是下一天凌晨的班次,需要加1天判定
  116 + // TODO:以后要配合首班车的发车时间判定
  117 + if (a.fcsj.indexOf("00:") == 0 ||
  118 + a.fcsj.indexOf("01:") == 0 ||
  119 + a.fcsj.indexOf("02:") == 0) {
  120 + a_wrapTime.add(1, "day");
  121 + }
  122 + if (b.fcsj.indexOf("00:") == 0 ||
  123 + b.fcsj.indexOf("01:") == 0 ||
  124 + b.fcsj.indexOf("02:") == 0) {
  125 + b_wrapTime.add(1, "day");
  126 + }
  127 +
  128 + if (a_wrapTime.isBefore(b_wrapTime)) {
  129 + return -1;
  130 + } else if (a_wrapTime.isAfter(b_wrapTime)) {
  131 + return 1;
  132 + } else {
  133 + return 0;
  134 + }
  135 + });
  136 + }
  137 + }
  138 + );
  139 + },
30 140  
31 141 /**
32 142 * 获取编辑用的时刻表明细数据。
... ... @@ -269,6 +379,7 @@ angular.module(&#39;ScheduleApp&#39;).controller(
269 379 };
270 380  
271 381 self.editInfo = undefined;
  382 + self.pvInfo = undefined;
272 383  
273 384 $scope.$watch(
274 385 function() {
... ... @@ -280,6 +391,17 @@ angular.module(&#39;ScheduleApp&#39;).controller(
280 391 true
281 392 );
282 393  
  394 + $scope.$watch(
  395 + function() {
  396 + return service.getPvInfo();
  397 + },
  398 + function(n, o) {
  399 + self.pvInfo = n;
  400 + },
  401 + true
  402 + );
  403 +
  404 +
283 405 // 清除选择
284 406 self.clearsel = function() {
285 407 var ds = service.getEditInfo().detailInfos;
... ... @@ -291,7 +413,39 @@ angular.module(&#39;ScheduleApp&#39;).controller(
291 413 };
292 414 // 刷新时刻表数据
293 415 self.refresh = function() {
294   - service.refreshEditInfo(self.xlid, self.ttid);
  416 + // TODO:目前只有2个视图,内部toggle,以后多个视图需传入viewId
  417 + if (self.currentView.viewId == 1) {
  418 + service.refreshEditInfo(self.xlid, self.ttid);
  419 + } else {
  420 + service.refreshPvInfo(self.ttid);
  421 + }
  422 + };
  423 +
  424 + // 切换视图(编辑视图/预览视图)
  425 + self.viewInfos = {
  426 + "editView" : {
  427 + viewId : 1,
  428 + switchBtnMsg : "切换预览视图",
  429 + btn1 : true,
  430 + btn2 : true,
  431 + btn3 : true,
  432 + btn4 : true,
  433 + btn5 : true
  434 + },
  435 + "preView" : {
  436 + viewId : 2,
  437 + switchBtnMsg : "切换编辑视图",
  438 + btn5 : true
  439 + }
  440 + };
  441 + self.currentView = self.viewInfos["editView"]; // 默认编辑视图
  442 + self.switchView = function() {
  443 + // TODO:目前只有2个视图,内部toggle,以后多个视图需传入viewId
  444 + if (self.currentView.viewId == 1) {
  445 + self.currentView = self.viewInfos["preView"];
  446 + } else {
  447 + self.currentView = self.viewInfos["editView"];
  448 + }
295 449 };
296 450  
297 451 self.ttHeight = 500; // 时刻表的高度
... ... @@ -431,8 +585,9 @@ angular.module(&#39;ScheduleApp&#39;).controller(
431 585  
432 586 };
433 587  
434   - if (self.rflag) { // 是否刷新
435   - self.refresh(); // 刷新数据
  588 + if (self.rflag) { // 是否初始刷新数据
  589 + service.refreshEditInfo(self.xlid, self.ttid);
  590 + service.refreshPvInfo(self.ttid);
436 591 }
437 592  
438 593 // TODO:
... ...
src/main/resources/static/pages/scheduleApp/module/core/ttInfoManage/service.js
... ... @@ -108,6 +108,20 @@ angular.module(&#39;ScheduleApp&#39;).factory(
108 108 '/tidc/:id',
109 109 {order: 'createDate', direction: 'DESC', id: '@id'},
110 110 {
  111 + list: {
  112 + method: 'GET',
  113 + params: {
  114 + page: 0
  115 + },
  116 + transformResponse: function(rs) {
  117 + var dst = angular.fromJson(rs);
  118 + if (dst.status == 'SUCCESS') {
  119 + return dst.data;
  120 + } else {
  121 + return dst; // 业务错误留给控制器处理
  122 + }
  123 + }
  124 + },
111 125 get: {
112 126 method: 'GET',
113 127 transformResponse: function(rs) {
... ...