Commit b9150b563ed60ee49a8ec96ce82e16a545259adf

Authored by 徐烜
1 parent 1f4af450

PSM-12

Showing 24 changed files with 2726 additions and 340 deletions

Too many changes to show.

To preserve performance only 24 of 31 files are displayed.

src/main/resources/static/pages/scheduleApp/Gruntfile.js
... ... @@ -9,343 +9,375 @@ module.exports = function (grunt) {
9 9  
10 10 // clean清除插件配置
11 11 clean: {
12   - demo: { // demo模块
13   - src: ['app/demo/tmp/', 'app/demo/dist/']
14   - },
15   - busInfoManage: { // 车辆信息管理模块
16   - src: ['app/basicInfo/busInfoManage/tmp/', 'app/basicInfo/busInfoManage/dist/']
17   - },
18   - deviceInfoManage: { // 设备信息管理模块
19   - src: ['app/basicInfo/deviceInfoManage/tmp/', 'app/basicInfo/deviceInfoManage/dist/']
20   - },
21   - employeeInfoManage: { // 人员信息管理模块
22   - src: ['app/basicInfo/employeeInfoManage/tmp/', 'app/basicInfo/employeeInfoManage/dist/']
23   - },
24   - busConfig: { // 车辆配置模块
25   - src: ['app/core/busConfig/tmp/', 'app/core/busConfig/dist/']
26   - },
27   - busLineInfoOverview: { // 线路运营概览模块
28   - src: ['app/core/busLineInfoOverview/tmp/', 'app/core/busLineInfoOverview/dist/']
29   - },
30   - dispatchManage: { // 调派管理模块
31   - src: ['app/core/dispatchManage/tmp/', 'app/core/dispatchManage/dist/']
32   - },
33   - employeeConfig: { // 人员配置模块
34   - src: ['app/core/employeeConfig/tmp/', 'app/core/employeeConfig/dist/']
35   - },
36   - guideboardManage: { // 路牌管理模块
37   - src: ['app/core/guideboardManage/tmp/', 'app/core/guideboardManage/dist/']
38   - },
39   - rerunManage: { // 套跑管理模块
40   - src: ['app/core/rerunManage/tmp/', 'app/core/rerunManage/dist/']
41   - },
42   - schedulePlanManage: { // 排班计划管理模块
43   - src: ['app/core/schedulePlanManage/tmp/', 'app/core/schedulePlanManage/dist/']
44   - },
45   - scheduleRuleManage: { // 排班规则管理模块
46   - src: ['app/core/scheduleRuleManage/tmp/', 'app/core/scheduleRuleManage/dist/']
47   - },
48   - timeTableManage: { // 时刻表管理模块
49   - src: ['app/core/timeTableManage/tmp/', 'app/core/timeTableManage/dist/']
  12 + concat_directive: { // 所有指令合并的js文件
  13 + src: ['module/common/prj-common-directive.js']
50 14 }
  15 +
  16 + //,
  17 + //
  18 + //demo: { // demo模块
  19 + // src: ['app/demo/tmp/', 'app/demo/dist/']
  20 + //},
  21 + //busInfoManage: { // 车辆信息管理模块
  22 + // src: ['app/basicInfo/busInfoManage/tmp/', 'app/basicInfo/busInfoManage/dist/']
  23 + //},
  24 + //deviceInfoManage: { // 设备信息管理模块
  25 + // src: ['app/basicInfo/deviceInfoManage/tmp/', 'app/basicInfo/deviceInfoManage/dist/']
  26 + //},
  27 + //employeeInfoManage: { // 人员信息管理模块
  28 + // src: ['app/basicInfo/employeeInfoManage/tmp/', 'app/basicInfo/employeeInfoManage/dist/']
  29 + //},
  30 + //busConfig: { // 车辆配置模块
  31 + // src: ['app/core/busConfig/tmp/', 'app/core/busConfig/dist/']
  32 + //},
  33 + //busLineInfoOverview: { // 线路运营概览模块
  34 + // src: ['app/core/busLineInfoOverview/tmp/', 'app/core/busLineInfoOverview/dist/']
  35 + //},
  36 + //dispatchManage: { // 调派管理模块
  37 + // src: ['app/core/dispatchManage/tmp/', 'app/core/dispatchManage/dist/']
  38 + //},
  39 + //employeeConfig: { // 人员配置模块
  40 + // src: ['app/core/employeeConfig/tmp/', 'app/core/employeeConfig/dist/']
  41 + //},
  42 + //guideboardManage: { // 路牌管理模块
  43 + // src: ['app/core/guideboardManage/tmp/', 'app/core/guideboardManage/dist/']
  44 + //},
  45 + //rerunManage: { // 套跑管理模块
  46 + // src: ['app/core/rerunManage/tmp/', 'app/core/rerunManage/dist/']
  47 + //},
  48 + //schedulePlanManage: { // 排班计划管理模块
  49 + // src: ['app/core/schedulePlanManage/tmp/', 'app/core/schedulePlanManage/dist/']
  50 + //},
  51 + //scheduleRuleManage: { // 排班规则管理模块
  52 + // src: ['app/core/scheduleRuleManage/tmp/', 'app/core/scheduleRuleManage/dist/']
  53 + //},
  54 + //timeTableManage: { // 时刻表管理模块
  55 + // src: ['app/core/timeTableManage/tmp/', 'app/core/timeTableManage/dist/']
  56 + //}
51 57 },
52 58  
53   - // unglify压缩插件配置
54   - uglify: {
55   - demo: { // demo模块
56   - files: {
57   - 'app/demo/dist/demo1.min.js': ['app/demo/demo1.js']
58   - }
59   - },
60   - busInfoManage: { // 车辆信息管理模块
61   - files: {
62   - // TODO:
63   - }
64   - },
65   - deviceInfoManage: { // 设备信息管理模块
66   - files: {
67   - // TODO:
68   - }
69   - },
70   - employeeInfoManage: { // 人员信息管理模块
71   - files: {
72   - // TODO:
73   - }
74   - },
75   - busConfig: { // 车辆配置模块
76   - files: {
77   - 'app/core/busConfig/dist/service.min.js': ['app/core/busConfig/service.js'],
78   - 'app/core/busConfig/dist/controller.min.js': ['app/core/busConfig/controller.js']
79   - }
80   - },
81   - busLineInfoOverview: { // 线路运营概览模块
82   - files: {
83   - 'app/core/busLineInfoOverview/dist/service.min.js': ['app/core/busLineInfoOverview/service.js'],
84   - 'app/core/busLineInfoOverview/dist/controller.min.js': ['app/core/busLineInfoOverview/controller.js']
85   - }
86   - },
87   - dispatchManage: { // 调派管理模块
88   - files: {
89   - // TODO:
90   - }
91   - },
92   - employeeConfig: { // 人员配置模块
93   - files: {
94   - 'app/core/employeeConfig/dist/service.min.js': ['app/core/employeeConfig/service.js'],
95   - 'app/core/employeeConfig/dist/controller.min.js': ['app/core/employeeConfig/controller.js']
96   - }
97   - },
98   - guideboardManage: { // 路牌管理模块
99   - files: {
100   - 'app/core/guideboardManage/dist/service.min.js': ['app/core/guideboardManage/service.js'],
101   - 'app/core/guideboardManage/dist/controller.min.js': ['app/core/guideboardManage/controller.js']
102   - }
103   - },
104   - rerunManage: { // 套跑管理模块
105   - files: {
106   - // TODO:
107   - }
108   - },
109   - schedulePlanManage: { // 排班计划管理模块
110   - files: {
111   - // TODO:
112   - }
113   - },
114   - scheduleRuleManage: { // 排班规则管理模块
115   - files: {
116   - // TODO:
117   - }
118   - },
119   - timeTableManage: { // 时刻表管理模块
120   - files: {
121   - 'app/core/timeTableManage/dist/service.min.js': ['app/core/timeTableManage/service.js'],
122   - 'app/core/timeTableManage/dist/controller.min.js': ['app/core/timeTableManage/controller.js']
123   - }
  59 + // concat合并文件插件配置
  60 + concat: {
  61 + directive: {
  62 + options: {
  63 + banner: '//自定义指令'
  64 + },
  65 + src: [
  66 + 'module/common/dts1/load/loadingWidget.js', // loading界面指令
  67 + 'module/common/dts1/validation/remoteValidaton.js',// 服务端验证指令
  68 + 'module/common/dts1/select/saSelect.js', // select整合指令1
  69 + 'module/common/dts1/select/saSelect2.js', // select整合指令2
  70 + 'module/common/dts1/select/saSelect3.js', // select整合指令3
  71 + 'module/common/dts1/select/saSelect4.js', // select整合指令4
  72 + 'module/common/dts1/select/saSelect5.js', // select整合指令5
  73 + 'module/common/dts1/radioButton/saRadiogroup.js', // 单选框组整合指令
  74 + 'module/common/dts1/checkbox/saCheckboxgroup.js', // 多选框组整合指令
  75 + 'module/common/dts2/dateGroup/saDategroup.js', // 特殊日期选择指令
  76 + 'module/common/dts2/guideboardGroup/saGuideboardgroup.js', // 路牌选择整合指令
  77 + 'module/common/dts2/employeeGroup/saEmployeegroup.js', // 人员选饿整合指令
  78 + 'module/common/dts2/bcGroup/saBcgroup.js' // 班次选择整合指令
  79 + ],
  80 + dest: 'module/common/prj-common-directive.js'
124 81 }
125 82 },
126 83  
  84 + // unglify压缩插件配置
  85 + //uglify: {
  86 + // demo: { // demo模块
  87 + // files: {
  88 + // 'app/demo/dist/demo1.min.js': ['app/demo/demo1.js']
  89 + // }
  90 + // },
  91 + // busInfoManage: { // 车辆信息管理模块
  92 + // files: {
  93 + // // TODO:
  94 + // }
  95 + // },
  96 + // deviceInfoManage: { // 设备信息管理模块
  97 + // files: {
  98 + // // TODO:
  99 + // }
  100 + // },
  101 + // employeeInfoManage: { // 人员信息管理模块
  102 + // files: {
  103 + // // TODO:
  104 + // }
  105 + // },
  106 + // busConfig: { // 车辆配置模块
  107 + // files: {
  108 + // 'app/core/busConfig/dist/service.min.js': ['app/core/busConfig/service.js'],
  109 + // 'app/core/busConfig/dist/controller.min.js': ['app/core/busConfig/controller.js']
  110 + // }
  111 + // },
  112 + // busLineInfoOverview: { // 线路运营概览模块
  113 + // files: {
  114 + // 'app/core/busLineInfoOverview/dist/service.min.js': ['app/core/busLineInfoOverview/service.js'],
  115 + // 'app/core/busLineInfoOverview/dist/controller.min.js': ['app/core/busLineInfoOverview/controller.js']
  116 + // }
  117 + // },
  118 + // dispatchManage: { // 调派管理模块
  119 + // files: {
  120 + // // TODO:
  121 + // }
  122 + // },
  123 + // employeeConfig: { // 人员配置模块
  124 + // files: {
  125 + // 'app/core/employeeConfig/dist/service.min.js': ['app/core/employeeConfig/service.js'],
  126 + // 'app/core/employeeConfig/dist/controller.min.js': ['app/core/employeeConfig/controller.js']
  127 + // }
  128 + // },
  129 + // guideboardManage: { // 路牌管理模块
  130 + // files: {
  131 + // 'app/core/guideboardManage/dist/service.min.js': ['app/core/guideboardManage/service.js'],
  132 + // 'app/core/guideboardManage/dist/controller.min.js': ['app/core/guideboardManage/controller.js']
  133 + // }
  134 + // },
  135 + // rerunManage: { // 套跑管理模块
  136 + // files: {
  137 + // // TODO:
  138 + // }
  139 + // },
  140 + // schedulePlanManage: { // 排班计划管理模块
  141 + // files: {
  142 + // // TODO:
  143 + // }
  144 + // },
  145 + // scheduleRuleManage: { // 排班规则管理模块
  146 + // files: {
  147 + // // TODO:
  148 + // }
  149 + // },
  150 + // timeTableManage: { // 时刻表管理模块
  151 + // files: {
  152 + // 'app/core/timeTableManage/dist/service.min.js': ['app/core/timeTableManage/service.js'],
  153 + // 'app/core/timeTableManage/dist/controller.min.js': ['app/core/timeTableManage/controller.js']
  154 + // }
  155 + // }
  156 + //},
  157 +
127 158 // replace文本替换插件配置
128   - replace: {
129   - demo: { // demo模块
130   - src: ["app/demo/demo1.html"],
131   - dest: "app/demo/tmp/",
132   - "replacements": [{
133   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
134   - to: '$1dist/$2.min$3'
135   - }]
136   - },
137   - busInfoManage: { // 车辆信息管理模块
138   - src: ["app/basicInfo/busInfoManage/busInfoManage.html"],
139   - dest: "app/basicInfo/busInfoManage/tmp/",
140   - "replacements": [{
141   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
142   - to: '$1dist/$2.min$3'
143   - }]
144   - },
145   - deviceInfoManage: { // 设备信息管理模块
146   - src: ["app/basicInfo/deviceInfoManage/deviceInfoManage.html"],
147   - dest: "app/basicInfo/deviceInfoManage/tmp/",
148   - "replacements": [{
149   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
150   - to: '$1dist/$2.min$3'
151   - }]
152   - },
153   - employeeInfoManage: { // 人员信息管理
154   - src: ["app/basicInfo/employeeInfoManage/employeeInfoManage.html"],
155   - dest: "app/basicInfo/employeeInfoManage/tmp/",
156   - "replacements": [{
157   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
158   - to: '$1dist/$2.min$3'
159   - }]
160   - },
161   - busConfig: { // 车辆配置模块
162   - src: ["app/core/busConfig/busConfig.html"],
163   - dest: "app/core/busConfig/tmp/",
164   - "replacements": [{
165   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
166   - to: '$1dist/$2.min$3'
167   - }]
168   - },
169   - busLineInfoOverview: { // 线路运营概览模块
170   - src: ["app/core/busLineInfoOverview/busLineInfoOverview.html"],
171   - dest: "app/core/busLineInfoOverview/tmp/",
172   - "replacements": [{
173   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
174   - to: '$1dist/$2.min$3'
175   - }]
176   - },
177   - dispatchManage: { // 调派管理模块
178   - src: ["app/core/dispatchManage/dispatchManage.html"],
179   - dest: "app/core/dispatchManage/tmp/",
180   - "replacements": [{
181   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
182   - to: '$1dist/$2.min$3'
183   - }]
184   - },
185   - employeeConfig: { // 人员配置模块
186   - src: ["app/core/employeeConfig/employeeConfig.html"],
187   - dest: "app/core/employeeConfig/tmp/",
188   - "replacements": [{
189   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
190   - to: '$1dist/$2.min$3'
191   - }]
192   - },
193   - guideboardManage: { // 路牌管理模块
194   - src: ["app/core/guideboardManage/guideboardManage.html"],
195   - dest: "app/core/guideboardManage/tmp/",
196   - "replacements": [{
197   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
198   - to: '$1dist/$2.min$3'
199   - }]
200   - },
201   - rerunManage: { // 套跑管理模块
202   - src: ["app/core/rerunManage/rerunManage.html"],
203   - dest: "app/core/rerunManage/tmp/",
204   - "replacements": [{
205   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
206   - to: '$1dist/$2.min$3'
207   - }]
208   - },
209   - schedulePlanManage: { // 排班计划管理模块
210   - src: ["app/core/schedulePlanManage/schedulePlanManage.html"],
211   - dest: "app/core/schedulePlanManage/tmp/",
212   - "replacements": [{
213   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
214   - to: '$1dist/$2.min$3'
215   - }]
216   - },
217   - scheduleRuleManage: { // 排班规则管理模块
218   - src: ["app/core/scheduleRuleManage/scheduleRuleManage.html"],
219   - dest: "app/core/scheduleRuleManage/tmp/",
220   - "replacements": [{
221   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
222   - to: '$1dist/$2.min$3'
223   - }]
224   - },
225   - timeTableManage: { // 时刻表管理模块
226   - src: ["app/core/timeTableManage/timeTableManage.html"],
227   - dest: "app/core/timeTableManage/tmp/",
228   - "replacements": [{
229   - from: /(<script src=\")([^\"]*?)(.js\")/mg,
230   - to: '$1dist/$2.min$3'
231   - }]
232   - }
233   - },
  159 + //replace: {
  160 + // demo: { // demo模块
  161 + // src: ["app/demo/demo1.html"],
  162 + // dest: "app/demo/tmp/",
  163 + // "replacements": [{
  164 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  165 + // to: '$1dist/$2.min$3'
  166 + // }]
  167 + // },
  168 + // busInfoManage: { // 车辆信息管理模块
  169 + // src: ["app/basicInfo/busInfoManage/busInfoManage.html"],
  170 + // dest: "app/basicInfo/busInfoManage/tmp/",
  171 + // "replacements": [{
  172 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  173 + // to: '$1dist/$2.min$3'
  174 + // }]
  175 + // },
  176 + // deviceInfoManage: { // 设备信息管理模块
  177 + // src: ["app/basicInfo/deviceInfoManage/deviceInfoManage.html"],
  178 + // dest: "app/basicInfo/deviceInfoManage/tmp/",
  179 + // "replacements": [{
  180 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  181 + // to: '$1dist/$2.min$3'
  182 + // }]
  183 + // },
  184 + // employeeInfoManage: { // 人员信息管理
  185 + // src: ["app/basicInfo/employeeInfoManage/employeeInfoManage.html"],
  186 + // dest: "app/basicInfo/employeeInfoManage/tmp/",
  187 + // "replacements": [{
  188 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  189 + // to: '$1dist/$2.min$3'
  190 + // }]
  191 + // },
  192 + // busConfig: { // 车辆配置模块
  193 + // src: ["app/core/busConfig/busConfig.html"],
  194 + // dest: "app/core/busConfig/tmp/",
  195 + // "replacements": [{
  196 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  197 + // to: '$1dist/$2.min$3'
  198 + // }]
  199 + // },
  200 + // busLineInfoOverview: { // 线路运营概览模块
  201 + // src: ["app/core/busLineInfoOverview/busLineInfoOverview.html"],
  202 + // dest: "app/core/busLineInfoOverview/tmp/",
  203 + // "replacements": [{
  204 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  205 + // to: '$1dist/$2.min$3'
  206 + // }]
  207 + // },
  208 + // dispatchManage: { // 调派管理模块
  209 + // src: ["app/core/dispatchManage/dispatchManage.html"],
  210 + // dest: "app/core/dispatchManage/tmp/",
  211 + // "replacements": [{
  212 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  213 + // to: '$1dist/$2.min$3'
  214 + // }]
  215 + // },
  216 + // employeeConfig: { // 人员配置模块
  217 + // src: ["app/core/employeeConfig/employeeConfig.html"],
  218 + // dest: "app/core/employeeConfig/tmp/",
  219 + // "replacements": [{
  220 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  221 + // to: '$1dist/$2.min$3'
  222 + // }]
  223 + // },
  224 + // guideboardManage: { // 路牌管理模块
  225 + // src: ["app/core/guideboardManage/guideboardManage.html"],
  226 + // dest: "app/core/guideboardManage/tmp/",
  227 + // "replacements": [{
  228 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  229 + // to: '$1dist/$2.min$3'
  230 + // }]
  231 + // },
  232 + // rerunManage: { // 套跑管理模块
  233 + // src: ["app/core/rerunManage/rerunManage.html"],
  234 + // dest: "app/core/rerunManage/tmp/",
  235 + // "replacements": [{
  236 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  237 + // to: '$1dist/$2.min$3'
  238 + // }]
  239 + // },
  240 + // schedulePlanManage: { // 排班计划管理模块
  241 + // src: ["app/core/schedulePlanManage/schedulePlanManage.html"],
  242 + // dest: "app/core/schedulePlanManage/tmp/",
  243 + // "replacements": [{
  244 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  245 + // to: '$1dist/$2.min$3'
  246 + // }]
  247 + // },
  248 + // scheduleRuleManage: { // 排班规则管理模块
  249 + // src: ["app/core/scheduleRuleManage/scheduleRuleManage.html"],
  250 + // dest: "app/core/scheduleRuleManage/tmp/",
  251 + // "replacements": [{
  252 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  253 + // to: '$1dist/$2.min$3'
  254 + // }]
  255 + // },
  256 + // timeTableManage: { // 时刻表管理模块
  257 + // src: ["app/core/timeTableManage/timeTableManage.html"],
  258 + // dest: "app/core/timeTableManage/tmp/",
  259 + // "replacements": [{
  260 + // from: /(<script src=\")([^\"]*?)(.js\")/mg,
  261 + // to: '$1dist/$2.min$3'
  262 + // }]
  263 + // }
  264 + //},
234 265  
235 266 // static-inline静态文件插入替换插件配置
236   - staticinline: {
237   - demo: { // demo模块
238   - options: {
239   - basepath: 'app/demo/' // 查找路径
240   - },
241   - files: {
242   - 'app/demo/dist/demo1.dist.html': 'app/demo/tmp/demo1.html'
243   - }
244   - },
245   - busInfoManage: { // 车辆信息管理模块
246   - options: {
247   - basepath: 'app/basicInfo/busInfoManage'
248   - },
249   - files: {
250   - 'app/basicInfo/busInfoManage/dist/busInfoManage.dist.html': 'app/basicInfo/busInfoManage/tmp/busInfoManage.html'
251   - }
252   - },
253   - deviceInfoManage: { // 设备信息管理模块
254   - options: {
255   - basepath: 'app/basicInfo/deviceInfoManage'
256   - },
257   - files: {
258   - 'app/basicInfo/deviceInfoManage/dist/deviceInfoManage.dist.html': 'app/basicInfo/deviceInfoManage/tmp/deviceInfoManage.html'
259   - }
260   - },
261   - employeeInfoManage: { // 人员信息管理
262   - options: {
263   - basepath: 'app/basicInfo/employeeInfoManage'
264   - },
265   - files: {
266   - 'app/basicInfo/employeeInfoManage/dist/employeeInfoManage.dist.html': 'app/basicInfo/employeeInfoManage/tmp/employeeInfoManage.html'
267   - }
268   - },
269   - busConfig: { // 车辆配置模块
270   - options: {
271   - basepath: 'app/core/busConfig/'
272   - },
273   - files: {
274   - 'app/core/busConfig/dist/busConfig.dist.html': 'app/core/busConfig/tmp/busConfig.html'
275   - }
276   - },
277   - busLineInfoOverview: { // 线路运营概览模块
278   - options: {
279   - basepath: 'app/core/busLineInfoOverview/'
280   - },
281   - files: {
282   - 'app/core/busLineInfoOverview/dist/busLineInfoOverview.dist.html': 'app/core/busLineInfoOverview/tmp/busLineInfoOverview.html'
283   - }
284   - },
285   - dispatchManage: { // 调派管理模块
286   - options: {
287   - basepath: 'app/core/dispatchManage'
288   - },
289   - files: {
290   - 'app/core/dispatchManage/dist/dispatchManage.dist.html': 'app/core/dispatchManage/tmp/dispatchManage.html'
291   - }
292   - },
293   - employeeConfig: { // 人员配置模块
294   - options: {
295   - basepath: 'app/core/employeeConfig/'
296   - },
297   - files: {
298   - 'app/core/employeeConfig/dist/employeeConfig.dist.html': 'app/core/employeeConfig/tmp/employeeConfig.html'
299   - }
300   - },
301   - guideboardManage: { // 路牌管理模块
302   - options: {
303   - basepath: 'app/core/guideboardManage/'
304   - },
305   - files: {
306   - 'app/core/guideboardManage/dist/guideboardManage.dist.html': 'app/core/guideboardManage/tmp/guideboardManage.html'
307   - }
308   - },
309   - rerunManage: { // 套跑管理模块
310   - options: {
311   - basepath: 'app/core/rerunManage'
312   - },
313   - files: {
314   - 'app/core/rerunManage/dist/rerunManage.dist.html': 'app/core/rerunManage/tmp/rerunManage.html'
315   - }
316   - },
317   - schedulePlanManage: { // 排版计划管理模块
318   - options: {
319   - basepath: 'app/core/schedulePlanManage'
320   - },
321   - files: {
322   - 'app/core/schedulePlanManage/dist/schedulePlanManage.dist.html': 'app/core/schedulePlanManage/tmp/schedulePlanManage.html'
323   - }
324   - },
325   - scheduleRuleManage: { // 排班规则管理模块
326   - options: {
327   - basepath: 'app/core/scheduleRuleManage'
328   - },
329   - files: {
330   - 'app/core/scheduleRuleManage/dist/scheduleRuleManage.dist.html': 'app/core/scheduleRuleManage/tmp/scheduleRuleManage.html'
331   - }
332   - },
333   - timeTableManage: { // 时刻表管理模块
334   - options: {
335   - basepath: 'app/core/timeTableManage/'
336   - },
337   - files: {
338   - 'app/core/timeTableManage/dist/timeTableManage.html': 'app/core/timeTableManage/tmp/timeTableManage.html',
339   - 'app/core/timeTableManage/dist/timeTableList.html': 'app/core/timeTableManage/timeTableList.html',
340   - 'app/core/timeTableManage/dist/timeTableDetail.html': 'app/core/timeTableManage/timeTableDetail.html'
341   - }
342   - }
343   - }
  267 + //staticinline: {
  268 + // demo: { // demo模块
  269 + // options: {
  270 + // basepath: 'app/demo/' // 查找路径
  271 + // },
  272 + // files: {
  273 + // 'app/demo/dist/demo1.dist.html': 'app/demo/tmp/demo1.html'
  274 + // }
  275 + // },
  276 + // busInfoManage: { // 车辆信息管理模块
  277 + // options: {
  278 + // basepath: 'app/basicInfo/busInfoManage'
  279 + // },
  280 + // files: {
  281 + // 'app/basicInfo/busInfoManage/dist/busInfoManage.dist.html': 'app/basicInfo/busInfoManage/tmp/busInfoManage.html'
  282 + // }
  283 + // },
  284 + // deviceInfoManage: { // 设备信息管理模块
  285 + // options: {
  286 + // basepath: 'app/basicInfo/deviceInfoManage'
  287 + // },
  288 + // files: {
  289 + // 'app/basicInfo/deviceInfoManage/dist/deviceInfoManage.dist.html': 'app/basicInfo/deviceInfoManage/tmp/deviceInfoManage.html'
  290 + // }
  291 + // },
  292 + // employeeInfoManage: { // 人员信息管理
  293 + // options: {
  294 + // basepath: 'app/basicInfo/employeeInfoManage'
  295 + // },
  296 + // files: {
  297 + // 'app/basicInfo/employeeInfoManage/dist/employeeInfoManage.dist.html': 'app/basicInfo/employeeInfoManage/tmp/employeeInfoManage.html'
  298 + // }
  299 + // },
  300 + // busConfig: { // 车辆配置模块
  301 + // options: {
  302 + // basepath: 'app/core/busConfig/'
  303 + // },
  304 + // files: {
  305 + // 'app/core/busConfig/dist/busConfig.dist.html': 'app/core/busConfig/tmp/busConfig.html'
  306 + // }
  307 + // },
  308 + // busLineInfoOverview: { // 线路运营概览模块
  309 + // options: {
  310 + // basepath: 'app/core/busLineInfoOverview/'
  311 + // },
  312 + // files: {
  313 + // 'app/core/busLineInfoOverview/dist/busLineInfoOverview.dist.html': 'app/core/busLineInfoOverview/tmp/busLineInfoOverview.html'
  314 + // }
  315 + // },
  316 + // dispatchManage: { // 调派管理模块
  317 + // options: {
  318 + // basepath: 'app/core/dispatchManage'
  319 + // },
  320 + // files: {
  321 + // 'app/core/dispatchManage/dist/dispatchManage.dist.html': 'app/core/dispatchManage/tmp/dispatchManage.html'
  322 + // }
  323 + // },
  324 + // employeeConfig: { // 人员配置模块
  325 + // options: {
  326 + // basepath: 'app/core/employeeConfig/'
  327 + // },
  328 + // files: {
  329 + // 'app/core/employeeConfig/dist/employeeConfig.dist.html': 'app/core/employeeConfig/tmp/employeeConfig.html'
  330 + // }
  331 + // },
  332 + // guideboardManage: { // 路牌管理模块
  333 + // options: {
  334 + // basepath: 'app/core/guideboardManage/'
  335 + // },
  336 + // files: {
  337 + // 'app/core/guideboardManage/dist/guideboardManage.dist.html': 'app/core/guideboardManage/tmp/guideboardManage.html'
  338 + // }
  339 + // },
  340 + // rerunManage: { // 套跑管理模块
  341 + // options: {
  342 + // basepath: 'app/core/rerunManage'
  343 + // },
  344 + // files: {
  345 + // 'app/core/rerunManage/dist/rerunManage.dist.html': 'app/core/rerunManage/tmp/rerunManage.html'
  346 + // }
  347 + // },
  348 + // schedulePlanManage: { // 排版计划管理模块
  349 + // options: {
  350 + // basepath: 'app/core/schedulePlanManage'
  351 + // },
  352 + // files: {
  353 + // 'app/core/schedulePlanManage/dist/schedulePlanManage.dist.html': 'app/core/schedulePlanManage/tmp/schedulePlanManage.html'
  354 + // }
  355 + // },
  356 + // scheduleRuleManage: { // 排班规则管理模块
  357 + // options: {
  358 + // basepath: 'app/core/scheduleRuleManage'
  359 + // },
  360 + // files: {
  361 + // 'app/core/scheduleRuleManage/dist/scheduleRuleManage.dist.html': 'app/core/scheduleRuleManage/tmp/scheduleRuleManage.html'
  362 + // }
  363 + // },
  364 + // timeTableManage: { // 时刻表管理模块
  365 + // options: {
  366 + // basepath: 'app/core/timeTableManage/'
  367 + // },
  368 + // files: {
  369 + // 'app/core/timeTableManage/dist/timeTableManage.html': 'app/core/timeTableManage/tmp/timeTableManage.html',
  370 + // 'app/core/timeTableManage/dist/timeTableList.html': 'app/core/timeTableManage/timeTableList.html',
  371 + // 'app/core/timeTableManage/dist/timeTableDetail.html': 'app/core/timeTableManage/timeTableDetail.html'
  372 + // }
  373 + // }
  374 + //}
344 375  
345 376 });
346 377  
347 378 // grunt加载的插件
348 379 grunt.loadNpmTasks("grunt-contrib-clean");
  380 + grunt.loadNpmTasks("grunt-contrib-concat");
349 381 grunt.loadNpmTasks("grunt-contrib-uglify");
350 382 grunt.loadNpmTasks("grunt-static-inline");
351 383 grunt.loadNpmTasks("grunt-text-replace");
... ... @@ -360,6 +392,14 @@ module.exports = function (grunt) {
360 392 3、replace 将指定的html文件复制到tmp目录下,将其中的js后缀名替换成.min.js
361 393 4、staticinline 将.min.js的内容inline-内联插入到tmp的html文件中,然后重命名为.dist.html到dist目录中
362 394 */
363   - grunt.registerTask('default', ['clean', 'uglify', 'replace', 'staticinline']);
  395 + //grunt.registerTask('default', ['clean', 'uglify', 'replace', 'staticinline']);
  396 +
  397 + /*
  398 + 定义了一个directive的grunt任务
  399 + 任务组有顺序,如下说明:
  400 + 1、clean:concat_directive,清除合并生成的prj-common-directive.js文件
  401 + 2、concat:directive,重新合并prj-common-directive.js文件
  402 + */
  403 + grunt.registerTask('directive', ['clean:concat_directive', 'concat:directive']);
364 404  
365 405 };
366 406 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts1/checkbox/saCheckboxgroup.js 0 → 100644
  1 +
  2 +
  3 +/**
  4 + * saCheckboxgroup指令
  5 + * 属性如下:
  6 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  7 + * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}
  8 + * dcname(必须):绑定的model字段名,如:dcname=xl.id
  9 + * name(必须):控件的名字
  10 + * required(可选):是否要用required验证
  11 + * disabled(可选):标示框是否可选
  12 + *
  13 + */
  14 +angular.module('ScheduleApp').directive('saCheckboxgroup', [
  15 + function() {
  16 + return {
  17 + restrict: 'E',
  18 + templateUrl: '/pages/scheduleApp/module/common/dts1/checkbox/saCheckboxgroupTemplate.html',
  19 + scope: {
  20 + model: "=" // 独立作用域,关联外部的模型object
  21 + },
  22 + controllerAs: "$saCheckboxgroupCtrl",
  23 + bindToController: true,
  24 + controller: function($scope) {
  25 + var self = this;
  26 + self.$$data = []; // 内部的数据
  27 +
  28 + // TODO:数据写死,周一至周日选择数据,以后有别的数据再议
  29 + self.$$data = [
  30 + {name: "星期一", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  31 + {name: "星期二", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  32 + {name: "星期三", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  33 + {name: "星期四", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  34 + {name: "星期五", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  35 + {name: "星期六", checkedvalue: "1", uncheckedvalue: "0", ischecked: false},
  36 + {name: "星期日", checkedvalue: "1", uncheckedvalue: "0", ischecked: false}
  37 + ];
  38 + },
  39 +
  40 + /**
  41 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  42 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  43 + * @param tElem
  44 + * @param tAttrs
  45 + * @returns {{pre: Function, post: Function}}
  46 + */
  47 + compile: function(tElem, tAttrs) {
  48 + // 获取所有的属性
  49 + var $name_attr = tAttrs["name"]; // 控件的名字
  50 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  51 + var $disabled_attr = tAttrs["disabled"]; // 是否禁用
  52 + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名
  53 +
  54 + // controlAs名字
  55 + var ctrlAs = '$saCheckboxgroupCtrl';
  56 +
  57 + // 如果有required属性,添加angularjs required验证
  58 + if ($required_attr != undefined) {
  59 + //console.log(tElem.html());
  60 + tElem.find("div").attr("required", "");
  61 + }
  62 + // 如果有disabled属性,添加禁用标志
  63 + if ($disabled_attr != undefined) {
  64 + tElem.find("input").attr("ng-disabled", "true");
  65 + }
  66 +
  67 + return {
  68 + pre: function(scope, element, attr) {
  69 + // TODO:
  70 + },
  71 + /**
  72 + * 相当于link函数。
  73 + * @param scope
  74 + * @param element
  75 + * @param attr
  76 + */
  77 + post: function(scope, element, attr) {
  78 + // name属性
  79 + if ($name_attr) {
  80 + scope[ctrlAs]["$name_attr"] = $name_attr;
  81 + }
  82 +
  83 + /**
  84 + * checkbox选择事件处理函数。
  85 + * @param $d 数据对象,$$data中的元素对象
  86 + */
  87 + scope[ctrlAs].$$internal_updateCheck_fn = function($d) {
  88 + $d.ischecked = !$d.ischecked;
  89 + console.log($d);
  90 + };
  91 +
  92 + // 测试使用watch监控$$data的变化
  93 + scope.$watch(
  94 + function() {
  95 + return scope[ctrlAs]["$$data"];
  96 + },
  97 + function(newValue, oldValue) {
  98 + // 根据$$data生成对应的数据
  99 + var rule_days_arr = [];
  100 + var i;
  101 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {
  102 + if (scope[ctrlAs]["$$data"][i].ischecked)
  103 + rule_days_arr.push(scope[ctrlAs]["$$data"][i].checkedvalue);
  104 + else
  105 + rule_days_arr.push(scope[ctrlAs]["$$data"][i].uncheckedvalue);
  106 + }
  107 + scope[ctrlAs].$$internalmodel = rule_days_arr.join(",");
  108 + //scope[ctrlAs].$$internalmodel = undefined;
  109 + console.log("bbbbbbbb--->" + scope[ctrlAs].$$internalmodel);
  110 +
  111 + // 更新model
  112 + if ($dcname_attr) {
  113 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = rule_days_arr.join(',');");
  114 + }
  115 +
  116 +
  117 + },
  118 + true
  119 + );
  120 +
  121 + // TODO:
  122 +
  123 + // 监控dcvalue model值变换
  124 + attr.$observe("dcvalue", function(value) {
  125 + console.log("saCheckboxgroup 监控dc1 model值变换:" + value);
  126 + if (value) {
  127 + // 根据value值,修改$$data里的值
  128 + var data_array = value.split(",");
  129 + var i;
  130 + if (data_array.length > scope[ctrlAs]["$$data"].length) {
  131 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i ++) {
  132 + if (data_array[i] == scope[ctrlAs]["$$data"][i].checkedvalue) {
  133 + scope[ctrlAs]["$$data"][i].ischecked = true;
  134 + } else {
  135 + scope[ctrlAs]["$$data"][i].ischecked = false;
  136 + }
  137 + }
  138 + } else {
  139 + for (i = 0; i < data_array.length; i ++) {
  140 + if (data_array[i] == scope[ctrlAs]["$$data"][i].checkedvalue) {
  141 + scope[ctrlAs]["$$data"][i].ischecked = true;
  142 + } else {
  143 + scope[ctrlAs]["$$data"][i].ischecked = false;
  144 + }
  145 + }
  146 + }
  147 +
  148 + }
  149 + });
  150 + }
  151 +
  152 + };
  153 +
  154 +
  155 + }
  156 +
  157 + };
  158 + }
  159 +]);
  160 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dt/MyCheckboxGroupWrapTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/checkbox/saCheckboxgroupTemplate.html
src/main/resources/static/pages/scheduleApp/module/common/dts1/load/loadingWidget.js 0 → 100644
  1 +
  2 +/**
  3 + * loading载入中指令。
  4 + */
  5 +angular.module('ScheduleApp').directive('loadingWidget', ['requestNotificationChannel', function(requestNotificationChannel) {
  6 + return {
  7 + restrict: 'A',
  8 + link: function(scope, element) {
  9 + // 初始隐藏loading界面
  10 + element.hide();
  11 +
  12 + // 开始请求通知处理
  13 + requestNotificationChannel.onRequestStarted(scope, function() {
  14 + element.show();
  15 + });
  16 + // 请求结束通知处理
  17 + requestNotificationChannel.onRequestEnded(scope, function() {
  18 + element.hide();
  19 + });
  20 + }
  21 + };
  22 +}]);
0 23 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts1/radioButton/saRadiogroup.js 0 → 100644
  1 +
  2 +/**
  3 + * saRadiogroup指令
  4 + * 属性如下:
  5 + * model(必须):独立作用域,外部绑定的一个值,如:ctrl.timeTableManageForForm.isEnableDisTemplate
  6 + * dicgroup(必须):关联的字典数据type(TODO:以后增加其他数据源)
  7 + * name(必须):控件的名字
  8 + * required(可选):是否要用required验证
  9 + * disabled(可选):标示单选框是否可选
  10 + *
  11 + */
  12 +angular.module('ScheduleApp').directive("saRadiogroup", [function() {
  13 + /**
  14 + * 使用字典数据的单选按钮组的指令。
  15 + * 指令名称:truefalse-Dic
  16 + */
  17 + return {
  18 + restrict: 'E',
  19 + templateUrl: '/pages/scheduleApp/module/common/dts1/radioButton/saRadiogroupTemplate.html',
  20 + scope: {
  21 + model: "="
  22 + },
  23 + controllerAs: "$saRadiogroupCtrl",
  24 + bindToController: true,
  25 + controller: function($scope) {
  26 + //$scope["model"] = {selectedOption: null};
  27 + //console.log("controller");
  28 + //console.log("controller:" + $scope["model"]);
  29 +
  30 + var self = this;
  31 + self.$$data = null; // 内部数据
  32 + },
  33 +
  34 + /**
  35 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  36 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  37 + * @param tElem
  38 + * @param tAttrs
  39 + * @returns {{pre: Function, post: Function}}
  40 + */
  41 + compile: function(tElem, tAttrs) {
  42 + // 获取属性
  43 + var $dicgroup_attr = tAttrs["dicgroup"]; // 关联的字典数据type
  44 + var $name_attr = tAttrs["name"]; // 控件的名字
  45 + var $required_attr = tAttrs["required"]; // 是否要用required验证
  46 + var $disabled_attr = tAttrs["disabled"]; // 标示单选框是否可选
  47 +
  48 + // controlAs名字
  49 + var ctrlAs = "$saRadiogroupCtrl";
  50 +
  51 + // 如果有required属性,添加angularjs required验证
  52 + if ($required_attr != undefined) {
  53 + tElem.find("input").attr("required", "");
  54 + }
  55 +
  56 + return {
  57 + pre: function(scope, element, attr) {
  58 +
  59 + },
  60 +
  61 + /**
  62 + * 相当于link函数。
  63 + * @param scope
  64 + * @param element
  65 + * @param attr
  66 + */
  67 + post: function(scope, element, attr) {
  68 + //console.log("link");
  69 + //console.log("link:" + scope.model);
  70 + //scope["model"] = {selectedOption: null};
  71 +
  72 + if ($name_attr) {
  73 + scope[ctrlAs].nv = $name_attr;
  74 + }
  75 +
  76 + if ($disabled_attr) {
  77 + scope[ctrlAs].disabled = true;
  78 + }
  79 + if ($dicgroup_attr) {
  80 + var obj = dictionaryUtils.getByGroup($dicgroup_attr);
  81 + scope[ctrlAs].$$data = obj;
  82 + // 处理 scope["dic"] key值
  83 + scope[ctrlAs].dicvalueCalcu = function(value) {
  84 + if (value == "true") {
  85 + //console.log(value);
  86 + return true;
  87 + } else if (value == "false") {
  88 + //console.log(value);
  89 + return false;
  90 + } else {
  91 + return value;
  92 + }
  93 + };
  94 + }
  95 + }
  96 + };
  97 + }
  98 + };
  99 +}]);
... ...
src/main/resources/static/pages/scheduleApp/module/common/dt/MyRadioGroupWrapTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/radioButton/saRadiogroupTemplate.html
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect.js 0 → 100644
  1 +
  2 +angular.module('ScheduleApp').directive("saSelect", ['$timeout', function($timeout) {
  3 + return {
  4 + restrict: 'E',
  5 + templateUrl: '/pages/scheduleApp/module/common/dts1/select/saSelectTemplate.html',
  6 + scope: {
  7 + model: "="
  8 + },
  9 + controllerAs: "$saSelectCtrl",
  10 + bindToController: true,
  11 + controller: function() {
  12 + var self = this;
  13 + self.datas = []; // 关联的字典数据,内部格式 {code:{值},name:{名字}}
  14 + },
  15 + /**
  16 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  17 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  18 + * @param tElem
  19 + * @param tAttrs
  20 + * @returns {{pre: Function, post: Function}}
  21 + */
  22 + compile: function(tElem, tAttrs) {
  23 + // 确定是否使用angularjs required验证
  24 + // 属性 required
  25 + // 如果没有填写,内部不添加验证,如果填写了,并且等于true添加验证,否则不添加
  26 + var required_attr = tAttrs["required"];
  27 + if (required_attr) {
  28 + if (required_attr == "true") {
  29 + // 添加required属性指令
  30 + tElem.find("ui-select").attr("required", "");
  31 + } else {
  32 + // 不等于true,不添加required属性指令
  33 + }
  34 + } else {
  35 + // 不添加required属性指令
  36 + }
  37 +
  38 + //console.log("saSelect" + ":compile = >" + tElem.html());
  39 +
  40 + return {
  41 + pre: function(scope, element, attr) {
  42 + // TODO:
  43 + },
  44 + /**
  45 + * 相当于link函数。
  46 + *
  47 + * 重要属性如下:
  48 + * model 是绑定外部值。
  49 + * dicgroup 字典组的类型
  50 + * name input name属性值
  51 + */
  52 + post: function(scope, element, attr) {
  53 + // 1、获取属性
  54 + var dicgroup_attr = attr['dicgroup']; // 字典组的类型
  55 + var name_attr = attr['name']; // input name属性值
  56 + var dicname_attr = attr['dicname']; // model关联的字典名字段
  57 + var codename_attr = attr['codename']; // model关联的字典值字段
  58 + var placeholder_attr = attr['placeholder']; // select placeholder提示
  59 +
  60 + // 系统的字典对象,使用dictionaryUtils类获取
  61 + var origin_dicgroup;
  62 + var dic_key; // 字典key
  63 +
  64 + if (dicgroup_attr) { // 赋值指定的字典数据
  65 + origin_dicgroup = dictionaryUtils.getByGroup(dicgroup_attr);
  66 + for (dic_key in origin_dicgroup) {
  67 + var data = {}; // 重新组合的字典元素对象
  68 + if (dic_key == "true")
  69 + data.code = true;
  70 + else
  71 + data.code = dic_key;
  72 + data.name = origin_dicgroup[dic_key];
  73 + scope["$saSelectCtrl"].datas.push(data);
  74 + }
  75 + }
  76 +
  77 + if (name_attr) {
  78 + scope["$saSelectCtrl"].nv = name_attr;
  79 + }
  80 + if (placeholder_attr) {
  81 + scope["$saSelectCtrl"].ph = placeholder_attr;
  82 + }
  83 +
  84 + scope["$saSelectCtrl"].select = function($item) {
  85 + if (codename_attr) {
  86 + scope["$saSelectCtrl"].model[codename_attr] = $item.code;
  87 + }
  88 + if (dicname_attr) {
  89 + scope["$saSelectCtrl"].model[dicname_attr] = $item.name;
  90 + }
  91 + };
  92 +
  93 + scope["$saSelectCtrl"].remove = function() {
  94 + if (codename_attr) {
  95 + scope["$saSelectCtrl"].model[codename_attr] = null;
  96 + }
  97 + if (dicname_attr) {
  98 + scope["$saSelectCtrl"].model[dicname_attr] = null;
  99 + }
  100 + scope["$saSelectCtrl"].cmodel = null;
  101 + };
  102 +
  103 + $timeout(function() {
  104 + // 创建内部使用的绑定对象
  105 + var model_code = scope["$saSelectCtrl"].model[codename_attr];
  106 + scope["$saSelectCtrl"].cmodel = model_code;
  107 + }, 0);
  108 + }
  109 + }
  110 + }
  111 + };
  112 +}]);
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect2.js 0 → 100644
  1 +
  2 +
  3 +angular.module('ScheduleApp').directive("saSelect2", [
  4 + '$timeout', '$$SearchInfoService_g',
  5 + function($timeout, $$searchInfoService_g) {
  6 + return {
  7 + restrict: 'E',
  8 + templateUrl: '/pages/scheduleApp/module/common/dts1/select/saSelect2Template.html',
  9 + scope: {
  10 + model: "=" // 独立作用域,关联外部的模型对象
  11 + },
  12 + controllerAs: "$saSelectCtrl",
  13 + bindToController: true,
  14 + controller: function($scope) {
  15 + var self = this;
  16 + self.$$data = []; // 内部关联的数据
  17 + },
  18 + /**
  19 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  20 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  21 + * @param tElem
  22 + * @param tAttrs
  23 + * @returns {{pre: Function, post: Function}}
  24 + */
  25 + compile: function(tElem, tAttrs) {
  26 + // 1、获取此阶段使用的属性
  27 + var $required_attr = tAttrs["required"]; // 用于和表单验证连接,指定成required="true"才有效。
  28 +
  29 + // 2、处理属性
  30 +
  31 + // 确定是否使用angularjs required验证
  32 + // 属性 required
  33 + // 如果没有填写,内部不添加验证,如果填写了,并且等于true添加验证,否则不添加
  34 + if ($required_attr) {
  35 + if ($required_attr == "true") {
  36 + // 添加required属性指令
  37 + tElem.find("ui-select").attr("required", "");
  38 + } else {
  39 + // 不等于true,不添加required属性指令
  40 + }
  41 + } else {
  42 + // 不添加required属性指令
  43 + }
  44 +
  45 + //console.log("saSelect" + ":compile = >" + tElem.html());
  46 +
  47 + return {
  48 + pre: function(scope, element, attr) {
  49 + // TODO:
  50 + },
  51 + /**
  52 + * 相当于link函数。
  53 + *
  54 + * 重要属性如下:
  55 + * model 是绑定外部值。
  56 + * dicgroup 字典组的类型
  57 + * name input name属性值
  58 + */
  59 + post: function(scope, element, attr) {
  60 + // 1、获取此阶段使用的属性
  61 + var $name_attr = attr["name"]; // 表单验证时需要的名字
  62 + var $type_attr = attr["type"]; // 关联的那种数据值(xl/cl/ry)-> 对应线路信息/车辆信息/人员信息,后面有的继续加
  63 + var $modelcolname1_attr = attr["modelcolname1"]; // 关联的模型字段名字1(一般应该是编码字段)
  64 + var $modelcolname2_attr = attr["modelcolname2"]; // 关联的模型字段名字2(一般应该是名字字段)
  65 + var $datacolname1_attr = attr["datacolname1"]; // 内部数据对应的字段名字1(与模型字段1对应)
  66 + var $datacolname2_attr = attr["datacolname2"]; // 内部数据对应的字段名字2(与模型字段2对应)
  67 + var $showcolname_attr = attr["showcolname"]; // 下拉框显示的内部数据字段名
  68 + var $placeholder_attr = attr["placeholder"]; // select placeholder字符串描述
  69 +
  70 + // 2、处理属性、转换成$saSelectCtrl内部使用的属性
  71 + if ($name_attr) {
  72 + scope["$saSelectCtrl"].$name_attr = $name_attr;
  73 + }
  74 + if ($placeholder_attr) {
  75 + scope["$saSelectCtrl"].$placeholder_attr = $placeholder_attr;
  76 + }
  77 + if ($showcolname_attr) {
  78 + scope["$saSelectCtrl"].$showcolname_attr = $showcolname_attr;
  79 + }
  80 +
  81 + // 2-1、添加内部方法,根据type值,改变$$data的值
  82 + scope["$saSelectCtrl"].$$internal_data_change_fn = function() {
  83 + // 根据type属性动态载入数据
  84 + if ($type_attr) {
  85 + $$searchInfoService_g[$type_attr].list(
  86 + {type: "all"},
  87 + function(result) {
  88 + scope["$saSelectCtrl"].$$data = [];
  89 + for (var i = 0; i < result.length; i ++) {
  90 + var data = {}; // data是result的一部分属性集合,根据配置来确定
  91 + if ($datacolname1_attr) {
  92 + data[$datacolname1_attr] = result[i][$datacolname1_attr];
  93 + }
  94 + if ($datacolname2_attr) {
  95 + data[$datacolname2_attr] = result[i][$datacolname2_attr];
  96 + }
  97 + if ($showcolname_attr) {
  98 + // 动态添加基于名字的拼音
  99 + data[$showcolname_attr] = result[i][$showcolname_attr];
  100 + if (data[$showcolname_attr]) {
  101 + data["fullChars"] = pinyin.getFullChars(result[i][$showcolname_attr]).toUpperCase(); // 全拼
  102 + data["camelChars"] = pinyin.getCamelChars(result[i][$showcolname_attr]); // 简拼
  103 + }
  104 + }
  105 + if (data["fullChars"])
  106 + scope["$saSelectCtrl"].$$data.push(data);
  107 + }
  108 + },
  109 + function(result) {
  110 +
  111 + }
  112 + );
  113 + }
  114 + };
  115 +
  116 + // 3、选择、删除事件映射模型和内部数据对应的字段
  117 + scope["$saSelectCtrl"].$select_fn_attr = function($item) {
  118 + if ($modelcolname1_attr && $datacolname1_attr) {
  119 + scope["$saSelectCtrl"].model[$modelcolname1_attr] = $item[$datacolname1_attr];
  120 + }
  121 + if ($modelcolname2_attr && $datacolname2_attr) {
  122 + scope["$saSelectCtrl"].model[$modelcolname2_attr] = $item[$datacolname2_attr];
  123 + }
  124 + };
  125 + scope["$saSelectCtrl"].$remove_fn_attr = function() {
  126 + if ($modelcolname1_attr) {
  127 + scope["$saSelectCtrl"].model[$modelcolname1_attr] = null;
  128 + }
  129 + if ($modelcolname2_attr) {
  130 + scope["$saSelectCtrl"].model[$modelcolname2_attr] = null;
  131 + }
  132 + scope["$saSelectCtrl"].$$cmodel = null; // 内部模型清空
  133 +
  134 + scope["$saSelectCtrl"].$$internal_data_change_fn();
  135 + };
  136 +
  137 + // 4、搜索事件
  138 + scope["$saSelectCtrl"].$refreshdata_fn_attr = function($search) {
  139 + //var fullChars = pinyin.getFullChars($search).toUpperCase();
  140 + //var camelChars = pinyin.getCamelChars($search);
  141 + //
  142 + //console.log(fullChars + " " + camelChars);
  143 + // TODO:事件暂时没用,放着以后再说
  144 + };
  145 +
  146 + // 5、全部载入后,输入的
  147 + $timeout(function() {
  148 + // 创建内部使用的绑定对象,用于确认选中那个值
  149 + scope["$saSelectCtrl"].$$cmodel = scope["$saSelectCtrl"].model[$modelcolname1_attr];
  150 +
  151 + scope["$saSelectCtrl"].$$internal_data_change_fn();
  152 + }, 0);
  153 + }
  154 + }
  155 + }
  156 + };
  157 + }
  158 +]);
  159 +
... ...
src/main/resources/static/pages/scheduleApp/module/other/MySearchSelectTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect2Template.html
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect3.js 0 → 100644
  1 +
  2 +
  3 +
  4 +/**
  5 + * saSelect3指令
  6 + * 属性如下:
  7 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  8 + * name(必须):控件的名字
  9 + * placeholder(可选):占位符字符串
  10 + * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}
  11 + * dcname(必须):绑定的model字段名,如:dcname=xl.id
  12 + * icname(必须):内部与之对应的字段名,如:icname=code
  13 + * dcname2(可选):其他需要赋值的model字段名2,如:dcname2=xl.name
  14 + * icname2(可选):内部与之对应的字段名2,如:icname2=name
  15 + * dcname3(可选):其他需要赋值的model字段名3,如:dcname2=xl.name
  16 + * icname3(可选):内部与之对应的字段名3,如:icname2=name
  17 + * icnames(必须):用于用于显示,以及简评处理的内部数据字段,如:icnames=name
  18 + * required(可选):是否要用required验证
  19 + * datatype(必须):业务数据类型,有字典类型,动态数据类型,暂时写的死点
  20 + * mlp(可选):是否多级属性(这里假设外部model如果多级,内部model也是多级)
  21 + *
  22 + * 高级属性:
  23 + * dataassociate(可选):数据源是否关联属性(内部数据随外部指定的参数变化而变化)
  24 + * dataparam(可选):数据源关联的外部参数对象
  25 + *
  26 + */
  27 +angular.module('ScheduleApp').directive("saSelect3", [
  28 + '$timeout',
  29 + '$$SearchInfoService_g',
  30 + function($timeout, $$searchInfoService_g) {
  31 + return {
  32 + restrict: 'E',
  33 + templateUrl: '/pages/scheduleApp/module/common/dts1/select/saSelect3Template.html',
  34 + scope: {
  35 + model: "=" // 独立作用域,关联外部的模型object
  36 + },
  37 + controllerAs: "$saSelectCtrl",
  38 + bindToController: true,
  39 + controller: function($scope) {
  40 + var self = this;
  41 + self.$$data = []; // ui-select显示用的数据源
  42 + self.$$data_real= []; // 内部真实的数据源
  43 + },
  44 +
  45 + /**
  46 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  47 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  48 + * @param tElem
  49 + * @param tAttrs
  50 + * @returns {{pre: Function, post: Function}}
  51 + */
  52 + compile: function(tElem, tAttrs) {
  53 + // 获取所有的属性
  54 + var $name_attr = tAttrs["name"]; // 控件的名字
  55 + var $placeholder_attr = tAttrs["placeholder"]; // 占位符的名字
  56 + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名
  57 + var $icname_attr = tAttrs["icname"]; // 内部与之对应的字段名
  58 + var $dcname2_attr = tAttrs["dcname2"]; // 其他需要赋值的model字段名2
  59 + var $icname2_attr = tAttrs["icname2"]; // 内部与之对应的字段名2
  60 + var $dcname3_attr = tAttrs["dcname3"]; // 其他需要赋值的model字段名3
  61 + var $icname3_attr = tAttrs["icname3"]; // 内部与之对应的字段名3
  62 +
  63 + var $icname_s_attr = tAttrs["icnames"]; // 用于用于显示,以及简评处理的内部数据字段
  64 + var $datatype_attr = tAttrs["datatype"]; // 内部业务数据类型
  65 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  66 + var $mlp_attr = tAttrs["mlp"]; // 是否多级属性
  67 + var $dataassociate_attr = tAttrs["dataassociate"]; // 数据源是否关联属性
  68 +
  69 + // controlAs名字
  70 + var ctrlAs = "$saSelectCtrl";
  71 +
  72 + // 数据源初始化标志
  73 + var $$data_init = false;
  74 + // 如果有required属性,添加angularjs required验证
  75 + if ($required_attr != undefined) {
  76 + tElem.find("ui-select").attr("required", "");
  77 + }
  78 +
  79 + // 由于有的属性是多级的如xl.name,所以要在compile阶段重写属性绑定属性定义
  80 + // 原来的设置:{{$select.selected[$saSelectCtrl.$icname_s]}}
  81 + tElem.find("ui-select-match").html("{{$select.selected" + "." + $icname_s_attr + "}}");
  82 + // 原来的设置:item[$saSelectCtrl.$icname] as item in $saSelectCtrl.$$data
  83 + tElem.find("ui-select-choices").attr("repeat", "item" + "." + $icname_attr + " as item in $saSelectCtrl.$$data");
  84 + // 原来的设置:item[$saSelectCtrl.$icname_s]
  85 + tElem.find("ui-select-choices span").attr("ng-bind", "item" + "." + $icname_s_attr);
  86 + // 原来的设置:{{$saSelectCtrl.$name}}
  87 + tElem.find("ui-select").attr("name", $name_attr);
  88 + // 原来的设置:{{$saSelectCtrl.$placeholder}}
  89 + tElem.find("ui-select-match").attr("placeholder", $placeholder_attr);
  90 +
  91 + return {
  92 + pre: function(scope, element, attr) {
  93 + // TODO:
  94 + },
  95 + /**
  96 + * 相当于link函数。
  97 + * @param scope
  98 + * @param element
  99 + * @param attr
  100 + */
  101 + post: function(scope, element, attr) {
  102 + // 添加选中事件处理函数
  103 + scope[ctrlAs].$$internal_select_fn = function($item) {
  104 + if ($dcname_attr && $icname_attr) {
  105 + if ($mlp_attr) {
  106 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = $item" + "." + $icname_attr + ";");
  107 + } else {
  108 + scope[ctrlAs].model[$dcname_attr] = $item[$icname_attr];
  109 + }
  110 + }
  111 + if ($dcname2_attr && $icname2_attr) {
  112 + if ($mlp_attr) {
  113 + eval("scope[ctrlAs].model" + "." + $dcname2_attr + " = $item" + "." + $icname2_attr + ";");
  114 + } else {
  115 + scope[ctrlAs].model[$dcname2_attr] = $item[$icname2_attr];
  116 + }
  117 + }
  118 + if ($dcname3_attr && $icname3_attr) {
  119 + if ($mlp_attr) {
  120 + eval("scope[ctrlAs].model" + "." + $dcname3_attr + " = $item" + "." + $icname3_attr + ";");
  121 + } else {
  122 + scope[ctrlAs].model[$dcname3_attr] = $item[$icname3_attr];
  123 + }
  124 + }
  125 + };
  126 +
  127 + // 删除选中事件处理函数
  128 + scope[ctrlAs].$$internal_remove_fn = function() {
  129 + scope[ctrlAs].$$internalmodel = undefined;
  130 + if ($mlp_attr) {
  131 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = undefined;");
  132 + } else {
  133 + scope[ctrlAs].model[$dcname_attr] = undefined;
  134 + }
  135 +
  136 + if ($dcname2_attr) {
  137 + if ($mlp_attr) {
  138 + eval("scope[ctrlAs].model" + "." + $dcname2_attr + " = undefined;");
  139 + } else {
  140 + scope[ctrlAs].model[$dcname2_attr] = undefined;
  141 + }
  142 + }
  143 + if ($dcname3_attr) {
  144 + if ($mlp_attr) {
  145 + eval("scope[ctrlAs].model" + "." + $dcname3_attr + " = undefined;");
  146 + } else {
  147 + scope[ctrlAs].model[$dcname3_attr] = undefined;
  148 + }
  149 + }
  150 + };
  151 +
  152 + /**
  153 + * 内部方法,读取字典数据作为数据源。
  154 + * @param dicgroup 字典类型,如:gsType
  155 + * @param ccol 代码字段名
  156 + * @param ncol 名字字段名
  157 + */
  158 + scope[ctrlAs].$$internal_dic_data = function(dicgroup, ccol, ncol) {
  159 + var origin_dicgroup = dictionaryUtils.getByGroup(dicgroup);
  160 + var dic_key; // 字典key
  161 + // 清空内部数据
  162 + scope[ctrlAs].$$data_real = [];
  163 + for (dic_key in origin_dicgroup) {
  164 + var data = {}; // 重新组合的字典元素对象
  165 + if (dic_key == "true")
  166 + data[ccol] = true;
  167 + else
  168 + data[ccol] = dic_key;
  169 + data[ncol] = origin_dicgroup[dic_key];
  170 + scope[ctrlAs].$$data_real.push(data);
  171 + }
  172 + // 这里直接将$$data_real数据深拷贝到$$data
  173 + angular.copy(scope[ctrlAs].$$data_real, scope[ctrlAs].$$data);
  174 +
  175 + console.log(scope[ctrlAs].$$data);
  176 + };
  177 +
  178 + /**
  179 + * TODO:这个方法有性能问题,result一多就会卡一卡,之后再解决把
  180 + * 内部方法,读取字典数据作为数据源。
  181 + * @param result 原始数据
  182 + * @param dcvalue 传入的关联数据
  183 + */
  184 + scope[ctrlAs].$$internal_other_data = function(result, dcvalue) {
  185 + console.log("start=" + dcvalue);
  186 + // 清空内部数据
  187 + scope[ctrlAs].$$data_real = [];
  188 + scope[ctrlAs].$$data = [];
  189 + for (var i = 0; i < result.length; i ++) {
  190 + if ($icname_s_attr) {
  191 + if ($mlp_attr) {
  192 + if (eval("result[i]" + "." + $icname_s_attr)) {
  193 + // 全拼
  194 + result[i]["fullChars"] = pinyin.getFullChars(eval("result[i]" + "." + $icname_s_attr)).toUpperCase();
  195 + // 简拼
  196 + result[i]["camelChars"] = pinyin.getCamelChars(eval("result[i]" + "." + $icname_s_attr));
  197 + }
  198 + } else {
  199 + if (result[i][$icname_s_attr]) {
  200 + // 全拼
  201 + result[i]["fullChars"] = pinyin.getFullChars(result[i][$icname_s_attr]).toUpperCase();
  202 + // 简拼
  203 + result[i]["camelChars"] = pinyin.getCamelChars(result[i][$icname_s_attr]);
  204 + }
  205 + }
  206 + }
  207 +
  208 + if (result[i]["fullChars"]) { // 有拼音的加入数据源
  209 + scope[ctrlAs].$$data_real.push(result[i]);
  210 + }
  211 +
  212 + }
  213 + //console.log("start2");
  214 +
  215 + // 数量太大取前10条记录作为显示
  216 + if (angular.isArray(scope[ctrlAs].$$data_real)) {
  217 + // 先迭代循环查找已经传过来的值
  218 + if (scope[ctrlAs].$$data_real.length > 0) {
  219 + if (dcvalue) {
  220 + for (var j = 0; j < scope[ctrlAs].$$data_real.length; j++) {
  221 + if (scope[ctrlAs].$$data_real[j][$icname_attr] == dcvalue) {
  222 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[j]));
  223 + break;
  224 + }
  225 + }
  226 + }
  227 + }
  228 + // 在插入剩余的数据
  229 + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
  230 + if (scope[ctrlAs].$$data.length < 10) {
  231 + if ($mlp_attr) {
  232 + if (eval("scope[ctrlAs].$$data_real[k]" + "." + $icname_attr + " != dcvalue")) {
  233 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));
  234 + }
  235 + } else {
  236 + if (scope[ctrlAs].$$data_real[k][$icname_attr] != dcvalue) {
  237 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));
  238 + }
  239 + }
  240 + } else {
  241 + break;
  242 + }
  243 + }
  244 + }
  245 +
  246 + //console.log("end");
  247 + };
  248 +
  249 + /**
  250 + * 判定一个对象是否为空对象。
  251 + * @param Obj
  252 + */
  253 + scope[ctrlAs].$$internal_isEmpty_obj = function(obj) {
  254 + console.log(typeof obj);
  255 +
  256 + if (typeof obj === "object" && !(obj instanceof Array)) {
  257 + for (var prop in obj) {
  258 + if (obj.hasOwnProperty(prop)) {
  259 + return false;
  260 + }
  261 + }
  262 + return true;
  263 + } else {
  264 + throw "必须是对象";
  265 + }
  266 + };
  267 +
  268 + // 刷新数据
  269 + scope[ctrlAs].$$internal_refresh_fn = function(search) {
  270 + // 绑定的model字段值,此属性是绑定属性,只能在link阶段获取
  271 + var $dcvalue_attr = attr["dcvalue"];
  272 +
  273 + console.log("刷新数据:" + $dcvalue_attr);
  274 +
  275 + if (!$$data_init) { // 只初始化$$data_real一次,重新载入页面才能重新初始化
  276 + if (dictionaryUtils.getByGroup($datatype_attr)) { // 判定是否字典类型数据源
  277 + scope[ctrlAs].$$internal_dic_data(
  278 + $datatype_attr, $icname_attr, $icname_s_attr);
  279 + if ($dcvalue_attr) {
  280 + scope[ctrlAs].$$internalmodel = $dcvalue_attr;
  281 + }
  282 + } else { // 非字典类型数据源
  283 + if (!$dataassociate_attr) {
  284 + $$searchInfoService_g[$datatype_attr].list(
  285 + {type: "all"},
  286 + function(result) {
  287 + //console.log("ok:" + $datatype_attr);
  288 + scope[ctrlAs].$$internal_other_data(result, $dcvalue_attr);
  289 + //console.log("ok2:" + $datatype_attr);
  290 + if ($dcvalue_attr) {
  291 + scope[ctrlAs].$$internalmodel = $dcvalue_attr;
  292 + }
  293 +
  294 + $$data_init = true;
  295 + },
  296 + function(result) {
  297 +
  298 + }
  299 + );
  300 + }
  301 + }
  302 + }
  303 +
  304 + if ($$data_init) {
  305 + if (search && search != "") { // 有search值
  306 + if (!dictionaryUtils.getByGroup($datatype_attr)) { // 其他数据源
  307 + // 处理search
  308 + console.log("search:" + search);
  309 +
  310 + scope[ctrlAs].$$data = [];
  311 + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
  312 + var upTerm = search.toUpperCase();
  313 + if (scope[ctrlAs].$$data.length < 10) {
  314 + if (scope[ctrlAs].$$data_real[k].fullChars.indexOf(upTerm) != -1
  315 + || scope[ctrlAs].$$data_real[k].camelChars.indexOf(upTerm) != -1) {
  316 + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k]));
  317 + }
  318 + } else {
  319 + break;
  320 + }
  321 + }
  322 + }
  323 + }
  324 +
  325 + }
  326 +
  327 + };
  328 +
  329 +
  330 +
  331 +
  332 +
  333 +
  334 +
  335 +
  336 +
  337 +
  338 + // TODO:
  339 +
  340 + // dom全部载入后调用
  341 + $timeout(function() {
  342 + console.log("dom全部载入后调用");
  343 + }, 0);
  344 + // 监控dcvalue model值变换
  345 + attr.$observe("dcvalue", function(value) {
  346 + console.log("监控dc1 model值变换:" + value);
  347 + scope[ctrlAs].$$internalmodel = value;
  348 + }
  349 + );
  350 + // 监控获取数据参数变换
  351 + attr.$observe("dataparam", function(value) {
  352 + // 判定是否空对象
  353 + console.log(value);
  354 + var obj = JSON.parse(value);
  355 + var $dcvalue_attr = attr["dcvalue"];
  356 + if (!scope[ctrlAs].$$internal_isEmpty_obj(obj)) {
  357 + console.log("dataparam:" + obj);
  358 +
  359 + //
  360 +
  361 + obj["type"] = "all";
  362 +
  363 + $$data_init = false;
  364 + $$searchInfoService_g[$datatype_attr].list(
  365 + obj,
  366 + function(result) {
  367 + //console.log("ok:" + $datatype_attr);
  368 + scope[ctrlAs].$$internal_other_data(result, $dcvalue_attr);
  369 + //console.log("ok2:" + $datatype_attr);
  370 + if ($dcvalue_attr) {
  371 + scope[ctrlAs].$$internalmodel = $dcvalue_attr;
  372 + }
  373 +
  374 + $$data_init = true;
  375 + },
  376 + function(result) {
  377 +
  378 + }
  379 + );
  380 + }
  381 + }
  382 + );
  383 + }
  384 + };
  385 + }
  386 + };
  387 +
  388 + }
  389 +]);
  390 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dt/MyUiSelectWrapTemplate1.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect3Template.html
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/legacy.txt renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect4.js
  1 +
