Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9678b6e8b7 | ||
|
|
dd9e400f6a | ||
|
|
2de70e79ae | ||
|
|
5248cf9a68 | ||
|
|
51a83b70a3 | ||
|
|
1b66126184 | ||
|
|
a2d9c846bf | ||
|
|
5da0520832 | ||
|
|
aae461a0b4 | ||
|
|
eb218f7973 | ||
|
|
2d80ce3bda | ||
|
|
42b36a5377 | ||
|
|
720148bea7 | ||
|
|
ff462950bd | ||
|
|
00cc2fa797 | ||
|
|
b0d66960a8 | ||
|
|
e123d96465 | ||
|
|
7b4ca62ce8 | ||
|
|
df74e417e8 | ||
|
|
fe7637a110 | ||
|
|
b71d2502ef | ||
|
|
2792531a7d | ||
|
|
04781bed25 | ||
|
|
b82217e624 | ||
|
|
3c92f26684 | ||
|
|
c31259d5c8 | ||
|
|
36dd4c70bc | ||
|
|
ddc8510479 | ||
|
|
ac4c9f932d | ||
|
|
9aa599fb0b | ||
|
|
1b0099c831 | ||
|
|
fca4902a38 | ||
|
|
59e1792467 | ||
|
|
73ac352219 | ||
|
|
722029e555 | ||
|
|
2ce0eb76be | ||
|
|
2d9548aa90 | ||
|
|
1d31c9fcef | ||
|
|
9c8ae36924 | ||
|
|
88a9b11859 | ||
|
|
72b536a4d5 | ||
|
|
e9763efaa7 | ||
|
|
532ca319ec | ||
|
|
9c0fc71587 | ||
|
|
16ba2c92a0 | ||
|
|
0729db8ae8 | ||
|
|
e1be50a2e6 | ||
|
|
6f5b7ee120 | ||
|
|
c010df1fb6 | ||
|
|
5b16c6c3d2 | ||
|
|
3b0060c300 | ||
|
|
9cf1b944db | ||
|
|
5ff356665f |
2
LICENSE
2
LICENSE
@@ -877,4 +877,4 @@ For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
理解您的用意。
|
||||
5. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、版权声明和其他
|
||||
原作者规定需要包含的说明(请尊重原作者的著作权,不要删除或修改文件中的`@author`信息)。
|
||||
6. 您可以应用于商业软件,但必须遵循以上条款原则(请协助改进本作品)。
|
||||
6. 您可以应用于商业软件,但必须遵循以上条款原则(请协助改进本作品 http://jeesite.com)。
|
||||
|
||||
@@ -91,13 +91,13 @@ JeeSite 4.x 的升级,作者结合了多年总结和经验,以及各方面
|
||||
|
||||
尽量不修改web项目以外的源码项目,如 jeesite-common、jeesite-modele-core,如果修改了,请 Pull Requests 上来,否则代码编码将与官方不同步,将对你的日后升级带来困难。
|
||||
|
||||
JeeSite的小版本(4.1.x)升级是非常便捷的,你只需要将 pom.xml 文件中的 parent.version 版本修改到最新版本即可,同版本下你可进行Maven快照强制更新,即可将最新版的依赖jar更新到本地,下面介绍一下在Eclipse里如何操作:
|
||||
JeeSite的小版本(4.1.x)升级是非常便捷的,你只需要将 pom.xml 文件中的 parent.version 版本修改到最新版本即可,同版本下你可进行 Maven 快照强制更新,即可将最新版的依赖 jar 更新到本地,下面以 Eclipse 举例,介绍如何操作:
|
||||
|
||||
在web项目上右键,选择菜单 -> Maven -> Update Project...(或按Alt+F5) -> 点击 Select All 按钮 -> 选择 Force Update of Snapshots/Releases 复选框 -> 点击OK按钮即可。
|
||||
在 web 项目上右键,选择菜单 -> Maven -> Update Project...(或按Alt+F5) -> 点击 Select All 按钮 -> 选择 Force Update of Snapshots/Releases 复选框 -> 点击OK按钮即可。
|
||||
|
||||
如果您修改了其它依赖模块代码,这时你需要与官方Git仓库代码进行同步。
|
||||
如果您修改了其它依赖模块代码,这时你需要利用 Git 版本控制工具,与官方仓库代码进行同步,合并代码即可。
|
||||
|
||||
如果进行相对大的版本(4.x.x)升级这里我们会附加一个声明,帮助你进行迁移操作。
|
||||
如果进行相对大的版本(4.x.x)升级这里我们会附加一个声明,帮助你进行迁移操作,更新日志:<http://jeesite.com/?t=273830>。
|
||||
|
||||
# Git 全局设置技巧
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.4-SNAPSHOT</version>
|
||||
<version>4.1.5-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -255,7 +255,7 @@ public class EncodeUtils {
|
||||
|
||||
// 预编译SQL过滤正则表达式
|
||||
private static Pattern sqlPattern = Pattern.compile("(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
|
||||
/**
|
||||
* SQL过滤,防止注入,传入参数输入有select相关代码,替换空。
|
||||
* @author ThinkGem
|
||||
@@ -263,7 +263,7 @@ public class EncodeUtils {
|
||||
public static String sqlFilter(String text){
|
||||
if (text != null){
|
||||
String value = text;
|
||||
Matcher matcher = sqlPattern.matcher(text);
|
||||
Matcher matcher = sqlPattern.matcher(value);
|
||||
if (matcher.find()) {
|
||||
value = matcher.replaceAll(StringUtils.EMPTY);
|
||||
}
|
||||
|
||||
@@ -356,7 +356,7 @@ public class ListUtils extends org.apache.commons.collections.ListUtils {
|
||||
* @param totalPage 总页码数
|
||||
* @author ThinkGem
|
||||
*/
|
||||
private static <T> List<T> getPageList(List<T> list, int pageNo, int pageSize, int totalPage) {
|
||||
public static <T> List<T> getPageList(List<T> list, int pageNo, int pageSize, int totalPage) {
|
||||
int fromIndex = 0; // 从哪里开始截取
|
||||
int toIndex = 0; // 截取几个
|
||||
if (list == null || list.size() == 0){
|
||||
|
||||
@@ -756,7 +756,8 @@ public class FileUtils extends org.apache.commons.io.FileUtils {
|
||||
}
|
||||
|
||||
try {
|
||||
response.addHeader("Content-Disposition", "attachment; filename=\"" +
|
||||
boolean isPreview = "preview".equalsIgnoreCase(request.getParameter("source"));
|
||||
response.addHeader("Content-Disposition", (!isPreview ? "attachment; " : "") + "filename=\"" +
|
||||
EncodeUtils.encodeUrl(StringUtils.isBlank(fileName) ? file.getName() : fileName) + "\"");
|
||||
response.setContentType(FileUtils.getContentType(file.getName())); // set the MIME type.
|
||||
response.addHeader("Content-Length", String.valueOf(contentLength));
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.io.DefaultResourceLoader;
|
||||
import org.springframework.core.io.Resource;
|
||||
|
||||
import com.jeesite.common.collect.SetUtils;
|
||||
@@ -215,7 +214,7 @@ public class PropertiesUtils {
|
||||
String logPath = null;
|
||||
try {
|
||||
// 获取当前classes目录
|
||||
logPath = new DefaultResourceLoader().getResource("/").getFile().getPath();
|
||||
logPath = ResourceUtils.getResource("/").getFile().getPath();
|
||||
} catch (Exception e) {
|
||||
// 取不到,取当前工作路径
|
||||
logPath = System.getProperty("user.dir");
|
||||
|
||||
@@ -244,7 +244,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
}
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
calendar.set(Calendar.HOUR, 0);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
@@ -262,7 +262,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||
}
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(date);
|
||||
calendar.set(Calendar.HOUR, 23);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||
calendar.set(Calendar.MINUTE, 59);
|
||||
calendar.set(Calendar.SECOND, 59);
|
||||
calendar.set(Calendar.MILLISECOND, 999);
|
||||
|
||||
@@ -40,8 +40,9 @@ public class ReflectUtils {
|
||||
private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class);
|
||||
|
||||
/**
|
||||
* 调用Getter方法.
|
||||
* 支持多级,如:对象名.对象名.方法
|
||||
* 调用Getter方法,
|
||||
* 支持多级,如:对象名.对象名.方法,
|
||||
* 支持静态类及方法调用
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <E> E invokeGetter(Object obj, String propertyName) {
|
||||
@@ -54,8 +55,9 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用Setter方法, 仅匹配方法名。
|
||||
* 支持多级,如:对象名.对象名.方法
|
||||
* 调用Setter方法,仅匹配方法名,
|
||||
* 支持多级,如:对象名.对象名.方法,
|
||||
* 支持静态类及方法调用
|
||||
*/
|
||||
public static <E> void invokeSetter(Object obj, String propertyName, E value) {
|
||||
Object object = obj;
|
||||
@@ -72,7 +74,7 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数.
|
||||
* 直接读取对象属性值,无视private/protected修饰符,不经过getter函数
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <E> E getFieldValue(final Object obj, final String fieldName) {
|
||||
@@ -92,7 +94,7 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数.
|
||||
* 直接设置对象属性值,无视private/protected修饰符,不经过setter函数
|
||||
*/
|
||||
public static <E> void setFieldValue(final Object obj, final String fieldName, final E value) {
|
||||
Field field = getAccessibleField(obj, fieldName);
|
||||
@@ -109,9 +111,10 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接调用对象方法, 无视private/protected修饰符.
|
||||
* 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用.
|
||||
* 直接调用对象方法,无视private/protected修饰符,
|
||||
* 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用,
|
||||
* 同时匹配方法名+参数类型,
|
||||
* 支持静态类及方法调用
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <E> E invokeMethod(final Object obj, final String methodName, final Class<?>[] parameterTypes,
|
||||
@@ -122,11 +125,11 @@ public class ReflectUtils {
|
||||
Method method = getAccessibleMethod(obj, methodName, parameterTypes);
|
||||
if (method == null) {
|
||||
//throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 ");
|
||||
logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 ");
|
||||
logger.debug("在 [" + (obj.getClass() == Class.class ? obj : obj.getClass()) + "] 中,没有找到 [" + methodName + "] 方法 ");
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return (E)method.invoke(obj, args);
|
||||
return (E)method.invoke(obj.getClass() == Class.class ? null : obj, args);
|
||||
} catch (Exception e) {
|
||||
String msg = "method: "+method+", obj: "+obj+", args: "+args+"";
|
||||
throw convertReflectionExceptionToUnchecked(msg, e);
|
||||
@@ -134,9 +137,10 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 直接调用对象方法, 无视private/protected修饰符,
|
||||
* 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用.
|
||||
* 只匹配函数名,如果有多个同名函数调用第一个。
|
||||
* 直接调用对象方法,无视private/protected修饰符,
|
||||
* 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用,
|
||||
* 只匹配函数名,如果有多个同名函数调用第一个,
|
||||
* 支持静态类及方法调用
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <E> E invokeMethodByName(final Object obj, final String methodName, final Object[] args) {
|
||||
@@ -144,7 +148,7 @@ public class ReflectUtils {
|
||||
if (method == null) {
|
||||
// 如果为空不报错,直接返回空。
|
||||
// throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 ");
|
||||
logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 ");
|
||||
logger.debug("在 [" + (obj.getClass() == Class.class ? obj : obj.getClass()) + "] 中,没有找到 [" + methodName + "] 方法 ");
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
@@ -175,7 +179,7 @@ public class ReflectUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
return (E)method.invoke(obj, args);
|
||||
return (E)method.invoke(obj.getClass() == Class.class ? null : obj, args);
|
||||
} catch (Exception e) {
|
||||
String msg = "method: "+method+", obj: "+obj+", args: "+args+"";
|
||||
throw convertReflectionExceptionToUnchecked(msg, e);
|
||||
@@ -183,8 +187,8 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问.
|
||||
* 如向上转型到Object仍无法找到, 返回null.
|
||||
* 循环向上转型,获取对象的DeclaredField,并强制设置为可访问,
|
||||
* 如向上转型到Object仍无法找到,返回null
|
||||
*/
|
||||
public static Field getAccessibleField(final Object obj, final String fieldName) {
|
||||
// 为空不报错。直接返回 null
|
||||
@@ -207,10 +211,10 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问.
|
||||
* 如向上转型到Object仍无法找到, 返回null.
|
||||
* 循环向上转型,获取对象的DeclaredMethod,并强制设置为可访问,
|
||||
* 如向上转型到Object仍无法找到,返回null,
|
||||
* 匹配函数名+参数类型。
|
||||
* 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
|
||||
* 用于方法需要被多次调用的情况,先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
|
||||
*/
|
||||
public static Method getAccessibleMethod(final Object obj, final String methodName,
|
||||
final Class<?>... parameterTypes) {
|
||||
@@ -219,8 +223,12 @@ public class ReflectUtils {
|
||||
if (obj == null){
|
||||
return null;
|
||||
}
|
||||
Class<?> clazz = obj.getClass();
|
||||
if (clazz == Class.class){
|
||||
clazz = (Class) obj;
|
||||
}
|
||||
Validate.notBlank(methodName, "methodName can't be blank");
|
||||
for (Class<?> searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) {
|
||||
for (Class<?> searchType = clazz; searchType != Object.class; searchType = searchType.getSuperclass()) {
|
||||
try {
|
||||
Method method = searchType.getDeclaredMethod(methodName, parameterTypes);
|
||||
makeAccessible(method);
|
||||
@@ -234,10 +242,10 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问.
|
||||
* 如向上转型到Object仍无法找到, 返回null.
|
||||
* 循环向上转型,获取对象的DeclaredMethod,并强制设置为可访问,
|
||||
* 如向上转型到Object仍无法找到,返回null,
|
||||
* 只匹配函数名。
|
||||
* 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
|
||||
* 用于方法需要被多次调用的情况,先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args)
|
||||
*/
|
||||
public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) {
|
||||
// 为空不报错。直接返回 null
|
||||
@@ -245,8 +253,12 @@ public class ReflectUtils {
|
||||
if (obj == null){
|
||||
return null;
|
||||
}
|
||||
Class<?> clazz = obj.getClass();
|
||||
if (clazz == Class.class){
|
||||
clazz = (Class) obj;
|
||||
}
|
||||
Validate.notBlank(methodName, "methodName can't be blank");
|
||||
for (Class<?> searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) {
|
||||
for (Class<?> searchType = clazz; searchType != Object.class; searchType = searchType.getSuperclass()) {
|
||||
Method[] methods = searchType.getDeclaredMethods();
|
||||
for (Method method : methods) {
|
||||
if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) {
|
||||
@@ -279,10 +291,9 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处
|
||||
* 如无法找到, 返回Object.class.
|
||||
* eg.
|
||||
* public UserDao extends HibernateDao<User>
|
||||
* 通过反射,获得Class定义中声明的泛型参数的类型,注意泛型必须定义在父类处,
|
||||
* 如无法找到,返回Object.class,
|
||||
* 如 public UserDao extends CrudDao<User>
|
||||
* @param clazz The class to introspect
|
||||
* @return the first generic declaration, or Object.class if cannot be determined
|
||||
*/
|
||||
@@ -292,9 +303,9 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过反射, 获得Class定义中声明的父类的泛型参数的类型.
|
||||
* 如无法找到, 返回Object.class.
|
||||
* 如public UserDao extends HibernateDao<User,Long>
|
||||
* 通过反射,获得Class定义中声明的父类的泛型参数的类型,
|
||||
* 如无法找到,返回Object.class,
|
||||
* 如 public UserDao extends CrudDao<User, Long>
|
||||
* @param clazz clazz The class to introspect
|
||||
* @param index the Index of the generic ddeclaration,start from 0.
|
||||
* @return the index generic declaration, or Object.class if cannot be determined
|
||||
@@ -323,6 +334,9 @@ public class ReflectUtils {
|
||||
return (Class) params[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取类的Class,如果为内部类,则返回上级类Class
|
||||
*/
|
||||
public static Class<?> getUserClass(Object instance) {
|
||||
if (instance == null){
|
||||
throw new RuntimeException("Instance must not be null");
|
||||
@@ -339,7 +353,7 @@ public class ReflectUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 将反射时的checked exception转换为unchecked exception.
|
||||
* 将反射时的checked exception转换为unchecked exception
|
||||
*/
|
||||
public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) {
|
||||
if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException
|
||||
|
||||
@@ -110,7 +110,8 @@ public class ServletUtils {
|
||||
}
|
||||
|
||||
String uri = request.getRequestURI();
|
||||
if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")){
|
||||
if (StringUtils.endsWithIgnoreCase(uri, ".json")
|
||||
|| StringUtils.endsWithIgnoreCase(uri, ".xml")){
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -189,19 +190,22 @@ public class ServletUtils {
|
||||
}
|
||||
}
|
||||
HttpServletRequest request = getRequest();
|
||||
String uri = request.getRequestURI();
|
||||
if (StringUtils.endsWithIgnoreCase(uri, ".xml") || StringUtils
|
||||
.equalsIgnoreCase(request.getParameter("__ajax"), "xml")){
|
||||
return XmlMapper.toXml(resultMap);
|
||||
}else{
|
||||
String functionName = request.getParameter("__callback");
|
||||
if (StringUtils.isNotBlank(functionName)){
|
||||
return JsonMapper.toJsonp(functionName, resultMap);
|
||||
if (request != null){
|
||||
String uri = request.getRequestURI();
|
||||
if (StringUtils.endsWithIgnoreCase(uri, ".xml") || StringUtils
|
||||
.equalsIgnoreCase(request.getParameter("__ajax"), "xml")){
|
||||
return XmlMapper.toXml(resultMap);
|
||||
}else{
|
||||
return JsonMapper.toJson(resultMap);
|
||||
String functionName = request.getParameter("__callback");
|
||||
if (StringUtils.isNotBlank(functionName)){
|
||||
return JsonMapper.toJsonp(functionName, resultMap);
|
||||
}else{
|
||||
return JsonMapper.toJson(resultMap);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
return JsonMapper.toJson(resultMap);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Electron */ if(typeof module==='object'){window.module=module;module=undefined;}
|
||||
if(typeof module==='object'){window.module=module;module=undefined;}/* Electron Support */
|
||||
/*!
|
||||
* jQuery JavaScript Library v1.12.4
|
||||
* http://jquery.com/
|
||||
@@ -211,7 +211,8 @@ jQuery.extend = jQuery.fn.extend = function() {
|
||||
copy = options[ name ];
|
||||
|
||||
// Prevent never-ending loop
|
||||
if ( target === copy ) {
|
||||
// if ( target === copy ) {
|
||||
if (name === "__proto__" || target === copy) { // 修复jQuery原型污染漏洞 ThinkGem
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,41 +1,12 @@
|
||||
/**
|
||||
|
||||
@Name:layer v3.0.3 Web弹层组件
|
||||
@Author:贤心
|
||||
@Site:http://layer.layui.com
|
||||
@License:MIT
|
||||
|
||||
*/
|
||||
|
||||
;!function(window, undefined){
|
||||
"use strict";
|
||||
|
||||
var i18n = {
|
||||
btnOk: '确定',
|
||||
btnCancel: '取消',
|
||||
title: '信息',
|
||||
promptTipA: '最多输入',
|
||||
promptTipB: '个字符',
|
||||
noPicture: '没有图片',
|
||||
photoError: '当前图片地址异常<br>是否继续查看下一张?',
|
||||
photoNextPage: '下一张',
|
||||
photoClose: '不看了'
|
||||
};
|
||||
|
||||
if (window.lang == 'en'){
|
||||
i18n = {
|
||||
btnOk: 'Ok',
|
||||
btnCancel: 'Cancle',
|
||||
title: 'Information',
|
||||
promptTipA: 'Enter ',
|
||||
promptTipB: 'character at most.',
|
||||
noPicture: 'No picture',
|
||||
photoError: 'Current image address error.<br>Next slide?',
|
||||
photoNextPage: 'The next',
|
||||
photoClose: 'Close'
|
||||
};
|
||||
}
|
||||
|
||||
var isLayui = window.layui && layui.define, $, win, ready = {
|
||||
getPath: function(){
|
||||
var js = document.scripts, script = js[js.length - 1], jsPath = script.src;
|
||||
@@ -44,7 +15,7 @@ var isLayui = window.layui && layui.define, $, win, ready = {
|
||||
}(),
|
||||
|
||||
config: {}, end: {}, minIndex: 0, minLeft: [],
|
||||
btn: [i18n.btnOk, i18n.btnCancel],
|
||||
//btn: [layer.i18n.btnOk, layer.i18n.btnCancel], // ThinkGem
|
||||
|
||||
//五种原始层模式
|
||||
type: ['dialog', 'page', 'iframe', 'loading', 'tips']
|
||||
@@ -53,6 +24,17 @@ var isLayui = window.layui && layui.define, $, win, ready = {
|
||||
//默认内置方法。
|
||||
var layer = {
|
||||
v: '3.0.3',
|
||||
i18n: { // ThinkGem 国际化支持
|
||||
btnOk: '确定',
|
||||
btnCancel: '取消',
|
||||
title: '信息',
|
||||
promptTipA: '最多输入',
|
||||
promptTipB: '个字符',
|
||||
noPicture: '没有图片',
|
||||
photoError: '当前图片地址异常<br>是否继续查看下一张?',
|
||||
photoNextPage: '下一张',
|
||||
photoClose: '不看了'
|
||||
},
|
||||
ie: function(){ //ie版本
|
||||
var agent = navigator.userAgent.toLowerCase();
|
||||
return (!!window.ActiveXObject || "ActiveXObject" in window) ? (
|
||||
@@ -133,7 +115,8 @@ var layer = {
|
||||
}
|
||||
return layer.open($.extend({
|
||||
content: content,
|
||||
btn: ready.btn,
|
||||
//btn: ready.btn,
|
||||
btn: [layer.i18n.btnOk, layer.i18n.btnCancel],
|
||||
yes: yes,
|
||||
btn2: cancel
|
||||
}, type ? {} : options));
|
||||
@@ -210,7 +193,7 @@ Class.pt.config = {
|
||||
shade: 0.3,
|
||||
fixed: true,
|
||||
move: doms[1],
|
||||
title: i18n.title,
|
||||
title: layer.i18n.title,
|
||||
offset: 'auto',
|
||||
area: 'auto',
|
||||
closeBtn: 1,
|
||||
@@ -232,7 +215,7 @@ Class.pt.vessel = function(conType, callback){
|
||||
var zIndex = config.zIndex + times, titype = typeof config.title === 'object';
|
||||
var ismax = config.maxmin && (config.type === 1 || config.type === 2);
|
||||
var titleHTML = (config.title ? '<div class="layui-layer-title" style="'+ (titype ? config.title[1] : '') +'">'
|
||||
+ (titype ? config.title[0] : config.title)
|
||||
+ (titype ? config.title[0] : layer.i18n.title)
|
||||
+ '</div>' : '');
|
||||
|
||||
config.zIndex = zIndex;
|
||||
@@ -248,7 +231,8 @@ Class.pt.vessel = function(conType, callback){
|
||||
+ (config.type == 1 && conType ? '' : (config.content||''))
|
||||
+ '</div>'
|
||||
+ '<span class="layui-layer-setwin">'+ function(){
|
||||
var closebtn = ismax ? '<a class="layui-layer-min" href="javascript:;"><cite></cite></a><a class="layui-layer-ico layui-layer-max" href="javascript:;"></a>' : '';
|
||||
var closebtn = ismax && config.title ? '<a class="layui-layer-min" href="javascript:;"><cite></cite></a>' : ''; // ThinkGem 必须有标题的清空下才能最小化
|
||||
closebtn += ismax ? '<a class="layui-layer-ico layui-layer-max" href="javascript:;"></a>' : '';
|
||||
config.closeBtn && (closebtn += '<a class="layui-layer-ico '+ doms[7] +' '+ doms[7] + (config.title ? config.closeBtn : (config.type == 4 ? '1' : '2')) +'" href="javascript:;"></a>');
|
||||
return closebtn;
|
||||
}() + '</span>'
|
||||
@@ -292,7 +276,8 @@ Class.pt.creat = function(){
|
||||
|
||||
switch(config.type){
|
||||
case 0:
|
||||
config.btn = ('btn' in config) ? config.btn : ready.btn[0];
|
||||
//config.btn = ('btn' in config) ? config.btn : ready.btn[0]; ThinkGem
|
||||
config.btn = ('btn' in config) ? config.btn : layer.i18n.btnOk;// ThinkGem
|
||||
layer.closeAll('dialog');
|
||||
break;
|
||||
case 2:
|
||||
@@ -1020,7 +1005,7 @@ layer.prompt = function(options, yes){
|
||||
|
||||
return layer.open($.extend({
|
||||
type: 1
|
||||
,btn: [i18n.btnOk,i18n.btnCancel]
|
||||
,btn: [layer.i18n.btnOk,layer.i18n.btnCancel]
|
||||
,content: content
|
||||
,skin: 'layui-layer-prompt' + skin('prompt')
|
||||
,maxWidth: win.width()
|
||||
@@ -1035,7 +1020,7 @@ layer.prompt = function(options, yes){
|
||||
if(value === ''){
|
||||
prompt.focus();
|
||||
} else if(value.length > (options.maxlength||500)) {
|
||||
layer.tips(i18n.promptTipA + (options.maxlength || 500) + i18n.promptTipB, prompt, {tips: 1});
|
||||
layer.tips(layer.i18n.promptTipA + (options.maxlength || 500) + layer.i18n.promptTipB, prompt, {tips: 1});
|
||||
} else {
|
||||
yes && yes(value, index, prompt);
|
||||
}
|
||||
@@ -1287,9 +1272,9 @@ layer.photos = function(options, loop, key){
|
||||
}, options));
|
||||
}, function(){
|
||||
layer.close(dict.loadi);
|
||||
layer.msg(i18n.photoError, {
|
||||
layer.msg(layer.i18n.photoError, {
|
||||
time: 30000,
|
||||
btn: [i18n.photoNextPage, i18n.photoClose],
|
||||
btn: [layer.i18n.photoNextPage, layer.i18n.photoClose],
|
||||
yes: function(){
|
||||
data.length > 1 && dict.imgnext(true,true);
|
||||
}
|
||||
|
||||
24
common/src/main/resources/static/select2/4.0/i18n/ja_JP.js
vendored
Normal file
24
common/src/main/resources/static/select2/4.0/i18n/ja_JP.js
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
(function() {
|
||||
if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd)
|
||||
var e = jQuery.fn.select2.amd;
|
||||
return e.define("select2/i18n/zh_CN", [], function() {
|
||||
return { errorLoading : function() {
|
||||
return "結果に載せることはできない。"
|
||||
}, inputTooLong : function(e) {
|
||||
var t = e.input.length - e.maximum, n = "" + t + "文字を削除してください";
|
||||
return n
|
||||
}, inputTooShort : function(e) {
|
||||
var t = e.minimum - e.input.length, n = "少なくとも" + t + "文字を入力してください";
|
||||
return n
|
||||
}, loadingMore : function() {
|
||||
return "より多くの……"
|
||||
}, maximumSelected : function(e) {
|
||||
var t = "選択するしかない" + e.maximum + "項目別";
|
||||
return t
|
||||
}, noResults : function() {
|
||||
return "一致する項目を見つけることができなかった"
|
||||
}, searching : function() {
|
||||
return "検索しています……"
|
||||
} }
|
||||
}), { define : e.define, require : e.require }
|
||||
})();
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,7 @@
|
||||
DROP TABLE js_gen_table_column;
|
||||
DROP TABLE js_gen_table;
|
||||
DROP TABLE js_sys_company_office;
|
||||
DROP TABLE js_sys_employee_office;
|
||||
DROP TABLE js_sys_employee_post;
|
||||
DROP TABLE js_sys_user_data_scope;
|
||||
DROP TABLE js_sys_user_role;
|
||||
@@ -276,6 +277,17 @@ CREATE TABLE js_sys_employee
|
||||
);
|
||||
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE js_sys_employee_office
|
||||
(
|
||||
id varchar(64) NOT NULL UNIQUE,
|
||||
emp_code varchar(64) NOT NULL,
|
||||
office_code varchar(64) NOT NULL,
|
||||
post_code varchar(64),
|
||||
PRIMARY KEY (emp_code, office_code)
|
||||
);
|
||||
|
||||
|
||||
-- 员工与岗位关联表
|
||||
CREATE TABLE js_sys_employee_post
|
||||
(
|
||||
@@ -503,7 +515,7 @@ CREATE TABLE js_sys_msg_inner_record
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
msg_inner_id varchar(64) NOT NULL,
|
||||
receive_user_code varchar(64),
|
||||
receive_user_code varchar(64) NOT NULL,
|
||||
receive_user_name varchar(100) NOT NULL,
|
||||
read_status char(1) NOT NULL,
|
||||
read_date timestamp,
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
IF OBJECT_ID('[js_gen_table_column]') IS NOT NULL DROP TABLE [js_gen_table_column];
|
||||
IF OBJECT_ID('[js_gen_table]') IS NOT NULL DROP TABLE [js_gen_table];
|
||||
IF OBJECT_ID('[js_sys_company_office]') IS NOT NULL DROP TABLE [js_sys_company_office];
|
||||
IF OBJECT_ID('[js_sys_employee_office]') IS NOT NULL DROP TABLE [js_sys_employee_office];
|
||||
IF OBJECT_ID('[js_sys_employee_post]') IS NOT NULL DROP TABLE [js_sys_employee_post];
|
||||
IF OBJECT_ID('[js_sys_user_data_scope]') IS NOT NULL DROP TABLE [js_sys_user_data_scope];
|
||||
IF OBJECT_ID('[js_sys_user_role]') IS NOT NULL DROP TABLE [js_sys_user_role];
|
||||
@@ -276,6 +277,17 @@ CREATE TABLE [js_sys_employee]
|
||||
);
|
||||
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE [js_sys_employee_office]
|
||||
(
|
||||
[id] varchar(64) NOT NULL UNIQUE,
|
||||
[emp_code] varchar(64) NOT NULL,
|
||||
[office_code] varchar(64) NOT NULL,
|
||||
[post_code] varchar(64),
|
||||
PRIMARY KEY ([emp_code], [office_code])
|
||||
);
|
||||
|
||||
|
||||
-- 员工与岗位关联表
|
||||
CREATE TABLE [js_sys_employee_post]
|
||||
(
|
||||
@@ -503,7 +515,7 @@ CREATE TABLE [js_sys_msg_inner_record]
|
||||
(
|
||||
[id] varchar(64) NOT NULL,
|
||||
[msg_inner_id] varchar(64) NOT NULL,
|
||||
[receive_user_code] varchar(64),
|
||||
[receive_user_code] varchar(64) NOT NULL,
|
||||
[receive_user_name] varchar(100) NOT NULL,
|
||||
[read_status] char(1) NOT NULL,
|
||||
[read_date] datetime,
|
||||
|
||||
@@ -5,6 +5,7 @@ SET SESSION FOREIGN_KEY_CHECKS=0;
|
||||
DROP TABLE IF EXISTS js_gen_table_column;
|
||||
DROP TABLE IF EXISTS js_gen_table;
|
||||
DROP TABLE IF EXISTS js_sys_company_office;
|
||||
DROP TABLE IF EXISTS js_sys_employee_office;
|
||||
DROP TABLE IF EXISTS js_sys_employee_post;
|
||||
DROP TABLE IF EXISTS js_sys_user_data_scope;
|
||||
DROP TABLE IF EXISTS js_sys_user_role;
|
||||
@@ -277,6 +278,18 @@ CREATE TABLE js_sys_employee
|
||||
) COMMENT = '员工表';
|
||||
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE js_sys_employee_office
|
||||
(
|
||||
id varchar(64) NOT NULL COMMENT '编号',
|
||||
emp_code varchar(64) NOT NULL COMMENT '员工编码',
|
||||
office_code varchar(64) NOT NULL COMMENT '机构编码',
|
||||
post_code varchar(64) COMMENT '岗位编码',
|
||||
PRIMARY KEY (emp_code, office_code),
|
||||
UNIQUE (id)
|
||||
) COMMENT = '员工附属机构关系表';
|
||||
|
||||
|
||||
-- 员工与岗位关联表
|
||||
CREATE TABLE js_sys_employee_post
|
||||
(
|
||||
@@ -504,7 +517,7 @@ CREATE TABLE js_sys_msg_inner_record
|
||||
(
|
||||
id varchar(64) NOT NULL COMMENT '编号',
|
||||
msg_inner_id varchar(64) NOT NULL COMMENT '所属消息',
|
||||
receive_user_code varchar(64) COMMENT '接受者用户编码',
|
||||
receive_user_code varchar(64) NOT NULL COMMENT '接受者用户编码',
|
||||
receive_user_name varchar(100) NOT NULL COMMENT '接受者用户姓名',
|
||||
read_status char(1) NOT NULL COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '阅读时间',
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
DROP TABLE js_gen_table_column CASCADE CONSTRAINTS;
|
||||
DROP TABLE js_gen_table CASCADE CONSTRAINTS;
|
||||
DROP TABLE js_sys_company_office CASCADE CONSTRAINTS;
|
||||
DROP TABLE js_sys_employee_office CASCADE CONSTRAINTS;
|
||||
DROP TABLE js_sys_employee_post CASCADE CONSTRAINTS;
|
||||
DROP TABLE js_sys_user_data_scope CASCADE CONSTRAINTS;
|
||||
DROP TABLE js_sys_user_role CASCADE CONSTRAINTS;
|
||||
@@ -276,6 +277,17 @@ CREATE TABLE js_sys_employee
|
||||
);
|
||||
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE js_sys_employee_office
|
||||
(
|
||||
id varchar2(64) NOT NULL UNIQUE,
|
||||
emp_code varchar2(64) NOT NULL,
|
||||
office_code varchar2(64) NOT NULL,
|
||||
post_code varchar2(64),
|
||||
PRIMARY KEY (emp_code, office_code)
|
||||
);
|
||||
|
||||
|
||||
-- 员工与岗位关联表
|
||||
CREATE TABLE js_sys_employee_post
|
||||
(
|
||||
@@ -503,7 +515,7 @@ CREATE TABLE js_sys_msg_inner_record
|
||||
(
|
||||
id varchar2(64) NOT NULL,
|
||||
msg_inner_id varchar2(64) NOT NULL,
|
||||
receive_user_code varchar2(64),
|
||||
receive_user_code varchar2(64) NOT NULL,
|
||||
receive_user_name varchar2(100) NOT NULL,
|
||||
read_status char(1) NOT NULL,
|
||||
read_date timestamp,
|
||||
@@ -1104,6 +1116,11 @@ COMMENT ON COLUMN js_sys_employee.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_sys_employee.remarks IS '备注信息';
|
||||
COMMENT ON COLUMN js_sys_employee.corp_code IS '租户代码';
|
||||
COMMENT ON COLUMN js_sys_employee.corp_name IS '租户名称';
|
||||
COMMENT ON TABLE js_sys_employee_office IS '员工附属机构关系表';
|
||||
COMMENT ON COLUMN js_sys_employee_office.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_employee_office.emp_code IS '员工编码';
|
||||
COMMENT ON COLUMN js_sys_employee_office.office_code IS '机构编码';
|
||||
COMMENT ON COLUMN js_sys_employee_office.post_code IS '岗位编码';
|
||||
COMMENT ON TABLE js_sys_employee_post IS '员工与岗位关联表';
|
||||
COMMENT ON COLUMN js_sys_employee_post.emp_code IS '员工编码';
|
||||
COMMENT ON COLUMN js_sys_employee_post.post_code IS '岗位编码';
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
DROP TABLE IF EXISTS js_gen_table_column;
|
||||
DROP TABLE IF EXISTS js_gen_table;
|
||||
DROP TABLE IF EXISTS js_sys_company_office;
|
||||
DROP TABLE IF EXISTS js_sys_employee_office;
|
||||
DROP TABLE IF EXISTS js_sys_employee_post;
|
||||
DROP TABLE IF EXISTS js_sys_user_data_scope;
|
||||
DROP TABLE IF EXISTS js_sys_user_role;
|
||||
@@ -276,6 +277,17 @@ CREATE TABLE js_sys_employee
|
||||
) WITHOUT OIDS;
|
||||
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE js_sys_employee_office
|
||||
(
|
||||
id varchar(64) NOT NULL UNIQUE,
|
||||
emp_code varchar(64) NOT NULL,
|
||||
office_code varchar(64) NOT NULL,
|
||||
post_code varchar(64),
|
||||
PRIMARY KEY (emp_code, office_code)
|
||||
) WITHOUT OIDS;
|
||||
|
||||
|
||||
-- 员工与岗位关联表
|
||||
CREATE TABLE js_sys_employee_post
|
||||
(
|
||||
@@ -503,7 +515,7 @@ CREATE TABLE js_sys_msg_inner_record
|
||||
(
|
||||
id varchar(64) NOT NULL,
|
||||
msg_inner_id varchar(64) NOT NULL,
|
||||
receive_user_code varchar(64),
|
||||
receive_user_code varchar(64) NOT NULL,
|
||||
receive_user_name varchar(100) NOT NULL,
|
||||
read_status char(1) NOT NULL,
|
||||
read_date timestamp,
|
||||
@@ -1104,6 +1116,11 @@ COMMENT ON COLUMN js_sys_employee.update_date IS '更新时间';
|
||||
COMMENT ON COLUMN js_sys_employee.remarks IS '备注信息';
|
||||
COMMENT ON COLUMN js_sys_employee.corp_code IS '租户代码';
|
||||
COMMENT ON COLUMN js_sys_employee.corp_name IS '租户名称';
|
||||
COMMENT ON TABLE js_sys_employee_office IS '员工附属机构关系表';
|
||||
COMMENT ON COLUMN js_sys_employee_office.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_employee_office.emp_code IS '员工编码';
|
||||
COMMENT ON COLUMN js_sys_employee_office.office_code IS '机构编码';
|
||||
COMMENT ON COLUMN js_sys_employee_office.post_code IS '岗位编码';
|
||||
COMMENT ON TABLE js_sys_employee_post IS '员工与岗位关联表';
|
||||
COMMENT ON COLUMN js_sys_employee_post.emp_code IS '员工编码';
|
||||
COMMENT ON COLUMN js_sys_employee_post.post_code IS '岗位编码';
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.4-SNAPSHOT</version>
|
||||
<version>4.1.5-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.
|
||||
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {
|
||||
String username = getUsername(request, response); // 用户名
|
||||
String password = getPassword(request); // 登录密码
|
||||
boolean rememberMe = isRememberMe(request); // 记住我(记住密码)
|
||||
boolean rememberMe = isRememberMe(request); // 记住我(自动登录)
|
||||
String host = getHost(request); // 登录主机
|
||||
String captcha = getCaptcha(request); // 登录验证码
|
||||
Map<String, Object> paramMap = ServletUtils.getExtParams(request); // 登录附加参数
|
||||
|
||||
@@ -73,6 +73,14 @@ public class PermissionsAuthorizationFilter extends org.apache.shiro.web.filter.
|
||||
}
|
||||
if (ServletUtils.isAjaxRequest(req)) {
|
||||
try {
|
||||
String uri = req.getRequestURI();
|
||||
if (StringUtils.endsWithIgnoreCase(uri, ".json")
|
||||
&& !StringUtils.endsWithIgnoreCase(loginUrl, ".json")){
|
||||
loginUrl += ".json";
|
||||
}else if (StringUtils.endsWithIgnoreCase(uri, ".xml")
|
||||
&& !StringUtils.endsWithIgnoreCase(loginUrl, ".xml")){
|
||||
loginUrl += ".xml";
|
||||
}
|
||||
request.getRequestDispatcher(loginUrl).forward(
|
||||
new GetHttpServletRequestWrapper(request), response);
|
||||
} catch (ServletException e) {
|
||||
|
||||
@@ -5,8 +5,11 @@ package com.jeesite.common.shiro.realm;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.shiro.authc.AuthenticationToken;
|
||||
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.codec.Sha1Utils;
|
||||
import com.jeesite.common.shiro.authc.FormToken;
|
||||
import com.jeesite.common.utils.SpringUtils;
|
||||
import com.jeesite.modules.sys.entity.Log;
|
||||
import com.jeesite.modules.sys.entity.User;
|
||||
@@ -35,6 +38,22 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
|
||||
// this.setCredentialsMatcher(matcher);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录令牌
|
||||
*/
|
||||
@Override
|
||||
protected FormToken getFormToken(AuthenticationToken authcToken) {
|
||||
return super.getFormToken(authcToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*/
|
||||
@Override
|
||||
protected User getUserInfo(FormToken token) {
|
||||
return super.getUserInfo(token);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成密文密码,生成随机的16位salt并经过1024次 sha-1 hash
|
||||
* @param plainPassword 明文密码
|
||||
|
||||
@@ -159,8 +159,8 @@ public class MsgInnerService extends CrudService<MsgInnerDao, MsgInner> {
|
||||
if (MsgPush.TYPE_PC.equals(type)){
|
||||
msgContent = new PcMsgContent();
|
||||
msgContent.setContent("你有一条内部消息,点击“详情”进行查阅。");
|
||||
((PcMsgContent)msgContent).addButton(new String[]{
|
||||
"详情", "/a/msg/msgInner/view?id="+msgInner.getId()});
|
||||
((PcMsgContent)msgContent).addButton(new String[]{"详情",
|
||||
Global.getAdminPath()+"/msg/msgInner/view?id="+msgInner.getId()});
|
||||
}else if (MsgPush.TYPE_APP.equals(type)){
|
||||
msgContent = new AppMsgContent();
|
||||
}else if (MsgPush.TYPE_SMS.equals(type)){
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.TreeDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Area;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.Area;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-22
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface AreaDao extends TreeDao<Area> {
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.TreeDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Company;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.Company;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-12
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface CompanyDao extends TreeDao<Company> {
|
||||
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.CompanyOffice;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.CompanyOffice;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-23
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface CompanyOfficeDao extends CrudDao<CompanyOffice> {
|
||||
|
||||
}
|
||||
@@ -6,7 +6,6 @@ package com.jeesite.modules.sys.dao;
|
||||
import java.util.List;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.EmpUser;
|
||||
|
||||
@@ -15,7 +14,7 @@ import com.jeesite.modules.sys.entity.EmpUser;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface EmpUserDao extends CrudDao<EmpUser> {
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Employee;
|
||||
|
||||
@@ -14,7 +13,7 @@ import com.jeesite.modules.sys.entity.Employee;
|
||||
* @version 2017-03-25
|
||||
* 通过 UserUtils.loadRefObj() 加载引用类型对象时,需要给MyBatisDao指定引用entity类型。
|
||||
*/
|
||||
@MyBatisDao(entity=Employee.class, dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao(entity=Employee.class)
|
||||
public interface EmployeeDao extends CrudDao<Employee> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
|
||||
/**
|
||||
* 员工附属机构关系表DAO接口
|
||||
* @author ThinkGem
|
||||
* @version 2019-04-29
|
||||
*/
|
||||
@MyBatisDao
|
||||
public interface EmployeeOfficeDao extends CrudDao<EmployeeOffice> {
|
||||
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.EmployeePost;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.EmployeePost;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface EmployeePostDao extends CrudDao<EmployeePost> {
|
||||
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Log;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.Log;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-19
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface LogDao extends CrudDao<Log> {
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.TreeDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Office;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.Office;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-23
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface OfficeDao extends TreeDao<Office> {
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
package com.jeesite.modules.sys.dao;
|
||||
|
||||
import com.jeesite.common.dao.CrudDao;
|
||||
import com.jeesite.common.datasource.DataSourceHolder;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import com.jeesite.modules.sys.entity.Post;
|
||||
|
||||
@@ -13,7 +12,7 @@ import com.jeesite.modules.sys.entity.Post;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@MyBatisDao(dataSourceName=DataSourceHolder.DEFAULT)
|
||||
@MyBatisDao
|
||||
public interface PostDao extends CrudDao<Post> {
|
||||
|
||||
}
|
||||
@@ -61,8 +61,7 @@ public class InitCoreData extends BaseInitDataTests {
|
||||
|
||||
@Override
|
||||
public void begin() {
|
||||
super.begin();
|
||||
excelFile = InitCoreData.class.getName().replaceAll("\\.", "/")+".xlsx";
|
||||
super.begin(InitCoreData.class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Binary file not shown.
@@ -96,7 +96,7 @@ public class EmpUser extends User {
|
||||
public Employee getEmployee(){
|
||||
Employee employee = (Employee)super.getRefObj();
|
||||
if (employee == null){
|
||||
employee = new Employee();
|
||||
employee = new Employee(getRefCode());
|
||||
super.setRefObj(employee);
|
||||
}
|
||||
return employee;
|
||||
|
||||
@@ -61,6 +61,7 @@ public class Employee extends DataEntity<Employee> {
|
||||
private String postCode; // 根据职位查询
|
||||
|
||||
private List<EmployeePost> employeePostList = ListUtils.newArrayList(); // 关联岗位信息
|
||||
private List<EmployeeOffice> employeeOfficeList = ListUtils.newArrayList(); // 关联附属机构信息
|
||||
|
||||
public Employee() {
|
||||
this(null);
|
||||
@@ -150,5 +151,13 @@ public class Employee extends DataEntity<Employee> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<EmployeeOffice> getEmployeeOfficeList() {
|
||||
return employeeOfficeList;
|
||||
}
|
||||
|
||||
public void setEmployeeOfficeList(List<EmployeeOffice> employeeOfficeList) {
|
||||
this.employeeOfficeList = employeeOfficeList;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
package com.jeesite.modules.sys.entity;
|
||||
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.mybatis.annotation.Column;
|
||||
import com.jeesite.common.mybatis.annotation.JoinTable;
|
||||
import com.jeesite.common.mybatis.annotation.Table;
|
||||
import com.jeesite.common.mybatis.annotation.JoinTable.Type;
|
||||
import com.jeesite.common.mybatis.mapper.query.QueryType;
|
||||
|
||||
/**
|
||||
* 附属机构Entity
|
||||
* @author ThinkGem
|
||||
* @version 2019-04-29
|
||||
*/
|
||||
@Table(name="${_prefix}sys_employee_office", alias="a", columns={
|
||||
@Column(name="id", attrName="id", label="编码", isPK=true),
|
||||
@Column(name="emp_code", attrName="empCode", label="员工编码"),
|
||||
@Column(name="office_code", attrName="officeCode", label="机构编码"),
|
||||
@Column(name="post_code", attrName="postCode", label="岗位编码"),
|
||||
}, joinTable={
|
||||
@JoinTable(type=Type.LEFT_JOIN, entity=Office.class, alias="o",
|
||||
on="o.office_code=a.office_code", attrName="this",
|
||||
columns={
|
||||
@Column(name="office_code", label="机构编码", isPK=true),
|
||||
@Column(name="parent_codes",label="所有父级编码", queryType=QueryType.LIKE),
|
||||
@Column(name="office_name", label="机构名称", isQuery=false),
|
||||
}),
|
||||
@JoinTable(type=Type.LEFT_JOIN, entity=Post.class, alias="p",
|
||||
on="p.post_code=a.post_code", attrName="this",
|
||||
columns={
|
||||
@Column(name="post_code", label="岗位编码", isPK=true),
|
||||
@Column(name="post_name", label="岗位名称", isQuery=false),
|
||||
}),
|
||||
}, orderBy="a.id ASC"
|
||||
)
|
||||
public class EmployeeOffice extends DataEntity<EmployeeOffice> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private String empCode; // 员工编码
|
||||
private String officeCode; // 机构编码
|
||||
private String postCode; // 岗位编码
|
||||
|
||||
private String parentCodes; // 机构所有上级编码(数据权限用)
|
||||
private String officeName; // 机构名称(联合查询项)
|
||||
private String postName; // 岗位名称(联合查询项)
|
||||
|
||||
public EmployeeOffice() {
|
||||
this(null, null);
|
||||
}
|
||||
|
||||
public EmployeeOffice(String empCode, String officeCode){
|
||||
super(null);
|
||||
this.empCode = empCode;
|
||||
this.officeCode = officeCode;
|
||||
}
|
||||
|
||||
public String getEmpCode() {
|
||||
return empCode;
|
||||
}
|
||||
|
||||
public void setEmpCode(String empCode) {
|
||||
this.empCode = empCode;
|
||||
}
|
||||
|
||||
public String getOfficeCode() {
|
||||
return officeCode;
|
||||
}
|
||||
|
||||
public void setOfficeCode(String officeCode) {
|
||||
this.officeCode = officeCode;
|
||||
}
|
||||
|
||||
@Length(min=0, max=64, message="岗位编码长度不能超过 64 个字符")
|
||||
public String getPostCode() {
|
||||
return postCode;
|
||||
}
|
||||
|
||||
public void setPostCode(String postCode) {
|
||||
this.postCode = postCode;
|
||||
}
|
||||
|
||||
public String getParentCodes() {
|
||||
return parentCodes;
|
||||
}
|
||||
|
||||
public void setParentCodes(String parentCodes) {
|
||||
this.parentCodes = parentCodes;
|
||||
}
|
||||
|
||||
public String getOfficeName() {
|
||||
return officeName;
|
||||
}
|
||||
|
||||
public void setOfficeName(String officeName) {
|
||||
this.officeName = officeName;
|
||||
}
|
||||
|
||||
public String getPostName() {
|
||||
return postName;
|
||||
}
|
||||
|
||||
public void setPostName(String postName) {
|
||||
this.postName = postName;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import java.util.List;
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.api.CrudServiceApi;
|
||||
import com.jeesite.modules.sys.entity.Employee;
|
||||
import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
import com.jeesite.modules.sys.entity.EmployeePost;
|
||||
|
||||
/**
|
||||
@@ -45,5 +46,10 @@ public interface EmployeeService extends CrudServiceApi<Employee> {
|
||||
* 查询当前员工关联的岗位信息
|
||||
*/
|
||||
public List<EmployeePost> findEmployeePostList(Employee employee);
|
||||
|
||||
/**
|
||||
* 查询当前员工关联的附属机构信息
|
||||
*/
|
||||
public List<EmployeeOffice> findEmployeeOfficeList(Employee employee);
|
||||
|
||||
}
|
||||
@@ -19,8 +19,10 @@ import com.jeesite.common.service.ServiceException;
|
||||
import com.jeesite.common.utils.excel.ExcelImport;
|
||||
import com.jeesite.common.validator.ValidatorUtils;
|
||||
import com.jeesite.modules.sys.dao.EmpUserDao;
|
||||
import com.jeesite.modules.sys.dao.EmployeeOfficeDao;
|
||||
import com.jeesite.modules.sys.entity.EmpUser;
|
||||
import com.jeesite.modules.sys.entity.Employee;
|
||||
import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
import com.jeesite.modules.sys.entity.User;
|
||||
import com.jeesite.modules.sys.service.EmpUserService;
|
||||
import com.jeesite.modules.sys.service.EmployeeService;
|
||||
@@ -39,9 +41,10 @@ public class EmpUserServiceSupport extends CrudService<EmpUserDao, EmpUser>
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private EmployeeService employeeService;
|
||||
@Autowired
|
||||
private EmployeeOfficeDao employeeOfficeDao;
|
||||
|
||||
/**
|
||||
* 获取单条数据
|
||||
@@ -131,6 +134,17 @@ public class EmpUserServiceSupport extends CrudService<EmpUserDao, EmpUser>
|
||||
// 3、保存员工
|
||||
employee.setIsNewRecord(user.getIsNewRecord());
|
||||
employeeService.save(employee);
|
||||
// 4、保存附属机构
|
||||
EmployeeOffice employeeOfficeWhere = new EmployeeOffice();
|
||||
employeeOfficeWhere.setEmpCode(employee.getEmpCode());
|
||||
employeeOfficeDao.deleteByEntity(employeeOfficeWhere);
|
||||
if (employee.getEmployeeOfficeList().size() > 0){
|
||||
employee.getEmployeeOfficeList().forEach(employeeOffice -> {
|
||||
employeeOffice.setId(IdGen.nextId());
|
||||
employeeOffice.setEmpCode(employee.getEmpCode());
|
||||
});
|
||||
employeeOfficeDao.insertBatch(employee.getEmployeeOfficeList());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,8 +12,10 @@ import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.CrudService;
|
||||
import com.jeesite.modules.sys.dao.EmployeeDao;
|
||||
import com.jeesite.modules.sys.dao.EmployeeOfficeDao;
|
||||
import com.jeesite.modules.sys.dao.EmployeePostDao;
|
||||
import com.jeesite.modules.sys.entity.Employee;
|
||||
import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
import com.jeesite.modules.sys.entity.EmployeePost;
|
||||
import com.jeesite.modules.sys.service.EmployeeService;
|
||||
|
||||
@@ -25,9 +27,11 @@ import com.jeesite.modules.sys.service.EmployeeService;
|
||||
@Transactional(readOnly=true)
|
||||
public class EmployeeServiceSupport extends CrudService<EmployeeDao, Employee>
|
||||
implements EmployeeService{
|
||||
|
||||
|
||||
@Autowired
|
||||
private EmployeePostDao employeePostDao;
|
||||
@Autowired
|
||||
private EmployeeOfficeDao employeeOfficeDao;
|
||||
|
||||
/**
|
||||
* 获取单条数据
|
||||
@@ -86,4 +90,13 @@ public class EmployeeServiceSupport extends CrudService<EmployeeDao, Employee>
|
||||
employeePost.setEmpCode(employee.getEmpCode());
|
||||
return employeePostDao.findList(employeePost);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询当前员工关联的附属机构信息
|
||||
*/
|
||||
public List<EmployeeOffice> findEmployeeOfficeList(Employee employee){
|
||||
EmployeeOffice employeeOffice = new EmployeeOffice();
|
||||
employeeOffice.setEmpCode(employee.getEmpCode());
|
||||
return employeeOfficeDao.findList(employeeOffice);
|
||||
}
|
||||
}
|
||||
@@ -5,13 +5,16 @@ package com.jeesite.modules.sys.utils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.utils.SpringUtils;
|
||||
import com.jeesite.modules.sys.entity.Company;
|
||||
import com.jeesite.modules.sys.entity.Employee;
|
||||
import com.jeesite.modules.sys.entity.EmployeeOffice;
|
||||
import com.jeesite.modules.sys.entity.Office;
|
||||
import com.jeesite.modules.sys.entity.User;
|
||||
import com.jeesite.modules.sys.service.CompanyService;
|
||||
import com.jeesite.modules.sys.service.EmployeeService;
|
||||
import com.jeesite.modules.sys.service.OfficeService;
|
||||
|
||||
/**
|
||||
@@ -28,6 +31,7 @@ public class EmpUtils {
|
||||
// 部门和公司缓存常量
|
||||
public static final String CACHE_OFFICE_ALL_LIST = "officeAllList";
|
||||
public static final String CACHE_COMPANY_ALL_LIST = "companyAllList";
|
||||
public static final String CACHE_COMPANY_OFFICE_LIST = "employeeOfficeList";
|
||||
|
||||
/**
|
||||
* 静态内部类,延迟加载,懒汉式,线程安全的单例模式
|
||||
@@ -35,6 +39,7 @@ public class EmpUtils {
|
||||
private static final class Static {
|
||||
private static OfficeService officeService = SpringUtils.getBean(OfficeService.class);
|
||||
private static CompanyService companyService = SpringUtils.getBean(CompanyService.class);
|
||||
private static EmployeeService employeeService = SpringUtils.getBean(EmployeeService.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,7 +50,7 @@ public class EmpUtils {
|
||||
User user = UserUtils.getUser();
|
||||
Employee employee = null;
|
||||
if (User.USER_TYPE_EMPLOYEE.equals(user.getUserType())){
|
||||
employee = (Employee)UserUtils.getUser().getRefObj();
|
||||
employee = (Employee)user.getRefObj();
|
||||
}
|
||||
if (employee == null){
|
||||
employee = new Employee();
|
||||
@@ -54,10 +59,43 @@ public class EmpUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前部门对象
|
||||
* 获取当前附属部门对象列表
|
||||
*/
|
||||
public static Office getOffice(){
|
||||
return getEmployee().getOffice();
|
||||
public static List<EmployeeOffice> getEmployeeOfficeList(){
|
||||
List<EmployeeOffice> list = UserUtils.getCache(CACHE_COMPANY_OFFICE_LIST);
|
||||
if (list == null){
|
||||
list = Static.employeeService.findEmployeeOfficeList(getEmployee());
|
||||
UserUtils.putCache(CACHE_COMPANY_OFFICE_LIST, list);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有部门编码,包括附属部门(数据权限用)
|
||||
* @return
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static String[] getOfficeCodes(){
|
||||
List<String> list = ListUtils.newArrayList();
|
||||
list.add(getOffice().getOfficeCode());
|
||||
getEmployeeOfficeList().forEach(e -> {
|
||||
list.add(e.getOfficeCode());
|
||||
});
|
||||
return list.toArray(new String[list.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有部门编码,包括附属部门(数据权限用)
|
||||
* @return
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static String[] getOfficeParentCodess(){
|
||||
List<String> list = ListUtils.newArrayList();
|
||||
list.add(getOffice().getParentCodes());
|
||||
getEmployeeOfficeList().forEach(e -> {
|
||||
list.add(e.getParentCodes());
|
||||
});
|
||||
return list.toArray(new String[list.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,6 +112,13 @@ public class EmpUtils {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前员工附属部门
|
||||
*/
|
||||
public static Office getOffice(){
|
||||
return getEmployee().getOffice();
|
||||
}
|
||||
//
|
||||
// /**
|
||||
// * 获取当前用户有权限访问的机构
|
||||
|
||||
@@ -63,7 +63,7 @@ public class AreaController extends BaseController {
|
||||
* 查询区域数据
|
||||
* @param area
|
||||
*/
|
||||
@RequiresPermissions("user")
|
||||
@RequiresPermissions("sys:area:view")
|
||||
@RequestMapping(value = "listData")
|
||||
@ResponseBody
|
||||
public List<Area> listData(Area area) {
|
||||
|
||||
@@ -70,7 +70,7 @@ public class CompanyController extends BaseController {
|
||||
* 查询公司数据
|
||||
* @param company
|
||||
*/
|
||||
@RequiresPermissions("user")
|
||||
@RequiresPermissions("sys:company:view")
|
||||
@RequestMapping(value = "listData")
|
||||
@ResponseBody
|
||||
public List<Company> listData(Company company, String ctrlPermi) {
|
||||
@@ -209,7 +209,7 @@ public class CompanyController extends BaseController {
|
||||
List<Map<String, Object>> mapList = ListUtils.newArrayList();
|
||||
Company where = new Company();
|
||||
where.setStatus(Company.STATUS_NORMAL);
|
||||
if (!(isAll != null && isAll)){
|
||||
if (!(isAll != null && isAll) || Global.isStrictMode()){
|
||||
companyService.addDataScopeFilter(where, ctrlPermi);
|
||||
}
|
||||
List<Company> list = companyService.findList(where);
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonView;
|
||||
import com.jeesite.common.codec.DesUtils;
|
||||
import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
@@ -344,6 +345,7 @@ public class LoginController extends BaseController{
|
||||
@RequiresPermissions("user")
|
||||
@RequestMapping(value = "menuTree")
|
||||
@ResponseBody
|
||||
@JsonView(Menu.SimpleView.class)
|
||||
public List<Menu> menuTree(String parentCode) {
|
||||
if (StringUtils.isNotBlank(parentCode)){
|
||||
return UserUtils.getMenuListByParentCode(parentCode);
|
||||
|
||||
@@ -67,7 +67,7 @@ public class OfficeController extends BaseController {
|
||||
* 查询机构数据
|
||||
* @param office
|
||||
*/
|
||||
@RequiresPermissions("user")
|
||||
@RequiresPermissions("sys:company:view")
|
||||
@RequestMapping(value = "listData")
|
||||
@ResponseBody
|
||||
public List<Office> listData(Office office, String ctrlPermi) {
|
||||
@@ -222,7 +222,7 @@ public class OfficeController extends BaseController {
|
||||
Office where = new Office();
|
||||
where.setStatus(Office.STATUS_NORMAL);
|
||||
where.setCompanyCode(companyCode);
|
||||
if (!(isAll != null && isAll)){
|
||||
if (!(isAll != null && isAll) || Global.isStrictMode()){
|
||||
officeService.addDataScopeFilter(where, ctrlPermi);
|
||||
}
|
||||
List<Office> list = officeService.findList(where);
|
||||
|
||||
@@ -131,7 +131,6 @@ public class PostController extends BaseController {
|
||||
|
||||
/**
|
||||
* 获取岗位树结构数据
|
||||
* @param isAll 是否显示所有机构(true:不进行权限过滤)
|
||||
* @param isShowCode 是否显示编码(true or 1:显示在左侧;2:显示在右侧;false or null:不显示)
|
||||
* @return
|
||||
*/
|
||||
|
||||
@@ -95,7 +95,7 @@ public class EmpUserController extends BaseController {
|
||||
public Page<EmpUser> listData(EmpUser empUser, Boolean isAll, String ctrlPermi, HttpServletRequest request, HttpServletResponse response) {
|
||||
empUser.getEmployee().getOffice().setIsQueryChildren(true);
|
||||
empUser.getEmployee().getCompany().setIsQueryChildren(true);
|
||||
if (!(isAll != null && isAll)){
|
||||
if (!(isAll != null && isAll) || Global.isStrictMode()){
|
||||
empUserService.addDataScopeFilter(empUser, ctrlPermi);
|
||||
}
|
||||
empUser.setPage(new Page<>(request, response));
|
||||
@@ -123,9 +123,11 @@ public class EmpUserController extends BaseController {
|
||||
Post post = new Post();
|
||||
model.addAttribute("postList", postService.findList(post));
|
||||
|
||||
// 获取当前用户所拥有的岗位
|
||||
if (StringUtils.isNotBlank(employee.getEmpCode())){
|
||||
// 获取当前用户所拥有的岗位
|
||||
employee.setEmployeePostList(employeeService.findEmployeePostList(employee));
|
||||
// 获取当前员工关联的附属机构信息
|
||||
employee.setEmployeeOfficeList(employeeService.findEmployeeOfficeList(employee));
|
||||
}
|
||||
|
||||
// 获取当前编辑用户的角色和权限
|
||||
@@ -175,7 +177,7 @@ public class EmpUserController extends BaseController {
|
||||
public void exportData(EmpUser empUser, Boolean isAll, String ctrlPermi, HttpServletResponse response) {
|
||||
empUser.getEmployee().getOffice().setIsQueryChildren(true);
|
||||
empUser.getEmployee().getCompany().setIsQueryChildren(true);
|
||||
if (!(isAll != null && isAll)){
|
||||
if (!(isAll != null && isAll) || Global.isStrictMode()){
|
||||
empUserService.addDataScopeFilter(empUser, ctrlPermi);
|
||||
}
|
||||
List<EmpUser> list = empUserService.findList(empUser);
|
||||
@@ -367,7 +369,7 @@ public class EmpUserController extends BaseController {
|
||||
empUser.setRoleCode(roleCode);
|
||||
empUser.setStatus(User.STATUS_NORMAL);
|
||||
empUser.setUserType(User.USER_TYPE_EMPLOYEE);
|
||||
if (!(isAll != null && isAll)) {
|
||||
if (!(isAll != null && isAll) || Global.isStrictMode()) {
|
||||
empUserService.addDataScopeFilter(empUser, ctrlPermi);
|
||||
}
|
||||
List<EmpUser> list = empUserService.findList(empUser);
|
||||
|
||||
@@ -50,7 +50,7 @@ public class SecAdminController extends BaseController {
|
||||
return "modules/sys/user/secAdminList";
|
||||
}
|
||||
|
||||
@RequiresPermissions("user")
|
||||
@RequiresPermissions("sys:secAdmin:view")
|
||||
@RequestMapping(value = "listData")
|
||||
@ResponseBody
|
||||
public Page<User> listData(User user, HttpServletRequest request, HttpServletResponse response) {
|
||||
|
||||
@@ -47,8 +47,14 @@ jdbc:
|
||||
# JTA 分布式事务(v4.0.4+)
|
||||
jta:
|
||||
enabled: false
|
||||
# 事务超时时间,单位毫秒(3分钟)
|
||||
transactionTimeout: 180000
|
||||
# 注意:如果报 oracle.jdbc.xa.OracleXAResource.recover 错误,则需要授权如下:
|
||||
# grant select on sys.dba_pending_transactions to jeesite;
|
||||
# grant select on sys.pending_trans$ to jeesite;
|
||||
# grant select on sys.dba_2pc_pending to jeesite;
|
||||
# grant execute on sys.dbms_system to jeesite;
|
||||
|
||||
# 事务超时时间,单位秒(30分钟)(v4.1.5+)
|
||||
transactionTimeout: 1800
|
||||
|
||||
# 表名前缀
|
||||
tablePrefix: js_
|
||||
@@ -147,6 +153,9 @@ user:
|
||||
remarks: ""
|
||||
}]
|
||||
|
||||
# 管理功能的控制权限类型(1拥有的权限 2管理的权限)(v4.1.5+)
|
||||
adminCtrlPermi: 2
|
||||
|
||||
# 多租户模式(SAAS模式)(专业版)
|
||||
useCorpModel: false
|
||||
|
||||
@@ -160,14 +169,18 @@ user:
|
||||
# 角色管理
|
||||
role:
|
||||
# 扩展数据权限定义:3:本部门;4:本公司;5:本部门和本公司
|
||||
# 如果 ctrlTypeClass 为 NONE,则代表是不控制该类型权限
|
||||
extendDataScopes: >
|
||||
{
|
||||
3: {
|
||||
Office: {
|
||||
#控制类型的类名 : "用来获取控制表名和主键,如果为 NONE,则代表是不控制该类型权限;",
|
||||
ctrlTypeClass: "com.jeesite.modules.sys.entity.Office",
|
||||
ctrlDataAttrName: "currentUser.refObj.office.officeCode",
|
||||
ctrlDataParentCodesAttrName: "currentUser.refObj.office.parentCodes"
|
||||
#控制数据的类名: "指定一个静态类名,方便 ctrlDataAttrName 得到权限数据,如:当前部门编码、公司编码",
|
||||
ctrlDataClass: "com.jeesite.modules.sys.utils.EmpUtils",
|
||||
#控制数据的类名下的属性名 : "可看做类下的 get 方法,如:EmpUtils.getOffices(),支持返回字符串或字符串数组类型",
|
||||
ctrlDataAttrName: "officeCodes",
|
||||
#控制数据的所有上级编码 : "用于控制数据为树表的情况,为数组时,必须与 ctrlDataAttrName 返回的长度相同,不是树表设置为空",
|
||||
ctrlDataParentCodesAttrName: "officeParentCodess"
|
||||
},
|
||||
Company: {
|
||||
ctrlTypeClass: "NONE"
|
||||
@@ -179,20 +192,23 @@ role:
|
||||
},
|
||||
Company: {
|
||||
ctrlTypeClass: "com.jeesite.modules.sys.entity.Company",
|
||||
ctrlDataAttrName: "currentUser.refObj.company.companyCode",
|
||||
ctrlDataParentCodesAttrName: "currentUser.refObj.company.parentCodes"
|
||||
ctrlDataClass: "com.jeesite.modules.sys.utils.EmpUtils",
|
||||
ctrlDataAttrName: "company.companyCode",
|
||||
ctrlDataParentCodesAttrName: "company.parentCodes"
|
||||
}
|
||||
},
|
||||
5: {
|
||||
Office: {
|
||||
ctrlTypeClass: "com.jeesite.modules.sys.entity.Office",
|
||||
ctrlDataAttrName: "currentUser.refObj.office.officeCode",
|
||||
ctrlDataParentCodesAttrName: "currentUser.refObj.office.parentCodes"
|
||||
ctrlDataClass: "com.jeesite.modules.sys.utils.EmpUtils",
|
||||
ctrlDataAttrName: "officeCodes",
|
||||
ctrlDataParentCodesAttrName: "officeParentCodess"
|
||||
},
|
||||
Company: {
|
||||
ctrlTypeClass: "com.jeesite.modules.sys.entity.Company",
|
||||
ctrlDataAttrName: "currentUser.refObj.company.companyCode",
|
||||
ctrlDataParentCodesAttrName: "currentUser.refObj.company.parentCodes"
|
||||
ctrlDataClass: "com.jeesite.modules.sys.utils.EmpUtils",
|
||||
ctrlDataAttrName: "company.companyCode",
|
||||
ctrlDataParentCodesAttrName: "company.parentCodes"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -414,7 +430,7 @@ mybatis:
|
||||
|
||||
# Web 相关
|
||||
web:
|
||||
|
||||
|
||||
# MVC 视图相关
|
||||
view:
|
||||
|
||||
@@ -455,12 +471,18 @@ web:
|
||||
|
||||
# 静态文件后缀,排除的url路径,指定哪些uri路径不进行静态文件过滤。
|
||||
staticFileExcludeUri: /druid/
|
||||
|
||||
|
||||
# 静态资源路径前缀,可做CDN加速优化
|
||||
staticPrefix: /static
|
||||
|
||||
# 严格模式(更严格的数据安全验证)
|
||||
strictMode: false
|
||||
|
||||
# 自定义正则表达式验证(主键、登录名)
|
||||
validator:
|
||||
id: '[a-zA-Z0-9_\-/#\u4e00-\u9fa5]{0,64}'
|
||||
user.loginCode: '[a-zA-Z0-9_\u4e00-\u9fa5]{4,20}'
|
||||
|
||||
|
||||
# 核心模块的Web功能(仅作为微服务时设为false)
|
||||
core:
|
||||
enabled: true
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<logger name="com.atomikos.icatch.provider.imp.AssemblerImp" level="ERROR" />
|
||||
<logger name="com.atomikos.jdbc.AbstractDataSourceBean" level="ERROR" />
|
||||
<logger name="com.atomikos.jdbc.AtomikosConnectionProxy" level="ERROR" />
|
||||
<logger name="com.atomikos.recovery.xa.XaResourceRecoveryManager" level="ERROR" />
|
||||
<!-- <logger name="org.springframework.transaction.support.TransactionSynchronizationManager" level="TRACE" /> -->
|
||||
|
||||
<logger name="springfox.documentation.spring.web.readers.parameter.ParameterDataTypeReader" level="ERROR" />
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
-- 新增文件管理模块
|
||||
INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
|
||||
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', getdate(), 'system', getdate(), NULL);
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE [${_prefix}sys_employee_office]
|
||||
(
|
||||
[id] varchar(64) NOT NULL UNIQUE,
|
||||
[emp_code] varchar(64) NOT NULL,
|
||||
[office_code] varchar(64) NOT NULL,
|
||||
[post_code] varchar(64),
|
||||
PRIMARY KEY ([emp_code], [office_code])
|
||||
);
|
||||
|
||||
-- 新增日语(日本语)语言包
|
||||
INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
|
||||
VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', getdate(), 'system', getdate(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
-- 新增文件管理模块
|
||||
INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
|
||||
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', now(), 'system', now(), NULL);
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE ${_prefix}sys_employee_office
|
||||
(
|
||||
id varchar(64) NOT NULL COMMENT '编号',
|
||||
emp_code varchar(64) NOT NULL COMMENT '员工编码',
|
||||
office_code varchar(64) NOT NULL COMMENT '机构编码',
|
||||
post_code varchar(64) COMMENT '岗位编码',
|
||||
PRIMARY KEY (emp_code, office_code),
|
||||
UNIQUE (id)
|
||||
) COMMENT = '员工附属机构关系表';
|
||||
|
||||
-- 新增日语(日本语)语言包
|
||||
INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
|
||||
VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', now(), 'system', now(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
-- 新增文件管理模块
|
||||
INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
|
||||
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', sysdate, 'system', sysdate, NULL);
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE ${_prefix}sys_employee_office
|
||||
(
|
||||
id varchar2(64) NOT NULL UNIQUE,
|
||||
emp_code varchar2(64) NOT NULL,
|
||||
office_code varchar2(64) NOT NULL,
|
||||
post_code varchar2(64),
|
||||
PRIMARY KEY (emp_code, office_code)
|
||||
);
|
||||
COMMENT ON TABLE ${_prefix}sys_employee_office IS '员工附属机构关系表';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.id IS '编号';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.emp_code IS '员工编码';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.office_code IS '机构编码';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.post_code IS '岗位编码';
|
||||
|
||||
-- 新增日语(日本语)语言包
|
||||
INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
|
||||
VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', sysdate, 'system', sysdate, '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
-- 新增文件管理模块
|
||||
INSERT INTO ${_prefix}sys_module(module_code, module_name, description, main_class_name, current_version, upgrade_info, status, create_by, create_date, update_by, update_date, remarks)
|
||||
VALUES ('filemanager', '文件管理', '公共文件柜、个人文件柜、文件分享', 'com.jeesite.modules.filemanager.web.FilemanagerController', '4.1.4', NULL, '0', 'system', now(), 'system', now(), NULL);
|
||||
|
||||
-- 员工附属机构关系表
|
||||
CREATE TABLE ${_prefix}sys_employee_office
|
||||
(
|
||||
id varchar(64) NOT NULL UNIQUE,
|
||||
emp_code varchar(64) NOT NULL,
|
||||
office_code varchar(64) NOT NULL,
|
||||
post_code varchar(64),
|
||||
PRIMARY KEY (emp_code, office_code)
|
||||
) WITHOUT OIDS;
|
||||
COMMENT ON TABLE ${_prefix}sys_employee_office IS '员工附属机构关系表';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.id IS '编号';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.emp_code IS '员工编码';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.office_code IS '机构编码';
|
||||
COMMENT ON COLUMN ${_prefix}sys_employee_office.post_code IS '岗位编码';
|
||||
|
||||
-- 新增日语(日本语)语言包
|
||||
INSERT INTO ${_prefix}sys_dict_data(dict_code, parent_code, parent_codes, tree_sort, tree_sorts, tree_leaf, tree_level, tree_names, dict_label, dict_value, dict_type, is_sys, description, css_style, css_class, status, create_by, create_date, update_by, update_date, remarks, corp_code, corp_name, extend_s1, extend_s2, extend_s3, extend_s4, extend_s5, extend_s6, extend_s7, extend_s8, extend_i1, extend_i2, extend_i3, extend_i4, extend_f1, extend_f2, extend_f3, extend_f4, extend_d1, extend_d2, extend_d3, extend_d4)
|
||||
VALUES ('1126375062364020736', '0', '0,', 60, '0000000060,', '1', 0, '日本語', '日本語', 'ja_JP', 'sys_lang_type', '1', '', '', '', '0', 'system', now(), 'system', now(), '', '0', 'JeeSite', '', '', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
@@ -10,4 +10,5 @@
|
||||
4.1.1
|
||||
4.1.2
|
||||
4.1.3
|
||||
4.1.4
|
||||
4.1.4
|
||||
4.1.5
|
||||
@@ -15,6 +15,7 @@ sys.login.accountDisabled=This Account has disabled.
|
||||
sys.login.accountFreezed=This Account has freezed.
|
||||
sys.login.accountAudited=This Account has audited.
|
||||
sys.login.accountInvalid=This Account has invalid.
|
||||
sys.login.tickOutMessage=The account has been removed by the administrator. Please login again.
|
||||
sys.login.multiAddrMessage=The account has been logged in elsewhere. Please login again.
|
||||
sys.login.failedNumLock=Login failed, try too many times, the account has been locked, please {0} in minutes after retry.
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
|
||||
# =========== 登录登出相关 ===========
|
||||
|
||||
sys.login.notLongIn=ログインしていないか、またはログインがタイムアウトしました。もう一度ログインしてください
|
||||
sys.login.success=ログイン成功!
|
||||
sys.login.getInfo=情報取得成功!
|
||||
sys.login.failure=ログインID或いはパスワードに誤りがあります。もう一度にゅうしてください。
|
||||
sys.login.error=申し訳ございません。ただいまシステムへアクセスできません。しばらくお待ちしてから再度お試してください!
|
||||
sys.logout.success=ログアウト成功!
|
||||
|
||||
# =========== 账号登录相关 ===========
|
||||
|
||||
sys.login.accountIsBlank=ログインIDを入力してください。
|
||||
sys.login.validCodeError=確認コードに誤りがあります。
|
||||
sys.login.accountDisabled=このアカウントは無効されています。
|
||||
sys.login.accountFreezed=このアカウントは凍結されています。
|
||||
sys.login.accountAudited=このアカウントは審査中です。
|
||||
sys.login.accountInvalid=このアカウントは存在しません。
|
||||
sys.login.tickOutMessage=アカウントは管理者によってオンラインから削除されました。もう一度ログインしてください。
|
||||
sys.login.multiAddrMessage=アカウントは他の場所でログインしています。もう一度ログインしてください。
|
||||
sys.login.failedNumLock=ログインに失敗しました。試行回数が多すぎます。アカウントがロックされています。{0}分後にもう一度お試しください。
|
||||
|
||||
# =========== 用户管理相关 ===========
|
||||
|
||||
sys.user.loginCodeExists=ログインアカウントは既に存在します
|
||||
sys.user.userCodeNotExists=ログインコードが存在しません
|
||||
sys.user.userNameNotBlank=ユーザー名を入力してください
|
||||
sys.user.infoSaveSuccess=ユーザー情報保存成功
|
||||
|
||||
# =========== 用户密码安全策略 ===========
|
||||
|
||||
sys.user.oldPasswordError=旧パスワードが間違っています。再入力してください
|
||||
sys.user.confirmPasswrodError=新パスワードは新パスワード確認とは異なります。再入力してください
|
||||
sys.user.passwordModifySuccess=パスワード変更に成功
|
||||
sys.user.passwordModifyNotRepeat=新パスワードを以前の{0}回以内の設定記録と同じにすることはできません。
|
||||
sys.user.passwordModifySecurityLevel=設定したパスワードが弱いパスワードであるため、パスワードの更新に失敗しました。
|
||||
sys.user.initPasswordModifyTip=パスワードはまだ初期パスワードです、パスワードを変更してください
|
||||
sys.user.passwordModifyTip=パスワードは{0}日間変更されていません。パスワードを変更してください。
|
||||
sys.user.passwordError=ログインパスワードが正しくありません。再入力してください
|
||||
sys.user.pwdQuestionModifySuccess=合言葉変更成功
|
||||
sys.user.pwdQuestionAnswerError=合言葉違います
|
||||
|
||||
# =========== 错误页面相关 ===========
|
||||
|
||||
sys.error.400.title=リクエストパラメーターに誤りがあります
|
||||
sys.error.400.message=リクエストパラメーターに誤りがあります。このパラメーターの解析ができません。
|
||||
sys.error.403.title=権限がありません
|
||||
sys.error.403.message=該当操作の権限がありません!
|
||||
sys.error.403.message.p1=申し訳ございません。このページのアクセス権限がありません。適当ではない場合システム管理者へ連絡してください。
|
||||
sys.error.404.title=ページが存在しません
|
||||
sys.error.404.message=アクセスしたページは存在しません!
|
||||
sys.error.404.message.p1=このエラーは次のような理由で発生する可能性があります:
|
||||
sys.error.404.message.p2=アドレスURLが正しく入力されておらず、リンクの有効期限が切れています。
|
||||
sys.error.404.message.p3=アクセスしているアドレスURLは:
|
||||
sys.error.404.message.p4=質問がある場合は、管理者に連絡してください。.
|
||||
sys.error.500.title=システム内部エラー
|
||||
sys.error.500.message=アクセスしたページは問題が発生しました!
|
||||
sys.error.500.message.p1=申し訳ございません。アクセスしたページは問題が発生しました,システム管理者へ連絡してください。
|
||||
sys.error.returnButton=前のページに戻る
|
||||
|
||||
# =========== 文件上传相关 ===========
|
||||
|
||||
sys.file.uploadFileIsEmpty=サーバーに該当ファイルはありません。
|
||||
sys.file.uploadValidNotBlank=ファイル検証番号とファイル名を入力してください。
|
||||
sys.file.uploadValidImage=画像のみアップロードできます({0})
|
||||
sys.file.uploadValidVideo=動画のみアップロードできます({0})
|
||||
sys.file.uploadValidFile=文書のみをアップロードできます({0})
|
||||
sys.file.uploadValidAll=フォーマットが正しくありません({0})
|
||||
sys.file.uploadValidSize=サイズは{0}を超過できません
|
||||
sys.file.uploadValidContent=ファイルコンテンツフォーマットは許可されていません。
|
||||
sys.file.uploadSuccessSeconds=セカンドアップロード成功,時間{0}
|
||||
sys.file.uploadSuccess=アップロード成功,時間{0}
|
||||
sys.file.downloadFileNotExist=ファイルが存在しません!
|
||||
sys.file.chunkUploading=アップロード中 {0}/{1}
|
||||
@@ -1,8 +1,6 @@
|
||||
|
||||
# =========== common ===========
|
||||
|
||||
英语=English
|
||||
|
||||
保\ 存=Save
|
||||
关\ 闭=Close
|
||||
确定=Ok
|
||||
@@ -62,7 +60,7 @@
|
||||
请上传=Please upload
|
||||
开始上传=Start upload
|
||||
或将照片拖到这里,最多可选\ {0}\ 张=Drag the photo here, at most \ {0} \ sheet
|
||||
或将照片拖到这里,最多可选\ {0}\ 个=Drag the photo here, at most \ {0}
|
||||
或将文件拖到这里,最多可选\ {0}\ 个=Drag the file here, at most \ {0}
|
||||
|
||||
# =========== iconselect ===========
|
||||
|
||||
@@ -78,6 +76,6 @@
|
||||
|
||||
验证码=Captcha
|
||||
请填写验证码=Please fill in the captcha.
|
||||
验证码不正确=The captcha is incorrect.
|
||||
验证码不正确.=The captcha is incorrect.
|
||||
看不清,点击图片刷新=Can't see clearly, click on the picture to refresh.
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
|
||||
# =========== common ===========
|
||||
|
||||
保\ 存=保存
|
||||
关\ 闭=閉じる
|
||||
确定=はい
|
||||
清除=クリア
|
||||
关闭=閉じる
|
||||
查询=検索
|
||||
重置=リセット
|
||||
新增=作成
|
||||
增行=行作成
|
||||
刷新=リフレッシュ
|
||||
查看=詳細
|
||||
展开=展開
|
||||
展开一级=一階層展開
|
||||
折叠=収束
|
||||
折叠全部=全部収束
|
||||
操作=操作
|
||||
更多操作=他の操作
|
||||
|
||||
基本信息=基本情報
|
||||
详细信息=詳細情報
|
||||
扩展字段=拡張項目
|
||||
|
||||
# =========== imageclip ===========
|
||||
|
||||
图片裁剪=画像編集
|
||||
选择图片=画像選択
|
||||
放大=拡大
|
||||
缩小=縮小
|
||||
向左移动=左へ移動
|
||||
向右移动=右へ移動
|
||||
向上移动=上へ移動
|
||||
向下移动=下へ移動
|
||||
逆时针旋转=左回り
|
||||
顺时针旋转=右回り
|
||||
水平反转=水平反転
|
||||
左右反转=左右反転
|
||||
|
||||
# =========== treeselect ===========
|
||||
|
||||
选项选择=オプション選択
|
||||
显示搜索=フィルター表示
|
||||
隐藏搜索=フィルター非表示
|
||||
关键字=キーワード
|
||||
搜索=検索
|
||||
展开=開く
|
||||
折叠=隠す
|
||||
不能选择根节点=ルート要素の選択ができません
|
||||
不能选择父节点=親要素の選択ができません
|
||||
请重新选择=もう一度選択してください
|
||||
|
||||
# =========== fileupload ===========
|
||||
|
||||
文件=ファイル
|
||||
文档=ドキュメント
|
||||
图片=画像
|
||||
音频或视频=音声 or 動画
|
||||
请上传=アップロード
|
||||
开始上传=アップロード
|
||||
或将照片拖到这里,最多可选\ {0}\ 张=画像をここにドラッグしてください、最大 \ {0} \ 枚可能
|
||||
或将文件拖到这里,最多可选\ {0}\ 个=ファイルをここにドラッグしてください、最大 \ {0} \ 個可能
|
||||
|
||||
# =========== iconselect ===========
|
||||
|
||||
图标选择=アイコン選択
|
||||
提示:双击选择图标。=ツールチープ: ダブルクリックでアイオンの選択ができます.
|
||||
|
||||
# =========== ueditor ===========
|
||||
|
||||
目录标题=ディレクトリタイトル
|
||||
暂无大纲标题=アウトラインのタイトルはまだありません
|
||||
|
||||
# =========== validcode ===========
|
||||
|
||||
验证码=検証コード
|
||||
请填写验证码=検証コードを入力してください
|
||||
验证码不正确.=検証コードが正しくありません
|
||||
看不清,点击图片刷新=はっきり見えない場合、画像更新をクリックしてリフレッシュできます.
|
||||
|
||||
@@ -52,10 +52,10 @@
|
||||
公共场所慎用,下次不需要再填写帐号=Use caution in public places.
|
||||
记住账号=Remember account
|
||||
公共场所慎用,下次不需要再填写帐号和密码=Use caution in public places.
|
||||
记住密码=Remember password
|
||||
自动登录=Remember password
|
||||
|
||||
登录验证成功,正在进入...=Login authentication successful, entering...
|
||||
正在验证登录,请稍后...=Verify login, please later...
|
||||
正在验证登录,请稍候...=Verify login, please wait...
|
||||
立即登录=Login
|
||||
|
||||
注册账号=Register
|
||||
@@ -71,6 +71,9 @@
|
||||
修改密码=Change password
|
||||
退出登录=Log out
|
||||
系统切换=System switching
|
||||
当前租户=Current tenant
|
||||
租户切换=Tenant switch
|
||||
在线人员=Online user
|
||||
|
||||
在线=Online
|
||||
注销=Logout
|
||||
@@ -114,6 +117,8 @@
|
||||
组织机构=Office
|
||||
新增用户=New user
|
||||
编辑用户=Edit user
|
||||
导出=Export
|
||||
导入=Import
|
||||
|
||||
停用用户=Disable user
|
||||
确认要停用该用户吗?=Are you sure want to disable this user?
|
||||
@@ -165,6 +170,9 @@
|
||||
所在岗位=Position
|
||||
英文名=English name
|
||||
|
||||
附属机构=Auxiliary Office
|
||||
附属岗位=Auxiliary Post
|
||||
|
||||
角色名称=Role name
|
||||
角色编码=Role code
|
||||
|
||||
|
||||
@@ -0,0 +1,254 @@
|
||||
# =========== 通用字典 ===========
|
||||
|
||||
是=はい
|
||||
否=いいえ
|
||||
男=男
|
||||
女=女
|
||||
正常=正常
|
||||
删除=削除
|
||||
停用=無効
|
||||
冻结=凍結
|
||||
待审=診察
|
||||
驳回=却下
|
||||
草稿=草稿
|
||||
|
||||
# =========== 通用字段 ===========
|
||||
|
||||
状态=状態
|
||||
备注信息=備考
|
||||
创建者=作成者
|
||||
创建时间=作成日時
|
||||
更新者=更新者
|
||||
更新时间=更新日時
|
||||
排序号=ソート
|
||||
|
||||
# =========== 功能标题 ===========
|
||||
|
||||
系统管理=システム管理
|
||||
组织管理=組織管理
|
||||
用户管理=ユーザー管理
|
||||
机构管理=機構管理
|
||||
公司管理=会社管理
|
||||
岗位管理=職位管理
|
||||
|
||||
用户选择=ユーザー選択
|
||||
机构选择=事務所選択
|
||||
公司选择=会社選択
|
||||
区域选择=区域選択
|
||||
日期选择=日付選択
|
||||
日期时间=日時
|
||||
|
||||
# =========== 登录页 ===========
|
||||
|
||||
登录=ログイン
|
||||
|
||||
请填写登录账号.=ログインIDを入力してください.
|
||||
登录账号=ログインアカウント
|
||||
|
||||
登录密码,鼠标按下显示密码=押下するとパスワードを表示します.
|
||||
请填写登录密码.=パスワードを入力してください.
|
||||
登录密码=パスワード
|
||||
|
||||
公共场所慎用,下次不需要再填写帐号=次回からログインIDの入力が不要にします.
|
||||
记住账号=ログインID記憶
|
||||
公共场所慎用,下次不需要再填写帐号和密码=次回からパスワードの入力が不要にします.
|
||||
自动登录=パスワード記憶
|
||||
|
||||
登录验证成功,正在进入...=ログイン中、少々お待ちください...
|
||||
正在验证登录,请稍候...=登録を行っています...
|
||||
立即登录=ログイン
|
||||
|
||||
注册账号=アカウント作成
|
||||
忘记密码=パスワードを忘れた
|
||||
|
||||
# =========== 主框架页 ===========
|
||||
|
||||
仪表盘=計器盤
|
||||
全屏=最大化
|
||||
切换主题=テーマ切替
|
||||
|
||||
个人中心=マイページ
|
||||
修改密码=パスワード変更
|
||||
退出登录=ログアウト
|
||||
系统切换=システム切替
|
||||
当前租户=当面テナント
|
||||
租户切换=テナント切り替え
|
||||
在线人员=オンラインスタッフ
|
||||
|
||||
在线=オンライン
|
||||
注销=ログアウト
|
||||
|
||||
# =========== 消息提醒 ===========
|
||||
|
||||
消息=メッセージ
|
||||
你有=見読
|
||||
条消息=件メッセージ
|
||||
查看全部消息=全部見る
|
||||
查看消息=開く
|
||||
系统消息=システムメッセージ
|
||||
您有\ {0}\ 条新消息,由于消息太多,这里为您合并,请点击查看按钮看详情。=見読メッセージ {0} 件, 省略で表示しているため, クリックで一覧を見る.
|
||||
|
||||
# =========== 个人中心 ===========
|
||||
|
||||
修改密保=セキュリティ変更
|
||||
个人信息=個人情報
|
||||
|
||||
修改头像=アバター変更
|
||||
|
||||
个性签名=署名
|
||||
上次登录=前回ログイン
|
||||
时间=時間
|
||||
首次登录=初めてログイン
|
||||
|
||||
旧密码=旧パスワード
|
||||
新密码=新パスワード
|
||||
确认新密码=新パスワード確認
|
||||
|
||||
您还未设置过密保问题,您可以根据登录密码设置新的密保问题及答案。=セキュリティ合言葉が設定されていません。ログイン後新しいセキュリティ合言葉を設定してください。.
|
||||
旧的密保问题及答案=古いセキュリティ合言葉
|
||||
旧密保问题=古いセキュリティ合言葉の質問
|
||||
旧密保问题答案=古いセキュリティ合言葉の答え
|
||||
新的密保问题及答案=新しいセキュリティ合言葉
|
||||
新密保问题=新しいセキュリティ合言葉の質問
|
||||
新密保问题答案=新しいセキュリティ合言葉の答え
|
||||
|
||||
# =========== 用户管理 ===========
|
||||
|
||||
组织机构=機構
|
||||
新增用户=ユーザー作成
|
||||
编辑用户=ユーザー編集
|
||||
导出=導入
|
||||
导入=を導く
|
||||
|
||||
停用用户=ユーザー無効
|
||||
确认要停用该用户吗?=このユーザーを無効にしてもよろしいですか?
|
||||
启用用户=ユーザー有効
|
||||
确认要启用该用户吗?=このユーザーを有効にしてもよろしいですか?
|
||||
删除用户=ユーザー削除
|
||||
确认要删除该用户吗?=このユーザーを削除してもよろしいですか?
|
||||
用户分配角色=ユーザーロール設定
|
||||
分配角色=ロール設定
|
||||
用户分配数据权限=ユーザーデータ権限設定
|
||||
数据权限=データ権限
|
||||
用户密码重置=パスワードリセット
|
||||
确认要将该用户密码重置到初始状态吗?=ユーザーのログインパスワードをリセットします。よろしいですか?
|
||||
重置密码=パスワードリセット
|
||||
|
||||
保存用户失败,登录账号''{0}''已存在=ユーザーの保存に失敗しました。ログインアカウント '' {0} ''は既に存在します
|
||||
保存用户''{0}''成功=ユーザー ''{0}'' 保存成功
|
||||
停用用户失败,不允许停用当前用户=ユーザー無効に更新する処理失敗。このユーザーは無効にすることできません
|
||||
停用用户''{0}''成功=ユーザー ''{0}'' 無効設定成功
|
||||
启用用户''{0}''成功=ユーザー ''{0}'' 有効設定成功
|
||||
重置用户''{0}''密码成功=ユーザー ''{0}'' のパスワードを初期化成功しました
|
||||
删除用户失败,不允许删除当前用户=ユーザー削除失敗. このユーザーを削除することができません
|
||||
删除用户''{0}''成功=ユーザー ''{0}'' 削除成功
|
||||
用户分配数据权限成功=ユーザーデータ権限設定成功
|
||||
|
||||
账号=アカウント
|
||||
昵称=ニックネーム
|
||||
邮箱=メール
|
||||
手机=携帯
|
||||
电话=電話
|
||||
姓名=氏名
|
||||
机构=機構
|
||||
公司=会社
|
||||
岗位=職位
|
||||
|
||||
归属机构=所属機構
|
||||
归属公司=所属会社
|
||||
登录账号=アカウント
|
||||
登录账号已存在=ログインアカウントがすでに存在します
|
||||
用户昵称=ニックネーム
|
||||
电子邮箱=メール
|
||||
手机号码=携帯電話
|
||||
办公电话=会社電話
|
||||
权重(排序)=レベル(ソート)
|
||||
权重越大排名越靠前,请填写数字。=重要度が大きいほど前に表示します。数字を入力してください.
|
||||
|
||||
员工编号=社員コード
|
||||
员工姓名=氏名
|
||||
所在岗位=所属職位
|
||||
英文名=英語氏名
|
||||
|
||||
附属机构=付属機構
|
||||
附属岗位=付属職位
|
||||
|
||||
角色名称=ロール名称
|
||||
角色编码=ロールコード
|
||||
|
||||
# =========== 機構管理 ===========
|
||||
|
||||
新增机构=機構追加
|
||||
编辑机构=機構編集
|
||||
|
||||
停用机构=機構無効にする
|
||||
确认要停用该机构吗?=機構無効にします、よろしいですか?
|
||||
启用机构=機構有効にする
|
||||
确认要启用该机构吗?=機構有効にします、よろしいですか?
|
||||
删除机构=機構削除
|
||||
确认要删除该机构及所有子机构吗?=機構及び子機構を削除します、よろしいですか?
|
||||
新增下级机构=子機構追加
|
||||
|
||||
保存机构''{0}''成功=機構 ''{0}'' 保存成功
|
||||
该机构包含未停用的子机构!=有効な子機構が含まれています!
|
||||
停用机构''{0}''成功=機構 ''{0}'' 無効にする処理成功
|
||||
启用机构''{0}''成功=機構 ''{0}'' 有効にする処理成功
|
||||
删除机构''{0}''成功=機構 ''{0}'' 削除成功
|
||||
|
||||
上级机构=親機構
|
||||
机构名称=機構名称
|
||||
机构代码=機構コード
|
||||
机构全称=機構フルネーム
|
||||
机构类型=機構タイプ
|
||||
负责人=責任者
|
||||
联系地址=住所
|
||||
邮政编码=郵便番号
|
||||
|
||||
# =========== 公司管理 ===========
|
||||
|
||||
新增公司=会社追加
|
||||
编辑公司=会社編集
|
||||
|
||||
停用公司=会社無効にする
|
||||
确认要停用该公司吗?=会社無効にします、よろしいですか?
|
||||
启用公司=会社有効にする
|
||||
确认要启用该公司吗?=会社有効にします、よろしいですか?
|
||||
删除公司=会社削除
|
||||
确认要删除该公司及所有子公司吗?=会社及び子会社を削除します、よろしいですか?
|
||||
新增下级公司=子会社追加
|
||||
|
||||
保存公司''{0}''成功=会社 ''{0}'' 保存成功
|
||||
该公司包含未停用的子公司!=有効な会社が含まれています!
|
||||
停用公司''{0}''成功=会社 ''{0}'' 無効設定成功
|
||||
启用公司''{0}''成功=会社 ''{0}'' 有効設定成功
|
||||
删除公司''{0}''成功=会社 ''{0}'' 削除成功
|
||||
|
||||
上级公司=親会社
|
||||
公司名称=会社名称
|
||||
公司编码=会社コード
|
||||
公司全称=会社フルネーム
|
||||
归属区域=エリア
|
||||
包含机构=機構
|
||||
|
||||
# =========== 岗位管理 ===========
|
||||
|
||||
新增岗位=職位追加
|
||||
编辑岗位=職位編集
|
||||
|
||||
停用岗位=職位無効にする
|
||||
确认要停用该岗位吗?=職位無効にします、よろしいですか?
|
||||
启用岗位=職位有効にする
|
||||
确认要启用该岗位吗?=職位有効にします、よろしいですか?
|
||||
删除岗位=職位削除
|
||||
确认要删除该岗位吗?=職位を削除します、よろしいですか?
|
||||
|
||||
保存岗位失败,岗位名称''{0}''已存在=職位保存失敗。職位名称 ''{0}'' 既に存在します
|
||||
保存岗位''{0}''成功=職位 ''{0}'' 保存成功
|
||||
停用岗位''{0}''成功=職位 ''{0}'' 無効設定成功
|
||||
启用岗位''{0}''成功=職位 ''{0}'' 有効設定成功
|
||||
删除岗位''{0}''成功=職位 ''{0}'' 削除成功
|
||||
|
||||
岗位名称=職位名称
|
||||
岗位名称已存在=職位名称が既に存在します
|
||||
岗位编码=職位コード
|
||||
岗位分类=職位分類
|
||||
@@ -1,11 +1,12 @@
|
||||
# transactions.properties not found - looking for jta.properties in classpath...
|
||||
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
|
||||
com.atomikos.icatch.max_timeout=-1
|
||||
com.atomikos.icatch.max_actives=-1
|
||||
com.atomikos.icatch.enable_logging=false
|
||||
com.atomikos.icatch.registered=true
|
||||
|
||||
# 提示 oracle.jdbc.xa.OracleXAResource.recover 错误需要授权:
|
||||
#grant select on sys.dba_pending_transactions to jeesite;
|
||||
#grant select on sys.pending_trans$ to jeesite;
|
||||
#grant select on sys.dba_2pc_pending to jeesite;
|
||||
#grant execute on sys.dbms_system to jeesite;
|
||||
# 注意:如果报 oracle.jdbc.xa.OracleXAResource.recover 错误,则需要授权如下:
|
||||
# grant select on sys.dba_pending_transactions to jeesite;
|
||||
# grant select on sys.pending_trans$ to jeesite;
|
||||
# grant select on sys.dba_2pc_pending to jeesite;
|
||||
# grant execute on sys.dbms_system to jeesite;
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<!-- 查询数据 -->
|
||||
<select id="findList" resultType="MsgInner">
|
||||
SELECT distinct ${sqlMap.column.toSql()}
|
||||
SELECT ${sqlMap.column.toSql()}
|
||||
<if test="record != null and record.receiveUserCode != null and record.receiveUserCode != ''">,
|
||||
r.read_status AS "record.readStatus",
|
||||
r.read_date AS "record.readDate",
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jeesite.modules.sys.dao.EmployeeOfficeDao">
|
||||
|
||||
<!-- 查询数据
|
||||
<select id="findList" resultType="EmployeeOffice">
|
||||
SELECT ${sqlMap.column.toSql()}
|
||||
FROM ${sqlMap.table.toSql()}
|
||||
<where>
|
||||
${sqlMap.where.toSql()}
|
||||
</where>
|
||||
ORDER BY ${sqlMap.order.toSql()}
|
||||
</select> -->
|
||||
|
||||
</mapper>
|
||||
@@ -6,13 +6,26 @@
|
||||
* @version 2017-12-24
|
||||
*/
|
||||
(function($) {
|
||||
window.js = window.js || {};
|
||||
js.i18n = $.extend({}, js.i18n, {
|
||||
'tabpanel.newTabPage':'New Page',
|
||||
'loading.message':'Loading ...',
|
||||
'loading.submitMessage':'Submission ...',
|
||||
'showMessage.error':'failure,error',
|
||||
'showMessage.success':'success,completion',
|
||||
'showMessage.warning':'no'
|
||||
});
|
||||
window.js = window.js || {};
|
||||
js.i18n = $.extend({}, js.i18n, {
|
||||
'tabpanel.newTabPage':'New Page',
|
||||
'loading.message':'Loading ...',
|
||||
'loading.submitMessage':'Submission ...',
|
||||
'showMessage.error':'failure,error',
|
||||
'showMessage.success':'success,completion',
|
||||
'showMessage.warning':'no'
|
||||
});
|
||||
// ============ layer ============
|
||||
window.layer = window.layer || {};
|
||||
layer.i18n = $.extend({}, layer.i18n, {
|
||||
btnOk: 'Ok',
|
||||
btnCancel: 'Cancle',
|
||||
title: 'Information',
|
||||
promptTipA: 'Enter ',
|
||||
promptTipB: 'character at most.',
|
||||
noPicture: 'No picture',
|
||||
photoError: 'Current image address error.<br>Next slide?',
|
||||
photoNextPage: 'The next',
|
||||
photoClose: 'Close'
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/*!
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*
|
||||
* 国际化文件
|
||||
* @author ThinkGem
|
||||
* @version 2017-12-24
|
||||
*/
|
||||
(function($) {
|
||||
window.js = window.js || {};
|
||||
js.i18n = $.extend({}, js.i18n, {
|
||||
'tabpanel.newTabPage':'新タブ',
|
||||
'loading.message':'ローディング...お待ちください...',
|
||||
'loading.submitMessage':'送信中...お待ちください...',
|
||||
'showMessage.error':'失敗,エラー,未完了',
|
||||
'showMessage.success':'成功,完了',
|
||||
'showMessage.warning':'不可,不許可,必須,既に存在,不要,不正確'
|
||||
});
|
||||
// ============ layer ============
|
||||
window.layer = window.layer || {};
|
||||
layer.i18n = $.extend({}, layer.i18n, {
|
||||
btnOk: '確定',
|
||||
btnCancel: 'キャンセル',
|
||||
title: 'メッセージ',
|
||||
promptTipA: '最大入力',
|
||||
promptTipB: '個文字',
|
||||
noPicture: '画像が存在しません',
|
||||
photoError: 'この画像が表示できません<br>次の画像へ遷移しますか?',
|
||||
photoNextPage: '次へ',
|
||||
photoClose: '閉じる'
|
||||
});
|
||||
})(jQuery);
|
||||
@@ -6,13 +6,13 @@
|
||||
* @version 2017-12-24
|
||||
*/
|
||||
(function($) {
|
||||
window.js = window.js || {};
|
||||
js.i18n = $.extend({}, js.i18n, {
|
||||
'tabpanel.newTabPage':'新页签',
|
||||
'loading.message':'正在加载,请稍后...',
|
||||
'loading.submitMessage':'正在提交,请稍后...',
|
||||
'showMessage.error':'失败,错误,未完成',
|
||||
'showMessage.success':'成功,完成',
|
||||
'showMessage.warning':'不能,不允许,必须,已存在,不需要,不正确'
|
||||
});
|
||||
window.js = window.js || {};
|
||||
js.i18n = $.extend({}, js.i18n, {
|
||||
'tabpanel.newTabPage':'新页签',
|
||||
'loading.message':'正在加载,请稍后...',
|
||||
'loading.submitMessage':'正在提交,请稍后...',
|
||||
'showMessage.error':'失败,错误,未完成',
|
||||
'showMessage.success':'成功,完成',
|
||||
'showMessage.warning':'不能,不允许,必须,已存在,不需要,不正确'
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
186
modules/core/src/main/resources/static/jqGrid/4.7/js/i18n/en.js
Normal file
186
modules/core/src/main/resources/static/jqGrid/4.7/js/i18n/en.js
Normal file
@@ -0,0 +1,186 @@
|
||||
;(function($){
|
||||
/**
|
||||
* jqGrid English Translation
|
||||
* Tony Tomov tony@trirand.com
|
||||
* http://trirand.com/blog/
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
**/
|
||||
$.jgrid = $.jgrid || {};
|
||||
$.extend($.jgrid,{
|
||||
extend : {
|
||||
btnSearch: 'Search',
|
||||
btnHideSearch: 'Hide Search',
|
||||
expandTooMany: 'You need to expand the "{0}" node, because there are too many nodes, and the execution is canceled.',
|
||||
pageTitle: 'Click the number, you can fill in the page number of pages, press enter to take effect!',
|
||||
pageLabelA: 'Page',
|
||||
pageLabelB: ' / ',
|
||||
pageLabelC: 'of {0}',
|
||||
},
|
||||
defaults : {
|
||||
recordtext: "View {0} - {1} of {2}",
|
||||
emptyrecords: "No records to view",
|
||||
loadtext: "Loading...",
|
||||
pgtext : "Page {0} of {1}",
|
||||
pgfirst : "First Page",
|
||||
pglast : "Last Page",
|
||||
pgnext : "Next Page",
|
||||
pgprev : "Previous Page",
|
||||
pgrecs : "Records per Page",
|
||||
showhide: "Toggle Expand Collapse Grid"
|
||||
},
|
||||
search : {
|
||||
caption: "Search...",
|
||||
Find: "Find",
|
||||
Reset: "Reset",
|
||||
odata: [{ oper:'eq', text:'equal'},{ oper:'ne', text:'not equal'},{ oper:'lt', text:'less'},{ oper:'le', text:'less or equal'},{ oper:'gt', text:'greater'},{ oper:'ge', text:'greater or equal'},{ oper:'bw', text:'begins with'},{ oper:'bn', text:'does not begin with'},{ oper:'in', text:'is in'},{ oper:'ni', text:'is not in'},{ oper:'ew', text:'ends with'},{ oper:'en', text:'does not end with'},{ oper:'cn', text:'contains'},{ oper:'nc', text:'does not contain'},{ oper:'nu', text:'is null'},{ oper:'nn', text:'is not null'}],
|
||||
groupOps: [{ op: "AND", text: "all" },{ op: "OR", text: "any" }],
|
||||
operandTitle : "Click to select search operation.",
|
||||
resetTitle : "Reset Search Value"
|
||||
},
|
||||
edit : {
|
||||
addCaption: "Add Record",
|
||||
editCaption: "Edit Record",
|
||||
bSubmit: "Submit",
|
||||
bCancel: "Cancel",
|
||||
bClose: "Close",
|
||||
saveData: "Data has been changed! Save changes?",
|
||||
bYes : "Yes",
|
||||
bNo : "No",
|
||||
bExit : "Cancel",
|
||||
msg: {
|
||||
required:"Field is required",
|
||||
number:"Please, enter valid number",
|
||||
minValue:"value must be greater than or equal to ",
|
||||
maxValue:"value must be less than or equal to",
|
||||
email: "is not a valid e-mail",
|
||||
integer: "Please, enter valid integer value",
|
||||
date: "Please, enter valid date value",
|
||||
url: "is not a valid URL. Prefix required ('http://' or 'https://')",
|
||||
nodefined : " is not defined!",
|
||||
novalue : " return value is required!",
|
||||
customarray : "Custom function should return array!",
|
||||
customfcheck : "Custom function should be present in case of custom checking!"
|
||||
|
||||
}
|
||||
},
|
||||
view : {
|
||||
caption: "View Record",
|
||||
bClose: "Close"
|
||||
},
|
||||
del : {
|
||||
caption: "Delete",
|
||||
msg: "Delete selected record(s)?",
|
||||
bSubmit: "Delete",
|
||||
bCancel: "Cancel"
|
||||
},
|
||||
nav : {
|
||||
edittext: "",
|
||||
edittitle: "Edit selected row",
|
||||
addtext:"",
|
||||
addtitle: "Add new row",
|
||||
deltext: "",
|
||||
deltitle: "Delete selected row",
|
||||
searchtext: "",
|
||||
searchtitle: "Find records",
|
||||
refreshtext: "",
|
||||
refreshtitle: "Reload Grid",
|
||||
alertcap: "Warning",
|
||||
alerttext: "Please, select row",
|
||||
viewtext: "",
|
||||
viewtitle: "View selected row"
|
||||
},
|
||||
col : {
|
||||
caption: "Select columns",
|
||||
bSubmit: "Ok",
|
||||
bCancel: "Cancel"
|
||||
},
|
||||
errors : {
|
||||
errcap : "Error",
|
||||
nourl : "No url is set",
|
||||
norecords: "No records to process",
|
||||
model : "Length of colNames <> colModel!"
|
||||
},
|
||||
formatter : {
|
||||
integer : {thousandsSeparator: ",", defaultValue: '0'},
|
||||
number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
|
||||
currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
|
||||
date : {
|
||||
dayNames: [
|
||||
"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||
],
|
||||
monthNames: [
|
||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
|
||||
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
|
||||
],
|
||||
AmPm : ["am","pm","AM","PM"],
|
||||
S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
|
||||
srcformat: 'Y-m-d',
|
||||
newformat: 'n/j/Y',
|
||||
parseRe : /[#%\\\/:_;.,\t\s-]/,
|
||||
masks : {
|
||||
// see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
|
||||
// and see http://docs.jquery.com/UI/Datepicker/formatDate
|
||||
// and https://github.com/jquery/globalize#dates for alternative formats used frequently
|
||||
// one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
|
||||
// information about date, time, numbers and currency formats used in different countries
|
||||
// one should just convert the information in PHP format
|
||||
ISO8601Long:"Y-m-d H:i:s",
|
||||
ISO8601Short:"Y-m-d",
|
||||
// short date:
|
||||
// n - Numeric representation of a month, without leading zeros
|
||||
// j - Day of the month without leading zeros
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
// example: 3/1/2012 which means 1 March 2012
|
||||
ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
|
||||
// long date:
|
||||
// l - A full textual representation of the day of the week
|
||||
// F - A full textual representation of a month
|
||||
// d - Day of the month, 2 digits with leading zeros
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
|
||||
// long date with long time:
|
||||
// l - A full textual representation of the day of the week
|
||||
// F - A full textual representation of a month
|
||||
// d - Day of the month, 2 digits with leading zeros
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
// g - 12-hour format of an hour without leading zeros
|
||||
// i - Minutes with leading zeros
|
||||
// s - Seconds, with leading zeros
|
||||
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
|
||||
FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
|
||||
// month day:
|
||||
// F - A full textual representation of a month
|
||||
// d - Day of the month, 2 digits with leading zeros
|
||||
MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
|
||||
// short time (without seconds)
|
||||
// g - 12-hour format of an hour without leading zeros
|
||||
// i - Minutes with leading zeros
|
||||
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
|
||||
ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
|
||||
// long time (with seconds)
|
||||
// g - 12-hour format of an hour without leading zeros
|
||||
// i - Minutes with leading zeros
|
||||
// s - Seconds, with leading zeros
|
||||
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
|
||||
LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
|
||||
SortableDateTime: "Y-m-d\\TH:i:s",
|
||||
UniversalSortableDateTime: "Y-m-d H:i:sO",
|
||||
// month with year
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
// F - A full textual representation of a month
|
||||
YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
|
||||
},
|
||||
reformatAfterEdit : false,
|
||||
userLocalTime : false
|
||||
},
|
||||
baseLinkUrl: '',
|
||||
showAction: '',
|
||||
target: '',
|
||||
checkbox : {disabled:true},
|
||||
idName : 'id'
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,137 @@
|
||||
;(function($){
|
||||
/**
|
||||
* jqGrid Japanese Translation
|
||||
* OKADA Yoshitada okada.dev@sth.jp
|
||||
* http://trirand.com/blog/
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
**/
|
||||
$.jgrid = $.jgrid || {};
|
||||
$.extend($.jgrid,{
|
||||
extend : {
|
||||
btnSearch: '検索',
|
||||
btnHideSearch: '隠匿',
|
||||
expandTooMany: '今回は“{0}”のノードを展開しなければならない。展開ノードが多すぎるため、キャンセルが実行される。',
|
||||
pageTitle: '数字をクリックすると、ページ番号とページ数を入力して、リターンカーを押して有効になります。!',
|
||||
pageLabelA: '現在の',
|
||||
pageLabelB: 'ページは,各ページ',
|
||||
pageLabelC: '枚,全部 で{0} つ',
|
||||
},
|
||||
defaults : {
|
||||
recordtext: "View {0} - {1} of {2}",
|
||||
emptyrecords: "No records to view",
|
||||
loadtext: "\u8aad\u307f\u8fbc\u307f\u4e2d...",
|
||||
pgtext : "Page {0} of {1}"
|
||||
},
|
||||
search : {
|
||||
caption: "\u691c\u7d22...",
|
||||
Find: "\u691c\u7d22",
|
||||
Reset: "\u30ea\u30bb\u30c3\u30c8",
|
||||
odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'],
|
||||
groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ],
|
||||
matchText: " match",
|
||||
rulesText: " rules"
|
||||
},
|
||||
edit : {
|
||||
addCaption: "\u30ec\u30b3\u30fc\u30c9\u8ffd\u52a0",
|
||||
editCaption: "\u30ec\u30b3\u30fc\u30c9\u7de8\u96c6",
|
||||
bSubmit: "\u9001\u4fe1",
|
||||
bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb",
|
||||
bClose: "\u9589\u3058\u308b",
|
||||
saveData: "Data has been changed! Save changes?",
|
||||
bYes : "Yes",
|
||||
bNo : "No",
|
||||
bExit : "Cancel",
|
||||
msg: {
|
||||
required:"\u3053\u306e\u9805\u76ee\u306f\u5fc5\u9808\u3067\u3059\u3002",
|
||||
number:"\u6b63\u3057\u3044\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
|
||||
minValue:"\u6b21\u306e\u5024\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
|
||||
maxValue:"\u6b21\u306e\u5024\u4ee5\u4e0b\u3067\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
|
||||
email: "e-mail\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002",
|
||||
integer: "\u6b63\u3057\u3044\u6574\u6570\u5024\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
|
||||
date: "\u6b63\u3057\u3044\u5024\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044\u3002",
|
||||
url: "is not a valid URL. Prefix required ('http://' or 'https://')",
|
||||
nodefined : " is not defined!",
|
||||
novalue : " return value is required!",
|
||||
customarray : "Custom function should return array!",
|
||||
customfcheck : "Custom function should be present in case of custom checking!"
|
||||
}
|
||||
},
|
||||
view : {
|
||||
caption: "View Record",
|
||||
bClose: "Close"
|
||||
},
|
||||
del : {
|
||||
caption: "\u524a\u9664",
|
||||
msg: "\u9078\u629e\u3057\u305f\u30ec\u30b3\u30fc\u30c9\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f",
|
||||
bSubmit: "\u524a\u9664",
|
||||
bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb"
|
||||
},
|
||||
nav : {
|
||||
edittext: " ",
|
||||
edittitle: "\u9078\u629e\u3057\u305f\u884c\u3092\u7de8\u96c6",
|
||||
addtext:" ",
|
||||
addtitle: "\u884c\u3092\u65b0\u898f\u8ffd\u52a0",
|
||||
deltext: " ",
|
||||
deltitle: "\u9078\u629e\u3057\u305f\u884c\u3092\u524a\u9664",
|
||||
searchtext: " ",
|
||||
searchtitle: "\u30ec\u30b3\u30fc\u30c9\u691c\u7d22",
|
||||
refreshtext: "",
|
||||
refreshtitle: "\u30b0\u30ea\u30c3\u30c9\u3092\u30ea\u30ed\u30fc\u30c9",
|
||||
alertcap: "\u8b66\u544a",
|
||||
alerttext: "\u884c\u3092\u9078\u629e\u3057\u3066\u4e0b\u3055\u3044\u3002",
|
||||
viewtext: "",
|
||||
viewtitle: "View selected row"
|
||||
},
|
||||
col : {
|
||||
caption: "\u5217\u3092\u8868\u793a\uff0f\u96a0\u3059",
|
||||
bSubmit: "\u9001\u4fe1",
|
||||
bCancel: "\u30ad\u30e3\u30f3\u30bb\u30eb"
|
||||
},
|
||||
errors : {
|
||||
errcap : "\u30a8\u30e9\u30fc",
|
||||
nourl : "URL\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002",
|
||||
norecords: "\u51e6\u7406\u5bfe\u8c61\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002",
|
||||
model : "colNames\u306e\u9577\u3055\u304ccolModel\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002"
|
||||
},
|
||||
formatter : {
|
||||
integer : {thousandsSeparator: " ", defaultValue: '0'},
|
||||
number : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0.00'},
|
||||
currency : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
|
||||
date : {
|
||||
dayNames: [
|
||||
"\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f",
|
||||
"\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"
|
||||
],
|
||||
monthNames: [
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
|
||||
"1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"
|
||||
],
|
||||
AmPm : ["am","pm","AM","PM"],
|
||||
S: "\u756a\u76ee",
|
||||
srcformat: 'Y-m-d',
|
||||
newformat: 'd/m/Y',
|
||||
masks : {
|
||||
ISO8601Long:"Y-m-d H:i:s",
|
||||
ISO8601Short:"Y-m-d",
|
||||
ShortDate: "n/j/Y",
|
||||
LongDate: "l, F d, Y",
|
||||
FullDateTime: "l, F d, Y g:i:s A",
|
||||
MonthDay: "F d",
|
||||
ShortTime: "g:i A",
|
||||
LongTime: "g:i:s A",
|
||||
SortableDateTime: "Y-m-d\\TH:i:s",
|
||||
UniversalSortableDateTime: "Y-m-d H:i:sO",
|
||||
YearMonth: "F, Y"
|
||||
},
|
||||
reformatAfterEdit : false
|
||||
},
|
||||
baseLinkUrl: '',
|
||||
showAction: '',
|
||||
target: '',
|
||||
checkbox : {disabled:true},
|
||||
idName : 'id'
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,185 @@
|
||||
;(function($){
|
||||
/**
|
||||
* jqGrid Chinese Translation
|
||||
* 咖啡兔 yanhonglei@gmail.com
|
||||
* http://www.kafeitu.me
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
**/
|
||||
$.jgrid = $.jgrid || {};
|
||||
$.extend($.jgrid,{
|
||||
extend : {
|
||||
btnSearch: '查询',
|
||||
btnHideSearch: '隐藏',
|
||||
expandTooMany: '本次需要展开“{0}”个节点,因为展开节点过多,执行取消。',
|
||||
pageTitle: '点击数字,可填写页码和每页条数,按回车即可生效!',
|
||||
pageLabelA: '当前',
|
||||
pageLabelB: '页,每页',
|
||||
pageLabelC: '条,共 {0} 条',
|
||||
},
|
||||
defaults : {
|
||||
recordtext: "{0} - {1}\u3000共 {2} 条", // 共字前是全角空格
|
||||
emptyrecords: "无数据显示",
|
||||
loadtext: "正在加载...",
|
||||
pgtext : " {0} 共 {1} 页",
|
||||
pgfirst : "First Page",
|
||||
pglast : "Last Page",
|
||||
pgnext : "Next Page",
|
||||
pgprev : "Previous Page",
|
||||
pgrecs : "Records per Page",
|
||||
showhide: "Toggle Expand Collapse Grid"
|
||||
},
|
||||
search : {
|
||||
caption: "搜索...",
|
||||
Find: "查找",
|
||||
Reset: "重置",
|
||||
odata: [{ oper:'eq', text:'等于\u3000\u3000'},{ oper:'ne', text:'不等\u3000\u3000'},{ oper:'lt', text:'小于\u3000\u3000'},{ oper:'le', text:'小于等于'},{ oper:'gt', text:'大于\u3000\u3000'},{ oper:'ge', text:'大于等于'},{ oper:'bw', text:'开始于'},{ oper:'bn', text:'不开始于'},{ oper:'in', text:'属于\u3000\u3000'},{ oper:'ni', text:'不属于'},{ oper:'ew', text:'结束于'},{ oper:'en', text:'不结束于'},{ oper:'cn', text:'包含\u3000\u3000'},{ oper:'nc', text:'不包含'},{ oper:'nu', text:'不存在'},{ oper:'nn', text:'存在'}],
|
||||
groupOps: [ { op: "AND", text: "所有" }, { op: "OR", text: "任一" } ],
|
||||
operandTitle : "Click to select search operation.",
|
||||
resetTitle : "Reset Search Value"
|
||||
},
|
||||
edit : {
|
||||
addCaption: "添加记录",
|
||||
editCaption: "编辑记录",
|
||||
bSubmit: "提交",
|
||||
bCancel: "取消",
|
||||
bClose: "关闭",
|
||||
saveData: "数据已改变,是否保存?",
|
||||
bYes : "是",
|
||||
bNo : "否",
|
||||
bExit : "取消",
|
||||
msg: {
|
||||
required:"此字段必需",
|
||||
number:"请输入有效数字",
|
||||
minValue:"输值必须大于等于 ",
|
||||
maxValue:"输值必须小于等于 ",
|
||||
email: "这不是有效的e-mail地址",
|
||||
integer: "请输入有效整数",
|
||||
date: "请输入有效时间",
|
||||
url: "无效网址。前缀必须为 ('http://' 或 'https://')",
|
||||
nodefined : " 未定义!",
|
||||
novalue : " 需要返回值!",
|
||||
customarray : "自定义函数需要返回数组!",
|
||||
customfcheck : "必须有自定义函数!"
|
||||
}
|
||||
},
|
||||
view : {
|
||||
caption: "查看记录",
|
||||
bClose: "关闭"
|
||||
},
|
||||
del : {
|
||||
caption: "删除",
|
||||
msg: "删除所选记录?",
|
||||
bSubmit: "删除",
|
||||
bCancel: "取消"
|
||||
},
|
||||
nav : {
|
||||
edittext: "",
|
||||
edittitle: "编辑所选记录",
|
||||
addtext:"",
|
||||
addtitle: "添加新记录",
|
||||
deltext: "",
|
||||
deltitle: "删除所选记录",
|
||||
searchtext: "",
|
||||
searchtitle: "查找",
|
||||
refreshtext: "",
|
||||
refreshtitle: "刷新表格",
|
||||
alertcap: "注意",
|
||||
alerttext: "请选择记录",
|
||||
viewtext: "",
|
||||
viewtitle: "查看所选记录"
|
||||
},
|
||||
col : {
|
||||
caption: "选择列",
|
||||
bSubmit: "确定",
|
||||
bCancel: "取消"
|
||||
},
|
||||
errors : {
|
||||
errcap : "错误",
|
||||
nourl : "没有设置url",
|
||||
norecords: "没有要处理的记录",
|
||||
model : "colNames 和 colModel 长度不等!"
|
||||
},
|
||||
formatter : {
|
||||
integer : {thousandsSeparator: ",", defaultValue: '0'},
|
||||
number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
|
||||
currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
|
||||
date : {
|
||||
dayNames: [
|
||||
"日", "一", "二", "三", "四", "五", "六",
|
||||
"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六",
|
||||
],
|
||||
monthNames: [
|
||||
"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",
|
||||
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
|
||||
],
|
||||
AmPm : ["am","pm","上午","下午"],
|
||||
S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
|
||||
srcformat: 'Y-m-d',
|
||||
newformat: 'Y-m-d',
|
||||
parseRe : /[#%\\\/:_;.,\t\s-]/,
|
||||
masks : {
|
||||
// see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
|
||||
// and see http://docs.jquery.com/UI/Datepicker/formatDate
|
||||
// and https://github.com/jquery/globalize#dates for alternative formats used frequently
|
||||
// one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
|
||||
// information about date, time, numbers and currency formats used in different countries
|
||||
// one should just convert the information in PHP format
|
||||
ISO8601Long:"Y-m-d H:i:s",
|
||||
ISO8601Short:"Y-m-d",
|
||||
// short date:
|
||||
// n - Numeric representation of a month, without leading zeros
|
||||
// j - Day of the month without leading zeros
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
// example: 3/1/2012 which means 1 March 2012
|
||||
ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
|
||||
// long date:
|
||||
// l - A full textual representation of the day of the week
|
||||
// F - A full textual representation of a month
|
||||
// d - Day of the month, 2 digits with leading zeros
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
|
||||
// long date with long time:
|
||||
// l - A full textual representation of the day of the week
|
||||
// F - A full textual representation of a month
|
||||
// d - Day of the month, 2 digits with leading zeros
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
// g - 12-hour format of an hour without leading zeros
|
||||
// i - Minutes with leading zeros
|
||||
// s - Seconds, with leading zeros
|
||||
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
|
||||
FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
|
||||
// month day:
|
||||
// F - A full textual representation of a month
|
||||
// d - Day of the month, 2 digits with leading zeros
|
||||
MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
|
||||
// short time (without seconds)
|
||||
// g - 12-hour format of an hour without leading zeros
|
||||
// i - Minutes with leading zeros
|
||||
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
|
||||
ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
|
||||
// long time (with seconds)
|
||||
// g - 12-hour format of an hour without leading zeros
|
||||
// i - Minutes with leading zeros
|
||||
// s - Seconds, with leading zeros
|
||||
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
|
||||
LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
|
||||
SortableDateTime: "Y-m-d\\TH:i:s",
|
||||
UniversalSortableDateTime: "Y-m-d H:i:sO",
|
||||
// month with year
|
||||
// Y - A full numeric representation of a year, 4 digits
|
||||
// F - A full textual representation of a month
|
||||
YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
|
||||
},
|
||||
reformatAfterEdit : false,
|
||||
userLocalTime : false
|
||||
},
|
||||
baseLinkUrl: '',
|
||||
showAction: '',
|
||||
target: '',
|
||||
checkbox : {disabled:true},
|
||||
idName : 'id'
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,138 @@
|
||||
;(function($){
|
||||
/**
|
||||
* jqGrid Chinese (Taiwan) Translation for v4.2
|
||||
* linquize
|
||||
* https://github.com/linquize/jqGrid
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
**/
|
||||
$.jgrid = $.jgrid || {};
|
||||
$.extend($.jgrid,{
|
||||
defaults : {
|
||||
recordtext: "{0} - {1} 共 {2} 條",
|
||||
emptyrecords: "沒有記錄",
|
||||
loadtext: "載入中...",
|
||||
pgtext : " {0} 共 {1} 頁",
|
||||
pgfirst : "First Page",
|
||||
pglast : "Last Page",
|
||||
pgnext : "Next Page",
|
||||
pgprev : "Previous Page",
|
||||
pgrecs : "Records per Page",
|
||||
showhide: "Toggle Expand Collapse Grid"
|
||||
},
|
||||
search : {
|
||||
caption: "搜尋...",
|
||||
Find: "搜尋",
|
||||
Reset: "重設",
|
||||
odata: [{ oper:'eq', text:"等於 "},{ oper:'ne', text:"不等於 "},{ oper:'lt', text:"小於 "},{ oper:'le', text:"小於等於 "},{ oper:'gt', text:"大於 "},{ oper:'ge', text:"大於等於 "},{ oper:'bw', text:"開始於 "},{ oper:'bn', text:"不開始於 "},{ oper:'in', text:"在其中 "},{ oper:'ni', text:"不在其中 "},{ oper:'ew', text:"結束於 "},{ oper:'en', text:"不結束於 "},{ oper:'cn', text:"包含 "},{ oper:'nc', text:"不包含 "},{ oper:'nu', text:'is null'},{ oper:'nn', text:'is not null'}],
|
||||
groupOps: [ { op: "AND", text: "所有" }, { op: "OR", text: "任一" } ],
|
||||
operandTitle : "Click to select search operation.",
|
||||
resetTitle : "Reset Search Value"
|
||||
},
|
||||
edit : {
|
||||
addCaption: "新增記錄",
|
||||
editCaption: "編輯記錄",
|
||||
bSubmit: "提交",
|
||||
bCancel: "取消",
|
||||
bClose: "關閉",
|
||||
saveData: "資料已改變,是否儲存?",
|
||||
bYes : "是",
|
||||
bNo : "否",
|
||||
bExit : "取消",
|
||||
msg: {
|
||||
required:"此欄必要",
|
||||
number:"請輸入有效的數字",
|
||||
minValue:"值必須大於等於 ",
|
||||
maxValue:"值必須小於等於 ",
|
||||
email: "不是有效的e-mail地址",
|
||||
integer: "請輸入有效整数",
|
||||
date: "請輸入有效時間",
|
||||
url: "網址無效。前綴必須為 ('http://' 或 'https://')",
|
||||
nodefined : " 未定義!",
|
||||
novalue : " 需要傳回值!",
|
||||
customarray : "自訂函數應傳回陣列!",
|
||||
customfcheck : "自訂檢查應有自訂函數!"
|
||||
|
||||
}
|
||||
},
|
||||
view : {
|
||||
caption: "查看記錄",
|
||||
bClose: "關閉"
|
||||
},
|
||||
del : {
|
||||
caption: "刪除",
|
||||
msg: "刪除已選記錄?",
|
||||
bSubmit: "刪除",
|
||||
bCancel: "取消"
|
||||
},
|
||||
nav : {
|
||||
edittext: "",
|
||||
edittitle: "編輯已選列",
|
||||
addtext:"",
|
||||
addtitle: "新增列",
|
||||
deltext: "",
|
||||
deltitle: "刪除已選列",
|
||||
searchtext: "",
|
||||
searchtitle: "搜尋記錄",
|
||||
refreshtext: "",
|
||||
refreshtitle: "重新整理表格",
|
||||
alertcap: "警告",
|
||||
alerttext: "請選擇列",
|
||||
viewtext: "",
|
||||
viewtitle: "檢視已選列"
|
||||
},
|
||||
col : {
|
||||
caption: "選擇欄",
|
||||
bSubmit: "確定",
|
||||
bCancel: "取消"
|
||||
},
|
||||
errors : {
|
||||
errcap : "錯誤",
|
||||
nourl : "未設定URL",
|
||||
norecords: "無需要處理的記錄",
|
||||
model : "colNames 和 colModel 長度不同!"
|
||||
},
|
||||
formatter : {
|
||||
integer : {thousandsSeparator: " ", defaultValue: '0'},
|
||||
number : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, defaultValue: '0.00'},
|
||||
currency : {decimalSeparator:".", thousandsSeparator: " ", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
|
||||
date : {
|
||||
dayNames: [
|
||||
"日", "一", "二", "三", "四", "五", "六",
|
||||
"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"
|
||||
],
|
||||
monthNames: [
|
||||
"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二",
|
||||
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
|
||||
],
|
||||
AmPm : ["上午","下午","上午","下午"],
|
||||
S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
|
||||
srcformat: 'Y-m-d',
|
||||
newformat: 'm-d-Y',
|
||||
parseRe : /[#%\\\/:_;.,\t\s-]/,
|
||||
masks : {
|
||||
ISO8601Long:"Y-m-d H:i:s",
|
||||
ISO8601Short:"Y-m-d",
|
||||
ShortDate: "Y/j/n",
|
||||
LongDate: "l, F d, Y",
|
||||
FullDateTime: "l, F d, Y g:i:s A",
|
||||
MonthDay: "F d",
|
||||
ShortTime: "g:i A",
|
||||
LongTime: "g:i:s A",
|
||||
SortableDateTime: "Y-m-d\\TH:i:s",
|
||||
UniversalSortableDateTime: "Y-m-d H:i:sO",
|
||||
YearMonth: "F, Y"
|
||||
},
|
||||
reformatAfterEdit : false,
|
||||
userLocalTime : false
|
||||
},
|
||||
baseLinkUrl: '',
|
||||
showAction: '',
|
||||
target: '',
|
||||
checkbox : {disabled:true},
|
||||
idName : 'id'
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,26 @@
|
||||
(function($) {
|
||||
|
||||
$.fn.strength = $.fn.strength || {};
|
||||
if (window.lang == 'en'){
|
||||
$.extend(true, $.fn.strength.defaults, {
|
||||
strengthTipText: 'Password no less than 8 bits in length, and included, upper case letters, lower case letters, Numbers and symbols.',
|
||||
strengthButtonText: 'Click to display the password.',
|
||||
strengthButtonTextToggle: 'Click the hidden password.',
|
||||
veryweakText: 'Password is too weak!',
|
||||
weakText: 'Password is weak!',
|
||||
mediumText: 'Password is safer!',
|
||||
strongText: 'Password is very strong and safe!'
|
||||
});
|
||||
} else if (window.lang == 'ja_JP'){
|
||||
$.extend(true, $.fn.strength.defaults, {
|
||||
strengthTipText: 'パスワードは长さが8ビット以内で、その中には、上のケース、下のケース、数字、記号があります。',
|
||||
strengthButtonText: 'クリックしてパスワードを表示します。',
|
||||
strengthButtonTextToggle: '隠れパスワードをクリックします。',
|
||||
veryweakText: 'パスワードが弱すぎる!',
|
||||
weakText: '体の弱いパスワードは',
|
||||
mediumText: 'パスワードは!平和な',
|
||||
strongText: 'パスワードは丈夫で安全です!'
|
||||
});
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && typeof module.exports === 'object') {
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function (jQuery) {
|
||||
// English (Template)
|
||||
jQuery.timeago.settings.strings = {
|
||||
prefixAgo: null,
|
||||
prefixFromNow: null,
|
||||
suffixAgo: "ago",
|
||||
suffixFromNow: "from now",
|
||||
seconds: "less than a minute",
|
||||
minute: "about a minute",
|
||||
minutes: "%d minutes",
|
||||
hour: "about an hour",
|
||||
hours: "about %d hours",
|
||||
day: "a day",
|
||||
days: "%d days",
|
||||
month: "about a month",
|
||||
months: "%d months",
|
||||
year: "about a year",
|
||||
years: "%d years",
|
||||
wordSeparator: " ",
|
||||
numbers: []
|
||||
};
|
||||
}));
|
||||
@@ -0,0 +1,29 @@
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && typeof module.exports === 'object') {
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function (jQuery) {
|
||||
// Japanese
|
||||
jQuery.timeago.settings.strings = {
|
||||
prefixAgo: "",
|
||||
prefixFromNow: "今から",
|
||||
suffixAgo: "前",
|
||||
suffixFromNow: "後",
|
||||
seconds: "1 分未満",
|
||||
minute: "約 1 分",
|
||||
minutes: "%d 分",
|
||||
hour: "約 1 時間",
|
||||
hours: "約 %d 時間",
|
||||
day: "約 1 日",
|
||||
days: "約 %d 日",
|
||||
month: "約 1 ヶ月",
|
||||
months: "約 %d ヶ月",
|
||||
year: "約 1 年",
|
||||
years: "約 %d 年",
|
||||
wordSeparator: ""
|
||||
};
|
||||
}));
|
||||
@@ -0,0 +1,31 @@
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && typeof module.exports === 'object') {
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function (jQuery) {
|
||||
// Simplified Chinese
|
||||
jQuery.timeago.settings.strings = {
|
||||
prefixAgo: null,
|
||||
prefixFromNow: null,
|
||||
suffixAgo: "之前",
|
||||
suffixFromNow: "之后",
|
||||
seconds: "不到1分钟",
|
||||
minute: "大约1分钟",
|
||||
minutes: "%d分钟",
|
||||
hour: "大约1小时",
|
||||
hours: "大约%d小时",
|
||||
day: "1天",
|
||||
days: "%d天",
|
||||
month: "大约1个月",
|
||||
months: "%d月",
|
||||
year: "大约1年",
|
||||
years: "%d年",
|
||||
numbers: [],
|
||||
wordSeparator: ""
|
||||
};
|
||||
}));
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && typeof module.exports === 'object') {
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function (jQuery) {
|
||||
// Traditional Chinese, zh-tw
|
||||
jQuery.timeago.settings.strings = {
|
||||
prefixAgo: null,
|
||||
prefixFromNow: null,
|
||||
suffixAgo: "之前",
|
||||
suffixFromNow: "之後",
|
||||
seconds: "不到1分鐘",
|
||||
minute: "大約1分鐘",
|
||||
minutes: "%d分鐘",
|
||||
hour: "大約1小時",
|
||||
hours: "%d小時",
|
||||
day: "大約1天",
|
||||
days: "%d天",
|
||||
month: "大約1個月",
|
||||
months: "%d個月",
|
||||
year: "大約1年",
|
||||
years: "%d年",
|
||||
numbers: [],
|
||||
wordSeparator: ""
|
||||
};
|
||||
}));
|
||||
@@ -0,0 +1,232 @@
|
||||
/**
|
||||
* Timeago is a jQuery plugin that makes it easy to support automatically
|
||||
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
|
||||
*
|
||||
* @name timeago
|
||||
* @version 1.6.3
|
||||
* @requires jQuery v1.2.3+
|
||||
* @author Ryan McGeary
|
||||
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* For usage and examples, visit:
|
||||
* http://timeago.yarp.com/
|
||||
*
|
||||
* Copyright (c) 2008-2017, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
|
||||
*/
|
||||
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && typeof module.exports === 'object') {
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
$.timeago = function(timestamp) {
|
||||
if (timestamp instanceof Date) {
|
||||
return inWords(timestamp);
|
||||
} else if (typeof timestamp === "string") {
|
||||
return inWords($.timeago.parse(timestamp));
|
||||
} else if (typeof timestamp === "number") {
|
||||
return inWords(new Date(timestamp));
|
||||
} else {
|
||||
return inWords($.timeago.datetime(timestamp));
|
||||
}
|
||||
};
|
||||
var $t = $.timeago;
|
||||
|
||||
$.extend($.timeago, {
|
||||
settings: {
|
||||
refreshMillis: 60000,
|
||||
allowPast: true,
|
||||
allowFuture: false,
|
||||
localeTitle: false,
|
||||
cutoff: 0,
|
||||
autoDispose: true,
|
||||
strings: {
|
||||
prefixAgo: null,
|
||||
prefixFromNow: null,
|
||||
suffixAgo: "ago",
|
||||
suffixFromNow: "from now",
|
||||
inPast: 'any moment now',
|
||||
seconds: "less than a minute",
|
||||
minute: "about a minute",
|
||||
minutes: "%d minutes",
|
||||
hour: "about an hour",
|
||||
hours: "about %d hours",
|
||||
day: "a day",
|
||||
days: "%d days",
|
||||
month: "about a month",
|
||||
months: "%d months",
|
||||
year: "about a year",
|
||||
years: "%d years",
|
||||
wordSeparator: " ",
|
||||
numbers: []
|
||||
}
|
||||
},
|
||||
|
||||
inWords: function(distanceMillis) {
|
||||
if (!this.settings.allowPast && ! this.settings.allowFuture) {
|
||||
throw 'timeago allowPast and allowFuture settings can not both be set to false.';
|
||||
}
|
||||
|
||||
var $l = this.settings.strings;
|
||||
var prefix = $l.prefixAgo;
|
||||
var suffix = $l.suffixAgo;
|
||||
if (this.settings.allowFuture) {
|
||||
if (distanceMillis < 0) {
|
||||
prefix = $l.prefixFromNow;
|
||||
suffix = $l.suffixFromNow;
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.settings.allowPast && distanceMillis >= 0) {
|
||||
return this.settings.strings.inPast;
|
||||
}
|
||||
|
||||
var seconds = Math.abs(distanceMillis) / 1000;
|
||||
var minutes = seconds / 60;
|
||||
var hours = minutes / 60;
|
||||
var days = hours / 24;
|
||||
var years = days / 365;
|
||||
|
||||
function substitute(stringOrFunction, number) {
|
||||
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
|
||||
var value = ($l.numbers && $l.numbers[number]) || number;
|
||||
return string.replace(/%d/i, value);
|
||||
}
|
||||
|
||||
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
|
||||
seconds < 90 && substitute($l.minute, 1) ||
|
||||
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
|
||||
minutes < 90 && substitute($l.hour, 1) ||
|
||||
hours < 24 && substitute($l.hours, Math.round(hours)) ||
|
||||
hours < 42 && substitute($l.day, 1) ||
|
||||
days < 30 && substitute($l.days, Math.round(days)) ||
|
||||
days < 45 && substitute($l.month, 1) ||
|
||||
days < 365 && substitute($l.months, Math.round(days / 30)) ||
|
||||
years < 1.5 && substitute($l.year, 1) ||
|
||||
substitute($l.years, Math.round(years));
|
||||
|
||||
var separator = $l.wordSeparator || "";
|
||||
if ($l.wordSeparator === undefined) { separator = " "; }
|
||||
return $.trim([prefix, words, suffix].join(separator));
|
||||
},
|
||||
|
||||
parse: function(iso8601) {
|
||||
var s = $.trim(iso8601);
|
||||
s = s.replace(/\.\d+/,""); // remove milliseconds
|
||||
s = s.replace(/-/,"/").replace(/-/,"/");
|
||||
s = s.replace(/T/," ").replace(/Z/," UTC");
|
||||
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
|
||||
s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
|
||||
return new Date(s);
|
||||
},
|
||||
datetime: function(elem) {
|
||||
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
|
||||
return $t.parse(iso8601);
|
||||
},
|
||||
isTime: function(elem) {
|
||||
// jQuery's `is()` doesn't play well with HTML5 in IE
|
||||
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
|
||||
}
|
||||
});
|
||||
|
||||
// functions that can be called via $(el).timeago('action')
|
||||
// init is default when no action is given
|
||||
// functions are called with context of a single element
|
||||
var functions = {
|
||||
init: function() {
|
||||
functions.dispose.call(this);
|
||||
var refresh_el = $.proxy(refresh, this);
|
||||
refresh_el();
|
||||
var $s = $t.settings;
|
||||
if ($s.refreshMillis > 0) {
|
||||
this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
|
||||
}
|
||||
},
|
||||
update: function(timestamp) {
|
||||
var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
|
||||
$(this).data('timeago', { datetime: date });
|
||||
if ($t.settings.localeTitle) {
|
||||
$(this).attr("title", date.toLocaleString());
|
||||
}
|
||||
refresh.apply(this);
|
||||
},
|
||||
updateFromDOM: function() {
|
||||
$(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
|
||||
refresh.apply(this);
|
||||
},
|
||||
dispose: function () {
|
||||
if (this._timeagoInterval) {
|
||||
window.clearInterval(this._timeagoInterval);
|
||||
this._timeagoInterval = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.timeago = function(action, options) {
|
||||
var fn = action ? functions[action] : functions.init;
|
||||
if (!fn) {
|
||||
throw new Error("Unknown function name '"+ action +"' for timeago");
|
||||
}
|
||||
// each over objects here and call the requested function
|
||||
this.each(function() {
|
||||
fn.call(this, options);
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
function refresh() {
|
||||
var $s = $t.settings;
|
||||
|
||||
//check if it's still visible
|
||||
if ($s.autoDispose && !$.contains(document.documentElement,this)) {
|
||||
//stop if it has been removed
|
||||
$(this).timeago("dispose");
|
||||
return this;
|
||||
}
|
||||
|
||||
var data = prepareData(this);
|
||||
|
||||
if (!isNaN(data.datetime)) {
|
||||
if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
|
||||
$(this).text(inWords(data.datetime));
|
||||
} else {
|
||||
if ($(this).attr('title').length > 0) {
|
||||
$(this).text($(this).attr('title'));
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
function prepareData(element) {
|
||||
element = $(element);
|
||||
if (!element.data("timeago")) {
|
||||
element.data("timeago", { datetime: $t.datetime(element) });
|
||||
var text = $.trim(element.text());
|
||||
if ($t.settings.localeTitle) {
|
||||
element.attr("title", element.data('timeago').datetime.toLocaleString());
|
||||
} else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
|
||||
element.attr("title", text);
|
||||
}
|
||||
}
|
||||
return element.data("timeago");
|
||||
}
|
||||
|
||||
function inWords(date) {
|
||||
return $t.inWords(distance(date));
|
||||
}
|
||||
|
||||
function distance(date) {
|
||||
return (new Date().getTime() - date.getTime());
|
||||
}
|
||||
|
||||
// fix for IE6 suckage
|
||||
document.createElement("abbr");
|
||||
document.createElement("time");
|
||||
}));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function ($) {
|
||||
$.extend($.validator.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.",
|
||||
equalTo: "Please enter the same value again.",
|
||||
maxlength: $.validator.format( "Please enter no more than {0} characters." ),
|
||||
minlength: $.validator.format( "Please enter at least {0} characters." ),
|
||||
rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
|
||||
range: $.validator.format( "Please enter a value between {0} and {1}." ),
|
||||
max: $.validator.format( "Please enter a value less than or equal to {0}." ),
|
||||
min: $.validator.format( "Please enter a value greater than or equal to {0}." ),
|
||||
errorMessage: "The information you filled in is wrong.",
|
||||
userName: "Chinese characters, English letters, Numbers and underscores.",
|
||||
realName: "Can only be 2-30 Chinese characters",
|
||||
abc: "Please enter alphanumeric or underline",
|
||||
noEqualTo: "Please enter different values again",
|
||||
mobile: "Please fill in your mobile number correctly, only 13,14,15,16,17,18,19",
|
||||
simplePhone: "Please fill in your phone number correctly, and the fixed number is the area code (3-4 digits),",
|
||||
phone: "Please fill in your phone number correctly, the number (3-4 digits), and the phone number is 13,14,15,16,17,18,19.",
|
||||
zipCode: "Please fill in your zipCode correctly",
|
||||
integer: "Please enter an integer",
|
||||
ipv4: "Please enter a valid IP v4 address",
|
||||
ipv6: "Please enter a valid IP v6 address",
|
||||
qq: "Please fill in your qq number correctly",
|
||||
idcard: "Please enter the correct id number (15-18)"
|
||||
});
|
||||
}(jQuery));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function ($) {
|
||||
$.extend( $.validator.messages, {
|
||||
required: "このフィールドは必須です。",
|
||||
remote: "このフィールドを修正してください。",
|
||||
email: "有効なEメールアドレスを入力してください。",
|
||||
url: "有効なURLを入力してください。",
|
||||
date: "有効な日付を入力してください。",
|
||||
dateISO: "有効な日付(ISO)を入力してください。",
|
||||
number: "有効な数字を入力してください。",
|
||||
digits: "数字のみを入力してください。",
|
||||
equalTo: "同じ値をもう一度入力してください。",
|
||||
maxlength: $.validator.format( "{0} 文字以内で入力してください。" ),
|
||||
minlength: $.validator.format( "{0} 文字以上で入力してください。" ),
|
||||
rangelength: $.validator.format( "{0} 文字から {1} 文字までの値を入力してください。" ),
|
||||
range: $.validator.format( "{0} から {1} までの値を入力してください。" ),
|
||||
max: $.validator.format( "{0} 以下の値を入力してください。" ),
|
||||
min: $.validator.format( "{0} 以上の値を入力してください。" ),
|
||||
errorMessage: "ご記入頂いた情報に誤りがございましたので、提示に基づき修正をお願いします。",
|
||||
userName: "ご記入頂いた情報に誤りがございましたので、提示に基づき修正をお願いします。登录アカウントは中文字、英字、数字、下線のみです",
|
||||
realName: "名前は2 ~ 30字程度",
|
||||
abc: "数字または下線を入力してください",
|
||||
noEqualTo: "再度異なる値を入力して下さい",
|
||||
mobile: "お电话番号を正确にお书きください。ただ13、14、15、16、17、18、19番です",
|
||||
simplePhone: "お电话番号を正しくお书きください。固定番号(3-4位)番号(7-9位)",
|
||||
phone: "お电话番号を正确にお书きください。固定番号(3-4位)番号(7-9位)、携帯电话は13、14、15、16、17、18、19番です",
|
||||
zipCode: "郵便番号を正しく入力してください",
|
||||
integer: "整数を入力してください",
|
||||
ipv4: "有効なIP v4アドレスを入力してください",
|
||||
ipv6: "有効なIP v6アドレスを入力してください",
|
||||
qq: "あなたのQQ番号を正しく入力してください",
|
||||
idcard: "正しい住民登録番号(15 ~ 18位)を入力してください。"
|
||||
});
|
||||
}(jQuery));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function ($) {
|
||||
$.extend($.validator.messages, {
|
||||
required: "必填信息",
|
||||
remote: "请修正该信息",
|
||||
email: "请输入正确格式的电子邮件",
|
||||
url: "请输入合法的网址",
|
||||
date: "请输入合法的日期",
|
||||
dateISO: "请输入合法的日期 (YYYY-MM-DD).",
|
||||
number: "请输入合法的数值",
|
||||
digits: "请输入一个正整数",
|
||||
equalTo: "请再次输入相同的值",
|
||||
maxlength: $.validator.format("最多可以输入 {0} 个字符"),
|
||||
minlength: $.validator.format("最少要输入 {0} 个字符"),
|
||||
rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
|
||||
range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
|
||||
max: $.validator.format("请输入不大于 {0} 的数值"),
|
||||
min: $.validator.format("请输入不小于 {0} 的数值"),
|
||||
errorMessage: "您填写的信息有误,请根据提示修正。",
|
||||
userName: "登录账号只能包括中文字、英文字母、数字和下划线",
|
||||
realName: "姓名只能为2-30个汉字",
|
||||
abc: "请输入字母数字或下划线",
|
||||
noEqualTo: "请再次输入不同的值",
|
||||
mobile: "请正确填写您的手机号码,只能是13,14,15,16,17,18,19号段",
|
||||
simplePhone: "请正确填写您的电话号码,固话为区号(3-4位)号码(7-9位)",
|
||||
phone: "请正确填写您的电话号码,固话为区号(3-4位)号码(7-9位),手机为13,14,15,16,17,18,19号段",
|
||||
zipCode: "请正确填写您的邮政编码",
|
||||
integer: "请输入一个整数",
|
||||
ipv4: "请输入一个有效的 IP v4 地址",
|
||||
ipv6: "请输入一个有效的 IP v6 地址",
|
||||
qq: "请正确填写您的QQ号码",
|
||||
idcard: "请输入正确的身份证号码(15-18位)"
|
||||
});
|
||||
}(jQuery));
|
||||
@@ -0,0 +1,33 @@
|
||||
(function ($) {
|
||||
$.extend( $.validator.messages, {
|
||||
required: "必須填寫",
|
||||
remote: "請修正此欄位",
|
||||
email: "請輸入有效的電子郵件",
|
||||
url: "請輸入有效的網址",
|
||||
date: "請輸入有效的日期",
|
||||
dateISO: "請輸入有效的日期 (YYYY-MM-DD)",
|
||||
number: "請輸入正確的數值",
|
||||
digits: "只可輸入數字",
|
||||
equalTo: "請重複輸入一次",
|
||||
maxlength: $.validator.format( "最多 {0} 個字" ),
|
||||
minlength: $.validator.format( "最少 {0} 個字" ),
|
||||
rangelength: $.validator.format( "請輸入長度為 {0} 至 {1} 之間的字串" ),
|
||||
range: $.validator.format( "請輸入 {0} 至 {1} 之間的數值" ),
|
||||
max: $.validator.format( "請輸入不大於 {0} 的數值" ),
|
||||
min: $.validator.format( "請輸入不小於 {0} 的數值" ),
|
||||
errorMessage: "您填寫的信息有誤,請根據提示修正。",
|
||||
userName: "登錄賬號只能包括中文字、英文字母、數字和下劃線",
|
||||
realName: "姓名只能爲2-30個漢字",
|
||||
abc: "請輸入字母數字或下劃線",
|
||||
noEqualTo: "請再次輸入不同的值",
|
||||
mobile: "請正確填寫您的手機號碼,只能是13,14,15,16,17,18,19號段",
|
||||
simplePhone: "請正確填寫您的電話號碼,固話爲區號(3-4位)號碼(7-9位)",
|
||||
phone: "請正確填寫您的電話號碼,固話爲區號(3-4位)號碼(7-9位),手機爲13,14,15,16,17,18,19號段",
|
||||
zipCode: "請正確填寫您的郵政編碼",
|
||||
integer: "請輸入一個整數",
|
||||
ipv4: "請輸入一個有效的 IP v4 地址",
|
||||
ipv6: "請輸入一個有效的 IP v6 地址",
|
||||
qq: "請正確填寫您的QQ號碼",
|
||||
idcard: "請輸入正確的身份證號碼(15-18位)"
|
||||
});
|
||||
}(jQuery));
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
@@ -0,0 +1,669 @@
|
||||
/**
|
||||
* Created with JetBrains PhpStorm.
|
||||
* User: taoqili
|
||||
* Date: 12-6-12
|
||||
* Time: 下午5:02
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
UE.I18N['ja_JP'] = {
|
||||
'labelMap':{
|
||||
'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',
|
||||
'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',
|
||||
'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',
|
||||
'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',
|
||||
'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',
|
||||
'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',
|
||||
'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',
|
||||
'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',
|
||||
'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言',
|
||||
'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',
|
||||
'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',
|
||||
'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',
|
||||
'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',
|
||||
'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',
|
||||
'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',
|
||||
'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',
|
||||
'lineheight':'行间距','edittip' :'编辑提示','customstyle':'扩展样式', 'autotypeset':'自动排版',
|
||||
'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',
|
||||
'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'
|
||||
},
|
||||
'insertorderedlist':{
|
||||
'num':'1,2,3...',
|
||||
'num1':'1),2),3)...',
|
||||
'num2':'(1),(2),(3)...',
|
||||
'cn':'一,二,三....',
|
||||
'cn1':'一),二),三)....',
|
||||
'cn2':'(一),(二),(三)....',
|
||||
'decimal':'1,2,3...',
|
||||
'lower-alpha':'a,b,c...',
|
||||
'lower-roman':'i,ii,iii...',
|
||||
'upper-alpha':'A,B,C...',
|
||||
'upper-roman':'I,II,III...'
|
||||
},
|
||||
'insertunorderedlist':{
|
||||
'circle':'○ 大圆圈',
|
||||
'disc':'● 小黑点',
|
||||
'square':'■ 小方块 ',
|
||||
'dash' :'— 破折号',
|
||||
'dot':' 。 小圆圈'
|
||||
},
|
||||
'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},
|
||||
'fontfamily':{
|
||||
'songti':'宋体',
|
||||
'kaiti':'楷体',
|
||||
'heiti':'黑体',
|
||||
'lishu':'隶书',
|
||||
'yahei':'微软雅黑',
|
||||
'andaleMono':'andale mono',
|
||||
'arial': 'arial',
|
||||
'arialBlack':'arial black',
|
||||
'comicSansMs':'comic sans ms',
|
||||
'impact':'impact',
|
||||
'timesNewRoman':'times new roman'
|
||||
},
|
||||
'customstyle':{
|
||||
'tc':'标题居中',
|
||||
'tl':'标题居左',
|
||||
'im':'强调',
|
||||
'hi':'明显强调'
|
||||
},
|
||||
'autoupload': {
|
||||
'exceedSizeError': '文件大小超出限制',
|
||||
'exceedTypeError': '文件格式不允许',
|
||||
'jsonEncodeError': '服务器返回格式错误',
|
||||
'loading':"正在上传...",
|
||||
'loadError':"上传错误",
|
||||
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
|
||||
},
|
||||
'simpleupload':{
|
||||
'exceedSizeError': '文件大小超出限制',
|
||||
'exceedTypeError': '文件格式不允许',
|
||||
'jsonEncodeError': '服务器返回格式错误',
|
||||
'loading':"正在上传...",
|
||||
'loadError':"上传错误",
|
||||
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
|
||||
},
|
||||
'elementPathTip':"元素路径",
|
||||
'wordCountTip':"字数统计",
|
||||
'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',
|
||||
'wordOverFlowMsg':'<span style="color:red;">字数超出最大允许值,服务器可能拒绝保存!</span>',
|
||||
'ok':"确认",
|
||||
'cancel':"取消",
|
||||
'closeDialog':"关闭对话框",
|
||||
'tableDrag':"表格拖动必须引入uiUtils.js文件!",
|
||||
'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!",
|
||||
'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!',
|
||||
'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!',
|
||||
'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!',
|
||||
'snapScreen_plugin':{
|
||||
'browserMsg':"仅支持IE浏览器!",
|
||||
'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。",
|
||||
'uploadErrorMsg':"截图上传失败,请检查服务器端环境! "
|
||||
},
|
||||
'insertcode':{
|
||||
'as3':'ActionScript 3',
|
||||
'bash':'Bash/Shell',
|
||||
'cpp':'C/C++',
|
||||
'css':'CSS',
|
||||
'cf':'ColdFusion',
|
||||
'c#':'C#',
|
||||
'delphi':'Delphi',
|
||||
'diff':'Diff',
|
||||
'erlang':'Erlang',
|
||||
'groovy':'Groovy',
|
||||
'html':'HTML',
|
||||
'java':'Java',
|
||||
'jfx':'JavaFX',
|
||||
'js':'JavaScript',
|
||||
'pl':'Perl',
|
||||
'php':'PHP',
|
||||
'plain':'Plain Text',
|
||||
'ps':'PowerShell',
|
||||
'python':'Python',
|
||||
'ruby':'Ruby',
|
||||
'scala':'Scala',
|
||||
'sql':'SQL',
|
||||
'vb':'Visual Basic',
|
||||
'xml':'XML'
|
||||
},
|
||||
'confirmClear':"确定清空当前文档么?",
|
||||
'contextMenu':{
|
||||
'delete':"删除",
|
||||
'selectall':"全选",
|
||||
'deletecode':"删除代码",
|
||||
'cleardoc':"清空文档",
|
||||
'confirmclear':"确定清空当前文档么?",
|
||||
'unlink':"删除超链接",
|
||||
'paragraph':"段落格式",
|
||||
'edittable':"表格属性",
|
||||
'aligntd':"单元格对齐方式",
|
||||
'aligntable':'表格对齐方式',
|
||||
'tableleft':'左浮动',
|
||||
'tablecenter':'居中显示',
|
||||
'tableright':'右浮动',
|
||||
'edittd':"单元格属性",
|
||||
'setbordervisible':'设置表格边线可见',
|
||||
'justifyleft':'左对齐',
|
||||
'justifyright':'右对齐',
|
||||
'justifycenter':'居中对齐',
|
||||
'justifyjustify':'两端对齐',
|
||||
'table':"表格",
|
||||
'inserttable':'插入表格',
|
||||
'deletetable':"删除表格",
|
||||
'insertparagraphbefore':"前插入段落",
|
||||
'insertparagraphafter':'后插入段落',
|
||||
'deleterow':"删除当前行",
|
||||
'deletecol':"删除当前列",
|
||||
'insertrow':"前插入行",
|
||||
'insertcol':"左插入列",
|
||||
'insertrownext':'后插入行',
|
||||
'insertcolnext':'右插入列',
|
||||
'insertcaption':'插入表格名称',
|
||||
'deletecaption':'删除表格名称',
|
||||
'inserttitle':'插入表格标题行',
|
||||
'deletetitle':'删除表格标题行',
|
||||
'inserttitlecol':'插入表格标题列',
|
||||
'deletetitlecol':'删除表格标题列',
|
||||
'averageDiseRow':'平均分布各行',
|
||||
'averageDisCol':'平均分布各列',
|
||||
'mergeright':"向右合并",
|
||||
'mergeleft':"向左合并",
|
||||
'mergedown':"向下合并",
|
||||
'mergecells':"合并单元格",
|
||||
'splittocells':"完全拆分单元格",
|
||||
'splittocols':"拆分成列",
|
||||
'splittorows':"拆分成行",
|
||||
'tablesort':'表格排序',
|
||||
'enablesort':'设置表格可排序',
|
||||
'disablesort':'取消表格可排序',
|
||||
'reversecurrent':'逆序当前',
|
||||
'orderbyasc':'按ASCII字符升序',
|
||||
'reversebyasc':'按ASCII字符降序',
|
||||
'orderbynum':'按数值大小升序',
|
||||
'reversebynum':'按数值大小降序',
|
||||
'borderbk':'边框底纹',
|
||||
'setcolor':'表格隔行变色',
|
||||
'unsetcolor':'取消表格隔行变色',
|
||||
'setbackground':'选区背景隔行',
|
||||
'unsetbackground':'取消选区背景',
|
||||
'redandblue':'红蓝相间',
|
||||
'threecolorgradient':'三色渐变',
|
||||
'copy':"复制(Ctrl + c)",
|
||||
'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
|
||||
'paste':"粘贴(Ctrl + v)",
|
||||
'pastemsg': "浏览器不支持,请使用 'Ctrl + v'"
|
||||
},
|
||||
'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
|
||||
'pastemsg': "浏览器不支持,请使用 'Ctrl + v'",
|
||||
'anthorMsg':"链接",
|
||||
'clearColor':'清空颜色',
|
||||
'standardColor':'标准颜色',
|
||||
'themeColor':'主题颜色',
|
||||
'property':'属性',
|
||||
'default':'默认',
|
||||
'modify':'修改',
|
||||
'justifyleft':'左对齐',
|
||||
'justifyright':'右对齐',
|
||||
'justifycenter':'居中',
|
||||
'justify':'默认',
|
||||
'clear':'清除',
|
||||
'anchorMsg':'锚点',
|
||||
'delete':'删除',
|
||||
'clickToUpload':"点击上传",
|
||||
'unset':'尚未设置语言文件',
|
||||
't_row':'行',
|
||||
't_col':'列',
|
||||
'more':'更多',
|
||||
'pasteOpt':'粘贴选项',
|
||||
'pasteSourceFormat':"保留源格式",
|
||||
'tagFormat':'只保留标签',
|
||||
'pasteTextFormat':'只保留文本',
|
||||
'autoTypeSet':{
|
||||
'mergeLine':"合并空行",
|
||||
'delLine':"清除空行",
|
||||
'removeFormat':"清除格式",
|
||||
'indent':"首行缩进",
|
||||
'alignment':"对齐方式",
|
||||
'imageFloat':"图片浮动",
|
||||
'removeFontsize':"清除字号",
|
||||
'removeFontFamily':"清除字体",
|
||||
'removeHtml':"清除冗余HTML代码",
|
||||
'pasteFilter':"粘贴过滤",
|
||||
'run':"执行",
|
||||
'symbol':'符号转换',
|
||||
'bdc2sb':'全角转半角',
|
||||
'tobdc':'半角转全角'
|
||||
},
|
||||
|
||||
'background':{
|
||||
'static':{
|
||||
'lang_background_normal':'背景设置',
|
||||
'lang_background_local':'在线图片',
|
||||
'lang_background_set':'选项',
|
||||
'lang_background_none':'无背景色',
|
||||
'lang_background_colored':'有背景色',
|
||||
'lang_background_color':'颜色设置',
|
||||
'lang_background_netimg':'网络图片',
|
||||
'lang_background_align':'对齐方式',
|
||||
'lang_background_position':'精确定位',
|
||||
'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]}
|
||||
|
||||
},
|
||||
'noUploadImage':"当前未上传过任何图片!",
|
||||
'toggleSelect':"单击可切换选中状态\n原图尺寸: "
|
||||
},
|
||||
//===============dialog i18N=======================
|
||||
'insertimage':{
|
||||
'static':{
|
||||
'lang_tab_remote':"插入图片", //节点
|
||||
'lang_tab_upload':"本地上传",
|
||||
'lang_tab_online':"在线管理",
|
||||
'lang_tab_search':"图片搜索",
|
||||
'lang_input_url':"地 址:",
|
||||
'lang_input_size':"大 小:",
|
||||
'lang_input_width':"宽度",
|
||||
'lang_input_height':"高度",
|
||||
'lang_input_border':"边 框:",
|
||||
'lang_input_vhspace':"边 距:",
|
||||
'lang_input_title':"描 述:",
|
||||
'lang_input_align':'图片浮动方式:',
|
||||
'lang_imgLoading':" 图片加载中……",
|
||||
'lang_start_upload':"开始上传",
|
||||
'lock':{'title':"锁定宽高比例"}, //属性
|
||||
'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option
|
||||
'searchTxt':{'value':"请输入搜索关键词"},
|
||||
'searchBtn':{'value':"百度一下"},
|
||||
'searchReset':{'value':"清空搜索"},
|
||||
'noneAlign':{'title':'无浮动'},
|
||||
'leftAlign':{'title':'左浮动'},
|
||||
'rightAlign':{'title':'右浮动'},
|
||||
'centerAlign':{'title':'居中独占一行'}
|
||||
},
|
||||
'uploadSelectFile':'点击选择图片',
|
||||
'uploadAddFile':'继续添加',
|
||||
'uploadStart':'开始上传',
|
||||
'uploadPause':'暂停上传',
|
||||
'uploadContinue':'继续上传',
|
||||
'uploadRetry':'重试上传',
|
||||
'uploadDelete':'删除',
|
||||
'uploadTurnLeft':'向左旋转',
|
||||
'uploadTurnRight':'向右旋转',
|
||||
'uploadPreview':'预览中',
|
||||
'uploadNoPreview':'不能预览',
|
||||
'updateStatusReady': '选中_张图片,共_KB。',
|
||||
'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败',
|
||||
'updateStatusFinish': '共_张(_KB),_张上传成功',
|
||||
'updateStatusError': ',_张上传失败。',
|
||||
'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
|
||||
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
|
||||
'errorExceedSize':'文件大小超出',
|
||||
'errorFileType':'文件格式不允许',
|
||||
'errorInterrupt':'文件传输中断',
|
||||
'errorUploadRetry':'上传失败,请重试',
|
||||
'errorHttp':'http请求错误',
|
||||
'errorServerUpload':'服务器返回出错',
|
||||
'remoteLockError':"宽高不正确,不能所定比例",
|
||||
'numError':"请输入正确的长度或者宽度值!例如:123,400",
|
||||
'imageUrlError':"不允许的图片格式或者图片域!",
|
||||
'imageLoadError':"图片加载失败!请检查链接地址或网络状态!",
|
||||
'searchRemind':"请输入搜索关键词",
|
||||
'searchLoading':"图片加载中,请稍后……",
|
||||
'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!"
|
||||
},
|
||||
'attachment':{
|
||||
'static':{
|
||||
'lang_tab_upload': '上传附件',
|
||||
'lang_tab_online': '在线附件',
|
||||
'lang_start_upload':"开始上传",
|
||||
'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件"
|
||||
},
|
||||
'uploadSelectFile':'点击选择文件',
|
||||
'uploadAddFile':'继续添加',
|
||||
'uploadStart':'开始上传',
|
||||
'uploadPause':'暂停上传',
|
||||
'uploadContinue':'继续上传',
|
||||
'uploadRetry':'重试上传',
|
||||
'uploadDelete':'删除',
|
||||
'uploadTurnLeft':'向左旋转',
|
||||
'uploadTurnRight':'向右旋转',
|
||||
'uploadPreview':'预览中',
|
||||
'updateStatusReady': '选中_个文件,共_KB。',
|
||||
'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败',
|
||||
'updateStatusFinish': '共_个(_KB),_个上传成功',
|
||||
'updateStatusError': ',_张上传失败。',
|
||||
'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
|
||||
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
|
||||
'errorExceedSize':'文件大小超出',
|
||||
'errorFileType':'文件格式不允许',
|
||||
'errorInterrupt':'文件传输中断',
|
||||
'errorUploadRetry':'上传失败,请重试',
|
||||
'errorHttp':'http请求错误',
|
||||
'errorServerUpload':'服务器返回出错'
|
||||
},
|
||||
'insertvideo':{
|
||||
'static':{
|
||||
'lang_tab_insertV':"插入视频",
|
||||
'lang_tab_searchV':"搜索视频",
|
||||
'lang_tab_uploadV':"上传视频",
|
||||
'lang_video_url':"视频网址",
|
||||
'lang_video_size':"视频尺寸",
|
||||
'lang_videoW':"宽度",
|
||||
'lang_videoH':"高度",
|
||||
'lang_alignment':"对齐方式",
|
||||
'videoSearchTxt':{'value':"请输入搜索关键字!"},
|
||||
'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]},
|
||||
'videoSearchBtn':{'value':"百度一下"},
|
||||
'videoSearchReset':{'value':"清空结果"},
|
||||
|
||||
'lang_input_fileStatus':' 当前未上传文件',
|
||||
'startUpload':{'style':"background:url(upload.png) no-repeat;"},
|
||||
|
||||
'lang_upload_size':"视频尺寸",
|
||||
'lang_upload_width':"宽度",
|
||||
'lang_upload_height':"高度",
|
||||
'lang_upload_alignment':"对齐方式",
|
||||
'lang_format_advice':"建议使用mp4格式."
|
||||
|
||||
},
|
||||
'numError':"请输入正确的数值,如123,400",
|
||||
'floatLeft':"左浮动",
|
||||
'floatRight':"右浮动",
|
||||
'"default"':"默认",
|
||||
'block':"独占一行",
|
||||
'urlError':"输入的视频地址有误,请检查后再试!",
|
||||
'loading':" 视频加载中,请等待……",
|
||||
'clickToSelect':"点击选中",
|
||||
'goToSource':'访问源视频',
|
||||
'noVideo':" 抱歉,找不到对应的视频,请重试!",
|
||||
|
||||
'browseFiles':'浏览文件',
|
||||
'uploadSuccess':'上传成功!',
|
||||
'delSuccessFile':'从成功队列中移除',
|
||||
'delFailSaveFile':'移除保存失败文件',
|
||||
'statusPrompt':' 个文件已上传! ',
|
||||
'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!',
|
||||
'flashLoadingError':'Flash加载失败!请检查路径或网络状态',
|
||||
'fileUploadReady':'等待上传……',
|
||||
'delUploadQueue':'从上传队列中移除',
|
||||
'limitPrompt1':'单次不能选择超过',
|
||||
'limitPrompt2':'个文件!请重新选择!',
|
||||
'delFailFile':'移除失败文件',
|
||||
'fileSizeLimit':'文件大小超出限制!',
|
||||
'emptyFile':'空文件无法上传!',
|
||||
'fileTypeError':'文件类型不允许!',
|
||||
'unknownError':'未知错误!',
|
||||
'fileUploading':'上传中,请等待……',
|
||||
'cancelUpload':'取消上传',
|
||||
'netError':'网络错误',
|
||||
'failUpload':'上传失败!',
|
||||
'serverIOError':'服务器IO错误!',
|
||||
'noAuthority':'无权限!',
|
||||
'fileNumLimit':'上传个数限制',
|
||||
'failCheck':'验证失败,本次上传被跳过!',
|
||||
'fileCanceling':'取消中,请等待……',
|
||||
'stopUploading':'上传已停止……',
|
||||
|
||||
'uploadSelectFile':'点击选择文件',
|
||||
'uploadAddFile':'继续添加',
|
||||
'uploadStart':'开始上传',
|
||||
'uploadPause':'暂停上传',
|
||||
'uploadContinue':'继续上传',
|
||||
'uploadRetry':'重试上传',
|
||||
'uploadDelete':'删除',
|
||||
'uploadTurnLeft':'向左旋转',
|
||||
'uploadTurnRight':'向右旋转',
|
||||
'uploadPreview':'预览中',
|
||||
'updateStatusReady': '选中_个文件,共_KB。',
|
||||
'updateStatusConfirm': '成功上传_个,_个失败',
|
||||
'updateStatusFinish': '共_个(_KB),_个成功上传',
|
||||
'updateStatusError': ',_张上传失败。',
|
||||
'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
|
||||
'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
|
||||
'errorExceedSize':'文件大小超出',
|
||||
'errorFileType':'文件格式不允许',
|
||||
'errorInterrupt':'文件传输中断',
|
||||
'errorUploadRetry':'上传失败,请重试',
|
||||
'errorHttp':'http请求错误',
|
||||
'errorServerUpload':'服务器返回出错'
|
||||
},
|
||||
'webapp':{
|
||||
'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!",
|
||||
'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ",
|
||||
'applyFor':"点此申请",
|
||||
'anthorApi':"百度API"
|
||||
},
|
||||
'template':{
|
||||
'static':{
|
||||
'lang_template_bkcolor':'背景颜色',
|
||||
'lang_template_clear' : '保留原有内容',
|
||||
'lang_template_select' : '选择模板'
|
||||
},
|
||||
'blank':"空白文档",
|
||||
'blog':"博客文章",
|
||||
'resume':"个人简历",
|
||||
'richText':"图文混排",
|
||||
'sciPapers':"科技论文"
|
||||
|
||||
|
||||
},
|
||||
'scrawl':{
|
||||
'static':{
|
||||
'lang_input_previousStep':"上一步",
|
||||
'lang_input_nextsStep':"下一步",
|
||||
'lang_input_clear':'清空',
|
||||
'lang_input_addPic':'添加背景',
|
||||
'lang_input_ScalePic':'缩放背景',
|
||||
'lang_input_removePic':'删除背景',
|
||||
'J_imgTxt':{title:'添加背景图片'}
|
||||
},
|
||||
'noScarwl':"尚未作画,白纸一张~",
|
||||
'scrawlUpLoading':"涂鸦上传中,别急哦~",
|
||||
'continueBtn':"继续",
|
||||
'imageError':"糟糕,图片读取失败了!",
|
||||
'backgroundUploading':'背景图片上传中,别急哦~'
|
||||
},
|
||||
'music':{
|
||||
'static':{
|
||||
'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!",
|
||||
'J_searchBtn':{value:'搜索歌曲'}
|
||||
},
|
||||
'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。',
|
||||
'chapter':'歌曲',
|
||||
'singer':'歌手',
|
||||
'special':'专辑',
|
||||
'listenTest':'试听'
|
||||
},
|
||||
'anchor':{
|
||||
'static':{
|
||||
'lang_input_anchorName':'锚点名字:'
|
||||
}
|
||||
},
|
||||
'charts':{
|
||||
'static':{
|
||||
'lang_data_source':'数据源:',
|
||||
'lang_chart_format': '图表格式:',
|
||||
'lang_data_align': '数据对齐方式',
|
||||
'lang_chart_align_same': '数据源与图表X轴Y轴一致',
|
||||
'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',
|
||||
'lang_chart_title': '图表标题',
|
||||
'lang_chart_main_title': '主标题:',
|
||||
'lang_chart_sub_title': '子标题:',
|
||||
'lang_chart_x_title': 'X轴标题:',
|
||||
'lang_chart_y_title': 'Y轴标题:',
|
||||
'lang_chart_tip': '提示文字',
|
||||
'lang_cahrt_tip_prefix': '提示文字前缀:',
|
||||
'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
|
||||
'lang_chart_data_unit': '数据单位',
|
||||
'lang_chart_data_unit_title': '单位:',
|
||||
'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
|
||||
'lang_chart_type': '图表类型:',
|
||||
'lang_prev_btn': '上一个',
|
||||
'lang_next_btn': '下一个'
|
||||
}
|
||||
},
|
||||
'emotion':{
|
||||
'static':{
|
||||
'lang_input_choice':'精选',
|
||||
'lang_input_Tuzki':'兔斯基',
|
||||
'lang_input_BOBO':'BOBO',
|
||||
'lang_input_lvdouwa':'绿豆蛙',
|
||||
'lang_input_babyCat':'baby猫',
|
||||
'lang_input_bubble':'泡泡',
|
||||
'lang_input_youa':'有啊'
|
||||
}
|
||||
},
|
||||
'gmap':{
|
||||
'static':{
|
||||
'lang_input_address':'地址',
|
||||
'lang_input_search':'搜索',
|
||||
'address':{value:"北京"}
|
||||
},
|
||||
searchError:'无法定位到该地址!'
|
||||
},
|
||||
'help':{
|
||||
'static':{
|
||||
'lang_input_about':'关于UEditor',
|
||||
'lang_input_shortcuts':'快捷键',
|
||||
'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。',
|
||||
'lang_Txt_shortcuts':'快捷键',
|
||||
'lang_Txt_func':'功能',
|
||||
'lang_Txt_bold':'给选中字设置为加粗',
|
||||
'lang_Txt_copy':'复制选中内容',
|
||||
'lang_Txt_cut':'剪切选中内容',
|
||||
'lang_Txt_Paste':'粘贴',
|
||||
'lang_Txt_undo':'重新执行上次操作',
|
||||
'lang_Txt_redo':'撤销上一次操作',
|
||||
'lang_Txt_italic':'给选中字设置为斜体',
|
||||
'lang_Txt_underline':'给选中字加下划线',
|
||||
'lang_Txt_selectAll':'全部选中',
|
||||
'lang_Txt_visualEnter':'软回车',
|
||||
'lang_Txt_fullscreen':'全屏'
|
||||
}
|
||||
},
|
||||
'insertframe':{
|
||||
'static':{
|
||||
'lang_input_address':'地址:',
|
||||
'lang_input_width':'宽度:',
|
||||
'lang_input_height':'高度:',
|
||||
'lang_input_isScroll':'允许滚动条:',
|
||||
'lang_input_frameborder':'显示框架边框:',
|
||||
'lang_input_alignMode':'对齐方式:',
|
||||
'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]}
|
||||
},
|
||||
'enterAddress':'请输入地址!'
|
||||
},
|
||||
'link':{
|
||||
'static':{
|
||||
'lang_input_text':'文本内容:',
|
||||
'lang_input_url':'链接地址:',
|
||||
'lang_input_title':'标题:',
|
||||
'lang_input_target':'是否在新窗口打开:'
|
||||
},
|
||||
'validLink':'只支持选中一个链接时生效',
|
||||
'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀'
|
||||
},
|
||||
'map':{
|
||||
'static':{
|
||||
lang_city:"城市",
|
||||
lang_address:"地址",
|
||||
city:{value:"北京"},
|
||||
lang_search:"搜索",
|
||||
lang_dynamicmap:"插入动态地图"
|
||||
},
|
||||
cityMsg:"请选择城市",
|
||||
errorMsg:"抱歉,找不到该位置!"
|
||||
},
|
||||
'searchreplace':{
|
||||
'static':{
|
||||
lang_tab_search:"查找",
|
||||
lang_tab_replace:"替换",
|
||||
lang_search1:"查找",
|
||||
lang_search2:"查找",
|
||||
lang_replace:"替换",
|
||||
lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
|
||||
lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
|
||||
lang_case_sensitive1:"区分大小写",
|
||||
lang_case_sensitive2:"区分大小写",
|
||||
nextFindBtn:{value:"下一个"},
|
||||
preFindBtn:{value:"上一个"},
|
||||
nextReplaceBtn:{value:"下一个"},
|
||||
preReplaceBtn:{value:"上一个"},
|
||||
repalceBtn:{value:"替换"},
|
||||
repalceAllBtn:{value:"全部替换"}
|
||||
},
|
||||
getEnd:"已经搜索到文章末尾!",
|
||||
getStart:"已经搜索到文章头部",
|
||||
countMsg:"总共替换了{#count}处!"
|
||||
},
|
||||
'snapscreen':{
|
||||
'static':{
|
||||
lang_showMsg:"截图功能需要首先安装UEditor截图插件! ",
|
||||
lang_download:"点此下载",
|
||||
lang_step1:"第一步,下载UEditor截图插件并运行安装。",
|
||||
lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!"
|
||||
}
|
||||
},
|
||||
'spechars':{
|
||||
'static':{},
|
||||
tsfh:"特殊字符",
|
||||
lmsz:"罗马字符",
|
||||
szfh:"数学字符",
|
||||
rwfh:"日文字符",
|
||||
xlzm:"希腊字母",
|
||||
ewzm:"俄文字符",
|
||||
pyzm:"拼音字母",
|
||||
yyyb:"英语音标",
|
||||
zyzf:"其他"
|
||||
},
|
||||
'edittable':{
|
||||
'static':{
|
||||
'lang_tableStyle':'表格样式',
|
||||
'lang_insertCaption':'添加表格名称行',
|
||||
'lang_insertTitle':'添加表格标题行',
|
||||
'lang_insertTitleCol':'添加表格标题列',
|
||||
'lang_orderbycontent':"使表格内容可排序",
|
||||
'lang_tableSize':'自动调整表格尺寸',
|
||||
'lang_autoSizeContent':'按表格文字自适应',
|
||||
'lang_autoSizePage':'按页面宽度自适应',
|
||||
'lang_example':'示例',
|
||||
'lang_borderStyle':'表格边框',
|
||||
'lang_color':'颜色:'
|
||||
},
|
||||
captionName:'表格名称',
|
||||
titleName:'标题',
|
||||
cellsName:'内容',
|
||||
errorMsg:'有合并单元格,不可排序'
|
||||
},
|
||||
'edittip':{
|
||||
'static':{
|
||||
lang_delRow:'删除整行',
|
||||
lang_delCol:'删除整列'
|
||||
}
|
||||
},
|
||||
'edittd':{
|
||||
'static':{
|
||||
lang_tdBkColor:'背景颜色:'
|
||||
}
|
||||
},
|
||||
'formula':{
|
||||
'static':{
|
||||
}
|
||||
},
|
||||
'wordimage':{
|
||||
'static':{
|
||||
lang_resave:"转存步骤",
|
||||
uploadBtn:{src:"upload.png",alt:"上传"},
|
||||
clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
|
||||
lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。"
|
||||
},
|
||||
'fileType':"图片",
|
||||
'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!",
|
||||
'netError':"网络连接错误,请重试!",
|
||||
'copySuccess':"图片地址已经复制!",
|
||||
'flashI18n':{} //留空默认中文
|
||||
},
|
||||
'autosave': {
|
||||
'saving':'保存中...',
|
||||
'success':'本地保存成功'
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
(function($) {
|
||||
|
||||
window.TabPanel = window.TabPanel || {};
|
||||
if (window.lang == 'en'){
|
||||
TabPanel.i18n = $.extend({}, TabPanel.i18n, {
|
||||
closeTab: 'Close',
|
||||
refreshTab: 'Refresh',
|
||||
closeOther: 'Close Other',
|
||||
closeLeft: 'Close Left',
|
||||
closeRight: 'Close Right'
|
||||
});
|
||||
} else if (window.lang == 'ja_JP'){
|
||||
TabPanel.i18n = $.extend({}, TabPanel.i18n, {
|
||||
closeTab: '閉じる',
|
||||
refreshTab: '更新',
|
||||
closeOther: '他を閉じる',
|
||||
closeLeft: '左側を閉じる',
|
||||
closeRight: '右側を閉じる'
|
||||
});
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,60 @@
|
||||
(function($) {
|
||||
$.fn.webuploader.defaults.i18n = {
|
||||
|
||||
'安装失败!': 'Installation failed!',
|
||||
'安装已成功,请刷新!': 'Installation successful, please refresh!',
|
||||
'文件上传组件不支持您的浏览器,请使用高版本浏览器!': 'Does not support your browser, please use the high version browser!',
|
||||
|
||||
'点击选择文件': 'Select files',
|
||||
'点击选择图片': 'Select images',
|
||||
'点击选择视频': 'Select videos',
|
||||
'继续添加': 'Add files',
|
||||
|
||||
'暂停上传': 'Pause upload',
|
||||
'继续上传': 'Continue upload',
|
||||
'开始上传': 'Start upload',
|
||||
'上传成功': 'Upload success',
|
||||
|
||||
'张图片': ' images',
|
||||
'个文件': ' files',
|
||||
|
||||
'上传失败': ' Failure',
|
||||
'重新上传': ' Retry ',
|
||||
'或': ' or ',
|
||||
'忽略': ' Ignore ',
|
||||
|
||||
'总共': 'Total ',
|
||||
'已上传': 'Uploaded ',
|
||||
'失败{0}个': ' {0} failure',
|
||||
|
||||
'您只能上传{0}个文件': 'You can only upload {0} files.',
|
||||
'正在验证文件,请稍等。': 'File is being validated.',
|
||||
|
||||
'删除': 'Delete',
|
||||
'向右旋转': 'Rotate right',
|
||||
'向左旋转': 'Rotate left',
|
||||
|
||||
'文件类型不对': 'File type error',
|
||||
'文件大小超出': 'File size exceeded',
|
||||
'文件传输中断': 'File transfer interrupt',
|
||||
'HTTP请求错误': 'HTTP request error',
|
||||
'文件格式不允许': 'File format not allowed',
|
||||
'不要选择重复文件': 'Do not select duplicate files',
|
||||
'上传失败,请重试': 'Upload failed, please try again',
|
||||
'服务器返回出错': 'The server returned an error',
|
||||
|
||||
'预览生成中': 'Preview create',
|
||||
'不能预览': 'Cannot preview',
|
||||
|
||||
'确定删除该图片吗?': 'Are you sure to delete the image?',
|
||||
'确定删除该文件吗?': 'Are you sure to delete this file?',
|
||||
|
||||
'等待上传': 'Waiting for the upload',
|
||||
'正在上传': 'Are uploading',
|
||||
|
||||
'取消': 'Cancel',
|
||||
'下载': 'Download',
|
||||
'预览': 'Preview',
|
||||
'查看': 'To view'
|
||||
};
|
||||
})(jQuery);
|
||||
@@ -0,0 +1,60 @@
|
||||
(function($) {
|
||||
$.fn.webuploader.defaults.i18n = {
|
||||
|
||||
'安装失败!': 'インストールに失敗!',
|
||||
'安装已成功,请刷新!': 'インストールは成功しました。!',
|
||||
'文件上传组件不支持您的浏览器,请使用高版本浏览器!': 'ファイルアップロードコンポーネントがあなたのブラウザをサポートしません。!',
|
||||
|
||||
'点击选择文件': '選択ファイルをクリックする。',
|
||||
'点击选择图片': '選択画像をクリックする。',
|
||||
'点击选择视频': '選択動画をクリックする。',
|
||||
'继续添加': '追加し続ける',
|
||||
|
||||
'暂停上传': 'アップロードを一時停止する。',
|
||||
'继续上传': 'アップロードを継続する',
|
||||
'开始上传': 'アップロードを始める',
|
||||
'上传成功': 'アップロードが成功する',
|
||||
|
||||
'张图片': ' 枚画像',
|
||||
'个文件': ' 一つの書類',
|
||||
|
||||
'上传失败': ' アップロードの失敗',
|
||||
'重新上传': ' アップロードを再開する ',
|
||||
'或': ' または ',
|
||||
'忽略': ' 無視する ',
|
||||
|
||||
'总共': '計 ',
|
||||
'已上传': 'アップロードした ',
|
||||
'失败{0}个': ' {0} つ失敗する',
|
||||
|
||||
'您只能上传{0}个文件': 'ファイルは{0}つしかアップロードできません',
|
||||
'正在验证文件,请稍等。': '書類を検証中ですので、少々お待ちください。',
|
||||
|
||||
'删除': '削除',
|
||||
'向右旋转': '右にまがる',
|
||||
'向左旋转': '左に回る',
|
||||
|
||||
'文件类型不对': '書類のタイプが違う',
|
||||
'文件大小超出': '書類のサイズがはみ出る',
|
||||
'文件传输中断': 'ファイル転送を中断する。',
|
||||
'HTTP请求错误': 'HTTPリクエストエラー',
|
||||
'文件格式不允许': 'ファイルフォーマットは許可されない',
|
||||
'不要选择重复文件': '重複ファイルは選択しないでください',
|
||||
'上传失败,请重试': 'アップロードに失敗したので、試してみてください',
|
||||
'服务器返回出错': 'サーバーがエラーに戻る',
|
||||
|
||||
'预览生成中': 'プレビュー生成中',
|
||||
'不能预览': 'プレビューができない。',
|
||||
|
||||
'确定删除该图片吗?': 'この写真を削除することは確定しましたか?',
|
||||
'确定删除该文件吗?': 'このファイルを削除することは確定しましたか?',
|
||||
|
||||
'等待上传': 'アップロードを待つ',
|
||||
'正在上传': 'アップロード中',
|
||||
|
||||
'取消': 'キャンセル',
|
||||
'下载': 'ダウンロード',
|
||||
'预览': 'プレビュー',
|
||||
'查看': 'チェック'
|
||||
};
|
||||
})(jQuery);
|
||||
@@ -120,10 +120,8 @@ public class ${ClassName}Service extends ${table.isTreeEntity?'Tree':'Crud'}Serv
|
||||
}
|
||||
%>
|
||||
if (${@StringUtils.uncap(child.className)}.getIsNewRecord()){
|
||||
${@StringUtils.uncap(child.className)}.preInsert();
|
||||
${@StringUtils.uncap(child.className)}Dao.insert(${@StringUtils.uncap(child.className)});
|
||||
}else{
|
||||
${@StringUtils.uncap(child.className)}.preUpdate();
|
||||
${@StringUtils.uncap(child.className)}Dao.update(${@StringUtils.uncap(child.className)});
|
||||
}
|
||||
}else{
|
||||
@@ -162,7 +160,7 @@ public class ${ClassName}Service extends ${table.isTreeEntity?'Tree':'Crud'}Serv
|
||||
}
|
||||
}
|
||||
%>
|
||||
${@StringUtils.uncap(child.className)}Dao.delete(${@StringUtils.uncap(child.className)});
|
||||
${@StringUtils.uncap(child.className)}Dao.deleteByEntity(${@StringUtils.uncap(child.className)});
|
||||
<% } %>
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ $("#inputForm").validate({
|
||||
});
|
||||
<% if(table.isTreeEntity){ %>
|
||||
|
||||
// 选择父级菜单回调方法
|
||||
// 选择上级节点回调方法
|
||||
function treeselectCallback(id, act, index, layero){
|
||||
if (id == 'parent' && (act == 'ok' || act == 'clear')){
|
||||
// 创建并初始化下一个节点信息,如:排序号、默认值
|
||||
|
||||
@@ -61,7 +61,7 @@ for (c in child.columnList){
|
||||
editable:true, edittype:'select', editoptions:{<%if (c.showType == 'select_multiple' || c.showType == 'checkbox'){ %>multiple:true, <% } %>'class':'form-control${cssClass}',
|
||||
items: $.merge([<%if (!(c.showType == 'select_multiple' || c.showType == 'checkbox')){ %>{dictLabel:' ',dictValue:''}<% } %>], \${@DictUtils.getDictListJson('${c.optionMap['dictType']}')}),
|
||||
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
|
||||
$(element).select2().on("change",function(){$(this).valid()});
|
||||
$(element).select2().on("change",function(){$(this).resetValid()});
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -107,7 +107,7 @@ for (c in child.columnList){
|
||||
id: 'office_'+editOptions.id, title: '机构选择',
|
||||
name: '${c.attrName}', value: val.split('|')[0],
|
||||
labelName: '${c.attrName2}', labelValue: val.split('|')[1],
|
||||
url: '\${ctx}/sys/office/treeData?officeTypes=1,2', cssClass: '${cssClass}'
|
||||
url: '\${ctx}/sys/office/treeData', cssClass: '${cssClass}'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,10 @@ content="no-cache, no-store, must-revalidate"/><meta name="description" content=
|
||||
content="no-cache" http-equiv="Pragma"/><meta http-equiv="Expires" content="0"/><meta
|
||||
content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
|
||||
<title>${(isNotBlank(title!) ? title! + ' - ' : '') + @Global.getConfig('productName')}</title>
|
||||
<link rel="shortcut icon" href="${ctxStatic}/favicon.png" type="image/png">
|
||||
<script src="${ctxPath}/global.min.js?ctx=${ctx}"></script>
|
||||
<script src="${ctxStatic}/jquery/jquery-1.12.4.min.js"></script>
|
||||
<script src="${ctxStatic}/jquery/jquery-migrate-1.4.1.min.js"></script>
|
||||
<!-- <script src="${ctxStatic}/jquery/jquery-migrate-1.4.1.min.js"></script> -->
|
||||
<!--[if lt IE 9]><script src="${ctxStatic}/common/h5fix.min.js"></script><![endif]-->
|
||||
<% if(parameter.__layer! == 'true'){ %>
|
||||
<style>.main-content>.box-main>.box-header{display:none;}</style>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<% if (@ListUtils.inString('tabPage', libs!)){ %>
|
||||
<script src="${ctxStatic}/wdScrollTab/js/TabPanel.js?${_version}"></script>
|
||||
<script src="${ctxStatic}/wdScrollTab/js/TabPanel.extend.js?${_version}"></script>
|
||||
<script src="${ctxStatic}/wdScrollTab/js/TabPanel_i18n.js?${_version}"></script>
|
||||
<% } %>
|
||||
<% if (@ListUtils.inString('dataGrid', libs!)){ %>
|
||||
<script src="${ctxStatic}/jqGrid/4.7/js/jquery.jqGrid.js?${_version}"></script>
|
||||
@@ -32,6 +33,7 @@
|
||||
<% if (@ListUtils.inString('fileupload', libs!)){ %>
|
||||
<script src="${ctxStatic}/webuploader/0.1/webuploader.js?${_version}"></script>
|
||||
<script src="${ctxStatic}/webuploader/0.1/webuploader.extend.js?${_version}"></script>
|
||||
<script src="${ctxStatic}/webuploader/0.1/i18n/${lang()}.js?${_version}"></script>
|
||||
<% } %>
|
||||
<% if (@ListUtils.inString('ueditor', libs!)){ %>
|
||||
<script src="${ctxStatic}/ueditor/1.4/ueditor.config.js?${_version}"></script>
|
||||
|
||||
@@ -111,7 +111,7 @@ $("#inputForm").validate({
|
||||
}
|
||||
});
|
||||
|
||||
//选择父级菜单回调方法
|
||||
//选择上级节点回调方法
|
||||
function treeselectCallback(id, act, index, layero){
|
||||
if (id == 'parent' && (act == 'ok' || act == 'clear')){
|
||||
// 创建并初始化下一个节点信息,如:排序号、默认值
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<div class="col-sm-8">
|
||||
<#form:treeselect id="parent" title="${text('上级公司')}"
|
||||
path="parent.id" labelPath="parent.companyName"
|
||||
url="${ctx}/sys/company/treeData?excludeCode=${company.id}&ctrlPermi=2"
|
||||
url="${ctx}/sys/company/treeData?excludeCode=${company.id}&ctrlPermi=${@Global.getConfig('user.adminCtrlPermi', '2')}"
|
||||
class="" allowClear="true" canSelectRoot="true" canSelectParent="true"/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -143,7 +143,7 @@ $('#companyName').change(function(){
|
||||
$('#fullName').val($(this).val());
|
||||
}
|
||||
});
|
||||
// 选择父级菜单回调方法
|
||||
// 选择上级节点回调方法
|
||||
function treeselectCallback(id, act, index, layero){
|
||||
if (id == 'parent' && (act == 'ok' || act == 'clear')){
|
||||
// 创建并初始化下一个节点信息,如:排序号、默认值
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user