Commit 4da7d734266734f6fd30e5fe9e768e1a0658dfdc

Authored by 王通
2 parents b10adce4 b5e1ace4

Merge branch 'pudong' of http://192.168.168.201:8888/panzhaov5/bsth_control into pudong

Showing 20 changed files with 811 additions and 365 deletions
src/main/java/com/bsth/controller/schedule/core/EmployeeConfigInfoController.java
@@ -53,6 +53,67 @@ public class EmployeeConfigInfoController extends BController<EmployeeConfigInfo @@ -53,6 +53,67 @@ public class EmployeeConfigInfoController extends BController<EmployeeConfigInfo
53 return rtn; 53 return rtn;
54 } 54 }
55 55
  56 + @RequestMapping(value = "/validate_get_destroy_info", method = RequestMethod.GET)
  57 + public Map<String, Object> validate_get_destroy_info(HttpServletRequest request) {
  58 + HttpSession session = request.getSession();
  59 + List<CompanyAuthority> cmyAuths = (List<CompanyAuthority>) session.getAttribute(Constants.COMPANY_AUTHORITYS);
  60 +
  61 + Map<String, Object> rtn = new HashMap<>();
  62 + try {
  63 + rtn.put("data", this.employeeConfigInfoService.validate_get_destroy_info(cmyAuths));
  64 + rtn.put("status", ResponseCode.SUCCESS);
  65 + } catch (Exception exp) {
  66 + rtn.put("status", ResponseCode.ERROR);
  67 + rtn.put("msg", exp.getMessage());
  68 + }
  69 +
  70 + return rtn;
  71 +
  72 + }
  73 +
  74 + @RequestMapping(value = "/validate_jsy_destroy", method = RequestMethod.GET)
  75 + public Map<String, Object> validate_jsy_destroy(@RequestParam Map<String, Object> param) {
  76 + Map<String, Object> rtn = new HashMap<>();
  77 + try {
  78 + EmployeeConfigInfo employeeConfigInfo = new EmployeeConfigInfo(
  79 + null,
  80 + null,
  81 + null,
  82 + param.get("jsy.id_eq"),
  83 + null
  84 + );
  85 + employeeConfigInfoService.validate_jsy_destroy(employeeConfigInfo);
  86 + rtn.put("status", ResponseCode.SUCCESS);
  87 + } catch (ScheduleException exp) {
  88 + rtn.put("status", ResponseCode.ERROR);
  89 + rtn.put("msg", exp.getMessage());
  90 + }
  91 +
  92 + return rtn;
  93 + }
  94 +
  95 + @RequestMapping(value = "/validate_spy_destroy", method = RequestMethod.GET)
  96 + public Map<String, Object> validate_spy_destroy(@RequestParam Map<String, Object> param) {
  97 + Map<String, Object> rtn = new HashMap<>();
  98 + try {
  99 + EmployeeConfigInfo employeeConfigInfo = new EmployeeConfigInfo(
  100 + null,
  101 + null,
  102 + null,
  103 + null,
  104 + param.get("spy.id_eq")
  105 + );
  106 + employeeConfigInfoService.validate_spy_destroy(employeeConfigInfo);
  107 + rtn.put("status", ResponseCode.SUCCESS);
  108 + } catch (ScheduleException exp) {
  109 + rtn.put("status", ResponseCode.ERROR);
  110 + rtn.put("msg", exp.getMessage());
  111 + }
  112 +
  113 + return rtn;
  114 + }
  115 +
  116 +
