Commit b140cd04631b5b5f7f26bf9b97abf7fbe2067efc

Authored by 徐烜
2 parents 2f08f495 6b538425

PSM-10

src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
1 -// 自定义指令,指令模版在dt目录下  
2 -  
3 -  
4 -angular.module('ScheduleApp').directive('loadingWidget', ['requestNotificationChannel', function(requestNotificationChannel) {  
5 - return {  
6 - restrict: 'A',  
7 - link: function(scope, element) {  
8 - // 初始隐藏loading界面  
9 - element.hide();  
10 -  
11 - // 开始请求通知处理  
12 - requestNotificationChannel.onRequestStarted(scope, function() {  
13 - element.show();  
14 - });  
15 - // 请求结束通知处理  
16 - requestNotificationChannel.onRequestEnded(scope, function() {  
17 - element.hide();  
18 - });  
19 - }  
20 - };  
21 -}]);  
22 -  
23 -angular.module('ScheduleApp').directive("saSelect", ['$timeout', function($timeout) {  
24 - return {  
25 - restrict: 'E',  
26 - templateUrl: '/pages/scheduleApp/module/other/MyDictionarySelectTemplate.html',  
27 - scope: {  
28 - model: "="  
29 - },  
30 - controllerAs: "$saSelectCtrl",  
31 - bindToController: true,  
32 - controller: function() {  
33 - var self = this;  
34 - self.datas = []; // 关联的字典数据,内部格式 {code:{值},name:{名字}}  
35 - },  
36 - /**  
37 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
38 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
39 - * @param tElem  
40 - * @param tAttrs  
41 - * @returns {{pre: Function, post: Function}}  
42 - */  
43 - compile: function(tElem, tAttrs) {  
44 - // 确定是否使用angularjs required验证  
45 - // 属性 required  
46 - // 如果没有填写,内部不添加验证,如果填写了,并且等于true添加验证,否则不添加  
47 - var required_attr = tAttrs["required"];  
48 - if (required_attr) {  
49 - if (required_attr == "true") {  
50 - // 添加required属性指令  
51 - tElem.find("ui-select").attr("required", "");  
52 - } else {  
53 - // 不等于true,不添加required属性指令  
54 - }  
55 - } else {  
56 - // 不添加required属性指令  
57 - }  
58 -  
59 - //console.log("saSelect" + ":compile = >" + tElem.html());  
60 -  
61 - return {  
62 - pre: function(scope, element, attr) {  
63 - // TODO:  
64 - },  
65 - /**  
66 - * 相当于link函数。  
67 - *  
68 - * 重要属性如下:  
69 - * model 是绑定外部值。  
70 - * dicgroup 字典组的类型  
71 - * name input name属性值  
72 - */  
73 - post: function(scope, element, attr) {  
74 - // 1、获取属性  
75 - var dicgroup_attr = attr['dicgroup']; // 字典组的类型  
76 - var name_attr = attr['name']; // input name属性值  
77 - var dicname_attr = attr['dicname']; // model关联的字典名字段  
78 - var codename_attr = attr['codename']; // model关联的字典值字段  
79 - var placeholder_attr = attr['placeholder']; // select placeholder提示  
80 -  
81 - // 系统的字典对象,使用dictionaryUtils类获取  
82 - var origin_dicgroup;  
83 - var dic_key; // 字典key  
84 -  
85 - if (dicgroup_attr) { // 赋值指定的字典数据  
86 - origin_dicgroup = dictionaryUtils.getByGroup(dicgroup_attr);  
87 - for (dic_key in origin_dicgroup) {  
88 - var data = {}; // 重新组合的字典元素对象  
89 - if (dic_key == "true")  
90 - data.code = true;  
91 - else  
92 - data.code = dic_key;  
93 - data.name = origin_dicgroup[dic_key];  
94 - scope["$saSelectCtrl"].datas.push(data);  
95 - }  
96 - }  
97 -  
98 - if (name_attr) {  
99 - scope["$saSelectCtrl"].nv = name_attr;  
100 - }  
101 - if (placeholder_attr) {  
102 - scope["$saSelectCtrl"].ph = placeholder_attr;  
103 - }  
104 -  
105 - scope["$saSelectCtrl"].select = function($item) {  
106 - if (codename_attr) {  
107 - scope["$saSelectCtrl"].model[codename_attr] = $item.code;  
108 - }  
109 - if (dicname_attr) {  
110 - scope["$saSelectCtrl"].model[dicname_attr] = $item.name;  
111 - }  
112 - };  
113 -  
114 - scope["$saSelectCtrl"].remove = function() {  
115 - if (codename_attr) {  
116 - scope["$saSelectCtrl"].model[codename_attr] = null;  
117 - }  
118 - if (dicname_attr) {  
119 - scope["$saSelectCtrl"].model[dicname_attr] = null;  
120 - }  
121 - scope["$saSelectCtrl"].cmodel = null;  
122 - };  
123 -  
124 - $timeout(function() {  
125 - // 创建内部使用的绑定对象  
126 - var model_code = scope["$saSelectCtrl"].model[codename_attr];  
127 - scope["$saSelectCtrl"].cmodel = model_code;  
128 - }, 0);  
129 - }  
130 - }  
131 - }  
132 - };  
133 -}]);  
134 -  
135 -/**  
136 - * saRadiogroup指令  
137 - * 属性如下:  
138 - * model(必须):独立作用域,外部绑定的一个值,如:ctrl.timeTableManageForForm.isEnableDisTemplate  
139 - * dicgroup(必须):关联的字典数据type(TODO:以后增加其他数据源)  
140 - * name(必须):控件的名字  
141 - * required(可选):是否要用required验证  
142 - * disabled(可选):标示单选框是否可选  
143 - *  
144 - */  
145 -angular.module('ScheduleApp').directive("saRadiogroup", [function() {  
146 - /**  
147 - * 使用字典数据的单选按钮组的指令。  
148 - * 指令名称:truefalse-Dic  
149 - */  
150 - return {  
151 - restrict: 'E',  
152 - templateUrl: '/pages/scheduleApp/module/common/dt/MyRadioGroupWrapTemplate.html',  
153 - scope: {  
154 - model: "="  
155 - },  
156 - controllerAs: "$saRadiogroupCtrl",  
157 - bindToController: true,  
158 - controller: function($scope) {  
159 - //$scope["model"] = {selectedOption: null};  
160 - //console.log("controller");  
161 - //console.log("controller:" + $scope["model"]);  
162 -  
163 - var self = this;  
164 - self.$$data = null; // 内部数据  
165 - },  
166 -  
167 - /**  
168 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
169 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
170 - * @param tElem  
171 - * @param tAttrs  
172 - * @returns {{pre: Function, post: Function}}  
173 - */  
174 - compile: function(tElem, tAttrs) {  
175 - // 获取属性  
176 - var $dicgroup_attr = tAttrs["dicgroup"]; // 关联的字典数据type  
177 - var $name_attr = tAttrs["name"]; // 控件的名字  
178 - var $required_attr = tAttrs["required"]; // 是否要用required验证  
179 - var $disabled_attr = tAttrs["disabled"]; // 标示单选框是否可选  
180 -  
181 - // controlAs名字  
182 - var ctrlAs = "$saRadiogroupCtrl";  
183 -  
184 - // 如果有required属性,添加angularjs required验证  
185 - if ($required_attr != undefined) {  
186 - tElem.find("input").attr("required", "");  
187 - }  
188 -  
189 - return {  
190 - pre: function(scope, element, attr) {  
191 -  
192 - },  
193 -  
194 - /**  
195 - * 相当于link函数。  
196 - * @param scope  
197 - * @param element  
198 - * @param attr  
199 - */  
200 - post: function(scope, element, attr) {  
201 - //console.log("link");  
202 - //console.log("link:" + scope.model);  
203 - //scope["model"] = {selectedOption: null};  
204 -  
205 - if ($name_attr) {  
206 - scope[ctrlAs].nv = $name_attr;  
207 - }  
208 -  
209 - if ($disabled_attr) {  
210 - scope[ctrlAs].disabled = true;  
211 - }  
212 - if ($dicgroup_attr) {  
213 - var obj = dictionaryUtils.getByGroup($dicgroup_attr);  
214 - scope[ctrlAs].$$data = obj;  
215 - // 处理 scope["dic"] key值  
216 - scope[ctrlAs].dicvalueCalcu = function(value) {  
217 - if (value == "true") {  
218 - //console.log(value);  
219 - return true;  
220 - } else if (value == "false") {  
221 - //console.log(value);  
222 - return false;  
223 - } else {  
224 - return value;  
225 - }  
226 - };  
227 - }  
228 - }  
229 - };  
230 - }  
231 - };  
232 -}]);  
233 -  
234 -angular.module('ScheduleApp').directive("remoteValidaton", [  
235 - 'BusInfoManageService_g',  
236 - 'EmployeeInfoManageService_g',  
237 - 'TimeTableManageService_g',  
238 - function(  
239 - busInfoManageService_g,  
240 - employeeInfoManageService_g,  
241 - timeTableManageService_g  
242 - ) {  
243 - /**  
244 - * 远端验证指令,依赖于ngModel  
245 - * 指令名称 remote-Validation  
246 - * 需要属性 rvtype 表示验证类型  
247 - */  
248 - return {  
249 - restrict: "A",  
250 - require: "^ngModel",  
251 - link: function(scope, element, attr, ngModelCtrl) {  
252 - element.bind("keyup", function() {  
253 - var modelValue = ngModelCtrl.$modelValue;  
254 - var rv1_attr = attr["rv1"];  
255 - if (attr["rvtype"]) {  
256 -  
257 - // 根据rvtype的值,确定使用那个远端验证的url,  
258 - // rv1, rv2, rv3是关联比较值,暂时使用rv1  
259 - // 这个貌似没法通用,根据业务变换  
260 - // TODO:暂时有点乱以后改  
261 - if (attr["rvtype"] == "insideCode") {  
262 - busInfoManageService_g.validate.insideCode(  
263 - {"insideCode_eq": modelValue, type: "equale"},  
264 - function(result) {  
265 - //console.log(result);  
266 - if (result.status == "SUCCESS") {  
267 - ngModelCtrl.$setValidity('remote', true);  
268 - } else {  
269 - ngModelCtrl.$setValidity('remote', false);  
270 - }  
271 - },  
272 - function(result) {  
273 - //console.log(result);  
274 - ngModelCtrl.$setValidity('remote', true);  
275 - }  
276 - );  
277 - } else if (attr["rvtype"] == "jobCode") {  
278 - if (!rv1_attr) {  
279 - ngModelCtrl.$setValidity('remote', false);  
280 - return;  
281 - }  
282 -  
283 - employeeInfoManageService_g.validate.jobCode(  
284 - {"jobCode_eq": modelValue, "companyCode_eq": rv1_attr, type: "equale"},  
285 - function(result) {  
286 - //console.log(result);  
287 - if (result.status == "SUCCESS") {  
288 - ngModelCtrl.$setValidity('remote', true);  
289 - } else {  
290 - ngModelCtrl.$setValidity('remote', false);  
291 - }  
292 - },  
293 - function(result) {  
294 - //console.log(result);  
295 - ngModelCtrl.$setValidity('remote', true);  
296 - }  
297 - );  
298 - } else if (attr["rvtype"] == "ttinfoname") {  
299 - if (!rv1_attr) {  
300 - ngModelCtrl.$setValidity('remote', false);  
301 - return;  
302 - }  
303 -  
304 - timeTableManageService_g.validate.ttinfoname(  
305 - {"name_eq": modelValue, "xl.id_eq": rv1_attr, type: "equale"},  
306 - function(result) {  
307 - //console.log(result);  
308 - if (result.status == "SUCCESS") {  
309 - ngModelCtrl.$setValidity('remote', true);  
310 - } else {  
311 - ngModelCtrl.$setValidity('remote', false);  
312 - }  
313 - },  
314 - function(result) {  
315 - //console.log(result);  
316 - ngModelCtrl.$setValidity('remote', true);  
317 - }  
318 - );  
319 -  
320 - }  
321 - } else {  
322 - // 没有rvtype,就不用远端验证了  
323 - ngModelCtrl.$setValidity('remote', true);  
324 - }  
325 -  
326 - attr.$observe("rv1", function(value) {  
327 - if (attr["rvtype"] == "jobCode") {  
328 - if (!value) {  
329 - ngModelCtrl.$setValidity('remote', false);  
330 - return;  
331 - }  
332 -  
333 - employeeInfoManageService_g.validate.jobCode(  
334 - {"jobCode_eq": modelValue, "companyCode_eq": rv1_attr, type: "equale"},  
335 - function(result) {  
336 - //console.log(result);  
337 - if (result.status == "SUCCESS") {  
338 - ngModelCtrl.$setValidity('remote', true);  
339 - } else {  
340 - ngModelCtrl.$setValidity('remote', false);  
341 - }  
342 - },  
343 - function(result) {  
344 - //console.log(result);  
345 - ngModelCtrl.$setValidity('remote', true);  
346 - }  
347 - );  
348 - } else if (attr["rvtype"] == "ttinfoname") {  
349 - if (!value) {  
350 - ngModelCtrl.$setValidity('remote', false);  
351 - return;  
352 - }  
353 -  
354 - console.log("rv1:" + value);  
355 -  
356 - timeTableManageService_g.validate.ttinfoname(  
357 - {"name_eq": modelValue, "xl.id_eq": value, type: "equale"},  
358 - function(result) {  
359 - //console.log(result);  
360 - if (result.status == "SUCCESS") {  
361 - ngModelCtrl.$setValidity('remote', true);  
362 - } else {  
363 - ngModelCtrl.$setValidity('remote', false);  
364 - }  
365 - },  
366 - function(result) {  
367 - //console.log(result);  
368 - ngModelCtrl.$setValidity('remote', true);  
369 - }  
370 - );  
371 - }  
372 -  
373 - });  
374 - });  
375 - }  
376 - };  
377 - }]);  
378 -  
379 -  
380 -/**  
381 - * saSelect2指令,根据属性值,动态载入数据,然后支持拼音搜索,点击右边的按钮清除选择并重新载入数据。  
382 - * 1、compile阶段使用的属性如下:  
383 - * required:用于和表单验证连接,指定成required="true"才有效。  
384 - * 2、link阶段使用的属性如下  
385 - * model:关联的模型对象  
386 - * name:表单验证时需要的名字  
387 - * type:关联的那种数据值(xl/cl/ry)-> 对应线路信息/车辆信息/人员信息,后面有的继续加  
388 - * modelcolname1:关联的模型字段名字1(一般应该是编码字段)  
389 - * modelcolname2:关联的模型字段名字2(一般应该是名字字段)  
390 - * datacolname1;内部数据对应的字段名字1(与模型字段1对应)  
391 - * datacolname2:内部数据对应的字段名字2(与模型字段2对应)  
392 - * showcolname:下拉框显示的内部数据字段名(注意:不是模型数据字段名),TODO:以后考虑放动态表达式,并在compile阶段使用  
393 - * placeholder:select placeholder字符串描述  
394 - *  
395 - * $$pyFilter,内部的filter指令,结合简拼音进行拼音过滤。  
396 - * $$SearchInfoService_g,内部使用的数据服务  
397 - */  
398 -// saSelect2指令使用的内部信service  
399 -angular.module('ScheduleApp').factory('$$SearchInfoService_g', ['$resource', function($resource) {  
400 - return {  
401 - xl: $resource(  
402 - '/line/:type',  
403 - {order: 'name', direction: 'ASC'},  
404 - {  
405 - list: {  
406 - method: 'GET',  
407 - isArray: true  
408 - }  
409 - }  
410 - ),  
411 - zd: $resource(  
412 - '/stationroute/stations',  
413 - {order: 'stationCode', direction: 'ASC'},  
414 - {  
415 - list: {  
416 - method: 'GET',  
417 - isArray: true  
418 - }  
419 - }  
420 - ),  
421 - tcc: $resource(  
422 - '/carpark/:type',  
423 - {order: 'parkCode', direction: 'ASC'},  
424 - {  
425 - list: {  
426 - method: 'GET',  
427 - isArray: true  
428 - }  
429 - }  
430 - ),  
431 - ry: $resource(  
432 - '/personnel/:type',  
433 - {order: 'personnelName', direction: 'ASC'},  
434 - {  
435 - list: {  
436 - method: 'GET',  
437 - isArray: true  
438 - }  
439 - }  
440 - ),  
441 - cl: $resource(  
442 - '/cars/:type',  
443 - {order: "insideCode", direction: 'ASC'},  
444 - {  
445 - list: {  
446 - method: 'GET',  
447 - isArray: true  
448 - }  
449 - }  
450 - ),  
451 - ttInfo: $resource(  
452 - '/tic/:type',  
453 - {order: "name", direction: 'ASC'},  
454 - {  
455 - list: {  
456 - method: 'GET',  
457 - isArray: true  
458 - }  
459 - }  
460 - ),  
461 - cci: $resource(  
462 - '/cci/cars',  
463 - {},  
464 - {  
465 - list: {  
466 - method: 'GET',  
467 - isArray: true  
468 - }  
469 - }  
470 -  
471 - ),  
472 - cci2: $resource(  
473 - '/cci/:type',  
474 - {},  
475 - {  
476 - list: {  
477 - method: 'GET',  
478 - isArray: true  
479 - }  
480 - }  
481 - ),  
482 - cci3: $resource(  
483 - '/cci/cars2',  
484 - {},  
485 - {  
486 - list: {  
487 - method: 'GET',  
488 - isArray: true  
489 - }  
490 - }  
491 -  
492 - ),  
493 - eci: $resource(  
494 - '/eci/jsy',  
495 - {},  
496 - {  
497 - list: {  
498 - method: 'GET',  
499 - isArray: true  
500 - }  
501 - }  
502 - ),  
503 - eci2: $resource(  
504 - '/eci/spy',  
505 - {},  
506 - {  
507 - list: {  
508 - method: 'GET',  
509 - isArray: true  
510 - }  
511 - }  
512 - )  
513 - }  
514 -}]);  
515 -angular.module('ScheduleApp').filter("$$pyFilter", function() {  
516 - return function(items, props) {  
517 - var out = [];  
518 - var limit = props["limit"] || 20; // 默认20条记录  
519 -  
520 - if (angular.isArray(items)) {  
521 - items.forEach(function(item) {  
522 - if (out.length < limit) {  
523 - if (props.search) {  
524 - var upTerm = props.search.toUpperCase();  
525 - if(item.fullChars.indexOf(upTerm) != -1  
526 - || item.camelChars.indexOf(upTerm) != -1) {  
527 - out.push(item);  
528 - }  
529 - }  
530 - }  
531 - });  
532 - }  
533 -  
534 - return out;  
535 - };  
536 -});  
537 -angular.module('ScheduleApp').directive("saSelect2", [  
538 - '$timeout', '$$SearchInfoService_g',  
539 - function($timeout, $$searchInfoService_g) {  
540 - return {  
541 - restrict: 'E',  
542 - templateUrl: '/pages/scheduleApp/module/other/MySearchSelectTemplate.html',  
543 - scope: {  
544 - model: "=" // 独立作用域,关联外部的模型对象  
545 - },  
546 - controllerAs: "$saSelectCtrl",  
547 - bindToController: true,  
548 - controller: function($scope) {  
549 - var self = this;  
550 - self.$$data = []; // 内部关联的数据  
551 - },  
552 - /**  
553 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
554 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
555 - * @param tElem  
556 - * @param tAttrs  
557 - * @returns {{pre: Function, post: Function}}  
558 - */  
559 - compile: function(tElem, tAttrs) {  
560 - // 1、获取此阶段使用的属性  
561 - var $required_attr = tAttrs["required"]; // 用于和表单验证连接,指定成required="true"才有效。  
562 -  
563 - // 2、处理属性  
564 -  
565 - // 确定是否使用angularjs required验证  
566 - // 属性 required  
567 - // 如果没有填写,内部不添加验证,如果填写了,并且等于true添加验证,否则不添加  
568 - if ($required_attr) {  
569 - if ($required_attr == "true") {  
570 - // 添加required属性指令  
571 - tElem.find("ui-select").attr("required", "");  
572 - } else {  
573 - // 不等于true,不添加required属性指令  
574 - }  
575 - } else {  
576 - // 不添加required属性指令  
577 - }  
578 -  
579 - //console.log("saSelect" + ":compile = >" + tElem.html());  
580 -  
581 - return {  
582 - pre: function(scope, element, attr) {  
583 - // TODO:  
584 - },  
585 - /**  
586 - * 相当于link函数。  
587 - *  
588 - * 重要属性如下:  
589 - * model 是绑定外部值。  
590 - * dicgroup 字典组的类型  
591 - * name input name属性值  
592 - */  
593 - post: function(scope, element, attr) {  
594 - // 1、获取此阶段使用的属性  
595 - var $name_attr = attr["name"]; // 表单验证时需要的名字  
596 - var $type_attr = attr["type"]; // 关联的那种数据值(xl/cl/ry)-> 对应线路信息/车辆信息/人员信息,后面有的继续加  
597 - var $modelcolname1_attr = attr["modelcolname1"]; // 关联的模型字段名字1(一般应该是编码字段)  
598 - var $modelcolname2_attr = attr["modelcolname2"]; // 关联的模型字段名字2(一般应该是名字字段)  
599 - var $datacolname1_attr = attr["datacolname1"]; // 内部数据对应的字段名字1(与模型字段1对应)  
600 - var $datacolname2_attr = attr["datacolname2"]; // 内部数据对应的字段名字2(与模型字段2对应)  
601 - var $showcolname_attr = attr["showcolname"]; // 下拉框显示的内部数据字段名  
602 - var $placeholder_attr = attr["placeholder"]; // select placeholder字符串描述  
603 -  
604 - // 2、处理属性、转换成$saSelectCtrl内部使用的属性  
605 - if ($name_attr) {  
606 - scope["$saSelectCtrl"].$name_attr = $name_attr;  
607 - }  
608 - if ($placeholder_attr) {  
609 - scope["$saSelectCtrl"].$placeholder_attr = $placeholder_attr;  
610 - }  
611 - if ($showcolname_attr) {  
612 - scope["$saSelectCtrl"].$showcolname_attr = $showcolname_attr;  
613 - }  
614 -  
615 - // 2-1、添加内部方法,根据type值,改变$$data的值  
616 - scope["$saSelectCtrl"].$$internal_data_change_fn = function() {  
617 - // 根据type属性动态载入数据  
618 - if ($type_attr) {  
619 - $$searchInfoService_g[$type_attr].list(  
620 - {type: "all"},  
621 - function(result) {  
622 - scope["$saSelectCtrl"].$$data = [];  
623 - for (var i = 0; i < result.length; i ++) {  
624 - var data = {}; // data是result的一部分属性集合,根据配置来确定  
625 - if ($datacolname1_attr) {  
626 - data[$datacolname1_attr] = result[i][$datacolname1_attr];  
627 - }  
628 - if ($datacolname2_attr) {  
629 - data[$datacolname2_attr] = result[i][$datacolname2_attr];  
630 - }  
631 - if ($showcolname_attr) {  
632 - // 动态添加基于名字的拼音  
633 - data[$showcolname_attr] = result[i][$showcolname_attr];  
634 - if (data[$showcolname_attr]) {  
635 - data["fullChars"] = pinyin.getFullChars(result[i][$showcolname_attr]).toUpperCase(); // 全拼  
636 - data["camelChars"] = pinyin.getCamelChars(result[i][$showcolname_attr]); // 简拼  
637 - }  
638 - }  
639 - if (data["fullChars"])  
640 - scope["$saSelectCtrl"].$$data.push(data);  
641 - }  
642 - },  
643 - function(result) {  
644 -  
645 - }  
646 - );  
647 - }  
648 - };  
649 -  
650 - // 3、选择、删除事件映射模型和内部数据对应的字段  
651 - scope["$saSelectCtrl"].$select_fn_attr = function($item) {  
652 - if ($modelcolname1_attr && $datacolname1_attr) {  
653 - scope["$saSelectCtrl"].model[$modelcolname1_attr] = $item[$datacolname1_attr];  
654 - }  
655 - if ($modelcolname2_attr && $datacolname2_attr) {  
656 - scope["$saSelectCtrl"].model[$modelcolname2_attr] = $item[$datacolname2_attr];  
657 - }  
658 - };  
659 - scope["$saSelectCtrl"].$remove_fn_attr = function() {  
660 - if ($modelcolname1_attr) {  
661 - scope["$saSelectCtrl"].model[$modelcolname1_attr] = null;  
662 - }  
663 - if ($modelcolname2_attr) {  
664 - scope["$saSelectCtrl"].model[$modelcolname2_attr] = null;  
665 - }  
666 - scope["$saSelectCtrl"].$$cmodel = null; // 内部模型清空  
667 -  
668 - scope["$saSelectCtrl"].$$internal_data_change_fn();  
669 - };  
670 -  
671 - // 4、搜索事件  
672 - scope["$saSelectCtrl"].$refreshdata_fn_attr = function($search) {  
673 - //var fullChars = pinyin.getFullChars($search).toUpperCase();  
674 - //var camelChars = pinyin.getCamelChars($search);  
675 - //  
676 - //console.log(fullChars + " " + camelChars);  
677 - // TODO:事件暂时没用,放着以后再说  
678 - };  
679 -  
680 - // 5、全部载入后,输入的  
681 - $timeout(function() {  
682 - // 创建内部使用的绑定对象,用于确认选中那个值  
683 - scope["$saSelectCtrl"].$$cmodel = scope["$saSelectCtrl"].model[$modelcolname1_attr];  
684 -  
685 - scope["$saSelectCtrl"].$$internal_data_change_fn();  
686 - }, 0);  
687 - }  
688 - }  
689 - }  
690 - };  
691 - }  
692 -]);  
693 -  
694 -/**  
695 - * saSelect3指令  
696 - * 属性如下:  
697 - * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave  
698 - * name(必须):控件的名字  
699 - * placeholder(可选):占位符字符串  
700 - * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}  
701 - * dcname(必须):绑定的model字段名,如:dcname=xl.id  
702 - * icname(必须):内部与之对应的字段名,如:icname=code  
703 - * dcname2(可选):其他需要赋值的model字段名2,如:dcname2=xl.name  
704 - * icname2(可选):内部与之对应的字段名2,如:icname2=name  
705 - * dcname3(可选):其他需要赋值的model字段名3,如:dcname2=xl.name  
706 - * icname3(可选):内部与之对应的字段名3,如:icname2=name  
707 - * icnames(必须):用于用于显示,以及简评处理的内部数据字段,如:icnames=name  
708 - * required(可选):是否要用required验证  
709 - * datatype(必须):业务数据类型,有字典类型,动态数据类型,暂时写的死点  
710 - * mlp(可选):是否多级属性(这里假设外部model如果多级,内部model也是多级)  
711 - *  
712 - * 高级属性:  
713 - * dataassociate(可选):数据源是否关联属性(内部数据随外部指定的参数变化而变化)  
714 - * dataparam(可选):数据源关联的外部参数对象  
715 - *  
716 - */  
717 -angular.module('ScheduleApp').directive("saSelect3", [  
718 - '$timeout',  
719 - '$$SearchInfoService_g',  
720 - function($timeout, $$searchInfoService_g) {  
721 - return {  
722 - restrict: 'E',  
723 - templateUrl: '/pages/scheduleApp/module/common/dt/MyUiSelectWrapTemplate1.html',  
724 - scope: {  
725 - model: "=" // 独立作用域,关联外部的模型object  
726 - },  
727 - controllerAs: "$saSelectCtrl",  
728 - bindToController: true,  
729 - controller: function($scope) {  
730 - var self = this;  
731 - self.$$data = []; // ui-select显示用的数据源  
732 - self.$$data_real= []; // 内部真实的数据源  
733 - },  
734 -  
735 - /**  
736 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
737 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
738 - * @param tElem  
739 - * @param tAttrs  
740 - * @returns {{pre: Function, post: Function}}  
741 - */  
742 - compile: function(tElem, tAttrs) {  
743 - // 获取所有的属性  
744 - var $name_attr = tAttrs["name"]; // 控件的名字  
745 - var $placeholder_attr = tAttrs["placeholder"]; // 占位符的名字  
746 - var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名  
747 - var $icname_attr = tAttrs["icname"]; // 内部与之对应的字段名  
748 - var $dcname2_attr = tAttrs["dcname2"]; // 其他需要赋值的model字段名2  
749 - var $icname2_attr = tAttrs["icname2"]; // 内部与之对应的字段名2  
750 - var $dcname3_attr = tAttrs["dcname3"]; // 其他需要赋值的model字段名3  
751 - var $icname3_attr = tAttrs["icname3"]; // 内部与之对应的字段名3  
752 -  
753 - var $icname_s_attr = tAttrs["icnames"]; // 用于用于显示,以及简评处理的内部数据字段  
754 - var $datatype_attr = tAttrs["datatype"]; // 内部业务数据类型  
755 - var $required_attr = tAttrs["required"]; // 是否需要required验证  
756 - var $mlp_attr = tAttrs["mlp"]; // 是否多级属性  
757 - var $dataassociate_attr = tAttrs["dataassociate"]; // 数据源是否关联属性  
758 -  
759 - // controlAs名字  
760 - var ctrlAs = "$saSelectCtrl";  
761 -  
762 - // 数据源初始化标志  
763 - var $$data_init = false;  
764 - // 如果有required属性,添加angularjs required验证  
765 - if ($required_attr != undefined) {  
766 - tElem.find("ui-select").attr("required", "");  
767 - }  
768 -  
769 - // 由于有的属性是多级的如xl.name,所以要在compile阶段重写属性绑定属性定义  
770 - // 原来的设置:{{$select.selected[$saSelectCtrl.$icname_s]}}  
771 - tElem.find("ui-select-match").html("{{$select.selected" + "." + $icname_s_attr + "}}");  
772 - // 原来的设置:item[$saSelectCtrl.$icname] as item in $saSelectCtrl.$$data  
773 - tElem.find("ui-select-choices").attr("repeat", "item" + "." + $icname_attr + " as item in $saSelectCtrl.$$data");  
774 - // 原来的设置:item[$saSelectCtrl.$icname_s]  
775 - tElem.find("ui-select-choices span").attr("ng-bind", "item" + "." + $icname_s_attr);  
776 - // 原来的设置:{{$saSelectCtrl.$name}}  
777 - tElem.find("ui-select").attr("name", $name_attr);  
778 - // 原来的设置:{{$saSelectCtrl.$placeholder}}  
779 - tElem.find("ui-select-match").attr("placeholder", $placeholder_attr);  
780 -  
781 - return {  
782 - pre: function(scope, element, attr) {  
783 - // TODO:  
784 - },  
785 - /**  
786 - * 相当于link函数。  
787 - * @param scope  
788 - * @param element  
789 - * @param attr  
790 - */  
791 - post: function(scope, element, attr) {  
792 - // 添加选中事件处理函数  
793 - scope[ctrlAs].$$internal_select_fn = function($item) {  
794 - if ($dcname_attr && $icname_attr) {  
795 - if ($mlp_attr) {  
796 - eval("scope[ctrlAs].model" + "." + $dcname_attr + " = $item" + "." + $icname_attr + ";");  
797 - } else {  
798 - scope[ctrlAs].model[$dcname_attr] = $item[$icname_attr];  
799 - }  
800 - }  
801 - if ($dcname2_attr && $icname2_attr) {  
802 - if ($mlp_attr) {  
803 - eval("scope[ctrlAs].model" + "." + $dcname2_attr + " = $item" + "." + $icname2_attr + ";");  
804 - } else {  
805 - scope[ctrlAs].model[$dcname2_attr] = $item[$icname2_attr];  
806 - }  
807 - }  
808 - if ($dcname3_attr && $icname3_attr) {  
809 - if ($mlp_attr) {  
810 - eval("scope[ctrlAs].model" + "." + $dcname3_attr + " = $item" + "." + $icname3_attr + ";");  
811 - } else {  
812 - scope[ctrlAs].model[$dcname3_attr] = $item[$icname3_attr];  
813 - }  
814 - }  
815 - };  
816 -  
817 - // 删除选中事件处理函数  
818 - scope[ctrlAs].$$internal_remove_fn = function() {  
819 - scope[ctrlAs].$$internalmodel = undefined;  
820 - if ($mlp_attr) {  
821 - eval("scope[ctrlAs].model" + "." + $dcname_attr + " = undefined;");  
822 - } else {  
823 - scope[ctrlAs].model[$dcname_attr] = undefined;  
824 - }  
825 -  
826 - if ($dcname2_attr) {  
827 - if ($mlp_attr) {  
828 - eval("scope[ctrlAs].model" + "." + $dcname2_attr + " = undefined;");  
829 - } else {  
830 - scope[ctrlAs].model[$dcname2_attr] = undefined;  
831 - }  
832 - }  
833 - if ($dcname3_attr) {  
834 - if ($mlp_attr) {  
835 - eval("scope[ctrlAs].model" + "." + $dcname3_attr + " = undefined;");  
836 - } else {  
837 - scope[ctrlAs].model[$dcname3_attr] = undefined;  
838 - }  
839 - }  
840 - };  
841 -  
842 - /**  
843 - * 内部方法,读取字典数据作为数据源。  
844 - * @param dicgroup 字典类型,如:gsType  
845 - * @param ccol 代码字段名  
846 - * @param ncol 名字字段名  
847 - */  
848 - scope[ctrlAs].$$internal_dic_data = function(dicgroup, ccol, ncol) {  
849 - var origin_dicgroup = dictionaryUtils.getByGroup(dicgroup);  
850 - var dic_key; // 字典key  
851 - // 清空内部数据  
852 - scope[ctrlAs].$$data_real = [];  
853 - for (dic_key in origin_dicgroup) {  
854 - var data = {}; // 重新组合的字典元素对象  
855 - if (dic_key == "true")  
856 - data[ccol] = true;  
857 - else  
858 - data[ccol] = dic_key;  
859 - data[ncol] = origin_dicgroup[dic_key];  
860 - scope[ctrlAs].$$data_real.push(data);  
861 - }  
862 - // 这里直接将$$data_real数据深拷贝到$$data  
863 - angular.copy(scope[ctrlAs].$$data_real, scope[ctrlAs].$$data);  
864 -  
865 - console.log(scope[ctrlAs].$$data);  
866 - };  
867 -  
868 - /**  
869 - * TODO:这个方法有性能问题,result一多就会卡一卡,之后再解决把  
870 - * 内部方法,读取字典数据作为数据源。  
871 - * @param result 原始数据  
872 - * @param dcvalue 传入的关联数据  
873 - */  
874 - scope[ctrlAs].$$internal_other_data = function(result, dcvalue) {  
875 - //console.log("start");  
876 - // 清空内部数据  
877 - scope[ctrlAs].$$data_real = [];  
878 - scope[ctrlAs].$$data = [];  
879 - for (var i = 0; i < result.length; i ++) {  
880 - if ($icname_s_attr) {  
881 - if ($mlp_attr) {  
882 - if (eval("result[i]" + "." + $icname_s_attr)) {  
883 - // 全拼  
884 - result[i]["fullChars"] = pinyin.getFullChars(eval("result[i]" + "." + $icname_s_attr)).toUpperCase();  
885 - // 简拼  
886 - result[i]["camelChars"] = pinyin.getCamelChars(eval("result[i]" + "." + $icname_s_attr));  
887 - }  
888 - } else {  
889 - if (result[i][$icname_s_attr]) {  
890 - // 全拼  
891 - result[i]["fullChars"] = pinyin.getFullChars(result[i][$icname_s_attr]).toUpperCase();  
892 - // 简拼  
893 - result[i]["camelChars"] = pinyin.getCamelChars(result[i][$icname_s_attr]);  
894 - }  
895 - }  
896 - }  
897 -  
898 - if (result[i]["fullChars"]) { // 有拼音的加入数据源  
899 - scope[ctrlAs].$$data_real.push(result[i]);  
900 - }  
901 -  
902 - }  
903 - //console.log("start2");  
904 -  
905 - // 数量太大取前10条记录作为显示  
906 - if (angular.isArray(scope[ctrlAs].$$data_real)) {  
907 - // 先迭代循环查找已经传过来的值  
908 - if (scope[ctrlAs].$$data_real.length > 0) {  
909 - if (dcvalue) {  
910 - for (var j = 0; j < scope[ctrlAs].$$data_real.length; j++) {  
911 - if (scope[ctrlAs].$$data_real[j][$icname_attr] == dcvalue) {  
912 - scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[j]));  
913 - break;  
914 - }  
915 - }  
916 - }  
917 - }  
918 - // 在插入剩余的数据  
919 - for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {  
920 - if (scope[ctrlAs].$$data.length < 10) {  
921 - if ($mlp_attr) {  
922 - if (eval("scope[ctrlAs].$$data_real[k]" + "." + $icname_attr + " != dcvalue")) {  
923 - scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));  
924 - }  
925 - } else {  
926 - if (scope[ctrlAs].$$data_real[k][$icname_attr] != dcvalue) {  
927 - scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));  
928 - }  
929 - }  
930 - } else {  
931 - break;  
932 - }  
933 - }  
934 - }  
935 -  
936 - //console.log("end");  
937 - };  
938 -  
939 - /**  
940 - * 判定一个对象是否为空对象。  
941 - * @param Obj  
942 - */  
943 - scope[ctrlAs].$$internal_isEmpty_obj = function(obj) {  
944 - console.log(typeof obj);  
945 -  
946 - if (typeof obj === "object" && !(obj instanceof Array)) {  
947 - for (var prop in obj) {  
948 - if (obj.hasOwnProperty(prop)) {  
949 - return false;  
950 - }  
951 - }  
952 - return true;  
953 - } else {  
954 - throw "必须是对象";  
955 - }  
956 - };  
957 -  
958 - // 刷新数据  
959 - scope[ctrlAs].$$internal_refresh_fn = function(search) {  
960 - // 绑定的model字段值,此属性是绑定属性,只能在link阶段获取  
961 - var $dcvalue_attr = attr["dcvalue"];  
962 -  
963 - console.log("刷新数据:" + $dcvalue_attr);  
964 -  
965 - if (!$$data_init) { // 只初始化$$data_real一次,重新载入页面才能重新初始化  
966 - if (dictionaryUtils.getByGroup($datatype_attr)) { // 判定是否字典类型数据源  
967 - scope[ctrlAs].$$internal_dic_data(  
968 - $datatype_attr, $icname_attr, $icname_s_attr);  
969 - if ($dcvalue_attr) {  
970 - scope[ctrlAs].$$internalmodel = $dcvalue_attr;  
971 - }  
972 - } else { // 非字典类型数据源  
973 - if (!$dataassociate_attr) {  
974 - $$searchInfoService_g[$datatype_attr].list(  
975 - {type: "all"},  
976 - function(result) {  
977 - //console.log("ok:" + $datatype_attr);  
978 - scope[ctrlAs].$$internal_other_data(result, $dcvalue_attr);  
979 - //console.log("ok2:" + $datatype_attr);  
980 - if ($dcvalue_attr) {  
981 - scope[ctrlAs].$$internalmodel = $dcvalue_attr;  
982 - }  
983 -  
984 - $$data_init = true;  
985 - },  
986 - function(result) {  
987 -  
988 - }  
989 - );  
990 - }  
991 - }  
992 - }  
993 -  
994 - if ($$data_init) {  
995 - if (search && search != "") { // 有search值  
996 - if (!dictionaryUtils.getByGroup($datatype_attr)) { // 其他数据源  
997 - // 处理search  
998 - console.log("search:" + search);  
999 -  
1000 - scope[ctrlAs].$$data = [];  
1001 - for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {  
1002 - var upTerm = search.toUpperCase();  
1003 - if (scope[ctrlAs].$$data.length < 10) {  
1004 - if (scope[ctrlAs].$$data_real[k].fullChars.indexOf(upTerm) != -1  
1005 - || scope[ctrlAs].$$data_real[k].camelChars.indexOf(upTerm) != -1) {  
1006 - scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));  
1007 - }  
1008 - } else {  
1009 - break;  
1010 - }  
1011 - }  
1012 - }  
1013 - }  
1014 -  
1015 - }  
1016 -  
1017 - };  
1018 -  
1019 -  
1020 -  
1021 -  
1022 -  
1023 -  
1024 -  
1025 -  
1026 -  
1027 -  
1028 - // TODO:  
1029 -  
1030 - // dom全部载入后调用  
1031 - $timeout(function() {  
1032 - console.log("dom全部载入后调用");  
1033 - }, 0);  
1034 - // 监控dcvalue model值变换  
1035 - attr.$observe("dcvalue", function(value) {  
1036 - console.log("监控dc1 model值变换:" + value);  
1037 - scope[ctrlAs].$$internalmodel = value;  
1038 - }  
1039 - );  
1040 - // 监控获取数据参数变换  
1041 - attr.$observe("dataparam", function(value) {  
1042 - // 判定是否空对象  
1043 - console.log(value);  
1044 - var obj = JSON.parse(value);  
1045 - var $dcvalue_attr = attr["dcvalue"];  
1046 - if (!scope[ctrlAs].$$internal_isEmpty_obj(obj)) {  
1047 - console.log("dataparam:" + obj);  
1048 -  
1049 - //  
1050 -  
1051 - obj["type"] = "all";  
1052 -  
1053 - $$data_init = false;  
1054 - $$searchInfoService_g[$datatype_attr].list(  
1055 - obj,  
1056 - function(result) {  
1057 - //console.log("ok:" + $datatype_attr);  
1058 - scope[ctrlAs].$$internal_other_data(result, $dcvalue_attr);  
1059 - //console.log("ok2:" + $datatype_attr);  
1060 - if ($dcvalue_attr) {  
1061 - scope[ctrlAs].$$internalmodel = $dcvalue_attr;  
1062 - }  
1063 -  
1064 - $$data_init = true;  
1065 - },  
1066 - function(result) {  
1067 -  
1068 - }  
1069 - );  
1070 - }  
1071 - }  
1072 - );  
1073 - }  
1074 - };  
1075 - }  
1076 - };  
1077 -  
1078 - }  
1079 -]);  
1080 -  
1081 -/**  
1082 - * saCheckboxgroup指令  
1083 - * 属性如下:  
1084 - * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave  
1085 - * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}  
1086 - * dcname(必须):绑定的model字段名,如:dcname=xl.id  
1087 - * name(必须):控件的名字  
1088 - * required(可选):是否要用required验证  
1089 - * disabled(可选):标示框是否可选  
1090 - *  
1091 - */  
1092 -angular.module('ScheduleApp').directive('saCheckboxgroup', [  
1093 - function() {  
1094 - return {  
1095 - restrict: 'E',  
1096 - templateUrl: '/pages/scheduleApp/module/common/dt/MyCheckboxGroupWrapTemplate.html',  
1097 - scope: {  
1098 - model: "=" // 独立作用域,关联外部的模型object  
1099 - },  
1100 - controllerAs: "$saCheckboxgroupCtrl",  
1101 - bindToController: true,  
1102 - controller: function($scope) {  
1103 - var self = this;  
1104 - self.$$data = []; // 内部的数据  
1105 -  
1106 - // TODO:数据写死,周一至周日选择数据,以后有别的数据再议  
1107 - self.$$data = [  
1108 - {name: "星期一", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},  
1109 - {name: "星期二", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},  
1110 - {name: "星期三", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},  
1111 - {name: "星期四", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},  
1112 - {name: "星期五", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},  
1113 - {name: "星期六", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},  
1114 - {name: "星期日", checkedvalue: "1", uncheckedvalue: "0", ischecked: false}  
1115 - ];  
1116 - },  
1117 -  
1118 - /**  
1119 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
1120 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
1121 - * @param tElem  
1122 - * @param tAttrs  
1123 - * @returns {{pre: Function, post: Function}}  
1124 - */  
1125 - compile: function(tElem, tAttrs) {  
1126 - // 获取所有的属性  
1127 - var $name_attr = tAttrs["name"]; // 控件的名字  
1128 - var $required_attr = tAttrs["required"]; // 是否需要required验证  
1129 - var $disabled_attr = tAttrs["disabled"]; // 是否禁用  
1130 - var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名  
1131 -  
1132 - // controlAs名字  
1133 - var ctrlAs = '$saCheckboxgroupCtrl';  
1134 -  
1135 - // 如果有required属性,添加angularjs required验证  
1136 - if ($required_attr != undefined) {  
1137 - //console.log(tElem.html());  
1138 - tElem.find("div").attr("required", "");  
1139 - }  
1140 - // 如果有disabled属性,添加禁用标志  
1141 - if ($disabled_attr != undefined) {  
1142 - tElem.find("input").attr("ng-disabled", "true");  
1143 - }  
1144 -  
1145 - return {  
1146 - pre: function(scope, element, attr) {  
1147 - // TODO:  
1148 - },  
1149 - /**  
1150 - * 相当于link函数。  
1151 - * @param scope  
1152 - * @param element  
1153 - * @param attr  
1154 - */  
1155 - post: function(scope, element, attr) {  
1156 - // name属性  
1157 - if ($name_attr) {  
1158 - scope[ctrlAs]["$name_attr"] = $name_attr;  
1159 - }  
1160 -  
1161 - /**  
1162 - * checkbox选择事件处理函数。  
1163 - * @param $d 数据对象,$$data中的元素对象  
1164 - */  
1165 - scope[ctrlAs].$$internal_updateCheck_fn = function($d) {  
1166 - $d.ischecked = !$d.ischecked;  
1167 - console.log($d);  
1168 - };  
1169 -  
1170 - // 测试使用watch监控$$data的变化  
1171 - scope.$watch(  
1172 - function() {  
1173 - return scope[ctrlAs]["$$data"];  
1174 - },  
1175 - function(newValue, oldValue) {  
1176 - // 根据$$data生成对应的数据  
1177 - var rule_days_arr = [];  
1178 - var i;  
1179 - for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {  
1180 - if (scope[ctrlAs]["$$data"][i].ischecked)  
1181 - rule_days_arr.push(scope[ctrlAs]["$$data"][i].checkedvalue);  
1182 - else  
1183 - rule_days_arr.push(scope[ctrlAs]["$$data"][i].uncheckedvalue);  
1184 - }  
1185 - scope[ctrlAs].$$internalmodel = rule_days_arr.join(",");  
1186 - //scope[ctrlAs].$$internalmodel = undefined;  
1187 - console.log("bbbbbbbb--->" + scope[ctrlAs].$$internalmodel);  
1188 -  
1189 - // 更新model  
1190 - if ($dcname_attr) {  
1191 - eval("scope[ctrlAs].model" + "." + $dcname_attr + " = rule_days_arr.join(',');");  
1192 - }  
1193 -  
1194 -  
1195 - },  
1196 - true  
1197 - );  
1198 -  
1199 - // TODO:  
1200 -  
1201 - // 监控dcvalue model值变换  
1202 - attr.$observe("dcvalue", function(value) {  
1203 - console.log("saCheckboxgroup 监控dc1 model值变换:" + value);  
1204 - if (value) {  
1205 - // 根据value值,修改$$data里的值  
1206 - var data_array = value.split(",");  
1207 - var i;  
1208 - if (data_array.length > scope[ctrlAs]["$$data"].length) {  
1209 - for (i = 0; i < scope[ctrlAs]["$$data"].length; i ++) {  
1210 - if (data_array[i] == scope[ctrlAs]["$$data"][i].checkedvalue) {  
1211 - scope[ctrlAs]["$$data"][i].ischecked = true;  
1212 - } else {  
1213 - scope[ctrlAs]["$$data"][i].ischecked = false;  
1214 - }  
1215 - }  
1216 - } else {  
1217 - for (i = 0; i < data_array.length; i ++) {  
1218 - if (data_array[i] == scope[ctrlAs]["$$data"][i].checkedvalue) {  
1219 - scope[ctrlAs]["$$data"][i].ischecked = true;  
1220 - } else {  
1221 - scope[ctrlAs]["$$data"][i].ischecked = false;  
1222 - }  
1223 - }  
1224 - }  
1225 -  
1226 - }  
1227 - });  
1228 - }  
1229 -  
1230 - };  
1231 -  
1232 -  
1233 - }  
1234 -  
1235 - };  
1236 - }  
1237 -]);  
1238 -  
1239 -/**  
1240 - * saDategroup指令  
1241 - * 属性如下:  
1242 - * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave  
1243 - * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}  
1244 - * dcname(必须):绑定的model字段名,如:dcname=xl.id  
1245 - * name(必须):控件的名字  
1246 - * required(可选):是否要用required验证  
1247 - * disabled(可选):标示框是否可选  
1248 - *  
1249 - */  
1250 -angular.module('ScheduleApp').directive('saDategroup', [  
1251 - '$filter',  
1252 - function($filter) {  
1253 - return {  
1254 - restrict: 'E',  
1255 - templateUrl: '/pages/scheduleApp/module/common/dt/MyDateGroupWrapTemplate.html',  
1256 - scope: {  
1257 - model: "=" // 独立作用域,关联外部的模型object  
1258 - },  
1259 - controllerAs: "$saDategroupCtrl",  
1260 - bindToController: true,  
1261 - controller: function($scope) {  
1262 - var self = this;  
1263 - self.$$data = []; // 内部的数据  
1264 - self.$$date_select; // 内部选中的日期  
1265 -  
1266 - //// 测试数据  
1267 - //self.$$data = [  
1268 - // {datestr: '2011-01-01', ischecked: true},  
1269 - // {datestr: '2011-01-01', ischecked: true},  
1270 - // {datestr: '2011-01-01', ischecked: true}  
1271 - //];  
1272 - },  
1273 -  
1274 - /**  
1275 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
1276 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
1277 - * @param tElem  
1278 - * @param tAttrs  
1279 - * @returns {{pre: Function, post: Function}}  
1280 - */  
1281 - compile: function(tElem, tAttrs) {  
1282 - // 获取所有的属性  
1283 - var $name_attr = tAttrs["name"]; // 控件的名字  
1284 - var $required_attr = tAttrs["required"]; // 是否需要required验证  
1285 - var $disabled_attr = tAttrs["disabled"]; // 是否禁用  
1286 - var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名  
1287 -  
1288 - // controlAs名字  
1289 - var ctrlAs = '$saDategroupCtrl';  
1290 -  
1291 - // 如果有required属性,添加angularjs required验证  
1292 - if ($required_attr != undefined) {  
1293 - //console.log(tElem.html());  
1294 - tElem.find("div").attr("required", "");  
1295 - }  
1296 - // 如果有disabled属性,添加禁用标志  
1297 - if ($disabled_attr != undefined) {  
1298 - tElem.find("input").attr("ng-disabled", "true");  
1299 - tElem.find("div").attr("ng-disabled", "true");  
1300 - }  
1301 -  
1302 - return {  
1303 - pre: function (scope, element, attr) {  
1304 - // TODO:  
1305 - },  
1306 - /**  
1307 - * 相当于link函数。  
1308 - * @param scope  
1309 - * @param element  
1310 - * @param attr  
1311 - */  
1312 - post: function (scope, element, attr) {  
1313 - // name属性  
1314 - if ($name_attr) {  
1315 - scope[ctrlAs]["$name_attr"] = $name_attr;  
1316 - }  
1317 -  
1318 -  
1319 - // 日期open属性,及方法  
1320 - scope[ctrlAs].$$specialDateOpen = false;  
1321 - scope[ctrlAs].$$specialDate_open = function() {  
1322 - scope[ctrlAs].$$specialDateOpen = true;  
1323 - };  
1324 -  
1325 - // 监控选择的日期  
1326 - scope.$watch(  
1327 - function() {  
1328 - return scope[ctrlAs]['$$date_select'];  
1329 - },  
1330 - function(newValue, oldValue) {  
1331 - if (newValue) {  
1332 - //console.log("saDategroup--->selectdate:" + newValue);  
1333 - // 调用内置filter,转换日期到yyyy-MM-dd格式  
1334 - var text = $filter('date')(newValue, 'yyyy-MM-dd');  
1335 - var i;  
1336 - var isexist = false; // 日期是否已经选择标识  
1337 - for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {  
1338 - if (scope[ctrlAs]["$$data"][i].datestr == text) {  
1339 - isexist = true;  
1340 - break;  
1341 - }  
1342 - }  
1343 - if (!isexist) {  
1344 - scope[ctrlAs]["$$data"].push(  
1345 - {  
1346 - datestr: text,  
1347 - ischecked: true  
1348 - }  
1349 - );  
1350 - }  
1351 -  
1352 - }  
1353 -  
1354 - }  
1355 - );  
1356 -  
1357 - /**  
1358 - * 日期点击事件处理函数。  
1359 - * @param $index 索引  
1360 - */  
1361 - scope[ctrlAs].$$internal_datestr_click = function($index) {  
1362 - scope[ctrlAs].$$data.splice($index, 1);  
1363 - };  
1364 -  
1365 - // 测试使用watch监控$$data的变化  
1366 - scope.$watch(  
1367 - function() {  
1368 - return scope[ctrlAs]['$$data'];  
1369 - },  
1370 - function(newValue, oldValue) {  
1371 - // 根据$$data生成对应的数据  
1372 - var special_days_arr = [];  
1373 - var i;  
1374 - for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {  
1375 - special_days_arr.push(scope[ctrlAs]["$$data"][i].datestr);  
1376 - }  
1377 -  
1378 - scope[ctrlAs].$$internalmodel = special_days_arr.join(",");  
1379 - console.log("bbbbbbbb--->" + scope[ctrlAs].$$internalmodel);  
1380 -  
1381 - // 更新model  
1382 - if ($dcname_attr) {  
1383 - eval("scope[ctrlAs].model" + "." + $dcname_attr + " = special_days_arr.join(',');");  
1384 - }  
1385 - },  
1386 - true  
1387 - );  
1388 -  
1389 - // 监控dcvalue model值变换  
1390 - attr.$observe("dcvalue", function(value) {  
1391 - console.log("saDategroup 监控dc1 model值变换:" + value);  
1392 - if (value) {  
1393 - // 根据value值,修改$$data里的值  
1394 - var date_array = value.split(",");  
1395 - var i;  
1396 - scope[ctrlAs]["$$data"] = [];  
1397 - for (i = 0; i < date_array.length; i++) {  
1398 - scope[ctrlAs]["$$data"].push(  
1399 - {  
1400 - datestr: date_array[i],  
1401 - ischecked: true  
1402 - }  
1403 - );  
1404 - }  
1405 -  
1406 -  
1407 -  
1408 -  
1409 -  
1410 -  
1411 -  
1412 -  
1413 -  
1414 - }  
1415 - });  
1416 -  
1417 - }  
1418 -  
1419 - };  
1420 - }  
1421 - }  
1422 - }  
1423 -]);  
1424 -  
1425 -/**  
1426 - * saGuideboardgroup指令  
1427 - * 属性如下:  
1428 - * name(必须):控件的名字  
1429 - * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave  
1430 - * xlidvalue(必须):绑定的model线路id值,如:xlidvalue={{ctrl.employeeInfoForSave.xl.id}}  
1431 - * lprangevalue(必须):绑定的model路牌名字范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}  
1432 - * lprangename(必须):绑定的model路牌名字范围字段名,如:lprangename=lprange  
1433 - * lpidrangevalue(必须):绑定的model路牌id范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}  
1434 - * lpidrangename(必须):绑定的model路牌id范围字段名,如:lprangename=lprange  
1435 - * lpstartvalue(必须):绑定的model起始路牌值,如:lpstartvalue={{ctrl.employeeInfoForSave.lpstart}}  
1436 - * lpstartname(必须):绑定的model起始路牌字段名,如:lpstartname=lpstart  
1437 - *  
1438 - * required(可选):是否要用required验证  
1439 - *  
1440 - */  
1441 -angular.module('ScheduleApp').directive('saGuideboardgroup', [  
1442 - 'GuideboardManageService_g',  
1443 - function(guideboardManageService_g) {  
1444 - return {  
1445 - restrict: 'E',  
1446 - templateUrl: '/pages/scheduleApp/module/common/dt/MyGuideboardGroupWrapTemplate.html',  
1447 - scope: {  
1448 - model: "=" // 独立作用域,关联外部的模型object  
1449 - },  
1450 - controllerAs: '$saGuideboardgroupCtrl',  
1451 - bindToController: true,  
1452 - controller: function($scope) {  
1453 - var self = this;  
1454 - self.$$data = []; // 选择线路后,该线路的路牌数据  
1455 -  
1456 - // 测试数据  
1457 - //self.$$data = [  
1458 - // {lpid: 1, lpname: '路1', isstart: false},  
1459 - // {lpid: 2, lpname: '路2', isstart: true},  
1460 - // {lpid: 3, lpname: '路3', isstart: false}  
1461 - //];  
1462 -  
1463 -  
1464 - self.$$dataSelected = []; // 选中的路牌列表  
1465 - self.$$dataSelectedStart = undefined; // 起始路牌  
1466 -  
1467 - //self.$$dataSelected = [  
1468 - // {lpid: 11, lpname: '路11', isstart: false},  
1469 - // {lpid: 12, lpname: '路12', isstart: true},  
1470 - // {lpid: 13, lpname: '路13', isstart: false}  
1471 - //];  
1472 -  
1473 - // saGuideboardgroup组件的ng-model,用于外部绑定等操作  
1474 - self.$$internalmodel = undefined;  
1475 -  
1476 - self.$$data_init = false; // *数据源初始化标志  
1477 - self.$$data_xl_first_init = false; // 线路是否初始化  
1478 - self.$$data_lp_first_init = false; // 路牌名字是否初始化  
1479 - self.$$data_lpid_first_init = false; // 路牌id是否初始化  
1480 - self.$$data_lpstart_first_init = false; // 起始路牌是否初始化  
1481 -  
1482 - },  
1483 -  
1484 - /**  
1485 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
1486 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
1487 - * @param tElem  
1488 - * @param tAttrs  
1489 - * @returns {{pre: Function, post: Function}}  
1490 - */  
1491 - compile: function(tElem, tAttrs) {  
1492 - // TODO:获取所有的属性  
1493 - var $name_attr = tAttrs["name"]; // 控件的名字  
1494 - var $required_attr = tAttrs["required"]; // 是否需要required验证  
1495 - var $lprangename_attr = tAttrs["lprangename"]; // 绑定的model路牌名字范围字段名  
1496 - var $lpidrangename_attr = tAttrs["lpidrangename"]; // 绑定的model路牌id范围字段名  
1497 - var $lpstartname_attr = tAttrs["lpstartname"]; // 绑定的model起始路牌字段名  
1498 -  
1499 - // controlAs名字  
1500 - var ctrlAs = '$saGuideboardgroupCtrl';  
1501 -  
1502 - // 如果有required属性,添加angularjs required验证  
1503 - if ($required_attr != undefined) {  
1504 - //console.log(tElem.html());  
1505 - tElem.find("div").attr("required", "");  
1506 - }  
1507 -  
1508 - return {  
1509 - pre: function(scope, element, attr) {  
1510 - // TODO:  
1511 - },  
1512 -  
1513 - /**  
1514 - * 相当于link函数。  
1515 - * @param scope  
1516 - * @param element  
1517 - * @param attr  
1518 - */  
1519 - post: function(scope, element, attr) {  
1520 - // name属性  
1521 - if ($name_attr) {  
1522 - scope[ctrlAs]["$name_attr"] = $name_attr;  
1523 - }  
1524 -  
1525 - // TODO:  
1526 -  
1527 -  
1528 - /**  
1529 - * 路牌列表点击(路牌列表中选中路牌)  
1530 - * @param $index  
1531 - */  
1532 - scope[ctrlAs].$$internal_lplist_click = function($index) {  
1533 - var data_temp = scope[ctrlAs].$$data;  
1534 - if (data_temp && data_temp.length > $index) {  
1535 - scope[ctrlAs].$$dataSelected.push({  
1536 - lpid: data_temp[$index].lpid,  
1537 - lpname: data_temp[$index].lpname,  
1538 - isstart: data_temp[$index].isstart  
1539 - });  
1540 -  
1541 - // 如果没有指定过初始路牌,默认选择此路牌作为起始路牌  
1542 - if (scope[ctrlAs].$$dataSelectedStart == undefined) {  
1543 - scope[ctrlAs].$$internal_sellplist_click(  
1544 - scope[ctrlAs].$$dataSelected.length - 1);  
1545 - }  
1546 - }  
1547 - };  
1548 - /**  
1549 - * 选中的路牌单击(初始路牌选择)  
1550 - * @param $index  
1551 - */  
1552 - scope[ctrlAs].$$internal_sellplist_click = function($index) {  
1553 - var data_temp = scope[ctrlAs].$$dataSelected;  
1554 - if (data_temp && data_temp.length > $index) {  
1555 - for (var i = 0; i < data_temp.length; i++) {  
1556 - data_temp[i].isstart = false;  
1557 - }  
1558 - data_temp[$index].isstart = true;  
1559 - scope[ctrlAs].$$dataSelectedStart = $index;  
1560 - }  
1561 - };  
1562 - /**  
1563 - * 选中的路牌双击(删除选中的路牌)  
1564 - * @param $index  
1565 - */  
1566 - scope[ctrlAs].$$internal_sellplist_dbclick = function($index) {  
1567 - var data_temp = scope[ctrlAs].$$dataSelected;  
1568 - if (data_temp && data_temp.length > $index) {  
1569 - if (scope[ctrlAs].$$dataSelectedStart == $index) {  
1570 - scope[ctrlAs].$$dataSelectedStart = undefined;  
1571 - }  
1572 - data_temp.splice($index, 1);  
1573 - }  
1574 - };  
1575 -  
1576 -  
1577 - /**  
1578 - * 验证内部数据,更新外部model  
1579 - */  
1580 - scope[ctrlAs].$$internal_validate_model = function() {  
1581 - var data_temp = scope[ctrlAs].$$dataSelected;  
1582 - var data_temp2 = scope[ctrlAs].$$dataSelectedStart;  
1583 - var lpNames = [];  
1584 - var lpIds = [];  
1585 - var lpStart = 0;  
1586 - var i = 0;  
1587 -  
1588 - if (data_temp &&  
1589 - data_temp.length > 0 &&  
1590 - data_temp2 != undefined) {  
1591 -  
1592 - for (i = 0; i < data_temp.length; i++) {  
1593 - lpNames.push(data_temp[i].lpname);  
1594 - lpIds.push(data_temp[i].lpid)  
1595 - }  
1596 - data_temp[data_temp2].isstart = true;  
1597 - lpStart = data_temp2 + 1;  
1598 -  
1599 - // 更新内部model,用于外部验证  
1600 - // 内部model的值暂时随意,以后再改  
1601 - scope[ctrlAs].$$internalmodel = {desc: "ok"};  
1602 -  
1603 - // 更新外部model字段  
1604 - if ($lprangename_attr) {  
1605 - console.log("lprangename=" + lpNames.join(','));  
1606 - eval("scope[ctrlAs].model" + "." + $lprangename_attr + " = lpNames.join(',');");  
1607 - }  
1608 - if ($lpidrangename_attr) {  
1609 - console.log("lpidrangename=" + lpIds.join(','));  
1610 - eval("scope[ctrlAs].model" + "." + $lpidrangename_attr + " = lpIds.join(',');");  
1611 - }  
1612 - if ($lpstartname_attr) {  
1613 - console.log("lpstartname=" + lpStart);  
1614 - eval("scope[ctrlAs].model" + "." + $lpstartname_attr + " = lpStart;");  
1615 - }  
1616 -  
1617 - } else {  
1618 - scope[ctrlAs].$$internalmodel = undefined;  
1619 - }  
1620 -  
1621 -  
1622 - };  
1623 -  
1624 - // 监控内部数据,$$data_selected 变化  
1625 - scope.$watch(  
1626 - function() {  
1627 - return scope[ctrlAs].$$dataSelected;  
1628 - },  
1629 - function(newValue, oldValue) {  
1630 - scope[ctrlAs].$$internal_validate_model();  
1631 - },  
1632 - true  
1633 - );  
1634 -  
1635 - // 监控内部数据,$$data_selected_start 变化  
1636 - scope.$watch(  
1637 - function() {  
1638 - return scope[ctrlAs].$$dataSelectedStart;  
1639 - },  
1640 - function(newValue, oldValue) {  
1641 - scope[ctrlAs].$$internal_validate_model();  
1642 - },  
1643 - true  
1644 - );  
1645 -  
1646 - /**  
1647 - * 验证数据是否初始化完成,  
1648 - * 所谓的初始化就是内部所有的数据被有效设定过一次。  
1649 - */  
1650 - scope[ctrlAs].$$internal_validate_init = function() {  
1651 - var self = scope[ctrlAs];  
1652 -  
1653 - if (self.$$data_xl_first_init &&  
1654 - self.$$data_lp_first_init &&  
1655 - self.$$data_lpid_first_init &&  
1656 - self.$$data_lpstart_first_init) {  
1657 - console.log("数据初始化完毕!");  
1658 - self.$$data_init = true;  
1659 - }  
1660 -  
1661 - };  
1662 -  
1663 - // 监控初始化标志,线路,路牌,路牌id,起始路牌  
1664 - scope.$watch(  
1665 - function() {  
1666 - return scope[ctrlAs].$$data_xl_first_init;  
1667 - },  
1668 - function(newValue, oldValue) {  
1669 - scope[ctrlAs].$$internal_validate_init();  
1670 - }  
1671 - );  
1672 - scope.$watch(  
1673 - function() {  
1674 - return scope[ctrlAs].$$data_lp_first_init;  
1675 - },  
1676 - function(newValue, oldValue) {  
1677 - scope[ctrlAs].$$internal_validate_init();  
1678 - }  
1679 - );  
1680 - scope.$watch(  
1681 - function() {  
1682 - return scope[ctrlAs].$$data_lpid_first_init;  
1683 - },  
1684 - function(newValue, oldValue) {  
1685 - scope[ctrlAs].$$internal_validate_init();  
1686 - }  
1687 - );  
1688 - scope.$watch(  
1689 - function() {  
1690 - return scope[ctrlAs].$$data_lpstart_first_init;  
1691 - },  
1692 - function(newValue, oldValue) {  
1693 - scope[ctrlAs].$$internal_validate_init();  
1694 - }  
1695 - );  
1696 -  
1697 -  
1698 - // 监控线路id的变化  
1699 - attr.$observe("xlidvalue", function(value) {  
1700 - if (value && value != "") {  
1701 - console.log("xlidvalue=" + value);  
1702 -  
1703 - guideboardManageService_g.rest.list(  
1704 - {"xl.id_eq": value, size: 100},  
1705 - function(result) {  
1706 - // 获取值了  
1707 - console.log("路牌获取了");  
1708 -  
1709 - scope[ctrlAs].$$data = [];  
1710 - for (var i = 0; i < result.content.length; i++) {  
1711 - scope[ctrlAs].$$data.push({  
1712 - lpid: result.content[i].id,  
1713 - lpname: result.content[i].lpName,  
1714 - isstart: false  
1715 - });  
1716 - }  
1717 - if (scope[ctrlAs].$$data_init) {  
1718 - scope[ctrlAs].$$dataSelected = [];  
1719 - scope[ctrlAs].$$dataSelectedStart = undefined;  
1720 - scope[ctrlAs].$$internalmodel = undefined;  
1721 - }  
1722 - scope[ctrlAs].$$data_xl_first_init = true;  
1723 - },  
1724 - function(result) {  
1725 -  
1726 - }  
1727 - );  
1728 -  
1729 - }  
1730 - });  
1731 -  
1732 - // 监控路牌名称范围值的变化  
1733 - attr.$observe("lprangevalue", function(value) {  
1734 - if (value && value != "") {  
1735 - var data_temp = scope[ctrlAs].$$dataSelected;  
1736 - var lpnames = value.split(",");  
1737 - var i = 0;  
1738 - if (data_temp && data_temp.length == 0) { // 初始创建  
1739 - console.log("lprangevalue变换了");  
1740 - for (i = 0; i < lpnames.length; i++) {  
1741 - scope[ctrlAs].$$dataSelected.push({  
1742 - lpname: lpnames[i],  
1743 - isstart: false  
1744 - });  
1745 - }  
1746 - } else {  
1747 - for (i = 0; i < lpnames.length; i++) {  
1748 - data_temp[i].lpname = lpnames[i];  
1749 - }  
1750 - }  
1751 - scope[ctrlAs].$$data_lp_first_init = true;  
1752 - }  
1753 - });  
1754 -  
1755 - // 监控路牌id范围值的变化  
1756 - attr.$observe("lpidrangevalue", function(value) {  
1757 - if (value && value != "") {  
1758 - console.log("lpidrangevalue=" + value);  
1759 - var data_temp = scope[ctrlAs].$$dataSelected;  
1760 - var lpids = value.split(",");  
1761 - var i = 0;  
1762 - if (data_temp && data_temp.length == 0) { // 初始创建  
1763 - console.log("lpidrangevalue");  
1764 - for (i = 0; i < lpids.length; i++) {  
1765 - scope[ctrlAs].$$dataSelected.push({  
1766 - lpid: lpids[i],  
1767 - isstart: false  
1768 - });  
1769 - }  
1770 - } else {  
1771 - for (i = 0; i < lpids.length; i++) {  
1772 - data_temp[i].lpid = lpids[i];  
1773 - }  
1774 - }  
1775 - scope[ctrlAs].$$data_lpid_first_init = true;  
1776 - }  
1777 - });  
1778 -  
1779 - // 监控起始路牌的变化  
1780 - attr.$observe("lpstartvalue", function(value) {  
1781 - if (value && value != "") {  
1782 - scope[ctrlAs].$$dataSelectedStart = value - 1;  
1783 - scope[ctrlAs].$$data_lpstart_first_init = true;  
1784 - }  
1785 - });  
1786 -  
1787 -  
1788 -  
1789 - }  
1790 - }  
1791 -  
1792 - }  
1793 - }  
1794 - }  
1795 -]);  
1796 -  
1797 -/**  
1798 - * saEmployeegroup指令  
1799 - * 属性如下:  
1800 - * name(必须):控件的名字  
1801 - * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave  
1802 - * xlidvalue(必须):绑定的model线路id值,如:xlidvalue={{ctrl.employeeInfoForSave.xl.id}}  
1803 - * dbbmrangevalue(必须):绑定的model搭班编码范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}  
1804 - * dbbmrangename(必须):绑定的model搭班编码范围字段名,如:lprangename=lprange  
1805 - * rycidrangevalue(必须):绑定的model人员配置idid范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}  
1806 - * rycidrangename(必须):绑定的model人员配置id范围字段名,如:lprangename=lprange  
1807 - * rystartvalue(必须):绑定的model起始人员,如:lpstartvalue={{ctrl.employeeInfoForSave.lpstart}}  
1808 - * rystartname(必须):绑定的model起始人员字段名,如:lpstartname=lpstart  
1809 - *  
1810 - * required(可选):是否要用required验证  
1811 - *  
1812 - */  
1813 -angular.module('ScheduleApp').directive('saEmployeegroup', [  
1814 - 'EmployeeConfigService_g',  
1815 - function(employeeConfigService_g) {  
1816 - return {  
1817 - restrict: 'E',  
1818 - templateUrl: '/pages/scheduleApp/module/common/dt/MyEmployeeGroupWrapTemplate.html',  
1819 - scope: {  
1820 - model: "=" // 独立作用域,关联外部的模型object  
1821 - },  
1822 - controllerAs: '$saEmployeegroupCtrl',  
1823 - bindToController: true,  
1824 - controller: function($scope) {  
1825 - var self = this;  
1826 - self.$$data = []; // 选择线路后,该线路的人员配置数据  
1827 -  
1828 - // 测试数据  
1829 - //self.$$data = [  
1830 - // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1'},  
1831 - // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2'},  
1832 - // {id: 3, dbbm: "3", jsy: '忍3', spy: '守3'}  
1833 - //];  
1834 -  
1835 - self.$$dataSelected = []; // 选中的人员配置列表  
1836 - self.$$dataSelectedStart = undefined; // 起始人员配置  
1837 -  
1838 - //self.$$dataSelected = [  
1839 - // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isstart: false},  
1840 - // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true},  
1841 - // {id: 3, dbbm: "3", jsy: '忍3', spy: '守3', isstart: false}  
1842 - //];  
1843 -  
1844 - self.$$isFB = false; // 是否分班  
1845 - self.$$dataFBSelected = []; // 选中的分班人员组配置列表  
1846 - self.$$dataFBInternalSelected = undefined; // 分班组内人员选中标识  
1847 - self.$$dataFBSelectedStart = undefined; // 选中的起始分班人员组合  
1848 -  
1849 - //self.$$dataFBSelected = [  
1850 - // {isstart: true, group: [  
1851 - // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isselected: false},  
1852 - // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true}  
1853 - // ]},  
1854 - // {isstart: false, group: [  
1855 - // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isselected: false},  
1856 - // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true}  
1857 - // ]}  
1858 - //];  
1859 -  
1860 - // saGuideboardgroup组件的ng-model,用于外部绑定等操作  
1861 - self.$$internalmodel = undefined;  
1862 -  
1863 - self.$$data_init = false; // *数据源初始化标志  
1864 - self.$$data_xl_first_init = false; // 线路是否初始化  
1865 - self.$$data_ry_first_init = false; // 人员配置是否初始化  
1866 - self.$$data_ry_first_data = undefined; // 人员配置初始化数据  
1867 - self.$$data_rycid_first_init = false; // 人员配置id是否初始化  
1868 - self.$$data_rycid_first_data = undefined; // 人员配置id初始化数据  
1869 - self.$$data_rystart_first_init = false; // 起始人员是否初始化  
1870 - self.$$data_rystart_first_data = undefined; // 起始人员初始化数据  
1871 -  
1872 - },  
1873 -  
1874 - /**  
1875 - * 此阶段可以改dom结构,此时angular还没扫描指令,  
1876 - * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。  
1877 - * @param tElem  
1878 - * @param tAttrs  
1879 - * @returns {{pre: Function, post: Function}}  
1880 - */  
1881 - compile: function(tElem, tAttrs) {  
1882 - // TODO:获取所有的属性  
1883 - var $name_attr = tAttrs["name"]; // 控件的名字  
1884 - var $required_attr = tAttrs["required"]; // 是否需要required验证  
1885 - var $dbbmrangename_attr = tAttrs["dbbmrangename"]; // 绑定的model搭班编码范围字段名  
1886 - var rycidrangename_attr = tAttrs["rycidrangename"]; // 绑定的model人员配置id范围字段名  
1887 - var $rystartname_attr = tAttrs["rystartname"]; // 绑定的model起始人员字段名  
1888 -  
1889 - // controlAs名字  
1890 - var ctrlAs = '$saEmployeegroupCtrl';  
1891 -  
1892 - // 如果有required属性,添加angularjs required验证  
1893 - if ($required_attr != undefined) {  
1894 - //console.log(tElem.html());  
1895 - tElem.find("div").attr("required", "");  
1896 - }  
1897 -  
1898 - return {  
1899 - pre: function(scope, element, attr) {  
1900 - // TODO:  
1901 - },  
1902 -  
1903 - /**  
1904 - * 相当于link函数。  
1905 - * @param scope  
1906 - * @param element  
1907 - * @param attr  
1908 - */  
1909 - post: function(scope, element, attr) {  
1910 - // name属性  
1911 - if ($name_attr) {  
1912 - scope[ctrlAs]["$name_attr"] = $name_attr;  
1913 - }  
1914 -  
1915 - /**  
1916 - * 人员配置列表点击(人员配置列表中选中路牌)  
1917 - * @param $index  
1918 - */  
1919 - scope[ctrlAs].$$internal_rylist_click = function($index) {  
1920 - var data_temp = scope[ctrlAs].$$data;  
1921 - if (data_temp && data_temp.length > $index) {  
1922 - if (!scope[ctrlAs].$$isFB) { // 不分班  
1923 - scope[ctrlAs].$$dataSelected.push({  
1924 - id : data_temp[$index].id,  
1925 - dbbm: data_temp[$index].dbbm,  
1926 - jsy: data_temp[$index].jsy,  
1927 - spy: data_temp[$index].spy,  
1928 - isstart: false  
1929 - });  
1930 -  
1931 - // 如果没有指定过初始人员,默认选择此人员作为起始人员  
1932 - if (scope[ctrlAs].$$dataSelectedStart == undefined) {  
1933 - scope[ctrlAs].$$internal_selrylist_click(  
1934 - scope[ctrlAs].$$dataSelected.length - 1);  
1935 - }  
1936 - } else { // 分班  
1937 - if (scope[ctrlAs].$$dataFBInternalSelected) { // 替换组内人员  
1938 - scope[ctrlAs].$$dataFBSelected  
1939 - [scope[ctrlAs].$$dataFBInternalSelected.gindex].group  
1940 - [scope[ctrlAs].$$dataFBInternalSelected.index] = {  
1941 - id : data_temp[$index].id,  
1942 - dbbm: data_temp[$index].dbbm,  
1943 - jsy: data_temp[$index].jsy,  
1944 - spy: data_temp[$index].spy,  
1945 - isselected: true  
1946 - };  
1947 -  
1948 - } else {  
1949 - scope[ctrlAs].$$dataFBSelected.push({  
1950 - isstart: false,  
1951 - group: [].concat(  
1952 - {  
1953 - id : data_temp[$index].id,  
1954 - dbbm: data_temp[$index].dbbm,  
1955 - jsy: data_temp[$index].jsy,  
1956 - spy: data_temp[$index].spy,  
1957 - isselected: false  
1958 - }, {  
1959 - id : data_temp[$index].id,  
1960 - dbbm: data_temp[$index].dbbm,  
1961 - jsy: data_temp[$index].jsy,  
1962 - spy: data_temp[$index].spy,  
1963 - isselected: false  
1964 - }  
1965 - )  
1966 - });  
1967 - if (scope[ctrlAs].$$dataFBSelectedStart == undefined) {  
1968 - scope[ctrlAs].$$internal_selrygrouplist_click(  
1969 - scope[ctrlAs].$$dataFBSelected.length - 1);  
1970 - }  
1971 - }  
1972 - }  
1973 -  
1974 - }  
1975 - };  
1976 -  
1977 - /**  
1978 - * 选中的人员单击(初始人员选择)  
1979 - * @param $index  
1980 - */  
1981 - scope[ctrlAs].$$internal_selrylist_click = function($index) {  
1982 - var data_temp = scope[ctrlAs].$$dataSelected;  
1983 - if (data_temp && data_temp.length > $index) {  
1984 - for (var i = 0; i < data_temp.length; i++) {  
1985 - data_temp[i].isstart = false;  
1986 - }  
1987 - data_temp[$index].isstart = true;  
1988 - scope[ctrlAs].$$dataSelectedStart = $index;  
1989 - }  
1990 - };  
1991 - /**  
1992 - * 选中的人员双击(删除选中的人员)  
1993 - * @param $index  
1994 - */  
1995 - scope[ctrlAs].$$internal_selrylist_dbclick = function($index) {  
1996 - var data_temp = scope[ctrlAs].$$dataSelected;  
1997 - if (data_temp && data_temp.length > $index) {  
1998 - if (scope[ctrlAs].$$dataSelectedStart == $index) {  
1999 - scope[ctrlAs].$$dataSelectedStart = undefined;  
2000 - }  
2001 - data_temp.splice($index, 1);  
2002 - }  
2003 - };  
2004 -  
2005 - /**  
2006 - * 选中的分班组人员单击(初始人员选择)  
2007 - * @param $index  
2008 - */  
2009 - scope[ctrlAs].$$internal_selrygrouplist_click = function($index) {  
2010 - var data_temp = scope[ctrlAs].$$dataFBSelected;  
2011 - if (data_temp && data_temp.length > $index) {  
2012 - for (var i = 0; i < data_temp.length; i++) {  
2013 - data_temp[i].isstart = false;  
2014 - for (var j = 0; j < data_temp[i].group.length; j++) {  
2015 - data_temp[i].group[j].isselected = false;  
2016 - }  
2017 - }  
2018 - data_temp[$index].isstart = true;  
2019 - scope[ctrlAs].$$dataFBSelectedStart = $index;  
2020 - scope[ctrlAs].$$dataFBInternalSelected = undefined;  
2021 - }  
2022 - };  
2023 - /**  
2024 - * 分组内部单击(选中分班中的某组人员)  
2025 - * @param $groupindex 组index  
2026 - * @param $index 组内部某个index  
2027 - * @param $event 事件防止冒泡  
2028 - */  
2029 - scope[ctrlAs].$$internal_selrygroup_click = function($groupindex, $index, $event) {  
2030 - var data_temp = scope[ctrlAs].$$dataFBSelected;  
2031 - if (data_temp && data_temp.length > $groupindex) {  
2032 - if (data_temp[$groupindex].group && data_temp[$groupindex].group.length > $index) {  
2033 - // $$dataFBInternalSelected的格式如下:  
2034 - //{gindex: 1, index: 0}  
2035 - for (var i = 0; i < data_temp.length; i++) {  
2036 - data_temp[i].isstart = false;  
2037 - for (var j = 0; j < data_temp[i].group.length; j++) {  
2038 - data_temp[i].group[j].isselected = false;  
2039 - }  
2040 - }  
2041 - data_temp[$groupindex].group[$index].isselected = true;  
2042 - scope[ctrlAs].$$dataFBInternalSelected = {  
2043 - gindex: $groupindex, index: $index  
2044 - };  
2045 - scope[ctrlAs].$$dataFBSelectedStart = undefined;  
2046 - $event.stopPropagation();  
2047 - }  
2048 - }  
2049 -  
2050 - };  
2051 - /**  
2052 - * 选中的分班人员双击(删除选中的人员)  
2053 - * @param $index  
2054 - */  
2055 - scope[ctrlAs].$$internal_selrygrouplist_dbclick = function($index) {  
2056 - var data_temp = scope[ctrlAs].$$dataFBSelected;  
2057 - if (data_temp && data_temp.length > $index) {  
2058 - if (scope[ctrlAs].$$dataFBSelectedStart == $index) {  
2059 - scope[ctrlAs].$$dataFBSelectedStart = undefined;  
2060 - }  
2061 - if (scope[ctrlAs].$$dataFBInternalSelected &&  
2062 - scope[ctrlAs].$$dataFBInternalSelected.gindex == $index) {  
2063 - scope[ctrlAs].$$dataFBInternalSelected = undefined;  
2064 - }  
2065 - data_temp.splice($index, 1);  
2066 - }  
2067 - };  
2068 -  
2069 - /**  
2070 - * 验证内部数据,更新外部model  
2071 - */  
2072 - scope[ctrlAs].$$internal_validate_model = function() {  
2073 - var data_temp = scope[ctrlAs].$$dataSelected;  
2074 - var data_temp2 = scope[ctrlAs].$$dataSelectedStart;  
2075 - var data_temp3 = scope[ctrlAs].$$dataFBSelected;  
2076 - var data_temp4 = scope[ctrlAs].$$dataFBSelectedStart;  
2077 - var ryDbbms = [];  
2078 - var ryDbbm_group = [];  
2079 - var ryCids = [];  
2080 - var ryCid_group = [];  
2081 - var ryStart = 0;  
2082 - var i = 0;  
2083 - var j = 0;  
2084 -  
2085 - var isFB = scope[ctrlAs].$$isFB;  
2086 -  
2087 - if (isFB) {  
2088 - if (data_temp3 &&  
2089 - data_temp3.length > 0 &&  
2090 - data_temp4 != undefined) {  
2091 -  
2092 - for (i = 0; i < data_temp3.length; i++) {  
2093 - for (j = 0; j < data_temp3[i].group.length; j++) {  
2094 - ryDbbm_group.push(data_temp3[i].group[j].dbbm);  
2095 - ryCid_group.push(data_temp3[i].group[j].id);  
2096 - }  
2097 - ryDbbms.push(ryDbbm_group.join("-"));  
2098 - ryCids.push(ryCid_group.join("-"));  
2099 - ryDbbm_group = [];  
2100 - ryCid_group = [];  
2101 - }  
2102 -  
2103 - data_temp3[data_temp4].isstart = true;  
2104 - ryStart = data_temp4 + 1;  
2105 -  
2106 - // 更新内部model,用于外部验证  
2107 - // 内部model的值暂时随意,以后再改  
2108 - scope[ctrlAs].$$internalmodel = {desc: "ok"};  
2109 -  
2110 - // 更新外部model字段  
2111 - if ($dbbmrangename_attr) {  
2112 - console.log("dbbmrangename=" + ryDbbms.join(','));  
2113 - eval("scope[ctrlAs].model" + "." + $dbbmrangename_attr + " = ryDbbms.join(',');");  
2114 - }  
2115 - if (rycidrangename_attr) {  
2116 - console.log("rycidrangename=" + ryCids.join(','));  
2117 - eval("scope[ctrlAs].model" + "." + rycidrangename_attr + " = ryCids.join(',');");  
2118 - }  
2119 - if ($rystartname_attr) {  
2120 - console.log("rystartname=" + ryStart);  
2121 - eval("scope[ctrlAs].model" + "." + $rystartname_attr + " = ryStart;");  
2122 - }  
2123 -  
2124 - } else {  
2125 - scope[ctrlAs].$$internalmodel = undefined;  
2126 - }  
2127 -  
2128 - } else {  
2129 - if (data_temp &&  
2130 - data_temp.length > 0 &&  
2131 - data_temp2 != undefined) {  
2132 -  
2133 - for (i = 0; i < data_temp.length; i++) {  
2134 - ryDbbms.push(data_temp[i].dbbm);  
2135 - ryCids.push(data_temp[i].id);  
2136 - }  
2137 - data_temp[data_temp2].isstart = true;  
2138 - ryStart = data_temp2 + 1;  
2139 -  
2140 - // 更新内部model,用于外部验证  
2141 - // 内部model的值暂时随意,以后再改  
2142 - scope[ctrlAs].$$internalmodel = {desc: "ok"};  
2143 -  
2144 - // 更新外部model字段  
2145 - if ($dbbmrangename_attr) {  
2146 - console.log("dbbmrangename=" + ryDbbms.join(','));  
2147 - eval("scope[ctrlAs].model" + "." + $dbbmrangename_attr + " = ryDbbms.join(',');");  
2148 - }  
2149 - if (rycidrangename_attr) {  
2150 - console.log("rycidrangename=" + ryCids.join(','));  
2151 - eval("scope[ctrlAs].model" + "." + rycidrangename_attr + " = ryCids.join(',');");  
2152 - }  
2153 - if ($rystartname_attr) {  
2154 - console.log("rystartname=" + ryStart);  
2155 - eval("scope[ctrlAs].model" + "." + $rystartname_attr + " = ryStart;");  
2156 - }  
2157 -  
2158 - } else {  
2159 - scope[ctrlAs].$$internalmodel = undefined;  
2160 - }  
2161 - }  
2162 -  
2163 - };  
2164 -  
2165 - // 监控内部数据,$$dataSelected 变化  
2166 - scope.$watch(  
2167 - function() {  
2168 - return scope[ctrlAs].$$dataSelected;  
2169 - },  
2170 - function(newValue, oldValue) {  
2171 - scope[ctrlAs].$$internal_validate_model();  
2172 - },  
2173 - true  
2174 - );  
2175 -  
2176 - // 监控内部数据,$$dataSelectedStart 变化  
2177 - scope.$watch(  
2178 - function() {  
2179 - return scope[ctrlAs].$$dataSelectedStart;  
2180 - },  
2181 - function(newValue, oldValue) {  
2182 - scope[ctrlAs].$$internal_validate_model();  
2183 - },  
2184 - true  
2185 - );  
2186 -  
2187 -  
2188 - // 监控内部数据,$$dataFBSelected 变化  
2189 - scope.$watch(  
2190 - function() {  
2191 - return scope[ctrlAs].$$dataFBSelected;  
2192 - },  
2193 - function(newValue, oldValue) {  
2194 - scope[ctrlAs].$$internal_validate_model();  
2195 - },  
2196 - true  
2197 - );  
2198 -  
2199 - // 监控内部数据,$$dataFBSelectedStart 变化  
2200 - scope.$watch(  
2201 - function() {  
2202 - return scope[ctrlAs].$$dataFBSelectedStart;  
2203 - },  
2204 - function(newValue, oldValue) {  
2205 - scope[ctrlAs].$$internal_validate_model();  
2206 - },  
2207 - true  
2208 - );  
2209 -  
2210 - // 监控内部数据,$$dataFBInternalSelected 变化  
2211 - scope.$watch(  
2212 - function() {  
2213 - return scope[ctrlAs].$$dataFBInternalSelected;  
2214 - },  
2215 - function(newValue, oldValue) {  
2216 - scope[ctrlAs].$$internal_validate_model();  
2217 - },  
2218 - true  
2219 - );  
2220 -  
2221 - // 监控内部数据,$$isFB 变化  
2222 - scope.$watch(  
2223 - function() {  
2224 - return scope[ctrlAs].$$isFB;  
2225 - },  
2226 - function(newValue, oldValue) {  
2227 - scope[ctrlAs].$$internal_validate_model();  
2228 - },  
2229 - true  
2230 - );  
2231 -  
2232 - /**  
2233 - * 验证数据是否初始化完成,  
2234 - * 所谓的初始化就是内部所有的数据被有效设定过一次。  
2235 - */  
2236 - scope[ctrlAs].$$internal_validate_init = function() {  
2237 - var self = scope[ctrlAs];  
2238 - var data_temp = self.$$data;  
2239 - var dataSelect_temp = self.$$dataSelected;  
2240 - var dataFBSelect_temp = self.$$dataFBSelected;  
2241 - var dbbmnames = null;  
2242 - var dbbmnamegroup = null;  
2243 - var rycids = null;  
2244 - var rycidgroup = null;  
2245 -  
2246 - var i = 0;  
2247 - var j = 0;  
2248 - var k = 0;  
2249 -  
2250 - if (self.$$data_xl_first_init &&  
2251 - self.$$data_ry_first_init &&  
2252 - self.$$data_rycid_first_init &&  
2253 - self.$$data_rystart_first_init) {  
2254 - console.log("开始初始化数据");  
2255 -  
2256 - // 判定是否分班,字符串中包含-就是了  
2257 - if (self.$$data_ry_first_data.indexOf("-") != -1) { // 分班  
2258 - self.$$isFB = true;  
2259 -  
2260 - // 搭班编码、人员配置id  
2261 - dbbmnames = self.$$data_ry_first_data.split(",");  
2262 - rycids = self.$$data_rycid_first_data.split(",");  
2263 - for (i = 0; i < dbbmnames.length; i++) {  
2264 - dataFBSelect_temp.push({  
2265 - group: [],  
2266 - isstart: false  
2267 - });  
2268 - dbbmnamegroup = dbbmnames[i].split("-");  
2269 - rycidgroup = rycids[i].split("-");  
2270 -  
2271 - for (k = 0; k < dbbmnamegroup.length; k++) {  
2272 - dataFBSelect_temp[i].group.push({  
2273 - id: rycidgroup[k],  
2274 - dbbm: dbbmnamegroup[k],  
2275 - isselected: false  
2276 - });  
2277 -  
2278 - for (j = 0; j < data_temp.length; j++) {  
2279 - if (dataFBSelect_temp[i].group[k].dbbm == data_temp[j].dbbm) {  
2280 - dataFBSelect_temp[i].group[k].jsy = data_temp[j].jsy;  
2281 - dataFBSelect_temp[i].group[k].spy = data_temp[j].spy;  
2282 - break;  
2283 - }  
2284 - }  
2285 - }  
2286 -  
2287 - }  
2288 -  
2289 - // 初始人员  
2290 - scope[ctrlAs].$$dataFBSelectedStart = self.$$data_rystart_first_data - 1;  
2291 -  
2292 -  
2293 - } else {  
2294 - self.$$isFB = false;  
2295 -  
2296 - // 搭班编码、人员配置id  
2297 - dbbmnames = self.$$data_ry_first_data.split(",");  
2298 - rycids = self.$$data_rycid_first_data.split(",");  
2299 - for (i = 0; i < dbbmnames.length; i++) {  
2300 - dataSelect_temp.push({  
2301 - id: rycids[i],  
2302 - dbbm: dbbmnames[i],  
2303 - isstart: false  
2304 - });  
2305 - for (j = 0; j < data_temp.length; j++) {  
2306 - if (dataSelect_temp[i].dbbm == data_temp[j].dbbm) {  
2307 - dataSelect_temp[i].jsy = data_temp[j].jsy;  
2308 - dataSelect_temp[i].spy = data_temp[j].spy;  
2309 - break;  
2310 - }  
2311 - }  
2312 - }  
2313 - // 初始人员  
2314 - scope[ctrlAs].$$dataSelectedStart = self.$$data_rystart_first_data - 1;  
2315 -  
2316 - }  
2317 -  
2318 - console.log("数据初始化完毕!");  
2319 - self.$$data_init = true;  
2320 - }  
2321 -  
2322 - };  
2323 -  
2324 - // 监控初始化标志,线路,人员,起始人员  
2325 - scope.$watch(  
2326 - function() {  
2327 - return scope[ctrlAs].$$data_xl_first_init;  
2328 - },  
2329 - function(newValue, oldValue) {  
2330 - scope[ctrlAs].$$internal_validate_init();  
2331 - }  
2332 - );  
2333 - scope.$watch(  
2334 - function() {  
2335 - return scope[ctrlAs].$$data_ry_first_init;  
2336 - },  
2337 - function(newValue, oldValue) {  
2338 - scope[ctrlAs].$$internal_validate_init();  
2339 - }  
2340 - );  
2341 - scope.$watch(  
2342 - function() {  
2343 - return scope[ctrlAs].$$data_rycid_first_init;  
2344 - },  
2345 - function(newValue, oldValue) {  
2346 - scope[ctrlAs].$$internal_validate_init();  
2347 - }  
2348 - );  
2349 - scope.$watch(  
2350 - function() {  
2351 - return scope[ctrlAs].$$data_rystart_first_init;  
2352 - },  
2353 - function(newValue, oldValue) {  
2354 - scope[ctrlAs].$$internal_validate_init();  
2355 - }  
2356 - );  
2357 -  
2358 -  
2359 - // 监控线路id的变化  
2360 - attr.$observe("xlidvalue", function(value) {  
2361 - if (value && value != "") {  
2362 - console.log("xlidvalue=" + value);  
2363 -  
2364 - employeeConfigService_g.rest.list(  
2365 - {"xl.id_eq": value, size: 100},  
2366 - function(result) {  
2367 - // 获取值了  
2368 - console.log("人员配置获取了");  
2369 -  
2370 - scope[ctrlAs].$$data = [];  
2371 - for (var i = 0; i < result.content.length; i++) {  
2372 - scope[ctrlAs].$$data.push({  
2373 - id: result.content[i].id,  
2374 - dbbm: result.content[i].dbbm,  
2375 - jsy: result.content[i].jsy.personnelName,  
2376 - spy: result.content[i].spy == null ? "" : result.content[i].spy.personnelName  
2377 - });  
2378 - }  
2379 - if (scope[ctrlAs].$$data_init) {  
2380 - scope[ctrlAs].$$dataSelected = [];  
2381 - scope[ctrlAs].$$dataSelectedStart = undefined;  
2382 -  
2383 - scope[ctrlAs].$$dataFBSelected = [];  
2384 - scope[ctrlAs].$$dataFBInternalSelected = undefined;  
2385 - scope[ctrlAs].$$dataFBSelectedStart = undefined;  
2386 -  
2387 - scope[ctrlAs].$$internalmodel = undefined;  
2388 - }  
2389 - scope[ctrlAs].$$data_xl_first_init = true;  
2390 - },  
2391 - function(result) {  
2392 -  
2393 - }  
2394 - );  
2395 -  
2396 - }  
2397 - });  
2398 -  
2399 - // 监控搭班编码范围值的变化  
2400 - attr.$observe("dbbmrangevalue", function(value) {  
2401 - if (value && value != "") {  
2402 - console.log("dbbmrangevalue变换了");  
2403 - scope[ctrlAs].$$data_ry_first_init = true;  
2404 - scope[ctrlAs].$$data_ry_first_data = value;  
2405 - }  
2406 - });  
2407 -  
2408 - // 监控人员配置id范围值的变化  
2409 - attr.$observe("rycidrangevalue", function(value) {  
2410 - if (value && value != "") {  
2411 - console.log("rycidrangevalue变换了");  
2412 - scope[ctrlAs].$$data_rycid_first_init = true;  
2413 - scope[ctrlAs].$$data_rycid_first_data = value;  
2414 - }  
2415 - });  
2416 -  
2417 - // 监控起始人员的变化  
2418 - attr.$observe("rystartvalue", function(value) {  
2419 - if (value && value != "") {  
2420 - console.log("rystartvalue变换了");  
2421 - scope[ctrlAs].$$data_rystart_first_init = true;  
2422 - scope[ctrlAs].$$data_rystart_first_data = value;  
2423 - }  
2424 - });  
2425 -  
2426 - }  
2427 - }  
2428 -  
2429 - }  
2430 - }  
2431 - }  
2432 -]);  
2433 - 1 +// 自定义指令,指令模版在dt目录下
  2 +
  3 +
  4 +angular.module('ScheduleApp').directive('loadingWidget', ['requestNotificationChannel', function(requestNotificationChannel) {
  5 + return {
  6 + restrict: 'A',
  7 + link: function(scope, element) {
  8 + // 初始隐藏loading界面
  9 + element.hide();
  10 +
  11 + // 开始请求通知处理
  12 + requestNotificationChannel.onRequestStarted(scope, function() {
  13 + element.show();
  14 + });
  15 + // 请求结束通知处理
  16 + requestNotificationChannel.onRequestEnded(scope, function() {
  17 + element.hide();
  18 + });
  19 + }
  20 + };
  21 +}]);
  22 +
  23 +angular.module('ScheduleApp').directive("saSelect", ['$timeout', function($timeout) {
  24 + return {
  25 + restrict: 'E',
  26 + templateUrl: '/pages/scheduleApp/module/other/MyDictionarySelectTemplate.html',
  27 + scope: {
  28 + model: "="
  29 + },
  30 + controllerAs: "$saSelectCtrl",
  31 + bindToController: true,
  32 + controller: function() {
  33 + var self = this;
  34 + self.datas = []; // 关联的字典数据,内部格式 {code:{值},name:{名字}}
  35 + },
  36 + /**
  37 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  38 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  39 + * @param tElem
  40 + * @param tAttrs
  41 + * @returns {{pre: Function, post: Function}}
  42 + */
  43 + compile: function(tElem, tAttrs) {
  44 + // 确定是否使用angularjs required验证
  45 + // 属性 required
  46 + // 如果没有填写,内部不添加验证,如果填写了,并且等于true添加验证,否则不添加
  47 + var required_attr = tAttrs["required"];
  48 + if (required_attr) {
  49 + if (required_attr == "true") {
  50 + // 添加required属性指令
  51 + tElem.find("ui-select").attr("required", "");
  52 + } else {
  53 + // 不等于true,不添加required属性指令
  54 + }
  55 + } else {
  56 + // 不添加required属性指令
  57 + }
  58 +
  59 + //console.log("saSelect" + ":compile = >" + tElem.html());
  60 +
  61 + return {
  62 + pre: function(scope, element, attr) {
  63 + // TODO:
  64 + },
  65 + /**
  66 + * 相当于link函数。
  67 + *
  68 + * 重要属性如下:
  69 + * model 是绑定外部值。
  70 + * dicgroup 字典组的类型
  71 + * name input name属性值
  72 + */
  73 + post: function(scope, element, attr) {
  74 + // 1、获取属性
  75 + var dicgroup_attr = attr['dicgroup']; // 字典组的类型
  76 + var name_attr = attr['name']; // input name属性值
  77 + var dicname_attr = attr['dicname']; // model关联的字典名字段
  78 + var codename_attr = attr['codename']; // model关联的字典值字段
  79 + var placeholder_attr = attr['placeholder']; // select placeholder提示
  80 +
  81 + // 系统的字典对象,使用dictionaryUtils类获取
  82 + var origin_dicgroup;
  83 + var dic_key; // 字典key
  84 +
  85 + if (dicgroup_attr) { // 赋值指定的字典数据
  86 + origin_dicgroup = dictionaryUtils.getByGroup(dicgroup_attr);
  87 + for (dic_key in origin_dicgroup) {
  88 + var data = {}; // 重新组合的字典元素对象
  89 + if (dic_key == "true")
  90 + data.code = true;
  91 + else
  92 + data.code = dic_key;
  93 + data.name = origin_dicgroup[dic_key];
  94 + scope["$saSelectCtrl"].datas.push(data);
  95 + }
  96 + }
  97 +
  98 + if (name_attr) {
  99 + scope["$saSelectCtrl"].nv = name_attr;
  100 + }
  101 + if (placeholder_attr) {
  102 + scope["$saSelectCtrl"].ph = placeholder_attr;
  103 + }
  104 +
  105 + scope["$saSelectCtrl"].select = function($item) {
  106 + if (codename_attr) {
  107 + scope["$saSelectCtrl"].model[codename_attr] = $item.code;
  108 + }
  109 + if (dicname_attr) {
  110 + scope["$saSelectCtrl"].model[dicname_attr] = $item.name;
  111 + }
  112 + };
  113 +
  114 + scope["$saSelectCtrl"].remove = function() {
  115 + if (codename_attr) {
  116 + scope["$saSelectCtrl"].model[codename_attr] = null;
  117 + }
  118 + if (dicname_attr) {
  119 + scope["$saSelectCtrl"].model[dicname_attr] = null;
  120 + }
  121 + scope["$saSelectCtrl"].cmodel = null;
  122 + };
  123 +
  124 + $timeout(function() {
  125 + // 创建内部使用的绑定对象
  126 + var model_code = scope["$saSelectCtrl"].model[codename_attr];
  127 + scope["$saSelectCtrl"].cmodel = model_code;
  128 + }, 0);
  129 + }
  130 + }
  131 + }
  132 + };
  133 +}]);
  134 +
  135 +/**
  136 + * saRadiogroup指令
  137 + * 属性如下:
  138 + * model(必须):独立作用域,外部绑定的一个值,如:ctrl.timeTableManageForForm.isEnableDisTemplate
  139 + * dicgroup(必须):关联的字典数据type(TODO:以后增加其他数据源)
  140 + * name(必须):控件的名字
  141 + * required(可选):是否要用required验证
  142 + * disabled(可选):标示单选框是否可选
  143 + *
  144 + */
  145 +angular.module('ScheduleApp').directive("saRadiogroup", [function() {
  146 + /**
  147 + * 使用字典数据的单选按钮组的指令。
  148 + * 指令名称:truefalse-Dic
  149 + */
  150 + return {
  151 + restrict: 'E',
  152 + templateUrl: '/pages/scheduleApp/module/common/dt/MyRadioGroupWrapTemplate.html',
  153 + scope: {
  154 + model: "="
  155 + },
  156 + controllerAs: "$saRadiogroupCtrl",
  157 + bindToController: true,
  158 + controller: function($scope) {
  159 + //$scope["model"] = {selectedOption: null};
  160 + //console.log("controller");
  161 + //console.log("controller:" + $scope["model"]);
  162 +
  163 + var self = this;
  164 + self.$$data = null; // 内部数据
  165 + },
  166 +
  167 + /**
  168 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  169 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  170 + * @param tElem
  171 + * @param tAttrs
  172 + * @returns {{pre: Function, post: Function}}
  173 + */
  174 + compile: function(tElem, tAttrs) {
  175 + // 获取属性
  176 + var $dicgroup_attr = tAttrs["dicgroup"]; // 关联的字典数据type
  177 + var $name_attr = tAttrs["name"]; // 控件的名字
  178 + var $required_attr = tAttrs["required"]; // 是否要用required验证
  179 + var $disabled_attr = tAttrs["disabled"]; // 标示单选框是否可选
  180 +
  181 + // controlAs名字
  182 + var ctrlAs = "$saRadiogroupCtrl";
  183 +
  184 + // 如果有required属性,添加angularjs required验证
  185 + if ($required_attr != undefined) {
  186 + tElem.find("input").attr("required", "");
  187 + }
  188 +
  189 + return {
  190 + pre: function(scope, element, attr) {
  191 +
  192 + },
  193 +
  194 + /**
  195 + * 相当于link函数。
  196 + * @param scope
  197 + * @param element
  198 + * @param attr
  199 + */
  200 + post: function(scope, element, attr) {
  201 + //console.log("link");
  202 + //console.log("link:" + scope.model);
  203 + //scope["model"] = {selectedOption: null};
  204 +
  205 + if ($name_attr) {
  206 + scope[ctrlAs].nv = $name_attr;
  207 + }
  208 +
  209 + if ($disabled_attr) {
  210 + scope[ctrlAs].disabled = true;
  211 + }
  212 + if ($dicgroup_attr) {
  213 + var obj = dictionaryUtils.getByGroup($dicgroup_attr);
  214 + scope[ctrlAs].$$data = obj;
  215 + // 处理 scope["dic"] key值
  216 + scope[ctrlAs].dicvalueCalcu = function(value) {
  217 + if (value == "true") {
  218 + //console.log(value);
  219 + return true;
  220 + } else if (value == "false") {
  221 + //console.log(value);
  222 + return false;
  223 + } else {
  224 + return value;
  225 + }
  226 + };
  227 + }
  228 + }
  229 + };
  230 + }
  231 + };
  232 +}]);
  233 +
  234 +angular.module('ScheduleApp').directive("remoteValidaton", [
  235 + 'BusInfoManageService_g',
  236 + 'EmployeeInfoManageService_g',
  237 + 'TimeTableManageService_g',
  238 + function(
  239 + busInfoManageService_g,
  240 + employeeInfoManageService_g,
  241 + timeTableManageService_g
  242 + ) {
  243 + /**
  244 + * 远端验证指令,依赖于ngModel
  245 + * 指令名称 remote-Validation
  246 + * 需要属性 rvtype 表示验证类型
  247 + */
  248 + return {
  249 + restrict: "A",
  250 + require: "^ngModel",
  251 + link: function(scope, element, attr, ngModelCtrl) {
  252 + element.bind("keyup", function() {
  253 + var modelValue = ngModelCtrl.$modelValue;
  254 + var rv1_attr = attr["rv1"];
  255 + if (attr["rvtype"]) {
  256 +
  257 + // 根据rvtype的值,确定使用那个远端验证的url,
  258 + // rv1, rv2, rv3是关联比较值,暂时使用rv1
  259 + // 这个貌似没法通用,根据业务变换
  260 + // TODO:暂时有点乱以后改
  261 + if (attr["rvtype"] == "insideCode") {
  262 + busInfoManageService_g.validate.insideCode(
  263 + {"insideCode_eq": modelValue, type: "equale"},
  264 + function(result) {
  265 + //console.log(result);
  266 + if (result.status == "SUCCESS") {
  267 + ngModelCtrl.$setValidity('remote', true);
  268 + } else {
  269 + ngModelCtrl.$setValidity('remote', false);
  270 + }
  271 + },
  272 + function(result) {
  273 + //console.log(result);
  274 + ngModelCtrl.$setValidity('remote', true);
  275 + }
  276 + );
  277 + } else if (attr["rvtype"] == "jobCode") {
  278 + if (!rv1_attr) {
  279 + ngModelCtrl.$setValidity('remote', false);
  280 + return;
  281 + }
  282 +
  283 + employeeInfoManageService_g.validate.jobCode(
  284 + {"jobCode_eq": modelValue, "companyCode_eq": rv1_attr, type: "equale"},
  285 + function(result) {
  286 + //console.log(result);
  287 + if (result.status == "SUCCESS") {
  288 + ngModelCtrl.$setValidity('remote', true);
  289 + } else {
  290 + ngModelCtrl.$setValidity('remote', false);
  291 + }
  292 + },
  293 + function(result) {
  294 + //console.log(result);
  295 + ngModelCtrl.$setValidity('remote', true);
  296 + }
  297 + );
  298 + } else if (attr["rvtype"] == "ttinfoname") {
  299 + if (!rv1_attr) {
  300 + ngModelCtrl.$setValidity('remote', false);
  301 + return;
  302 + }
  303 +
  304 + timeTableManageService_g.validate.ttinfoname(
  305 + {"name_eq": modelValue, "xl.id_eq": rv1_attr, type: "equale"},
  306 + function(result) {
  307 + //console.log(result);
  308 + if (result.status == "SUCCESS") {
  309 + ngModelCtrl.$setValidity('remote', true);
  310 + } else {
  311 + ngModelCtrl.$setValidity('remote', false);
  312 + }
  313 + },
  314 + function(result) {
  315 + //console.log(result);
  316 + ngModelCtrl.$setValidity('remote', true);
  317 + }
  318 + );
  319 +
  320 + }
  321 + } else {
  322 + // 没有rvtype,就不用远端验证了
  323 + ngModelCtrl.$setValidity('remote', true);
  324 + }
  325 +
  326 + attr.$observe("rv1", function(value) {
  327 + if (attr["rvtype"] == "jobCode") {
  328 + if (!value) {
  329 + ngModelCtrl.$setValidity('remote', false);
  330 + return;
  331 + }
  332 +
  333 + employeeInfoManageService_g.validate.jobCode(
  334 + {"jobCode_eq": modelValue, "companyCode_eq": rv1_attr, type: "equale"},
  335 + function(result) {
  336 + //console.log(result);
  337 + if (result.status == "SUCCESS") {
  338 + ngModelCtrl.$setValidity('remote', true);
  339 + } else {
  340 + ngModelCtrl.$setValidity('remote', false);
  341 + }
  342 + },
  343 + function(result) {
  344 + //console.log(result);
  345 + ngModelCtrl.$setValidity('remote', true);
  346 + }
  347 + );
  348 + } else if (attr["rvtype"] == "ttinfoname") {
  349 + if (!value) {
  350 + ngModelCtrl.$setValidity('remote', false);
  351 + return;
  352 + }
  353 +
  354 + console.log("rv1:" + value);
  355 +
  356 + timeTableManageService_g.validate.ttinfoname(
  357 + {"name_eq": modelValue, "xl.id_eq": value, type: "equale"},
  358 + function(result) {
  359 + //console.log(result);
  360 + if (result.status == "SUCCESS") {
  361 + ngModelCtrl.$setValidity('remote', true);
  362 + } else {
  363 + ngModelCtrl.$setValidity('remote', false);
  364 + }
  365 + },
  366 + function(result) {
  367 + //console.log(result);
  368 + ngModelCtrl.$setValidity('remote', true);
  369 + }
  370 + );
  371 + }
  372 +
  373 + });
  374 + });
  375 + }
  376 + };
  377 + }]);
  378 +
  379 +
  380 +/**
  381 + * saSelect2指令,根据属性值,动态载入数据,然后支持拼音搜索,点击右边的按钮清除选择并重新载入数据。
  382 + * 1、compile阶段使用的属性如下:
  383 + * required:用于和表单验证连接,指定成required="true"才有效。
  384 + * 2、link阶段使用的属性如下
  385 + * model:关联的模型对象
  386 + * name:表单验证时需要的名字
  387 + * type:关联的那种数据值(xl/cl/ry)-> 对应线路信息/车辆信息/人员信息,后面有的继续加
  388 + * modelcolname1:关联的模型字段名字1(一般应该是编码字段)
  389 + * modelcolname2:关联的模型字段名字2(一般应该是名字字段)
  390 + * datacolname1;内部数据对应的字段名字1(与模型字段1对应)
  391 + * datacolname2:内部数据对应的字段名字2(与模型字段2对应)
  392 + * showcolname:下拉框显示的内部数据字段名(注意:不是模型数据字段名),TODO:以后考虑放动态表达式,并在compile阶段使用
  393 + * placeholder:select placeholder字符串描述
  394 + *
  395 + * $$pyFilter,内部的filter指令,结合简拼音进行拼音过滤。
  396 + * $$SearchInfoService_g,内部使用的数据服务
  397 + */
  398 +// saSelect2指令使用的内部信service
  399 +angular.module('ScheduleApp').factory('$$SearchInfoService_g', ['$resource', function($resource) {
  400 + return {
  401 + xl: $resource(
  402 + '/line/:type',
  403 + {order: 'name', direction: 'ASC'},
  404 + {
  405 + list: {
  406 + method: 'GET',
  407 + isArray: true
  408 + }
  409 + }
  410 + ),
  411 + zd: $resource(
  412 + '/stationroute/stations',
  413 + {order: 'stationCode', direction: 'ASC'},
  414 + {
  415 + list: {
  416 + method: 'GET',
  417 + isArray: true
  418 + }
  419 + }
  420 + ),
  421 + tcc: $resource(
  422 + '/carpark/:type',
  423 + {order: 'parkCode', direction: 'ASC'},
  424 + {
  425 + list: {
  426 + method: 'GET',
  427 + isArray: true
  428 + }
  429 + }
  430 + ),
  431 + ry: $resource(
  432 + '/personnel/:type',
  433 + {order: 'personnelName', direction: 'ASC'},
  434 + {
  435 + list: {
  436 + method: 'GET',
  437 + isArray: true
  438 + }
  439 + }
  440 + ),
  441 + cl: $resource(
  442 + '/cars/:type',
  443 + {order: "insideCode", direction: 'ASC'},
  444 + {
  445 + list: {
  446 + method: 'GET',
  447 + isArray: true
  448 + }
  449 + }
  450 + ),
  451 + ttInfo: $resource(
  452 + '/tic/:type',
  453 + {order: "name", direction: 'ASC'},
  454 + {
  455 + list: {
  456 + method: 'GET',
  457 + isArray: true
  458 + }
  459 + }
  460 + ),
  461 + cci: $resource(
  462 + '/cci/cars',
  463 + {},
  464 + {
  465 + list: {
  466 + method: 'GET',
  467 + isArray: true
  468 + }
  469 + }
  470 +
  471 + ),
  472 + cci2: $resource(
  473 + '/cci/:type',
  474 + {},
  475 + {
  476 + list: {
  477 + method: 'GET',
  478 + isArray: true
  479 + }
  480 + }
  481 + ),
  482 + cci3: $resource(
  483 + '/cci/cars2',
  484 + {},
  485 + {
  486 + list: {
  487 + method: 'GET',
  488 + isArray: true
  489 + }
  490 + }
  491 +
  492 + ),
  493 + eci: $resource(
  494 + '/eci/jsy',
  495 + {},
  496 + {
  497 + list: {
  498 + method: 'GET',
  499 + isArray: true
  500 + }
  501 + }
  502 + ),
  503 + eci2: $resource(
  504 + '/eci/spy',
  505 + {},
  506 + {
  507 + list: {
  508 + method: 'GET',
  509 + isArray: true
  510 + }
  511 + }
  512 + )
  513 + }
  514 +}]);
  515 +angular.module('ScheduleApp').filter("$$pyFilter", function() {
  516 + return function(items, props) {
  517 + var out = [];
  518 + var limit = props["limit"] || 20; // 默认20条记录
  519 +
  520 + if (angular.isArray(items)) {
  521 + items.forEach(function(item) {
  522 + if (out.length < limit) {
  523 + if (props.search) {
  524 + var upTerm = props.search.toUpperCase();
  525 + if(item.fullChars.indexOf(upTerm) != -1
  526 + || item.camelChars.indexOf(upTerm) != -1) {
  527 + out.push(item);
  528 + }
  529 + }
  530 + }
  531 + });
  532 + }
  533 +
  534 + return out;
  535 + };
  536 +});
  537 +angular.module('ScheduleApp').directive("saSelect2", [
  538 + '$timeout', '$$SearchInfoService_g',
  539 + function($timeout, $$searchInfoService_g) {
  540 + return {
  541 + restrict: 'E',
  542 + templateUrl: '/pages/scheduleApp/module/other/MySearchSelectTemplate.html',
  543 + scope: {
  544 + model: "=" // 独立作用域,关联外部的模型对象
  545 + },
  546 + controllerAs: "$saSelectCtrl",
  547 + bindToController: true,
  548 + controller: function($scope) {
  549 + var self = this;
  550 + self.$$data = []; // 内部关联的数据
  551 + },
  552 + /**
  553 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  554 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  555 + * @param tElem
  556 + * @param tAttrs
  557 + * @returns {{pre: Function, post: Function}}
  558 + */
  559 + compile: function(tElem, tAttrs) {
  560 + // 1、获取此阶段使用的属性
  561 + var $required_attr = tAttrs["required"]; // 用于和表单验证连接,指定成required="true"才有效。
  562 +
  563 + // 2、处理属性
  564 +
  565 + // 确定是否使用angularjs required验证
  566 + // 属性 required
  567 + // 如果没有填写,内部不添加验证,如果填写了,并且等于true添加验证,否则不添加
  568 + if ($required_attr) {
  569 + if ($required_attr == "true") {
  570 + // 添加required属性指令
  571 + tElem.find("ui-select").attr("required", "");
  572 + } else {
  573 + // 不等于true,不添加required属性指令
  574 + }
  575 + } else {
  576 + // 不添加required属性指令
  577 + }
  578 +
  579 + //console.log("saSelect" + ":compile = >" + tElem.html());
  580 +
  581 + return {
  582 + pre: function(scope, element, attr) {
  583 + // TODO:
  584 + },
  585 + /**
  586 + * 相当于link函数。
  587 + *
  588 + * 重要属性如下:
  589 + * model 是绑定外部值。
  590 + * dicgroup 字典组的类型
  591 + * name input name属性值
  592 + */
  593 + post: function(scope, element, attr) {
  594 + // 1、获取此阶段使用的属性
  595 + var $name_attr = attr["name"]; // 表单验证时需要的名字
  596 + var $type_attr = attr["type"]; // 关联的那种数据值(xl/cl/ry)-> 对应线路信息/车辆信息/人员信息,后面有的继续加
  597 + var $modelcolname1_attr = attr["modelcolname1"]; // 关联的模型字段名字1(一般应该是编码字段)
  598 + var $modelcolname2_attr = attr["modelcolname2"]; // 关联的模型字段名字2(一般应该是名字字段)
  599 + var $datacolname1_attr = attr["datacolname1"]; // 内部数据对应的字段名字1(与模型字段1对应)
  600 + var $datacolname2_attr = attr["datacolname2"]; // 内部数据对应的字段名字2(与模型字段2对应)
  601 + var $showcolname_attr = attr["showcolname"]; // 下拉框显示的内部数据字段名
  602 + var $placeholder_attr = attr["placeholder"]; // select placeholder字符串描述
  603 +
  604 + // 2、处理属性、转换成$saSelectCtrl内部使用的属性
  605 + if ($name_attr) {
  606 + scope["$saSelectCtrl"].$name_attr = $name_attr;
  607 + }
  608 + if ($placeholder_attr) {
  609 + scope["$saSelectCtrl"].$placeholder_attr = $placeholder_attr;
  610 + }
  611 + if ($showcolname_attr) {
  612 + scope["$saSelectCtrl"].$showcolname_attr = $showcolname_attr;
  613 + }
  614 +
  615 + // 2-1、添加内部方法,根据type值,改变$$data的值
  616 + scope["$saSelectCtrl"].$$internal_data_change_fn = function() {
  617 + // 根据type属性动态载入数据
  618 + if ($type_attr) {
  619 + $$searchInfoService_g[$type_attr].list(
  620 + {type: "all"},
  621 + function(result) {
  622 + scope["$saSelectCtrl"].$$data = [];
  623 + for (var i = 0; i < result.length; i ++) {
  624 + var data = {}; // data是result的一部分属性集合,根据配置来确定
  625 + if ($datacolname1_attr) {
  626 + data[$datacolname1_attr] = result[i][$datacolname1_attr];
  627 + }
  628 + if ($datacolname2_attr) {
  629 + data[$datacolname2_attr] = result[i][$datacolname2_attr];
  630 + }
  631 + if ($showcolname_attr) {
  632 + // 动态添加基于名字的拼音
  633 + data[$showcolname_attr] = result[i][$showcolname_attr];
  634 + if (data[$showcolname_attr]) {
  635 + data["fullChars"] = pinyin.getFullChars(result[i][$showcolname_attr]).toUpperCase(); // 全拼
  636 + data["camelChars"] = pinyin.getCamelChars(result[i][$showcolname_attr]); // 简拼
  637 + }
  638 + }
  639 + if (data["fullChars"])
  640 + scope["$saSelectCtrl"].$$data.push(data);
  641 + }
  642 + },
  643 + function(result) {
  644 +
  645 + }
  646 + );
  647 + }
  648 + };
  649 +
  650 + // 3、选择、删除事件映射模型和内部数据对应的字段
  651 + scope["$saSelectCtrl"].$select_fn_attr = function($item) {
  652 + if ($modelcolname1_attr && $datacolname1_attr) {
  653 + scope["$saSelectCtrl"].model[$modelcolname1_attr] = $item[$datacolname1_attr];
  654 + }
  655 + if ($modelcolname2_attr && $datacolname2_attr) {
  656 + scope["$saSelectCtrl"].model[$modelcolname2_attr] = $item[$datacolname2_attr];
  657 + }
  658 + };
  659 + scope["$saSelectCtrl"].$remove_fn_attr = function() {
  660 + if ($modelcolname1_attr) {
  661 + scope["$saSelectCtrl"].model[$modelcolname1_attr] = null;
  662 + }
  663 + if ($modelcolname2_attr) {
  664 + scope["$saSelectCtrl"].model[$modelcolname2_attr] = null;
  665 + }
  666 + scope["$saSelectCtrl"].$$cmodel = null; // 内部模型清空
  667 +
  668 + scope["$saSelectCtrl"].$$internal_data_change_fn();
  669 + };
  670 +
  671 + // 4、搜索事件
  672 + scope["$saSelectCtrl"].$refreshdata_fn_attr = function($search) {
  673 + //var fullChars = pinyin.getFullChars($search).toUpperCase();
  674 + //var camelChars = pinyin.getCamelChars($search);
  675 + //
  676 + //console.log(fullChars + " " + camelChars);
  677 + // TODO:事件暂时没用,放着以后再说
  678 + };
  679 +
  680 + // 5、全部载入后,输入的
  681 + $timeout(function() {
  682 + // 创建内部使用的绑定对象,用于确认选中那个值
  683 + scope["$saSelectCtrl"].$$cmodel = scope["$saSelectCtrl"].model[$modelcolname1_attr];
  684 +
  685 + scope["$saSelectCtrl"].$$internal_data_change_fn();
  686 + }, 0);
  687 + }
  688 + }
  689 + }
  690 + };
  691 + }
  692 +]);
  693 +
  694 +/**
  695 + * saSelect3指令
  696 + * 属性如下:
  697 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  698 + * name(必须):控件的名字
  699 + * placeholder(可选):占位符字符串
  700 + * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}
  701 + * dcname(必须):绑定的model字段名,如:dcname=xl.id
  702 + * icname(必须):内部与之对应的字段名,如:icname=code
  703 + * dcname2(可选):其他需要赋值的model字段名2,如:dcname2=xl.name
  704 + * icname2(可选):内部与之对应的字段名2,如:icname2=name
  705 + * dcname3(可选):其他需要赋值的model字段名3,如:dcname2=xl.name
  706 + * icname3(可选):内部与之对应的字段名3,如:icname2=name
  707 + * icnames(必须):用于用于显示,以及简评处理的内部数据字段,如:icnames=name
  708 + * required(可选):是否要用required验证
  709 + * datatype(必须):业务数据类型,有字典类型,动态数据类型,暂时写的死点
  710 + * mlp(可选):是否多级属性(这里假设外部model如果多级,内部model也是多级)
  711 + *
  712 + * 高级属性:
  713 + * dataassociate(可选):数据源是否关联属性(内部数据随外部指定的参数变化而变化)
  714 + * dataparam(可选):数据源关联的外部参数对象
  715 + *
  716 + */
  717 +angular.module('ScheduleApp').directive("saSelect3", [
  718 + '$timeout',
  719 + '$$SearchInfoService_g',
  720 + function($timeout, $$searchInfoService_g) {
  721 + return {
  722 + restrict: 'E',
  723 + templateUrl: '/pages/scheduleApp/module/common/dt/MyUiSelectWrapTemplate1.html',
  724 + scope: {
  725 + model: "=" // 独立作用域,关联外部的模型object
  726 + },
  727 + controllerAs: "$saSelectCtrl",
  728 + bindToController: true,
  729 + controller: function($scope) {
  730 + var self = this;
  731 + self.$$data = []; // ui-select显示用的数据源
  732 + self.$$data_real= []; // 内部真实的数据源
  733 + },
  734 +
  735 + /**
  736 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  737 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  738 + * @param tElem
  739 + * @param tAttrs
  740 + * @returns {{pre: Function, post: Function}}
  741 + */
  742 + compile: function(tElem, tAttrs) {
  743 + // 获取所有的属性
  744 + var $name_attr = tAttrs["name"]; // 控件的名字
  745 + var $placeholder_attr = tAttrs["placeholder"]; // 占位符的名字
  746 + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名
  747 + var $icname_attr = tAttrs["icname"]; // 内部与之对应的字段名
  748 + var $dcname2_attr = tAttrs["dcname2"]; // 其他需要赋值的model字段名2
  749 + var $icname2_attr = tAttrs["icname2"]; // 内部与之对应的字段名2
  750 + var $dcname3_attr = tAttrs["dcname3"]; // 其他需要赋值的model字段名3
  751 + var $icname3_attr = tAttrs["icname3"]; // 内部与之对应的字段名3
  752 +
  753 + var $icname_s_attr = tAttrs["icnames"]; // 用于用于显示,以及简评处理的内部数据字段
  754 + var $datatype_attr = tAttrs["datatype"]; // 内部业务数据类型
  755 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  756 + var $mlp_attr = tAttrs["mlp"]; // 是否多级属性
  757 + var $dataassociate_attr = tAttrs["dataassociate"]; // 数据源是否关联属性
  758 +
  759 + // controlAs名字
  760 + var ctrlAs = "$saSelectCtrl";
  761 +
  762 + // 数据源初始化标志
  763 + var $$data_init = false;
  764 + // 如果有required属性,添加angularjs required验证
  765 + if ($required_attr != undefined) {
  766 + tElem.find("ui-select").attr("required", "");
  767 + }
  768 +
  769 + // 由于有的属性是多级的如xl.name,所以要在compile阶段重写属性绑定属性定义
  770 + // 原来的设置:{{$select.selected[$saSelectCtrl.$icname_s]}}
  771 + tElem.find("ui-select-match").html("{{$select.selected" + "." + $icname_s_attr + "}}");
  772 + // 原来的设置:item[$saSelectCtrl.$icname] as item in $saSelectCtrl.$$data
  773 + tElem.find("ui-select-choices").attr("repeat", "item" + "." + $icname_attr + " as item in $saSelectCtrl.$$data");
  774 + // 原来的设置:item[$saSelectCtrl.$icname_s]
  775 + tElem.find("ui-select-choices span").attr("ng-bind", "item" + "." + $icname_s_attr);
  776 + // 原来的设置:{{$saSelectCtrl.$name}}
  777 + tElem.find("ui-select").attr("name", $name_attr);
  778 + // 原来的设置:{{$saSelectCtrl.$placeholder}}
  779 + tElem.find("ui-select-match").attr("placeholder", $placeholder_attr);
  780 +
  781 + return {
  782 + pre: function(scope, element, attr) {
  783 + // TODO:
  784 + },
  785 + /**
  786 + * 相当于link函数。
  787 + * @param scope
  788 + * @param element
  789 + * @param attr
  790 + */
  791 + post: function(scope, element, attr) {
  792 + // 添加选中事件处理函数
  793 + scope[ctrlAs].$$internal_select_fn = function($item) {
  794 + if ($dcname_attr && $icname_attr) {
  795 + if ($mlp_attr) {
  796 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = $item" + "." + $icname_attr + ";");
  797 + } else {
  798 + scope[ctrlAs].model[$dcname_attr] = $item[$icname_attr];
  799 + }
  800 + }
  801 + if ($dcname2_attr && $icname2_attr) {
  802 + if ($mlp_attr) {
  803 + eval("scope[ctrlAs].model" + "." + $dcname2_attr + " = $item" + "." + $icname2_attr + ";");
  804 + } else {
  805 + scope[ctrlAs].model[$dcname2_attr] = $item[$icname2_attr];
  806 + }
  807 + }
  808 + if ($dcname3_attr && $icname3_attr) {
  809 + if ($mlp_attr) {
  810 + eval("scope[ctrlAs].model" + "." + $dcname3_attr + " = $item" + "." + $icname3_attr + ";");
  811 + } else {
  812 + scope[ctrlAs].model[$dcname3_attr] = $item[$icname3_attr];
  813 + }
  814 + }
  815 + };
  816 +
  817 + // 删除选中事件处理函数
  818 + scope[ctrlAs].$$internal_remove_fn = function() {
  819 + scope[ctrlAs].$$internalmodel = undefined;
  820 + if ($mlp_attr) {
  821 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = undefined;");
  822 + } else {
  823 + scope[ctrlAs].model[$dcname_attr] = undefined;
  824 + }
  825 +
  826 + if ($dcname2_attr) {
  827 + if ($mlp_attr) {
  828 + eval("scope[ctrlAs].model" + "." + $dcname2_attr + " = undefined;");
  829 + } else {
  830 + scope[ctrlAs].model[$dcname2_attr] = undefined;
  831 + }
  832 + }
  833 + if ($dcname3_attr) {
  834 + if ($mlp_attr) {
  835 + eval("scope[ctrlAs].model" + "." + $dcname3_attr + " = undefined;");
  836 + } else {
  837 + scope[ctrlAs].model[$dcname3_attr] = undefined;
  838 + }
  839 + }
  840 + };
  841 +
  842 + /**
  843 + * 内部方法,读取字典数据作为数据源。
  844 + * @param dicgroup 字典类型,如:gsType
  845 + * @param ccol 代码字段名
  846 + * @param ncol 名字字段名
  847 + */
  848 + scope[ctrlAs].$$internal_dic_data = function(dicgroup, ccol, ncol) {
  849 + var origin_dicgroup = dictionaryUtils.getByGroup(dicgroup);
  850 + var dic_key; // 字典key
  851 + // 清空内部数据
  852 + scope[ctrlAs].$$data_real = [];
  853 + for (dic_key in origin_dicgroup) {
  854 + var data = {}; // 重新组合的字典元素对象
  855 + if (dic_key == "true")
  856 + data[ccol] = true;
  857 + else
  858 + data[ccol] = dic_key;
  859 + data[ncol] = origin_dicgroup[dic_key];
  860 + scope[ctrlAs].$$data_real.push(data);
  861 + }
  862 + // 这里直接将$$data_real数据深拷贝到$$data
  863 + angular.copy(scope[ctrlAs].$$data_real, scope[ctrlAs].$$data);
  864 +
  865 + console.log(scope[ctrlAs].$$data);
  866 + };
  867 +
  868 + /**
  869 + * TODO:这个方法有性能问题,result一多就会卡一卡,之后再解决把
  870 + * 内部方法,读取字典数据作为数据源。
  871 + * @param result 原始数据
  872 + * @param dcvalue 传入的关联数据
  873 + */
  874 + scope[ctrlAs].$$internal_other_data = function(result, dcvalue) {
  875 + //console.log("start");
  876 + // 清空内部数据
  877 + scope[ctrlAs].$$data_real = [];
  878 + scope[ctrlAs].$$data = [];
  879 + for (var i = 0; i < result.length; i ++) {
  880 + if ($icname_s_attr) {
  881 + if ($mlp_attr) {
  882 + if (eval("result[i]" + "." + $icname_s_attr)) {
  883 + // 全拼
  884 + result[i]["fullChars"] = pinyin.getFullChars(eval("result[i]" + "." + $icname_s_attr)).toUpperCase();
  885 + // 简拼
  886 + result[i]["camelChars"] = pinyin.getCamelChars(eval("result[i]" + "." + $icname_s_attr));
  887 + }
  888 + } else {
  889 + if (result[i][$icname_s_attr]) {
  890 + // 全拼
  891 + result[i]["fullChars"] = pinyin.getFullChars(result[i][$icname_s_attr]).toUpperCase();
  892 + // 简拼
  893 + result[i]["camelChars"] = pinyin.getCamelChars(result[i][$icname_s_attr]);
  894 + }
  895 + }
  896 + }
  897 +
  898 + if (result[i]["fullChars"]) { // 有拼音的加入数据源
  899 + scope[ctrlAs].$$data_real.push(result[i]);
  900 + }
  901 +
  902 + }
  903 + //console.log("start2");
  904 +
  905 + // 数量太大取前10条记录作为显示
  906 + if (angular.isArray(scope[ctrlAs].$$data_real)) {
  907 + // 先迭代循环查找已经传过来的值
  908 + if (scope[ctrlAs].$$data_real.length > 0) {
  909 + if (dcvalue) {
  910 + for (var j = 0; j < scope[ctrlAs].$$data_real.length; j++) {
  911 + if (scope[ctrlAs].$$data_real[j][$icname_attr] == dcvalue) {
  912 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[j]));
  913 + break;
  914 + }
  915 + }
  916 + }
  917 + }
  918 + // 在插入剩余的数据
  919 + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
  920 + if (scope[ctrlAs].$$data.length < 10) {
  921 + if ($mlp_attr) {
  922 + if (eval("scope[ctrlAs].$$data_real[k]" + "." + $icname_attr + " != dcvalue")) {
  923 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));
  924 + }
  925 + } else {
  926 + if (scope[ctrlAs].$$data_real[k][$icname_attr] != dcvalue) {
  927 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));
  928 + }
  929 + }
  930 + } else {
  931 + break;
  932 + }
  933 + }
  934 + }
  935 +
  936 + //console.log("end");
  937 + };
  938 +
  939 + /**
  940 + * 判定一个对象是否为空对象。
  941 + * @param Obj
  942 + */
  943 + scope[ctrlAs].$$internal_isEmpty_obj = function(obj) {
  944 + console.log(typeof obj);
  945 +
  946 + if (typeof obj === "object" && !(obj instanceof Array)) {
  947 + for (var prop in obj) {
  948 + if (obj.hasOwnProperty(prop)) {
  949 + return false;
  950 + }
  951 + }
  952 + return true;
  953 + } else {
  954 + throw "必须是对象";
  955 + }
  956 + };
  957 +
  958 + // 刷新数据
  959 + scope[ctrlAs].$$internal_refresh_fn = function(search) {
  960 + // 绑定的model字段值,此属性是绑定属性,只能在link阶段获取
  961 + var $dcvalue_attr = attr["dcvalue"];
  962 +
  963 + console.log("刷新数据:" + $dcvalue_attr);
  964 +
  965 + if (!$$data_init) { // 只初始化$$data_real一次,重新载入页面才能重新初始化
  966 + if (dictionaryUtils.getByGroup($datatype_attr)) { // 判定是否字典类型数据源
  967 + scope[ctrlAs].$$internal_dic_data(
  968 + $datatype_attr, $icname_attr, $icname_s_attr);
  969 + if ($dcvalue_attr) {
  970 + scope[ctrlAs].$$internalmodel = $dcvalue_attr;
  971 + }
  972 + } else { // 非字典类型数据源
  973 + if (!$dataassociate_attr) {
  974 + $$searchInfoService_g[$datatype_attr].list(
  975 + {type: "all"},
  976 + function(result) {
  977 + //console.log("ok:" + $datatype_attr);
  978 + scope[ctrlAs].$$internal_other_data(result, $dcvalue_attr);
  979 + //console.log("ok2:" + $datatype_attr);
  980 + if ($dcvalue_attr) {
  981 + scope[ctrlAs].$$internalmodel = $dcvalue_attr;
  982 + }
  983 +
  984 + $$data_init = true;
  985 + },
  986 + function(result) {
  987 +
  988 + }
  989 + );
  990 + }
  991 + }
  992 + }
  993 +
  994 + if ($$data_init) {
  995 + if (search && search != "") { // 有search值
  996 + if (!dictionaryUtils.getByGroup($datatype_attr)) { // 其他数据源
  997 + // 处理search
  998 + console.log("search:" + search);
  999 +
  1000 + scope[ctrlAs].$$data = [];
  1001 + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
  1002 + var upTerm = search.toUpperCase();
  1003 + if (scope[ctrlAs].$$data.length < 10) {
  1004 + if (scope[ctrlAs].$$data_real[k].fullChars.indexOf(upTerm) != -1
  1005 + || scope[ctrlAs].$$data_real[k].camelChars.indexOf(upTerm) != -1) {
  1006 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));
  1007 + }
  1008 + } else {
  1009 + break;
  1010 + }
  1011 + }
  1012 + }
  1013 + }
  1014 +
  1015 + }
  1016 +
  1017 + };
  1018 +
  1019 +
  1020 +
  1021 +
  1022 +
  1023 +
  1024 +
  1025 +
  1026 +
  1027 +
  1028 + // TODO:
  1029 +
  1030 + // dom全部载入后调用
  1031 + $timeout(function() {
  1032 + console.log("dom全部载入后调用");
  1033 + }, 0);
  1034 + // 监控dcvalue model值变换
  1035 + attr.$observe("dcvalue", function(value) {
  1036 + console.log("监控dc1 model值变换:" + value);
  1037 + scope[ctrlAs].$$internalmodel = value;
  1038 + }
  1039 + );
  1040 + // 监控获取数据参数变换
  1041 + attr.$observe("dataparam", function(value) {
  1042 + // 判定是否空对象
  1043 + console.log(value);
  1044 + var obj = JSON.parse(value);
  1045 + var $dcvalue_attr = attr["dcvalue"];
  1046 + if (!scope[ctrlAs].$$internal_isEmpty_obj(obj)) {
  1047 + console.log("dataparam:" + obj);
  1048 +
  1049 + //
  1050 +
  1051 + obj["type"] = "all";
  1052 +
  1053 + $$data_init = false;
  1054 + $$searchInfoService_g[$datatype_attr].list(
  1055 + obj,
  1056 + function(result) {
  1057 + //console.log("ok:" + $datatype_attr);
  1058 + scope[ctrlAs].$$internal_other_data(result, $dcvalue_attr);
  1059 + //console.log("ok2:" + $datatype_attr);
  1060 + if ($dcvalue_attr) {
  1061 + scope[ctrlAs].$$internalmodel = $dcvalue_attr;
  1062 + }
  1063 +
  1064 + $$data_init = true;
  1065 + },
  1066 + function(result) {
  1067 +
  1068 + }
  1069 + );
  1070 + }
  1071 + }
  1072 + );
  1073 + }
  1074 + };
  1075 + }
  1076 + };
  1077 +
  1078 + }
  1079 +]);
  1080 +
  1081 +/**
  1082 + * saCheckboxgroup指令
  1083 + * 属性如下:
  1084 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  1085 + * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}
  1086 + * dcname(必须):绑定的model字段名,如:dcname=xl.id
  1087 + * name(必须):控件的名字
  1088 + * required(可选):是否要用required验证
  1089 + * disabled(可选):标示框是否可选
  1090 + *
  1091 + */
  1092 +angular.module('ScheduleApp').directive('saCheckboxgroup', [
  1093 + function() {
  1094 + return {
  1095 + restrict: 'E',
  1096 + templateUrl: '/pages/scheduleApp/module/common/dt/MyCheckboxGroupWrapTemplate.html',
  1097 + scope: {
  1098 + model: "=" // 独立作用域,关联外部的模型object
  1099 + },
  1100 + controllerAs: "$saCheckboxgroupCtrl",
  1101 + bindToController: true,
  1102 + controller: function($scope) {
  1103 + var self = this;
  1104 + self.$$data = []; // 内部的数据
  1105 +
  1106 + // TODO:数据写死,周一至周日选择数据,以后有别的数据再议
  1107 + self.$$data = [
  1108 + {name: "星期一", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  1109 + {name: "星期二", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  1110 + {name: "星期三", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  1111 + {name: "星期四", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  1112 + {name: "星期五", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  1113 + {name: "星期六", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  1114 + {name: "星期日", checkedvalue: "1", uncheckedvalue: "0", ischecked: false}
  1115 + ];
  1116 + },
  1117 +
  1118 + /**
  1119 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  1120 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  1121 + * @param tElem
  1122 + * @param tAttrs
  1123 + * @returns {{pre: Function, post: Function}}
  1124 + */
  1125 + compile: function(tElem, tAttrs) {
  1126 + // 获取所有的属性
  1127 + var $name_attr = tAttrs["name"]; // 控件的名字
  1128 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  1129 + var $disabled_attr = tAttrs["disabled"]; // 是否禁用
  1130 + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名
  1131 +
  1132 + // controlAs名字
  1133 + var ctrlAs = '$saCheckboxgroupCtrl';
  1134 +
  1135 + // 如果有required属性,添加angularjs required验证
  1136 + if ($required_attr != undefined) {
  1137 + //console.log(tElem.html());
  1138 + tElem.find("div").attr("required", "");
  1139 + }
  1140 + // 如果有disabled属性,添加禁用标志
  1141 + if ($disabled_attr != undefined) {
  1142 + tElem.find("input").attr("ng-disabled", "true");
  1143 + }
  1144 +
  1145 + return {
  1146 + pre: function(scope, element, attr) {
  1147 + // TODO:
  1148 + },
  1149 + /**
  1150 + * 相当于link函数。
  1151 + * @param scope
  1152 + * @param element
  1153 + * @param attr
  1154 + */
  1155 + post: function(scope, element, attr) {
  1156 + // name属性
  1157 + if ($name_attr) {
  1158 + scope[ctrlAs]["$name_attr"] = $name_attr;
  1159 + }
  1160 +
  1161 + /**
  1162 + * checkbox选择事件处理函数。
  1163 + * @param $d 数据对象,$$data中的元素对象
  1164 + */
  1165 + scope[ctrlAs].$$internal_updateCheck_fn = function($d) {
  1166 + $d.ischecked = !$d.ischecked;
  1167 + console.log($d);
  1168 + };
  1169 +
  1170 + // 测试使用watch监控$$data的变化
  1171 + scope.$watch(
  1172 + function() {
  1173 + return scope[ctrlAs]["$$data"];
  1174 + },
  1175 + function(newValue, oldValue) {
  1176 + // 根据$$data生成对应的数据
  1177 + var rule_days_arr = [];
  1178 + var i;
  1179 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {
  1180 + if (scope[ctrlAs]["$$data"][i].ischecked)
  1181 + rule_days_arr.push(scope[ctrlAs]["$$data"][i].checkedvalue);
  1182 + else
  1183 + rule_days_arr.push(scope[ctrlAs]["$$data"][i].uncheckedvalue);
  1184 + }
  1185 + scope[ctrlAs].$$internalmodel = rule_days_arr.join(",");
  1186 + //scope[ctrlAs].$$internalmodel = undefined;
  1187 + console.log("bbbbbbbb--->" + scope[ctrlAs].$$internalmodel);
  1188 +
  1189 + // 更新model
  1190 + if ($dcname_attr) {
  1191 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = rule_days_arr.join(',');");
  1192 + }
  1193 +
  1194 +
  1195 + },
  1196 + true
  1197 + );
  1198 +
  1199 + // TODO:
  1200 +
  1201 + // 监控dcvalue model值变换
  1202 + attr.$observe("dcvalue", function(value) {
  1203 + console.log("saCheckboxgroup 监控dc1 model值变换:" + value);
  1204 + if (value) {
  1205 + // 根据value值,修改$$data里的值
  1206 + var data_array = value.split(",");
  1207 + var i;
  1208 + if (data_array.length > scope[ctrlAs]["$$data"].length) {
  1209 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i ++) {
  1210 + if (data_array[i] == scope[ctrlAs]["$$data"][i].checkedvalue) {
  1211 + scope[ctrlAs]["$$data"][i].ischecked = true;
  1212 + } else {
  1213 + scope[ctrlAs]["$$data"][i].ischecked = false;
  1214 + }
  1215 + }
  1216 + } else {
  1217 + for (i = 0; i < data_array.length; i ++) {
  1218 + if (data_array[i] == scope[ctrlAs]["$$data"][i].checkedvalue) {
  1219 + scope[ctrlAs]["$$data"][i].ischecked = true;
  1220 + } else {
  1221 + scope[ctrlAs]["$$data"][i].ischecked = false;
  1222 + }
  1223 + }
  1224 + }
  1225 +
  1226 + }
  1227 + });
  1228 + }
  1229 +
  1230 + };
  1231 +
  1232 +
  1233 + }
  1234 +
  1235 + };
  1236 + }
  1237 +]);
  1238 +
  1239 +/**
  1240 + * saDategroup指令
  1241 + * 属性如下:
  1242 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  1243 + * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}
  1244 + * dcname(必须):绑定的model字段名,如:dcname=xl.id
  1245 + * name(必须):控件的名字
  1246 + * required(可选):是否要用required验证
  1247 + * disabled(可选):标示框是否可选
  1248 + *
  1249 + */
  1250 +angular.module('ScheduleApp').directive('saDategroup', [
  1251 + '$filter',
  1252 + function($filter) {
  1253 + return {
  1254 + restrict: 'E',
  1255 + templateUrl: '/pages/scheduleApp/module/common/dt/MyDateGroupWrapTemplate.html',
  1256 + scope: {
  1257 + model: "=" // 独立作用域,关联外部的模型object
  1258 + },
  1259 + controllerAs: "$saDategroupCtrl",
  1260 + bindToController: true,
  1261 + controller: function($scope) {
  1262 + var self = this;
  1263 + self.$$data = []; // 内部的数据
  1264 + self.$$date_select; // 内部选中的日期
  1265 +
  1266 + //// 测试数据
  1267 + //self.$$data = [
  1268 + // {datestr: '2011-01-01', ischecked: true},
  1269 + // {datestr: '2011-01-01', ischecked: true},
  1270 + // {datestr: '2011-01-01', ischecked: true}
  1271 + //];
  1272 + },
  1273 +
  1274 + /**
  1275 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  1276 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  1277 + * @param tElem
  1278 + * @param tAttrs
  1279 + * @returns {{pre: Function, post: Function}}
  1280 + */
  1281 + compile: function(tElem, tAttrs) {
  1282 + // 获取所有的属性
  1283 + var $name_attr = tAttrs["name"]; // 控件的名字
  1284 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  1285 + var $disabled_attr = tAttrs["disabled"]; // 是否禁用
  1286 + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名
  1287 +
  1288 + // controlAs名字
  1289 + var ctrlAs = '$saDategroupCtrl';
  1290 +
  1291 + // 如果有required属性,添加angularjs required验证
  1292 + if ($required_attr != undefined) {
  1293 + //console.log(tElem.html());
  1294 + tElem.find("div").attr("required", "");
  1295 + }
  1296 + // 如果有disabled属性,添加禁用标志
  1297 + if ($disabled_attr != undefined) {
  1298 + tElem.find("input").attr("ng-disabled", "true");
  1299 + tElem.find("div").attr("ng-disabled", "true");
  1300 + }
  1301 +
  1302 + return {
  1303 + pre: function (scope, element, attr) {
  1304 + // TODO:
  1305 + },
  1306 + /**
  1307 + * 相当于link函数。
  1308 + * @param scope
  1309 + * @param element
  1310 + * @param attr
  1311 + */
  1312 + post: function (scope, element, attr) {
  1313 + // name属性
  1314 + if ($name_attr) {
  1315 + scope[ctrlAs]["$name_attr"] = $name_attr;
  1316 + }
  1317 +
  1318 +
  1319 + // 日期open属性,及方法
  1320 + scope[ctrlAs].$$specialDateOpen = false;
  1321 + scope[ctrlAs].$$specialDate_open = function() {
  1322 + scope[ctrlAs].$$specialDateOpen = true;
  1323 + };
  1324 +
  1325 + // 监控选择的日期
  1326 + scope.$watch(
  1327 + function() {
  1328 + return scope[ctrlAs]['$$date_select'];
  1329 + },
  1330 + function(newValue, oldValue) {
  1331 + if (newValue) {
  1332 + //console.log("saDategroup--->selectdate:" + newValue);
  1333 + // 调用内置filter,转换日期到yyyy-MM-dd格式
  1334 + var text = $filter('date')(newValue, 'yyyy-MM-dd');
  1335 + var i;
  1336 + var isexist = false; // 日期是否已经选择标识
  1337 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {
  1338 + if (scope[ctrlAs]["$$data"][i].datestr == text) {
  1339 + isexist = true;
  1340 + break;
  1341 + }
  1342 + }
  1343 + if (!isexist) {
  1344 + scope[ctrlAs]["$$data"].push(
  1345 + {
  1346 + datestr: text,
  1347 + ischecked: true
  1348 + }
  1349 + );
  1350 + }
  1351 +
  1352 + }
  1353 +
  1354 + }
  1355 + );
  1356 +
  1357 + /**
  1358 + * 日期点击事件处理函数。
  1359 + * @param $index 索引
  1360 + */
  1361 + scope[ctrlAs].$$internal_datestr_click = function($index) {
  1362 + scope[ctrlAs].$$data.splice($index, 1);
  1363 + };
  1364 +
  1365 + // 测试使用watch监控$$data的变化
  1366 + scope.$watch(
  1367 + function() {
  1368 + return scope[ctrlAs]['$$data'];
  1369 + },
  1370 + function(newValue, oldValue) {
  1371 + // 根据$$data生成对应的数据
  1372 + var special_days_arr = [];
  1373 + var i;
  1374 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {
  1375 + special_days_arr.push(scope[ctrlAs]["$$data"][i].datestr);
  1376 + }
  1377 +
  1378 + scope[ctrlAs].$$internalmodel = special_days_arr.join(",");
  1379 + console.log("bbbbbbbb--->" + scope[ctrlAs].$$internalmodel);
  1380 +
  1381 + // 更新model
  1382 + if ($dcname_attr) {
  1383 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = special_days_arr.join(',');");
  1384 + }
  1385 + },
  1386 + true
  1387 + );
  1388 +
  1389 + // 监控dcvalue model值变换
  1390 + attr.$observe("dcvalue", function(value) {
  1391 + console.log("saDategroup 监控dc1 model值变换:" + value);
  1392 + if (value) {
  1393 + // 根据value值,修改$$data里的值
  1394 + var date_array = value.split(",");
  1395 + var i;
  1396 + scope[ctrlAs]["$$data"] = [];
  1397 + for (i = 0; i < date_array.length; i++) {
  1398 + scope[ctrlAs]["$$data"].push(
  1399 + {
  1400 + datestr: date_array[i],
  1401 + ischecked: true
  1402 + }
  1403 + );
  1404 + }
  1405 +
  1406 +
  1407 +
  1408 +
  1409 +
  1410 +
  1411 +
  1412 +
  1413 +
  1414 + }
  1415 + });
  1416 +
  1417 + }
  1418 +
  1419 + };
  1420 + }
  1421 + }
  1422 + }
  1423 +]);
  1424 +
  1425 +/**
  1426 + * saGuideboardgroup指令
  1427 + * 属性如下:
  1428 + * name(必须):控件的名字
  1429 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  1430 + * xlidvalue(必须):绑定的model线路id值,如:xlidvalue={{ctrl.employeeInfoForSave.xl.id}}
  1431 + * lprangevalue(必须):绑定的model路牌名字范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  1432 + * lprangename(必须):绑定的model路牌名字范围字段名,如:lprangename=lprange
  1433 + * lpidrangevalue(必须):绑定的model路牌id范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  1434 + * lpidrangename(必须):绑定的model路牌id范围字段名,如:lprangename=lprange
  1435 + * lpstartvalue(必须):绑定的model起始路牌值,如:lpstartvalue={{ctrl.employeeInfoForSave.lpstart}}
  1436 + * lpstartname(必须):绑定的model起始路牌字段名,如:lpstartname=lpstart
  1437 + *
  1438 + * required(可选):是否要用required验证
  1439 + *
  1440 + */
  1441 +angular.module('ScheduleApp').directive('saGuideboardgroup', [
  1442 + 'GuideboardManageService_g',
  1443 + function(guideboardManageService_g) {
  1444 + return {
  1445 + restrict: 'E',
  1446 + templateUrl: '/pages/scheduleApp/module/common/dt/MyGuideboardGroupWrapTemplate.html',
  1447 + scope: {
  1448 + model: "=" // 独立作用域,关联外部的模型object
  1449 + },
  1450 + controllerAs: '$saGuideboardgroupCtrl',
  1451 + bindToController: true,
  1452 + controller: function($scope) {
  1453 + var self = this;
  1454 + self.$$data = []; // 选择线路后,该线路的路牌数据
  1455 +
  1456 + // 测试数据
  1457 + //self.$$data = [
  1458 + // {lpid: 1, lpname: '路1', isstart: false},
  1459 + // {lpid: 2, lpname: '路2', isstart: true},
  1460 + // {lpid: 3, lpname: '路3', isstart: false}
  1461 + //];
  1462 +
  1463 +
  1464 + self.$$dataSelected = []; // 选中的路牌列表
  1465 + self.$$dataSelectedStart = undefined; // 起始路牌
  1466 +
  1467 + //self.$$dataSelected = [
  1468 + // {lpid: 11, lpname: '路11', isstart: false},
  1469 + // {lpid: 12, lpname: '路12', isstart: true},
  1470 + // {lpid: 13, lpname: '路13', isstart: false}
  1471 + //];
  1472 +
  1473 + // saGuideboardgroup组件的ng-model,用于外部绑定等操作
  1474 + self.$$internalmodel = undefined;
  1475 +
  1476 + self.$$data_init = false; // *数据源初始化标志
  1477 + self.$$data_xl_first_init = false; // 线路是否初始化
  1478 + self.$$data_lp_first_init = false; // 路牌名字是否初始化
  1479 + self.$$data_lpid_first_init = false; // 路牌id是否初始化
  1480 + self.$$data_lpstart_first_init = false; // 起始路牌是否初始化
  1481 +
  1482 + },
  1483 +
  1484 + /**
  1485 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  1486 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  1487 + * @param tElem
  1488 + * @param tAttrs
  1489 + * @returns {{pre: Function, post: Function}}
  1490 + */
  1491 + compile: function(tElem, tAttrs) {
  1492 + // TODO:获取所有的属性
  1493 + var $name_attr = tAttrs["name"]; // 控件的名字
  1494 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  1495 + var $lprangename_attr = tAttrs["lprangename"]; // 绑定的model路牌名字范围字段名
  1496 + var $lpidrangename_attr = tAttrs["lpidrangename"]; // 绑定的model路牌id范围字段名
  1497 + var $lpstartname_attr = tAttrs["lpstartname"]; // 绑定的model起始路牌字段名
  1498 +
  1499 + // controlAs名字
  1500 + var ctrlAs = '$saGuideboardgroupCtrl';
  1501 +
  1502 + // 如果有required属性,添加angularjs required验证
  1503 + if ($required_attr != undefined) {
  1504 + //console.log(tElem.html());
  1505 + tElem.find("div").attr("required", "");
  1506 + }
  1507 +
  1508 + return {
  1509 + pre: function(scope, element, attr) {
  1510 + // TODO:
  1511 + },
  1512 +
  1513 + /**
  1514 + * 相当于link函数。
  1515 + * @param scope
  1516 + * @param element
  1517 + * @param attr
  1518 + */
  1519 + post: function(scope, element, attr) {
  1520 + // name属性
  1521 + if ($name_attr) {
  1522 + scope[ctrlAs]["$name_attr"] = $name_attr;
  1523 + }
  1524 +
  1525 + // TODO:
  1526 +
  1527 +
  1528 + /**
  1529 + * 路牌列表点击(路牌列表中选中路牌)
  1530 + * @param $index
  1531 + */
  1532 + scope[ctrlAs].$$internal_lplist_click = function($index) {
  1533 + var data_temp = scope[ctrlAs].$$data;
  1534 + if (data_temp && data_temp.length > $index) {
  1535 + scope[ctrlAs].$$dataSelected.push({
  1536 + lpid: data_temp[$index].lpid,
  1537 + lpname: data_temp[$index].lpname,
  1538 + isstart: data_temp[$index].isstart
  1539 + });
  1540 +
  1541 + // 如果没有指定过初始路牌,默认选择此路牌作为起始路牌
  1542 + if (scope[ctrlAs].$$dataSelectedStart == undefined) {
  1543 + scope[ctrlAs].$$internal_sellplist_click(
  1544 + scope[ctrlAs].$$dataSelected.length - 1);
  1545 + }
  1546 + }
  1547 + };
  1548 + /**
  1549 + * 选中的路牌单击(初始路牌选择)
  1550 + * @param $index
  1551 + */
  1552 + scope[ctrlAs].$$internal_sellplist_click = function($index) {
  1553 + var data_temp = scope[ctrlAs].$$dataSelected;
  1554 + if (data_temp && data_temp.length > $index) {
  1555 + for (var i = 0; i < data_temp.length; i++) {
  1556 + data_temp[i].isstart = false;
  1557 + }
  1558 + data_temp[$index].isstart = true;
  1559 + scope[ctrlAs].$$dataSelectedStart = $index;
  1560 + }
  1561 + };
  1562 + /**
  1563 + * 选中的路牌双击(删除选中的路牌)
  1564 + * @param $index
  1565 + */
  1566 + scope[ctrlAs].$$internal_sellplist_dbclick = function($index) {
  1567 + var data_temp = scope[ctrlAs].$$dataSelected;
  1568 + if (data_temp && data_temp.length > $index) {
  1569 + if (scope[ctrlAs].$$dataSelectedStart == $index) {
  1570 + scope[ctrlAs].$$dataSelectedStart = undefined;
  1571 + }
  1572 + data_temp.splice($index, 1);
  1573 + }
  1574 + };
  1575 +
  1576 +
  1577 + /**
  1578 + * 验证内部数据,更新外部model
  1579 + */
  1580 + scope[ctrlAs].$$internal_validate_model = function() {
  1581 + var data_temp = scope[ctrlAs].$$dataSelected;
  1582 + var data_temp2 = scope[ctrlAs].$$dataSelectedStart;
  1583 + var lpNames = [];
  1584 + var lpIds = [];
  1585 + var lpStart = 0;
  1586 + var i = 0;
  1587 +
  1588 + if (data_temp &&
  1589 + data_temp.length > 0 &&
  1590 + data_temp2 != undefined) {
  1591 +
  1592 + for (i = 0; i < data_temp.length; i++) {
  1593 + lpNames.push(data_temp[i].lpname);
  1594 + lpIds.push(data_temp[i].lpid)
  1595 + }
  1596 + data_temp[data_temp2].isstart = true;
  1597 + lpStart = data_temp2 + 1;
  1598 +
  1599 + // 更新内部model,用于外部验证
  1600 + // 内部model的值暂时随意,以后再改
  1601 + scope[ctrlAs].$$internalmodel = {desc: "ok"};
  1602 +
  1603 + // 更新外部model字段
  1604 + if ($lprangename_attr) {
  1605 + console.log("lprangename=" + lpNames.join(','));
  1606 + eval("scope[ctrlAs].model" + "." + $lprangename_attr + " = lpNames.join(',');");
  1607 + }
  1608 + if ($lpidrangename_attr) {
  1609 + console.log("lpidrangename=" + lpIds.join(','));
  1610 + eval("scope[ctrlAs].model" + "." + $lpidrangename_attr + " = lpIds.join(',');");
  1611 + }
  1612 + if ($lpstartname_attr) {
  1613 + console.log("lpstartname=" + lpStart);
  1614 + eval("scope[ctrlAs].model" + "." + $lpstartname_attr + " = lpStart;");
  1615 + }
  1616 +
  1617 + } else {
  1618 + scope[ctrlAs].$$internalmodel = undefined;
  1619 + }
  1620 +
  1621 +
  1622 + };
  1623 +
  1624 + // 监控内部数据,$$data_selected 变化
  1625 + scope.$watch(
  1626 + function() {
  1627 + return scope[ctrlAs].$$dataSelected;
  1628 + },
  1629 + function(newValue, oldValue) {
  1630 + scope[ctrlAs].$$internal_validate_model();
  1631 + },
  1632 + true
  1633 + );
  1634 +
  1635 + // 监控内部数据,$$data_selected_start 变化
  1636 + scope.$watch(
  1637 + function() {
  1638 + return scope[ctrlAs].$$dataSelectedStart;
  1639 + },
  1640 + function(newValue, oldValue) {
  1641 + scope[ctrlAs].$$internal_validate_model();
  1642 + },
  1643 + true
  1644 + );
  1645 +
  1646 + /**
  1647 + * 验证数据是否初始化完成,
  1648 + * 所谓的初始化就是内部所有的数据被有效设定过一次。
  1649 + */
  1650 + scope[ctrlAs].$$internal_validate_init = function() {
  1651 + var self = scope[ctrlAs];
  1652 +
  1653 + if (self.$$data_xl_first_init &&
  1654 + self.$$data_lp_first_init &&
  1655 + self.$$data_lpid_first_init &&
  1656 + self.$$data_lpstart_first_init) {
  1657 + console.log("数据初始化完毕!");
  1658 + self.$$data_init = true;
  1659 + }
  1660 +
  1661 + };
  1662 +
  1663 + // 监控初始化标志,线路,路牌,路牌id,起始路牌
  1664 + scope.$watch(
  1665 + function() {
  1666 + return scope[ctrlAs].$$data_xl_first_init;
  1667 + },
  1668 + function(newValue, oldValue) {
  1669 + scope[ctrlAs].$$internal_validate_init();
  1670 + }
  1671 + );
  1672 + scope.$watch(
  1673 + function() {
  1674 + return scope[ctrlAs].$$data_lp_first_init;
  1675 + },
  1676 + function(newValue, oldValue) {
  1677 + scope[ctrlAs].$$internal_validate_init();
  1678 + }
  1679 + );
  1680 + scope.$watch(
  1681 + function() {
  1682 + return scope[ctrlAs].$$data_lpid_first_init;
  1683 + },
  1684 + function(newValue, oldValue) {
  1685 + scope[ctrlAs].$$internal_validate_init();
  1686 + }
  1687 + );
  1688 + scope.$watch(
  1689 + function() {
  1690 + return scope[ctrlAs].$$data_lpstart_first_init;
  1691 + },
  1692 + function(newValue, oldValue) {
  1693 + scope[ctrlAs].$$internal_validate_init();
  1694 + }
  1695 + );
  1696 +
  1697 +
  1698 + // 监控线路id的变化
  1699 + attr.$observe("xlidvalue", function(value) {
  1700 + if (value && value != "") {
  1701 + console.log("xlidvalue=" + value);
  1702 +
  1703 + guideboardManageService_g.rest.list(
  1704 + {"xl.id_eq": value, size: 100},
  1705 + function(result) {
  1706 + // 获取值了
  1707 + console.log("路牌获取了");
  1708 +
  1709 + scope[ctrlAs].$$data = [];
  1710 + for (var i = 0; i < result.content.length; i++) {
  1711 + scope[ctrlAs].$$data.push({
  1712 + lpid: result.content[i].id,
  1713 + lpname: result.content[i].lpName,
  1714 + isstart: false
  1715 + });
  1716 + }
  1717 + if (scope[ctrlAs].$$data_init) {
  1718 + scope[ctrlAs].$$dataSelected = [];
  1719 + scope[ctrlAs].$$dataSelectedStart = undefined;
  1720 + scope[ctrlAs].$$internalmodel = undefined;
  1721 + }
  1722 + scope[ctrlAs].$$data_xl_first_init = true;
  1723 + },
  1724 + function(result) {
  1725 +
  1726 + }
  1727 + );
  1728 +
  1729 + }
  1730 + });
  1731 +
  1732 + // 监控路牌名称范围值的变化
  1733 + attr.$observe("lprangevalue", function(value) {
  1734 + if (value && value != "") {
  1735 + var data_temp = scope[ctrlAs].$$dataSelected;
  1736 + var lpnames = value.split(",");
  1737 + var i = 0;
  1738 + if (data_temp && data_temp.length == 0) { // 初始创建
  1739 + console.log("lprangevalue变换了");
  1740 + for (i = 0; i < lpnames.length; i++) {
  1741 + scope[ctrlAs].$$dataSelected.push({
  1742 + lpname: lpnames[i],
  1743 + isstart: false
  1744 + });
  1745 + }
  1746 + } else {
  1747 + for (i = 0; i < lpnames.length; i++) {
  1748 + data_temp[i].lpname = lpnames[i];
  1749 + }
  1750 + }
  1751 + scope[ctrlAs].$$data_lp_first_init = true;
  1752 + }
  1753 + });
  1754 +
  1755 + // 监控路牌id范围值的变化
  1756 + attr.$observe("lpidrangevalue", function(value) {
  1757 + if (value && value != "") {
  1758 + console.log("lpidrangevalue=" + value);
  1759 + var data_temp = scope[ctrlAs].$$dataSelected;
  1760 + var lpids = value.split(",");
  1761 + var i = 0;
  1762 + if (data_temp && data_temp.length == 0) { // 初始创建
  1763 + console.log("lpidrangevalue");
  1764 + for (i = 0; i < lpids.length; i++) {
  1765 + scope[ctrlAs].$$dataSelected.push({
  1766 + lpid: lpids[i],
  1767 + isstart: false
  1768 + });
  1769 + }
  1770 + } else {
  1771 + for (i = 0; i < lpids.length; i++) {
  1772 + data_temp[i].lpid = lpids[i];
  1773 + }
  1774 + }
  1775 + scope[ctrlAs].$$data_lpid_first_init = true;
  1776 + }
  1777 + });
  1778 +
  1779 + // 监控起始路牌的变化
  1780 + attr.$observe("lpstartvalue", function(value) {
  1781 + if (value && value != "") {
  1782 + scope[ctrlAs].$$dataSelectedStart = value - 1;
  1783 + scope[ctrlAs].$$data_lpstart_first_init = true;
  1784 + }
  1785 + });
  1786 +
  1787 +
  1788 +
  1789 + }
  1790 + }
  1791 +
  1792 + }
  1793 + }
  1794 + }
  1795 +]);
  1796 +
  1797 +/**
  1798 + * saEmployeegroup指令
  1799 + * 属性如下:
  1800 + * name(必须):控件的名字
  1801 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  1802 + * xlidvalue(必须):绑定的model线路id值,如:xlidvalue={{ctrl.employeeInfoForSave.xl.id}}
  1803 + * dbbmrangevalue(必须):绑定的model搭班编码范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  1804 + * dbbmrangename(必须):绑定的model搭班编码范围字段名,如:lprangename=lprange
  1805 + * rycidrangevalue(必须):绑定的model人员配置idid范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  1806 + * rycidrangename(必须):绑定的model人员配置id范围字段名,如:lprangename=lprange
  1807 + * rystartvalue(必须):绑定的model起始人员,如:lpstartvalue={{ctrl.employeeInfoForSave.lpstart}}
  1808 + * rystartname(必须):绑定的model起始人员字段名,如:lpstartname=lpstart
  1809 + *
  1810 + * required(可选):是否要用required验证
  1811 + *
  1812 + */
  1813 +angular.module('ScheduleApp').directive('saEmployeegroup', [
  1814 + 'EmployeeConfigService_g',
  1815 + function(employeeConfigService_g) {
  1816 + return {
  1817 + restrict: 'E',
  1818 + templateUrl: '/pages/scheduleApp/module/common/dt/MyEmployeeGroupWrapTemplate.html',
  1819 + scope: {
  1820 + model: "=" // 独立作用域,关联外部的模型object
  1821 + },
  1822 + controllerAs: '$saEmployeegroupCtrl',
  1823 + bindToController: true,
  1824 + controller: function($scope) {
  1825 + var self = this;
  1826 + self.$$data = []; // 选择线路后,该线路的人员配置数据
  1827 +
  1828 + // 测试数据
  1829 + //self.$$data = [
  1830 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1'},
  1831 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2'},
  1832 + // {id: 3, dbbm: "3", jsy: '忍3', spy: '守3'}
  1833 + //];
  1834 +
  1835 + self.$$dataSelected = []; // 选中的人员配置列表
  1836 + self.$$dataSelectedStart = undefined; // 起始人员配置
  1837 +
  1838 + //self.$$dataSelected = [
  1839 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isstart: false},
  1840 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true},
  1841 + // {id: 3, dbbm: "3", jsy: '忍3', spy: '守3', isstart: false}
  1842 + //];
  1843 +
  1844 + self.$$isFB = false; // 是否分班
  1845 + self.$$dataFBSelected = []; // 选中的分班人员组配置列表
  1846 + self.$$dataFBInternalSelected = undefined; // 分班组内人员选中标识
  1847 + self.$$dataFBSelectedStart = undefined; // 选中的起始分班人员组合
  1848 +
  1849 + //self.$$dataFBSelected = [
  1850 + // {isstart: true, group: [
  1851 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isselected: false},
  1852 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true}
  1853 + // ]},
  1854 + // {isstart: false, group: [
  1855 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isselected: false},
  1856 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true}
  1857 + // ]}
  1858 + //];
  1859 +
  1860 + // saGuideboardgroup组件的ng-model,用于外部绑定等操作
  1861 + self.$$internalmodel = undefined;
  1862 +
  1863 + self.$$data_init = false; // *数据源初始化标志
  1864 + self.$$data_xl_first_init = false; // 线路是否初始化
  1865 + self.$$data_ry_first_init = false; // 人员配置是否初始化
  1866 + self.$$data_ry_first_data = undefined; // 人员配置初始化数据
  1867 + self.$$data_rycid_first_init = false; // 人员配置id是否初始化
  1868 + self.$$data_rycid_first_data = undefined; // 人员配置id初始化数据
  1869 + self.$$data_rystart_first_init = false; // 起始人员是否初始化
  1870 + self.$$data_rystart_first_data = undefined; // 起始人员初始化数据
  1871 +
  1872 + },
  1873 +
  1874 + /**
  1875 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  1876 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  1877 + * @param tElem
  1878 + * @param tAttrs
  1879 + * @returns {{pre: Function, post: Function}}
  1880 + */
  1881 + compile: function(tElem, tAttrs) {
  1882 + // TODO:获取所有的属性
  1883 + var $name_attr = tAttrs["name"]; // 控件的名字
  1884 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  1885 + var $dbbmrangename_attr = tAttrs["dbbmrangename"]; // 绑定的model搭班编码范围字段名
  1886 + var rycidrangename_attr = tAttrs["rycidrangename"]; // 绑定的model人员配置id范围字段名
  1887 + var $rystartname_attr = tAttrs["rystartname"]; // 绑定的model起始人员字段名
  1888 +
  1889 + // controlAs名字
  1890 + var ctrlAs = '$saEmployeegroupCtrl';
  1891 +
  1892 + // 如果有required属性,添加angularjs required验证
  1893 + if ($required_attr != undefined) {
  1894 + //console.log(tElem.html());
  1895 + tElem.find("div").attr("required", "");
  1896 + }
  1897 +
  1898 + return {
  1899 + pre: function(scope, element, attr) {
  1900 + // TODO:
  1901 + },
  1902 +
  1903 + /**
  1904 + * 相当于link函数。
  1905 + * @param scope
  1906 + * @param element
  1907 + * @param attr
  1908 + */
  1909 + post: function(scope, element, attr) {
  1910 + // name属性
  1911 + if ($name_attr) {
  1912 + scope[ctrlAs]["$name_attr"] = $name_attr;
  1913 + }
  1914 +
  1915 + /**
  1916 + * 人员配置列表点击(人员配置列表中选中路牌)
  1917 + * @param $index
  1918 + */
  1919 + scope[ctrlAs].$$internal_rylist_click = function($index) {
  1920 + var data_temp = scope[ctrlAs].$$data;
  1921 + if (data_temp && data_temp.length > $index) {
  1922 + if (!scope[ctrlAs].$$isFB) { // 不分班
  1923 + scope[ctrlAs].$$dataSelected.push({
  1924 + id : data_temp[$index].id,
  1925 + dbbm: data_temp[$index].dbbm,
  1926 + jsy: data_temp[$index].jsy,
  1927 + spy: data_temp[$index].spy,
  1928 + isstart: false
  1929 + });
  1930 +
  1931 + // 如果没有指定过初始人员,默认选择此人员作为起始人员
  1932 + if (scope[ctrlAs].$$dataSelectedStart == undefined) {
  1933 + scope[ctrlAs].$$internal_selrylist_click(
  1934 + scope[ctrlAs].$$dataSelected.length - 1);
  1935 + }
  1936 + } else { // 分班
  1937 + if (scope[ctrlAs].$$dataFBInternalSelected) { // 替换组内人员
  1938 + scope[ctrlAs].$$dataFBSelected
  1939 + [scope[ctrlAs].$$dataFBInternalSelected.gindex].group
  1940 + [scope[ctrlAs].$$dataFBInternalSelected.index] = {
  1941 + id : data_temp[$index].id,
  1942 + dbbm: data_temp[$index].dbbm,
  1943 + jsy: data_temp[$index].jsy,
  1944 + spy: data_temp[$index].spy,
  1945 + isselected: true
  1946 + };
  1947 +
  1948 + } else {
  1949 + scope[ctrlAs].$$dataFBSelected.push({
  1950 + isstart: false,
  1951 + group: [].concat(
  1952 + {
  1953 + id : data_temp[$index].id,
  1954 + dbbm: data_temp[$index].dbbm,
  1955 + jsy: data_temp[$index].jsy,
  1956 + spy: data_temp[$index].spy,
  1957 + isselected: false
  1958 + }, {
  1959 + id : data_temp[$index].id,
  1960 + dbbm: data_temp[$index].dbbm,
  1961 + jsy: data_temp[$index].jsy,
  1962 + spy: data_temp[$index].spy,
  1963 + isselected: false
  1964 + }
  1965 + )
  1966 + });
  1967 + if (scope[ctrlAs].$$dataFBSelectedStart == undefined) {
  1968 + scope[ctrlAs].$$internal_selrygrouplist_click(
  1969 + scope[ctrlAs].$$dataFBSelected.length - 1);
  1970 + }
  1971 + }
  1972 + }
  1973 +
  1974 + }
  1975 + };
  1976 +
  1977 + /**
  1978 + * 选中的人员单击(初始人员选择)
  1979 + * @param $index
  1980 + */
  1981 + scope[ctrlAs].$$internal_selrylist_click = function($index) {
  1982 + var data_temp = scope[ctrlAs].$$dataSelected;
  1983 + if (data_temp && data_temp.length > $index) {
  1984 + for (var i = 0; i < data_temp.length; i++) {
  1985 + data_temp[i].isstart = false;
  1986 + }
  1987 + data_temp[$index].isstart = true;
  1988 + scope[ctrlAs].$$dataSelectedStart = $index;
  1989 + }
  1990 + };
  1991 + /**
  1992 + * 选中的人员双击(删除选中的人员)
  1993 + * @param $index
  1994 + */
  1995 + scope[ctrlAs].$$internal_selrylist_dbclick = function($index) {
  1996 + var data_temp = scope[ctrlAs].$$dataSelected;
  1997 + if (data_temp && data_temp.length > $index) {
  1998 + if (scope[ctrlAs].$$dataSelectedStart == $index) {
  1999 + scope[ctrlAs].$$dataSelectedStart = undefined;
  2000 + }
  2001 + data_temp.splice($index, 1);
  2002 + }
  2003 + };
  2004 +
  2005 + /**
  2006 + * 选中的分班组人员单击(初始人员选择)
  2007 + * @param $index
  2008 + */
  2009 + scope[ctrlAs].$$internal_selrygrouplist_click = function($index) {
  2010 + var data_temp = scope[ctrlAs].$$dataFBSelected;
  2011 + if (data_temp && data_temp.length > $index) {
  2012 + for (var i = 0; i < data_temp.length; i++) {
  2013 + data_temp[i].isstart = false;
  2014 + for (var j = 0; j < data_temp[i].group.length; j++) {
  2015 + data_temp[i].group[j].isselected = false;
  2016 + }
  2017 + }
  2018 + data_temp[$index].isstart = true;
  2019 + scope[ctrlAs].$$dataFBSelectedStart = $index;
  2020 + scope[ctrlAs].$$dataFBInternalSelected = undefined;
  2021 + }
  2022 + };
  2023 + /**
  2024 + * 分组内部单击(选中分班中的某组人员)
  2025 + * @param $groupindex 组index
  2026 + * @param $index 组内部某个index
  2027 + * @param $event 事件防止冒泡
  2028 + */
  2029 + scope[ctrlAs].$$internal_selrygroup_click = function($groupindex, $index, $event) {
  2030 + var data_temp = scope[ctrlAs].$$dataFBSelected;
  2031 + if (data_temp && data_temp.length > $groupindex) {
  2032 + if (data_temp[$groupindex].group && data_temp[$groupindex].group.length > $index) {
  2033 + // $$dataFBInternalSelected的格式如下:
  2034 + //{gindex: 1, index: 0}
  2035 + for (var i = 0; i < data_temp.length; i++) {
  2036 + data_temp[i].isstart = false;
  2037 + for (var j = 0; j < data_temp[i].group.length; j++) {
  2038 + data_temp[i].group[j].isselected = false;
  2039 + }
  2040 + }
  2041 + data_temp[$groupindex].group[$index].isselected = true;
  2042 + scope[ctrlAs].$$dataFBInternalSelected = {
  2043 + gindex: $groupindex, index: $index
  2044 + };
  2045 + scope[ctrlAs].$$dataFBSelectedStart = undefined;
  2046 + $event.stopPropagation();
  2047 + }
  2048 + }
  2049 +
  2050 + };
  2051 + /**
  2052 + * 选中的分班人员双击(删除选中的人员)
  2053 + * @param $index
  2054 + */
  2055 + scope[ctrlAs].$$internal_selrygrouplist_dbclick = function($index) {
  2056 + var data_temp = scope[ctrlAs].$$dataFBSelected;
  2057 + if (data_temp && data_temp.length > $index) {
  2058 + if (scope[ctrlAs].$$dataFBSelectedStart == $index) {
  2059 + scope[ctrlAs].$$dataFBSelectedStart = undefined;
  2060 + }
  2061 + if (scope[ctrlAs].$$dataFBInternalSelected &&
  2062 + scope[ctrlAs].$$dataFBInternalSelected.gindex == $index) {
  2063 + scope[ctrlAs].$$dataFBInternalSelected = undefined;
  2064 + }
  2065 + data_temp.splice($index, 1);
  2066 + }
  2067 + };
  2068 +
  2069 + /**
  2070 + * 验证内部数据,更新外部model
  2071 + */
  2072 + scope[ctrlAs].$$internal_validate_model = function() {
  2073 + var data_temp = scope[ctrlAs].$$dataSelected;
  2074 + var data_temp2 = scope[ctrlAs].$$dataSelectedStart;
  2075 + var data_temp3 = scope[ctrlAs].$$dataFBSelected;
  2076 + var data_temp4 = scope[ctrlAs].$$dataFBSelectedStart;
  2077 + var ryDbbms = [];
  2078 + var ryDbbm_group = [];
  2079 + var ryCids = [];
  2080 + var ryCid_group = [];
  2081 + var ryStart = 0;
  2082 + var i = 0;
  2083 + var j = 0;
  2084 +
  2085 + var isFB = scope[ctrlAs].$$isFB;
  2086 +
  2087 + if (isFB) {
  2088 + if (data_temp3 &&
  2089 + data_temp3.length > 0 &&
  2090 + data_temp4 != undefined) {
  2091 +
  2092 + for (i = 0; i < data_temp3.length; i++) {
  2093 + for (j = 0; j < data_temp3[i].group.length; j++) {
  2094 + ryDbbm_group.push(data_temp3[i].group[j].dbbm);
  2095 + ryCid_group.push(data_temp3[i].group[j].id);
  2096 + }
  2097 + ryDbbms.push(ryDbbm_group.join("-"));
  2098 + ryCids.push(ryCid_group.join("-"));
  2099 + ryDbbm_group = [];
  2100 + ryCid_group = [];
  2101 + }
  2102 +
  2103 + data_temp3[data_temp4].isstart = true;
  2104 + ryStart = data_temp4 + 1;
  2105 +
  2106 + // 更新内部model,用于外部验证
  2107 + // 内部model的值暂时随意,以后再改
  2108 + scope[ctrlAs].$$internalmodel = {desc: "ok"};
  2109 +
  2110 + // 更新外部model字段
  2111 + if ($dbbmrangename_attr) {
  2112 + console.log("dbbmrangename=" + ryDbbms.join(','));
  2113 + eval("scope[ctrlAs].model" + "." + $dbbmrangename_attr + " = ryDbbms.join(',');");
  2114 + }
  2115 + if (rycidrangename_attr) {
  2116 + console.log("rycidrangename=" + ryCids.join(','));
  2117 + eval("scope[ctrlAs].model" + "." + rycidrangename_attr + " = ryCids.join(',');");
  2118 + }
  2119 + if ($rystartname_attr) {
  2120 + console.log("rystartname=" + ryStart);
  2121 + eval("scope[ctrlAs].model" + "." + $rystartname_attr + " = ryStart;");
  2122 + }
  2123 +
  2124 + } else {
  2125 + scope[ctrlAs].$$internalmodel = undefined;
  2126 + }
  2127 +
  2128 + } else {
  2129 + if (data_temp &&
  2130 + data_temp.length > 0 &&
  2131 + data_temp2 != undefined) {
  2132 +
  2133 + for (i = 0; i < data_temp.length; i++) {
  2134 + ryDbbms.push(data_temp[i].dbbm);
  2135 + ryCids.push(data_temp[i].id);
  2136 + }
  2137 + data_temp[data_temp2].isstart = true;
  2138 + ryStart = data_temp2 + 1;
  2139 +
  2140 + // 更新内部model,用于外部验证
  2141 + // 内部model的值暂时随意,以后再改
  2142 + scope[ctrlAs].$$internalmodel = {desc: "ok"};
  2143 +
  2144 + // 更新外部model字段
  2145 + if ($dbbmrangename_attr) {
  2146 + console.log("dbbmrangename=" + ryDbbms.join(','));
  2147 + eval("scope[ctrlAs].model" + "." + $dbbmrangename_attr + " = ryDbbms.join(',');");
  2148 + }
  2149 + if (rycidrangename_attr) {
  2150 + console.log("rycidrangename=" + ryCids.join(','));
  2151 + eval("scope[ctrlAs].model" + "." + rycidrangename_attr + " = ryCids.join(',');");
  2152 + }
  2153 + if ($rystartname_attr) {
  2154 + console.log("rystartname=" + ryStart);
  2155 + eval("scope[ctrlAs].model" + "." + $rystartname_attr + " = ryStart;");
  2156 + }
  2157 +
  2158 + } else {
  2159 + scope[ctrlAs].$$internalmodel = undefined;
  2160 + }
  2161 + }
  2162 +
  2163 + };
  2164 +
  2165 + // 监控内部数据,$$dataSelected 变化
  2166 + scope.$watch(
  2167 + function() {
  2168 + return scope[ctrlAs].$$dataSelected;
  2169 + },
  2170 + function(newValue, oldValue) {
  2171 + scope[ctrlAs].$$internal_validate_model();
  2172 + },
  2173 + true
  2174 + );
  2175 +
  2176 + // 监控内部数据,$$dataSelectedStart 变化
  2177 + scope.$watch(
  2178 + function() {
  2179 + return scope[ctrlAs].$$dataSelectedStart;
  2180 + },
  2181 + function(newValue, oldValue) {
  2182 + scope[ctrlAs].$$internal_validate_model();
  2183 + },
  2184 + true
  2185 + );
  2186 +
  2187 +
  2188 + // 监控内部数据,$$dataFBSelected 变化
  2189 + scope.$watch(
  2190 + function() {
  2191 + return scope[ctrlAs].$$dataFBSelected;
  2192 + },
  2193 + function(newValue, oldValue) {
  2194 + scope[ctrlAs].$$internal_validate_model();
  2195 + },
  2196 + true
  2197 + );
  2198 +
  2199 + // 监控内部数据,$$dataFBSelectedStart 变化
  2200 + scope.$watch(
  2201 + function() {
  2202 + return scope[ctrlAs].$$dataFBSelectedStart;
  2203 + },
  2204 + function(newValue, oldValue) {
  2205 + scope[ctrlAs].$$internal_validate_model();
  2206 + },
  2207 + true
  2208 + );
  2209 +
  2210 + // 监控内部数据,$$dataFBInternalSelected 变化
  2211 + scope.$watch(
  2212 + function() {
  2213 + return scope[ctrlAs].$$dataFBInternalSelected;
  2214 + },
  2215 + function(newValue, oldValue) {
  2216 + scope[ctrlAs].$$internal_validate_model();
  2217 + },
  2218 + true
  2219 + );
  2220 +
  2221 + // 监控内部数据,$$isFB 变化
  2222 + scope.$watch(
  2223 + function() {
  2224 + return scope[ctrlAs].$$isFB;
  2225 + },
  2226 + function(newValue, oldValue) {
  2227 + scope[ctrlAs].$$internal_validate_model();
  2228 + },
  2229 + true
  2230 + );
  2231 +
  2232 + /**
  2233 + * 验证数据是否初始化完成,
  2234 + * 所谓的初始化就是内部所有的数据被有效设定过一次。
  2235 + */
  2236 + scope[ctrlAs].$$internal_validate_init = function() {
  2237 + var self = scope[ctrlAs];
  2238 + var data_temp = self.$$data;
  2239 + var dataSelect_temp = self.$$dataSelected;
  2240 + var dataFBSelect_temp = self.$$dataFBSelected;
  2241 + var dbbmnames = null;
  2242 + var dbbmnamegroup = null;
  2243 + var rycids = null;
  2244 + var rycidgroup = null;
  2245 +
  2246 + var i = 0;
  2247 + var j = 0;
  2248 + var k = 0;
  2249 +
  2250 + if (self.$$data_xl_first_init &&
  2251 + self.$$data_ry_first_init &&
  2252 + self.$$data_rycid_first_init &&
  2253 + self.$$data_rystart_first_init && !self.$$data_init) {
  2254 + console.log("开始初始化数据");
  2255 +
  2256 + // 判定是否分班,字符串中包含-就是了
  2257 + if (self.$$data_ry_first_data.indexOf("-") != -1 && dataFBSelect_temp.length == 0) { // 分班
  2258 + self.$$isFB = true;
  2259 +
  2260 + // 搭班编码、人员配置id
  2261 + dbbmnames = self.$$data_ry_first_data.split(",");
  2262 + rycids = self.$$data_rycid_first_data.split(",");
  2263 + for (i = 0; i < dbbmnames.length; i++) {
  2264 + dataFBSelect_temp.push({
  2265 + group: [],
  2266 + isstart: false
  2267 + });
  2268 + dbbmnamegroup = dbbmnames[i].split("-");
  2269 + rycidgroup = rycids[i].split("-");
  2270 +
  2271 + for (k = 0; k < dbbmnamegroup.length; k++) {
  2272 + dataFBSelect_temp[i].group.push({
  2273 + id: rycidgroup[k],
  2274 + dbbm: dbbmnamegroup[k],
  2275 + isselected: false
  2276 + });
  2277 +
  2278 + for (j = 0; j < data_temp.length; j++) {
  2279 + if (dataFBSelect_temp[i].group[k].dbbm == data_temp[j].dbbm) {
  2280 + dataFBSelect_temp[i].group[k].jsy = data_temp[j].jsy;
  2281 + dataFBSelect_temp[i].group[k].spy = data_temp[j].spy;
  2282 + break;
  2283 + }
  2284 + }
  2285 + }
  2286 +
  2287 + }
  2288 +
  2289 + // 初始人员
  2290 + scope[ctrlAs].$$dataFBSelectedStart = self.$$data_rystart_first_data - 1;
  2291 +
  2292 +
  2293 + } else if (dataSelect_temp.length == 0) {
  2294 + self.$$isFB = false;
  2295 +
  2296 + // 搭班编码、人员配置id
  2297 + dbbmnames = self.$$data_ry_first_data.split(",");
  2298 + rycids = self.$$data_rycid_first_data.split(",");
  2299 + for (i = 0; i < dbbmnames.length; i++) {
  2300 + dataSelect_temp.push({
  2301 + id: rycids[i],
  2302 + dbbm: dbbmnames[i],
  2303 + isstart: false
  2304 + });
  2305 + for (j = 0; j < data_temp.length; j++) {
  2306 + if (dataSelect_temp[i].dbbm == data_temp[j].dbbm) {
  2307 + dataSelect_temp[i].jsy = data_temp[j].jsy;
  2308 + dataSelect_temp[i].spy = data_temp[j].spy;
  2309 + break;
  2310 + }
  2311 + }
  2312 + }
  2313 + // 初始人员
  2314 + scope[ctrlAs].$$dataSelectedStart = self.$$data_rystart_first_data - 1;
  2315 +
  2316 + }
  2317 +
  2318 + console.log("数据初始化完毕!");
  2319 + self.$$data_init = true;
  2320 + }
  2321 +
  2322 + };
  2323 +
  2324 + // 监控初始化标志,线路,人员,起始人员
  2325 + scope.$watch(
  2326 + function() {
  2327 + return scope[ctrlAs].$$data_xl_first_init;
  2328 + },
  2329 + function(newValue, oldValue) {
  2330 + scope[ctrlAs].$$internal_validate_init();
  2331 + }
  2332 + );
  2333 + scope.$watch(
  2334 + function() {
  2335 + return scope[ctrlAs].$$data_ry_first_init;
  2336 + },
  2337 + function(newValue, oldValue) {
  2338 + scope[ctrlAs].$$internal_validate_init();
  2339 + }
  2340 + );
  2341 + scope.$watch(
  2342 + function() {
  2343 + return scope[ctrlAs].$$data_rycid_first_init;
  2344 + },
  2345 + function(newValue, oldValue) {
  2346 + scope[ctrlAs].$$internal_validate_init();
  2347 + }
  2348 + );
  2349 + scope.$watch(
  2350 + function() {
  2351 + return scope[ctrlAs].$$data_rystart_first_init;
  2352 + },
  2353 + function(newValue, oldValue) {
  2354 + scope[ctrlAs].$$internal_validate_init();
  2355 + }
  2356 + );
  2357 +
  2358 +
  2359 + // 监控线路id的变化
  2360 + attr.$observe("xlidvalue", function(value) {
  2361 + if (value && value != "") {
  2362 + console.log("xlidvalue=" + value);
  2363 +
  2364 + employeeConfigService_g.rest.list(
  2365 + {"xl.id_eq": value, size: 100},
  2366 + function(result) {
  2367 + // 获取值了
  2368 + console.log("人员配置获取了");
  2369 +
  2370 + scope[ctrlAs].$$data = [];
  2371 + for (var i = 0; i < result.content.length; i++) {
  2372 + scope[ctrlAs].$$data.push({
  2373 + id: result.content[i].id,
  2374 + dbbm: result.content[i].dbbm,
  2375 + jsy: result.content[i].jsy.personnelName,
  2376 + spy: result.content[i].spy == null ? "" : result.content[i].spy.personnelName
  2377 + });
  2378 + }
  2379 + if (scope[ctrlAs].$$data_init) {
  2380 + scope[ctrlAs].$$dataSelected = [];
  2381 + scope[ctrlAs].$$dataSelectedStart = undefined;
  2382 +
  2383 + scope[ctrlAs].$$dataFBSelected = [];
  2384 + scope[ctrlAs].$$dataFBInternalSelected = undefined;
  2385 + scope[ctrlAs].$$dataFBSelectedStart = undefined;
  2386 +
  2387 + scope[ctrlAs].$$internalmodel = undefined;
  2388 + }
  2389 + scope[ctrlAs].$$data_xl_first_init = true;
  2390 + },
  2391 + function(result) {
  2392 +
  2393 + }
  2394 + );
  2395 +
  2396 + }
  2397 + });
  2398 +
  2399 + // 监控搭班编码范围值的变化
  2400 + attr.$observe("dbbmrangevalue", function(value) {
  2401 + if (value && value != "") {
  2402 + console.log("dbbmrangevalue变换了");
  2403 + scope[ctrlAs].$$data_ry_first_init = true;
  2404 + scope[ctrlAs].$$data_ry_first_data = value;
  2405 + }
  2406 + });
  2407 +
  2408 + // 监控人员配置id范围值的变化
  2409 + attr.$observe("rycidrangevalue", function(value) {
  2410 + if (value && value != "") {
  2411 + console.log("rycidrangevalue变换了");
  2412 + scope[ctrlAs].$$data_rycid_first_init = true;
  2413 + scope[ctrlAs].$$data_rycid_first_data = value;
  2414 + }
  2415 + });
  2416 +
  2417 + // 监控起始人员的变化
  2418 + attr.$observe("rystartvalue", function(value) {
  2419 + if (value && value != "") {
  2420 + console.log("rystartvalue变换了");
  2421 + scope[ctrlAs].$$data_rystart_first_init = true;
  2422 + scope[ctrlAs].$$data_rystart_first_data = value;
  2423 + }
  2424 + });
  2425 +
  2426 + }
  2427 + }
  2428 +
  2429 + }
  2430 + }
  2431 + }
  2432 +]);
  2433 +