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 import java.util.*;
7 7  
8 8 import com.bsth.service.schedule.utils.SpringUtils;
  9 +import com.bsth.util.MailUtils;
9 10 import com.fasterxml.jackson.core.JsonProcessingException;
10 11 import com.fasterxml.jackson.databind.MapperFeature;
11 12 import com.fasterxml.jackson.databind.ObjectMapper;
... ... @@ -44,6 +45,9 @@ public class AdminUtilsController {
44 45 Logger logger = LoggerFactory.getLogger(this.getClass());
45 46  
46 47 @Autowired
  48 + private ObjectMapper objectMapper;
  49 +
  50 + @Autowired
47 51 DayOfSchedule dayOfSchedule;
48 52  
49 53 @Autowired
... ... @@ -58,6 +62,9 @@ public class AdminUtilsController {
58 62 @Autowired
59 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 265  
259 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 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 1607 // 在60m内认为是同一个站点
1608 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 1611 map.put("name", s.getStationName().toString());
1612   - // 匹配到站点后用这个站点的名字,但是使用gps点作为中心点
  1612 +// 匹配到站点后用这个站点的名字,但是使用gps点作为中心点
1613 1613 // map.put("potion_lng", points[0]);
1614 1614 // map.put("potion_lat", points[1]);
1615 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 2  
3 3 import com.bsth.common.ResponseCode;
4 4 import com.bsth.controller.sys.util.RSAUtils;
  5 +import com.bsth.email.SendEmailController;
  6 +import com.bsth.email.entity.EmailBean;
5 7 import com.bsth.entity.sys.Role;
6 8 import com.bsth.entity.sys.SysUser;
7 9 import com.bsth.repository.sys.SysUserRepository;
... ... @@ -9,6 +11,8 @@ import com.bsth.security.util.SecurityUtils;
9 11 import com.bsth.service.impl.BaseServiceImpl;
10 12 import com.bsth.service.sys.RoleService;
11 13 import com.bsth.service.sys.SysUserService;
  14 +import com.bsth.util.IpUtils;
  15 +import com.bsth.util.MailUtils;
12 16 import com.google.gson.Gson;
13 17 import com.google.gson.reflect.TypeToken;
14 18 import org.slf4j.Logger;
... ... @@ -33,6 +37,10 @@ public class SysUserServiceImpl extends BaseServiceImpl&lt;SysUser, Integer&gt; implem
33 37 @Autowired
34 38 RoleService roleService;
35 39  
  40 + // 发送邮件
  41 + @Autowired
  42 + private MailUtils mailUtils;
  43 +
36 44 Logger logger = LoggerFactory.getLogger(this.getClass());
37 45  
38 46 @Override
... ... @@ -166,7 +174,14 @@ public class SysUserServiceImpl extends BaseServiceImpl&lt;SysUser, Integer&gt; implem
166 174 Legality = true;
167 175 }
168 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 185 rs.put("status", ResponseCode.SUCCESS);
171 186 rs.put("msg", "密码重置成功!");
172 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 52 ## dsm ack interface
53 53 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?
54 54 ## cp ack interface
55   -cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/
56 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 59 \ No newline at end of file
... ...
src/main/resources/application-prod.properties
... ... @@ -54,4 +54,6 @@ ms.fl.generate=true
54 54 ## dsm ack interface
55 55 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?
56 56 ## cp ack interface
57   -cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/
58 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 61 \ No newline at end of file
... ...
src/main/resources/application-test.properties
... ... @@ -45,4 +45,6 @@ ms.fl.generate=false
45 45 ## dsm ack interface
46 46 dsm.ack.url= http://211.95.61.66:9008/modules/dsmCheckTheRecord/addDsm?
47 47 ## cp ack interface
48   -cp.ack.url= http://114.80.178.12:8778/prod-api/serverApi/instructionsIssue/confirm/
49 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 52 \ No newline at end of file
... ...
src/main/resources/static/pages/base/line/add.html
... ... @@ -383,7 +383,7 @@
383 383  
384 384 <!-- 线路票价 START -->
385 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 387 <div class="col-md-4">
388 388 <input type="text" class="form-control" name="ticketPrice" id="ticketPriceInput"
389 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 221  
222 222 },
223 223 submitHandler : function(f) {
  224 + debugger;
224 225 // 隐藏弹出层
225 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 325 var tempStr = paramsStationsArray[k].split('\t');
325 326 var tempPoint = transGpsLoc(tempStr[0],tempStr[1]);
326 327 var point = {lng:tempPoint.lng, lat:tempPoint.lat};
  328 +
  329 + sectionList[k] = point;
  330 +
327 331 if(tempStr.length < 4){
328   - sectionList[k] = point;
329 332 isPush = true;
330 333 }else {
331 334 if(isPush) {
332   - sectionList[k] = point;
333 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 339 isPush = false;
336 340 }
337 341 }
  342 +
338 343 for(var i = 0 ;i<sectionList.length;i++) {
339 344 if(sectionList[i] == "" || isNaN(sectionList[i].lng) || typeof(sectionList[i]) == "undefined" || sectionList[i] == null) {
340 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 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 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 280 if(isPush) {
281 281 sectionList[k] = point;
282 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 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 118 });
119 119  
120 120  
121   - //从xml中获取节点内容
  121 +//从xml中获取节点内容
122 122 function getXmlNode(str){
123 123 //创建文档对象
124 124 var parser=new DOMParser();
... ... @@ -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 142 var getXmlSection = function (xml) {
143 143 // var xml = $("#xmlText").val();
144 144 var stationPointList = getXmlNode(xml);
... ... @@ -161,7 +161,7 @@ $(&#39;#edit_route_mobal&#39;).on(&#39;editRouteMobal.show&#39;, function(e,WorldsBMap,GetAjaxDa
161 161 }
162 162 return sections;
163 163 };
164   -
  164 +
165 165 var nearestSectionPoint = function (stationPointList, sectionPointList) {
166 166 var mapping = {};
167 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 179  
180 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 226  
228 227 },
229 228 submitHandler : function(f) {
  229 + debugger;
230 230 // 隐藏弹出层
231 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 324 for(var k =0;k<len;k++) {
325 325 if(paramsStationsArray[k]=="")
326 326 continue;
327   -
328 327 var tempStr = paramsStationsArray[k].split('\t');
329   -
330   - if(tempStr[0] == "undefined" || tempStr[0] == ""){
331   - continue;
332   - }
333   -
334 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 333 if(tempStr.length < 4){
339   - sectionList[k] = point;
340 334 isPush = true;
341 335 }else {
342 336 if(isPush) {
343   - sectionList[k] = point;
344 337 stationList.push({name:tempStr[3], potion:{lng:tempPoint.lng, lat:tempPoint.lat} , wgs:{x:tempStr[0], y:tempStr[1]}});
345 338 }
346 339 isPush = false;
347 340 }
348 341 }
  342 +
349 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 345 sectionList.splice(i,1);//删除数组中下表i-i+1之间的值
352 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 350 return routeList;
357 351 }
358 352  
359   -
360 353 function transGpsLoc(lng,lat) {
361 354 var bdLoc = TransGPS.locationMake(lng, lat);
362 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 337 </script>
338 338 \ No newline at end of file
... ...