56 @RequestMapping(value = "/validate_jsy", method = RequestMethod.GET) 117 @RequestMapping(value = "/validate_jsy", method = RequestMethod.GET)
57 public Map<String, Object> validate_jsy(@RequestParam Map<String, Object> param) { 118 public Map<String, Object> validate_jsy(@RequestParam Map<String, Object> param) {
58 Map<String, Object> rtn = new HashMap<>(); 119 Map<String, Object> rtn = new HashMap<>();
src/main/java/com/bsth/data/LineVersionsData.java
@@ -33,6 +33,10 @@ public class LineVersionsData extends Thread { @@ -33,6 +33,10 @@ public class LineVersionsData extends Thread {
33 public void run() { 33 public void run() {
34 try { 34 try {
35 List<LineVersions> list = lineVersionsService.lineUpdate(); 35 List<LineVersions> list = lineVersionsService.lineUpdate();
  36 + if(list.size() == 0){
  37 + logger.info("没有需要更新的线路!");
  38 + return;
  39 + }
36 for (LineVersions lineVersions : list) { 40 for (LineVersions lineVersions : list) {
37 Integer lineId = lineVersions.getLine().getId(); 41 Integer lineId = lineVersions.getLine().getId();
38 // 更新线路文件 42 // 更新线路文件
src/main/java/com/bsth/entity/Personnel.java
@@ -63,9 +63,15 @@ public class Personnel extends BEntity { @@ -63,9 +63,15 @@ public class Personnel extends BEntity {
63 /** 工号 */ 63 /** 工号 */
64 @Column(nullable = false) 64 @Column(nullable = false)
65 private String jobCodeori; 65 private String jobCodeori;
  66 + /** 金蝶工号 */
  67 + private String jdCodeori;
66 /** 身份证 */ 68 /** 身份证 */
67 private String card; 69 private String card;
68 70
  71 + /**
  72 + * 0为在职,1为停用
  73 + */
  74 + private Integer destroy;
69 75
70 /** 备注 */ 76 /** 备注 */
71 private String remark; 77 private String remark;
@@ -247,6 +253,14 @@ public class Personnel extends BEntity { @@ -247,6 +253,14 @@ public class Personnel extends BEntity {
247 this.jobCodeori = jobCodeori; 253 this.jobCodeori = jobCodeori;
248 } 254 }
249 255
  256 + public String getJdCodeori() {
  257 + return jdCodeori;
  258 + }
  259 +
  260 + public void setJdCodeori(String jdCodeori) {
  261 + this.jdCodeori = jdCodeori;
  262 + }
  263 +
250 public String getRemark() { 264 public String getRemark() {
251 return remark; 265 return remark;
252 } 266 }
@@ -254,4 +268,12 @@ public class Personnel extends BEntity { @@ -254,4 +268,12 @@ public class Personnel extends BEntity {
254 public void setRemark(String remark) { 268 public void setRemark(String remark) {
255 this.remark = remark; 269 this.remark = remark;
256 } 270 }
  271 +
  272 + public Integer getDestroy() {
  273 + return destroy;
  274 + }
  275 +
  276 + public void setDestroy(Integer destroy) {
  277 + this.destroy = destroy;
  278 + }
257 } 279 }
src/main/java/com/bsth/service/schedule/EmployeeConfigInfoService.java
@@ -26,6 +26,12 @@ public interface EmployeeConfigInfoService extends BService&lt;EmployeeConfigInfo, @@ -26,6 +26,12 @@ public interface EmployeeConfigInfoService extends BService&lt;EmployeeConfigInfo,
26 void validate_spy_gs(EmployeeConfigInfo employeeConfigInfo, List<CompanyAuthority> companyAuthorityList) throws ScheduleException; 26 void validate_spy_gs(EmployeeConfigInfo employeeConfigInfo, List<CompanyAuthority> companyAuthorityList) throws ScheduleException;
27 // 判定驾驶员所属分公司和当前用户的所属分公司 27 // 判定驾驶员所属分公司和当前用户的所属分公司
28 void validate_spy_fgs(EmployeeConfigInfo employeeConfigInfo, List<CompanyAuthority> companyAuthorityList) throws ScheduleException; 28 void validate_spy_fgs(EmployeeConfigInfo employeeConfigInfo, List<CompanyAuthority> companyAuthorityList) throws ScheduleException;
  29 + // 验证驾驶员是否停用
  30 + void validate_jsy_destroy(EmployeeConfigInfo employeeConfigInfo) throws ScheduleException;
  31 + // 验证售票员是否停用
  32 + void validate_spy_destroy(EmployeeConfigInfo employeeConfigInfo) throws ScheduleException;
  33 + // 获取线路人员配置停用信息描述
  34 + List<String> validate_get_destroy_info(List<CompanyAuthority> companyAuthorityList);
29 35
30 void toggleCancel(Long id) throws ScheduleException; 36 void toggleCancel(Long id) throws ScheduleException;
31 Long getMaxDbbm(Integer xlId); 37 Long getMaxDbbm(Integer xlId);
src/main/java/com/bsth/service/schedule/impl/EmployeeConfigInfoServiceImpl.java
@@ -4,6 +4,7 @@ import com.bsth.entity.Personnel; @@ -4,6 +4,7 @@ import com.bsth.entity.Personnel;
4 import com.bsth.entity.schedule.EmployeeConfigInfo; 4 import com.bsth.entity.schedule.EmployeeConfigInfo;
5 import com.bsth.entity.schedule.rule.ScheduleRule1Flat; 5 import com.bsth.entity.schedule.rule.ScheduleRule1Flat;
6 import com.bsth.entity.sys.CompanyAuthority; 6 import com.bsth.entity.sys.CompanyAuthority;
  7 +import com.bsth.repository.PersonnelRepository;
7 import com.bsth.service.schedule.EmployeeConfigInfoService; 8 import com.bsth.service.schedule.EmployeeConfigInfoService;
8 import com.bsth.service.schedule.EmployeeService; 9 import com.bsth.service.schedule.EmployeeService;
9 import com.bsth.service.schedule.ScheduleRule1FlatService; 10 import com.bsth.service.schedule.ScheduleRule1FlatService;
@@ -35,6 +36,9 @@ public class EmployeeConfigInfoServiceImpl extends BServiceImpl&lt;EmployeeConfigIn @@ -35,6 +36,9 @@ public class EmployeeConfigInfoServiceImpl extends BServiceImpl&lt;EmployeeConfigIn
35 private EmployeeService employeeService; 36 private EmployeeService employeeService;
36 37
37 @Autowired 38 @Autowired
  39 + private PersonnelRepository personnelRepository;
  40 +
  41 + @Autowired
38 @Qualifier(value = "employeeConfig_dataTool") 42 @Qualifier(value = "employeeConfig_dataTool")
39 private DataToolsService dataToolsService; 43 private DataToolsService dataToolsService;
40 44
@@ -77,6 +81,23 @@ public class EmployeeConfigInfoServiceImpl extends BServiceImpl&lt;EmployeeConfigIn @@ -77,6 +81,23 @@ public class EmployeeConfigInfoServiceImpl extends BServiceImpl&lt;EmployeeConfigIn
77 81
78 @Transactional 82 @Transactional
79 @Override 83 @Override
  84 + public void validate_jsy_destroy(EmployeeConfigInfo employeeConfigInfo) throws ScheduleException {
  85 + Personnel jsy = this.personnelRepository.findOne(employeeConfigInfo.getJsy().getId());
  86 + if (jsy.getDestroy() != null && jsy.getDestroy() == 1) {
  87 + throw new ScheduleException("当前驾驶员已经停用!");
  88 + }
  89 + }
  90 + @Transactional
  91 + @Override
  92 + public void validate_spy_destroy(EmployeeConfigInfo employeeConfigInfo) throws ScheduleException {
  93 + Personnel spy = this.personnelRepository.findOne(employeeConfigInfo.getSpy().getId());
  94 + if (spy.getDestroy() != null && spy.getDestroy() == 1) {
  95 + throw new ScheduleException("当前售票员已经停用!");
  96 + }
  97 + }
  98 +
  99 + @Transactional
  100 + @Override
80 public void validate_jsy(EmployeeConfigInfo employeeConfigInfo) throws ScheduleException { 101 public void validate_jsy(EmployeeConfigInfo employeeConfigInfo) throws ScheduleException {
81 // 驾驶员不能重复配置 102 // 驾驶员不能重复配置
82 Map<String, Object> param = new HashMap<>(); 103 Map<String, Object> param = new HashMap<>();
@@ -258,6 +279,53 @@ public class EmployeeConfigInfoServiceImpl extends BServiceImpl&lt;EmployeeConfigIn @@ -258,6 +279,53 @@ public class EmployeeConfigInfoServiceImpl extends BServiceImpl&lt;EmployeeConfigIn
258 279
259 @Transactional 280 @Transactional
260 @Override 281 @Override
  282 + public List<String> validate_get_destroy_info(List<CompanyAuthority> companyAuthorityList) {
  283 + // 获取公司分公司权限代码
  284 + List<String> gs_fgs_dms = new ArrayList<>();
  285 + for (CompanyAuthority companyAuthority : companyAuthorityList) {
  286 + gs_fgs_dms.add(companyAuthority.getCompanyCode() + "_" + companyAuthority.getSubCompanyCode());
  287 + }
  288 +
  289 + // 查询所有人员配置,不用in操作符,n+1查询慢,程序过滤
  290 + Map<String, Object> params = new HashMap<>();
  291 + List<EmployeeConfigInfo> employeeConfigInfoList_all = (List<EmployeeConfigInfo>) this.list(params);
  292 + List<EmployeeConfigInfo> employeeConfigInfoList = new ArrayList<>();
  293 + for (EmployeeConfigInfo employeeConfigInfo : employeeConfigInfoList_all) {
  294 + if (gs_fgs_dms.contains(employeeConfigInfo.getXl().getCgsbm())) {
  295 + employeeConfigInfoList.add(employeeConfigInfo);
  296 + }
  297 + }
  298 +
  299 + // 停用信息
  300 + List<String> destroy_infos = new ArrayList<>();
  301 + String info_format = "线路[%s]中人员配置有停用人员,请处理!";
  302 + String info = "";
  303 + Integer xlId = null;
  304 + for (EmployeeConfigInfo employeeConfigInfo : employeeConfigInfoList) {
  305 + if (employeeConfigInfo.getJsy() != null &&
  306 + employeeConfigInfo.getJsy().getDestroy() != null &&
  307 + employeeConfigInfo.getJsy().getDestroy() == 1) { // 驾驶员判定是否停用
  308 + info = String.format(info_format, employeeConfigInfo.getXl().getName());
  309 + if (!destroy_infos.contains(info)) {
  310 + destroy_infos.add(info);
  311 + }
  312 + }
  313 +
  314 + if (employeeConfigInfo.getSpy() != null &&
  315 + employeeConfigInfo.getSpy().getDestroy() != null &&
  316 + employeeConfigInfo.getSpy().getDestroy() == 1) {
  317 + info = String.format(info_format, employeeConfigInfo.getXl().getName());
  318 + if (!destroy_infos.contains(info)) {
  319 + destroy_infos.add(info);
  320 + }
  321 + }
  322 + }
  323 +
  324 + return destroy_infos;
  325 + }
  326 +
  327 + @Transactional
  328 + @Override
261 public void delete(Long aLong) throws ScheduleException { 329 public void delete(Long aLong) throws ScheduleException {
262 toggleCancel(aLong); 330 toggleCancel(aLong);
263 } 331 }
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
@@ -184,6 +184,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -184,6 +184,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
184 } 184 }
185 185
186 @Override 186 @Override
  187 + @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
187 public ValidateRuleResult validateRule(Integer xlId, Date from, Date to) { 188 public ValidateRuleResult validateRule(Integer xlId, Date from, Date to) {
188 KieSession session = validateKBase.newKieSession(); 189 KieSession session = validateKBase.newKieSession();
189 session.setGlobal("LOG", logger); 190 session.setGlobal("LOG", logger);
src/main/java/com/bsth/service/schedule/impl/plan/kBase3/validate/rule/ErrorInfoFunction.java
1 package com.bsth.service.schedule.impl.plan.kBase3.validate.rule; 1 package com.bsth.service.schedule.impl.plan.kBase3.validate.rule;
2 2
3 3
  4 +import com.bsth.entity.Personnel;
4 import com.bsth.entity.schedule.EmployeeConfigInfo; 5 import com.bsth.entity.schedule.EmployeeConfigInfo;
5 import com.bsth.entity.schedule.GuideboardInfo; 6 import com.bsth.entity.schedule.GuideboardInfo;
6 import org.apache.commons.lang3.StringUtils; 7 import org.apache.commons.lang3.StringUtils;
@@ -116,7 +117,7 @@ public class ErrorInfoFunction implements AccumulateFunction { @@ -116,7 +117,7 @@ public class ErrorInfoFunction implements AccumulateFunction {
116 errorInfo.getErrorDescList().add("冗余的路牌id和路牌名字都不能为空,请重新编辑保存!"); 117 errorInfo.getErrorDescList().add("冗余的路牌id和路牌名字都不能为空,请重新编辑保存!");
117 } 118 }
118 119
119 - // 3、人员配置,搭班编码,人员起始索引验证 120 + // 3、人员配置,搭班编码,人员起始索引验证,配置人员停用验证
120 if (StringUtils.isNotEmpty(wrapInput.getEcIds()) && 121 if (StringUtils.isNotEmpty(wrapInput.getEcIds()) &&
121 StringUtils.isNotEmpty(wrapInput.getEcDbbms())) { // 冗余的人员配置id和人员搭班编码都不能为空 122 StringUtils.isNotEmpty(wrapInput.getEcDbbms())) { // 冗余的人员配置id和人员搭班编码都不能为空
122 String[] ecIds = wrapInput.getEcIds().split(","); 123 String[] ecIds = wrapInput.getEcIds().split(",");
@@ -144,6 +145,40 @@ public class ErrorInfoFunction implements AccumulateFunction { @@ -144,6 +145,40 @@ public class ErrorInfoFunction implements AccumulateFunction {
144 break; 145 break;
145 } 146 }
146 } 147 }
  148 +
  149 + // 验证fb_ecInfo1
  150 + String dbbm = fb_ecInfo1.getDbbm();
  151 + Personnel jsy = fb_ecInfo1.getJsy();
  152 + Personnel spy = fb_ecInfo1.getSpy();
  153 + if (jsy != null && jsy.getDestroy() != null && jsy.getDestroy() == 1) {
  154 + errorInfo.getErrorDescList().add(
  155 + String.format("搭班编码=%s,驾驶员=%s,工号=%s,人员经停用!",
  156 + dbbm, jsy.getPersonnelName(), jsy.getJobCodeori()));
  157 + break;
  158 + }
  159 + if (spy != null && spy.getDestroy() != null && spy.getDestroy() == 1) {
  160 + errorInfo.getErrorDescList().add(
  161 + String.format("搭班编码=%s,售票员=%s,工号=%s,人员经停用!",
  162 + dbbm, spy.getPersonnelName(), spy.getJobCodeori()));
  163 + break;
  164 + }
  165 + // 验证fb_ecInfo2
  166 + dbbm = fb_ecInfo2.getDbbm();
  167 + jsy = fb_ecInfo2.getJsy();
  168 + spy = fb_ecInfo2.getSpy();
  169 + if (jsy != null && jsy.getDestroy() != null && jsy.getDestroy() == 1) {
  170 + errorInfo.getErrorDescList().add(
  171 + String.format("搭班编码=%s,驾驶员=%s,工号=%s,人员经停用!",
  172 + dbbm, jsy.getPersonnelName(), jsy.getJobCodeori()));
  173 + break;
  174 + }
  175 + if (spy != null && spy.getDestroy() != null && spy.getDestroy() == 1) {
  176 + errorInfo.getErrorDescList().add(
  177 + String.format("搭班编码=%s,售票员=%s,工号=%s,人员经停用!",
  178 + dbbm, spy.getPersonnelName(), spy.getJobCodeori()));
  179 + break;
  180 + }
  181 +
147 } 182 }
148 183
149 } else { 184 } else {
@@ -163,6 +198,23 @@ public class ErrorInfoFunction implements AccumulateFunction { @@ -163,6 +198,23 @@ public class ErrorInfoFunction implements AccumulateFunction {
163 break; 198 break;
164 } 199 }
165 } 200 }
  201 +
  202 + // 验证ecInfo
  203 + String dbbm = ecInfo.getDbbm();
  204 + Personnel jsy = ecInfo.getJsy();
  205 + Personnel spy = ecInfo.getSpy();
  206 + if (jsy != null && jsy.getDestroy() != null && jsy.getDestroy() == 1) {
  207 + errorInfo.getErrorDescList().add(
  208 + String.format("搭班编码=%s,驾驶员=%s,工号=%s,人员经停用!",
  209 + dbbm, jsy.getPersonnelName(), jsy.getJobCodeori()));
  210 + break;
  211 + }
  212 + if (spy != null && spy.getDestroy() != null && spy.getDestroy() == 1) {
  213 + errorInfo.getErrorDescList().add(
  214 + String.format("搭班编码=%s,售票员=%s,工号=%s,人员经停用!",
  215 + dbbm, spy.getPersonnelName(), spy.getJobCodeori()));
  216 + break;
  217 + }
166 } 218 }
167 } 219 }
168 220
src/main/resources/static/pages/base/line/editRoute.html
@@ -166,8 +166,8 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,transGPS,editRoute,m @@ -166,8 +166,8 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,transGPS,editRoute,m
166 var sectionListTemp = arrayFormat.sectionList; 166 var sectionListTemp = arrayFormat.sectionList;
167 var sectionList = []; 167 var sectionList = [];
168 // 隔30个取一个点(相当于30s) 168 // 隔30个取一个点(相当于30s)
169 - for(var i = 0; i*30 < sectionListTemp.length; i++) {  
170 - sectionList[i] = sectionListTemp[i*30]; 169 + for(var i = 0; i*30 < sectionListTemp.length; i++) {
  170 + sectionList[i] = sectionListTemp[i*30];
171 } 171 }
172 sectionList[sectionList.length] = sectionListTemp[sectionListTemp.length-1]; 172 sectionList[sectionList.length] = sectionListTemp[sectionListTemp.length-1];
173 173
src/main/resources/static/pages/base/lineversions/js/lineversions-list-table.js
@@ -343,9 +343,9 @@ @@ -343,9 +343,9 @@
343 closeOnConfirm: false }, 343 closeOnConfirm: false },
344 function(isConfirm){ 344 function(isConfirm){
345 if(isConfirm){ 345 if(isConfirm){
346 - var win1 = window.open("http://114.80.178.12:29088/login2.html","线路信息编辑","false"); 346 + var win1 = window.open("http://114.80.178.12:59088/login2.html","线路信息编辑","false");
347 setTimeout(function(){ 347 setTimeout(function(){
348 - window.open("http://114.80.178.12:29088/pages/base/stationroute/list.html?no="+lineId,"线路信息编辑","false"); 348 + window.open("http://114.80.178.12:59088/pages/base/stationroute/list.html?no="+lineId,"线路信息编辑","false");
349 },1500); 349 },1500);
350 swal.close(); 350 swal.close();
351 } 351 }
src/main/resources/static/pages/base/timesmodel/gantt.html
@@ -162,7 +162,7 @@ @@ -162,7 +162,7 @@
162 </div> 162 </div>
163 163
164 164
165 -<!-- echarts4 误删 --> 165 +<!-- echarts4 -->
166 <script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script> 166 <script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script>
167 167
168 <!-- row 组件END --> 168 <!-- row 组件END -->
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -17,7 +17,8 @@ @@ -17,7 +17,8 @@
17 echartsDrawGTT.resizeChart(); 17 echartsDrawGTT.resizeChart();
18 }); 18 });
19 // 获取已存在的该时刻表明细数据. 19 // 获取已存在的该时刻表明细数据.
20 - var objD = window.localStorage.isDoDate; 20 + var objD = window.localStorage.isDoDate;
  21 + debugger;
21 // 获取表单参数配置数据. 22 // 获取表单参数配置数据.
22 var map = JSON.parse(window.localStorage.Gantt_AgursData); 23 var map = JSON.parse(window.localStorage.Gantt_AgursData);
23 $('.skmxTitle').text( '【' + map.skbmc + '】' + '时刻表明细模型'); 24 $('.skmxTitle').text( '【' + map.skbmc + '】' + '时刻表明细模型');
@@ -61,7 +62,7 @@ @@ -61,7 +62,7 @@
61 62
62 // 创建ParameterObj 63 // 创建ParameterObj
63 var _paramObj; 64 var _paramObj;
64 - 65 +debugger;
65 if(map.baseRes== '0') { 66 if(map.baseRes== '0') {
66 CSMap = getMaxCarAndStopSpace0(map,seMap); 67 CSMap = getMaxCarAndStopSpace0(map,seMap);
67 // 发车间隙 68 // 发车间隙
@@ -133,6 +134,7 @@ @@ -133,6 +134,7 @@
133 } 134 }
134 data = {'json':rsjar,'bxrcgs':null}; 135 data = {'json':rsjar,'bxrcgs':null};
135 } 136 }
  137 + debugger;
