Commit fb141b4f41bafe64bb97ab9f4d53edf8a781c138

Authored by 娄高锋
2 parents abf7ae56 c3bd7a07

Merge branch 'pudong_jdk8' of http://101.95.0.106:8888/panzhaov5/bsth_control into pudong_jdk8

src/main/java/com/bsth/controller/realcontrol/AdminUtilsController.java
@@ -6,6 +6,7 @@ import java.text.SimpleDateFormat; @@ -6,6 +6,7 @@ import java.text.SimpleDateFormat;
6 import java.util.*; 6 import java.util.*;
7 7
8 import com.bsth.service.schedule.utils.SpringUtils; 8 import com.bsth.service.schedule.utils.SpringUtils;
  9 +import com.bsth.util.MailUtils;
9 import com.fasterxml.jackson.core.JsonProcessingException; 10 import com.fasterxml.jackson.core.JsonProcessingException;
10 import com.fasterxml.jackson.databind.MapperFeature; 11 import com.fasterxml.jackson.databind.MapperFeature;
11 import com.fasterxml.jackson.databind.ObjectMapper; 12 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -44,6 +45,9 @@ public class AdminUtilsController { @@ -44,6 +45,9 @@ public class AdminUtilsController {
44 Logger logger = LoggerFactory.getLogger(this.getClass()); 45 Logger logger = LoggerFactory.getLogger(this.getClass());
45 46
46 @Autowired 47 @Autowired
  48 + private ObjectMapper objectMapper;
  49 +
  50 + @Autowired
47 DayOfSchedule dayOfSchedule; 51 DayOfSchedule dayOfSchedule;
48 52
49 @Autowired 53 @Autowired
@@ -58,6 +62,9 @@ public class AdminUtilsController { @@ -58,6 +62,9 @@ public class AdminUtilsController {
58 @Autowired 62 @Autowired
59 PilotReport pilotReport; 63 PilotReport pilotReport;
60 64
  65 + @Autowired
  66 + MailUtils mailUtils;
  67 +
61 /** 68 /**
62 * 出现重复班次的车辆 69 * 出现重复班次的车辆
63 * 70 *
@@ -258,4 +265,31 @@ public class AdminUtilsController { @@ -258,4 +265,31 @@ public class AdminUtilsController {
258 265
259 return "error"; 266 return "error";
260 } 267 }
  268 +
  269 +
  270 +
  271 + @RequestMapping("/changeEmail")
  272 + public String changeEmail(@RequestParam String email) {
  273 + Map<String, Object> result = new HashMap<>();
  274 + try {
  275 + mailUtils.setEmailSendToAddress(email);
  276 + return "success";
  277 + } catch (Exception e) {
  278 + e.printStackTrace();
  279 + }
  280 +
  281 + return "error";
  282 + }
  283 +
  284 + @RequestMapping("/viewEmail")
  285 + public String viewEmail() {
  286 + Map<String, Object> result = new HashMap<>();
  287 + try {
  288 + return mailUtils.getEmailSendToAddress();
  289 + } catch (Exception e) {
  290 + e.printStackTrace();
  291 + }
  292 +
  293 + return "error";
  294 + }
261 } 295 }
262 \ No newline at end of file 296 \ No newline at end of file
src/main/java/com/bsth/service/impl/StationServiceImpl.java
@@ -1607,9 +1607,9 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem @@ -1607,9 +1607,9 @@ public class StationServiceImpl extends BaseServiceImpl&lt;Station, Integer&gt; implem
1607 // 在60m内认为是同一个站点 1607 // 在60m内认为是同一个站点
1608 Circle circle = new Circle(center, 60); 1608 Circle circle = new Circle(center, 60);
1609 // 匹配到了用数据库中的点替换 1609 // 匹配到了用数据库中的点替换
1610 - if (GeoUtils.isPointInCircle(point, circle)) { 1610 + if (GeoUtils.isPointInCircle(point, circle) && !"stop".equals(s.getStationName().toLowerCase())) {
1611 map.put("name", s.getStationName().toString()); 1611 map.put("name", s.getStationName().toString());
1612 - // 匹配到站点后用这个站点的名字,但是使用gps点作为中心点 1612 +// 匹配到站点后用这个站点的名字,但是使用gps点作为中心点
1613 // map.put("potion_lng", points[0]); 1613 // map.put("potion_lng", points[0]);
1614 // map.put("potion_lat", points[1]); 1614 // map.put("potion_lat", points[1]);
1615 map.put("potion_lng", lon); 1615 map.put("potion_lng", lon);
src/main/java/com/bsth/service/sys/impl/PwdGenerator.java 0 → 100644
  1 +package com.bsth.service.sys.impl;
  2 +
  3 +import java.util.Random;
  4 +
  5 +public class PwdGenerator {
  6 + private static final String SPECIAL_CHARS = "!@#$%^&*_=+-/";
  7 +
  8 + /**
  9 + * 查找一个char数组中还没有填充字符的位置
  10 + */
  11 + private static int nextIndex(char[] chars, Random rnd) {
  12 + int index = rnd.nextInt(chars.length);
  13 + while (chars[index] != 0) {
  14 + index = rnd.nextInt(chars.length);
  15 + }
  16 + return index;
  17 + }
  18 +
  19 + /**
  20 + * 返回一个随机的特殊字符
  21 + */
  22 + private static char nextSpecialChar(Random rnd) {
  23 + return SPECIAL_CHARS.charAt(rnd.nextInt(SPECIAL_CHARS.length()));
  24 + }
  25 +
  26 + /**
  27 + * 返回一个随机的大写字母
  28 + */
  29 + private static char nextUpperLetter(Random rnd) {
  30 + return (char) ('A' + rnd.nextInt(26));
  31 + }
  32 +
  33 + /**
  34 + * 返回一个随机的小写字母
  35 + */
  36 + private static char nextLowerLetter(Random rnd) {
  37 + return (char) ('a' + rnd.nextInt(26));
  38 + }
  39 +
  40 + /**
  41 + * 返回一个随机的数字
  42 + */
  43 + private static char nextNumLetter(Random rnd) {
  44 + return (char) ('0' + rnd.nextInt(10));
  45 + }
  46 +
  47 + /**
  48 + * 返回一个随机的字符
  49 + */
  50 + private static char nextChar(Random rnd) {
  51 + switch (rnd.nextInt(4)) {
  52 + case 0:
  53 + return (char) ('a' + rnd.nextInt(26));
  54 + case 1:
  55 + return (char) ('A' + rnd.nextInt(26));
  56 + case 2:
  57 + return (char) ('0' + rnd.nextInt(10));
  58 + default:
  59 + return SPECIAL_CHARS.charAt(rnd.nextInt(SPECIAL_CHARS.length()));
  60 + }
  61 + }
  62 +
  63 + /**
  64 + * 生成指定位数的随机数
  65 + */
  66 + public static String randomPassword(int length) {
  67 + if(length < 3){
  68 + return "";
  69 + }
  70 + char[] chars = new char[length];
  71 + Random rnd = new Random();
  72 +
  73 + //1. 至少生成一个大写字母、小写字母、特殊字符、数字
  74 + chars[nextIndex(chars, rnd)] = nextUpperLetter(rnd);
  75 + chars[nextIndex(chars, rnd)] = nextLowerLetter(rnd);
  76 + chars[nextIndex(chars, rnd)] = nextNumLetter(rnd);
  77 +
  78 + //2. 填补其他位置的字符
  79 + for (int i = 0; i < length; i++) {
  80 + if (chars[i] == 0) {
  81 + chars[i] = nextChar(rnd);
  82 + }
  83 + }
  84 +
  85 + //3. 返回结果
  86 + return new String(chars);
  87 + }
  88 +
  89 +
  90 + /**
  91 + * 测试代码
  92 + */
  93 + public static void main(String[] args) {
  94 + for (int i = 0; i < 10; i++) {
  95 + System.out.println(randomPassword(16));
  96 + }
  97 +
  98 + }
  99 +
  100 +}
src/main/java/com/bsth/service/sys/impl/SysUserServiceImpl.java
@@ -2,6 +2,8 @@ package com.bsth.service.sys.impl; @@ -2,6 +2,8 @@ package com.bsth.service.sys.impl;
2 2
3 import com.bsth.common.ResponseCode; 3 import com.bsth.common.ResponseCode;
4 import com.bsth.controller.sys.util.RSAUtils; 4 import com.bsth.controller.sys.util.RSAUtils;
  5 +import com.bsth.email.SendEmailController;
  6 +import com.bsth.email.entity.EmailBean;
5 import com.bsth.entity.sys.Role; 7 import com.bsth.entity.sys.Role;
6 import com.bsth.entity.sys.SysUser; 8 import com.bsth.entity.sys.SysUser;
7 import com.bsth.repository.sys.SysUserRepository; 9 import com.bsth.repository.sys.SysUserRepository;
@@ -9,6 +11,8 @@ import com.bsth.security.util.SecurityUtils; @@ -9,6 +11,8 @@ import com.bsth.security.util.SecurityUtils;
9 import com.bsth.service.impl.BaseServiceImpl; 11 import com.bsth.service.impl.BaseServiceImpl;
10 import com.bsth.service.sys.RoleService; 12 import com.bsth.service.sys.RoleService;
11 import com.bsth.service.sys.SysUserService; 13 import com.bsth.service.sys.SysUserService;
  14 +import com.bsth.util.IpUtils;
  15 +import com.bsth.util.MailUtils;
12 import com.google.gson.Gson; 16 import com.google.gson.Gson;
13 import com.google.gson.reflect.TypeToken; 17 import com.google.gson.reflect.TypeToken;
14 import org.slf4j.Logger; 18 import org.slf4j.Logger;
@@ -33,6 +37,10 @@ public class SysUserServiceImpl extends BaseServiceImpl&lt;SysUser, Integer&gt; implem @@ -33,6 +37,10 @@ public class SysUserServiceImpl extends BaseServiceImpl&lt;SysUser, Integer&gt; implem
33 @Autowired 37 @Autowired
34 RoleService roleService; 38 RoleService roleService;
35 39
  40 + // 发送邮件
  41 + @Autowired
  42 + private MailUtils mailUtils;
  43 +
36 Logger logger = LoggerFactory.getLogger(this.getClass()); 44 Logger logger = LoggerFactory.getLogger(this.getClass());
37 45
38 @Override 46 @Override
@@ -166,7 +174,14 @@ public class SysUserServiceImpl extends BaseServiceImpl&lt;SysUser, Integer&gt; implem @@ -166,7 +174,14 @@ public class SysUserServiceImpl extends BaseServiceImpl&lt;SysUser, Integer&gt; implem
166 Legality = true; 174 Legality = true;
167 } 175 }
168 if(Legality){ 176 if(Legality){
169 - sysUserRepository.changePWD(id,new BCryptPasswordEncoder(4).encode("123456")); 177 + String pwd = PwdGenerator.randomPassword(16);
  178 + sysUserRepository.changePWD(id,new BCryptPasswordEncoder(4).encode(pwd));
  179 + //发送邮件
  180 + EmailBean mail = new EmailBean();
  181 + mail.setSubject(IpUtils.getLocalIpAddress() +":密码重置");
  182 + mail.setContent(pwd);
  183 + mailUtils.sendMail(mail);
  184 + logger.info("setLD-sendMail:邮件发送成功!");
170 rs.put("status", ResponseCode.SUCCESS); 185 rs.put("status", ResponseCode.SUCCESS);
171 rs.put("msg", "密码重置成功!"); 186 rs.put("msg", "密码重置成功!");
172 }else { 187 }else {
src/main/java/com/bsth/util/MailUtils.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import com.bsth.email.SimpleMailSender;
  4 +import com.bsth.email.entity.EmailBean;
  5 +import org.springframework.beans.factory.annotation.Value;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * @author Hill
  12 + */
  13 +@Component
  14 +public class MailUtils {
  15 +
  16 + @Value("${admin.mail}")
  17 + private String emailSendToAddress;
  18 +
  19 + private Tools tools = new Tools("mailbox.properties");
  20 +
  21 + private SimpleMailSender sms = new SimpleMailSender(tools.getValue("username"),tools.getValue("password"));
  22 +
  23 + public String getEmailSendToAddress() {
  24 + return emailSendToAddress;
  25 + }
  26 +
  27 + public void setEmailSendToAddress(String emailSendToAddress) {
  28 + this.emailSendToAddress = emailSendToAddress;
  29 + }
  30 +
  31 + /**
  32 + * recipients
  33 + * 收件人集合
  34 + * mail
  35 + * 邮件
  36 + */
  37 + public int sendMail(List<String> recipients, EmailBean mail){
  38 + try {
  39 + for (String recipient : recipients) {
  40 + sms.send(recipient, mail.getSubject(),mail.getContent());
  41 + }
  42 + } catch (Exception e) {
  43 + e.printStackTrace();
  44 + return -1;
  45 + }
  46 + return 1;
  47 + }
  48 +
  49 + /**
  50 + * recipient
  51 + * 收件人
  52 + * mail
  53 + * 邮件
  54 + */
  55 + public int sendMail(String recipient,EmailBean mail){
  56 + try {
  57 + sms.send(recipient, mail.getSubject(),mail.getContent());
  58 + } catch (Exception e) {
  59 + e.printStackTrace();
  60 + return -1;
  61 + }
  62 + return 1;
  63 + }
  64 +
  65 + public int sendMail(EmailBean mail){
  66 + return sendMail(emailSendToAddress, mail);
  67 + }
  68 +}
src/main/resources/application-dev.properties
@@ -52,4 +52,6 @@ ms.fl.generate=true @@ -52,4 +52,6 @@ ms.fl.generate=true
52 ## dsm ack interface 52 ## dsm ack interface
53 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm? 53 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?
54 ## cp ack interface 54 ## cp ack interface
55 -cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/  
56 \ No newline at end of file 55 \ No newline at end of file
  56 +cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/
  57 +## admin mail
  58 +admin.mail= 3090342880@qq.com
57 \ No newline at end of file 59 \ No newline at end of file
src/main/resources/application-prod.properties
@@ -54,4 +54,6 @@ ms.fl.generate=true @@ -54,4 +54,6 @@ ms.fl.generate=true
54 ## dsm ack interface 54 ## dsm ack interface
55 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm? 55 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?
56 ## cp ack interface 56 ## cp ack interface
57 -cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/  
58 \ No newline at end of file 57 \ No newline at end of file
  58 +cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/
  59 +## admin mail
  60 +admin.mail= 3090342880@qq.com
59 \ No newline at end of file 61 \ No newline at end of file
src/main/resources/application-test.properties
@@ -45,4 +45,6 @@ ms.fl.generate=false @@ -45,4 +45,6 @@ ms.fl.generate=false
45 ## dsm ack interface 45 ## dsm ack interface
46 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm? 46 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?
47 ## cp ack interface 47 ## cp ack interface
48 -cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/  
49 \ No newline at end of file 48 \ No newline at end of file
  49 +cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/
  50 +## admin mail
  51 +admin.mail= 3090342880@qq.com
50 \ No newline at end of file 52 \ No newline at end of file
src/main/resources/static/pages/base/line/add.html
@@ -383,7 +383,7 @@ @@ -383,7 +383,7 @@
383 383
384 <!-- 线路票价 START --> 384 <!-- 线路票价 START -->
385 <div class="col-md-6"> 385 <div class="col-md-6">
386 - <label class="control-label col-md-5"> 票价&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label> 386 + <label class="control-label col-md-5"> <span class="required"> * </span>票价&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</label>
387 <div class="col-md-4"> 387 <div class="col-md-4">
388 <input type="text" class="form-control" name="ticketPrice" id="ticketPriceInput" 388 <input type="text" class="form-control" name="ticketPrice" id="ticketPriceInput"
389 placeholder="票价"> 389 placeholder="票价">
src/main/resources/static/pages/base/line/editRoute.html
@@ -221,6 +221,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,transGPS,editRoute,m @@ -221,6 +221,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,transGPS,editRoute,m
221 221
222 }, 222 },
223 submitHandler : function(f) { 223 submitHandler : function(f) {
  224 + debugger;
224 // 隐藏弹出层 225 // 隐藏弹出层
225 $('#edit_route_mobal').modal('hide'); 226 $('#edit_route_mobal').modal('hide');
226 // 获取线路对象 227 // 获取线路对象
@@ -324,17 +325,21 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,transGPS,editRoute,m @@ -324,17 +325,21 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,transGPS,editRoute,m
324 var tempStr = paramsStationsArray[k].split('\t'); 325 var tempStr = paramsStationsArray[k].split('\t');
325 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]); 326 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]);
326 var point = {lng:tempPoint.lng, lat:tempPoint.lat}; 327 var point = {lng:tempPoint.lng, lat:tempPoint.lat};
  328 +
  329 + sectionList[k] = point;
  330 +