1 2 /**
2 3 * saSelect4指令,封装angular-ui-select控件,并添加相应的业务。
3 4 * name(必须):控件的名字
... ... @@ -19,7 +20,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect4&#39;, [
19 20 function($timeout, $$searchInfoService_g) {
20 21 return {
21 22 restrict: 'E',
22   - templateUrl: '/pages/scheduleApp/module/common/dts1/select/MyUISelectWrapTemplate2.html',
  23 + templateUrl: '/pages/scheduleApp/module/common/dts1/select/saSelect4Template.html',
23 24 scope: {
24 25 model: "=" // 独立作用域,关联外部的模型object
25 26 },
... ... @@ -301,7 +302,18 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect4&#39;, [
301 302 scope[ctrlAs].$$internal_select_value = value;
302 303 scope[ctrlAs].$$internal_validate_model();
303 304 }
  305 +
  306 + // 闭包测试
  307 + var obj = {'a':1,'b':2};
  308 + var tfx = scope[ctrlAs].$$test.bind(obj);
  309 + console.log("闭包测试=" + tfx());
304 310 });
  311 +
  312 + scope[ctrlAs].$$test = function() {
  313 + var exp = "this.a + '(' + this.b + ')'";
  314 + console.log("exp=" + exp);
  315 + return eval(exp);
  316 + };
305 317 }
306 318 };
307 319  
... ... @@ -309,4 +321,5 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect4&#39;, [
309 321  
310 322 };
311 323 }
312   -]);
313 324 \ No newline at end of file
  325 +]);
  326 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/MyUISelectWrapTemplate2.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect4Template.html
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect5.js
  1 +
  2 +
1 3 /**
2 4 * saSelect5指令,基于简拼查询的select,内部封装angular-ui-select控件,并嵌入相应的业务逻辑。
3 5 * name(必须):控件的名字
4 6 * model(必须):独立作用域,指定一个外部对象模型双向绑定,如:model=ctrl.employeeInfoForSave
5   - * cmaps(必须):外部对象与指令内部数据对象字段名映射对象,如:{{ {'xl.id' : 'id', 'xl.name' : 'name'} | json}}
  7 + * cmaps(必须):外部对象与指令内部数据对象字段名映射对象字符串,如:{'xl.id' : 'id', 'xl.name' : 'name'}
6 8 * dcname(必须):绑定的model字段名,如:dcname=xl.id
7 9 * icname(必须):内部与之对应的字段名,如:icname=id
8 10 *
9 11 * dsparams(必须):内部数据源查询参数对象,如:{{ {'ttid_eq': ctrl.rerunManageForSave.rerunTtinfo.id} | json }}
  12 + * dsparamsextra(可选):内部数据源查询附加参数对象字符串,如:{'type':'all'}
10 13 * iterobjname(必须):内部数据源迭代的数据变量名,如:iterobjname=item
11 14 * iterobjexp(必须):内部显示用的表达式
12 15 * searchph(必须):查询输入占位符字符串,如:searchph=请输入...
... ... @@ -54,6 +57,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
54 57 var $icname_attr = tAttrs["icname"]; // 内部与之对应的字段名
55 58  
56 59 var $dsparams_attr = tAttrs["dsparams"]; // 内部数据源查询参数对象
  60 + var $dsparamsextra_attr = tAttrs["dsparamsextra"]; // 内部数据源查询附加参数对象字符串
57 61 var $iterobjname_attr = tAttrs["iterobjname"]; // 内部数据源迭代的数据变量名
58 62 var $iterobjexp_attr = tAttrs["iterobjexp"]; // 内部显示用的表达式
59 63 var $searchph_attr = tAttrs["searchph"]; // 查询输入占位符字符串
... ... @@ -124,8 +128,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
124 128 scope[ctrlAs].$$internal_select_fn = function($item) {
125 129 eval("scope[ctrlAs].model" + "." + $dcname_attr + " = $item" + "." + $icname_attr + ";");
126 130  
127   - for (var mc in $cmaps_attr) { // model的字段名:内部数据源对应字段名
128   - var ic = $cmaps_attr[mc]; // 内部数据源对应字段
  131 + eval("var obj=" + $cmaps_attr);
  132 + for (var mc in obj) { // model的字段名:内部数据源对应字段名
  133 + var ic = obj[mc]; // 内部数据源对应字段
129 134 eval("scope[ctrlAs].model" + "." + mc + " = $item" + "." + ic + ";");
130 135 }
131 136 };
... ... @@ -134,8 +139,9 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
134 139 scope[ctrlAs].$$internal_remove_fn = function() {
135 140 eval("scope[ctrlAs].model" + "." + $dcname_attr + " = undefined;");
136 141  
  142 + eval("var obj=" + $cmaps_attr);
137 143 var mc; // model的字段名
138   - for (mc in $cmaps_attr) {
  144 + for (mc in obj) {
139 145 eval("scope[ctrlAs].model" + "." + mc + " = undefined;");
140 146 }
141 147 };
... ... @@ -208,7 +214,13 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
208 214 */
209 215 scope[ctrlAs].$$internal_match_str = function (context) {
210 216 var fx = function() {
211   - return eval($searchexp_attr);
  217 + try {
  218 + return eval($searchexp_attr);
  219 + } catch (err) {
  220 + //console.log(err);
  221 + return undefined;
  222 + }
  223 +
212 224 };
213 225  
214 226 var str = fx.bind(context)();
... ... @@ -224,16 +236,39 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
224 236 * @param ajaxparamobj 查询参数对象
225 237 */
226 238 scope[ctrlAs].$$internal_ajax_data = function(atype, ajaxparamobj) {
227   - ajaxparamobj.type = 'all';
  239 + // 如果ajaxparamobj为空对象,则表示清空内部选项
  240 + var isEmptyObj = true;
  241 + for (var name in ajaxparamobj) {
  242 + isEmptyObj = false;
  243 + }
  244 + if (isEmptyObj) {
  245 + // 重新创建内部保存的数据
  246 + scope[ctrlAs].$$data_real = [];
  247 + // 重新创建内部ui-select显示用数据,默认取10条记录显示
  248 + scope[ctrlAs].$$data = [];
  249 +
  250 + scope[ctrlAs].$$internal_remove_fn();
  251 + scope[ctrlAs].$$internal_validate_model();
  252 +
  253 + return;
  254 + }
  255 +
  256 + if ($dsparamsextra_attr) { // 合并附加参数
  257 + eval("var extra = " + $dsparamsextra_attr);
  258 + for (var extrakey in extra) {
  259 + ajaxparamobj[extrakey] = extra[extrakey];
  260 + }
  261 + }
  262 +
228 263 $$searchInfoService_g[atype].list(
229 264 ajaxparamobj,
230 265 function(result) {
231 266 console.log("$$internal_ajax_data result");
232 267  
233 268 // 重新创建内部保存的数据
234   - scope[ctrlAs].$$data = [];
  269 + scope[ctrlAs].$$data_real = [];
235 270 // result中添加拼音数据,注意:这里要求result返回对象数组
236   - for (var i = 0; i < result.length; i ++) {
  271 + for (var i = 0; i < result.length; i++) {
237 272 // 闭包绑定返回最终查询的值
238 273 var calcu_str = scope[ctrlAs].$$internal_match_str(result[i]);
239 274 if (calcu_str) {
... ... @@ -249,6 +284,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
249 284 }
250 285  
251 286 // 重新创建内部ui-select显示用数据,默认取10条记录显示
  287 + scope[ctrlAs].$$data = [];
252 288 for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) {
253 289 if (scope[ctrlAs].$$data.length < 10) {
254 290 scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]);
... ... @@ -345,4 +381,5 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saSelect5&#39;, [
345 381 }
346 382 };
347 383 }
348   -]);
349 384 \ No newline at end of file
  385 +]);
  386 +