136 echartsDrawGTT.init(data.json,true,true); 138 echartsDrawGTT.init(data.json,true,true);
137 // console.log(data.json); 139 // console.log(data.json);
138 // 创建甘特图对象. 140 // 创建甘特图对象.
src/main/resources/static/pages/home.html
@@ -95,4 +95,29 @@ @@ -95,4 +95,29 @@
95 <li class="sub_title"><h6>用油管理</h6></li> 95 <li class="sub_title"><h6>用油管理</h6></li>
96 <li><span class="label s_c_change">修复</span>1、修正加油人员不符保存后不在显示。</li> 96 <li><span class="label s_c_change">修复</span>1、修正加油人员不符保存后不在显示。</li>
97 </ul> 97 </ul>
  98 +
98 </div> 99 </div>
  100 +
  101 +<script type="text/javascript">
  102 + $.ajax({
  103 + url: '/eci/validate_get_destroy_info',
  104 + dataType: "json",
  105 + success: function(rs) {
  106 + if (rs && rs.status === "SUCCESS") {
  107 + if (rs.data && rs.data.length && rs.data.length > 0) {
  108 + swal({
  109 + title: "人员配置停用信息",
  110 + text: rs.data.join("</br>"),
  111 + html: true,
  112 + type: "warning",
  113 + showCancelButton: true,
  114 + confirmButtonColor: "RED",
  115 + confirmButtonText: "是",
  116 + cancelButtonText: "取消"
  117 + });
  118 + }
  119 + }
  120 + }
  121 + });
  122 +
  123 +</script>
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/list.html
@@ -5,13 +5,15 @@ @@ -5,13 +5,15 @@
5 <thead> 5 <thead>
6 <tr role="row" class="heading"> 6 <tr role="row" class="heading">
7 <th style="width:70px;">序号</th> 7 <th style="width:70px;">序号</th>
8 - <th style="width: 130px;">姓名</th> 8 + <th style="width: 100px;">姓名</th>
9 <th style="width: 100px;">编号</th> 9 <th style="width: 100px;">编号</th>
10 <th style="width: 100px;">工号</th> 10 <th style="width: 100px;">工号</th>
11 - <th style="width: 5%;">性别</th>  
12 - <th style="width: 15%;">所在公司</th> 11 + <th style="width: 100px;">金蝶工号</th>
  12 + <th style="width: 60px;">性别</th>
  13 + <th style="width: 150px;">所在公司</th>
13 <th >分公司</th> 14 <th >分公司</th>
14 - <th style="width: 20%;">工种</th> 15 + <th >工种</th>
  16 + <th style="width: 80px;">停用</th>
15 <th >操作</th> 17 <th >操作</th>
16 </tr> 18 </tr>
17 <tr role="row" class="filter"> 19 <tr role="row" class="filter">
@@ -27,6 +29,9 @@ @@ -27,6 +29,9 @@
27 <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCodeori_like" placeholder="输入工号..."/> 29 <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jobCodeori_like" placeholder="输入工号..."/>
28 </td> 30 </td>
29 <td> 31 <td>
  32 + <input type="text" class="form-control input-sm" ng-model="ctrl.searchCondition().jdCodeori_like" placeholder="输入工号..."/>
  33 + </td>
  34 + <td>
30 </td> 35 </td>
31 <td> 36 <td>
32 <sa-Select5 name="gs" 37 <sa-Select5 name="gs"
@@ -73,6 +78,11 @@ @@ -73,6 +78,11 @@
73 </sa-Select5> 78 </sa-Select5>
74 </td> 79 </td>
75 <td> 80 <td>
  81 + <label class="checkbox-inline">
  82 + <input type="checkbox" ng-true-value="1" ng-model="ctrl.searchCondition()['destroy_eq']"/>停用
  83 + </label>
  84 + </td>
  85 + <td>
76 <div class="btn-group"> 86 <div class="btn-group">
77 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" style="margin-right: 0;" 87 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" style="margin-right: 0;"
78 ng-click="ctrl.doPage()"> 88 ng-click="ctrl.doPage()">
@@ -101,7 +111,7 @@ @@ -101,7 +111,7 @@
101 </tr> 111 </tr>
102 </thead> 112 </thead>
103 <tbody> 113 <tbody>
104 - <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 114 + <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX" ng-class="{danger: info.destroy == '1'}">
105 <td> 115 <td>
106 <div> 116 <div>
107 <a href="#" 117 <a href="#"
@@ -126,6 +136,9 @@ @@ -126,6 +136,9 @@
126 <span ng-bind="info.jobCodeori"></span> 136 <span ng-bind="info.jobCodeori"></span>
127 </td> 137 </td>
128 <td> 138 <td>
  139 + <span ng-bind="info.jdCodeori"></span>
  140 + </td>
  141 + <td>