327 if(tempStr.length < 4){ 331 if(tempStr.length < 4){
328 - sectionList[k] = point;  
329 isPush = true; 332 isPush = true;
330 }else { 333 }else {
331 if(isPush) { 334 if(isPush) {
332 - sectionList[k] = point;  
333 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}}); 335 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}});
  336 + } else {
  337 + sectionList[k] = point;
334 } 338 }
335 isPush = false; 339 isPush = false;
336 } 340 }
337 } 341 }
  342 +
338 for(var i = 0 ;i<sectionList.length;i++) { 343 for(var i = 0 ;i<sectionList.length;i++) {
339 if(sectionList[i] == "" || isNaN(sectionList[i].lng) || typeof(sectionList[i]) == "undefined" || sectionList[i] == null) { 344 if(sectionList[i] == "" || isNaN(sectionList[i].lng) || typeof(sectionList[i]) == "undefined" || sectionList[i] == null) {
340 sectionList.splice(i,1);//删除数组中下表i-i+1之间的值 345 sectionList.splice(i,1);//删除数组中下表i-i+1之间的值
src/main/resources/static/pages/base/line/js/line-add-form.js
1 -/**  
2 - * @description TODO(线路信息添加片段JS模块)  
3 - *  
4 - * @author bsth@lq  
5 - *  
6 - * @date 二〇一六年十月十八日 13:31:58  
7 - *  
8 - */  
9 -  
10 -$(function(){  
11 - /** 获取线路编码 @param cb <回调函数> */  
12 - /*function getLineCode(cb) {  
13 - *//** get请求获取线路编码。返回线路编码值 *//*  
14 - $.get('/line/getLineCode',function(lineCode){  
15 - return cb && cb(lineCode);  
16 - });  
17 - }*/  
18 - /** 填充分公司下拉框选择值 */  
19 - function setbrancheCompanySelectOptions(){  
20 - // 获取公司下拉框选择值  
21 - var businessCode = $('#companySelect').val();  
22 - // 分公司下拉框options属性值  
23 - var options = '<option value="">-- 请选择分公司 --</option>';  
24 - // 如果公司选择为空则分公司为空 ; 否则查询出所属公司下的分公司名称和相应分公司代码  
25 - if(businessCode == null || businessCode ==''){  
26 - // 填充分公司下拉框options  
27 - $('#brancheCompanySelect').html(options);  
28 - } else {  
29 - // 查询出所属公司下的分公司名称和相应分公司代码  
30 - $get('/business/all', {upCode_eq: businessCode}, function(array){  
31 - // 遍历array  
32 - $.each(array, function(i,d){  
33 - options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';  
34 - });  
35 -  
36 - // 填充分公司下拉框options  
37 - $('#brancheCompanySelect').html(options);  
38 - });  
39 - }  
40 - }  
41 - /** 根据线路名称值设置英文名称值和线路简称 */  
42 - function setPinYin(){  
43 - /** 获取线路名称值 */  
44 - var val = $('#nameInput').val();  
45 - /** 汉字转换为拼音 设置英文名称值 */  
46 - $('#esInput').val(pinyin.getFullChars(val));  
47 - /** 汉字转换为拼音将每一个字的拼音的首字母提取出来并大写 设置线路简称值 */  
48 - $('#shortNameInput').val(pinyin.getCamelChars(val));  
49 - }  
50 -  
51 - /** 获取线路编码元素并设值 @param 匿名函数 *//*  
52 - getLineCode(function(result){  
53 - // 设置线路编码值  
54 - $('#lineCodeInput').val(result);  
55 - })*/  
56 - /** 输入线路名称,自动生成英文名称和线路简称 */  
57 - $('#nameInput').on('keyup', setPinYin);  
58 - /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */  
59 - $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'});  
60 - /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
61 - $('#startStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});  
62 - /** 起始站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
63 - $('#endTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});  
64 - /** 终点站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
65 - $('#endStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});  
66 - /** 终点站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
67 - $('#endStationEndTimeInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});  
68 - /** get请求获取公司表数据并填充公司下拉框选择值 */  
69 - $get('/business/all', {upCode_eq: '88'}, function(array){  
70 - /** 公司下拉options属性值 */  
71 - var options = '<option value="">-- 请选择公司 --</option>';  
72 - /** 遍历array */  
73 - $.each(array, function(i,d){  
74 - options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';  
75 - });  
76 - /** 填充公司下拉框options,并添加公司下拉框值改变事件setbrancheCompanySelectOptions */  
77 - $('#companySelect').html(options).on('change', setbrancheCompanySelectOptions);  
78 - });  
79 -  
80 - /** 填充分公司下拉框 */  
81 - setbrancheCompanySelectOptions();  
82 - // 定义表单  
83 - var form = $('#line_add_form');  
84 - // 定义表单异常  
85 - var error = $('.alert-danger',form);  
86 - // 表单验证  
87 - form.validate({  
88 - // 错误提示元素span对象  
89 - errorElement : 'span',  
90 - // 错误提示元素class名称  
91 - errorClass : 'help-block help-block-error',  
92 - // 验证错误获取焦点  
93 - focusInvalid : true,  
94 - // 需要验证的表单元素  
95 - rules : {  
96 - 'name' : {required : true,maxlength: 30},// 线路名称 必填项、 最大长度.  
97 - 'lineCode' : {required : true,maxlength: 6,digits:true ,isLineCode:true,  
98 - remote:{type: 'GET',  
99 - url: '/line/lineCodeVerification',  
100 - cache:false,  
101 - async:false,  
102 - data:{'lineCode':function(){ return $("#lineCodeInput").val();}}  
103 - }},// 线路编码 必填项、最大长度.  
104 - 'company' : {required : true,maxlength: 30},// 所属公司 必填项、最大长度.  
105 - 'brancheCompany' : {required : true,maxlength: 30},// 所属分公司 必填项、最大长度.  
106 - 'level' : {required : true,maxlength: 30},// 线路等级 必填项、最大长度.  
107 - 'nature' : {required : true,maxlength: 30},// 线路性质 必填项、最大长度.  
108 - 'startStationName' : {required : true,maxlength: 30},// 起始站名称 必填项、最大长度.  
109 - 'endStationName' : {required : true,maxlength: 30},// 终点站名称 必填项、最大长度.  
110 - 'startStationFirstTime' : {required : true,maxlength: 30},// 起始站首班时间 必填项、最大长度.  
111 - 'StartStationEndTime' : {required : true,maxlength: 30},// 起始站末班时间 必填项、最大长度.  
112 - 'endStationFirstTime' : {required : true,maxlength: 30},// 终点站首班时间 必填项、最大长度.  
113 - 'endStationEndTime' : {required : true,maxlength: 30},// 终点站末班时间 必填项、最大长度.  
114 - 'linePlayType' : {required : true,maxlength: 30},// 线路规划类型 <0:双向;1:环线> 必填项、最大长度.  
115 - 'openDate' : {date : true,dateISO:true},// 开辟日期 正确格式的日期(日期校验 ie6 出错,慎用。)必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。  
116 - 'es' : {maxlength: 30},// 英文名称 最大长度.  
117 - 'shortName' : {maxlength: 30},// 线路简称 最大长度.  
118 - 'shanghaiLinecode' : {maxlength: 30},// 上海市线路编码 最大长度.  
119 - 'eqLinecode' : {maxlength: 30},// 设备线路编码 最大长度.  
120 - 'startPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 起始站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 最大长度  
121 - 'endPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 终点站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 、最大长度  
122 - 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度.  
123 - 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度.  
124 - 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度.  
125 - 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。  
126 - 'descriptions' : {maxlength: 200},// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。  
127 - 'region' : {required : true}// 线路区域必选  
128 - },  
129 - messages:{  
130 - 'lineCode':{  
131 - remote: '此线路编码已存在!'  
132 - }  
133 - },  
134 - /**  
135 - * 类型:Callback。当未通过验证的表单提交时,可以在该回调函数中处理一些事情。  
136 - *  
137 - * 参数:该回调函数有两个参数:第一个为一个事件对象,第二个为验证器(validator)  
138 - */  
139 - invalidHandler : function(event, validator) {  
140 -  
141 - // 显示表单未通过提示信息  
142 - error.show();  
143 -  
144 - // 把提示信息放到指定的位置。  
145 - App.scrollTo(error, -200);  
146 - },  
147 -  
148 - /**  
149 - * 类型:Callback。  
150 - *  
151 - * 默认:添加errorClass("has-error")到表单元素。将未通过验证的表单元素设置高亮。  
152 - */  
153 - highlight : function(element) {  
154 -  
155 - // 添加errorClass("has-error")到表单元素  
156 - $(element).closest('.form-group').addClass('has-error');  
157 -  
158 - },  
159 -  
160 - /**  
161 - * 类型:Callback。  
162 - *  
163 - * 默认:移除errorClass("has-error")。与highlight操作相反  
164 - */  
165 - unhighlight : function(element) {  
166 -  
167 - // 移除errorClass("has-error")  
168 - $(element).closest('.form-group').removeClass('has-error');  
169 -  
170 - },  
171 -  
172 - /**  
173 - * 类型:String,Callback。  
174 - *  
175 - * 如果指定它,当验证通过时显示一个消息。  
176 - *  
177 - * 如果是String类型的,则添加该样式到标签中;  
178 - *  
179 - * 如果是一个回调函数,则将标签作为其唯一的参数。  
180 - */  
181 - success : function(label) {  
182 -  
183 - // 当验证通过时,移除errorClass("has-error")  
184 - label.closest('.form-group').removeClass('has-error');  
185 -  
186 - },  
187 -  
188 - /**  
189 - * 类型:Callback。  
190 - *  
191 - * 默认:default (native) form submit;当表单通过验证,提交表单。回调函数有个默认参数form  
192 - */  
193 - submitHandler : function(f) {  
194 -  
195 - // 隐藏错误提示  
196 - error.hide();  
197 - // 表单序列化  
198 - var params = form.serializeJSON();  
199 - submit();  
200 -  
201 - // 查询线路编码的顺延号  
202 - /*$get('/line/all', {lineCode_eq: params.lineCode},function(lineCode){  
203 -  
204 - // 定义返回值的长度  
205 - var len = lineCode.length;  
206 -  
207 - // 如果大于零,则已存在录入的线路编码;否则不存在  
208 - if(len > 0) {  
209 -  
210 - // 定义已有的线路编码  
211 - var oldCode = params.lineCode;  
212 -  
213 - // 自动获取线路编码  
214 - getLineCode(function(result) {  
215 -  
216 - // 重新设置提交参数线路编码值  
217 - params.lineCode = result;  
218 -  
219 - // 弹出选择框;确认则提交;取消则返回  
220 - layer.confirm('线路编码【'+oldCode+'】已存在!自动顺延为如下:<br>线路编码:'+result, {  
221 - btn : [ '确认提示并提交', '取消' ]  
222 - }, submit);  
223 -  
224 - });  
225 - layer.open({  
226 - title: '消息提示'  
227 - ,content: '线路编码【'+params.lineCode+'】已存在,请重新输入编码!'  
228 - });  
229 - } else {  
230 -  
231 - // 提交  
232 - submit();  
233 -  
234 - }  
235 - });*/  
236 -  
237 -  
238 - // 提交  
239 - function submit() {  
240 -  
241 - // 防止用户多次提交  
242 - $("#submintBtn").addClass("disabled");  
243 -  
244 - // 添加数据  
245 - $post('/line', params, function(result) {  
246 - // 如果返回结果不为空  
247 - if(result){  
248 -  
249 - // 返回状态码为"SUCCESS" ,则添加成功;返回状态码为"ERROR" ,则添加失败  
250 - if(result.status=='SUCCESS') {  
251 -  
252 - // 弹出添加成功提示消息  
253 - layer.msg('添加成功,并已自动为您生成线路原始版本,可以在线路版本信息下查看!', {time: 7000});  
254 -  
255 - } else if(result.status=='ERROR') {  
256 -  
257 - // 弹出添加失败提示消息  
258 - layer.msg('添加失败...');  
259 -  
260 - }  
261 - }  
262 -  
263 - // 返回list.html页面  
264 - loadPage('list.html');  
265 - });  
266 - }  
267 - }  
268 - });  
269 -  
270 - // 线路编码不能0开头  
271 - $.validator.addMethod("isLineCode", function(value,element) {  
272 - // 线路编码正则表达式  
273 - var lineCode = /^([1-9])/;  
274 - return lineCode.test(value);  
275 - }, "线路编码不能以0开头");  
276 -  
277 - // 联系电话(手机/电话皆可)验证  
278 - $.validator.addMethod("isPhone", function(value,element) {  
279 - // 长度  
280 - var length = value.length;  
281 - // 手机正则表达式  
282 - var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;  
283 - // 固定电话正则表达式  
284 - var tel = /^\d{3,4}-?\d{7,9}$/;  
285 - return this.optional(element) || (tel.test(value) || mobile.test(value));  
286 - }, "请正确填写您的联系电话"); 1 +/**
  2 + * @description TODO(线路信息添加片段JS模块)
  3 + *
  4 + * @author bsth@lq
  5 + *
  6 + * @date 二〇一六年十月十八日 13:31:58
  7 + *
  8 + */
  9 +
  10 +$(function(){
  11 + /** 获取线路编码 @param cb <回调函数> */
  12 + /*function getLineCode(cb) {
  13 + *//** get请求获取线路编码。返回线路编码值 *//*
  14 + $.get('/line/getLineCode',function(lineCode){
  15 + return cb && cb(lineCode);
  16 + });
  17 + }*/
  18 + /** 填充分公司下拉框选择值 */
  19 + function setbrancheCompanySelectOptions(){
  20 + // 获取公司下拉框选择值
  21 + var businessCode = $('#companySelect').val();
  22 + // 分公司下拉框options属性值
  23 + var options = '<option value="">-- 请选择分公司 --</option>';
  24 + // 如果公司选择为空则分公司为空 ; 否则查询出所属公司下的分公司名称和相应分公司代码
  25 + if(businessCode == null || businessCode ==''){
  26 + // 填充分公司下拉框options
  27 + $('#brancheCompanySelect').html(options);
  28 + } else {
  29 + // 查询出所属公司下的分公司名称和相应分公司代码
  30 + $get('/business/all', {upCode_eq: businessCode}, function(array){
  31 + // 遍历array
  32 + $.each(array, function(i,d){
  33 + options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';
  34 + });
  35 +
  36 + // 填充分公司下拉框options
  37 + $('#brancheCompanySelect').html(options);
  38 + });
  39 + }
  40 + }
  41 + /** 根据线路名称值设置英文名称值和线路简称 */
  42 + function setPinYin(){
  43 + /** 获取线路名称值 */
  44 + var val = $('#nameInput').val();
  45 + /** 汉字转换为拼音 设置英文名称值 */
  46 + $('#esInput').val(pinyin.getFullChars(val));
  47 + /** 汉字转换为拼音将每一个字的拼音的首字母提取出来并大写 设置线路简称值 */
  48 + $('#shortNameInput').val(pinyin.getCamelChars(val));
  49 + }
  50 +
  51 + /** 获取线路编码元素并设值 @param 匿名函数 *//*
  52 + getLineCode(function(result){
  53 + // 设置线路编码值
  54 + $('#lineCodeInput').val(result);
  55 + })*/
  56 + /** 输入线路名称,自动生成英文名称和线路简称 */
  57 + $('#nameInput').on('keyup', setPinYin);
  58 + /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */
  59 + $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'});
  60 + /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  61 + $('#startStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  62 + /** 起始站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  63 + $('#endTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  64 + /** 终点站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  65 + $('#endStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  66 + /** 终点站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  67 + $('#endStationEndTimeInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  68 + /** get请求获取公司表数据并填充公司下拉框选择值 */
  69 + $get('/business/all', {upCode_eq: '88'}, function(array){
  70 + /** 公司下拉options属性值 */
  71 + var options = '<option value="">-- 请选择公司 --</option>';
  72 + /** 遍历array */
  73 + $.each(array, function(i,d){
  74 + options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';
  75 + });
  76 + /** 填充公司下拉框options,并添加公司下拉框值改变事件setbrancheCompanySelectOptions */
  77 + $('#companySelect').html(options).on('change', setbrancheCompanySelectOptions);
  78 + });
  79 +
  80 + /** 填充分公司下拉框 */
  81 + setbrancheCompanySelectOptions();
  82 + // 定义表单
  83 + var form = $('#line_add_form');
  84 + // 定义表单异常
  85 + var error = $('.alert-danger',form);
  86 + // 表单验证
  87 + form.validate({
  88 + // 错误提示元素span对象
  89 + errorElement : 'span',
  90 + // 错误提示元素class名称
  91 + errorClass : 'help-block help-block-error',
  92 + // 验证错误获取焦点
  93 + focusInvalid : true,
  94 + // 需要验证的表单元素
  95 + rules : {
  96 + 'name' : {required : true,maxlength: 30},// 线路名称 必填项、 最大长度.
  97 + 'lineCode' : {required : true,maxlength: 6,digits:true ,isLineCode:true,
  98 + remote:{type: 'GET',
  99 + url: '/line/lineCodeVerification',
  100 + cache:false,
  101 + async:false,
  102 + data:{'lineCode':function(){ return $("#lineCodeInput").val();}}
  103 + }},// 线路编码 必填项、最大长度.
  104 + 'company' : {required : true,maxlength: 30},// 所属公司 必填项、最大长度.
  105 + 'ticketPrice' : {required : true},
  106 + 'brancheCompany' : {required : true,maxlength: 30},// 所属分公司 必填项、最大长度.
  107 + 'level' : {required : true,maxlength: 30},// 线路等级 必填项、最大长度.
  108 + 'nature' : {required : true,maxlength: 30},// 线路性质 必填项、最大长度.
  109 + 'startStationName' : {required : true,maxlength: 30},// 起始站名称 必填项、最大长度.
  110 + 'endStationName' : {required : true,maxlength: 30},// 终点站名称 必填项、最大长度.
  111 + 'startStationFirstTime' : {required : true,maxlength: 30},// 起始站首班时间 必填项、最大长度.
  112 + 'StartStationEndTime' : {required : true,maxlength: 30},// 起始站末班时间 必填项、最大长度.
  113 + 'endStationFirstTime' : {required : true,maxlength: 30},// 终点站首班时间 必填项、最大长度.
  114 + 'endStationEndTime' : {required : true,maxlength: 30},// 终点站末班时间 必填项、最大长度.
  115 + 'linePlayType' : {required : true,maxlength: 30},// 线路规划类型 <0:双向;1:环线> 必填项、最大长度.
  116 + 'openDate' : {date : true,dateISO:true},// 开辟日期 正确格式的日期(日期校验 ie6 出错,慎用。)必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
  117 + 'es' : {maxlength: 30},// 英文名称 最大长度.
  118 + 'shortName' : {maxlength: 30},// 线路简称 最大长度.
  119 + 'shanghaiLinecode' : {maxlength: 30},// 上海市线路编码 最大长度.
  120 + 'eqLinecode' : {maxlength: 30},// 设备线路编码 最大长度.
  121 + 'startPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 起始站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 最大长度
  122 + 'endPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 终点站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 、最大长度
  123 + 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度.
  124 + 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度.
  125 + 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度.
  126 + 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。
  127 + 'descriptions' : {maxlength: 200},// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。
  128 + 'region' : {required : true}// 线路区域必选
  129 + },
  130 + messages:{
  131 + 'lineCode':{
  132 + remote: '此线路编码已存在!'
  133 + }
  134 + },
  135 + /**
  136 + * 类型:Callback。当未通过验证的表单提交时,可以在该回调函数中处理一些事情。
  137 + *
  138 + * 参数:该回调函数有两个参数:第一个为一个事件对象,第二个为验证器(validator)
  139 + */
  140 + invalidHandler : function(event, validator) {
  141 +
  142 + // 显示表单未通过提示信息
  143 + error.show();
  144 +
  145 + // 把提示信息放到指定的位置。
  146 + App.scrollTo(error, -200);
  147 + },
  148 +
  149 + /**
  150 + * 类型:Callback。
  151 + *
  152 + * 默认:添加errorClass("has-error")到表单元素。将未通过验证的表单元素设置高亮。
  153 + */
  154 + highlight : function(element) {
  155 +
  156 + // 添加errorClass("has-error")到表单元素
  157 + $(element).closest('.form-group').addClass('has-error');
  158 +
  159 + },
  160 +
  161 + /**
  162 + * 类型:Callback。
  163 + *
  164 + * 默认:移除errorClass("has-error")。与highlight操作相反
  165 + */
  166 + unhighlight : function(element) {
  167 +
  168 + // 移除errorClass("has-error")
  169 + $(element).closest('.form-group').removeClass('has-error');
  170 +
  171 + },
  172 +
  173 + /**
  174 + * 类型:String,Callback。
  175 + *
  176 + * 如果指定它,当验证通过时显示一个消息。
  177 + *
  178 + * 如果是String类型的,则添加该样式到标签中;
  179 + *
  180 + * 如果是一个回调函数,则将标签作为其唯一的参数。
  181 + */
  182 + success : function(label) {
  183 +
  184 + // 当验证通过时,移除errorClass("has-error")
  185 + label.closest('.form-group').removeClass('has-error');
  186 +
  187 + },
  188 +
  189 + /**
  190 + * 类型:Callback。
  191 + *
  192 + * 默认:default (native) form submit;当表单通过验证,提交表单。回调函数有个默认参数form
  193 + */
  194 + submitHandler : function(f) {
  195 +
  196 + // 隐藏错误提示
  197 + error.hide();
  198 + // 表单序列化
  199 + var params = form.serializeJSON();
  200 + submit();
  201 +
  202 + // 查询线路编码的顺延号
  203 + /*$get('/line/all', {lineCode_eq: params.lineCode},function(lineCode){
  204 +
  205 + // 定义返回值的长度
  206 + var len = lineCode.length;
  207 +
  208 + // 如果大于零,则已存在录入的线路编码;否则不存在
  209 + if(len > 0) {
  210 +
  211 + // 定义已有的线路编码
  212 + var oldCode = params.lineCode;
  213 +
  214 + // 自动获取线路编码
  215 + getLineCode(function(result) {
  216 +
  217 + // 重新设置提交参数线路编码值
  218 + params.lineCode = result;
  219 +
  220 + // 弹出选择框;确认则提交;取消则返回
  221 + layer.confirm('线路编码【'+oldCode+'】已存在!自动顺延为如下:<br>线路编码:'+result, {
  222 + btn : [ '确认提示并提交', '取消' ]
  223 + }, submit);
  224 +
  225 + });
  226 + layer.open({
  227 + title: '消息提示'
  228 + ,content: '线路编码【'+params.lineCode+'】已存在,请重新输入编码!'
  229 + });
  230 + } else {
  231 +
  232 + // 提交
  233 + submit();
  234 +
  235 + }
  236 + });*/
  237 +
  238 +
  239 + // 提交
  240 + function submit() {
  241 +
  242 + // 防止用户多次提交
  243 + $("#submintBtn").addClass("disabled");
  244 +
  245 + // 添加数据
  246 + $post('/line', params, function(result) {
  247 + // 如果返回结果不为空
  248 + if(result){
  249 +
  250 + // 返回状态码为"SUCCESS" ,则添加成功;返回状态码为"ERROR" ,则添加失败
  251 + if(result.status=='SUCCESS') {
  252 +
  253 + // 弹出添加成功提示消息
  254 + layer.msg('添加成功,并已自动为您生成线路原始版本,可以在线路版本信息下查看!', {time: 7000});
  255 +
  256 + } else if(result.status=='ERROR') {
  257 +
  258 + // 弹出添加失败提示消息
  259 + layer.msg('添加失败...');
  260 +
  261 + }
  262 + }
  263 +
  264 + // 返回list.html页面
  265 + loadPage('list.html');
  266 + });
  267 + }
  268 + }
  269 + });
  270 +
  271 + // 线路编码不能0开头
  272 + $.validator.addMethod("isLineCode", function(value,element) {
  273 + // 线路编码正则表达式
  274 + var lineCode = /^([1-9])/;
  275 + return lineCode.test(value);
  276 + }, "线路编码不能以0开头");
  277 +
  278 + // 联系电话(手机/电话皆可)验证
  279 + $.validator.addMethod("isPhone", function(value,element) {
  280 + // 长度
  281 + var length = value.length;
  282 + // 手机正则表达式
  283 + var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
  284 + // 固定电话正则表达式
  285 + var tel = /^\d{3,4}-?\d{7,9}$/;
  286 + return this.optional(element) || (tel.test(value) || mobile.test(value));
  287 + }, "请正确填写您的联系电话");
287 }); 288 });
288 \ No newline at end of file 289 \ No newline at end of file
src/main/resources/static/pages/base/line/js/line-edit-form.js
1 -/**  
2 - * @description TODO(线路信息修改片段JS模块)  
3 - *  
4 - * @author bsth@lq  
5 - *  
6 - * @date 二〇一六年十月十八日 13:31:58  
7 - *  
8 - */  
9 -  
10 -  
11 -!function(){  
12 - // 关闭左侧栏  
13 - if (!$('body').hasClass('page-sidebar-closed')) {$('.menu-toggler.sidebar-toggler').click();}  
14 - /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */  
15 - $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'});  
16 - /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
17 - $('#startStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});  
18 - /** 起始站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
19 - $('#endTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});  
20 - /** 终点站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
21 - $('#endStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});  
22 - /** 终点站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */  
23 - $('#endStationEndTimeInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});  
24 - /** 根据线路名称值设置英文名称值和线路简称 */  
25 - function setPinYin(){  
26 - // 获取线路名称值  
27 - var val = $('#nameInput').val();  
28 - // 设置英文名称值  
29 - $('#esInput').val(pinyin.getFullChars(val));  
30 - // 设置线路简称值  
31 - $('#shortNameInput').val(pinyin.getCamelChars(val));  
32 - }  
33 -  
34 - /** 公司下拉框 @param:<callback:回调函数> */  
35 - function selectTemp(callback) {  
36 - // 填充公司下拉框选择值  
37 - $.get('/business/all', {upCode_eq: '88'}, function(array){  
38 - // 公司下拉options属性值  
39 - var options = '<option value="">-- 请选择公司 --</option>';  
40 - // 遍历array  
41 - $.each(array, function(i,d){  
42 - options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';  
43 - });  
44 - // 填充公司下拉框options  
45 - $('#companySelect').html(options);  
46 - return callback && callback();  
47 - });  
48 - }  
49 -  
50 - // 填充分公司下拉框选择值  
51 - function getbrancheCompanyValues(businessCode,cb){  
52 - // 分公司下拉框options属性值  
53 - var options = '<option value="">-- 请选择分公司 --</option>';  
54 - if(businessCode) {  
55 - $get('/business/all', {upCode_eq: businessCode}, function(brancheCompany){  
56 - // 遍历brancheCompany  
57 - $.each(brancheCompany, function(i,d){  
58 - options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';  
59 - });  
60 - // 填充分公司下拉框options  
61 - $('#brancheCompanySelect').html(options);  
62 - return cb && cb();  
63 - });  
64 - } else {  
65 - // 填充分公司下拉框options  
66 - $('#brancheCompanySelect').html(options);  
67 - return cb && cb();  
68 - }  
69 - }  
70 -  
71 - function companySelectChangeSetBrancheValue() {  
72 - // 获取公司下拉框选择值  
73 - var businessCode = $('#companySelect').val();  
74 - // 分公司下拉框options属性值  
75 - var options = '<option value="">-- 请选择分公司 --</option>';  
76 - // 如果公司选择为空则分公司为空 ; 否则查询出所属公司下的分公司名称和相应分公司代码  
77 - if(businessCode == null || businessCode ==''){  
78 - // 填充分公司下拉框options  
79 - $('#brancheCompanySelect').html(options);  
80 - } else {  
81 - // 查询出所属公司下的分公司名称和相应分公司代码  
82 - $get('/business/all', {upCode_eq: businessCode}, function(array){  
83 - // 遍历array  
84 - $.each(array, function(i,d){  
85 - options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';  
86 - });  
87 - // 填充分公司下拉框options  
88 - $('#brancheCompanySelect').html(options);  
89 - });  
90 - }  
91 - }  
92 -  
93 - // 获取参数ID  
94 - var lineId = $.url().param('no');  
95 -  
96 - // 如果参数ID不为空  
97 - if(lineId) {  
98 - // 获取线路Id元素并设值  
99 - $('#lineId').val(lineId);  
100 - // 初始化公司下拉框  
101 - selectTemp(function(){  
102 - /** 根据ID查询详细信息 */  
103 - $get('/line/' + lineId ,null, function(result){  
104 - // 如果不为空  
105 - if(result) {  
106 - // 定义日期格式  
107 - var fs = 'YYYY-MM-DD';  
108 - // 设置inUse  
109 - $('#inUseInput').val(result.inUse);  
110 - // 设置日期  
111 - result.openDate = moment(result.openDate).format(fs);  
112 - /** 填充修改线路表单元素值 @param:<result:数据结果集;line_edit_form:表单元素> */  
113 - putFormData(result, '#line_edit_form');  
114 - // 设置公司值  
115 - $('#companySelect').val(result.company);  
116 - // 填充分公司下拉框选择值  
117 - getbrancheCompanyValues(result.company,function(){  
118 - // 设置分公司  
119 - $('#brancheCompanySelect').val(result.brancheCompany);  
120 - });  
121 -  
122 - }  
123 -  
124 - });  
125 - })  
126 -  
127 - } else {  
128 - // 缺少ID  
129 - layer.confirm('【ID缺失,请点击返回,重新进行修改操作】', {btn : [ '返回' ],icon: 3, title:'提示'}, function(index){  
130 - // 关闭弹出层  
131 - layer.close(index);  
132 - // 跳转到list页面  
133 - loadPage('list.html');  
134 - });  
135 - }  
136 - // 输入线路名称,自动生成英文名称和线路简称  
137 - $('#nameInput').on('keyup', setPinYin);  
138 - // 公司值改变事件  
139 - $('#companySelect').on('change',companySelectChangeSetBrancheValue);  
140 - // 定义表单  
141 - var form = $('#line_edit_form');  
142 - // 定义表单异常  
143 - var error = $('.alert-danger',form);  
144 - // 表单验证  
145 - form.validate({  
146 - // 错误提示元素span对象  
147 - errorElement : 'span',  
148 - // 错误提示元素class名称  
149 - errorClass : 'help-block help-block-error',  
150 - // 验证错误获取焦点  
151 - focusInvalid : true,  
152 - // 需要验证的表单元素  
153 - rules : {  
154 - 'name' : {required : true,maxlength: 30},// 线路名称 必填项、 最大长度.  
155 - 'lineCode' : {required : true,maxlength: 6},// 线路编码 必填项、最大长度.  
156 - 'company' : {required : true,maxlength: 30},// 所属公司 必填项、最大长度.  
157 - 'brancheCompany' : {required : true,maxlength: 30},// 所属分公司 必填项、最大长度.  
158 - 'level' : {required : true,maxlength: 30},// 线路等级 必填项、最大长度.  
159 - 'nature' : {required : true,maxlength: 30},// 线路性质 必填项、最大长度.  
160 - 'startStationName' : {required : true,maxlength: 30},// 起始站名称 必填项、最大长度.  
161 - 'endStationName' : {required : true,maxlength: 30},// 终点站名称 必填项、最大长度.  
162 - 'startStationFirstTime' : {required : true,maxlength: 30},// 起始站首班时间 必填项、最大长度.  
163 - 'StartStationEndTime' : {required : true,maxlength: 30},// 起始站末班时间 必填项、最大长度.  
164 - 'endStationFirstTime' : {required : true,maxlength: 30},// 终点站首班时间 必填项、最大长度.  
165 - 'endStationEndTime' : {required : true,maxlength: 30},// 终点站末班时间 必填项、最大长度.  
166 - 'linePlayType' : {required : true,maxlength: 30},// 线路规划类型 <0:双向;1:环线> 必填项、最大长度.  
167 - 'openDate' : {date : true,dateISO:true},// 开辟日期 正确格式的日期(日期校验 ie6 出错,慎用。)必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。  
168 - 'es' : {maxlength: 30},// 英文名称 最大长度.  
169 - 'shortName' : {maxlength: 30},// 线路简称 最大长度.  
170 - 'shanghaiLinecode' : {maxlength: 30},// 上海市线路编码 最大长度.  
171 - 'eqLinecode' : {maxlength: 30},// 设备线路编码 最大长度.  
172 - 'startPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 起始站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 最大长度  
173 - 'endPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 终点站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 、最大长度  
174 - 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度.  
175 - 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度.  
176 - 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度.  
177 - 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。  
178 - 'descriptions' : {maxlength: 200},// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。  
179 - 'region' : {required : true}// 线路区域必选  
180 - },  
181 -  
182 - /**  
183 - * 类型:Callback。当未通过验证的表单提交时,可以在该回调函数中处理一些事情。  
184 - *  
185 - * 参数:该回调函数有两个参数:第一个为一个事件对象,第二个为验证器(validator)  
186 - */  
187 - invalidHandler : function(event, validator) {  
188 - // 显示表单未通过提示信息  
189 - error.show();  
190 - // 把提示信息放到指定的位置。  
191 - App.scrollTo(error, -200);  
192 - },  
193 -  
194 - /**  
195 - * 类型:Callback。  
196 - *  
197 - * 默认:添加errorClass("has-error")到表单元素。将未通过验证的表单元素设置高亮。  
198 - */  
199 - highlight : function(element) {  
200 - // 添加errorClass("has-error")到表单元素  
201 - $(element).closest('.form-group').addClass('has-error');  
202 - },  
203 -  
204 - /**  
205 - * 类型:Callback。  
206 - *  
207 - * 默认:移除errorClass("has-error")。与highlight操作相反  
208 - */  
209 - unhighlight : function(element) {  
210 - // 移除errorClass("has-error")  
211 - $(element).closest('.form-group').removeClass('has-error');  
212 - },  
213 -  
214 - /**  
215 - * 类型:String,Callback。  
216 - *  
217 - * 如果指定它,当验证通过时显示一个消息。  
218 - *  
219 - * 如果是String类型的,则添加该样式到标签中;  
220 - *  
221 - * 如果是一个回调函数,则将标签作为其唯一的参数。  
222 - */  
223 - success : function(label) {  
224 - // 当验证通过时,移除errorClass("has-error")  
225 - label.closest('.form-group').removeClass('has-error');  
226 -  
227 - },  
228 - /**  
229 - * 类型:Callback。  
230 - *  
231 - * 默认:default (native) form submit;当表单通过验证,提交表单。回调函数有个默认参数form  
232 - */  
233 - submitHandler : function(f) {  
234 - // 隐藏错误提示  
235 - error.hide();  
236 - // 表单序列化  
237 - var params = form.serializeJSON();  
238 - // 查询线路编码的顺延号  
239 - $get('/line/all', {lineCode_eq: params.lineCode},function(lineCode){  
240 - // 定义返回值的长度  
241 - var len = lineCode.length;  
242 - // 如果大于零,则已存在录入的线路编码;否则不存在  
243 - if(len > 0) {  
244 - // 如果id相等则为同一条数据的线路编码。  
245 - if(lineCode[0].id == lineId) {  
246 - // 提交  
247 - submit();  
248 - }  
249 - } else {  
250 - // 提交  
251 - submit();  
252 - }  
253 - });  
254 - // 提交  
255 - function submit() {  
256 - // 添加数据  
257 - $post('/line/update', params, function(result) {  
258 - // 如果返回结果不为空  
259 - if(result){  
260 - // 返回状态码为"SUCCESS" ,则添加成功;返回状态码为"ERROR" ,则添加失败  
261 - if(result.status=='SUCCESS') {  
262 - // 弹出添加成功提示消息  
263 - layer.msg('修改成功...');  
264 - } else if(result.status=='ERROR') {  
265 - // 弹出添加失败提示消息  
266 - layer.msg('修改失败...');  
267 - }  
268 - }  
269 - // 返回list.html页面  
270 - loadPage('list.html');  
271 - });  
272 - }  
273 - }  
274 - });  
275 -  
276 - /** 联系电话(手机/电话皆可)验证 */  
277 - $.validator.addMethod("isPhone", function(value,element) {  
278 - // 长度  
279 - var length = value.length;  
280 - // 手机正则表达式  
281 - var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;  
282 - // 固定电话正则表达式  
283 - var tel = /^\d{3,4}-?\d{7,9}$/;  
284 - return this.optional(element) || (tel.test(value) || mobile.test(value));  
285 - }, "请正确填写您的联系电话");  
286 - 1 +/**
  2 + * @description TODO(线路信息修改片段JS模块)
  3 + *
  4 + * @author bsth@lq
  5 + *
  6 + * @date 二〇一六年十月十八日 13:31:58
  7 + *
  8 + */
  9 +
  10 +
  11 +!function(){
  12 + // 关闭左侧栏
  13 + if (!$('body').hasClass('page-sidebar-closed')) {$('.menu-toggler.sidebar-toggler').click();}
  14 + /** 开辟日期 日期控件 <format:日期控件时间格式;locale:语言> */
  15 + $('#openDateInput').datetimepicker({format : 'YYYY-MM-DD', locale: 'zh-cn'});
  16 + /** 起始站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  17 + $('#startStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  18 + /** 起始站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  19 + $('#endTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  20 + /** 终点站首班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  21 + $('#endStationFirstTimeInput').datetimepicker({format : 'HH:mm', locale: 'zh-cn'});
  22 + /** 终点站末班时间 日期控件 <format:日期控件时间格式;locale:语言> */
  23 + $('#endStationEndTimeInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  24 + /** 根据线路名称值设置英文名称值和线路简称 */
  25 + function setPinYin(){
  26 + // 获取线路名称值
  27 + var val = $('#nameInput').val();
  28 + // 设置英文名称值
  29 + $('#esInput').val(pinyin.getFullChars(val));
  30 + // 设置线路简称值
  31 + $('#shortNameInput').val(pinyin.getCamelChars(val));
  32 + }
  33 +
  34 + /** 公司下拉框 @param:<callback:回调函数> */
  35 + function selectTemp(callback) {
  36 + // 填充公司下拉框选择值
  37 + $.get('/business/all', {upCode_eq: '88'}, function(array){
  38 + // 公司下拉options属性值
  39 + var options = '<option value="">-- 请选择公司 --</option>';
  40 + // 遍历array
  41 + $.each(array, function(i,d){
  42 + options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';
  43 + });
  44 + // 填充公司下拉框options
  45 + $('#companySelect').html(options);
  46 + return callback && callback();
  47 + });
  48 + }
  49 +
  50 + // 填充分公司下拉框选择值
  51 + function getbrancheCompanyValues(businessCode,cb){
  52 + // 分公司下拉框options属性值
  53 + var options = '<option value="">-- 请选择分公司 --</option>';
  54 + if(businessCode) {
  55 + $get('/business/all', {upCode_eq: businessCode}, function(brancheCompany){
  56 + // 遍历brancheCompany
  57 + $.each(brancheCompany, function(i,d){
  58 + options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';
  59 + });
  60 + // 填充分公司下拉框options
  61 + $('#brancheCompanySelect').html(options);
  62 + return cb && cb();
  63 + });
  64 + } else {
  65 + // 填充分公司下拉框options
  66 + $('#brancheCompanySelect').html(options);
  67 + return cb && cb();
  68 + }
  69 + }
  70 +
  71 + function companySelectChangeSetBrancheValue() {
  72 + // 获取公司下拉框选择值
  73 + var businessCode = $('#companySelect').val();
  74 + // 分公司下拉框options属性值
  75 + var options = '<option value="">-- 请选择分公司 --</option>';
  76 + // 如果公司选择为空则分公司为空 ; 否则查询出所属公司下的分公司名称和相应分公司代码
  77 + if(businessCode == null || businessCode ==''){
  78 + // 填充分公司下拉框options
  79 + $('#brancheCompanySelect').html(options);
  80 + } else {
  81 + // 查询出所属公司下的分公司名称和相应分公司代码
  82 + $get('/business/all', {upCode_eq: businessCode}, function(array){
  83 + // 遍历array
  84 + $.each(array, function(i,d){
  85 + options += '<option value="'+d.businessCode+'">'+d.businessName+'</option>';
  86 + });
  87 + // 填充分公司下拉框options
  88 + $('#brancheCompanySelect').html(options);
  89 + });
  90 + }
  91 + }
  92 +
  93 + // 获取参数ID
  94 + var lineId = $.url().param('no');
  95 +
  96 + // 如果参数ID不为空
  97 + if(lineId) {
  98 + // 获取线路Id元素并设值
  99 + $('#lineId').val(lineId);
  100 + // 初始化公司下拉框
  101 + selectTemp(function(){
  102 + /** 根据ID查询详细信息 */
  103 + $get('/line/' + lineId ,null, function(result){
  104 + // 如果不为空
  105 + if(result) {
  106 + // 定义日期格式
  107 + var fs = 'YYYY-MM-DD';
  108 + // 设置inUse
  109 + $('#inUseInput').val(result.inUse);
  110 + // 设置日期
  111 + result.openDate = moment(result.openDate).format(fs);
  112 + /** 填充修改线路表单元素值 @param:<result:数据结果集;line_edit_form:表单元素> */
  113 + putFormData(result, '#line_edit_form');
  114 + // 设置公司值
  115 + $('#companySelect').val(result.company);
  116 + // 填充分公司下拉框选择值
  117 + getbrancheCompanyValues(result.company,function(){
  118 + // 设置分公司
  119 + $('#brancheCompanySelect').val(result.brancheCompany);
  120 + });
  121 +
  122 + }
  123 +
  124 + });
  125 + })
  126 +
  127 + } else {
  128 + // 缺少ID
  129 + layer.confirm('【ID缺失,请点击返回,重新进行修改操作】', {btn : [ '返回' ],icon: 3, title:'提示'}, function(index){
  130 + // 关闭弹出层
  131 + layer.close(index);
  132 + // 跳转到list页面
  133 + loadPage('list.html');
  134 + });
  135 + }
  136 + // 输入线路名称,自动生成英文名称和线路简称
  137 + $('#nameInput').on('keyup', setPinYin);
  138 + // 公司值改变事件
  139 + $('#companySelect').on('change',companySelectChangeSetBrancheValue);
  140 + // 定义表单
  141 + var form = $('#line_edit_form');
  142 + // 定义表单异常
  143 + var error = $('.alert-danger',form);
  144 + // 表单验证
  145 + form.validate({
  146 + // 错误提示元素span对象
  147 + errorElement : 'span',
  148 + // 错误提示元素class名称
  149 + errorClass : 'help-block help-block-error',
  150 + // 验证错误获取焦点
  151 + focusInvalid : true,
  152 + // 需要验证的表单元素
  153 + rules : {
  154 + 'name' : {required : true,maxlength: 30},// 线路名称 必填项、 最大长度.
  155 + 'ticketPrice' : {required : true},
  156 + 'lineCode' : {required : true,maxlength: 6},// 线路编码 必填项、最大长度.
  157 + 'company' : {required : true,maxlength: 30},// 所属公司 必填项、最大长度.
  158 + 'brancheCompany' : {required : true,maxlength: 30},// 所属分公司 必填项、最大长度.
  159 + 'level' : {required : true,maxlength: 30},// 线路等级 必填项、最大长度.
  160 + 'nature' : {required : true,maxlength: 30},// 线路性质 必填项、最大长度.
  161 + 'startStationName' : {required : true,maxlength: 30},// 起始站名称 必填项、最大长度.
  162 + 'endStationName' : {required : true,maxlength: 30},// 终点站名称 必填项、最大长度.
  163 + 'startStationFirstTime' : {required : true,maxlength: 30},// 起始站首班时间 必填项、最大长度.
  164 + 'StartStationEndTime' : {required : true,maxlength: 30},// 起始站末班时间 必填项、最大长度.
  165 + 'endStationFirstTime' : {required : true,maxlength: 30},// 终点站首班时间 必填项、最大长度.
  166 + 'endStationEndTime' : {required : true,maxlength: 30},// 终点站末班时间 必填项、最大长度.
  167 + 'linePlayType' : {required : true,maxlength: 30},// 线路规划类型 <0:双向;1:环线> 必填项、最大长度.
  168 + 'openDate' : {date : true,dateISO:true},// 开辟日期 正确格式的日期(日期校验 ie6 出错,慎用。)必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
  169 + 'es' : {maxlength: 30},// 英文名称 最大长度.
  170 + 'shortName' : {maxlength: 30},// 线路简称 最大长度.
  171 + 'shanghaiLinecode' : {maxlength: 30},// 上海市线路编码 最大长度.
  172 + 'eqLinecode' : {maxlength: 30},// 设备线路编码 最大长度.
  173 + 'startPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 起始站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 最大长度
  174 + 'endPhone' : {number : true,digits : true,isPhone : true,maxlength: 30},// 终点站调度电话 必须输入合法的数字(负数,小数)。必须输入整数。电话号码格式 、最大长度
  175 + 'carSumNumber' : {number : true,digits : true,maxlength: 8},// 车辆总数 必须输入合法的数字(负数,小数)。必须输入整数。最大长度.
  176 + 'hvacCarNumber' : {number : true,digits : true,maxlength: 8},// 空调车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。 最大长度.
  177 + 'ordCarNumber' : {number : true,digits : true,maxlength: 8},// 普通车辆数 必须输入合法的数字(负数,小数)。 必须输入整数。最大长度.
  178 + 'history' : {maxlength: 200},// 线路沿革 输入长度最多是 200 的字符串(汉字算一个字符)。
  179 + 'descriptions' : {maxlength: 200},// 描述/说明 输入长度最多是 200 的字符串(汉字算一个字符)。
  180 + 'region' : {required : true}// 线路区域必选
  181 + },
  182 +
  183 + /**
  184 + * 类型:Callback。当未通过验证的表单提交时,可以在该回调函数中处理一些事情。
  185 + *
  186 + * 参数:该回调函数有两个参数:第一个为一个事件对象,第二个为验证器(validator)
  187 + */
  188 + invalidHandler : function(event, validator) {
  189 + // 显示表单未通过提示信息
  190 + error.show();
  191 + // 把提示信息放到指定的位置。
  192 + App.scrollTo(error, -200);
  193 + },
  194 +
  195 + /**
  196 + * 类型:Callback。
  197 + *
  198 + * 默认:添加errorClass("has-error")到表单元素。将未通过验证的表单元素设置高亮。
  199 + */
  200 + highlight : function(element) {
  201 + // 添加errorClass("has-error")到表单元素
  202 + $(element).closest('.form-group').addClass('has-error');
  203 + },
  204 +
  205 + /**
  206 + * 类型:Callback。
  207 + *
  208 + * 默认:移除errorClass("has-error")。与highlight操作相反
  209 + */
  210 + unhighlight : function(element) {
  211 + // 移除errorClass("has-error")
  212 + $(element).closest('.form-group').removeClass('has-error');
  213 + },
  214 +
  215 + /**
  216 + * 类型:String,Callback。
  217 + *
  218 + * 如果指定它,当验证通过时显示一个消息。
  219 + *
  220 + * 如果是String类型的,则添加该样式到标签中;
  221 + *
  222 + * 如果是一个回调函数,则将标签作为其唯一的参数。
  223 + */
  224 + success : function(label) {
  225 + // 当验证通过时,移除errorClass("has-error")
  226 + label.closest('.form-group').removeClass('has-error');
  227 +
  228 + },
  229 + /**
  230 + * 类型:Callback。
  231 + *
  232 + * 默认:default (native) form submit;当表单通过验证,提交表单。回调函数有个默认参数form
  233 + */
  234 + submitHandler : function(f) {
  235 + // 隐藏错误提示
  236 + error.hide();
  237 + // 表单序列化
  238 + var params = form.serializeJSON();
  239 + // 查询线路编码的顺延号
  240 + $get('/line/all', {lineCode_eq: params.lineCode},function(lineCode){
  241 + // 定义返回值的长度
  242 + var len = lineCode.length;
  243 + // 如果大于零,则已存在录入的线路编码;否则不存在
  244 + if(len > 0) {
  245 + // 如果id相等则为同一条数据的线路编码。
  246 + if(lineCode[0].id == lineId) {
  247 + // 提交
  248 + submit();
  249 + }
  250 + } else {
  251 + // 提交
  252 + submit();
  253 + }
  254 + });
  255 + // 提交
  256 + function submit() {
  257 + // 添加数据
  258 + $post('/line/update', params, function(result) {
  259 + // 如果返回结果不为空
  260 + if(result){
  261 + // 返回状态码为"SUCCESS" ,则添加成功;返回状态码为"ERROR" ,则添加失败
  262 + if(result.status=='SUCCESS') {
  263 + // 弹出添加成功提示消息
  264 + layer.msg('修改成功...');
  265 + } else if(result.status=='ERROR') {
  266 + // 弹出添加失败提示消息
  267 + layer.msg('修改失败...');
  268 + }
  269 + }
  270 + // 返回list.html页面
  271 + loadPage('list.html');
  272 + });
  273 + }
  274 + }
  275 + });
  276 +
  277 + /** 联系电话(手机/电话皆可)验证 */
  278 + $.validator.addMethod("isPhone", function(value,element) {
  279 + // 长度
  280 + var length = value.length;
  281 + // 手机正则表达式
  282 + var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
  283 + // 固定电话正则表达式
  284 + var tel = /^\d{3,4}-?\d{7,9}$/;
  285 + return this.optional(element) || (tel.test(value) || mobile.test(value));
  286 + }, "请正确填写您的联系电话");
  287 +
287 }(); 288 }();
288 \ No newline at end of file 289 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/addstationstemplate.html
@@ -280,6 +280,8 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a @@ -280,6 +280,8 @@ $(&#39;#add_station_template_mobal&#39;).on(&#39;AddStationTempMobal.show&#39;, function(e,map,a
280 if(isPush) { 280 if(isPush) {
281 sectionList[k] = point; 281 sectionList[k] = point;
282 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}}); 282 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}});
  283 + } else {
  284 + sectionList[k] = point;
283 } 285 }
284 isPush = false; 286 isPush = false;
285 } 287 }
src/main/resources/static/pages/base/stationroute/editRoute.html
@@ -118,7 +118,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -118,7 +118,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
118 }); 118 });
119 119
120 120
121 - //从xml中获取节点内容 121 +//从xml中获取节点内容
122 function getXmlNode(str){ 122 function getXmlNode(str){
123 //创建文档对象 123 //创建文档对象
124 var parser=new DOMParser(); 124 var parser=new DOMParser();
@@ -138,7 +138,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -138,7 +138,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
138 138
139 } 139 }
140 140
141 - // xml方式上传是,处理转成txt格式的方法 141 + // xml方式上传是,处理转成txt格式的方法
142 var getXmlSection = function (xml) { 142 var getXmlSection = function (xml) {
143 // var xml = $("#xmlText").val(); 143 // var xml = $("#xmlText").val();
144 var stationPointList = getXmlNode(xml); 144 var stationPointList = getXmlNode(xml);
@@ -161,7 +161,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -161,7 +161,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
161 } 161 }
162 return sections; 162 return sections;
163 }; 163 };
164 - 164 +
165 var nearestSectionPoint = function (stationPointList, sectionPointList) { 165 var nearestSectionPoint = function (stationPointList, sectionPointList) {
166 var mapping = {}; 166 var mapping = {};
167 for (var i = 0;i < stationPointList.length - 1;i++) { 167 for (var i = 0;i < stationPointList.length - 1;i++) {
@@ -179,7 +179,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -179,7 +179,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
179 179
180 return mapping; 180 return mapping;
181 } 181 }
182 -  
183 182
184 183
185 // 表单验证 184 // 表单验证
@@ -227,6 +226,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -227,6 +226,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
227 226
228 }, 227 },
229 submitHandler : function(f) { 228 submitHandler : function(f) {
  229 + debugger;
230 // 隐藏弹出层 230 // 隐藏弹出层
231 $('#edit_route_mobal').modal('hide'); 231 $('#edit_route_mobal').modal('hide');
232 // 原坐标类型 232 // 原坐标类型
@@ -324,30 +324,24 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -324,30 +324,24 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
324 for(var k =0;k<len;k++) { 324 for(var k =0;k<len;k++) {
325 if(paramsStationsArray[k]=="") 325 if(paramsStationsArray[k]=="")
326 continue; 326 continue;
327 -  
328 var tempStr = paramsStationsArray[k].split('\t'); 327 var tempStr = paramsStationsArray[k].split('\t');
329 -  
330 - if(tempStr[0] == "undefined" || tempStr[0] == ""){  
331 - continue;  
332 - }  
333 -  
334 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]); 328 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]);
  329 + var point = {lng:tempPoint.lng, lat:tempPoint.lat};