... ...
src/main/resources/static/pages/scheduleApp/module/other/MyDictionarySelectTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelectTemplate.html
src/main/resources/static/pages/scheduleApp/module/common/dts1/validation/remoteValidaton.js 0 → 100644
  1 +angular.module('ScheduleApp').directive("remoteValidaton", [
  2 + 'BusInfoManageService_g',
  3 + 'EmployeeInfoManageService_g',
  4 + 'TimeTableManageService_g',
  5 + function(
  6 + busInfoManageService_g,
  7 + employeeInfoManageService_g,
  8 + timeTableManageService_g
  9 + ) {
  10 + /**
  11 + * 远端验证指令,依赖于ngModel
  12 + * 指令名称 remote-Validation
  13 + * 需要属性 rvtype 表示验证类型
  14 + */
  15 + return {
  16 + restrict: "A",
  17 + require: "^ngModel",
  18 + link: function(scope, element, attr, ngModelCtrl) {
  19 + element.bind("keyup", function() {
  20 + var modelValue = ngModelCtrl.$modelValue;
  21 + var rv1_attr = attr["rv1"];
  22 + if (attr["rvtype"]) {
  23 +
  24 + // 根据rvtype的值,确定使用那个远端验证的url,
  25 + // rv1, rv2, rv3是关联比较值,暂时使用rv1
  26 + // 这个貌似没法通用,根据业务变换
  27 + // TODO:暂时有点乱以后改
  28 + if (attr["rvtype"] == "insideCode") {
  29 + busInfoManageService_g.validate.insideCode(
  30 + {"insideCode_eq": modelValue, type: "equale"},
  31 + function(result) {
  32 + //console.log(result);
  33 + if (result.status == "SUCCESS") {
  34 + ngModelCtrl.$setValidity('remote', true);
  35 + } else {
  36 + ngModelCtrl.$setValidity('remote', false);
  37 + }
  38 + },
  39 + function(result) {
  40 + //console.log(result);
  41 + ngModelCtrl.$setValidity('remote', true);
  42 + }
  43 + );
  44 + } else if (attr["rvtype"] == "jobCode") {
  45 + if (!rv1_attr) {
  46 + ngModelCtrl.$setValidity('remote', false);
  47 + return;
  48 + }
  49 +
  50 + employeeInfoManageService_g.validate.jobCode(
  51 + {"jobCode_eq": modelValue, "companyCode_eq": rv1_attr, type: "equale"},
  52 + function(result) {
  53 + //console.log(result);
  54 + if (result.status == "SUCCESS") {
  55 + ngModelCtrl.$setValidity('remote', true);
  56 + } else {
  57 + ngModelCtrl.$setValidity('remote', false);
  58 + }
  59 + },
  60 + function(result) {
  61 + //console.log(result);
  62 + ngModelCtrl.$setValidity('remote', true);
  63 + }
  64 + );
  65 + } else if (attr["rvtype"] == "ttinfoname") {
  66 + if (!rv1_attr) {
  67 + ngModelCtrl.$setValidity('remote', false);
  68 + return;
  69 + }
  70 +
  71 + timeTableManageService_g.validate.ttinfoname(
  72 + {"name_eq": modelValue, "xl.id_eq": rv1_attr, type: "equale"},
  73 + function(result) {
  74 + //console.log(result);
  75 + if (result.status == "SUCCESS") {
  76 + ngModelCtrl.$setValidity('remote', true);
  77 + } else {
  78 + ngModelCtrl.$setValidity('remote', false);
  79 + }
  80 + },
  81 + function(result) {
  82 + //console.log(result);
  83 + ngModelCtrl.$setValidity('remote', true);
  84 + }
  85 + );
  86 +
  87 + }
  88 + } else {
  89 + // 没有rvtype,就不用远端验证了
  90 + ngModelCtrl.$setValidity('remote', true);
  91 + }
  92 +
  93 + attr.$observe("rv1", function(value) {
  94 + if (attr["rvtype"] == "jobCode") {
  95 + if (!value) {
  96 + ngModelCtrl.$setValidity('remote', false);
  97 + return;
  98 + }
  99 +
  100 + employeeInfoManageService_g.validate.jobCode(
  101 + {"jobCode_eq": modelValue, "companyCode_eq": rv1_attr, type: "equale"},
  102 + function(result) {
  103 + //console.log(result);
  104 + if (result.status == "SUCCESS") {
  105 + ngModelCtrl.$setValidity('remote', true);
  106 + } else {
  107 + ngModelCtrl.$setValidity('remote', false);
  108 + }
  109 + },
  110 + function(result) {
  111 + //console.log(result);
  112 + ngModelCtrl.$setValidity('remote', true);
  113 + }
  114 + );
  115 + } else if (attr["rvtype"] == "ttinfoname") {
  116 + if (!value) {
  117 + ngModelCtrl.$setValidity('remote', false);
  118 + return;
  119 + }
  120 +
  121 + console.log("rv1:" + value);
  122 +
  123 + timeTableManageService_g.validate.ttinfoname(
  124 + {"name_eq": modelValue, "xl.id_eq": value, type: "equale"},
  125 + function(result) {
  126 + //console.log(result);
  127 + if (result.status == "SUCCESS") {
  128 + ngModelCtrl.$setValidity('remote', true);
  129 + } else {
  130 + ngModelCtrl.$setValidity('remote', false);
  131 + }
  132 + },
  133 + function(result) {
  134 + //console.log(result);
  135 + ngModelCtrl.$setValidity('remote', true);
  136 + }
  137 + );
  138 + }
  139 +
  140 + });
  141 + });
  142 + }
  143 + };
  144 + }
  145 + ]
  146 +);
