Compare commits
28 Commits
v5.9.1.spr
...
v5.9.2.spr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
290e8ec31e | ||
|
|
30039a35bb | ||
|
|
14f57be279 | ||
|
|
207897e7be | ||
|
|
df728bc3d6 | ||
|
|
3333ad2e10 | ||
|
|
83752a77cb | ||
|
|
14437dfb7a | ||
|
|
ce1c06eef2 | ||
|
|
a98f8a816a | ||
|
|
5d16bb8103 | ||
|
|
48dbec081d | ||
|
|
f9648bcaf8 | ||
|
|
68a7c395e0 | ||
|
|
0b4bb63dbe | ||
|
|
03c5d4a051 | ||
|
|
380ee54ae5 | ||
|
|
6e3b93f645 | ||
|
|
3eaa799455 | ||
|
|
283d27d0df | ||
|
|
8c86d1534c | ||
|
|
40054e4c6e | ||
|
|
2981699bd1 | ||
|
|
3484d93a42 | ||
|
|
9a70ddb758 | ||
|
|
805759db01 | ||
|
|
481246f52e | ||
|
|
ba077ecd41 |
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ public class ExceptionUtils {
|
||||
ex = (Throwable) request.getAttribute("exception");
|
||||
} else if (request.getAttribute(RequestDispatcher.ERROR_EXCEPTION) != null) {
|
||||
ex = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);
|
||||
} else if (request.getAttribute("org.springframework.web.servlet.DispatcherServlet.EXCEPTION") != null) {
|
||||
ex = (Throwable) request.getAttribute("org.springframework.web.servlet.DispatcherServlet.EXCEPTION");
|
||||
}
|
||||
return ex;
|
||||
}
|
||||
|
||||
@@ -23,12 +23,6 @@ import java.lang.reflect.InvocationTargetException;
|
||||
public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ObjectUtils.class);
|
||||
private static final boolean isJavaSerialize;
|
||||
|
||||
static {
|
||||
String[] ver = StringUtils.split(System.getProperty("java.version"), StringUtils.DOT);
|
||||
isJavaSerialize = ver.length > 0 && Integer.parseInt(ver[0]) > 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为 Double 类型
|
||||
|
||||
@@ -17,6 +17,7 @@ import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.util.AntPathMatcher;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
@@ -57,6 +58,11 @@ public class ServletUtils {
|
||||
// 是否打印错误信息参数到视图页面(生产环境关闭)
|
||||
private static final Boolean PRINT_ERROR_INFO = PROPS.getPropertyToBoolean("error.page.printErrorInfo", "true");
|
||||
|
||||
// 允许重定向的地址,不设置为全部允许,设置this只允许本项目内部跳转,多个用逗号隔开,例如:this,http://*.jeesite.com
|
||||
private static final String[] ALLOW_REDIRECTS = PROPS.getPropertyToArray("shiro.allowRedirects", "");
|
||||
private static final Boolean SCHEME_HTTPS = PROPS.getPropertyToBoolean("server.schemeHttps", "false");
|
||||
private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
|
||||
|
||||
/**
|
||||
* 获取当前请求对象
|
||||
* web.xml: <listener><listener-class>
|
||||
@@ -384,10 +390,15 @@ public class ServletUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取请求的域名(含端口)
|
||||
* 获取当前请求的域名(含端口)
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static String getRequestDomain(String url) {
|
||||
public static String getThisDomain(HttpServletRequest request) {
|
||||
String url = request.getRequestURL().toString();
|
||||
String scheme = StringUtils.substringBefore(url, "://");
|
||||
if (SCHEME_HTTPS && StringUtils.equals(scheme, "http")) {
|
||||
scheme = "https";
|
||||
}
|
||||
String domain = StringUtils.substringAfter(url, "://");
|
||||
if (StringUtils.contains(domain, "/")) {
|
||||
domain = StringUtils.substringBefore(domain, "/");
|
||||
@@ -395,6 +406,28 @@ public class ServletUtils {
|
||||
return scheme + "://" + domain;
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证地址是否允许重定向
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public static boolean isAllowRedirects(HttpServletRequest request, String url) {
|
||||
if (ALLOW_REDIRECTS == null || ALLOW_REDIRECTS.length == 0) {
|
||||
return true;
|
||||
}
|
||||
boolean allow = false;
|
||||
for (String pattern : ALLOW_REDIRECTS) {
|
||||
String p = StringUtils.trim(pattern);
|
||||
if ("this".equals(p)) {
|
||||
p = getThisDomain(request);
|
||||
}
|
||||
if (PATH_MATCHER.match(p + "/**", url)){
|
||||
allow = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return allow;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得请求参数值
|
||||
*/
|
||||
|
||||
@@ -235,3 +235,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:36px!important;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-htable th div {padding:9px 0 8px 2px;}
|
||||
.table-form .ui-jqgrid tr.jqgrow td {height: 39px;}
|
||||
|
||||
@@ -235,3 +235,6 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:36px!important;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-htable th div {padding:9px 0 8px 2px;}
|
||||
.table-form .ui-jqgrid tr.jqgrow td {height: 39px;}
|
||||
|
||||
@@ -296,6 +296,9 @@ a, a:hover, a:active, a:focus, .form-unit, th[aria-selected=true] .ui-jqgrid-sor
|
||||
.ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:46px!important;}
|
||||
.ui-jqgrid .ui-jqgrid-htable th div {padding:15px 0 15px 2px;}
|
||||
.ui-jqgrid tr.jqgrow td {height: 49px;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-frozen .ui-jqgrid-htable th div {height:36px!important;}
|
||||
.table-form .ui-jqgrid .ui-jqgrid-htable th div {padding:9px 0 8px 2px;}
|
||||
.table-form .ui-jqgrid tr.jqgrow td {height: 39px;}
|
||||
|
||||
.ui-jqgrid tr.jqgroup td, .ui-jqgrid tr.footrow td, .ui-jqgrid tr.jqfoot td {background:#323232;}
|
||||
.ui-jqgrid .actions .moreItems {background:#1a1a1a;border-color:#3c3c3c;box-shadow:none;}
|
||||
|
||||
@@ -329,7 +329,7 @@
|
||||
</word>
|
||||
<word>
|
||||
<id>a63e3fda50530388ba263296184d8a6919a75791</id>
|
||||
<length>1000</length>
|
||||
<length>4000</length>
|
||||
<decimal>null</decimal>
|
||||
<array>false</array>
|
||||
<array_dimension>null</array_dimension>
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(1000),
|
||||
device_info varchar(4000),
|
||||
reply_date date,
|
||||
reply_content vargraphic(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(1000),
|
||||
device_info varchar(4000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE [js_app_comment]
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
[create_by_name] varchar(200),
|
||||
[device_info] varchar(1000),
|
||||
[device_info] varchar(4000),
|
||||
[reply_date] date,
|
||||
[reply_content] nvarchar(500),
|
||||
[reply_user_code] varchar(64),
|
||||
|
||||
@@ -17,7 +17,7 @@ CREATE TABLE js_app_comment
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
create_by_name varchar(200) COMMENT '提问人员姓名',
|
||||
device_info varchar(1000) COMMENT '设备信息',
|
||||
device_info varchar(4000) COMMENT '设备信息',
|
||||
reply_date date COMMENT '回复时间',
|
||||
reply_content varchar(500) COMMENT '回复意见',
|
||||
reply_user_code varchar(64) COMMENT '回复人员',
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks nvarchar2(500),
|
||||
create_by_name varchar2(200),
|
||||
device_info varchar2(1000),
|
||||
device_info varchar2(4000),
|
||||
reply_date date,
|
||||
reply_content nvarchar2(500),
|
||||
reply_user_code varchar2(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE js_app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(1000),
|
||||
device_info varchar(4000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -4,17 +4,15 @@
|
||||
*/
|
||||
package com.jeesite.modules.app.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.jeesite.common.entity.DataEntity;
|
||||
import com.jeesite.common.mybatis.annotation.Column;
|
||||
import com.jeesite.common.mybatis.annotation.Table;
|
||||
import com.jeesite.common.mybatis.mapper.query.QueryType;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* APP意见反馈Entity
|
||||
@@ -84,7 +82,7 @@ public class AppComment extends DataEntity<AppComment> {
|
||||
this.contact = contact;
|
||||
}
|
||||
|
||||
@Size(min=0, max=1000, message="设备信息长度不能超过 1000 个字符")
|
||||
@Size(min=0, max=4000, message="设备信息长度不能超过 4000 个字符")
|
||||
public String getDeviceInfo() {
|
||||
return deviceInfo;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks vargraphic(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(1000),
|
||||
device_info varchar(4000),
|
||||
reply_date date,
|
||||
reply_content vargraphic(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date datetime NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(1000),
|
||||
device_info varchar(4000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE [${_prefix}app_comment]
|
||||
[update_date] datetime NOT NULL,
|
||||
[remarks] nvarchar(500),
|
||||
[create_by_name] varchar(200),
|
||||
[device_info] varchar(1000),
|
||||
[device_info] varchar(4000),
|
||||
[reply_date] date,
|
||||
[reply_content] nvarchar(500),
|
||||
[reply_user_code] varchar(64),
|
||||
|
||||
@@ -17,7 +17,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date datetime NOT NULL COMMENT '更新时间',
|
||||
remarks varchar(500) COMMENT '备注信息',
|
||||
create_by_name varchar(200) COMMENT '提问人员姓名',
|
||||
device_info varchar(1000) COMMENT '设备信息',
|
||||
device_info varchar(4000) COMMENT '设备信息',
|
||||
reply_date date COMMENT '回复时间',
|
||||
reply_content varchar(500) COMMENT '回复意见',
|
||||
reply_user_code varchar(64) COMMENT '回复人员',
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks nvarchar2(500),
|
||||
create_by_name varchar2(200),
|
||||
device_info varchar2(1000),
|
||||
device_info varchar2(4000),
|
||||
reply_date date,
|
||||
reply_content nvarchar2(500),
|
||||
reply_user_code varchar2(64),
|
||||
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE ${_prefix}app_comment
|
||||
update_date timestamp NOT NULL,
|
||||
remarks varchar(500),
|
||||
create_by_name varchar(200),
|
||||
device_info varchar(1000),
|
||||
device_info varchar(4000),
|
||||
reply_date date,
|
||||
reply_content varchar(500),
|
||||
reply_user_code varchar(64),
|
||||
|
||||
@@ -21,4 +21,5 @@
|
||||
5.8.0
|
||||
5.8.1
|
||||
5.9.0
|
||||
5.9.1
|
||||
5.9.1
|
||||
5.9.2
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -29,4 +29,5 @@
|
||||
5.8.0
|
||||
5.8.1
|
||||
5.9.0
|
||||
5.9.1
|
||||
5.9.1
|
||||
5.9.2
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -17,13 +17,12 @@ import com.jeesite.common.shiro.realm.BaseAuthorizingRealm;
|
||||
import com.jeesite.common.utils.SpringUtils;
|
||||
import com.jeesite.common.web.CookieUtils;
|
||||
import com.jeesite.common.web.http.ServletUtils;
|
||||
import com.jeesite.modules.sys.entity.Log;
|
||||
import com.jeesite.modules.sys.entity.Role;
|
||||
import com.jeesite.modules.sys.entity.User;
|
||||
import com.jeesite.modules.sys.utils.CorpUtils;
|
||||
import com.jeesite.modules.sys.utils.LogUtils;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
import com.jeesite.modules.sys.utils.ValidCodeUtils;
|
||||
import com.jeesite.modules.sys.entity.*;
|
||||
import com.jeesite.modules.sys.utils.*;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
import org.apache.shiro.authc.AuthenticationToken;
|
||||
import org.apache.shiro.authc.IncorrectCredentialsException;
|
||||
@@ -37,10 +36,6 @@ import org.apache.shiro.web.util.WebUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -424,8 +419,8 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
|
||||
Global.setLang((String)paramMap.get("lang"), request, response);
|
||||
}
|
||||
data.put("demoMode", Global.isDemoMode());
|
||||
data.put("useCorpModel", Global.isUseCorpModel()
|
||||
&& Global.getConfigToBoolean("user.loginCodeCorpUnique", "false"));
|
||||
data.put("useCorpModel", Global.isUseCorpModel());
|
||||
data.put("loginCodeCorpUnique", Global.getConfigToBoolean("user.loginCodeCorpUnique", "false"));
|
||||
data.put("title", Global.getProperty("productName"));
|
||||
data.put("company", Global.getProperty("companyName"));
|
||||
data.put("version", Global.getProperty("productVersion"));
|
||||
@@ -452,6 +447,7 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
|
||||
data.put("msgEnabled", Global.getPropertyToBoolean("msg.enabled", "false"));
|
||||
data.put("sysCode", session.getAttribute("sysCode"));
|
||||
data.put("roleCode", session.getAttribute("roleCode"));
|
||||
data.put("postCode", session.getAttribute("postCode"));
|
||||
data.put("title", Global.getProperty("productName"));
|
||||
data.put("company", Global.getProperty("companyName"));
|
||||
data.put("version", Global.getProperty("productVersion"));
|
||||
@@ -471,6 +467,21 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
|
||||
}
|
||||
}
|
||||
data.put("roleList", roleList);
|
||||
List<Map<String, Object>> postList = ListUtils.newArrayList();
|
||||
if (Global.getConfigToBoolean("user.postRolePermi", "false")
|
||||
&& User.USER_TYPE_EMPLOYEE.equals(user.getUserType())) {
|
||||
Employee employee = user.getRefObj();
|
||||
for (EmployeePost ep : EmpUtils.getEmployeePostList(employee.getEmpCode())){
|
||||
Post post = ep.getPost();
|
||||
if (post != null) {
|
||||
Map<String, Object> postMap = MapUtils.newHashMap();
|
||||
postMap.put("postCode", post.getPostCode());
|
||||
postMap.put("postName", post.getPostName());
|
||||
postList.add(postMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
data.put("postList", postList);
|
||||
data.put("desktopUrl", desktopUrl != null ? desktopUrl : Global.getConfig("sys.index.desktopUrl"));
|
||||
return data;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.jeesite.common.mybatis.annotation.Table;
|
||||
columns={
|
||||
@Column(name="role_code", attrName="roleCode", label="角色编码", isPK=true),
|
||||
@Column(name="role_name", attrName="roleName", label="角色名称"),
|
||||
@Column(name="status", attrName="status", label="角色状态"),
|
||||
})
|
||||
}, orderBy=""
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@ package com.jeesite.modules.sys.service.support;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.service.CrudService;
|
||||
import com.jeesite.modules.sys.dao.EmployeeDao;
|
||||
import com.jeesite.modules.sys.dao.EmployeeOfficeDao;
|
||||
@@ -107,6 +108,12 @@ public class EmployeeServiceSupport extends CrudService<EmployeeDao, Employee>
|
||||
public List<EmployeePost> findEmployeePostList(Employee employee){
|
||||
EmployeePost employeePost = new EmployeePost();
|
||||
employeePost.setEmpCode(employee.getEmpCode());
|
||||
if (employee.getDataMap() != null) {
|
||||
String a = (String)employee.getDataMap().get("loadJoinTableAlias");
|
||||
if (StringUtils.isNotBlank(a)) {
|
||||
employeePost.sqlMap().loadJoinTableAlias(a);
|
||||
}
|
||||
}
|
||||
return employeePostDao.findList(employeePost);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,13 +9,14 @@ import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.service.CrudService;
|
||||
import com.jeesite.common.utils.PageUtils;
|
||||
import com.jeesite.modules.sys.dao.PostDao;
|
||||
import com.jeesite.modules.sys.dao.PostRoleDao;
|
||||
import com.jeesite.modules.sys.entity.Post;
|
||||
import com.jeesite.modules.sys.entity.PostRole;
|
||||
import com.jeesite.modules.sys.entity.Role;
|
||||
import com.jeesite.modules.sys.entity.*;
|
||||
import com.jeesite.modules.sys.service.EmpUserService;
|
||||
import com.jeesite.modules.sys.service.PostService;
|
||||
import com.jeesite.modules.sys.utils.CorpUtils;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -31,6 +32,8 @@ public class PostServiceSupport extends CrudService<PostDao, Post>
|
||||
|
||||
@Autowired
|
||||
private PostRoleDao postRoleDao;
|
||||
@Autowired
|
||||
private EmpUserService empUserService;
|
||||
|
||||
/**
|
||||
* 查询岗位
|
||||
@@ -101,12 +104,13 @@ public class PostServiceSupport extends CrudService<PostDao, Post>
|
||||
postRoleDao.insertBatch(list, null);
|
||||
}
|
||||
}
|
||||
clearCache(post);
|
||||
}
|
||||
|
||||
/**
|
||||
* 岗位编码生成规则
|
||||
*/
|
||||
public void genId(Role entity, String viewCode){
|
||||
public void genId(Post entity, String viewCode){
|
||||
if (StringUtils.isNotBlank(viewCode)){
|
||||
// 如果是租户模式,并且当前租户不是默认租户的时候,增加租户前缀防止编码重复
|
||||
if (Global.isUseCorpModel() && !CorpUtils.DEFAULT_CORP_CODE.equals(CorpUtils.getCurrentCorpCode())){
|
||||
@@ -134,6 +138,21 @@ public class PostServiceSupport extends CrudService<PostDao, Post>
|
||||
public void delete(Post post) {
|
||||
post.sqlMap().markIdDelete();
|
||||
super.delete(post);
|
||||
clearCache(post);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据岗位清理缓存
|
||||
*/
|
||||
protected void clearCache(Post post){
|
||||
// 清除该岗位下所有的用户缓存
|
||||
EmpUser where = new EmpUser();
|
||||
where.setCodes(new String[]{ post.getPostCode() });
|
||||
PageUtils.findList(where, null, e -> {
|
||||
List<EmpUser> userList = empUserService.findUserListByPostCodes((EmpUser)e);
|
||||
userList.forEach(UserUtils::clearCache);
|
||||
return !userList.isEmpty();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
package com.jeesite.modules.sys.utils;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.collect.MapUtils;
|
||||
import com.jeesite.common.collect.SetUtils;
|
||||
import com.jeesite.common.lang.ObjectUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
@@ -325,6 +326,19 @@ public class EmpUtils {
|
||||
});
|
||||
return list.toArray(new String[list.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据员工编号,获取员工岗位(返回岗位编码和名称)
|
||||
* @param empCode
|
||||
* @return
|
||||
*/
|
||||
public static List<EmployeePost> getEmployeePostList(String empCode){
|
||||
Employee employee = new Employee();
|
||||
employee.setEmpCode(empCode);
|
||||
employee.setDataMap(MapUtils.newHashMap());
|
||||
employee.getDataMap().put("loadJoinTableAlias", "p");
|
||||
return Static.employeeService.findEmployeePostList(employee);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除指定用户缓存,不包括改用的SESSION缓存
|
||||
|
||||
@@ -493,7 +493,7 @@ public class AccountController extends BaseController{
|
||||
|
||||
// 一同验证保存的用户名和验证码是否正确(如果只校验验证码,不验证用户名,则会有获取验证码后修改用户名的漏洞)
|
||||
if (!(loginCode != null && loginCode.equals(user.getLoginCode()))){
|
||||
return renderResult(Global.FALSE, text("非法操作。"));
|
||||
return renderResult(Global.FALSE, text("请先获取验证码。"));
|
||||
}
|
||||
|
||||
// 验证码是否超时
|
||||
|
||||
@@ -6,6 +6,7 @@ package com.jeesite.modules.sys.web;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonView;
|
||||
import com.jeesite.common.codec.EncodeUtils;
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.config.Global;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.shiro.filter.FormFilter;
|
||||
@@ -15,8 +16,10 @@ import com.jeesite.common.web.BaseController;
|
||||
import com.jeesite.common.web.CookieUtils;
|
||||
import com.jeesite.common.web.http.ServletUtils;
|
||||
import com.jeesite.modules.sys.entity.Menu;
|
||||
import com.jeesite.modules.sys.entity.PostRole;
|
||||
import com.jeesite.modules.sys.entity.Role;
|
||||
import com.jeesite.modules.sys.entity.User;
|
||||
import com.jeesite.modules.sys.service.PostService;
|
||||
import com.jeesite.modules.sys.utils.PwdUtils;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -26,6 +29,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.apache.shiro.session.Session;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.apache.shiro.web.util.WebUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
@@ -48,7 +52,10 @@ import java.util.Map;
|
||||
@RequestMapping(value = "${adminPath}")
|
||||
@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true)
|
||||
public class LoginController extends BaseController{
|
||||
|
||||
|
||||
@Autowired
|
||||
private PostService postService;
|
||||
|
||||
/**
|
||||
* 登录页面
|
||||
*/
|
||||
@@ -187,11 +194,8 @@ public class LoginController extends BaseController{
|
||||
return null;
|
||||
}
|
||||
|
||||
// 获取当前会话对象,并返回一些数据
|
||||
// 如果是登录操作,则初始化一些登录参数
|
||||
Session session = UserUtils.getSession();
|
||||
model.addAllAttributes(FormFilter.getLoginSuccessData(request, response, user, session));
|
||||
|
||||
// 是否是登录操作
|
||||
boolean isLogin = Global.TRUE.equals(session.getAttribute(BaseAuthorizingRealm.IS_LOGIN_OPER));
|
||||
if (isLogin){
|
||||
// 获取后接着清除,防止下次获取仍然认为是登录状态
|
||||
@@ -224,20 +228,18 @@ public class LoginController extends BaseController{
|
||||
}
|
||||
}
|
||||
|
||||
// 获取当前会话对象,并返回一些数据
|
||||
if (!StringUtils.equals(request.getParameter("__be"), Global.YES)) {
|
||||
model.addAllAttributes(FormFilter.getLoginSuccessData(request, response, user, session));
|
||||
}
|
||||
|
||||
// 获取登录成功后跳转的页面
|
||||
String successUrl = request.getParameter("__url");
|
||||
if (StringUtils.isBlank(successUrl)){
|
||||
successUrl = (String)request.getAttribute("__url");
|
||||
}
|
||||
if (StringUtils.contains(successUrl, "://")){
|
||||
String ctxPath = Global.getCtxPath();
|
||||
String domain = ServletUtils.getRequestDomain(successUrl);
|
||||
successUrl = StringUtils.substring(successUrl, domain.length());
|
||||
if (StringUtils.startsWith(successUrl, ctxPath)) {
|
||||
successUrl = StringUtils.substringAfter(successUrl, ctxPath);
|
||||
}
|
||||
}
|
||||
if (StringUtils.isBlank(successUrl)){
|
||||
// 登录后重定向地址验证,如果是非法地址,则指定默认的登录成功地址
|
||||
if (!ServletUtils.isAllowRedirects(request, successUrl) || StringUtils.isBlank(successUrl)){
|
||||
successUrl = Global.getProperty("shiro.successUrl");
|
||||
}
|
||||
|
||||
@@ -361,7 +363,7 @@ public class LoginController extends BaseController{
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换系统菜单(仅超级管理员有权限)
|
||||
* 切换系统菜单(菜单归属子系统)
|
||||
*/
|
||||
@RequiresPermissions("user")
|
||||
@RequestMapping(value = "switch/{sysCode}")
|
||||
@@ -372,6 +374,9 @@ public class LoginController extends BaseController{
|
||||
}else{
|
||||
session.removeAttribute("sysCode");
|
||||
}
|
||||
// 切换系统时,清除当前岗位和角色状态
|
||||
session.removeAttribute("postCode");
|
||||
session.removeAttribute("roleCode");
|
||||
UserUtils.removeCache(UserUtils.CACHE_AUTH_INFO+"_"+session.getId());
|
||||
if (ServletUtils.isAjaxRequest(request)) {
|
||||
return renderResult(Global.TRUE, text("子系统切换成功"));
|
||||
@@ -380,7 +385,7 @@ public class LoginController extends BaseController{
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换角色菜单(仅超级管理员有权限)
|
||||
* 切换角色菜单(用户->角色)
|
||||
*/
|
||||
@RequiresPermissions("user")
|
||||
@RequestMapping(value = {"switchRole","switchRole/{roleCode}"})
|
||||
@@ -397,6 +402,39 @@ public class LoginController extends BaseController{
|
||||
}
|
||||
return REDIRECT + adminPath + "/index";
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换岗位菜单(用户->岗位->角色)v4.9.2
|
||||
*/
|
||||
@RequiresPermissions("user")
|
||||
@RequestMapping(value = {"switchPost","switchPost/{postCode}"})
|
||||
public String switchPost(@PathVariable(required=false) String postCode, HttpServletRequest request) {
|
||||
Session session = UserUtils.getSession();
|
||||
if (StringUtils.isNotBlank(postCode)){
|
||||
PostRole where = new PostRole();
|
||||
where.setPostCode(postCode);
|
||||
where.sqlMap().loadJoinTableAlias("r");
|
||||
List<String> roleCodes = ListUtils.newArrayList();
|
||||
postService.findPostRoleList(where).forEach(e -> {
|
||||
if (e.getRole() != null && PostRole.STATUS_NORMAL.equals(e.getRole().getStatus())) {
|
||||
roleCodes.add(e.getRoleCode());
|
||||
}
|
||||
});
|
||||
if (roleCodes.isEmpty()){
|
||||
roleCodes.add("__none__");
|
||||
}
|
||||
session.setAttribute("postCode", postCode);
|
||||
session.setAttribute("roleCode", StringUtils.joinComma(roleCodes)); // 5.4.0+ 支持多个,逗号隔开
|
||||
}else{
|
||||
session.removeAttribute("postCode");
|
||||
session.removeAttribute("roleCode");
|
||||
}
|
||||
UserUtils.removeCache(UserUtils.CACHE_AUTH_INFO+"_"+session.getId());
|
||||
if (ServletUtils.isAjaxRequest(request)) {
|
||||
return renderResult(Global.TRUE, text("岗位切换成功"));
|
||||
}
|
||||
return REDIRECT + adminPath + "/index";
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换主题风格
|
||||
|
||||
@@ -79,7 +79,7 @@ public class PostController extends BaseController {
|
||||
List<String> roleCodes = ListUtils.newArrayList();
|
||||
List<String> roleNames = ListUtils.newArrayList();
|
||||
postService.findPostRoleList(where).forEach(e -> {
|
||||
if (e.getRole() != null) {
|
||||
if (e.getRole() != null && PostRole.STATUS_NORMAL.equals(e.getRole().getStatus())) {
|
||||
roleCodes.add(e.getRoleCode());
|
||||
roleNames.add(e.getRole().getRoleName());
|
||||
}
|
||||
|
||||
@@ -110,9 +110,6 @@ public class CorpAdminController extends BaseController {
|
||||
if (!user.currentUser().isSuperAdmin()){
|
||||
return renderResult(Global.FALSE, text("越权操作,只有超级管理员才能修改此数据!"));
|
||||
}
|
||||
if (User.isSuperAdmin(user.getUserCode())) {
|
||||
return renderResult(Global.FALSE, text("非法操作,不能够操作此用户!"));
|
||||
}
|
||||
if (!EmpUser.USER_TYPE_EMPLOYEE.equals(user.getUserType())){
|
||||
return renderResult(Global.FALSE, text("非法操作,不能够操作此用户!"));
|
||||
}
|
||||
|
||||
@@ -161,9 +161,6 @@ public class EmpUserController extends BaseController {
|
||||
@PostMapping(value = "save")
|
||||
@ResponseBody
|
||||
public String save(@Validated EmpUser empUser, @Parameter(description = "操作类型") String op, HttpServletRequest request) {
|
||||
if (User.isSuperAdmin(empUser.getUserCode())) {
|
||||
return renderResult(Global.FALSE, "非法操作,不能够操作此用户!");
|
||||
}
|
||||
if (!EmpUser.USER_TYPE_EMPLOYEE.equals(empUser.getUserType())){
|
||||
return renderResult(Global.FALSE, "非法操作,不能够操作此用户!");
|
||||
}
|
||||
@@ -375,9 +372,6 @@ public class EmpUserController extends BaseController {
|
||||
@RequestMapping(value = "saveAuthDataScope")
|
||||
@ResponseBody
|
||||
public String saveAuthDataScope(EmpUser empUser, HttpServletRequest request) {
|
||||
if (User.isSuperAdmin(empUser.getUserCode())) {
|
||||
return renderResult(Global.FALSE, "非法操作,不能够操作此用户!");
|
||||
}
|
||||
if (!EmpUser.USER_TYPE_EMPLOYEE.equals(empUser.getUserType())){
|
||||
return renderResult(Global.FALSE, "非法操作,不能够操作此用户!");
|
||||
}
|
||||
|
||||
@@ -91,9 +91,6 @@ public class SecAdminController extends BaseController {
|
||||
@PostMapping(value = "save")
|
||||
@ResponseBody
|
||||
public String save(@Validated User user) {
|
||||
if (User.isSuperAdmin(user.getUserCode())) {
|
||||
return renderResult(Global.FALSE, text("非法操作,不能够操作此用户!"));
|
||||
}
|
||||
if (!User.USER_TYPE_EMPLOYEE.equals(user.getUserType())){
|
||||
return renderResult(Global.FALSE, text("非法操作,不能够操作此用户!"));
|
||||
}
|
||||
|
||||
@@ -149,6 +149,9 @@ user:
|
||||
|
||||
# 二级管理员的控制权限类型(1拥有的权限 2管理的权限,管理功能包括:用户管理、组织机构、公司管理等)(v4.1.5+)
|
||||
adminCtrlPermi: 2
|
||||
|
||||
# 是否启用岗位角色,开启后将 用户->岗位->关联角色,纳入菜单和权限管理
|
||||
postRolePermi: false
|
||||
|
||||
# 多租户模式(SAAS模式)(专业版)
|
||||
useCorpModel: false
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
JOIN ${_prefix}sys_employee_post b ON b.post_code = a.post_code
|
||||
</if>
|
||||
<if test="userCode != null and userCode != ''">
|
||||
JOIN ${_prefix}sys_employee_post b2 on b2.post_code = a.post_code
|
||||
JOIN ${_prefix}sys_user u on u.ref_code = b2.emp_code AND u.user_type = 'employee'
|
||||
JOIN ${_prefix}sys_employee_post b2 ON b2.post_code = a.post_code
|
||||
JOIN ${_prefix}sys_user u ON u.ref_code = b2.emp_code AND u.user_type = 'employee'
|
||||
</if>
|
||||
<where>
|
||||
${sqlMap.where.toSql()}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>http.api.js</name>
|
||||
<filePath>${frontDir}/common</filePath>
|
||||
<fileName>http.api.${className}.js</fileName>
|
||||
<content><![CDATA[
|
||||
const install = (Vue, vm) => {
|
||||
vm.$u.api = {
|
||||
|
||||
// 请将以下 ${functionName} 代码,复制到 http.api.js 文件中
|
||||
|
||||
// ${functionName} 开始
|
||||
${className}: {
|
||||
form: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/form', params),
|
||||
list: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/listData', params),
|
||||
save: (params = {}) => vm.$u.postJson(config.adminPath+'/${urlPrefix}/save', params),
|
||||
<% if(toBoolean(table.optionMap['isHaveDisableEnable'])){ %>
|
||||
disable: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/disable', params),
|
||||
enable: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/enable', params),
|
||||
<% } %>
|
||||
delete: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/delete', params),
|
||||
},
|
||||
// ${functionName} 结束
|
||||
|
||||
};
|
||||
}
|
||||
export default {
|
||||
install
|
||||
}
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,282 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>form.vue</name>
|
||||
<filePath>${frontDir}/pages/${urlPrefix}</filePath>
|
||||
<fileName>form.vue</fileName>
|
||||
<content><![CDATA[
|
||||
<template>
|
||||
<view class="wrap">
|
||||
<u-form class="form" :model="model" :rules="rules" ref="uForm" label-position="left">
|
||||
<%
|
||||
var userselectExists = false;
|
||||
var officeselectExists = false;
|
||||
var companyselectExists = false;
|
||||
var areaselectExists = false;
|
||||
for(c in table.columnList){
|
||||
if(c.isQuery == "1" && !c.isTreeEntityColumn){
|
||||
if(c.showType == 'userselect'){
|
||||
userselectExists = true;
|
||||
}else if(c.showType == 'officeselect'){
|
||||
officeselectExists = true;
|
||||
}else if(c.showType == 'companyselect'){
|
||||
companyselectExists = true;
|
||||
}else if(c.showType == 'areaselect'){
|
||||
areaselectExists = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
<%
|
||||
for (c in table.columnList){
|
||||
if (c.isEdit == '1' && c.showType != 'hidden'){
|
||||
// 如果是树结构的字段,则自动忽略
|
||||
if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
|
||||
'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
|
||||
&& c.attrName != table.treeViewCodeAttrName
|
||||
&& c.attrName != table.treeViewNameAttrName){
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<% if(c.showType == 'input'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<u-input placeholder="请输入${c.columnLabel}" v-model="model.${c.attrName}" type="text" maxlength="${c.dataLength}"></u-input>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'textarea'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180" label-position="top">
|
||||
<u-input type="textarea" placeholder="请输入${c.columnLabel}" v-model="model.testTextarea" height="100" maxlength="${c.dataLength}" />
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'select' || c.showType == 'select_multiple'){
|
||||
var isMultiple = (c.showType == 'select_multiple'); %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-select v-model="model.${c.attrName}" dict-type="${c.optionMap['dictType']}"<% if(isMultiple){ %> multiple="true"<% } %> placeholder="请选择${c.columnLabel}"></js-select>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'radio'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-radio v-model="model.${c.attrName}" dict-type="${c.optionMap['dictType']}"></js-radio>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'checkbox'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-checkbox v-model="model.${c.attrName}" dict-type="${c.optionMap['dictType']}"></js-checkbox>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'date' || c.showType == 'datetime'){
|
||||
var isTime = (c.showType == 'datetime'); %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<u-input placeholder="请输入${c.columnLabel}" v-model="model.${c.attrName}" format="yyyy-MM-dd${isTime?' HH:mm':''}" type="text" maxlength="${c.dataLength}"></u-input>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'userselect'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-select v-model="model.${c.attrName}" :items="${c.attrName}List" placeholder="请选择${c.columnLabel}" :tree="true"<% if (isNotBlank(c.attrName2)){ %>
|
||||
:label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>></js-select>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'officeselect'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-select v-model="model.${c.attrName}" :items="${c.attrName}List" placeholder="请选择${c.columnLabel}" :tree="true"<% if (isNotBlank(c.attrName2)){ %>
|
||||
:label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>></js-select>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'companyselect'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-select v-model="model.${c.attrName}" :items="${c.attrName}List" placeholder="请选择${c.columnLabel}" :tree="true"<% if (isNotBlank(c.attrName2)){ %>
|
||||
:label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>></js-select>
|
||||
</u-form-item>
|
||||
<% }else if(c.showType == 'areaselect'){ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<js-select v-model="model.${c.attrName}" :items="${c.attrName}List" placeholder="请选择${c.columnLabel}" :tree="true"<% if (isNotBlank(c.attrName2)){ %>
|
||||
:label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>></js-select>
|
||||
</u-form-item>
|
||||
<% }else{ %>
|
||||
<u-form-item label="${c.columnLabel}" prop="${c.attrName}" label-width="180">
|
||||
<u-input placeholder="请输入${c.columnLabel}" v-model="model.${c.attrName}" type="text" maxlength="${c.dataLength}"></u-input>
|
||||
</u-form-item>
|
||||
<% } %>
|
||||
<%
|
||||
}
|
||||
}
|
||||
%>
|
||||
<% if(toBoolean(table.optionMap['isImageUpload'])){ %>
|
||||
<u-form-item label="上传图片" prop="images" label-position="top">
|
||||
<js-uploadfile v-model="model.dataMap" :biz-key="model.id" biz-type="${className}_image"></js-uploadfile>
|
||||
</u-form-item>
|
||||
</u-form>
|
||||
<% } %>
|
||||
<view class="form-footer">
|
||||
<u-button class="btn" type="primary" @click="submit">提交</u-button>
|
||||
<!-- <u-button class="btn" type="default" @click="cancel">关闭</u-button> -->
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
model: {
|
||||
id: '',
|
||||
<%
|
||||
for (c in table.columnList){
|
||||
if (c.isEdit == '1' && c.showType != 'hidden'){
|
||||
// 如果是树结构的字段,则自动忽略
|
||||
if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
|
||||
'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
|
||||
&& c.attrName != table.treeViewCodeAttrName
|
||||
&& c.attrName != table.treeViewNameAttrName){
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<% if(c.showType == 'userselect'){ %>
|
||||
${c.simpleAttrName}: {
|
||||
userCode: '',
|
||||
userName: ''
|
||||
},
|
||||
<% }else if(c.showType == 'officeselect'){ %>
|
||||
${c.simpleAttrName}: {
|
||||
officeCode: '',
|
||||
officeName: ''
|
||||
},
|
||||
<% }else if(c.showType == 'companyselect'){ %>
|
||||
${c.simpleAttrName}: {
|
||||
companyCode: '',
|
||||
companyName: ''
|
||||
},
|
||||
<% }else if(c.showType == 'areaselect'){ %>
|
||||
${c.simpleAttrName}: {
|
||||
areaCode: '',
|
||||
areaName: ''
|
||||
},
|
||||
<% }else{ %>
|
||||
${c.attrName}: '',
|
||||
<% } %>
|
||||
<%
|
||||
}
|
||||
}
|
||||
%>
|
||||
},
|
||||
rules: {
|
||||
<%
|
||||
for (c in table.columnList){
|
||||
if (c.isEdit == '1' && c.showType != 'hidden'){
|
||||
// 如果是树结构的字段,则自动忽略
|
||||
if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
|
||||
'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
|
||||
&& c.attrName != table.treeViewCodeAttrName
|
||||
&& c.attrName != table.treeViewNameAttrName){
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<% if(c.isRequired == '1'){ %>
|
||||
'${c.attrName}': [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入${c.columnLabel}',
|
||||
trigger: ['change','blur'],
|
||||
}
|
||||
],
|
||||
<% } %>
|
||||
<%
|
||||
}
|
||||
}
|
||||
%>
|
||||
},
|
||||
<%
|
||||
for (c in table.columnList){
|
||||
if (c.isEdit == '1' && c.showType != 'hidden'){
|
||||
// 如果是树结构的字段,则自动忽略
|
||||
if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
|
||||
'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
|
||||
&& c.attrName != table.treeViewCodeAttrName
|
||||
&& c.attrName != table.treeViewNameAttrName){
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<% if(c.showType == 'userselect'){ %>
|
||||
${c.simpleAttrName}List: [],
|
||||
<% }else if(c.showType == 'officeselect'){ %>
|
||||
${c.simpleAttrName}List: [],
|
||||
<% }else if(c.showType == 'companyselect'){ %>
|
||||
${c.simpleAttrName}List: [],
|
||||
<% }else if(c.showType == 'areaselect'){ %>
|
||||
${c.simpleAttrName}List: [],
|
||||
<% } %>
|
||||
<%
|
||||
}
|
||||
}
|
||||
%>
|
||||
};
|
||||
},
|
||||
onLoad(params){
|
||||
this.$u.api.${className}.form(params).then(res => {
|
||||
Object.assign(this.model, res.${className});
|
||||
this.$refs.uForm.setRules(this.rules);
|
||||
<%
|
||||
for (c in table.columnList){
|
||||
if (c.isEdit == '1' && c.showType != 'hidden'){
|
||||
// 如果是树结构的字段,则自动忽略
|
||||
if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
|
||||
'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
|
||||
&& c.attrName != table.treeViewCodeAttrName
|
||||
&& c.attrName != table.treeViewNameAttrName){
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<% if(c.showType == 'userselect'){ %>
|
||||
this.$u.api.office.treeData({isLoadUser: true}).then(res => {
|
||||
this.${c.simpleAttrName}List = res;
|
||||
});
|
||||
<% }else if(c.showType == 'officeselect'){ %>
|
||||
this.$u.api.office.treeData().then(res => {
|
||||
this.${c.simpleAttrName}List = res;
|
||||
});
|
||||
<% }else if(c.showType == 'companyselect'){ %>
|
||||
this.$u.api.company.treeData().then(res => {
|
||||
this.${c.simpleAttrName}List = res;
|
||||
});
|
||||
<% }else if(c.showType == 'areaselect'){ %>
|
||||
this.$u.api.area.treeData().then(res => {
|
||||
this.${c.simpleAttrName}List = res;
|
||||
});
|
||||
<% } %>
|
||||
<%
|
||||
}
|
||||
}
|
||||
%>
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
submit() {
|
||||
this.$refs.uForm.validate(valid => {
|
||||
if (valid) {
|
||||
// console.log('${className}-save: ' + JSON.stringify(this.model));
|
||||
this.$u.api.${className}.save(this.model).then(res => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: res.message,
|
||||
showCancel: false,
|
||||
success: function () {
|
||||
if (res.result == 'true') {
|
||||
uni.setStorageSync('refreshList', true);
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.$u.toast('您填写的信息有误,请根据提示修正。');
|
||||
}
|
||||
});
|
||||
},
|
||||
cancel() {
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
|
||||
</style>
|
||||
<% %>
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>list.vue</name>
|
||||
<filePath>${frontDir}/pages/${urlPrefix}</filePath>
|
||||
<fileName>list.vue</fileName>
|
||||
<content><![CDATA[
|
||||
<template>
|
||||
<view class="wrap">
|
||||
<view class="search">
|
||||
<u-search v-model="keywords" @custom="search" @search="search"></u-search>
|
||||
</view>
|
||||
<scroll-view class="scroll-list" scroll-y="true" @scrolltolower="loadMore">
|
||||
<u-cell-group class="list" :border="false">
|
||||
<u-swipe-action :options="options" v-for="(item, index) in list" :key="item.id" :index="index" @click="optionsClick">
|
||||
<%
|
||||
var idParam = '', idParam2 = '';
|
||||
for(pk in table.pkList){
|
||||
idParam = idParam + (pk.attrName + '=\'+item.' + pk.attrName);
|
||||
idParam2 = idParam2 + ('item.' + pk.attrName);
|
||||
if (pkLP.index != table.pkList.~size) {
|
||||
idParam = idParam + '&';
|
||||
idParam2 = idParam2 + ' || ';
|
||||
}
|
||||
}
|
||||
for(c in table.columnList){
|
||||
if(c.isList == "1"){
|
||||
// 如果是树结构的字段,则自动忽略
|
||||
if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
|
||||
'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
|
||||
&& c.attrName != table.treeViewCodeAttrName
|
||||
&& c.attrName != table.treeViewNameAttrName){
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<u-cell-item :arrow="true" @click="navTo('form?${idParam})">
|
||||
<text slot="title">{{item.${c.attrName} || ${idParam2}}}</text>
|
||||
<text slot="label">创建者:{{item.createBy}} | 时间:{{item.createDate}}</text>
|
||||
</u-cell-item>
|
||||
<%
|
||||
break;
|
||||
}
|
||||
}
|
||||
%>
|
||||
</u-swipe-action>
|
||||
</u-cell-group>
|
||||
<view class="loadmore" @click="loadMore">
|
||||
<u-loadmore :status="loadStatus"></u-loadmore>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<view class="btn-plus" @click="navTo('form')">
|
||||
<u-icon name="plus-circle-fill" size="90" color="#3d87ff"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
keywords: '',
|
||||
query: {
|
||||
pageNo: 1,
|
||||
pageSize: 20
|
||||
},
|
||||
list: [],
|
||||
count: 0,
|
||||
loadStatus: 'loadmore',
|
||||
options: [
|
||||
{text: '上传', style: { background: '#414ee0'}},
|
||||
{text: '删除', style: { background: '#dd524d'}}
|
||||
]
|
||||
};
|
||||
},
|
||||
onLoad() {
|
||||
this.loadList();
|
||||
},
|
||||
onShow() {
|
||||
if (uni.getStorageSync('refreshList') === true){
|
||||
uni.removeStorageSync('refreshList');
|
||||
this.search('');
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
loadMore() {
|
||||
this.loadStatus = "loading";
|
||||
setTimeout(() => {
|
||||
this.query.pageNo += 1;
|
||||
this.loadList();
|
||||
}, 100);
|
||||
},
|
||||
loadList() {
|
||||
this.$u.api.${className}.list(this.query).then(res => {
|
||||
if (!res.list || res.list.length == 0){
|
||||
this.loadStatus = "nomore";
|
||||
return;
|
||||
}
|
||||
this.list = this.list.concat(res.list);
|
||||
this.count = res.count;
|
||||
this.query.pageNo = res.pageNo;
|
||||
this.query.pageSize = res.pageSize;
|
||||
this.loadStatus = "loadmore";
|
||||
});
|
||||
},
|
||||
optionsClick(rowIndex, btnIndex) {
|
||||
let self = this, row = self.list[rowIndex];
|
||||
if(btnIndex == 0) {
|
||||
this.navTo('formUpload?id='+row.id);
|
||||
} else if(btnIndex == 1) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确认要删除该数据吗?',
|
||||
showCancel: true,
|
||||
success: function (res2) {
|
||||
if (res2.confirm) {
|
||||
self.$u.api.${className}.delete({id: row.id}).then(res => {
|
||||
self.$u.toast(res.message);
|
||||
if (res.result == 'true'){
|
||||
self.list.splice(rowIndex, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
search(value) {
|
||||
this.list = [];
|
||||
this.query.pageNo = 0;
|
||||
this.query.testInput = value;
|
||||
this.loadList();
|
||||
},
|
||||
navTo(url) {
|
||||
uni.navigateTo({
|
||||
url: url
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
.btn-plus {
|
||||
position: absolute;
|
||||
bottom: 50rpx;
|
||||
right: 50rpx;
|
||||
z-index: 1;
|
||||
opacity: 0.6;
|
||||
}
|
||||
.btn-plus:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
</style>
|
||||
<% %>
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
No deletion without permission, or be held responsible to law. -->
|
||||
<template>
|
||||
<name>pages.json</name>
|
||||
<filePath>${frontDir}</filePath>
|
||||
<fileName>pages.${className}.json</fileName>
|
||||
<content><![CDATA[
|
||||
{
|
||||
"pages": [
|
||||
|
||||
/* 请将以下 ${functionName} 代码,复制到 pages.json 文件中 */
|
||||
|
||||
/* ${functionName} 开始 */
|
||||
{
|
||||
"path": "pages/${className}/form",
|
||||
"style": {
|
||||
"navigationBarTitleText": "新增编辑"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/${className}/list",
|
||||
"style": {
|
||||
"navigationBarTitleText": "${functionName}"
|
||||
}
|
||||
},
|
||||
/* ${functionName} 结束 */
|
||||
|
||||
],
|
||||
}
|
||||
]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -16,40 +16,40 @@
|
||||
</category>
|
||||
<category value="crud_vue" label="单表/主子表 (增删改查) vue">
|
||||
<template>category-ref:crud_java</template>
|
||||
<template>crud/vueApi.xml</template>
|
||||
<template>crud/vueList.xml</template>
|
||||
<template>crud/vueForm.xml</template>
|
||||
<template>crud/vueIndex.xml</template>
|
||||
<template>crud/vueImport.xml</template>
|
||||
<template>vue/vueApi.xml</template>
|
||||
<template>vue/vueList.xml</template>
|
||||
<template>vue/vueForm.xml</template>
|
||||
<template>vue/vueIndex.xml</template>
|
||||
<template>vue/vueImport.xml</template>
|
||||
<childTable>
|
||||
<template>category-ref:dao</template>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_only_vue" label="单表/主子表 (增删改查) 仅vue">
|
||||
<template>crud/vueApi.xml</template>
|
||||
<template>crud/vueList.xml</template>
|
||||
<template>crud/vueForm.xml</template>
|
||||
<template>crud/vueIndex.xml</template>
|
||||
<template>crud/vueImport.xml</template>
|
||||
<template>vue/vueApi.xml</template>
|
||||
<template>vue/vueList.xml</template>
|
||||
<template>vue/vueForm.xml</template>
|
||||
<template>vue/vueIndex.xml</template>
|
||||
<template>vue/vueImport.xml</template>
|
||||
<childTable>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_only_vue_modal" label="单表/主子表 (增删改查,弹窗表单) 仅vue ">
|
||||
<template>category-ref:crud_only_vue</template>
|
||||
<childTable>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_only_vue_modal_route" label="单表/主子表 (增删改查,路由表单) 仅vue ">
|
||||
<template>crud/vueApi.xml</template>
|
||||
<template>crud/vueList.xml</template>
|
||||
<template>crud/vueFormRoute.xml</template>
|
||||
<template>crud/vueIndex.xml</template>
|
||||
<template>crud/vueImport.xml</template>
|
||||
<template>vue/vueApi.xml</template>
|
||||
<template>vue/vueList.xml</template>
|
||||
<template>vue/vueFormRoute.xml</template>
|
||||
<template>vue/vueIndex.xml</template>
|
||||
<template>vue/vueImport.xml</template>
|
||||
<childTable>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_select" label="单表/主子表 (增删改查,含 listselect 选择页面) beetl">
|
||||
@@ -61,10 +61,10 @@
|
||||
</category>
|
||||
<category value="crud_select_vue" label="单表/主子表 (增删改查,含 listselect 选择页面) vue">
|
||||
<template>category-ref:crud_vue</template>
|
||||
<template>crud/vueSelect.xml</template>
|
||||
<template>vue/vueSelect.xml</template>
|
||||
<childTable>
|
||||
<template>category-ref:dao</template>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_java" label="单表/主子表 (增删改查,只生成 java/mapper) 仅后端 ">
|
||||
@@ -86,14 +86,14 @@
|
||||
</category>
|
||||
<category value="crud_cloud_vue" label="单表/主子表 (增删改查 Cloud,生成 api/client) Vue">
|
||||
<template>category-ref:crud_cloud_java</template>
|
||||
<template>crud/vueApi.xml</template>
|
||||
<template>crud/vueList.xml</template>
|
||||
<template>crud/vueIndex.xml</template>
|
||||
<template>crud/vueForm.xml</template>
|
||||
<template>crud/vueImport.xml</template>
|
||||
<template>vue/vueApi.xml</template>
|
||||
<template>vue/vueList.xml</template>
|
||||
<template>vue/vueIndex.xml</template>
|
||||
<template>vue/vueForm.xml</template>
|
||||
<template>vue/vueImport.xml</template>
|
||||
<childTable>
|
||||
<template>category-ref:dao_cloud</template>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_cloud_select" label="单表/主子表 (增删改查 Cloud,含 listselect 选择页面) beetl">
|
||||
@@ -105,10 +105,10 @@
|
||||
</category>
|
||||
<category value="crud_cloud_select_vue" label="单表/主子表 (增删改查 Cloud,含 listselect 选择页面) vue">
|
||||
<template>category-ref:crud_cloud_vue</template>
|
||||
<template>crud/vueSelect.xml</template>
|
||||
<template>vue/vueSelect.xml</template>
|
||||
<childTable>
|
||||
<template>category-ref:dao_cloud</template>
|
||||
<template>crud/vueFormChildList.xml</template>
|
||||
<template>vue/vueFormChildList.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_cloud_java" label="单表/主子表 (增删改查 Cloud,只生成 java/mapper) 仅后端">
|
||||
@@ -170,6 +170,12 @@
|
||||
<template>query/dao.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<category value="crud_only_app" label="手机端列表和表单(单表)App">
|
||||
<template>app/appApi.xml</template>
|
||||
<template>app/appList.xml</template>
|
||||
<template>app/appForm.xml</template>
|
||||
<template>app/appPages.xml</template>
|
||||
</category>
|
||||
</tplCategory>
|
||||
<!-- 属性类型 -->
|
||||
<attrType>
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Form.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewForm.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewForm.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Index.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewIndex.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewIndex.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}List.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewList.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewList.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Select.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewSelect.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewSelect.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Form.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewForm.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewForm.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Index.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewIndex.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewIndex.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}List.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewList.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewList.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -6,6 +6,6 @@
|
||||
<filePath>${baseDir}/${moduleName}/src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Select.html</fileName>
|
||||
<content><![CDATA[
|
||||
<% include('/templates/modules/gen/include/viewSelect.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/viewSelect.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -44,8 +44,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% include('/templates/modules/gen/include/formControl.html'){} %>
|
||||
<% include('/templates/modules/gen/include/formChildTable.html'){} %>
|
||||
<% include('/templates/modules/gen/view/formControl.html'){} %>
|
||||
<% include('/templates/modules/gen/view/formChildTable.html'){} %>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div class="row">
|
||||
@@ -58,6 +58,6 @@
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/formChildTableScript.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/formChildTableScript.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<% include('/templates/modules/gen/include/searchForm.html'){} %>
|
||||
<% include('/templates/modules/gen/view/searchForm.html'){} %>
|
||||
<table id="dataGrid"></table>
|
||||
<% if(!table.isTreeEntity){ %>
|
||||
<div id="dataGridPage"></div>
|
||||
@@ -33,6 +33,6 @@
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/dataGridScript.html'){} %>]]>
|
||||
<% include('/templates/modules/gen/view/dataGridScript.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -38,8 +38,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% include('/templates/modules/gen/include/formControl.html'){} %>
|
||||
<% include('/templates/modules/gen/include/formChildTable.html'){} %>
|
||||
<% include('/templates/modules/gen/view/formControl.html'){} %>
|
||||
<% include('/templates/modules/gen/view/formChildTable.html'){} %>
|
||||
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
|
||||
<div class="row taskComment hide">
|
||||
<div class="col-xs-12">
|
||||
@@ -78,7 +78,7 @@
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/formChildTableScript.html'){} %>
|
||||
<% include('/templates/modules/gen/view/formChildTableScript.html'){} %>
|
||||
<script>
|
||||
<% if(toBoolean(table.optionMap['isBpmForm'])){ %>
|
||||
// 业务实现草稿按钮
|
||||
@@ -27,7 +27,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<% include('/templates/modules/gen/include/searchForm.html'){} %>
|
||||
<% include('/templates/modules/gen/view/searchForm.html'){} %>
|
||||
<table id="dataGrid"></table>
|
||||
<% if(!table.isTreeEntity){ %>
|
||||
<div id="dataGridPage"></div>
|
||||
@@ -36,7 +36,7 @@
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/dataGridScript.html'){} %>
|
||||
<% include('/templates/modules/gen/view/dataGridScript.html'){} %>
|
||||
<% if(toBoolean(table.optionMap['isImportExport'])){ %>
|
||||
<script>
|
||||
$('#btnExport').click(function(){
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
<div class="box-body">
|
||||
<% include('/templates/modules/gen/include/searchForm.html'){} %>
|
||||
<% include('/templates/modules/gen/view/searchForm.html'){} %>
|
||||
<div class="row">
|
||||
<div class="col-xs-10 pr10">
|
||||
<table id="dataGrid"></table>
|
||||
@@ -18,4 +18,4 @@
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/dataGridSelectScript.html'){} %>
|
||||
<% include('/templates/modules/gen/view/dataGridSelectScript.html'){} %>
|
||||
@@ -18,7 +18,7 @@
|
||||
<i class="fa fa-sign-out"></i> ${text('退出登录')}</a>
|
||||
</li>
|
||||
<% var sysCodes = [];
|
||||
for(var role in user.roleList) {
|
||||
for(var role in roleList) {
|
||||
var codes = @StringUtils.splitComma(role.sysCodes);
|
||||
if (!isEmpty(codes)) {
|
||||
for (var code in codes) {
|
||||
@@ -47,12 +47,25 @@
|
||||
<% }else{ %>
|
||||
<li class="mt10"></li>
|
||||
<% } %>
|
||||
<% if(user.roleList.~size > 0){ %>
|
||||
<% if(postList.~size > 0){ %>
|
||||
<li class="divider"></li>
|
||||
<% var postCode = @ObjectUtils.toStringIgnoreNull(session.postCode, ''); %>
|
||||
<li class="dropdown-header mb5">${text('选择岗位')}:<% if(isNotBlank(postCode)){ %>
|
||||
<i class="fa fa-close pointer" title="${text('清除设置')}" onclick="location='${ctx}/switchPost'"></i><% } %></li>
|
||||
<% for(var post in postList){ %>
|
||||
<li>
|
||||
<a href="${ctx}/switchPost/${post.postCode}">
|
||||
<i class="fa fa-${postCode == post.postCode
|
||||
? 'check-' : ''}circle-o"></i> ${post.postName}
|
||||
</a>
|
||||
</li>
|
||||
<% } %>
|
||||
<% } else if(roleList.~size > 0){ %>
|
||||
<li class="divider"></li>
|
||||
<% var roleCode = @ObjectUtils.toStringIgnoreNull(session.roleCode, ''); %>
|
||||
<li class="dropdown-header mb5">${text('选择身份')}:<% if(isNotBlank(roleCode)){ %>
|
||||
<i class="fa fa-close pointer" title="${text('清除设置')}" onclick="location='${ctx}/switchRole'"></i><% } %></li>
|
||||
<% for(var role in user.roleList){ if(role.isShow == '1'){ %>
|
||||
<% for(var role in roleList){ if(role.isShow == '1'){ %>
|
||||
<li>
|
||||
<a href="${ctx}/switchRole/${role.roleCode}">
|
||||
<i class="fa fa-${roleCode == role.roleCode
|
||||
|
||||
@@ -66,14 +66,14 @@
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="fa fa-lock form-control-feedback"></span>
|
||||
<input type="password" autocomplete="off" id="fp_password" name="password"
|
||||
<input type="password" autocomplete="new-password" id="fp_password" name="password"
|
||||
class="form-control required" data-msg-required="请填写新密码."
|
||||
rangelength="3,50" data-msg-rangelength="新密码长度不能小于3并大于50个字符."
|
||||
placeholder="新密码" />
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="fa fa-lock form-control-feedback"></span>
|
||||
<input type="password" autocomplete="off" id="fp_confirmPassword" name="confirmPassword"
|
||||
<input type="password" autocomplete="new-password" id="fp_confirmPassword" name="confirmPassword"
|
||||
class="form-control required" data-msg-required="请填写确认新密码."
|
||||
rangelength="3,50" data-msg-rangelength="新密码长度不能小于3并大于50个字符."
|
||||
equalTo="#fp_password" data-msg-equalTo="新密码与确认新密码不同."
|
||||
|
||||
@@ -57,14 +57,14 @@
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="fa fa-lock form-control-feedback"></span>
|
||||
<input type="password" autocomplete="off" id="reg_password" name="password"
|
||||
<input type="password" autocomplete="new-password" id="reg_password" name="password"
|
||||
class="form-control required" data-msg-required="请填写登录密码."
|
||||
rangelength="3,50" data-msg-rangelength="登录密码长度不能小于3并大于50个字符."
|
||||
placeholder="登录密码" />
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<span class="fa fa-lock form-control-feedback"></span>
|
||||
<input type="password" autocomplete="off" id="reg_confirmPassword" name="confirmPassword"
|
||||
<input type="password" autocomplete="new-password" id="reg_confirmPassword" name="confirmPassword"
|
||||
class="form-control required" data-msg-required="请再填一次登录密码."
|
||||
rangelength="3,50" data-msg-rangelength="登录密码长度不能小于3并大于50个字符."
|
||||
equalTo="#reg_password" data-msg-equalTo="填写的密码与登录密码不同."
|
||||
|
||||
@@ -256,7 +256,7 @@ $("#empOfficeGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text("操作")}', name:'actions', width:80, sortable:false, fixed:true, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:80, align:"center", sortable:false, fixed:true, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#empOfficeGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
return actions.join('');
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3">${text('旧密码')}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="oldPassword" name="oldPassword" type="password" autocomplete="off" value="" maxlength="50" minlength="3" class="form-control required"/>
|
||||
<input id="oldPassword" name="oldPassword" type="password" autocomplete="new-password" value="" maxlength="50" minlength="3" class="form-control required"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -141,7 +141,7 @@
|
||||
<label class="control-label col-sm-3">${text('新密码')}:</label>
|
||||
<div class="col-sm-8">
|
||||
<div class="strength strength-loose">
|
||||
<input id="newPassword" name="newPassword" type="password" autocomplete="off" value="" maxlength="50" minlength="3" class="form-control required"/>
|
||||
<input id="newPassword" name="newPassword" type="password" autocomplete="new-password" value="" maxlength="50" minlength="3" class="form-control required"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -150,7 +150,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3">${text('确认新密码')}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="confirmNewPassword" name="confirmNewPassword" type="password" autocomplete="off" value="" maxlength="50" minlength="3" class="form-control required" equalTo="#newPassword"/>
|
||||
<input id="confirmNewPassword" name="confirmNewPassword" type="password" autocomplete="new-password" value="" maxlength="50" minlength="3" class="form-control required" equalTo="#newPassword"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -179,7 +179,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-3">${text('登录密码')}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="validPassword" name="validPassword" type="password" autocomplete="off" value="" maxlength="50" minlength="3" class="form-control required"/>
|
||||
<input id="validPassword" name="validPassword" type="password" autocomplete="new-password" value="" maxlength="50" minlength="3" class="form-control required"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-modules</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>JeeSite Modules</name>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* jQuery Validation Plugin v1.16.0
|
||||
/*
|
||||
* jQuery Validation Plugin v 1 - 16 - 0
|
||||
*
|
||||
* http://jqueryvalidation.org/
|
||||
*
|
||||
|
||||
@@ -110,6 +110,7 @@ $(function(){
|
||||
}
|
||||
}
|
||||
}
|
||||
data.push({ name: '__be', value: '1'}); // back-end 标识后端,可减少一些逻辑
|
||||
js.ajaxSubmit(action, data, function(data, status, xhr){
|
||||
if (data.isValidCodeLogin == true){
|
||||
$('#isValidCodeLogin').show();
|
||||
|
||||
@@ -280,4 +280,4 @@ null)z=c}else z=c;y=e.justify?m[0]+(H?-1:1)*(p+l):a.getX(F===0||F===b.length-1?c
|
||||
r._pos)E=r._attr.visibility,y=r.connX,z=r.connY,j=k?["M",y+(v[6]==="left"?5:-5),z,"C",y,z,2*v[2]-v[4],2*v[3]-v[5],v[2],v[3],"L",v[4],v[5]]:["M",y+(v[6]==="left"?5:-5),z,"L",v[2],v[3],"L",v[4],v[5]],i?(i.animate({d:j}),i.attr("visibility",E)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:E}).add(a.group);else if(i)b.connector=i.destroy()})}},verifyDataLabelOverflow:function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||
|
||||
80,f;d[0]!==null?e=s(b[2]-s(a[1],a[3]),c):(e=s(b[2]-a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=s(I(e,b[2]-s(a[0],a[2])),c):(e=s(I(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);e<b[2]?(b[2]=e,this.translate(b),n(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels()):f=!0;return f},placeDataLabels:function(){n(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},alignDataLabel:pa,
|
||||
drawTracker:F.prototype.drawTracker,drawLegendSymbol:G.prototype.drawLegendSymbol,getSymbol:pa};X=ha(Q,X);W.pie=X;r(Highcharts,{Axis:db,Chart:yb,Color:ra,Legend:eb,Pointer:xb,Point:Pa,Tick:Ma,Tooltip:wb,Renderer:Va,Series:Q,SVGElement:wa,SVGRenderer:Ha,arrayMin:Ja,arrayMax:va,charts:Ga,dateFormat:Xa,format:Ca,pathAnim:Ab,getOptions:function(){return M},hasBidiBug:Ub,isTouchDevice:Ob,numberFormat:Aa,seriesTypes:W,setOptions:function(a){M=x(M,a);Lb();return M},addEvent:J,removeEvent:aa,createElement:U,
|
||||
discardElement:Ta,css:K,each:n,extend:r,map:Na,merge:x,pick:o,splat:ja,extendClass:ha,pInt:C,wrap:mb,svg:Z,canvas:$,vml:!Z&&!$,product:"Highcharts",version:"3.0.6"})})();
|
||||
discardElement:Ta,css:K,each:n,extend:r,map:Na,merge:x,pick:o,splat:ja,extendClass:ha,pInt:C,wrap:mb,svg:Z,canvas:$,vml:!Z&&!$,product:"Highcharts",version:""})})();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// ==ClosureCompiler==
|
||||
// @compilation_level SIMPLE_OPTIMIZATIONS
|
||||
|
||||
/**
|
||||
* @license Highcharts JS v3.0.6 (2013-10-04)
|
||||
/*
|
||||
* @license Highcharts JS v 3 - 0 - 6 (2013-10-04)
|
||||
*
|
||||
* (c) 2009-2013 Torstein Hønsi
|
||||
*
|
||||
@@ -55,7 +55,8 @@ var UNDEFINED,
|
||||
noop = function () {},
|
||||
charts = [],
|
||||
PRODUCT = 'Highcharts',
|
||||
VERSION = '3.0.6',
|
||||
// VERSION = '3.0.6',
|
||||
VERSION = '',
|
||||
|
||||
// some constants for frequently used strings
|
||||
DIV = 'div',
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>3.2.10</version>
|
||||
<version>3.3.5</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>JeeSite Parent</name>
|
||||
@@ -26,7 +26,7 @@
|
||||
<commons-text.version>1.12.0</commons-text.version>
|
||||
<commons-email.version>1.6.0</commons-email.version>
|
||||
|
||||
<jackson-bom2.version>2.17.1</jackson-bom2.version>
|
||||
<jackson-bom2.version>2.18.1</jackson-bom2.version>
|
||||
<fastjson.version>2.0.51</fastjson.version>
|
||||
|
||||
<snakeyaml.version>2.2</snakeyaml.version>
|
||||
@@ -56,6 +56,7 @@
|
||||
<atomikos.version>6.0.0</atomikos.version>
|
||||
<druid.version>1.2.23</druid.version>
|
||||
<shiro.version>2.0.1</shiro.version>
|
||||
<quartz.version>2.4.0-rc3</quartz.version>
|
||||
<j2cache.version>2.8.0-release</j2cache.version>
|
||||
<swagger3.version>2.2.22</swagger3.version>
|
||||
<liquibase.version>4.20.0</liquibase.version>
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -5,7 +5,7 @@
|
||||
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>JeeSite</name>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-root</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>JeeSite Root</name>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -349,6 +349,9 @@ user:
|
||||
#
|
||||
# # 二级管理员的控制权限类型(1拥有的权限 2管理的权限,管理功能包括:用户管理、组织机构、公司管理等)(v4.1.5+)
|
||||
# adminCtrlPermi: 2
|
||||
#
|
||||
# # 是否启用岗位角色,开启后将 用户->岗位->关联角色,纳入菜单和权限管理
|
||||
# postRolePermi: false
|
||||
|
||||
# 多租户模式(SAAS模式)(专业版)
|
||||
useCorpModel: false
|
||||
@@ -501,6 +504,7 @@ job:
|
||||
# isClustered: true
|
||||
# dataSourceName: job
|
||||
# clusterCheckinInterval: 1000
|
||||
# driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
|
||||
# className: org.springframework.scheduling.quartz.LocalDataSourceJobStore
|
||||
|
||||
# # 调度日志
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<dependency>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-vue-dist</artifactId>
|
||||
<version>5.9.1-SNAPSHOT</version>
|
||||
<version>5.9.2-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
@@ -7,7 +7,7 @@ jdbc:
|
||||
# Mysql 数据库配置
|
||||
type: h2
|
||||
driver: org.h2.Driver
|
||||
url: jdbc:h2:/data/jeesite-db/jeesite580
|
||||
url: jdbc:h2:/data/jeesite-db/jeesite592
|
||||
username: jeesite
|
||||
password: jeesite
|
||||
testSql: SELECT 1
|
||||
|
||||
@@ -53,7 +53,7 @@ jdbc:
|
||||
# H2 数据库配置(请修改 /modules/core/pom.xml 文件,打开 H2 DB 依赖)
|
||||
type: h2
|
||||
driver: org.h2.Driver
|
||||
url: jdbc:h2:~/jeesite-db/jeesite580
|
||||
url: jdbc:h2:~/jeesite-db/jeesite592
|
||||
username: jeesite
|
||||
password: jeesite
|
||||
testSql: SELECT 1
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>jeesite-web-mini</artifactId>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<description>Web 服务,最小化加载,可以甚至关闭数据源</description>
|
||||
<description>Web 服务,最小化加载,是一个小的微服务</description>
|
||||
|
||||
<name>JeeSite Web</name>
|
||||
<url>http://jeesite.com</url>
|
||||
|
||||
15
web/README.md
Normal file
15
web/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## 介绍
|
||||
|
||||
jeesite-web 是 JeeSite 的 Web 启动入口项目工程,
|
||||
|
||||
可直接运行 Application.java 文件,启动一个 Web 服务。
|
||||
|
||||
启动 Web 服务后,可通过网页浏览器访问 JeeSite 系统。
|
||||
|
||||
## 文档
|
||||
|
||||
部署文档:http://jeesite.com/docs/install-deploy/
|
||||
|
||||
常见问题:http://jeesite.com/docs/faq/
|
||||
|
||||
更多文档:http://jeesite.com/docs
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>5.9.1.springboot3-SNAPSHOT</version>
|
||||
<version>5.9.2.springboot3-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -349,6 +349,9 @@ user:
|
||||
#
|
||||
# # 二级管理员的控制权限类型(1拥有的权限 2管理的权限,管理功能包括:用户管理、组织机构、公司管理等)(v4.1.5+)
|
||||
# adminCtrlPermi: 2
|
||||
#
|
||||
# # 是否启用岗位角色,开启后将 用户->岗位->关联角色,纳入菜单和权限管理
|
||||
# postRolePermi: false
|
||||
|
||||
# 多租户模式(SAAS模式)(专业版)
|
||||
useCorpModel: false
|
||||
@@ -501,6 +504,7 @@ job:
|
||||
# isClustered: true
|
||||
# dataSourceName: job
|
||||
# clusterCheckinInterval: 1000
|
||||
# driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
|
||||
# className: org.springframework.scheduling.quartz.LocalDataSourceJobStore
|
||||
|
||||
# # 调度日志
|
||||
|
||||
Reference in New Issue
Block a user