From 67cda4e69eb4067bea8b63a5ee2bdc71ebbc8260 Mon Sep 17 00:00:00 2001 From: leewand Date: Mon, 21 Sep 2020 10:05:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E5=8A=9F=E8=83=BD=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=AE=A1=E7=90=86=20=E5=8F=91=E5=8A=A8?= =?UTF-8?q?=E6=9C=BA=E7=AE=A1=E7=90=86=20+=20=E5=8F=91=E5=8A=A8=E6=9C=BA?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE=E5=86=99=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E5=8D=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/common/utils/EntityUtils.java | 107 +++++++++ .../common/utils/ReflectionUtils.java | 215 ++++++++++++++++++ .../security/common/utils/UUIDUtils.java | 31 +++ .../controller/EngineManageController.java | 122 ++++++++++ .../param/controller/ParamItemController.java | 97 ++++++++ .../modules/param/dao/EngineItemDao.java | 29 +++ .../modules/param/dao/EngineParamDao.java | 17 ++ .../modules/param/dao/ParamItemDao.java | 23 ++ .../param/entity/EngineItemEntity.java | 72 ++++++ .../param/entity/EngineParamEntity.java | 64 ++++++ .../modules/param/entity/ParamItemEntity.java | 64 ++++++ .../param/service/EngineManageService.java | 33 +++ .../param/service/EngineParamService.java | 20 ++ .../param/service/ParamItemService.java | 22 ++ .../service/impl/EngineManageServiceImpl.java | 158 +++++++++++++ .../service/impl/EngineParamServiceImpl.java | 29 +++ .../service/impl/ParamItemServiceImpl.java | 45 ++++ .../resources/mapper/param/EngineItemDao.xml | 47 ++++ .../resources/mapper/param/ParamItemDao.xml | 25 ++ .../src/main/resources/statics/css/main.css | 27 +++ .../src/main/resources/statics/js/common.js | 7 +- .../statics/js/modules/param/engineManager.js | 154 +++++++++++++ .../statics/js/modules/param/paramItem.js | 138 +++++++++++ .../validate/additional-methods.min.js | 4 + .../validate/jquery.validate.extend.js | 180 +++++++++++++++ .../plugins/validate/jquery.validate.min.js | 4 + .../plugins/validate/messages_zh.min.js | 27 +++ .../src/main/resources/templates/header.html | 6 +- .../src/main/resources/templates/index.html | 6 +- .../src/main/resources/templates/index1.html | 4 +- .../src/main/resources/templates/login.html | 12 +- .../modules/param/engineManager.html | 54 +++++ .../templates/modules/param/paramItem.html | 65 ++++++ 33 files changed, 1895 insertions(+), 13 deletions(-) create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/EntityUtils.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/ReflectionUtils.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/UUIDUtils.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/EngineManageController.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/ParamItemController.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineItemDao.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineParamDao.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/ParamItemDao.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineItemEntity.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineParamEntity.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/ParamItemEntity.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineManageService.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineParamService.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/ParamItemService.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineManageServiceImpl.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineParamServiceImpl.java create mode 100644 neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/ParamItemServiceImpl.java create mode 100644 neuray-admin/src/main/resources/mapper/param/EngineItemDao.xml create mode 100644 neuray-admin/src/main/resources/mapper/param/ParamItemDao.xml create mode 100644 neuray-admin/src/main/resources/statics/js/modules/param/engineManager.js create mode 100644 neuray-admin/src/main/resources/statics/js/modules/param/paramItem.js create mode 100644 neuray-admin/src/main/resources/statics/plugins/validate/additional-methods.min.js create mode 100644 neuray-admin/src/main/resources/statics/plugins/validate/jquery.validate.extend.js create mode 100644 neuray-admin/src/main/resources/statics/plugins/validate/jquery.validate.min.js create mode 100644 neuray-admin/src/main/resources/statics/plugins/validate/messages_zh.min.js create mode 100644 neuray-admin/src/main/resources/templates/modules/param/engineManager.html create mode 100644 neuray-admin/src/main/resources/templates/modules/param/paramItem.html diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/EntityUtils.java b/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/EntityUtils.java new file mode 100644 index 0000000..33bda6e --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/EntityUtils.java @@ -0,0 +1,107 @@ +package com.gitee.neuray.security.common.utils; + +import com.gitee.neuray.security.modules.sys.shiro.ShiroUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.net.URLDecoder; +import java.util.Date; + + +/** + * 实体类相关工具类 + * 解决问题: 1、快速对实体的常驻字段,如:crtUser、crtHost、updUser等值快速注入 + * + * @author dk + * @version 1.0 + * @date 2018年3月14日 + */ +public class EntityUtils { + /** + * 快速将bean的crtUser、crtHost、crtTime、updUser、updHost、updTime附上相关值 + * + * @param entity 实体bean + * @author dk + */ + public static void setCreatAndUpdatInfo(T entity) { + setCreateInfo(entity); + setUpdatedInfo(entity); + } + + /** + * 快速将bean的crtUser、crtHost、crtTime附上相关值 + * + * @param entity 实体bean + * @author dk + */ + public static void setCreateInfo(T entity){ + Long userId = ShiroUtils.getUserId(); + String userName = ShiroUtils.getUserEntity().getUsername(); + Long deptId = ShiroUtils.getUserEntity().getDeptId(); + // 默认属性 + String[] fields = {"createTime","createUser","createName","deptId"}; + Field field = ReflectionUtils.getAccessibleField(entity, "createTime"); + // 默认值 + Object [] value = null; + if(field!=null&&field.getType().equals(Date.class)){ + value = new Object []{new Date(),userId,userName,deptId}; + } + // 填充默认属性值 + setDefaultValues(entity, fields, value); + } + + /** + * 快速将bean的updUser、updHost、updTime附上相关值 + * + * @param entity 实体bean + * @author dk + */ + public static void setUpdatedInfo(T entity){ + Long userId = ShiroUtils.getUserId(); + String userName = ShiroUtils.getUserEntity().getUsername(); + // 默认属性 + String[] fields = {"updateTime","updateUser","updateName"}; + Field field = ReflectionUtils.getAccessibleField(entity, "createTime"); + Object [] value = null; + if(field!=null&&field.getType().equals(Date.class)){ + value = new Object []{new Date(),userId,userName}; + } + // 填充默认属性值 + setDefaultValues(entity, fields, value); + } + /** + * 依据对象的属性数组和值数组对对象的属性进行赋值 + * + * @param entity 对象 + * @param fields 属性数组 + * @param value 值数组 + * @author dk + */ + private static void setDefaultValues(T entity, String[] fields, Object[] value) { + for(int i=0;i boolean isPKNotNull(T entity,String field){ + if(!ReflectionUtils.hasField(entity, field)) { + return false; + } + Object value = ReflectionUtils.getFieldValue(entity, field); + return value!=null&&!"".equals(value); + } +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/ReflectionUtils.java b/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/ReflectionUtils.java new file mode 100644 index 0000000..391538a --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/ReflectionUtils.java @@ -0,0 +1,215 @@ +package com.gitee.neuray.security.common.utils; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.Validate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.Assert; + +import java.lang.reflect.*; + +/** + * 反射工具类. + * 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * @author calvin + * @version 2013-01-15 + */ +@SuppressWarnings("rawtypes") +public class ReflectionUtils { + + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + private static Logger logger = LoggerFactory.getLogger(ReflectionUtils.class); + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + Validate.notNull(obj, "object can't be null"); + Validate.notEmpty(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) {//NOSONAR + // Field不在当前类定义,继续向上转型 + continue;// new add + } + } + return null; + } + + /** + * 判断某个对象是否拥有某个属性 + * + * @param obj 对象 + * @param fieldName 属性名 + * @return 有属性返回true + * 无属性返回false + */ + public static boolean hasField(final Object obj, final String fieldName){ + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + return false; + } + return true; + + } + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Method method) { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier + .isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, Object value) { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i=0; i[] parameterTypes, + final Object[] args) { + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) { + throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + obj + "]"); + } + + try { + return method.invoke(obj, args); + } catch (Exception e) { + throw convertReflectionExceptionToUnchecked(e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + public static Object invokeMethodByName(final Object obj, final String methodName, final Object[] args) { + Method method = getAccessibleMethodByName(obj, methodName); + if (method == null) { + throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + obj + "]"); + } + + try { + return method.invoke(obj, args); + } catch (Exception e) { + throw convertReflectionExceptionToUnchecked(e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) { + Validate.notNull(obj, "object can't be null"); + Validate.notEmpty(methodName, "methodName can't be blank"); + + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { + try { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } catch (NoSuchMethodException e) { + // Method不在当前类定义,继续向上转型 + continue;// new add + } + } + return null; + } + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(Exception e) { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) { + return new IllegalArgumentException(e); + } else if (e instanceof InvocationTargetException) { + return new RuntimeException(((InvocationTargetException) e).getTargetException()); + } else if (e instanceof RuntimeException) { + return (RuntimeException) e; + } + return new RuntimeException("Unexpected Checked Exception.", e); + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName) { + Validate.notNull(obj, "object can't be null"); + Validate.notEmpty(methodName, "methodName can't be blank"); + + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) { + if (method.getName().equals(methodName)) { + makeAccessible(method); + return method; + } + } + } + return null; + } + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + public static Object getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + + if (field == null) { + throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); + } + + Object result = null; + try { + result = field.get(obj); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/UUIDUtils.java b/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/UUIDUtils.java new file mode 100644 index 0000000..93970ea --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/common/utils/UUIDUtils.java @@ -0,0 +1,31 @@ +package com.gitee.neuray.security.common.utils; + +import java.util.UUID; + +/** + * + * @author 协同设计小组 + * @date 2017/9/27 + * 唯一编码 + */ +public class UUIDUtils { + public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", + "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z" }; + + + public static String generateShortUuid() { + StringBuffer shortBuffer = new StringBuffer(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + for (int i = 0; i < 8; i++) { + String str = uuid.substring(i * 4, i * 4 + 4); + int x = Integer.parseInt(str, 16); + shortBuffer.append(chars[x % 0x3E]); + } + return shortBuffer.toString(); + + } +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/EngineManageController.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/EngineManageController.java new file mode 100644 index 0000000..3d1edfc --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/EngineManageController.java @@ -0,0 +1,122 @@ +package com.gitee.neuray.security.modules.param.controller; + +import java.util.*; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.gitee.neuray.security.common.validator.ValidatorUtils; +import com.gitee.neuray.security.modules.param.entity.ParamItemEntity; +import com.gitee.neuray.security.modules.param.service.EngineParamService; +import com.gitee.neuray.security.modules.param.service.ParamItemService; +import com.gitee.neuray.security.modules.sys.shiro.ShiroUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.gitee.neuray.security.modules.param.entity.EngineItemEntity; +import com.gitee.neuray.security.modules.param.service.EngineManageService; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.common.utils.R; + + + +/** + * 发动机表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 09:59:45 + */ +@RestController +@RequestMapping("engine/manage") +public class EngineManageController { + @Autowired + private EngineManageService engineManageService; + @Autowired + private ParamItemService paramItemService; + + /** + * 列表 + */ + @RequestMapping("/list") + @RequiresPermissions("engine:manage:list") + public R list(@RequestParam Map params){ + PageUtils page = engineManageService.queryPage(params); + + return R.ok().put("page", page); + } + + + /** + * 信息 + */ + @RequestMapping("/info/{id}") + @RequiresPermissions("engine:manage:info") + public R info(@PathVariable("id") String id){ + EngineItemEntity engineItem = engineManageService.getById(id); + List params = paramItemService.getParamByEngine(id,ShiroUtils.getUserEntity().getDeptId()); + List ids = new ArrayList<>(); + params.stream().forEach((param) -> { + ids.add(param.getId()); + }); + engineItem.setParamIdList(ids); + return R.ok().put("engineItem", engineItem); + } + + /** + * 保存 + */ + @RequestMapping("/save") + @RequiresPermissions("engine:manage:save") + public R save(@RequestBody EngineItemEntity engineItem){ + + engineManageService.saveEngine(engineItem); + return R.ok(); + } + + /** + * 修改 + */ + @RequestMapping("/update") + @RequiresPermissions("engine:manage:update") + public R update(@RequestBody EngineItemEntity engineItem){ + //ValidatorUtils.validateEntity(engineItem); + engineManageService.updateEngine(engineItem); + + return R.ok(); + } + + /** + * 删除 + */ + @RequestMapping("/delete") + @RequiresPermissions("engine:manage:delete") + public R delete(@RequestBody Map map){ + //id + List ids = (List) map.get("ids"); + //表名 + List list = (List) map.get("obj");; + engineManageService.deleteEngine(ids,list); + + return R.ok(); + } + + /** + * 删除 + */ + @RequestMapping("/getParam") + @RequiresPermissions("engine:manage:list") + public R getParam(){ + + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("dept_id",ShiroUtils.getUserEntity().getDeptId()); + List ret = paramItemService.list(queryWrapper); + return R.ok().put("paramList", ret); + } + + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/ParamItemController.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/ParamItemController.java new file mode 100644 index 0000000..8fe1d4e --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/controller/ParamItemController.java @@ -0,0 +1,97 @@ +package com.gitee.neuray.security.modules.param.controller; + +import java.util.Arrays; +import java.util.Map; + +import com.gitee.neuray.security.common.utils.EntityUtils; +import com.gitee.neuray.security.common.validator.ValidatorUtils; +import com.gitee.neuray.security.modules.param.entity.ParamItemEntity; +import com.gitee.neuray.security.modules.param.service.ParamItemService; +import com.gitee.neuray.security.modules.sys.shiro.ShiroUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.common.utils.R; + + + +/** + * 参数项表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-16 15:25:50 + */ +@RestController +@RequestMapping("/param/item") +public class ParamItemController { + @Autowired + private ParamItemService paramItemService; + + /** + * 列表 + */ + @RequestMapping("/list") + @RequiresPermissions("param:item:list") + public R list(@RequestParam Map params){ + PageUtils page = paramItemService.queryPage(params); + + return R.ok().put("page", page); + } + + + /** + * 信息 + */ + @RequestMapping("/info/{id}") + @RequiresPermissions("param:item:info") + public R info(@PathVariable("id") Long id){ + ParamItemEntity paramItem = paramItemService.getById(id); + + return R.ok().put("paramItem", paramItem); + } + + /** + * 保存 + */ + @RequestMapping("/save") + @RequiresPermissions("param:item:save") + public R save(@RequestBody ParamItemEntity paramItem){ + + EntityUtils.setCreatAndUpdatInfo(paramItem); + + paramItemService.save(paramItem); + + return R.ok(); + } + + /** + * 修改 + */ + @RequestMapping("/update") + @RequiresPermissions("param:item:update") + public R update(@RequestBody ParamItemEntity paramItem){ + ValidatorUtils.validateEntity(paramItem); + paramItemService.updateById(paramItem); + + return R.ok(); + } + + /** + * 删除 + */ + @RequestMapping("/delete") + @RequiresPermissions("param:item:delete") + public R delete(@RequestBody Long[] ids){ + paramItemService.removeByIds(Arrays.asList(ids)); + + return R.ok(); + } + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineItemDao.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineItemDao.java new file mode 100644 index 0000000..013cec1 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineItemDao.java @@ -0,0 +1,29 @@ +package com.gitee.neuray.security.modules.param.dao; + +import com.gitee.neuray.security.modules.param.entity.EngineItemEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 发动机表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 09:59:45 + */ +@Mapper +public interface EngineItemDao extends BaseMapper { + void createTable(@Param("list") List list, @Param("tableName") String tableName); + + void dropTable(@Param("tableName") String tableName); + + void dropTables(@Param("list") List list); + + List queryTableColumn(@Param("tableName") String tableName); + + List getParamByTable(@Param("tableName") String tableName); +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineParamDao.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineParamDao.java new file mode 100644 index 0000000..91361b8 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/EngineParamDao.java @@ -0,0 +1,17 @@ +package com.gitee.neuray.security.modules.param.dao; + +import com.gitee.neuray.security.modules.param.entity.EngineParamEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 发动机参数关联表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 10:29:11 + */ +@Mapper +public interface EngineParamDao extends BaseMapper { + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/ParamItemDao.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/ParamItemDao.java new file mode 100644 index 0000000..820db1a --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/dao/ParamItemDao.java @@ -0,0 +1,23 @@ +package com.gitee.neuray.security.modules.param.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.gitee.neuray.security.modules.param.entity.ParamItemEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 参数项表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-16 15:25:50 + */ +@Mapper +public interface ParamItemDao extends BaseMapper { + + List getParamByEngine(Map map); + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineItemEntity.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineItemEntity.java new file mode 100644 index 0000000..c1cbba7 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineItemEntity.java @@ -0,0 +1,72 @@ +package com.gitee.neuray.security.modules.param.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.baomidou.mybatisplus.annotation.TableField; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 发动机表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 09:59:45 + */ +@Data +@TableName("engine_item") +public class EngineItemEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id",type = IdType.INPUT) + private String id; + /** + * 发动机名称 + */ + private String name; + /** + * 发动机参数生成表名 + */ + private String tableName; + /** + * 创建时间 + */ + private Date createTime; + /** + * 创建人id + */ + private Long createUser; + /** + * 创建人名称 + */ + private String createName; + /** + * 修改时间 + */ + private Date updateTime; + /** + * 修改人id + */ + private Long updateUser; + /** + * 修改人名称 + */ + private String updateName; + /** + * 部门id + */ + private Long deptId; + + //参数id + @TableField(exist = false) + private List paramIdList; + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineParamEntity.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineParamEntity.java new file mode 100644 index 0000000..c143d58 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/EngineParamEntity.java @@ -0,0 +1,64 @@ +package com.gitee.neuray.security.modules.param.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 发动机参数关联表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 10:29:11 + */ +@Data +@TableName("engine_param") +public class EngineParamEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 参数id + */ + private Long paramId; + /** + * 发动机id + */ + private String engineId; + /** + * 部门id + */ + private Long deptId; + /** + * 创建时间 + */ + private Date createTime; + /** + * 创建人id + */ + private Long createUser; + /** + * 创建人名字 + */ + private String createName; + /** + * 修改时间 + */ + private Date updateTime; + /** + * 修改人id + */ + private Long updateUser; + /** + * 修改人名字 + */ + private String updateName; + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/ParamItemEntity.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/ParamItemEntity.java new file mode 100644 index 0000000..e544599 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/entity/ParamItemEntity.java @@ -0,0 +1,64 @@ +package com.gitee.neuray.security.modules.param.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 参数项表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-16 15:37:45 + */ +@Data +@TableName("param_item") +public class ParamItemEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId + private Long id; + /** + * 参数名称 + */ + private String paramName; + /** + * 参数描述 + */ + private String paramContent; + /** + * 部门ID + */ + private Long deptId; + /** + * 创建时间 + */ + private Date createTime; + /** + * 创建人ID + */ + private Long createUser; + /** + * 创建人名字 + */ + private String createName; + /** + * 修改时间 + */ + private Date updateTime; + /** + * 修改人ID + */ + private Long updateUser; + /** + * 修改人名字 + */ + private String updateName; + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineManageService.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineManageService.java new file mode 100644 index 0000000..e741991 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineManageService.java @@ -0,0 +1,33 @@ +package com.gitee.neuray.security.modules.param.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.modules.param.entity.EngineItemEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 发动机表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 09:59:45 + */ +public interface EngineManageService extends IService { + + PageUtils queryPage(Map params); + + PageUtils queryEngine(EngineItemEntity engineItemEntity); + + void saveEngine(EngineItemEntity engineItemEntity); + + void updateEngine(EngineItemEntity engineItemEntity); + + void deleteEngine(List ids,List list); + + Map queryTable(Map map); + +} + diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineParamService.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineParamService.java new file mode 100644 index 0000000..c9ce89f --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/EngineParamService.java @@ -0,0 +1,20 @@ +package com.gitee.neuray.security.modules.param.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.modules.param.entity.EngineParamEntity; + +import java.util.Map; + +/** + * 发动机参数关联表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-17 10:29:11 + */ +public interface EngineParamService extends IService { + + PageUtils queryPage(Map params); +} + diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/ParamItemService.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/ParamItemService.java new file mode 100644 index 0000000..88c827b --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/ParamItemService.java @@ -0,0 +1,22 @@ +package com.gitee.neuray.security.modules.param.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.modules.param.entity.ParamItemEntity; + +import java.util.List; +import java.util.Map; + +/** + * 参数项表 + * + * @author neuray + * @email neuray@neuray.com + * @date 2020-09-16 15:25:50 + */ +public interface ParamItemService extends IService { + + PageUtils queryPage(Map params); + List getParamByEngine(String engineId,Long deptId); +} + diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineManageServiceImpl.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineManageServiceImpl.java new file mode 100644 index 0000000..5ffcf79 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineManageServiceImpl.java @@ -0,0 +1,158 @@ +package com.gitee.neuray.security.modules.param.service.impl; + +import com.gitee.neuray.security.common.utils.EntityUtils; +import com.gitee.neuray.security.common.utils.UUIDUtils; +import com.gitee.neuray.security.modules.param.entity.EngineParamEntity; +import com.gitee.neuray.security.modules.param.entity.ParamItemEntity; +import com.gitee.neuray.security.modules.param.service.EngineParamService; +import com.gitee.neuray.security.modules.param.service.ParamItemService; +import org.springframework.stereotype.Service; + +import java.util.*; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.common.utils.Query; + +import com.gitee.neuray.security.modules.param.dao.EngineItemDao; +import com.gitee.neuray.security.modules.param.entity.EngineItemEntity; +import com.gitee.neuray.security.modules.param.service.EngineManageService; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + + +@Service("engineItemService") +public class EngineManageServiceImpl extends ServiceImpl implements EngineManageService { + + @Resource + private EngineParamService engineParamService; + + @Resource + private EngineItemDao engineItemDao; + + @Resource + private ParamItemService paramItemService; + + @Override + public PageUtils queryPage(Map params) { + IPage page = this.page( + new Query().getPage(params), + new QueryWrapper() + ); + + return new PageUtils(page); + } + + @Override + public PageUtils queryEngine(EngineItemEntity engineItemEntity) { + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveEngine(EngineItemEntity engineItemEntity) { + List params = engineItemEntity.getParamIdList(); + String pkID = UUIDUtils.generateShortUuid(); + //1关联表 + List engineParamEntities = new ArrayList<>(); + List tableItem = new ArrayList<>(); + params.stream().forEach((param) -> { + EngineParamEntity engineParamEntity = new EngineParamEntity(); + engineParamEntity.setParamId(param); + engineParamEntity.setEngineId(pkID); + EntityUtils.setCreatAndUpdatInfo(engineParamEntity); + engineParamEntities.add(engineParamEntity); + tableItem.add("param_" + param); + } ); + engineParamService.saveBatch(engineParamEntities); + //2建表 + //生成表名 + String tableUU = UUIDUtils.generateShortUuid(); + String tableName = "engine_" + tableUU; + //3主表 + engineItemEntity.setTableName(tableName); + engineItemEntity.setId(pkID); + EntityUtils.setCreatAndUpdatInfo(engineItemEntity); + this.save(engineItemEntity); + engineItemDao.createTable(tableItem,tableName); + } + + @Override + public void updateEngine(EngineItemEntity engineItemEntity) { + //删除关联表 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("engine_id",engineItemEntity.getId()); + engineParamService.remove(queryWrapper); + //插入关联表 + List engineParamEntities = new ArrayList<>(); + List tableItem = new ArrayList<>(); + engineItemEntity.getParamIdList().stream().forEach((param) -> { + EngineParamEntity engineParamEntity = new EngineParamEntity(); + engineParamEntity.setParamId(param); + engineParamEntity.setEngineId(engineItemEntity.getId()); + EntityUtils.setCreatAndUpdatInfo(engineParamEntity); + engineParamEntities.add(engineParamEntity); + tableItem.add("param_" + param); + } ); + engineParamService.saveBatch(engineParamEntities); + //删除生成表 + if(engineItemEntity.getTableName() != null){ + engineItemDao.dropTable(engineItemEntity.getTableName()); + } + //生成表名 + String tableUU = UUIDUtils.generateShortUuid(); + String tableName = "engine_" + tableUU; + + //修改主表 + engineItemEntity.setTableName(tableName); + EntityUtils.setUpdatedInfo(engineItemEntity); + this.updateById(engineItemEntity); + //执行生成表 + engineItemDao.createTable(tableItem,tableName); + } + + @Override + public void deleteEngine(List ids,List list) { + this.removeByIds(ids); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.in("engine_id",ids); + engineParamService.remove(queryWrapper); + engineItemDao.dropTables(list); + } + + @Override + public Map queryTable(Map map) { + String tableName = map.get("tableName").toString(); + List columns = engineItemDao.queryTableColumn(tableName); + List jqgrid = new ArrayList<>(); + columns.stream().forEach( (t) -> { + String name = t.get("colunmName").toString(); + String id = name.substring(6); + ParamItemEntity p = paramItemService.getById(id); + String lable = p.getParamName(); + Map item = new HashMap(); + item.put("lable",lable); + item.put("name",name); + item.put("index",name); + jqgrid.add(item); + /*{ label: '发动机名称', name: 'name', index: 'name', width: 80 },*/ + }); + + List ret = engineItemDao.getParamByTable(tableName); + + Map retMap = new HashMap(); + retMap.put("column",jqgrid); + retMap.put("ret",ret); + + return retMap; + } + + public static void main(String[] args) { + String a = "1234567"; + String b = a.substring(3); + System.out.println(b); + } +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineParamServiceImpl.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineParamServiceImpl.java new file mode 100644 index 0000000..e4b7d00 --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/EngineParamServiceImpl.java @@ -0,0 +1,29 @@ +package com.gitee.neuray.security.modules.param.service.impl; + +import org.springframework.stereotype.Service; +import java.util.Map; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.common.utils.Query; + +import com.gitee.neuray.security.modules.param.dao.EngineParamDao; +import com.gitee.neuray.security.modules.param.entity.EngineParamEntity; +import com.gitee.neuray.security.modules.param.service.EngineParamService; + + +@Service("engineParamService") +public class EngineParamServiceImpl extends ServiceImpl implements EngineParamService { + + @Override + public PageUtils queryPage(Map params) { + IPage page = this.page( + new Query().getPage(params), + new QueryWrapper() + ); + + return new PageUtils(page); + } + +} diff --git a/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/ParamItemServiceImpl.java b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/ParamItemServiceImpl.java new file mode 100644 index 0000000..7425f9d --- /dev/null +++ b/neuray-admin/src/main/java/com/gitee/neuray/security/modules/param/service/impl/ParamItemServiceImpl.java @@ -0,0 +1,45 @@ +package com.gitee.neuray.security.modules.param.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gitee.neuray.security.common.utils.PageUtils; +import com.gitee.neuray.security.common.utils.Query; + +import com.gitee.neuray.security.modules.param.dao.ParamItemDao; +import com.gitee.neuray.security.modules.param.entity.ParamItemEntity; +import com.gitee.neuray.security.modules.param.service.ParamItemService; + + +@Service("paramItemService") +public class ParamItemServiceImpl extends ServiceImpl implements ParamItemService { + + @Autowired + private ParamItemDao paramItemDao; + + @Override + public PageUtils queryPage(Map params) { + IPage page = this.page( + new Query().getPage(params), + new QueryWrapper() + ); + + return new PageUtils(page); + } + + @Override + public List getParamByEngine(String engineId, Long deptId) { + Map map = new HashMap<>(); + map.put("engineId",engineId); + map.put("deptId",deptId); + return paramItemDao.getParamByEngine(map); + } + + +} diff --git a/neuray-admin/src/main/resources/mapper/param/EngineItemDao.xml b/neuray-admin/src/main/resources/mapper/param/EngineItemDao.xml new file mode 100644 index 0000000..c6dd1b6 --- /dev/null +++ b/neuray-admin/src/main/resources/mapper/param/EngineItemDao.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + create TABLE ${tableName} + + ${item} varchar(20) + + + + DROP TABLE IF EXISTS ${tableName} + + + DROP TABLE IF EXISTS + + ${item} + + + + + + + + + \ No newline at end of file diff --git a/neuray-admin/src/main/resources/mapper/param/ParamItemDao.xml b/neuray-admin/src/main/resources/mapper/param/ParamItemDao.xml new file mode 100644 index 0000000..3192311 --- /dev/null +++ b/neuray-admin/src/main/resources/mapper/param/ParamItemDao.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/neuray-admin/src/main/resources/statics/css/main.css b/neuray-admin/src/main/resources/statics/css/main.css index a6ed176..d2da3f1 100644 --- a/neuray-admin/src/main/resources/statics/css/main.css +++ b/neuray-admin/src/main/resources/statics/css/main.css @@ -51,4 +51,31 @@ tbody > tr > th {font-weight: normal; } .form-horizontal .form-group {margin-left:0px;margin-right:0px;} .form-horizontal{ width:550px;padding-top:20px; +} +/** 表单验证 样式布局 **/ +.control-label.is-required:before { + content: '* '; + color: red; +} +.Validform_error,input.error,select.error { + background-color: #fbe2e2; + border-color: #c66161; + color: #c00 +} + +.Validform_wrong,.Validform_right,.Validform_warning { + display: inline-block; + height: 20px; + font-size: 12px; + vertical-align: middle; + padding-left: 25px +} + +label.error { + position: absolute; + right: 18px; + top: 10px; + color: #ef392b; + font-size: 12px; + z-index:99; } \ No newline at end of file diff --git a/neuray-admin/src/main/resources/statics/js/common.js b/neuray-admin/src/main/resources/statics/js/common.js index b9c25e7..95b2b35 100644 --- a/neuray-admin/src/main/resources/statics/js/common.js +++ b/neuray-admin/src/main/resources/statics/js/common.js @@ -74,7 +74,12 @@ function getSelectedRows() { return grid.getGridParam("selarrrow"); } - +//选择多条记录 +function getSelectedData(id) { + var grid = $("#jqGrid"); + var rowKey = grid.getRowData(id); + return rowKey +} //判断是否为空 function isBlank(value) { return !value || !/\S/.test(value) diff --git a/neuray-admin/src/main/resources/statics/js/modules/param/engineManager.js b/neuray-admin/src/main/resources/statics/js/modules/param/engineManager.js new file mode 100644 index 0000000..152e331 --- /dev/null +++ b/neuray-admin/src/main/resources/statics/js/modules/param/engineManager.js @@ -0,0 +1,154 @@ +$(function () { + $("#jqGrid").jqGrid({ + url: baseURL + 'engine/manage/list', + datatype: "json", + colModel: [ + { label: 'id', name: 'id', index: 'id', width: 50, key: true }, + { label: '发动机名称', name: 'name', index: 'name', width: 80 }, + { label: '发动机参数生成表名', name: 'tableName', index: 'table_name', width: 80 }, + { label: '创建时间', name: 'createTime', index: 'create_time', width: 80 }, + { label: '创建人id', name: 'createUser', index: 'create_user', width: 80 }, + { label: '创建人名称', name: 'createName', index: 'create_name', width: 80 }, + { label: '修改时间', name: 'updateTime', index: 'update_time', width: 80 }, + { label: '修改人id', name: 'updateUser', index: 'update_user', width: 80 }, + { label: '修改人名称', name: 'updateName', index: 'update_name', width: 80 }, + { label: '部门id', name: 'deptId', index: 'dept_id', width: 80 } + ], + viewrecords: true, + height: 385, + rowNum: 10, + rowList : [10,30,50], + rownumbers: true, + rownumWidth: 25, + autowidth:true, + multiselect: true, + pager: "#jqGridPager", + jsonReader : { + root: "page.list", + page: "page.currPage", + total: "page.totalPage", + records: "page.totalCount" + }, + prmNames : { + page:"page", + rows:"limit", + order: "order" + }, + gridComplete:function(){ + //隐藏grid底部滚动条 + $("#jqGrid").closest(".ui-jqgrid-bdiv").css({ "overflow-x" : "hidden" }); + } + }); +}); + +var vm = new Vue({ + el:'#rrapp', + data:{ + showList: true, + title: null, + engineItem: { + paramIdList: [], + name: null + }, + paramList: {} + }, + methods: { + query: function () { + vm.reload(); + }, + add: function(){ + vm.showList = false; + vm.title = "新增"; + vm.engineItem = {paramIdList: [],name: null}; + vm.paramList = {}; + this.getParam() + }, + update: function (event) { + var id = getSelectedRow(); + if(id == null){ + return ; + } + vm.showList = false; + vm.title = "修改"; + vm.paramList = {}; + this.getParam() + vm.getInfo(id) + }, + saveOrUpdate: function (event) { + $('#btnSaveOrUpdate').button('loading').delay(1000).queue(function() { + var url = vm.engineItem.id == null ? "engine/manage/save" : "engine/manage/update"; + $.ajax({ + type: "POST", + url: baseURL + url, + contentType: "application/json", + data: JSON.stringify(vm.engineItem), + success: function(r){ + if(r.code === 0){ + layer.msg("操作成功", {icon: 1}); + vm.reload(); + $('#btnSaveOrUpdate').button('reset'); + $('#btnSaveOrUpdate').dequeue(); + }else{ + layer.alert(r.msg); + $('#btnSaveOrUpdate').button('reset'); + $('#btnSaveOrUpdate').dequeue(); + } + } + }); + }); + }, + del: function (event) { + var ids = getSelectedRows(); + var paramDel = [] + for(var id in ids){ + paramDel.push(getSelectedData(ids[id]).tableName) + } + var mapParam = {} + mapParam.ids = ids + mapParam.obj = paramDel + if(ids == null){ + return ; + } + var lock = false; + layer.confirm('确定要删除选中的记录?', { + btn: ['确定','取消'] //按钮 + }, function(){ + if(!lock) { + lock = true; + $.ajax({ + type: "POST", + url: baseURL + "engine/manage/delete", + contentType: "application/json", + data: JSON.stringify(mapParam), + success: function(r){ + if(r.code == 0){ + layer.msg("操作成功", {icon: 1}); + $("#jqGrid").trigger("reloadGrid"); + }else{ + layer.alert(r.msg); + } + } + }); + } + }, function(){ + }); + }, + getInfo: function(id){ + $.get(baseURL + "engine/manage/info/"+id, function(r){ + vm.engineItem = r.engineItem; + }); + }, + getParam: function(){ + $.get(baseURL + "engine/manage/getParam/", function(r){ + vm.paramList = r.paramList; + }); + }, + reload: function (event) { + vm.showList = true; + var page = $("#jqGrid").jqGrid('getGridParam','page'); + $("#jqGrid").jqGrid('setGridParam',{ + page:page + }).trigger("reloadGrid"); + } + } +}); \ No newline at end of file diff --git a/neuray-admin/src/main/resources/statics/js/modules/param/paramItem.js b/neuray-admin/src/main/resources/statics/js/modules/param/paramItem.js new file mode 100644 index 0000000..a60badf --- /dev/null +++ b/neuray-admin/src/main/resources/statics/js/modules/param/paramItem.js @@ -0,0 +1,138 @@ +$(function () { + debugger + $("#jqGrid").jqGrid({ + url: baseURL + 'param/item/list', + datatype: "json", + colModel: [ + { label: 'id', name: 'id', index: 'id', width: 50, key: true }, + { label: '参数名称', name: 'paramName', index: 'param_name', width: 80 }, + { label: '参数描述', name: 'paramContent', index: 'param_content', width: 80 }, + { label: '部门ID', name: 'deptId', index: 'dept_id', width: 80 }, + { label: '创建时间', name: 'createTime', index: 'create_time', width: 80 }, + { label: '创建人ID', name: 'createUser', index: 'create_user', width: 80 }, + { label: '创建人名字', name: 'createName', index: 'create_name', width: 80 }, + { label: '修改时间', name: 'updateTime', index: 'update_time', width: 80 }, + { label: '修改人ID', name: 'updateUser', index: 'update_user', width: 80 }, + { label: '修改人名字', name: 'updateName', index: 'update_name', width: 80 } + ], + viewrecords: true, + height: 385, + rowNum: 10, + rowList : [10,30,50], + rownumbers: true, + rownumWidth: 25, + autowidth:true, + multiselect: true, + pager: "#jqGridPager", + jsonReader : { + root: "page.list", + page: "page.currPage", + total: "page.totalPage", + records: "page.totalCount" + }, + prmNames : { + page:"page", + rows:"limit", + order: "order" + }, + gridComplete:function(){ + //隐藏grid底部滚动条 + $("#jqGrid").closest(".ui-jqgrid-bdiv").css({ "overflow-x" : "hidden" }); + } + }); +}); + +var vm = new Vue({ + el:'#rrapp', + data:{ + showList: true, + title: null, + paramItem: {} + }, + methods: { + query: function () { + vm.reload(); + }, + add: function(){ + vm.showList = false; + vm.title = "新增"; + vm.paramItem = {}; + }, + update: function (event) { + var id = getSelectedRow(); + if(id == null){ + return ; + } + vm.showList = false; + vm.title = "修改"; + + vm.getInfo(id) + }, + saveOrUpdate: function (event) { + if($("#form1").validate().form()){ + $('#btnSaveOrUpdate').button('loading').delay(1000).queue(function() { + var url = vm.paramItem.id == null ? "param/item/save" : "param/item/update"; + $.ajax({ + type: "POST", + url: baseURL + url, + contentType: "application/json", + data: JSON.stringify(vm.paramItem), + success: function(r){ + if(r.code === 0){ + layer.msg("操作成功", {icon: 1}); + vm.reload(); + $('#btnSaveOrUpdate').button('reset'); + $('#btnSaveOrUpdate').dequeue(); + }else{ + layer.alert(r.msg); + $('#btnSaveOrUpdate').button('reset'); + $('#btnSaveOrUpdate').dequeue(); + } + } + }); + }); + } + }, + del: function (event) { + var ids = getSelectedRows(); + if(ids == null){ + return ; + } + var lock = false; + layer.confirm('确定要删除选中的记录?', { + btn: ['确定','取消'] //按钮 + }, function(){ + if(!lock) { + lock = true; + $.ajax({ + type: "POST", + url: baseURL + "param/item/delete", + contentType: "application/json", + data: JSON.stringify(ids), + success: function(r){ + if(r.code == 0){ + layer.msg("操作成功", {icon: 1}); + $("#jqGrid").trigger("reloadGrid"); + }else{ + layer.alert(r.msg); + } + } + }); + } + }, function(){ + }); + }, + getInfo: function(id){ + $.get(baseURL + "param/item/info/"+id, function(r){ + vm.paramItem = r.paramItem; + }); + }, + reload: function (event) { + vm.showList = true; + var page = $("#jqGrid").jqGrid('getGridParam','page'); + $("#jqGrid").jqGrid('setGridParam',{ + page:page + }).trigger("reloadGrid"); + } + } +}); \ No newline at end of file diff --git a/neuray-admin/src/main/resources/statics/plugins/validate/additional-methods.min.js b/neuray-admin/src/main/resources/statics/plugins/validate/additional-methods.min.js new file mode 100644 index 0000000..491a3f9 --- /dev/null +++ b/neuray-admin/src/main/resources/statics/plugins/validate/additional-methods.min.js @@ -0,0 +1,4 @@ +/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014 + * http://jqueryvalidation.org/ + * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */ +!function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):a(jQuery)}(function(a){!function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a, c, d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a, c, d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a, c, d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("accept",function(b, c, d){var e,f,g="string"==typeof d?d.replace(/\s/g,"").replace(/,/g,"|"):"image/*",h=this.optional(c);if(h)return h;if("file"===a(c).attr("type")&&(g=g.replace(/\*/g,".*"),c.files&&c.files.length))for(e=0; ec; c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bankaccount number"),a.validator.addMethod("bankorgiroaccountNL",function(b, c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a, b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a)},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a){"use strict";var b,c,d,e,f,g,h=[];if(a=a.toUpperCase(),!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)"))return!1;for(d=0; 9>d; d++)h[d]=parseInt(a.charAt(d),10);for(c=h[2]+h[4]+h[6],e=1; 8>e; e+=2)f=(2*h[e]).toString(),g=f.charAt(1),c+=parseInt(f.charAt(0),10)+(""===g?0:parseInt(g,10));return/^[ABCDEFGHJNPQRSUVW]{1}/.test(a)?(c+="",b=10-parseInt(c.charAt(c.length-1),10),a+=b,h[8].toString()===String.fromCharCode(64+b)||h[8].toString()===a.charAt(a.length-1)):!1},"Please specify a valid CIF number."),a.validator.addMethod("creditcardtypes",function(a, b, c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&/^(5[12345])/.test(a)?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:128&d?!0:!1},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a, b, c){var d,e="string"==typeof c,f=e?c:c[0],g=e?!0:c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a, b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},"Please enter a correct date"),a.validator.addMethod("dateITA",function(a, b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(f,e-1,d,12,0,0,0),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d?!0:!1):h=!1,this.optional(b)||h},"Please enter a correct date"),a.validator.addMethod("dateNL",function(a, b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},"Please enter a correct date"),a.validator.addMethod("extension",function(a, b, c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp(".("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a, b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("iban",function(a, b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="";if(!/^([a-zA-Z0-9]{4} ){2,8}[a-zA-Z0-9]{1,4}|[a-zA-Z0-9]{12,34}$/.test(l))return!1;if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0; j9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("nieES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[T]{1}/.test(a)?a[8]===/^[T]{1}[A-Z0-9]{8}$/.test(a):/^[XYZ]{1}/.test(a)?a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.replace("X","0").replace("Y","1").replace("Z","2").substring(0,8)%23):!1:!1},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):/^[KLM]{1}/.test(a)?a[8]===String.fromCharCode(64):!1:!1},"Please specify a valid NIF number."),a.validator.addMethod("nowhitespace",function(a, b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a, b, c){return this.optional(b)?!0:("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a, b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phoneUK",function(a, b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a, b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a, b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("postalCodeCA",function(a, b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeBR",function(a, b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalcodeIT",function(a, b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a, b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a, b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b, c, d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b, c, d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),jQuery.validator.addMethod("stateUS",function(a, b, c){var d,e="undefined"==typeof c,f=e||"undefined"==typeof c.caseSensitive?!1:c.caseSensitive,g=e||"undefined"==typeof c.includeTerritories?!1:c.includeTerritories,h=e||"undefined"==typeof c.includeMilitary?!1:c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b, c, d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a, b){return this.optional(b)||/^([01]\d|2[0-3])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a, b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a, b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0; 17>b; b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0; c param; + }, $.validator.format("输入值必须大于{0}")); + //校验新旧密码是否相同 + jQuery.validator.addMethod("isdiff",function(){ + var p1=$("#pwdOld").val(); + var p2=$("#pwdNew").val(); + if(p1==p2){ + return false; + }else{ + return true; + } + }); + //校验新密码和确认密码是否相同 + jQuery.validator.addMethod("issame",function(){ + var p3=$("#confirm_password").val(); + var p4=$("#pwdNew").val(); + if(p3==p4){ + return true; + }else{ + return false; + } + }); + //校验基础信息表单 + $("#basicInfoForm").validate({ + errorElement:'span', + errorClass:'help-block error-mes', + rules:{ + name:{ + required:true, + isName:true + }, + sex:"required", + birth:"required", + mobile:{ + required:true, + isPhone:true + }, + email:{ + required:true, + email:true + } + }, + messages:{ + name:{ + required:"请输入中文姓名", + isName:"姓名只能为汉字" + }, + sex:{ + required:"请输入性别" + }, + birth:{ + required:"请输入出生年月" + }, + mobile:{ + required:"请输入手机号", + isPhone:"请填写正确的11位手机号" + }, + email:{ + required:"请输入邮箱", + email:"请填写正确的邮箱格式" + } + }, + + errorPlacement:function(error,element){ + element.next().remove(); + element.closest('.gg-formGroup').append(error); + }, + + highlight:function(element){ + $(element).closest('.gg-formGroup').addClass('has-error has-feedback'); + }, + success:function(label){ + var el = label.closest('.gg-formGroup').find("input"); + el.next().remove(); + label.closest('.gg-formGroup').removeClass('has-error').addClass("has-feedback has-success"); + label.remove(); + }, + submitHandler:function(form){ + alert("保存成功!"); + } + }); + + //校验修改密码表单 + $("#modifyPwd").validate({ + onfocusout: function(element) { $(element).valid()}, + debug:false, //表示校验通过后是否直接提交表单 + onkeyup:false, //表示按键松开时候监听验证 + rules:{ + pwdOld:{ + required:true, + minlength:6 + }, + pwdNew:{ + required:true, + minlength:6, + isdiff:true, + //issame:true, + }, + confirm_password:{ + required:true, + minlength:6, + issame:true, + } + + }, + messages:{ + pwdOld : { + required:'必填', + minlength:$.validator.format('密码长度要大于6') + }, + pwdNew:{ + required:'必填', + minlength:$.validator.format('密码长度要大于6'), + isdiff:'原密码与新密码不能重复', + + }, + confirm_password:{ + required:'必填', + minlength:$.validator.format('密码长度要大于6'), + issame:'新密码要与确认新密码一致', + } + + }, + errorElement:"mes", + errorClass:"gg-star", + errorPlacement: function(error, element) + { + element.closest('.gg-formGroup').append(error); + + } + }); +}); \ No newline at end of file diff --git a/neuray-admin/src/main/resources/statics/plugins/validate/jquery.validate.min.js b/neuray-admin/src/main/resources/statics/plugins/validate/jquery.validate.min.js new file mode 100644 index 0000000..8787d88 --- /dev/null +++ b/neuray-admin/src/main/resources/statics/plugins/validate/jquery.validate.min.js @@ -0,0 +1,4 @@ +/*! jQuery Validation Plugin - v1.13.0 - 7/1/2014 + * http://jqueryvalidation.org/ + * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(b.target).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d;return c.settings.submitHandler?(c.submitButton&&(d=a("").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c;return a(this[0]).is("form")?b=this.validate().form():(b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b})),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(a,b){(9!==b.which||""!==this.elementValue(a))&&(a.name in this.submitted||a===this.lastElement)&&this.element(a)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!this.is(e.ignore)&&e[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']","focusin focusout keyup",b).validateDelegate("select, option, [type='radio'], [type='checkbox']","click",b),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue").removeAttr("aria-invalid")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?a("input[name='"+b.name+"']:checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+"")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id"),i?i.match(new RegExp("\b"+f+"\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){return this.checkable(a)&&(a=this.findByName(a.name).not(this.settings.ignore)[0]),a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),/min|max/.test(c)&&(null===g||/number|range|text/.test(g))&&(d=Number(d)),d||0===d?e[c]=d:g===c&&"range"!==g&&(e[c]=!0);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b);for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),void 0!==d&&(e[c]=d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(b.min&&b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),b.minlength&&b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}}),a.format=function(){throw"$.format has been deprecated. Please use $.validator.format instead."};var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);return e.is(b)?d.apply(e,arguments):void 0})}})}); diff --git a/neuray-admin/src/main/resources/statics/plugins/validate/messages_zh.min.js b/neuray-admin/src/main/resources/statics/plugins/validate/messages_zh.min.js new file mode 100644 index 0000000..0f9074a --- /dev/null +++ b/neuray-admin/src/main/resources/statics/plugins/validate/messages_zh.min.js @@ -0,0 +1,27 @@ +/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014 + * http://jqueryvalidation.org/ + * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */ +! function (a) { + "function" == typeof define && define.amd ? define(["jquery", "statics/plugins/validate/jquery.validate.min"], a) : a(jQuery) +}(function (a) { + var icon = " "; + a.extend(a.validator.messages, { + required: icon + "必填", + remote: icon + "请修正此栏位", + email: icon + "请输入有效的电子邮件", + url: icon + "请输入有效的网址", + date: icon + "请输入有效的日期", + dateISO: icon + "请输入有效的日期 (YYYY-MM-DD)", + number: icon + "请输入正确的数字", + digits: icon + "只能输入数字", + creditcard: icon + "请输入有效的信用卡号码", + equalTo: icon + "你的输入不相同", + extension: icon + "请输入有效的后缀", + maxlength: a.validator.format(icon + "最多 {0} 个字"), + minlength: a.validator.format(icon + "最少 {0} 个字"), + rangelength: a.validator.format(icon + "请输入长度为 {0} 至 {1} 之间的字串"), + range: a.validator.format(icon + "请输入 {0} 至 {1} 之间的数值"), + max: a.validator.format(icon + "请输入不大于 {0} 的数值"), + min: a.validator.format(icon + "请输入不小于 {0} 的数值") + }) +}); diff --git a/neuray-admin/src/main/resources/templates/header.html b/neuray-admin/src/main/resources/templates/header.html index fc00a72..41e342c 100644 --- a/neuray-admin/src/main/resources/templates/header.html +++ b/neuray-admin/src/main/resources/templates/header.html @@ -13,4 +13,8 @@ - \ No newline at end of file + + + + + diff --git a/neuray-admin/src/main/resources/templates/index.html b/neuray-admin/src/main/resources/templates/index.html index febb377..e824fa8 100644 --- a/neuray-admin/src/main/resources/templates/index.html +++ b/neuray-admin/src/main/resources/templates/index.html @@ -3,7 +3,7 @@ - 东软研发平台 + 东睿研发平台 @@ -29,9 +29,9 @@ 东睿 - 东软研发平台 + 东睿研发平台 - +