0 147 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/bcGroup/saBcgroup.js
  1 +
  2 +
1 3 /**
2 4 * saBcgroup指令,用于套跑界面中,从指定线路,指定时刻表,指定路牌的班次列表中选择套跑班次。
3 5 * 属性如下:
... ... @@ -14,7 +16,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saBcgroup&#39;, [
14 16 function(timeTableDetailManageService_g) {
15 17 return {
16 18 restrict: 'E',
17   - templateUrl: '/pages/scheduleApp/module/common/dts2/bcGroup/MyBcGroupWrapTemplate.html',
  19 + templateUrl: '/pages/scheduleApp/module/common/dts2/bcGroup/saBcgroupTemplate.html',
18 20 scope: {
19 21 model: "=" // 独立作用域,关联外部的模型object
20 22 },
... ... @@ -166,6 +168,7 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saBcgroup&#39;, [
166 168 // 监控内部数据,$$data_selected 变化
167 169 scope.$watch(
168 170 function() {
  171 + console.log("长度:" + scope[ctrlAs].$$dataSelected.length);
169 172 return scope[ctrlAs].$$dataSelected;
170 173 },
171 174 function(newValue, oldValue) {
... ... @@ -233,11 +236,14 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saBcgroup&#39;, [
233 236 // 监控内部数据的变化
234 237 attr.$observe("dataparams", function(value) {
235 238 if (value && value != "") {
236   - console.log("observe 监控 dataparams=" + value);
  239 + if (value == '{}') {
  240 + return;
  241 + }
  242 +
  243 + console.log("bcgroup observe 监控 dataparams=" + value);
237 244  
238   - var obj = JSON.parse(value);
239 245 timeTableDetailManageService_g.bcdetails.list(
240   - obj,
  246 + JSON.parse(value),
241 247 function(result) {
242 248 // 获取值了
243 249 console.log("内部班次数据获取了");
... ... @@ -279,4 +285,5 @@ angular.module(&#39;ScheduleApp&#39;).directive(&#39;saBcgroup&#39;, [
279 285 }
280 286 }
281 287 }
282   -]);
283 288 \ No newline at end of file
  289 +]);
  290 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dts2/bcGroup/MyBcGroupWrapTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts2/bcGroup/saBcgroupTemplate.html
src/main/resources/static/pages/scheduleApp/module/common/dts2/dateGroup/saDategroup.js 0 → 100644
  1 +
  2 +
  3 +/**
  4 + * saDategroup指令
  5 + * 属性如下:
  6 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  7 + * dcvalue(必须):绑定的model字段值,如:dcvalue={{ctrl.employeeInfoForSave.xl.id}}
  8 + * dcname(必须):绑定的model字段名,如:dcname=xl.id
  9 + * name(必须):控件的名字
  10 + * required(可选):是否要用required验证
  11 + * disabled(可选):标示框是否可选
  12 + *
  13 + */
  14 +angular.module('ScheduleApp').directive('saDategroup', [
  15 + '$filter',
  16 + function($filter) {
  17 + return {
  18 + restrict: 'E',
  19 + templateUrl: '/pages/scheduleApp/module/common/dts2/dateGroup/saDategroupTemplate.html',
  20 + scope: {
  21 + model: "=" // 独立作用域,关联外部的模型object
  22 + },
  23 + controllerAs: "$saDategroupCtrl",
  24 + bindToController: true,
  25 + controller: function($scope) {
  26 + var self = this;
  27 + self.$$data = []; // 内部的数据
  28 + self.$$date_select; // 内部选中的日期
  29 +
  30 + //// 测试数据
  31 + //self.$$data = [
  32 + // {datestr: '2011-01-01', ischecked: true},
  33 + // {datestr: '2011-01-01', ischecked: true},
  34 + // {datestr: '2011-01-01', ischecked: true}
  35 + //];
  36 + },
  37 +
  38 + /**
  39 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  40 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  41 + * @param tElem
  42 + * @param tAttrs
  43 + * @returns {{pre: Function, post: Function}}
  44 + */
  45 + compile: function(tElem, tAttrs) {
  46 + // 获取所有的属性
  47 + var $name_attr = tAttrs["name"]; // 控件的名字
  48 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  49 + var $disabled_attr = tAttrs["disabled"]; // 是否禁用
  50 + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名
  51 +
  52 + // controlAs名字
  53 + var ctrlAs = '$saDategroupCtrl';
  54 +
  55 + // 如果有required属性,添加angularjs required验证
  56 + if ($required_attr != undefined) {
  57 + //console.log(tElem.html());
  58 + tElem.find("div").attr("required", "");
  59 + }
  60 + // 如果有disabled属性,添加禁用标志
  61 + if ($disabled_attr != undefined) {
  62 + tElem.find("input").attr("ng-disabled", "true");
  63 + tElem.find("div").attr("ng-disabled", "true");
  64 + }
  65 +
  66 + return {
  67 + pre: function (scope, element, attr) {
  68 + // TODO:
  69 + },
  70 + /**
  71 + * 相当于link函数。
  72 + * @param scope
  73 + * @param element
  74 + * @param attr
  75 + */
  76 + post: function (scope, element, attr) {
  77 + // name属性
  78 + if ($name_attr) {
  79 + scope[ctrlAs]["$name_attr"] = $name_attr;
  80 + }
  81 +
  82 +
  83 + // 日期open属性,及方法
  84 + scope[ctrlAs].$$specialDateOpen = false;
  85 + scope[ctrlAs].$$specialDate_open = function() {
  86 + scope[ctrlAs].$$specialDateOpen = true;
  87 + };
  88 +
  89 + // 监控选择的日期
  90 + scope.$watch(
  91 + function() {
  92 + return scope[ctrlAs]['$$date_select'];
  93 + },
  94 + function(newValue, oldValue) {
  95 + if (newValue) {
  96 + //console.log("saDategroup--->selectdate:" + newValue);
  97 + // 调用内置filter,转换日期到yyyy-MM-dd格式
  98 + var text = $filter('date')(newValue, 'yyyy-MM-dd');
  99 + var i;
  100 + var isexist = false; // 日期是否已经选择标识
  101 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {
  102 + if (scope[ctrlAs]["$$data"][i].datestr == text) {
  103 + isexist = true;
  104 + break;
  105 + }
  106 + }
  107 + if (!isexist) {
  108 + scope[ctrlAs]["$$data"].push(
  109 + {
  110 + datestr: text,
  111 + ischecked: true
  112 + }
  113 + );
  114 + }
  115 +
  116 + }
  117 +
  118 + }
  119 + );
  120 +
  121 + /**
  122 + * 日期点击事件处理函数。
  123 + * @param $index 索引
  124 + */
  125 + scope[ctrlAs].$$internal_datestr_click = function($index) {
  126 + scope[ctrlAs].$$data.splice($index, 1);
  127 + };
  128 +
  129 + // 测试使用watch监控$$data的变化
  130 + scope.$watch(
  131 + function() {
  132 + return scope[ctrlAs]['$$data'];
  133 + },
  134 + function(newValue, oldValue) {
  135 + // 根据$$data生成对应的数据
  136 + var special_days_arr = [];
  137 + var i;
  138 + for (i = 0; i < scope[ctrlAs]["$$data"].length; i++) {
  139 + special_days_arr.push(scope[ctrlAs]["$$data"][i].datestr);
  140 + }
  141 +
  142 + scope[ctrlAs].$$internalmodel = special_days_arr.join(",");
  143 + console.log("bbbbbbbb--->" + scope[ctrlAs].$$internalmodel);
  144 +
  145 + // 更新model
  146 + if ($dcname_attr) {
  147 + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = special_days_arr.join(',');");
  148 + }
  149 + },
  150 + true
  151 + );
  152 +
  153 + // 监控dcvalue model值变换
  154 + attr.$observe("dcvalue", function(value) {
  155 + console.log("saDategroup 监控dc1 model值变换:" + value);
  156 + if (value) {
  157 + // 根据value值,修改$$data里的值
  158 + var date_array = value.split(",");
  159 + var i;
  160 + scope[ctrlAs]["$$data"] = [];
  161 + for (i = 0; i < date_array.length; i++) {
  162 + scope[ctrlAs]["$$data"].push(
  163 + {
  164 + datestr: date_array[i],
  165 + ischecked: true
  166 + }
  167 + );
  168 + }
  169 +
  170 +
  171 +
  172 +
  173 +
  174 +
  175 +
  176 +
  177 +
  178 + }
  179 + });
  180 +
  181 + }
  182 +
  183 + };
  184 + }
  185 + }
  186 + }
  187 +]);
  188 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dt/MyDateGroupWrapTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts2/dateGroup/saDategroupTemplate.html
