Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8629d2a055 | ||
|
|
ab2cfb1130 | ||
|
|
a15eaf244a | ||
|
|
10c55689a9 | ||
|
|
67c6f9e772 | ||
|
|
314cef3201 | ||
|
|
e663ae3207 | ||
|
|
564e470103 | ||
|
|
92f665d00e | ||
|
|
3a78e56815 | ||
|
|
2d7f66b1e0 | ||
|
|
1724e3ead1 | ||
|
|
c7a9ccf615 | ||
|
|
c21949d733 | ||
|
|
2de5300ae5 | ||
|
|
466b323114 | ||
|
|
19752502f1 | ||
|
|
2d02047e81 | ||
|
|
a36244316c | ||
|
|
c0ae3ad32f | ||
|
|
ac04d84c53 | ||
|
|
aef4837827 | ||
|
|
af17a4664c | ||
|
|
19da4dc3b5 | ||
|
|
32ba7bb0a4 | ||
|
|
b0f01baeb4 | ||
|
|
0b63e8ad6b | ||
|
|
125018df1d | ||
|
|
e6fe7b5420 | ||
|
|
da5c212536 | ||
|
|
43005b16b1 | ||
|
|
68ffd4e8f3 |
@@ -1,12 +1,12 @@
|
||||
## 引言
|
||||
|
||||
JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持集群,支持SAAS;支持多数据源。
|
||||
JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持集群,支持SAAS;支持多数据源;支持微服务。
|
||||
|
||||
JeeSite 快速开发平台的主要目的是能够让初级的研发人员快速的开发出复杂的业务功能(经典架构会的人多),让开发者注重专注业务,其余有平台来封装技术细节,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
|
||||
|
||||
JeeSite 自开源以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,JeeSite 依架构简单精良、易于扩展、大众思维的设计模式,深入开发者的内心,并得到一致好评,于[2016](http://www.oschina.net/project/top_cn_2016?sort=1)和[2017](http://www.oschina.net/project/top_cn_2017?sort=1)连续两年获得开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生作为入门教材,快速的去实践。
|
||||
JeeSite 自 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,JeeSite 依架构简单精良、易于扩展、大众思维的设计模式,深入开发者的内心,并得到一致好评,于[2016](http://www.oschina.net/project/top_cn_2016?sort=1)和[2017](http://www.oschina.net/project/top_cn_2017?sort=1)连续两年获得开源中国《最受欢迎中国开源软件》奖杯,期间也帮助了不少刚毕业的大学生作为入门教材,快速的去实践。
|
||||
|
||||
4.x的升级,作者结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集。
|
||||
V4 的升级,作者结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集。
|
||||
|
||||
### 4.x 新特性:<http://jeesite4.mydoc.io/?t=281645>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.1.2-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -150,6 +150,12 @@
|
||||
<artifactId>thumbnailator</artifactId>
|
||||
<version>${thumbnailator.version}</version>
|
||||
</dependency>
|
||||
<!-- 支持CMYK图片 -->
|
||||
<dependency>
|
||||
<groupId>com.twelvemonkeys.imageio</groupId>
|
||||
<artifactId>imageio-jpeg</artifactId>
|
||||
<version>${twelvemonkeys.version}</version>
|
||||
</dependency>
|
||||
<!-- 图片验证码生成 -->
|
||||
<dependency>
|
||||
<groupId>com.bladejava</groupId>
|
||||
|
||||
@@ -232,12 +232,12 @@ public class EncodeUtils {
|
||||
case '\"':
|
||||
sb.append(""");
|
||||
break;
|
||||
case '&':
|
||||
sb.append("&");
|
||||
break;
|
||||
case '#':
|
||||
sb.append("#");
|
||||
break;
|
||||
// case '&':
|
||||
// sb.append("&");
|
||||
// break;
|
||||
// case '#':
|
||||
// sb.append("#");
|
||||
// break;
|
||||
default:
|
||||
sb.append(c);
|
||||
break;
|
||||
|
||||
@@ -44,6 +44,7 @@ import net.sf.jmimemagic.MagicMatch;
|
||||
public class FileUtils extends org.apache.commons.io.FileUtils {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(FileUtils.class);
|
||||
private static MimetypesFileTypeMap mimetypesFileTypeMap;
|
||||
|
||||
/**
|
||||
* 复制单个文件,如果目标文件存在,则不覆盖
|
||||
@@ -654,7 +655,10 @@ public class FileUtils extends org.apache.commons.io.FileUtils {
|
||||
* @return 返回文件类型
|
||||
*/
|
||||
public static String getContentType(String fileName) {
|
||||
return new MimetypesFileTypeMap().getContentType(fileName);
|
||||
if (mimetypesFileTypeMap == null){
|
||||
mimetypesFileTypeMap = new MimetypesFileTypeMap();
|
||||
}
|
||||
return mimetypesFileTypeMap.getContentType(fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -224,7 +224,9 @@ public class PropertiesUtils {
|
||||
if (new File(classesLogPath).exists()){
|
||||
logPath = classesLogPath;
|
||||
}
|
||||
System.setProperty("logPath", FileUtils.path(logPath));
|
||||
if (StringUtils.isBlank(System.getProperty("logPath"))){
|
||||
System.setProperty("logPath", FileUtils.path(logPath));
|
||||
}
|
||||
return LoggerFactory.getLogger(PropertiesUtils.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -118,8 +118,8 @@ public class BinaryUploader {
|
||||
// 过滤掉gif图片,因为gif图片转换后会出现黑色背景的情况(gif基本也没有比较大的图片)。
|
||||
if (StringUtils.inString(FileUtils.getFileExtension(physicalPath),
|
||||
"png","jpg","jpeg","bmp","ico")){
|
||||
Builder<File> file = Thumbnails.of(physicalPath);
|
||||
BufferedImage bufferedImage = ImageIO.read(new File(physicalPath));
|
||||
Builder<BufferedImage> file = Thumbnails.of(bufferedImage);
|
||||
if (bufferedImage != null){
|
||||
if (bufferedImage.getWidth() <= width){
|
||||
file.width(bufferedImage.getWidth());
|
||||
|
||||
87
common/src/main/resources/META-INF/mime.types
Normal file
87
common/src/main/resources/META-INF/mime.types
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
text/html html htm shtml
|
||||
text/css css
|
||||
text/xml xml
|
||||
image/gif gif
|
||||
image/jpeg jpeg jpg
|
||||
application/javascript js
|
||||
application/atom+xml atom
|
||||
application/rss+xml rss
|
||||
|
||||
text/mathml mml
|
||||
text/plain txt
|
||||
text/vnd.sun.j2me.app-descriptor jad
|
||||
text/vnd.wap.wml wml
|
||||
text/x-component htc
|
||||
|
||||
image/png png
|
||||
image/tiff tif tiff
|
||||
image/vnd.wap.wbmp wbmp
|
||||
image/x-icon ico
|
||||
image/x-jng jng
|
||||
image/x-ms-bmp bmp
|
||||
image/svg+xml svg svgz
|
||||
image/webp webp
|
||||
|
||||
application/font-woff woff
|
||||
application/java-archive jar war ear
|
||||
application/json json
|
||||
application/mac-binhex40 hqx
|
||||
application/msword doc
|
||||
application/pdf pdf
|
||||
application/postscript ps eps ai
|
||||
application/rtf rtf
|
||||
application/vnd.apple.mpegurl m3u8
|
||||
application/vnd.ms-excel xls
|
||||
application/vnd.ms-fontobject eot
|
||||
application/vnd.ms-powerpoint ppt
|
||||
application/vnd.wap.wmlc wmlc
|
||||
application/vnd.google-earth.kml+xml kml
|
||||
application/vnd.google-earth.kmz kmz
|
||||
application/x-7z-compressed 7z
|
||||
application/x-cocoa cco
|
||||
application/x-java-archive-diff jardiff
|
||||
application/x-java-jnlp-file jnlp
|
||||
application/x-makeself run
|
||||
application/x-perl pl pm
|
||||
application/x-pilot prc pdb
|
||||
application/x-rar-compressed rar
|
||||
application/x-redhat-package-manager rpm
|
||||
application/x-sea sea
|
||||
application/x-shockwave-flash swf
|
||||
application/x-stuffit sit
|
||||
application/x-tcl tcl tk
|
||||
application/x-x509-ca-cert der pem crt
|
||||
application/x-xpinstall xpi
|
||||
application/xhtml+xml xhtml
|
||||
application/xspf+xml xspf
|
||||
application/zip zip
|
||||
|
||||
application/octet-stream bin exe dll
|
||||
application/octet-stream deb
|
||||
application/octet-stream dmg
|
||||
application/octet-stream iso img
|
||||
application/octet-stream msi msp msm
|
||||
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
|
||||
|
||||
audio/midi mid midi kar
|
||||
audio/mpeg mp3
|
||||
audio/ogg ogg
|
||||
audio/x-m4a m4a
|
||||
audio/x-realaudio ra
|
||||
|
||||
video/3gpp 3gpp 3gp
|
||||
video/mp2t ts
|
||||
video/mp4 mp4
|
||||
video/mpeg mpeg mpg
|
||||
video/quicktime mov
|
||||
video/webm webm
|
||||
video/x-flv flv
|
||||
video/x-m4v m4v
|
||||
video/x-mng mng
|
||||
video/x-ms-asf asx asf
|
||||
video/x-ms-wmv wmv
|
||||
video/x-msvideo avi
|
||||
@@ -1,249 +0,0 @@
|
||||
/*
|
||||
* Default Layout Theme
|
||||
*
|
||||
* Created for jquery.layout
|
||||
*
|
||||
* Copyright (c) 2010
|
||||
* Fabrizio Balliano (http://www.fabrizioballiano.net)
|
||||
* Kevin Dalman (http://allpro.net)
|
||||
*
|
||||
* Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html)
|
||||
* and MIT (http://www.opensource.org/licenses/mit-license.php) licenses.
|
||||
*
|
||||
* Last Updated: 2010-02-10
|
||||
* NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars
|
||||
*/
|
||||
|
||||
.ui-draggable-handle{-ms-touch-action:none;touch-action:none}
|
||||
|
||||
/*
|
||||
* DEFAULT FONT
|
||||
* Just to make demo-pages look better - not actually relevant to Layout!
|
||||
*/
|
||||
/* body { */
|
||||
/* font-family: Geneva, Arial, Helvetica, sans-serif; */
|
||||
/* font-size: 100%; */
|
||||
/* *font-size: 80%; */
|
||||
/* } */
|
||||
|
||||
/*
|
||||
* PANES & CONTENT-DIVs
|
||||
*/
|
||||
.ui-layout-pane { /* all 'panes' */
|
||||
/* background: #FFF; */
|
||||
/* border: 1px solid #eee; */
|
||||
/* padding: 10px; */
|
||||
overflow: auto;
|
||||
/* DO NOT add scrolling (or padding) to 'panes' that have a content-div,
|
||||
otherwise you may get double-scrollbars - on the pane AND on the content-div
|
||||
- use ui-layout-wrapper class if pane has a content-div
|
||||
- use ui-layout-container if pane has an inner-layout
|
||||
*/
|
||||
}
|
||||
/* (scrolling) content-div inside pane allows for fixed header(s) and/or footer(s) */
|
||||
.ui-layout-content {
|
||||
padding: 10px;
|
||||
position: relative; /* contain floated or positioned elements */
|
||||
overflow: auto; /* add scrolling to content-div */
|
||||
width: 100%;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* UTILITY CLASSES
|
||||
* Must come AFTER pane-class above so will override
|
||||
* These classes are NOT auto-generated and are NOT used by Layout
|
||||
*/
|
||||
.layout-child-container,
|
||||
.layout-content-container {
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.layout-child-container {
|
||||
border: 0; /* remove border because inner-layout-panes probably have borders */
|
||||
}
|
||||
.layout-scroll {
|
||||
overflow: auto;
|
||||
}
|
||||
.layout-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*
|
||||
* RESIZER-BARS
|
||||
*/
|
||||
.ui-layout-resizer { /* all 'resizer-bars' */
|
||||
background: #fafafa;
|
||||
border: 1px solid #eee;
|
||||
border-width: 0;
|
||||
}
|
||||
.ui-layout-resizer-drag { /* REAL resizer while resize in progress */
|
||||
}
|
||||
.ui-layout-resizer-hover { /* affects both open and closed states */
|
||||
}
|
||||
/* NOTE: It looks best when 'hover' and 'dragging' are set to the same color,
|
||||
otherwise color shifts while dragging when bar can't keep up with mouse */
|
||||
.ui-layout-resizer-open-hover , /* hover-color to 'resize' */
|
||||
.ui-layout-resizer-dragging { /* resizer beging 'dragging' */
|
||||
background: #fafafa;
|
||||
}
|
||||
.ui-layout-resizer-dragging { /* CLONED resizer being dragged */
|
||||
border: 1px solid #eee;
|
||||
}
|
||||
.ui-layout-resizer-north-dragging,
|
||||
.ui-layout-resizer-south-dragging {
|
||||
border-width: 1px 0;
|
||||
}
|
||||
.ui-layout-resizer-west-dragging,
|
||||
.ui-layout-resizer-east-dragging {
|
||||
border-width: 0 1px;
|
||||
}
|
||||
/* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */
|
||||
.ui-layout-resizer-dragging-limit { /* CLONED resizer at min or max size-limit */
|
||||
background: #E1A4A4; /* red */
|
||||
}
|
||||
|
||||
.ui-layout-resizer-closed-hover { /* hover-color to 'slide open' */
|
||||
background: #EBD5AA;
|
||||
}
|
||||
.ui-layout-resizer-sliding { /* resizer when pane is 'slid open' */
|
||||
/* opacity: .10; show only a slight shadow */
|
||||
/* filter: alpha(opacity=10); */
|
||||
}
|
||||
.ui-layout-resizer-sliding-hover { /* sliding resizer - hover */
|
||||
/* opacity: 1.00; on-hover, show the resizer-bar normally */
|
||||
/* filter: alpha(opacity=100); */
|
||||
}
|
||||
/* sliding resizer - add 'outside-border' to resizer on-hover
|
||||
* this sample illustrates how to target specific panes and states */
|
||||
.ui-layout-resizer-north-sliding-hover { border-bottom-width: 1px; }
|
||||
.ui-layout-resizer-south-sliding-hover { border-top-width: 1px; }
|
||||
.ui-layout-resizer-west-sliding-hover { border-right-width: 1px; }
|
||||
.ui-layout-resizer-east-sliding-hover { border-left-width: 1px; }
|
||||
|
||||
/*
|
||||
* TOGGLER-BUTTONS
|
||||
*/
|
||||
.ui-layout-toggler {
|
||||
border: 1px solid #eee; /* match pane-border */
|
||||
background-color: #eee;
|
||||
}
|
||||
.ui-layout-resizer-hover .ui-layout-toggler {
|
||||
opacity: 1.00;
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
.ui-layout-toggler-hover , /* need when NOT resizable */
|
||||
.ui-layout-resizer-hover .ui-layout-toggler-hover { /* need specificity when IS resizable */
|
||||
background-color: #FC6;
|
||||
opacity: 1.00;
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
.ui-layout-toggler-north ,
|
||||
.ui-layout-toggler-south {
|
||||
border-width: 0 1px; /* left/right borders */
|
||||
}
|
||||
.ui-layout-toggler-west ,
|
||||
.ui-layout-toggler-east {
|
||||
border-width: 1px 0; /* top/bottom borders */
|
||||
}
|
||||
/* hide the toggler-button when the pane is 'slid open' */
|
||||
.ui-layout-resizer-sliding .ui-layout-toggler {
|
||||
display: none;
|
||||
}
|
||||
/*
|
||||
* style the text we put INSIDE the togglers
|
||||
*/
|
||||
.ui-layout-toggler .ui-content {
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
line-height: 8px;
|
||||
width: 100%;
|
||||
padding-bottom: 0.35ex; /* to 'vertically center' text inside text-span */
|
||||
}
|
||||
.ui-layout-toggler .ui-content .fa{
|
||||
line-height: 8px;
|
||||
}
|
||||
|
||||
.ui-layout-toggler-north-closed .fa:before,
|
||||
.ui-layout-toggler-south-open .fa:before {
|
||||
content: "\f0d7";/* 下 */
|
||||
}
|
||||
.ui-layout-toggler-south-closed .fa:before,
|
||||
.ui-layout-toggler-north-open .fa:before {
|
||||
content: "\f0d8";/* 上 */
|
||||
}
|
||||
.ui-layout-toggler-west-closed .fa:before,
|
||||
.ui-layout-toggler-east-open .fa:before {
|
||||
content: "\f0da";/* 右 */
|
||||
}
|
||||
.ui-layout-toggler-east-closed .fa:before,
|
||||
.ui-layout-toggler-west-open .fa:before {
|
||||
content: "\f0d9";/* 左 */
|
||||
}
|
||||
|
||||
/*
|
||||
* PANE-MASKS
|
||||
* these styles are hard-coded on mask elems, but are also
|
||||
* included here as !important to ensure will overrides any generic styles
|
||||
*/
|
||||
.ui-layout-mask {
|
||||
border: none !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
overflow: hidden !important;
|
||||
position: absolute !important;
|
||||
opacity: 0 !important;
|
||||
filter: Alpha(Opacity="0") !important;
|
||||
}
|
||||
.ui-layout-mask-inside-pane { /* masks always inside pane EXCEPT when pane is an iframe */
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
}
|
||||
div.ui-layout-mask {} /* standard mask for iframes */
|
||||
iframe.ui-layout-mask {} /* extra mask for objects/applets */
|
||||
|
||||
/*
|
||||
* Default printing styles
|
||||
*/
|
||||
@media print {
|
||||
/*
|
||||
* Unless you want to print the layout as it appears onscreen,
|
||||
* these html/body styles are needed to allow the content to 'flow'
|
||||
*/
|
||||
html {
|
||||
height: auto !important;
|
||||
overflow: visible !important;
|
||||
}
|
||||
body.ui-layout-container {
|
||||
position: static !important;
|
||||
top: auto !important;
|
||||
bottom: auto !important;
|
||||
left: auto !important;
|
||||
right: auto !important;
|
||||
/* only IE6 has container width & height set by Layout */
|
||||
_width: auto !important;
|
||||
_height: auto !important;
|
||||
}
|
||||
.ui-layout-resizer, .ui-layout-toggler {
|
||||
display: none !important;
|
||||
}
|
||||
/*
|
||||
* Default pane print styles disables positioning, borders and backgrounds.
|
||||
* You can modify these styles however it suit your needs.
|
||||
*/
|
||||
.ui-layout-pane {
|
||||
border: none !important;
|
||||
background: transparent !important;
|
||||
position: relative !important;
|
||||
top: auto !important;
|
||||
bottom: auto !important;
|
||||
left: auto !important;
|
||||
right: auto !important;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
overflow: visible !important;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,12 +26,6 @@ public class CodeStatistic {
|
||||
System.out.println("Path: " + path);
|
||||
ArrayList<File> al = getFile(new File(path));
|
||||
for (File f : al) {
|
||||
if (!(f.getPath().contains("4.0\\jeesite\\")
|
||||
|| f.getPath().contains("\\devtools\\")
|
||||
|| f.getPath().contains("\\framework\\"))
|
||||
|| f.getPath().contains("\\target\\")){
|
||||
continue;
|
||||
}
|
||||
if (f.getName().matches(".*\\.java$")
|
||||
|| f.getName().matches(".*\\.html$")
|
||||
|| f.getName().matches(".*\\.js$")){
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
package com.jeesite.test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
|
||||
/**
|
||||
* Excel读写测试
|
||||
* @author ThinkGem
|
||||
* @version 2016年8月11日
|
||||
*/
|
||||
public class ExcelPoiTest {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
File file = new File("e:\\2016年调查表1.xls");
|
||||
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
|
||||
HSSFSheet sheet = wb.getSheetAt(2);
|
||||
sheet.getRow(5).getCell(3).setCellValue("山东有限公司");
|
||||
sheet.getRow(5).getCell(7).setCellValue("3799991911");
|
||||
sheet.getRow(8).getCell(3).setCellValue("174");
|
||||
sheet.getRow(8).getCell(7).setCellValue("私营股份有限公司");
|
||||
wb.write(new FileOutputStream("e:\\2016年调查表2.xls"));
|
||||
wb.close();
|
||||
System.out.println("success");
|
||||
}
|
||||
|
||||
}
|
||||
16
common/src/test/java/logback.xml
Normal file
16
common/src/test/java/logback.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration debug="false" scan="false">
|
||||
|
||||
<!-- Console log output -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} %-5level [%logger{50}] - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
|
||||
<root level="WARN">
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
@@ -2,5 +2,4 @@ eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding//src/test/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
||||
|
||||
@@ -3059,7 +3059,7 @@
|
||||
<args></args>
|
||||
<char_semantics>false</char_semantics>
|
||||
<description>推送成功后,如短信、微信、邮件没有回调,则自动设置为已读状态。有回调的,如PC通知,手机通知,设置为未读状态</description>
|
||||
<logical_name>读取状态(0未送达 1未读 2已读)</logical_name>
|
||||
<logical_name>读取状态(0未送达 1已读 2未读)</logical_name>
|
||||
<physical_name>read_status</physical_name>
|
||||
<type>character(n)</type>
|
||||
</word>
|
||||
|
||||
@@ -505,7 +505,7 @@ CREATE TABLE js_sys_msg_inner_record
|
||||
msg_inner_id varchar(64) NOT NULL COMMENT '所属消息',
|
||||
receive_user_code varchar(64) COMMENT '接受者用户编码',
|
||||
receive_user_name varchar(100) NOT NULL COMMENT '接受者用户姓名',
|
||||
read_status char(1) NOT NULL COMMENT '读取状态(0未送达 1未读 2已读)',
|
||||
read_status char(1) NOT NULL COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '阅读时间',
|
||||
is_star char(1) COMMENT '是否标星',
|
||||
PRIMARY KEY (id)
|
||||
@@ -535,7 +535,7 @@ CREATE TABLE js_sys_msg_push
|
||||
push_return_content text COMMENT '推送返回的内容信息',
|
||||
push_status char(1) COMMENT '推送状态(0未推送 1成功 2失败)',
|
||||
push_date datetime COMMENT '推送时间',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1未读 2已读)',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '读取时间',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '消息推送表';
|
||||
@@ -564,7 +564,7 @@ CREATE TABLE js_sys_msg_pushed
|
||||
push_return_msg_id varchar(200) COMMENT '推送返回消息编号',
|
||||
push_status char(1) COMMENT '推送状态(0未推送 1成功 2失败)',
|
||||
push_date datetime COMMENT '推送时间',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1未读 2已读)',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '读取时间',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '消息已推送表';
|
||||
|
||||
@@ -1268,7 +1268,7 @@ COMMENT ON COLUMN js_sys_msg_inner_record.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.msg_inner_id IS '所属消息';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_code IS '接受者用户编码';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_name IS '接受者用户姓名';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_date IS '阅读时间';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.is_star IS '是否标星';
|
||||
COMMENT ON TABLE js_sys_msg_push IS '消息推送表';
|
||||
@@ -1292,7 +1292,7 @@ COMMENT ON COLUMN js_sys_msg_push.push_return_msg_id IS '推送返回消息编
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_return_content IS '推送返回的内容信息';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_pushed IS '消息已推送表';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.id IS '编号';
|
||||
@@ -1315,7 +1315,7 @@ COMMENT ON COLUMN js_sys_msg_pushed.push_return_code IS '推送返回结果码';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_return_msg_id IS '推送返回消息编号';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_template IS '消息模板';
|
||||
COMMENT ON COLUMN js_sys_msg_template.id IS '编号';
|
||||
|
||||
@@ -1268,7 +1268,7 @@ COMMENT ON COLUMN js_sys_msg_inner_record.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.msg_inner_id IS '所属消息';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_code IS '接受者用户编码';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_name IS '接受者用户姓名';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_date IS '阅读时间';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.is_star IS '是否标星';
|
||||
COMMENT ON TABLE js_sys_msg_push IS '消息推送表';
|
||||
@@ -1292,7 +1292,7 @@ COMMENT ON COLUMN js_sys_msg_push.push_return_msg_id IS '推送返回消息编
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_return_content IS '推送返回的内容信息';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_pushed IS '消息已推送表';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.id IS '编号';
|
||||
@@ -1315,7 +1315,7 @@ COMMENT ON COLUMN js_sys_msg_pushed.push_return_code IS '推送返回结果码';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_return_msg_id IS '推送返回消息编号';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_template IS '消息模板';
|
||||
COMMENT ON COLUMN js_sys_msg_template.id IS '编号';
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.1.2-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -85,41 +85,25 @@
|
||||
</organization>
|
||||
|
||||
<repositories>
|
||||
|
||||
<repository>
|
||||
<id>aliyun-repos</id>
|
||||
<name>Aliyun Repository</name>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sonatype-repos</id>
|
||||
<name>Sonatype Repository</name>
|
||||
<url>https://oss.sonatype.org/content/groups/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<repository>
|
||||
<id>sonatype-repos-s</id>
|
||||
<name>Sonatype Repository</name>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
<releases><enabled>false</enabled></releases>
|
||||
<snapshots><enabled>true</enabled></snapshots>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
|
||||
<pluginRepository>
|
||||
<id>aliyun-repos</id>
|
||||
<name>Aliyun Repository</name>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
</pluginRepository>
|
||||
|
||||
</pluginRepositories>
|
||||
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
///**
|
||||
// * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
// */
|
||||
//package com.jeesite.modules.sys.service.impl;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
//import com.jeesite.modules.file.entity.FileEntity;
|
||||
//import com.jeesite.modules.file.service.FileEntityServiceSupport;
|
||||
//
|
||||
///**
|
||||
// * 文件实体实现类
|
||||
// * @author ThinkGem
|
||||
// * @version 2018年10月13日
|
||||
// */
|
||||
//@Service
|
||||
//public class FileEntityServiceImpl extends FileEntityServiceSupport {
|
||||
//
|
||||
// public FileEntityServiceImpl() {
|
||||
// this.entityClass = FileEntity.class;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public FileEntity get(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileEntity get ");
|
||||
// return super.get(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public FileEntity getByMd5(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileEntity getByMd5 ");
|
||||
// return super.get(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<FileEntity> findList(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileEntity findList ");
|
||||
// return super.findList(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void save(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileEntity save ");
|
||||
// super.save(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void updateStatus(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileEntity updateStatus ");
|
||||
// super.updateStatus(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void delete(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileEntity delete ");
|
||||
// super.delete(fileEntity);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -1,53 +0,0 @@
|
||||
///**
|
||||
// * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
// */
|
||||
//package com.jeesite.modules.sys.service.impl;
|
||||
//
|
||||
//import javax.servlet.http.HttpServletRequest;
|
||||
//import javax.servlet.http.HttpServletResponse;
|
||||
//
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
//import com.jeesite.modules.file.entity.FileEntity;
|
||||
//import com.jeesite.modules.file.entity.FileUpload;
|
||||
//import com.jeesite.modules.file.service.FileUploadServiceExtendSupport;
|
||||
//
|
||||
///**
|
||||
// * 文件上传扩展实现类
|
||||
// * @author ThinkGem
|
||||
// * @version 2018年10月13日
|
||||
// */
|
||||
//@Service
|
||||
//public class FileUploadServiceExtendImpl extends FileUploadServiceExtendSupport {
|
||||
//
|
||||
// @Override
|
||||
// public boolean fileExists(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileupload fileExists ");
|
||||
// return super.fileExists(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void uploadFile(FileEntity fileEntity) {
|
||||
// System.out.println("============= fileupload uploadFile ");
|
||||
// super.uploadFile(fileEntity);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void saveUploadFile(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileupload saveUploadFile ");
|
||||
// super.saveUploadFile(fileUpload);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String getFileUrl(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileupload getFileUrl ");
|
||||
// return super.getFileUrl(fileUpload);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String downFile(FileUpload fileUpload, HttpServletRequest request, HttpServletResponse response) {
|
||||
// System.out.println("============= fileupload downFile ");
|
||||
// return super.downFile(fileUpload, request, response);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -1,55 +0,0 @@
|
||||
///**
|
||||
// * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
// */
|
||||
//package com.jeesite.modules.sys.service.impl;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
//import com.jeesite.modules.file.entity.FileUpload;
|
||||
//import com.jeesite.modules.file.service.FileUploadServiceSupport;
|
||||
//
|
||||
///**
|
||||
// * 文件上传实现类
|
||||
// * @author ThinkGem
|
||||
// * @version 2018年10月13日
|
||||
// */
|
||||
//@Service
|
||||
//public class FileUploadServiceImpl extends FileUploadServiceSupport {
|
||||
//
|
||||
// public FileUploadServiceImpl() {
|
||||
// this.entityClass = FileUpload.class;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public FileUpload get(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileUpload get ");
|
||||
// return super.get(fileUpload);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<FileUpload> findList(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileUpload findList ");
|
||||
// return super.findList(fileUpload);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void save(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileUpload save ");
|
||||
// super.save(fileUpload);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void updateStatus(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileUpload updateStatus ");
|
||||
// super.updateStatus(fileUpload);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void delete(FileUpload fileUpload) {
|
||||
// System.out.println("============= fileUpload delete ");
|
||||
// super.delete(fileUpload);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -1,49 +0,0 @@
|
||||
///**
|
||||
// * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
// */
|
||||
//package com.jeesite.modules.sys.service.impl;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
//import com.jeesite.modules.sys.entity.Menu;
|
||||
//import com.jeesite.modules.sys.service.MenuServiceSupport;
|
||||
//
|
||||
///**
|
||||
// * 菜单服务扩展实现类
|
||||
// * @author ThinkGem
|
||||
// * @version 2018年10月13日
|
||||
// */
|
||||
//@Service
|
||||
//public class MenuServiceImpl extends MenuServiceSupport {
|
||||
//
|
||||
// public MenuServiceImpl() {
|
||||
// this.entityClass = Menu.class;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Menu get(Menu menu) {
|
||||
// System.out.println("============= menu get ");
|
||||
// return super.get(menu);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<Menu> findList(Menu menu) {
|
||||
// System.out.println("============= menu findList ");
|
||||
// return super.findList(menu);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<Menu> findByRoleCode(Menu menu) {
|
||||
// System.out.println("============= menu findByRoleCode ");
|
||||
// return super.findByRoleCode(menu);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<Menu> findByUserCode(Menu menu) {
|
||||
// System.out.println("============= menu findByUserCode ");
|
||||
// return super.findByUserCode(menu);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -1,43 +0,0 @@
|
||||
///**
|
||||
// * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
// */
|
||||
//package com.jeesite.modules.sys.service.impl;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
//import com.jeesite.modules.sys.entity.Role;
|
||||
//import com.jeesite.modules.sys.service.RoleServiceSupport;
|
||||
//
|
||||
///**
|
||||
// * 角色服务扩展实现类
|
||||
// * @author ThinkGem
|
||||
// * @version 2018年10月13日
|
||||
// */
|
||||
//@Service
|
||||
//public class RoleServiceImpl extends RoleServiceSupport {
|
||||
//
|
||||
// public RoleServiceImpl() {
|
||||
// this.entityClass = Role.class;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Role get(Role role) {
|
||||
// System.out.println("============= role get ");
|
||||
// return super.get(role);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<Role> findList(Role role) {
|
||||
// System.out.println("============= role findList ");
|
||||
// return super.findList(role);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<Role> findListByUserCode(Role role) {
|
||||
// System.out.println("============= role findListByUserCode ");
|
||||
// return super.findListByUserCode(role);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -1,49 +0,0 @@
|
||||
///**
|
||||
// * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
// */
|
||||
//package com.jeesite.modules.sys.service.impl;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
//import com.jeesite.modules.sys.entity.User;
|
||||
//import com.jeesite.modules.sys.service.UserServiceSupport;
|
||||
//
|
||||
///**
|
||||
// * 用户服务扩展实现类
|
||||
// * @author ThinkGem
|
||||
// * @version 2018年10月13日
|
||||
// */
|
||||
//@Service
|
||||
//public class UserServiceImpl extends UserServiceSupport {
|
||||
//
|
||||
// public UserServiceImpl() {
|
||||
// this.entityClass = User.class;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public User get(User user) {
|
||||
// System.out.println("============= user get ");
|
||||
// return super.get(user);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public User getByLoginCode(User user) {
|
||||
// System.out.println("============= user getByLoginCode ");
|
||||
// return super.getByLoginCode(user);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public User getByUserTypeAndRefCode(User user) {
|
||||
// System.out.println("============= user getByUserTypeAndRefCode ");
|
||||
// return super.getByUserTypeAndRefCode(user);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public List<User> findList(User user) {
|
||||
// System.out.println("============= user findList ");
|
||||
// return super.findList(user);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -7,7 +7,6 @@ import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
@@ -25,7 +24,6 @@ import com.jeesite.modules.sys.utils.EmpUtils;
|
||||
* @author ThinkGem
|
||||
* @version 2016-4-23
|
||||
*/
|
||||
@Service
|
||||
@Transactional(readOnly=true)
|
||||
public class CompanyServiceSupport extends TreeService<CompanyDao, Company>
|
||||
implements CompanyService{
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.List;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@@ -34,7 +33,6 @@ import com.jeesite.modules.sys.utils.UserUtils;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@Service
|
||||
@Transactional(readOnly=true)
|
||||
public class EmpUserServiceSupport extends CrudService<EmpUserDao, EmpUser>
|
||||
implements EmpUserService{
|
||||
|
||||
@@ -6,7 +6,6 @@ package com.jeesite.modules.sys.service.support;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
@@ -23,7 +22,6 @@ import com.jeesite.modules.sys.service.EmployeeService;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@Service
|
||||
@Transactional(readOnly=true)
|
||||
public class EmployeeServiceSupport extends CrudService<EmployeeDao, Employee>
|
||||
implements EmployeeService{
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
*/
|
||||
package com.jeesite.modules.sys.service.support;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -18,7 +17,6 @@ import com.jeesite.modules.sys.service.LogService;
|
||||
* @author ThinkGem
|
||||
* @version 2014-05-16
|
||||
*/
|
||||
@Service
|
||||
@Transactional(readOnly=true)
|
||||
public class LogServiceSupport extends CrudService<LogDao, Log>
|
||||
implements LogService{
|
||||
|
||||
@@ -6,7 +6,6 @@ package com.jeesite.modules.sys.service.support;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.service.TreeService;
|
||||
@@ -21,7 +20,6 @@ import com.jeesite.modules.sys.utils.EmpUtils;
|
||||
* @author ThinkGem
|
||||
* @version 2016-4-23
|
||||
*/
|
||||
@Service
|
||||
@Transactional(readOnly=true)
|
||||
public class OfficeServiceSupport extends TreeService<OfficeDao, Office>
|
||||
implements OfficeService{
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
*/
|
||||
package com.jeesite.modules.sys.service.support;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jeesite.common.entity.Page;
|
||||
@@ -17,7 +16,6 @@ import com.jeesite.modules.sys.service.PostService;
|
||||
* @author ThinkGem
|
||||
* @version 2017-03-25
|
||||
*/
|
||||
@Service
|
||||
@Transactional(readOnly=true)
|
||||
public class PostServiceSupport extends CrudService<PostDao, Post>
|
||||
implements PostService{
|
||||
|
||||
@@ -334,14 +334,11 @@ public class LoginController extends BaseController{
|
||||
@RequiresPermissions("user")
|
||||
@RequestMapping(value = "switch/{sysCode}")
|
||||
public String switchSys(@PathVariable String sysCode) {
|
||||
LoginInfo principal = UserUtils.getLoginInfo();
|
||||
User user = UserUtils.get(principal.getId());
|
||||
User user = UserUtils.getUser();
|
||||
if (user.isSuperAdmin() && StringUtils.isNotBlank(sysCode)){
|
||||
if (!StringUtils.equals(principal.getParam("sysCode"), sysCode)){
|
||||
principal.setParam("sysCode", sysCode);
|
||||
UserUtils.removeCacheByKeyPrefix(UserUtils.CACHE_MENU_LIST);
|
||||
UserUtils.removeCache(UserUtils.CACHE_AUTH_INFO);
|
||||
}
|
||||
Session session = UserUtils.getSession();
|
||||
session.setAttribute("sysCode", sysCode);
|
||||
UserUtils.removeCache(UserUtils.CACHE_AUTH_INFO+"_"+session.getId());
|
||||
}
|
||||
return REDIRECT + adminPath + "/index";
|
||||
}
|
||||
|
||||
@@ -148,15 +148,17 @@ public class OnlineController extends BaseController{
|
||||
public String tickOut(String sessionId) {
|
||||
Session session = sessionDAO.readSession(sessionId);
|
||||
if (session != null){
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> onlineTickOutMap = (Map<String, String>)CacheUtils.get("onlineTickOutMap");
|
||||
Map<String, String> onlineTickOutMap = CacheUtils.get("onlineTickOutMap");
|
||||
if (onlineTickOutMap == null){
|
||||
onlineTickOutMap = MapUtils.newConcurrentMap();
|
||||
}
|
||||
PrincipalCollection pc = (PrincipalCollection)session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
|
||||
LoginInfo principal = (pc != null ? (LoginInfo)pc.getPrimaryPrincipal() : null);
|
||||
if (principal != null){
|
||||
onlineTickOutMap.put(principal.getId()+"_"+principal.getParam("deviceType", "PC"), StringUtils.EMPTY);
|
||||
Object pc = session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
|
||||
if (pc != null && pc instanceof PrincipalCollection){
|
||||
LoginInfo loginInfo = (LoginInfo)((PrincipalCollection)pc).getPrimaryPrincipal();
|
||||
if (loginInfo != null){
|
||||
String key = loginInfo.getId()+"_"+loginInfo.getParam("deviceType", "PC");
|
||||
onlineTickOutMap.put(key, StringUtils.EMPTY);
|
||||
}
|
||||
}
|
||||
CacheUtils.put("onlineTickOutMap", onlineTickOutMap);
|
||||
sessionDAO.delete(session);
|
||||
|
||||
@@ -30,7 +30,9 @@ import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.mybatis.mapper.query.QueryType;
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import com.jeesite.modules.sys.entity.EmpUser;
|
||||
import com.jeesite.modules.sys.entity.Role;
|
||||
import com.jeesite.modules.sys.entity.User;
|
||||
import com.jeesite.modules.sys.service.RoleService;
|
||||
import com.jeesite.modules.sys.service.UserService;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
|
||||
@@ -46,6 +48,8 @@ public class CorpAdminController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
|
||||
@ModelAttribute
|
||||
public User get(String userCode, boolean isNewRecord) {
|
||||
@@ -84,6 +88,10 @@ public class CorpAdminController extends BaseController {
|
||||
user.setCorpName_(StringUtils.EMPTY); // 租户名称
|
||||
}
|
||||
}
|
||||
// 获取当前用户所拥有的角色
|
||||
Role role = new Role();
|
||||
role.setUserCode(user.getUserCode());
|
||||
model.addAttribute("roleList", roleService.findListByUserCode(role));
|
||||
// 操作类型:addCorp: 添加租户; addAdmin: 添加管理员; edit: 编辑
|
||||
model.addAttribute("op", op);
|
||||
model.addAttribute("user", user);
|
||||
@@ -135,6 +143,7 @@ public class CorpAdminController extends BaseController {
|
||||
}
|
||||
}
|
||||
userService.save(user);
|
||||
userService.saveAuth(user);
|
||||
// 如果修改的是当前用户,则清除当前用户缓存
|
||||
if (user.getUserCode().equals(UserUtils.getUser().getUserCode())) {
|
||||
UserUtils.clearCache();
|
||||
|
||||
@@ -25,22 +25,24 @@ jdbc:
|
||||
# 最大连接数
|
||||
maxActive: 20
|
||||
|
||||
# 获取连接等待超时时间,单位毫秒(4.0.6+)
|
||||
# 获取连接等待超时时间,单位毫秒(1分钟)(4.0.6+)
|
||||
maxWait: 60000
|
||||
|
||||
# 从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个。(4.0.6+)
|
||||
# 从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个(4.0.6+)
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
|
||||
# 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒(4.0.6+)
|
||||
# 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒(1分钟)(4.0.6+)
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
|
||||
# 一个连接在池中最小生存的时间,单位毫秒(4.0.6+)
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
# 一个连接在池中最小空闲的时间,单位毫秒(20分钟)(4.0.6+)
|
||||
minEvictableIdleTimeMillis: 1200000
|
||||
# 一个连接在池中最大空闲的时间,单位毫秒(30分钟)(4.1.2+)
|
||||
maxEvictableIdleTimeMillis: 1800000
|
||||
|
||||
# 配置是否自动回收超时连接,超时时间,单位秒 (4.0.6+)
|
||||
# 是否自动回收泄露的连接和超时时间,单位秒(35分钟)(4.0.6+)
|
||||
removeAbandoned: true
|
||||
removeAbandonedTimeout: 1800
|
||||
removeAbandonedTimeout: 2100
|
||||
|
||||
# JTA 分布式事务(v4.0.4+)
|
||||
jta:
|
||||
@@ -98,11 +100,11 @@ user:
|
||||
# 系统管理员角色编号(客户方管理员使用的角色)
|
||||
corpAdminRoleCode: corpAdmin
|
||||
|
||||
# 用户类型配置信息(employee员工,member会员,btype往来单位,persion个人,expert专家,...)
|
||||
# JSON格式说明:{"用户类型":{"dao":"Dao的Bean名称","loginView":"登录视图","indexView":"主页框架面视图"}}
|
||||
# 用户类型配置信息(employee员工,member会员,btype往来单位,persion个人,expert专家,...),JSON 格式说明如下:
|
||||
# {"用户类型":{"dao":"Dao的Bean名称","loginView":"登录页面视图","indexView":"主框架页面视图,支持 redirect: 前缀"}}
|
||||
userTypeMap: >
|
||||
{
|
||||
"employee":{"dao":"employeeDao","loginView":"","indexView":""},
|
||||
"employee":{"dao":"employeeDao","loginView":"","indexView":"modules/sys/sysIndex"},
|
||||
"member":{"dao":"memberDao","loginView":"","indexView":"modules/sys/sysIndexMember"},
|
||||
"btype":{"dao":"btypeInfoDao","loginView":"","indexView":"modules/sys/sysIndexBtype"},
|
||||
"persion":{"dao":"persionDao","loginView":"","indexView":"modules/sys/sysIndexPersion"},
|
||||
@@ -310,6 +312,9 @@ shiro:
|
||||
# 是否允许账号多地登录,如果设置为false,同一个设备类型的其它地点登录的相同账号被踢下线
|
||||
isAllowMultiAddrLogin: true
|
||||
|
||||
# 是否允许多账号多设备登录,如果设置为false,其它地点登录的相同账号全部登录设备将被踢下线
|
||||
isAllowMultiDeviceLogin: true
|
||||
|
||||
# 是否允许刷新主框架页,如果设置为false,刷新主页将导致重新登录。如安全性比较高的,如银行个人首页不允许刷新。
|
||||
isAllowRefreshIndex: true
|
||||
|
||||
@@ -474,17 +479,33 @@ file:
|
||||
# 上传单个文件最大字节(500M),在这之上还有 > Tomcat限制 > Nginx限制,等,此设置会覆盖 spring.http.multipart.maxFileSize 设置
|
||||
maxFileSize: 500*1024*1024
|
||||
|
||||
#设置允许上传的文件后缀
|
||||
# 设置允许上传的文件后缀
|
||||
imageAllowSuffixes: .gif,.bmp,.jpeg,.jpg,.ico,.png,.tif,.tiff,
|
||||
mediaAllowSuffixes: .flv,.swf,.mkv,webm,.mid,.mov,.mp3,.mp4,.m4v,.mpc,.mpeg,.mpg,.swf,.wav,.wma,.wmv,.avi,.rm,.rmi,.rmvb,.aiff,.asf,.ogg,.ogv,
|
||||
fileAllowSuffixes: .doc,.docx,.rtf,.xls,.xlsx,.csv,.ppt,.pptx,.pdf,.vsd,.txt,.md,.xml,.rar,.zip,7z,.tar,.tgz,.jar,.gz,.gzip,.bz2,.cab,.iso,.ipa,.apk,
|
||||
|
||||
#允许上传的文件内容类型(图片、word、excel、ppt)防止修改后缀恶意上传文件(默认不启用验证)
|
||||
# 允许上传的文件内容类型(图片、word、excel、ppt)防止修改后缀恶意上传文件(默认不启用验证)
|
||||
# allowContentTypes: image/jpeg,image/gif,image/bmp,image/png,image/x-png,
|
||||
# application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,
|
||||
# application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
|
||||
# application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
|
||||
# 是否用文件流方式下载(支持断点续传)
|
||||
isFileStreamDown: true
|
||||
|
||||
# 视频转码
|
||||
video:
|
||||
|
||||
# 视频格式转换 ffmpeg.exe 所放的路径
|
||||
ffmpegFile: d:/tools/video/ffmpeg-4.9/bin/ffmpeg.exe
|
||||
# ffmpegFile: d:/tools/video/libav-10.6-win64/bin/avconv.exe
|
||||
|
||||
# 视频格式转换 mencoder.exe 所放的路径
|
||||
mencoderFile: d:/tools/video/mencoder-4.9/mencoder.exe
|
||||
|
||||
# 将mp4视频的元数据信息转到视频第一帧
|
||||
qtFaststartFile: d:/tools/video/qt-faststart/qt-faststart.exe
|
||||
|
||||
#======================================#
|
||||
#========== Message settings ==========#
|
||||
#======================================#
|
||||
@@ -539,18 +560,3 @@ msg:
|
||||
oauth:
|
||||
redirectUri: http://demo.jeesite.com/js
|
||||
|
||||
#======================================#
|
||||
#========== Video settings ============#
|
||||
#======================================#
|
||||
|
||||
video:
|
||||
|
||||
# 视频格式转换 ffmpeg.exe 所放的路径
|
||||
ffmpegFile: d:/tools/video/ffmpeg-4.9/bin/ffmpeg.exe
|
||||
# ffmpegFile: d:/tools/video/libav-10.6-win64/bin/avconv.exe
|
||||
|
||||
# 视频格式转换 mencoder.exe 所放的路径
|
||||
mencoderFile: d:/tools/video/mencoder-4.9/mencoder.exe
|
||||
|
||||
# 将mp4视频的元数据信息转到视频第一帧
|
||||
qtFaststartFile: d:/tools/video/qt-faststart/qt-faststart.exe
|
||||
|
||||
@@ -11,7 +11,10 @@
|
||||
<!-- <logger name="org.springframework.jdbc" level="DEBUG" /> -->
|
||||
<logger name="org.mybatis.spring.transaction" level="DEBUG" />
|
||||
<logger name="com.atomikos.icatch.config.UserTransactionServiceImp" level="ERROR" />
|
||||
<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="org.springframework.transaction.support.TransactionSynchronizationManager" level="TRACE" /> -->
|
||||
|
||||
<logger name="springfox.documentation.spring.web.readers.parameter.ParameterDataTypeReader" level="ERROR" />
|
||||
<!-- <logger name="io.swagger" level="DEBUG" /> -->
|
||||
@@ -20,6 +23,7 @@
|
||||
<logger name="com.jeesite" level="DEBUG" />
|
||||
<logger name="com.jeesite.common.i18n" level="INFO" />
|
||||
<logger name="com.jeesite.common.shiro" level="INFO" />
|
||||
<logger name="com.jeesite.common.cache" level="INFO" />
|
||||
<logger name="com.jeesite.common.j2cache" level="INFO" />
|
||||
<logger name="com.jeesite.common.mybatis" level="INFO" />
|
||||
<logger name="com.jeesite.common.mybatis.mapper" level="DEBUG" />
|
||||
|
||||
@@ -7,4 +7,5 @@
|
||||
4.0.6
|
||||
4.0.7
|
||||
4.1.0
|
||||
4.1.1
|
||||
4.1.1
|
||||
4.1.2
|
||||
@@ -60,7 +60,7 @@ sys.error.returnButton=返回上一页
|
||||
|
||||
# =========== 文件上传相关 ===========
|
||||
|
||||
sys.file.uploadFileIsEmpty=没有需要上传的文件!
|
||||
sys.file.uploadFileIsEmpty=没有找到上传的文件!
|
||||
sys.file.uploadValidNotBlank=文件校验码和文件名不能为空!
|
||||
sys.file.uploadValidImage=只能上传图片({0})
|
||||
sys.file.uploadValidVideo=只能上传视频({0})
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
# transactions.properties not found - looking for jta.properties in classpath...
|
||||
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
|
||||
com.atomikos.icatch.max_actives=-1
|
||||
com.atomikos.icatch.enable_logging=false
|
||||
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;
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<config>
|
||||
<!-- 模板分类 -->
|
||||
<tplCategory>
|
||||
@@ -15,34 +16,29 @@
|
||||
<category value="treeGrid" label="树表/树结构表(增删改查)">
|
||||
<template>category-ref:crud</template>
|
||||
</category>
|
||||
<category value="service" label="业务层和持久层(增删改查)">
|
||||
<category value="service" label="业务层和持久层(不含控制器和视图)">
|
||||
<template>category-ref:dao</template>
|
||||
<template>crud/service.xml</template>
|
||||
</category>
|
||||
<category value="dao" label="仅持久层(dao/mapper/entity)">
|
||||
<template>crud/dao.xml</template>
|
||||
<template>crud/mapper.xml</template>
|
||||
<template>crud/entity.xml</template>
|
||||
<template>crud/dao.xml</template>
|
||||
</category>
|
||||
<category value="query" label="仅查询功能(不含增删改)">
|
||||
<template>crud/mapper.xml</template>
|
||||
<template>crud/entity.xml</template>
|
||||
<template>query/dao.xml</template>
|
||||
<template>query/service.xml</template>
|
||||
<template>query/controller.xml</template>
|
||||
<template>query/viewList.xml</template>
|
||||
<template>query/viewForm.xml</template>
|
||||
<childTable>
|
||||
<template>crud/mapper.xml</template>
|
||||
<template>crud/entity.xml</template>
|
||||
<template>query/dao.xml</template>
|
||||
</childTable>
|
||||
</category>
|
||||
<!-- <category value="tableForm" label="单表 - 表格表单(增删改查)"> -->
|
||||
<!-- <template>category-ref:dao</template> -->
|
||||
<!-- <template>crud/service.xml</template> -->
|
||||
<!-- <template>crud/controller.xml</template> -->
|
||||
<!-- <template>crud/viewList.xml</template> -->
|
||||
<!-- <template>crud/viewTableForm.xml</template> -->
|
||||
<!-- </category> -->
|
||||
<!-- <category value="treeTableAndList" name="树结构表(左树右表)"> -->
|
||||
<!-- <template>category-ref:dao</template> -->
|
||||
<!-- </category> -->
|
||||
<!-- <category value="query" label="仅查询功能"> -->
|
||||
<!-- <template>query/entity.xml</template> -->
|
||||
<!-- <template>query/mapper.xml</template> -->
|
||||
<!-- <template>query/dao.xml</template> -->
|
||||
<!-- <template>query/service.xml</template> -->
|
||||
<!-- <template>query/controller.xml</template> -->
|
||||
<!-- <template>query/viewList.xml</template> -->
|
||||
<!-- <template>query/viewView.xml</template> -->
|
||||
<!-- </category> -->
|
||||
</tplCategory>
|
||||
<!-- 属性类型 -->
|
||||
<attrType>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>controller</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/web/${subModuleName}</filePath>
|
||||
@@ -89,7 +90,7 @@ public class ${ClassName}Controller extends BaseController {
|
||||
${className}.setParentCode(${ClassName}.ROOT_CODE);
|
||||
}
|
||||
<% for(c in table.columnList){ %>
|
||||
<% if(c.isQuery == "1" && !c.isTreeEntityColumn){ %>
|
||||
<% if(c.isQuery == "1" && !c.isTreeEntityColumn && c.attrName != 'status'){ %>
|
||||
if (StringUtils.isNotBlank(${className}.${c.attrNameForGetMethod})){
|
||||
${className}.setParentCode(null);
|
||||
}
|
||||
@@ -101,7 +102,7 @@ public class ${ClassName}Controller extends BaseController {
|
||||
<% }else{ %>
|
||||
public Page<${ClassName}> listData(${ClassName} ${className}, HttpServletRequest request, HttpServletResponse response) {
|
||||
${className}.setPage(new Page<>(request, response));
|
||||
Page<${ClassName}> page = ${className}Service.findPage(${className});
|
||||
Page<${ClassName}> page = ${className}Service.findPage(${className});
|
||||
return page;
|
||||
}
|
||||
<% } %>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>dao</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/dao/${subModuleName}</filePath>
|
||||
@@ -18,7 +19,7 @@ import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subMod
|
||||
* @author ${functionAuthor}
|
||||
* @version ${functionVersion}
|
||||
*/
|
||||
@MyBatisDao<% if(table.dataSourceName != ''){ %>(dataSourceName="${table.dataSourceName}")<% } %>
|
||||
@MyBatisDao<% if(isNotBlank(table.dataSourceName)){ %>(dataSourceName="${table.dataSourceName}")<% } %>
|
||||
public interface ${ClassName}Dao extends ${table.isTreeEntity?'Tree':'Crud'}Dao<${ClassName}> {
|
||||
|
||||
}]]>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>entity</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/entity/${subModuleName}</filePath>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>mapper</name>
|
||||
<filePath>src/main/resources/mappings/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>service</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/service/${subModuleName}</filePath>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>viewForm</name>
|
||||
<filePath>src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>viewList</name>
|
||||
<filePath>src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
@@ -33,113 +34,6 @@
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
<%
|
||||
// 是否是第一列
|
||||
var firstColumn = true;
|
||||
// 获取到唯一ID的url参数字符串
|
||||
var idParam = '';
|
||||
for(pk in table.pkList){
|
||||
idParam = idParam + (pkLP.index!=1?'&':'') + pk.attrName + '=\'+row.' + pk.attrName + '+\'';
|
||||
}
|
||||
// 生成树表的节点列
|
||||
if(table.isTreeEntity){
|
||||
for(c in table.columnList){
|
||||
if(c.attrName == table.treeViewNameAttrName){
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', index:'a.${c.columnName}', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.${table.treeViewCodeAttrName}+' ) '+'<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" data-title="\${text('编辑${functionNameSimple}')}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
<%
|
||||
firstColumn = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
<%
|
||||
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){
|
||||
}
|
||||
// 如果是首列,则输出带链接的列
|
||||
else if(firstColumn){
|
||||
firstColumn = false;
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" data-title="\${text('编辑${functionNameSimple}')}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
<% }else if(c.showType == 'select' || c.showType == 'select_multiple' || c.showType == 'checkbox' || c.showType == 'radio'){ %>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(\${@DictUtils.getDictListJson('${c.optionMap['dictType']}')}, val, '\${text('未知')}', true);
|
||||
}},
|
||||
<% }else if(c.showType == "userselect" || c.showType == "officeselect" || c.showType == "areaselect"){ %>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName2}', index:'a.${c.columnName}', width:150, align:"center"},
|
||||
<% }else{
|
||||
if (@StringUtils.inString(c.attrType, 'java.util.Date', 'Integer', 'Long')){
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"center"},
|
||||
<%
|
||||
}else if (@StringUtils.inString(c.attrType, 'Float', 'Double')){
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"right", formatter: function(val, obj, row, act){
|
||||
return js.formatNumber(val, 2, false, ''); // 数值类型格式化 (原始数值, 小数位数, 是否千分位, 默认值,金额情况下设置0.00);
|
||||
}},
|
||||
<%
|
||||
}else {
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"left"},
|
||||
<%
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
{header:'\${text('操作')}', name:'actions', width:120, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
\<% if(hasPermi('${permissionPrefix}:edit')){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" title="\${text('编辑${functionNameSimple}')}"><i class="fa fa-pencil"></i></a> ');
|
||||
<% if(@ObjectUtils.toBoolean(table.optionMap['isHaveDisableEnable'])){ %>
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/disable?${idParam}" class="btnList" title="\${text('停用${functionNameSimple}')}" data-confirm="\${text('确认要停用该${functionNameSimple}吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/enable?${idParam}" class="btnList" title="\${text('启用${functionNameSimple}')}" data-confirm="\${text('确认要启用该${functionNameSimple}吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
<% } %>
|
||||
<% if(@ObjectUtils.toBoolean(table.optionMap['isHaveDelete'])){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/delete?${idParam}" class="btnList" title="\${text('删除${functionNameSimple}')}" data-confirm="\${text('确认要删除该${functionNameSimple}<% if(table.isTreeEntity){ %>及所有子${functionNameSimple}<% } %>吗?')}"<% if(table.isTreeEntity){ %> data-deltreenode="'+row.id+'"<% } %>><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
<% if(table.isTreeEntity){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/form?parentCode='+row.id+'" class="btnList" title="\${text('新增下级${functionNameSimple}')}"><i class="fa fa-plus-square"></i></a> ');
|
||||
<% } %>
|
||||
\<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
<% if(table.isTreeEntity){ %>
|
||||
treeGrid: true, // 启用树结构表格
|
||||
defaultExpandLevel: 0, // 默认展开的层次
|
||||
expandNodeClearPostData: '<%
|
||||
for(c in table.columnList){
|
||||
if(c.isQuery == "1" && !c.isTreeEntityColumn){
|
||||
print(c.attrName + ',');
|
||||
}
|
||||
} %>', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据)
|
||||
<% } %>
|
||||
// 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
</script>]]>
|
||||
<% include('/templates/modules/gen/include/dataGridScript.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,114 @@
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
<%
|
||||
// 是否是第一列
|
||||
var firstColumn = true;
|
||||
// 获取到唯一ID的url参数字符串
|
||||
var idParam = '';
|
||||
for(pk in table.pkList){
|
||||
idParam = idParam + (pkLP.index!=1?'&':'') + pk.attrName + '=\'+row.' + pk.attrName + '+\'';
|
||||
}
|
||||
// 是否仅查询模板
|
||||
var isQueryTpl = table.tplCategory == 'query';
|
||||
// 生成树表的节点列
|
||||
if(table.isTreeEntity){
|
||||
for(c in table.columnList){
|
||||
if(c.attrName == table.treeViewNameAttrName){
|
||||
%>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', index:'a.${c.columnName}', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.${table.treeViewCodeAttrName}+' ) '+'<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" data-title="\${text("${isQueryTpl?'查看':'编辑'}${functionNameSimple}")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
<%
|
||||
firstColumn = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
<%
|
||||
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){
|
||||
}
|
||||
// 如果是首列,则输出带链接的列
|
||||
else if(firstColumn){
|
||||
firstColumn = false;
|
||||
%>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" data-title="\${text("${isQueryTpl?'查看':'编辑'}${functionNameSimple}")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
<% }else if(c.showType == 'select' || c.showType == 'select_multiple' || c.showType == 'checkbox' || c.showType == 'radio'){ %>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(\${@DictUtils.getDictListJson('${c.optionMap['dictType']}')}, val, '\${text("未知")}', true);
|
||||
}},
|
||||
<% }else if(c.showType == "userselect" || c.showType == "officeselect" || c.showType == "areaselect"){ %>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName2}', index:'a.${c.columnName}', width:150, align:"center"},
|
||||
<% }else{
|
||||
if (@StringUtils.inString(c.attrType, 'java.util.Date', 'Integer', 'Long')){
|
||||
%>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"center"},
|
||||
<%
|
||||
}else if (@StringUtils.inString(c.attrType, 'Float', 'Double')){
|
||||
%>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"right", formatter: function(val, obj, row, act){
|
||||
return js.formatNumber(val, 2, false, ''); // 数值类型格式化 (原始数值, 小数位数, 是否千分位, 默认值,金额情况下设置0.00);
|
||||
}},
|
||||
<%
|
||||
}else {
|
||||
%>
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', index:'a.${c.columnName}', width:150, align:"left"},
|
||||
<%
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
{header:'\${text("操作")}', name:'actions', width:120, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(isQueryTpl){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" title="\${text("查看${functionNameSimple}")}"><i class="fa fa-file-text-o"></i></a> ');
|
||||
<% }else{ %>
|
||||
\<% if(hasPermi('${permissionPrefix}:edit')){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/form?${idParam}" class="btnList" title="\${text("编辑${functionNameSimple}")}"><i class="fa fa-pencil"></i></a> ');
|
||||
<% if(@ObjectUtils.toBoolean(table.optionMap['isHaveDisableEnable'])){ %>
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/disable?${idParam}" class="btnList" title="\${text("停用${functionNameSimple}")}" data-confirm="\${text("确认要停用该${functionNameSimple}吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/enable?${idParam}" class="btnList" title="\${text("启用${functionNameSimple}")}" data-confirm="\${text("确认要启用该${functionNameSimple}吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
<% } %>
|
||||
<% if(@ObjectUtils.toBoolean(table.optionMap['isHaveDelete'])){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/delete?${idParam}" class="btnList" title="\${text("删除${functionNameSimple}")}" data-confirm="\${text("确认要删除该${functionNameSimple}<% if(table.isTreeEntity){ %>及所有子${functionNameSimple}<% } %>吗?")}"<% if(table.isTreeEntity){ %> data-deltreenode="'+row.id+'"<% } %>><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
<% if(table.isTreeEntity){ %>
|
||||
actions.push('<a href="\${ctx}/${urlPrefix}/form?parentCode='+row.id+'" class="btnList" title="\${text("新增下级${functionNameSimple}")}"><i class="fa fa-plus-square"></i></a> ');
|
||||
<% } %>
|
||||
\<% } %>
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
<% if(table.isTreeEntity){ %>
|
||||
treeGrid: true, // 启用树结构表格
|
||||
defaultExpandLevel: 0, // 默认展开的层次
|
||||
expandNodeClearPostData: '<%
|
||||
for(c in table.columnList){
|
||||
if(c.isQuery == "1" && !c.isTreeEntityColumn && c.attrName != 'status'){
|
||||
print(c.attrName + ',');
|
||||
}
|
||||
} %>', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据)
|
||||
<% } %>
|
||||
// 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -5,9 +5,11 @@
|
||||
<h4 class="form-unit">\${text('${child.comments}')}</h4>
|
||||
<div class="ml10 mr10">
|
||||
<table id="${@StringUtils.uncap(child.className)}DataGrid"></table>
|
||||
<% if(table.tplCategory != 'query'){ %>
|
||||
\<% if (hasPermi('${permissionPrefix}:edit')){ %>
|
||||
<a href="#" id="${@StringUtils.uncap(child.className)}DataGridAddRowBtn" class="btn btn-primary btn-sm mt10 mb10"><i class="fa fa-plus"></i> \${text('增行')}</a>
|
||||
\<% } %>
|
||||
<% } %>
|
||||
</div>
|
||||
<%
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ for (c in child.columnList){
|
||||
// 如果是外键,父级的主键
|
||||
if(child.parentExists && child.parentTableFkName == c.columnName){
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', editable:true, hidden:true},
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', editable:true, hidden:true},
|
||||
<%
|
||||
continue;
|
||||
}
|
||||
@@ -49,15 +49,15 @@ for (c in child.columnList){
|
||||
}
|
||||
// 输出列字段
|
||||
if(c.showType == 'input'){
|
||||
%> {header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', width:150, editable:true, edittype:'text', editoptions:{${attrs}'class':'form-control${cssClass}'}},
|
||||
%> {header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', width:150, editable:true, edittype:'text', editoptions:{${attrs}'class':'form-control${cssClass}'}},
|
||||
<%
|
||||
}else if(c.showType == 'textarea'){
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', width:150, editable:true, edittype:'textarea', editoptions:{${attrs}'class':'form-control${cssClass}', 'rows':'1'}},
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', width:150, editable:true, edittype:'textarea', editoptions:{${attrs}'class':'form-control${cssClass}', 'rows':'1'}},
|
||||
<%
|
||||
}else if(c.showType == 'select' || c.showType == 'select_multiple' || c.showType == 'radio' || c.showType == 'checkbox'){
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', width:100,
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', width:100,
|
||||
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){
|
||||
@@ -69,18 +69,18 @@ for (c in child.columnList){
|
||||
}else if(c.showType == 'date' || c.showType == 'datetime'){
|
||||
var isTime = (c.showType == 'datetime');
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.attrName}', width:150,
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.attrName}', width:150,
|
||||
formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s',newformat:'Y-m-d${isTime?' H:i:s':''}'},
|
||||
editable:true, edittype:'text', editoptions:{'class':'form-control Wdate${cssClass}', 'readonly':'true',
|
||||
dataInit: function(element){ $(element).on('focus', function(){
|
||||
WdatePicker({dateFmt:'yyyy-MM-dd${isTime?' HH:mm':''}',isShowClear:false});
|
||||
WdatePicker({dateFmt:'yyyy-MM-dd${isTime?' HH:mm':''}',isShowClear:${c.isRequired != '1'}});
|
||||
});
|
||||
}}
|
||||
},
|
||||
<%
|
||||
}else if(c.showType == 'userselect'){
|
||||
treeselectExists = true; %>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.simpleAttrName}', width:150,
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.simpleAttrName}', width:150,
|
||||
formatter: function(val, obj, row, act){
|
||||
return js.val(row, '${c.attrName}')+'|'+js.val(row, '${c.attrName2}');
|
||||
}, editable: true, edittype: "custom", editoptions: {
|
||||
@@ -98,7 +98,7 @@ for (c in child.columnList){
|
||||
}else if(c.showType == 'officeselect'){
|
||||
treeselectExists = true;
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.simpleAttrName}', width:150,
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.simpleAttrName}', width:150,
|
||||
formatter: function(val, obj, row, act){
|
||||
return js.val(row, '${c.attrName}')+'|'+js.val(row, '${c.attrName2}');
|
||||
}, editable: true, edittype: "custom", editoptions: {
|
||||
@@ -116,7 +116,7 @@ for (c in child.columnList){
|
||||
}else if(c.showType == 'areaselect'){
|
||||
treeselectExists = true;
|
||||
%>
|
||||
{header:'\${text('${c.columnLabel}')}', name:'${c.simpleAttrName}', width:150,
|
||||
{header:'\${text("${c.columnLabel}")}', name:'${c.simpleAttrName}', width:150,
|
||||
formatter: function(val, obj, row, act){
|
||||
return js.val(row, '${c.attrName}')+'|'+js.val(row, '${c.attrName2}');
|
||||
}, editable: true, edittype: "custom", editoptions: {
|
||||
@@ -133,16 +133,20 @@ for (c in child.columnList){
|
||||
<%
|
||||
}
|
||||
}
|
||||
if (table.tplCategory != 'query'){
|
||||
%>
|
||||
{header:'\${text('操作')}', name:'actions', width:80, sortable:false, fixed:true, formatter: function(val, obj, row, act){
|
||||
{header:'\${text("操作")}', name:'actions', width:80, sortable:false, fixed:true, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
if (val == 'new'){
|
||||
actions.push('<a href="#" onclick="js.confirm(\'\${text('你确认要删除这条数据吗?')}\', function(){$(\'#${@StringUtils.uncap(child.className)}DataGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="#" onclick="js.confirm(\'\${text("你确认要删除这条数据吗?")}\', function(){$(\'#${@StringUtils.uncap(child.className)}DataGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
}else{
|
||||
actions.push('<a href="#" onclick="js.confirm(\'\${text('你确认要删除这条数据吗?')}\', function(){$(\'#${@StringUtils.uncap(child.className)}DataGrid\').dataGrid(\'setRowData\',\''+obj.rowId+'\',null,{display:\'none\'})});$(\'#'+obj.rowId+'_status\').val(\''+Global.STATUS_DELETE+'\');return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="#" onclick="js.confirm(\'\${text("你确认要删除这条数据吗?")}\', function(){$(\'#${@StringUtils.uncap(child.className)}DataGrid\').dataGrid(\'setRowData\',\''+obj.rowId+'\',null,{display:\'none\'})});$(\'#'+obj.rowId+'_status\').val(\''+Global.STATUS_DELETE+'\');return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
}
|
||||
return actions.join('');
|
||||
}, editoptions: {defaultValue: 'new'}}
|
||||
<% }else{ %>
|
||||
{header:'\${text("操作")}', name:'actions', hidden: true}
|
||||
<% } %>
|
||||
],
|
||||
|
||||
// 编辑表格参数
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
var isTime = (c.showType == 'datetime');
|
||||
%>
|
||||
<${'#'}form:input path="${c.attrName}" readonly="true" maxlength="20" class="form-control Wdate${cssClass}"
|
||||
dataFormat="date${isTime?'time':''}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd${isTime?' HH:mm':''}',isShowClear:false});"/>
|
||||
dataFormat="date${isTime?'time':''}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd${isTime?' HH:mm':''}',isShowClear:${c.isRequired != '1'}});"/>
|
||||
<%
|
||||
} else if (c.showType == 'userselect') {
|
||||
%>
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>controller</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/web/${subModuleName}</filePath>
|
||||
<fileName>${ClassName}Controller.java</fileName>
|
||||
<content><![CDATA[
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
package ${packageName}.${moduleName}.web${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
<% if(table.isTreeEntity){ %>
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
<% }else{ %>
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
<% } %>
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import com.jeesite.common.config.Global;
|
||||
<% if(table.isTreeEntity){ %>
|
||||
import com.jeesite.common.collect.ListUtils;
|
||||
import com.jeesite.common.collect.MapUtils;
|
||||
import com.jeesite.common.lang.StringUtils;
|
||||
import com.jeesite.common.idgen.IdGen;
|
||||
import com.jeesite.modules.sys.utils.UserUtils;
|
||||
<% }else{ %>
|
||||
import com.jeesite.common.entity.Page;
|
||||
<% } %>
|
||||
import com.jeesite.common.web.BaseController;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Service;
|
||||
|
||||
/**
|
||||
* ${functionName}Controller
|
||||
* @author ${functionAuthor}
|
||||
* @version ${functionVersion}
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping(value = "\${adminPath}/${urlPrefix}")
|
||||
public class ${ClassName}Controller extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private ${ClassName}Service ${className}Service;
|
||||
|
||||
/**
|
||||
* 获取数据
|
||||
*/
|
||||
@ModelAttribute
|
||||
public ${ClassName} get(<% for(pk in table.pkList){ %>${pkLP.index!=1?', ':''}${pk.simpleAttrType} ${pk.simpleAttrName}<% } %>, boolean isNewRecord) {
|
||||
<% if (table.pkList.~size == 1){ %>
|
||||
return ${className}Service.get(<% for(pk in table.pkList){ %>${pkLP.index!=1?', ':''}${pk.simpleAttrName}<% } %>, isNewRecord);
|
||||
<% }else{ %>
|
||||
return ${className}Service.get(new Class<?>[]{<% for(pk in table.pkList){ %>${pkLP.index!=1?', ':''}${pk.simpleAttrType}.class<% } %>},
|
||||
new Object[]{<% for(pk in table.pkList){ %>${pkLP.index!=1?', ':''}${pk.simpleAttrName}<% } %>}, isNewRecord);
|
||||
<% } %>
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*/
|
||||
@RequiresPermissions("${permissionPrefix}:view")
|
||||
@RequestMapping(value = {"list", ""})
|
||||
public String list(${ClassName} ${className}, Model model) {
|
||||
model.addAttribute("${className}", ${className});
|
||||
return "${lastPackageName}/${viewPrefix}List";
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询列表数据
|
||||
*/
|
||||
@RequiresPermissions("${permissionPrefix}:view")
|
||||
@RequestMapping(value = "listData")
|
||||
@ResponseBody
|
||||
<% if(table.isTreeEntity){ %>
|
||||
public List<${ClassName}> listData(${ClassName} ${className}) {
|
||||
if (StringUtils.isBlank(${className}.getParentCode())) {
|
||||
${className}.setParentCode(${ClassName}.ROOT_CODE);
|
||||
}
|
||||
<% for(c in table.columnList){ %>
|
||||
<% if(c.isQuery == "1" && !c.isTreeEntityColumn && c.attrName != 'status'){ %>
|
||||
if (StringUtils.isNotBlank(${className}.${c.attrNameForGetMethod})){
|
||||
${className}.setParentCode(null);
|
||||
}
|
||||
<% } %>
|
||||
<% } %>
|
||||
List<${ClassName}> list = ${className}Service.findList(${className});
|
||||
return list;
|
||||
}
|
||||
<% }else{ %>
|
||||
public Page<${ClassName}> listData(${ClassName} ${className}, HttpServletRequest request, HttpServletResponse response) {
|
||||
${className}.setPage(new Page<>(request, response));
|
||||
Page<${ClassName}> page = ${className}Service.findPage(${className});
|
||||
return page;
|
||||
}
|
||||
<% } %>
|
||||
|
||||
/**
|
||||
* 查看编辑表单
|
||||
*/
|
||||
@RequiresPermissions("${permissionPrefix}:view")
|
||||
@RequestMapping(value = "form")
|
||||
public String form(${ClassName} ${className}, Model model) {
|
||||
model.addAttribute("${className}", ${className});
|
||||
return "${lastPackageName}/${viewPrefix}Form";
|
||||
}
|
||||
<% if(table.isTreeEntity){ %>
|
||||
|
||||
/**
|
||||
* 获取树结构数据
|
||||
* @param excludeCode 排除的Code
|
||||
* @param isShowCode 是否显示编码(true or 1:显示在左侧;2:显示在右侧;false or null:不显示)
|
||||
* @return
|
||||
*/
|
||||
@RequiresPermissions("${permissionPrefix}:view")
|
||||
@RequestMapping(value = "treeData")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> treeData(String excludeCode, String isShowCode) {
|
||||
List<Map<String, Object>> mapList = ListUtils.newArrayList();
|
||||
List<${ClassName}> list = ${className}Service.findList(new ${ClassName}());
|
||||
for (int i=0; i<list.size(); i++){
|
||||
${ClassName} e = list.get(i);
|
||||
// 过滤非正常的数据
|
||||
if (!${ClassName}.STATUS_NORMAL.equals(e.getStatus())){
|
||||
continue;
|
||||
}
|
||||
// 过滤被排除的编码(包括所有子级)
|
||||
if (StringUtils.isNotBlank(excludeCode)){
|
||||
if (e.getId().equals(excludeCode)){
|
||||
continue;
|
||||
}
|
||||
if (e.getParentCodes().contains("," + excludeCode + ",")){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Map<String, Object> map = MapUtils.newHashMap();
|
||||
map.put("id", e.getId());
|
||||
map.put("pId", e.getParentCode());
|
||||
map.put("name", StringUtils.getTreeNodeName(isShowCode, e.get${@StringUtils.cap(table.treeViewCodeAttrName)}(), e.get${@StringUtils.cap(table.treeViewNameAttrName)}()));
|
||||
mapList.add(map);
|
||||
}
|
||||
return mapList;
|
||||
}
|
||||
<% } %>
|
||||
|
||||
}]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>dao</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/dao/${subModuleName}</filePath>
|
||||
<fileName>${ClassName}Dao.java</fileName>
|
||||
<content><![CDATA[
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
package ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
|
||||
import com.jeesite.common.dao.${table.isTreeEntity?'Tree':'Query'}Dao;
|
||||
import com.jeesite.common.mybatis.annotation.MyBatisDao;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
|
||||
/**
|
||||
* ${functionName}DAO接口
|
||||
* @author ${functionAuthor}
|
||||
* @version ${functionVersion}
|
||||
*/
|
||||
@MyBatisDao<% if(isNotBlank(table.dataSourceName)){ %>(dataSourceName="${table.dataSourceName}")<% } %>
|
||||
public interface ${ClassName}Dao extends ${table.isTreeEntity?'Tree':'Query'}Dao<${ClassName}> {
|
||||
|
||||
}]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>service</name>
|
||||
<filePath>src/main/java/${packageName}/${moduleName}/service/${subModuleName}</filePath>
|
||||
<fileName>${ClassName}Service.java</fileName>
|
||||
<content><![CDATA[
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
*/
|
||||
package ${packageName}.${moduleName}.service${isNotEmpty(subModuleName)?'.'+subModuleName:''};
|
||||
|
||||
import java.util.List;
|
||||
|
||||
<% if (table.childList.~size > 0){ %>
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
<% } %>
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.jeesite.common.entity.Page;
|
||||
import com.jeesite.common.service.${table.isTreeEntity?'Tree':'Query'}Service;
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${ClassName}Dao;
|
||||
<% for (child in table.childList){ %>
|
||||
import ${packageName}.${moduleName}.entity${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)};
|
||||
import ${packageName}.${moduleName}.dao${isNotEmpty(subModuleName)?'.'+subModuleName:''}.${@StringUtils.cap(child.className)}Dao;
|
||||
<% } %>
|
||||
|
||||
/**
|
||||
* ${functionName}Service
|
||||
* @author ${functionAuthor}
|
||||
* @version ${functionVersion}
|
||||
*/
|
||||
@Service
|
||||
public class ${ClassName}Service extends ${table.isTreeEntity?'Tree':'Query'}Service<${ClassName}Dao, ${ClassName}> {
|
||||
<% for (child in table.childList){ %>
|
||||
|
||||
@Autowired
|
||||
private ${@StringUtils.cap(child.className)}Dao ${@StringUtils.uncap(child.className)}Dao;
|
||||
<% } %>
|
||||
|
||||
/**
|
||||
* 获取单条数据
|
||||
* @param ${className}
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ${ClassName} get(${ClassName} ${className}) {
|
||||
<% if (table.childList.~size > 0){ %>
|
||||
${ClassName} entity = super.get(${className});
|
||||
if (entity != null){
|
||||
<% for (child in table.childList){ %>
|
||||
${@StringUtils.cap(child.className)} ${@StringUtils.uncap(child.className)} = new ${@StringUtils.cap(child.className)}(entity);
|
||||
${@StringUtils.uncap(child.className)}.setStatus(${@StringUtils.cap(child.className)}.STATUS_NORMAL);
|
||||
entity.set${@StringUtils.cap(child.className)}List(${@StringUtils.uncap(child.className)}Dao.findList(${@StringUtils.uncap(child.className)}));
|
||||
<% } %>
|
||||
}
|
||||
return entity;
|
||||
<% }else{ %>
|
||||
return super.get(${className});
|
||||
<% } %>
|
||||
}
|
||||
<% if(!table.isTreeEntity){ %>
|
||||
|
||||
/**
|
||||
* 查询分页数据
|
||||
* @param ${className} 查询条件
|
||||
* @param ${className}.page 分页对象
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Page<${ClassName}> findPage(${ClassName} ${className}) {
|
||||
return super.findPage(${className});
|
||||
}
|
||||
<% }else{ %>
|
||||
|
||||
/**
|
||||
* 查询列表数据
|
||||
* @param ${className}
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<${ClassName}> findList(${ClassName} ${className}) {
|
||||
return super.findList(${className});
|
||||
}
|
||||
<% } %>
|
||||
|
||||
}]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>viewForm</name>
|
||||
<filePath>src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}Form.html</fileName>
|
||||
<content><![CDATA[
|
||||
<%
|
||||
var extLibs = '';
|
||||
if(@ObjectUtils.toBoolean(table.optionMap['isImageUpload']) || @ObjectUtils.toBoolean(table.optionMap['isFileUpload'])){
|
||||
extLibs = extLibs + ',\'fileupload\'';
|
||||
}
|
||||
if(table.childList.~size > 0){
|
||||
extLibs = extLibs + ',\'dataGrid\'';
|
||||
}
|
||||
%>
|
||||
\<% layout('/layouts/default.html', {title: '${functionNameSimple}查询', libs: ['validate'${extLibs}]}){ %>
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
<div class="box-header with-border">
|
||||
<div class="box-title">
|
||||
<i class="fa fa-list-alt"></i> \${text(${className}.isNewRecord ? '新增${functionNameSimple}' : '详情${functionNameSimple}')}
|
||||
</div>
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<${'#'}form:form id="inputForm" model="\${${className}}" action="\${ctx}/${urlPrefix}/save" method="post" class="form-horizontal">
|
||||
<div class="box-body">
|
||||
<div class="form-unit">\${text('基本信息')}</div>
|
||||
<% if(table.isTreeEntity){ %>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4">\${text('上级${functionNameSimple}')}:</label>
|
||||
<div class="col-sm-8">
|
||||
<${'#'}form:treeselect id="parent" title="\${text('上级${functionNameSimple}')}"
|
||||
path="parent.id" labelPath="parent.${table.treeViewNameAttrName}"
|
||||
url="\${ctx}/${urlPrefix}/treeData?excludeCode=\${${className}.id}"
|
||||
class="" allowClear="true" canSelectRoot="true" canSelectParent="true"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% include('/templates/modules/gen/include/formControl.html'){} %>
|
||||
<% include('/templates/modules/gen/include/formChildTable.html'){} %>
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> \${text('关 闭')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</${'#'}form:form>
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/formChildTableScript.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2013-Now http://jeesite.com All rights reserved. -->
|
||||
<template>
|
||||
<name>viewList</name>
|
||||
<filePath>src/main/resources/views/${lastPackageName}/${moduleName}/${subModuleName}</filePath>
|
||||
<fileName>${className}List.html</fileName>
|
||||
<content><![CDATA[
|
||||
\<% layout('/layouts/default.html', {title: '${functionNameSimple}查询', libs: ['dataGrid']}){ %>
|
||||
<div class="main-content">
|
||||
<div class="box box-main">
|
||||
<div class="box-header">
|
||||
<div class="box-title">
|
||||
<i class="fa fa-list-alt"></i> \${text('${functionNameSimple}查询')}
|
||||
</div>
|
||||
<div class="box-tools pull-right">
|
||||
<a href="#" class="btn btn-default" id="btnSearch" title="\${text('查询')}"><i class="fa fa-filter"></i> \${text('查询')}</a>
|
||||
<% if(table.isTreeEntity){ %>
|
||||
<a href="#" class="btn btn-default" id="btnRefreshTree" title="\${text('刷新')}"><i class="fa fa-refresh"></i> \${text('刷新')}</a>
|
||||
<a href="#" class="btn btn-default" id="btnExpandTreeNode" title="\${text('展开一级')}"><i class="fa fa-angle-double-down"></i> \${text('展开')}</a>
|
||||
<a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="\${text('折叠全部')}"><i class="fa fa-angle-double-up"></i> \${text('折叠')}</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<% include('/templates/modules/gen/include/searchForm.html'){} %>
|
||||
<table id="dataGrid"></table>
|
||||
<% if(!table.isTreeEntity){ %>
|
||||
<div id="dataGridPage"></div>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
\<% } %>
|
||||
<% include('/templates/modules/gen/include/dataGridScript.html'){} %>]]>
|
||||
</content>
|
||||
</template>
|
||||
@@ -1,4 +1,4 @@
|
||||
<%
|
||||
<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */
|
||||
@servlet.getResponse().setStatus(400);
|
||||
|
||||
var message = @ObjectUtils.toString(@request.getAttribute('message'));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%
|
||||
<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */
|
||||
@servlet.getResponse().setStatus(403);
|
||||
|
||||
var message = @ObjectUtils.toString(@request.getAttribute("message"));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%
|
||||
<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */
|
||||
@servlet.getResponse().setStatus(responseStatus!404);
|
||||
|
||||
var message = @ObjectUtils.toString(@request.getAttribute("message"));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%
|
||||
<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */
|
||||
@servlet.getResponse().setStatus(500);
|
||||
|
||||
var message = @ObjectUtils.toString(@request.getAttribute("message"));
|
||||
|
||||
@@ -9,3 +9,6 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
|
||||
<script src="${ctxStatic}/jquery/jquery-1.12.4.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>
|
||||
<% } %>
|
||||
|
||||
@@ -58,29 +58,29 @@
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('公司名称')}', name:'companyName', index:'a.company_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.viewCode+' ) '+'<a href="${ctx}/sys/company/form?companyCode='+row.companyCode+'" class="btnList" data-title="${text('编辑公司')}">'+(val||row.id)+'</a>';
|
||||
{header:'${text("公司名称")}', name:'companyName', index:'a.company_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.viewCode+' ) '+'<a href="${ctx}/sys/company/form?companyCode='+row.companyCode+'" class="btnList" data-title="${text("编辑公司")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('公司全称')}', name:'fullName', index:'a.full_name', width:200, align:"left"},
|
||||
{header:'${text('排序号')}', name:'treeSort', index:'a.tree_sort', width:80, align:"center"},
|
||||
{header:'${text('归属区域')}', name:'area.treeNames', index:'a.areaCode', width:200, align:"center"},
|
||||
{header:'${text('更新时间')}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
|
||||
{header:'${text('备注信息')}', name:'remarks', index:'a.remarks', width:200, align:"left"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:80, align:"center", formatter: function(val, obj, row, act){
|
||||
{header:'${text("公司全称")}', name:'fullName', index:'a.full_name', width:200, align:"left"},
|
||||
{header:'${text("排序号")}', name:'treeSort', index:'a.tree_sort', width:80, align:"center"},
|
||||
{header:'${text("归属区域")}', name:'area.treeNames', index:'a.areaCode', width:200, align:"center"},
|
||||
{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
|
||||
{header:'${text("备注信息")}', name:'remarks', index:'a.remarks', width:200, align:"left"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:80, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '未知', true);
|
||||
}},
|
||||
{header:'${text('操作')}', name:'actions', width:130, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:130, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('sys:company:edit')){ %>
|
||||
actions.push('<a href="${ctx}/sys/company/form?companyCode='+row.companyCode+'" class="btnList" title="${text('编辑公司')}"><i class="fa fa-pencil"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/company/form?companyCode='+row.companyCode+'" class="btnList" title="${text("编辑公司")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/sys/company/disable?companyCode='+row.companyCode+'" class="btnList" title="${text('停用公司')}" data-confirm="${text('确认要停用该公司吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/company/disable?companyCode='+row.companyCode+'" class="btnList" title="${text("停用公司")}" data-confirm="${text("确认要停用该公司吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/sys/company/enable?companyCode='+row.companyCode+'" class="btnList" title="${text('启用公司')}" data-confirm="${text('确认要启用该公司吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/company/enable?companyCode='+row.companyCode+'" class="btnList" title="${text("启用公司")}" data-confirm="${text("确认要启用该公司吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/sys/company/delete?companyCode='+row.companyCode+'" class="btnList" title="${text('删除公司')}" data-confirm="${text('确认要删除该公司及所有子公司吗?')}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/company/form?parentCode='+row.id+'" class="btnList" title="${text('新增下级公司')}"><i class="fa fa-plus-square"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/company/delete?companyCode='+row.companyCode+'" class="btnList" title="${text("删除公司")}" data-confirm="${text("确认要删除该公司及所有子公司吗?")}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/company/form?parentCode='+row.id+'" class="btnList" title="${text("新增下级公司")}"><i class="fa fa-plus-square"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
|
||||
@@ -64,31 +64,31 @@
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('机构名称')}', name:'officeName', index:'a.office_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.viewCode+' ) '+'<a href="${ctx}/sys/office/form?officeCode='+row.officeCode+'" class="btnList" data-title="${text('编辑机构')}">'+(val||row.id)+'</a>';
|
||||
{header:'${text("机构名称")}', name:'officeName', index:'a.office_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.viewCode+' ) '+'<a href="${ctx}/sys/office/form?officeCode='+row.officeCode+'" class="btnList" data-title="${text("编辑机构")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('机构全称')}', name:'fullName', index:'a.full_name', width:200, align:"left"},
|
||||
{header:'${text('排序号')}', name:'treeSort', index:'a.tree_sort', width:80, align:"center"},
|
||||
{header:'${text('机构类型')}', name:'officeType', index:'a.office_type', width:100, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_office_type')}, val, '${text('未知')}', true);
|
||||
{header:'${text("机构全称")}', name:'fullName', index:'a.full_name', width:200, align:"left"},
|
||||
{header:'${text("排序号")}', name:'treeSort', index:'a.tree_sort', width:80, align:"center"},
|
||||
{header:'${text("机构类型")}', name:'officeType', index:'a.office_type', width:100, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_office_type')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text('更新时间')}', name:'updateDate', index:'a.update_date', width:150, align:"center"},
|
||||
{header:'${text('备注信息')}', name:'remarks', index:'a.remarks', width:200, align:"left"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:80, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '${text('未知')}', true);
|
||||
{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:150, align:"center"},
|
||||
{header:'${text("备注信息")}', name:'remarks', index:'a.remarks', width:200, align:"left"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:80, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text('操作')}', name:'actions', width:150, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:150, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('sys:office:edit')){ %>
|
||||
actions.push('<a href="${ctx}/sys/office/form?officeCode='+row.officeCode+'" class="btnList" title="${text('编辑机构')}"><i class="fa fa-pencil"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/office/form?officeCode='+row.officeCode+'" class="btnList" title="${text("编辑机构")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/sys/office/disable?officeCode='+row.officeCode+'" class="btnList" title="${text('停用机构')}" data-confirm="${text('确认要停用该机构吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/office/disable?officeCode='+row.officeCode+'" class="btnList" title="${text("停用机构")}" data-confirm="${text("确认要停用该机构吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/sys/office/enable?officeCode='+row.officeCode+'" class="btnList" title="${text('启用机构')}" data-confirm="${text('确认要启用该机构吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/office/enable?officeCode='+row.officeCode+'" class="btnList" title="${text("启用机构")}" data-confirm="${text("确认要启用该机构吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/sys/office/delete?officeCode='+row.officeCode+'" class="btnList" title="${text('删除机构')}" data-confirm="${text('确认要删除该机构及所有子机构吗?')}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/office/form?parentCode='+row.id+'" class="btnList" title="${text('新增下级机构')}"><i class="fa fa-plus-square"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/office/delete?officeCode='+row.officeCode+'" class="btnList" title="${text("删除机构")}" data-confirm="${text("确认要删除该机构及所有子机构吗?")}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/office/form?parentCode='+row.id+'" class="btnList" title="${text("新增下级机构")}"><i class="fa fa-plus-square"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
|
||||
@@ -55,30 +55,30 @@
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('岗位名称')}', name:'postName', index:'a.post_name', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/sys/post/form?postCode='+row.postCode+'" class="btnList" data-title="${text('编辑岗位')}">'+(val||row.id)+'</a>';
|
||||
{header:'${text("岗位名称")}', name:'postName', index:'a.post_name', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/sys/post/form?postCode='+row.postCode+'" class="btnList" data-title="${text("编辑岗位")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('岗位编码')}', name:'postCode', index:'a.post_code', width:200, align:"center"},
|
||||
{header:'${text('排序号')}', name:'postSort', index:'a.post_sort', width:80, align:"center"},
|
||||
{header:'${text('岗位分类')}', name:'postType', index:'a.post_type', width:100, align:"center", formatter: function(val, obj, row, act){
|
||||
{header:'${text("岗位编码")}', name:'postCode', index:'a.post_code', width:200, align:"center"},
|
||||
{header:'${text("排序号")}', name:'postSort', index:'a.post_sort', width:80, align:"center"},
|
||||
{header:'${text("岗位分类")}', name:'postType', index:'a.post_type', width:100, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_post_type')}, val, '未知', true);
|
||||
}},
|
||||
{header:'${text('更新时间')}', name:'updateDate', index:'a.update_date', width:150, align:"center"},
|
||||
{header:'${text('备注信息')}', name:'remarks', index:'a.remarks', width:200, align:"left"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:80, align:"center", formatter: function(val, obj, row, act){
|
||||
{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:150, align:"center"},
|
||||
{header:'${text("备注信息")}', name:'remarks', index:'a.remarks', width:200, align:"left"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:80, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '未知', true);
|
||||
}},
|
||||
{header:'${text('操作')}', name:'actions', width:130, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:130, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('sys:post:edit')){ %>
|
||||
actions.push('<a href="${ctx}/sys/post/form?postCode='+row.postCode+'" class="btnList" title="${text('编辑岗位')}"><i class="fa fa-pencil"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/post/form?postCode='+row.postCode+'" class="btnList" title="${text("编辑岗位")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/sys/post/disable?postCode='+row.postCode+'" class="btnList" title="${text('停用岗位')}" data-confirm="${text('确认要停用该岗位吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/post/disable?postCode='+row.postCode+'" class="btnList" title="${text("停用岗位")}" data-confirm="${text("确认要停用该岗位吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/sys/post/enable?postCode='+row.postCode+'" class="btnList" title="${text('启用岗位')}" data-confirm="${text('确认要启用该岗位吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/post/enable?postCode='+row.postCode+'" class="btnList" title="${text("启用岗位")}" data-confirm="${text("确认要启用该岗位吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/sys/post/delete?postCode='+row.postCode+'" class="btnList" title="${text('删除岗位')}" data-confirm="${text('确认要删除该岗位吗?')}"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/post/delete?postCode='+row.postCode+'" class="btnList" title="${text("删除岗位")}" data-confirm="${text("确认要删除该岗位吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<% layout('/layouts/default.html', {title: '切换主题风格'}){ %>
|
||||
<link rel="stylesheet" href="${ctxStatic}/icheck/1.0/square/blue.css?${_version}">
|
||||
<style>
|
||||
.list-unstyled{margin:10px;}
|
||||
.full-opacity-hover{opacity:1;filter:alpha(opacity=1);border:1px solid #fff}
|
||||
@@ -7,10 +8,10 @@
|
||||
<ul class="list-unstyled clearfix">
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-blue" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin">
|
||||
@@ -19,10 +20,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-black" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix">
|
||||
<span style="display:block; width: 20%; float: left; height: 15px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 15px; background: #fefefe"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 13px; background: #fefefe"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #222"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #222"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin">
|
||||
@@ -31,10 +32,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-purple" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin">
|
||||
@@ -43,10 +44,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-green" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin">
|
||||
@@ -55,10 +56,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-red" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin">
|
||||
@@ -67,10 +68,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-yellow" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin">
|
||||
@@ -79,10 +80,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-blue-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin" style="font-size: 12px">
|
||||
@@ -91,10 +92,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-black-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix">
|
||||
<span style="display:block; width: 20%; float: left; height: 15px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 15px; background: #fefefe"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 13px; background: #fefefe"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin" style="font-size: 12px">
|
||||
@@ -103,10 +104,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-purple-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin" style="font-size: 12px">
|
||||
@@ -115,10 +116,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-green-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin" style="font-size: 12px">
|
||||
@@ -127,10 +128,10 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-red-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin" style="font-size: 12px">
|
||||
@@ -139,20 +140,51 @@
|
||||
</li>
|
||||
<li style="float:left; width: 33.33333%; padding: 5px;"><a href="javascript:void(0)" data-skin="skin-yellow-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 15px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 15px;"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 13px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 13px;"></span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="display:block; width: 20%; float: left; height: 35px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 35px; background: #f4f5f7"></span>
|
||||
<span style="display:block; width: 20%; float: left; height: 30px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 30px; background: #f4f5f7"></span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="text-center no-margin" style="font-size: 12px">
|
||||
黄灰
|
||||
</p>
|
||||
</li>
|
||||
<li style="text-align:center; padding-left:20px;">
|
||||
<#form:checkbox name="formLayerModel" label="表单弹窗模式" class="form-control" data-style="square-blue"/>
|
||||
|
||||
<#form:checkbox name="tabPageModel" label="取消页签模式" class="form-control" data-style="square-blue"/>
|
||||
</li>
|
||||
</ul>
|
||||
<% } %>
|
||||
<script>
|
||||
$('.full-opacity-hover').click(function(){
|
||||
top.location = '${ctx}/switchSkin/' + $(this).data('skin');
|
||||
});
|
||||
|
||||
$('#formLayerModel')
|
||||
.iCheck(js.cookie('formLayerModel') == 'true' ? 'check' : 'uncheck')
|
||||
.on('ifChecked', function(){
|
||||
js.cookie('formLayerModel', 'true');
|
||||
}).on('ifUnchecked', function(){
|
||||
js.cookie('formLayerModel', 'false');
|
||||
$('#tabPageModel').iCheck('uncheck');
|
||||
}).on('ifClicked', function(){
|
||||
setTimeout(function(){
|
||||
top.location.reload();
|
||||
},500);
|
||||
});
|
||||
|
||||
$('#tabPageModel')
|
||||
.iCheck(js.cookie('tabPageModel') == 'true' ? 'check' : 'uncheck')
|
||||
.on('ifChecked', function(){
|
||||
js.cookie('tabPageModel', 'true');
|
||||
$('#formLayerModel').iCheck('check');
|
||||
}).on('ifUnchecked', function(){
|
||||
js.cookie('tabPageModel', 'false');
|
||||
}).on('ifClicked', function(){
|
||||
setTimeout(function(){
|
||||
top.location.reload();
|
||||
},500);
|
||||
});
|
||||
</script>
|
||||
@@ -120,6 +120,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-unit">${text('分配角色')}</div>
|
||||
<div class="pl10 pb20">
|
||||
<table id="roleGrid"></table>
|
||||
<#form:hidden name="userRoleString"/>
|
||||
</div>
|
||||
<#form:extend collapsed="true" />
|
||||
</div>
|
||||
<div class="box-footer">
|
||||
@@ -146,6 +151,9 @@ $("#inputForm").validate({
|
||||
}
|
||||
},
|
||||
submitHandler: function(form){
|
||||
// 获取选中角色
|
||||
$("#userRoleString").val(roleGrid.dataGrid('getSelectRows').join(','));
|
||||
// 提交表单
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
js.showMessage(data.message);
|
||||
if(data.result == Global.TRUE){
|
||||
@@ -163,4 +171,29 @@ $('#corpCode_').change(function(){
|
||||
$('#loginCode').val('admin'+$(this).val()).valid();
|
||||
}
|
||||
});
|
||||
//加载角色列表
|
||||
var roleGrid = $("#roleGrid").dataGrid({
|
||||
url: '${ctx}/sys/role/treeData',
|
||||
postData: [
|
||||
<%// {name:'userType',value:'employee'}, // 指定用户类型的角色 %>
|
||||
<%// {name:'ctrlPermi',value:'2'} // 过滤可管理的角色 %>
|
||||
{name:'isAll',value:'true'} <% // 显示所有角色(与上方两个条件互斥) %>
|
||||
],
|
||||
columnModel: [
|
||||
{header:'${text("角色名称")}', name:'name', sortable:false, width:100, align:"center"},
|
||||
{header:'${text("角色编码")}', name:'id', sortable:false, width:100, align:"center"}
|
||||
],
|
||||
showCheckbox: true,
|
||||
autoGridHeight: function(){
|
||||
return 'auto';
|
||||
},
|
||||
autoGridWidth: function(){
|
||||
return $('#inputForm .box-body').width()-20;
|
||||
},
|
||||
ajaxSuccess: function(){
|
||||
<% for (role in roleList!){ %>
|
||||
roleGrid.dataGrid('setSelectRow', '${role.roleCode}');
|
||||
<% } %>
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="box box-main">
|
||||
<div class="box-header">
|
||||
<div class="box-title">
|
||||
<i class="fa icon-user"></i> 系统管理员
|
||||
<i class="fa icon-user"></i> ${@Global.getConfigToBoolean('user.useCorpModel', 'false') ? '租户' : '系统'}管理员
|
||||
</div>
|
||||
<div class="box-tools pull-right">
|
||||
<a href="#" class="btn btn-default" id="btnSearch" title="查询"><i class="fa fa-filter"></i> 查询</a>
|
||||
|
||||
@@ -198,8 +198,7 @@
|
||||
<script>
|
||||
$("#inputForm").validate({
|
||||
submitHandler: function(form){
|
||||
<% if(op == 'add' || op == 'auth') {%>
|
||||
// 获取选中角色
|
||||
<% if(op == 'add' || op == 'auth') { // 获取选中角色 %>
|
||||
$("#userRoleString").val(roleGrid.dataGrid('getSelectRows').join(','));
|
||||
<% } %>
|
||||
js.ajaxSubmitForm($(form), function(data){
|
||||
@@ -221,8 +220,8 @@ var roleGrid = $("#roleGrid").dataGrid({
|
||||
{name:'ctrlPermi',value:'2'}
|
||||
],
|
||||
columnModel: [
|
||||
{header:'${text('角色名称')}', name:'name', sortable:false, width:100, align:"center"},
|
||||
{header:'${text('角色编码')}', name:'id', sortable:false, width:100, align:"center"}
|
||||
{header:'${text("角色名称")}', name:'name', sortable:false, width:100, align:"center"},
|
||||
{header:'${text("角色编码")}', name:'id', sortable:false, width:100, align:"center"}
|
||||
],
|
||||
showCheckbox: true,
|
||||
autoGridHeight: function(){
|
||||
|
||||
@@ -107,47 +107,47 @@
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('登录账号')}', name:'loginCode', index:'a.login_code', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" data-title="${text('编辑用户')}">'+(val||row.id)+'</a>';
|
||||
{header:'${text("登录账号")}', name:'loginCode', index:'a.login_code', width:200, align:"center", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" data-title="${text("编辑用户")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('用户昵称')}', name:'userName', index:'a.user_name', width:200, align:"center"},
|
||||
{header:'${text('员工姓名')}', name:'refName', index:'a.ref_name', width:200, align:"center"},
|
||||
{header:'${text('归属机构')}', name:'employee.office.officeName', index:'o.office_name', width:200, align:"center"},
|
||||
{header:'${text('归属公司')}', name:'employee.company.companyName', index:'c.company_name', width:200, align:"center"},
|
||||
{header:'${text('电子邮箱')}', name:'email', index:'a.email', width:200, align:"center"},
|
||||
{header:'${text('手机号码')}', name:'mobile', index:'a.mobile', width:200, align:"center"},
|
||||
{header:'${text('办公电话')}', name:'phone', index:'a.phone', width:200, align:"center"},
|
||||
{header:'${text('更新时间')}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){
|
||||
{header:'${text("用户昵称")}', name:'userName', index:'a.user_name', width:200, align:"center"},
|
||||
{header:'${text("员工姓名")}', name:'refName', index:'a.ref_name', width:200, align:"center"},
|
||||
{header:'${text("归属机构")}', name:'employee.office.officeName', index:'o.office_name', width:200, align:"center"},
|
||||
{header:'${text("归属公司")}', name:'employee.company.companyName', index:'c.company_name', width:200, align:"center"},
|
||||
{header:'${text("电子邮箱")}', name:'email', index:'a.email', width:200, align:"center"},
|
||||
{header:'${text("手机号码")}', name:'mobile', index:'a.mobile', width:200, align:"center"},
|
||||
{header:'${text("办公电话")}', name:'phone', index:'a.phone', width:200, align:"center"},
|
||||
{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '未知', true);
|
||||
}},
|
||||
{header:'${text('操作')}', name:'actions', width:260, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:260, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('sys:empUser:edit')){ %>
|
||||
actions.push('<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" title="${text('编辑用户')}"><i class="fa fa-pencil"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=edit" class="btnList" title="${text("编辑用户")}"><i class="fa fa-pencil"></i></a> ');
|
||||
<% } %>
|
||||
<% if(hasPermi('sys:empUser:updateStatus')){ %>
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/sys/empUser/disable?userCode='+row.userCode+'" class="btnList" title="${text('停用用户')}" data-confirm="${text('确认要停用该用户吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/disable?userCode='+row.userCode+'" class="btnList" title="${text("停用用户")}" data-confirm="${text("确认要停用该用户吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/sys/empUser/enable?userCode='+row.userCode+'" class="btnList" title="${text('启用用户')}" data-confirm="${text('确认要启用该用户吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/enable?userCode='+row.userCode+'" class="btnList" title="${text("启用用户")}" data-confirm="${text("确认要启用该用户吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
<% } %>
|
||||
<% if(hasPermi('sys:empUser:edit')){ %>
|
||||
actions.push('<a href="${ctx}/sys/empUser/delete?userCode='+row.userCode+'" class="btnList" title="${text('删除用户')}" data-confirm="${text('确认要删除该用户吗?')}"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/delete?userCode='+row.userCode+'" class="btnList" title="${text("删除用户")}" data-confirm="${text("确认要删除该用户吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
<% if(hasPermi('sys:empUser:authRole,sys:empUser:authDataScope,sys:empUser:resetpwd', 'or')){ %>
|
||||
actions.push('<a href="javascript:" class="btnMore" title="${text('更多操作')}"><i class="fa fa-chevron-circle-right"></i></a> ');
|
||||
actions.push('<a href="javascript:" class="btnMore" title="${text("更多操作")}"><i class="fa fa-chevron-circle-right"></i></a> ');
|
||||
actions.push('<div class="moreItems">');
|
||||
<% if(hasPermi('sys:empUser:authRole')){ %>
|
||||
actions.push('<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=auth" class="btn btn-default btn-xs btnList" title="${text('用户分配角色')}"><i class="fa fa-check-square-o"></i> ${text('分配角色')}</a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/form?userCode='+row.userCode+'&op=auth" class="btn btn-default btn-xs btnList" title="${text("用户分配角色")}"><i class="fa fa-check-square-o"></i> ${text("分配角色")}</a> ');
|
||||
<% } %>
|
||||
<% if(hasPermi('sys:empUser:authDataScope')){ %>
|
||||
actions.push('<a href="${ctx}/sys/empUser/formAuthDataScope?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text('用户分配数据权限')}"><i class="fa fa-check-circle-o"></i> ${text('数据权限')}</a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/formAuthDataScope?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text("用户分配数据权限")}"><i class="fa fa-check-circle-o"></i> ${text("数据权限")}</a> ');
|
||||
<% } %>
|
||||
<% if(hasPermi('sys:empUser:resetpwd')){ %>
|
||||
actions.push('<a href="${ctx}/sys/empUser/resetpwd?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text('用户密码重置')}" data-confirm="${text('确认要将该用户密码重置到初始状态吗?')}"><i class="fa fa-reply-all"></i> ${text('重置密码')}</a> ');
|
||||
actions.push('<a href="${ctx}/sys/empUser/resetpwd?userCode='+row.userCode+'" class="btn btn-default btn-xs btnList" title="${text("用户密码重置")}" data-confirm="${text("确认要将该用户密码重置到初始状态吗?")}"><i class="fa fa-reply-all"></i> ${text("重置密码")}</a> ');
|
||||
<% } %>
|
||||
actions.push('</div>');
|
||||
<% } %>
|
||||
|
||||
@@ -82,16 +82,16 @@ var selectData = ${isNotBlank(selectData!) ? selectData! : "{\}"},
|
||||
selectNum = 0, dataGrid = $('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('登录账号')}', name:'loginCode', index:'a.login_code', width:200, align:"center"},
|
||||
{header:'${text('用户昵称')}', name:'userName', index:'a.user_name', width:200, align:"center"},
|
||||
{header:'${text('员工姓名')}', name:'refName', index:'a.ref_name', width:200, align:"center"},
|
||||
{header:'${text('归属机构')}', name:'employee.office.officeName', index:'o.office_name', width:200, align:"center"},
|
||||
{header:'${text('归属公司')}', name:'employee.company.companyName', index:'c.company_name', width:200, align:"center"},
|
||||
{header:'${text('电子邮箱')}', name:'email', index:'a.email', width:200, align:"center"},
|
||||
{header:'${text('手机号码')}', name:'mobile', index:'a.mobile', width:200, align:"center"},
|
||||
{header:'${text('办公电话')}', name:'phone', index:'a.phone', width:200, align:"center"},
|
||||
{header:'${text('更新时间')}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){
|
||||
{header:'${text("登录账号")}', name:'loginCode', index:'a.login_code', width:200, align:"center"},
|
||||
{header:'${text("用户昵称")}', name:'userName', index:'a.user_name', width:200, align:"center"},
|
||||
{header:'${text("员工姓名")}', name:'refName', index:'a.ref_name', width:200, align:"center"},
|
||||
{header:'${text("归属机构")}', name:'employee.office.officeName', index:'o.office_name', width:200, align:"center"},
|
||||
{header:'${text("归属公司")}', name:'employee.company.companyName', index:'c.company_name', width:200, align:"center"},
|
||||
{header:'${text("电子邮箱")}', name:'email', index:'a.email', width:200, align:"center"},
|
||||
{header:'${text("手机号码")}', name:'mobile', index:'a.mobile', width:200, align:"center"},
|
||||
{header:'${text("办公电话")}', name:'phone', index:'a.phone', width:200, align:"center"},
|
||||
{header:'${text("更新时间")}', name:'updateDate', index:'a.update_date', width:200, align:"center"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:140, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_status')}, val, '未知', true);
|
||||
}},
|
||||
{header:'行数据', name:'rowData', hidden:true, formatter: function(val, obj, row, act){
|
||||
|
||||
@@ -13,7 +13,7 @@ var bodyClass = 'fixed noscroll2 sidebar-mini ' + sidebarCollapse;
|
||||
<link rel="stylesheet" href="${ctxStatic}/jquery-toastr/2.0/toastr.min.css?${_version}">
|
||||
<link rel="stylesheet" href="${ctxStatic}/adminlte/css/skins/${skinName}.css?${_version}">
|
||||
<link rel="stylesheet" href="${ctxStatic}/modules/sys/sysIndex.css?${_version}">
|
||||
<header class="main-header">
|
||||
<header class="main-header">
|
||||
<% include('sysIndex/topMenu.html'){} %>
|
||||
</header>
|
||||
<aside class="main-sidebar">
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<%-->*/%>
|
||||
<ul class="sidebar-menu" data-widget="tree">
|
||||
<%/*<!--%>
|
||||
<% var menuSysCode = @UserUtils.getLoginInfo().getParam('sysCode', 'default'); %>
|
||||
<% var menuSysCode = @ObjectUtils.toStringIgnoreNull(session.sysCode, 'default'); %>
|
||||
<li class="header">${@DictUtils.getDictLabel('sys_menu_sys_code', menuSysCode, '')}</li>
|
||||
<%-->*/%>
|
||||
<%
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<% if(user.superAdmin){ %>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header mb5">${text('系统切换')}:</li>
|
||||
<% var menuSysCode = @UserUtils.getLoginInfo().getParam('sysCode', 'default'); %>
|
||||
<% var menuSysCode = @ObjectUtils.toStringIgnoreNull(session.sysCode, 'default'); %>
|
||||
<% for(var dict in @DictUtils.getDictList('sys_menu_sys_code')){ %>
|
||||
<li>
|
||||
<a href="${ctx}/switch/${dict.dictValue}">
|
||||
|
||||
@@ -45,7 +45,7 @@ public class MobileAppTest {
|
||||
private static String loginUrl = "/login"
|
||||
+ "?username=" + DesUtils.encode("system", "thinkgem,jeesite,com")
|
||||
+ "&password=" + DesUtils.encode("admin", "thinkgem,jeesite,com")
|
||||
+ "¶m_deviceType=mobileApp&__sid=";
|
||||
+ "¶m_deviceType=mobileApp¶m_lang=zh_CN&__sid=";
|
||||
|
||||
/**
|
||||
* 存储的会话编号,则通过getSid()获取。
|
||||
|
||||
@@ -18,3 +18,6 @@ jdbc:
|
||||
password: 123456
|
||||
testSql: SELECT 1
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
config: classpath:logback.xml
|
||||
@@ -6,15 +6,15 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.1.2-SNAPSHOT</version>
|
||||
<relativePath>../../parent/pom.xml</relativePath>
|
||||
|
||||
<!-- ====== 这是一个新增模块示例项目,你可以拷贝此项目,修改 artifactId 为您的模块即可 ====== -->
|
||||
|
||||
<!-- <relativePath>../parent/pom.xml</relativePath> /jeesite -->
|
||||
<!-- <relativePath>../../parent/pom.xml</relativePath> /jeesite/modules -->
|
||||
<!-- <relativePath>../../jeesite/parent/pom.xml</relativePath> /jeesite-xxx -->
|
||||
<!-- <relativePath>../../../jeesite/parent/pom.xml</relativePath> /jeesite-xxx/modules -->
|
||||
<!-- <relativePath>../../jeesite/parent/pom.xml</relativePath> /jeesite- -->
|
||||
<!-- <relativePath>../../../jeesite/parent/pom.xml</relativePath> /jeesite-/modules -->
|
||||
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.1.2-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>JeeSite Parent</name>
|
||||
@@ -34,6 +34,7 @@
|
||||
<UserAgentUtils.version>1.21</UserAgentUtils.version>
|
||||
<metadata-extractor.version>2.11.0</metadata-extractor.version>
|
||||
<thumbnailator.version>0.4.8</thumbnailator.version>
|
||||
<twelvemonkeys.version>3.4.1</twelvemonkeys.version>
|
||||
<blade-patchca.version>1.1.0</blade-patchca.version>
|
||||
<jmimemagic.version>0.1.5</jmimemagic.version>
|
||||
<zxing.version>3.3.2</zxing.version>
|
||||
@@ -92,7 +93,7 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<encoding>${project.build.sourceEncoding}</encoding>
|
||||
<!-- <encoding>${project.build.sourceEncoding}</encoding> -->
|
||||
<archive>
|
||||
<addMavenDescriptor>false</addMavenDescriptor>
|
||||
</archive>
|
||||
@@ -298,41 +299,25 @@
|
||||
</organization>
|
||||
|
||||
<repositories>
|
||||
|
||||
<repository>
|
||||
<id>aliyun-repos</id>
|
||||
<name>Aliyun Repository</name>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sonatype-repos</id>
|
||||
<name>Sonatype Repository</name>
|
||||
<url>https://oss.sonatype.org/content/groups/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sonatype-repos-s</id>
|
||||
<repository>
|
||||
<id>sonatype-repos-s</id>
|
||||
<name>Sonatype Repository</name>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
<releases><enabled>false</enabled></releases>
|
||||
<snapshots><enabled>true</enabled></snapshots>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
|
||||
<pluginRepository>
|
||||
<id>aliyun-repos</id>
|
||||
<name>Aliyun Repository</name>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
</pluginRepository>
|
||||
|
||||
</pluginRepositories>
|
||||
|
||||
<profiles>
|
||||
@@ -342,7 +327,6 @@
|
||||
<id>javadoc</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Java Document Generate -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
@@ -356,7 +340,6 @@
|
||||
<id>package</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- YUI Compressor (CSS/JS压缩) -->
|
||||
<plugin>
|
||||
<groupId>net.alchim31.maven</groupId>
|
||||
<artifactId>yuicompressor-maven-plugin</artifactId>
|
||||
@@ -370,7 +353,6 @@
|
||||
<id>deploy</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- YUI Compressor (CSS/JS压缩) -->
|
||||
<plugin>
|
||||
<groupId>net.alchim31.maven</groupId>
|
||||
<artifactId>yuicompressor-maven-plugin</artifactId>
|
||||
@@ -378,10 +360,6 @@
|
||||
</plugins>
|
||||
</build>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>sonatype-repos</id>
|
||||
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>sonatype-repos-s</id>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
@echo off
|
||||
rem /**
|
||||
rem * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||
rem *
|
||||
rem * Author: ThinkGem@163.com
|
||||
rem */
|
||||
echo.
|
||||
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>汾<EFBFBD>š<EFBFBD>
|
||||
echo.
|
||||
|
||||
%~d0
|
||||
cd %~dp0
|
||||
|
||||
set /p new=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°汾<EFBFBD>ţ<EFBFBD>
|
||||
echo.
|
||||
|
||||
set /p choice=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>밴 "y" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if /i "%choice%" neq "y" set new=%new%-SNAPSHOT
|
||||
echo.
|
||||
|
||||
cd ../jeesite
|
||||
|
||||
rem <20><><EFBFBD><EFBFBD>pom<6F>汾<EFBFBD><E6B1BE>
|
||||
cd ../parent
|
||||
call mvn versions:set -DnewVersion=%new%
|
||||
|
||||
cd ../web
|
||||
call mvn versions:set -DnewVersion=%new%
|
||||
|
||||
pause
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-root</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.1.2-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>JeeSite</name>
|
||||
|
||||
@@ -1,15 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||
<wb-module deploy-name="web">
|
||||
<dependent-module archiveName="jeesite-module-core-4.1.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-module-core/jeesite-module-core">
|
||||
<dependent-module archiveName="jeesite-module-core-4.1.2-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-module-core/jeesite-module-core">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<dependent-module archiveName="jeesite-common-4.1.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-common/jeesite-common">
|
||||
<dependent-module archiveName="jeesite-common-4.1.2-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-common/jeesite-common">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<dependent-module archiveName="jeesite-framework-4.1.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-framework/jeesite-framework">
|
||||
<dependent-module archiveName="jeesite-framework-4.1.2-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-framework/jeesite-framework">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<dependent-module archiveName="jeesite-module-swagger-4.1.1-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-module-swagger/jeesite-module-swagger">
|
||||
<dependent-module archiveName="jeesite-module-swagger-4.1.2-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-module-swagger/jeesite-module-swagger">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<dependent-module archiveName="jeesite-module-weboffice-4.1.2-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/jeesite-module-weboffice/jeesite-module-weboffice">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<property name="java-output-path" value="/src/main/webapp/WEB-INF/classes"/>
|
||||
|
||||
@@ -505,7 +505,7 @@ CREATE TABLE js_sys_msg_inner_record
|
||||
msg_inner_id varchar(64) NOT NULL COMMENT '所属消息',
|
||||
receive_user_code varchar(64) COMMENT '接受者用户编码',
|
||||
receive_user_name varchar(100) NOT NULL COMMENT '接受者用户姓名',
|
||||
read_status char(1) NOT NULL COMMENT '读取状态(0未送达 1未读 2已读)',
|
||||
read_status char(1) NOT NULL COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '阅读时间',
|
||||
is_star char(1) COMMENT '是否标星',
|
||||
PRIMARY KEY (id)
|
||||
@@ -535,7 +535,7 @@ CREATE TABLE js_sys_msg_push
|
||||
push_return_content text COMMENT '推送返回的内容信息',
|
||||
push_status char(1) COMMENT '推送状态(0未推送 1成功 2失败)',
|
||||
push_date datetime COMMENT '推送时间',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1未读 2已读)',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '读取时间',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '消息推送表';
|
||||
@@ -564,7 +564,7 @@ CREATE TABLE js_sys_msg_pushed
|
||||
push_return_msg_id varchar(200) COMMENT '推送返回消息编号',
|
||||
push_status char(1) COMMENT '推送状态(0未推送 1成功 2失败)',
|
||||
push_date datetime COMMENT '推送时间',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1未读 2已读)',
|
||||
read_status char(1) COMMENT '读取状态(0未送达 1已读 2未读)',
|
||||
read_date datetime COMMENT '读取时间',
|
||||
PRIMARY KEY (id)
|
||||
) COMMENT = '消息已推送表';
|
||||
|
||||
@@ -6,7 +6,7 @@ set global read_only=0;
|
||||
|
||||
create user 'jeesite'@'%' identified by 'jeesite';
|
||||
|
||||
create database jeesite DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
|
||||
create database jeesite DEFAULT CHARSET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
|
||||
|
||||
grant all privileges on jeesite.* to 'jeesite'@'%' identified by 'jeesite';
|
||||
|
||||
|
||||
@@ -1268,7 +1268,7 @@ COMMENT ON COLUMN js_sys_msg_inner_record.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.msg_inner_id IS '所属消息';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_code IS '接受者用户编码';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_name IS '接受者用户姓名';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_date IS '阅读时间';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.is_star IS '是否标星';
|
||||
COMMENT ON TABLE js_sys_msg_push IS '消息推送表';
|
||||
@@ -1292,7 +1292,7 @@ COMMENT ON COLUMN js_sys_msg_push.push_return_msg_id IS '推送返回消息编
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_return_content IS '推送返回的内容信息';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_pushed IS '消息已推送表';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.id IS '编号';
|
||||
@@ -1315,7 +1315,7 @@ COMMENT ON COLUMN js_sys_msg_pushed.push_return_code IS '推送返回结果码';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_return_msg_id IS '推送返回消息编号';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_template IS '消息模板';
|
||||
COMMENT ON COLUMN js_sys_msg_template.id IS '编号';
|
||||
|
||||
@@ -8,7 +8,7 @@ grant connect,resource,create session,select any table,
|
||||
drop any table,drop any view,drop any index
|
||||
to jeesite;
|
||||
|
||||
-- 多数据源分布式事务下,需要对目标用户进行如下授权,否则会提示错误:ResourceException: Error in recovery
|
||||
-- 提示 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;
|
||||
|
||||
@@ -1268,7 +1268,7 @@ COMMENT ON COLUMN js_sys_msg_inner_record.id IS '编号';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.msg_inner_id IS '所属消息';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_code IS '接受者用户编码';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.receive_user_name IS '接受者用户姓名';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.read_date IS '阅读时间';
|
||||
COMMENT ON COLUMN js_sys_msg_inner_record.is_star IS '是否标星';
|
||||
COMMENT ON TABLE js_sys_msg_push IS '消息推送表';
|
||||
@@ -1292,7 +1292,7 @@ COMMENT ON COLUMN js_sys_msg_push.push_return_msg_id IS '推送返回消息编
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_return_content IS '推送返回的内容信息';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_push.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_pushed IS '消息已推送表';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.id IS '编号';
|
||||
@@ -1315,7 +1315,7 @@ COMMENT ON COLUMN js_sys_msg_pushed.push_return_code IS '推送返回结果码';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_return_msg_id IS '推送返回消息编号';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_status IS '推送状态(0未推送 1成功 2失败)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.push_date IS '推送时间';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1未读 2已读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_status IS '读取状态(0未送达 1已读 2未读)';
|
||||
COMMENT ON COLUMN js_sys_msg_pushed.read_date IS '读取时间';
|
||||
COMMENT ON TABLE js_sys_msg_template IS '消息模板';
|
||||
COMMENT ON COLUMN js_sys_msg_template.id IS '编号';
|
||||
|
||||
37
web/pom.xml
37
web/pom.xml
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-parent</artifactId>
|
||||
<version>4.1.1-SNAPSHOT</version>
|
||||
<version>4.1.2-SNAPSHOT</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -37,13 +37,20 @@
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 在线文档 -->
|
||||
<!-- 在线API文档 -->
|
||||
<dependency>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-module-swagger</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Office在线预览 -->
|
||||
<dependency>
|
||||
<groupId>com.jeesite</groupId>
|
||||
<artifactId>jeesite-module-weboffice</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Spring Boot -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
@@ -82,8 +89,8 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<packagingExcludes></packagingExcludes>
|
||||
<warSourceExcludes></warSourceExcludes>
|
||||
<!-- <packagingExcludes></packagingExcludes>
|
||||
<warSourceExcludes></warSourceExcludes> -->
|
||||
<webappDirectory>${project.build.directory}/${project.artifactId}</webappDirectory>
|
||||
<warName>${finalName}</warName>
|
||||
<archive>
|
||||
@@ -124,41 +131,25 @@
|
||||
</organization>
|
||||
|
||||
<repositories>
|
||||
|
||||
<repository>
|
||||
<id>aliyun-repos</id>
|
||||
<name>Aliyun Repository</name>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>sonatype-repos</id>
|
||||
<name>Sonatype Repository</name>
|
||||
<url>https://oss.sonatype.org/content/groups/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<repository>
|
||||
<id>sonatype-repos-s</id>
|
||||
<name>Sonatype Repository</name>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
<releases><enabled>false</enabled></releases>
|
||||
<snapshots><enabled>true</enabled></snapshots>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
|
||||
<pluginRepository>
|
||||
<id>aliyun-repos</id>
|
||||
<name>Aliyun Repository</name>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
</pluginRepository>
|
||||
|
||||
</pluginRepositories>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -60,7 +60,7 @@ public class TestDataController extends BaseController {
|
||||
@ResponseBody
|
||||
public Page<TestData> listData(TestData testData, HttpServletRequest request, HttpServletResponse response) {
|
||||
testData.setPage(new Page<>(request, response));
|
||||
Page<TestData> page = testDataService.findPage(testData);
|
||||
Page<TestData> page = testDataService.findPage(testData);
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
@@ -69,9 +69,6 @@ public class TestTreeController extends BaseController {
|
||||
if (StringUtils.isNotBlank(testTree.getTreeName())){
|
||||
testTree.setParentCode(null);
|
||||
}
|
||||
if (StringUtils.isNotBlank(testTree.getStatus())){
|
||||
testTree.setParentCode(null);
|
||||
}
|
||||
if (StringUtils.isNotBlank(testTree.getRemarks())){
|
||||
testTree.setParentCode(null);
|
||||
}
|
||||
|
||||
@@ -83,22 +83,24 @@ jdbc:
|
||||
# # 最大连接数
|
||||
# maxActive: 20 # 数据库连接池配置
|
||||
#
|
||||
# # 获取连接等待超时时间,单位毫秒(4.0.6+)
|
||||
# # 获取连接等待超时时间,单位毫秒(1分钟)(4.0.6+)
|
||||
# maxWait: 60000
|
||||
#
|
||||
# # 从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个。(4.0.6+)
|
||||
# # 从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个(4.0.6+)
|
||||
# testOnBorrow: false
|
||||
# testOnReturn: false
|
||||
#
|
||||
# # 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒(4.0.6+)
|
||||
# # 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒(1分钟)(4.0.6+)
|
||||
# timeBetweenEvictionRunsMillis: 60000
|
||||
#
|
||||
# # 一个连接在池中最小生存的时间,单位毫秒(4.0.6+)
|
||||
# minEvictableIdleTimeMillis: 300000
|
||||
# # 一个连接在池中最小空闲的时间,单位毫秒(20分钟)(4.0.6+)
|
||||
# minEvictableIdleTimeMillis: 1200000
|
||||
# # 一个连接在池中最大空闲的时间,单位毫秒(30分钟)(4.1.2+)
|
||||
# maxEvictableIdleTimeMillis: 1800000
|
||||
#
|
||||
# # 配置是否自动回收超时连接,超时时间,单位秒 (4.0.6+)
|
||||
# # 是否自动回收泄露的连接和超时时间,单位秒(35分钟)(4.0.6+)
|
||||
# removeAbandoned: true
|
||||
# removeAbandonedTimeout: 1800
|
||||
# removeAbandonedTimeout: 2100
|
||||
|
||||
# # 多数据源名称列表,启用方式:@MyBatisDao(dataSourceName="ds2")
|
||||
# dataSourceNames: ds2
|
||||
@@ -198,11 +200,11 @@ logging:
|
||||
# # 系统管理员角色编号(客户方管理员使用的角色)
|
||||
# corpAdminRoleCode: corpAdmin
|
||||
#
|
||||
# # 用户类型配置信息(employee员工,member会员,btype往来单位,persion个人,expert专家,...)
|
||||
# # JSON格式说明:{"用户类型":{"dao":"Dao的Bean名称","loginView":"登录视图","indexView":"主页框架面视图"}}
|
||||
# # 用户类型配置信息(employee员工,member会员,btype往来单位,persion个人,expert专家,...),JSON 格式说明如下:
|
||||
# # {"用户类型":{"dao":"Dao的Bean名称","loginView":"登录页面视图","indexView":"主框架页面视图,支持 redirect: 前缀"}}
|
||||
# userTypeMap: >
|
||||
# {
|
||||
# "employee":{"dao":"employeeDao","loginView":"","indexView":""},
|
||||
# "employee":{"dao":"employeeDao","loginView":"","indexView":"modules/sys/sysIndex"},
|
||||
# "member":{"dao":"memberDao","loginView":"","indexView":"modules/sys/sysIndexMember"},
|
||||
# "btype":{"dao":"btypeInfoDao","loginView":"","indexView":"modules/sys/sysIndexBtype"},
|
||||
# "persion":{"dao":"persionDao","loginView":"","indexView":"modules/sys/sysIndexPersion"},
|
||||
@@ -357,6 +359,9 @@ logging:
|
||||
# # 是否允许账号多地登录,如果设置为false,同一个设备类型的其它地点登录的相同账号被踢下线
|
||||
# isAllowMultiAddrLogin: true
|
||||
#
|
||||
# # 是否允许多账号多设备登录,如果设置为false,其它地点登录的相同账号全部登录设备将被踢下线
|
||||
# isAllowMultiDeviceLogin: true
|
||||
#
|
||||
# # 是否允许刷新主框架页,如果设置为false,刷新主页将导致重新登录。如安全性比较高的,如银行个人首页不允许刷新。
|
||||
# isAllowRefreshIndex: true
|
||||
#
|
||||
@@ -486,16 +491,32 @@ logging:
|
||||
# # 上传单个文件最大字节(500M),在这之上还有 > Tomcat限制 > Nginx限制,等。
|
||||
# maxFileSize: 500*1024*1024
|
||||
#
|
||||
# #设置允许上传的文件后缀
|
||||
# # 设置允许上传的文件后缀
|
||||
# imageAllowSuffixes: .gif,.bmp,.jpeg,.jpg,.ico,.png,.tif,.tiff,
|
||||
# mediaAllowSuffixes: .flv,.swf,.mkv,webm,.mid,.mov,.mp3,.mp4,.m4v,.mpc,.mpeg,.mpg,.swf,.wav,.wma,.wmv,.avi,.rm,.rmi,.rmvb,.aiff,.asf,.ogg,.ogv,
|
||||
# fileAllowSuffixes: .doc,.docx,.rtf,.xls,.xlsx,.csv,.ppt,.pptx,.pdf,.vsd,.txt,.md,.xml,.rar,.zip,7z,.tar,.tgz,.jar,.gz,.gzip,.bz2,.cab,.iso,.ipa,.apk,
|
||||
#
|
||||
# #允许上传的文件内容类型(图片、word、excel、ppt)防止修改后缀恶意上传文件(默认不启用验证)
|
||||
# # 允许上传的文件内容类型(图片、word、excel、ppt)防止修改后缀恶意上传文件(默认不启用验证)
|
||||
## allowContentTypes: image/jpeg,image/gif,image/bmp,image/png,image/x-png,
|
||||
## application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,
|
||||
## application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
|
||||
## application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
#
|
||||
# # 是否用文件流方式下载(支持断点续传)
|
||||
# isFileStreamDown: true
|
||||
|
||||
#视频转码
|
||||
#video:
|
||||
#
|
||||
# # 视频格式转换 ffmpeg.exe 所放的路径
|
||||
# ffmpegFile: d:/tools/video/ffmpeg-4.9/bin/ffmpeg.exe
|
||||
## ffmpegFile: d:/tools/video/libav-10.6-win64/bin/avconv.exe
|
||||
#
|
||||
# # 视频格式转换 mencoder.exe 所放的路径
|
||||
# mencoderFile: d:/tools/video/mencoder-4.9/mencoder.exe
|
||||
#
|
||||
# # 将mp4视频的元数据信息转到视频第一帧
|
||||
# qtFaststartFile: d:/tools/video/qt-faststart/qt-faststart.exe
|
||||
|
||||
#======================================#
|
||||
#========== Message settings ==========#
|
||||
@@ -530,22 +551,6 @@ logging:
|
||||
# prefix: 【JeeSite】
|
||||
# suffix: ~
|
||||
|
||||
#======================================#
|
||||
#========== Video settings ============#
|
||||
#======================================#
|
||||
|
||||
#video:
|
||||
#
|
||||
# # 视频格式转换 ffmpeg.exe 所放的路径
|
||||
# ffmpegFile: d:/tools/video/ffmpeg-4.9/bin/ffmpeg.exe
|
||||
## ffmpegFile: d:/tools/video/libav-10.6-win64/bin/avconv.exe
|
||||
#
|
||||
# # 视频格式转换 mencoder.exe 所放的路径
|
||||
# mencoderFile: d:/tools/video/mencoder-4.9/mencoder.exe
|
||||
#
|
||||
# # 将mp4视频的元数据信息转到视频第一帧
|
||||
# qtFaststartFile: d:/tools/video/qt-faststart/qt-faststart.exe
|
||||
|
||||
#======================================#
|
||||
#========== Project settings ==========#
|
||||
#======================================#
|
||||
|
||||
@@ -5,9 +5,12 @@
|
||||
<property name="log.path" value="${logPath:-${java.io.tmpdir:-.}}/logs" />
|
||||
|
||||
<!-- Console log output -->
|
||||
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
|
||||
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
|
||||
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{MM-dd HH:mm:ss.SSS} %-5level [%logger{50}] - %msg%n</pattern>
|
||||
<pattern>%clr(%d{MM-dd HH:mm:ss.SSS}) %-5level %clr([%logger{50}]) - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<span class="required hide">*</span> ${text('日期时间')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:input path="testDatetime" readonly="true" maxlength="20" class="form-control Wdate"
|
||||
dataFormat="datetime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});"/>
|
||||
dataFormat="datetime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:true});"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -154,7 +154,7 @@
|
||||
<label class="control-label col-sm-2">${text('图片上传')}:</label>
|
||||
<div class="col-sm-10">
|
||||
<#form:fileupload id="uploadImage" bizKey="${testData.id}" bizType="testData_image"
|
||||
uploadType="image" class="" readonly="false"/>
|
||||
uploadType="image" class="" readonly="false" preview="weboffice"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -165,7 +165,7 @@
|
||||
<label class="control-label col-sm-2">${text('附件上传')}:</label>
|
||||
<div class="col-sm-10">
|
||||
<#form:fileupload id="uploadFile" bizKey="${testData.id}" bizType="testData_file"
|
||||
uploadType="all" class="" readonly="false"/>
|
||||
uploadType="all" class="" readonly="false" preview="weboffice"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -204,11 +204,11 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
columnModel: [
|
||||
{header:'状态', name:'status', editable:true, hidden:true},
|
||||
{header:'主键', name:'id', editable:true, hidden:true},
|
||||
{header:'${text('排序号')}', name:'testSort', width:150, editable:true, edittype:'text', editoptions:{'maxlength':'11', 'class':'form-control digits'}},
|
||||
{header:'${text('父表主键')}', name:'testData.id', editable:true, hidden:true},
|
||||
{header:'${text('单行文本')}', name:'testInput', width:150, editable:true, edittype:'text', editoptions:{'maxlength':'200', 'class':'form-control'}},
|
||||
{header:'${text('多行文本')}', name:'testTextarea', width:150, editable:true, edittype:'textarea', editoptions:{'maxlength':'200', 'class':'form-control', 'rows':'1'}},
|
||||
{header:'${text('下拉框')}', name:'testSelect', width:100,
|
||||
{header:'${text("排序号")}', name:'testSort', width:150, editable:true, edittype:'text', editoptions:{'maxlength':'11', 'class':'form-control digits'}},
|
||||
{header:'${text("父表主键")}', name:'testData.id', editable:true, hidden:true},
|
||||
{header:'${text("单行文本")}', name:'testInput', width:150, editable:true, edittype:'text', editoptions:{'maxlength':'200', 'class':'form-control'}},
|
||||
{header:'${text("多行文本")}', name:'testTextarea', width:150, editable:true, edittype:'textarea', editoptions:{'maxlength':'200', 'class':'form-control', 'rows':'1'}},
|
||||
{header:'${text("下拉框")}', name:'testSelect', width:100,
|
||||
editable:true, edittype:'select', editoptions:{'class':'form-control',
|
||||
items: $.merge([{dictLabel:' ',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
|
||||
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
|
||||
@@ -216,7 +216,7 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('下拉多选')}', name:'testSelectMultiple', width:100,
|
||||
{header:'${text("下拉多选")}', name:'testSelectMultiple', width:100,
|
||||
editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control',
|
||||
items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
|
||||
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
|
||||
@@ -224,7 +224,7 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('单选框')}', name:'testRadio', width:100,
|
||||
{header:'${text("单选框")}', name:'testRadio', width:100,
|
||||
editable:true, edittype:'select', editoptions:{'class':'form-control',
|
||||
items: $.merge([{dictLabel:' ',dictValue:''}], ${@DictUtils.getDictListJson('sys_menu_type')}),
|
||||
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
|
||||
@@ -232,7 +232,7 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('复选框')}', name:'testCheckbox', width:100,
|
||||
{header:'${text("复选框")}', name:'testCheckbox', width:100,
|
||||
editable:true, edittype:'select', editoptions:{multiple:true, 'class':'form-control',
|
||||
items: $.merge([], ${@DictUtils.getDictListJson('sys_menu_type')}),
|
||||
itemLabel: 'dictLabel', itemValue: 'dictValue', dataInit: function(element){
|
||||
@@ -240,23 +240,23 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('日期选择')}', name:'testDate', width:150,
|
||||
{header:'${text("日期选择")}', name:'testDate', width:150,
|
||||
formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s',newformat:'Y-m-d'},
|
||||
editable:true, edittype:'text', editoptions:{'class':'form-control Wdate', 'readonly':'true',
|
||||
dataInit: function(element){ $(element).on('focus', function(){
|
||||
WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});
|
||||
WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:true});
|
||||
});
|
||||
}}
|
||||
},
|
||||
{header:'${text('日期时间')}', name:'testDatetime', width:150,
|
||||
{header:'${text("日期时间")}', name:'testDatetime', width:150,
|
||||
formatter:'date', formatoptions:{srcformat:'Y-m-d H:i:s',newformat:'Y-m-d H:i:s'},
|
||||
editable:true, edittype:'text', editoptions:{'class':'form-control Wdate', 'readonly':'true',
|
||||
dataInit: function(element){ $(element).on('focus', function(){
|
||||
WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});
|
||||
WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:true});
|
||||
});
|
||||
}}
|
||||
},
|
||||
{header:'${text('用户选择')}', name:'testUser', width:150,
|
||||
{header:'${text("用户选择")}', name:'testUser', width:150,
|
||||
formatter: function(val, obj, row, act){
|
||||
return js.val(row, 'testUser.userCode')+'|'+js.val(row, 'testUser.userName');
|
||||
}, editable: true, edittype: "custom", editoptions: {
|
||||
@@ -270,7 +270,7 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('机构选择')}', name:'testOffice', width:150,
|
||||
{header:'${text("机构选择")}', name:'testOffice', width:150,
|
||||
formatter: function(val, obj, row, act){
|
||||
return js.val(row, 'testOffice.officeCode')+'|'+js.val(row, 'testOffice.officeName');
|
||||
}, editable: true, edittype: "custom", editoptions: {
|
||||
@@ -284,7 +284,7 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('区域选择')}', name:'testAreaCode', width:150,
|
||||
{header:'${text("区域选择")}', name:'testAreaCode', width:150,
|
||||
formatter: function(val, obj, row, act){
|
||||
return js.val(row, 'testAreaCode')+'|'+js.val(row, 'testAreaName');
|
||||
}, editable: true, edittype: "custom", editoptions: {
|
||||
@@ -298,12 +298,12 @@ $("#testDataChildDataGrid").dataGrid({
|
||||
}
|
||||
}
|
||||
},
|
||||
{header:'${text('操作')}', name:'actions', width:80, sortable:false, fixed:true, formatter: function(val, obj, row, act){
|
||||
{header:'${text("操作")}', name:'actions', width:80, sortable:false, fixed:true, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
if (val == 'new'){
|
||||
actions.push('<a href="#" onclick="js.confirm(\'${text('你确认要删除这条数据吗?')}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'delRowData\',\''+obj.rowId+'\')});return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
}else{
|
||||
actions.push('<a href="#" onclick="js.confirm(\'${text('你确认要删除这条数据吗?')}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'setRowData\',\''+obj.rowId+'\',null,{display:\'none\'})});$(\'#'+obj.rowId+'_status\').val(\''+Global.STATUS_DELETE+'\');return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="#" onclick="js.confirm(\'${text("你确认要删除这条数据吗?")}\', function(){$(\'#testDataChildDataGrid\').dataGrid(\'setRowData\',\''+obj.rowId+'\',null,{display:\'none\'})});$(\'#'+obj.rowId+'_status\').val(\''+Global.STATUS_DELETE+'\');return false;"><i class="fa fa-trash-o"></i></a> ');
|
||||
}
|
||||
return actions.join('');
|
||||
}, editoptions: {defaultValue: 'new'}}
|
||||
|
||||
@@ -118,56 +118,56 @@
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('单行文本')}', name:'testInput', index:'a.test_input', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/test/testData/form?id='+row.id+'" class="btnList" data-title="${text('编辑数据')}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('多行文本')}', name:'testTextarea', index:'a.test_textarea', width:150, align:"left"},
|
||||
{header:'${text('下拉框')}', name:'testSelect', index:'a.test_select', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('下拉多选')}', name:'testSelectMultiple', index:'a.test_select_multiple', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('单选框')}', name:'testRadio', index:'a.test_radio', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('复选框')}', name:'testCheckbox', index:'a.test_checkbox', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('日期选择')}', name:'testDate', index:'a.test_date', width:150, align:"center"},
|
||||
{header:'${text('日期时间')}', name:'testDatetime', index:'a.test_datetime', width:150, align:"center"},
|
||||
{header:'${text('用户选择')}', name:'testUser.userName', index:'a.test_user_code', width:150, align:"center"},
|
||||
{header:'${text('机构选择')}', name:'testOffice.officeName', index:'a.test_office_code', width:150, align:"center"},
|
||||
{header:'${text('区域选择')}', name:'testAreaName', index:'a.test_area_code', width:150, align:"center"},
|
||||
{header:'${text('区域名称')}', name:'testAreaName', index:'a.test_area_name', width:150, align:"left"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('创建时间')}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text('备注信息')}', name:'remarks', index:'a.remarks', width:150, align:"left"},
|
||||
{header:'${text('操作')}', name:'actions', width:200, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('test:testData:edit')){ %>
|
||||
actions.push('<a href="${ctx}/test/testData/form?id='+row.id+'" class="btnList" title="${text('编辑数据')}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/test/testData/disable?id='+row.id+'" class="btnList" title="${text('停用数据')}" data-confirm="${text('确认要停用该数据吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/test/testData/enable?id='+row.id+'" class="btnList" title="${text('启用数据')}" data-confirm="${text('确认要启用该数据吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/test/testData/delete?id='+row.id+'" class="btnList" title="${text('删除数据')}" data-confirm="${text('确认要删除该数据吗?')}"><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
// 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text("单行文本")}', name:'testInput', index:'a.test_input', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '<a href="${ctx}/test/testData/form?id='+row.id+'" class="btnList" data-title="${text("编辑数据")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text("多行文本")}', name:'testTextarea', index:'a.test_textarea', width:150, align:"left"},
|
||||
{header:'${text("下拉框")}', name:'testSelect', index:'a.test_select', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("下拉多选")}', name:'testSelectMultiple', index:'a.test_select_multiple', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("单选框")}', name:'testRadio', index:'a.test_radio', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("复选框")}', name:'testCheckbox', index:'a.test_checkbox', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("日期选择")}', name:'testDate', index:'a.test_date', width:150, align:"center"},
|
||||
{header:'${text("日期时间")}', name:'testDatetime', index:'a.test_datetime', width:150, align:"center"},
|
||||
{header:'${text("用户选择")}', name:'testUser.userName', index:'a.test_user_code', width:150, align:"center"},
|
||||
{header:'${text("机构选择")}', name:'testOffice.officeName', index:'a.test_office_code', width:150, align:"center"},
|
||||
{header:'${text("区域选择")}', name:'testAreaName', index:'a.test_area_code', width:150, align:"center"},
|
||||
{header:'${text("区域名称")}', name:'testAreaName', index:'a.test_area_name', width:150, align:"left"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("创建时间")}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text("备注信息")}', name:'remarks', index:'a.remarks', width:150, align:"left"},
|
||||
{header:'${text("操作")}', name:'actions', width:200, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('test:testData:edit')){ %>
|
||||
actions.push('<a href="${ctx}/test/testData/form?id='+row.id+'" class="btnList" title="${text("编辑数据")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/test/testData/disable?id='+row.id+'" class="btnList" title="${text("停用数据")}" data-confirm="${text("确认要停用该数据吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/test/testData/enable?id='+row.id+'" class="btnList" title="${text("启用数据")}" data-confirm="${text("确认要启用该数据吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/test/testData/delete?id='+row.id+'" class="btnList" title="${text("删除数据")}" data-confirm="${text("确认要删除该数据吗?")}"><i class="fa fa-trash-o"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
// 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -24,41 +24,38 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required ">*</span> ${text('节点编码')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:hidden path="isNewRecord"/>
|
||||
<#form:input path="treeCode" maxlength="64" readonly="${!testTree.isNewRecord}" class="form-control required abc"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required ">*</span> ${text('节点编码')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
|
||||
<#form:hidden path="isNewRecord"/>
|
||||
<#form:input path="treeCode" maxlength="64" readonly="${!testTree.isNewRecord}" class="form-control required abc"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required ">*</span> ${text('本级排序号')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:input path="treeSort" class="form-control required digits"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required ">*</span> ${text('节点名称')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:input path="treeName" maxlength="200" class="form-control required"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required ">*</span> ${text('节点名称')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:input path="treeName" maxlength="200" class="form-control required"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-4" title="">
|
||||
<span class="required ">*</span> ${text('本级排序号')}:<i class="fa icon-question hide"></i></label>
|
||||
<div class="col-sm-8">
|
||||
<#form:input path="treeSort" class="form-control required digits"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2" title="">
|
||||
@@ -72,7 +69,7 @@
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2">图片上传:</label>
|
||||
<label class="control-label col-sm-2">${text('图片上传')}:</label>
|
||||
<div class="col-sm-10">
|
||||
<#form:fileupload id="uploadImage" bizKey="${testTree.id}" bizType="testTree_image"
|
||||
uploadType="image" class="" readonly="false"/>
|
||||
@@ -83,7 +80,7 @@
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2">附件上传:</label>
|
||||
<label class="control-label col-sm-2">${text('附件上传')}:</label>
|
||||
<div class="col-sm-10">
|
||||
<#form:fileupload id="uploadFile" bizKey="${testTree.id}" bizType="testTree_file"
|
||||
uploadType="all" class="" readonly="false"/>
|
||||
|
||||
@@ -11,8 +11,9 @@
|
||||
<a href="#" class="btn btn-default" id="btnExpandTreeNode" title="${text('展开一级')}"><i class="fa fa-angle-double-down"></i> ${text('展开')}</a>
|
||||
<a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="${text('折叠全部')}"><i class="fa fa-angle-double-up"></i> ${text('折叠')}</a>
|
||||
<% if(hasPermi('test:testTree:edit')){ %>
|
||||
<a href="${ctx}/test/testTree/form" class="btn btn-default btnTool" title="${text('新增数据')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<% } %>
|
||||
<a href="${ctx}/test/testTree/form" class="btn btn-default btnTool" title="${text('新增数据')}"><i class="fa fa-plus"></i> ${text('新增')}</a>
|
||||
<a href="#" class="btn btn-default" id="btnFixTreeData" title="修复树表数据(包含字段:parentCodes、treeLeaf、treeLevel、treeSorts、treeNames)"><i class="fa fa-refresh"></i> 修复</a>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
@@ -24,18 +25,18 @@
|
||||
<#form:input path="treeName" maxlength="200" class="form-control width-120"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('状态')}:</label>
|
||||
<div class="control-inline width-120">
|
||||
<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('备注信息')}:</label>
|
||||
<div class="control-inline">
|
||||
<#form:input path="remarks" maxlength="500" class="form-control width-120"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label">${text('状态')}:</label>
|
||||
<div class="control-inline width-120">
|
||||
<#form:select path="status" dictType="sys_search_status" blankOption="true" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary btn-sm">${text('查询')}</button>
|
||||
<button type="reset" class="btn btn-default btn-sm">${text('重置')}</button>
|
||||
@@ -46,42 +47,50 @@
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text('节点名称')}', name:'treeName', index:'a.tree_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.treeCode+' ) '+'<a href="${ctx}/test/testTree/form?treeCode='+row.treeCode+'" class="btnList" data-title="${text('编辑数据')}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text('本级排序号')}', name:'treeSort', index:'a.tree_sort', width:150, align:"center"},
|
||||
{header:'${text('节点名称')}', name:'treeName', index:'a.tree_name', width:150, align:"left"},
|
||||
{header:'${text('状态')}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text('未知')}', true);
|
||||
}},
|
||||
{header:'${text('创建时间')}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text('备注信息')}', name:'remarks', index:'a.remarks', width:150, align:"left"},
|
||||
{header:'${text('操作')}', name:'actions', width:120, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('test:testTree:edit')){ %>
|
||||
actions.push('<a href="${ctx}/test/testTree/form?treeCode='+row.treeCode+'" class="btnList" title="${text('编辑数据')}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/test/testTree/disable?treeCode='+row.treeCode+'" class="btnList" title="${text('停用数据')}" data-confirm="${text('确认要停用该数据吗?')}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/test/testTree/enable?treeCode='+row.treeCode+'" class="btnList" title="${text('启用数据')}" data-confirm="${text('确认要启用该数据吗?')}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/test/testTree/delete?treeCode='+row.treeCode+'" class="btnList" title="${text('删除数据')}" data-confirm="${text('确认要删除该数据及所有子数据吗?')}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/test/testTree/form?parentCode='+row.id+'" class="btnList" title="${text('新增下级数据')}"><i class="fa fa-plus-square"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
treeGrid: true, // 启用树结构表格
|
||||
defaultExpandLevel: 0, // 默认展开的层次
|
||||
expandNodeClearPostData: 'treeName,status,remarks,', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据) // 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
<script>
|
||||
// 初始化DataGrid对象
|
||||
$('#dataGrid').dataGrid({
|
||||
searchForm: $("#searchForm"),
|
||||
columnModel: [
|
||||
{header:'${text("节点名称")}', name:'treeName', index:'a.tree_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){
|
||||
return '( '+row.treeCode+' ) '+'<a href="${ctx}/test/testTree/form?treeCode='+row.treeCode+'" class="btnList" data-title="${text("编辑数据")}">'+(val||row.id)+'</a>';
|
||||
}},
|
||||
{header:'${text("本级排序号")}', name:'treeSort', index:'a.tree_sort', width:150, align:"center"},
|
||||
{header:'${text("节点名称")}', name:'treeName', index:'a.tree_name', width:150, align:"left"},
|
||||
{header:'${text("状态")}', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){
|
||||
return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '${text("未知")}', true);
|
||||
}},
|
||||
{header:'${text("创建时间")}', name:'createDate', index:'a.create_date', width:150, align:"center"},
|
||||
{header:'${text("备注信息")}', name:'remarks', index:'a.remarks', width:150, align:"left"},
|
||||
{header:'${text("操作")}', name:'actions', width:120, sortable:false, title:false, formatter: function(val, obj, row, act){
|
||||
var actions = [];
|
||||
<% if(hasPermi('test:testTree:edit')){ %>
|
||||
actions.push('<a href="${ctx}/test/testTree/form?treeCode='+row.treeCode+'" class="btnList" title="${text("编辑数据")}"><i class="fa fa-pencil"></i></a> ');
|
||||
if (row.status == Global.STATUS_NORMAL){
|
||||
actions.push('<a href="${ctx}/test/testTree/disable?treeCode='+row.treeCode+'" class="btnList" title="${text("停用数据")}" data-confirm="${text("确认要停用该数据吗?")}"><i class="glyphicon glyphicon-ban-circle"></i></a> ');
|
||||
}
|
||||
if (row.status == Global.STATUS_DISABLE){
|
||||
actions.push('<a href="${ctx}/test/testTree/enable?treeCode='+row.treeCode+'" class="btnList" title="${text("启用数据")}" data-confirm="${text("确认要启用该数据吗?")}"><i class="glyphicon glyphicon-ok-circle"></i></a> ');
|
||||
}
|
||||
actions.push('<a href="${ctx}/test/testTree/delete?treeCode='+row.treeCode+'" class="btnList" title="${text("删除数据")}" data-confirm="${text("确认要删除该数据及所有子数据吗?")}" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a> ');
|
||||
actions.push('<a href="${ctx}/test/testTree/form?parentCode='+row.id+'" class="btnList" title="${text("新增下级数据")}"><i class="fa fa-plus-square"></i></a> ');
|
||||
<% } %>
|
||||
return actions.join('');
|
||||
}}
|
||||
],
|
||||
treeGrid: true, // 启用树结构表格
|
||||
defaultExpandLevel: 0, // 默认展开的层次
|
||||
expandNodeClearPostData: 'treeName,remarks,', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据) // 加载成功后执行事件
|
||||
ajaxSuccess: function(data){
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// 修复树表数据(包含字段:parentCodes、treeLeaf、treeLevel、treeSorts、treeNames)
|
||||
$("#btnFixTreeData").click(function(){
|
||||
js.ajaxSubmit("${ctx}/test/testTree/fixTreeData", function(data){
|
||||
js.showMessage(data.message);
|
||||
});
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
@@ -24,7 +24,7 @@ public class InitCoreData extends com.jeesite.modules.sys.db.InitCoreData {
|
||||
public void initCoreData() throws Exception{
|
||||
createTable();
|
||||
initLog();
|
||||
initArea();//("3700","3701","3702");
|
||||
initArea("3700","3701","3702");
|
||||
initConfig();
|
||||
initModule();
|
||||
initDict();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.jeesite.test;
|
||||
|
||||
public class MainTest {
|
||||
public class Test {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
19
web/src/test/java/logback.xml
Normal file
19
web/src/test/java/logback.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration debug="false" scan="false">
|
||||
|
||||
<!-- Console log output -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} %-5level [%logger{50}] - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
|
||||
<root level="WARN">
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
<!-- Framework level setting -->
|
||||
<include resource="config/logger-core.xml"/>
|
||||
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user