Commit b076e5e24fb0fbd212417c4effa7971a8dd47bc6
1 parent
705aab85
PSM-12
Showing
7 changed files
with
1077 additions
and
181 deletions
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect4.js renamed to src/main/resources/static/pages/scheduleApp/module/common/dts1/select/legacy.txt
| @@ -75,7 +75,7 @@ angular.module('ScheduleApp').directive('saSelect4', [ | @@ -75,7 +75,7 @@ angular.module('ScheduleApp').directive('saSelect4', [ | ||
| 75 | // 动态设置dom | 75 | // 动态设置dom |
| 76 | // dom required 属性 | 76 | // dom required 属性 |
| 77 | if ($required_attr != undefined) { | 77 | if ($required_attr != undefined) { |
| 78 | - tElem.find("ui-select").attr("required", ""); | 78 | + tElem.find("div").attr("required", ""); |
| 79 | } | 79 | } |
| 80 | // dom placeholder 属性 | 80 | // dom placeholder 属性 |
| 81 | tElem.find("ui-select-match").attr("placeholder", $placeholder_attr); | 81 | tElem.find("ui-select-match").attr("placeholder", $placeholder_attr); |
| @@ -85,7 +85,7 @@ angular.module('ScheduleApp').directive('saSelect4', [ | @@ -85,7 +85,7 @@ angular.module('ScheduleApp').directive('saSelect4', [ | ||
| 85 | // dom icname 属性 | 85 | // dom icname 属性 |
| 86 | tElem.find("ui-select-choices").attr("repeat", "item" + "." + $icname_attr + " as item in $saSelectCtrl.$$data"); | 86 | tElem.find("ui-select-choices").attr("repeat", "item" + "." + $icname_attr + " as item in $saSelectCtrl.$$data"); |
| 87 | // dom name 属性 | 87 | // dom name 属性 |
| 88 | - tElem.find("ui-select").attr("name", $name_attr); | 88 | + tElem.find("div").attr("name", $name_attr); |
| 89 | 89 | ||
| 90 | return { | 90 | return { |
| 91 | pre: function(scope, element, attr) { | 91 | pre: function(scope, element, attr) { |
| @@ -166,8 +166,8 @@ angular.module('ScheduleApp').directive('saSelect4', [ | @@ -166,8 +166,8 @@ angular.module('ScheduleApp').directive('saSelect4', [ | ||
| 166 | } | 166 | } |
| 167 | } | 167 | } |
| 168 | if (obj) { // 在data中判定有没有 | 168 | if (obj) { // 在data中判定有没有 |
| 169 | - for (var k = 0; k < scope[ctrlAs].$$data.length; j++) { | ||
| 170 | - if (eval("scope[ctrlAs].$$data[j]" + "." + $icname_attr + " == obj." + $icname_attr)) { | 169 | + for (var k = 0; k < scope[ctrlAs].$$data.length; k++) { |
| 170 | + if (eval("scope[ctrlAs].$$data[k]" + "." + $icname_attr + " == obj." + $icname_attr)) { | ||
| 171 | obj = undefined; | 171 | obj = undefined; |
| 172 | break; | 172 | break; |
| 173 | } | 173 | } |
| @@ -209,7 +209,7 @@ angular.module('ScheduleApp').directive('saSelect4', [ | @@ -209,7 +209,7 @@ angular.module('ScheduleApp').directive('saSelect4', [ | ||
| 209 | 209 | ||
| 210 | // result中添加拼音数据,注意:这里要求result返回对象数组 | 210 | // result中添加拼音数据,注意:这里要求result返回对象数组 |
| 211 | for (var i = 0; i < result.length; i ++) { | 211 | for (var i = 0; i < result.length; i ++) { |
| 212 | - if ($icname_s_attr) { | 212 | + if ($dscol_attr) { |
| 213 | if (eval("result[i]" + "." + $dscol_attr)) { | 213 | if (eval("result[i]" + "." + $dscol_attr)) { |
| 214 | // 全拼 | 214 | // 全拼 |
| 215 | result[i]["fullChars"] = pinyin.getFullChars(eval("result[i]" + "." + $dscol_attr)).toUpperCase(); | 215 | result[i]["fullChars"] = pinyin.getFullChars(eval("result[i]" + "." + $dscol_attr)).toUpperCase(); |
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect5.js
0 → 100644
| 1 | +/** | ||
| 2 | + * saSelect5指令,基于简拼查询的select,内部封装angular-ui-select控件,并嵌入相应的业务逻辑。 | ||
| 3 | + * name(必须):控件的名字 | ||
| 4 | + * model(必须):独立作用域,指定一个外部对象模型双向绑定,如:model=ctrl.employeeInfoForSave | ||
| 5 | + * cmaps(必须):外部对象与指令内部数据对象字段名映射对象,如:{{ {'xl.id' : 'id', 'xl.name' : 'name'} | json}} | ||
| 6 | + * dcname(必须):绑定的model字段名,如:dcname=xl.id | ||
| 7 | + * icname(必须):内部与之对应的字段名,如:icname=id | ||
| 8 | + * | ||
| 9 | + * dsparams(必须):内部数据源查询参数对象,如:{{ {'ttid_eq': ctrl.rerunManageForSave.rerunTtinfo.id} | json }} | ||
| 10 | + * iterobjname(必须):内部数据源迭代的数据变量名,如:iterobjname=item | ||
| 11 | + * iterobjexp(必须):内部显示用的表达式 | ||
| 12 | + * searchph(必须):查询输入占位符字符串,如:searchph=请输入... | ||
| 13 | + * searchexp(必须):查询基于的内部数据源的表达式,如:searchexp=this.name+'('+this.code+')' | ||
| 14 | + * | ||
| 15 | + * required(可选):是否需要form的required验证 | ||
| 16 | + * | ||
| 17 | + */ | ||
| 18 | +angular.module('ScheduleApp').directive('saSelect5', [ | ||
| 19 | + '$timeout', | ||
| 20 | + '$$SearchInfoService_g', | ||
| 21 | + function($timeout, $$searchInfoService_g) { | ||
| 22 | + return { | ||
| 23 | + restrict: 'E', | ||
| 24 | + templateUrl: '/pages/scheduleApp/module/common/dts1/select/saSelect5Template.html', | ||
| 25 | + scope: { // 独立作用域 | ||
| 26 | + model: "=" // 绑定外部对象 | ||
| 27 | + }, | ||
| 28 | + controllerAs: "$saSelectCtrl", | ||
| 29 | + bindToController: true, | ||
| 30 | + controller: function($scope) { | ||
| 31 | + var self = this; | ||
| 32 | + self.$$data = []; // 内部ui-select显示用数据 | ||
| 33 | + self.$$data_real = []; // 内部保存的实际数据 | ||
| 34 | + | ||
| 35 | + // myselect组件的ng-model,用于外部绑定验证等操作 | ||
| 36 | + self.$$internalmodel = undefined; | ||
| 37 | + | ||
| 38 | + self.$$internal_select_value = undefined; // 选中的值 | ||
| 39 | + | ||
| 40 | + }, | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * 此阶段可以改dom结构,此时angular还没扫描指令, | ||
| 44 | + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。 | ||
| 45 | + * @param tElem | ||
| 46 | + * @param tAttrs | ||
| 47 | + * @returns {{pre: Function, post: Function}} | ||
| 48 | + */ | ||
| 49 | + compile: function(tElem, tAttrs) { | ||
| 50 | + // 获取属性,并验证必须按属性 | ||
| 51 | + var $name_attr = tAttrs["name"]; // 控件的名字 | ||
| 52 | + var $cmaps_attr = tAttrs["cmaps"]; // 外部对象与指令内部数据对象字段名映射对象 | ||
| 53 | + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名 | ||
| 54 | + var $icname_attr = tAttrs["icname"]; // 内部与之对应的字段名 | ||
| 55 | + | ||
| 56 | + var $dsparams_attr = tAttrs["dsparams"]; // 内部数据源查询参数对象 | ||
| 57 | + var $iterobjname_attr = tAttrs["iterobjname"]; // 内部数据源迭代的数据变量名 | ||
| 58 | + var $iterobjexp_attr = tAttrs["iterobjexp"]; // 内部显示用的表达式 | ||
| 59 | + var $searchph_attr = tAttrs["searchph"]; // 查询输入占位符字符串 | ||
| 60 | + var $searchexp_attr = tAttrs["searchexp"]; // 查询基于的内部数据源的表达式 | ||
| 61 | + | ||
| 62 | + var $required_attr = tAttrs["required"]; // 是否需要required验证 | ||
| 63 | + | ||
| 64 | + if (!$name_attr) { | ||
| 65 | + throw new Error("name属性必须填写"); | ||
| 66 | + } | ||
| 67 | + if (!$cmaps_attr) { | ||
| 68 | + throw new Error("cmaps属性必须填写") | ||
| 69 | + } | ||
| 70 | + if (!$dcname_attr || !$icname_attr) { | ||
| 71 | + throw new Error("dcname、icname属性必须填写"); | ||
| 72 | + } | ||
| 73 | + if (!$dsparams_attr) { | ||
| 74 | + throw new Error("dsparams属性必须填写"); | ||
| 75 | + } | ||
| 76 | + if (!$iterobjname_attr) { | ||
| 77 | + throw new Error("iterobjname属性必须填写"); | ||
| 78 | + } | ||
| 79 | + if (!$iterobjexp_attr) { | ||
| 80 | + throw new Error("iterobjexp属性必须填写"); | ||
| 81 | + } | ||
| 82 | + if (!$searchph_attr) { | ||
| 83 | + throw new Error("searchph属性必须填写"); | ||
| 84 | + } | ||
| 85 | + if (!$searchexp_attr) { | ||
| 86 | + throw new Error("searchexp属性必须填写"); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + // 内部controlAs名字 | ||
| 90 | + var ctrlAs = "$saSelectCtrl"; | ||
| 91 | + | ||
| 92 | + // 动态设置dom | ||
| 93 | + // dom,最外层name属性设置 | ||
| 94 | + tElem.find("div:first").attr("name", $name_attr); | ||
| 95 | + // dom,最外层divrequired属性设置 | ||
| 96 | + if ($required_attr != undefined) { | ||
| 97 | + tElem.find("div[name=\'" + $name_attr + "\']").attr("required", ""); | ||
| 98 | + } | ||
| 99 | + // dom,ui-select-match的placeholder属性设定 | ||
| 100 | + tElem.find("ui-select-match").attr("placeholder", $searchph_attr); | ||
| 101 | + // dom,ui-select-match的内容设定 | ||
| 102 | + var uiSelectMatchHtml = "{{" + ctrlAs + ".$$internal_match_str($select.selected)}}"; | ||
| 103 | + tElem.find("ui-select-match").html(uiSelectMatchHtml); | ||
| 104 | + // dom,ui-select-choices的repeat属性设定 | ||
| 105 | + var uiSelectChoices_repeatAttr = $iterobjname_attr + "." + $icname_attr + " as " + $iterobjname_attr + " in " + ctrlAs + ".$$data"; | ||
| 106 | + tElem.find("ui-select-choices").attr("repeat", uiSelectChoices_repeatAttr); | ||
| 107 | + // dom,span ng-bind属性设置,TODO:暂时无法用transclude设置,先用属性设置 | ||
| 108 | + tElem.find("ui-select-choices").html("{{" + $iterobjexp_attr + "}}"); | ||
| 109 | + | ||
| 110 | + return { | ||
| 111 | + pre: function (scope, element, attr) { | ||
| 112 | + // TODO: | ||
| 113 | + }, | ||
| 114 | + | ||
| 115 | + /** | ||
| 116 | + * 相当于link函数。 | ||
| 117 | + * @param scope | ||
| 118 | + * @param element | ||
| 119 | + * @param attr | ||
| 120 | + */ | ||
| 121 | + post: function (scope, element, attr) { | ||
| 122 | + | ||
| 123 | + // 添加选中事件处理函数 | ||
| 124 | + scope[ctrlAs].$$internal_select_fn = function($item) { | ||
| 125 | + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = $item" + "." + $icname_attr + ";"); | ||
| 126 | + | ||
| 127 | + for (var mc in $cmaps_attr) { // model的字段名:内部数据源对应字段名 | ||
| 128 | + var ic = $cmaps_attr[mc]; // 内部数据源对应字段 | ||
| 129 | + eval("scope[ctrlAs].model" + "." + mc + " = $item" + "." + ic + ";"); | ||
| 130 | + } | ||
| 131 | + }; | ||
| 132 | + | ||
| 133 | + // 删除选中事件处理函数 | ||
| 134 | + scope[ctrlAs].$$internal_remove_fn = function() { | ||
| 135 | + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = undefined;"); | ||
| 136 | + | ||
| 137 | + var mc; // model的字段名 | ||
| 138 | + for (mc in $cmaps_attr) { | ||
| 139 | + eval("scope[ctrlAs].model" + "." + mc + " = undefined;"); | ||
| 140 | + } | ||
| 141 | + }; | ||
| 142 | + | ||
| 143 | + // 刷新数据 | ||
| 144 | + scope[ctrlAs].$$internal_refresh_fn = function(search) { | ||
| 145 | + if (search && search != "") { // 有search值 | ||
| 146 | + // 处理search | ||
| 147 | + console.log("search:" + search); | ||
| 148 | + | ||
| 149 | + scope[ctrlAs].$$data = []; | ||
| 150 | + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { | ||
| 151 | + var upTerm = search.toUpperCase(); | ||
| 152 | + if (scope[ctrlAs].$$data.length < 10) { | ||
| 153 | + if (scope[ctrlAs].$$data_real[k].$fullChars.indexOf(upTerm) != -1 | ||
| 154 | + || scope[ctrlAs].$$data_real[k].$camelChars.indexOf(upTerm) != -1 | ||
| 155 | + || scope[ctrlAs].$$data_real[k].$calcu_str.indexOf(upTerm) != -1) { | ||
| 156 | + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k])); | ||
| 157 | + } | ||
| 158 | + } else { | ||
| 159 | + break; | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + }; | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * 验证内部数据,更新外部model | ||
| 167 | + */ | ||
| 168 | + scope[ctrlAs].$$internal_validate_model = function() { | ||
| 169 | + if (scope[ctrlAs].$$internal_select_value) { | ||
| 170 | + var select_value_temp = scope[ctrlAs].$$internal_select_value; | ||
| 171 | + if (scope[ctrlAs].$$data_real && scope[ctrlAs].$$data_real.length > 0) { | ||
| 172 | + var obj; | ||
| 173 | + for (var j = 0; j < scope[ctrlAs].$$data_real.length; j++) { | ||
| 174 | + if (eval("scope[ctrlAs].$$data_real[j]" + "." + $icname_attr + " == select_value_temp")) { | ||
| 175 | + obj = angular.copy(scope[ctrlAs].$$data_real[j]); | ||
| 176 | + break; | ||
| 177 | + } | ||
| 178 | + } | ||
| 179 | + if (obj) { // 在data中判定有没有 | ||
| 180 | + for (var k = 0; k < scope[ctrlAs].$$data.length; k++) { | ||
| 181 | + if (eval("scope[ctrlAs].$$data[k]" + "." + $icname_attr + " == obj." + $icname_attr)) { | ||
| 182 | + obj = undefined; | ||
| 183 | + break; | ||
| 184 | + } | ||
| 185 | + } | ||
| 186 | + if (obj) { | ||
| 187 | + scope[ctrlAs].$$data.push(obj); | ||
| 188 | + } | ||
| 189 | + // 更新内部model,用于外部验证 | ||
| 190 | + // 内部model的值暂时随意,以后再改 | ||
| 191 | + scope[ctrlAs].$$internalmodel = {desc: "ok"}; | ||
| 192 | + } else { | ||
| 193 | + scope[ctrlAs].$$internalmodel = undefined; | ||
| 194 | + } | ||
| 195 | + | ||
| 196 | + } else { | ||
| 197 | + scope[ctrlAs].$$internalmodel = undefined; | ||
| 198 | + } | ||
| 199 | + | ||
| 200 | + } else { | ||
| 201 | + scope[ctrlAs].$$internalmodel = undefined; | ||
| 202 | + } | ||
| 203 | + }; | ||
| 204 | + | ||
| 205 | + /** | ||
| 206 | + * 内部match表达式转换函数,需要外部绑定此函数的上下文。 | ||
| 207 | + * @param context function上下文 | ||
| 208 | + */ | ||
| 209 | + scope[ctrlAs].$$internal_match_str = function (context) { | ||
| 210 | + var fx = function() { | ||
| 211 | + return eval($searchexp_attr); | ||
| 212 | + }; | ||
| 213 | + | ||
| 214 | + var str = fx.bind(context)(); | ||
| 215 | + if (str && str != "") | ||
| 216 | + return str; | ||
| 217 | + else | ||
| 218 | + return undefined; | ||
| 219 | + }; | ||
| 220 | + | ||
| 221 | + /** | ||
| 222 | + * 内部方法,读取字典数据作为数据源。 | ||
| 223 | + * @param atype ajax查询类型 | ||
| 224 | + * @param ajaxparamobj 查询参数对象 | ||
| 225 | + */ | ||
| 226 | + scope[ctrlAs].$$internal_ajax_data = function(atype, ajaxparamobj) { | ||
| 227 | + ajaxparamobj.type = 'all'; | ||
| 228 | + $$searchInfoService_g[atype].list( | ||
| 229 | + ajaxparamobj, | ||
| 230 | + function(result) { | ||
| 231 | + console.log("$$internal_ajax_data result"); | ||
| 232 | + | ||
| 233 | + // 重新创建内部保存的数据 | ||
| 234 | + scope[ctrlAs].$$data = []; | ||
| 235 | + // result中添加拼音数据,注意:这里要求result返回对象数组 | ||
| 236 | + for (var i = 0; i < result.length; i ++) { | ||
| 237 | + // 闭包绑定返回最终查询的值 | ||
| 238 | + var calcu_str = scope[ctrlAs].$$internal_match_str(result[i]); | ||
| 239 | + if (calcu_str) { | ||
| 240 | + // 全拼 | ||
| 241 | + result[i]["$fullChars"] = pinyin.getFullChars(calcu_str); | ||
| 242 | + // 简拼 | ||
| 243 | + result[i]["$camelChars"] = pinyin.getCamelChars(calcu_str); | ||
| 244 | + // 原值 | ||
| 245 | + result[i]["$calcu_str"] = calcu_str; | ||
| 246 | + | ||
| 247 | + scope[ctrlAs].$$data_real.push(result[i]); | ||
| 248 | + } | ||
| 249 | + } | ||
| 250 | + | ||
| 251 | + // 重新创建内部ui-select显示用数据,默认取10条记录显示 | ||
| 252 | + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { | ||
| 253 | + if (scope[ctrlAs].$$data.length < 10) { | ||
| 254 | + scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]); | ||
| 255 | + } else { | ||
| 256 | + break; | ||
| 257 | + } | ||
| 258 | + } | ||
| 259 | + | ||
| 260 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 261 | + }, | ||
| 262 | + function(result) { | ||
| 263 | + throw new Error("ajax查询出错"); | ||
| 264 | + } | ||
| 265 | + ); | ||
| 266 | + }; | ||
| 267 | + | ||
| 268 | + /** | ||
| 269 | + * 内部方法,读取字典数据作为数据源。 | ||
| 270 | + * @param dictype 字典类型,如:gsType | ||
| 271 | + */ | ||
| 272 | + scope[ctrlAs].$$internal_dic_data = function(dictype) { | ||
| 273 | + if (!dictionaryUtils.getByGroup(dictype)) { | ||
| 274 | + throw new error("字典数据不窜在=" + dictype); | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + // 重新创建内部保存的数据 | ||
| 278 | + scope[ctrlAs].$$data_real = []; | ||
| 279 | + var origin_dicgroup = dictionaryUtils.getByGroup(dicgroup); | ||
| 280 | + var dic_key; // 字典key | ||
| 281 | + | ||
| 282 | + for (dic_key in origin_dicgroup) { | ||
| 283 | + var data = {}; // 重新组合的字典元素对象 | ||
| 284 | + if (dic_key == "true") | ||
| 285 | + data[$icname_attr] = true; | ||
| 286 | + else | ||
| 287 | + data[$icname_attr] = dic_key; | ||
| 288 | + data[$dscol_attr] = origin_dicgroup[dic_key]; | ||
| 289 | + scope[ctrlAs].$$data_real.push(data); | ||
| 290 | + } | ||
| 291 | + | ||
| 292 | + // 重新创建内部ui-select显示用数据,直接复制所有的字典数据 | ||
| 293 | + scope[ctrlAs].$$data = []; | ||
| 294 | + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { | ||
| 295 | + scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]); | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 299 | + }; | ||
| 300 | + | ||
| 301 | + /** | ||
| 302 | + * 监控dsparams属性变化 | ||
| 303 | + */ | ||
| 304 | + attr.$observe("dsparams", function(value) { | ||
| 305 | + if (value && value != "") { | ||
| 306 | + var obj = JSON.parse(value); | ||
| 307 | + console.log("saSelect5 监控到dsparams属性变化,old=" + $dsparams_attr + ",new=" + value); | ||
| 308 | + | ||
| 309 | + // dsparams格式如下: | ||
| 310 | + // {type: 'dic/ajax', param: 'dic名字'/'ajax查询参数对象', atype: 'ajax查询类型'} | ||
| 311 | + | ||
| 312 | + if (obj.type == 'dic') { | ||
| 313 | + scope[ctrlAs].$$internal_dic_data(obj.param); | ||
| 314 | + | ||
| 315 | + } else if (obj.type == 'ajax') { | ||
| 316 | + scope[ctrlAs].$$internal_ajax_data(obj.atype, obj.param); | ||
| 317 | + } else { | ||
| 318 | + throw new Error("dsparams参数格式异常=" + obj); | ||
| 319 | + } | ||
| 320 | + | ||
| 321 | + } | ||
| 322 | + }); | ||
| 323 | + | ||
| 324 | + /** | ||
| 325 | + * 监控外部模型dcname的值的变化。 | ||
| 326 | + */ | ||
| 327 | + scope.$watch( | ||
| 328 | + function() { | ||
| 329 | + return eval("scope." + ctrlAs + ".model" + "." + $dcname_attr); | ||
| 330 | + }, | ||
| 331 | + function(newValue, oldValue) { | ||
| 332 | + if (newValue === undefined && oldValue === undefined) { | ||
| 333 | + // 两侧都是undefined,不处理 | ||
| 334 | + | ||
| 335 | + } else { | ||
| 336 | + console.log("saSelect5 监控到外部模型" + $dcname_attr + "属性值变化,old=" + oldValue + ",new=" + newValue); | ||
| 337 | + scope[ctrlAs].$$internal_select_value = newValue; | ||
| 338 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 339 | + } | ||
| 340 | + }, | ||
| 341 | + true | ||
| 342 | + ); | ||
| 343 | + } | ||
| 344 | + }; | ||
| 345 | + } | ||
| 346 | + }; | ||
| 347 | + } | ||
| 348 | +]); | ||
| 0 | \ No newline at end of file | 349 | \ No newline at end of file |
src/main/resources/static/pages/scheduleApp/module/common/dts1/select/saSelect5Template.html
0 → 100644
| 1 | +<div class="input-group" name="指令compile阶段设定1" | ||
| 2 | + ng-model="$saSelectCtrl.$$internalmodel"> | ||
| 3 | + <ui-select ng-model="$saSelectCtrl.$$internal_select_value" on-select="$saSelectCtrl.$$internal_select_fn($item)" | ||
| 4 | + theme="bootstrap" > | ||
| 5 | + <ui-select-match placeholder="指令compile阶段设定">指令compile阶段设定2</ui-select-match> | ||
| 6 | + <ui-select-choices repeat="指令compile阶段设定3" | ||
| 7 | + refresh="$saSelectCtrl.$$internal_refresh_fn($select.search)" | ||
| 8 | + refresh-delay="10"> | ||
| 9 | + | ||
| 10 | + 指令compile阶段设定777 | ||
| 11 | + | ||
| 12 | + </ui-select-choices> | ||
| 13 | + </ui-select> | ||
| 14 | + <span class="input-group-btn"> | ||
| 15 | + <button type="button" ng-click="$saSelectCtrl.$$internal_remove_fn()" class="btn btn-default"> | ||
| 16 | + <span class="glyphicon glyphicon-trash"></span> | ||
| 17 | + </button> | ||
| 18 | + </span> | ||
| 19 | +</div> | ||
| 0 | \ No newline at end of file | 20 | \ No newline at end of file |
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
| @@ -529,7 +529,17 @@ angular.module('ScheduleApp').factory('$$SearchInfoService_g', ['$resource', fun | @@ -529,7 +529,17 @@ angular.module('ScheduleApp').factory('$$SearchInfoService_g', ['$resource', fun | ||
| 529 | isArray: true | 529 | isArray: true |
| 530 | } | 530 | } |
| 531 | } | 531 | } |
| 532 | - ) | 532 | + ), |
| 533 | + eci3: $resource( | ||
| 534 | + '/eci/:type', | ||
| 535 | + {}, | ||
| 536 | + { | ||
| 537 | + list: { | ||
| 538 | + method: 'GET', | ||
| 539 | + isArray: true | ||
| 540 | + } | ||
| 541 | + } | ||
| 542 | + ), | ||
| 533 | } | 543 | } |
| 534 | }]); | 544 | }]); |
| 535 | angular.module('ScheduleApp').filter("$$pyFilter", function() { | 545 | angular.module('ScheduleApp').filter("$$pyFilter", function() { |
| @@ -2620,6 +2630,7 @@ angular.module('ScheduleApp').directive('saBcgroup', [ | @@ -2620,6 +2630,7 @@ angular.module('ScheduleApp').directive('saBcgroup', [ | ||
| 2620 | // 监控内部数据,$$data_selected 变化 | 2630 | // 监控内部数据,$$data_selected 变化 |
| 2621 | scope.$watch( | 2631 | scope.$watch( |
| 2622 | function() { | 2632 | function() { |
| 2633 | + console.log("长度:" + scope[ctrlAs].$$dataSelected.length); | ||
| 2623 | return scope[ctrlAs].$$dataSelected; | 2634 | return scope[ctrlAs].$$dataSelected; |
| 2624 | }, | 2635 | }, |
| 2625 | function(newValue, oldValue) { | 2636 | function(newValue, oldValue) { |
| @@ -2687,11 +2698,14 @@ angular.module('ScheduleApp').directive('saBcgroup', [ | @@ -2687,11 +2698,14 @@ angular.module('ScheduleApp').directive('saBcgroup', [ | ||
| 2687 | // 监控内部数据的变化 | 2698 | // 监控内部数据的变化 |
| 2688 | attr.$observe("dataparams", function(value) { | 2699 | attr.$observe("dataparams", function(value) { |
| 2689 | if (value && value != "") { | 2700 | if (value && value != "") { |
| 2690 | - console.log("observe 监控 dataparams=" + value); | 2701 | + if (value == '{}') { |
| 2702 | + return; | ||
| 2703 | + } | ||
| 2704 | + | ||
| 2705 | + console.log("bcgroup observe 监控 dataparams=" + value); | ||
| 2691 | 2706 | ||
| 2692 | - var obj = JSON.parse(value); | ||
| 2693 | timeTableDetailManageService_g.bcdetails.list( | 2707 | timeTableDetailManageService_g.bcdetails.list( |
| 2694 | - obj, | 2708 | + JSON.parse(value), |
| 2695 | function(result) { | 2709 | function(result) { |
| 2696 | // 获取值了 | 2710 | // 获取值了 |
| 2697 | console.log("内部班次数据获取了"); | 2711 | console.log("内部班次数据获取了"); |
| @@ -3038,7 +3052,18 @@ angular.module('ScheduleApp').directive('saSelect4', [ | @@ -3038,7 +3052,18 @@ angular.module('ScheduleApp').directive('saSelect4', [ | ||
| 3038 | scope[ctrlAs].$$internal_select_value = value; | 3052 | scope[ctrlAs].$$internal_select_value = value; |
| 3039 | scope[ctrlAs].$$internal_validate_model(); | 3053 | scope[ctrlAs].$$internal_validate_model(); |
| 3040 | } | 3054 | } |
| 3055 | + | ||
| 3056 | + // 闭包测试 | ||
| 3057 | + var obj = {'a':1,'b':2}; | ||
| 3058 | + var tfx = scope[ctrlAs].$$test.bind(obj); | ||
| 3059 | + console.log("闭包测试=" + tfx()); | ||
| 3041 | }); | 3060 | }); |
| 3061 | + | ||
| 3062 | + scope[ctrlAs].$$test = function() { | ||
| 3063 | + var exp = "this.a + '(' + this.b + ')'"; | ||
| 3064 | + console.log("exp=" + exp); | ||
| 3065 | + return eval(exp); | ||
| 3066 | + }; | ||
| 3042 | } | 3067 | } |
| 3043 | }; | 3068 | }; |
| 3044 | 3069 | ||
| @@ -3047,3 +3072,386 @@ angular.module('ScheduleApp').directive('saSelect4', [ | @@ -3047,3 +3072,386 @@ angular.module('ScheduleApp').directive('saSelect4', [ | ||
| 3047 | }; | 3072 | }; |
| 3048 | } | 3073 | } |
| 3049 | ]); | 3074 | ]); |
| 3075 | + | ||
| 3076 | +/** | ||
| 3077 | + * saSelect5指令,基于简拼查询的select,内部封装angular-ui-select控件,并嵌入相应的业务逻辑。 | ||
| 3078 | + * name(必须):控件的名字 | ||
| 3079 | + * model(必须):独立作用域,指定一个外部对象模型双向绑定,如:model=ctrl.employeeInfoForSave | ||
| 3080 | + * cmaps(必须):外部对象与指令内部数据对象字段名映射对象字符串,如:{'xl.id' : 'id', 'xl.name' : 'name'} | ||
| 3081 | + * dcname(必须):绑定的model字段名,如:dcname=xl.id | ||
| 3082 | + * icname(必须):内部与之对应的字段名,如:icname=id | ||
| 3083 | + * | ||
| 3084 | + * dsparams(必须):内部数据源查询参数对象,如:{{ {'ttid_eq': ctrl.rerunManageForSave.rerunTtinfo.id} | json }} | ||
| 3085 | + * dsparamsextra(可选):内部数据源查询附加参数对象字符串,如:{'type':'all'} | ||
| 3086 | + * iterobjname(必须):内部数据源迭代的数据变量名,如:iterobjname=item | ||
| 3087 | + * iterobjexp(必须):内部显示用的表达式 | ||
| 3088 | + * searchph(必须):查询输入占位符字符串,如:searchph=请输入... | ||
| 3089 | + * searchexp(必须):查询基于的内部数据源的表达式,如:searchexp=this.name+'('+this.code+')' | ||
| 3090 | + * | ||
| 3091 | + * required(可选):是否需要form的required验证 | ||
| 3092 | + * | ||
| 3093 | + */ | ||
| 3094 | +angular.module('ScheduleApp').directive('saSelect5', [ | ||
| 3095 | + '$timeout', | ||
| 3096 | + '$$SearchInfoService_g', | ||
| 3097 | + function($timeout, $$searchInfoService_g) { | ||
| 3098 | + return { | ||
| 3099 | + restrict: 'E', | ||
| 3100 | + templateUrl: '/pages/scheduleApp/module/common/dts1/select/saSelect5Template.html', | ||
| 3101 | + scope: { // 独立作用域 | ||
| 3102 | + model: "=" // 绑定外部对象 | ||
| 3103 | + }, | ||
| 3104 | + controllerAs: "$saSelectCtrl", | ||
| 3105 | + bindToController: true, | ||
| 3106 | + controller: function($scope) { | ||
| 3107 | + var self = this; | ||
| 3108 | + self.$$data = []; // 内部ui-select显示用数据 | ||
| 3109 | + self.$$data_real = []; // 内部保存的实际数据 | ||
| 3110 | + | ||
| 3111 | + // myselect组件的ng-model,用于外部绑定验证等操作 | ||
| 3112 | + self.$$internalmodel = undefined; | ||
| 3113 | + | ||
| 3114 | + self.$$internal_select_value = undefined; // 选中的值 | ||
| 3115 | + | ||
| 3116 | + }, | ||
| 3117 | + | ||
| 3118 | + /** | ||
| 3119 | + * 此阶段可以改dom结构,此时angular还没扫描指令, | ||
| 3120 | + * 这里就可以动态添加其他angularjs的指令字符串,如required指令字符串。 | ||
| 3121 | + * @param tElem | ||
| 3122 | + * @param tAttrs | ||
| 3123 | + * @returns {{pre: Function, post: Function}} | ||
| 3124 | + */ | ||
| 3125 | + compile: function(tElem, tAttrs) { | ||
| 3126 | + // 获取属性,并验证必须按属性 | ||
| 3127 | + var $name_attr = tAttrs["name"]; // 控件的名字 | ||
| 3128 | + var $cmaps_attr = tAttrs["cmaps"]; // 外部对象与指令内部数据对象字段名映射对象 | ||
| 3129 | + var $dcname_attr = tAttrs["dcname"]; // 绑定的model字段名 | ||
| 3130 | + var $icname_attr = tAttrs["icname"]; // 内部与之对应的字段名 | ||
| 3131 | + | ||
| 3132 | + var $dsparams_attr = tAttrs["dsparams"]; // 内部数据源查询参数对象 | ||
| 3133 | + var $dsparamsextra_attr = tAttrs["dsparamsextra"]; // 内部数据源查询附加参数对象字符串 | ||
| 3134 | + var $iterobjname_attr = tAttrs["iterobjname"]; // 内部数据源迭代的数据变量名 | ||
| 3135 | + var $iterobjexp_attr = tAttrs["iterobjexp"]; // 内部显示用的表达式 | ||
| 3136 | + var $searchph_attr = tAttrs["searchph"]; // 查询输入占位符字符串 | ||
| 3137 | + var $searchexp_attr = tAttrs["searchexp"]; // 查询基于的内部数据源的表达式 | ||
| 3138 | + | ||
| 3139 | + var $required_attr = tAttrs["required"]; // 是否需要required验证 | ||
| 3140 | + | ||
| 3141 | + if (!$name_attr) { | ||
| 3142 | + throw new Error("name属性必须填写"); | ||
| 3143 | + } | ||
| 3144 | + if (!$cmaps_attr) { | ||
| 3145 | + throw new Error("cmaps属性必须填写") | ||
| 3146 | + } | ||
| 3147 | + if (!$dcname_attr || !$icname_attr) { | ||
| 3148 | + throw new Error("dcname、icname属性必须填写"); | ||
| 3149 | + } | ||
| 3150 | + if (!$dsparams_attr) { | ||
| 3151 | + throw new Error("dsparams属性必须填写"); | ||
| 3152 | + } | ||
| 3153 | + if (!$iterobjname_attr) { | ||
| 3154 | + throw new Error("iterobjname属性必须填写"); | ||
| 3155 | + } | ||
| 3156 | + if (!$iterobjexp_attr) { | ||
| 3157 | + throw new Error("iterobjexp属性必须填写"); | ||
| 3158 | + } | ||
| 3159 | + if (!$searchph_attr) { | ||
| 3160 | + throw new Error("searchph属性必须填写"); | ||
| 3161 | + } | ||
| 3162 | + if (!$searchexp_attr) { | ||
| 3163 | + throw new Error("searchexp属性必须填写"); | ||
| 3164 | + } | ||
| 3165 | + | ||
| 3166 | + // 内部controlAs名字 | ||
| 3167 | + var ctrlAs = "$saSelectCtrl"; | ||
| 3168 | + | ||
| 3169 | + // 动态设置dom | ||
| 3170 | + // dom,最外层name属性设置 | ||
| 3171 | + tElem.find("div:first").attr("name", $name_attr); | ||
| 3172 | + // dom,最外层divrequired属性设置 | ||
| 3173 | + if ($required_attr != undefined) { | ||
| 3174 | + tElem.find("div[name=\'" + $name_attr + "\']").attr("required", ""); | ||
| 3175 | + } | ||
| 3176 | + // dom,ui-select-match的placeholder属性设定 | ||
| 3177 | + tElem.find("ui-select-match").attr("placeholder", $searchph_attr); | ||
| 3178 | + // dom,ui-select-match的内容设定 | ||
| 3179 | + var uiSelectMatchHtml = "{{" + ctrlAs + ".$$internal_match_str($select.selected)}}"; | ||
| 3180 | + tElem.find("ui-select-match").html(uiSelectMatchHtml); | ||
| 3181 | + // dom,ui-select-choices的repeat属性设定 | ||
| 3182 | + var uiSelectChoices_repeatAttr = $iterobjname_attr + "." + $icname_attr + " as " + $iterobjname_attr + " in " + ctrlAs + ".$$data"; | ||
| 3183 | + tElem.find("ui-select-choices").attr("repeat", uiSelectChoices_repeatAttr); | ||
| 3184 | + // dom,span ng-bind属性设置,TODO:暂时无法用transclude设置,先用属性设置 | ||
| 3185 | + tElem.find("ui-select-choices").html("{{" + $iterobjexp_attr + "}}"); | ||
| 3186 | + | ||
| 3187 | + return { | ||
| 3188 | + pre: function (scope, element, attr) { | ||
| 3189 | + // TODO: | ||
| 3190 | + }, | ||
| 3191 | + | ||
| 3192 | + /** | ||
| 3193 | + * 相当于link函数。 | ||
| 3194 | + * @param scope | ||
| 3195 | + * @param element | ||
| 3196 | + * @param attr | ||
| 3197 | + */ | ||
| 3198 | + post: function (scope, element, attr) { | ||
| 3199 | + | ||
| 3200 | + // 添加选中事件处理函数 | ||
| 3201 | + scope[ctrlAs].$$internal_select_fn = function($item) { | ||
| 3202 | + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = $item" + "." + $icname_attr + ";"); | ||
| 3203 | + | ||
| 3204 | + eval("var obj=" + $cmaps_attr); | ||
| 3205 | + for (var mc in obj) { // model的字段名:内部数据源对应字段名 | ||
| 3206 | + var ic = obj[mc]; // 内部数据源对应字段 | ||
| 3207 | + eval("scope[ctrlAs].model" + "." + mc + " = $item" + "." + ic + ";"); | ||
| 3208 | + } | ||
| 3209 | + }; | ||
| 3210 | + | ||
| 3211 | + // 删除选中事件处理函数 | ||
| 3212 | + scope[ctrlAs].$$internal_remove_fn = function() { | ||
| 3213 | + eval("scope[ctrlAs].model" + "." + $dcname_attr + " = undefined;"); | ||
| 3214 | + | ||
| 3215 | + eval("var obj=" + $cmaps_attr); | ||
| 3216 | + var mc; // model的字段名 | ||
| 3217 | + for (mc in obj) { | ||
| 3218 | + eval("scope[ctrlAs].model" + "." + mc + " = undefined;"); | ||
| 3219 | + } | ||
| 3220 | + }; | ||
| 3221 | + | ||
| 3222 | + // 刷新数据 | ||
| 3223 | + scope[ctrlAs].$$internal_refresh_fn = function(search) { | ||
| 3224 | + if (search && search != "") { // 有search值 | ||
| 3225 | + // 处理search | ||
| 3226 | + console.log("search:" + search); | ||
| 3227 | + | ||
| 3228 | + scope[ctrlAs].$$data = []; | ||
| 3229 | + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { | ||
| 3230 | + var upTerm = search.toUpperCase(); | ||
| 3231 | + if (scope[ctrlAs].$$data.length < 10) { | ||
| 3232 | + if (scope[ctrlAs].$$data_real[k].$fullChars.indexOf(upTerm) != -1 | ||
| 3233 | + || scope[ctrlAs].$$data_real[k].$camelChars.indexOf(upTerm) != -1 | ||
| 3234 | + || scope[ctrlAs].$$data_real[k].$calcu_str.indexOf(upTerm) != -1) { | ||
| 3235 | + scope[ctrlAs].$$data.push(angular.copy(scope[ctrlAs].$$data_real[k])); | ||
| 3236 | + } | ||
| 3237 | + } else { | ||
| 3238 | + break; | ||
| 3239 | + } | ||
| 3240 | + } | ||
| 3241 | + } | ||
| 3242 | + }; | ||
| 3243 | + | ||
| 3244 | + /** | ||
| 3245 | + * 验证内部数据,更新外部model | ||
| 3246 | + */ | ||
| 3247 | + scope[ctrlAs].$$internal_validate_model = function() { | ||
| 3248 | + if (scope[ctrlAs].$$internal_select_value) { | ||
| 3249 | + var select_value_temp = scope[ctrlAs].$$internal_select_value; | ||
| 3250 | + if (scope[ctrlAs].$$data_real && scope[ctrlAs].$$data_real.length > 0) { | ||
| 3251 | + var obj; | ||
| 3252 | + for (var j = 0; j < scope[ctrlAs].$$data_real.length; j++) { | ||
| 3253 | + if (eval("scope[ctrlAs].$$data_real[j]" + "." + $icname_attr + " == select_value_temp")) { | ||
| 3254 | + obj = angular.copy(scope[ctrlAs].$$data_real[j]); | ||
| 3255 | + break; | ||
| 3256 | + } | ||
| 3257 | + } | ||
| 3258 | + if (obj) { // 在data中判定有没有 | ||
| 3259 | + for (var k = 0; k < scope[ctrlAs].$$data.length; k++) { | ||
| 3260 | + if (eval("scope[ctrlAs].$$data[k]" + "." + $icname_attr + " == obj." + $icname_attr)) { | ||
| 3261 | + obj = undefined; | ||
| 3262 | + break; | ||
| 3263 | + } | ||
| 3264 | + } | ||
| 3265 | + if (obj) { | ||
| 3266 | + scope[ctrlAs].$$data.push(obj); | ||
| 3267 | + } | ||
| 3268 | + // 更新内部model,用于外部验证 | ||
| 3269 | + // 内部model的值暂时随意,以后再改 | ||
| 3270 | + scope[ctrlAs].$$internalmodel = {desc: "ok"}; | ||
| 3271 | + } else { | ||
| 3272 | + scope[ctrlAs].$$internalmodel = undefined; | ||
| 3273 | + } | ||
| 3274 | + | ||
| 3275 | + } else { | ||
| 3276 | + scope[ctrlAs].$$internalmodel = undefined; | ||
| 3277 | + } | ||
| 3278 | + | ||
| 3279 | + } else { | ||
| 3280 | + scope[ctrlAs].$$internalmodel = undefined; | ||
| 3281 | + } | ||
| 3282 | + }; | ||
| 3283 | + | ||
| 3284 | + /** | ||
| 3285 | + * 内部match表达式转换函数,需要外部绑定此函数的上下文。 | ||
| 3286 | + * @param context function上下文 | ||
| 3287 | + */ | ||
| 3288 | + scope[ctrlAs].$$internal_match_str = function (context) { | ||
| 3289 | + var fx = function() { | ||
| 3290 | + try { | ||
| 3291 | + return eval($searchexp_attr); | ||
| 3292 | + } catch (err) { | ||
| 3293 | + //console.log(err); | ||
| 3294 | + return undefined; | ||
| 3295 | + } | ||
| 3296 | + | ||
| 3297 | + }; | ||
| 3298 | + | ||
| 3299 | + var str = fx.bind(context)(); | ||
| 3300 | + if (str && str != "") | ||
| 3301 | + return str; | ||
| 3302 | + else | ||
| 3303 | + return undefined; | ||
| 3304 | + }; | ||
| 3305 | + | ||
| 3306 | + /** | ||
| 3307 | + * 内部方法,读取字典数据作为数据源。 | ||
| 3308 | + * @param atype ajax查询类型 | ||
| 3309 | + * @param ajaxparamobj 查询参数对象 | ||
| 3310 | + */ | ||
| 3311 | + scope[ctrlAs].$$internal_ajax_data = function(atype, ajaxparamobj) { | ||
| 3312 | + // 如果ajaxparamobj为空对象,则表示清空内部选项 | ||
| 3313 | + var isEmptyObj = true; | ||
| 3314 | + for (var name in ajaxparamobj) { | ||
| 3315 | + isEmptyObj = false; | ||
| 3316 | + } | ||
| 3317 | + if (isEmptyObj) { | ||
| 3318 | + // 重新创建内部保存的数据 | ||
| 3319 | + scope[ctrlAs].$$data_real = []; | ||
| 3320 | + // 重新创建内部ui-select显示用数据,默认取10条记录显示 | ||
| 3321 | + scope[ctrlAs].$$data = []; | ||
| 3322 | + | ||
| 3323 | + scope[ctrlAs].$$internal_remove_fn(); | ||
| 3324 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 3325 | + | ||
| 3326 | + return; | ||
| 3327 | + } | ||
| 3328 | + | ||
| 3329 | + if ($dsparamsextra_attr) { // 合并附加参数 | ||
| 3330 | + eval("var extra = " + $dsparamsextra_attr); | ||
| 3331 | + for (var extrakey in extra) { | ||
| 3332 | + ajaxparamobj[extrakey] = extra[extrakey]; | ||
| 3333 | + } | ||
| 3334 | + } | ||
| 3335 | + | ||
| 3336 | + $$searchInfoService_g[atype].list( | ||
| 3337 | + ajaxparamobj, | ||
| 3338 | + function(result) { | ||
| 3339 | + console.log("$$internal_ajax_data result"); | ||
| 3340 | + | ||
| 3341 | + // 重新创建内部保存的数据 | ||
| 3342 | + scope[ctrlAs].$$data_real = []; | ||
| 3343 | + // result中添加拼音数据,注意:这里要求result返回对象数组 | ||
| 3344 | + for (var i = 0; i < result.length; i++) { | ||
| 3345 | + // 闭包绑定返回最终查询的值 | ||
| 3346 | + var calcu_str = scope[ctrlAs].$$internal_match_str(result[i]); | ||
| 3347 | + if (calcu_str) { | ||
| 3348 | + // 全拼 | ||
| 3349 | + result[i]["$fullChars"] = pinyin.getFullChars(calcu_str); | ||
| 3350 | + // 简拼 | ||
| 3351 | + result[i]["$camelChars"] = pinyin.getCamelChars(calcu_str); | ||
| 3352 | + // 原值 | ||
| 3353 | + result[i]["$calcu_str"] = calcu_str; | ||
| 3354 | + | ||
| 3355 | + scope[ctrlAs].$$data_real.push(result[i]); | ||
| 3356 | + } | ||
| 3357 | + } | ||
| 3358 | + | ||
| 3359 | + // 重新创建内部ui-select显示用数据,默认取10条记录显示 | ||
| 3360 | + scope[ctrlAs].$$data = []; | ||
| 3361 | + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { | ||
| 3362 | + if (scope[ctrlAs].$$data.length < 10) { | ||
| 3363 | + scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]); | ||
| 3364 | + } else { | ||
| 3365 | + break; | ||
| 3366 | + } | ||
| 3367 | + } | ||
| 3368 | + | ||
| 3369 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 3370 | + }, | ||
| 3371 | + function(result) { | ||
| 3372 | + throw new Error("ajax查询出错"); | ||
| 3373 | + } | ||
| 3374 | + ); | ||
| 3375 | + }; | ||
| 3376 | + | ||
| 3377 | + /** | ||
| 3378 | + * 内部方法,读取字典数据作为数据源。 | ||
| 3379 | + * @param dictype 字典类型,如:gsType | ||
| 3380 | + */ | ||
| 3381 | + scope[ctrlAs].$$internal_dic_data = function(dictype) { | ||
| 3382 | + if (!dictionaryUtils.getByGroup(dictype)) { | ||
| 3383 | + throw new error("字典数据不窜在=" + dictype); | ||
| 3384 | + } | ||
| 3385 | + | ||
| 3386 | + // 重新创建内部保存的数据 | ||
| 3387 | + scope[ctrlAs].$$data_real = []; | ||
| 3388 | + var origin_dicgroup = dictionaryUtils.getByGroup(dicgroup); | ||
| 3389 | + var dic_key; // 字典key | ||
| 3390 | + | ||
| 3391 | + for (dic_key in origin_dicgroup) { | ||
| 3392 | + var data = {}; // 重新组合的字典元素对象 | ||
| 3393 | + if (dic_key == "true") | ||
| 3394 | + data[$icname_attr] = true; | ||
| 3395 | + else | ||
| 3396 | + data[$icname_attr] = dic_key; | ||
| 3397 | + data[$dscol_attr] = origin_dicgroup[dic_key]; | ||
| 3398 | + scope[ctrlAs].$$data_real.push(data); | ||
| 3399 | + } | ||
| 3400 | + | ||
| 3401 | + // 重新创建内部ui-select显示用数据,直接复制所有的字典数据 | ||
| 3402 | + scope[ctrlAs].$$data = []; | ||
| 3403 | + for (var k = 0; k < scope[ctrlAs].$$data_real.length; k++) { | ||
| 3404 | + scope[ctrlAs].$$data.push(scope[ctrlAs].$$data_real[k]); | ||
| 3405 | + } | ||
| 3406 | + | ||
| 3407 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 3408 | + }; | ||
| 3409 | + | ||
| 3410 | + /** | ||
| 3411 | + * 监控dsparams属性变化 | ||
| 3412 | + */ | ||
| 3413 | + attr.$observe("dsparams", function(value) { | ||
| 3414 | + if (value && value != "") { | ||
| 3415 | + var obj = JSON.parse(value); | ||
| 3416 | + console.log("saSelect5 监控到dsparams属性变化,old=" + $dsparams_attr + ",new=" + value); | ||
| 3417 | + | ||
| 3418 | + // dsparams格式如下: | ||
| 3419 | + // {type: 'dic/ajax', param: 'dic名字'/'ajax查询参数对象', atype: 'ajax查询类型'} | ||
| 3420 | + | ||
| 3421 | + if (obj.type == 'dic') { | ||
| 3422 | + scope[ctrlAs].$$internal_dic_data(obj.param); | ||
| 3423 | + | ||
| 3424 | + } else if (obj.type == 'ajax') { | ||
| 3425 | + scope[ctrlAs].$$internal_ajax_data(obj.atype, obj.param); | ||
| 3426 | + } else { | ||
| 3427 | + throw new Error("dsparams参数格式异常=" + obj); | ||
| 3428 | + } | ||
| 3429 | + | ||
| 3430 | + } | ||
| 3431 | + }); | ||
| 3432 | + | ||
| 3433 | + /** | ||
| 3434 | + * 监控外部模型dcname的值的变化。 | ||
| 3435 | + */ | ||
| 3436 | + scope.$watch( | ||
| 3437 | + function() { | ||
| 3438 | + return eval("scope." + ctrlAs + ".model" + "." + $dcname_attr); | ||
| 3439 | + }, | ||
| 3440 | + function(newValue, oldValue) { | ||
| 3441 | + if (newValue === undefined && oldValue === undefined) { | ||
| 3442 | + // 两侧都是undefined,不处理 | ||
| 3443 | + | ||
| 3444 | + } else { | ||
| 3445 | + console.log("saSelect5 监控到外部模型" + $dcname_attr + "属性值变化,old=" + oldValue + ",new=" + newValue); | ||
| 3446 | + scope[ctrlAs].$$internal_select_value = newValue; | ||
| 3447 | + scope[ctrlAs].$$internal_validate_model(); | ||
| 3448 | + } | ||
| 3449 | + }, | ||
| 3450 | + true | ||
| 3451 | + ); | ||
| 3452 | + } | ||
| 3453 | + }; | ||
| 3454 | + } | ||
| 3455 | + }; | ||
| 3456 | + } | ||
| 3457 | +]); | ||
| 3050 | \ No newline at end of file | 3458 | \ No newline at end of file |
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/edit.html
| 1 | <div class="page-head"> | 1 | <div class="page-head"> |
| 2 | <div class="page-title"> | 2 | <div class="page-title"> |
| 3 | - <h1>排班规则管理</h1> | 3 | + <h1>套跑管理</h1> |
| 4 | </div> | 4 | </div> |
| 5 | </div> | 5 | </div> |
| 6 | 6 | ||
| @@ -14,15 +14,15 @@ | @@ -14,15 +14,15 @@ | ||
| 14 | <i class="fa fa-circle"></i> | 14 | <i class="fa fa-circle"></i> |
| 15 | </li> | 15 | </li> |
| 16 | <li> | 16 | <li> |
| 17 | - <a ui-sref="scheduleRuleManage">排班规则管理</a> | 17 | + <a ui-sref="rerunManage">套跑管理</a> |
| 18 | <i class="fa fa-circle"></i> | 18 | <i class="fa fa-circle"></i> |
| 19 | </li> | 19 | </li> |
| 20 | <li> | 20 | <li> |
| 21 | - <span class="active">修改排班规则信息</span> | 21 | + <span class="active">修改套跑信息</span> |
| 22 | </li> | 22 | </li> |
| 23 | </ul> | 23 | </ul> |
| 24 | 24 | ||
| 25 | -<div class="portlet light bordered" ng-controller="ScheduleRuleManageFormCtrl as ctrl"> | 25 | +<div class="portlet light bordered" ng-controller="RerunManageFormCtrl as ctrl"> |
| 26 | <div class="portlet-title"> | 26 | <div class="portlet-title"> |
| 27 | <div class="caption"> | 27 | <div class="caption"> |
| 28 | <i class="icon-equalizer font-red-sunglo"></i> <span | 28 | <i class="icon-equalizer font-red-sunglo"></i> <span |
| @@ -43,130 +43,193 @@ | @@ -43,130 +43,193 @@ | ||
| 43 | <div class="form-group has-success has-feedback"> | 43 | <div class="form-group has-success has-feedback"> |
| 44 | <label class="col-md-2 control-label">线路*:</label> | 44 | <label class="col-md-2 control-label">线路*:</label> |
| 45 | <div class="col-md-3"> | 45 | <div class="col-md-3"> |
| 46 | - <sa-Select3 model="ctrl.scheduleRuleManageForSave" | ||
| 47 | - name="xl" | ||
| 48 | - placeholder="请输拼音..." | ||
| 49 | - dcvalue="{{ctrl.scheduleRuleManageForSave.xl.id}}" | ||
| 50 | - dcname="xl.id" | 46 | + <sa-Select5 name="rerunXl" |
| 47 | + model="ctrl.rerunManageForSave" | ||
| 48 | + cmaps="{'rerunXl.id' : 'id'}" | ||
| 49 | + dcname="rerunXl.id" | ||
| 51 | icname="id" | 50 | icname="id" |
| 52 | - icnames="name" | ||
| 53 | - datatype="xl" | ||
| 54 | - mlp="true" | 51 | + dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}" |
| 52 | + iterobjname="item" | ||
| 53 | + iterobjexp="item.name" | ||
| 54 | + searchph="请输拼音..." | ||
| 55 | + searchexp="this.name" | ||
| 55 | required > | 56 | required > |
| 56 | - </sa-Select3> | 57 | + </sa-Select5> |
| 57 | </div> | 58 | </div> |
| 58 | <!-- 隐藏块,显示验证信息 --> | 59 | <!-- 隐藏块,显示验证信息 --> |
| 59 | - <div class="alert alert-danger well-sm" ng-show="myForm.xl.$error.required"> | 60 | + <div class="alert alert-danger well-sm" ng-show="myForm.rerunXl.$error.required"> |
| 60 | 线路必须选择 | 61 | 线路必须选择 |
| 61 | </div> | 62 | </div> |
| 62 | </div> | 63 | </div> |
| 63 | <div class="form-group has-success has-feedback"> | 64 | <div class="form-group has-success has-feedback"> |
| 64 | - <label class="col-md-2 control-label">车辆配置*:</label> | 65 | + <label class="col-md-2 control-label">时刻表*:</label> |
| 65 | <div class="col-md-3"> | 66 | <div class="col-md-3"> |
| 66 | - <sa-Select3 model="ctrl.scheduleRuleManageForSave" | ||
| 67 | - name="cl" | ||
| 68 | - placeholder="请输拼音..." | ||
| 69 | - dcvalue="{{ctrl.scheduleRuleManageForSave.carConfigInfo.id}}" | ||
| 70 | - dcname="carConfigInfo.id" | 67 | + <sa-Select5 name="rerunTtinfo" |
| 68 | + model="ctrl.rerunManageForSave" | ||
| 69 | + cmaps="{'rerunTtinfo.id' : 'id'}" | ||
| 70 | + dcname="rerunTtinfo.id" | ||
| 71 | icname="id" | 71 | icname="id" |
| 72 | - icnames="cl.insideCode" | ||
| 73 | - datatype="cci2" | ||
| 74 | - dataassociate="true" | ||
| 75 | - dataparam="{{ {'xl.id_eq': ctrl.scheduleRuleManageForSave.xl.id} | json }}" | ||
| 76 | - mlp="true" | 72 | + dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id}, atype:'ttInfo' } | json }}" |
| 73 | + dsparamsextra="{'type':'all'}" | ||
| 74 | + iterobjname="item" | ||
| 75 | + iterobjexp="item.name + '-' + item.xl.name" | ||
| 76 | + searchph="请输拼音..." | ||
| 77 | + searchexp="this.name + '-' + this.xl.name" | ||
| 77 | required > | 78 | required > |
| 78 | - </sa-Select3> | 79 | + </sa-Select5> |
| 79 | </div> | 80 | </div> |
| 80 | <!-- 隐藏块,显示验证信息 --> | 81 | <!-- 隐藏块,显示验证信息 --> |
| 81 | - <div class="alert alert-danger well-sm" ng-show="myForm.cl.$error.required"> | ||
| 82 | - 车辆必须选择 | 82 | + <div class="alert alert-danger well-sm" ng-show="myForm.rerunTtinfo.$error.required"> |
| 83 | + 先选择线路,再选择时刻表 | ||
| 83 | </div> | 84 | </div> |
| 84 | </div> | 85 | </div> |
| 85 | - | ||
| 86 | <div class="form-group has-success has-feedback"> | 86 | <div class="form-group has-success has-feedback"> |
| 87 | - <label class="col-md-2 control-label">启用日期*:</label> | 87 | + <label class="col-md-2 control-label">路牌*:</label> |
| 88 | <div class="col-md-3"> | 88 | <div class="col-md-3"> |
| 89 | - <div class="input-group"> | ||
| 90 | - <input type="text" class="form-control" | ||
| 91 | - name="qyrq" placeholder="请选择启用日期..." | ||
| 92 | - uib-datepicker-popup="yyyy年MM月dd日" | ||
| 93 | - is-open="ctrl.qyrqOpen" required | ||
| 94 | - ng-model="ctrl.scheduleRuleManageForSave.qyrq" readonly/> | ||
| 95 | - <span class="input-group-btn"> | ||
| 96 | - <button type="button" class="btn btn-default" ng-click="ctrl.qyrq_open()"> | ||
| 97 | - <i class="glyphicon glyphicon-calendar"></i> | ||
| 98 | - </button> | ||
| 99 | - </span> | ||
| 100 | - </div> | 89 | + <sa-Select5 name="rerunLp" |
| 90 | + model="ctrl.rerunManageForSave" | ||
| 91 | + cmaps="{'rerunLp.id' : 'lpId'}" | ||
| 92 | + dcname="rerunLp.id" | ||
| 93 | + icname="lpId" | ||
| 94 | + dsparams="{{ {type: 'ajax', param:{'ttid': ctrl.rerunManageForSave.rerunTtinfo.id}, atype:'lpInfo' } | json }}" | ||
| 95 | + iterobjname="item" | ||
| 96 | + iterobjexp="'路牌'+ item.lpName" | ||
| 97 | + searchph="请输拼音..." | ||
| 98 | + searchexp="'路牌' + this.lpName" | ||
| 99 | + required > | ||
| 100 | + </sa-Select5> | ||
| 101 | </div> | 101 | </div> |
| 102 | <!-- 隐藏块,显示验证信息 --> | 102 | <!-- 隐藏块,显示验证信息 --> |
| 103 | - <div class="alert alert-danger well-sm" ng-show="myForm.qyrq.$error.required"> | ||
| 104 | - 启用日期必须选择 | 103 | + <div class="alert alert-danger well-sm" ng-show="myForm.rerunLp.$error.required"> |
| 104 | + 先选择时刻表,再选择路牌 | ||
| 105 | </div> | 105 | </div> |
| 106 | </div> | 106 | </div> |
| 107 | 107 | ||
| 108 | <div class="form-group has-success has-feedback"> | 108 | <div class="form-group has-success has-feedback"> |
| 109 | - <label class="col-md-2 control-label">路牌范围*:</label> | 109 | + <label class="col-md-2 control-label">套跑班次*:</label> |
| 110 | <div class="col-md-6"> | 110 | <div class="col-md-6"> |
| 111 | - <sa-Guideboardgroup model="ctrl.scheduleRuleManageForSave" | ||
| 112 | - name="lprange" | ||
| 113 | - xlidvalue="{{ctrl.scheduleRuleManageForSave.xl.id}}" | ||
| 114 | - lprangevalue="{{ctrl.scheduleRuleManageForSave.lpNames}}" | ||
| 115 | - lprangename="lpNames" | ||
| 116 | - lpidrangevalue="{{ctrl.scheduleRuleManageForSave.lpIds}}" | ||
| 117 | - lpidrangename="lpIds" | ||
| 118 | - lpstartvalue="{{ctrl.scheduleRuleManageForSave.lpStart}}" | ||
| 119 | - lpstartname="lpStart" | ||
| 120 | - required | ||
| 121 | - > | ||
| 122 | - </sa-Guideboardgroup> | ||
| 123 | - </div> | ||
| 124 | - <div class="alert alert-danger well-sm" ng-show="myForm.lprange.$error.required"> | ||
| 125 | - 路牌范围,起始路牌必须选择 | 111 | + <sa-Bcgroup model="ctrl.rerunManageForSave" |
| 112 | + name="rerunTtinfodetailIds" | ||
| 113 | + dataparams="{{ {'xlId': ctrl.rerunManageForSave.rerunXl.id, 'ttinfoId' : ctrl.rerunManageForSave.rerunTtinfo.id, 'lpId' : ctrl.rerunManageForSave.rerunLp.id} | json }}" | ||
| 114 | + bcttinfoidsvalue="{{ctrl.rerunManageForSave.rerunTtinfodetailIds}}" | ||
| 115 | + bcttinfoidsname="rerunTtinfodetailIds" | ||
| 116 | + required > | ||
| 117 | + </sa-Bcgroup> | ||
| 118 | + </div> | ||
| 119 | + <div class="alert alert-danger well-sm" ng-show="myForm.rerunTtinfodetailIds.$error.required"> | ||
| 120 | + 套跑班次必须选择 | ||
| 126 | </div> | 121 | </div> |
| 127 | </div> | 122 | </div> |
| 128 | 123 | ||
| 129 | <div class="form-group has-success has-feedback"> | 124 | <div class="form-group has-success has-feedback"> |
| 130 | - <label class="col-md-2 control-label">人员范围*:</label> | ||
| 131 | - <div class="col-md-6"> | ||
| 132 | - <sa-Employeegroup model="ctrl.scheduleRuleManageForSave" | ||
| 133 | - name="ryrange" | ||
| 134 | - xlidvalue="{{ctrl.scheduleRuleManageForSave.xl.id}}" | ||
| 135 | - dbbmrangevalue="{{ctrl.scheduleRuleManageForSave.ryDbbms}}" | ||
| 136 | - dbbmrangename="ryDbbms" | ||
| 137 | - rycidrangevalue="{{ctrl.scheduleRuleManageForSave.ryConfigIds}}" | ||
| 138 | - rycidrangename="ryConfigIds" | ||
| 139 | - rystartvalue="{{ctrl.scheduleRuleManageForSave.ryStart}}" | ||
| 140 | - rystartname="ryStart" | ||
| 141 | - required | ||
| 142 | - > | ||
| 143 | - </sa-Employeegroup> | ||
| 144 | - </div> | ||
| 145 | - <div class="alert alert-danger well-sm" ng-show="myForm.ryrange.$error.required"> | ||
| 146 | - 人员范围,起始人员必须选择 | 125 | + <label class="col-md-2 control-label">套跑类型*:</label> |
| 126 | + <div class="col-md-3"> | ||
| 127 | + <sa-Radiogroup model="ctrl.rerunManageForSave.rerunType" dicgroup="rerunType" name="rerunType"></sa-Radiogroup> | ||
| 128 | + </div> | ||
| 129 | + </div> | ||
| 130 | + | ||
| 131 | + <div class="form-group has-success has-feedback" | ||
| 132 | + ng-if="ctrl.rerunManageForSave.rerunType == 'dylp'"> | ||
| 133 | + <label class="col-md-2 control-label">线路2*:</label> | ||
| 134 | + <div class="col-md-3"> | ||
| 135 | + <sa-Select5 name="useXl" | ||
| 136 | + model="ctrl.rerunManageForSave" | ||
| 137 | + cmaps="{'useXl.id' : 'id'}" | ||
| 138 | + dcname="useXl.id" | ||
| 139 | + icname="id" | ||
| 140 | + dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}" | ||
| 141 | + iterobjname="item" | ||
| 142 | + iterobjexp="item.name" | ||
| 143 | + searchph="请输拼音..." | ||
| 144 | + searchexp="this.name" | ||
| 145 | + required > | ||
| 146 | + </sa-Select5> | ||
| 147 | + </div> | ||
| 148 | + <!-- 隐藏块,显示验证信息 --> | ||
| 149 | + <div class="alert alert-danger well-sm" ng-show="myForm.useXl.$error.required"> | ||
| 150 | + 线路2必须选择 | ||
| 151 | + </div> | ||
| 152 | + </div> | ||
| 153 | + <div class="form-group has-success has-feedback" | ||
| 154 | + ng-if="ctrl.rerunManageForSave.rerunType == 'dylp'"> | ||
| 155 | + <label class="col-md-2 control-label">路牌*:</label> | ||
| 156 | + <div class="col-md-3"> | ||
| 157 | + <sa-Select5 name="useLp" | ||
| 158 | + model="ctrl.rerunManageForSave" | ||
| 159 | + cmaps="{'useLp.id' : 'id'}" | ||
| 160 | + dcname="useLp.id" | ||
| 161 | + icname="id" | ||
| 162 | + dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.useXl.id}, atype:'lpInfo2' } | json }}" | ||
| 163 | + dsparamsextra="{'type':'all'}" | ||
| 164 | + iterobjname="item" | ||
| 165 | + iterobjexp="'路牌' + item.lpName" | ||
| 166 | + searchph="请输拼音..." | ||
| 167 | + searchexp="'路牌' + this.lpName" | ||
| 168 | + required > | ||
| 169 | + </sa-Select5> | ||
| 170 | + </div> | ||
| 171 | + <!-- 隐藏块,显示验证信息 --> | ||
| 172 | + <div class="alert alert-danger well-sm" ng-show="myForm.useLp.$error.required"> | ||
| 173 | + 先选择线路2,再选择路牌2 | ||
| 147 | </div> | 174 | </div> |
| 148 | </div> | 175 | </div> |
| 149 | 176 | ||
| 150 | - <!--<div class="form-group">--> | ||
| 151 | - <!--<label class="col-md-2 control-label">翻班格式:</label>--> | ||
| 152 | - <!--<div class="col-md-4">--> | ||
| 153 | - <!--<input type="text" class="form-control" name="fbgs" ng-model="ctrl.scheduleRuleManageForSave.fbgs"--> | ||
| 154 | - <!--placeholder="车辆翻班格式"/>--> | ||
| 155 | - <!--</div>--> | ||
| 156 | - <!--</div>--> | ||
| 157 | 177 | ||
| 178 | + <div class="form-group has-success has-feedback" ng-if="ctrl.rerunManageForSave.rerunType == 'dybc'"> | ||
| 179 | + <label class="col-md-2 control-label">车辆配置*:</label> | ||
| 180 | + <div class="col-md-3"> | ||
| 181 | + <sa-Select5 name="useCarConfig" | ||
| 182 | + model="ctrl.rerunManageForSave" | ||
| 183 | + cmaps="{'useCarConfig.id' : 'id'}" | ||
| 184 | + dcname="useCarConfig.id" | ||
| 185 | + icname="id" | ||
| 186 | + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'cci2' } | json }}" | ||
| 187 | + iterobjname="item" | ||
| 188 | + iterobjexp="item.cl.insideCode + '-' + item.xl.name" | ||
| 189 | + searchph="请输拼音..." | ||
| 190 | + searchexp="this.cl.insideCode + '-' + this.xl.name" | ||
| 191 | + required > | ||
| 192 | + </sa-Select5> | ||
| 193 | + </div> | ||
| 194 | + <!-- 隐藏块,显示验证信息 --> | ||
| 195 | + <div class="alert alert-danger well-sm" ng-show="myForm.useCarConfig.$error.required"> | ||
| 196 | + 车辆必须选择(车辆配置中的车辆) | ||
| 197 | + </div> | ||
| 198 | + </div> | ||
| 158 | 199 | ||
| 159 | - <!-- 其他form-group --> | 200 | + <div class="form-group has-success has-feedback" ng-if="ctrl.rerunManageForSave.rerunType == 'dybc'"> |
| 201 | + <label class="col-md-2 control-label">人员配置*:</label> | ||
| 202 | + <div class="col-md-5"> | ||
| 203 | + <sa-Select5 name="useEmployeeConfig" | ||
| 204 | + model="ctrl.rerunManageForSave" | ||
| 205 | + cmaps="{'useEmployeeConfig.id' : 'id'}" | ||
| 206 | + dcname="useEmployeeConfig.id" | ||
| 207 | + icname="id" | ||
| 208 | + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'eci3' } | json }}" | ||
| 209 | + iterobjname="item" | ||
| 210 | + iterobjexp="item.xl.name + '---' + '驾:' + item.jsy.personnelName + '<' + item.jsy.jobCode + '>' + ' ' + (item.spy == null ? ' ' : ('售:' + item.spy.personnelName + '<' + item.spy.jobCode + '>'))" | ||
| 211 | + searchph="请输拼音..." | ||
| 212 | + searchexp="this.xl.name + '---' + '驾:' + this.jsy.personnelName + '<' + this.jsy.jobCode + '>' + ' ' + (this.spy == null ? ' ' : ('售:' + this.spy.personnelName + '<' + this.spy.jobCode + '>'))" | ||
| 213 | + required > | ||
| 214 | + </sa-Select5> | ||
| 215 | + </div> | ||
| 216 | + <!-- 隐藏块,显示验证信息 --> | ||
| 217 | + <div class="alert alert-danger well-sm" ng-show="myForm.useCarConfig.$error.required"> | ||
| 218 | + 人员配置必须选择(线路下的驾驶员和售票员配置) | ||
| 219 | + </div> | ||
| 220 | + </div> | ||
| 160 | 221 | ||
| 161 | </div> | 222 | </div> |
| 162 | 223 | ||
| 163 | - <!-- TODO:!myForm.$valid 在这里有点问题,改用以下方法验证 --> | ||
| 164 | <div class="form-actions"> | 224 | <div class="form-actions"> |
| 165 | <div class="row"> | 225 | <div class="row"> |
| 166 | <div class="col-md-offset-3 col-md-4"> | 226 | <div class="col-md-offset-3 col-md-4"> |
| 167 | <button type="submit" class="btn green" | 227 | <button type="submit" class="btn green" |
| 168 | - ng-disabled="!myForm.$valid"><i class="fa fa-check"></i> 提交</button> | ||
| 169 | - <a type="button" class="btn default" ui-sref="scheduleRuleManage" ><i class="fa fa-times"></i> 取消</a> | 228 | + |
| 229 | + ng-disabled="!myForm.$valid" | ||
| 230 | + | ||
| 231 | + ><i class="fa fa-check"></i> 提交</button> | ||
| 232 | + <a type="button" class="btn default" ui-sref="rerunManage" ><i class="fa fa-times"></i> 取消</a> | ||
| 170 | </div> | 233 | </div> |
| 171 | </div> | 234 | </div> |
| 172 | </div> | 235 | </div> |
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/form.html
| @@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
| 14 | <i class="fa fa-circle"></i> | 14 | <i class="fa fa-circle"></i> |
| 15 | </li> | 15 | </li> |
| 16 | <li> | 16 | <li> |
| 17 | - <a ui-sref="scheduleRuleManage">套跑管理</a> | 17 | + <a ui-sref="rerunManage">套跑管理</a> |
| 18 | <i class="fa fa-circle"></i> | 18 | <i class="fa fa-circle"></i> |
| 19 | </li> | 19 | </li> |
| 20 | <li> | 20 | <li> |
| @@ -43,17 +43,18 @@ | @@ -43,17 +43,18 @@ | ||
| 43 | <div class="form-group has-success has-feedback"> | 43 | <div class="form-group has-success has-feedback"> |
| 44 | <label class="col-md-2 control-label">线路*:</label> | 44 | <label class="col-md-2 control-label">线路*:</label> |
| 45 | <div class="col-md-3"> | 45 | <div class="col-md-3"> |
| 46 | - <sa-Select3 model="ctrl.rerunManageForSave" | ||
| 47 | - name="rerunXl" | ||
| 48 | - placeholder="请输拼音..." | ||
| 49 | - dcvalue="{{ctrl.rerunManageForSave.rerunXl.id}}" | 46 | + <sa-Select5 name="rerunXl" |
| 47 | + model="ctrl.rerunManageForSave" | ||
| 48 | + cmaps="{'rerunXl.id' : 'id'}" | ||
| 50 | dcname="rerunXl.id" | 49 | dcname="rerunXl.id" |
| 51 | icname="id" | 50 | icname="id" |
| 52 | - icnames="name" | ||
| 53 | - datatype="xl" | ||
| 54 | - mlp="true" | 51 | + dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}" |
| 52 | + iterobjname="item" | ||
| 53 | + iterobjexp="item.name" | ||
| 54 | + searchph="请输拼音..." | ||
| 55 | + searchexp="this.name" | ||
| 55 | required > | 56 | required > |
| 56 | - </sa-Select3> | 57 | + </sa-Select5> |
| 57 | </div> | 58 | </div> |
| 58 | <!-- 隐藏块,显示验证信息 --> | 59 | <!-- 隐藏块,显示验证信息 --> |
| 59 | <div class="alert alert-danger well-sm" ng-show="myForm.rerunXl.$error.required"> | 60 | <div class="alert alert-danger well-sm" ng-show="myForm.rerunXl.$error.required"> |
| @@ -63,19 +64,19 @@ | @@ -63,19 +64,19 @@ | ||
| 63 | <div class="form-group has-success has-feedback"> | 64 | <div class="form-group has-success has-feedback"> |
| 64 | <label class="col-md-2 control-label">时刻表*:</label> | 65 | <label class="col-md-2 control-label">时刻表*:</label> |
| 65 | <div class="col-md-3"> | 66 | <div class="col-md-3"> |
| 66 | - <sa-Select3 model="ctrl.rerunManageForSave" | ||
| 67 | - name="rerunTtinfo" | ||
| 68 | - placeholder="请输拼音..." | ||
| 69 | - dcvalue="{{ctrl.rerunManageForSave.rerunTtinfo.id}}" | 67 | + <sa-Select5 name="rerunTtinfo" |
| 68 | + model="ctrl.rerunManageForSave" | ||
| 69 | + cmaps="{'rerunTtinfo.id' : 'id'}" | ||
| 70 | dcname="rerunTtinfo.id" | 70 | dcname="rerunTtinfo.id" |
| 71 | icname="id" | 71 | icname="id" |
| 72 | - icnames="name" | ||
| 73 | - datatype="ttInfo" | ||
| 74 | - dataassociate="true" | ||
| 75 | - dataparam="{{ {'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id} | json }}" | ||
| 76 | - mlp="true" | 72 | + dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.rerunXl.id}, atype:'ttInfo' } | json }}" |
| 73 | + dsparamsextra="{'type':'all'}" | ||
| 74 | + iterobjname="item" | ||
| 75 | + iterobjexp="item.name + '-' + item.xl.name" | ||
| 76 | + searchph="请输拼音..." | ||
| 77 | + searchexp="this.name + '-' + this.xl.name" | ||
| 77 | required > | 78 | required > |
| 78 | - </sa-Select3> | 79 | + </sa-Select5> |
| 79 | </div> | 80 | </div> |
| 80 | <!-- 隐藏块,显示验证信息 --> | 81 | <!-- 隐藏块,显示验证信息 --> |
| 81 | <div class="alert alert-danger well-sm" ng-show="myForm.rerunTtinfo.$error.required"> | 82 | <div class="alert alert-danger well-sm" ng-show="myForm.rerunTtinfo.$error.required"> |
| @@ -85,19 +86,18 @@ | @@ -85,19 +86,18 @@ | ||
| 85 | <div class="form-group has-success has-feedback"> | 86 | <div class="form-group has-success has-feedback"> |
| 86 | <label class="col-md-2 control-label">路牌*:</label> | 87 | <label class="col-md-2 control-label">路牌*:</label> |
| 87 | <div class="col-md-3"> | 88 | <div class="col-md-3"> |
| 88 | - <sa-Select3 model="ctrl.rerunManageForSave" | ||
| 89 | - name="rerunLp" | ||
| 90 | - placeholder="请输拼音..." | ||
| 91 | - dcvalue="{{ctrl.rerunManageForSave.rerunLp.id}}" | 89 | + <sa-Select5 name="rerunLp" |
| 90 | + model="ctrl.rerunManageForSave" | ||
| 91 | + cmaps="{'rerunLp.id' : 'lpId'}" | ||
| 92 | dcname="rerunLp.id" | 92 | dcname="rerunLp.id" |
| 93 | icname="lpId" | 93 | icname="lpId" |
| 94 | - icnames="lpName" | ||
| 95 | - datatype="lpInfo" | ||
| 96 | - dataassociate="true" | ||
| 97 | - dataparam="{{ {'ttid': ctrl.rerunManageForSave.rerunTtinfo.id} | json }}" | ||
| 98 | - mlp="true" | 94 | + dsparams="{{ {type: 'ajax', param:{'ttid': ctrl.rerunManageForSave.rerunTtinfo.id}, atype:'lpInfo' } | json }}" |
| 95 | + iterobjname="item" | ||
| 96 | + iterobjexp="'路牌'+ item.lpName" | ||
| 97 | + searchph="请输拼音..." | ||
| 98 | + searchexp="'路牌' + this.lpName" | ||
| 99 | required > | 99 | required > |
| 100 | - </sa-Select3> | 100 | + </sa-Select5> |
| 101 | </div> | 101 | </div> |
| 102 | <!-- 隐藏块,显示验证信息 --> | 102 | <!-- 隐藏块,显示验证信息 --> |
| 103 | <div class="alert alert-danger well-sm" ng-show="myForm.rerunLp.$error.required"> | 103 | <div class="alert alert-danger well-sm" ng-show="myForm.rerunLp.$error.required"> |
| @@ -132,53 +132,91 @@ | @@ -132,53 +132,91 @@ | ||
| 132 | ng-if="ctrl.rerunManageForSave.rerunType == 'dylp'"> | 132 | ng-if="ctrl.rerunManageForSave.rerunType == 'dylp'"> |
| 133 | <label class="col-md-2 control-label">线路2*:</label> | 133 | <label class="col-md-2 control-label">线路2*:</label> |
| 134 | <div class="col-md-3"> | 134 | <div class="col-md-3"> |
| 135 | - <sa-Select4 model="ctrl.rerunManageForSave" | ||
| 136 | - name="useXl" | ||
| 137 | - placeholder="请输拼音..." | ||
| 138 | - dcvalue="{{ctrl.rerunManageForSave.useXl.id}}" | 135 | + <sa-Select5 name="useXl" |
| 136 | + model="ctrl.rerunManageForSave" | ||
| 137 | + cmaps="{'useXl.id' : 'id'}" | ||
| 139 | dcname="useXl.id" | 138 | dcname="useXl.id" |
| 140 | icname="id" | 139 | icname="id" |
| 141 | - dscol="name" | ||
| 142 | - dsparams="{{ {type: 'ajax', param:{}, atype:'xl' } | json }}" | ||
| 143 | - mlp="true" | 140 | + dsparams="{{ {type: 'ajax', param:{type: 'all'}, atype:'xl' } | json }}" |
| 141 | + iterobjname="item" | ||
| 142 | + iterobjexp="item.name" | ||
| 143 | + searchph="请输拼音..." | ||
| 144 | + searchexp="this.name" | ||
| 144 | required > | 145 | required > |
| 145 | - </sa-Select4> | 146 | + </sa-Select5> |
| 146 | </div> | 147 | </div> |
| 147 | <!-- 隐藏块,显示验证信息 --> | 148 | <!-- 隐藏块,显示验证信息 --> |
| 148 | <div class="alert alert-danger well-sm" ng-show="myForm.useXl.$error.required"> | 149 | <div class="alert alert-danger well-sm" ng-show="myForm.useXl.$error.required"> |
| 149 | 线路2必须选择 | 150 | 线路2必须选择 |
| 150 | </div> | 151 | </div> |
| 151 | </div> | 152 | </div> |
| 152 | - <!--<div class="form-group has-success has-feedback"--> | ||
| 153 | - <!--ng-if="ctrl.rerunManageForSave.rerunType == 'dylp'">--> | ||
| 154 | - <!--<label class="col-md-2 control-label">路牌*:</label>--> | ||
| 155 | - <!--<div class="col-md-3">--> | ||
| 156 | - <!--<sa-Select3 model="ctrl.rerunManageForSave"--> | ||
| 157 | - <!--name="useLp"--> | ||
| 158 | - <!--placeholder="请输拼音..."--> | ||
| 159 | - <!--dcvalue="{{ctrl.rerunManageForSave.useLp.id}}"--> | ||
| 160 | - <!--dcname="useLp.id"--> | ||
| 161 | - <!--icname="id"--> | ||
| 162 | - <!--icnames="lpName"--> | ||
| 163 | - <!--datatype="lpInfo2"--> | ||
| 164 | - <!--dataassociate="true"--> | ||
| 165 | - <!--dataparam="{{ {'xl.id_eq': ctrl.rerunManageForSave.useXl.id} | json }}"--> | ||
| 166 | - <!--mlp="true"--> | ||
| 167 | - <!--required >--> | ||
| 168 | - <!--</sa-Select3>--> | ||
| 169 | - <!--</div>--> | ||
| 170 | - <!--<!– 隐藏块,显示验证信息 –>--> | ||
| 171 | - <!--<div class="alert alert-danger well-sm" ng-show="myForm.useLp.$error.required">--> | ||
| 172 | - <!--路牌2必须选择--> | ||
| 173 | - <!--</div>--> | ||
| 174 | - <!--</div>--> | ||
| 175 | - | ||
| 176 | - | 153 | + <div class="form-group has-success has-feedback" |
| 154 | + ng-if="ctrl.rerunManageForSave.rerunType == 'dylp'"> | ||
| 155 | + <label class="col-md-2 control-label">路牌*:</label> | ||
| 156 | + <div class="col-md-3"> | ||
| 157 | + <sa-Select5 name="useLp" | ||
| 158 | + model="ctrl.rerunManageForSave" | ||
| 159 | + cmaps="{'useLp.id' : 'id'}" | ||
| 160 | + dcname="useLp.id" | ||
| 161 | + icname="id" | ||
| 162 | + dsparams="{{ {type: 'ajax', param:{'xl.id_eq': ctrl.rerunManageForSave.useXl.id}, atype:'lpInfo2' } | json }}" | ||
| 163 | + dsparamsextra="{'type':'all'}" | ||
| 164 | + iterobjname="item" | ||
| 165 | + iterobjexp="'路牌' + item.lpName" | ||
| 166 | + searchph="请输拼音..." | ||
| 167 | + searchexp="'路牌' + this.lpName" | ||
| 168 | + required > | ||
| 169 | + </sa-Select5> | ||
| 170 | + </div> | ||
| 171 | + <!-- 隐藏块,显示验证信息 --> | ||
| 172 | + <div class="alert alert-danger well-sm" ng-show="myForm.useLp.$error.required"> | ||
| 173 | + 先选择线路2,再选择路牌2 | ||
| 174 | + </div> | ||
| 175 | + </div> | ||
| 177 | 176 | ||
| 178 | 177 | ||
| 178 | + <div class="form-group has-success has-feedback" ng-if="ctrl.rerunManageForSave.rerunType == 'dybc'"> | ||
| 179 | + <label class="col-md-2 control-label">车辆配置*:</label> | ||
| 180 | + <div class="col-md-3"> | ||
| 181 | + <sa-Select5 name="useCarConfig" | ||
| 182 | + model="ctrl.rerunManageForSave" | ||
| 183 | + cmaps="{'useCarConfig.id' : 'id'}" | ||
| 184 | + dcname="useCarConfig.id" | ||
| 185 | + icname="id" | ||
| 186 | + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'cci2' } | json }}" | ||
| 187 | + iterobjname="item" | ||
| 188 | + iterobjexp="item.cl.insideCode + '-' + item.xl.name" | ||
| 189 | + searchph="请输拼音..." | ||
| 190 | + searchexp="this.cl.insideCode + '-' + this.xl.name" | ||
| 191 | + required > | ||
| 192 | + </sa-Select5> | ||
| 193 | + </div> | ||
| 194 | + <!-- 隐藏块,显示验证信息 --> | ||
| 195 | + <div class="alert alert-danger well-sm" ng-show="myForm.useCarConfig.$error.required"> | ||
| 196 | + 车辆必须选择(车辆配置中的车辆) | ||
| 197 | + </div> | ||
| 198 | + </div> | ||
| 179 | 199 | ||
| 180 | <div class="form-group has-success has-feedback" ng-if="ctrl.rerunManageForSave.rerunType == 'dybc'"> | 200 | <div class="form-group has-success has-feedback" ng-if="ctrl.rerunManageForSave.rerunType == 'dybc'"> |
| 181 | - 对应班车 | 201 | + <label class="col-md-2 control-label">人员配置*:</label> |
| 202 | + <div class="col-md-5"> | ||
| 203 | + <sa-Select5 name="useEmployeeConfig" | ||
| 204 | + model="ctrl.rerunManageForSave" | ||
| 205 | + cmaps="{'useEmployeeConfig.id' : 'id'}" | ||
| 206 | + dcname="useEmployeeConfig.id" | ||
| 207 | + icname="id" | ||
| 208 | + dsparams="{{ {type: 'ajax', param:{'type': 'all'}, atype:'eci3' } | json }}" | ||
| 209 | + iterobjname="item" | ||
| 210 | + iterobjexp="item.xl.name + '---' + '驾:' + item.jsy.personnelName + '<' + item.jsy.jobCode + '>' + ' ' + (item.spy == null ? ' ' : ('售:' + item.spy.personnelName + '<' + item.spy.jobCode + '>'))" | ||
| 211 | + searchph="请输拼音..." | ||
| 212 | + searchexp="this.xl.name + '---' + '驾:' + this.jsy.personnelName + '<' + this.jsy.jobCode + '>' + ' ' + (this.spy == null ? ' ' : ('售:' + this.spy.personnelName + '<' + this.spy.jobCode + '>'))" | ||
| 213 | + required > | ||
| 214 | + </sa-Select5> | ||
| 215 | + </div> | ||
| 216 | + <!-- 隐藏块,显示验证信息 --> | ||
| 217 | + <div class="alert alert-danger well-sm" ng-show="myForm.useCarConfig.$error.required"> | ||
| 218 | + 人员配置必须选择(线路下的驾驶员和售票员配置) | ||
| 219 | + </div> | ||
| 182 | </div> | 220 | </div> |
| 183 | 221 | ||
| 184 | </div> | 222 | </div> |
| @@ -188,7 +226,7 @@ | @@ -188,7 +226,7 @@ | ||
| 188 | <div class="col-md-offset-3 col-md-4"> | 226 | <div class="col-md-offset-3 col-md-4"> |
| 189 | <button type="submit" class="btn green" | 227 | <button type="submit" class="btn green" |
| 190 | 228 | ||
| 191 | - <!--ng-disabled="!myForm.$valid"--> | 229 | + ng-disabled="!myForm.$valid" |
| 192 | 230 | ||
| 193 | ><i class="fa fa-check"></i> 提交</button> | 231 | ><i class="fa fa-check"></i> 提交</button> |
| 194 | <a type="button" class="btn default" ui-sref="rerunManage" ><i class="fa fa-times"></i> 取消</a> | 232 | <a type="button" class="btn default" ui-sref="rerunManage" ><i class="fa fa-times"></i> 取消</a> |
src/main/resources/static/pages/scheduleApp/module/core/rerunManage/main.js
| @@ -167,17 +167,29 @@ angular.module('ScheduleApp').controller('RerunManageFormCtrl', ['RerunManageSer | @@ -167,17 +167,29 @@ angular.module('ScheduleApp').controller('RerunManageFormCtrl', ['RerunManageSer | ||
| 167 | }; | 167 | }; |
| 168 | 168 | ||
| 169 | // 欲保存的busInfo信息,绑定 | 169 | // 欲保存的busInfo信息,绑定 |
| 170 | - self.rerunManageForSave = {rerunXl: {}, rerunTtinfo: {}, rerunLp: {}, rerunType: "dylp", useXl: {}, useLp: {}}; | 170 | + self.rerunManageForSave = {rerunXl: {}, rerunTtinfo: {}, rerunLp: {}, rerunType: "dylp", useXl: {}, useLp: {}, useCarConfig: {}, useEmployeeConfig: {}}; |
| 171 | 171 | ||
| 172 | // 获取传过来的id,有的话就是修改,获取一遍数据 | 172 | // 获取传过来的id,有的话就是修改,获取一遍数据 |
| 173 | var id = $stateParams.id; | 173 | var id = $stateParams.id; |
| 174 | if (id) { | 174 | if (id) { |
| 175 | self.rerunManageForSave.id = id; | 175 | self.rerunManageForSave.id = id; |
| 176 | - scheduleRuleManageService.getDetail(id).then( | 176 | + rerunManageService.getDetail(id).then( |
| 177 | function(result) { | 177 | function(result) { |
| 178 | var key; | 178 | var key; |
| 179 | for (key in result) { | 179 | for (key in result) { |
| 180 | - self.rerunManageForSave[key] = result[key]; | 180 | + if (result[key]) { |
| 181 | + self.rerunManageForSave[key] = result[key]; | ||
| 182 | + | ||
| 183 | + if (self.rerunManageForSave.rerunType == 'dylp') { | ||
| 184 | + self.rerunManageForSave.useCarConfig = {}; | ||
| 185 | + self.rerunManageForSave.useEmployeeConfig = {}; | ||
| 186 | + } else if (self.rerunManageForSave.rerunType == 'dybc') { | ||
| 187 | + self.rerunManageForSave.useXl = {}; | ||
| 188 | + self.rerunManageForSave.useLp = {}; | ||
| 189 | + } else { | ||
| 190 | + | ||
| 191 | + } | ||
| 192 | + } | ||
| 181 | } | 193 | } |
| 182 | }, | 194 | }, |
| 183 | function(result) { | 195 | function(result) { |
| @@ -188,23 +200,31 @@ angular.module('ScheduleApp').controller('RerunManageFormCtrl', ['RerunManageSer | @@ -188,23 +200,31 @@ angular.module('ScheduleApp').controller('RerunManageFormCtrl', ['RerunManageSer | ||
| 188 | 200 | ||
| 189 | // 提交方法 | 201 | // 提交方法 |
| 190 | self.submit = function() { | 202 | self.submit = function() { |
| 191 | - console.log(self.rerunManageForSave); | ||
| 192 | - | ||
| 193 | - //rerunManageService.saveDetail(self.rerunManageForSave).then( | ||
| 194 | - // function(result) { | ||
| 195 | - // // TODO:弹出框方式以后改 | ||
| 196 | - // if (result.status == 'SUCCESS') { | ||
| 197 | - // alert("保存成功!"); | ||
| 198 | - // $state.go("rerunManage"); | ||
| 199 | - // } else { | ||
| 200 | - // alert("保存异常!"); | ||
| 201 | - // } | ||
| 202 | - // }, | ||
| 203 | - // function(result) { | ||
| 204 | - // // TODO:弹出框方式以后改 | ||
| 205 | - // alert("出错啦!"); | ||
| 206 | - // } | ||
| 207 | - //); | 203 | + if (self.rerunManageForSave.rerunType == 'dylp') { |
| 204 | + delete self.rerunManageForSave.useCarConfig; | ||
| 205 | + delete self.rerunManageForSave.useEmployeeConfig; | ||
| 206 | + } else if (self.rerunManageForSave.rerunType == 'dybc') { | ||
| 207 | + delete self.rerunManageForSave.useXl; | ||
| 208 | + delete self.rerunManageForSave.useLp; | ||
| 209 | + } else { | ||
| 210 | + return; | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | + rerunManageService.saveDetail(self.rerunManageForSave).then( | ||
| 214 | + function(result) { | ||
| 215 | + // TODO:弹出框方式以后改 | ||
| 216 | + if (result.status == 'SUCCESS') { | ||
| 217 | + alert("保存成功!"); | ||
| 218 | + $state.go("rerunManage"); | ||
| 219 | + } else { | ||
| 220 | + alert("保存异常!"); | ||
| 221 | + } | ||
| 222 | + }, | ||
| 223 | + function(result) { | ||
| 224 | + // TODO:弹出框方式以后改 | ||
| 225 | + alert("出错啦!"); | ||
| 226 | + } | ||
| 227 | + ); | ||
| 208 | }; | 228 | }; |
| 209 | }]); | 229 | }]); |
| 210 | 230 |