335 330
  331 + sectionList[k] = point;
336 332
337 - var point = {lng:tempPoint.lng, lat:tempPoint.lat};  
338 if(tempStr.length < 4){ 333 if(tempStr.length < 4){
339 - sectionList[k] = point;  
340 isPush = true; 334 isPush = true;
341 }else { 335 }else {
342 if(isPush) { 336 if(isPush) {
343 - sectionList[k] = point;  
344 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}}); 337 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}});
345 } 338 }
346 isPush = false; 339 isPush = false;
347 } 340 }
348 } 341 }
  342 +
349 for(var i = 0 ;i<sectionList.length;i++) { 343 for(var i = 0 ;i<sectionList.length;i++) {
350 - if(sectionList[i] == "" || typeof(sectionList[i]) == "undefined" || sectionList[i] == null) { 344 + if(sectionList[i] == "" || isNaN(sectionList[i].lng) || typeof(sectionList[i]) == "undefined" || sectionList[i] == null) {
351 sectionList.splice(i,1);//删除数组中下表i-i+1之间的值 345 sectionList.splice(i,1);//删除数组中下表i-i+1之间的值
352 i= i-1; 346 i= i-1;
353 } 347 }
@@ -356,7 +350,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa @@ -356,7 +350,6 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
356 return routeList; 350 return routeList;
357 } 351 }
358 352
359 -  
360 function transGpsLoc(lng,lat) { 353 function transGpsLoc(lng,lat) {
361 var bdLoc = TransGPS.locationMake(lng, lat); 354 var bdLoc = TransGPS.locationMake(lng, lat);
362 var gcjLoc = TransGPS.transformFromWGSToGCJ(bdLoc); 355 var gcjLoc = TransGPS.transformFromWGSToGCJ(bdLoc);
src/main/resources/static/pages/permission/user/list.html
1 -<div class="page-head">  
2 - <div class="page-title">  
3 - <h1>用户管理</h1>  
4 - </div>  
5 -</div>  
6 -  
7 -<ul class="page-breadcrumb breadcrumb">  
8 - <li><a href="/pages/home.html" data-pjax>首页</a> <i class="fa fa-circle"></i></li>  
9 - <li><span class="active">权限管理</span> <i class="fa fa-circle"></i></li>  
10 - <li><span class="active">用户管理</span></li>  
11 -</ul>  
12 -  
13 -<div class="row">  
14 - <div class="col-md-12">  
15 - <!-- Begin: life time stats -->  
16 - <div class="portlet light portlet-fit portlet-datatable bordered">  
17 - <div class="portlet-title">  
18 - <div class="caption">  
19 - <i class="fa fa-users font-dark"></i> <span  
20 - class="caption-subject font-dark sbold uppercase">用户数据表</span>  
21 - </div>  
22 - <div class="actions">  
23 - <a class="btn btn-circle blue" href="add.html" data-pjax><i class="fa fa-plus"></i> 添加用户</a>  
24 -  
25 - </div>  
26 - </div>  
27 - <div class="portlet-body">  
28 - <div class="table-container" style="margin-top: 10px">  
29 - <table  
30 - class="table table-striped table-bordered table-hover table-checkable"  
31 - id="datatable_user">  
32 - <thead>  
33 - <tr role="row" class="heading">  
34 - <th width="3%">#</th>  
35 - <th width="15%">登录名</th>  
36 - <th width="13%">姓名</th>  
37 - <th width="100">所属机构</th>  
38 - <th width="11%">角色</th>  
39 - <th width="10%">状态</th>  
40 - <th width="18%">最后登录时间</th>  
41 - <th width="18%">操作</th>  
42 - </tr>  
43 - <tr role="row" class="filter">  
44 - <td></td>  
45 - <td>  
46 - <input type="text" class="form-control form-filter input-sm" name="userName_like">  
47 - </td>  
48 - <td>  
49 - <input type="text" class="form-control form-filter input-sm" name="name_like">  
50 - </td>  
51 - <td>  
52 - <input type="text" class="form-control form-filter input-sm" name="agencies_like">  
53 - </td>  
54 - <td></td>  
55 - <td>  
56 - <select class="form-control form-filter " name="enabled_eq">  
57 - <option value="">请选择...</option>  
58 - <option value="true">可用</option>  
59 - <option value="false">禁用</option>  
60 - </select>  
61 - </td>  
62 - <td></td>  
63 -  
64 - <td>  
65 - <button class="btn btn-sm green btn-outline filter-submit margin-bottom" >  
66 - <i class="fa fa-search"></i> 搜索</button>  
67 -  
68 - <button class="btn btn-sm red btn-outline filter-cancel">  
69 - <i class="fa fa-times"></i> 重置</button>  
70 - </td>  
71 - </tr>  
72 - </thead>  
73 - <tbody></tbody>  
74 - </table>  
75 - <div style="text-align: right;">  
76 - <ul id="pagination" class="pagination"></ul>  
77 - </div>  
78 - </div>  
79 - </div>  
80 - </div>  
81 - </div>  
82 -</div>  
83 -  
84 -<script id="user_list_temp" type="text/html">  
85 -{{each list as obj i}}  
86 -<tr>  
87 - <td style="vertical-align: middle;">  
88 - <!--<input type="checkbox" class="group-checkable icheck" data-id="{{obj.id}}">-->  
89 - {{++i}}  
90 - </td>  
91 - <td>  
92 - {{obj.userName}}  
93 - </td>  
94 - <td>  
95 - {{obj.name}}  
96 - </td>  
97 - <td>  
98 - {{obj.agencies}}  
99 - </td>  
100 - <td>  
101 - {{each obj.roles as role j}}  
102 - {{role.roleName}}、  
103 - {{/each}}  
104 - </td>  
105 - <td>  
106 - {{if obj.enabled}}  
107 - 可用  
108 - {{else}}  
109 - 禁用  
110 - {{/if}}  
111 - </td>  
112 - <td>  
113 - {{obj.lastLoginDate}}  
114 - </td>  
115 - <td>  
116 - {{if obj.isEdit == 0}}  
117 - <a class="btn btn-sm blue btn-outline" href="edit.html?no={{obj.id}}" data-pjax><i class="fa fa-edit"></i> 编辑</a>  
118 - <!--<button type="button" class="btn btn-sm line_allot_btn" data-id="{{obj.id}}">线调线路分配</button>-->  
119 - {{/if}}  
120 - {{if obj.isAdmin}}  
121 - <a class="btn btn-sm red btn-outline reset_password" data-id="{{obj.id}}" data-name="{{obj.userName}}" data-pjax><i class="fa fa-undo"></i> 重置密码</a>  
122 - {{/if}}  
123 - </td>  
124 -</tr>  
125 -{{/each}}  
126 -{{if list.length == 0}}  
127 -<tr>  
128 - <td colspan=8><h6 class="muted">没有找到相关数据</h6></td>  
129 -</tr>  
130 -{{/if}}  
131 -</script>  
132 -  
133 -<script>  
134 -$(function(){  
135 - var page = 0, initPagination;  
136 - var user,isAdmin = false;  
137 - var icheckOptions = {  
138 - checkboxClass: 'icheckbox_flat-blue',  
139 - increaseArea: '20%'  
140 - };  
141 - $.get('/user/getCurrentUser', function(data) {  
142 - user = data;  
143 - var roles = user.roles;  
144 - $.each(roles,function () {  
145 - if(this.level == 1)  
146 - isAdmin = true;  
147 - })  
148 -  
149 - });  
150 -  
151 - setTimeout(function () {  
152 - $(document).on('click', 'a.reset_password', function () {  
153 - var id = $(this).data('id');  
154 - var name = $(this).data('name');  
155 - swal({  
156 - title: "重装密码",  
157 - text: "将登录名为"+name+"的用户,密码重置为默认密码!",  
158 - type: "warning",  
159 - showCancelButton: true,  
160 - confirmButtonColor: "#DD6B55",  
161 - confirmButtonText: "重置",  
162 - cancelButtonText: "取消",  
163 - closeOnConfirm: false },  
164 - function(){  
165 - $.post('/user/resetPassword',{'id':id},function(result){  
166 - if(result.status=='SUCCESS') {  
167 - // 弹出添加成功提示消息  
168 - swal("登录名为"+name+"的用户密码重置成功!", "success");  
169 - } else if(result.status=='ERROR') {  
170 - // 弹出添加失败提示消息  
171 - swal("重置失败!", result.msg+",请联系开发人员!", "ERROR");  
172 - }  
173 - // loadPage('list.html');  
174 - // 发布后刷新页面  
175 - jsDoQuery(getParams(), true);  
176 - });  
177 - });  
178 - });  
179 - jsDoQuery(null,true);  
180 -  
181 - //重置  
182 - $('tr.filter .filter-cancel').on('click', function(){  
183 - $('tr.filter input, select').val('').change();  
184 - jsDoQuery(null, true);  
185 - });  
186 -  
187 - function getParams() {  
188 - var cells = $('tr.filter')[0].cells  
189 - ,params = {}  
190 - ,name;  
191 - $.each(cells, function(i, cell){  
192 - var items = $('input,select', cell);  
193 - for(var j = 0, item; item = items[j++];){  
194 - name = $(item).attr('name');  
195 - if(name){  
196 - params[name] = $(item).val();  
197 - }  
198 - }  
199 - });  
200 - return params;  
201 - }  
202 -  
203 - //提交  
204 - $('tr.filter .filter-submit').on('click', function(){  
205 - jsDoQuery(getParams(), true);  
206 - });  
207 -  
208 - /*  
209 - * 获取数据 p: 要提交的参数, pagination: 是否重新分页  
210 - */  
211 - function jsDoQuery(p, pagination){  
212 - var roles = new Map();  
213 - // 查询下级角色  
214 - $.ajax({  
215 - url: "/role/findSubordinate",  
216 - type: "Get",  
217 - async:false,  
218 - data: null,  
219 - success: function (rs) {  
220 - if(rs.status == "SUCCESS"){  
221 - $.each(rs.list,function(i,obj){  
222 - roles[obj.id] = obj;  
223 - });  
224 - }  
225 - }  
226 - });  
227 - var params = {};  
228 - if(p)  
229 - params = p;  
230 - //更新时间排序  
231 - params['order'] = 'lastLoginDate';  
232 - params['page'] = page;  
233 - // params['id_eq'] = "1";  
234 - var i = layer.load(2);  
235 - $get('/user' ,params, function(data){  
236 - var list = data.content;  
237 - $.each(list, function(i, obj) {  
238 - if(roles[obj.roles[0].id] != null && roles[obj.roles[0].id] != undefined){  
239 - obj.isEdit = 0;  
240 - } else{  
241 - obj.isEdit = 1;  
242 - }  
243 - obj.isAdmin = isAdmin;  
244 - obj.lastLoginDate = moment(obj.lastLoginDate).format("YYYY-MM-DD HH:mm:ss");  
245 - });  
246 -  
247 - var bodyHtm = template('user_list_temp', {list: list});  
248 -  
249 - $('#datatable_user tbody').html(bodyHtm)  
250 - .find('.icheck').iCheck(icheckOptions)  
251 - .on('ifChanged', iCheckChange);  
252 - if(pagination && list.length > 0){  
253 - //重新分页  
254 - initPagination = true;  
255 - showPagination(data);  
256 - }  
257 - layer.close(i);  
258 -  
259 - $('.line_allot_btn').on('click', openAllotWindow);  
260 - });  
261 - }  
262 -  
263 - function iCheckChange(){  
264 - var tr = $(this).parents('tr');  
265 - if(this.checked)  
266 - tr.addClass('row-active');  
267 - else  
268 - tr.removeClass('row-active');  
269 -  
270 - if($('#datatable_resource input.icheck:checked').length == 1)  
271 - $('#removeButton').removeAttr('disabled');  
272 - else  
273 - $('#removeButton').attr('disabled', 'disabled');  
274 - }  
275 -  
276 - function showPagination(data){  
277 - //分页  
278 - $('#pagination').jqPaginator({  
279 - totalPages: data.totalPages,  
280 - visiblePages: 6,  
281 - currentPage: page + 1,  
282 - first: '<li class="first"><a href="javascript:void(0);">首页<\/a><\/li>',  
283 - prev: '<li class="prev"><a href="javascript:void(0);">上一页<\/a><\/li>',  
284 - next: '<li class="next"><a href="javascript:void(0);">下一页<\/a><\/li>',  
285 - last: '<li class="last"><a href="javascript:void(0);">尾页<\/a><\/li>',  
286 - page: '<li class="page"><a href="javascript:void(0);">{{page}}<\/a><\/li>',  
287 - onPageChange: function (num, type) {  
288 - if(initPagination){  
289 - initPagination = false;  
290 - return;  
291 - }  
292 -  
293 -  
294 - page = num - 1;  
295 - jsDoQuery(null, false);  
296 - }  
297 - });  
298 - }  
299 -  
300 - function openAllotWindow() {  
301 - var id = $(this).data('id');  
302 - $.get('/pages/permission/user/controlAllot.html', function (content) {  
303 - layer.open({  
304 - type: 1,  
305 - area: ['600px', '395px'],  
306 - content: content,  
307 - title: '线路调度权限分配',  
308 - shift: 5,  
309 - scrollbar: false,  
310 - success: function () {  
311 - $('#pageRealControlAllotWrap').trigger('init', id);  
312 - }  
313 - });  
314 - });  
315 - }  
316 -  
317 - //删除  
318 - $('#removeButton').on('click', function(){  
319 - if($(this).attr('disabled'))  
320 - return;  
321 -  
322 - var id = $('#datatable_resource input.icheck:checked').data('id');  
323 -  
324 - removeConfirm('确定要删除选中的数据?', '/resource/' + id ,function(){  
325 - $('tr.filter .filter-submit').click();  
326 - });  
327 - });  
328 - },1000);  
329 -  
330 -});  
331 -//改变状态  
332 -function changeEnabled(id,enabled){  
333 - $get('/user/changeEnabled',{id:id,enabled:enabled},function(result){  
334 - jsDoQuery(null, true);  
335 - })  
336 -} 1 +<div class="page-head">
  2 + <div class="page-title">
  3 + <h1>用户管理</h1>
  4 + </div>
  5 +</div>
  6 +
  7 +<ul class="page-breadcrumb breadcrumb">
  8 + <li><a href="/pages/home.html" data-pjax>首页</a> <i class="fa fa-circle"></i></li>
  9 + <li><span class="active">权限管理</span> <i class="fa fa-circle"></i></li>
  10 + <li><span class="active">用户管理</span></li>
  11 +</ul>
  12 +
  13 +<div class="row">
  14 + <div class="col-md-12">
  15 + <!-- Begin: life time stats -->
  16 + <div class="portlet light portlet-fit portlet-datatable bordered">
  17 + <div class="portlet-title">
  18 + <div class="caption">
  19 + <i class="fa fa-users font-dark"></i> <span
  20 + class="caption-subject font-dark sbold uppercase">用户数据表</span>
  21 + </div>
  22 + <div class="actions">
  23 + <a class="btn btn-circle blue" href="add.html" data-pjax><i class="fa fa-plus"></i> 添加用户</a>
  24 +
  25 + </div>
  26 + </div>
  27 + <div class="portlet-body">
  28 + <div class="table-container" style="margin-top: 10px">
  29 + <table
  30 + class="table table-striped table-bordered table-hover table-checkable"
  31 + id="datatable_user">
  32 + <thead>
  33 + <tr role="row" class="heading">
  34 + <th width="3%">#</th>
  35 + <th width="15%">登录名</th>
  36 + <th width="13%">姓名</th>
  37 + <th width="100">所属机构</th>
  38 + <th width="11%">角色</th>
  39 + <th width="10%">状态</th>
  40 + <th width="18%">最后登录时间</th>
  41 + <th width="18%">操作</th>
  42 + </tr>
  43 + <tr role="row" class="filter">
  44 + <td></td>
  45 + <td>
  46 + <input type="text" class="form-control form-filter input-sm" name="userName_like">
  47 + </td>
  48 + <td>
  49 + <input type="text" class="form-control form-filter input-sm" name="name_like">
  50 + </td>
  51 + <td>
  52 + <input type="text" class="form-control form-filter input-sm" name="agencies_like">
  53 + </td>
  54 + <td></td>
  55 + <td>
  56 + <select class="form-control form-filter " name="enabled_eq">
  57 + <option value="">请选择...</option>
  58 + <option value="true">可用</option>
  59 + <option value="false">禁用</option>
  60 + </select>
  61 + </td>
  62 + <td></td>
  63 +
  64 + <td>
  65 + <button class="btn btn-sm green btn-outline filter-submit margin-bottom" >
  66 + <i class="fa fa-search"></i> 搜索</button>
  67 +
  68 + <button class="btn btn-sm red btn-outline filter-cancel">
  69 + <i class="fa fa-times"></i> 重置</button>
  70 + </td>
  71 + </tr>
  72 + </thead>
  73 + <tbody></tbody>
  74 + </table>
  75 + <div style="text-align: right;">
  76 + <ul id="pagination" class="pagination"></ul>
  77 + </div>
  78 + </div>
  79 + </div>
  80 + </div>
  81 + </div>
  82 +</div>
  83 +
  84 +<script id="user_list_temp" type="text/html">
  85 +{{each list as obj i}}
  86 +<tr>
  87 + <td style="vertical-align: middle;">
  88 + <!--<input type="checkbox" class="group-checkable icheck" data-id="{{obj.id}}">-->
  89 + {{++i}}
  90 + </td>
  91 + <td>
  92 + {{obj.userName}}
  93 + </td>
  94 + <td>
  95 + {{obj.name}}
  96 + </td>
  97 + <td>
  98 + {{obj.agencies}}
  99 + </td>
  100 + <td>
  101 + {{each obj.roles as role j}}
  102 + {{role.roleName}}、
  103 + {{/each}}
  104 + </td>
  105 + <td>
  106 + {{if obj.enabled}}
  107 + 可用
  108 + {{else}}
  109 + 禁用
  110 + {{/if}}
  111 + </td>
  112 + <td>
  113 + {{obj.lastLoginDate}}
  114 + </td>
  115 + <td>
  116 + {{if obj.isEdit == 0}}
  117 + <a class="btn btn-sm blue btn-outline" href="edit.html?no={{obj.id}}" data-pjax><i class="fa fa-edit"></i> 编辑</a>
  118 + <!--<button type="button" class="btn btn-sm line_allot_btn" data-id="{{obj.id}}">线调线路分配</button>-->
  119 + {{/if}}
  120 + {{if obj.isAdmin}}
  121 + <a class="btn btn-sm red btn-outline reset_password" data-id="{{obj.id}}" data-name="{{obj.userName}}" data-pjax><i class="fa fa-undo"></i> 重置密码</a>
  122 + {{/if}}
  123 + </td>
  124 +</tr>
  125 +{{/each}}
  126 +{{if list.length == 0}}
  127 +<tr>
  128 + <td colspan=8><h6 class="muted">没有找到相关数据</h6></td>
  129 +</tr>
  130 +{{/if}}
  131 +</script>
  132 +
  133 +<script>
  134 +$(function(){
  135 + var page = 0, initPagination;
  136 + var user,isAdmin = false;
  137 + var icheckOptions = {
  138 + checkboxClass: 'icheckbox_flat-blue',
  139 + increaseArea: '20%'
  140 + };
  141 + $.get('/user/getCurrentUser', function(data) {
  142 + user = data;
  143 + var roles = user.roles;
  144 + $.each(roles,function () {
  145 + if(this.level == 1)
  146 + isAdmin = true;
  147 + })
  148 +
  149 + });
  150 +
  151 + setTimeout(function () {
  152 + $(document).on('click', 'a.reset_password', function () {
  153 + var id = $(this).data('id');
  154 + var name = $(this).data('name');
  155 + swal({
  156 + title: "重装密码",
  157 + text: "将登录名为"+name+"的用户,密码重置为随机密码!",
  158 + type: "warning",
  159 + showCancelButton: true,
  160 + confirmButtonColor: "#DD6B55",
  161 + confirmButtonText: "重置",
  162 + cancelButtonText: "取消",
  163 + closeOnConfirm: false },
  164 + function(){
  165 + $.post('/user/resetPassword',{'id':id},function(result){
  166 + if(result.status=='SUCCESS') {
  167 + // 弹出添加成功提示消息
  168 + swal("登录名为"+name+"的用户密码重置成功!", "success");
  169 + } else if(result.status=='ERROR') {
  170 + // 弹出添加失败提示消息
  171 + swal("重置失败!", result.msg+",请联系开发人员!", "ERROR");
  172 + }
  173 + // loadPage('list.html');
  174 + // 发布后刷新页面
  175 + jsDoQuery(getParams(), true);
  176 + });
  177 + });
  178 + });
  179 + jsDoQuery(null,true);
  180 +
  181 + //重置
  182 + $('tr.filter .filter-cancel').on('click', function(){
  183 + $('tr.filter input, select').val('').change();
  184 + jsDoQuery(null, true);
  185 + });
  186 +
  187 + function getParams() {
  188 + var cells = $('tr.filter')[0].cells
  189 + ,params = {}
  190 + ,name;
  191 + $.each(cells, function(i, cell){
  192 + var items = $('input,select', cell);
  193 + for(var j = 0, item; item = items[j++];){
  194 + name = $(item).attr('name');
  195 + if(name){
  196 + params[name] = $(item).val();
  197 + }
  198 + }
  199 + });
  200 + return params;
  201 + }
  202 +
  203 + //提交
  204 + $('tr.filter .filter-submit').on('click', function(){
  205 + jsDoQuery(getParams(), true);
  206 + });
  207 +
  208 + /*
  209 + * 获取数据 p: 要提交的参数, pagination: 是否重新分页
  210 + */
  211 + function jsDoQuery(p, pagination){
  212 + var roles = new Map();
  213 + // 查询下级角色
  214 + $.ajax({
  215 + url: "/role/findSubordinate",
  216 + type: "Get",
  217 + async:false,
  218 + data: null,
  219 + success: function (rs) {
  220 + if(rs.status == "SUCCESS"){
  221 + $.each(rs.list,function(i,obj){
  222 + roles[obj.id] = obj;
  223 + });
  224 + }
  225 + }
  226 + });
  227 + var params = {};
  228 + if(p)
  229 + params = p;
  230 + //更新时间排序
  231 + params['order'] = 'lastLoginDate';
  232 + params['page'] = page;
  233 + // params['id_eq'] = "1";
  234 + var i = layer.load(2);
  235 + $get('/user' ,params, function(data){
  236 + var list = data.content;
  237 + $.each(list, function(i, obj) {
  238 + if(roles[obj.roles[0].id] != null && roles[obj.roles[0].id] != undefined){
  239 + obj.isEdit = 0;
  240 + } else{
  241 + obj.isEdit = 1;
  242 + }
  243 + obj.isAdmin = isAdmin;
  244 + obj.lastLoginDate = moment(obj.lastLoginDate).format("YYYY-MM-DD HH:mm:ss");
  245 + });
  246 +
  247 + var bodyHtm = template('user_list_temp', {list: list});
  248 +
  249 + $('#datatable_user tbody').html(bodyHtm)
  250 + .find('.icheck').iCheck(icheckOptions)
  251 + .on('ifChanged', iCheckChange);
  252 + if(pagination && list.length > 0){
  253 + //重新分页
  254 + initPagination = true;
  255 + showPagination(data);
  256 + }
  257 + layer.close(i);
  258 +
  259 + $('.line_allot_btn').on('click', openAllotWindow);
  260 + });
  261 + }
  262 +
  263 + function iCheckChange(){
  264 + var tr = $(this).parents('tr');
  265 + if(this.checked)
  266 + tr.addClass('row-active');
  267 + else
  268 + tr.removeClass('row-active');
  269 +
  270 + if($('#datatable_resource input.icheck:checked').length == 1)
  271 + $('#removeButton').removeAttr('disabled');
  272 + else
  273 + $('#removeButton').attr('disabled', 'disabled');
  274 + }
  275 +
  276 + function showPagination(data){
  277 + //分页
  278 + $('#pagination').jqPaginator({
  279 + totalPages: data.totalPages,
  280 + visiblePages: 6,
  281 + currentPage: page + 1,
  282 + first: '<li class="first"><a href="javascript:void(0);">首页<\/a><\/li>',
  283 + prev: '<li class="prev"><a href="javascript:void(0);">上一页<\/a><\/li>',
  284 + next: '<li class="next"><a href="javascript:void(0);">下一页<\/a><\/li>',
  285 + last: '<li class="last"><a href="javascript:void(0);">尾页<\/a><\/li>',
  286 + page: '<li class="page"><a href="javascript:void(0);">{{page}}<\/a><\/li>',
  287 + onPageChange: function (num, type) {
  288 + if(initPagination){
  289 + initPagination = false;
  290 + return;
  291 + }
  292 +
  293 +
  294 + page = num - 1;
  295 + jsDoQuery(null, false);
  296 + }
  297 + });
  298 + }
  299 +
  300 + function openAllotWindow() {
  301 + var id = $(this).data('id');
  302 + $.get('/pages/permission/user/controlAllot.html', function (content) {
  303 + layer.open({
  304 + type: 1,
  305 + area: ['600px', '395px'],
  306 + content: content,
  307 + title: '线路调度权限分配',
  308 + shift: 5,
  309 + scrollbar: false,
  310 + success: function () {
  311 + $('#pageRealControlAllotWrap').trigger('init', id);
  312 + }
  313 + });
  314 + });
  315 + }
  316 +
  317 + //删除
  318 + $('#removeButton').on('click', function(){
  319 + if($(this).attr('disabled'))
  320 + return;
  321 +
  322 + var id = $('#datatable_resource input.icheck:checked').data('id');
  323 +
  324 + removeConfirm('确定要删除选中的数据?', '/resource/' + id ,function(){
  325 + $('tr.filter .filter-submit').click();
  326 + });
  327 + });
  328 + },1000);
  329 +
  330 +});
  331 +//改变状态
  332 +function changeEnabled(id,enabled){
  333 + $get('/user/changeEnabled',{id:id,enabled:enabled},function(result){
  334 + jsDoQuery(null, true);
  335 + })
  336 +}
337 </script> 337 </script>
338 \ No newline at end of file 338 \ No newline at end of file