src/main/resources/static/pages/scheduleApp/module/common/dts2/employeeGroup/saEmployeegroup.js 0 → 100644
  1 +
  2 +
  3 +/**
  4 + * saEmployeegroup指令
  5 + * 属性如下:
  6 + * name(必须):控件的名字
  7 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  8 + * xlidvalue(必须):绑定的model线路id值,如:xlidvalue={{ctrl.employeeInfoForSave.xl.id}}
  9 + * dbbmrangevalue(必须):绑定的model搭班编码范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  10 + * dbbmrangename(必须):绑定的model搭班编码范围字段名,如:lprangename=lprange
  11 + * rycidrangevalue(必须):绑定的model人员配置idid范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  12 + * rycidrangename(必须):绑定的model人员配置id范围字段名,如:lprangename=lprange
  13 + * rystartvalue(必须):绑定的model起始人员,如:lpstartvalue={{ctrl.employeeInfoForSave.lpstart}}
  14 + * rystartname(必须):绑定的model起始人员字段名,如:lpstartname=lpstart
  15 + *
  16 + * required(可选):是否要用required验证
  17 + *
  18 + */
  19 +angular.module('ScheduleApp').directive('saEmployeegroup', [
  20 + 'EmployeeConfigService_g',
  21 + function(employeeConfigService_g) {
  22 + return {
  23 + restrict: 'E',
  24 + templateUrl: '/pages/scheduleApp/module/common/dts2/employeeGroup/saEmployeegroupTemplate.html',
  25 + scope: {
  26 + model: "=" // 独立作用域,关联外部的模型object
  27 + },
  28 + controllerAs: '$saEmployeegroupCtrl',
  29 + bindToController: true,
  30 + controller: function($scope) {
  31 + var self = this;
  32 + self.$$data = []; // 选择线路后,该线路的人员配置数据
  33 +
  34 + // 测试数据
  35 + //self.$$data = [
  36 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1'},
  37 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2'},
  38 + // {id: 3, dbbm: "3", jsy: '忍3', spy: '守3'}
  39 + //];
  40 +
  41 + self.$$dataSelected = []; // 选中的人员配置列表
  42 + self.$$dataSelectedStart = undefined; // 起始人员配置
  43 +
  44 + //self.$$dataSelected = [
  45 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isstart: false},
  46 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true},
  47 + // {id: 3, dbbm: "3", jsy: '忍3', spy: '守3', isstart: false}
  48 + //];
  49 +
  50 + self.$$isFB = false; // 是否分班
  51 + self.$$dataFBSelected = []; // 选中的分班人员组配置列表
  52 + self.$$dataFBInternalSelected = undefined; // 分班组内人员选中标识
  53 + self.$$dataFBSelectedStart = undefined; // 选中的起始分班人员组合
  54 +
  55 + //self.$$dataFBSelected = [
  56 + // {isstart: true, group: [
  57 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isselected: false},
  58 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true}
  59 + // ]},
  60 + // {isstart: false, group: [
  61 + // {id: 1, dbbm: "1", jsy: '忍1', spy: '守1', isselected: false},
  62 + // {id: 2, dbbm: "2", jsy: '忍2', spy: '守2', isstart: true}
  63 + // ]}
  64 + //];
  65 +
  66 + // saGuideboardgroup组件的ng-model,用于外部绑定等操作
  67 + self.$$internalmodel = undefined;
  68 +
  69 + self.$$data_init = false; // *数据源初始化标志
  70 + self.$$data_xl_first_init = false; // 线路是否初始化
  71 + self.$$data_ry_first_init = false; // 人员配置是否初始化
  72 + self.$$data_ry_first_data = undefined; // 人员配置初始化数据
  73 + self.$$data_rycid_first_init = false; // 人员配置id是否初始化
  74 + self.$$data_rycid_first_data = undefined; // 人员配置id初始化数据
  75 + self.$$data_rystart_first_init = false; // 起始人员是否初始化
  76 + self.$$data_rystart_first_data = undefined; // 起始人员初始化数据
  77 +
  78 + },
  79 +
  80 + /**
  81 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  82 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  83 + * @param tElem
  84 + * @param tAttrs
  85 + * @returns {{pre: Function, post: Function}}
  86 + */
  87 + compile: function(tElem, tAttrs) {
  88 + // TODO:获取所有的属性
  89 + var $name_attr = tAttrs["name"]; // 控件的名字
  90 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  91 + var $dbbmrangename_attr = tAttrs["dbbmrangename"]; // 绑定的model搭班编码范围字段名
  92 + var rycidrangename_attr = tAttrs["rycidrangename"]; // 绑定的model人员配置id范围字段名
  93 + var $rystartname_attr = tAttrs["rystartname"]; // 绑定的model起始人员字段名
  94 +
  95 + // controlAs名字
  96 + var ctrlAs = '$saEmployeegroupCtrl';
  97 +
  98 + // 如果有required属性,添加angularjs required验证
  99 + if ($required_attr != undefined) {
  100 + //console.log(tElem.html());
  101 + tElem.find("div").attr("required", "");
  102 + }
  103 +
  104 + return {
  105 + pre: function(scope, element, attr) {
  106 + // TODO:
  107 + },
  108 +
  109 + /**
  110 + * 相当于link函数。
  111 + * @param scope
  112 + * @param element
  113 + * @param attr
  114 + */
  115 + post: function(scope, element, attr) {
  116 + // name属性
  117 + if ($name_attr) {
  118 + scope[ctrlAs]["$name_attr"] = $name_attr;
  119 + }
  120 +
  121 + /**
  122 + * 人员配置列表点击(人员配置列表中选中路牌)
  123 + * @param $index
  124 + */
  125 + scope[ctrlAs].$$internal_rylist_click = function($index) {
  126 + var data_temp = scope[ctrlAs].$$data;
  127 + if (data_temp && data_temp.length > $index) {
  128 + if (!scope[ctrlAs].$$isFB) { // 不分班
  129 + scope[ctrlAs].$$dataSelected.push({
  130 + id : data_temp[$index].id,
  131 + dbbm: data_temp[$index].dbbm,
  132 + jsy: data_temp[$index].jsy,
  133 + spy: data_temp[$index].spy,
  134 + isstart: false
  135 + });
  136 +
  137 + // 如果没有指定过初始人员,默认选择此人员作为起始人员
  138 + if (scope[ctrlAs].$$dataSelectedStart == undefined) {
  139 + scope[ctrlAs].$$internal_selrylist_click(
  140 + scope[ctrlAs].$$dataSelected.length - 1);
  141 + }
  142 + } else { // 分班
  143 + if (scope[ctrlAs].$$dataFBInternalSelected) { // 替换组内人员
  144 + scope[ctrlAs].$$dataFBSelected
  145 + [scope[ctrlAs].$$dataFBInternalSelected.gindex].group
  146 + [scope[ctrlAs].$$dataFBInternalSelected.index] = {
  147 + id : data_temp[$index].id,
  148 + dbbm: data_temp[$index].dbbm,
  149 + jsy: data_temp[$index].jsy,
  150 + spy: data_temp[$index].spy,
  151 + isselected: true
  152 + };
  153 +
  154 + } else {
  155 + scope[ctrlAs].$$dataFBSelected.push({
  156 + isstart: false,
  157 + group: [].concat(
  158 + {
  159 + id : data_temp[$index].id,
  160 + dbbm: data_temp[$index].dbbm,
  161 + jsy: data_temp[$index].jsy,
  162 + spy: data_temp[$index].spy,
  163 + isselected: false
  164 + }, {
  165 + id : data_temp[$index].id,
  166 + dbbm: data_temp[$index].dbbm,
  167 + jsy: data_temp[$index].jsy,
  168 + spy: data_temp[$index].spy,
  169 + isselected: false
  170 + }
  171 + )
  172 + });
  173 + if (scope[ctrlAs].$$dataFBSelectedStart == undefined) {
  174 + scope[ctrlAs].$$internal_selrygrouplist_click(
  175 + scope[ctrlAs].$$dataFBSelected.length - 1);
  176 + }
  177 + }
  178 + }
  179 +
  180 + }
  181 + };
  182 +
  183 + /**
  184 + * 选中的人员单击(初始人员选择)
  185 + * @param $index
  186 + */
  187 + scope[ctrlAs].$$internal_selrylist_click = function($index) {
  188 + var data_temp = scope[ctrlAs].$$dataSelected;
  189 + if (data_temp && data_temp.length > $index) {
  190 + for (var i = 0; i < data_temp.length; i++) {
  191 + data_temp[i].isstart = false;
  192 + }
  193 + data_temp[$index].isstart = true;
  194 + scope[ctrlAs].$$dataSelectedStart = $index;
  195 + }
  196 + };
  197 + /**
  198 + * 选中的人员双击(删除选中的人员)
  199 + * @param $index
  200 + */
  201 + scope[ctrlAs].$$internal_selrylist_dbclick = function($index) {
  202 + var data_temp = scope[ctrlAs].$$dataSelected;
  203 + if (data_temp && data_temp.length > $index) {
  204 + if (scope[ctrlAs].$$dataSelectedStart == $index) {
  205 + scope[ctrlAs].$$dataSelectedStart = undefined;
  206 + }
  207 + data_temp.splice($index, 1);
  208 + }
  209 + };
  210 +
  211 + /**
  212 + * 选中的分班组人员单击(初始人员选择)
  213 + * @param $index
  214 + */
  215 + scope[ctrlAs].$$internal_selrygrouplist_click = function($index) {
  216 + var data_temp = scope[ctrlAs].$$dataFBSelected;
  217 + if (data_temp && data_temp.length > $index) {
  218 + for (var i = 0; i < data_temp.length; i++) {
  219 + data_temp[i].isstart = false;
  220 + for (var j = 0; j < data_temp[i].group.length; j++) {
  221 + data_temp[i].group[j].isselected = false;
  222 + }
  223 + }
  224 + data_temp[$index].isstart = true;
  225 + scope[ctrlAs].$$dataFBSelectedStart = $index;
  226 + scope[ctrlAs].$$dataFBInternalSelected = undefined;
  227 + }
  228 + };
  229 + /**
  230 + * 分组内部单击(选中分班中的某组人员)
  231 + * @param $groupindex 组index
  232 + * @param $index 组内部某个index
  233 + * @param $event 事件防止冒泡
  234 + */
  235 + scope[ctrlAs].$$internal_selrygroup_click = function($groupindex, $index, $event) {
  236 + var data_temp = scope[ctrlAs].$$dataFBSelected;
  237 + if (data_temp && data_temp.length > $groupindex) {
  238 + if (data_temp[$groupindex].group && data_temp[$groupindex].group.length > $index) {
  239 + // $$dataFBInternalSelected的格式如下:
  240 + //{gindex: 1, index: 0}
  241 + for (var i = 0; i < data_temp.length; i++) {
  242 + data_temp[i].isstart = false;
  243 + for (var j = 0; j < data_temp[i].group.length; j++) {
  244 + data_temp[i].group[j].isselected = false;
  245 + }
  246 + }
  247 + data_temp[$groupindex].group[$index].isselected = true;
  248 + scope[ctrlAs].$$dataFBInternalSelected = {
  249 + gindex: $groupindex, index: $index
  250 + };
  251 + scope[ctrlAs].$$dataFBSelectedStart = undefined;
  252 + $event.stopPropagation();
  253 + }
  254 + }
  255 +
  256 + };
  257 + /**
  258 + * 选中的分班人员双击(删除选中的人员)
  259 + * @param $index
  260 + */
  261 + scope[ctrlAs].$$internal_selrygrouplist_dbclick = function($index) {
  262 + var data_temp = scope[ctrlAs].$$dataFBSelected;
  263 + if (data_temp && data_temp.length > $index) {
  264 + if (scope[ctrlAs].$$dataFBSelectedStart == $index) {
  265 + scope[ctrlAs].$$dataFBSelectedStart = undefined;
  266 + }
  267 + if (scope[ctrlAs].$$dataFBInternalSelected &&
  268 + scope[ctrlAs].$$dataFBInternalSelected.gindex == $index) {
  269 + scope[ctrlAs].$$dataFBInternalSelected = undefined;
  270 + }
  271 + data_temp.splice($index, 1);
  272 + }
  273 + };
  274 +
  275 + /**
  276 + * 验证内部数据,更新外部model
  277 + */
  278 + scope[ctrlAs].$$internal_validate_model = function() {
  279 + var data_temp = scope[ctrlAs].$$dataSelected;
  280 + var data_temp2 = scope[ctrlAs].$$dataSelectedStart;
  281 + var data_temp3 = scope[ctrlAs].$$dataFBSelected;
  282 + var data_temp4 = scope[ctrlAs].$$dataFBSelectedStart;
  283 + var ryDbbms = [];
  284 + var ryDbbm_group = [];
  285 + var ryCids = [];
  286 + var ryCid_group = [];
  287 + var ryStart = 0;
  288 + var i = 0;
  289 + var j = 0;
  290 +
  291 + var isFB = scope[ctrlAs].$$isFB;
  292 +
  293 + if (isFB) {
  294 + if (data_temp3 &&
  295 + data_temp3.length > 0 &&
  296 + data_temp4 != undefined) {
  297 +
  298 + for (i = 0; i < data_temp3.length; i++) {
  299 + for (j = 0; j < data_temp3[i].group.length; j++) {
  300 + ryDbbm_group.push(data_temp3[i].group[j].dbbm);
  301 + ryCid_group.push(data_temp3[i].group[j].id);
  302 + }
  303 + ryDbbms.push(ryDbbm_group.join("-"));
  304 + ryCids.push(ryCid_group.join("-"));
  305 + ryDbbm_group = [];
  306 + ryCid_group = [];
  307 + }
  308 +
  309 + data_temp3[data_temp4].isstart = true;
  310 + ryStart = data_temp4 + 1;
  311 +
  312 + // 更新内部model,用于外部验证
  313 + // 内部model的值暂时随意,以后再改
  314 + scope[ctrlAs].$$internalmodel = {desc: "ok"};
  315 +
  316 + // 更新外部model字段
  317 + if ($dbbmrangename_attr) {
  318 + console.log("dbbmrangename=" + ryDbbms.join(','));
  319 + eval("scope[ctrlAs].model" + "." + $dbbmrangename_attr + " = ryDbbms.join(',');");
  320 + }
  321 + if (rycidrangename_attr) {
  322 + console.log("rycidrangename=" + ryCids.join(','));
  323 + eval("scope[ctrlAs].model" + "." + rycidrangename_attr + " = ryCids.join(',');");
  324 + }
  325 + if ($rystartname_attr) {
  326 + console.log("rystartname=" + ryStart);
  327 + eval("scope[ctrlAs].model" + "." + $rystartname_attr + " = ryStart;");
  328 + }
  329 +
  330 + } else {
  331 + scope[ctrlAs].$$internalmodel = undefined;
  332 + }
  333 +
  334 + } else {
  335 + if (data_temp &&
  336 + data_temp.length > 0 &&
  337 + data_temp2 != undefined) {
  338 +
  339 + for (i = 0; i < data_temp.length; i++) {
  340 + ryDbbms.push(data_temp[i].dbbm);
  341 + ryCids.push(data_temp[i].id);
  342 + }
  343 + data_temp[data_temp2].isstart = true;
  344 + ryStart = data_temp2 + 1;
  345 +
  346 + // 更新内部model,用于外部验证
  347 + // 内部model的值暂时随意,以后再改
  348 + scope[ctrlAs].$$internalmodel = {desc: "ok"};
  349 +
  350 + // 更新外部model字段
  351 + if ($dbbmrangename_attr) {
  352 + console.log("dbbmrangename=" + ryDbbms.join(','));
  353 + eval("scope[ctrlAs].model" + "." + $dbbmrangename_attr + " = ryDbbms.join(',');");
  354 + }
  355 + if (rycidrangename_attr) {
  356 + console.log("rycidrangename=" + ryCids.join(','));
  357 + eval("scope[ctrlAs].model" + "." + rycidrangename_attr + " = ryCids.join(',');");
  358 + }
  359 + if ($rystartname_attr) {
  360 + console.log("rystartname=" + ryStart);
  361 + eval("scope[ctrlAs].model" + "." + $rystartname_attr + " = ryStart;");
  362 + }
  363 +
  364 + } else {
  365 + scope[ctrlAs].$$internalmodel = undefined;
  366 + }
  367 + }
  368 +
  369 + };
  370 +
  371 + // 监控内部数据,$$dataSelected 变化
  372 + scope.$watch(
  373 + function() {
  374 + return scope[ctrlAs].$$dataSelected;
  375 + },
  376 + function(newValue, oldValue) {
  377 + scope[ctrlAs].$$internal_validate_model();
  378 + },
  379 + true
  380 + );
  381 +
  382 + // 监控内部数据,$$dataSelectedStart 变化
  383 + scope.$watch(
  384 + function() {
  385 + return scope[ctrlAs].$$dataSelectedStart;
  386 + },
  387 + function(newValue, oldValue) {
  388 + scope[ctrlAs].$$internal_validate_model();
  389 + },
  390 + true
  391 + );
  392 +
  393 +
  394 + // 监控内部数据,$$dataFBSelected 变化
  395 + scope.$watch(
  396 + function() {
  397 + return scope[ctrlAs].$$dataFBSelected;
  398 + },
  399 + function(newValue, oldValue) {
  400 + scope[ctrlAs].$$internal_validate_model();
  401 + },
  402 + true
  403 + );
  404 +
  405 + // 监控内部数据,$$dataFBSelectedStart 变化
  406 + scope.$watch(
  407 + function() {
  408 + return scope[ctrlAs].$$dataFBSelectedStart;
  409 + },
  410 + function(newValue, oldValue) {
  411 + scope[ctrlAs].$$internal_validate_model();
  412 + },
  413 + true
  414 + );
  415 +
  416 + // 监控内部数据,$$dataFBInternalSelected 变化
  417 + scope.$watch(
  418 + function() {
  419 + return scope[ctrlAs].$$dataFBInternalSelected;
  420 + },
  421 + function(newValue, oldValue) {
  422 + scope[ctrlAs].$$internal_validate_model();
  423 + },
  424 + true
  425 + );
  426 +
  427 + // 监控内部数据,$$isFB 变化
  428 + scope.$watch(
  429 + function() {
  430 + return scope[ctrlAs].$$isFB;
  431 + },
  432 + function(newValue, oldValue) {
  433 + scope[ctrlAs].$$internal_validate_model();
  434 + },
  435 + true
  436 + );
  437 +
  438 + /**
  439 + * 验证数据是否初始化完成,
  440 + * 所谓的初始化就是内部所有的数据被有效设定过一次。
  441 + */
  442 + scope[ctrlAs].$$internal_validate_init = function() {
  443 + var self = scope[ctrlAs];
  444 + var data_temp = self.$$data;
  445 + var dataSelect_temp = self.$$dataSelected;
  446 + var dataFBSelect_temp = self.$$dataFBSelected;
  447 + var dbbmnames = null;
  448 + var dbbmnamegroup = null;
  449 + var rycids = null;
  450 + var rycidgroup = null;
  451 +
  452 + var i = 0;
  453 + var j = 0;
  454 + var k = 0;
  455 +
  456 + if (self.$$data_xl_first_init &&
  457 + self.$$data_ry_first_init &&
  458 + self.$$data_rycid_first_init &&
  459 + self.$$data_rystart_first_init && !self.$$data_init) {
  460 + console.log("开始初始化数据");
  461 +
  462 + // 判定是否分班,字符串中包含-就是了
  463 + if (self.$$data_ry_first_data.indexOf("-") != -1 && dataFBSelect_temp.length == 0) { // 分班
  464 + self.$$isFB = true;
  465 +
  466 + // 搭班编码、人员配置id
  467 + dbbmnames = self.$$data_ry_first_data.split(",");
  468 + rycids = self.$$data_rycid_first_data.split(",");
  469 + for (i = 0; i < dbbmnames.length; i++) {
  470 + dataFBSelect_temp.push({
  471 + group: [],
  472 + isstart: false
  473 + });
  474 + dbbmnamegroup = dbbmnames[i].split("-");
  475 + rycidgroup = rycids[i].split("-");
  476 +
  477 + for (k = 0; k < dbbmnamegroup.length; k++) {
  478 + dataFBSelect_temp[i].group.push({
  479 + id: rycidgroup[k],
  480 + dbbm: dbbmnamegroup[k],
  481 + isselected: false
  482 + });
  483 +
  484 + for (j = 0; j < data_temp.length; j++) {
  485 + if (dataFBSelect_temp[i].group[k].dbbm == data_temp[j].dbbm) {
  486 + dataFBSelect_temp[i].group[k].jsy = data_temp[j].jsy;
  487 + dataFBSelect_temp[i].group[k].spy = data_temp[j].spy;
  488 + break;
  489 + }
  490 + }
  491 + }
  492 +
  493 + }
  494 +
  495 + // 初始人员
  496 + scope[ctrlAs].$$dataFBSelectedStart = self.$$data_rystart_first_data - 1;
  497 +
  498 +
  499 + } else if (dataSelect_temp.length == 0) {
  500 + self.$$isFB = false;
  501 +
  502 + // 搭班编码、人员配置id
  503 + dbbmnames = self.$$data_ry_first_data.split(",");
  504 + rycids = self.$$data_rycid_first_data.split(",");
  505 + for (i = 0; i < dbbmnames.length; i++) {
  506 + dataSelect_temp.push({
  507 + id: rycids[i],
  508 + dbbm: dbbmnames[i],
  509 + isstart: false
  510 + });
  511 + for (j = 0; j < data_temp.length; j++) {
  512 + if (dataSelect_temp[i].dbbm == data_temp[j].dbbm) {
  513 + dataSelect_temp[i].jsy = data_temp[j].jsy;
  514 + dataSelect_temp[i].spy = data_temp[j].spy;
  515 + break;
  516 + }
  517 + }
  518 + }
  519 + // 初始人员
  520 + scope[ctrlAs].$$dataSelectedStart = self.$$data_rystart_first_data - 1;
  521 +
  522 + }
  523 +
  524 + console.log("数据初始化完毕!");
  525 + self.$$data_init = true;
  526 + }
  527 +
  528 + };
  529 +
  530 + // 监控初始化标志,线路,人员,起始人员
  531 + scope.$watch(
  532 + function() {
  533 + return scope[ctrlAs].$$data_xl_first_init;
  534 + },
  535 + function(newValue, oldValue) {
  536 + scope[ctrlAs].$$internal_validate_init();
  537 + }
  538 + );
  539 + scope.$watch(
  540 + function() {
  541 + return scope[ctrlAs].$$data_ry_first_init;
  542 + },
  543 + function(newValue, oldValue) {
  544 + scope[ctrlAs].$$internal_validate_init();
  545 + }
  546 + );
  547 + scope.$watch(
  548 + function() {
  549 + return scope[ctrlAs].$$data_rycid_first_init;
  550 + },
  551 + function(newValue, oldValue) {
  552 + scope[ctrlAs].$$internal_validate_init();
  553 + }
  554 + );
  555 + scope.$watch(
  556 + function() {
  557 + return scope[ctrlAs].$$data_rystart_first_init;
  558 + },
  559 + function(newValue, oldValue) {
  560 + scope[ctrlAs].$$internal_validate_init();
  561 + }
  562 + );
  563 +
  564 +
  565 + // 监控线路id的变化
  566 + attr.$observe("xlidvalue", function(value) {
  567 + if (value && value != "") {
  568 + console.log("xlidvalue=" + value);
  569 +
  570 + employeeConfigService_g.rest.list(
  571 + {"xl.id_eq": value, "isCancel_eq" : false, size: 100},
  572 + function(result) {
  573 + // 获取值了
  574 + console.log("人员配置获取了");
  575 +
  576 + scope[ctrlAs].$$data = [];
  577 + for (var i = 0; i < result.content.length; i++) {
  578 + scope[ctrlAs].$$data.push({
  579 + id: result.content[i].id,
  580 + dbbm: result.content[i].dbbm,
  581 + jsy: result.content[i].jsy.personnelName,
  582 + spy: result.content[i].spy == null ? "" : result.content[i].spy.personnelName
  583 + });
  584 + }
  585 + if (scope[ctrlAs].$$data_init) {
  586 + scope[ctrlAs].$$dataSelected = [];
  587 + scope[ctrlAs].$$dataSelectedStart = undefined;
  588 +
  589 + scope[ctrlAs].$$dataFBSelected = [];
  590 + scope[ctrlAs].$$dataFBInternalSelected = undefined;
  591 + scope[ctrlAs].$$dataFBSelectedStart = undefined;
  592 +
  593 + scope[ctrlAs].$$internalmodel = undefined;
  594 + }
  595 + scope[ctrlAs].$$data_xl_first_init = true;
  596 + },
  597 + function(result) {
  598 +
  599 + }
  600 + );
  601 +
  602 + }
  603 + });
  604 +
  605 + // 监控搭班编码范围值的变化
  606 + attr.$observe("dbbmrangevalue", function(value) {
  607 + if (value && value != "") {
  608 + console.log("dbbmrangevalue变换了");
  609 + scope[ctrlAs].$$data_ry_first_init = true;
  610 + scope[ctrlAs].$$data_ry_first_data = value;
  611 + }
  612 + });
  613 +
  614 + // 监控人员配置id范围值的变化
  615 + attr.$observe("rycidrangevalue", function(value) {
  616 + if (value && value != "") {
  617 + console.log("rycidrangevalue变换了");
  618 + scope[ctrlAs].$$data_rycid_first_init = true;
  619 + scope[ctrlAs].$$data_rycid_first_data = value;
  620 + }
  621 + });
  622 +
  623 + // 监控起始人员的变化
  624 + attr.$observe("rystartvalue", function(value) {
  625 + if (value && value != "") {
  626 + console.log("rystartvalue变换了");
  627 + scope[ctrlAs].$$data_rystart_first_init = true;
  628 + scope[ctrlAs].$$data_rystart_first_data = value;
  629 + }
  630 + });
  631 +
  632 + }
  633 + }
  634 +
  635 + }
  636 + }
  637 + }
  638 +]);
  639 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dt/MyEmployeeGroupWrapTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts2/employeeGroup/saEmployeegroupTemplate.html