129 <span ng-bind="info.personnelType | dict:'sexType':'未知'"></span> 142 <span ng-bind="info.personnelType | dict:'sexType':'未知'"></span>
130 143
131 <!--<div ng-if="info.personnelType == '1'">--> 144 <!--<div ng-if="info.personnelType == '1'">-->
@@ -150,6 +163,10 @@ @@ -150,6 +163,10 @@
150 <span ng-bind="info.posts | dict:'gzType':'未知'"></span> 163 <span ng-bind="info.posts | dict:'gzType':'未知'"></span>
151 </td> 164 </td>
152 <td> 165 <td>
  166 + <span class="glyphicon glyphicon-ok" ng-if="info.destroy != '1'"></span>
  167 + <span class="glyphicon glyphicon-remove" ng-if="info.destroy == '1'"></span>
  168 + </td>
  169 + <td>
153 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>--> 170 <!--<a href="details.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 详细 </a>-->
154 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>--> 171 <!--<a href="edit.html?lineId={{obj.id}}" class="btn default blue-stripe btn-sm"> 修改 </a>-->
155 <a ui-sref="employeeInfoManage_detail({id: info.id})" class="btn btn-info btn-sm"> 详细 </a> 172 <a ui-sref="employeeInfoManage_detail({id: info.id})" class="btn btn-info btn-sm"> 详细 </a>
src/main/resources/static/pages/scheduleApp/module/basicInfo/employeeInfoManage/module.js
@@ -362,6 +362,10 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -362,6 +362,10 @@ angular.module(&#39;ScheduleApp&#39;).controller(
362 var gh = self.employeeInfoForSave.jobCodeori; 362 var gh = self.employeeInfoForSave.jobCodeori;
363 self.employeeInfoForSave.jobCode = self.employeeInfoForSave.companyCode + "-" + gh; 363 self.employeeInfoForSave.jobCode = self.employeeInfoForSave.companyCode + "-" + gh;
364 364
  365 + if (self.employeeInfoForSave.destroy !== 1) { // 0在职,1停用
  366 + self.employeeInfoForSave.destroy = 0;
  367 + }
  368 +
365 console.log(self.employeeInfoForSave); 369 console.log(self.employeeInfoForSave);
366 370
367 // 保存或更新 371 // 保存或更新
src/main/resources/static/pages/scheduleApp/module/common/prj-common-directive.js
@@ -4407,331 +4407,331 @@ angular.module(&#39;ScheduleApp&#39;).directive( @@ -4407,331 +4407,331 @@ angular.module(&#39;ScheduleApp&#39;).directive(
4407 ] 4407 ]
4408 ); 4408 );
4409 4409
4410 -/**  
4411 - * saTimetablePreview指令,时刻表预览模式视图。  
4412 - */  
4413 -angular.module("ScheduleApp").directive(  
4414 - "saTimetable2",  
4415 - [  
4416 - '$timeout',  
4417 - function($timeout) {  
4418 - return {  
4419 - restrict : 'E',  
4420 - templateUrl : '/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTablePreViewTemplate.html',  
4421 - scope : { // 独立作用域  
4422 - // 使用外部数据源,内部重新组合显示  
4423 - ds : "=ngModel"  
4424 - },  
4425 - controllerAs : "$saTimeTablePreviewCtrl",  
4426 - bindToController: true,  
4427 - controller : function() {  
4428 - var self = this;  
4429 -  
4430 - // 内部班次时刻模型  
4431 - self.internalBcModel = {  
4432 - up_qdz_name : "", // 上行起点站名字  
4433 - down_qdz_name : "", // 下行起点站名字  
4434 - up_bc_list_asc : [], // 上行班次列表(按照发车时间升序)  
4435 - down_bc_list_asc : [] // 下行班次列表(按照发车时间升序)  
4436 - };  
4437 -  
4438 - // 内部各个路牌block车次链模型  
4439 - self.internalLpBlockModel = {  
4440 - // key:路牌名字  
4441 - // value: 数组(按照发车时间排序)  
4442 - // value 数据内对象 {fcsj:发车时间,isUp:是否上行,fcno:发车顺序号,index:对应的班次列表索引}  
4443 - };  
4444 -  
4445 - // TODO:  
4446 - },  
4447 -  
4448 - /**,  
4449 - * compile阶段,angular还没有编译模版,根据需要可以修改模版dom  
4450 - * @param tElem  
4451 - * @param tAttrs  
4452 - * @returns {{pre: Function, post: Function}}  
4453 - */  
4454 - compile : function(tElem, tAttrs) {  
4455 - // 获取属性  
4456 - var $attr_name = tAttrs["name"]; // 控件的名字  
4457 - if (!$attr_name) {  
4458 - throw new Error("saTimeTablePreview指令 name属性required");  
4459 - }  
4460 -  
4461 - // 内部controlAs名字  
4462 - var ctrlAs = "$saTimeTablePreviewCtrl";  
4463 -  
4464 - // TODO:  
4465 -  
4466 - //------------------ 内部方法 --------------------//  
4467 - var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀  
4468 - var date_wrap_format = "YYYY-MM-DD HH:mm"; // 日期格式  
4469 - /**  
4470 - * 将时间包装成日期,方便计算。  
4471 - * @param timeStr 时间格式,如 06:30  
4472 - * @returns moment对象  
4473 - */  
4474 - var _fun_WrapTime = function(timeStr) {  
4475 - return moment(  
4476 - date_wrap_prefix + timeStr,  
4477 - date_wrap_format  
4478 - );  
4479 - };  
4480 -  
4481 - /**  
4482 - * 点击班次html元素(dl),触发班次移动,如下:  
4483 - * 1、点击上行班次,下一个下行班次在下行班次列表中移到中间位置  
4484 - * 2、点击下行班次,下一个上行班次在上行班次列表中移到中间位置  
4485 - * @param ctrl 内部控制器  
4486 - * @param index 班次索引  
4487 - * @param isUp 是否上行  
4488 - * @private  
4489 - */  
4490 - var _fun_bcDDViewMove = function(ctrl, index, isUp) {  
4491 - // 获取当前点击班次对象  
4492 - var oBc;  
4493 - if (isUp) {  
4494 - oBc = ctrl.internalBcModel.up_bc_list_asc[index];  
4495 - } else {  
4496 - oBc = ctrl.internalBcModel.down_bc_list_asc[index];  
4497 - }  
4498 -  
4499 - // 找出车次链中的下一个班次索引,没有就undefined  
4500 - var nextIndex = undefined;  
4501 - var nextBlockBc = undefined;  
4502 - var currentBlockBcIndex = undefined;  
4503 - angular.forEach(ctrl.internalLpBlockModel[oBc.lpName], function(data, i) {  
4504 - if (data.fcsj == oBc.fcsj) {  
4505 - currentBlockBcIndex = i;  
4506 - }  
4507 - });  
4508 - if (currentBlockBcIndex != undefined &&  
4509 - currentBlockBcIndex < (ctrl.internalLpBlockModel[oBc.lpName].length - 1)) {  
4510 - nextBlockBc = ctrl.internalLpBlockModel[oBc.lpName][currentBlockBcIndex + 1];  
4511 - nextIndex = nextBlockBc.index;  
4512 - }  
4513 - // 先删除click标记,再添加  
4514 - angular.forEach(ctrl.internalBcModel.up_bc_list_asc, function(data) {  
4515 - delete data["isClick"];  
4516 - });  
4517 - angular.forEach(ctrl.internalBcModel.down_bc_list_asc, function(data) {  
4518 - delete data["isClick"];  
4519 - });  
4520 - oBc.isClick = true;  
4521 - if (nextIndex) {  
4522 - if (nextBlockBc.isUp) {  
4523 - ctrl.internalBcModel.up_bc_list_asc[nextIndex].isClick = true;  
4524 - } else {  
4525 - ctrl.internalBcModel.down_bc_list_asc[nextIndex].isClick = true;  
4526 - }  
4527 - }  
4528 -  
4529 - // 移动,同方向不移动  
4530 - var clientHeight = angular.element("#temp").height() - 34;  
4531 - if (nextBlockBc && isUp != nextBlockBc.isUp) {  
4532 - if (isUp) { // 移动下行  
4533 - angular.element(".ttpv_table_scrollbar:eq(1)").animate(  
4534 - {scrollTop : nextIndex * 30 - clientHeight / 2}, 400);  
4535 - } else { // 移动上行  
4536 - angular.element(".ttpv_table_scrollbar:eq(0)").animate(  
4537 - {scrollTop : nextIndex * 30 - clientHeight / 2}, 400);  
4538 - }  
4539 - }  
4540 -  
4541 - };  
4542 -  
4543 - /**  
4544 - * 刷新内部数据。  
4545 - * @param ctrl 内部控制器对象($saTimeTablePreviewCtrl)  
4546 - * @private  
4547 - */  
4548 - var _fun_refreshInternalModel = function(ctrl) {  
4549 - // 初始化内部数据  
4550 - ctrl.internalBcModel = {  
4551 - up_qdz_name : "", // 上行起点站名字  
4552 - up_zdz_name : "", // 上行终点站名字  
4553 - down_qdz_name : "", // 下行起点站名字  
4554 - down_zdz_name : "", // 下行终点站名字  
4555 - up_bc_list_asc : [], // 上行班次列表(按照发车时间升序)  
4556 - down_bc_list_asc : [] // 下行班次列表(按照发车时间升序)  
4557 - };  
4558 - ctrl.internalLpBlockModel = {  
4559 -  
4560 - };  
4561 -  
4562 - // ngModel传入的数据  
4563 - var dataSource = ctrl.ds.bcList;  
4564 -  
4565 - // 构造上下行班次列表,并确定上下行的首发站点  
4566 - angular.forEach(dataSource, function(bcObj) {  
4567 - var _internalBcObj = {};  
4568 - // 构造内部班次对象  
4569 - _internalBcObj.lpName = bcObj.lp.lpName; // 路牌  
4570 - _internalBcObj.fcsj = bcObj.fcsj; // 发车时间  
4571 - _internalBcObj.ddsj = _fun_WrapTime(bcObj.fcsj).add(bcObj.bcsj, "m").format("HH:mm");  
4572 - _internalBcObj.qdzName = bcObj.qdzName; // 起点站名字  
4573 - _internalBcObj.zdzName = bcObj.zdzName; // 终点站名字  
4574 - _internalBcObj.bcType = bcObj.bcType; // 班次类型  
4575 - _internalBcObj.isTs = bcObj.isTS; // 是否停驶  
4576 - _internalBcObj.isFb = bcObj.isFB; // 是否分班  
4577 - _internalBcObj.remark = bcObj.remark; // 备注  
4578 - _internalBcObj._fcno = bcObj.fcno; // 发车顺序号  
4579 -  
4580 - if (bcObj.xlDir == "0") { // 上行  
4581 - ctrl.internalBcModel.up_bc_list_asc.push(_internalBcObj);  
4582 - // 确定起点站  
4583 - if (ctrl.internalBcModel.up_qdz_name == "") {  
4584 - if (bcObj.bcType == "normal") {  
4585 - ctrl.internalBcModel.up_qdz_name = bcObj.qdzName;  
4586 - }  
4587 - }  
4588 - // 确定终点站  
4589 - if (ctrl.internalBcModel.up_zdz_name == "") {  
4590 - if (bcObj.bcType == "normal") {  
4591 - ctrl.internalBcModel.up_zdz_name = bcObj.zdzName;  
4592 - }  
4593 - }  
4594 - }  
4595 - if (bcObj.xlDir == "1") { // 下行  
4596 - ctrl.internalBcModel.down_bc_list_asc.push(_internalBcObj);  
4597 - // 确定起点站  
4598 - if (ctrl.internalBcModel.down_qdz_name == "") {  
4599 - if (bcObj.bcType == "normal") {  
4600 - ctrl.internalBcModel.down_qdz_name = bcObj.qdzName;  
4601 - }  
4602 - }  
4603 - // 确定终点站  
4604 - if (ctrl.internalBcModel.down_zdz_name == "") {  
4605 - if (bcObj.bcType == "normal") {  
4606 - ctrl.internalBcModel.down_zdz_name = bcObj.zdzName;  
4607 - }  
4608 - }  
4609 - }  
4610 -  
4611 - });  
4612 -  
4613 - // 发车时间升序排序上行班次  
4614 - ctrl.internalBcModel.up_bc_list_asc.sort(function(a, b) {  
4615 - var a_wrapTime = _fun_WrapTime(a.fcsj);  
4616 - var b_wrapTime = _fun_WrapTime(b.fcsj);  
4617 -  
4618 - // 判定如果发车时间是以00,01,02,03开头的,说明是下一天凌晨的班次,需要加1天判定  
4619 - // TODO:以后要配合首班车的发车时间判定  
4620 - if (a.fcsj.indexOf("00:") == 0 ||  
4621 - a.fcsj.indexOf("01:") == 0 ||  
4622 - a.fcsj.indexOf("02:") == 0) {  
4623 - a_wrapTime.add(1, "day");  
4624 - }  
4625 - if (b.fcsj.indexOf("00:") == 0 ||  
4626 - b.fcsj.indexOf("01:") == 0 ||  
4627 - b.fcsj.indexOf("02:") == 0) {  
4628 - b_wrapTime.add(1, "day");  
4629 - }  
4630 -  
4631 - if (a_wrapTime.isBefore(b_wrapTime)) {  
4632 - return -1;  
4633 - } else if (a_wrapTime.isAfter(b_wrapTime)) {  
4634 - return 1;  
4635 - } else {  
4636 - return 0;  
4637 - }  
4638 -  
4639 - });  
4640 - // 发车时间升序排序下行班次  
4641 - ctrl.internalBcModel.down_bc_list_asc.sort(function(a, b) {  
4642 - var a_wrapTime = _fun_WrapTime(a.fcsj);  
4643 - var b_wrapTime = _fun_WrapTime(b.fcsj);  
4644 -  
4645 - // 判定如果发车时间是以00,01,02,03开头的,说明是下一天凌晨的班次,需要加1天判定  
4646 - // TODO:以后要配合首班车的发车时间判定  
4647 - if (a.fcsj.indexOf("00:") == 0 ||  
4648 - a.fcsj.indexOf("01:") == 0 ||  
4649 - a.fcsj.indexOf("02:") == 0) {  
4650 - a_wrapTime.add(1, "day");  
4651 - }  
4652 - if (b.fcsj.indexOf("00:") == 0 ||  
4653 - b.fcsj.indexOf("01:") == 0 ||  
4654 - b.fcsj.indexOf("02:") == 0) {  
4655 - b_wrapTime.add(1, "day");  
4656 - }  
4657 -  
4658 - if (a_wrapTime.isBefore(b_wrapTime)) {  
4659 - return -1;  
4660 - } else if (a_wrapTime.isAfter(b_wrapTime)) {  
4661 - return 1;  
4662 - } else {  
4663 - return 0;  
4664 - }  
4665 - });  
4666 -  
4667 - // 构造路牌block车次链,按照发车顺序排序  
4668 - angular.forEach(ctrl.internalBcModel.up_bc_list_asc, function(data, index) {  
4669 - if (!ctrl.internalLpBlockModel[data.lpName]) {  
4670 - ctrl.internalLpBlockModel[data.lpName] = [];  
4671 - }  
4672 - ctrl.internalLpBlockModel[data.lpName].push({  
4673 - fcsj : data.fcsj,  
4674 - isUp : true,  
4675 - fcno : data._fcno,  
4676 - index : index  
4677 - });  
4678 - });  
4679 - angular.forEach(ctrl.internalBcModel.down_bc_list_asc, function(data, index) {  
4680 - if (!ctrl.internalLpBlockModel[data.lpName]) {  
4681 - ctrl.internalLpBlockModel[data.lpName] = [];  
4682 - }  
4683 - ctrl.internalLpBlockModel[data.lpName].push({  
4684 - fcsj : data.fcsj,  
4685 - isUp : false,  
4686 - fcno : data._fcno,  
4687 - index : index  
4688 - });  
4689 - });  
4690 - angular.forEach(ctrl.internalLpBlockModel, function(value, key) {  
4691 - value.sort(function (a, b) {  
4692 - if (a.fcno < b.fcno) {  
4693 - return -1;  
4694 - } else if (a.fcno > b.fcno) {  
4695 - return 1;  
4696 - } else {  
4697 - return 0;  
4698 - }  
4699 - });  
4700 - });  
4701 -  
4702 -  
4703 - };  
4704 -  
4705 - return {  
4706 - pre : function(scope, element, attr) {  
4707 - // TODO:  
4708 - },  
4709 - post : function(scope, element, attr) {  
4710 - // 班次html点击事件  
4711 - scope[ctrlAs].$$bcDD_Click = function(index, xlDir) {  
4712 - _fun_bcDDViewMove(scope[ctrlAs], index, xlDir);  
4713 - };  
4714 -  
4715 - // 监控ngModel绑定的外部数据源的刷新状态变化  
4716 - scope.$watch(  
4717 - function() {  
4718 - return scope[ctrlAs].ds.refreshInfos;  
4719 - },  
4720 - function(newValue, oldValue) {  
4721 - if (newValue === undefined && oldValue === undefined) {  
4722 - return;  
4723 - }  
4724 - console.log("saTimetable2 refresh");  
4725 - _fun_refreshInternalModel(scope[ctrlAs]);  
4726 - },  
4727 - true  
4728 - );  
4729 - }  
4730 - };  
4731 - }  
4732 - };  
4733 - }  
4734 - ] 4410 +/**
  4411 + * saTimetablePreview指令,时刻表预览模式视图。
  4412 + */
  4413 +angular.module("ScheduleApp").directive(
  4414 + "saTimetable2",
  4415 + [
  4416 + '$timeout',
  4417 + function($timeout) {
  4418 + return {
  4419 + restrict : 'E',
  4420 + templateUrl : '/pages/scheduleApp/module/common/dts2/ttinfotable/saTimeTablePreViewTemplate.html',
  4421 + scope : { // 独立作用域
  4422 + // 使用外部数据源,内部重新组合显示
  4423 + ds : "=ngModel"
  4424 + },
  4425 + controllerAs : "$saTimeTablePreviewCtrl",
  4426 + bindToController: true,
  4427 + controller : function() {
  4428 + var self = this;
  4429 +
  4430 + // 内部班次时刻模型
  4431 + self.internalBcModel = {
  4432 + up_qdz_name : "", // 上行起点站名字
  4433 + down_qdz_name : "", // 下行起点站名字
  4434 + up_bc_list_asc : [], // 上行班次列表(按照发车时间升序)
  4435 + down_bc_list_asc : [] // 下行班次列表(按照发车时间升序)
  4436 + };
  4437 +
  4438 + // 内部各个路牌block车次链模型
  4439 + self.internalLpBlockModel = {
  4440 + // key:路牌名字
  4441 + // value: 数组(按照发车时间排序)
  4442 + // value 数据内对象 {fcsj:发车时间,isUp:是否上行,fcno:发车顺序号,index:对应的班次列表索引}
  4443 + };
  4444 +
  4445 + // TODO:
  4446 + },
  4447 +
  4448 + /**,
  4449 + * compile阶段,angular还没有编译模版,根据需要可以修改模版dom
  4450 + * @param tElem
  4451 + * @param tAttrs
  4452 + * @returns {{pre: Function, post: Function}}
  4453 + */
  4454 + compile : function(tElem, tAttrs) {
  4455 + // 获取属性
  4456 + var $attr_name = tAttrs["name"]; // 控件的名字
  4457 + if (!$attr_name) {
  4458 + throw new Error("saTimeTablePreview指令 name属性required");
  4459 + }
  4460 +
  4461 + // 内部controlAs名字
  4462 + var ctrlAs = "$saTimeTablePreviewCtrl";
  4463 +
  4464 + // TODO:
  4465 +
  4466 + //------------------ 内部方法 --------------------//
  4467 + var date_wrap_prefix = "2000-01-01 "; // 包装日期的前缀
  4468 + var date_wrap_format = "YYYY-MM-DD HH:mm"; // 日期格式
  4469 + /**
  4470 + * 将时间包装成日期,方便计算。
  4471 + * @param timeStr 时间格式,如 06:30
  4472 + * @returns moment对象
  4473 + */
  4474 + var _fun_WrapTime = function(timeStr) {
  4475 + return moment(
  4476 + date_wrap_prefix + timeStr,
  4477 + date_wrap_format
  4478 + );
  4479 + };
  4480 +
  4481 + /**
  4482 + * 点击班次html元素(dl),触发班次移动,如下:
  4483 + * 1、点击上行班次,下一个下行班次在下行班次列表中移到中间位置
  4484 + * 2、点击下行班次,下一个上行班次在上行班次列表中移到中间位置
  4485 + * @param ctrl 内部控制器
  4486 + * @param index 班次索引
  4487 + * @param isUp 是否上行
  4488 + * @private
  4489 + */
  4490 + var _fun_bcDDViewMove = function(ctrl, index, isUp) {
  4491 + // 获取当前点击班次对象
  4492 + var oBc;
  4493 + if (isUp) {
  4494 + oBc = ctrl.internalBcModel.up_bc_list_asc[index];
  4495 + } else {
  4496 + oBc = ctrl.internalBcModel.down_bc_list_asc[index];
  4497 + }
  4498 +
  4499 + // 找出车次链中的下一个班次索引,没有就undefined
  4500 + var nextIndex = undefined;
  4501 + var nextBlockBc = undefined;
  4502 + var currentBlockBcIndex = undefined;
  4503 + angular.forEach(ctrl.internalLpBlockModel[oBc.lpName], function(data, i) {
  4504 + if (data.fcsj == oBc.fcsj) {
  4505 + currentBlockBcIndex = i;
  4506 + }
  4507 + });
  4508 + if (currentBlockBcIndex != undefined &&
  4509 + currentBlockBcIndex < (ctrl.internalLpBlockModel[oBc.lpName].length - 1)) {
  4510 + nextBlockBc = ctrl.internalLpBlockModel[oBc.lpName][currentBlockBcIndex + 1];
  4511 + nextIndex = nextBlockBc.index;
  4512 + }
  4513 + // 先删除click标记,再添加
  4514 + angular.forEach(ctrl.internalBcModel.up_bc_list_asc, function(data) {
  4515 + delete data["isClick"];
  4516 + });
  4517 + angular.forEach(ctrl.internalBcModel.down_bc_list_asc, function(data) {
  4518 + delete data["isClick"];
  4519 + });
  4520 + oBc.isClick = true;
  4521 + if (nextIndex) {
  4522 + if (nextBlockBc.isUp) {
  4523 + ctrl.internalBcModel.up_bc_list_asc[nextIndex].isClick = true;
  4524 + } else {
  4525 + ctrl.internalBcModel.down_bc_list_asc[nextIndex].isClick = true;
  4526 + }
  4527 + }
  4528 +
  4529 + // 移动,同方向不移动
  4530 + var clientHeight = angular.element("#temp").height() - 34;
  4531 + if (nextBlockBc && isUp != nextBlockBc.isUp) {
  4532 + if (isUp) { // 移动下行
  4533 + angular.element(".ttpv_table_scrollbar:eq(1)").animate(
  4534 + {scrollTop : nextIndex * 30 - clientHeight / 2}, 400);
  4535 + } else { // 移动上行
  4536 + angular.element(".ttpv_table_scrollbar:eq(0)").animate(
  4537 + {scrollTop : nextIndex * 30 - clientHeight / 2}, 400);
  4538 + }
  4539 + }
  4540 +
  4541 + };
  4542 +
  4543 + /**
  4544 + * 刷新内部数据。
  4545 + * @param ctrl 内部控制器对象($saTimeTablePreviewCtrl)
  4546 + * @private
  4547 + */
  4548 + var _fun_refreshInternalModel = function(ctrl) {
  4549 + // 初始化内部数据
  4550 + ctrl.internalBcModel = {
  4551 + up_qdz_name : "", // 上行起点站名字
  4552 + up_zdz_name : "", // 上行终点站名字
  4553 + down_qdz_name : "", // 下行起点站名字
  4554 + down_zdz_name : "", // 下行终点站名字
  4555 + up_bc_list_asc : [], // 上行班次列表(按照发车时间升序)
  4556 + down_bc_list_asc : [] // 下行班次列表(按照发车时间升序)
  4557 + };
  4558 + ctrl.internalLpBlockModel = {
  4559 +
  4560 + };
  4561 +
  4562 + // ngModel传入的数据
  4563 + var dataSource = ctrl.ds.bcList;
  4564 +
  4565 + // 构造上下行班次列表,并确定上下行的首发站点
  4566 + angular.forEach(dataSource, function(bcObj) {
  4567 + var _internalBcObj = {};
  4568 + // 构造内部班次对象
  4569 + _internalBcObj.lpName = bcObj.lp.lpName; // 路牌
  4570 + _internalBcObj.fcsj = bcObj.fcsj; // 发车时间
  4571 + _internalBcObj.ddsj = _fun_WrapTime(bcObj.fcsj).add(bcObj.bcsj, "m").format("HH:mm");
  4572 + _internalBcObj.qdzName = bcObj.qdzName; // 起点站名字
  4573 + _internalBcObj.zdzName = bcObj.zdzName; // 终点站名字
  4574 + _internalBcObj.bcType = bcObj.bcType; // 班次类型
  4575 + _internalBcObj.isTs = bcObj.isTS; // 是否停驶
  4576 + _internalBcObj.isFb = bcObj.isFB; // 是否分班
  4577 + _internalBcObj.remark = bcObj.remark; // 备注
  4578 + _internalBcObj._fcno = bcObj.fcno; // 发车顺序号
  4579 +
  4580 + if (bcObj.xlDir == "0") { // 上行
  4581 + ctrl.internalBcModel.up_bc_list_asc.push(_internalBcObj);
  4582 + // 确定起点站
  4583 + if (ctrl.internalBcModel.up_qdz_name == "") {
  4584 + if (bcObj.bcType == "normal") {
  4585 + ctrl.internalBcModel.up_qdz_name = bcObj.qdzName;
  4586 + }
  4587 + }
  4588 + // 确定终点站
  4589 + if (ctrl.internalBcModel.up_zdz_name == "") {
  4590 + if (bcObj.bcType == "normal") {
  4591 + ctrl.internalBcModel.up_zdz_name = bcObj.zdzName;
  4592 + }
  4593 + }
  4594 + }
  4595 + if (bcObj.xlDir == "1") { // 下行
  4596 + ctrl.internalBcModel.down_bc_list_asc.push(_internalBcObj);
  4597 + // 确定起点站
  4598 + if (ctrl.internalBcModel.down_qdz_name == "") {
  4599 + if (bcObj.bcType == "normal") {
  4600 + ctrl.internalBcModel.down_qdz_name = bcObj.qdzName;
  4601 + }
  4602 + }
  4603 + // 确定终点站
  4604 + if (ctrl.internalBcModel.down_zdz_name == "") {
  4605 + if (bcObj.bcType == "normal") {
  4606 + ctrl.internalBcModel.down_zdz_name = bcObj.zdzName;
  4607 + }
  4608 + }
  4609 + }
  4610 +
  4611 + });
  4612 +
  4613 + // 发车时间升序排序上行班次
  4614 + ctrl.internalBcModel.up_bc_list_asc.sort(function(a, b) {
  4615 + var a_wrapTime = _fun_WrapTime(a.fcsj);
  4616 + var b_wrapTime = _fun_WrapTime(b.fcsj);
  4617 +
  4618 + // 判定如果发车时间是以00,01,02,03开头的,说明是下一天凌晨的班次,需要加1天判定
  4619 + // TODO:以后要配合首班车的发车时间判定
  4620 + if (a.fcsj.indexOf("00:") == 0 ||
  4621 + a.fcsj.indexOf("01:") == 0 ||
  4622 + a.fcsj.indexOf("02:") == 0) {
  4623 + a_wrapTime.add(1, "day");
  4624 + }
  4625 + if (b.fcsj.indexOf("00:") == 0 ||
  4626 + b.fcsj.indexOf("01:") == 0 ||
  4627 + b.fcsj.indexOf("02:") == 0) {
  4628 + b_wrapTime.add(1, "day");
  4629 + }
  4630 +
  4631 + if (a_wrapTime.isBefore(b_wrapTime)) {
  4632 + return -1;
  4633 + } else if (a_wrapTime.isAfter(b_wrapTime)) {
  4634 + return 1;
  4635 + } else {
  4636 + return 0;
  4637 + }
  4638 +
  4639 + });
  4640 + // 发车时间升序排序下行班次
  4641 + ctrl.internalBcModel.down_bc_list_asc.sort(function(a, b) {
  4642 + var a_wrapTime = _fun_WrapTime(a.fcsj);
  4643 + var b_wrapTime = _fun_WrapTime(b.fcsj);
  4644 +
  4645 + // 判定如果发车时间是以00,01,02,03开头的,说明是下一天凌晨的班次,需要加1天判定
  4646 + // TODO:以后要配合首班车的发车时间判定
  4647 + if (a.fcsj.indexOf("00:") == 0 ||
  4648 + a.fcsj.indexOf("01:") == 0 ||
  4649 + a.fcsj.indexOf("02:") == 0) {
  4650 + a_wrapTime.add(1, "day");
  4651 + }
  4652 + if (b.fcsj.indexOf("00:") == 0 ||
  4653 + b.fcsj.indexOf("01:") == 0 ||
  4654 + b.fcsj.indexOf("02:") == 0) {
  4655 + b_wrapTime.add(1, "day");
  4656 + }
  4657 +
  4658 + if (a_wrapTime.isBefore(b_wrapTime)) {
  4659 + return -1;
  4660 + } else if (a_wrapTime.isAfter(b_wrapTime)) {
  4661 + return 1;
  4662 + } else {
  4663 + return 0;
  4664 + }
  4665 + });
  4666 +
  4667 + // 构造路牌block车次链,按照发车顺序排序
  4668 + angular.forEach(ctrl.internalBcModel.up_bc_list_asc, function(data, index) {
  4669 + if (!ctrl.internalLpBlockModel[data.lpName]) {
  4670 + ctrl.internalLpBlockModel[data.lpName] = [];
  4671 + }
  4672 + ctrl.internalLpBlockModel[data.lpName].push({
  4673 + fcsj : data.fcsj,
  4674 + isUp : true,
  4675 + fcno : data._fcno,
  4676 + index : index
  4677 + });
  4678 + });
  4679 + angular.forEach(ctrl.internalBcModel.down_bc_list_asc, function(data, index) {
  4680 + if (!ctrl.internalLpBlockModel[data.lpName]) {
  4681 + ctrl.internalLpBlockModel[data.lpName] = [];
  4682 + }
  4683 + ctrl.internalLpBlockModel[data.lpName].push({
  4684 + fcsj : data.fcsj,
  4685 + isUp : false,
  4686 + fcno : data._fcno,
  4687 + index : index
  4688 + });
  4689 + });
  4690 + angular.forEach(ctrl.internalLpBlockModel, function(value, key) {
  4691 + value.sort(function (a, b) {
  4692 + if (a.fcno < b.fcno) {
  4693 + return -1;
  4694 + } else if (a.fcno > b.fcno) {
  4695 + return 1;
  4696 + } else {
  4697 + return 0;
  4698 + }
  4699 + });
  4700 + });
  4701 +
  4702 +
  4703 + };
  4704 +
  4705 + return {
  4706 + pre : function(scope, element, attr) {
  4707 + // TODO:
  4708 + },
  4709 + post : function(scope, element, attr) {
  4710 + // 班次html点击事件
  4711 + scope[ctrlAs].$$bcDD_Click = function(index, xlDir) {
  4712 + _fun_bcDDViewMove(scope[ctrlAs], index, xlDir);
  4713 + };
  4714 +
  4715 + // 监控ngModel绑定的外部数据源的刷新状态变化
  4716 + scope.$watch(
  4717 + function() {
  4718 + return scope[ctrlAs].ds.refreshInfos;
  4719 + },
  4720 + function(newValue, oldValue) {
  4721 + if (newValue === undefined && oldValue === undefined) {
  4722 + return;
  4723 + }
  4724 + console.log("saTimetable2 refresh");
  4725 + _fun_refreshInternalModel(scope[ctrlAs]);
  4726 + },
  4727 + true
  4728 + );
  4729 + }
  4730 + };
  4731 + }
  4732 + };
  4733 + }
  4734 + ]
4735 ); 4735 );
4736 /** 4736 /**
4737 * 滚动事件控制指令。 4737 * 滚动事件控制指令。
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice-legacy.js
@@ -495,6 +495,30 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun @@ -495,6 +495,30 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun
495 } 495 }
496 ) 496 )
497 }, 497 },
  498 + ec_jsy_destroy: { // 驾驶员是否停用
  499 + template: {'jsy.id_eq': -1}, // 查询参数模版
  500 + remote: $resource( // $resource封装对象
  501 + '/eci/validate_jsy_destroy',
  502 + {},
  503 + {
  504 + do: {
  505 + method: 'GET'
  506 + }
  507 + }
  508 + )
  509 + },
  510 + ec_spy_destroy: { // 售票员是否停用
  511 + template: {'spy.id_eq': -1}, // 查询参数模版
  512 + remote: $resource( // $resource封装对象
  513 + '/eci/validate_spy_destroy',
  514 + {},
  515 + {
  516 + do: {
  517 + method: 'GET'
  518 + }
  519 + }
  520 + )
  521 + },
498 ec_jsy: { // 驾驶员不能重复配置 522 ec_jsy: { // 驾驶员不能重复配置
499 template: {'xl.id_eq': -1, 'xl.name_eq': '-1', 'jsy.id_eq': -1}, // 查询参数模版 523 template: {'xl.id_eq': -1, 'xl.name_eq': '-1', 'jsy.id_eq': -1}, // 查询参数模版
500 remote: $resource( // $resource封装对象 524 remote: $resource( // $resource封装对象
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
@@ -1396,6 +1396,30 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun @@ -1396,6 +1396,30 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;$$SearchInfoService_g&#39;, [&#39;$resource&#39;, fun
1396 } 1396 }
1397 ) 1397 )
1398 }, 1398 },
  1399 + ec_jsy_destroy: { // 驾驶员是否停用
  1400 + template: {'jsy.id_eq': -1}, // 查询参数模版
  1401 + remote: $resource( // $resource封装对象
  1402 + '/eci/validate_jsy_destroy',
  1403 + {},
  1404 + {
  1405 + do: {
  1406 + method: 'GET'
  1407 + }
  1408 + }
  1409 + )
  1410 + },
  1411 + ec_spy_destroy: { // 售票员是否停用
  1412 + template: {'spy.id_eq': -1}, // 查询参数模版
  1413 + remote: $resource( // $resource封装对象
  1414 + '/eci/validate_spy_destroy',
  1415 + {},
  1416 + {
  1417 + do: {
  1418 + method: 'GET'
  1419 + }
  1420 + }
  1421 + )
  1422 + },
1399 ec_jsy: { // 驾驶员不能重复配置 1423 ec_jsy: { // 驾驶员不能重复配置
1400 template: {'xl.id_eq': -1, 'xl.name_eq': '-1', 'jsy.id_eq': -1}, // 查询参数模版 1424 template: {'xl.id_eq': -1, 'xl.name_eq': '-1', 'jsy.id_eq': -1}, // 查询参数模版
1401 remote: $resource( // $resource封装对象 1425 remote: $resource( // $resource封装对象
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/edit.html
@@ -89,21 +89,55 @@ @@ -89,21 +89,55 @@
89 searchexp="this.name + '<' + this.workId + '>'" 89 searchexp="this.name + '<' + this.workId + '>'"
90 required > 90 required >
91 </sa-Select5> 91 </sa-Select5>
92 - <input type="hidden" name="jsy_h" ng-model="ctrl.employeeConfigForSave.jsy.id"  
93 - remote-Warn  
94 - remotewtype="ec_jsy"  
95 - remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}"  
96 - remotewmsgprop="jsy_warn"  
97 - />  
98 </div> 92 </div>
99 <!-- 隐藏块,显示验证信息 --> 93 <!-- 隐藏块,显示验证信息 -->
100 <div class="alert alert-danger well-sm" ng-show="myForm.jsy.$error.required"> 94 <div class="alert alert-danger well-sm" ng-show="myForm.jsy.$error.required">
101 驾驶员必须选择 95 驾驶员必须选择
102 </div> 96 </div>
  97 +
  98 + <!-- 重复配置 -->
  99 + <input type="hidden" name="jsy_h" ng-model="ctrl.employeeConfigForSave.jsy.id"
  100 + remote-Warn
  101 + remotewtype="ec_jsy"
  102 + remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}"
  103 + remotewmsgprop="jsy_warn"
  104 + />
103 <div class="alert alert-warning well-sm" ng-show="ctrl.jsy_warn"> 105 <div class="alert alert-warning well-sm" ng-show="ctrl.jsy_warn">
104 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> 106 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
105 {{ctrl.jsy_warn}} 107 {{ctrl.jsy_warn}}
106 </div> 108 </div>
  109 +
  110 + <!-- 是否停用 -->
  111 + <input type="hidden" name="jsy_h_destroy" ng-model="ctrl.employeeConfigForSave.jsy.id"
  112 + remote-Validation
  113 + remotevtype="ec_jsy_destroy"
  114 + remotevparam="{{ {'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}" />
  115 + <div class="alert alert-danger well-sm" ng-show="myForm.jsy_h_destroy.$error.remote">
  116 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  117 + {{$remote_msg}}
  118 + </div>
  119 +
  120 + <!-- 公司权限 -->
  121 + <input type="hidden" name="jsy_h_gs" ng-model="ctrl.employeeConfigForSave.jsy.id"
  122 + remote-Validation
  123 + remotevtype="ec_jsy_gs"
  124 + remotevparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}" />
  125 + <div class="alert alert-danger well-sm" ng-show="myForm.jsy_h_gs.$error.remote">
  126 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  127 + {{$remote_msg}}
  128 + </div>
  129 + <!-- 分公司权限 -->
  130 + <input type="hidden" name="jsy_h_fgs" ng-model="ctrl.employeeConfigForSave.jsy.id"
  131 + remote-Warn
  132 + remotewtype="ec_jsy_fgs"
  133 + remotewparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}"
  134 + remotewmsgprop="ec_jsy_fgs_warn"
  135 + />
  136 + <div class="alert alert-warning well-sm" ng-show="ctrl.ec_jsy_fgs_warn">
  137 + <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
  138 + {{ctrl.ec_jsy_fgs_warn}}
  139 + </div>
  140 +
107 </div> 141 </div>
108 142
109 <div class="form-group"> 143 <div class="form-group">
@@ -121,17 +155,51 @@ @@ -121,17 +155,51 @@
121 searchexp="this.name + '<' + this.workId + '>'" 155 searchexp="this.name + '<' + this.workId + '>'"
122 > 156 >
123 </sa-Select5> 157 </sa-Select5>
124 - <input type="hidden" name="spy_h" ng-model="ctrl.employeeConfigForSave.spy.id"  
125 - remote-Warn  
126 - remotewtype="ec_spy"  
127 - remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}"  
128 - remotewmsgprop="spy_warn"  
129 - />  
130 </div> 158 </div>
  159 +
  160 + <!-- 重复配置 -->
  161 + <input type="hidden" name="spy_h" ng-model="ctrl.employeeConfigForSave.spy.id"
  162 + remote-Warn
  163 + remotewtype="ec_spy"
  164 + remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}"
  165 + remotewmsgprop="spy_warn"
  166 + />
131 <div class="alert alert-warning well-sm" ng-show="ctrl.spy_warn"> 167 <div class="alert alert-warning well-sm" ng-show="ctrl.spy_warn">
132 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> 168 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
133 {{ctrl.spy_warn}} 169 {{ctrl.spy_warn}}
134 </div> 170 </div>
  171 +
  172 + <!-- 是否停用 -->
  173 + <input type="hidden" name="spy_h_destroy" ng-model="ctrl.employeeConfigForSave.spy.id"
  174 + remote-Validation
  175 + remotevtype="ec_spy_destroy"
  176 + remotevparam="{{ {'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}" />
  177 + <div class="alert alert-danger well-sm" ng-show="myForm.spy_h_destroy.$error.remote">
  178 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  179 + {{$remote_msg}}
  180 + </div>
  181 +
  182 + <!-- 公司权限 -->
  183 + <input type="hidden" name="spy_h_gs" ng-model="ctrl.employeeConfigForSave.spy.id"
  184 + remote-Validation
  185 + remotevtype="ec_spy_gs"
  186 + remotevparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}" />
  187 + <div class="alert alert-danger well-sm" ng-show="myForm.spy_h_gs.$error.remote">
  188 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  189 + {{$remote_msg}}
  190 + </div>
  191 + <!-- 分公司权限 -->
  192 + <input type="hidden" name="spy_h_fgs" ng-model="ctrl.employeeConfigForSave.spy.id"
  193 + remote-Warn
  194 + remotewtype="ec_spy_fgs"
  195 + remotewparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}"
  196 + remotewmsgprop="ec_spy_fgs_warn"
  197 + />
  198 + <div class="alert alert-warning well-sm" ng-show="ctrl.ec_spy_fgs_warn">
  199 + <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
  200 + {{ctrl.ec_spy_fgs_warn}}
  201 + </div>
  202 +
135 </div> 203 </div>
136 204
137 <!-- 其他form-group --> 205 <!-- 其他form-group -->
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/form.html
@@ -89,21 +89,55 @@ @@ -89,21 +89,55 @@
89 searchexp="this.name + '<' + this.workId + '>'" 89 searchexp="this.name + '<' + this.workId + '>'"
90 required > 90 required >
91 </sa-Select5> 91 </sa-Select5>
92 - <input type="hidden" name="jsy_h" ng-model="ctrl.employeeConfigForSave.jsy.id"  
93 - remote-Warn  
94 - remotewtype="ec_jsy"  
95 - remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}"  
96 - remotewmsgprop="jsy_warn"  
97 - />  
98 </div> 92 </div>
99 <!-- 隐藏块,显示验证信息 --> 93 <!-- 隐藏块,显示验证信息 -->
100 <div class="alert alert-danger well-sm" ng-show="myForm.jsy.$error.required"> 94 <div class="alert alert-danger well-sm" ng-show="myForm.jsy.$error.required">
101 驾驶员必须选择 95 驾驶员必须选择
102 </div> 96 </div>
  97 +
  98 + <!-- 重复配置 -->
  99 + <input type="hidden" name="jsy_h" ng-model="ctrl.employeeConfigForSave.jsy.id"
  100 + remote-Warn
  101 + remotewtype="ec_jsy"
  102 + remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}"
  103 + remotewmsgprop="jsy_warn"
  104 + />
103 <div class="alert alert-warning well-sm" ng-show="ctrl.jsy_warn"> 105 <div class="alert alert-warning well-sm" ng-show="ctrl.jsy_warn">
104 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> 106 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
105 {{ctrl.jsy_warn}} 107 {{ctrl.jsy_warn}}
106 </div> 108 </div>
  109 +
  110 + <!-- 是否停用 -->
  111 + <input type="hidden" name="jsy_h_destroy" ng-model="ctrl.employeeConfigForSave.jsy.id"
  112 + remote-Validation
  113 + remotevtype="ec_jsy_destroy"
  114 + remotevparam="{{ {'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}" />
  115 + <div class="alert alert-danger well-sm" ng-show="myForm.jsy_h_destroy.$error.remote">
  116 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  117 + {{$remote_msg}}
  118 + </div>
  119 +
  120 + <!-- 公司权限 -->
  121 + <input type="hidden" name="jsy_h_gs" ng-model="ctrl.employeeConfigForSave.jsy.id"
  122 + remote-Validation
  123 + remotevtype="ec_jsy_gs"
  124 + remotevparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}" />
  125 + <div class="alert alert-danger well-sm" ng-show="myForm.jsy_h_gs.$error.remote">
  126 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  127 + {{$remote_msg}}
  128 + </div>
  129 + <!-- 分公司权限 -->
  130 + <input type="hidden" name="jsy_h_fgs" ng-model="ctrl.employeeConfigForSave.jsy.id"
  131 + remote-Warn
  132 + remotewtype="ec_jsy_fgs"
  133 + remotewparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'jsy.id_eq': ctrl.employeeConfigForSave.jsy.id} | json}}"
  134 + remotewmsgprop="ec_jsy_fgs_warn"
  135 + />
  136 + <div class="alert alert-warning well-sm" ng-show="ctrl.ec_jsy_fgs_warn">
  137 + <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
  138 + {{ctrl.ec_jsy_fgs_warn}}
  139 + </div>
  140 +
107 </div> 141 </div>
108 142
109 <div class="form-group"> 143 <div class="form-group">
@@ -121,17 +155,51 @@ @@ -121,17 +155,51 @@
121 searchexp="this.name + '<' + this.workId + '>'" 155 searchexp="this.name + '<' + this.workId + '>'"
122 > 156 >
123 </sa-Select5> 157 </sa-Select5>
124 - <input type="hidden" name="spy_h" ng-model="ctrl.employeeConfigForSave.spy.id"  
125 - remote-Warn  
126 - remotewtype="ec_spy"  
127 - remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}"  
128 - remotewmsgprop="spy_warn"  
129 - />  
130 </div> 158 </div>
  159 +
  160 + <!-- 重复配置 -->
  161 + <input type="hidden" name="spy_h" ng-model="ctrl.employeeConfigForSave.spy.id"
  162 + remote-Warn
  163 + remotewtype="ec_spy"
  164 + remotewparam="{{ {'id_eq': ctrl.employeeConfigForSave.id, 'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}"
  165 + remotewmsgprop="spy_warn"
  166 + />
131 <div class="alert alert-warning well-sm" ng-show="ctrl.spy_warn"> 167 <div class="alert alert-warning well-sm" ng-show="ctrl.spy_warn">
132 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> 168 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
133 {{ctrl.spy_warn}} 169 {{ctrl.spy_warn}}
134 </div> 170 </div>
  171 +
  172 + <!-- 是否停用 -->
  173 + <input type="hidden" name="spy_h_destroy" ng-model="ctrl.employeeConfigForSave.spy.id"
  174 + remote-Validation
  175 + remotevtype="ec_spy_destroy"
  176 + remotevparam="{{ {'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}" />
  177 + <div class="alert alert-danger well-sm" ng-show="myForm.spy_h_destroy.$error.remote">
  178 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  179 + {{$remote_msg}}
  180 + </div>
  181 +
  182 + <!-- 公司权限 -->
  183 + <input type="hidden" name="spy_h_gs" ng-model="ctrl.employeeConfigForSave.spy.id"
  184 + remote-Validation
  185 + remotevtype="ec_spy_gs"
  186 + remotevparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}" />
  187 + <div class="alert alert-danger well-sm" ng-show="myForm.spy_h_gs.$error.remote">
  188 + <i class="fa fa-times-circle" aria-hidden="true"></i>
  189 + {{$remote_msg}}
  190 + </div>
  191 + <!-- 分公司权限 -->
  192 + <input type="hidden" name="spy_h_fgs" ng-model="ctrl.employeeConfigForSave.spy.id"
  193 + remote-Warn
  194 + remotewtype="ec_spy_fgs"
  195 + remotewparam="{{ {'xl.id_eq': ctrl.employeeConfigForSave.xl.id, 'xl.name_eq': ctrl.employeeConfigForSave.xl.name, 'spy.id_eq': ctrl.employeeConfigForSave.spy.id} | json}}"
  196 + remotewmsgprop="ec_spy_fgs_warn"
  197 + />
  198 + <div class="alert alert-warning well-sm" ng-show="ctrl.ec_spy_fgs_warn">
  199 + <i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
  200 + {{ctrl.ec_spy_fgs_warn}}
  201 + </div>
  202 +
135 </div> 203 </div>
136 204
137 <!-- 其他form-group --> 205 <!-- 其他form-group -->
src/main/resources/static/pages/scheduleApp/module/core/employeeConfig/list.html
@@ -97,14 +97,14 @@ @@ -97,14 +97,14 @@
97 <td> 97 <td>
98 <span ng-bind="info.jsy.jobCodeori"></span> 98 <span ng-bind="info.jsy.jobCodeori"></span>
99 </td> 99 </td>
100 - <td>  
101 - <span ng-bind="info.jsy.personnelName"></span> 100 + <td ng-class="{danger: info.jsy.destroy == 1}">
  101 + <span ng-bind="info.jsy.personnelName + (info.jsy.destroy == 1 ? '(已停用)' : '')"></span>
102 </td> 102 </td>
103 <td> 103 <td>
104 <span ng-bind="info.spy.jobCodeori"></span> 104 <span ng-bind="info.spy.jobCodeori"></span>
105 </td> 105 </td>
106 <td> 106 <td>
107 - <span ng-bind="info.spy.personnelName"></span> 107 + <span ng-bind="info.spy.personnelName + (info.spy.destroy == 1 ? '(已停用)' : '')"></span>
108 </td> 108 </td>
109 <td> 109 <td>
110 <span class="glyphicon glyphicon-ok" ng-if="info.isCancel == '0'"></span> 110 <span class="glyphicon glyphicon-ok" ng-if="info.isCancel == '0'"></span>