src/main/resources/static/pages/scheduleApp/module/common/dts2/guideboardGroup/saGuideboardgroup.js 0 → 100644
  1 +
  2 +
  3 +/**
  4 + * saGuideboardgroup指令
  5 + * 属性如下:
  6 + * name(必须):控件的名字
  7 + * model(必须):指定一个外部object,独立作用域,如:model=ctrl.employeeInfoForSave
  8 + * xlidvalue(必须):绑定的model线路id值,如:xlidvalue={{ctrl.employeeInfoForSave.xl.id}}
  9 + * lprangevalue(必须):绑定的model路牌名字范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  10 + * lprangename(必须):绑定的model路牌名字范围字段名,如:lprangename=lprange
  11 + * lpidrangevalue(必须):绑定的model路牌id范围值,如:lprangevalue={{ctrl.employeeInfoForSave.lprange}}
  12 + * lpidrangename(必须):绑定的model路牌id范围字段名,如:lprangename=lprange
  13 + * lpstartvalue(必须):绑定的model起始路牌值,如:lpstartvalue={{ctrl.employeeInfoForSave.lpstart}}
  14 + * lpstartname(必须):绑定的model起始路牌字段名,如:lpstartname=lpstart
  15 + *
  16 + * required(可选):是否要用required验证
  17 + *
  18 + */
  19 +angular.module('ScheduleApp').directive('saGuideboardgroup', [
  20 + 'GuideboardManageService_g',
  21 + function(guideboardManageService_g) {
  22 + return {
  23 + restrict: 'E',
  24 + templateUrl: '/pages/scheduleApp/module/common/dts2/guideboardGroup/saGuideboardgroupTemplate.html',
  25 + scope: {
  26 + model: "=" // 独立作用域,关联外部的模型object
  27 + },
  28 + controllerAs: '$saGuideboardgroupCtrl',
  29 + bindToController: true,
  30 + controller: function($scope) {
  31 + var self = this;
  32 + self.$$data = []; // 选择线路后,该线路的路牌数据
  33 +
  34 + // 测试数据
  35 + //self.$$data = [
  36 + // {lpid: 1, lpname: '路1', isstart: false},
  37 + // {lpid: 2, lpname: '路2', isstart: true},
  38 + // {lpid: 3, lpname: '路3', isstart: false}
  39 + //];
  40 +
  41 +
  42 + self.$$dataSelected = []; // 选中的路牌列表
  43 + self.$$dataSelectedStart = undefined; // 起始路牌
  44 +
  45 + //self.$$dataSelected = [
  46 + // {lpid: 11, lpname: '路11', isstart: false},
  47 + // {lpid: 12, lpname: '路12', isstart: true},
  48 + // {lpid: 13, lpname: '路13', isstart: false}
  49 + //];
  50 +
  51 + // saGuideboardgroup组件的ng-model,用于外部绑定等操作
  52 + self.$$internalmodel = undefined;
  53 +
  54 + self.$$data_init = false; // *数据源初始化标志
  55 + self.$$data_xl_first_init = false; // 线路是否初始化
  56 + self.$$data_lp_first_init = false; // 路牌名字是否初始化
  57 + self.$$data_lpid_first_init = false; // 路牌id是否初始化
  58 + self.$$data_lpstart_first_init = false; // 起始路牌是否初始化
  59 +
  60 + },
  61 +
  62 + /**
  63 + * 此阶段可以改dom结构,此时angular还没扫描指令,
  64 + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。
  65 + * @param tElem
  66 + * @param tAttrs
  67 + * @returns {{pre: Function, post: Function}}
  68 + */
  69 + compile: function(tElem, tAttrs) {
  70 + // TODO:获取所有的属性
  71 + var $name_attr = tAttrs["name"]; // 控件的名字
  72 + var $required_attr = tAttrs["required"]; // 是否需要required验证
  73 + var $lprangename_attr = tAttrs["lprangename"]; // 绑定的model路牌名字范围字段名
  74 + var $lpidrangename_attr = tAttrs["lpidrangename"]; // 绑定的model路牌id范围字段名
  75 + var $lpstartname_attr = tAttrs["lpstartname"]; // 绑定的model起始路牌字段名
  76 +
  77 + // controlAs名字
  78 + var ctrlAs = '$saGuideboardgroupCtrl';
  79 +
  80 + // 如果有required属性,添加angularjs required验证
  81 + if ($required_attr != undefined) {
  82 + //console.log(tElem.html());
  83 + tElem.find("div").attr("required", "");
  84 + }
  85 +
  86 + return {
  87 + pre: function(scope, element, attr) {
  88 + // TODO:
  89 + },
  90 +
  91 + /**
  92 + * 相当于link函数。
  93 + * @param scope
  94 + * @param element
  95 + * @param attr
  96 + */
  97 + post: function(scope, element, attr) {
  98 + // name属性
  99 + if ($name_attr) {
  100 + scope[ctrlAs]["$name_attr"] = $name_attr;
  101 + }
  102 +
  103 + // TODO:
  104 +
  105 +
  106 + /**
  107 + * 路牌列表点击(路牌列表中选中路牌)
  108 + * @param $index
  109 + */
  110 + scope[ctrlAs].$$internal_lplist_click = function($index) {
  111 + var data_temp = scope[ctrlAs].$$data;
  112 + if (data_temp && data_temp.length > $index) {
  113 + scope[ctrlAs].$$dataSelected.push({
  114 + lpid: data_temp[$index].lpid,
  115 + lpname: data_temp[$index].lpname,
  116 + isstart: data_temp[$index].isstart
  117 + });
  118 +
  119 + // 如果没有指定过初始路牌,默认选择此路牌作为起始路牌
  120 + if (scope[ctrlAs].$$dataSelectedStart == undefined) {
  121 + scope[ctrlAs].$$internal_sellplist_click(
  122 + scope[ctrlAs].$$dataSelected.length - 1);
  123 + }
  124 + }
  125 + };
  126 + /**
  127 + * 选中的路牌单击(初始路牌选择)
  128 + * @param $index
  129 + */
  130 + scope[ctrlAs].$$internal_sellplist_click = function($index) {
  131 + var data_temp = scope[ctrlAs].$$dataSelected;
  132 + if (data_temp && data_temp.length > $index) {
  133 + for (var i = 0; i < data_temp.length; i++) {
  134 + data_temp[i].isstart = false;
  135 + }
  136 + data_temp[$index].isstart = true;
  137 + scope[ctrlAs].$$dataSelectedStart = $index;
  138 + }
  139 + };
  140 + /**
  141 + * 选中的路牌双击(删除选中的路牌)
  142 + * @param $index
  143 + */
  144 + scope[ctrlAs].$$internal_sellplist_dbclick = function($index) {
  145 + var data_temp = scope[ctrlAs].$$dataSelected;
  146 + if (data_temp && data_temp.length > $index) {
  147 + if (scope[ctrlAs].$$dataSelectedStart == $index) {
  148 + scope[ctrlAs].$$dataSelectedStart = undefined;
  149 + }
  150 + data_temp.splice($index, 1);
  151 + }
  152 + };
  153 +
  154 +
  155 + /**
  156 + * 验证内部数据,更新外部model
  157 + */
  158 + scope[ctrlAs].$$internal_validate_model = function() {
  159 + var data_temp = scope[ctrlAs].$$dataSelected;
  160 + var data_temp2 = scope[ctrlAs].$$dataSelectedStart;
  161 + var lpNames = [];
  162 + var lpIds = [];
  163 + var lpStart = 0;
  164 + var i = 0;
  165 +
  166 + if (data_temp &&
  167 + data_temp.length > 0 &&
  168 + data_temp2 != undefined) {
  169 +
  170 + for (i = 0; i < data_temp.length; i++) {
  171 + lpNames.push(data_temp[i].lpname);
  172 + lpIds.push(data_temp[i].lpid)
  173 + }
  174 + data_temp[data_temp2].isstart = true;
  175 + lpStart = data_temp2 + 1;
  176 +
  177 + // 更新内部model,用于外部验证
  178 + // 内部model的值暂时随意,以后再改
  179 + scope[ctrlAs].$$internalmodel = {desc: "ok"};
  180 +
  181 + // 更新外部model字段
  182 + if ($lprangename_attr) {
  183 + console.log("lprangename=" + lpNames.join(','));
  184 + eval("scope[ctrlAs].model" + "." + $lprangename_attr + " = lpNames.join(',');");
  185 + }
  186 + if ($lpidrangename_attr) {
  187 + console.log("lpidrangename=" + lpIds.join(','));
  188 + eval("scope[ctrlAs].model" + "." + $lpidrangename_attr + " = lpIds.join(',');");
  189 + }
  190 + if ($lpstartname_attr) {
  191 + console.log("lpstartname=" + lpStart);
  192 + eval("scope[ctrlAs].model" + "." + $lpstartname_attr + " = lpStart;");
  193 + }
  194 +
  195 + } else {
  196 + scope[ctrlAs].$$internalmodel = undefined;
  197 + }
  198 +
  199 +
  200 + };
  201 +
  202 + // 监控内部数据,$$data_selected 变化
  203 + scope.$watch(
  204 + function() {
  205 + return scope[ctrlAs].$$dataSelected;
  206 + },
  207 + function(newValue, oldValue) {
  208 + scope[ctrlAs].$$internal_validate_model();
  209 + },
  210 + true
  211 + );
  212 +
  213 + // 监控内部数据,$$data_selected_start 变化
  214 + scope.$watch(
  215 + function() {
  216 + return scope[ctrlAs].$$dataSelectedStart;
  217 + },
  218 + function(newValue, oldValue) {
  219 + scope[ctrlAs].$$internal_validate_model();
  220 + },
  221 + true
  222 + );
  223 +
  224 + /**
  225 + * 验证数据是否初始化完成,
  226 + * 所谓的初始化就是内部所有的数据被有效设定过一次。
  227 + */
  228 + scope[ctrlAs].$$internal_validate_init = function() {
  229 + var self = scope[ctrlAs];
  230 +
  231 + if (self.$$data_xl_first_init &&
  232 + self.$$data_lp_first_init &&
  233 + self.$$data_lpid_first_init &&
  234 + self.$$data_lpstart_first_init) {
  235 + console.log("数据初始化完毕!");
  236 + self.$$data_init = true;
  237 + }
  238 +
  239 + };
  240 +
  241 + // 监控初始化标志,线路,路牌,路牌id,起始路牌
  242 + scope.$watch(
  243 + function() {
  244 + return scope[ctrlAs].$$data_xl_first_init;
  245 + },
  246 + function(newValue, oldValue) {
  247 + scope[ctrlAs].$$internal_validate_init();
  248 + }
  249 + );
  250 + scope.$watch(
  251 + function() {
  252 + return scope[ctrlAs].$$data_lp_first_init;
  253 + },
  254 + function(newValue, oldValue) {
  255 + scope[ctrlAs].$$internal_validate_init();
  256 + }
  257 + );
  258 + scope.$watch(
  259 + function() {
  260 + return scope[ctrlAs].$$data_lpid_first_init;
  261 + },
  262 + function(newValue, oldValue) {
  263 + scope[ctrlAs].$$internal_validate_init();
  264 + }
  265 + );
  266 + scope.$watch(
  267 + function() {
  268 + return scope[ctrlAs].$$data_lpstart_first_init;
  269 + },
  270 + function(newValue, oldValue) {
  271 + scope[ctrlAs].$$internal_validate_init();
  272 + }
  273 + );
  274 +
  275 +
  276 + // 监控线路id的变化
  277 + attr.$observe("xlidvalue", function(value) {
  278 + if (value && value != "") {
  279 + console.log("xlidvalue=" + value);
  280 +
  281 + guideboardManageService_g.rest.list(
  282 + {"xl.id_eq": value, size: 100},
  283 + function(result) {
  284 + // 获取值了
  285 + console.log("路牌获取了");
  286 +
  287 + scope[ctrlAs].$$data = [];
  288 + for (var i = 0; i < result.content.length; i++) {
  289 + scope[ctrlAs].$$data.push({
  290 + lpid: result.content[i].id,
  291 + lpname: result.content[i].lpName,
  292 + isstart: false
  293 + });
  294 + }
  295 + if (scope[ctrlAs].$$data_init) {
  296 + scope[ctrlAs].$$dataSelected = [];
  297 + scope[ctrlAs].$$dataSelectedStart = undefined;
  298 + scope[ctrlAs].$$internalmodel = undefined;
  299 + }
  300 + scope[ctrlAs].$$data_xl_first_init = true;
  301 + },
  302 + function(result) {
  303 +
  304 + }
  305 + );
  306 +
  307 + }
  308 + });
  309 +
  310 + // 监控路牌名称范围值的变化
  311 + attr.$observe("lprangevalue", function(value) {
  312 + if (value && value != "") {
  313 + var data_temp = scope[ctrlAs].$$dataSelected;
  314 + var lpnames = value.split(",");
  315 + var i = 0;
  316 + if (data_temp && data_temp.length == 0) { // 初始创建
  317 + console.log("lprangevalue变换了");
  318 + for (i = 0; i < lpnames.length; i++) {
  319 + scope[ctrlAs].$$dataSelected.push({
  320 + lpname: lpnames[i],
  321 + isstart: false
  322 + });
  323 + }
  324 + } else {
  325 + for (i = 0; i < lpnames.length; i++) {
  326 + data_temp[i].lpname = lpnames[i];
  327 + }
  328 + }
  329 + scope[ctrlAs].$$data_lp_first_init = true;
  330 + }
  331 + });
  332 +
  333 + // 监控路牌id范围值的变化
  334 + attr.$observe("lpidrangevalue", function(value) {
  335 + if (value && value != "") {
  336 + console.log("lpidrangevalue=" + value);
  337 + var data_temp = scope[ctrlAs].$$dataSelected;
  338 + var lpids = value.split(",");
  339 + var i = 0;
  340 + if (data_temp && data_temp.length == 0) { // 初始创建
  341 + console.log("lpidrangevalue");
  342 + for (i = 0; i < lpids.length; i++) {
  343 + scope[ctrlAs].$$dataSelected.push({
  344 + lpid: lpids[i],
  345 + isstart: false
  346 + });
  347 + }
  348 + } else {
  349 + for (i = 0; i < lpids.length; i++) {
  350 + data_temp[i].lpid = lpids[i];
  351 + }
  352 + }
  353 + scope[ctrlAs].$$data_lpid_first_init = true;
  354 + }
  355 + });
  356 +
  357 + // 监控起始路牌的变化
  358 + attr.$observe("lpstartvalue", function(value) {
  359 + if (value && value != "") {
  360 + scope[ctrlAs].$$dataSelectedStart = value - 1;
  361 + scope[ctrlAs].$$data_lpstart_first_init = true;
  362 + }
  363 + });
  364 +
  365 +
  366 +
  367 + }
  368 + }
  369 +
  370 + }
  371 + }
  372 + }
  373 +]);
  374 +
... ...
src/main/resources/static/pages/scheduleApp/module/common/dt/MyGuideboardGroupWrapTemplate.html renamed to src/main/resources/static/pages/scheduleApp/module/common/dts2/guideboardGroup/saGuideboardgroupTemplate.html